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.