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