如果为device1创建的符号链接是\\??\device
(内核),访问它时,应该是\\.\device
(用户空间),为什么?
C:
的符号应为\\.\c:
,为什么\\.
可以省略?
答案 0 :(得分:4)
Windows支持两种形式的文件名。有些文件的名称遵循Windows命名约定(:\)和不符合Windows命名约定(\ device \ harddisk0 \ partition5 ...)的文件。 “\\。\”前缀适用于不符合Windows命名约定的文件。
内部Windows支持对象命名空间,其名称源自同一根对象。 Win32 API将在Windows命名约定和内部命名约定之间进行转换。
但是,如果您需要访问名称不符合内部命名约定的文件,则可以使用“\\。\”前缀来绕过名称转换逻辑。
请注意,驱动器号不符合Windows命名约定(它们在驱动器号后没有\),因此您需要使用\\。\ form打开驱动器。
有一堆脚手架可以使这一切工作,你可以使用WinObj工具看到它的大部分内容。特别注意Global ?? \ namespace - 注意Global ?? \ C:符号链接,它映射到C盘。