共用方式為


Windows 內核模式進程和線程管理員

系統提供的 Windows 核心模式進程和執行緒管理員會控制進程和執行程在 Windows 作業系統中的執行方式。 瞭解此管理員對於需要建立執行緒、監視進程建立或同步處理共用資源存取的核心模式驅動程式開發人員至關重要。

ObCallback 驅動程式範例示範如何在核心模式驅動程式中使用進程和執行程通知常式。

處理程序和執行緒概觀

進程是目前在 Windows 中執行的軟體程式,並由唯一的進程 ID (PID) 識別。 在每個進程中,一個或多個 執行緒 代表執行程式程式碼的實際執行單元。 每個執行緒在其進程中也有一個唯一的執行緒識別碼 (TID)。

執行緒透過共享處理器時間來實現多工處理。 在單一處理器機器上,可以配置多個執行緒,但一次只能執行一個執行緒。 處理器在執行緒之間快速切換,產生同時執行的錯覺。 在多處理器系統上,當執行緒在不同的處理器上同時執行時,就會發生真正的平行執行。

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

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

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

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

使用這些最佳做法:

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

子系統進程

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

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

以下是處理程序及執行緒管理程式常式的變更,以支援子系統處理程序: