阅读:1573回复:13
在驱动扩展区中开缓冲区的问题
我想在驱动的扩展区中开一个10000字节左右的缓冲,最好用什么方法不容易出错?
|
|
沙发#
发布于:2005-01-10 09:05
ExAllocatePool( NonPagedPool, bufferSize );
|
|
|
板凳#
发布于:2005-01-10 09:35
我就是这样开的缓冲啊 ,为什么用verifier工具检测时候会蓝屏呢
|
|
地板#
发布于:2005-01-10 14:21
开完以后,当程序卸载的时候释放了没有?
|
|
地下室#
发布于:2005-01-10 14:46
开完以后,当程序卸载的时候释放了没有? 用完之后必须释放的。 |
|
|
5楼#
发布于:2005-01-14 10:29
yes
|
|
|
6楼#
发布于:2005-01-14 13:08
据同事说这样申请的内存即使不释放也不会蓝屏,只是会有内存泄漏。我想也差不多吧,所以我想蓝屏可能是其它原因造成的。
|
|
|
7楼#
发布于:2005-01-17 14:23
----------------
据同事说这样申请的内存即使不释放也不会蓝屏,只是会有内存泄漏。我想也差不多吧,所以我想蓝屏可能是其它原因造成的。 ---------------- 是这样的,我前几天做个试验,申请了几M的非分页内存,程序卸载以后也没有任何问题。 不过如果用verifier进行测试的话,再小的内存泄漏也会蓝屏的。 嗯,这样才会叫开发者注意到内存泄漏。 |
|
8楼#
发布于:2005-01-17 14:35
如果不用verifier,内存泄漏不会蓝屏,如果用了verifier,肯定蓝了。
做过WHQL就会知道了,verifier是WHQL的一部分。 我以前用verifier,就算分发例程不全都会导致蓝屏,像irp_mj_system_control这个irp的分发例程,如果不再driverentry中指定,就会蓝屏的,虽然这个例程可以什么也不用作,直接完成irp。 |
|
9楼#
发布于:2005-01-19 19:56
如果设置了low resource simulation,verifier会让ExAllocatePool失败,返回NULL。你的代码有检查这种情况吗?
|
|
|
10楼#
发布于:2005-01-20 10:23
如果设置了low resource simulation,verifier会让ExAllocatePool失败,返回NULL。你的代码有检查这种情况吗? 斑竹高,带来了新问题,在代码中如何检查这种情况? |
|
|
11楼#
发布于:2005-01-20 10:26
[quote]如果设置了low resource simulation,verifier会让ExAllocatePool失败,返回NULL。你的代码有检查这种情况吗? 斑竹高,带来了新问题,在代码中如何检查这种情况? [/quote] 不是很清楚了吗??ExAllocatePool失败,你必须进行相应的处理.. |
|
|
12楼#
发布于:2005-01-20 11:33
[quote][quote]如果设置了low resource simulation,verifier会让ExAllocatePool失败,返回NULL。你的代码有检查这种情况吗? 斑竹高,带来了新问题,在代码中如何检查这种情况? [/quote] 不是很清楚了吗??ExAllocatePool失败,你必须进行相应的处理.. [/quote] So, always do this: p = ExAllocatePool(...); if(p == NULL) { // do some cleaning return STATUS_UNSUFFICIENT_RESOURCE; } |
|
|
13楼#
发布于:2005-01-20 16:28
[quote][quote][quote]如果设置了low resource simulation,verifier会让ExAllocatePool失败,返回NULL。你的代码有检查这种情况吗? 斑竹高,带来了新问题,在代码中如何检查这种情况? [/quote] 不是很清楚了吗??ExAllocatePool失败,你必须进行相应的处理.. [/quote] So, always do this: p = ExAllocatePool(...); if(p == NULL) { // do some cleaning return STATUS_UNSUFFICIENT_RESOURCE; } [/quote] 哈哈,倒是我自己想复杂了,我以为是检测verifier的low resource simulation环境呢! |
|
|