Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
[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 |
|---|---|
|
O destino de E/S especificado já está aberto. |
|
Os recursos do sistema disponíveis eram insuficientes para concluir a operação. |
|
O tamanho da estrutura de WDF_IO_TARGET_OPEN_PARAMS que OpenParams especificado estava incorreto. |
|
O TargetFileObject membro da estrutura de WDF_IO_TARGET_OPEN_PARAMS do chamador especificou um objeto de arquivo inválido. |
|
Um parâmetro inválido foi detectado. |
|
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) |