阅读:2350回复:17
谁能给我个带中断响应的WDM程序啊!跪谢
看了本站张来勇2001年的一篇文章,用NuMega DriverStudio进行
并行口EPP模式的WDM编程,由于本人刚接触驱动编程,所以还是搞不清楚文章里某些代码该放在何处,怎么和并口中断挂接起来的也没搞明白.特求教各位大侠,各位前辈能否给个带中断响应的WDM驱动程序源代码,如果是并口中断那就更好了,跪谢! 下面帖上此文章. |
|
最新喜欢:yangng
|
沙发#
发布于:2004-07-19 16:44
你看看Windows Driver Mode那本书,配套光谱中中有。
|
|
|
板凳#
发布于:2004-07-19 22:15
谢谢楼上的!!!
你有这本书吗,哪位前辈有,先把配套光盘里的程序传上来让我看看好吗?我还没找到这本书卖。急啊~~~跪谢了。 [编辑 - 7/19/04 by bigstarsun] |
|
|
地板#
发布于:2004-07-20 08:10
NTDDK 自带有并口驱动源码,也许对你有帮助:
parclass (总线驱动) parport (功能驱动) |
|
|
地下室#
发布于:2004-07-20 10:59
可以先给讲一下吗
PCM_RESOURCE_LIST pResList = I.TranslatedResources(); //获取设备资源 //初始化中断并挂接中断服务例程TheIsr status = m_TheInterrupt.InitializeAndConnect( pResList, LinkTo(TheIsr), this ); 获取资源设备这行代码到底获得的是什么设备啊,挂接了中断服务例程,又是怎么和并口中断挂接上的呢??? vxd驱动程序里是要在VHardwareInt类初始化时挂接中断的啊 VHardwareInt(PARA_IRQ,0,0,0). |
|
|
5楼#
发布于:2004-07-23 11:44
哪位大侠给讲一下啊,我看了些资料还是没搞明白?
PCM_RESOURCE_LIST pResListTranslated = I.TranslatedResources(); // Initialize and connect the interrupt status = m_Irq.InitializeAndConnect( pResListTranslated, LinkTo(Isr_Irq), this ); 这个初始化并连接中断,到底是怎么和你想要的中断挂接在一起的呢?没看到还有别的代码啊? |
|
|
6楼#
发布于:2004-07-26 13:26
没人讲,,我再顶!!!!!!!!!!!!!!!!!
|
|
|
7楼#
发布于:2004-07-26 14:01
WDM驱动里硬件的资源是PNP管理器通过发送IRP_MJ_START_DEVICE这个IRP把硬件资源传递给了驱动程序,对于中断也是,这些系统都给你做好了,你只要把它转换PCM_RESOURCE_LIST pResListTranslated = I.TranslatedResources();
然后在初始化和连接: // Initialize and connect the interrupt status = m_Irq.InitializeAndConnect( pResListTranslated, LinkTo(Isr_Irq), this ); m_Irq就是你的并口中断,这些都是系统给你指定好了,如果是NT试的驱动,这些都是你自己来指定并向系统来报告申请,但那样你能清楚地看清整个结构。 不知道说的对不对,个人看法。 |
|
|
8楼#
发布于:2004-07-27 01:20
没有骨气!
|
|
9楼#
发布于:2004-07-27 10:08
楼上的,说谁呢,怎么注册发的第一个帖子就来嘲笑别人啊。
我确实愚笨又着急,还是没搞懂。 libin2309大侠,你说的原理我觉得是对的,但还是不明白,对于不同的中断,程序代码的区别在哪里呢,难道还是那两句?比如IRQ7,和IRQ8,要得到不同的中断号的中断响应是在哪里指定呢?系统怎么知道我要捕获哪个端口的中断呢? |
|
|
10楼#
发布于:2004-07-27 16:03
楼上的,说谁呢,怎么注册发的第一个帖子就来嘲笑别人啊。 WDM驱动的资源是自动分配的(区别于NT试驱动的地方),你不用理会具体的中断号,实际上那样也是没什么意义,你只要知道一个中断对应一个中断对象就可以了,在设备扩展里保存这些东西。 |
|
|
11楼#
发布于:2004-07-29 11:48
楼上的大侠,请问是不是,在安装驱动程序的时候再指定端口呢?
你说是自动分配的,那我还是不明白,我编了个驱动,系统怎么知道我是要捕获哪个端口的中断呢?我的中断服务程序它怎么知道我要和哪个中断挂接呢。比如我要从并口中断改成其他端口的中断,难道还是一样的驱动程序? 还是--- 程序里定义了一个KIoRange m_ParPortIos类对象和一个KInterrupt m_ParaInterrupt类对象,是不是这两个类已经关联好了的?KIoRange类初始化端口地址,KInterrupt类挂接中断服务程序。 请大侠不吝赐教,指点一下。 [编辑 - 7/29/04 by bigstarsun] |
|
|
12楼#
发布于:2004-07-29 14:22
并口的中断和端口号都是固定的。
中断号是7,端口是 0x378-0x37f . 你可以写成NT式的驱动,在驱动里指定这些资源。 也可以写成WDM的,在INF文件里指定这些资源。 |
|
|
13楼#
发布于:2004-08-09 14:23
////**
WDM驱动里硬件的资源是PNP管理器通过发送IRP_MJ_START_DEVICE这个IRP把硬件资源传递给了驱动程序,对于中断也是,这些系统都给你做好了,你只要把它转换PCM_RESOURCE_LIST pResListTranslated = I.TranslatedResources(); 然后在初始化和连接: // Initialize and connect the interrupt status = m_Irq.InitializeAndConnect( pResListTranslated, LinkTo(Isr_Irq), this );////**** 请问wdm驱动里怎么把pnp管理器发送IRP_MJ_START_DEVICE来调用onstartdevice的对中断等进行初始化,我理解的应该是想到生成时直接做到了通过setpnppolicy()进行设置,可是不知道为什么,我在monitor里始终没有看到这个函数的调用?然后我的中断也不能连上,请大虾指教。 |
|
14楼#
发布于:2004-08-10 10:30
"也可以写成WDM的,在INF文件里指定这些资源。"
怎么指定啊,我看几个OEM打印驱动的inf文件,没看到有指定并口资源的地方啊?????????? |
|
|
15楼#
发布于:2004-08-10 22:47
看 武安河写得一个ISA卡得例子,上面有INT文件得例子。
|
|
|
16楼#
发布于:2004-08-11 09:13
看代码例子,
还得看内核原理 。。。 。。。 |
|
|
17楼#
发布于:2004-11-01 16:10
专家,你好
我的代码 #define ParInterrupt_IRQ 7 #define BUSNUMBER 0 #define INTERRUPTADDRESS 0x378 #define BUSTYPE Isa ParInterruptDevice::ParInterruptDevice(ULONG Unit) : KDevice(L"ParInterrupt", FILE_DEVICE_UNKNOWN, L"ParInterrupt", DO_BUFFERED_IO), m_Interrupt(BUSTYPE,0,ParInterrupt_IRQ,ParInterrupt_IRQ,Latched,TRUE,FALSE), m_IoRange(BUSTYPE,0,INTERRUPTADDRESS,BUSNUMBER) {... m_Interrupt.Connect(LinkTo(Isr), this); ... } 可是用softice产生genint 37(win2000下),Isr函数不执行,什么原因? |
|