PiProcessResourceRequirementsChanged
INT64 __fastcall PiProcessResourceRequirementsChanged(_PNP_DEVICE_ACTION_ENTRY *Request){
_DEVICE_OBJECT *DeviceObject;
ULONG_PTR v3;
const WCHAR *v4;
INT64 v5;
_KEVENT *CompletionEvent;
int v7;
INT64 v9;
v9 = 0i64;
DeviceObject = Request->DeviceObject;
if( DeviceObject )
v3 = *(_QWORD *)(*((_QWORD *)DeviceObject + 39) + 40i64);
else
v3 = 0i64;
ObfReferenceObjectWithTag(DeviceObject, 0x65706E50u);
if( (unsigned int)(*(_DWORD *)(v3 + 300) - 787) <= 1 )
{
v7 = -1073741738;
}
else
{
PoFxActivateDevice(Request->DeviceObject);
*(_DWORD *)(v3 + 704) |= 0x40u;
PipClearDevNodeFlags((_DEVICE_NODE *)v3, 0x100ui64);
PipSetDevNodeFlags(v3, 1024);
PipClearDevNodeProblem(v3, v4, v5);
if( *(_DWORD *)(v3 + 300) == 776 )
{
if( Request->RequestArgument )
PipClearDevNodeFlags((_DEVICE_NODE *)v3, 0x800ui64);
else
PipSetDevNodeFlags(v3, 2048);
PnpReallocateResources(v3);
CompletionEvent = Request->CompletionEvent;
LODWORD(v9) = 3;
BYTE4(v9) = PnPBootDriversInitialized;
ObfReferenceObject(*((PVOID *)IopRootDeviceNode + 4));
v7 = PipProcessDevNodeTree(
(INT64)IopRootDeviceNode,
(INT64)Request,
(INT64)&v9,
0i64,
0,
CompletionEvent != 0i64,
0);
if( v7 < 0 )
v7 = 0;
}
else
{
v7 = -1073741823;
}
}
if( (*(_DWORD *)(v3 + 704) & 0x40) != 0 )
{
PoFxIdleDevice(*(DEVICE_OBJECT **)(v3 + 32));
*(_DWORD *)(v3 + 704) &= ~0x40u;
}
ObfDereferenceObjectWithTag(Request->DeviceObject, 0x65706E50ui64);
return(unsigned int)v7;
}Referenced by:
PnpDeviceActionWorker