VrpGetNextToken

VOID __stdcall VrpGetNextToken(_UNICODE_STRING *Path, UINT64 *Position, _UNICODE_STRING *PathToken){
  UINT64 v5; 
  UINT64 v7; 
  UINT64 v8; 
  UINT64 Length; 
  UINT64 v10; 
  unsigned __int64 v11; 
  unsigned __int64 v12; 
  unsigned __int64 i; 
  __int64 v14; 
  unsigned __int64 v15; 

  PathToken->Length = 0;
  v5 = *Position;
  if( 2 * *Position < Path->Length )
  {
    v7 = *Position;
    do
    {
      if( Path->Buffer[v7] != 92 )
        break;
      v5 = v7 + 1;
      v15 = 2 * v7 + 2;
      *Position = ++v7;
    }
    while( v15 < Path->Length );
  }
  PathToken->Buffer = &Path->Buffer[v5];
  v8 = *Position;
  Length = Path->Length;
  if( 2 * *Position < Length )
  {
    v10 = *Position;
    LOWORD(v11) = Path->Length;
    do
    {
      LOWORD(Length) = v11;
      if( Path->Buffer[v10] == 92 )
        break;
      PathToken->Length += 2;
      v8 = *Position + 1;
      *Position = v8;
      v10 = v8;
      v11 = Path->Length;
      LOWORD(Length) = Path->Length;
    }
    while( 2 * v8 < v11 );
  }
  v12 = 2 * v8;
  for( i = (unsigned __int16)Length; v12 < i; i = Path->Length )
  {
    v14 = 2 * v8;
    if( Path->Buffer[v8] != 92 )
      break;
    *Position = ++v8;
    v12 = v14 + 2;
  }
}

Referenced by:

VrpComparePath
VrpCountPathComponents
VrpCreateNamespaceNode
VrpPreLoadKey
VrpTranslatePath