该文章介绍了如何查询使用他们的NT命名约定逻辑DOS名称QueryDosDevice.它解释了如何使用DefineDosDevice使用NT命名约定添加和删除逻辑设备名称.本文解释了访问各种设备需要DOS名称.
"Win32程序无法使用内部Windows NT设备名称访问设备,因为Win32子系统和Win32 API需要更熟悉的驱动器号和MS-DOS设备名称,例如A:,C:,COM1:和LPT1"
我发现这篇有趣的文章获取了所有可用的DOS名称,然后使用函数GetLogicalDriveString查询NT名称.本文不解释如何为设备返回所有已定义的DOS名称,只是驱动器.
但是,我想知道如何反过来.我如何获得NT设备名称列表.我不是在寻找只有驱动器而是所有设备.例如,LPT1和COM1是与特定NT名称对应的保留DOS名称.我想映射他们可能没有DOS名称的其他设备,以便我可以使用WINAPI函数CreateFile.
如何获得与DOS名称相对的所有NT设备名称列表?
在引擎盖下,DosDevice是NT对象管理器数据库中指向底层设备的符号链接.我建议玩WinObj以了解事情是如何组合在一起的.
不幸的是,为了自己进行枚举并添加自己的自定义符号链接,您需要使用本机NT apis(请参阅此内容以了解枚举内容).你有时可以使用DefineDosDevice函数进行一些技巧来做一些映射,但是如果你只是想通过CreateFile访问对象,你实际上并不需要这样做.您可以使用NT本机转义语法访问NT对象管理器数据库中的任何内容,只需在您的本机路径前添加前缀\\?\GLOBALROOT
并将其传递给CreateFile,例如,如果您要访问软盘驱动器使用CreateFile(L"\\?\GLOBALROOT\Device\Floppy0", ...);