psCreateSystemThread 函式 (wdm.h)
PsCreateSystemThread 例程會建立系統線程,以內核模式執行,並傳回線程的句柄。
語法
NTSTATUS PsCreateSystemThread(
[out] PHANDLE ThreadHandle,
[in] ULONG DesiredAccess,
[in, optional] POBJECT_ATTRIBUTES ObjectAttributes,
[in, optional] HANDLE ProcessHandle,
[out, optional] PCLIENT_ID ClientId,
[in] PKSTART_ROUTINE StartRoutine,
[in, optional] PVOID StartContext
);
參數
[out] ThreadHandle
指向將接收句柄的變數。 一旦不再使用句柄,驅動程式就必須關閉 ZwClose 的句柄。 此句柄是 Windows Vista 和更新版本的 Windows 核心句柄。 在舊版 Windows 中,句柄可能不是核心句柄。
[in] DesiredAccess
指定 ACCESS_MASK 值,表示所建立線程的要求存取類型。
[in, optional] ObjectAttributes
指向指定物件屬性的結構。 OBJ_PERMANENT、OBJ_EXCLUSIVE和OBJ_OPENIF不是線程物件的有效屬性。 在 Windows XP 和更新版本的 Windows 上,如果呼叫端未在系統進程內容中執行,則必須設定 ObjectAttributes 的 OBJ_KERNEL_HANDLE 屬性。 Microsoft Windows 2000 和 Windows 98/Me 的驅動程式只能從系統進程內容呼叫 PsCreateSystemThread 。 對於 Windows Vista 和更新版本的 Windows,句柄將是核心句柄。
[in, optional] ProcessHandle
指定要在其中執行線程位址空間之進程的開啟句柄。 呼叫端的線程必須具有此進程的PROCESS_CREATE_THREAD存取權。 如果未提供此參數,則會在初始系統進程中建立線程。 針對驅動程式建立的線程,此值應該是 NULL 。 使用 NtCurrentProcess 宏,定義於 Ntddk.h 中,以指定目前的進程。
[out, optional] ClientId
指向接收新線程之用戶端標識碼的結構。 針對驅動程式建立的線程,此值應該是 NULL 。
[in] StartRoutine
新建立之系統線程的進入點。 此參數是 ThreadStart 例程的函式指標,可接收單一自變數,這是呼叫端所提供的 StartContext 參數值。
[in, optional] StartContext
提供在線程開始執行時傳遞至線程的單一自變數。
傳回值
如果線程已建立,PsCreateSystemThread 會傳回STATUS_SUCCESS。
備註
建立裝置專用線程的驅動程式會在初始化或 I/O 要求開始傳入這類驅動程式的 Dispatch 例程時呼叫此例程。 例如,驅動程式可能會在收到異步裝置控制要求時建立這類線程。
PsCreateSystemThread 會建立內核模式線程,以開始系統內個別的執行線程。 這類系統線程沒有 TEB 或使用者模式內容,而且只會在內核模式中執行。
如果輸入 ProcessHandle 為 NULL,則建立的線程會與系統進程相關聯。 這類線程會繼續執行,直到系統關閉或線程藉由呼叫 PsTerminateSystemThread 自行終止為止。
在系統進程以外的進程內容中執行的驅動程式例程必須為 PsCreateSystemThread 的 ObjectAttributes 參數設定 OBJ_KERNEL_HANDLE 屬性。 這會限制 使用 PsCreateSystemThread 所傳回的句柄,以核心模式執行的進程。 否則,線程句柄可由驅動程序執行所在的進程存取。 驅動程式可以設定OBJ_KERNEL_HANDLE屬性,如下所示。
InitializeObjectAttributes(&ObjectAttributes, NULL, OBJ_KERNEL_HANDLE, NULL, NULL);
如需 StartContext 參數的詳細資訊,請參閱 ThreadStart。
新建立的系統線程會在已停用 一般核心 APC 的重要區域中PASSIVE_LEVEL執行。
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDIS (storport) 、 IrqlPsPassive (wdm) |