FsRtlDissectDbcs

VOID __stdcall FsRtlDissectDbcs(_STRING *struct_ptr, _STRING *FirstName, _STRING *RemainingName){
  __int64 v3; 
  unsigned int Length; 
  char *Buffer; 
  char v9; 
  __int64 i; 
  char v11; 
  unsigned __int16 v12; 
  unsigned __int16 v13; 

  v3 = 0i64;
  *(_DWORD *)&FirstName->Length = 0;
  FirstName->Buffer = 0i64;
  *(_DWORD *)&RemainingName->Length = 0;
  RemainingName->Buffer = 0i64;
  Length = struct_ptr->Length;
  if( struct_ptr->Length )
  {
    Buffer = struct_ptr->Buffer;
    v9 = *Buffer;
    for( i = *Buffer == 92; (unsigned int)i < Length; LODWORD(i) = i + 1 )
    {
      v11 = Buffer[(unsigned int)i];
      if( v11 == 92 )
        break;
      if( (unsigned __int8)v11 >= 0x80u
        && (_BYTE)NlsMbOemCodePageTag
        && NlsOemLeadByteInfoTable[(unsigned __int8)Buffer[(unsigned int)i]] )
      {
        LODWORD(i) = i + 1;
      }
    }
    v12 = i - (*Buffer == 92);
    FirstName->Length = v12;
    FirstName->MaximumLength = v12;
    LOBYTE(v3) = v9 == 92;
    FirstName->Buffer = &struct_ptr->Buffer[v3];
    if( (unsigned int)i < Length )
    {
      v13 = Length - i - 1;
      RemainingName->Length = v13;
      RemainingName->MaximumLength = v13;
      RemainingName->Buffer = &struct_ptr->Buffer[(unsigned int)(i + 1)];
    }
  }
}

Referenced by:

FsRtlIsFatDbcsLegal
FsRtlIsHpfsDbcsLegal