PiCMGetDeviceStatus

NTSTATUS __stdcall PiCMGetDeviceStatus(
        VOID *IoctlInputBuffer,
        UINT64 IoctlInputBufferSize,
        VOID *IoctlOutputBuffer,
        UINT64 IoctlOutputBufferSize,
        UINT64 *BytesUsed){
  UINT64 *v5; 
  unsigned int v6; 
  int v8; 
  UINT64 v9; 
  UINT64 *DeviceProblem; 
  UINT64 IoctlOutputBufferSizea; 
  UINT64 DeviceStatus; 
  _CMAPI_INPUT_OBJECT_DATA ObjectData[4]; 
  WCHAR *DeviceInstanceId[2]; 
  UINT64 ExpectedOutputSize; 
  INT64 ProblemStatus; 

  v5 = (UINT64 *)ProblemStatus;
  DeviceStatus = 0i64;
  v6 = IoctlOutputBufferSize;
  LODWORD(ProblemStatus) = 0;
  *(_DWORD *)v5 = 0;
  *(_OWORD *)ObjectData = 0i64;
  ExpectedOutputSize = 0i64;
  *(_OWORD *)DeviceInstanceId = 0i64;
  v8 = PiCMCaptureObjectInputData(
         IoctlInputBuffer,
         IoctlInputBufferSize,
         (_CMAPI_INPUT_OBJECT_DATA *)(unsigned int)BytesUsed);
  if( v8 >= 0 )
  {
    if( DeviceInstanceId[0]
      && !ObjectData[1]
      && __PAIR64__(ObjectData[2], 0) == (HIDWORD(DeviceInstanceId[1]) | 0x100000000i64)
      && IoctlOutputBuffer
      && v6 >= 0x14 )
    {
      v9 = (unsigned int)CmGetDeviceStatus(
                           *(&stru_140CF2E80 + 607),
                           DeviceInstanceId[0],
                           0i64,
                           (UINT64 *)((char *)&DeviceStatus + 4),
                           &DeviceStatus,
                           &ProblemStatus,
                           IoctlOutputBufferSizea);
    }
    else
    {
      v9 = 3221225485i64;
    }
    LODWORD(DeviceProblem) = ExpectedOutputSize;
    v8 = PiCMReturnStatusResultData(
           v9,
           HIDWORD(DeviceStatus),
           (unsigned int)DeviceStatus,
           (unsigned int)ProblemStatus,
           (UINT64)DeviceProblem,
           IoctlOutputBuffer,
           v6,
           v5);
  }
  PiCMReleaseObjectInputData(ObjectData);
  return v8;
}

Referenced by:

PiCMHandleIoctl