Programming 版 (精华区)
发信人: Sun (大灯泡), 信区: Programming
标 题: [转载] [讨论]VXD与SYS问题
发信站: 紫 丁 香 (Thu Sep 9 10:40:47 1999), 转信
Hi, So pleased to visit BBS again!
十分想念各位学习VXD的朋友!现有很多问题
想和大家讨论:
1. 物理内存:
Dreammy (这个杀手不太冷)在文章〖技术】Win95下的32位
应用程序访问物理内存的方法中提出了三种办法.我也做了一些试验,
但三种方法中只有DeviceIO有点进展,用的是VC5.0 mfc.但是在VXD中
只是简单的MapPhysToLinear后把结果作为线性地址传给了App.从运
行结果来看,查看f0段的ROM区结果是对的,其他地方的读好象也可以,
但是我写c0段的RAM区时,写不上去,(写完了再读,发现和原来的一样)
(读写的过程都是在App中进行的).请问是什么原因?
Dreammy 的第一种方法,在VXD提供Win32 Service ,用
Register_Win32_Service . 然后在Win32应用中用VxDCall这些未公
开API.我应如何使用Register_Win32_Service函数?在此函数中,
DDB_Offset参数应如何获得?因为DDB是用宏产生的.
Dreammy 的第三种方法,中断门我不太会用,在<<windows95
system programming secrets>>一书中有类似的调用门的方法,但不
知为何,其程序phys在我的机器上运行的结果不正确,phyaddress
的结果都是FFFFFFFF.程序源文件也无法编译通过.求教.
还有问题是:在16位的VXD中用Allocate_LDT_Selector等函数
来继MapPhySToLinear后,来处理物理内存,可传给应用一个指针来访问
它,但win32中没有了选择子,这一部分我应该如何操作?
若用函数Map_Lin_To_VM_Addr,其DPL是多少?
我在VC5.0中无法使用ax=1684h,INT 2fh,所以WIN32的App无法
象以前的WIN16方法和VXD通讯,是不是这样?另外,在VC5.0中(用了MFC)
我无法使用内嵌汇编(编译时总提示类型不匹配).问问各位有何良策?
2.SYS问题:
因为我的活儿最终定在Nt平台上,所以转想NT DDK了,现在刚
开始,许多问题不懂.
在VXD中,有很多方法使VXD通讯到APP,如SHELL_POSTMESSAGE
等,但在NT下的SYS有何方法?
在中断后,如何及时通知APP, 信号灯,互斥对象等可用吗?还是只能开一
个线程,不断调用DeviceIoControl?
发信人: suxm (笨笨), 信区: Programming
【 在 arcarc (异乡人) 的大作中提到: 】
: Hi, So pleased to visit BBS again!
: 十分想念各位学习VXD的朋友!现有很多问题
: 想和大家讨论:
: 1. 物理内存:
: Dreammy (这个杀手不太冷)在文章〖技术】Win95下的32位
: 应用程序访问物理内存的方法中提出了三种办法.我也做了一些试验,
: 但三种方法中只有DeviceIO有点进展,用的是VC5.0 mfc.但是在VXD中
: 只是简单的MapPhysToLinear后把结果作为线性地址传给了App.从运
: 行结果来看,查看f0段的ROM区结果是对的,其他地方的读好象也可以,
: 但是我写c0段的RAM区时,写不上去,(写完了再读,发现和原来的一样)
: (读写的过程都是在App中进行的).请问是什么原因?
内存锁定了吗?在VXD中对内存写一下试试。
: Dreammy 的第一种方法,在VXD提供Win32 Service ,用
: Register_Win32_Service . 然后在Win32应用中用VxDCall这些未公
: 开API.我应如何使用Register_Win32_Service函数?在此函数中,
: DDB_Offset参数应如何获得?因为DDB是用宏产生的.
: Dreammy 的第三种方法,中断门我不太会用,在<<windows95
: system programming secrets>>一书中有类似的调用门的方法,但不
: 知为何,其程序phys在我的机器上运行的结果不正确,phyaddress
: 的结果都是FFFFFFFF.程序源文件也无法编译通过.求教.
: 还有问题是:在16位的VXD中用Allocate_LDT_Selector等函数
: 来继MapPhySToLinear后,来处理物理内存,可传给应用一个指针来访问
: 它,但win32中没有了选择子,这一部分我应该如何操作?
: 若用函数Map_Lin_To_VM_Addr,其DPL是多少?
: 我在VC5.0中无法使用ax=1684h,INT 2fh,所以WIN32的App无法
: 象以前的WIN16方法和VXD通讯,是不是这样?另外,在VC5.0中(用了MFC)
~~~~~~~~~~
是
: 我无法使用内嵌汇编(编译时总提示类型不匹配).问问各位有何良策?
: 2.SYS问题:
: 因为我的活儿最终定在Nt平台上,所以转想NT DDK了,现在刚
: 开始,许多问题不懂.
: 在VXD中,有很多方法使VXD通讯到APP,如SHELL_POSTMESSAGE
: 等,但在NT下的SYS有何方法?
: 在中断后,如何及时通知APP, 信号灯,互斥对象等可用吗?还是只能开一
: 个线程,不断调用DeviceIoControl?
VxD与NT不兼容,NT支持的是kernel-mode-driver.清华书店有本讲
NT驱动程序的书,可以参考一下。
BTW:你的问题说得不是很清楚,到底是谁分配了内存,又想给谁用?
我都读糊涂了。
发信人: arcarc (异乡人), 信区: Programming
【 在 suxm (笨笨) 的大作中提到: 】
: 内存锁定了吗?在VXD中对内存写一下试试。
: ~~~~~~~~~~
: 是
: : 我无法使用内嵌汇编(编译时总提示类型不匹配).问问各位有何良策?
: VxD与NT不兼容,NT支持的是kernel-mode-driver.清华书店有本讲
: NT驱动程序的书,可以参考一下。
: BTW:你的问题说得不是很清楚,到底是谁分配了内存,又想给谁用?
: 我都读糊涂了。
I just want to access phy-memory,and use it in App
How to lock the memory in vxd? I am sorry,I find there are much different
between win32 and win16.
The other question is about NTDDK, in my sys part,how can I inform the
App that the certain interupt has occured.
Thanks
发信人: suxm (笨笨), 信区: Programming
【 在 arcarc (异乡人) 的大作中提到: 】
: I just want to access phy-memory,and use it in App
: How to lock the memory in vxd? I am sorry,I find there are much different
: between win32 and win16.
在VXD中锁定内存,如果是VXD分配的,那你可以在分配时
用一些FLAG来锁定它。
PageAllocate(1,PG_VM,hVM,0,0,-1,&PhysAddr,
PAGECONTIG|PAGEUSEALIGN|PAGEFIXED,&hMem,&iAddress);
或者:
PageAllocate(1,PG_SYS,0,0,0,-1,&PhysAddr,PAGELOCKED,&hMem,&iAddress);
这样分配的内存都是锁定的。
的确,对于WIN32和WIN16差别很大。
下面分别说一下:
对于WIN16:
(1)在WIN16中分配了内存,想给VXD用。
在Win16中,GlobalAlloc(),GlobalLock(),GlobalFix() ,GlobalPageLock(),
wSeg =HIWORD(lpBuf);
wOff = LOWORD(lpBuf);这里的lpBuf是前面几个函数分配的内存。
mov cx,wSeg
mov dx,wOff
用完之后,GlobalFree();
在VxD中
int* pLinearAddress;
pLinearAddress = Map_Flat(CLIENT_CX,CLIENT_DX);
然后你就可以在VxD中对pLinearAddress进行操作了。
(2)在VXD中分配了内存,想给WIN16用。
_MapPhysToLinear,Map_Lin_To_VM_Addr,同样,你应
该注意内存锁定。
对于WIN32:
最简单了,只要内存锁定了,那在VXD中分配内存后得到的指针
可以直接传给WIN32用。反之亦然。不过要说明的是,WIN32分配的内存
要想在全局与VXD共享,就必须用内存映射。
: The other question is about NTDDK, in my sys part,how can I inform the
: App that the certain interupt has occured.
: Thanks
对于kernel-mode-driver我不是很熟悉,对不起。
多看看NTDDK的文档可能会有帮助吧。
发信人: arcarc (异乡人), 信区: Programming
【 在 suxm (笨笨) 的大作中提到: 】
: 在VXD中锁定内存,如果是VXD分配的,那你可以在分配时
: 用一些FLAG来锁定它。
: PageAllocate(1,PG_VM,hVM,0,0,-1,&PhysAddr,
: PAGECONTIG|PAGEUSEALIGN|PAGEFIXED,&hMem,&iAddress);
: 或者:
: PageAllocate(1,PG_SYS,0,0,0,-1,&PhysAddr,PAGELOCKED,&hMem,&iAddress);
: 这样分配的内存都是锁定的。
谢谢suxm,PageAllocate是VDtools里的函数吧,我一直没有用VDTools,在Win95DDK中
应该用什么函数呢? BTW,哪里有好的VDTOOLS? sjtu上有,但安装到26%时就出错了,
lib.pku上好象找不到. 还有,VDTools写的VXD效率是不是很好?
我查了一下NTDDK的例子,有一个采用event通讯的,可能用的上.谢谢
发信人: suxm (笨笨), 信区: Programming
【 在 arcarc (异乡人) 的大作中提到: 】
: 【 在 suxm (笨笨) 的大作中提到: 】
:
: 谢谢suxm,PageAllocate是VDtools里的函数吧,我一直没有用VDTools,在Win95DDK中
: 应该用什么函数呢? BTW,哪里有好的VDTOOLS? sjtu上有,但安装到26%时就出错了,
: lib.pku上好象找不到. 还有,VDTools写的VXD效率是不是很好?
在DDK中是同名的函数。几乎VTOOLSD中的所有函数都是
VMM服务的WRAP形式。应该都可以到DDK中的同名函数的。
安装时出错是因为选择了一些不该选择的项吧。换换选项试试。
前面有篇文章讲了一个FTP站有,找下吧。
VTOOLSD写的VXD效率没有问题,如果你怀疑C的效率,那NT就
完了,因为KERNEL-MODE-DRIVER可都是用C开发的。
: 我查了一下NTDDK的例子,有一个采用event通讯的,可能用的上.谢谢
:
主题: [讨论]VXD与SYS问题 kingchurch (转寄)
日期: 1998年9月19日 07:31:09
发件人: lyj.bbs@bbs.net.tsinghua.edu.cn
收件人: lyj@hs1.hit.edu.cn
发信人: arcarc (异乡人), 信区: Programming
Hi, So pleased to visit BBS again!
十分想念各位学习VXD的朋友!现有很多问题
想和大家讨论:
1. 物理内存:
Dreammy (这个杀手不太冷)在文章〖技术】Win95下的32位
应用程序访问物理内存的方法中提出了三种办法.我也做了一些试验,
但三种方法中只有DeviceIO有点进展,用的是VC5.0 mfc.但是在VXD中
只是简单的MapPhysToLinear后把结果作为线性地址传给了App.从运
行结果来看,查看f0段的ROM区结果是对的,其他地方的读好象也可以,
但是我写c0段的RAM区时,写不上去,(写完了再读,发现和原来的一样)
(读写的过程都是在App中进行的).请问是什么原因?
Dreammy 的第一种方法,在VXD提供Win32 Service ,用
Register_Win32_Service . 然后在Win32应用中用VxDCall这些未公
开API.我应如何使用Register_Win32_Service函数?在此函数中,
DDB_Offset参数应如何获得?因为DDB是用宏产生的.
Dreammy 的第三种方法,中断门我不太会用,在<<windows95
system programming secrets>>一书中有类似的调用门的方法,但不
知为何,其程序phys在我的机器上运行的结果不正确,phyaddress
的结果都是FFFFFFFF.程序源文件也无法编译通过.求教.
还有问题是:在16位的VXD中用Allocate_LDT_Selector等函数
来继MapPhySToLinear后,来处理物理内存,可传给应用一个指针来访问
它,但win32中没有了选择子,这一部分我应该如何操作?
若用函数Map_Lin_To_VM_Addr,其DPL是多少?
我在VC5.0中无法使用ax=1684h,INT 2fh,所以WIN32的App无法
象以前的WIN16方法和VXD通讯,是不是这样?另外,在VC5.0中(用了MFC)
我无法使用内嵌汇编(编译时总提示类型不匹配).问问各位有何良策?
2.SYS问题:
因为我的活儿最终定在Nt平台上,所以转想NT DDK了,现在刚
开始,许多问题不懂.
在VXD中,有很多方法使VXD通讯到APP,如SHELL_POSTMESSAGE
等,但在NT下的SYS有何方法?
在中断后,如何及时通知APP, 信号灯,互斥对象等可用吗?还是只能开一
个线程,不断调用DeviceIoControl?
发信人: suxm (笨笨), 信区: Programming
【 在 arcarc (异乡人) 的大作中提到: 】
: Hi, So pleased to visit BBS again!
: 十分想念各位学习VXD的朋友!现有很多问题
: 想和大家讨论:
: 1. 物理内存:
: Dreammy (这个杀手不太冷)在文章〖技术】Win95下的32位
: 应用程序访问物理内存的方法中提出了三种办法.我也做了一些试验,
: 但三种方法中只有DeviceIO有点进展,用的是VC5.0 mfc.但是在VXD中
: 只是简单的MapPhysToLinear后把结果作为线性地址传给了App.从运
: 行结果来看,查看f0段的ROM区结果是对的,其他地方的读好象也可以,
: 但是我写c0段的RAM区时,写不上去,(写完了再读,发现和原来的一样)
: (读写的过程都是在App中进行的).请问是什么原因?
内存锁定了吗?在VXD中对内存写一下试试。
: Dreammy 的第一种方法,在VXD提供Win32 Service ,用
: Register_Win32_Service . 然后在Win32应用中用VxDCall这些未公
: 开API.我应如何使用Register_Win32_Service函数?在此函数中,
: DDB_Offset参数应如何获得?因为DDB是用宏产生的.
: Dreammy 的第三种方法,中断门我不太会用,在<<windows95
: system programming secrets>>一书中有类似的调用门的方法,但不
: 知为何,其程序phys在我的机器上运行的结果不正确,phyaddress
: 的结果都是FFFFFFFF.程序源文件也无法编译通过.求教.
: 还有问题是:在16位的VXD中用Allocate_LDT_Selector等函数
: 来继MapPhySToLinear后,来处理物理内存,可传给应用一个指针来访问
: 它,但win32中没有了选择子,这一部分我应该如何操作?
: 若用函数Map_Lin_To_VM_Addr,其DPL是多少?
: 我在VC5.0中无法使用ax=1684h,INT 2fh,所以WIN32的App无法
: 象以前的WIN16方法和VXD通讯,是不是这样?另外,在VC5.0中(用了MFC)
~~~~~~~~~~
是
: 我无法使用内嵌汇编(编译时总提示类型不匹配).问问各位有何良策?
: 2.SYS问题:
: 因为我的活儿最终定在Nt平台上,所以转想NT DDK了,现在刚
: 开始,许多问题不懂.
: 在VXD中,有很多方法使VXD通讯到APP,如SHELL_POSTMESSAGE
: 等,但在NT下的SYS有何方法?
: 在中断后,如何及时通知APP, 信号灯,互斥对象等可用吗?还是只能开一
: 个线程,不断调用DeviceIoControl?
VxD与NT不兼容,NT支持的是kernel-mode-driver.清华书店有本讲
NT驱动程序的书,可以参考一下。
BTW:你的问题说得不是很清楚,到底是谁分配了内存,又想给谁用?
我都读糊涂了。
发信人: arcarc (异乡人), 信区: Programming
【 在 suxm (笨笨) 的大作中提到: 】
: 内存锁定了吗?在VXD中对内存写一下试试。
: ~~~~~~~~~~
: 是
: : 我无法使用内嵌汇编(编译时总提示类型不匹配).问问各位有何良策?
: VxD与NT不兼容,NT支持的是kernel-mode-driver.清华书店有本讲
: NT驱动程序的书,可以参考一下。
: BTW:你的问题说得不是很清楚,到底是谁分配了内存,又想给谁用?
: 我都读糊涂了。
I just want to access phy-memory,and use it in App
How to lock the memory in vxd? I am sorry,I find there are much different
between win32 and win16.
The other question is about NTDDK, in my sys part,how can I inform the
App that the certain interupt has occured.
Thanks
发信人: suxm (笨笨), 信区: Programming
【 在 arcarc (异乡人) 的大作中提到: 】
: I just want to access phy-memory,and use it in App
: How to lock the memory in vxd? I am sorry,I find there are much different
: between win32 and win16.
在VXD中锁定内存,如果是VXD分配的,那你可以在分配时
用一些FLAG来锁定它。
PageAllocate(1,PG_VM,hVM,0,0,-1,&PhysAddr,
PAGECONTIG|PAGEUSEALIGN|PAGEFIXED,&hMem,&iAddress);
或者:
PageAllocate(1,PG_SYS,0,0,0,-1,&PhysAddr,PAGELOCKED,&hMem,&iAddress);
这样分配的内存都是锁定的。
的确,对于WIN32和WIN16差别很大。
下面分别说一下:
对于WIN16:
(1)在WIN16中分配了内存,想给VXD用。
在Win16中,GlobalAlloc(),GlobalLock(),GlobalFix() ,GlobalPageLock(),
wSeg =HIWORD(lpBuf);
wOff = LOWORD(lpBuf);这里的lpBuf是前面几个函数分配的内存。
mov cx,wSeg
mov dx,wOff
用完之后,GlobalFree();
在VxD中
int* pLinearAddress;
pLinearAddress = Map_Flat(CLIENT_CX,CLIENT_DX);
然后你就可以在VxD中对pLinearAddress进行操作了。
(2)在VXD中分配了内存,想给WIN16用。
_MapPhysToLinear,Map_Lin_To_VM_Addr,同样,你应
该注意内存锁定。
对于WIN32:
最简单了,只要内存锁定了,那在VXD中分配内存后得到的指针
可以直接传给WIN32用。反之亦然。不过要说明的是,WIN32分配的内存
要想在全局与VXD共享,就必须用内存映射。
: The other question is about NTDDK, in my sys part,how can I inform the
: App that the certain interupt has occured.
: Thanks
对于kernel-mode-driver我不是很熟悉,对不起。
多看看NTDDK的文档可能会有帮助吧。
发信人: arcarc (异乡人), 信区: Programming
【 在 suxm (笨笨) 的大作中提到: 】
: 在VXD中锁定内存,如果是VXD分配的,那你可以在分配时
: 用一些FLAG来锁定它。
: PageAllocate(1,PG_VM,hVM,0,0,-1,&PhysAddr,
: PAGECONTIG|PAGEUSEALIGN|PAGEFIXED,&hMem,&iAddress);
: 或者:
: PageAllocate(1,PG_SYS,0,0,0,-1,&PhysAddr,PAGELOCKED,&hMem,&iAddress);
: 这样分配的内存都是锁定的。
谢谢suxm,PageAllocate是VDtools里的函数吧,我一直没有用VDTools,在Win95DDK中
应该用什么函数呢? BTW,哪里有好的VDTOOLS? sjtu上有,但安装到26%时就出错了,
lib.pku上好象找不到. 还有,VDTools写的VXD效率是不是很好?
我查了一下NTDDK的例子,有一个采用event通讯的,可能用的上.谢谢
发信人: suxm (笨笨), 信区: Programming
【 在 arcarc (异乡人) 的大作中提到: 】
: 【 在 suxm (笨笨) 的大作中提到: 】
:
: 谢谢suxm,PageAllocate是VDtools里的函数吧,我一直没有用VDTools,在Win95DDK中
: 应该用什么函数呢? BTW,哪里有好的VDTOOLS? sjtu上有,但安装到26%时就出错了,
: lib.pku上好象找不到. 还有,VDTools写的VXD效率是不是很好?
在DDK中是同名的函数。几乎VTOOLSD中的所有函数都是
VMM服务的WRAP形式。应该都可以到DDK中的同名函数的。
安装时出错是因为选择了一些不该选择的项吧。换换选项试试。
前面有篇文章讲了一个FTP站有,找下吧。
VTOOLSD写的VXD效率没有问题,如果你怀疑C的效率,那NT就
完了,因为KERNEL-MODE-DRIVER可都是用C开发的。
: 我查了一下NTDDK的例子,有一个采用event通讯的,可能用的上.谢谢
:
--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: hs5.hit.edu.cn]
--
※ 转载:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.118.239.237]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:209.417毫秒