共用方式為


Windows Kernel-Mode 進程和線程管理員

程式是目前在 Windows 中執行的軟體程式。 每個進程都有一個標識碼,一個識別它的數位。 線程是物件,可識別程序執行中的哪個部分。 每個線程都有一個標識碼,一個識別它的數位。

進程可能有多個線程。 線程的目的是要配置處理器時間。 在具有一個處理器的計算機上,可以配置多個線程,但一次只能執行一個線程。 每個線程只會執行一小段時間,然後執行會傳遞至下一個線程,讓使用者錯覺一次發生一個以上的事情。 在具有多個處理器的計算機上,可以進行真正的多線程處理。 如果應用程式有多個線程,線程可以在不同的處理器上同時執行。

Windows 核心模式進程和線程管理員會處理進程中所有線程的執行。 無論您有一個處理器或更多處理器,都必須在驅動程式程式設計中非常小心,以確保進程的所有線程都經過設計,以便無論線程處理的順序為何,您的驅動程式都會正常運作。

如果來自不同進程的線程嘗試同時使用相同的資源,可能會發生問題。 Windows 提供數種避免此問題的技術。 確保來自不同進程的線程不會碰到相同資源的技術稱為 同步處理。 如需同步處理的詳細資訊,請參閱 同步處理技術

提供進程和線程管理員直接介面的例程通常前面會加上字母 「Ps」;例如 ,PsCreateSystemThread。 如需核心 DIS 的清單,請參閱 Windows 核心

實作進程和線程相關回呼函式的最佳做法

這組指導方針適用於下列回呼例程:

PCREATE_PROCESS_NOTIFY_ROUTINE

PCREATE_PROCESS_NOTIFY_ROUTINE_EX

PCREATE_THREAD_NOTIFY_ROUTINE

PLOAD_IMAGE_NOTIFY_ROUTINE

POB_PRE_OPERATION_CALLBACK

POB_POST_OPERATION_CALLBACK

  • 讓例程保持簡短且簡單。
  • 請勿呼叫使用者模式服務來驗證進程、線程或映像。
  • 請勿進行登錄呼叫。
  • 請勿進行封鎖和/或進程間通訊 (IPC) 函式呼叫。
  • 請勿與其他線程同步,因為它可能會導致重新進入死結。
  • 使用 系統工作執行緒 將工作排入佇列,尤其是涉及以下工作的任務:
    • 慢速 API 或呼叫其他程序的 API。
    • 任何可能會中斷核心服務中線程的封鎖行為。
  • 如果您使用系統工作執行緒,請不要等待工作完成。 這樣做會違背將工作排入佇列以異步方式完成的目的。
  • 請考慮核心模式堆疊使用的最佳實踐。 如需範例,請參閱如何讓驅動程式無法耗盡核心模式堆棧?和主要驅動程式概念和秘訣

子系統進程

從 Windows 10 開始,Windows 子系統 Linux 版 (WSL) 可讓使用者與其他 Windows 應用程式一起在 Windows 上執行原生 Linux ELF64 二進制檔。 如需執行二進位檔所需的 WSL 架構和使用者模式和核心模式元件的相關信息,請參閱 適用於 Linux 的 Windows 子系統 部落格上的文章。

其中一個元件是 一個子系統進程 ,裝載未修改的使用者模式Linux二進位檔,例如 /bin/bash。 子系統進程不包含與 Win32 進程相關聯的數據結構,例如進程環境區塊 (PEB) 和線程環境區塊 (TEB)。 針對子系統進程,系統會將系統呼叫和使用者模式例外狀況分派至配對的驅動程式。

以下是 進程和線程管理員例程 的變更,以支援子系統進程: