SdbpGetStringTableItemFromStringRef
NTSTATUS __stdcall SdbpGetStringTableItemFromStringRef(PVOID Parameter){
int v1;
_DWORD *v2;
_DB **v3;
_DB *v4;
_DB **v5;
_DWORD *v6;
int v7;
int v9;
_DB *v10;
NTSTATUS v11;
int v12;
bool v13;
int v14;
unsigned int v15;
NTSTATUS result;
VOID *v17;
VOID **v18;
VOID *v19;
VOID **v20;
_RTL_RUN_ONCE v21;
v4 = 0i64;
v5 = v3;
v6 = v2;
v7 = v1;
v9 = 0;
v10 = 0i64;
v21.Value = 0i64;
if( *((_DWORD *)Parameter + 4) )
{
if( !*((_QWORD *)Parameter + 170) )
{
AslLogCallPrintf(1ui64, (INT8 *)"SdbpGetStringTableItemFromStringRef", 0x2EFui64, (INT8 *)"No stringtable in DB");
v11 = -1073741275;
goto LABEL_8;
}
v10 = (_DB *)*((_QWORD *)Parameter + 170);
v12 = 6;
}
else
{
v11 = RtlRunOnceExecuteOnce(
(_RTL_RUN_ONCE *)Parameter + 168,
(UINT64)InitOnceGetStringTableOffset,
(INT64 *)Parameter,
&v21,
v17,
v18,
v19,
v20);
if( v11 < 0 )
{
AslLogCallPrintf(
1ui64,
(INT8 *)"SdbpGetStringTableItemFromStringRef",
0x303ui64,
(INT8 *)"RtlRunOnceExecuteOnce failed for InitOnceGetStringTableOffset [%x]");
goto LABEL_8;
}
if( !v21.Value || (v12 = *(_DWORD *)v21.Ptr) == 0 )
{
AslLogCallPrintf(
1ui64,
(INT8 *)"SdbpGetStringTableItemFromStringRef",
0x313ui64,
(INT8 *)"InitOnceGetStringTableOffset succeeded but failed to find string table");
v11 = -1073741271;
goto LABEL_8;
}
v10 = (_DB *)Parameter;
}
v9 = v12 + v7;
if( SdbGetTagFromTagID(v10, (unsigned int)(v12 + v7)) == 0x8801 )
{
v11 = 0;
}
else
{
AslLogCallPrintf(
1ui64,
(INT8 *)"SdbpGetStringTableItemFromStringRef",
0x321ui64,
(INT8 *)"Pulled out a non-stringtable item");
v11 = -1073741788;
}
LABEL_8:
v13 = v11 < 0;
v14 = 0;
v15 = ~v11;
if( !v13 )
{
v14 = v9;
v4 = v10;
}
*v6 = v14;
result = v15 >> 31;
*v5 = v4;
return result;
}Referenced by:
SdbpGetMappedStringFromTable