IoDriverProxyCreateHotSwappableWorkerThread 함수는 드라이버 핫 스왑과 호환되는 "스핀 대기" 작업자 스레드를 제공하는 핫 스왑 가능한 작업자 스레드를 만듭니다. 이 함수는 핫 스왑 가능 상태를 유지해야 하는 드라이버에서 무한 루프 및 장기 실행 작업을 처리하는 데 특히 유용합니다.
Syntax
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
[in] 엔드포인트가 등록된 DriverProxy 확장에 대한 포인터입니다. WorkerStartContext에 지정된 작업자 루틴은 등록된 엔드포인트 래퍼여야 합니다.
ThreadHandle
[out] 생성된 스레드에 대한 핸들을 수신하는 변수에 대한 포인터입니다.
DesiredAccess
[in] 스레드 핸들에 대한 원하는 액세스 권한 입니다.
ObjectAttributes
[in, optional] 스레드 개체의 특성을 지정하는 OBJECT_ATTRIBUTES* 구조체에 대한 포인터입니다. 이 매개 변수는 NULL일 수 있습니다.
ProcessHandle
[in, optional] 스레드가 만들어지는 프로세스에 대한 핸들입니다. NULL이면 스레드가 현재 프로세스에서 만들어집니다.
ClientId
[out, optional] 만든 스레드의 CLIENT_ID 구조에 대한 포인터입니다. 이 매개 변수는 NULL일 수 있습니다.
WorkerStartContext
[in] 작업자 루틴 및 대기할 이벤트 개체를 포함하여 작업자 스레드에 대한 구성을 포함하는 DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT 구조체에 대한 포인터입니다.
반환 값
IoDriverProxyCreateHotSwappableWorkerThread 는 다음 NTSTATUS 값 중 하나를 반환합니다.
| 반환 코드 | Description |
|---|---|
| STATUS_SUCCESS | 핫스왑 가능한 작업자 스레드가 성공적으로 생성되었습니다. |
| STATUS_NOT_SUPPORTED | 현재 시스템에서는 DriverProxy 기능을 사용할 수 없습니다. |
| 파라미터 값이 잘못되었습니다 | NULL 작업자 루틴 또는 잘못된 이벤트 수와 같은 하나 이상의 매개 변수가 잘못되었습니다. |
| STATUS_INSUFFICIENT_RESOURCES | 스레드 컨텍스트 또는 지원 구조를 만드는 데 메모리가 부족했습니다. |
비고
이 함수는 DriverProxy 시스템과 통합되는 특수 작업자 스레드를 만들어 스레드가 계속 실행되는 동안 작업자 루틴을 핫스왑할 수 있도록 합니다. 이는 드라이버 업데이트 간에 지속되어야 하는 연속 백그라운드 작업을 수행해야 하는 드라이버에 특히 유용합니다.
WorkerStartContext에 지정된 작업자 루틴은 DriverProxy 등록 프로세스를 통해 가져온 등록된 엔드포인트 래퍼여야 합니다. 이 요구 사항을 통해 핫스왑 가능한 기능을 사용할 수 있으므로 드라이버는 장기 실행 백그라운드 작업을 중지하지 않고 작업자 논리를 업데이트할 수 있습니다.
작업자 스레드는 루프에서 작동하여 지정된 이벤트를 대기하고 이벤트가 신호를 받으면 작업자 루틴을 호출합니다. 작업자 루틴은 스레드가 계속 실행되어야 하는지 또는 종료해야 하는지를 나타낼 수 있습니다.
함수는 WorkerStartContext 구조체의 복사본을 만들므로 호출자는 함수가 반환된 후 원래 구조를 안전하게 삭제할 수 있습니다. 함수는 메모리 할당 및 스레드 생성을 수행할 때 PASSIVE_LEVEL 호출되어야 합니다.
요구 사항
| 요구 사항 | 가치 |
|---|---|
| 대상 플랫폼 | 보편적 |
| Header | wdm.h |
| Library | NtosKrnl.lib |
| IRQL | PASSIVE_LEVEL |
참고하십시오
DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT