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.

Retornar valor

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

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

Comentários

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 AlignmentRequirement em SourceDevice como o valor no objeto de dispositivo mais baixo e define StackSize como o valor no objeto mais um.

Um gravador de driver deve tomar cuidado para chamar essa rotina antes de qualquer drivers que devem colocar em camadas em cima de seu 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 esse driver de nível superior for descarregado.

Requisitos

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

Confira também

IoAttachDevice

IoDetachDevice

IoGetDeviceObjectPointer

ObDereferenceObject