在这个文件中, http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx#paths支持格式的NT命名空间绝对路径某些API“设备 XXX”
为了使这些设备通过Windows应用程序对象访问,设备驱动程序创建符号链接(符号链接)在Win32名称空间“Global ??”中分配给它们各自的设备对象。例如,“Global ??”下的COM0和COM1子目录只是对Serial0和Serial1的符号链接,“C:”是对HarddiskVolume1的符号链接,“Physicaldrive0”是对DR0的符号链接,依此类推。没有符号链接,如前所述,指定设备“Xxx”将不可用于任何使用Win32命名空间约定的Windows应用程序。 但是,可以使用任何支持格式为“\ Device \ Xxx”的NT名称空间绝对路径的API来打开该设备的句柄。
什么是API?请让我知道一些这样的功能。
例如,我们可以有一个装置,坐在GLOBAL??
命名空间:
GLOBAL??\
COM227
这个装置,我们可以成功地打开使用CreateFile
:
//Note: we have to prefix it with \\.\ in order to tell CreateFile that
//we want to open something from the Global device namespace.
//Otherwise it will try to open a file
HANDLE hdev = CreateFile("\\.\COM227", GENERIC_READ, 0, null, OPEN_EXISTING, 0, 0);
if (hdev == INVALID_HANDLE_VALUE)
raise new EWin32Exception(GetLastError);
该装置(每一起Win32的其他设备全球??命名空间),实际上是一个符号链接到“真正的”设备:
GLOBAL??\
COM227 (SymbolicLink) ==> \Device\VCP0
Device\
VCP0 (Device)
所以我们尝试打开该真正设备:
HANDLE hdev = CreateFile("\\.\Device\VCP0", GENERIC_READ, 0, null, OPEN_EXISTING, 0, 0);
if (hdev == INVALID_HANDLE_VALUE)
raise new EWin32Exception(GetLastError);
但它失败,错误代码3(系统找不到指定的文件)。
简称:
- 作品:
COM227
(这是\Device\VCP0
别名) - 失败:
\Device\VCP0
问题是
- @paulsm4 says that
CreateFile
should work - @larryostermm同意,甚至给出设备路径语法(例如
\Device\Xxx
) - 但它不工作
这意味着CreateFile
是不的“支持\设备\(XXX)的NT命名空间绝对路径格式的API”之一。
但是,可以使用任何支持格式为“\ Device \ Xxx”的NT命名空间绝对路径的API来打开该设备的句柄。
什么是的API?
请考虑更改您接受的答案。 @罗伯特的答案是正确的。您只能通过Win32 API通过'\\。\'前缀访问设备的受限子集;特别是不支持NT命名空间的API。 – MicroVirus 2015-09-12 14:49:47