Как я могу разрешить путь с буквой диска из пути к устройству?
Например, преобразовать
\Device\HarddiskVolume4\Windows\System32\RuntimeBroker.exe
в
C:\Windows\System32\RuntimeBroker.exe
Предполагается, что HarddiskVolume4
соответствует C:
на этом компьютере.
Я нашел этот вопрос, но хочу использовать его в C # .
IOCTL_MOUNTMGR_QUERY_POINTS
. но я могу вставить его только на c ++, но не на c # - person RbMm   schedule 18.01.2018QueryDosDevice
, в целом неверно. Том может быть смонтирован в папке или иметь только имя тома {GUID}. Я думаю, что самое простое решение - добавить \\? \ GLOBALROOT к пути; открыть файл с минимальным доступом; и позвонитеGetFinalPathNameByHandle
, чтобы попытаться получить егоVOLUME_NAME_DOS
илиVOLUME_NAME_GUID
. В противном случае вам нужно запросить \\. \ MountPointManagerIOCTL_MOUNTMGR_QUERY_POINTS
черезDeviceIoControl
, как указано выше. - person Eryk Sun   schedule 18.01.2018CreateFileW
- можно просто добавить префикс \\\\? \\ GLOBALROOT. или используйтеNtOpenFile
. однако, если вам нужно использовать его в оболочке api - правильный способ получил массивMOUNTMGR_MOUNT_POINT
черезIOCTL_MOUNTMGR_QUERY_POINTS
и нашел, гдеDeviceName
был точным префиксом для вашего пути. и замените этот префикс на префиксSymbolicLinkName
, если он в формеMOUNTMGR_IS_DRIVE_LETTER
- person RbMm   schedule 18.01.2018