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 は、次のいずれかの値を返します。
リターン コード | 形容 |
---|---|
|
CreateFileHandleTarget 、ファイル ハンドル ベースの I/O ターゲット オブジェクトが正常に作成されました。 |
|
CreateFileHandleTarget 割り当てエラーが発生。 |
CreateFileHandleTarget は、Winerror.h で定義されている他の HRESULT 値を返す場合もあります。
備考
ドライバーがファイル ハンドル ベースの I/O ターゲットを使用している場合、ドライバーの INF ファイルの DDInstall.WDF セクションで、UmdfDispatcher ディレクティブを FileHandle に設定する必要があります。 UmdfDispatcher の詳細については、「WDF ディレクティブの指定」を参照してください。
ドライバーは、ファイル ハンドル ベースの I/O ターゲット オブジェクトを作成した後、I/O 要求を書式設定し、I/O ターゲットに送信できます。 通常、ドライバーが IWDFIoTarget::FormatRequestForRead、IWDFIoTarget::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 の
IWDFIoTarget の