Condividi tramite


Metodo IWDFFileHandleTargetFactory::CreateFileHandleTarget (wudfddi.h)

[Avviso: UMDF 2 è la versione più recente di UMDF e sostituisce UMDF 1. Tutti i nuovi driver UMDF devono essere scritti usando UMDF 2. Non vengono aggiunte nuove funzionalità a UMDF 1 ed è disponibile un supporto limitato per UMDF 1 nelle versioni più recenti di Windows 10. I driver di Windows universali devono usare UMDF 2. Per altre informazioni, vedi Introduzione a UMDF.]

Il metodo CreateFileHandleTarget crea un oggetto di destinazione di I/O basato su handle di file.

Sintassi

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

Parametri

[in] hTarget

Handle per il dispositivo di destinazione. L'handle deve essere stato aperto in precedenza con il flag FILE_FLAG_OVERLAPPED. Ad esempio, FILE_FLAG_OVERLAPPED deve essere stato specificato nel parametro dwFlagsAndAttributes della funzione CreateFile di Microsoft Win3 2.

[out] ppTarget

Puntatore a una posizione che riceve un puntatore al IWDFIoTarget interfaccia dell'oggetto di destinazione I/O.

Valore restituito

CreateFileHandleTarget restituisce uno dei valori seguenti:

Codice restituito Descrizione
S_OK

CreateFileHandleTarget creato correttamente un oggetto di destinazione di I/O basato su handle di file.

E_OUTOFMEMORY

CreateFileHandleTarget rilevato un errore di allocazione.

 

CreateFileHandleTarget potrebbe restituire anche altri valori HRESULT definiti in Winerror.h.

Osservazioni

Se il driver usa una destinazione di I/O basata su handle di file, la sezione DDInstall.WDF del file INF del driver deve impostare la direttiva UmdfDispatcher su FileHandle. Per altre informazioni su UmdfDispatcher, vedere Specifica delle direttive WDF.

Dopo che il driver crea un oggetto di destinazione di I/O basato su handle di file, può formattare le richieste di I/O e inviarle alla destinazione di I/O. In genere, se il driver chiama IWDFIoTarget::FormatRequestForRead, IWDFIoTarget::FormatRequestForWriteo IWDFIoTarget::FormatRequestForIoctl, il driver imposta il parametro pFile su NULL. Il NULL fa in modo che il framework usi il nome file specificato dal driver per CreateFileHandleTarget. Se il driver fornisce un parametroNULLpFile, il file specificato sostituisce il file specificato per CreateFileHandleTarget. I driver possono anche chiamare IWDFIoRequest::FormatUsingCurrentType per formattare una richiesta di I/O.

Quando il driver chiama IWDFIoRequest::Send per inviare la richiesta di I/O alla destinazione di I/O, il driver non deve impostare il valore WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET nel parametro Flag .

L'handle Win32 passato al driver CreateFileHandleTarget deve rimanere valido per la durata dell'oggetto di destinazione di I/O basato su handle di file. Il framework non accetta un riferimento su questo handle di destinazione, quindi il driver deve assicurarsi che l'handle Win32 rimanga valido.

Al termine dell'uso dell'interfaccia di IWDFIoTarget che CreateFileHandleTarget, deve rilasciare l'interfaccia di IWDFIoTarget .

Per altre informazioni su destinazioni createFileHandleTarget e I/O, vedere Inizializzazione di una destinazione di I/O generale in UMDF.

Esempi

Nell'esempio di codice seguente viene illustrato come creare una destinazione di I/O basata su handle di file per una named pipe. In questo esempio, m_FxDevice è il puntatore a interfaccia fornito 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);
}

Fabbisogno

Requisito Valore
Fine del supporto Non disponibile in UMDF 2.0 e versioni successive.
piattaforma di destinazione Desktop
versione minima di UMDF 1.5
intestazione wudfddi.h (include Wudfusb.h)
dll WUDFx.dll

Vedere anche

IWDFFileHandleTargetFactory

IWDFIoRequest::Send

IWDFIoTarget