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