DrvDbDispatchDriverPackage

INT64 __fastcall DrvDbDispatchDriverPackage(INT64 a1, WCHAR *a2, INT64 a3, INT64 a4, INT64 a5){
  signed int ObjectContext; 
  int v7; 
  INT64 *v8; 
  WCHAR *v9; 
  int v10; 
  int v11; 
  int v14; 
  int v15; 
  int v16; 
  int v17; 
  int v18; 
  INT64 v19; 
  NTSTRSAFE_PWSTR pszDest; 
  __int64 v21; 
  INT64 v22[3]; 
  v22[0] = 0i64;
  ObjectContext = PnpCtxGetObjectContext(a1, a3, v22);
  if( ObjectContext < 0 )
    return(unsigned int)ObjectContext;
  v8 = (INT64 *)v22[0];
  v9 = (WCHAR *)*(unsigned int *)(v22[0] + 12);
  if( ((unsigned int)v9 & 0x10000000) == 0 )
  {
    if( !(_DWORD)v9 )
      return(unsigned int)-1073740697;
    if( v7 == 2 )
    {
      if( *(_BYTE *)(a5 + 4) )
      {
LABEL_28:
        v9 = (WCHAR *)((unsigned int)v9 >> 30);
        LOBYTE(v9) = (unsigned __int8)v9 & 1;
        goto LABEL_30;
      }
    }
    else
    {
      if( v7 <= 2 )
      {
LABEL_26:
        LOBYTE(v9) = 1;
        goto LABEL_30;
      }
      if( v7 <= 4 )
        goto LABEL_28;
      if( v7 > 6 && v7 != 8 )
      {
        if( v7 != 9 )
          goto LABEL_26;
        goto LABEL_28;
      }
    }
    v9 = (WCHAR *)((unsigned int)v9 >> 31);
LABEL_30:
    ObjectContext = (_BYTE)v9 == 0 ? 0xC0000022 : 0;
    if( !(_BYTE)v9 )
      return(unsigned int)ObjectContext;
  }
  v10 = v7 - 1;
  if( !v10 )
    return(unsigned int)DrvDbValidateDriverInfFileName(v9);
  v11 = v10 - 1;
  if( !v11 )
    return(unsigned int)DrvDbOpenDriverPackageRegKey(
                           (INT64 *)v22[0],
                           (INT64)a2,
                           *(unsigned int *)a5,
                           *(_BYTE *)(a5 + 4),
                           *(_QWORD *)(a5 + 8),
                           a5 + 16);
  v14 = v11 - 1;
  if( v14 )
  {
    v15 = v14 - 1;
    if( v15 )
    {
      v16 = v15 - 1;
      if( v16 )
      {
        v17 = v16 - 1;
        if( v17 )
        {
          v18 = v17 - 2;
          if( v18 )
          {
            if( v18 != 1 )
              return(unsigned int)-1073741811;
            return(unsigned int)DrvDbSetDriverPackageMappedProperty(
                                   (__int64 *)v22[0],
                                   (__int64)a2,
                                   *(void **)a5,
                                   *(_QWORD *)(a5 + 16),
                                   *(_DWORD *)(a5 + 24),
                                   *(void **)(a5 + 32),
                                   *(_DWORD *)(a5 + 40));
          }
          else
          {
            return(unsigned int)DrvDbGetDriverPackageMappedProperty(
                                   (__int64 *)v22[0],
                                   a2,
                                   *(char **)a5,
                                   *(_QWORD *)(a5 + 16),
                                   *(_QWORD *)(a5 + 24),
                                   *(NTSTRSAFE_PWSTR *)(a5 + 32),
                                   *(_DWORD *)(a5 + 40),
                                   *(_QWORD *)(a5 + 48));
          }
        }
        else
        {
          return(unsigned int)DrvDbGetDriverPackageMappedPropertyKeys(
                                 (__int64 *)v22[0],
                                 a2,
                                 *(char **)a5,
                                 *(_QWORD *)(a5 + 24),
                                 *(_DWORD *)(a5 + 32),
                                 *(_QWORD *)(a5 + 40));
        }
      }
      else
      {
        LODWORD(v21) = 0;
        LODWORD(pszDest) = *(_DWORD *)(a5 + 24);
        return(unsigned int)DrvDbGetObjectList(
                               (INT64 *)v22[0],
                               2i64,
                               *(_QWORD *)a5,
                               *(_QWORD *)(a5 + 8),
                               *(_WORD **)(a5 + 16),
                               (UINT64)pszDest,
                               *(UINT64 **)(a5 + 32),
                               v21);
      }
    }
    else
    {
      return(unsigned int)DrvDbDeleteObjectRegKey((__int64 *)v22[0], 2, a2, 0);
    }
  }
  v19 = *(unsigned int *)a5;
  LODWORD(v22[0]) = 0;
  ObjectContext = DrvDbOpenDriverPackageRegKey(v8, (INT64)a2, v19, 1, a5 + 8, (INT64)v22);
  if( ObjectContext >= 0 )
    *(_BYTE *)(a5 + 16) = LODWORD(v22[0]) == 1;
  return(unsigned int)ObjectContext;
}

Referenced by:

No references.