The NV Cache Management operations that are defined here can be invoked by user-mode application code running with administrator privileges, using DeviceIoControl and the IOCTL_SCSI_MINIPORT control code. Or, the caller can be kernel-mode driver code using IoBuildDeviceIoControlRequest and the IOCTL_SCSI_MINIPORT control code.
The NV Cache Management function request is specified in a field in the NVCACHE_REQUEST_BLOCK structure. The input to IOCTL_SCSI_MINIPORT is a user-defined data structure that contains an SRB_IO_CONTROL structure followed by an NVCACHE_REQUEST_BLOCK structure. Additional function-specific data might optionally follow the NVCACHE_REQUEST_BLOCK structure.
The interface that is used for the NV Cache Management functionality consists of two layers. The first layer is the interface between a caller and the port driver, which is defined by IOCTL_SCSI_MINIPORT. The second layer is the interface between the caller and the device, which is defined by the ATA8-ACS specification and IOCTL_SCSI_MINIPORT_NVCACHE. The API for user-mode application code is the DeviceIoControl interface. The API for kernel-mode driver code is the IoBuildDeviceIoControlRequest interface, which uses IOCTL_SCSI_MINIPORT.
The buffer at Irp->AssociatedIrp.SystemBuffer contains an SRB_IO_CONTROL structure with the Signature field set to "HYBRDISK", and the ControlCode field set to IOCTL_SCSI_MINIPORT_NVCACHE. The NVCACHE_REQUEST_BLOCK structure immediately follows the SRB_IO_CONTROL structure. Any optional function-specific data buffer immediately follows the NVCACHE_REQUEST_BLOCK structure.
Input Buffer Length
Parameters.DeviceIoControl.InputBufferLength indicates the size, in bytes, of all the input data: SRB_IO_CONTROL, NVCACHE_REQUEST_BLOCK, and function-specific data buffer combined. The presence or absence of a data buffer is indicated by the NVCACHE_REQUEST_BLOCKDataBufSize field.
Output Buffer Length
The length of the buffer.
The Information field contains the number of bytes returned in the output buffer. The Status field indicates the results of the operation.
|Header||ntddscsi.h (include Ntddscsi.h)|