tomato9797_xfqi
驱动牛犊
驱动牛犊
  • 注册日期2011-01-05
  • 最后登录2011-07-27
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望41点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2405回复:0

获取相对路径时的奇怪问题(脑子不够用了,请高手们指点)

楼主#
更多 发布于:2011-03-29 14:41
文件过滤驱动,IRP_MJ_WRITE的派遣函数,获取被写文件的路径。在获取相对路径时报蓝屏:

    PIO_STACK_LOCATION irpSp = IoGetCurrentIrpStackLocation(Irp);
    PFILE_OBJECT FileObject = irpSp->FileObject;    

取*(FileObject->RelatedFileObject->FileName.Buffer)会出错,有时会蓝屏,代码:1000007E, {c0000005, a8a1ee18, ba4e7a1c, ba4e7718}
看了下反汇编,是在这里出错“if(*(FileObject->RelatedFileObject->FileName.Buffer) != L'\\') ”,取不到Buffer的地址,堆栈信息:
eax=897c8250 ebx=89de7e88 ecx=00500065 edx=8993b088 esi=89d9aca0 edi=897c7b04
eip=a8a1ee18 esp=ba4e7ae4 ebp=ba4e7b20 iopl=0         nv up ei pl nz na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010206
……
a8a1ee18 0fb711          movzx   edx,word ptr [ecx]       ds:0023:00500065=????

Buffer的地址变成“00500065”了,看到这个信息我认为是前面有什么地方处理内存出了错,可能有越界,但是找半天未果后,我把取相对路径的部分去掉后,就没有再报过错。
我的问题是:我开始怀疑OS本身在这里的处理会不会有问题,会不会有这样的情况:相对路径指向了野地址?因为每次都在同一个地方出错,如果是越界导致,那么把这段代码拿掉后,在别的地方的指针也可能因被破坏而出错,奇怪的是没有再出错。
请高手们指点
游客

返回顶部