DrvDbDestroyDatabaseNode

INT64 __fastcall DrvDbDestroyDatabaseNode(INT64 a1, VOID ***a2){
  int v3; 
  UINT64 v4; 
  INT64 v5; 
  VOID **v6; 
  UINT64 *v7; 
  VOID **v8; 
  VOID *v10; 
  v3 = DrvDbUnloadDatabaseNode(a1, (INT64)a2);
  if( v3 >= 0 )
  {
    v6 = *a2;
    if( (*a2)[1] != a2 || (v7 = (UINT64 *)a2[1], (VOID ***)*v7 != a2) )
      __fastfail(3u);
    *v7 = (UINT64)v6;
    v6[1] = v7;
    v8 = a2[18];
    if( v8 )
    {
      ExDeleteResourceLite((INT64)a2[18], v7, v4, v5, v10);
      ExFreePoolWithTag(v8, 0);
    }
    RtlFreeAnsiString((_UNICODE_STRING *)a2 + 1);
    RtlFreeAnsiString((_UNICODE_STRING *)(a2 + 5));
    ExFreePoolWithTag(a2, 0);
  }
  return(unsigned int)v3;
}

Referenced by:

DrvDbDispatchDriverDatabase
DrvDbOpenContext
DrvDbOpenDriverDatabaseRegKey
DrvDbUnregisterDatabase