DrvDbOpenDriverDatabaseRegKey

__int64 __fastcall DrvDbOpenDriverDatabaseRegKey(
        const UNICODE_STRING **a1,
        const WCHAR *a2,
        ACCESS_MASK a3,
        char a4,
        void **a5,
        _DWORD *a6){
  char v10; 
  int DatabaseNode; 
  int v12; 
  _ETHREAD *CurrentThread; 
  INT64 v14; 
  __int64 v15; 
  INT64 v17; 
  INT64 v18[2]; 
  v18[0] = 0i64;
  v10 = 0;
  if( wcsicmp(a2, L"*") )
  {
    DatabaseNode = DrvDbFindDatabaseNode((__int64)a1, a2, (const UNICODE_STRING **)v18);
    v12 = DatabaseNode;
    if( DatabaseNode == -1073741772 )
    {
      if( !a4 )
        return(unsigned int)v12;
      LODWORD(v17) = 16;
      v12 = DrvDbCreateDatabaseNode((INT64)a1, a2, 0i64, 0i64, v17, 0i64, 0i64, (CHAR **)v18);
      if( v12 < 0 )
        return(unsigned int)v12;
      v10 = 1;
    }
    else if( DatabaseNode < 0 )
    {
      return(unsigned int)v12;
    }
  }
  else
  {
    v18[0] = (INT64)a1[4];
  }
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  v14 = v18[0];
  ExAcquireResourceExclusiveLite(*(ERESOURCE **)(v18[0] + 144), 1u);
  if( (*(_DWORD *)(v14 + 56) & 1) != 0 || (v12 = DrvDbLoadDatabaseNode((__int64)a1, v14), v12 >= 0) )
  {
    if( *a1 )
      v15 = *(_QWORD *)&(*a1)[14].Length;
    else
      v15 = 0i64;
    v12 = SysCtxRegOpenKey(v15, *(char **)(v14 + 88), 0i64, 0, a3, a5);
    if( (*(_DWORD *)(v14 + 56) & 1) == 0 )
      DrvDbUnloadDatabaseNode((INT64)a1, v14);
    if( v12 >= 0 && a6 )
      *a6 = 2;
  }
  ExReleaseResourceLite(*(PERESOURCE *)(v14 + 144));
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
  if( v12 < 0 && v10 )
    DrvDbDestroyDatabaseNode((INT64)a1, (VOID ***)v18[0]);
  return(unsigned int)v12;
}

Referenced by:

DrvDbDispatchDriverDatabase
DrvDbGetDriverDatabaseMappedProperty
DrvDbGetDriverDatabaseMappedPropertyKeys
DrvDbSetDriverDatabaseMappedProperty