Compartilhar via


Função WdfIoTargetOpen (wdfiotarget.h)

[Aplica-se a KMDF e UMDF]

O método WdfIoTargetOpen abre um destino de E/S remoto para que o driver possa enviar solicitações de E/S para ele.

Sintaxe

NTSTATUS WdfIoTargetOpen(
  [in] WDFIOTARGET                IoTarget,
  [in] PWDF_IO_TARGET_OPEN_PARAMS OpenParams
);

Parâmetros

[in] IoTarget

Um identificador para um objeto de destino de E/S obtido de uma chamada anterior para WdfIoTargetCreate.

[in] OpenParams

Um ponteiro para uma estrutura de WDF_IO_TARGET_OPEN_PARAMS alocada pelo chamador.

Valor de retorno

WdfIoTargetOpen retornará STATUS_SUCCESS se a operação for bem-sucedida. Caso contrário, esse método poderá retornar um dos seguintes valores:

Código de retorno Descrição
STATUS_INVALID_DEVICE_STATE
O destino de E/S especificado já está aberto.
STATUS_INSUFFICIENT_RESOURCES
Os recursos do sistema disponíveis eram insuficientes para concluir a operação.
STATUS_INFO_LENGTH_MISMATCH
O tamanho da estrutura de WDF_IO_TARGET_OPEN_PARAMS que OpenParams especificado estava incorreto.
STATUS_NO_SUCH_DEVICE
O TargetFileObject membro da estrutura de WDF_IO_TARGET_OPEN_PARAMS do chamador especificou um objeto de arquivo inválido.
STATUS_INVALID_PARAMETER
Um parâmetro inválido foi detectado.
STATUS_NOT_FOUND
Não é possível encontrar o nome do dispositivo identificado no parâmetro OpenParams.
 

Esse método também pode retornar outros valores NTSTATUS .

Uma verificação de bug ocorre se o driver fornece um identificador de objeto inválido.

Observações

Os drivers podem abrir destinos de E/S remotos fornecendo uma cadeia de caracteres Unicode que representa um nome de objeto ou fornecendo um ponteiro para uma estrutura de DEVICE_OBJECT do Modelo de Driver do Windows (WDM). (Os drivers baseados em estrutura normalmente não têm ponteiros para estruturas de DEVICE_OBJECT de outros drivers.)

Para obter um nome de interface do dispositivo antes de chamar WdfIoTargetOpen, um driver UMDF deve chamar CM_Register_Notification para se registrar para a notificação de chegada e remoção da interface. Em seguida, ele pode abrir o destino remoto usando o nome simbólico da interface que recebe na rotina de retorno de chamada de notificação da interface. O driver deve continuar a escutar a notificação de remoção enquanto o identificador está aberto. Se o driver de destino falhar, o driver UMDF deverá fechar o identificador.

Se a interface já existir, um driver UMDF deverá chamar CM_Get_Device_Interface_List, possivelmente chamando CM_Get_Device_Interface_List_Size primeiro para determinar o tamanho do buffer necessário.

Se você quiser que o driver use seu destino de E/S local, o driver deverá chamar WdfDeviceGetIoTarget em vez de WdfIoTargetOpen.

Se uma chamada para WdfIoTargetOpen falhar, o driver deverá chamar WdfObjectDelete para excluir o objeto de destino de E/S.

Para obter mais informações sobre WdfIoTargetOpen, consulte Inicializando umde destino de E/S geral.

Para obter mais informações sobre destinos de E/S, consulte Usando destinos de E/S.

Exemplos

O exemplo a seguir cria um objeto de destino de E/S, inicializa uma estrutura de WDF_IO_TARGET_OPEN_PARAMS e abre um destino de E/S remoto especificando o nome de link simbólico de um dispositivo.

WDF_OBJECT_ATTRIBUTES  ioTargetAttrib;
WDFIOTARGET  ioTarget;
WDF_IO_TARGET_OPEN_PARAMS  openParams;

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(
                                        &ioTargetAttrib,
                                        TARGET_DEVICE_INFO
                                        );
status = WdfIoTargetCreate(
                           device,
                           &ioTargetAttrib,
                           &ioTarget
                           );
if (!NT_SUCCESS(status)) {
    return status;
}
WDF_IO_TARGET_OPEN_PARAMS_INIT_OPEN_BY_NAME(
                                            &openParams,
                                            SymbolicLink,
                                            STANDARD_RIGHTS_ALL
                                            );
status = WdfIoTargetOpen(
                         ioTarget,
                         &openParams
                         );
if (!NT_SUCCESS(status)) {
    WdfObjectDelete(ioTarget);
    return status;
}

Requisitos

Requisito Valor
da Plataforma de Destino Universal
versão mínima do KMDF 1.0
versão mínima do UMDF 2.0
cabeçalho wdfiotarget.h (inclua Wdf.h)
Biblioteca Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
regras de conformidade de DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Consulte também

DEVICE_OBJECT

WDF_IO_TARGET_OPEN_PARAMS

WdfDeviceGetIoTarget

WdfIoTargetClose

WdfIoTargetCreate

WdfIoTargetOpen

WdfObjectDelete