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.