Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Um driver para Windows 2000, Windows XP ou Windows Server 2003 pode se vincular à biblioteca Iointex.lib para usar IoConnectInterruptEx nessas versões do sistema operacional.
Para usar IoConnectInterruptEx em tal driver, inclua Iointex.h no código-fonte do seu driver, imediatamente após Wdm.h ou Ntddk.h. O cabeçalho Iointex.h declara um protótipo para a rotina. Quando você construir seu driver, certifique-se de que ele está estaticamente ligado ao Iointex.lib.
Para sistemas operacionais anteriores ao Windows Vista, a versão do IoConnectInterruptEx fornecida pelo Iointex.lib suporta apenas a versão CONNECT_FULLY_SPECIFIED da rotina. Se qualquer outra versão for especificada, a rotina retornará um código de erro NTSTATUS e definirá Parameters-Version> como CONNECT_FULLY_SPECIFIED.
Usando esse comportamento, você pode escrever seu driver para que ele usa CONNECT_LINE_BASED ou CONNECT_MESSAGE_BASED no Windows Vista e CONNECT_FULLY_SPECIFIED em sistemas operacionais anteriores. Comece por chamar IoConnectInterruptEx com os Parameters->Version igual a CONNECT_LINE_BASED ou CONNECT_MESSAGE_BASED. Se o valor de retorno for um código de erro e Parameters->Version != CONNECT_FULLY_SPECIFIED, então tente novamente a operação com Parameters->Version definido como CONNECT_FULLY_SPECIFIED.
O exemplo de código a seguir ilustra a técnica:
IO_CONNECT_INTERRUPT_PARAMETERS params;
// deviceExtension is a pointer to the driver's device extension.
// deviceExtension->MessageUsed is a BOOLEAN.
RtlZeroMemory( ¶ms, sizeof(IO_CONNECT_INTERRUPT_PARAMETERS) );
params.Version = CONNECT_MESSAGE_BASED;
// Set members of params.MessageBased here.
status = IoConnectInterruptEx(¶ms);
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(¶ms);
} else {
// Other error.
}
}