IOCTL_STORAGE_PROTOCOL_COMMAND - NtDoc

Native API online documentation, based on the System Informer (formerly Process Hacker) phnt headers
// ntddstor.h

// CTL_CODE(0x002d, 0x4f0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_STORAGE_PROTOCOL_COMMAND 0x002DD3C0
View the official Windows Driver Kit DDI reference
// winioctl.h

// CTL_CODE(0x002d, 0x4f0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_STORAGE_PROTOCOL_COMMAND 0x002DD3C0
View the official Win32 API reference

NtDoc

No description available.

Windows Driver Kit DDI reference (ni-ntddstor-ioctl_storage_protocol_command)

IOCTL_STORAGE_PROTOCOL_COMMAND IOCTL

Description

A driver can use IOCTL_STORAGE_PROTOCOL_COMMAND to pass vendor-specific commands to a storage device.

Parameters

Major code

Input buffer

None.

Input buffer length

None.

Output buffer

The driver returns the results of the vendor-specific command to the buffer at Irp->AssociatedIrp.SystemBuffer. Cast the structure returned to a STORAGE_PROTOCOL_COMMAND and check its ReturnStatus field to determine the status of the command request.

Output buffer length

Parameters.DeviceIoControl.OutputBufferLength in the I/O stack location indicates the size, in bytes, of the parameter buffer, which must be >= sizeof(STORAGE_PROTOCOL_COMMAND).

Input/output buffer

Input/output buffer length

Status block

The Information field is set to the number of bytes returned. The Status field is set to STATUS_SUCCESS, or possibly to STATUS_INSUFFICIENT_RESOURCES.

See also

STORAGE_PROTOCOL_COMMAND


Win32 API reference (ni-winioctl-ioctl_storage_protocol_command)

IOCTL_STORAGE_PROTOCOL_COMMAND IOCTL

Description

Windows applications can use IOCTL_STORAGE_PROTOCOL_COMMAND to conduct pass-through of protocol specific commands to the storage device or adapter. The request indicates the bus specific command which is further sent to a specific type of device to process. For more information, see the page on working with NVMe drives.

To perform this operation, call the DeviceIoControl function with the following parameters.

BOOL DeviceIoControl(
  (HANDLE) hDevice,                 // handle to device
  IOCTL_STORAGE_PROTOCOL_COMMAND,   // dwIoControlCode
  (LPDWORD) lpInBuffer,             // input buffer
  (DWORD) nInBufferSize,            // size of input buffer
  (LPDWORD) lpOutBuffer,            // output buffer
  (DWORD) nOutBufferSize,           // size of output buffer
  (LPDWORD) lpBytesReturned,        // number of bytes returned
  (LPOVERLAPPED) lpOverlapped       // OVERLAPPED structure
);

Parameters

Input buffer

Input buffer length

Output buffer

Output buffer length

Input/output buffer

Input/output buffer length

Status block

Irp->IoStatus.Status is set to STATUS_SUCCESS if the request is successful.

Otherwise, Status to the appropriate error condition as a NTSTATUS code.

For more information, see NTSTATUS Values.

See also