Compartilhar via


estrutura IO_CONNECT_INTERRUPT_PARAMETERS (wdm.h)

A estrutura IO_CONNECT_INTERRUPT_PARAMETERS contém os parâmetros fornecidos por um driver à 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 pelo IoConnectInterruptEx, da seguinte maneira.

Valor da versão Operação IoConnectInterruptEx
CONNECT_FULLY_SPECIFIED Conecta-se a uma interrupção específica usando as informações fornecidas pelo gerenciador do Plug and Play (PnP). Use o membro de totalmente específico para fornecer os parâmetros adicionais da operação.
CONNECT_LINE_BASED Registra uma rotina InterruptService para 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 pode especificar um fallback rotina de InterruptService 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 da 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 especificado CONNECT_MESSAGE_BASED e o fallback do chamador rotina de InterruptService foi registrado.
CONNECT_MESSAGE_BASED O chamador especificado CONNECT_MESSAGE_BASED e a rotina de InterruptMessageService do chamador foram registradas.

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 do Grupo for usado). Para obter mais informações, consulte Usando a versão CONNECT_FULLY_SPECIFIED do 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 ISR para 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ãoNULL, você deve 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 de 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 do 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 do CM_PARTIAL_RESOURCE_DESCRIPTOR.

Irql

Especifica o DIRQL passado no recurso CmResourceTypeInterrupt no membro u.Interrupt.Level de CM_PARTIAL_RESOURCE_DESCRIPTOR. A partir do Windows 8, um driver pode registrar um ISR que é executado no nível passivo definindo Irql e SynchronizeIrql para PASSIVE_LEVEL e definindo SpinLock para NULL. Para obter mais informações, consulte Usando rotinas de serviço de interrupção de Passive-Level.

InterruptMode

Especifica um KINTERRUPT_MODE que determina se a interrupção é disparada em nível (InterruptMode = LevelSensitive) ou disparada por borda (InterruptMode = travado). Para linhas de interrupção compartilhadas de um barramento PCI, especifique LevelSensitive. Para interrupções sinalizadas por mensagem PCI, especifique travados.

ProcessorEnableMask

Especifica a máscara KAFFINITY que representa o conjunto de processadores no qual as interrupções do dispositivo podem ocorrer. Esse valor é passado no recurso cmResourceTypeInterrupt no membro u.Interrupt.Affinity do 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 IRP_MN_START_DEVICE. A partir do Windows 7, o membro do Grupo será usado se o membro versão da estrutura IO_CONNECT_INTERRUPT_PARAMETERS estiver definido como CONNECT_FULLY_SPECIFIED_GROUP. O membro do Grupo será ignorado se de versão 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 tem um valor de CONNECT_LINE_BASED. Para obter mais informações, consulte Usando a versão CONNECT_LINE_BASED do 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 ISR para 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ãoNULL, você deve ter inicializado o bloqueio de rotação com KeInitializeSpinLock.

SynchronizeIrql

Especifica o DIRQL (IRQL) de 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 usará 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.) A partir do 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 rotinas de serviço de interrupção de Passive-Level.

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 do 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 umde Driver do WDM.

MessageBased

Especifica os parâmetros adicionais da operação a serem executados por IoConnectInterruptEx quando version tem um valor de CONNECT_MESSAGE_BASED. Para obter mais informações, consulte Usando a versão CONNECT_MESSAGE_BASED doIoConnectInterruptEx.

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 no retorno versão tiver um valor de CONNECT_LINE_BASED, a rotina fornecerá um ponteiro para uma estrutura KINTERRUPT. Se no retorno versão tiver um valor de CONNECT_MESSAGE_BASED, a rotina fornecerá um ponteiro para uma estrutura 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 interrupções do dispositivo.

ServiceContext

Especifica o valor a ser passado como o parâmetro ServiceContext do InterruptMessageService ou interruptService rotina 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ãoNULL, você deve ter inicializado o bloqueio de rotação com KeInitializeSpinLock.

SynchronizeIrql

Especifica o DIRQL (IRQL) de 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 usará 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 do ponto flutuante.

FallBackServiceRoutine

Um ponteiro para uma rotina InterruptService a ser usada como 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.

Observações

A rotina IoConnectInterruptEx usa um único parâmetro parâmetros 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)

Consulte também

IoConnectInterruptEx