阅读:2405回复:0
获取相对路径时的奇怪问题(脑子不够用了,请高手们指点)
文件过滤驱动,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本身在这里的处理会不会有问题,会不会有这样的情况:相对路径指向了野地址?因为每次都在同一个地方出错,如果是越界导致,那么把这段代码拿掉后,在别的地方的指针也可能因被破坏而出错,奇怪的是没有再出错。 请高手们指点 |
|