SdbpInitializeSearchDBContext
NTSTATUS __stdcall SdbpInitializeSearchDBContext(tagSEARCHDBCONTEXT *pContext){
INT64 v1;
tagSEARCHDBCONTEXT *v2;
WCHAR *ProcessHistory;
__int64 v4;
__int64 v5;
WCHAR *v6;
__int64 v7;
__int64 v8;
NTSTATUS result;
INT8 *v10;
UINT64 v11;
v2 = pContext;
if( *((_QWORD *)pContext + 9) )
return 1;
ProcessHistory = (WCHAR *)*((_QWORD *)pContext + 8);
if( !ProcessHistory )
{
if( (*pContext & 2) != 0 || (pContext = (tagSEARCHDBCONTEXT *)*((_QWORD *)pContext + 7)) == 0i64 )
{
v4 = -1i64;
v5 = -1i64;
do
++v5;
while( *(_WORD *)(*((_QWORD *)v2 + 4) + 2 * v5) );
do
++v4;
while( *(_WORD *)(*((_QWORD *)v2 + 5) + 2 * v4) );
v6 = (WCHAR *)AslAlloc(pContext, 2 * ((int)v4 + (int)v5 + 1), v1);
ProcessHistory = v6;
if( !v6 )
{
v10 = (INT8 *)"Failed to allocate process history buffer";
v11 = 338i64;
goto LABEL_17;
}
v7 = (unsigned int)v5;
v8 = (unsigned int)v5;
memmove(v6, *((const VOID **)v2 + 4), v8 * 2);
memmove(&ProcessHistory[v8], *((const VOID **)v2 + 5), 2 * v4);
ProcessHistory[(unsigned int)v4 + v7] = 0;
}
else
{
ProcessHistory = SdbpGetProcessHistory((WCHAR *)pContext, *((WCHAR **)v2 + 4), *((WCHAR **)v2 + 5));
if( !ProcessHistory )
{
v10 = "Failed to retrieve process history";
v11 = 353i64;
LABEL_17:
AslLogCallPrintf(1ui64, (INT8 *)"SdbpInitializeSearchDBContext", v11, v10);
return 0;
}
}
}
*((_QWORD *)v2 + 8) = ProcessHistory;
result = SdbpCreateSearchPathPartsFromPath(ProcessHistory, (tagSEARCHPATH **)v2 + 9);
if( result )
*v2 |= 1u;
return result;
}Referenced by:
SdbpCheckMatchingDir
SdbpCheckMatchingFiles
SdbpCheckMatchingTextEntry
SdbpCheckMatchingWildcardFiles