我通过循环运行NtQuerySystemInformation
来枚举所有进程。在调用主循环之前,我将循环NtQuerySystemInformation
直到return value != STATUS_INFO_LENGTH_MISMATCH
。这样,我知道分配的缓冲区中有足够的内存来容纳所有进程名称及其信息结构。
我迭代PSYSTEM_PROCESS_INFORMATION
结构,方法是获取为该结构分配的基值,然后向其中添加NextEntryOffset
值,直到NextEntryOffset != NULL
。
问题是,在尝试free
分配此结构分配的内存之后,我在_CrtIsValidHeapPointer
上得到了一个断点。
我认为这是因为我已经迭代到结构的末尾,并且没有引用结构的开始(我最初分配了它)。
我的问题是,如何获得对原始值的引用,以便可以正确地释放结构,或者在没有此断点的情况下释放它的正确方法是什么?
答案 0 :(得分:1)
在更新指针结构指向的位置之前(仅对于第一个指针地址),存储指向缓冲区原始地址的指针。然后,您可以使用开始缓冲区的备份来缓冲,以便以后在完成缓冲区操作后释放内存。如果以后需要释放缓冲区,但是在执行该操作时需要更新到指针结构指向的位置,这就是您需要做的所有事情。