mov esi, CmdData ; address of BCB or IOR mov edi, DevData ; address of BDD or DCB VxDCall IOS_SendCommand
Directs the IOS to carry out a command specified by a BlockDev Command Block (BCB) or an I/O Request (IOR), depending on a given version flag.
CmdData
Address of a IOR structure if the IOR_flags member is set to IORF_VERSION_002. Otherwise, this parameter is the address of a BlockDev_Command_Block structure.
DevData
Address of a DCB_bdd structure (member of a DCB if the IOR_flags member is set to IORF_VERSION_002. Otherwise, this parameter is the address of a BlockDev_Device_Descriptor structure.
Use of BCBs is provided for backward BlockDev client compatibility.
When passing command data in an IOR structure, the client or driver must set the IOR_vol_designtr, IOR_func, IOR_flags, and possibly IOR_callback members prior to calling the service. If the IORF_SYNC_COMMAND bit is not set, the IOS returns immediately but continues to carry out the I/O request asynchronously. When an asynchronous operation completes or terminates, the IOS notifies the requestor by calling the specified callback procedure (address in the IOR_callback member) and passing on the stack the value contained in IOR_req_req_handle member.
If the IORF_SYNC_COMMAND flag is set, the IOS waits until the I/O request completes or terminates before returning control to the requestor. In this case, the specified callback procedure is never called.
If the IORF_DOUBLE_BUFFER flag is set, the IOS transfers all data through buffers that are manged by the IOS. Clients typically use this flag with I/O requests for which direct DMA to the client's buffer is not possible. This flag may be used with read or write requests only. If the IORF_DOUBLE_BUFFER flag is set, the IOR_sgd_lin_phys member must be set to the 32-bit linear address of an array of scatter/gather descriptors, and the buffer address in each scatter/gather descriptor must also be a 32-bit linear address.
See also DCB, IOR