SdbpCheckMatchingWildcardFiles

NTSTATUS __stdcall SdbpCheckMatchingWildcardFiles(
        INT64 rcx0,
        INT64 a3,
        VOID *a4,
        INT64 tiParent,
        UINT64 pContext,
        UINT64 a6){
  _DWORD *v7; 
  NTSTATUS v8; 
  WCHAR *v9; 
  WCHAR **v10; 
  unsigned int FirstTag; 
  WCHAR *StringTagPtr; 
  WCHAR *v13; 
  INT8 *v14; 
  UINT64 v15; 
  __int64 v16; 
  int *v17; 
  int v18; 
  NTSTATUS i; 
  VOID *v20; 
  INT64 v21; 
  VOID *v22; 
  NTSTATUS result; 
  UINT64 bMatchedOut; 
  WCHAR **FileMappingHandleOut; 
  WCHAR *szFullPathOut; 
  INT64 v27; 
  VOID *hSDB; 
  WCHAR *szMatchFile; 
  INT64 v30; 
  VOID *pdb; 
  int *v32; 
  __int16 pszDest[264]; 

  hSDB = (VOID *)a3;
  pdb = a4;
  v7 = (_DWORD *)rcx0;
  v30 = rcx0;
  v8 = 0;
  v9 = 0i64;
  LODWORD(bMatchedOut) = 0;
  v10 = 0i64;
  szFullPathOut = 0i64;
  FileMappingHandleOut = 0i64;
  v27 = 0i64;
  if( *(_QWORD *)(a6 + 88) )
  {
    LODWORD(bMatchedOut) = 1;
LABEL_30:
    v8 = 1;
    goto LABEL_31;
  }
  FirstTag = SdbFindFirstTag((_DB *)a4, (unsigned int)pContext, 0x6001u);
  if( !FirstTag )
    goto LABEL_31;
  StringTagPtr = SdbGetStringTagPtr(a4, FirstTag);
  szMatchFile = StringTagPtr;
  v13 = StringTagPtr;
  if( !StringTagPtr )
  {
    v14 = (INT8 *)"Failed to get the string from the database";
    v15 = 2643i64;
LABEL_6:
    AslLogCallPrintf(1ui64, (INT8 *)"SdbpCheckMatchingWildcardFiles", v15, v14);
    goto LABEL_31;
  }
  v16 = -1i64;
  do
    ++v16;
  while( StringTagPtr[v16] );
  if( (*(_DWORD *)a6 & 1) == 0 )
  {
    if( !SdbpInitializeSearchDBContext((tagSEARCHDBCONTEXT *)a6) )
    {
      v14 = (INT8 *)"Failed to initialize SEARCHDBCONTEXT";
      v15 = 2657i64;
      goto LABEL_6;
    }
    v13 = szMatchFile;
  }
  v17 = *(int **)(a6 + 72);
  v18 = 0;
  v32 = v17;
  if( *v17 <= 0 )
  {
LABEL_29:
    v7 = (_DWORD *)v30;
    *(_DWORD *)(a6 + 80) = 1;
    goto LABEL_30;
  }
  while( SdbpResolveMatchingFile(
            hSDB,
            (tagSEARCHDBCONTEXT *)a6,
            v13,
            (unsigned int)v16,
            &v17[12 * v18 + 2],
            &szFullPathOut) )
  {
    AslPathWildcardFindClose(&v27);
    memset(pszDest, 0i64, 0x208u);
    v9 = szFullPathOut;
    for( i = AslPathWildcardFindFirst((_NTSTRSAFE_PWSTR)pszDest);
          ;
          i = AslPathWildcardFindNext(pszDest, v21, (UINT64 *)v27) )
    {
      v20 = 0i64;
      if( i < 0 )
        break;
      if( v10 )
      {
        AslFileMappingDelete((UINT64)v10);
        FileMappingHandleOut = 0i64;
      }
      i = AslFileMappingCreate(&FileMappingHandleOut, (const WCHAR *)pszDest, 0i64, 0i64, 0i64);
      v10 = FileMappingHandleOut;
      if( i < 0 )
        break;
      if( SdbpCheckAllAttributes(
             &bMatchedOut,
             (tagSDBCONTEXT *)hSDB,
             pdb,
             (unsigned int)pContext,
             (UINT64)FileMappingHandleOut) >= 0 )
        goto LABEL_29;
    }
    if( i != -2147483642 )
      AslLogCallPrintf(
        3ui64,
        (INT8 *)"SdbpCheckMatchingWildcardFiles",
        0xAAFui64,
        (INT8 *)"AslPathWildcardFindFirst/Next failed to find a file [%x]");
    if( v9 )
    {
      AslFree(v20);
      v9 = 0i64;
      szFullPathOut = 0i64;
    }
    v17 = v32;
    if( ++v18 >= *v32 )
      goto LABEL_29;
    v13 = szMatchFile;
  }
  AslLogCallPrintf(
    1ui64,
    (INT8 *)"SdbpCheckMatchingWildcardFiles",
    0xA79ui64,
    (INT8 *)"Failed to resolve matching file");
  v9 = szFullPathOut;
  v7 = (_DWORD *)v30;
LABEL_31:
  AslPathWildcardFindClose(&v27);
  AslFileMappingDelete((UINT64)v10);
  if( v9 )
    AslFree(v22);
  result = v8;
  *v7 = bMatchedOut;
  return result;
}

Referenced by:

No references.