如何從核心態重啟系統

2021-04-12 18:23:35 字數 481 閱讀 4240

如何從核心態重啟系統呢,乙個經常被推薦的簡單的解決辦法是 用驅動來通知乙個使用者態的服務並呼叫exitwindow***函式

但是如果你非要想在核心態做這件事呢?那麼你可以使用halreturntofirmware或ntshutdownsystem函式

但是這些函式都是無文件的,如果你使用它們,你的驅動可能無法通過whql認證

這裡提供一種簡單的、完全有文件的方法:

使用下面的函式

kebugcheck(power_failure_simulate);

也許你會認為這是bugcheck,那麼你錯了,這並不會引發bugcheck

這樣實際上會呼叫了halreturntofirmware(halrebootmachine)

當執行了bugcheck**後,無bsod,無crash dump,只會進行非常乾淨、簡單和直接的重啟動;)

init程序如何從核心態切換到使用者態

大家都知道如何產生乙個新的程序。通過sys fork,之後再呼叫 sys execve 系統初啟後 核心態 的第乙個使用者態程序是init。這要涉及到內層 特權級高 向外層 特權級低 轉移的問題。通常情況下,核心是不會呼叫使用者層的 要想實現這逆向的轉移,一般做法是在使用者程序的核心棧 tss es...

從使用者態切換到核心態

在linux系統中,每個系統呼叫被賦予乙個系統呼叫號。這樣通過這個系統呼叫號就可以關聯系統呼叫。當使用者空間執行的程序執行乙個系統呼叫的時候,這個系統呼叫號就告訴核心需要呼叫哪個。核心記錄了系統調表中所有已註冊過的系統呼叫的列表,這個表為每乙個有效的系統呼叫指定了唯一的系統呼叫號。使用者空間程式無法...

核心態與使用者態,系統呼叫

注 參考linux unix系統程式設計 程序通過系統呼叫syscall從使用者態進入核心態,即將控制權交由核心。為什麼要把控制權交給核心?答 核心nb 程序可以說是什麼都不知道 執行緒同理 不知道自己在ram的位置,不知道自己哪部分在記憶體哪部分在交換空間 pcb 記憶體排程 不知道要訪問的檔案在...