DrvDbDispatchDriverFile
INT64 __fastcall DrvDbDispatchDriverFile(INT64 rcx0, WCHAR *a2, INT64 a3, INT64 a4, INT64 arg20){
signed int ObjectContext;
int v7;
INT64 *v8;
WCHAR *v9;
int v10;
int v11;
int v12;
int v13;
int v14;
int v15;
int v16;
INT64 v18;
INT64 a5;
INT64 DataSize;
INT64 v22;
INT64 v23;
INT64 *a1[3];
a1[0] = 0i64;
ObjectContext = PnpCtxGetObjectContext(rcx0, a3, a1);
if( ObjectContext < 0 )
return(unsigned int)ObjectContext;
v8 = a1[0];
v9 = (WCHAR *)*((unsigned int *)a1[0] + 3);
if( ((unsigned int)v9 & 0x10000000) == 0 )
{
if( !(_DWORD)v9 )
return(unsigned int)-1073740697;
if( v7 == 2 )
{
if( *(_BYTE *)(arg20 + 4) )
{
LABEL_13:
v9 = (WCHAR *)((unsigned int)v9 >> 30);
LOBYTE(v9) = (unsigned __int8)v9 & 1;
goto LABEL_15;
}
}
else
{
if( v7 <= 2 )
{
LABEL_11:
LOBYTE(v9) = 1;
goto LABEL_15;
}
if( v7 <= 4 )
goto LABEL_13;
if( v7 > 6 && v7 != 8 )
{
if( v7 != 9 )
goto LABEL_11;
goto LABEL_13;
}
}
v9 = (WCHAR *)((unsigned int)v9 >> 31);
LABEL_15:
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)DrvDbOpenDriverFileRegKey(
a1[0],
(INT64)a2,
*(unsigned int *)arg20,
*(_BYTE *)(arg20 + 4),
*(_QWORD *)(arg20 + 8),
arg20 + 16);
v12 = v11 - 1;
if( v12 )
{
v13 = v12 - 1;
if( v13 )
{
v14 = v13 - 1;
if( v14 )
{
v15 = v14 - 1;
if( v15 )
{
v16 = v15 - 2;
if( v16 )
{
if( v16 != 1 )
return(unsigned int)-1073741811;
LODWORD(v22) = *(_DWORD *)(arg20 + 40);
LODWORD(a5) = *(_DWORD *)(arg20 + 24);
return(unsigned int)DrvDbSetDriverFileMappedProperty(
a1[0],
(INT64)a2,
*(VOID **)arg20,
*(_QWORD *)(arg20 + 16),
a5,
*(VOID **)(arg20 + 32),
v22);
}
else
{
return(unsigned int)DrvDbGetDriverFileMappedProperty(
a1[0],
(__int64)a2,
*(HANDLE *)arg20,
*(_QWORD *)(arg20 + 16),
*(_DWORD **)(arg20 + 24),
*(_WORD **)(arg20 + 32),
*(_DWORD *)(arg20 + 40),
*(unsigned int **)(arg20 + 48));
}
}
else
{
LODWORD(a5) = *(_DWORD *)(arg20 + 32);
return(unsigned int)DrvDbGetDriverFileMappedPropertyKeys(
a1[0],
(INT64)a2,
*(VOID **)arg20,
*(_QWORD *)(arg20 + 24),
a5,
*(_QWORD *)(arg20 + 40));
}
}
else
{
LODWORD(v23) = 0;
LODWORD(DataSize) = *(_DWORD *)(arg20 + 24);
return(unsigned int)DrvDbGetObjectList(
a1[0],
4i64,
*(_QWORD *)arg20,
*(_QWORD *)(arg20 + 8),
*(_WORD **)(arg20 + 16),
DataSize,
*(UINT64 **)(arg20 + 32),
v23);
}
}
else
{
return(unsigned int)DrvDbDeleteObjectRegKey(a1[0], 4, a2, 0);
}
}
v18 = *(unsigned int *)arg20;
LODWORD(a1[0]) = 0;
ObjectContext = DrvDbOpenDriverFileRegKey(v8, (INT64)a2, v18, 1, arg20 + 8, (INT64)a1);
if( ObjectContext >= 0 )
*(_BYTE *)(arg20 + 16) = LODWORD(a1[0]) == 1;
return(unsigned int)ObjectContext;
}Referenced by:
No references.