KsepDbGetDriverShimsInternal

NTSTATUS __stdcall KsepDbGetDriverShimsInternal(VOID *hSDB, INT64 a2, INT64 a3, VOID *a4, INT64 a5, INT64 a6, INT64 a7){
  _KSE_SHIM_INFO *Paged; 
  _DWORD *v8; 
  const WCHAR *v10; 
  UINT64 v11; 
  unsigned int DatabaseMatch; 
  int SdbString; 
  _DB *v15; 
  unsigned int FirstTag; 
  __int64 v17; 
  unsigned int NextTag; 
  __int64 i; 
  unsigned int v20; 
  unsigned int v21; 
  __int64 v22; 
  unsigned int v23; 
  unsigned int v24; 
  unsigned int v25; 
  unsigned int v26; 
  _DB *ppdb[2]; 
  _GUID result; 
  UINT64 ptiWhich; 

  Paged = 0i64;
  v8 = (_DWORD *)a7;
  v10 = *(const WCHAR **)(a3 + 8);
  ppdb[0] = 0i64;
  *(_QWORD *)a6 = 0i64;
  v11 = (unsigned int)a5;
  LODWORD(ptiWhich) = 0;
  *v8 = 0;
  DatabaseMatch = SdbGetDatabaseMatchEx(hSDB, 0i64, v10, a4, a4, v11, (tagSDBBMACHINEINFO *)a2);
  if( !DatabaseMatch
    || !SdbTagRefToTagID(hSDB, DatabaseMatch, ppdb, &ptiWhich)
    || (v15 = ppdb[0], (FirstTag = SdbFindFirstTag(ppdb[0], (unsigned int)ptiWhich, 0x7026u)) == 0) )
  {
    SdbString = -1073741275;
LABEL_3:
    KsepDbFreeDriverShims(Paged, (unsigned int)*v8);
    return SdbString;
  }
  LODWORD(v17) = 0;
  do
  {
    FirstTag = SdbFindNextTag(v15, (unsigned int)ptiWhich, FirstTag);
    v17 = (unsigned int)(v17 + 1);
  }
  while( FirstTag );
  *v8 = v17;
  Paged = (_KSE_SHIM_INFO *)KsepPoolAllocatePaged(80 * v17);
  if( !Paged )
  {
    SdbString = -1073741801;
    goto LABEL_3;
  }
  NextTag = SdbFindFirstTag(v15, (unsigned int)ptiWhich, 0x7026u);
  for( i = 0i64; ; i = (unsigned int)(i + 1) )
  {
    v26 = NextTag;
    if( !NextTag )
      break;
    if( (unsigned int)i < *v8 )
    {
      v20 = SdbFindFirstTag(v15, NextTag, 0x9010u);
      if( v20 )
      {
        *(_OWORD *)ppdb = 0i64;
        *(_GUID *)&Paged[20 * i] = *SdbReadGUIDTag(&result, v15, v20, (_GUID *)ppdb);
      }
      v21 = SdbFindFirstTag(v15, v26, 0x6001u);
      v22 = 20 * i;
      if( v21 )
      {
        SdbString = KsepDbGetSdbString(v15, v21, (_UNICODE_STRING *)&Paged[v22 + 4]);
        if( SdbString < 0 )
          goto LABEL_3;
      }
      v23 = SdbFindFirstTag(v15, v26, 0x6003u);
      if( v23 )
      {
        SdbString = KsepDbGetSdbString(v15, v23, (_UNICODE_STRING *)&Paged[v22 + 8]);
        if( SdbString < 0 )
          goto LABEL_3;
      }
      v24 = SdbFindFirstTag(v15, v26, 0x4017u);
      if( v24 )
        Paged[v22 + 16] = SdbReadDWORDTag(v15, v24, 0);
      v25 = SdbFindFirstTag(v15, v26, 0x6008u);
      if( v25 )
      {
        SdbString = KsepDbGetSdbString(v15, v25, (_UNICODE_STRING *)&Paged[v22 + 12]);
        if( SdbString < 0 )
          goto LABEL_3;
      }
      Paged[v22 + 17] = 1;
    }
    NextTag = SdbFindNextTag(v15, (unsigned int)ptiWhich, v26);
  }
  SdbString = 0;
  *(_QWORD *)a6 = Paged;
  return SdbString;
}

Referenced by:

KsepDbGetDriverShims