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