PnpRestartDeviceNode
__int64 __fastcall PnpRestartDeviceNode(__int64 a1){
_PNP_DEVNODE_STATE *v2;
unsigned int v3;
bool v4;
void *v5;
PpDevNodeLockTree(4);
if( (*(_DWORD *)(a1 + 396) & 0x10) != 0 )
{
PipClearDevNodeUserFlags(a1, 5);
PipClearDevNodeFlags((_DEVICE_NODE *)a1, 0x108000ui64);
*(_DWORD *)(a1 + 704) &= 0xFFFFBC03;
v3 = 0;
v4 = *(_DWORD *)(a1 + 300) == 769;
*(_DWORD *)(a1 + 296) = 0;
*(_DWORD *)(a1 + 120) = 0;
*(_DWORD *)(a1 + 124) = 0;
if( !v4 )
{
PipClearDevNodeFlags((_DEVICE_NODE *)a1, 0x7C200D00ui64);
if( *(_WORD *)(a1 + 56) )
{
ExFreePoolWithTag(*(PVOID *)(a1 + 64), 0);
*(_DWORD *)(a1 + 56) = 0;
*(_QWORD *)(a1 + 64) = 0i64;
}
ExAcquireFastMutex(&PiResourceListLock);
v5 = *(void **)(a1 + 440);
if( v5 )
{
ExFreePoolWithTag(v5, 0);
*(_QWORD *)(a1 + 440) = 0i64;
PipClearDevNodeFlags((_DEVICE_NODE *)a1, 0x200ui64);
}
KeReleaseGuardedMutex(&PiResourceListLock);
}
*(_DWORD *)(a1 + 660) = -1;
PipSetDevNodeState((_DEVICE_NODE *)a1, DeviceNodeUninitialized, v2);
}
else
{
v3 = -1073741823;
}
PpDevNodeUnlockTree(4);
return v3;
}Referenced by:
PiProcessClearDeviceProblem
PiProcessQueryRemoveNoFdo
PiProfileUpdateDeviceTreeCallback
PiRestartDevice
PiRestartRemovalRelations
PnpProcessQueryRemoveAndEject