다음을 통해 공유


DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT 구조체(wdm.h)

DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT 구조에는 IoDriverProxyCreateHotSwappableWorkerThread를 사용하여 핫 스왑 가능한 작업자 스레드를 시작하는 데 필요한 매개 변수가 포함되어 있습니다.

Syntax

typedef struct _DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT {
  PDRIVER_PROXY_HOTSWAP_WORKER_ROUTINE WorkerRoutine;
  PVOID                                Context;
  WAIT_TYPE                            WaitType;
  KWAIT_REASON                         WaitReason;
  KPROCESSOR_MODE                      WaitMode;
  BOOLEAN                              Altertable;
  BOOLEAN                              HasTimeout;
  LARGE_INTEGER                        Timeout;
  ULONG                                EventCount;
  PKEVENT                              Events[ANYSIZE_ARRAY];
} DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT, *PDRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT;

구성원

WorkerRoutine

작업자 스레드가 지정된 이벤트를 기다리지 않을 때 호출되는 DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE 콜백 함수에 대한 포인터입니다.

Context

WorkerRoutine 콜백에 전달될 드라이버 정의 컨텍스트 정보에 대한 포인터입니다. 이를 통해 드라이버는 작업자 루틴에 필요한 추가 데이터를 제공할 수 있습니다.

WaitType

수행할 대기 작업의 유형입니다. 대기가 충족되기 전에 지정된 모든 개체가 신호 상태를 달성해야 함을 나타내는 WaitAll을 지정합니다. 또는 WaitAny- 대기가 충족되기 전에 개체 중 하나가 신호 상태를 달성해야 함을 나타냅니다.

WaitReason

대기 이유입니다. 드라이버는 이 값을 Executive 로 설정하거나, 드라이버가 사용자를 대신하여 작업을 수행하고 사용자 스레드의 컨텍스트에서 실행 중인 경우 UserRequest로 설정해야 합니다.

WaitMode

호출자가 KernelMode 또는 UserMode에서 대기하는지 여부입니다. 중간 및 최저 수준 드라이버는 KernelMode를 지정해야 합니다. 대기한 개체 집합에 뮤텍스가 포함된 경우 호출자는 KernelMode를 지정해야 합니다.

Altertable

대기 중인 상태에서 스레드를 경고할 수 있는지 여부를 나타내는 부울 값입니다.

HasTimeout

시간 제한 값이 지정되었는지 여부를 나타내는 부울 값입니다. TRUE이면 시간 제한 필드에 유효한 시간 제한 값이 포함됩니다. FALSE이면 대기 작업이 무기한 대기합니다.

Timeout

대기가 완료될 절대 또는 상대 시간을 100나노초 단위로 지정하는 시간 제한 값에 대한 포인터입니다.

양수 값은 1601년 1월 1일을 기준으로 절대 시간을 지정합니다. 음수 값은 현재 시간을 기준으로 간격을 지정합니다. 절대 만료 시간은 시스템 시간의 변경 내용을 추적합니다. 상대 만료 시간은 시스템 시간 변경의 영향을 받지 않습니다.

*Timeout = 0이면 루틴이 기다리지 않고 반환됩니다. 호출자가 NULL 포인터를 제공하는 경우 루틴은 모든 디스패처 개체가 신호 상태로 설정될 때까지 무기한 대기합니다.

EventCount

이벤트 배열의 이벤트 수입니다. 이 값은 작업자 스레드가 대기할 커널 개체 수를 결정합니다.

Events[ANYSIZE_ARRAY]

작업자 스레드가 대기할 KEVENT 개체에 대한 포인터 배열입니다. 배열 크기는 EventCount 필드에 의해 결정됩니다. 작업자 스레드는 WaitType 사양에 따라 이러한 이벤트를 기다립니다.

비고

이 구조는 작업자 스레드가 커널 개체를 기다리는 방법을 구성하고 대기가 완료될 때 호출될 콜백 루틴을 정의합니다.

이 구조는 드라이버 핫 스왑 작업 중에 안전하게 종료하고 다시 만들 수 있는 핫 스왑 가능한 작업자 스레드를 구성하는 데 사용됩니다. 구조체는 기본 커널 대기 작업에 필요한 모든 매개 변수를 제공합니다.

이 구조로 만든 작업자 스레드는 지정된 이벤트를 반복적으로 대기하고 대기가 완료될 때마다 WorkerRoutine 콜백을 호출합니다. 그런 다음 콜백은 스레드가 계속 실행되어야 하는지 또는 종료해야 하는지를 결정할 수 있습니다.

작업자 스레드의 핫 스왑 가능 특성은 드라이버 업데이트 작업의 일부로 안전하게 중지 및 다시 시작할 수 있으므로 런타임 드라이버 교체 중에 시스템 안정성을 유지할 수 있습니다.

요구 사항

요구 사항 가치
Header wdm.h

참고하십시오

IoDriverProxyCreateHotSwappableWorkerThread

DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE

KEVENT