SdbpCheckMatchingWildcardFiles

INT64 __fastcall SdbpCheckMatchingWildcardFiles(INT64 a1, INT64 a2, RTL_RUN_ONCE *a3, INT64 a4, UINT64 a5, INT64 a6){
  _DWORD *v7; 
  unsigned int v8; 
  WCHAR *v9; 
  UINT64 v10; 
  unsigned int FirstTag; 
  WCHAR *StringTagPtr; 
  __int64 v13; 
  WCHAR *v14; 
  __int64 v15; 
  int *v16; 
  int v17; 
  unsigned __int64 v18; 
  int i; 
  void *v20; 
  INT64 v21; 
  void *v22; 
  INT64 result; 
  INT64 v24; 
  UINT64 v25; 
  UINT64 FileMappingHandleOut; 
  WCHAR *v27; 
  INT64 v28; 
  INT64 v29; 
  WCHAR *v30; 
  INT64 v31; 
  RTL_RUN_ONCE *v32; 
  int *v33; 
  wchar_t pszDest[264]; 
  v29 = a2;
  v32 = a3;
  v7 = (_DWORD *)a1;
  v31 = a1;
  v8 = 0;
  v9 = 0i64;
  LODWORD(v25) = 0;
  v10 = 0i64;
  v27 = 0i64;
  FileMappingHandleOut = 0i64;
  v28 = 0i64;
  if( *(_QWORD *)(a6 + 88) )
  {
    LODWORD(v25) = 1;
LABEL_30:
    v8 = 1;
    goto LABEL_31;
  }
  FirstTag = SdbFindFirstTag((INT64)a3, (unsigned int)a5, 24577);
  if( !FirstTag )
    goto LABEL_31;
  StringTagPtr = (WCHAR *)SdbGetStringTagPtr(a3, FirstTag);
  v30 = StringTagPtr;
  v14 = StringTagPtr;
  if( StringTagPtr )
  {
    v15 = -1i64;
    do
      ++v15;
    while( StringTagPtr[v15] );
    if( (*(_DWORD *)a6 & 1) == 0 )
    {
      if( !(unsigned int)SdbpInitializeSearchDBContext(a6, v13, (INT64)StringTagPtr) )
      {
        AslLogCallPrintf(1ui64, "SdbpCheckMatchingWildcardFiles", 0xA61ui64, "Failed to initialize SEARCHDBCONTEXT");
        goto LABEL_31;
      }
      v14 = v30;
    }
    v16 = *(int **)(a6 + 72);
    v17 = 0;
    v33 = v16;
    if( *v16 <= 0 )
    {
LABEL_29:
      v7 = (_DWORD *)v31;
      *(_DWORD *)(a6 + 80) = 1;
      goto LABEL_30;
    }
    while( (unsigned int)SdbpResolveMatchingFile(v29, a6, v14, (unsigned int)v15, (INT64)&v16[12 * v17 + 2], &v27) )
    {
      AslPathWildcardFindClose(&v28);
      memset((INT64)pszDest, 0i64);
      v9 = v27;
      for( i = AslPathWildcardFindFirst(pszDest, v18, v27, &v28);
            ;
            i = AslPathWildcardFindNext(pszDest, v21, (UINT64 *)v28) )
      {
        v20 = 0i64;
        if( i < 0 )
          break;
        if( v10 )
        {
          AslFileMappingDelete(v10);
          FileMappingHandleOut = 0i64;
        }
        i = AslFileMappingCreate(&FileMappingHandleOut, pszDest, 0i64, 0i64, 0i64);
        v10 = FileMappingHandleOut;
        if( i < 0 )
          break;
        if( (int)SdbpCheckAllAttributes(&v25, v29, v32, (unsigned int)a5, FileMappingHandleOut) >= 0 )
          goto LABEL_29;
      }
      if( i != -2147483642 )
      {
        LODWORD(v24) = i;
        AslLogCallPrintf(
          3ui64,
          "SdbpCheckMatchingWildcardFiles",
          0xAAFui64,
          "AslPathWildcardFindFirst/Next failed to find a file [%x]",
          v24);
      }
      if( v9 )
      {
        AslFree(v20);
        v9 = 0i64;
        v27 = 0i64;
      }
      v16 = v33;
      if( ++v17 >= *v33 )
        goto LABEL_29;
      v14 = v30;
    }
    AslLogCallPrintf(1ui64, "SdbpCheckMatchingWildcardFiles", 0xA79ui64, "Failed to resolve matching file");
    v9 = v27;
    v7 = (_DWORD *)v31;
  }
  else
  {
    AslLogCallPrintf(1ui64, "SdbpCheckMatchingWildcardFiles", 0xA53ui64, "Failed to get the string from the database");
  }
LABEL_31:
  AslPathWildcardFindClose(&v28);
  AslFileMappingDelete(v10);
  if( v9 )
    AslFree(v22);
  result = v8;
  *v7 = v25;
  return result;
}

Referenced by:

No references.