SdbpCheckMatchingDir

NTSTATUS __stdcall SdbpCheckMatchingDir(UINT64 *a1, INT64 a2, _RTL_RUN_ONCE *a3, INT64 a4, UINT64 tiParent, WCHAR *P){
  UINT64 *v7; 
  int v8; 
  NTSTATUS DoesDirectoryExistNtPath; 
  unsigned int FirstTag; 
  WCHAR *StringTagPtr; 
  WCHAR *v12; 
  INT8 *v13; 
  UINT64 v14; 
  __int64 v15; 
  WCHAR *v16; 
  int *v17; 
  WCHAR *v18; 
  unsigned __int64 v19; 
  __int64 v20; 
  NTSTATUS result; 

  v7 = a1;
  v8 = 0;
  DoesDirectoryExistNtPath = 0;
  FirstTag = SdbFindFirstTag((_DB *)a3, (unsigned int)tiParent, 0x6001u);
  if( FirstTag )
  {
    StringTagPtr = SdbGetStringTagPtr(a3, FirstTag);
    v12 = StringTagPtr;
    if( !StringTagPtr )
    {
      v13 = (INT8 *)"Failed to get the string from the database";
      v14 = 2295i64;
LABEL_4:
      AslLogCallPrintf(1ui64, (INT8 *)"SdbpCheckMatchingDir", v14, v13);
      goto LABEL_20;
    }
    v15 = -1i64;
    do
      ++v15;
    while( StringTagPtr[v15] );
    v16 = P;
    if( (*(_DWORD *)P & 1) == 0 && !SdbpInitializeSearchDBContext((tagSEARCHDBCONTEXT *)P) )
    {
      v13 = (INT8 *)"Failed to initialize SEARCHDBCONTEXT";
      v14 = 2308i64;
      goto LABEL_4;
    }
    v17 = (int *)*((_QWORD *)v16 + 9);
    if( *v17 <= 0 )
    {
LABEL_17:
      v19 = *v12;
      LOWORD(v19) = v19 - 37;
      if( (unsigned __int16)v19 <= 0x37u )
      {
        v20 = 0x80000000000201i64;
        if( _bittest64(&v20, v19) )
          *((_DWORD *)v16 + 20) = 1;
      }
    }
    else
    {
      while( 1 )
      {
        P = 0i64;
        if( !SdbpResolveMatchingFile(
                (VOID *)a2,
                (tagSEARCHDBCONTEXT *)v16,
                v12,
                (unsigned int)v15,
                &v17[12 * v8 + 2],
                &P) )
          break;
        v18 = P;
        DoesDirectoryExistNtPath = AslDoesDirectoryExistNtPath(P);
        if( v18 )
          ExFreePoolWithTag(v18, 0x74705041u);
        if( DoesDirectoryExistNtPath )
        {
          if( v8 > 0 )
            *((_DWORD *)v16 + 20) = 1;
LABEL_16:
          v7 = a1;
          goto LABEL_17;
        }
        if( ++v8 >= *v17 )
          goto LABEL_16;
      }
      AslLogCallPrintf(1ui64, (INT8 *)"SdbpCheckMatchingDir", 0x91Cui64, (INT8 *)"Failed to resolve matching dir");
      v7 = a1;
    }
  }
LABEL_20:
  result = DoesDirectoryExistNtPath;
  *(_DWORD *)v7 = DoesDirectoryExistNtPath;
  return result;
}

Referenced by:

No references.