James.Ji
驱动老牛
驱动老牛
  • 注册日期2001-09-17
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分-9分
  • 威望-8点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1994回复:11

应用程序能否直接调用驱动里面的函数?怎样调用?

楼主#
更多 发布于:2002-06-03 15:06
我用的是DriverStudio编程,windows2000平台。想把大量的函数全部移到内核态执行,请问在驱动中能否象DLL那样输出函数,应用程序直接调用这些函数就可以和硬件进行通信?(不要Writefile,readfile,deviceiocontrol等)

我是初学,希望大虾详细解释。谢谢!

最新喜欢:

luozhangyuluozha...
车到山前必有路。 虽然有些土,却是我最有感触的一句话。
sunnnn
驱动牛犊
驱动牛犊
  • 注册日期2002-01-30
  • 最后登录2009-03-20
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-06-03 16:34
这个问题和我以前贴的那个“内核态有没有DLL的东西存在”有点相关。最近我也被同样的问题所困扰,我现在正在使用一家公司的加密卡,在使用的过程中,应用程序只需要和几个DLL放在一个目录里就可以调用加密卡的API,奇怪的是:该公司的加密卡安装软件根本就没有安装什么驱动程序,只有那些DLL(当然也有一些Lib)。所以,我不知道该公司的DLL是怎样访问加密卡的!!我都感觉奇怪死了!真的希望能有明白人指点一二!! :mad:
James.Ji
驱动老牛
驱动老牛
  • 注册日期2001-09-17
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分-9分
  • 威望-8点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-06-03 16:38
巧了!我就是做加密卡的,想把DLL中的函数放到内核中。
你用的是那家公司的加密卡?
车到山前必有路。 虽然有些土,却是我最有感触的一句话。
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-06-03 17:03
当然不可以,操作系统规定应用层和内核通信只能通过固定的接口:
Writefile,readfile,deviceiocontrol等

但是可以换个方式实现,你可以在内核实现你的函数,不过不是像dll那样的通过函数名向外显露,可以用ioctl码,也就是说你在内核定义不同功能的函数,然后在应用层通过deviceiocontrol来调用,然后你可以写个dll来封装这些deviceiocontrol,最后你的应用程序就可以调用dll中的函数来访问内核了,效果是一样的。

明白???
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
James.Ji
驱动老牛
驱动老牛
  • 注册日期2001-09-17
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分-9分
  • 威望-8点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-06-03 17:09
我明白你的意思。
谢谢回答!给了我一个确切的答复。

但我不明白的另一点是串口通信中有一些函数SetCommMask是如何实现的呢?

[编辑 -  6/3/02 by  Jim_little]
车到山前必有路。 虽然有些土,却是我最有感触的一句话。
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-06-03 17:15
估计也是用这种方法

无非是读写io端口的寄存器而已。

[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-06-03 17:58
建议你去看看有关保护模式的内容。
ring3-〉Ring0需经过调用/中断门(较新机器有sysenter/sysexit),你要在应用中调用内核函数,第一要取得函数地址(前面贴子有介绍),第二要构造自己的调用门。后者一般需要在驱动中做。总之你用这种办法不如用DeviceIoControl。
------------------------
内核中当然可以有DLL,也可有exe(如果里面有应用级函数,比如Win32API,不能运行它们)。需你自己加载它们,它们导出的函数与ntoskrnl.exe导出的内核函数一样,你可在驱动中用之。没什么实用价值。
------------------
具体一点,什么样的加密卡?
--------------------
微软装载了驱动,SetCommMask等API只不过提供一个服务接口方便你使用。
James.Ji
驱动老牛
驱动老牛
  • 注册日期2001-09-17
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分-9分
  • 威望-8点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-06-04 08:51
回pjf:
1、具体一点,什么样的加密卡?
   一个PCI卡,可以实现RSA、DES、HASH等通用算法,也可以实现国密办指定的算法。我用driverstudio作了驱动程序,在驱动程序上面做了一个DLL库,给用户提供API。现在想把DLL库中的函数也作到驱动中去。


2。ring3-〉Ring0需经过调用/中断门(较新机器有sysenter/sysexit),你要在应用中调用内核函数,第一要取得函数地址(前面贴子有介绍),第二要构造自己的调用门。后者一般需要在驱动中做。总之你用这种办法不如用DeviceIoControl。

前面帖子有介绍?我查了查,怎么也找不到,能否给我一个连接。

3、建议你去看看有关保护模式的内容。
   保护模式我也看过,就是不太明白。能否给我通俗的解释一下调用门和中断门的概念吗?

   谢谢!




车到山前必有路。 虽然有些土,却是我最有感触的一句话。
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-06-04 09:19
收件箱
James.Ji
驱动老牛
驱动老牛
  • 注册日期2001-09-17
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分-9分
  • 威望-8点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-06-04 09:23
收件箱


收件箱是什么意思啊?是否让我收邮件?
车到山前必有路。 虽然有些土,却是我最有感触的一句话。
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-06-04 09:29
啊?论坛首页,看最上面。呵呵,裸灌
James.Ji
驱动老牛
驱动老牛
  • 注册日期2001-09-17
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分-9分
  • 威望-8点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-06-04 09:38
看到啦!

谢谢pjf!
车到山前必有路。 虽然有些土,却是我最有感触的一句话。
游客

返回顶部