Partager via


NdisScheduleWorkItem, fonction (ndis.h)

Remarque NDIS 5. x a été déconseillé 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. pilotes x 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 fourni à NdisInitializeWorkItem.

Syntaxe

NDIS_STATUS NdisScheduleWorkItem(
  [in] __drv_aliasesMem PNDIS_WORK_ITEM WorkItem
);

Paramètres

[in] WorkItem

Pointeur vers l’élément de travail configuré par un appel précédent à NdisInitializeWorkItem.

Valeur de retour

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 pourrait ou doit être effectuée à un irQL inférieur au runtime d’intégration déclenché auquel il s’exécute actuellement sur 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 alloué par le pilote pour WorkItem. Par exemple, si le pilote 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 si elle contient déjà un objet de synchronisation et peut tenter d’acquérir une autre. Par exemple, un pilote NDIS doit libérer les verrous de rotation actuellement conservés, 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, mutexes, variables de ressource, 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 de thread de travail synchrone empêche les blocages.

Un pilote miniport sérialisé ne doit jamais tenter de mettre en file d’attente une routine de rappel de thread de travail, car il n’existe aucun moyen pour un tel pilote de synchroniser l’accès à sa ou ses zones de contexte de carte réseau avec un rappel de thread de travail. Par conséquent, un 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 de blocages système intermittents.

  • Plateforme cible : universelle
  • Version : non pris en charge pour les pilotes NDIS 6.0 dans Windows Vista. Utilisez NdisQueueIoWorkItemà la place. Pris en charge pour les pilotes NDIS 5.1 dans Windows Vista et Windows XP.

Exigences

Exigence Valeur
d’en-tête ndis.h (include Ndis.h)
IRQL IRQL <= DISPATCH_LEVEL

Voir aussi