SdbpCreateSearchDBContext

NTSTATUS __stdcall SdbpCreateSearchDBContext(
        tagSEARCHDBCONTEXT *pContext,
        WCHAR **hFileMapping,
        const WCHAR *szModuleName,
        const WCHAR *pEnvironment,
        _RTL_ARRAY *PackageAttributes){
  NTSTATUS v7; 
  WCHAR *v8; 
  VOID *v9; 
  INT64 v10; 
  WCHAR *v11; 
  __int64 v12; 
  unsigned int v13; 
  WCHAR *v14; 
  VOID *v15; 
  INT64 v16; 
  WCHAR *v17; 
  WCHAR *v19; 
  char *v20; 
  INT64 v21; 
  WCHAR *v22; 
  WCHAR v23; 
  WCHAR *v24; 
  VOID *v25; 
  INT64 v26; 
  _WORD *v27; 
  WCHAR *v28; 
  WCHAR FileName[264]; 
  __int16 pszSrc[264]; 

  v7 = 0;
  memset(pszSrc, 0i64, 0x208u);
  v8 = 0i64;
  memset(FileName, 0i64, 0x208u);
  if( !hFileMapping )
  {
    v19 = (WCHAR *)AslAlloc(v9, 4, v10);
    v20 = (char *)((char *)L"." - (char *)v19);
    v14 = v19;
    v21 = 2i64;
    v22 = v19;
    do
    {
      if( v21 == -2147483644 )
        break;
      v23 = *(WCHAR *)((char *)v22 + (_QWORD)v20);
      if( !v23 )
        break;
      *v22++ = v23;
      --v21;
    }
    while( v21 );
    v24 = v22 - 1;
    if( v21 )
      v24 = v22;
    *v24 = 0;
    v8 = (WCHAR *)AslAlloc(v22, 2, v21);
    *v8 = 0;
    v27 = AslAlloc(v25, 2, v26);
    *v27 = 0;
    *((_QWORD *)pContext + 3) = v27;
    goto LABEL_9;
  }
  v11 = *hFileMapping;
  v12 = -1i64;
  do
    ++v12;
  while( v11[v12] );
  v13 = v12 + 1;
  v14 = (WCHAR *)AslAlloc(v9, 2 * ((int)v12 + 1), v10);
  if( !v14 )
  {
    AslLogCallPrintf(
      1ui64,
      (INT8 *)"SdbpCreateSearchDBContext",
      0xD4ui64,
      (INT8 *)"Unable to allocate memory for directory path");
    return v7;
  }
  if( AslPathSplit(v11, v14, v13, FileName, v28) < 0 )
  {
    AslLogCallPrintf(
      1ui64,
      (INT8 *)"SdbpCreateSearchDBContext",
      0xDFui64,
      (INT8 *)"Unable to parse executable path for \"%ws\"");
  }
  else
  {
    v17 = (WCHAR *)AslAlloc(v15, 520, v16);
    v8 = v17;
    if( v17 )
    {
      if( RtlStringCchCopyW(v17, 0x104ui64, FileName) >= 0 && RtlStringCchCatW(v8, 0x104ui64, (WCHAR *)pszSrc) >= 0 )
      {
LABEL_9:
        *((_QWORD *)pContext + 7) = 0i64;
        *((_QWORD *)pContext + 6) = 0i64;
        *((_QWORD *)pContext + 9) = 0i64;
        *((_QWORD *)pContext + 8) = 0i64;
        *((_QWORD *)pContext + 11) = 0i64;
        v7 = 1;
        *((_QWORD *)pContext + 1) = hFileMapping;
        *((_QWORD *)pContext + 4) = v14;
        *((_QWORD *)pContext + 5) = v8;
        return v7;
      }
    }
    else
    {
      AslLogCallPrintf(
        1ui64,
        (INT8 *)"SdbpCreateSearchDBContext",
        0xE5ui64,
        (INT8 *)"Unable to allocate memory for full name");
    }
  }
  ExFreePoolWithTag(v14, 0x74705041u);
  if( v8 )
    ExFreePoolWithTag(v8, 0x74705041u);
  return v7;
}

Referenced by:

SdbGetDatabaseMatch
SdbpCheckKObject