Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Структура 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