Compartilhar via


Função IoAttachDeviceToDeviceStack (wdm.h)

A rotina IoAttachDeviceToDeviceStack anexa o objeto de dispositivo do chamador ao objeto de dispositivo mais alto da cadeia e retorna um ponteiro para o objeto de dispositivo anteriormente mais alto.

Sintaxe

PDEVICE_OBJECT IoAttachDeviceToDeviceStack(
  [in] PDEVICE_OBJECT SourceDevice,
  [in] PDEVICE_OBJECT TargetDevice
);

Parâmetros

[in] SourceDevice

Ponteiro para o objeto de dispositivo criado pelo chamador.

[in] TargetDevice

Ponteiro para o objeto de dispositivo de outro driver, como um ponteiro retornado por uma chamada anterior para IoGetDeviceObjectPointer.

Valor de retorno

IoAttachDeviceToDeviceStack retorna um ponteiro para o objeto do dispositivo ao qual o SourceDevice foi anexado. O ponteiro do objeto de dispositivo retornado pode ser diferente de TargetDevice se TargetDevice tiver drivers adicionais em camadas sobre ele.

IoAttachDeviceToDeviceStack retornará NULL se não puder anexar o objeto do dispositivo porque, por exemplo, o dispositivo de destino estava sendo descarregado.

Observações

IoAttachDeviceToDeviceStack estabelece camadas entre drivers para que os mesmos IRPs sejam enviados para cada driver na cadeia.

Um driver intermediário pode usar essa rotina durante a inicialização para anexar seu próprio objeto de dispositivo ao objeto de dispositivo de outro driver. As solicitações de E/S subsequentes enviadas para targetDevice são enviadas primeiro para o driver intermediário.

Essa rotina define o AlignmentRequirement em SourceDevice para o valor no objeto de dispositivo mais baixo e define o StackSize para o valor no objeto mais um.

Um gravador de driver deve tomar cuidado para chamar essa rotina antes de os drivers que devem colocar em camadas sobre o driver. IoAttachDeviceToDeviceStack anexa SourceDevice ao objeto de dispositivo mais alto atualmente em camadas na cadeia e não tem como determinar se os drivers estão sendo em camadas na ordem correta.

Um driver que adquiriu um ponteiro para o dispositivo de destino chamando IoGetDeviceObjectPointer deve chamar ObDereferenceObject com o ponteiro do objeto de arquivo que foi retornado por IoGetDeviceObjectPointer para liberar sua referência ao objeto de arquivo antes de desanexar seu próprio objeto de dispositivo, por exemplo, quando um driver de nível mais alto é descarregado.

Requisitos

Requisito Valor
de cliente com suporte mínimo Disponível a partir do Windows 2000.
da Plataforma de Destino Universal
cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
regras de conformidade de DDI AddDevice(wdm), HwStorPortProhibitedDIs(storport), PnpSameDeviceObject(wdm)

Consulte também

IoAttachDevice

IoDetachDevice

IoGetDeviceObjectPointer

ObDereferenceObject