IOCTL_STORAGE_FIRMWARE_DOWNLOAD - NtDoc

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

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

// CTL_CODE(0x002d, 0x701, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_STORAGE_FIRMWARE_DOWNLOAD 0x002DDC04
View the official Win32 API reference

NtDoc

No description available.

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

IOCTL_STORAGE_FIRMWARE_DOWNLOAD IOCTL

Description

A driver can use IOCTL_STORAGE_FIRMWARE_DOWNLOAD to download a firmware image to a storage device, but does not activate it. If the image to be downloaded is larger than the controller’s maximum data transfer size, this IOCTL will have to be called multiple times until the entire image is downloaded.

Parameters

Major code

Input buffer

Irp->AssociatedIrp.SystemBuffer contains STORAGE_HW_FIRMWARE_DOWNLOAD data that specifies information about the downloaded firmware to activate.

Input buffer length

Parameters.DeviceIoControl.InputBufferLength indicates the size, in bytes, of the parameter buffer at Irp->AssociatedIrp.SystemBuffer, which must be >= sizeof(STORAGE_HW_FIRMWARE_DOWNLOAD).

Output buffer

This IOCTL has no output structure.

Output buffer length

None.

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

IOCTL_STORAGE_FIRMWARE_ACTIVATE

IOCTL_STORAGE_FIRMWARE_GET_INFO

STORAGE_HW_FIRMWARE_ACTIVATE

STORAGE_HW_FIRMWARE_DOWNLOAD

STORAGE_HW_FIRMWARE_INFO

STORAGE_HW_FIRMWARE_INFO_QUERY

STORAGE_HW_FIRMWARE_SLOT_INFO


Win32 API reference (ni-winioctl-ioctl_storage_firmware_download)

IOCTL_STORAGE_FIRMWARE_DOWNLOAD IOCTL

Description

Windows applications can use this control code to download a firmware image to the target device, but not activate it. If the image to be downloaded is larger than the controller’s maximum data transfer size, this IOCTL will have to be called multiple times until the entire image is downloaded.

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

BOOL DeviceIoControl(
  (HANDLE) hDevice,                 // handle to device
  IOCTL_STORAGE_FIRMWARE_DOWNLOAD,  // 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