SdbpCheckMatchingFiles
NTSTATUS __stdcall SdbpCheckMatchingFiles(
INT64 *bMatchedOut,
VOID *hSDB,
_DB *pdb,
UINT64 tiParent,
UINT64 tiMatch,
VOID *Context,
VOID *MatcherContext){
VOID *v7;
NTSTATUS v8;
VOID *v11;
unsigned int FirstTag;
WCHAR *StringTagPtr;
__int64 v14;
tagSEARCHDBCONTEXT v15;
int *v16;
int v17;
VOID *v18;
unsigned __int64 v19;
__int64 v20;
VOID *v21;
unsigned int v23;
int v24;
INT8 *v25;
UINT64 v26;
VOID *v27;
UINT64 bMatchedOuta;
WCHAR *FullPath;
__int64 v30;
int *v31;
v7 = Context;
v8 = 0;
LODWORD(bMatchedOuta) = 0;
FullPath = 0i64;
v11 = 0i64;
if( *((_QWORD *)Context + 11) )
{
LODWORD(bMatchedOuta) = 1;
goto LABEL_18;
}
FirstTag = SdbFindFirstTag(pdb, (unsigned int)tiMatch, 0x6001u);
if( FirstTag )
{
StringTagPtr = SdbGetStringTagPtr(pdb, FirstTag);
if( StringTagPtr )
{
if( *((_QWORD *)v7 + 1) && *StringTagPtr == 42 )
{
v23 = SdbpCheckAllAttributes(
&bMatchedOuta,
(tagSDBCONTEXT *)hSDB,
pdb,
(unsigned int)tiMatch,
*((_QWORD *)v7 + 1));
if( AslFileNotFound(v23) || v24 >= 0 )
v8 = 1;
else
AslLogCallPrintf(
1ui64,
(INT8 *)"SdbpCheckMatchingFiles",
0x99Dui64,
(INT8 *)"Failed to check file attributes [%x]");
goto LABEL_19;
}
v14 = -1i64;
do
++v14;
while( StringTagPtr[v14] );
v15 = *(_DWORD *)v7;
v30 = v14;
if( (v15 & 1) != 0 )
goto LABEL_10;
if( SdbpInitializeSearchDBContext((tagSEARCHDBCONTEXT *)v7) )
{
LODWORD(v14) = v30;
LABEL_10:
v16 = (int *)*((_QWORD *)v7 + 9);
v17 = 0;
v31 = v16;
if( *v16 <= 0 )
goto LABEL_15;
while( 1 )
{
if( !SdbpResolveMatchingFile(
hSDB,
(tagSEARCHDBCONTEXT *)v7,
StringTagPtr,
(unsigned int)v14,
&v16[12 * v17 + 2],
&FullPath) )
{
AslLogCallPrintf(
1ui64,
(INT8 *)"SdbpCheckMatchingFiles",
0x9CFui64,
(INT8 *)"Failed to resolve matching file");
goto LABEL_19;
}
Context = 0i64;
if( AslFileMappingCreate((WCHAR ***)&Context, FullPath, 0i64, 0i64, 0i64) >= 0 )
{
v11 = Context;
if( SdbpCheckAllAttributes(
&bMatchedOuta,
(tagSDBCONTEXT *)hSDB,
pdb,
(unsigned int)tiMatch,
(UINT64)Context) >= 0 )
{
if( v17 > 0 )
*((_DWORD *)v7 + 20) = 1;
LABEL_15:
v19 = *StringTagPtr;
LOWORD(v19) = v19 - 37;
if( (unsigned __int16)v19 <= 0x37u )
{
v20 = 0x80000000000201i64;
if( _bittest64(&v20, v19) )
*((_DWORD *)v7 + 20) = 1;
}
LABEL_18:
v8 = 1;
goto LABEL_19;
}
AslFileMappingDelete((UINT64)v11);
v11 = 0i64;
AslFree(v27);
}
else
{
AslFree(v18);
v11 = Context;
}
v16 = v31;
++v17;
LODWORD(v14) = v30;
FullPath = 0i64;
if( v17 >= *v31 )
goto LABEL_15;
}
}
v25 = (INT8 *)"Failed to initialize SEARCHDBCONTEXT";
v26 = 2487i64;
}
else
{
v25 = (INT8 *)"Failed to get the string from the database";
v26 = 2436i64;
}
AslLogCallPrintf(1ui64, (INT8 *)"SdbpCheckMatchingFiles", v26, v25);
}
LABEL_19:
AslFileMappingDelete((UINT64)v11);
AslFree(v21);
*(_DWORD *)bMatchedOut = bMatchedOuta;
return v8;
}Referenced by:
No references.