Freigeben über


IWDFFileHandleTargetFactory::CreateFileHandleTarget-Methode (wudfddi.h)

[Warnung: UMDF 2 ist die neueste Version von UMDF und ersetzt UMDF 1. Alle neuen UMDF-Treiber sollten mit UMDF 2 geschrieben werden. UMDF 1 werden keine neuen Features hinzugefügt, und die Unterstützung für UMDF 1 für neuere Versionen von Windows 10 ist eingeschränkt. Universelle Windows-Treiber müssen UMDF 2 verwenden. Weitere Informationen finden Sie unter Erste Schritte mit UMDF.]

Die CreateFileHandleTarget-Methode erstellt ein dateihandlingbasiertes E/A-Zielobjekt.

Syntax

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

Parameter

[in] hTarget

Ein Handle für das Zielgerät. Das Handle muss zuvor mit dem flag FILE_FLAG_OVERLAPPED geöffnet worden sein. Beispielsweise muss FILE_FLAG_OVERLAPPED im dwFlagsAndAttributes-Parameter der Microsoft Win32 CreateFile-Funktion angegeben worden sein.

[out] ppTarget

Ein Zeiger auf eine Position, die einen Zeiger auf die IWDFIoTarget-Schnittstelle des E/A-Zielobjekts empfängt.

Rückgabewert

CreateFileHandleTarget gibt einen der folgenden Werte zurück:

Rückgabecode Beschreibung
S_OK

CreateFileHandleTarget hat erfolgreich ein dateihandlebasiertes E/A-Zielobjekt erstellt.

E_OUTOFMEMORY

Bei CreateFileHandleTarget ist ein Zuordnungsfehler aufgetreten.

 

CreateFileHandleTarget gibt möglicherweise auch andere HRESULT-Werte zurück, die in Winerror.h definiert sind.

Hinweise

Wenn Ihr Treiber ein dateihandlesbasiertes E/A-Ziel verwendet, muss der Abschnitt DDInstall.WDF der INF-Datei des Treibers die UmdfDispatcher-Direktive auf FileHandle festlegen. Weitere Informationen zu UmdfDispatcher finden Sie unter Angeben von WDF-Direktiven.

Nachdem der Treiber ein dateihandlesbasiertes E/A-Zielobjekt erstellt hat, kann er E/A-Anforderungen formatieren und an das E/A-Ziel senden. Wenn der Treiber IWDFIoTarget::FormatRequestForRead, IWDFIoTarget::FormatRequestForWrite oder IWDFIoTarget::FormatRequestForIoctl aufruft, legt der Treiber den pFile-Parameter in der Regel auf NULL fest. Null bewirkt, dass das Framework den Dateinamen verwendet, den der Treiber für CreateFileHandleTarget angegeben hat. Wenn der Treiber einen pFile-Parameter ungleich NULL bereitstellt, ersetzt die angegebene Datei die Datei, die der Treiber für CreateFileHandleTarget angegeben hat. (Treiber können auch IWDFIoRequest::FormatUsingCurrentType aufrufen, um eine E/A-Anforderung zu formatieren.)

Wenn der Treiber IWDFIoRequest::Send aufruft, um die E/A-Anforderung an das E/A-Ziel zu senden, darf der Treiber den WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET Wert im Flags-Parameter nicht festlegen.

Das Win32-Handle, das der Treiber an CreateFileHandleTarget übergibt, muss für die Lebensdauer des dateihandlesbasierten E/A-Zielobjekts gültig bleiben. (Das Framework nimmt keinen Verweis auf dieses Zielhandle, daher muss Ihr Treiber sicherstellen, dass das Win32-Handle gültig bleibt.)

Wenn der Treiber die IWDFIoTarget-Schnittstelle von CreateFileHandleTarget verwendet hat, muss er die IWDFIoTarget-Schnittstelle freigeben.

Weitere Informationen zu CreateFileHandleTarget - und E/A-Zielen finden Sie unter Initialisieren eines allgemeinen E/A-Ziels in UMDF.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie Sie ein dateihandlesbasiertes E/A-Ziel für eine benannte Pipe erstellen. In diesem Beispiel ist m_FxDevice der Schnittstellenzeiger, den IWDFDriver::CreateDevice bereitstellt.

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);
}

Anforderungen

Anforderung Wert
Ende des Supports In UMDF 2.0 und höher nicht verfügbar.
Zielplattform Desktop
UMDF-Mindestversion 1.5
Kopfzeile wudfddi.h (einschließlich Wudfusb.h)
DLL WUDFx.dll

Weitere Informationen

IWDFFileHandleTargetFactory

IWDFIoRequest::Send

IWDFIoTarget