DrvDbGetDriverDatabaseList
__int64 __fastcall DrvDbGetDriverDatabaseList(
_QWORD *a1,
unsigned __int8 (__fastcall *a2)(_QWORD, __int64, __int64, __int64),
__int64 a3,
_WORD *a4,
unsigned int a5,
unsigned int *a6){
unsigned int v6;
unsigned __int8(__fastcall *v8)(_QWORD, __int64, __int64, __int64);
int v9;
unsigned int v10;
__int64 **v11;
__int64 **v12;
int v13;
int v14;
unsigned int v15;
UINT64 dwFlags;
_QWORD *v18;
__int64 v20;
v20 = a3;
v18 = a1;
v6 = 0;
v8 = a2;
v9 = 0;
v10 = 0;
*a6 = 0;
if( a4 && a5 )
{
*a4 = 0;
v10 = *a6;
}
v11 = (__int64 **)(a1 + 2);
v12 = (__int64 **)a1[2];
if( v12 != a1 + 2 )
{
do
{
if( !v8 || v8(*a1, (__int64)v12[3], 7i64, a3) )
{
v13 = (*((unsigned __int16 *)v12 + 8) >> 1) + 1;
*a6 += v13;
if( a4 )
{
v14 = v13 + v9;
if( v13 + v9 < a5 )
{
LODWORD(dwFlags) = 2304;
RtlStringCchCopyExW(&a4[v9], a5 - v9, (WCHAR *)v12[3], 0i64, 0i64, dwFlags);
v9 = v14;
}
}
}
v12 = (__int64 **)*v12;
v8 = a2;
a1 = v18;
a3 = v20;
}
while( v12 != v11 );
v10 = *a6;
}
v15 = v10 + 1;
*a6 = v15;
if( a4 && v15 <= a5 )
a4[v15 - 1] = 0;
else
return(unsigned int)-1073741789;
return v6;
}Referenced by:
DrvDbDispatchDriverDatabase