NtQueryObject遍历进程(死锁)与管道冲突的解决方案

在一次注入使用命名管道进行进程间通讯的案例中

需要使用NtQueryObject遍历进程互斥锁情况,期间发现一个问题,NtQueryObject查询到管道时候会死锁,网上也有很多资料介绍NtQueryObject死锁的情况,不过解决方案不是很明确

这里记录下解决办法

在时候NtQueryObject打开进程关联句柄时,先使用CreateFileMapping假定创建文件句柄,如果创建成功,返回,当然假如需要获取信息的对象是File类型也不用返回,此次检测过的对象已经不会造成NtQueryObject死锁了。如果创建失败说明并非File,然后GetLastError(),若值为193,就返回,假如值不为193,并且CreateFileMapping失败,就可以进行NtQueryObject,此时对象已经排除了会让NtQueryObject死锁的对象。

我所需要检测的对象类型为Mutant

HANDLE m_hMapFile = CreateFileMapping(hHandle, NULL, PAGE_READONLY, 0, 1024, L"TestFileMap");
if (m_hMapFile)
{
	CloseHandle(m_hMapFile);
	continue;
}	
else
    if (GetLastError() == 193)
        continue;
Status = NtQueryObject(hHandle, ObjectNameInformation, szName, 512, &dwFlags);
OK~完美解决类似NtQueryObject死锁情况。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值