阅读:1994回复:11
应用程序能否直接调用驱动里面的函数?怎样调用?
我用的是DriverStudio编程,windows2000平台。想把大量的函数全部移到内核态执行,请问在驱动中能否象DLL那样输出函数,应用程序直接调用这些函数就可以和硬件进行通信?(不要Writefile,readfile,deviceiocontrol等)
我是初学,希望大虾详细解释。谢谢! |
|
最新喜欢:luozha...
|
沙发#
发布于:2002-06-03 16:34
这个问题和我以前贴的那个“内核态有没有DLL的东西存在”有点相关。最近我也被同样的问题所困扰,我现在正在使用一家公司的加密卡,在使用的过程中,应用程序只需要和几个DLL放在一个目录里就可以调用加密卡的API,奇怪的是:该公司的加密卡安装软件根本就没有安装什么驱动程序,只有那些DLL(当然也有一些Lib)。所以,我不知道该公司的DLL是怎样访问加密卡的!!我都感觉奇怪死了!真的希望能有明白人指点一二!! :mad:
|
|
板凳#
发布于:2002-06-03 16:38
巧了!我就是做加密卡的,想把DLL中的函数放到内核中。
你用的是那家公司的加密卡? |
|
|
地板#
发布于:2002-06-03 17:03
当然不可以,操作系统规定应用层和内核通信只能通过固定的接口:
Writefile,readfile,deviceiocontrol等 但是可以换个方式实现,你可以在内核实现你的函数,不过不是像dll那样的通过函数名向外显露,可以用ioctl码,也就是说你在内核定义不同功能的函数,然后在应用层通过deviceiocontrol来调用,然后你可以写个dll来封装这些deviceiocontrol,最后你的应用程序就可以调用dll中的函数来访问内核了,效果是一样的。 明白??? |
|
|
地下室#
发布于:2002-06-03 17:09
我明白你的意思。
谢谢回答!给了我一个确切的答复。 但我不明白的另一点是串口通信中有一些函数SetCommMask是如何实现的呢? [编辑 - 6/3/02 by Jim_little] |
|
|
5楼#
发布于:2002-06-03 17:15
估计也是用这种方法
无非是读写io端口的寄存器而已。 |
|
|
6楼#
发布于:2002-06-03 17:58
建议你去看看有关保护模式的内容。
ring3-〉Ring0需经过调用/中断门(较新机器有sysenter/sysexit),你要在应用中调用内核函数,第一要取得函数地址(前面贴子有介绍),第二要构造自己的调用门。后者一般需要在驱动中做。总之你用这种办法不如用DeviceIoControl。 ------------------------ 内核中当然可以有DLL,也可有exe(如果里面有应用级函数,比如Win32API,不能运行它们)。需你自己加载它们,它们导出的函数与ntoskrnl.exe导出的内核函数一样,你可在驱动中用之。没什么实用价值。 ------------------ 具体一点,什么样的加密卡? -------------------- 微软装载了驱动,SetCommMask等API只不过提供一个服务接口方便你使用。 |
|
7楼#
发布于:2002-06-04 08:51
回pjf:
1、具体一点,什么样的加密卡? 一个PCI卡,可以实现RSA、DES、HASH等通用算法,也可以实现国密办指定的算法。我用driverstudio作了驱动程序,在驱动程序上面做了一个DLL库,给用户提供API。现在想把DLL库中的函数也作到驱动中去。 2。ring3-〉Ring0需经过调用/中断门(较新机器有sysenter/sysexit),你要在应用中调用内核函数,第一要取得函数地址(前面贴子有介绍),第二要构造自己的调用门。后者一般需要在驱动中做。总之你用这种办法不如用DeviceIoControl。 前面帖子有介绍?我查了查,怎么也找不到,能否给我一个连接。 3、建议你去看看有关保护模式的内容。 保护模式我也看过,就是不太明白。能否给我通俗的解释一下调用门和中断门的概念吗? 谢谢! |
|
|
8楼#
发布于:2002-06-04 09:19
收件箱
|
|
9楼#
发布于:2002-06-04 09:23
收件箱 收件箱是什么意思啊?是否让我收邮件? |
|
|
10楼#
发布于:2002-06-04 09:29
啊?论坛首页,看最上面。呵呵,裸灌
|
|
11楼#
发布于:2002-06-04 09:38
看到啦!
谢谢pjf! |
|
|