阅读:2034回复:2
急用,请帮忙,谢谢!
我在写一个语音卡的Win98下驱动程序毕业设计遇到了一个问题,很关键,捆扰了很久,在此,特向站长求教!
问题大概市这样的: 主要是根据调节语音卡上的物理起始地址,读出卡中的某标志积存器的值,来检测卡是否被系统识别。然后,往卡中写入数据,来实现对语音卡的控制。我的做法大概是,通过Ring3下的DeviceIOCtrol()函数将物理起始地址传入VXD的P->dioc_inbuf里面,再通过VXD的MapPhysToLinear()转化成线形地址返回给Ring3下的应用程序,然后在应用程序下,根据返回的线形地址在GDT中找出在内存中的段基值,然后根据此段基值来实现对内存的直接读写! 但是遇到的问题是读不出内存里的值,或是不正确,有时甚至使系统直接重新启动。 我直接用SOFT-ICE的Peek命令却可以直接读出正确的语音卡标志积存器值,所以恳请站长能够提供通过VXD实现对内存进行读写的代码,而不是通过中断方式在应用程序断实现Ring3到Ring0的转换而实现读写那种! 急用,请帮忙,谢谢! |
|
沙发#
发布于:2001-05-15 19:33
可以不发重帖吗?超过3个就会封ip的。
|
|
|
板凳#
发布于:2001-05-15 23:56
好象理论上有问题,Ring3不可以访问核心虚地址,你对MapPhysToLinear()的理解可能有误,其返回的地址应该只是Ring0可用。你用这个地址在Ring0读写个结果,再把结果返回Ring3试试。
以上只是理论,我只做NT下的驱动,9X下WDM还可以说说,若回答错了,麻烦你告诉我 |
|