InitOnceScanIndexes
NTSTATUS __fastcall InitOnceScanIndexes(PRTL_RUN_ONCE RunOnce, PVOID Parameter, PVOID *Context){
NTSTATUS v3;
char *v6;
unsigned int FirstChild;
unsigned int v8;
unsigned int i;
unsigned int v10;
unsigned int FirstTag;
unsigned int v12;
unsigned int v13;
int v14;
__int64 v15;
INT8 *v17;
UINT64 v18;
INT8 *v19;
UINT64 v20;
v3 = 0;
if( Parameter )
{
if( Context )
{
v6 = (char *)Parameter + 48;
memset((char *)Parameter + 48, 0i64, 0x500u);
FirstChild = SdbGetFirstChild((_DB *)Parameter, 0i64);
v8 = FirstChild;
if( FirstChild )
{
if( SdbGetTagFromTagID((_DB *)Parameter, FirstChild) != 30722 )
{
AslLogCallPrintf(
1ui64,
(INT8 *)"InitOnceScanIndexes",
0x3C6ui64,
(INT8 *)"Root child tag is not index tagid 0x%lx");
return v3;
}
*((_DWORD *)Parameter + 339) = 0;
for( i = SdbFindFirstTag((_DB *)Parameter, v8, 0x7803u); ; i = SdbFindNextTag((_DB *)Parameter, v8, v10) )
{
v10 = i;
if( !i )
{
*Context = v6;
return 1;
}
if( *((_DWORD *)Parameter + 339) == 32 )
break;
FirstTag = SdbFindFirstTag((_DB *)Parameter, i, 0x3802u);
if( !FirstTag )
{
v19 = "Index missing TAG_INDEX_TAG";
v20 = 988i64;
goto LABEL_22;
}
*((_WORD *)Parameter + 20 * *((unsigned int *)Parameter + 339) + 26) = SdbReadWORDTag(
(_DB *)Parameter,
FirstTag,
0);
v12 = SdbFindFirstTag((_DB *)Parameter, v10, 0x3803u);
if( !v12 )
{
v19 = "Index missing TAG_INDEX_KEY";
v20 = 997i64;
goto LABEL_22;
}
*((_WORD *)Parameter + 20 * *((unsigned int *)Parameter + 339) + 27) = SdbReadWORDTag(
(_DB *)Parameter,
v12,
0);
v13 = SdbFindFirstTag((_DB *)Parameter, v10, 0x4016u);
if( v13 )
*((_DWORD *)Parameter + 10 * *((unsigned int *)Parameter + 339) + 20) = SdbReadDWORDTag(
(_DB *)Parameter,
v13,
0);
else
*((_DWORD *)Parameter + 10 * *((unsigned int *)Parameter + 339) + 20) = 0;
v14 = SdbFindFirstTag((_DB *)Parameter, v10, 0x9801u);
v15 = *((unsigned int *)Parameter + 339);
if( !v14 )
{
*((_WORD *)Parameter + 20 * v15 + 26) = 0;
v19 = (INT8 *)"Index missing TAG_INDEX_BITS";
v20 = 1014i64;
goto LABEL_22;
}
*((_DWORD *)Parameter + 10 * v15 + 12) = v14;
++*((_DWORD *)Parameter + 339);
}
v19 = "Too many indexes in file: recompile and increase SDB_MAX_INDEXES";
v20 = 981i64;
}
else
{
v19 = "Failed to get the child index from root";
v20 = 961i64;
}
LABEL_22:
AslLogCallPrintf(1ui64, (INT8 *)"InitOnceScanIndexes", v20, v19);
return v3;
}
v17 = (INT8 *)"No return context was supplied for InitOnceScanIndexes";
v18 = 946i64;
}
else
{
v17 = "PDB was not supplied for InitOnceScanIndexes";
v18 = 940i64;
}
AslLogCallPrintf(1ui64, (INT8 *)"InitOnceScanIndexes", v18, v17);
return 0;
}Referenced by:
No references.