Processing a ROP Input Buffer

The layout of the ROP input buffer is specified in section 2.2.1.

When processing a ROP input buffer received from a client, the server MUST process the ROP requests in the order they are specified in the RopsList field and MUST NOT process more than one ROP input buffer concurrently for a connection. The ROP responses in the ROP output buffer MUST be in the same order in which they were processed.

If the server is unable to parse the ROP requests in the ROP input buffer, the RPC MUST fail by returning 0x000004B6.

During processing of a ROP request, the server resolves the Server object handle table index to a Server object. If the index is invalid, the server SHOULD<23> fail the ROP with the ReturnValue field set to 0x000004B9. Any index used for input is converted into the corresponding Server object by looking up the handle in the Server object handle table and then looking up the Server object in the Server Object Map ADM element associated with the logon for the ROP request. If any lookup in either the Logon Map ADM element or the Server Object Map ADM element fails, the server SHOULD<24> fill in a failure ROP response with a nonzero return value.

After successful processing of a ROP request that created a Server object, the server MUST assign an unused Server object handle to the object and record the mapping in the Server Object Map ADM element for the logon associated with the ROP. The handle assigned is then set in the Server object handle table at the location specified by the output index in the ROP request and can be used by subsequent ROP requests in the same ROP input buffer.

Because the Server object handle value 0xFFFFFFFF is used to initialize unused entries of a Server object handle table, a server MUST NOT assign that value to a created Server object.