CreateFile打开在另一个终端会话中创建的MS-DOS设备
CreateFile to open an MS-DOS device created in another terminal session
我有一个(有点像过滤器)驱动程序,应该与用户模式组件通信。它通过调用IoCreateDevice
创建一个设备对象,然后通过IoCreateSymbolicLink
为其创建一个所谓的MS-DOS符号链接,从而可以从用户模式代码(通过CreateFile
)访问它。这或多或少是一种标准技术。驱动程序创建一个形式为DosDevicesmydevicename
的符号链接,而用户模式代码打开一个名为\.mydevicename
的文件。
现在,当驱动程序在终端服务器会话的上下文中创建设备时,问题就开始了。创建的符号链接实际上属于本地会话目录,而我的用户模式服务在"零会话"中的系统帐户下运行,它"看到"属于 全局目录文档中提到,通常没有问题,因为驱动程序大多在 根据文件,有一种方法可以解决这个问题。驱动程序可能会坚持创建一个属于全局目录的符号链接,通过以下方式命名: 我试过这个把戏:它对我不起作用。我使用的是Windows2008R2,64位。到目前为止没有成功。我始终能够打开在系统帐户中创建的设备,但无法打开在其他会话中创建的装置(错误代码为"找不到文件")。我已经尝试了在内核/用户模式下指定 这让我怀疑符号隔离还有一个层次。也许使用 这有道理吗?有没有一种方法可以创建全系统的符号链接?或者有没有办法打开一个符号链接属于另一个会话的文件? 编辑: 感谢@Hans Passant。我已经尝试了WinObj实用程序来查看驱动程序实际创建的设备和符号链接。 乍一看一切都还可以。我在 然而,有一件事很奇怪。尝试从WinObj中查看设备属性:对于在零会话中创建的设备,这可以正常工作,但对于在其他会话中创建设备,WinObj会返回错误: 因此,它会在列表中显示此设备对象,但OTOH在尝试打开它时"未找到"。很奇怪。但这解释了我的问题。但这真的很奇怪。 有什么想法吗?提前谢谢。DriverEntry
或AddDevice
函数的上下文中创建设备对象,这些函数保证在系统帐户下运行。但我的情况不同。我不想改变这一点,我真正需要的是能够在任意线程的上下文中创建/销毁属于任何会话的设备对象。DosDevicesGlobalmydevicename
。此外,如果用户模式代码碰巧在某个帐户下运行,它也可能坚持在全局目录中查找链接,方法是这样命名文件:\.Globalmydevicename
。虽然这通常不是必需的,但如果符号不存在于本地目录中,则会自动在全局目录中进行检查。Global
的所有组合和变体——到目前为止,结果是一样的。Global
创建了一个全局会话范围的符号链接,但仍然不是系统范围的。Device
目录下看到我的所有设备,所有符号链接都在GLOBAL??
下。符号链接指向正确的设备名称。
有一个SessionsNDosDevices
路径,其中N是会话编号。我没有试过,但应该有效。
此外,我注意到子系统和网络驱动器映射在Sessions DosDevicesID
中创建了符号链接,其中ID是会话ID。因此,您也可以检查该路径。
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 从现有源创建 MS Visual C++ DLL 项目
- 如何从 UTC 时间戳的组件(Y,M,D,H,M,S,MS)创建system_clock::time_point
- 检查MS-DOS(C/C )中的键是否关闭
- 由procexp(MS process explorer)创建的VC10调试转储文件-只有堆栈信息,没有变量值
- CreateFile打开在另一个终端会话中创建的MS-DOS设备
- 在 Windows 中自动将 xlsx 文件转换为多个 (MS-DOS) CSV 文件(每张一张一个)
- MS Kinect FaceTracker正在创建IFTResult
- 在 MS x64 调用约定中,正在为 WinAPI 调用创建影子空间必要性
- 2个项目可以在MS VS 2008中创建单个DLL
- 如何在MS DOS而不是Borland上手动编译和运行(通过单个命令)C++程序
- 如何编译c/c++到ms-dos .com程序
- 如何创建一个C/ c++程序,生成XML并在之后运行DOS命令
- 在没有ms-dos窗口的情况下运行exe
- 在MS-DOS中使用长参数列表(超过128个字符)编译
- ms-word-如何在C++中创建OpenOffice文档