4.2.1 Client Request for a Rules Table

A complete ROP request buffer to request a rules table would appear as follows.

 0000: 3f 00 00 01 40

RopId: 0x3F (RopGetRulesTable ([MS-OXCROPS] section 2.2.11.2))

LogonId: 0x00

InputHandleIndex: 0x00

OutputHandleIndex: 0x01

TableFlags: 0x40 (specifying a Unicode table)

The client can also simultaneously send other ROP request buffers (in the same RPC) to format the table or to get rows from it. These further requests can reference the OutputHandleIndex field (1 in this example) to specify the table to act on. For more information, see [MS-OXCROPS] and [MS-OXCDATA].

In this case, to format the table and read its rows, the client also sends a RopSetColumns ROP request ([MS-OXCROPS] section 2.2.5.1):

  
 0000: 12 00 01 00 03 00 14 00-74 66 02 01 84 66 1f 00
 0010: 82 66

RopId: 0x12 (RopSetColumns)

LogonId: 0x00

InputHandleIndex: 0x01

WantAsync: 0x00 (Wait)

PropertyTagCount: 3

PropertyTag1: 0x66740014 (PidTagRuleId ([MS-OXPROPS] section 2.940))

PropertyTag2: 0x66840102 (PidTagRuleProviderData (section 2.2.1.3.1.8))

PropertyTag3: 0x6682001F (PidTagRuleName ([MS-OXPROPS] section 2.950))

The client also sends a RopQueryRows ROP request ([MS-OXCROPS] section 2.2.5.4) to gather rows from the table.

  
 0000: 15 00 01 00 01 32 00

RopId: 0x15 (RopQueryRows)

LogonId: 0

InputHandleIndex: 1

WantCurrentRow: "FALSE" (Advance)

WantForwardRead: "TRUE" (forward reading)

RowCount: 50

In this example, the handle array at the end of the RPC contains the following bytes.

  
 0000: 23 02 00 00 ff ff ff ff

HandleIndex 0: 0x00000223

HandleIndex 1: 0xFFFFFFFF

Note that the HandleIndex[0] field is referenced only in the RopGetRulesTable ROP request – it refers to a table handle previously returned by the RopOpenFolder ROP ([MS-OXCROPS] section 2.2.4.1) (the Inbox, for example).The HandleIndex[1] field is referenced by the RopGetRulesTable (as the new rules table index), the RopSetColumns (as the referenced table) and RopQueryRows (as the referenced table) ROP calls. The actual server handle does not yet exist, so the client fills in 0xFFFFFFFF temporarily.

Show: