niwei
驱动牛犊
驱动牛犊
  • 注册日期2002-02-20
  • 最后登录2007-07-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2139回复:14

在驱动程序和用户程序之间如何传递指针?

楼主#
更多 发布于:2002-10-17 15:40
最近碰到一些问题,还望各位大侠能指点一二。
1,在驱动程序和用户程序之间如何传递指针,如何使用这些指针?有没有这方面的资料?

最新喜欢:

abc0099abc009...
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-10-17 16:03
试试把你用户的内存锁住,然后把指针给驱动
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-10-17 16:03
DeviceIoControl不就是把应用层的指针传到驱动层吗?
Tom_lyd
edriver
驱动小牛
驱动小牛
  • 注册日期2002-03-04
  • 最后登录2006-09-15
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-10-18 09:36
在Driver里面要把指针传给App,你可以先把该指针强制转换为一个数据(比如:ULONG Pointer1=(ULONG)Pointer0)然后把这个数传递到App,最后把这个数转换为指针,比如:PULONG Pointer0=(PULONG)Pointer1。这样没有问题,我已经实现了。
niwei
驱动牛犊
驱动牛犊
  • 注册日期2002-02-20
  • 最后登录2007-07-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-10-18 10:25
用DeviceIoControl好像并不是把用户层的缓冲区指针传给驱动层,而是IO管理器将用户层缓冲区复制到驱动层的非分页内存,再将这个指针传给associateirp.systembuf,处理完irp后,IO管理器再复制回用户层缓冲区。
niwei
驱动牛犊
驱动牛犊
  • 注册日期2002-02-20
  • 最后登录2007-07-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-10-18 10:29
edriver:
 这个指针用户程序能直接用吗?
 我试一下
horsedo
驱动小牛
驱动小牛
  • 注册日期2001-11-29
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2002-10-18 10:36
edriver:
 这个指针用户程序能直接用吗?
 我试一下

不能直接用,做一下地址映射,用共享内存实现
yymrhxf
驱动牛犊
驱动牛犊
  • 注册日期2002-08-07
  • 最后登录2011-10-25
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-10-18 11:05
老兄,看一下这里:

http://www.osr.com/ntinsider/2000/sharing_memory.htm
edriver
驱动小牛
驱动小牛
  • 注册日期2002-03-04
  • 最后登录2006-09-15
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-10-18 14:59
前面两位说的是对的,在Deiver里面把虚拟地址转换为用户态能用的地址以后,就可以按我说的方法把这个指针传上去!
niwei
驱动牛犊
驱动牛犊
  • 注册日期2002-02-20
  • 最后登录2007-07-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-10-19 14:13
谢谢各位指点,我试一下先。
wanmintian
驱动牛犊
驱动牛犊
  • 注册日期2002-04-09
  • 最后登录2006-03-27
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-10-19 14:20
核心层和用户层指针数据类型不一样,缓冲区上数据虽然是一样的(复制到核心缓冲),但用户不能跳过指针检测,不能匹配  
niwei
驱动牛犊
驱动牛犊
  • 注册日期2002-02-20
  • 最后登录2007-07-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-10-20 21:10
什么是指针检测?
lifeship
驱动小牛
驱动小牛
  • 注册日期2002-10-18
  • 最后登录2005-07-19
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-10-22 21:46
应用程序指针在核心态使用,得保正核心态代码运行在同一进程空间,而这通长很难,核心态地址则更本不能在用户态下使用,操做系统会弹出内存错误
 :P
杯汝前来,  老子今朝,  放荡形骸!  甚长年抱渴,  咽如焦釜,  于今喜醉,  气似奔雷!  慢说刘伶,  古今达者,  醉后何妨死便埋! 
Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
13楼#
发布于:2002-10-22 22:26
对于应用层分配的内存只要在核心层锁定就行。
核心层分配的内存可以转换成应用层可用的指针
易水
wanmintian
驱动牛犊
驱动牛犊
  • 注册日期2002-04-09
  • 最后登录2006-03-27
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-10-24 16:01
一般情况下,核态和用户层的数据交换不采用隐射文件形式,而是内核拥有一个副本,用户区数据可以被应用程序改变,否则有些用户数据能够在多线程下共享就成问题了,对吗?
游客

返回顶部