quartz
驱动小牛
驱动小牛
  • 注册日期2001-07-11
  • 最后登录2004-07-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2120回复:14

再问从驱动中启动一个应用程序的问题!

楼主#
更多 发布于:2002-08-05 10:08
目前我已经可以通过DeviceIoControl函数将应用程序启动,但是我的目的是在驱动加载时让他启动应用程序,而不是通过DeviceIoControl函数来启动。也就是说我要达到的目的是:机器启动后改应用程序自动启动。现在如果我将DeviceIoControl中的启动应用程序的部分转移到DriverEntry函数中就会使驱动不能加载。可能的原因是什么?
是不是因为驱动加载时,ntdll.dll还没有加载进来?我用的starttype是2。别的还有什么原因吗?请给于一些提示!谢谢!

最新喜欢:

threebagsthreeb...
疯狂灌水,得分 疯狂提问,放分 什么时候能够:疯狂回答,得分啊!!!!
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-08-05 10:32
肯定不行的啦。驱动程序Start Type = 2,驱动程序加载的时候,是系统初始化的时候,Win32子系统还没有启动吧,ntdll.dll肯定还没有加载呢,怎么执行应用程序?
可以考虑这样,在DriverEntry中启动一个线程,在线程中尝试查找ntdll.dll,直到找到ntdll.dll再启动应用程序。
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
quartz
驱动小牛
驱动小牛
  • 注册日期2001-07-11
  • 最后登录2004-07-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-08-05 10:36
谢了!
疯狂灌水,得分 疯狂提问,放分 什么时候能够:疯狂回答,得分啊!!!!
chnh
驱动小牛
驱动小牛
  • 注册日期2002-04-09
  • 最后登录2004-02-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-08-05 12:40
为什么不分开启动呢?应用程序启动时检测一下驱动是否加载不就行了
quartz
驱动小牛
驱动小牛
  • 注册日期2001-07-11
  • 最后登录2004-07-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-08-05 15:45
对于RtlCreateProcessParameters函数,我在DriverEntry里面设置了它的入口地址,但是只要在DriverEntry里调用这个函数就会蓝屏,而在Dispatch里调用就不会有问题。这是为什么!
疯狂灌水,得分 疯狂提问,放分 什么时候能够:疯狂回答,得分啊!!!!
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-08-06 09:29
肯定不行的啦。驱动程序Start Type = 2,驱动程序加载的时候,是系统初始化的时候,Win32子系统还没有启动吧,ntdll.dll肯定还没有加载呢,怎么执行应用程序?
可以考虑这样,在DriverEntry中启动一个线程,在线程中尝试查找ntdll.dll,直到找到ntdll.dll再启动应用程序。

NTDLl好象很早就加载的了吧
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-08-06 09:43
等我实验一下就知道了。 :)
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-08-06 10:18
[quote]肯定不行的啦。驱动程序Start Type = 2,驱动程序加载的时候,是系统初始化的时候,Win32子系统还没有启动吧,ntdll.dll肯定还没有加载呢,怎么执行应用程序?
可以考虑这样,在DriverEntry中启动一个线程,在线程中尝试查找ntdll.dll,直到找到ntdll.dll再启动应用程序。

NTDLl好象很早就加载的了吧 [/quote]
果然,在进入DriverEntry时ntdll.dll已经加载,但是此时不能调用其中的导出函数,那是因为Win32子系统还没有启动,还是别的原因?
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
quartz
驱动小牛
驱动小牛
  • 注册日期2001-07-11
  • 最后登录2004-07-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-08-06 14:38
在start type=3的时候,在DriverEntry中不是完全不能调用ntdll.dll的导出函数,而是RtlCreateProcessParameters函数不能调用,而且在start type=2的时候,也不是所有的ntdll.dll导出的函数不能使用,而是上面的函数不能使用,为什么?

[编辑 -  8/6/02 by  quartz]

[编辑 -  8/6/02 by  quartz]
疯狂灌水,得分 疯狂提问,放分 什么时候能够:疯狂回答,得分啊!!!!
kwxkzk
驱动牛犊
驱动牛犊
  • 注册日期2002-06-17
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-08-06 15:25
我感觉是IRQL的限制,DRIVERENTRY是在DISPATCH_LVEL的,而DeviceIOControl是在PASSIVE_LEVEL的,应用程序是在PASSIVE_LEVEL运行的;而且应用程序的代码也是在分页内存中的,它也没法在DISPATCH_LEVEL中加载

仅供参考,我并未测试
你做过什么? 你在做什么? 你为什么这样做? 你要做什么?
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-08-06 15:29
我感觉是IRQL的限制,DRIVERENTRY是在DISPATCH_LVEL的,而DeviceIOControl是在PASSIVE_LEVEL的,应用程序是在PASSIVE_LEVEL运行的;而且应用程序的代码也是在分页内存中的,它也没法在DISPATCH_LEVEL中加载

仅供参考,我并未测试


driverentry是PASSIVE_LEVEL的
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
Nouk
驱动中牛
驱动中牛
  • 注册日期2001-08-22
  • 最后登录2006-10-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-08-06 19:04
May be trace the VxD service _SHELL_CALLDLL to port to NT kernel.

Oh..The NT4 has the ZwW32Call.

[编辑 -  8/7/02 by  Nouk]
Taiwan's Driver Developer
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-08-06 20:37
你有没有试过在系统正在使用运行的情况下加载驱动程序啊?你要把一些可疑的问题排除掉啊!也许那个函数需要访问的资源还没有加载啊,也有可能是那个函数必须在对应的irql上面才可以运行的啊
quartz
驱动小牛
驱动小牛
  • 注册日期2001-07-11
  • 最后登录2004-07-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-08-07 17:50
你有没有试过在系统正在使用运行的情况下加载驱动程序啊?你要把一些可疑的问题排除掉啊!也许那个函数需要访问的资源还没有加载啊,也有可能是那个函数必须在对应的irql上面才可以运行的啊


我就是在系统正在使用运行的情况下加载驱动程序的!出现的错误是:Break Due to KeBugcheckEx(Unhandled kernel mode exception)
error=1e (KMODE_EXCEPTION_NOT_HANDLED)P1=C0000005 P2=77F92E69 P3=0 P4=30



疯狂灌水,得分 疯狂提问,放分 什么时候能够:疯狂回答,得分啊!!!!
quartz
驱动小牛
驱动小牛
  • 注册日期2001-07-11
  • 最后登录2004-07-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-08-07 17:53
我看了一下RtlCreateProcessParamters函数的实现,如果可选参数为0 ,他事实上就是将创建进程的PEB拷贝到新创建的进程中。但是驱动程序的进程是什么呢?他的环境块是操作系统进程的环境块吗?
疯狂灌水,得分 疯狂提问,放分 什么时候能够:疯狂回答,得分啊!!!!
游客

返回顶部