Compartir a través de


Método IWDFFileHandleTargetFactory::CreateFileHandleTarget (wudfddi.h)

[Advertencia: UMDF 2 es la versión más reciente de UMDF y sustituye a UMDF 1. Todos los nuevos controladores UMDF deben escribirse mediante UMDF 2. No se agregan nuevas características a UMDF 1 y hay compatibilidad limitada con UMDF 1 en versiones más recientes de Windows 10. Los controladores universales de Windows deben usar UMDF 2. Para obtener más información, consulta Introducción a UMDF.]

El método CreateFileHandleTarget crea un objeto de destino de E/S basado en identificador de archivo.

Sintaxis

HRESULT CreateFileHandleTarget(
  [in]  HANDLE       hTarget,
  [out] IWDFIoTarget **ppTarget
);

Parámetros

[in] hTarget

Identificador del dispositivo de destino. El identificador debe haberse abierto previamente con la marca FILE_FLAG_OVERLAPPED. Por ejemplo, FILE_FLAG_OVERLAPPED debe haberse especificado en el parámetro dwFlagsAndAttributes de de la función CreateFile CreateFile de Microsoft Win32.

[out] ppTarget

Puntero a una ubicación que recibe un puntero al IWDFIoTarget interfaz del objeto de destino de E/S.

Valor devuelto

CreateFileHandleTarget devuelve uno de los siguientes valores:

Código devuelto Descripción
S_OK

CreateFileHandleTarget creó correctamente un objeto de destino de E/S basado en identificador de archivo.

E_OUTOFMEMORY

createFileHandleTarget encontró un error de asignación.

 

createFileHandleTarget también puede devolver otros valores HRESULT definidos en Winerror.h.

Observaciones

Si el controlador usa un destino de E/S basado en identificador de archivo, la sección DDInstall.WDF del archivo INF del controlador debe establecer la directiva UmdfDispatcher en FileHandle. Para obtener más información sobre umdfDispatcher, vea especificar directivas WDF.

Una vez que el controlador crea un objeto de destino de E/S basado en identificador de archivo, puede dar formato a las solicitudes de E/S y enviarlos al destino de E/S. Normalmente, si el controlador llama a IWDFIoTarget::FormatRequestForRead, IWDFIoTarget::FormatRequestForWrite, o IWDFIoTarget::FormatRequestForIoctl, el controlador establece el parámetro pFile en NULL. El NULL hace que el marco use el nombre de archivo que el controlador especificó para CreateFileHandleTarget. Si el controlador proporciona un parámetronullpFile, el archivo especificado reemplaza el archivo especificado para CreateFileHandleTarget. (Los controladores también pueden llamar a IWDFIoRequest::FormatUsingCurrentType para dar formato a una solicitud de E/S).

Cuando el controlador llama a IWDFIoRequest::Send para enviar la solicitud de E/S al destino de E/S, el controlador no debe establecer el valor de WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET en el parámetro Flags.

El identificador win32 que el controlador pasa a createFileHandleTarget debe permanecer válido durante la vigencia del objeto de destino de E/S basado en identificador de archivo. (El marco de trabajo no toma una referencia en este identificador de destino, por lo que el controlador debe asegurarse de que el identificador win32 sigue siendo válido).

Cuando el controlador haya terminado de usar la interfaz IWDFIoTarget que CreateFileHandleTarget, debe liberar la interfaz IWDFIoTarget.

Para obtener más información sobre destinos de E/S y CreateFileHandleTarget, consulte Inicializar un destino de E/S general en umDF.

Ejemplos

En el ejemplo de código siguiente se muestra cómo crear un destino de E/S basado en identificador de archivo para una canalización con nombre. En este ejemplo, m_FxDevice es el puntero de interfaz que IWDFDriver::CreateDevice proporciona.

HRESULT hr = S_OK;
CComPtr<IWDFFileHandleTargetFactory> pFileHandleTargetFactory;
//
// Create a pipe and get the handle.
//
m_WriteHandle = CreateNamedPipe(NP_NAME, 
                                PIPE_ACCESS_DUPLEX|FILE_FLAG_OVERLAPPED, 
                                PIPE_TYPE_MESSAGE|PIPE_READMODE_MESSAGE|PIPE_WAIT,
                                2,
                                MAX_TRANSFER_SIZE,
                                MAX_TRANSFER_SIZE,
                                1000,
                                NULL);
if (m_WriteHandle == INVALID_HANDLE_VALUE) {
    DWORD err = GetLastError();
    hr = HRESULT_FROM_WIN32(err);
}
//
// Obtain the IWDFFileHandleTargetFactory interface
// by calling IWDFDevice::QueryInterface. 
//
if (SUCCEEDED(hr)) {
    hr = m_FxDevice->QueryInterface(IID_PPV_ARGS(&pFileHandleTargetFactory));
}
//
// Create a file handle target.
//
if (SUCCEEDED(hr)) {
    hr = pFileHandleTargetFactory->CreateFileHandleTarget(m_WriteHandle,
                                                          &m_WriteTarget);
}

Requisitos

Requisito Valor
fin del soporte técnico No disponible en UMDF 2.0 y versiones posteriores.
de la plataforma de destino de Escritorio
versión mínima de UMDF 1.5
encabezado de wudfddi.h (incluya Wudfusb.h)
DLL de WUDFx.dll

Consulte también

IWDFFileHandleTargetFactory

IWDFIoRequest::Send

IWDFIoTarget