Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Note NDIS 5. x has been deprecated and is superseded by NDIS 6. x. For new NDIS driver development, see Network Drivers Starting with Windows Vista. For information about porting NDIS 5. x drivers to NDIS 6. x, see Porting NDIS 5.x Drivers to NDIS 6.0.
NDIS-WDM miniport drivers built for Windows 98/Me platforms must indicate received packets, complete packet transmissions, indicate status, and complete requests in the context of NDIS-timer threads or NDIS-called functions. Typically, the NDIS-WDM miniport driver is notified about these operations through the driver's WDM lower interface. The NDIS-WDM miniport driver must queue such an operation, start another thread using an NDIS timer object with a time-out set to zero, and complete the operation in the new thread.
The following code snippet shows how to queue a packet that is received and then indicate this packet up the stack using an NDIS timer object:
// Code for queuing packet
// Acquire spin lock to Adapter structure.
// Queue NDIS_PACKET for the packet to the tail of the list of
// pending receives.
if (Adapter->IndicatingReceives == FALSE) {
Adapter->IndicatingReceives = TRUE;
NdisSetTimer(&Adapter->IndicateTimer, 0); // Start timer thread.
}
// Release spin lock;
// Code for timer thread (&Adapter->IndicateTimer function)
// Acquire spin lock to Adapter structure.
while (/* pending receive queue is not empty */) {
// Dequeue NDIS_PACKET from pending receive queue.
// Release spin lock.
Status = NDIS_GET_PACKET_STATUS(pNdisPacket);
NdisMIndicateReceivePacket(
MiniportAdapterHandle,
pNdisPacket,
NumberOfPackets);
if (Status == NDIS_STATUS_RESOURCES) {
// Call own MiniportReturnPacket handler with the packet.
}
// Reacquire spin lock to Adapter structure.
}
Adapter->IndicatingReceives = FALSE;
// Release spin lock.