DrvDbDispatchDriverDatabase

INT64 __fastcall DrvDbDispatchDriverDatabase(INT64 a1, INT64 a2, INT64 a3, INT64 a4, UINT64 *a5){
  WCHAR *v5; 
  int ObjectContext; 
  int v7; 
  WCHAR *v8; 
  int v9; 
  int v10; 
  int v11; 
  int v12; 
  int v13; 
  unsigned int v14; 
  int v16; 
  int v17; 
  INT64 BufferSize; 
  VOID ***v19; 
  INT64 a1a; 
  a1a = 0i64;
  ObjectContext = PnpCtxGetObjectContext(a1, a3, &a1a);
  if( ObjectContext < 0 )
    return(unsigned int)ObjectContext;
  v9 = v7 - 1;
  if( !v9 )
    return(unsigned int)DrvDbValidateDriverDatabaseName(v5);
  v10 = v9 - 1;
  if( !v10 )
    return(unsigned int)DrvDbOpenDriverDatabaseRegKey(
                           (const UNICODE_STRING **)a1a,
                           v8,
                           *(_DWORD *)a5,
                           *((_BYTE *)a5 + 4),
                           (void **)a5[1],
                           (_DWORD *)a5 + 4);
  v11 = v10 - 1;
  if( v11 )
  {
    v12 = v11 - 1;
    if( v12 )
    {
      v13 = v12 - 1;
      if( v13 )
      {
        v16 = v13 - 1;
        if( v16 )
        {
          v17 = v16 - 2;
          if( v17 )
          {
            if( v17 != 1 )
              return(unsigned int)-1073741811;
            return(unsigned int)DrvDbSetDriverDatabaseMappedProperty(
                                   a1a,
                                   v8,
                                   (void *)*a5,
                                   a5[2],
                                   *((_DWORD *)a5 + 6),
                                   (int *)a5[4],
                                   *((_DWORD *)a5 + 10));
          }
          else
          {
            LODWORD(BufferSize) = *((_DWORD *)a5 + 10);
            DrvDbGetDriverDatabaseMappedProperty(a1a, v8, (VOID *)*a5, a5[2], a5[3], a5[4], BufferSize, a5[6]);
          }
        }
        else
        {
          return(unsigned int)DrvDbGetDriverDatabaseMappedPropertyKeys(
                                 a1a,
                                 v8,
                                 (void *)*a5,
                                 a5[3],
                                 *((_DWORD *)a5 + 8),
                                 (unsigned int *)a5[5]);
        }
      }
      else
      {
        return(unsigned int)DrvDbGetDriverDatabaseList(
                               (_QWORD *)a1a,
                               (unsigned __int8(__fastcall *)(_QWORD, __int64, __int64, __int64))*a5,
                               a5[1],
                               (_WORD *)a5[2],
                               *((_DWORD *)a5 + 6),
                               (unsigned int *)a5[4]);
      }
    }
    else
    {
      v19 = 0i64;
      ObjectContext = DrvDbFindDatabaseNode(a1a, v8, (const UNICODE_STRING **)&v19);
      if( ObjectContext < 0 )
        return(unsigned int)ObjectContext;
      if( ((_DWORD)v19[7] & 0x10) == 0 )
        return(unsigned int)-1073741790;
      return(unsigned int)DrvDbDestroyDatabaseNode(a1a, v19);
    }
    return v14;
  }
  LODWORD(v19) = 0;
  ObjectContext = DrvDbOpenDriverDatabaseRegKey(
                    (const UNICODE_STRING **)a1a,
                    v8,
                    *(_DWORD *)a5,
                    1,
                    (void **)a5 + 1,
                    &v19);
  if( ObjectContext >= 0 )
    *((_BYTE *)a5 + 16) = (_DWORD)v19 == 1;
  return(unsigned int)ObjectContext;
}

Referenced by:

No references.