[填坑]在XP上使用ObQueryNameString查询文件对象发现的大坑
早听说ObQueryNameString有问题,最近无聊想把枚举句柄名称的代码支持到XP,结果就一头撞进了这个大坑里。这是一段很普通的查询对象名称的代码:BOOLEAN QueryObjectName(PVOID pAnyObject, PWCHAR *OutputBufferFreeByCaller)
{
NTSTATUS status;
ULONG returnedLength;
BOOLEAN foundCompleteName = FALSE;
PUNICODE_STRING pObjectName = NULL;
status = ObQueryNameString(pAnyObject, NULL, 0, &returnedLength);
if(status == STATUS_INFO_LENGTH_MISMATCH)
{
pObjectName = ExAllocatePool(PagedPool, returnedLength);
status = ObQueryNameString(pAnyObject, (POBJECT_NAME_INFORMATION)pObjectName, returnedLength, &returnedLength);
if(NT_SUCCESS(status))
{
*OutputBufferFreeByCaller = ExAllocatePool(PagedPool,pObjectName->Length+2);
RtlZeroMemory(*OutputBufferFreeByCaller,pObjectName->Length+2);
memcpy(*OutputBufferFreeByCaller,pObjectName->Buffer,pObjectName->Length);
foundCompleteName = TRUE;
}
ExFreePool(pObjectName);
}
return foundCompleteName;
}但是在(且仅在)XP上查询FILE_OBJECT时有机会蓝屏(代码是BAD_POOL_CALLER),其他系统,或在XP查询其它对象都不蓝屏。然后上网一查,吐槽ObQueryNameString的帖子里,大多跟查询FILE_OBJECT有关。不过我就不吐槽了,因为有个很简单的解决方案:**** Hidden Message ***** 看看怎么填坑的.学习一下. 好大的一个坑,前排占座围观 学习一下 大坑,这个要收藏 看看是怎么解决的 看看了。。。 如果在应用层,还有一个死锁的问题,也是查句柄名称的,不过在内核实现就没这个问题. 看看怎么填坑的.学习一下. 看看怎么填坑的.学习一下. ObQueryNameString查询文件对象发现的大坑 看一看 感谢分析学习下 看看怎么填坑的.学习一下. 看看 学习学习 来看看究竟有什么坑! 以前遇到过 学习一下 来看看 学习学习 学习一下
看看怎么填坑的.学习一下. 看看是啥黑科技 look look 学习一下 我来看看! 看看怎么填坑的.学习一下. 必须支持 看看填坑,谢谢分享有用知识. 我来学习 在连接字符蓝屏吗?
我试过直接拷贝FileObject.FileName会蓝屏
看看怎么填坑的.学习一下.
页:
[1]
2