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.