次の方法で共有


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 に指定したファイル名がフレームワークで使用されます。 ドライバーが NULL 以外の pFile パラメーターを提供する場合、指定したファイルは、ドライバーが 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_FxDeviceIWDFDriver::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
Header wudfddi.h (Wudfusb.h を含む)
[DLL] WUDFx.dll

こちらもご覧ください

IWDFFileHandleTargetFactory

IWDFIoRequest::Send

IWDFIoTarget