我有一个(某种过滤器)驱动程序,它应该与用户模式组件通信。它通过调用 IoCreateDevice 创建一个设备对象,然后通过 IoCreateSymbolicLink 为它创建一个所谓的 MS-DOS 符号链接(symbolic link),使用户可以访问它-模式代码(通过 CreateFile)。这或多或少是一种标准技术。驱动程序创建一个形式为 \DosDevices\mydevicename 的符号链接(symbolic link),而用户模式代码打开一个名为 \\.\mydevicename 的文件。
现在,当驱动程序在终端服务器 session 的上下文中创 build 备时,问题就开始了。创建的符号链接(symbolic link)实际上属于本地 session 目录,而我的用户模式服务在“零 session ”的系统帐户下运行,它“看到”属于全局目录的符号链接(symbolic link).
文档中提到通常没有问题,因为驱动程序大多在DriverEntry 或AddDevice 函数的上下文中创 build 备对象,这些函数保证在系统下运行帐户。但我的情况不同。我不想改变这一点,我真正需要的是能够在属于任何 session 的任意线程的上下文中创建/销毁设备对象。
根据文档,有一种方法可以解决这个问题。驱动程序可能会坚持创建属于全局目录 的符号链接(symbolic link),方法是将其命名为:\DosDevices\Global\mydevicename。此外,如果用户模式代码恰好在某个帐户下运行,它也可能会坚持在全局目录中寻找链接,通过这样命名文件:\\.\全局\我的设备名称。虽然这通常不是必需的,但如果符号在本地目录中不存在,它会自动在全局目录中检查。
我试过这个技巧:它对我不起作用。我正在使用 64 位 Windows 2008R2。到目前为止没有成功。我始终能够打开在系统帐户中创建的设备,但无法打开在其他 session 中创建的设备(错误代码是“找不到文件”)。我已经尝试了在内核/用户模式下指定 \Global 的所有组合和变体 - 到目前为止,结果是一样的。
这让我怀疑还有一层符号隔离。也许使用 \Global 创建一个全局 session 范围的符号链接(symbolic link),但仍然不是系统范围的。
这有意义吗?有没有办法创建系统范围的符号链接(symbolic link)?或者有没有办法打开其符号链接(symbolic link)属于另一个 session 的文件?
编辑:
感谢@Hans Passant。我试过 WinObj 实用程序来实际查看驱动程序实际创建了哪些设备和符号链接(symbolic link)。
第一眼看上去一切正常。我看到我所有的设备都在 \Device 目录下,所有的符号链接(symbolic link)都在 \GLOBAL?? 下。符号链接(symbolic link)指向正确的设备名称。
但有一件事很奇怪。尝试从 WinObj 中查看设备属性:对于在零 session 中创建的设备,这工作正常,但对于在其他 session 中创建的设备,WinObj 响应错误:
所以,它在其列表中显示了这个设备对象,但是 OTOH 在尝试打开它时“找不到”它。 很奇怪。但这解释了我的问题。但这真的很奇怪。
有什么想法吗?提前致谢。
最佳答案
有一个 \Sessions\N\DosDevices\ 路径,其中 N 是 session 号。我没有尝试过,但它应该有效。
我还注意到 subst 和网络驱动器映射在 \Sessions\0\DosDevices\ID\ 中创建符号链接(symbolic link),其中 ID 是 session ID。所以您也可以检查该路径。
关于c++ - CreateFile 打开在另一个终端 session 中创建的 MS-DOS 设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13740794/
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案
我想让一个yaml对象引用另一个,如下所示:intro:"Hello,dearuser."registration:$introThanksforregistering!new_message:$introYouhaveanewmessage!上面的语法只是它如何工作的一个例子(这也是它在thiscpanmodule中的工作方式。)我正在使用标准的rubyyaml解析器。这可能吗? 最佳答案 一些yaml对象确实引用了其他对象:irb>require'yaml'#=>trueirb>str="hello"#=>"hello"ir
我正在尝试找出如何为我的Ruby项目创建一种“无类DSL”,类似于在Cucumber步骤定义文件中定义步骤定义或在Sinatra应用程序中定义路由。例如,我想要一个文件,其中调用了我的所有DSL函数:#sample.rbwhen_string_matches/hello(.+)/do|name|call_another_method(name)end我认为用我的项目特有的一堆方法污染全局(内核)命名空间是一种不好的做法。因此方法when_string_matches和call_another_method将在我的库中定义,并且sample.rb文件将以某种方式在我的DSL方法的上下文中
有这些railscast。http://railscasts.com/episodes/218-making-generators-in-rails-3有了这个,你就会知道如何创建样式表和脚手架生成器。http://railscasts.com/episodes/216-generators-in-rails-3通过这个,您可以了解如何添加一些文件来修改脚手架View。我想把两者结合起来。我想创建一个生成器,它也可以创建脚手架View。有点像RyanBates漂亮的生成器或web_app_themegem(https://github.com/pilu/web-app-theme)。我
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Rubysyntaxquestion:Rational(a,b)andRational.new!(a,b)我正在阅读ruby镐书,我对创建有理数的语法感到困惑。Rational(3,4)*Rational(1,2)产生=>3/8为什么Rational不需要new方法(我还注意到例如我可以在没有new方法的情况下创建字符串)?
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
我在一个静态网站上工作(因此没有真正的服务器支持),我想在另一个网站中包含一个小的细长片段,可能会向它传递一个变量。这可能吗?在rails中很容易,虽然是render方法,但我不知道如何在slim上做(显然load方法不适用于slim)。 最佳答案 Slim包含Include插件,允许在编译时直接在模板文件中包含其他文件:require'slim/include'includepartial_name文档可在此处获得:https://github.com/slim-template/slim/blob/master/doc/incl