C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 如何获取进程的文件句柄?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试在C中获取任何正在运行的进程的@L_673_1@句柄.
这是我的代码

#include <windows.h>
#include <process.h>
#include <TlHelp32.h>
#include <winbase.h>
#include <String.h>
void killProcessByName(const char *fileName)
{
    HANDLE hSnapShot = CreateToolHelp32Snapshot(TH32CS_SNAPALL,null);
    PROCESSENTRY32 pEntry;
    pEntry.dwSize = sizeof (pEntry);
    BOOL hRes = Process32First(hSnapShot,&pEntry);
    while (hRes)
    {
        if (strcmp(pEntry.szExeFile,fileName) == 0)
        {
            HANDLE hProcess = OpenProcess(PROCESS_TERMINATE,(DWORD) pEntry.th32ProcessID);
            if (hProcess != NULL)
            { 
                CloseHandle(hProcess);
            }
        }
        hRes = Process32Next(hSnapShot,&pEntry);
    }
    CloseHandle(hSnapShot);
}
int main()
{
    killProcessByName("WINWORD.EXE");
    return 0;
}

代码工作正常,但所需的句柄没有被释放.
比较(strcmp)部分有问题吗?
或者还有别的我做错了吗?

解决方法

在这里使用CloseHandle是完全正确的,它只是关于它实际上错误的假设.它关闭刚刚由OpenProcess打开的句柄,并且不会以任何方式帮助改变(删除重命名)可执行@L_673_1@,因为该@L_673_1@在操作系统内保持打开状态.操作系统保持@L_673_1@打开,因为可执行@L_673_1@(和DLL)是“需求加载”,这意味着操作系统不会立即加载整个可执行@L_673_1@,它只加载它实际需要的内容.稍后,当需要之前未运行的代码时,它会加载这些位.

大佬总结

以上是大佬教程为你收集整理的c – 如何获取进程的文件句柄?全部内容,希望文章能够帮你解决c – 如何获取进程的文件句柄?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。