BOOL CNVMeDeviceIo::DeviceFirmwareCommit(HANDLE hDeviceIOCTL, void *_pSrtCommandSet, BYTE *bIOBuf)
{
COMMAND_SET srtCommandSet = ((COMMAND_SET)_pSrtCommandSet);
const DWORD dwBuffSize = sizeof(STORAGE_HW_FIRMWARE_ACTIVATE);
PUCHAR buffer = (PUCHAR)malloc(dwBuffSize);
if (buffer == NULL)
{
return False;
}
RtlZeroMemory(buffer, dwBuffSize);
PSTORAGE_HW_FIRMWARE_ACTIVATE firmwareActivate = (PSTORAGE_HW_FIRMWARE_ACTIVATE)buffer;
firmwareActivate->Version = sizeof(STORAGE_HW_FIRMWARE_ACTIVATE);
firmwareActivate->Size = sizeof(STORAGE_HW_FIRMWARE_ACTIVATE);
firmwareActivate->Slot = srtCommandSet.soltNum;
firmwareActivate->Flags = FIRMWARE_REQUEST_FLAG_CONTROLLER;
// activate firmware
ULONG returnedLength = 0;
BOOL result = DeviceIoControl(hDeviceIOCTL,IOCTL_STORAGE_FIRMWARE_ACTIVATE,buffer,dwBuffSize,buffer,dwBuffSize,&returnedLength,NULL);
if (!result)
{
free(buffer);
return FALSE;
}
free(buffer);
return TRUE;
}
此命令并没有配置协议中说的action字段,但实际上该值确实有配置,值为1。
想知道该值如何配置的