PnpCtxCloseMachine
__int64 __fastcall PnpCtxCloseMachine(PVOID P){
_ETHREAD *CurrentThread;
int v2;
_QWORD *v4;
__int64 v5;
_QWORD *v6;
UINT64 *v7;
UINT64 v8;
INT64 v9;
void *v10;
VOID *v12;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v2 = 0;
--*((_WORD *)CurrentThread + 242);
ExAcquireResourceExclusiveLite(*((ERESOURCE **)P + 30), 1u);
do
{
if( *((PVOID *)P + 1) == (char *)P + 8 )
break;
v4 = (_QWORD *)*((_QWORD *)P + 2);
v5 = *v4;
if( *(_QWORD **)(*v4 + 8i64) == v4 )
{
v6 = (_QWORD *)v4[1];
if( (_QWORD *)*v6 == v4 )
continue;
}
__fastfail(3u);
*v6 = v5;
*(_QWORD *)(v5 + 8) = v6;
v2 = PnpCtxDestroyNode(v4);
}
while( v2 >= 0 );
ExReleaseResourceLite(*((PERESOURCE *)P + 30));
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
if( v2 >= 0 )
{
v10 = (void *)*((_QWORD *)P + 30);
ExDeleteResourceLite((INT64)v10, v7, v8, v9, v12);
ExFreePoolWithTag(v10, 0);
ExFreePoolWithTag(P, 0);
}
return(unsigned int)v2;
}Referenced by:
PiDevCfgInitDriverDatabaseCallback
PipMigratePnpState