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