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