KsepDbGetShimInfo

INT64 __fastcall KsepDbGetShimInfo(INT64 a1, UINT64 a2){
  INT64 v2; 
  UNICODE_STRING *v3; 
  __int64 v4; 
  NTSTATUS v5; 
  __int64 *v6; 
  NTSTATUS SdbString; 
  __int64 v8; 
  _DWORD *v9; 
  __int64 v10; 
  __m128i *v11; 
  __int64 v12; 
  WCHAR *v13; 
  RTL_RUN_ONCE *v14; 
  unsigned int FirstStringIndexedTag; 
  __int64 v16; 
  __int64 v17; 
  int v18; 
  unsigned int v19; 
  RTL_RUN_ONCE *v20; 
  unsigned int FirstTag; 
  __m128i *v22; 
  __m128i v23; 
  unsigned __int64 v24; 
  UINT64 v25; 
  unsigned int v26; 
  unsigned int v27; 
  _DWORD *v28; 
  char *v29; 
  __int128 v30; 
  unsigned int v32; 
  unsigned int v33; 
  PVOID DbHandleOut[2]; 
  INT64 v35; 
  __int64 v36; 
  __int64 v37; 
  INT64 v38; 
  INT64 a5[2]; 
  __int128 v40; 
  __int64 v41; 
  __int128 v42; 
  __int128 v43; 
  v38 = a1;
  v2 = a1;
  v32 = 0;
  v35 = 0i64;
  v43 = 0i64;
  v3 = 0i64;
  DbHandleOut[0] = 0i64;
  v4 = (unsigned int)a2;
  v5 = KseShimDatabaseOpen(DbHandleOut);
  v6 = (__int64 *)DbHandleOut[0];
  SdbString = v5;
  if( v5 >= 0 )
  {
    v8 = (unsigned int)v4;
    KsepPoolAllocatePaged(80 * v4);
    v33 = 0;
    v3 = (UNICODE_STRING *)v9;
    v10 = *v6;
    SdbString = -1073741275;
    v36 = *v6;
    if( (_DWORD)v4 )
    {
      v11 = (__m128i *)(v9 + 16);
      v12 = v2 - (_QWORD)v9;
      v37 = v2 - (_QWORD)v3;
      while( 1 )
      {
        v13 = *(WCHAR **)((char *)&v11[-2] + v12 - 8);
        v14 = *(RTL_RUN_ONCE **)(v10 + 8);
        LODWORD(DbHandleOut[0]) = 0;
        v41 = 0i64;
        *(_OWORD *)a5 = 0i64;
        v40 = 0i64;
        FirstStringIndexedTag = SdbFindFirstStringIndexedTag(v14, 28709, 24577, v13, (INT64)a5);
        v16 = (__int64)v14;
        v17 = v36;
        v18 = SdbTagIDToTagRef(v36, v16, FirstStringIndexedTag, (unsigned int *)DbHandleOut);
        v19 = v18 != 0 ? LODWORD(DbHandleOut[0]) : 0;
        if( !v19 )
          break;
        if( (unsigned int)SdbTagRefToTagID(v17, v19, (PVOID **)&v35, (int *)&v32) )
        {
          v20 = (RTL_RUN_ONCE *)v35;
          FirstTag = SdbFindFirstTag(v35, v32, 36880);
          if( !FirstTag )
            break;
          *(_OWORD *)DbHandleOut = 0i64;
          v22 = (__m128i *)SdbReadGUIDTag(&v42, (INT64)v20, FirstTag, DbHandleOut);
          v23 = *v22;
          v24 = v22->m128i_i64[0] - v43;
          if( !v24 )
            v24 = _mm_srli_si128(v23, 8).m128i_u64[0] - *((_QWORD *)&v43 + 1);
          if( !v24 )
            break;
          v25 = v32;
          v11[-4] = v23;
          v26 = SdbFindFirstTag((INT64)v20, v25, 24579);
          if( !v26 )
            break;
          SdbString = KsepDbGetSdbString(v20, v26, &v3[5 * v33 + 2]);
          if( SdbString < 0 )
            break;
          v27 = SdbFindFirstTag((INT64)v20, v32, 16407);
          if( !v27 )
            break;
          v11->m128i_i32[0] = SdbReadDWORDTag((INT64)v20, v27, 0i64);
        }
        v11 += 5;
        v10 = v36;
        ++v33;
        v12 = v37;
        if( v33 >= (unsigned int)v4 )
        {
          v2 = v38;
          goto LABEL_16;
        }
      }
    }
    else
    {
LABEL_16:
      SdbString = 0;
      if( (_DWORD)v4 )
      {
        v28 = (_DWORD *)(v2 + 64);
        v29 = (char *)v3 - v2;
        do
        {
          *v28 = *(_DWORD *)((char *)v28 + (_QWORD)v29);
          v30 = *(_OWORD *)((char *)v28 + (_QWORD)v29 - 32);
          v28 += 20;
          *((_OWORD *)v28 - 7) = v30;
          *((_OWORD *)v28 - 9) = *(_OWORD *)((char *)v28 + (_QWORD)v29 - 144);
          --v8;
        }
        while( v8 );
      }
    }
  }
  if( v6 )
    KseShimDatabaseClose(v6);
  if( SdbString >= 0 )
    KsepPoolFreePaged(v3);
  else
    KsepDbFreeDriverShims((CHAR *)v3, (unsigned int)v4);
  return(unsigned int)SdbString;
}

Referenced by:

KsepEngineGetShimsFromRegistry