IOR

#include <ior.h>

typedef struct _IOR { 
    ULONG  IOR_next;            // client link; see below
    USHORT IOR_func;            // function; see below
    USHORT IOR_status;          // request status; see below
    ULONG  IOR_flags;           // request flags; see below
    CMDCPLT IOR_callback;       // address of callback; see below
    ULONG  IOR_start_addr[2];   // starting address; see below
    ULONG  IOR_xfer_count;      // # of sectors/bytes; see below
    ULONG  IOR_buffer_ptr;      // client buffer; see below
    ULONG  IOR_private_client;  // BlockDev/IOS client reserved
    ULONG  IOR_private_IOS;     // reserved space for IOS
    ULONG  IOR_private_port;    // private area for port driver
    union  urequestor_usage _ureq;  // requestor usage; see below
    ULONG  IOR_req_req_handle;  // request handle; see below
    ULONG  IOR_req_vol_handle;  // media handle; see below
    ULONG  IOR_sgd_lin_phys;    // first physical SGD; see below
    UCHAR  IOR_num_sgds;        // number of physical SGDs
    UCHAR  IOR_vol_designtr;    // drive letter; see below
    USHORT IOR_ios_private_1;   // reserved by IOS to force alignment
    ULONG  IOR_reserved_2[2];   // reserved for internal use
} IOR, *PIOR;
 

Contains information about an I/O request.

IOR_next
Client link for BCBs. Must be zero if IOR_flags is set to IORF_VERSION_002.
IOR_func
I/O request function. Can be one of these values:
IOR_READ Reads the number of sectors/bytes as specified in IOR_xfer_count.
IOR_WRITE Writes the number of sectors/bytes as specified in IOR_xfer_count.
IOR_VERIFY Verifies the number of sectors/bytes as specified in IOR_xfer_count.
IOR_CANCEL NOT SUPPORTED. Cancels the specified IOR.
IOR_WRITEV Writes and verifies the number of sectors/bytes as specified in IOR_xfer_count. Some hardware (IDE, for example) does not support this function.
IOR_MEDIA_CHECK Obsolete. Use IOR_MEDIA_CHECK_RESET instead. (Checks to see if media has changed, and returns status in IOR_status.)
IOR_MEDIA_CHECK_RESET Checks to see if media has changed, and returns status in IOR_status.
IOR_LOAD_MEDIA Performs a LOAD MEDIA operation on removable drives.
IOR_EJECT_MEDIA Performs an EJECT MEDIA operation on removable drives. For disk and CD-ROM devices, applications are queried before eject, and the lock count is checked for zero. If one of these checks fails, the user is queried to see if he wants to proceed.
IOR_LOCK_MEDIA Performs a LOCK MEDIA operation on removable drives. LOCK and UNLOCK MEDIA calls must be synchronized, as a depth counter is maintained by the IOS.
IOR_UNLOCK_MEDIA Performs an UNLOCK MEDIA operation on removable drives. LOCK and UNLOCK MEDIA calls must be synchronized, as a depth counter is maintained by IOS. UNLOCK MEDIA is delayed by about 5 seconds.
IOR_REQUEST_SENSE Performs REQUEST SENSE operation on removable drives. Currently supported for SCSI devices only.
IOR_COMPUTE_GEOM Results in a reexamination of volume and device characteristics. When this command is received, each IOS layer assumes the device has changed, and performs whatever initialization required. For example, the disk TSD will reexamine the partitions of a device.
IOR_GEN_IOCTL Function permits device-specific IOCTLs to be issued to IOS drivers. Standard 16-bit, MS-DOS IOCTLs (INT 21h Function 44xx) are supported, but 32-bit IOCTLs are not yet defined. For 16-bit IOCTLs, IOR_flags is set to IORF_16BIT_IOCTL and members of sdeffsd_req_usage structure in _ureq member are defined below. Note that macros are defined that provide an alias reference to these members. The macro names are equivalent to the member names listed below, with the leading underscore omitted. For example, _ureq.sdeffsd_req_usage._IOR_ioctl_drive can be referenced with the macro IOR_ioctl_drive.

           _IOR_ioctl_drive Input. 1-based drive number or device handle (from BX register)
           _IOR_ioctl_function Input. Function number (from AX register)
           _IOR_ioctl_control_param Input. Function parameter zero-extended to 32 bits (from CX register)
           _IOR_ioctl_buffer_ptr Input. Address of buffer, mapped to flat address (from DS:DX register)
           _IOR_ioctl_client_params Input. Address of additional parameters passed in from the caller. The IORF_16BIT_IOCTL flag must be used to determine the structure type. If it is a 16-bit IOCTL, the pointer will be to the CLIENT_REGS structure.
           _IOR_ioctl_return Output. Return value to be mapped to the IOCTL caller upon exit.
           _IOR_ioctl_buffer_length Output. Size of buffer pointed to by _IOR_ioctl_buffer_ptr. Not used by INT 21h Function 440Dh IOCTL calls.

