阅读:2888回复:3
BAD_POOL_HEADER到底是什么错误?实在是搞不出来,郁闷
在过滤驱动中做文件重定向操作,在重定向后的许多文件夹间进行拖动、拷贝文件夹时,老是出现BAD_POOL_HEADER错误,并且错误是stop:0x00000019,后面还有参数1 0x00000020,参数2 0x81c1f000,参数3 81c1f208,参数4 0x0a410000,请问应该怎样找出对应于代码中的错误?
PWSTR nameBuf2=NULL; UNICODE_STRING destinationName; nameBuf2=(PWCHAR)ExAllocatePool(NonPagedPool, NAME_BUF_LEN); if(!nameBuf2) { DbgPrint("nameBuf2 ExAllocatePool failed\n"); return STATUS_INSUFFICIENT_RESOURCES; } swprintf(nameBuf2, L"\\??\\%c:\\RECYCLER\\LINK%s",(WCHAR)(part+'C'-1),FileObject->FileName.Buffer);//生成重定向目录,part表示盘符,类型unsigned long RtlInitUnicodeString( &destinationName, nameBuf2 ); ExFreePool(FileObject->FileName.Buffer); FileObject->FileName.Buffer=(PWCHAR)ExAllocatePool(NonPagedPool, destinationName.MaximumLength); if(!FileObject->FileName.Buffer) { DbgPrint("FileObject->FileName.Buffer ExAllocatePool failed\n"); if(nameBuf2) ExFreePool((PVOID)nameBuf2); return STATUS_INSUFFICIENT_RESOURCES; } RtlZeroMemory(FileObject->FileName.Buffer,destinationName.MaximumLength); FileObject->FileName.MaximumLength = destinationName.MaximumLength; RtlCopyUnicodeString(&FileObject->FileName, &destinationName); FileObject->FileName.Buffer[FileObject->FileName.Length/2] = UNICODE_NULL; if(nameBuf2) ExFreePool((PVOID)nameBuf2); Irp->IoStatus.Status = STATUS_REPARSE; Irp->IoStatus.Information = IO_REPARSE; IoCompleteRequest( Irp, IO_NO_INCREMENT ); return STATUS_REPARSE; |
|
沙发#
发布于:2007-04-11 10:44
发现不管ExFreePool((PVOID)nameBuf2)之后是什么语句都会出现蓝屏?
到底为什么呀,搞了几天了,没有办法了,到底是什么没有考虑呀? |
|
板凳#
发布于:2007-04-11 14:10
内存访问越界了
|
|
地板#
发布于:2007-04-11 15:20
swprintf(
nameBuf2, L"\\??\\%c:\\RECYCLER\\LINK%s",(WCHAR)(part+'C'-1), FileObject->FileName.Buffer ); 可能已经越界了。。。 FILE_OBJECT的FileName成员不一定是以UNICODE_NULL结尾的字符串, 所以一定要指明FileObject->FileName.Length |
|
|