KsepDbGetDriverShimsInternal

INT64 __fastcall KsepDbGetDriverShimsInternal(
        INT64 a1,
        INT64 *a2,
        INT64 a3,
        VOID *a4,
        UINT64 a5,
        CHAR **a6,
        UINT64 *a7){
  CHAR *v7; 
  UINT64 *v8; 
  const wchar_t *v10; 
  wchar_t *v11; 
  unsigned int DatabaseMatch; 
  NTSTATUS SdbString; 
  RTL_RUN_ONCE *v15; 
  unsigned int FirstTag; 
  __int64 v17; 
  CHAR *v18; 
  unsigned int NextTag; 
  __int64 i; 
  unsigned int v21; 
  unsigned int v22; 
  __int64 v23; 
  unsigned int v24; 
  unsigned int v25; 
  unsigned int v26; 
  unsigned int v27; 
  INT64 v28[2]; 
  __int128 v29; 
  UINT64 v30; 
  v7 = 0i64;
  v8 = a7;
  v10 = *(const wchar_t **)(a3 + 8);
  v28[0] = 0i64;
  *a6 = 0i64;
  v11 = (wchar_t *)(unsigned int)a5;
  LODWORD(v30) = 0;
  *(_DWORD *)v8 = 0;
  DatabaseMatch = SdbGetDatabaseMatchEx(a1, 0, v10, (__int64)a4, (wchar_t *)a4, v11, a2);
  if( !DatabaseMatch
    || !(unsigned int)SdbTagRefToTagID(a1, DatabaseMatch, (PVOID **)v28, (int *)&v30)
    || (v15 = (RTL_RUN_ONCE *)v28[0], (FirstTag = SdbFindFirstTag(v28[0], (unsigned int)v30, 28710)) == 0) )
  {
    SdbString = -1073741275;
LABEL_3:
    KsepDbFreeDriverShims(v7, *(unsigned int *)v8);
    return(unsigned int)SdbString;
  }
  LODWORD(v17) = 0;
  do
  {
    FirstTag = SdbFindNextTag((__int64)v15, v30, FirstTag);
    v17 = (unsigned int)(v17 + 1);
  }
  while( FirstTag );
  *(_DWORD *)v8 = v17;
  KsepPoolAllocatePaged(80 * v17);
  v7 = v18;
  if( !v18 )
  {
    SdbString = -1073741801;
    goto LABEL_3;
  }
  NextTag = SdbFindFirstTag((INT64)v15, (unsigned int)v30, 28710);
  for( i = 0i64; ; i = (unsigned int)(i + 1) )
  {
    v27 = NextTag;
    if( !NextTag )
      break;
    if( (unsigned int)i < *(_DWORD *)v8 )
    {
      v21 = SdbFindFirstTag((INT64)v15, NextTag, 36880);
      if( v21 )
      {
        *(_OWORD *)v28 = 0i64;
        *(_OWORD *)&v7[80 * i] = *(_OWORD *)SdbReadGUIDTag(&v29, (INT64)v15, v21, v28);
      }
      v22 = SdbFindFirstTag((INT64)v15, v27, 24577);
      v23 = 80 * i;
      if( v22 )
      {
        SdbString = KsepDbGetSdbString(v15, v22, (UNICODE_STRING *)&v7[v23 + 16]);
        if( SdbString < 0 )
          goto LABEL_3;
      }
      v24 = SdbFindFirstTag((INT64)v15, v27, 24579);
      if( v24 )
      {
        SdbString = KsepDbGetSdbString(v15, v24, (UNICODE_STRING *)&v7[v23 + 32]);
        if( SdbString < 0 )
          goto LABEL_3;
      }
      v25 = SdbFindFirstTag((INT64)v15, v27, 16407);
      if( v25 )
        *(_DWORD *)&v7[v23 + 64] = SdbReadDWORDTag((INT64)v15, v25, 0i64);
      v26 = SdbFindFirstTag((INT64)v15, v27, 24584);
      if( v26 )
      {
        SdbString = KsepDbGetSdbString(v15, v26, (UNICODE_STRING *)&v7[v23 + 48]);
        if( SdbString < 0 )
          goto LABEL_3;
      }
      *(_DWORD *)&v7[v23 + 68] = 1;
    }
    NextTag = SdbFindNextTag((__int64)v15, v30, v27);
  }
  SdbString = 0;
  *a6 = v7;
  return(unsigned int)SdbString;
}

Referenced by:

KsepDbGetDriverShims