IOR_FORMAT Allows issuance of a low level format packet as defined in the INT 13h specification. The IOR_format_address_field (same as IOR_sgd_lin_phys) member contains the low level sector map. See the IOP_format_* members of the IOP structure for additional information.
IOR_SCSI_PASS_THROUGH Each layer passes this request down with modification to the SCSI port driver. The IOR must contain a pointer to a valid SRB. Also, the EBX register must point to the BDD portion of the DCB when IOS_SendCommand is called with a passthrough request.
IOR_CLEAR_QUEUE Callback of request; indicates all requests issued prior to this request have been completed.
IOR_DOS_RESET Issued in response to an INT 13h reset by the INT 13h VxD. Currently used only by and for the IOS floppy driver.
IOR_SCSI_REQUEST A generic function that indicates the request is for SCSI. The SRB member in the IOR must be valid. Normally used by IOS layers to send internal requests to SCSI devices.
IOR_SET_WRITE_STATUS Results in the correct setting of DCB_DEV_WRITABLE flag in the DCB if SUCCESS status is returned. Currently only supported by the IOS floppy driver. The IOS floppy driver must set or clear the DCB_DEV_WRITABLE bit in the physical DCB, and associated logical DCBs as applicable.
IOR_RESTART_QUEUE A placeholder function that results in restarting of the queue provided by the IOS queuing services. Has no other effect. Should be sent after the DCB_QUEUE_FREEZE field has been decremented to zero.
IOR_ABORT_QUEUE Causes each layer to call back each queued request with status of IORS_CANCELED.
IOR_SPIN_DOWN Causes the specified drive to be spun down.
IOR_SPIN_UP Causes the specified drive to be spun up.
IOR_FLUSH_DRIVE Causes layer drivers to flush out dirty data. This is a synchronous function and should not be called at event/interrupt time.
IOR_FLUSH_DRIVE_AND_DISCARD Causes layer drivers to flush out dirty data and then discard cached data. This is a synchronous function and should not be called at event/interrupt time.
IOR_FSD_EXT Sends private command from an IOS client to the FSD extension layer (DRP_FSD_EXT_1 or DRP_FSD_EXT_2) such as a Compressed Volume Manager (CVM). This call is similar in intent and usage to IOR_GEN_IOCTL; however, it can be used in the swapper path, so, in general, the handling driver should not touch pageable code or data.

Not all drivers support all functions.

IOR_status
Status value. The function sets this member to IORS_SUCCESS (0) if it is successful. Otherwise, it sets the member to one of these values:
IORS_BIG_IO_BREAKUP_FAILED Attempt to split big I/O failed.
IORS_BUSY Device is busy.
IORS_CANCELED Command was canceled.
IORS_CMD_IN_PROGRESS Command is in progress, and can't be canceled.
IORS_DEVICE_ERROR Error on recalib. drive, etc.
IORS_ERROR_DESIGNTR Error occurred.
IORS_HW_FAILURE General hardware failure.
IORS_ILLEGAL_ACCESS_MODE CD-ROM read on audio or attempt play on data.
IORS_INVALID_CMD_PTR Cancel of an invalid command.
IORS_INVALID_COMMAND Command not supported or invalid.
IORS_INVALID_PARM Invalid parameter.
IORS_INVALID_SECTOR Old blockdev error code for requests on an invalid sector number.
IORS_LOCK_COUNT_EXCEEDED Volume lock count exceeded.
IORS_LOCK_VIOLATION Illegal access to locked device.
IORS_MEDIA_ERROR Media failure.
IORS_MEMORY_ERROR Error allocating DMA buffer space for I/O.
IORS_NO_DEVICE Physical or logical device nonexistent.
IORS_NO_MEDIA Media removed from device.
IORS_NOT_READY Device not ready.
IORS_OUT_OF_SPACE No space on media.
IORS_SUCCESS_WITH_ECC Successful, but with ECC.
IORS_SUCCESS_WITH_RETRY Successful, but retries required.
IORS_TIME_OUT Device timed out.
IORS_UNCERTAIN_MEDIA Media may have changed.
IORS_UNFORMATTED_MEDIA Unformatted media.
IORS_UNREC_ERROR Unrecoverable error.
IORS_VALID_EJECT_FAILED Eject command was not accepted.
IORS_VOL_IN_USE Volume is in use ; used for eject.
IORS_VOL_LOCKED Eject received with drive locked.
IORS_VOL_NOT_LOCKED Volume received unlock without lock.
IORS_VOL_NOT_REMOVABLE Removable request to non-removable drive.
IORS_WRITE_PROTECT Write protect error.
IORS_WRONG_MEDIA Wrong media in drive.

