2.2.7.1 IO Control Completion (IOCONTROL_COMPLETION)

The IOCONTROL_COMPLETION request is sent from the client to the server as the final result of an IO Control request or internal IO Control request.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

Header (variable)

...

RequestId

HResult

Information

OutputBufferSize

OutputBuffer (variable)

...

Header (variable): The SHARED_MSG_HEADER (as specified in section 2.2.1). The InterfaceId field MUST match the value sent previously in the RequestCompletion field of the REGISTER_REQUEST_CALLBACK message. The Mask field MUST be set to STREAM_ID_PROXY. The FunctionId field MUST be set to IOCONTROL_COMPLETION (0x00000100).

RequestId (4 bytes): A 32-bit unsigned integer. This field MUST match the value sent previously in the RequestId field of the IO_CONTROL message, as specified in section 2.2.6.3.

HResult (4 bytes): A 32-bit unsigned integer that indicates the HRESULT of the operation.

Information (4 bytes): A 32-bit unsigned integer. The number of bytes of data to be transferred by the request.

OutputBufferSize (4 bytes): A 32-bit unsigned integer. The size, in bytes, of the OutputBuffer field. The value of this field MUST not exceed the value of OutputBufferSize field from IO_CONTROL message. If the HResult field indicates success, this field and the Information field MUST be equal. If the HResult field is equal to HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) then this field is set to the value of OutputBufferSize from IO_CONTROL message and the Information field MUST indicate the expected size of the OutputBuffer field. For any other case this field MUST be set to 0 and the value of the Information field MUST be ignored.

OutputBuffer (variable): A data buffer that results from processing the request.