Condividi tramite


Funzione NdisScheduleWorkItem (ndis.h)

Nota NDIS 5. x è stato deprecato e sostituito da NDIS 6. x. Per i nuovi driver NDIS, vedere Driver di rete a partire da Windows Vista. Per informazioni sulla conversione di NDIS 5. driver x a NDIS 6. x, vedere Porting NDIS 5.x Drivers to NDIS 6.0.

NdisScheduleWorkItem inserisce un determinato elemento di lavoro in una coda da cui un thread di lavoro di sistema rimuove l'elemento e assegna il controllo alla funzione di callback fornita in precedenza dal driver a NdisInitializeWorkItem.

Sintassi

NDIS_STATUS NdisScheduleWorkItem(
  [in] __drv_aliasesMem PNDIS_WORK_ITEM WorkItem
);

Parametri

[in] WorkItem

Puntatore all'elemento di lavoro configurato da una chiamata precedente a NdisInitializeWorkItem.

Valore restituito

NdisScheduleWorkItem ha sempre esito positivo e pertanto restituisce sempre NDIS_STATUS_SUCCESS.

Osservazioni

Una chiamata a NdisScheduleWorkItem consente a un driver NDIS di rinviare un'operazione determinata dal driver che potrebbe o deve essere eseguita in un IRQL inferiore rispetto all'IRQL generato in cui è attualmente in esecuzione nella funzione di callback del thread di lavoro.

Il callback del driver viene eseguito all'interno di un contesto del thread di sistema in IRQL = PASSIVE_LEVEL versioni successive. Questa funzione fornita dal chiamante è responsabile del recupero dello spazio di archiviazione allocato dal driver per WorkItem. Ad esempio, se il driver denominato NdisAllocateMemoryWithTag per fornire un'area di contesto a NdisInitializeWorkItem, la funzione di callback deve effettuare la chiamata reciproca a NdisFreeMemory con WorkItem prima di restituire il controllo.

Un driver non deve attendere che la routine di callback completi un'operazione se contiene già un oggetto di sincronizzazione e potrebbe tentare di acquisire un altro. Ad esempio, un driver NDIS deve rilasciare eventuali blocchi spin attualmente mantenuti e così via prima di chiamare NdisScheduleWorkItem. Un driver di protocollo NDIS di livello più alto deve anche rilasciare eventuali semafori, mutex, variabili di risorsa e così via prima di chiamare NdisScheduleWorkItem. Il rilascio di tutte le risorse di sincronizzazione prima di accodare un'operazione di thread di lavoro sincrono impedisce i deadlock.

Un driver miniport serializzato non deve mai tentare di accodare una routine di callback del thread di lavoro, perché non esiste alcun modo per consentire a tale driver di sincronizzare l'accesso alle aree di contesto della scheda di interfaccia di rete con un callback del thread di lavoro. Di conseguenza, tale driver NDIS serializzato non può condividere nulla nell'area di contesto per adattatore con una funzione di callback del thread di lavoro senza causare arresti anomali intermittenti del sistema.

  • Piattaforma di destinazione: universal
  • Versione: non supportata per i driver NDIS 6.0 in Windows Vista. In alternativa, usare NdisQueueIoWorkItem. Supportato per i driver NDIS 5.1 in Windows Vista e Windows XP.

Fabbisogno

Requisito Valore
intestazione ndis.h (include Ndis.h)
IRQL IRQL <= DISPATCH_LEVEL

Vedere anche