ObQueryNameString这个函数早就臭名远播啦,某文就说
"这个函数的使用,在有些环境下会有问题。它的上层函数是 ZwQueryObject()。在某些情况下会导致系统挂起,或者直接 BSOD。它是从 对象管理器中的 ObpRootDirectoryObject开始遍历,通过 OBJECT_HEADER_TO_NAME_INFO 获得对象名称。今天问了下 PolyMeta好象是在处理 PIPE 时会挂启,这个问题出现在 2000 系统。在 XP 上好象补丁了。"
而百度一下也多是问关于调用失败的问题,而我在使用该函数时看了看一些例子与文章,发现了一个重要的问题,在此我觉得非常必要说一下
首先在首次搜了搜例子源码后,我发现其中有一个比较奇怪的地方(或许是我功力不足、孤听寡闻吧).
NTSTATUS
ObQueryNameString(
IN PVOID Object,
OUT POBJECT_NAME_INFORMATION ObjectNameInfo,
IN ULONG Length,
OUT PULONG ReturnLength
);