bigstarsun
驱动牛犊
驱动牛犊
  • 注册日期2003-01-20
  • 最后登录2004-08-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2350回复:17

谁能给我个带中断响应的WDM程序啊!跪谢

楼主#
更多 发布于:2004-07-19 16:20
看了本站张来勇2001年的一篇文章,用NuMega DriverStudio进行
并行口EPP模式的WDM编程,由于本人刚接触驱动编程,所以还是搞不清楚文章里某些代码该放在何处,怎么和并口中断挂接起来的也没搞明白.特求教各位大侠,各位前辈能否给个带中断响应的WDM驱动程序源代码,如果是并口中断那就更好了,跪谢!
下面帖上此文章.
附件名称/大小 下载次数 最后更新
2004-07-19_并口EPP模式的WDM编程.doc (87KB)  14

最新喜欢:

yangngyangng
我要打印驱动dad
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-19 16:44
你看看Windows Driver Mode那本书,配套光谱中中有。
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
bigstarsun
驱动牛犊
驱动牛犊
  • 注册日期2003-01-20
  • 最后登录2004-08-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-19 22:15
谢谢楼上的!!!
你有这本书吗,哪位前辈有,先把配套光盘里的程序传上来让我看看好吗?我还没找到这本书卖。急啊~~~跪谢了。

[编辑 -  7/19/04 by  bigstarsun]
我要打印驱动dad
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
地板#
发布于:2004-07-20 08:10
NTDDK 自带有并口驱动源码,也许对你有帮助:
parclass (总线驱动)
parport (功能驱动)
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
bigstarsun
驱动牛犊
驱动牛犊
  • 注册日期2003-01-20
  • 最后登录2004-08-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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).
我要打印驱动dad
bigstarsun
驱动牛犊
驱动牛犊
  • 注册日期2003-01-20
  • 最后登录2004-08-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度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
);

这个初始化并连接中断,到底是怎么和你想要的中断挂接在一起的呢?没看到还有别的代码啊?
我要打印驱动dad
bigstarsun
驱动牛犊
驱动牛犊
  • 注册日期2003-01-20
  • 最后登录2004-08-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-07-26 13:26
没人讲,,我再顶!!!!!!!!!!!!!!!!!
我要打印驱动dad
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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试的驱动,这些都是你自己来指定并向系统来报告申请,但那样你能清楚地看清整个结构。

不知道说的对不对,个人看法。
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
kejiantian
驱动牛犊
驱动牛犊
  • 注册日期2004-05-27
  • 最后登录2011-02-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-07-27 01:20
没有骨气!
bigstarsun
驱动牛犊
驱动牛犊
  • 注册日期2003-01-20
  • 最后登录2004-08-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-07-27 10:08
楼上的,说谁呢,怎么注册发的第一个帖子就来嘲笑别人啊。

我确实愚笨又着急,还是没搞懂。
libin2309大侠,你说的原理我觉得是对的,但还是不明白,对于不同的中断,程序代码的区别在哪里呢,难道还是那两句?比如IRQ7,和IRQ8,要得到不同的中断号的中断响应是在哪里指定呢?系统怎么知道我要捕获哪个端口的中断呢?
我要打印驱动dad
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-07-27 16:03
楼上的,说谁呢,怎么注册发的第一个帖子就来嘲笑别人啊。

我确实愚笨又着急,还是没搞懂。
libin2309大侠,你说的原理我觉得是对的,但还是不明白,对于不同的中断,程序代码的区别在哪里呢,难道还是那两句?比如IRQ7,和IRQ8,要得到不同的中断号的中断响应是在哪里指定呢?系统怎么知道我要捕获哪个端口的中断呢?


WDM驱动的资源是自动分配的(区别于NT试驱动的地方),你不用理会具体的中断号,实际上那样也是没什么意义,你只要知道一个中断对应一个中断对象就可以了,在设备扩展里保存这些东西。
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
bigstarsun
驱动牛犊
驱动牛犊
  • 注册日期2003-01-20
  • 最后登录2004-08-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-07-29 11:48
楼上的大侠,请问是不是,在安装驱动程序的时候再指定端口呢?

你说是自动分配的,那我还是不明白,我编了个驱动,系统怎么知道我是要捕获哪个端口的中断呢?我的中断服务程序它怎么知道我要和哪个中断挂接呢。比如我要从并口中断改成其他端口的中断,难道还是一样的驱动程序?
还是---
程序里定义了一个KIoRange  m_ParPortIos类对象和一个KInterrupt  m_ParaInterrupt类对象,是不是这两个类已经关联好了的?KIoRange类初始化端口地址,KInterrupt类挂接中断服务程序。
请大侠不吝赐教,指点一下。


[编辑 -  7/29/04 by  bigstarsun]
我要打印驱动dad
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-07-29 14:22
并口的中断和端口号都是固定的。
中断号是7,端口是 0x378-0x37f .
你可以写成NT式的驱动,在驱动里指定这些资源。
也可以写成WDM的,在INF文件里指定这些资源。
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
kucy_zhou@163.c
驱动牛犊
驱动牛犊
  • 注册日期2003-11-26
  • 最后登录2005-11-04
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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里始终没有看到这个函数的调用?然后我的中断也不能连上,请大虾指教。

bigstarsun
驱动牛犊
驱动牛犊
  • 注册日期2003-01-20
  • 最后登录2004-08-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-08-10 10:30
"也可以写成WDM的,在INF文件里指定这些资源。"

怎么指定啊,我看几个OEM打印驱动的inf文件,没看到有指定并口资源的地方啊??????????

我要打印驱动dad
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-08-10 22:47
看 武安河写得一个ISA卡得例子,上面有INT文件得例子。


我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
hzhq1
驱动老牛
驱动老牛
  • 注册日期2002-12-13
  • 最后登录2012-03-29
  • 粉丝0
  • 关注0
  • 积分32分
  • 威望1054点
  • 贡献值0点
  • 好评度606点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-08-11 09:13
看代码例子,
还得看内核原理
。。。
。。。
这是一个,一个风雨交加的,漆黑的夜晚......恩,情节越来越复杂了。
yangng
驱动牛犊
驱动牛犊
  • 注册日期2002-07-17
  • 最后登录2004-11-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
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函数不执行,什么原因?

游客

返回顶部