PnpOrphanNotification

void __fastcall PnpOrphanNotification(__int64 a1){
  _QWORD *v2; 
  _QWORD *v3; 
  __int64 v4; 
  _ADAPTER_OBJECT *v5; 

  ExAcquireFastMutex((PFAST_MUTEX)((char *)&stru_140C452E0 + 256));
  v2 = (_QWORD *)(a1 + 472);
  while( 1 )
  {
    v3 = (_QWORD *)*v2;
    if( (_QWORD *)*v2 == v2 )
      break;
    if( (_QWORD *)v3[1] != v2 || (v4 = *v3, *(_QWORD **)(*v3 + 8i64) != v3) )
      __fastfail(3u);
    *v2 = v4;
    *(_QWORD *)(v4 + 8) = v2;
    v5 = (_ADAPTER_OBJECT *)v3[11];
    v3[1] = v3;
    *v3 = v3;
    if( v5 && (!*((_BYTE *)v3 + 58) || (*(_DWORD *)(a1 + 704) & 0x4000) == 0) )
    {
      HalPutDmaAdapter(v5);
      v3[11] = 0i64;
    }
  }
  KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&stru_140C452E0 + 256));
}

Referenced by:

PpDevNodeRemoveFromTree