KsepDbGetShimInfo

NTSTATUS __stdcall KsepDbGetShimInfo(_KSE_SHIM_INFO *Shims, UINT64 ShimCount){
  _KSE_SHIM_INFO *v2; 
  __m128i *v3; 
  __int64 v4; 
  NTSTATUS v5; 
  VOID **v6; 
  int SdbString; 
  __int64 v8; 
  __m128i *Paged; 
  VOID *v10; 
  __m128i *v11; 
  __int64 v12; 
  WCHAR *v13; 
  _DB *v14; 
  unsigned int FirstStringIndexedTag; 
  _DB *v16; 
  VOID *v17; 
  int v18; 
  _DB *v19; 
  unsigned int FirstTag; 
  _GUID *v21; 
  __m128i v22; 
  unsigned __int64 v23; 
  UINT64 v24; 
  unsigned int v25; 
  unsigned int v26; 
  _DWORD *v27; 
  signed __int64 v28; 
  __int128 v29; 
  UINT64 ptiWhich; 
  PVOID DbHandleOut[2]; 
  _DB *ppdb; 
  VOID *hSDB; 
  __int64 v35; 
  _KSE_SHIM_INFO *v36; 
  _FIND_INFO pFindInfo[4]; 
  __int128 v38; 
  __int64 v39; 
  _GUID result; 
  __int128 v41; 

  v36 = Shims;
  v2 = Shims;
  LODWORD(ptiWhich) = 0;
  ppdb = 0i64;
  v41 = 0i64;
  v3 = 0i64;
  DbHandleOut[0] = 0i64;
  v4 = (unsigned int)ShimCount;
  v5 = KseShimDatabaseOpen(DbHandleOut);
  v6 = (VOID **)DbHandleOut[0];
  SdbString = v5;
  if( v5 >= 0 )
  {
    v8 = (unsigned int)v4;
    Paged = (__m128i *)KsepPoolAllocatePaged(80 * v4);
    HIDWORD(ptiWhich) = 0;
    v3 = Paged;
    v10 = *v6;
    SdbString = -1073741275;
    hSDB = *v6;
    if( (_DWORD)v4 )
    {
      v11 = Paged + 4;
      v12 = (char *)v2 - (char *)Paged;
      v35 = (char *)v2 - (char *)v3;
      while( 1 )
      {
        v13 = *(WCHAR **)((char *)&v11[-2] + v12 - 8);
        v14 = (_DB *)*((_QWORD *)v10 + 1);
        LODWORD(DbHandleOut[0]) = 0;
        v39 = 0i64;
        *(_OWORD *)pFindInfo = 0i64;
        v38 = 0i64;
        FirstStringIndexedTag = SdbFindFirstStringIndexedTag(v14, 0x7025u, 0x6001u, v13, pFindInfo);
        v16 = v14;
        v17 = hSDB;
        v18 = -SdbTagIDToTagRef(hSDB, v16, FirstStringIndexedTag, (UINT64 *)DbHandleOut);
        if( (v18 != 0 ? LODWORD(DbHandleOut[0]) : 0) == 0 )
          break;
        if( SdbTagRefToTagID(v17, v18 != 0 ? (__int64)DbHandleOut[0] : 0, &ppdb, &ptiWhich) )
        {
          v19 = ppdb;
          FirstTag = SdbFindFirstTag(ppdb, (unsigned int)ptiWhich, 0x9010u);
          if( !FirstTag )
            break;
          *(_OWORD *)DbHandleOut = 0i64;
          v21 = SdbReadGUIDTag(&result, v19, FirstTag, (_GUID *)DbHandleOut);
          v22 = *(__m128i *)v21;
          v23 = *(_QWORD *)&v21->Data1 - v41;
          if( !v23 )
            v23 = _mm_srli_si128(v22, 8).m128i_u64[0] - *((_QWORD *)&v41 + 1);
          if( !v23 )
            break;
          v24 = (unsigned int)ptiWhich;
          v11[-4] = v22;
          v25 = SdbFindFirstTag(v19, v24, 0x6003u);
          if( !v25 )
            break;
          SdbString = KsepDbGetSdbString(v19, v25, (_UNICODE_STRING *)&v3[5 * HIDWORD(ptiWhich) + 2]);
          if( SdbString < 0 )
            break;
          v26 = SdbFindFirstTag(v19, (unsigned int)ptiWhich, 0x4017u);
          if( !v26 )
            break;
          v11->m128i_i32[0] = SdbReadDWORDTag(v19, v26, 0);
        }
        v11 += 5;
        v10 = hSDB;
        ++HIDWORD(ptiWhich);
        v12 = v35;
        if( HIDWORD(ptiWhich) >= (unsigned int)v4 )
        {
          v2 = v36;
          goto LABEL_16;
        }
      }
    }
    else
    {
LABEL_16:
      SdbString = 0;
      if( (_DWORD)v4 )
      {
        v27 = v2 + 16;
        v28 = (char *)v3 - (char *)v2;
        do
        {
          *v27 = *(_DWORD *)((char *)v27 + v28);
          v29 = *(_OWORD *)((char *)v27 + v28 - 32);
          v27 += 20;
          *((_OWORD *)v27 - 7) = v29;
          *((_OWORD *)v27 - 9) = *(_OWORD *)((char *)v27 + v28 - 144);
          --v8;
        }
        while( v8 );
      }
    }
  }
  if( v6 )
    KseShimDatabaseClose(v6);
  if( SdbString >= 0 )
    KsepPoolFreePaged(v3);
  else
    KsepDbFreeDriverShims(v3->m128i_i32, (unsigned int)v4);
  return SdbString;
}

Referenced by:

KsepEngineGetShimsFromRegistry