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;
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 纳秒为单位的绝对或相对时间,等待完成。
正值指定相对于 1601 年 1 月 1 日绝对时间。 负值指定相对于当前时间的间隔。 绝对过期时间跟踪系统时间中的任何更改;相对过期时间不受系统时间更改的影响。
如果 *Timeout = 0,则例程返回而不等待。 如果调用方提供 NULL 指针,则例程将无限期等待,直到任何或所有调度程序对象都设置为信号状态。
EventCount
Events 数组中的事件数。 此值确定工作线程将等待的内核对象数。
Events[ANYSIZE_ARRAY]
指向工作线程将等待的 KEVENT 对象的指针数组。 数组大小由 EventCount 字段确定。 工作线程将根据 WaitType 规范等待这些事件。
注解
此结构配置工作线程如何等待内核对象,并定义在等待完成时将调用的回调例程。
此结构用于配置可在驱动程序热交换作期间安全终止和重新创建的热交换工作线程。 该结构为基础内核等待作提供所有必要的参数。
使用此结构创建的辅助线程将重复等待指定的事件,并在每次等待完成时调用 WorkerRoutine 回调。 然后,回调可以决定线程是否应继续运行或终止。
工作线程的热交换性质意味着它可以作为驱动程序更新作的一部分安全地停止和重启,从而在运行时驱动程序更换期间保持系统稳定性。
要求
| Requirement | 价值 | 
|---|---|
| Header | wdm.h | 
另请参阅
IoDriverProxyCreateHotSwappableWorkerThread