stoneabc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1235回复:5

最新发现,高手们看看,我想的对不对

楼主#
更多 发布于:2005-01-28 16:07
这些日子我一直困扰于kernel里映射出来的地址在user端不能访问。
屡次求教未果。
现在我想可能是这个问题:
  我的驱动是一个读卡器的驱动,我在app里不是直接CreateFile打开设备后通过DeviceIoControl来直接得到我在kernel里映射的地址。
我偷懒了一下,用了pcsc提供的一些接口,就是windows里winscard里定义的一些api,发ioctrol也是通过它提供的ScardIOControl来发的,就是说我的exe和driver直接还有一个叫做smart card resource manager的东西。 这个东西在windows里的存在形式是一个.lib文件。
所以是不是我的kernel里辛辛苦苦映射出来的地址其实不在我的exe的context下,而在这个 smart card resource manager 的context下了。

各位高手,我说的有道理吗,调用一个.lib会改变当前用户进程空间吗?
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-28 16:14
调用一个.lib应该不会改变当前用户进程空间。
你觉得有问题,那就CreateFile打开设备,然后通过DeviceIoControl来直接得到我在kernel里映射的地址,试一下看看效果如何。
再说了,共享内存又不是什么解决不了的问题,说不定再检查一下就OK了,呵呵
在交流中学习。。。
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-28 16:19
这些日子我一直困扰于kernel里映射出来的地址在user端不能访问。
屡次求教未果。
现在我想可能是这个问题:
  我的驱动是一个读卡器的驱动,我在app里不是直接CreateFile打开设备后通过DeviceIoControl来直接得到我在kernel里映射的地址。
我偷懒了一下,用了pcsc提供的一些接口,就是windows里winscard里定义的一些api,发ioctrol也是通过它提供的ScardIOControl来发的,就是说我的exe和driver直接还有一个叫做smart card resource manager的东西。 这个东西在windows里的存在形式是一个.lib文件。
所以是不是我的kernel里辛辛苦苦映射出来的地址其实不在我的exe的context下,而在这个 smart card resource manager 的context下了。

各位高手,我说的有道理吗,调用一个.lib会改变当前用户进程空间吗?

调用一个.lib,其实是调用.dll,调用.dll其实是把.dll映射到你的进程空间。调用一个.lib不会改变当前用户进程空间.
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
stoneabc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-28 23:23
调用一个.lib应该不会改变当前用户进程空间。
你觉得有问题,那就CreateFile打开设备,然后通过DeviceIoControl来直接得到我在kernel里映射的地址,试一下看看效果如何。
再说了,共享内存又不是什么解决不了的问题,说不定再检查一下就OK了,呵呵


我实在是检查不出问题来了,哪位有兴趣我可以把代码奉上.
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-29 03:27
调用一个.lib应该不会改变当前用户进程空间。
你觉得有问题,那就CreateFile打开设备,然后通过DeviceIoControl来直接得到我在kernel里映射的地址,试一下看看效果如何。
再说了,共享内存又不是什么解决不了的问题,说不定再检查一下就OK了,呵呵

对,至少通常是这样,而这个库为ms提供,我相信他应该按规范来,不会出些怪招,所以我也这样认为
我记得这几天发给好给个朋友一个msdn中的内存共享的例子,不知道是否有发给你 :D
其实这个是论坛中也有很多这样的问题,我以前也回答过其他一些朋友,并在论坛中有回答,你可收以下看看以前的帖子,如果还有疑问就把代码贴上来,最好是附件方式。

好了,写软件一不小心写到3.30了,我也要去睡了。
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-01-29 09:44
如果你的DeviceIoControl被阻在里面,不能用的话(引用你以前的帖子),那么你在应用层再开个线程,用ReadFile,WriteFile产生IRP_MJ_READ,IRP_MJ_WRITE,在这里可以让I/O管理器代劳也是可以的
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
游客

返回顶部