PiDrvDbDestroyNode
VOID __fastcall PiDrvDbDestroyNode(CHAR *P){
void *v2;
__int64 v3;
CHAR **v4;
UINT64 *v5;
UINT64 v6;
INT64 v7;
void *v8;
VOID *v9;
if( (*((_DWORD *)P + 16) & 0x10) != 0 )
{
v2 = (void *)*((_QWORD *)P + 9);
if( v2 )
ZwClose(v2);
}
v3 = *(_QWORD *)P;
if( *(_QWORD *)P )
{
if( *(CHAR **)(v3 + 8) != P || (v4 = (CHAR **)*((_QWORD *)P + 1), *v4 != P) )
__fastfail(3u);
*v4 = (CHAR *)v3;
*(_QWORD *)(v3 + 8) = v4;
}
RtlFreeAnsiString((_UNICODE_STRING *)P + 1);
RtlFreeAnsiString((_UNICODE_STRING *)P + 2);
RtlFreeAnsiString((_UNICODE_STRING *)P + 3);
RtlFreeAnsiString((_UNICODE_STRING *)(P + 504));
if( P[192] )
ExDeleteResourceLite((INT64)(P + 88), v5, v6, v7, v9);
v8 = (void *)*((_QWORD *)P + 59);
if( v8 )
ZwClose(v8);
ExFreePoolWithTag(P, 0);
}Referenced by:
PiDrvDbCreateNode
PiDrvDbRegisterNode