cheart
驱动牛犊
驱动牛犊
  • 注册日期2001-07-09
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2365回复:10

如何调用驱动程序中的函数

楼主#
更多 发布于:2001-09-05 01:30
我现在想从应用程序调用一个驱动程序中的一个函数,这个驱动程序在Win98系统启动时被加载。如果直接调用的话会有页面错误,请问最常用的办法有那些?多谢了,鞠躬了。

最新喜欢:

jmzz003jmzz00...
winter
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2013-08-15
  • 粉丝4
  • 关注0
  • 积分5分
  • 威望40点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-09-05 08:38
一定要用deviceiocontrol之类的函数吧
请原谅我的无知与直率
LitteSW
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2010-08-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-09-05 21:22
[QUOTE]原本由 winter 发表
[B]一定要用deviceiocontrol之类的函数吧 [/B][/QUOTE]

应该是这样,好象应用层调驱动程序再没有别的办法了。

穿梭于都市高楼之间,总是孜孜不倦地追寻着自由,蓦然回首,去发现已陷入深深的枷锁之中
cheart
驱动牛犊
驱动牛犊
  • 注册日期2001-07-09
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-09-06 00:39
问题是我只知道该驱动程序函数的名字和参数,但是不知道这个函数提供的SERVICE的IOCTL CODE和对外开放的详细情况,也就是说没有供应用程序引用的H头文件。那就死定了吗?可不可以自己写一个VXD来直接引用那个函数,然后让应用程序和这个VXD通信?还望有识之士指点。
blue
驱动大牛
驱动大牛
  • 注册日期2001-04-25
  • 最后登录2010-10-15
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-09-06 09:46
"调用一个驱动程序中的一个函数",你说的这个函数是属于内核模式的函数吗?是在这个驱动程序(设为nVxd)中对外输出的函数吗?
如果是的话,(你好像是WIn9x下的Vxd)你要先建造一个Vxd驱动(定为mVxd),在mVxd中提供DeviceIoControl供应用程序调用,然后在这个DeviceIoControl中调用nVxd对外输出的函数来调用nVxd驱动。
一般来讲,驱动若在内核模式提供的函数服务在应用层也定会有相应的,你同原厂商联系一下,不用这样绕弯子。:)还记得给分!!
LitteSW
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2010-08-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-09-06 12:47
[QUOTE]原本由 blue 发表
[B]"调用一个驱动程序中的一个函数",你说的这个函数是属于内核模式的函数吗?是在这个驱动程序(设为nVxd)中对外输出的函数吗?
如果是的话,(你好像是WIn9x下的Vxd)你要先建造一个Vxd驱动(定为mVxd),在mVxd中提供DeviceIoControl供应用程序调用,然后在这个DeviceIoControl中调用nVxd对外输出的函数来调用nVxd驱动。
一般来讲,驱动若在内核模式提供的函数服务在应用层也定会有相应的,你同原厂商联系一下,不用这样绕弯子。:)还记得给分!! [/B][/QUOTE]

即使两个VXD间的VXD_SERVER也需要知道提供的服务,而且还需要看看驱动程序是否提供VXD_SERVER。
IoCallDevice也需要有相应的内部IOCTL码相应。

所以必须有厂商的支持。不管是从应用层调用还是从驱动层调用。

穿梭于都市高楼之间,总是孜孜不倦地追寻着自由,蓦然回首,去发现已陷入深深的枷锁之中
cheart
驱动牛犊
驱动牛犊
  • 注册日期2001-07-09
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-09-06 15:22
实际上就是因为厂商没有提供驱动程序函数的输出服务(No Driver function export service),我恰好知道驱动程序中的几个模块的函数名和参数。所以就问问有什么旁门左道可以直接调用这些核心函数。无论如何,谢谢各位了。顺便问一下,怎么给分? 
svgxl
驱动牛犊
驱动牛犊
  • 注册日期2001-08-30
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2001-09-06 19:25
有函数名? 是VxD还是Dll(Drv)?
如果是VxD得有函数的Number才成, 是Dll或者Drv用GetModuleHandle,再GetProcAddress就行了。

别看前面的,我明白什么意思了. 理论上可以通过反汇编获得函数的入口地址(当然不知道是什么函数的),然后去试……(而且别忘了进入Ring0)
[svgxl 编辑于 2001-09-06 20:57]
LitteSW
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2010-08-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2001-09-06 19:58
[QUOTE]原本由 cheart 发表
[B]实际上就是因为厂商没有提供驱动程序函数的输出服务(No Driver function export service),我恰好知道驱动程序中的几个模块的函数名和参数。所以就问问有什么旁门左道可以直接调用这些核心函数。无论如何,谢谢各位了。顺便问一下,怎么给分?  [/B][/QUOTE]

在你最上面的帖子下的按钮有一个是“给分”。
穿梭于都市高楼之间,总是孜孜不倦地追寻着自由,蓦然回首,去发现已陷入深深的枷锁之中
cheart
驱动牛犊
驱动牛犊
  • 注册日期2001-07-09
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2001-09-07 10:30
To svqxl:
也就是说只能反汇编找到那些函数address,然后创建一个ring0进程去调那些函数入口address来一个个试,直到找到位置?(那些函数都在一个。SYS文件里面)。
能再描述得具体一些吗?谢谢。

BTW,有谁知道热门的国外的驱动相关的Maillist?

[cheart 编辑于 2001-09-07 10:41]
svgxl
驱动牛犊
驱动牛犊
  • 注册日期2001-08-30
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2001-09-07 16:34
……
不好意思sys我就不清楚了。如果不是内部函数的话,总是有迹可循的。比如说程序中有集中大批地存储函数的首址情况,或者看与其相关的其他文件对其中函数的调用等等。

说老实话,我是个新的不能再新的新手。
游客

返回顶部