WINDOWS NT下的禁止關機

2021-05-23 23:18:16 字數 1660 閱讀 7722

windows nt下的禁止關機

windows將核心**封裝,而僅僅提供介面api,也就是說,你只需要根據說明書來操作遙控板,而不需要自己去研究遙控板是怎麼

實現的。

同樣的,如果你想關機,那麼流程如下:

呼叫系統關機api--送入該api必要的引數--轉由系統執行關機

一、用od載入c:/windows/system32/shutdown.exe後,可以看到它呼叫的相關api:

需要注意的說,win 2k下需要得到shutdown許可:

(1)首先得到當前程式的程序控制代碼;

(2)使用這個程序控制代碼得到當前程式的訪問標記;

(3)生成token_privileges結構;

(4)有了token_privileges結構後再獲得shutdown許可權;

(5)最後使用exitwindowex函式進行相關操作。

二、目前流行的快速關機方法,是採用了下面兩個native api來實現的:

nt native api 是可由使用者模式和核心模式程式呼叫的nt系統服務集介面,它們直

接由nt作業系統實現.例如,當應用程式呼叫createfile()時,最終會轉換為對

native api ntcreatefile()的呼叫.微軟對被裝置驅動程式呼叫的zw***系列函式

給過一些說明.但是,這些公開的函式只不過是全部native api的一小部份,僅有

10%的native api在ddk中被公開其呼叫!。

三、如何禁止關機

當我們hook掉相應的api,在系統接管前先自行處理,就可以實現禁止關機。

網上流行的全域性hook 程式一般採用 setwindowshookex,此函式原型:

使用這個這個api 時候有問題的,只能掛接系統中的所有gui執行緒,對windows console 類的程式就無能為力了。

還有一種通過插入登錄檔來實現:

這種方法簡單,但是還是只能掛鉤gui程式,並且這個鍵值已經被hips和部分殺軟所關注。

以上兩種效果不好,ring3下的hook只對當前程序有效,其他程序的api還是正常的。這就是說我們必須列舉程序,然後對每個ring3

程序執行一遍hook操作。但是,系統中總有新程序產生,對於這些新程序我們怎麼處理呢?最容易想到的就是設定乙個timer,每隔

一段時間就列舉一遍程序然後把新的掛鉤。但仔細一想就知道不行,temer過快嚴重影響系統效率,慢了又起不到作用,況且

windows不是乙個實時作業系統,沒人能保證到時間temer就被啟用。如果我們能監控程序建立,並在他們真正執行之前就執行掛鉤

操作,就可以完美的解決問題。

但是如何做到這一點呢?我們知道ring3的程序都有乙個「父程序」也就是說新程序都是由老程序建立的(驅動很少建立程序)。知

道這一點就好辦了,我們要做的只是截獲程序建立。你肯定會說「這麼簡單,hook ntcreateprocess就可以了!」但是這不是最簡

單的做法。為什麼這麼說呢,首先在ntcreateprocess函式被呼叫時程序並沒有真正被建立,我們無法執行hook操作,而當

,不只是為什麼?)。

所以選擇ntresumethread。我們知道,當新程序被建立時,os會為其建立乙個住執行緒,而在這之後會呼叫ntresumethread時期開始

執行,這時初始化完畢,dll都已經被載入,但程序卻沒有開始執行這時我們最好的機會。

linux下的關機命令

在linux下一些常用的關機 重啟命令有shutdown halt reboot 及init,它們都可以達到重啟系統的目的,但每個命令的內部工作過程是不同的,通過本文的介紹,希望你可以更加靈活的運用各種關機命令。1.shutdown shutdown命令安全地將系統關機。有些使用者會使用直接斷掉電源...

linux下的關機 重啟

關機 root使用者使用 shutdown h now 立刻關機 非root則會使用者報錯 shutdown h 5 5分鐘後自動關機 halt 直接使用等價於關機 如果是通過shutdown命令設定關機的話,可以用shutdown c命令取消重啟重啟 root使用者使用 reboot重啟系統 re...

Windows NT 的 TCP IP 路由基礎

概要 本文講述在有或沒有多協議路由器 mpr 的單一宿主機器和多宿主 windows nt 路由器上的 windows nt 路由表。該背景資訊有助於對與 tcp ip 相關的問題進行疑難解答。更多資訊 即使是單一宿主的 tcp ip 主機也需要作出路由選擇。這些路由決定是由路由表控制的。可以通過在...