PiDrvDbDestroyNode

VOID __fastcall PiDrvDbDestroyNode(VOID *P){
  __int64 v2; 
  VOID **v3; 
  VOID **v4; 
  __int64 v5; 

  if( (*((_DWORD *)P + 16) & 0x10) != 0 )
  {
    v2 = *((_QWORD *)P + 9);
    if( v2 )
      ZwClose(v2);
  }
  v3 = *(VOID ***)P;
  if( *(_QWORD *)P )
  {
    if( v3[1] != P || (v4 = (VOID **)*((_QWORD *)P + 1), *v4 != P) )
      __fastfail(3u);
    *v4 = v3;
    v3[1] = v4;
  }
  RtlFreeAnsiString((_UNICODE_STRING *)P + 1);
  RtlFreeAnsiString((_UNICODE_STRING *)P + 2);
  RtlFreeAnsiString((_UNICODE_STRING *)P + 3);
  RtlFreeAnsiString((_UNICODE_STRING *)((char *)P + 504));
  if( *((_BYTE *)P + 192) )
    ExDeleteResourceLite((UINT64)P + 88);
  v5 = *((_QWORD *)P + 59);
  if( v5 )
    ZwClose(v5);
  ExFreePoolWithTag(P, 0);
}

Referenced by:

PiDrvDbCreateNode