Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La structure DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT contient les paramètres nécessaires pour démarrer un thread worker permutable à chaud à l’aide d’IoDriverProxyCreateHotSwappableWorkerThread.
Syntaxe
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
Pointeur vers une fonction de rappel DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE qui sera appelée lorsque le thread de travail se réveille d’attendre les événements spécifiés.
Context
Pointeur vers les informations de contexte définies par le pilote qui seront transmises au rappel WorkerRoutine . Cela permet au pilote de fournir des données supplémentaires nécessaires à la routine de travail.
WaitType
Type d’opération d’attente à effectuer. Spécifiez waitAll, indiquant que tous les objets spécifiés doivent atteindre un état signalé avant que l’attente soit satisfaite ; ou WaitAny, indiquant que l’un des objets doit atteindre un état signalé avant que l’attente soit satisfaite.
WaitReason
Raison de l’attente. Les pilotes doivent définir cette valeur sur Executive ou, si le pilote effectue un travail au nom d’un utilisateur et s’exécute dans le contexte d’un thread d’utilisateur, sur UserRequest.
WaitMode
Indique si l’appelant attend dans KernelMode ou UserMode. Les pilotes intermédiaires et de niveau le plus bas doivent spécifier KernelMode. Si l’ensemble d’objets attendus inclut un mutex, l’appelant doit spécifier KernelMode.
Altertable
Valeur booléenne qui indique si le thread peut être alerté pendant qu’il est dans l’état d’attente.
HasTimeout
Valeur booléenne qui indique si une valeur de délai d’attente est spécifiée. Si la valeur est TRUE, le champ Timeout contient une valeur de délai d’expiration valide. Si la valeur est FALSE, l’opération d’attente attend indéfiniment.
Timeout
Pointeur vers une valeur de délai d’attente qui spécifie le temps absolu ou relatif, en unités de 100 nanosecondes, à laquelle l’attente doit être terminée.
Une valeur positive spécifie une heure absolue, par rapport au 1er janvier 1601. Une valeur négative spécifie un intervalle par rapport à l’heure actuelle. Les heures d’expiration absolues suivent les modifications apportées à l’heure système ; les heures d’expiration relatives ne sont pas affectées par les modifications de temps système.
Si *Délai d’attente = 0, la routine est retournée sans attendre. Si l’appelant fournit un pointeur NULL, la routine attend indéfiniment jusqu’à ce que tous les objets de répartiteur soient définis sur l’état signalé.
EventCount
Nombre d’événements dans le tableau Événements . Cette valeur détermine le nombre d’objets noyau qui attendront le thread de travail.
Events[ANYSIZE_ARRAY]
Tableau de pointeurs vers les objets KEVENT que le thread de travail attend. La taille du tableau est déterminée par le champ EventCount . Le thread de travail attend ces événements en fonction de la spécification WaitType .
Remarques
Cette structure configure la façon dont le thread de travail attend les objets noyau et définit la routine de rappel qui sera appelée une fois l’attente terminée.
Cette structure est utilisée pour configurer un thread de travail permutable à chaud qui peut être arrêté et recréé en toute sécurité pendant les opérations d’échange à chaud du pilote. La structure fournit tous les paramètres nécessaires pour les opérations d’attente du noyau sous-jacentes.
Le thread de travail créé avec cette structure attend à plusieurs reprises les événements spécifiés et appelle le rappel WorkerRoutine chaque fois que l’attente est terminée. Le rappel peut ensuite décider si le thread doit continuer à s’exécuter ou à se terminer.
La nature permutable à chaud du thread de travail signifie qu’elle peut être arrêtée et redémarrée en toute sécurité dans le cadre des opérations de mise à jour du pilote, en conservant la stabilité du système pendant les remplacements du pilote d’exécution.
Spécifications
| Requirement | Valeur |
|---|---|
| Header | wdm.h |
Voir aussi
IoDriverProxyCreateHotSwappableWorkerThread