在驱动层,通过遍历二叉树来遍历进程模块,可为什么有时候会枚举失败、、、明明算法什么的都正确。。。不理解,求大神解答!!!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
第一先排除你的代码有问题,你代码都不发,我也不知道是不是你代码问题。
第二就是访问锁的问题,因为你遍历的时候,系统修改了某个指针,你就失败了。
和系统一样加锁操作,或者直接IRQL HIGH去遍历
KeAttachProcess(TrageProcess); PULONG64 pAddrLock = (PULONG64)((ULONG64)TrageProcess + offset);//AddressCreationLock ExfAcquirePushLockShared((PEX_PUSH_LOCK)pAddrLock); PULONG64 pVadRoot = (PULONG64)((ULONG64)TrageProcess + pvadoffset);// 这里要根据版本号不同更改vadroot偏移 __try { if (MmIsAddressValid((PVOID)*pVadRoot)) { recursionVAD_s(*pVadRoot, Name); } } __except (TRUE) { ................................................ } ExfReleasePushLock((PEX_PUSH_LOCK)pAddrLock); //解除挂接 KeDetachProcess();
还是会遍历失败求大神解答!!!急死!!