Função IoAttachDevice (wdm.h)
A rotina IoAttachDevice anexa o objeto de dispositivo do chamador a um objeto de dispositivo de destino nomeado, de modo que as solicitações de E/S associadas ao dispositivo de destino sejam roteadas primeiro para o chamador.
Sintaxe
NTSTATUS IoAttachDevice(
[in] PDEVICE_OBJECT SourceDevice,
[in] PUNICODE_STRING TargetDevice,
[out] PDEVICE_OBJECT *AttachedDevice
);
Parâmetros
[in] SourceDevice
Ponteiro para o objeto de dispositivo criado pelo chamador.
[in] TargetDevice
Ponteiro para um buffer que contém o nome do objeto do dispositivo ao qual o SourceDevice especificado deve ser anexado.
[out] AttachedDevice
Ponteiro para o armazenamento alocado pelo chamador para um ponteiro. No retorno, contém um ponteiro para o objeto do dispositivo de destino se o anexo for bem-sucedido.
Valor de retorno
IoAttachDevice pode retornar um dos seguintes valores NTSTATUS:
Observações
IoAttachDevice estabelece camadas entre drivers para que os mesmos IRPs possam ser enviados para cada driver na cadeia.
Essa rotina é usada por drivers intermediários durante a inicialização. Ele permite que esse driver anexe seu próprio objeto de dispositivo a outro dispositivo de forma que todas as solicitações feitas ao dispositivo original sejam fornecidas primeiro ao driver intermediário.
O chamador só pode ser colocado em camadas na parte superior de uma cadeia existente de drivers em camadas. IoAttachDevice pesquisa o objeto de dispositivo mais alto em camadas sobre TargetDevice e se anexa a esse objeto (que pode ser o TargetDevice). Portanto, essa rotina não deve ser chamada se um driver que deve ser de nível superior já se colocou em camadas sobre o dispositivo de destino.
Observe que, para drivers e drivers do sistema de arquivos na pilha de armazenamento, IoAttachDevice abre o dispositivo de destino com FILE_READ_ATTRIBUTES e, em seguida, chama IoGetRelatedDeviceObject. Isso não faz com que um sistema de arquivos seja montado. Assim, uma chamada bem-sucedida para IoAttachDevice retorna o objeto do dispositivo do driver de armazenamento, não o do driver do sistema de arquivos.
Essa rotina define o AlignmentRequirement no SourceDevice para o valor no objeto de dispositivo inferior seguinte e define o StackSize para o valor no objeto mais um.
Aviso
AttachedDevice deve apontar para um local de memória global, como a extensão do dispositivo do driver. IoAttachDevice abre o objeto de arquivo para o dispositivo de destino, atualiza AttachedDevice, executa a anexação e fecha o objeto de arquivo. Assim, o dispositivo de origem recebe as solicitações IRP_MJ_CLEANUP e IRP_MJ_CLOSE para o objeto de arquivo antes que IoAttachDevice retorne. O driver deve encaminhar essas solicitações para o dispositivo de destino e AttachedDevice deve ser um local de memória acessível às rotinas de dispatchCleanup do driver e DispatchClose.
Requisitos
Requisito | Valor |
---|---|
da Plataforma de Destino | Universal |
cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
biblioteca | NtosKrnl.lib |
de DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
regras de conformidade de DDI | HwStorPortProhibitedDIs(storport), IrqlIoPassive1(wdm) |