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 |
---|---|
|
CreateFileHandleTarget creó correctamente un objeto de destino de E/S basado en identificador de archivo. |
|
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
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 |