HalpQueryPccInterface
__int64 __fastcall HalpQueryPccInterface(
PDEVICE_OBJECT DeviceObject,
__int64 a2,
__int64 a3,
__int64 a4,
int a5,
void *a6){
DEVICE_OBJECT *AttachedDeviceReference;
IRP *v8;
__int64 v9;
unsigned int Status;
IO_STATUS_BLOCK IoStatusBlock;
struct _KEVENT Event;
VOID *ReturnAddress;
memset(&Event, 0, sizeof(Event));
IoStatusBlock = 0i64;
memset((INT64)a6, 0i64);
*((_DWORD *)a6 + 8) = a5;
*(_DWORD *)a6 = 65664;
KeInitializeEvent(&Event, NotificationEvent, 0);
AttachedDeviceReference = IoGetAttachedDeviceReference(DeviceObject);
v8 = IopBuildSynchronousFsdRequest(
0x1Bui64,
AttachedDeviceReference,
0i64,
0i64,
0i64,
&Event,
&IoStatusBlock,
ReturnAddress);
if( v8 )
{
v9 = *((_QWORD *)v8 + 23);
*((_BYTE *)v8 + 64) = 0;
*((_DWORD *)v8 + 12) = -1073741637;
*(_QWORD *)(v9 - 40) = 0i64;
*(_QWORD *)(v9 - 64) = &GUID_PCC_INTERFACE_STANDARD;
*(_BYTE *)(v9 - 71) = 8;
*(_DWORD *)(v9 - 56) = 65664;
*(_QWORD *)(v9 - 48) = a6;
Status = IofCallDriver(AttachedDeviceReference, v8);
if( Status == 259 )
{
KeWaitForSingleObject(&Event, Executive, 0, 0, 0i64);
Status = IoStatusBlock.Status;
}
}
else
{
Status = -1073741670;
}
HalPutDmaAdapter((PADAPTER_OBJECT)AttachedDeviceReference);
return Status;
}Referenced by:
HalpAcquirePccInterface