InitOnceScanIndexes

INT64 __fastcall InitOnceScanIndexes(PRTL_RUN_ONCE RunOnce, PVOID Parameter, PVOID *Context){
  unsigned int 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; 
  v3 = 0;
  if( !Parameter )
  {
    AslLogCallPrintf(1ui64, "InitOnceScanIndexes", 0x3ACui64, "PDB was not supplied for InitOnceScanIndexes");
    return 0i64;
  }
  if( !Context )
  {
    AslLogCallPrintf(1ui64, "InitOnceScanIndexes", 0x3B2ui64, "No return context was supplied for InitOnceScanIndexes");
    return 0i64;
  }
  v6 = (char *)Parameter + 48;
  memset((INT64)Parameter + 48, 0i64);
  FirstChild = SdbGetFirstChild((INT64)Parameter, 0i64);
  v8 = FirstChild;
  if( FirstChild )
  {
    if( (unsigned __int16)SdbGetTagFromTagID((__int64)Parameter, FirstChild) == 30722 )
    {
      *((_DWORD *)Parameter + 339) = 0;
      for( i = SdbFindFirstTag((INT64)Parameter, v8, 30723); ; i = SdbFindNextTag((__int64)Parameter, v8, v10) )
      {
        v10 = i;
        if( !i )
        {
          *Context = v6;
          return 1;
        }
        if( *((_DWORD *)Parameter + 339) == 32 )
          break;
        FirstTag = SdbFindFirstTag((INT64)Parameter, i, 14338);
        if( !FirstTag )
        {
          AslLogCallPrintf(1ui64, "InitOnceScanIndexes", 0x3DCui64, "Index missing TAG_INDEX_TAG");
          return v3;
        }
        *((_WORD *)Parameter + 20 * *((unsigned int *)Parameter + 339) + 26) = SdbReadWORDTag(
                                                                                 (__int64)Parameter,
                                                                                 FirstTag,
                                                                                 0);
        v12 = SdbFindFirstTag((INT64)Parameter, v10, 14339);
        if( !v12 )
        {
          AslLogCallPrintf(1ui64, "InitOnceScanIndexes", 0x3E5ui64, "Index missing TAG_INDEX_KEY");
          return v3;
        }
        *((_WORD *)Parameter + 20 * *((unsigned int *)Parameter + 339) + 27) = SdbReadWORDTag(
                                                                                 (__int64)Parameter,
                                                                                 v12,
                                                                                 0);
        v13 = SdbFindFirstTag((INT64)Parameter, v10, 16406);
        if( v13 )
          *((_DWORD *)Parameter + 10 * *((unsigned int *)Parameter + 339) + 20) = SdbReadDWORDTag(
                                                                                    (INT64)Parameter,
                                                                                    v13,
                                                                                    0i64);
        else
          *((_DWORD *)Parameter + 10 * *((unsigned int *)Parameter + 339) + 20) = 0;
        v14 = SdbFindFirstTag((INT64)Parameter, v10, 38913);
        v15 = *((unsigned int *)Parameter + 339);
        if( !v14 )
        {
          *((_WORD *)Parameter + 20 * v15 + 26) = 0;
          AslLogCallPrintf(1ui64, "InitOnceScanIndexes", 0x3F6ui64, "Index missing TAG_INDEX_BITS");
          return v3;
        }
        *((_DWORD *)Parameter + 10 * v15 + 12) = v14;
        ++*((_DWORD *)Parameter + 339);
      }
      AslLogCallPrintf(
        1ui64,
        "InitOnceScanIndexes",
        0x3D5ui64,
        "Too many indexes in file: recompile and increase SDB_MAX_INDEXES");
    }
    else
    {
      AslLogCallPrintf(1ui64, "InitOnceScanIndexes", 0x3C6ui64, "Root child tag is not index tagid 0x%lx", v8);
    }
  }
  else
  {
    AslLogCallPrintf(1ui64, "InitOnceScanIndexes", 0x3C1ui64, "Failed to get the child index from root");
  }
  return v3;
}

Referenced by:

No references.