paoyipao
驱动牛犊
驱动牛犊
  • 注册日期2002-11-18
  • 最后登录2003-06-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1909回复:11

怎样才能防止引发页故障呢?关于ExAllocatePool(NonPagedPool,...)函数的引用!

楼主#
更多 发布于:2002-11-21 17:54
如题

[编辑 -  11/21/02 by  freeshar]

最新喜欢:

leavepeaceleavep...
知之为知之,不知为不知 有错则改之
paoyipao
驱动牛犊
驱动牛犊
  • 注册日期2002-11-18
  • 最后登录2003-06-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-22 10:29
问题已经搞得比较清楚了,这两日来多谢freeshar和Tom_lyd及各们大吓了!!小弟是个菜鸟级的人,以后还望多指点,俺会虚心向你们学习的.  

知之为知之,不知为不知 有错则改之
paoyipao
驱动牛犊
驱动牛犊
  • 注册日期2002-11-18
  • 最后登录2003-06-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-22 10:16
[quote]还有一个问题要请教UP的俩位,经过测试我的程序如果绑定到两张
NIC的时候就会容易死机,如果是一张测没有这现象.
(我的w2k是两张网卡的)
 

如果你驱动里面有采取同步措施,则有可能是造成了死锁。比如SPIN_LOCK, MUTEX,Event等什么的,你仔细检查一下。 [/quote]
我是用DDK里的passthru例子修改的,只是自已曾加了两个函数,在这两个函数里面记得是没有采用同步措施的,(原来我试用了一下,后来已去掉了).
会不会出现内存共享的问题?
知之为知之,不知为不知 有错则改之
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-11-22 10:02
还有一个问题要请教UP的俩位,经过测试我的程序如果绑定到两张
NIC的时候就会容易死机,如果是一张测没有这现象.
(我的w2k是两张网卡的)
 

如果你驱动里面有采取同步措施,则有可能是造成了死锁。比如SPIN_LOCK, MUTEX,Event等什么的,你仔细检查一下。
Tom_lyd
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-11-22 10:00
还是Tom_lyd版主爽快,谢了!
俺的程序运行在DISPATCH_LEVEL或更高级别上那是肯定的。
但我不清楚
PVODI pBuffer = ExAllocatePool( NonPagedPool,size)
一般在什么情况下会引发缺页?

缺页并不总是出现在你分配的是分页内存。
当访问一块已经释放的内存时,则不管是什么内存都会引异常;
如果内存访问越界,则非常容易引起缺页等异常;
不正常的字符串操作、没有正确地给字符串赋结束符、在内核中使用了不提倡用的C/C++ runtime 函数等都可能导致缺页等异常情况。
Tom_lyd
paoyipao
驱动牛犊
驱动牛犊
  • 注册日期2002-11-18
  • 最后登录2003-06-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-11-22 09:58
还有一个问题要请教UP的俩位,经过测试我的程序如果绑定到两张
NIC的时候就会容易死机,如果是一张测没有这现象.
(我的w2k是两张网卡的)
知之为知之,不知为不知 有错则改之
paoyipao
驱动牛犊
驱动牛犊
  • 注册日期2002-11-18
  • 最后登录2003-06-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-11-22 09:55
老兄这个问题确实已基本讨论清楚。你可以再去看一下
Walter Oney书CHAPTER 3内存管理!

sorry!俺目前手头上还没有这本书,我会尽力找这方面的资料的。
知之为知之,不知为不知 有错则改之
paoyipao
驱动牛犊
驱动牛犊
  • 注册日期2002-11-18
  • 最后登录2003-06-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-11-22 09:52
最基本的一点是
清楚自己的代码运行于什么级别, 是PASSIVE_LEVL,还是DISPATCH_LEVEL,还是更高。
内存的使用与级别的关系是:在PASSIVE_LEVEL可以使用分页内存,在DISPATCH_LEVEL及更高一定不能使用分页内存,而必须使用非分页内存。
分页内存与非分页内存的最常用的分配方法是:
PVODI pBuffer = ExAllocatePool( NonPagedPool/PagedPool, size ).
另外,为了调试用,你还可以使用
ExAllocatePoolWithTag,把你分配的内存头尾用一对钳子钳起来,非常容易检查越界现象。
最后一点,在DISPATCH_LEVEL级别使用内存,都加上__try __except结构化异常处理。
 

还是Tom_lyd版主爽快,谢了!
俺的程序运行在DISPATCH_LEVEL或更高级别上那是肯定的。
但我不清楚
PVODI pBuffer = ExAllocatePool( NonPagedPool,size)
一般在什么情况下会引发缺页?
知之为知之,不知为不知 有错则改之
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-11-22 09:48
老兄这个问题确实已基本讨论清楚。你可以再去看一下
Walter Oney书CHAPTER 3内存管理!
生命驱动,活力无限!
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-11-22 09:41
最基本的一点是
清楚自己的代码运行于什么级别, 是PASSIVE_LEVL,还是DISPATCH_LEVEL,还是更高。
内存的使用与级别的关系是:在PASSIVE_LEVEL可以使用分页内存,在DISPATCH_LEVEL及更高一定不能使用分页内存,而必须使用非分页内存。
分页内存与非分页内存的最常用的分配方法是:
PVODI pBuffer = ExAllocatePool( NonPagedPool/PagedPool, size ).
另外,为了调试用,你还可以使用
ExAllocatePoolWithTag,把你分配的内存头尾用一对钳子钳起来,非常容易检查越界现象。
最后一点,在DISPATCH_LEVEL级别使用内存,都加上__try __except结构化异常处理。
Tom_lyd
paoyipao
驱动牛犊
驱动牛犊
  • 注册日期2002-11-18
  • 最后登录2003-06-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-11-22 09:28
是问题说得不清楚吗?
还是这个世界太冷了!!!!!!
那位大吓给点提示吧!

[编辑 -  11/22/02 by  freeshar]
知之为知之,不知为不知 有错则改之
paoyipao
驱动牛犊
驱动牛犊
  • 注册日期2002-11-18
  • 最后登录2003-06-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-11-22 08:07
继续关注!!
知之为知之,不知为不知 有错则改之
游客

返回顶部