DrvDbUnloadDatabaseNode

INT64 __fastcall DrvDbUnloadDatabaseNode(INT64 a1, INT64 a2){
  __int64(__fastcall *v2)(INT64, _QWORD, __int64); 
  NTSTATUS v3; 
  int v6; 
  unsigned int v7; 
  unsigned int v9; 
  HANDLE *v10; 
  INT64 v11; 
  v2 = *(__int64(__fastcall **)(INT64, _QWORD, __int64))(a2 + 72);
  v3 = 0;
  v11 = 0i64;
  if( v2 )
  {
    v11 = a2 + 88;
    v6 = ((__int64(__fastcall *)(INT64, _QWORD, __int64, __int64, INT64 *, _QWORD))v2)(
           a1,
           *(_QWORD *)(a2 + 24),
           2i64,
           1i64,
           &v11,
           *(_QWORD *)(a2 + 80));
    if( v6 == -1073741822 )
    {
      v2 = 0i64;
    }
    else if( v6 < 0 )
    {
      v3 = v6;
      goto LABEL_5;
    }
  }
  if( *(_QWORD *)(a2 + 88) )
  {
    if( (*(_DWORD *)(a2 + 56) & 2) != 0 )
    {
      v9 = 0;
      v10 = (HANDLE *)(a2 + 96);
      do
      {
        if( *v10 )
        {
          v3 = ZwClose(*v10);
          if( v3 < 0 )
            goto LABEL_5;
          *v10 = 0i64;
        }
        ++v9;
        ++v10;
      }
      while( v9 < 6 );
    }
    v3 = ZwClose(*(HANDLE *)(a2 + 88));
    if( v3 >= 0 )
      *(_QWORD *)(a2 + 88) = 0i64;
  }
LABEL_5:
  if( v2 )
  {
    v7 = v2(a1, *(_QWORD *)(a2 + 24), 2i64);
    if( (int)(v7 + 0x80000000) >= 0 && v7 != -1073741822 && !v3 )
      return v7;
  }
  return(unsigned int)v3;
}

Referenced by:

DrvDbDestroyDatabaseNode
DrvDbLoadDatabaseNode
DrvDbOpenDriverDatabaseRegKey
DrvDbReleaseDatabaseNodeBaseKey
DrvDbSetDriverDatabaseMappedProperty