紫水晶编程技术论坛 - 努力打造成全国最好的编程论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 11083|回复: 34

[填坑]在XP上使用ObQueryNameString查询文件对象发现的大坑

  [复制链接]

854

主题

3481

帖子

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

Rank: 125Rank: 125Rank: 125Rank: 125Rank: 125

积分
36100
发表于 2017-1-23 09:04:11 | 显示全部楼层 |阅读模式
早听说ObQueryNameString有问题,最近无聊想把枚举句柄名称的代码支持到XP,结果就一头撞进了这个大坑里。
这是一段很普通的查询对象名称的代码:
  1. BOOLEAN QueryObjectName(PVOID pAnyObject, PWCHAR *OutputBufferFreeByCaller)
  2. {
  3.         NTSTATUS status;
  4.         ULONG returnedLength;
  5.         BOOLEAN foundCompleteName = FALSE;
  6.         PUNICODE_STRING pObjectName = NULL;
  7.         status = ObQueryNameString(pAnyObject, NULL, 0, &returnedLength);
  8.         if(status == STATUS_INFO_LENGTH_MISMATCH)
  9.         {
  10.                 pObjectName = ExAllocatePool(PagedPool, returnedLength);
  11.                 status = ObQueryNameString(pAnyObject, (POBJECT_NAME_INFORMATION)pObjectName, returnedLength, &returnedLength);
  12.                 if(NT_SUCCESS(status))
  13.                 {
  14.                         *OutputBufferFreeByCaller = ExAllocatePool(PagedPool,pObjectName->Length+2);
  15.                         RtlZeroMemory(*OutputBufferFreeByCaller,pObjectName->Length+2);
  16.                         memcpy(*OutputBufferFreeByCaller,pObjectName->Buffer,pObjectName->Length);
  17.                         foundCompleteName = TRUE;
  18.                 }
  19.                 ExFreePool(pObjectName);
  20.         }
  21.         return foundCompleteName;
  22. }
复制代码
但是在(且仅在)XP上查询FILE_OBJECT时有机会蓝屏(代码是BAD_POOL_CALLER),其他系统,或在XP查询其它对象都不蓝屏。然后上网一查,吐槽ObQueryNameString的帖子里,大多跟查询FILE_OBJECT有关。不过我就不吐槽了,因为有个很简单的解决方案:
游客,如果您要查看本帖隐藏内容请回复

1

主题

81

帖子

1

精华

铂金会员

Rank: 5

积分
1818
发表于 2017-1-23 09:05:48 | 显示全部楼层
看看怎么填坑的.学习一下.

0

主题

7

帖子

0

精华

初来乍到

Rank: 1

积分
15
发表于 2017-1-23 09:16:26 | 显示全部楼层
好大的一个坑,前排占座围观

0

主题

52

帖子

0

精华

钻石会员

Rank: 6Rank: 6

积分
3863
发表于 2017-1-23 12:08:00 | 显示全部楼层
学习一下

0

主题

84

帖子

0

精华

金牌会员

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1043
发表于 2017-1-23 12:43:33 | 显示全部楼层
大坑,这个要收藏

3

主题

78

帖子

0

精华

初来乍到

Rank: 1

积分
440
发表于 2017-1-23 15:31:04 | 显示全部楼层
看看是怎么解决的

0

主题

117

帖子

0

精华

铜牌会员

Rank: 2Rank: 2

积分
258
发表于 2017-1-23 16:15:10 | 显示全部楼层
看看了。。。

4

主题

149

帖子

0

精华

金牌会员

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1189
发表于 2017-1-23 23:37:20 | 显示全部楼层
如果在应用层,还有一个死锁的问题,也是查句柄名称的,不过在内核实现就没这个问题.

0

主题

49

帖子

0

精华

铜牌会员

Rank: 2Rank: 2

积分
137
发表于 2017-1-26 12:05:28 | 显示全部楼层
看看怎么填坑的.学习一下.

0

主题

49

帖子

0

精华

铜牌会员

Rank: 2Rank: 2

积分
137
发表于 2017-1-26 12:06:29 | 显示全部楼层
看看怎么填坑的.学习一下.
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

手机版|Archiver|紫水晶工作室 ( 粤ICP备05020336号 )

GMT+8, 2024-4-26 09:10 , Processed in 0.028848 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表