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 controladores UMDF nuevos deben escribirse con 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 con 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 la función CreateFile de Microsoft Win32.

[out] ppTarget

Puntero a una ubicación que recibe un puntero a la interfaz IWDFIoTarget 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.

Comentarios

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 valor NULL hace que el marco use el nombre de archivo que el controlador especificó en CreateFileHandleTarget. Si el controlador proporciona un parámetro pFile distinto de NULL, el archivo especificado reemplaza el archivo especificado por 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 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 proporciona CreateFileHandleTarget , debe liberar la interfaz IWDFIoTarget .

Para obtener más información sobre los destinos CreateFileHandleTarget y E/S, consulte Inicialización de 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 proporciona IWDFDriver::CreateDevice .

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 Value
Finalización del soporte técnico No disponible en UMDF 2.0 y versiones posteriores.
Plataforma de destino Escritorio
Versión mínima de UMDF 1.5
Encabezado wudfddi.h (incluya Wudfusb.h)
Archivo DLL WUDFx.dll

Consulte también

IWDFFileHandleTargetFactory

IWDFIoRequest::Send

IWDFIoTarget