回覆列表
  • 1 # 使用者7067981038116

    CTaskPage::HandleWMCOMMAND 處理結束任務按鈕按下事件CTaskPage::GetHWNDS 獲取當前選中的視窗控制代碼列表遍歷視窗控制代碼列表,執行以下操作GetKeyState(VK_CONTROL) 判斷 Ctrl 鍵是否按下,如果按下,強制結束置為 TRUE建立新執行緒 EndTaskThreadProc,傳入被關閉視窗的桌面、視窗控制代碼、程序ID、強制結束標誌位,開始執行結束操作TmGetProcessStatus 遍歷目標視窗程序的每一個執行緒,呼叫 GetThreadWaitChain 檢測是否存在死迴圈,如果存在,強制結束置為 TRUESetThreadDesktop 將當前執行緒切換到目標視窗所在桌面如果強制結束為 FALSE,用 SendMessageTimeoutW 向目標視窗傳送 WM_CLOSE 訊息,設定超時 500 毫秒如果超時,用 EndTask 關閉目標視窗,傳入強制結束標誌位 FALSE如果強制結束不為 FALSE,用 EndTask 關閉目標視窗,傳入強制結束標誌位 TRUEEndTask 結束任務的流程:用 CsrClientCallServer 向 csrss.exe 程序發起遠端呼叫,對應的 API 為 SrvEndTaskcsrss.exe 以一個長者(NT AUTHORITY\SYSTEM)的身份切到目標視窗桌面,根據傳入的強制結束標誌位決定向其 Owner 視窗傳送 WM_CLOSE 訊息(ThreadShutdownNotify)或者用 NtTerminateProcess 結束對應程序所以當在任務管理器中按下 Ctrl 鍵並點選結束任務按鈕時,相當於直接結束目標視窗對應的程序。

  • 中秋節和大豐收的關聯?
  • Windows幫助和支援怎樣關掉?