阅读:2138回复:14
在驱动程序和用户程序之间如何传递指针?
最近碰到一些问题,还望各位大侠能指点一二。
1,在驱动程序和用户程序之间如何传递指针,如何使用这些指针?有没有这方面的资料? |
|
最新喜欢:![]() |
沙发#
发布于:2002-10-17 16:03
试试把你用户的内存锁住,然后把指针给驱动
|
|
|
板凳#
发布于:2002-10-17 16:03
DeviceIoControl不就是把应用层的指针传到驱动层吗?
|
|
|
地板#
发布于:2002-10-18 09:36
在Driver里面要把指针传给App,你可以先把该指针强制转换为一个数据(比如:ULONG Pointer1=(ULONG)Pointer0)然后把这个数传递到App,最后把这个数转换为指针,比如:PULONG Pointer0=(PULONG)Pointer1。这样没有问题,我已经实现了。
|
|
地下室#
发布于:2002-10-18 10:25
用DeviceIoControl好像并不是把用户层的缓冲区指针传给驱动层,而是IO管理器将用户层缓冲区复制到驱动层的非分页内存,再将这个指针传给associateirp.systembuf,处理完irp后,IO管理器再复制回用户层缓冲区。
|
|
5楼#
发布于:2002-10-18 10:29
edriver:
这个指针用户程序能直接用吗? 我试一下 |
|
6楼#
发布于:2002-10-18 10:36
edriver: 不能直接用,做一下地址映射,用共享内存实现 |
|
7楼#
发布于:2002-10-18 11:05
老兄,看一下这里:
http://www.osr.com/ntinsider/2000/sharing_memory.htm |
|
8楼#
发布于:2002-10-18 14:59
前面两位说的是对的,在Deiver里面把虚拟地址转换为用户态能用的地址以后,就可以按我说的方法把这个指针传上去!
|
|
9楼#
发布于:2002-10-19 14:13
谢谢各位指点,我试一下先。
|
|
10楼#
发布于:2002-10-19 14:20
核心层和用户层指针数据类型不一样,缓冲区上数据虽然是一样的(复制到核心缓冲),但用户不能跳过指针检测,不能匹配
![]() |
|
11楼#
发布于:2002-10-20 21:10
什么是指针检测?
|
|
12楼#
发布于:2002-10-22 21:46
应用程序指针在核心态使用,得保正核心态代码运行在同一进程空间,而这通长很难,核心态地址则更本不能在用户态下使用,操做系统会弹出内存错误
:P |
|
|
13楼#
发布于:2002-10-22 22:26
对于应用层分配的内存只要在核心层锁定就行。
核心层分配的内存可以转换成应用层可用的指针 |
|
|
14楼#
发布于:2002-10-24 16:01
一般情况下,核态和用户层的数据交换不采用隐射文件形式,而是内核拥有一个副本,用户区数据可以被应用程序改变,否则有些用户数据能够在多线程下共享就成问题了,对吗?
|
|