阅读:2626回复:4
关于并口的操作
很多人都在此询问并口如何操作,我将我所做过的告诉大家(对win 2k而言,忘掉win 9x吧):
对并口操作,借助于ms的并口驱动会使我们的工作很轻松,简单步骤如下: 1.取得ms并口deviceobject;调用IoGetDeviceObjectPointer(),传入的ObjectName的bufer为“L\\\\Device\\\\ParallelPort0(LPT1)“,当然也可以是\\\\Device\\\\ParallelPort1(LPT2). 2.取得并口地址:大部分人操作并口时,会直接给初并口地址(0x378,0x278 and so on),这种hard code的方法是不可取的;要得到并口地址,对下层驱动发送IOCTL_INTERNAL_GET_PARALLEL_PORT_INFO,PARALLEL_PORT_INFORMATION的OriginalController得Lowpart为0x378(LPT1),或0x278(LPT2)这样,你就去得了并口地址(我强烈反对直接给初并口地址)。 3.得到ECP模式操作的地址,有两种方法:1)在取得的并口地址上加上一个0x400;2)给下层驱动发送IOCTL_INTERNAL_GET_PARALLEL_PNP_INFO,取得的OriginalEcpController位ecp操作地址。 4)申请占用端口。可以想下层驱动发送IOCTL_INTERNAL_PARALLEL_PORT_ALLOCATE;你也可以调用PARALLEL_PORT_INFORMATION的PPARALLEL_TRY_ALLOCATE_ROUTINE例程来占用并口,你申请了此并口后,别人就申请(用IOCTL_INTERNAL_PARALLEL_PORT_ALLOCATE或PARALLEL_PORT_INFORMATION的PPARALLEL_TRY_ALLOCATE_ROUTINE)不了,此并口为你独享了。 5)模式处理:要得到并口模式, 你可以调用IOCTL_INTERNAL_GET_PARALLEL_PNP_INFO,取得的CurrentMode为并口操作模式,要设置模式,当然你可以调用IOCTL_INTERNAL_PARALLEL_SET_CHIP_MODE, 也可以调用IOCTL_INTERNAL_GET_PARALLEL_PNP_INFO得PPARALLEL_SET_CHIP_MODE例程来设置并口的工作模式。 6)中断处理:不需你去调用IoConnectInterrupt(),你只需发送IOCTL_INTERNAL_PARALLEL_CONNECT_INTERRUPT来挂接你的中断里成即可。 具体起来内容不少,如果时间充裕的话,我会写一篇文章来专门讲述它的。 当然,如果你的驱动水平高的话,看了上面的几点你心里已经有谱了。 祝好运! |
|
最新喜欢:wm_cre... |
沙发#
发布于:2002-07-25 15:27
你好行噢,可我这菜鸟还是一头雾水
|
|
|
板凳#
发布于:2002-07-25 15:41
虽然我是刚学,但看了还是找到了一点感觉,谢谢了!
更热切地等你的文章出来。 |
|
地板#
发布于:2003-11-30 16:41
我找遍论坛中关于并口的帖子,就是你这种用法最先进,可有几个问题:
1、内部IOCTL所用的数据结构是什么地方定义的? 2、GET MODE ,SET MODE中设置数据的位定义情况是怎样的? 不知你的文章有没有写? |
|
地下室#
发布于:2003-11-30 16:48
找到数据定义了
|
|
|