RtlDosPathNameToNtPathName_U
дает вам правильный вывод.Причина, по которой вы видите странно выглядящий символ в середине, заключается в том, что UNICODE_STRING
s не должны быть завершены нулем (что, я уверен, вы уже знаете).Имя файла \??\C:\
- это полностью допустимое имя файла в собственном формате.Я подозреваю, что вы действительно хотите добавить имя устройства вместо того, чтобы просто ссылаться на каталог GLOBAL??
, как это делал RtlDosPathNameToNtPathName_U
.
Чтобы сделать это, просто позвоните NtQuerySymbolicLinkObject
на \??\x:
,где x - буква диска, которую использует путь, и добавьте результат.Если это UNC-путь, добавьте \Device\Mup
.И так далее для других типов путей (если они есть).