estrutura NOTIFICATION_INFO_W2K (1394.h)
O motorista do ônibus passa NOTIFICATION_INFO para passar informações para a rotina de notificação fornecida pelo motorista para um intervalo de endereços alocado pelo motorista no espaço de endereço do IEEE 1394 do computador. O motorista do ônibus chama a rotina de notificação quando recebe um pacote de solicitação de E/S assíncrona para esse endereço.
Sintaxe
typedef struct _NOTIFICATION_INFO_W2K {
PMDL Mdl;
ULONG ulOffset;
ULONG nLength;
ULONG fulNotificationOptions;
PVOID Context;
PADDRESS_FIFO Fifo;
PVOID RequestPacket;
PMDL ResponseMdl;
PVOID *ResponsePacket;
PULONG ResponseLength;
PKEVENT *ResponseEvent;
} NOTIFICATION_INFO_W2K, *PNOTIFICATION_INFO_W2K;
Membros
Mdl
Se não for NULL, mdl especificará a MDL (lista de descritores de memória) para o intervalo de endereços alocado.
ulOffset
Especifica o deslocamento de bytes com o MDL que corresponde ao endereço que recebeu um pacote de solicitação. Usado somente quando Mdl não é NULL.
nLength
Especifica o número de bytes afetados pelo pacote de solicitação. Usado somente quando Mdl não é NULL.
fulNotificationOptions
Especifica qual tipo de evento disparou o driver de barramento para chamar a rotina de notificação. Os possíveis eventos que o motorista do ônibus pode retornar são os seguintes:
- NOTIFY_FLAGS_AFTER_READ
- NOTIFY_FLAGS_AFTER_WRITE
- NOTIFY_FLAGS_AFTER_LOCK
Esse membro só é usado quando Mdl não é NULL.
Context
Ponteiro para dados de contexto específicos para esse intervalo de endereços alocado. O driver fornece esses dados por meio do membro u.AllocateAddressRange.Context do IRB para a solicitação de REQUEST_ALLOCATE_ADDRESS_RANGE original.
Fifo
Ponteiro para a estrutura ADDRESS_FIFO que contém o elemento FIFO concluído. Usado somente se o driver enviou uma lista de ADDRESS_FIFO na solicitação de REQUEST_ALLOCATE_ADDRESS_RANGE original.
RequestPacket
Se não for NULL, RequestPacket apontará para o pacote de solicitação original. O motorista do ônibus só fornecerá isso se o driver do dispositivo não forneceu um MDL ou uma lista de ADDRESS_FIFO na solicitação de REQUEST_ALLOCATE_ADDRESS_RANGE original.
ResponseMdl
Se não for NULL, ResponseMdl apontará para um MDL não inicializado. O driver deve inicializar esse MDL para um buffer não página e preencher o buffer com o pacote de resposta. O motorista do ônibus só fornecerá isso se o driver do dispositivo não forneceu um MDL ou uma lista de ADDRESS_FIFO na solicitação de REQUEST_ALLOCATE_ADDRESS_RANGE original.
ResponsePacket
Se não for NULL, ResponsePacket apontará para um local de memória que o driver preencherá com um ponteiro para os dados (quadlet ou bloco) a serem retornados no pacote de resposta. O motorista do ônibus só fornecerá isso se o driver do dispositivo não forneceu um MDL ou uma lista de ADDRESS_FIFO na solicitação de REQUEST_ALLOCATE_ADDRESS_RANGE original.
ResponseLength
Se não for NULL, ResponseLength apontará para um local de memória que o driver preencherá com o comprimento de seu pacote de resposta. O motorista do ônibus só fornecerá isso se o driver do dispositivo não forneceu um MDL ou uma lista de ADDRESS_FIFO na solicitação de REQUEST_ALLOCATE_ADDRESS_RANGE original.
ResponseEvent
Se não for NULL, ResponseEvent apontará para um local de memória que o driver preencherá com o evento de kernel que o driver de barramento deve usar para sinalizar que concluiu o envio do pacote de resposta. O motorista do ônibus só fornecerá isso se o driver do dispositivo não forneceu um MDL ou uma lista de ADDRESS_FIFO na solicitação de REQUEST_ALLOCATE_ADDRESS_RANGE original.
Comentários
Quando um driver aloca um intervalo de endereços no espaço de endereço do IEEE 1394 do computador, pode exigir que o motorista do ônibus o notifique para alguns ou todos os pacotes de solicitação enviados para os endereços alocados. Como parte da solicitação de alocação original, o motorista pode exigir que o motorista do ônibus encaminhe cada pacote para manipulação ou pode exigir que o motorista do ônibus manipule o pacote e notifique o driver do dispositivo quando ele terminar. Para obter mais informações, consulte REQUEST_ALLOCATE_ADDRESS_RANGE.
Se o driver do dispositivo não fornecer repositório de backup, o motorista do barramento encaminhará cada pacote para o driver de dispositivo para tratamento. O motorista do ônibus passa NULL para Mdl e passa o pacote em RequestPacket. O driver de barramento também passa ponteiros para locais de memória que o driver de dispositivo deve preencher com o buffer para o pacote de resposta (em ResponsePacket), o comprimento do buffer (em ResponseLength) e um MDL para o buffer (em ResponseMdl). O driver de barramento também fornece um local de memória que o driver pode usar para passar um objeto de evento kernel em ResponseEvent. Se o driver do dispositivo fornecer um objeto de evento, o motorista do barramento o usará para sinalizar o driver quando terminar de enviar o pacote de resposta.
Se o driver fornecer o repositório de backup na solicitação de intervalo de endereços de alocação original, o motorista do barramento usará a rotina de notificação do motorista para sinalizar que concluiu a leitura ou gravação de dados do repositório de backup. Ele passa o MDL do repositório de backup no membro Mdl e o local inicial e o tamanho dentro do buffer associado em ulOffset e nLength. O motorista do ônibus também passa o tipo de evento que levou à notificação em fulNotificationOptions.
Se o driver do dispositivo estiver usando uma lista vinculada de ADDRESS_FIFO como o repositório de backup, o motorista do barramento retornará o elemento de lista que ele disparou no Fifo.
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | 1394.h (inclua 1394.h) |
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de