smallcat0008
驱动牛犊
驱动牛犊
  • 注册日期2004-08-30
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分504分
  • 威望62点
  • 贡献值0点
  • 好评度38点
  • 原创分0分
  • 专家分0分
阅读:2889回复:3

BAD_POOL_HEADER到底是什么错误?实在是搞不出来,郁闷

楼主#
更多 发布于:2007-04-07 16:33
  在过滤驱动中做文件重定向操作,在重定向后的许多文件夹间进行拖动、拷贝文件夹时,老是出现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;
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
沙发#
发布于: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
人总在矛盾中徘徊。。。
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-04-11 14:10
内存访问越界了
smallcat0008
驱动牛犊
驱动牛犊
  • 注册日期2004-08-30
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分504分
  • 威望62点
  • 贡献值0点
  • 好评度38点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-04-11 10:44
发现不管ExFreePool((PVOID)nameBuf2)之后是什么语句都会出现蓝屏?
到底为什么呀,搞了几天了,没有办法了,到底是什么没有考虑呀?
游客

返回顶部