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.