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.