NdisScheduleWorkItem, fonction (ndis.h)
Note NDIS 5. x a été déprécié et est remplacé par NDIS 6. x. Pour le développement de nouveaux pilotes NDIS, consultez Pilotes réseau à partir de Windows Vista. Pour plus d’informations sur le portage de NDIS 5. x pilotes vers NDIS 6. x, consultez Portage des pilotes NDIS 5.x vers NDIS 6.0.
NdisScheduleWorkItem insère un élément de travail donné dans une file d’attente à partir de laquelle un thread de travail système supprime l’élément et donne le contrôle à la fonction de rappel que le pilote a précédemment fournie à NdisInitializeWorkItem.
Syntaxe
NDIS_STATUS NdisScheduleWorkItem(
[in] __drv_aliasesMem PNDIS_WORK_ITEM WorkItem
);
Paramètres
[in] WorkItem
Pointeur vers l’élément de travail qui a été configuré par un appel précédent à NdisInitializeWorkItem.
Valeur retournée
NdisScheduleWorkItem réussit toujours et retourne donc toujours NDIS_STATUS_SUCCESS.
Remarques
Un appel à NdisScheduleWorkItem permet à un pilote NDIS de différer une opération déterminée par le pilote qui peut ou doit être effectuée à un IRQL inférieur à l’IRQL élevé auquel il s’exécute actuellement vers sa fonction de rappel de thread de travail.
Le rappel du pilote est exécuté dans un contexte de thread système à IRQL = PASSIVE_LEVEL ultérieurement. Cette fonction fournie par l’appelant est chargée de récupérer le stockage que le pilote a alloué pour WorkItem. Par exemple, si le pilote a appelé NdisAllocateMemoryWithTag pour fournir une zone de contexte à NdisInitializeWorkItem, sa fonction de rappel doit effectuer l’appel réciproque à NdisFreeMemory avec WorkItem avant de retourner le contrôle.
Un pilote ne doit pas attendre que sa routine de rappel termine une opération s’il contient déjà un objet de synchronisation et peut tenter d’en acquérir un autre. Par exemple, un pilote NDIS doit libérer tous les verrous de rotation actuellement détenus, et ainsi de suite avant d’appeler NdisScheduleWorkItem. Un pilote de protocole NDIS de niveau supérieur doit également libérer tous les sémaphores, mutex, variables de ressources, etc. avant d’appeler NdisScheduleWorkItem. La libération de toutes les ressources de synchronisation avant la mise en file d’attente d’une opération worker-thread synchrone empêche les interblocages.
Un pilote miniport sérialisé ne doit jamais tenter de mettre en file d’attente une routine de rappel worker-thread, car il n’existe aucun moyen pour un tel pilote de synchroniser l’accès à ses zones de contexte de carte réseau avec un rappel de thread de travail. Par conséquent, un tel pilote NDIS sérialisé ne peut pas partager quoi que ce soit dans sa zone de contexte par adaptateur avec une fonction de rappel de thread de travail sans provoquer d’incidents système intermittents.
- Plateforme cible : Universelle
- Version : non pris en charge pour les pilotes NDIS 6.0 dans Windows Vista. Utilisez plutôt NdisQueueIoWorkItem. Pris en charge pour les pilotes NDIS 5.1 dans Windows Vista et Windows XP.
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | ndis.h (inclure Ndis.h) |
IRQL | IRQL <= DISPATCH_LEVEL |