Точка монтирования Windows для устройства - PullRequest
3 голосов
/ 17 октября 2011

Я пытаюсь смонтировать устройство Windows через путь устройства ist к папке ntfs. Путь к устройству имеет вид:

\\?\GLOBALROOT\Device\ImDisk{0}

Я хотел бы смонтировать его в пустой папке ntfs, скажем:

c:\temp\

Устройство, которое я пытаюсь смонтировать, является RAM-накопителем ImDisk, который поставляется с API. По сути, API монтирует устройство через

hDir = CreateFile(Directory, GENERIC_READ | GENERIC_WRITE,
        FILE_SHARE_READ, NULL, OPEN_EXISTING,
        FILE_FLAG_BACKUP_SEMANTICS |
        FILE_FLAG_OPEN_REPARSE_POINT, NULL);

, а затем делает

DeviceIoControl(hDir, FSCTL_SET_REPARSE_POINT, &ReparseData,
           16 + iSize + 2 + iSize + 2, NULL, 0, &dw, NULL))

из всего, что я вижу в msdn, это сделано правильно. Единственная проблема: это не работает. Независимо от обозначения устройства, которое я использую, созданное соединение не может быть открыто проводником. Соединение создается и распознается проводником, когда при попытке открыть его проводник сообщает, что целевой синтаксис недействителен.

До сих пор я пытался смонтировать устройство, обращаясь к нему как:

\\?\GLOBALROOT\Device\ImDisk0

\\.\GLOBALROOT\Device\ImDisk0

\\.\Device\ImDisk0

\\Device\ImDisk0

Ничего из этого, похоже, не работает. Я уверен, что Ram-Drive существует и правильно сформирован. Я могу получить к нему доступ через Driveletter (если я назначу его во время его создания, например, E: \)

И я могу получить к нему доступ через

CreateFile("\\?\GLOBALROOT\Device\ImDisk0\file.txt")

Я могу создать FileStream, выполнить код из него и т. Д.

Есть какие-нибудь подсказки, как смонтировать его в ntfs-папку? Любая помощь приветствуется!

Заранее спасибо!

Corelgott

Ответы [ 2 ]

0 голосов
/ 11 сентября 2013

В дополнение к ответу SuperGQ:

Попробуйте ...

mklink / dc: \ temp \? \ GLOBALROOT \ Device \ ImDisk0 \

Failingэта попытка DosDev (пример Win32 API DefineDosDevice ())

mklink существует только в Windows Vista и выше.Пользователям Windows 2000 / XP потребуется установить Server 2003 Resource Kit и вместо этого создать точку соединения NTFS с помощью:

LINKD Destination Source

Дополнительная документация по соединениям LINKD и NTFS: http://support.microsoft.com/kb/205524

Кроме того, команды удаления немного отличаются тем, что LINKD содержит встроенный инструмент удаления:

LINKD Source /D

Хотя mklink не может удалить символические ссылки.Что-то вроде:

fsutil reparsepoint delete PATH

Требуется.

В частности, mklink существует в Windows 8, Windows Server 2008, Windows Server 2012, Windows Vista и Windows 7 (хотя, как ни странно,Окно 7 не указано в технической документации http://technet.microsoft.com/en-us/library/cc753194.aspx)

0 голосов
/ 11 сентября 2013

Попробуйте ...

mklink / dc: \ temp \\? \ GLOBALROOT \ Device \ ImDisk0 \

Это можно удалить с помощью rd c: \ temp

Если не получится, попробуйте DosDev .

dosdev x: \\? \ GLOBALROOT \ Device \ ImDisk0 \

Это можно удалить с помощью dosdev -dx:

Хотя LINKD может бытьпри использовании некоторых устаревших систем при чистой установке WinXP SP3 было обнаружено, что linkd.exe не найдено:

dir% systemdrive% \ linkd.exe / s / ad / b

...