Win32 API 日本語リファレンス
ホームDevices.DeviceAccess › ICreateDeviceAccessAsync

ICreateDeviceAccessAsync

COM
IID3474628f-683d-42d2-abcb-db018c6503bc継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

ICreateDeviceAccessAsync インターフェイスは、CreateDeviceAccessInstance の呼び出しから返されます。

メソッド 4

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT Cancel()

Cancel メソッドは、進行中の非同期操作のキャンセルを試みます。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

操作が正常にキャンセルされた場合、GetResult メソッドの呼び出しが発生します。

アプリケーションはいつでも Cancel を呼び出すことができます。操作が既にクローズまたは完了している場合、この呼び出しは何の効果もありません。

vtbl 4 HRESULT Wait(DWORD timeout)

Wait メソッドは、進行中の非同期バインド操作が完了するまで、指定した時間だけ待機します。

timeoutDWORDin待機呼び出しのタイムアウト値 (ミリ秒単位)。操作が完了するまで呼び出し元を待機させたい場合は INFINITE を使用します。

戻り値

このメソッドは、次の値に加えて標準の戻り値をサポートします。

戻り値 説明
S_OK
待機は成功し、操作が完了しました。
ERROR_TIMEOUT
操作が完了する前に待機がタイムアウトしました。
E_ILLEGAL_METHOD_CALL
このメソッドが呼び出された時点で、操作は既にクローズされていました。
vtbl 5 HRESULT Close()

Close メソッドは、非同期操作が完了し結果を取得した後のクリーンアップを実行します。

戻り値

このメソッドは、次の値に加えて標準の戻り値をサポートします。

戻り値 説明
S_OK
プロパティ値が正常に取得されました。
E_ILLEGAL_METHOD_CALL
操作が完了していません。

解説(Remarks)

バインドが成功している場合、このメソッドは GetResult メソッドが返すインターフェイスを無効化しません。

基になるオブジェクトが削除される際にリソースはクリーンアップされるため、このメソッドの呼び出しは厳密には必須ではありません。ただし、呼び出すことで非同期バインドに関連付けられたリソースをシステムが解放できます。そのため、結果を取得した後に Close を呼び出すことを推奨します。

vtbl 6 HRESULT GetResult(GUID* riid, void** deviceAccess)

CreateDeviceAccessInstance 関数の呼び出しで指定されたデバイスインターフェイスにバインドされた IDeviceIoControl オブジェクトを取得します。

riidGUID*in呼び出し元が取得しようとしているデバイスアクセスインターフェイスの種類を示すインターフェイス識別子。この識別子に指定できる有効な値は IID_IDeviceIoControl のみです。
deviceAccessvoid**outバインドが成功した場合、CreateDeviceAccessInstance への最初の呼び出しで指定された型のインターフェイスが格納されます。

戻り値

このメソッドは、次の値に加えて標準の戻り値をサポートします。

戻り値 説明
S_OK
バインドに成功しました。
E_ILLEGAL_METHOD_CALL
非同期操作が有効な状態ではありませんでした。バインド操作がまだ進行中であるか、まだ開始されていません。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_ICreateDeviceAccessAsync "{3474628F-683D-42D2-ABCB-DB018C6503BC}"
#usecom global ICreateDeviceAccessAsync IID_ICreateDeviceAccessAsync "{}"
#comfunc global ICreateDeviceAccessAsync_Cancel     3
#comfunc global ICreateDeviceAccessAsync_Wait       4 int
#comfunc global ICreateDeviceAccessAsync_Close      5
#comfunc global ICreateDeviceAccessAsync_GetResult  6 var,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。