1. 程式人生 > >Windows驅動學習(三)-- 殺死程序

Windows驅動學習(三)-- 殺死程序

1. 概述

我們常常遇到這種棘手的情況,使用工作管理員或一些應用程式無法將某一程序殺死。出現這種現象的原因一般是因為許可權不夠,若我們在驅動層呼叫ZwTerminateProcess來殺死這些程序,那麼成功率將大大增加。

2. 驅動編寫

2.1 初始化變數

1

2.2 DrvierEntry

在上一章,我們發現DeviceCreate和DeviceClose等函式怎麼長得一模一樣?我們可不可以進行程式碼上的優化,使得程式碼看起來更簡潔?答案是可以的,我們這裡使用一個迴圈將這些裝置函式都統一設定為DeviceApi。 2

2.3 DeviceApi

而DeviceApi的程式碼跟之前的一樣,就是些常規工作。 3

2.4 DeviceIoctl

DeviceIoctl被單獨拿出來定義了,因為我們這裡需要用該函式來做殺死程序的主要功能。 4

2.5 KillProcess

5

2.6 DriverUnload

最後,不要忘了在驅動解除安裝函式中將符號與裝置刪除。 6

3.應用編寫

若應用層的程式想讓驅動層執行KillProcess,就必須傳遞約定好的控制碼0x800。 7

4. 測試

4.1 載入驅動

8

4.2 建立一個測試程序

我們建立一個pid為3684的計算器作為演示。 9

但我們在應用程式中輸入要殺死的程序PID 3684時,該pid被傳遞給了驅動,後者將計算器程序成功殺死。 10

4.3 解除安裝驅動

11

這裡不知道除了什麼bug,當我再次想執行驅動時卻報錯了,哪位大牛知道的不妨告訴我一下_

12