PopRegisterCoolingExtensionProtection
NTSTATUS __stdcall PopRegisterCoolingExtensionProtection(POP_COOLING_EXTENSION *CoolingExtension){
INT64 v1;
INT64 v2;
INT64 *v3;
bool v5;
int DeviceProperty;
_DEVICE_OBJECT *v7;
_DEVICE_OBJECT *v8;
VOID **PoolWithTag;
_UNICODE_STRING DestinationString;
UINT64 NumberOfBytes;
PFILE_OBJECT FileObject;
PDEVICE_OBJECT DeviceObject;
LODWORD(NumberOfBytes) = 0;
v3 = (INT64 *)(CoolingExtension + 14);
DeviceObject = 0i64;
FileObject = 0i64;
v5 = *((_QWORD *)CoolingExtension + 7) == 0i64;
DestinationString = 0i64;
if( !v5 )
return 0;
LODWORD(v7) = IoGetDeviceAttachmentBaseRef(*((_QWORD *)CoolingExtension + 6), v1, v2);
v8 = v7;
if( IoGetDeviceProperty(v7, 11, 0i64, 0i64, &NumberOfBytes) == -1073741789 )
{
PoolWithTag = ExAllocatePoolWithTag(1ui64, (unsigned int)NumberOfBytes, 1819231056i64);
if( PoolWithTag )
{
DeviceProperty = IoGetDeviceProperty(v8, 11, (unsigned int)NumberOfBytes, PoolWithTag, &NumberOfBytes);
if( DeviceProperty >= 0 )
{
RtlInitUnicodeString(&DestinationString, (PCWSTR)PoolWithTag);
DeviceProperty = IoGetDeviceObjectPointer(&DestinationString, 0x1F01FFui64, &FileObject, &DeviceObject);
if( DeviceProperty >= 0 )
DeviceProperty = IoRegisterPlugPlayNotification(
3i64,
0,
(OWORD *)&FileObject->Type,
(UINT64)DeviceObject->DriverObject,
(INT64)PopCoolingExtensionPnpNotification,
(INT64)CoolingExtension,
v3);
if( FileObject )
HalPutDmaAdapter((PADAPTER_OBJECT)FileObject);
}
ExFreePoolWithTag(PoolWithTag, 0x6C6F4350u);
}
else
{
DeviceProperty = -1073741670;
}
}
else
{
DeviceProperty = -1073741823;
}
if( v8 )
HalPutDmaAdapter((PADAPTER_OBJECT)v8);
return DeviceProperty;
}Referenced by:
PopAssociateThermalRequest