Windows和系统进程

标签 windows process taskmanager

注意:我已经在 super 用户上以类似的格式问过这个问题,但它似乎更适合这里。 它当然也与编程有关,因为它涉及 Win32 API 的一部分、一般的 Windows 和进程管理。

所以有些进程不能用 taskkill 终止 - 一般是系统进程。但也有,例如我的反病毒程序,它使自己“无法终止”。

  • 如何在windows下访问和主要终止系统进程? (Microsoft 的 kill.exe 不起作用)

  • 防病毒程序等进程如何保护自己?那你怎么能把它们关掉呢?

最佳答案

您将需要 API Hook 来防止您的进程终止。 API Hook 并不容易,因为它需要系统范围的 dll 注入(inject)和内存编辑或设备驱动程序。阅读this得到一个想法。

幸运的是,那里有现有的库,比如 this一个,不幸的是,我认为它现在是共享软件。我还找到了this ,您可能可以在 Google 上找到更多免费软件。

要回答您的第一个问题,终止系统进程相当容易。在 C# 中使用 Process.Kill您可以终止系统进程并导致蓝屏的方法如果从 Windows 系统服务执行此操作,至少在 Windows 7 上是这样(我很难学到这一点...)。使用 TerminateProcess() 进行操作来自服务外部的功能仅在您启用某些权限时才有效:http://www.codase.com/search/call?name=AdjustTokenPrivileges - 如果我没记错的话,您需要启用 SE_DEBUG_NAME。

要关闭防病毒软件,他们通常有一个菜单:)。要强制终止它们,您必须使用它们不 Hook 的终止方法。 This page描述了很多。

这是一个可以终止您想要的进程的示例,假设使用的 API 函数没有被 Hook 。 除非您知道自己在做什么,否则不要运行它,因为它可能会导致蓝屏!

#include <stdio.h>
#include <windows.h>
#include <process.h>
#include <iostream>

using namespace std;

int EnablePrivilege(const char * lpPrivilegeName, BOOL bEnable)
{
    TOKEN_PRIVILEGES Privileges;
    ZeroMemory(&Privileges, sizeof(Privileges));

    HANDLE hToken;
    BOOL bResult;

    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
        return 1;
    Privileges.PrivilegeCount = 1;
    Privileges.Privileges[0].Attributes = (bEnable) ? SE_PRIVILEGE_ENABLED : 0;
    if (!LookupPrivilegeValue(NULL, lpPrivilegeName,
                               &Privileges.Privileges[0].Luid))
    {


        CloseHandle(hToken);
        return 2;
    }
    bResult = AdjustTokenPrivileges(hToken, FALSE, &Privileges, sizeof(Privileges), NULL, NULL);
    CloseHandle(hToken);
    return bResult;
}

int main()
{
    cout << EnablePrivilege(SE_DEBUG_NAME, TRUE);

    HANDLE procHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 500); // replace 500 with the PID of the process you want to terminate - can be taken from taskmanager.

    TerminateProcess(procHandle, 0);

    CloseHandle(procHandle);
}

关于Windows和系统进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2443509/

相关文章:

nginx - php-fpm 进程监控/分析

c# - 使用 C# 以编程方式禁用 Taskmanager

python - 使用 Amazon EC2 自动缩放 Python Celery

java - 如何在浏览器中显示可打印的PDF文档?

windows - 两个窗口上的句柄可以相同吗?

linux - 确定 linux 系统上每个唯一的进程所有者

windows - Windows 任务管理器中的 "dump file"是什么?

ruby - 使用 Ruby 执行命令行时如何转义竖线?

java - Windows 7下从Jython获取文件夹权限

c++ - MPI_send 和 MPI_Resc - 更新单个数组值