共用方式為


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 上執行原生 Linux ELF64 二進位檔,以及其他 Windows 應用程式。 如需執行二進位檔所需的 WSL 架構和使用者模式和核心模式元件的相關資訊,請參閱Windows 子系統 Linux 版部落格上的文章。

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

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