PnpCtxCloseMachine
NTSTATUS __fastcall PnpCtxCloseMachine(VOID *P){
INT64 v1;
_ETHREAD *CurrentThread;
int v3;
_QWORD *v5;
__int64 v6;
_QWORD *v7;
void *v8;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v3 = 0;
--CurrentThread->Tcb.KernelApcDisable;
ExAcquireResourceExclusiveLite(*((_QWORD *)P + 30), 1, v1);
do
{
if( *((VOID **)P + 1) == (char *)P + 8 )
break;
v5 = (_QWORD *)*((_QWORD *)P + 2);
v6 = *v5;
if( *(_QWORD **)(*v5 + 8i64) == v5 )
{
v7 = (_QWORD *)v5[1];
if( (_QWORD *)*v7 == v5 )
continue;
}
__fastfail(3u);
*v7 = v6;
*(_QWORD *)(v6 + 8) = v7;
v3 = PnpCtxDestroyNode(v5);
}
while( v3 >= 0 );
ExReleaseResourceLite(*((PERESOURCE *)P + 30));
KeLeaveCriticalRegionThread(KeGetCurrentThread());
if( v3 >= 0 )
{
v8 = (void *)*((_QWORD *)P + 30);
ExDeleteResourceLite((UINT64)v8);
ExFreePoolWithTag(v8, 0);
ExFreePoolWithTag(P, 0);
}
return v3;
}Referenced by:
PiDevCfgInitDriverDatabaseCallback
PipMigratePnpState