다음을 통해 공유


IoDriverProxyCreateHotSwappableWorkerThread 함수(wdm.h)

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

DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE

IoRegisterDriverProxyEndpointsPsCreateSystemThread