estrutura IO_CONNECT_INTERRUPT_PARAMETERS (wdm.h)
A estrutura IO_CONNECT_INTERRUPT_PARAMETERS contém os parâmetros que um driver fornece à rotina IoConnectInterruptEx para registrar uma ISR (rotina de serviço de interrupção).
Sintaxe
typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS {
ULONG Version;
union {
IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified;
IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased;
IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased;
};
} IO_CONNECT_INTERRUPT_PARAMETERS, *PIO_CONNECT_INTERRUPT_PARAMETERS;
Membros
Version
Na entrada, especifica a operação específica a ser executada por IoConnectInterruptEx, da seguinte maneira.
Valor de versão | Operação IoConnectInterruptEx |
---|---|
CONNECT_FULLY_SPECIFIED | Conecta-se a uma interrupção específica usando informações fornecidas pelo gerenciador de Plug and Play (PnP). Use o membro FullySpecified para fornecer os parâmetros adicionais da operação. |
CONNECT_LINE_BASED | Registra uma rotina InterruptService para as interrupções baseadas em linha do dispositivo. Use o membro LineBased para fornecer os parâmetros adicionais da operação. |
CONNECT_MESSAGE_BASED | Registra uma rotina InterruptMessageService para as interrupções sinalizadas por mensagem do dispositivo. O chamador também poderá especificar uma rotina interruptservice de fallback se o dispositivo tiver apenas interrupções baseadas em linha. Use o membro MessageBased para fornecer os parâmetros adicionais da operação. |
No retorno, a rotina fornece informações sobre a operação, da seguinte maneira.
Valor de versão | Descrição |
---|---|
CONNECT_FULLY_SPECIFIED | O chamador especificou CONNECT_LINE_BASED ou CONNECT_MESSAGE_BASED para Versão em uma plataforma que não dá suporte a ela. Repita a operação usando CONNECT_FULLY_SPECIFIED. |
CONNECT_LINE_BASED | O chamador especificou CONNECT_MESSAGE_BASED e a rotina InterruptService de fallback do chamador foi registrada. |
CONNECT_MESSAGE_BASED | O chamador especificou CONNECT_MESSAGE_BASED e a rotina InterruptMessageService do chamador foi registrada. |
FullySpecified
Especifica os parâmetros adicionais da operação a serem executados por IoConnectInterruptEx quando Version tiver um valor de CONNECT_FULLY_SPECIFIED (ou CONNECT_FULLY_SPECIFIED_GROUP se o membro group for usado). Para obter mais informações, consulte Using the CONNECT_FULLY_SPECIFIED Version of IoConnectInterruptEx.
PhysicalDeviceObject
Um ponteiro para o PDO para o dispositivo.
InterruptObject
Um ponteiro para um local que recebe um ponteiro para o conjunto de objetos de interrupção do dispositivo.
ServiceRoutine
Um ponteiro para a rotina InterruptService a ser registrada como o ISR para as interrupções do dispositivo.
ServiceContext
Especifica o valor a ser passado como o parâmetro ServiceContext da rotina InterruptService .
SpinLock
Um ponteiro para um bloqueio de rotação para servir como o bloqueio de rotação de interrupção para o conjunto de interrupções ou NULL. Se NULL, o sistema alocará um bloqueio de rotação para servir como o bloqueio de rotação de interrupção. Se não for NULL, você deverá ter inicializado o bloqueio de rotação com KeInitializeSpinLock.
SynchronizeIrql
Especifica o DIRQL no qual o ISR será executado. Se o ISR manipular mais de um vetor de interrupção ou o driver tiver mais de um ISR, esse valor deverá ser o IRQL máximo do conjunto de interrupções. O IRQL para uma interrupção é passado no recurso CmResourceTypeInterrupt no membro u.Interrupt.Level de CM_PARTIAL_RESOURCE_DESCRIPTOR. Caso contrário, os valores Irql e SynchronizeIrql são idênticos.
FloatingSave
Especifica se o sistema salva o estado de ponto flutuante do processador quando a interrupção ocorre. Se TRUE, o sistema salvará o estado de ponto flutuante.
ShareVector
Especifica se o vetor de interrupção é fragmentável. As interrupções de PCI baseadas em linha devem ser fragmentáveis. Para interrupções de PCI sinalizadas por mensagem, os gravadores de driver podem escolher se suas interrupções são fragmentáveis, mas devem optar por torná-las fragmentáveis por padrão.
Vetor
Especifica o vetor de interrupção passado no recurso CmResourceTypeInterrupt no membro u.Interrupt.Vector de CM_PARTIAL_RESOURCE_DESCRIPTOR.
Irql
Especifica o DIRQL passado no recurso CmResourceTypeInterrupt no membro u.Interrupt.Level de CM_PARTIAL_RESOURCE_DESCRIPTOR. Começando com Windows 8, um driver pode registrar um ISR que é executado no nível passivo definindo Irql e SynchronizeIrql como PASSIVE_LEVEL e definindo SpinLock como NULL. Para obter mais informações, consulte Usando Passive-Level rotinas de serviço de interrupção.
InterruptMode
Especifica um KINTERRUPT_MODE que determina se a interrupção é disparada em nível (InterruptMode = LevelSensitive) ou disparada por borda (InterruptMode = Latched). Para linhas de interrupção compartilhadas de um barramento PCI, especifique LevelSensitive. Para interrupções sinalizadas por mensagem PCI, especifique Travado.
ProcessorEnableMask
Especifica a máscara KAFFINITY que representa o conjunto de processadores nos quais as interrupções do dispositivo podem ocorrer. Esse valor é passado no recurso CmResourceTypeInterrupt no membro u.Interrupt.Affinity de CM_PARTIAL_RESOURCE_DESCRIPTOR.
Grupo
Especifica um número de grupo que identifica o grupo de processadores ao qual a interrupção deve ser entregue. Normalmente, um driver recebe seu número de grupo como parte dos recursos traduzidos incluídos em uma solicitação de IRP_MN_START_DEVICE . A partir do Windows 7, o membro Group será usado se o membro Version da estrutura IO_CONNECT_INTERRUPT_PARAMETERS estiver definido como CONNECT_FULLY_SPECIFIED_GROUP. O membro Group será ignorado se Version estiver definido como CONNECT_FULLY_SPECIFIED, nesse caso, o número do grupo para entrega da interrupção é sempre 0.
LineBased
Especifica os parâmetros adicionais da operação a serem executados por IoConnectInterruptEx quando Version tiver um valor de CONNECT_LINE_BASED. Para obter mais informações, consulte Usando a versão CONNECT_LINE_BASED de IoConnectInterruptEx.
PhysicalDeviceObject
Um ponteiro para o PDO (objeto de dispositivo físico) do dispositivo.
InterruptObject
Um ponteiro para um local que recebe um ponteiro para o conjunto de objetos de interrupção do dispositivo.
ServiceRoutine
Um ponteiro para a rotina InterruptService a ser registrada como o ISR para as interrupções do dispositivo.
ServiceContext
Especifica o valor a ser passado como o parâmetro ServiceContext da rotina InterruptService .
SpinLock
Um ponteiro para um bloqueio de rotação para servir como o bloqueio de rotação de interrupção para o conjunto de interrupções ou NULL. Se NULL, o sistema alocará um bloqueio de rotação para servir como o bloqueio de rotação de interrupção. Se não for NULL, você deverá ter inicializado o bloqueio de rotação com KeInitializeSpinLock.
SynchronizeIrql
Especifica o DIRQL (dispositivo mínimo) no qual o ISR é executado. O sistema usará esse valor somente se for maior que o IRQL máximo do conjunto de interrupções; caso contrário, o sistema usa o IRQL máximo. Os drivers quase sempre especificam PASSIVE_LEVEL para SynchronizeIrql. (Um driver deve especificar um valor diferente de PASSIVE_LEVEL somente se o ISR precisar ser executado acima de um determinado IRQL.) Começando com Windows 8, um conjunto de recursos de interrupção baseados em linha atribuídos a um dispositivo pode compartilhar um ISR executado em IRQL = PASSIVE_LEVEL. Se SynchronizeIrql = PASSIVE_LEVEL e o IRQL máximo desse conjunto de interrupções for PASSIVE_LEVEL, a rotina InterruptService será chamada em PASSIVE_LEVEL. Para obter mais informações, consulte Usando Passive-Level rotinas de serviço de interrupção.
FloatingSave
Especifica se o sistema salva o estado de ponto flutuante do processador quando a interrupção ocorre. Se TRUE, o sistema salvará o estado de ponto flutuante. Para plataformas baseadas em x86 e itanium, esse valor deve ser definido como FALSE. Para obter mais informações sobre como salvar o ponto flutuante e o estado MMX, consulte Usando Ponto Flutuante ou MMX em um Driver WDM.
MessageBased
Especifica os parâmetros adicionais da operação a serem executados por IoConnectInterruptEx quando Version tiver um valor de CONNECT_MESSAGE_BASED. Para obter mais informações, consulte Using the CONNECT_MESSAGE_BASED Version of IoConnectInterruptEx.
PhysicalDeviceObject
Um ponteiro para o PDO do dispositivo.
Connectioncontext
Um ponteiro para um local que recebe um ponteiro para o contexto de conexão. Se a Versão no retorno tiver um valor de CONNECT_LINE_BASED, a rotina fornecerá um ponteiro para uma estrutura KINTERRUPT . Se a Versão no retorno tiver um valor de CONNECT_MESSAGE_BASED, a rotina fornecerá um ponteiro para uma estrutura de IO_INTERRUPT_MESSAGE_INFO .
Para minimizar a conversão, ConnectionContext é definido como uma união. Use ConnectionContext.Generic para tratar o local como um PVOID. Use ConnectionContext.InterruptObject e ConnectionContext.InterruptMessageTable para tratar o local como uma variável PKINTERRUPT ou PIO_INTERRUPT_MESSAGE_INFO respectivamente.
Genérico
Um ponteiro para uma variável PVOID na qual a rotina IoConnectInterruptEx grava um ponteiro no contexto de conexão.
InterruptMessageTable
Um ponteiro para uma variável PIO_INTERRUPT_MESSAGE_INFO na qual a rotina IoConnectInterruptEx grava um ponteiro no contexto de conexão.
InterruptObject
Um ponteiro para uma variável PKINTERRUPT na qual a rotina IoConnectInterruptEx grava um ponteiro no contexto de conexão.
MessageServiceRoutine
Um ponteiro para a rotina InterruptMessageService a ser registrada como ISR para as interrupções do dispositivo.
ServiceContext
Especifica o valor a ser passado como o parâmetro ServiceContext da rotina InterruptMessageService ou InterruptService para a interrupção.
SpinLock
Um ponteiro para um bloqueio de rotação para servir como o bloqueio de rotação de interrupção para o conjunto de interrupções ou NULL. Se NULL, o sistema alocará um bloqueio de rotação para servir como o bloqueio de rotação de interrupção. Se não for NULL, você deverá ter inicializado o bloqueio de rotação com KeInitializeSpinLock.
SynchronizeIrql
Especifica o DIRQL (dispositivo mínimo) no qual o ISR é executado. O sistema só usará esse valor se for maior que o IRQL máximo do conjunto de interrupções; caso contrário, o sistema usa o IRQL máximo. Os drivers quase sempre especificam PASSIVE_LEVEL para SynchronizeIrql.
FloatingSave
Especifica se o sistema salva o estado de ponto flutuante do processador quando a interrupção ocorre. Se TRUE, o sistema salvará o estado de ponto flutuante.
FallBackServiceRoutine
Um ponteiro para uma rotina InterruptService a ser usada como o ISR para interrupções baseadas em linha. Se o dispositivo não tiver interrupções sinalizadas por mensagem, mas tiver interrupções baseadas em linha, o sistema registrará essa rotina para lidar com as interrupções baseadas em linha.
Comentários
A rotina IoConnectInterruptEx usa um único parâmetro Parameters , que aponta para uma estrutura IO_CONNECT_INTERRUPT_PARAMETERS que contém todos os parâmetros da operação.
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |