Delen via


IoConnectInterruptEx gebruiken vóór Windows Vista

Een stuurprogramma voor Windows 2000, Windows XP of Windows Server 2003 kan een koppeling maken naar de Iointex.lib-bibliotheek om IoConnectInterruptEx- te gebruiken op deze versies van het besturingssysteem.

Als u IoConnectInterruptEx wilt gebruiken in een dergelijk stuurprogramma, moet u Iointex.h opnemen in de broncode voor uw stuurprogramma, direct na Wdm.h of Ntddk.h. De Iointex.h-header declareert een prototype voor de routine. Wanneer u uw stuurprogramma bouwt, moet u ervoor zorgen dat het statisch is gekoppeld aan Iointex.lib.

Voor besturingssystemen vóór Windows Vista ondersteunt de versie van IoConnectInterruptEx geleverd door Iointex.lib alleen de CONNECT_FULLY_SPECIFIED versie van de routine. Als er een andere versie is opgegeven, retourneert de routine een NTSTATUS-foutcode en wordt Parameters->versie ingesteld op CONNECT_FULLY_SPECIFIED.

Met dit gedrag kunt u uw stuurprogramma schrijven zodat deze gebruikmaakt van CONNECT_LINE_BASED of CONNECT_MESSAGE_BASED op Windows Vista en CONNECT_FULLY_SPECIFIED op eerdere besturingssystemen. Roep eerst IoConnectInterruptEx aan met Parameters->Versie gelijk aan CONNECT_LINE_BASED of CONNECT_MESSAGE_BASED. Als de retourwaarde een foutcode is en Parameters->versie != CONNECT_FULLY_SPECIFIED, voert u de bewerking opnieuw uit met Parameters->versie ingesteld op CONNECT_FULLY_SPECIFIED.

In het volgende codevoorbeeld ziet u de techniek:

IO_CONNECT_INTERRUPT_PARAMETERS params;

// deviceExtension is a pointer to the driver's device extension. 
//     deviceExtension->MessageUsed is a BOOLEAN.

RtlZeroMemory( &params, sizeof(IO_CONNECT_INTERRUPT_PARAMETERS) );
params.Version = CONNECT_MESSAGE_BASED;

// Set members of params.MessageBased here.

status = IoConnectInterruptEx(&params);

if ( NT_SUCCESS(status) ) {
    // Operation succeeded. We are running on Windows Vista.
    devExt->MessageUsed = TRUE; // We save this for posterity.
} else {
    // Check to see if we are running on an operating system prior to Windows Vista.
    if (params.Version == CONNECT_FULLY_SPECIFIED) {
        devExt->MessageUsed = FALSE;  // We're not using message-signaled interrupts.
 
        // Set members of params.FullySpecified here.
 
        status = IoConnectInterruptEx(&params);
    } else {
        // Other error.
    }
}