suchen
HeimWeChat-AppletMini-ProgrammentwicklungEine ausführliche Einführung in ein kleines Programm zum Löschen von Prozessen

Als ich mir die Windows-API ansah, schrieb ich als Übung ein Programm zum Löschen eines Prozesses. Ich denke, es enthält ziemlich viele Wissenspunkte, deshalb habe ich es als Notiz gepostet. Natürlich kann es zu Fehlern kommen, jeder Rat ist willkommen ^^
Die in diesem Artikel erwähnte Funktion zum Anpassen von Berechtigungen wurde auch verwendet, daher habe ich sie direkt aus dem Shutdown-Programm kopiert. Das Folgende ist das Programm mit Kommentaren an wichtigen Stellen.

看windows api的时候,作为练习,编写了个删除进程的程序。觉得里面知识点挺多的,所以贴上来当个笔记用。当然难免有错误,欢迎指教 ^^    
其中也用到了上篇文章里面说到的调整权限的函数,于是就直接从关机程序里面copy过来了。下面是程序,关键地方给了注释。
#include<stdio.h>
#include<windows.h>
#include<Tlhelp32.h>

void ListProcess()                        //列出进程名称及ID
{
    HANDLE hProcessSnap=NULL;
    PROCESSENTRY32 pe32={0};            //存放进程信息的结构体
    hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);        //创建系统所有进程的快照
    if(hProcessSnap==INVALID_HANDLE_VALUE)
    {
        printf("CreateToolhelp32Snapshot failed: %d\n",GetLastError());
        return;
    }
    pe32.dwSize=sizeof(PROCESSENTRY32);
    printf("ProcessName            ProcessID\n");
    if(Process32First(hProcessSnap,&pe32))                //指向第一个进程,并将其放入PROCESSENTRY32结构体中
    {
        char c[5];
        do
        {
            itoa(pe32.th32ProcessID,c,10);
            printf("%-30s%d\n",pe32.szExeFile,pe32.th32ProcessID);        //szExeFile为进程的可执行文件名称
        }
        while(Process32Next(hProcessSnap,&pe32));
    }
    else
    {
        printf("Process32First() failed:%d\n",GetLastError());
    }
    CloseHandle(hProcessSnap);
    return;
}

BOOL EnablePrivilege()                //获取系统权限
{
    HANDLE hProcess = NULL;
    HANDLE hToken = NULL;
    LUID uID = {0};
    TOKEN_PRIVILEGES stToken_Privileges = {0};
    hProcess = GetCurrentProcess();                                    //获取当前应用程序进程句柄
    if(!OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES,&hToken))    //打开当前进程的访问令牌句柄
                                                                    //(OpenProcessToken函数调用失败返回值为零)
        return FALSE;
    if(!LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&uID))        //获取权限名称为"SeShutdownPrivilege"的LUID
                                                                //LookupPrivilegeValue函数调用失败返回值为零
        return FALSE;
    stToken_Privileges.PrivilegeCount = 1;                            //欲调整的权限个数
    stToken_Privileges.Privileges[0].Luid = uID;                    //权限的LUID
    stToken_Privileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;        //权限的属性,
                                                                            //SE_PRIVILEGE_ENABLED为使能该权限
    //调整访问令牌里的指定权限(AdjustTokenPrivileges函数调用失败返回值为零)
    if(!AdjustTokenPrivileges(hToken,FALSE,&stToken_Privileges,sizeof stToken_Privileges,NULL,NULL))
        return FALSE;
    if(GetLastError() != ERROR_SUCCESS)                                //查看权限是否调整成功
        return FALSE;
    CloseHandle(hToken);
    return TRUE;
}

bool KillProcess(DWORD id)
{
    HANDLE hProcess=NULL,hProcessToken=NULL;
    bool isKilled=false,bRet=false;

    EnablePrivilege();                    //调整权限
    printf("Enable Privilege OK!\n");
    if((hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,id))==NULL)    //打开进程获得句柄
    {
        printf("Open process %d failed: %d\n",id,GetLastError());
        return false;
    }
    if(!TerminateProcess(hProcess,1))                                //终结进程
    {
        printf("TerminateProcess failed: %d\n",GetLastError());
        return false;
    }
    isKilled=true;
    if(hProcessToken!=NULL)
        CloseHandle(hProcessToken);
    if(hProcess!=NULL)
        CloseHandle(hProcess);
    return isKilled;
}

void main()
{
    int id=0;
    ListProcess();
    while(1)
    {
        printf("选择要删除的进程ID:");
        scanf("%d",&id);
        if(KillProcess(id)==true)
        {
            system("cls");
            ListProcess();
        }
        else
            printf("Failed!!");
    }
}

Das obige ist der detaillierte Inhalt vonEine ausführliche Einführung in ein kleines Programm zum Löschen von Prozessen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung