SdbpCreateSearchPathPartsFromPath

NTSTATUS __stdcall SdbpCreateSearchPathPartsFromPath(WCHAR *pszPath, tagSEARCHPATH **ppSearchPathParts){
  WCHAR *v3; 
  unsigned int v4; 
  WCHAR *v5; 
  __int64 v6; 
  WORD *v7; 
  VOID *v8; 
  INT64 v9; 
  tagSEARCHPATH *v10; 
  tagSEARCHPATH *v11; 
  __int64 v12; 
  WCHAR *i; 
  WCHAR v14; 
  INT8 *v16; 
  UINT64 v17; 
  __int64 v18; 

  v3 = pszPath;
  v4 = 0;
  v5 = 0i64;
  if( pszPath )
  {
    v6 = *pszPath != 0;
    while( 1 )
    {
      v7 = wcschr(pszPath, 59);
      if( !v7 )
        break;
      LODWORD(v6) = v6 + 1;
      pszPath = v7 + 1;
    }
    v10 = (tagSEARCHPATH *)AslAlloc(v8, 48 * ((int)v6 - 1) + 56, v9);
    v11 = v10;
    if( v10 )
    {
      *v10 = v6;
      v12 = -1i64;
      do
        ++v12;
      while( v3[v12] );
      for( i = &v3[v12]; ; --i )
      {
        if( i < v3 )
        {
          *ppSearchPathParts = v11;
          return 1;
        }
        v14 = *i;
        if( *i == 92 )
        {
          if( v5 )
          {
LABEL_13:
            if( v3 != i )
              continue;
            goto LABEL_8;
          }
          v5 = i;
        }
        if( v14 != 59 )
          goto LABEL_13;
LABEL_8:
        if( v5 )
        {
          if( v14 == 59 )
            ++i;
          v18 = 6i64 * v4++;
          v11[2 * v18 + 4] = v5 - i + 1;
          v5 = 0i64;
          *(_QWORD *)&v11[2 * v18 + 2] = i;
        }
      }
    }
    v16 = (INT8 *)"Failed to allocate search path parts";
    v17 = 1417i64;
  }
  else
  {
    v16 = "Invalid argument";
    v17 = 1388i64;
  }
  AslLogCallPrintf(1ui64, (INT8 *)"SdbpCreateSearchPathPartsFromPath", v17, v16);
  return 0;
}

Referenced by:

SdbpInitializeSearchDBContext