PipRestoreDevNodeState
char __fastcall PipRestoreDevNodeState(__int64 a1, UINT64 a2){
unsigned __int8 v3;
unsigned __int64 v4;
BOOL v5;
int IsDevNodeDNStarted;
__int64 v7;
int v8;
int v9;
int v10;
int v11;
__int64 v12;
__int64 v13;
__int64 v14;
KeAcquireSpinLockRaiseToDpc(&PnpSpinLock, a2);
v4 = v3;
v5 = PipAreDriversLoadedWorker(*(unsigned int *)(a1 + 300), *(unsigned int *)(a1 + 304));
IsDevNodeDNStarted = PipIsDevNodeDNStarted((_DEVICE_NODE *)a1);
v7 = *(unsigned int *)(a1 + 388);
v8 = IsDevNodeDNStarted;
*(_DWORD *)(a1 + 300) = v9;
*(_DWORD *)(a1 + 4 * v7 + 308) = v10;
*(_DWORD *)(a1 + 388) = (*(_DWORD *)(a1 + 388) + 1) % 0x14u;
KxReleaseSpinLock(&PnpSpinLock);
LOBYTE(v11) = KiIrqlFlags;
__writecr8(v4);
if( *(_QWORD *)(a1 + 48) )
{
if( PipAreDriversLoadedWorker(*(unsigned int *)(a1 + 300), *(unsigned int *)(a1 + 304)) != v5
|| (v11 = PipIsDevNodeDNStarted((_DEVICE_NODE *)a1), v11 != v8) )
{
PnpRaiseNtPlugPlayDevicePropertyChangeEvent(v12, v13, 11);
v11 = PipIsDevNodeDNStarted((_DEVICE_NODE *)a1);
if( v11 != v8 )
LOBYTE(v11) = PnpRaiseNtPlugPlayDevicePropertyChangeEvent(v14, *(_QWORD *)(a1 + 48), 26);
}
}
return v11;
}Referenced by:
PnpCancelStopDeviceNode
PnpDeleteLockedDeviceNode
PnpRemoveLockedDeviceNode
PnpRequestDeviceRemovalWorker
PnpSurpriseRemoveLockedDeviceNode