структура DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT (wdm.h)

Структура DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT содержит параметры, необходимые для запуска потока рабочей роли с горячей заменой с помощью IoDriverProxyCreateHotSwappableWorkerThread.

Синтаксис

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;

Members

WorkerRoutine

Указатель на функцию обратного вызова DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE , которая будет вызываться при пробуждении рабочего потока от ожидания указанных событий.

Context

Указатель на сведения о контексте, определяемые драйвером, которые будут переданы обратному вызову WorkerRoutine . Это позволяет драйверу предоставлять дополнительные данные, необходимые подпрограмме рабочей роли.

WaitType

Тип выполняемой операции ожидания. Укажите значение WaitAll, указывающее, что все указанные объекты должны достичь сигнального состояния перед выполнением ожидания; или WaitAny, указывающий, что любой из объектов должен достичь сигнального состояния перед выполнением ожидания.

WaitReason

Причина ожидания. Драйверы должны задать это значение в качестве исполнительного или, если драйвер выполняет работу от имени пользователя и выполняется в контексте потока пользователя, значение UserRequest.

WaitMode

Ожидает ли вызывающий объект в KernelMode или UserMode. Драйверы промежуточного и низкого уровня должны указывать KernelMode. Если набор объектов, ожидающий включения мьютекса, вызывающий объект должен указать KernelMode.

Altertable

Логическое значение, указывающее, может ли поток быть оповещен во время ожидания.

HasTimeout

Логическое значение, указывающее, задано ли значение времени ожидания. Если значение TRUE, поле timeout содержит допустимое значение времени ожидания. Если значение FALSE, операция ожидания будет ждать неограниченное время.

Timeout

Указатель на значение времени ожидания, указывающее абсолютное или относительное время в 100-наносекундах единиц, в которых ожидается завершение ожидания.

Положительное значение указывает абсолютное время относительно 1 января 1601 года. Отрицательное значение указывает интервал относительно текущего времени. Абсолютное время истечения срока действия отслеживает любые изменения в системном времени; относительные сроки действия не влияют на изменения системного времени.

Если *Timeout = 0, подпрограмма возвращается без ожидания. Если вызывающий объект предоставляет указатель NULL, подпрограмма ожидает неограниченное время до тех пор, пока все объекты диспетчера не будут заданы в сигнальном состоянии.

EventCount

Количество событий в массиве событий . Это значение определяет, сколько объектов ядра рабочий поток будет ожидать.

Events[ANYSIZE_ARRAY]

Массив указателей на объекты KEVENT , которые рабочий поток ожидает. Размер массива определяется полем EventCount . Рабочий поток будет ожидать этих событий в соответствии со спецификацией WaitType .

Замечания

Эта структура настраивает, как рабочий поток будет ожидать объектов ядра и определяет подпрограмму обратного вызова, которая будет вызываться после завершения ожидания.

Эта структура используется для настройки потока рабочей роли с горячей заменой, который можно безопасно завершить и воссоздать во время операций горячего переключения драйверов. Структура предоставляет все необходимые параметры для базовых операций ожидания ядра.

Рабочий поток, созданный с помощью этой структуры, будет многократно ждать указанных событий и вызывать обратный вызов WorkerRoutine при каждом завершении ожидания. Обратный вызов может решить, должен ли поток продолжать работу или завершить работу.

Горячая замена рабочего потока означает, что его можно безопасно остановить и перезапустить в рамках операций обновления драйверов, сохраняя стабильность системы во время замены драйвера среды выполнения.

Требования

Требование Ценность
Header wdm.h

См. также

IoDriverProxyCreateHotSwappableWorkerThread

DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE

KEVENT