阅读:1776回复:12
关于缓冲池分配和回收的问题
我使用ExAllocatePool来分配内存,但是在调用ExFreePool的时候却出现了问题,不知是何原因。有人知道是怎么回事吗,望指点一下。谢谢!
|
|
沙发#
发布于:2007-03-15 15:30
引用第0楼victorliuhao于2007-03-15 15:26发表的“关于缓冲池分配和回收的问题”: 代码帖上来!才能把脉! |
|
|
板凳#
发布于:2007-03-15 15:47
TempSourceName = (unsigned char *)ExAllocatePool(NonPagedPool,266);
strcpy(TempSourceName,"\\??\\"); strcat(TempSourceName,PathName); ... ... ExFreePool(TempSourceName); softice调试是显示error=c2(BAD_POOL_CALLER) |
|
地板#
发布于:2007-03-15 16:01
TempSourceName = (unsigned char *)ExAllocatePool(NonPagedPool,266*sizeof(unsigned char ));
??? |
|
地下室#
发布于:2007-03-15 16:02
为什么要这样做呢
|
|
5楼#
发布于:2007-03-15 16:03
unsigned char 不就是一个字节吗
|
|
6楼#
发布于:2007-03-15 16:38
引用第2楼victorliuhao于2007-03-15 15:47发表的“”: TempSourceName = (unsigned char *)ExAllocatePool(NonPagedPool,266); if(!TempSourceName) { //kill urself } strcpy(TempSourceName,"\??\"); strcat(TempSourceName,PathName); if(TempSourceName) { ExFreePool(TempSourceName); } |
|
|
7楼#
发布于:2007-03-15 16:42
这个也加进去了
还是没用 |
|
8楼#
发布于:2007-03-15 17:04
引用第7楼victorliuhao于2007-03-15 16:42发表的“”: ![]() ![]() ![]() |
|
|
9楼#
发布于:2007-03-15 17:11
RtlCopyMemory(CompressData, MyBuffer, CompressDataLen);
试试用这个拷贝? |
|
10楼#
发布于:2007-03-15 22:11
TempSourceName = (unsigned char *)ExAllocatePool(NonPagedPool,266);
memset(TempSourceName,0,266); if(!TempSourceName) { //kill urself } strcpy(TempSourceName,"\??\"); strcat(TempSourceName,PathName); if(TempSourceName) { ExFreePool(TempSourceName); } 保证能分配到空间,空间内没有脏数据。 |
|
11楼#
发布于:2007-03-15 22:29
我已经试过,用zh002008所说的方法确实可以。关键在于加上了memset(...)这条指令,如果不加就会出现BAD_POOL_CALLER,但是我有一点还是不明白,将这片内存清0和不清有什么区别,OS究竟在这个过程中做了些什么?
|
|
|
12楼#
发布于:2007-03-16 06:20
你内存操作写错了地方,比如分配了266bytes,但写了267个。用softice永远你也不知道真正的原因
另外,把所有的string操作都换成RtlStringCchxxx/RtlStringCbxxx,这样即使你不知道错误的原因,但最起码可以保证不会有BSOD。 |
|
|