IOR_flags
Flags. Can be a combination of these values:
IORF_16BIT_IOCTL If set, 16-bit IOCTL; 32-bit otherwise.
IORF_AUDIO_DATA_READ Indicates an audio data read.
IORF_BLOCKDEV_EMULATE Request started as a BCB
IORF_BYPASS_A_B Indicates that VOLTRK should bypass AB check.
IORF_BYPASS_QUEUE Request should bypass IOS queuing (internal IOS driver use only).
IORF_BYPASS_VOLTRK Request will not be volume tracked.
IORF_CHAR_COMMAND Indicates transfer counts and scatter/gather buffer sizes are byte values.
IORF_CHAR_DEVICE Indicates character device.
IORF_DATA_IN Indicates a data read operation.
IORF_DATA_OUT Indicates a data write operation.
IORF_DIRECT_IO Such as INT 25h or INT 26h.
IORF_DONT_CACHE Indicates that the BDCB data should not be cached.
IORF_DOUBLE_BUFFER Indicates that the request is to be completed using double buffering. Client must ensure that both the SGD buffer pointers and IOR_sgd_lin_phys are virtual pointers.
IORF_HIGH_PRIORITY Binary priority indication.
IORF_IDE_RESERVED Indicates I/O is for a physical device.
IORF_INHIBIT_GEOM_RECOMPUTE Force inhibit of device geometry recomputation.
IORF_IO_TOO_BIG Indicates I/O is too big for single pass (set by IOS criteria code).
IORF_LOGICAL_START_SECTOR IOR_start_addr is logical.
IORF_NO_COMPRESS Do not compress data.
IORF_PARTITION_BIAS_ADDED Set by TSD only to indicate that it has added in the bias, as required by IORF_LOGICAL_START_SECTOR.
IORF_PHYS_CMD Indicates I/O is for a physical device.
IORF_PHYS_SGDS Indicates IOR_sgd_lin_phys valid. This flag is set if the ILB_io_criteria_rtn has created a list of physical scatter-gather descriptors in IOR_sgd_lin_phys.
IORF_POSTPONED_VOL_OPS  
IORF_QUIET_VOLTRK Indicates that volume tracking just return error when wrong media in drive (no dialog box).
IORF_SCATTER_GATHER Indicates BDCB logical (linear) SGD list present.
IORF_SRB_VALID Indicates that IOP_srb points to a valid SRB.
IORF_SWAPPER_IO Request is from the swapper.
IORF_SYNC_CMD_DONE Set by IOS only to indicate completion of synchronous command.
IORF_SYNC_COMMAND Indicates synchronous command (complete before return from IOS).
IORF_VERSION_002 Indicates use of extended BCB (IOR) format for request.
IORF_VOL_RETRY Indicates volume tracking retried request (internal use only).
IORF_WIN32 Indicates I/O is from 32 bit API.

IOR_callback
Address of the callback routine for asynchronous requests. The callback receives control after the request completes. This member is ignored if IOR_flags is set to IORF_SYNC_COMMAND.
IOR_start_addr
Volume-relative start address if IOR_flags is set to IORF_LOGICAL_START_SECTOR; otherwise, this member is a physical address. IOR_start_addr[0] contains the low order 32 bits and IOR_start_addr[1] contains the high order 32 bits.
IOR_xfer_count
Number of bytes to transfer if IOR_flags is set to IORF_CHAR_COMMAND; otherwise, number of sectors to transfer. Must be set to zero if the requested function does not involve a data transfer.
IOR_buffer_ptr
Address of the BlockDev client buffer. Contains the address of the data buffer or of a null-terminated list of SGD structures, depending on whether IOR_flags is set to IORF_SCATTER_GATHER. This member is ignored if the requested function does not involve a data transfer.
_ureq
Usage area for requestor. Is used for storing parameters and return values for IOCTLs.
IOR_req_req_handle
Request handle, a 32-bit value that is passed on the stack to the callback routine specified by the IOR_callback member. Any 32 bit value may be used, but this member often contains the address of this IOR or of the IOP which contains this IOR.
IOR_req_vol_handle
Requestor-provided media handle designating the media on which to carry out the requested function (VRP).
IOR_sgd_lin_phys
Address of the first physical scatter/gather descriptor (SGD). (Contrast with IOR_buffer_ptr, which points to the logical SGDs.) This is either a linear or physical address, depending on the drivers as indicated by the DCB demand bits.
IOR_num_sgds
Number of physical SGDs pointed to by the IOR_sgd_lin_phys member.
IOR_vol_designtr
Numeric representation of the drive letter designating the volume to perform the function on. A is 0, B is 1, C is 2, and so on.

See Also

IOP, SGD, urequestor_usage