PiCMGetDeviceStatus

NTSTATUS __stdcall PiCMGetDeviceStatus(
        PVOID IoctlInputBuffer,
        UINT64 IoctlInputBufferSize,
        PVOID IoctlOutputBuffer,
        UINT64 IoctlOutputBufferSize,
        UINT64 *BytesUsed){
  UINT64 *v5; 
  unsigned int v6; 
  NTSTATUS v8; 
  INT64 DeviceStatus; 
  UINT64 ExpectedOutputSize; 
  SIZE_T Length; 
  UINT64 Problem; 
  __int128 v14; 
  __int128 v15; 
  UINT64 v16; 
  INT64 ProblemStatus; 
  v5 = (UINT64 *)ProblemStatus;
  Problem = 0i64;
  v6 = IoctlOutputBufferSize;
  LODWORD(ProblemStatus) = 0;
  *(_DWORD *)v5 = 0;
  v14 = 0i64;
  v16 = 0i64;
  v15 = 0i64;
  v8 = PiCMCaptureObjectInputData((UINT64)IoctlInputBuffer, IoctlInputBufferSize, (unsigned int)BytesUsed, (INT64)&v14);
  if( v8 >= 0 )
  {
    if( (_QWORD)v15
      && *(_QWORD *)((char *)&v14 + 4) == 0x100000000i64
      && !HIDWORD(v15)
      && IoctlOutputBuffer
      && v6 >= 0x14 )
    {
      DeviceStatus = (unsigned int)CmGetDeviceStatus(
                                     PiPnpRtlCtx,
                                     (const WCHAR *)v15,
                                     0i64,
                                     (int *)&Problem + 1,
                                     &Problem,
                                     &ProblemStatus,
                                     Length);
    }
    else
    {
      DeviceStatus = 3221225485i64;
    }
    LODWORD(Length) = v6;
    LODWORD(ExpectedOutputSize) = v16;
    v8 = PiCMReturnStatusResultData(
           DeviceStatus,
           HIDWORD(Problem),
           (unsigned int)Problem,
           (unsigned int)ProblemStatus,
           ExpectedOutputSize,
           IoctlOutputBuffer,
           Length,
           v5);
  }
  PiCMReleaseObjectInputData((INT64)&v14);
  return v8;
}

Referenced by:

No references.