IoDriverProxyCreateHotSwappableWorkerThread 函式會建立熱插拔背景工作執行緒,以提供與驅動程式熱插拔相容的「微調等候」背景工作執行緒。 此功能對於處理需要保持熱插拔的驅動程式中的無限循環和長時間運行的操作特別有用。
語法
NTSTATUS IoDriverProxyCreateHotSwappableWorkerThread(
PDRIVER_PROXY_EXTENSION DriverProxyExtension,
PHANDLE ThreadHandle,
ULONG DesiredAccess,
POBJECT_ATTRIBUTES ObjectAttributes,
HANDLE ProcessHandle,
PCLIENT_ID ClientId,
PDRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT WorkerStartContext
);
參數
DriverProxyExtension
[在]端點註冊之 DriverProxy 延伸模組的指標。 WorkerStartContext 中指定的背景工作常式必須是已註冊的端點包裝函式。
ThreadHandle
[出]變數的指標,可接收所建立執行緒的控制碼。
DesiredAccess
[在]執行緒控制碼所需的 存取權限 。
ObjectAttributes
[in,可選]指定執行緒物件屬性之 OBJECT_ATTRIBUTES* 結構的指標。 此參數可以是 Null。
ProcessHandle
[in,可選]建立執行緒之進程的控制碼。 如果為 Null,則會在目前進程中建立執行緒。
ClientId
[輸出,可選]指向所建立執行緒 CLIENT_ID 結構的指標。 此參數可以是 Null。
WorkerStartContext
[在]指向 DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT 結構的指標,其中包含背景工作執行緒的組態,包括要等待的背景工作常式和事件物件。
返回值
IoDriverProxyCreateHotSwappableWorkerThread 會傳回下列其中一個 NTSTATUS 值:
| 回傳碼 | Description |
|---|---|
| STATUS_SUCCESS | 已成功建立熱插拔工作執行緒。 |
| STATUS_NOT_SUPPORTED | DriverProxy 功能在目前的系統上無法使用。 |
| STATUS_INVALID_PARAMETER | 一或多個參數無效,例如 Null 背景工作常式或無效的事件計數。 |
| STATUS_INSUFFICIENT_RESOURCES | 沒有足夠的記憶體可用來建立執行緒內容或支援結構。 |
備註
此函式會建立與 DriverProxy 系統整合的專用工作線程,允許在執行緒繼續執行時對工作常式進行熱插拔。 這對於需要執行應在驅動程式更新中持續存在的連續背景作業的驅動程式特別有用。
WorkerStartContext 中指定的背景工作常式必須是透過 DriverProxy 註冊程式取得的已註冊端點包裝函式。 此需求啟用熱插拔功能,允許驅動程式更新其背景工作邏輯,而無需停止長時間執行的背景作業。
背景工作執行緒在迴圈中運作,等待指定的事件,並在發出事件訊號時呼叫背景工作常式。 背景工作常式可以指出執行緒是否應該繼續執行或終止。
函式會建立 WorkerStartContext 結構的複本,因此呼叫端可以在函式傳回之後安全地捨棄原始結構。 函式必須在PASSIVE_LEVEL呼叫,因為它會執行記憶體配置和執行緒建立。
需求
| Requirement | 價值觀 |
|---|---|
| 目標平臺 | 普遍 |
| Header | wdm.h |
| Library | NtosKrnl.lib |
| IRQL | PASSIVE_LEVEL |
另請參閱
DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT