次の方法で共有


IWDFFileHandleTargetFactory::CreateFileHandleTarget メソッド (wudfddi.h)

[警告: UMDF 2 は UMDF の最新バージョンであり、UMDF 1 よりも優先されます。 すべての新しい UMDF ドライバーは、UMDF 2 を使用して記述する必要があります。 UMDF 1 には新機能が追加されておらず、Windows 10 の新しいバージョンでは UMDF 1 のサポートが制限されています。 ユニバーサル Windows ドライバーでは、UMDF 2 を使用する必要があります。 詳細については、「UMDFの概要」を参照してください。

CreateFileHandleTarget メソッドは、ファイル ハンドルベースの I/O ターゲット オブジェクトを作成します。

構文

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

パラメーター

[in] hTarget

ターゲット デバイスへのハンドル。 ハンドルは、FILE_FLAG_OVERLAPPED フラグを使用して以前に開かれている必要があります。 たとえば、FILE_FLAG_OVERLAPPEDは、Microsoft Win32 CreateFile 関数の dwFlagsAndAttributes パラメーターで指定されている必要があります。

[out] ppTarget

I/O ターゲット オブジェクトの IWDFIoTarget インターフェイスへのポインターを受け取る場所へのポインター。

戻り値

CreateFileHandleTarget は、次のいずれかの値を返します。

リターン コード 形容
S_OK

CreateFileHandleTarget 、ファイル ハンドル ベースの I/O ターゲット オブジェクトが正常に作成されました。

E_OUTOFMEMORY

CreateFileHandleTarget 割り当てエラーが発生

 

CreateFileHandleTarget は、Winerror.h で定義されている他の HRESULT 値を返す場合もあります。

備考

ドライバーがファイル ハンドル ベースの I/O ターゲットを使用している場合、ドライバーの INF ファイルの DDInstall.WDF セクションで、UmdfDispatcher ディレクティブを FileHandleに設定する必要があります。 UmdfDispatcherの詳細については、「WDF ディレクティブの指定」を参照してください。

ドライバーは、ファイル ハンドル ベースの I/O ターゲット オブジェクトを作成した後、I/O 要求を書式設定し、I/O ターゲットに送信できます。 通常、ドライバーが IWDFIoTarget::FormatRequestForReadIWDFIoTarget::FormatRequestForWrite、または IWDFIoTarget::FormatRequestForIoctlを呼び出すと、ドライバーは pFile パラメーターを NULLに設定します。 NULL により、ドライバーが CreateFileHandleTargetを するために指定したファイル名がフレームワークで使用されます。 ドライバーが、以外の NULLpFile パラメーターを提供する場合、指定したファイルは、CreateFileHandleTargetを するようにドライバーが指定したファイルを置き換えます。 (ドライバーは IWDFIoRequest::FormatUsingCurrentType 呼び出して I/O 要求を書式設定することもできます)。

ドライバーが IWDFIoRequest::Send 呼び出して I/O 要求を I/O ターゲットに送信する場合、ドライバーは Flags パラメーターに WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET 値を設定してはなりません。

ドライバーが CreateFileHandleTarget に渡す Win32 ハンドルは、ファイル ハンドル ベースの I/O ターゲット オブジェクトの有効期間中も有効なままである必要があります。 (フレームワークはこのターゲット ハンドルの参照を受け取らないので、ドライバーは Win32 ハンドルが有効なままであることを確認する必要があります)。

CreateFileHandleTarget が提供する IWDFIoTarget インターフェイスの使用が完了したら、IWDFIoTarget インターフェイスを解放する必要があります。

CreateFileHandleTarget および I/O ターゲット の詳細については、「UMDFでの一般 I/O ターゲットの初期化 」を参照してください。

次のコード例は、名前付きパイプのファイル ハンドル ベースの I/O ターゲットを作成する方法を示しています。 この例では、m_FxDevice は 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);
}

必要条件

要件 価値
サポート終了 UMDF 2.0 以降では使用できません。
ターゲット プラットフォーム の デスクトップ
UMDF の最小バージョン を する 1.5
ヘッダー wudfddi.h (Wudfusb.h を含む)
DLL WUDFx.dll

関連項目

IWDFFileHandleTargetFactory の

IWDFIoRequest::Send

IWDFIoTarget の