Porting Interrupt Registration to NDIS 6.0

NDIS 6.0 drivers do not call the NdisMRegisterInterrupt function. Instead, NDIS 6.0 drivers call the NdisMRegisterInterruptEx function and pass it a pointer to the NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS structure.

In NDIS 5.x, the miniport driver defines interrupt-related function entry points in the NDIS_MINIPORT_CHARACTERISTICS structure. NDIS 6.0 drivers define the entry points for these functions in the NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS structure.

An NDIS 6.0 miniport driver supplies the following interrupt-related functions.

MiniportInterrupt

MiniportInterruptDpc

MiniportDisableInterruptEx

MiniportEnableInterruptEx

The following code example shows how a miniport driver can initialize this structure.

        NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS Interrupt;
        RtlZeroMemory(&Interrupt, sizeof(Interrupt));

        Interrupt.Header.Type = NDIS_OBJECT_TYPE_MINIPORT_INTERRUPT;
        Interrupt.Header.Revision = NDIS_MINIPORT_INTERRUPT_REVISION_1;
        Interrupt.Header.Size = sizeof(NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS);

        Interrupt.InterruptHandler = MiniportInterrupt;
        Interrupt.InterruptDpcHandler = MiniportInterruptDpc;
        Interrupt.DisableInterruptHandler = MiniportDisableInterruptEx;
        Interrupt.EnableInterruptHandler = MiniportEnableInterruptEx;
        
        Status = NdisMRegisterInterruptEx(Adapter->AdapterHandle,
                                          Adapter,
                                          &Interrupt,
                                          &Adapter->NdisInterruptHandle );

The miniport driver passes a handle to NdisMRegisterInterruptEx in the MiniportInterruptContext member of the NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS structure. NDIS passes this handle to the driver's interrupt-related functions.

To deregister an interrupt, a miniport driver calls the NdisMDeregisterInterruptEx function instead of the NdisMDeregisterInterrupt function.

For more information about registering interrupts, see Registering and Deregistering Interrupts.