设备的Windows Mountpoint

时间:2011-10-17 09:33:15

标签: windows device ntfs mount

我正在尝试通过ist设备路径将Windows设备挂载到ntfs文件夹。设备路径采用以下形式:

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

我想将它挂载到一个空的ntfs文件夹中,让我们说:

c:\temp\

我尝试安装的设备是ImDisk ram驱动器,它带有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 :(得分:0)

...试

mklink / d c:\ temp \\?\ GLOBALROOT \ Device \ ImDisk0 \

可以通过 rd c:\ temp

删除

没有尝试DosDev

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

可以通过 dosdev -d x:

删除

虽然LINKD可能是某些遗留系统的一个选项,但干净安装的WinXP SP3显示linkd.exe 未找到:

dir%systemdrive%\ linkd.exe / s / a-d / b

答案 1 :(得分:0)

除了SuperGQ的回答:

  

...试

     

mklink / d c:\ temp \?\ GLOBALROOT \ Device \ ImDisk0 \

     

没有尝试DosDev(DefineDosDevice()Win32的一个例子   API)

mklink仅存在于Windows Vista及更高版本上。 Windows 2000 / XP用户需要安装Server 2003 Resource Kit并通过以下方式建立NTFS交接点:

LINKD Destination Source

有关LINKD和NTFS Junctions的更多文档:http://support.microsoft.com/kb/205524

此外,删除命令略有不同,因为LINKD包含内置删除工具:

LINKD Source /D

虽然mklink无法删除符号链接。类似的东西:

fsutil reparsepoint delete PATH

是必需的。

具体而言,{8}存在于Windows 8,Windows Server 2008,Windows Server 2012,Windows Vista和Windows 7中(但奇怪的是,Windows 7未在technet文档http://technet.microsoft.com/en-us/library/cc753194.aspx中列出)