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. Es werden keine neuen Features zu UMDF 1 hinzugefügt, und es gibt eingeschränkte Unterstützung für UMDF 1 für neuere Versionen von Windows 10. Universelle Windows-Treiber müssen UMDF 2 verwenden. Weitere Informationen finden Sie unter Erste Schritte mit UMDF-.]

Die CreateFileHandleTarget--Methode erstellt ein Dateihandle-basierteS 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 FILE_FLAG_OVERLAPPED Flag geöffnet worden sein. Beispielsweise muss FILE_FLAG_OVERLAPPED in der 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 einen der folgenden Werte zurück:

Rückgabecode Beschreibung
S_OK

CreateFileHandleTarget erfolgreich ein Dateihandle-basierteS E/A-Zielobjekt erstellt.

E_OUTOFMEMORY

CreateFileHandleTarget ein Zuordnungsfehler aufgetreten.

 

CreateFileHandleTarget- können auch andere HRESULT-Werte zurückgeben, die in Winerror.h definiert sind.

Bemerkungen

Wenn Ihr Treiber ein Dateihandle-basiertes E/A-Ziel verwendet, muss der DDInstall.WDF- Abschnitt 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 Dateihandle-basiertes E/A-Zielobjekt erstellt hat, kann er E/A-Anforderungen formatieren und an das E/A-Ziel senden. Wenn der Treiber IWDFIoTarget::FormatRequestForRead, IWDFIoTarget::FormatRequestForWriteoder IWDFIoTarget::FormatRequestForIoctlaufruft, legt der Treiber den pFile-Parameter auf NULLfest. Die NULL- bewirkt, dass das Framework den Dateinamen verwendet, den der für CreateFileHandleTargetangegebene Treiber verwendet. Wenn der Treiber einen nicht-NULL-pFile- Parameter bereitstellt, ersetzt die angegebene Datei die Datei, die der angegebene Treiber CreateFileHandleTarget. (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 parameter Flags nicht festlegen.

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

Wenn der Treiber die IWDFIoTarget Schnittstelle verwendet hat, die CreateFileHandleTarget- bereitstellt, 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

Das folgende Codebeispiel zeigt, wie Sie ein Dateihandle-basiertes E/A-Ziel für eine benannte Pipe erstellen. In diesem Beispiel ist m_FxDevice der Schnittstellenzeiger, der 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
Mindest-UMDF-Version 1.5
Header- wudfddi.h (include Wudfusb.h)
DLL- WUDFx.dll

Siehe auch

IWDFFileHandleTargetFactory

IWDFIoRequest::Send

IWDFIoTarget-