IKsPropertySet
COM公式ドキュメント
IKsPropertySet インターフェイスは、もともと WDM ドライバー上でデバイスのプロパティを効率的に設定および取得する手段として設計されました。KSProxy を使用して、ユーザーモードの COM メソッド呼び出しを、WDM ストリーミングクラスドライバーが使用するカーネルモードのプロパティセットに変換します。現在、このインターフェイスはソフトウェアコンポーネント間だけで情報を受け渡すためにも使用されます。場合によっては、ソフトウェアコンポーネントはこのインターフェイスか、または IKsControl インターフェイス(DirectShow DDK に記載)のいずれかを実装しなければなりません。たとえば、DVD ナビゲーターと共に使用するソフトウェア MPEG-2 デコーダーを作成する場合、これらのインターフェイスのいずれかを実装し、さらにナビゲーターがデコーダーに送信する DVD 関連のプロパティセットをサポートする必要があります。ピンはこれらのインターフェイスのいずれかをサポートすることで、他のピンやフィルターが自身のプロパティを設定または取得できるようにできます。注意 この名前のインターフェイスは dsound.h ヘッダーファイルにも別途存在します。これら 2 つのインターフェイスには互換性がありません。DirectShow DDK に記載されている IKsControl インターフェイスが、現在では WDM ドライバーとユーザーモードコンポーネント間でプロパティセットを受け渡すための推奨インターフェイスです。
解説(Remarks)
[このページに関連する機能である DirectShow は、レガシー機能です。これは MediaPlayer、IMFMediaEngine、および Media Foundation でのオーディオ/ビデオキャプチャ に置き換えられました。これらの機能は Windows 10 および Windows 11 向けに最適化されています。Microsoft は、可能な限り新しいコードでは DirectShow ではなく MediaPlayer、IMFMediaEngine、および Media Foundation でのオーディオ/ビデオキャプチャ を使用することを強く推奨します。また、レガシー API を使用している既存のコードについても、可能であれば新しい API を使用するように書き直すことを推奨します。]
IKsPropertySet インターフェイスは、もともと WDM ドライバー上でデバイスのプロパティを効率的に設定および取得する手段として設計されました。KSProxy を使用して、ユーザーモードの COM メソッド呼び出しを、WDM ストリーミングクラスドライバーが使用するカーネルモードのプロパティセットに変換します。現在、このインターフェイスはソフトウェアコンポーネント間だけで情報を受け渡すためにも使用されます。
場合によっては、ソフトウェアコンポーネントはこのインターフェイスか、または IKsControl インターフェイス(DirectShow DDK に記載)のいずれかを実装しなければなりません。たとえば、DVD ナビゲーターと共に使用するソフトウェア MPEG-2 デコーダーを作成する場合、これらのインターフェイスのいずれかを実装し、さらにナビゲーターがデコーダーに送信する DVD 関連のプロパティセットをサポートする必要があります。ピンはこれらのインターフェイスのいずれかをサポートすることで、他のピンやフィルターが自身のプロパティを設定または取得できるようにできます。
この名前のインターフェイスは dsound.h ヘッダーファイルにも別途存在します。これら 2 つのインターフェイスには互換性がありません。DirectShow DDK に記載されている IKsControl インターフェイスが、現在では WDM ドライバーとユーザーモードコンポーネント間でプロパティセットを受け渡すための推奨インターフェイスです。
Ksproxy.h の前に Ks.h をインクルードする必要があります。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
プロパティセット GUID とプロパティ ID で識別されるプロパティを設定します。
| guidPropSet | GUID* | in | プロパティセットを識別する GUID へのポインタを指定する。 |
| dwPropID | DWORD | in | プロパティセット内のプロパティを識別する ID を指定する。 |
| pInstanceData | void* | in | プロパティを限定するインスタンスデータへのポインタを指定する。不要なら NULL。 |
| cbInstanceData | DWORD | in | pInstanceData のバイト数を指定する。 |
| pPropData | void* | in | 設定する値を保持するバッファへのポインタを指定する。 |
| cbPropData | DWORD | in | pPropData のバイト数を指定する。 |
プロパティセット GUID とプロパティ ID で識別されるプロパティを取得します。
| guidPropSet | GUID* | in | プロパティセットを識別する GUID へのポインタを指定する。 |
| dwPropID | DWORD | in | プロパティセット内のプロパティを識別する ID を指定する。 |
| pInstanceData | void* | in | プロパティを限定するインスタンスデータへのポインタを指定する。不要なら NULL。 |
| cbInstanceData | DWORD | in | pInstanceData のバイト数を指定する。 |
| pPropData | void* | out | 取得した値を受け取るバッファへのポインタを指定する。 |
| cbPropData | DWORD | in | pPropData のバイト数を指定する。 |
| pcbReturned | DWORD* | out | 実際に書き込まれたバイト数を受け取る DWORD ポインタ。 |
オブジェクトが指定されたプロパティセットをサポートしているかどうかを判定します。
| guidPropSet | GUID* | in | サポート状況を問い合わせるプロパティセットの GUID へのポインタを指定する。 |
| dwPropID | DWORD | in | サポート状況を問い合わせるプロパティの ID を指定する。 |
| pTypeSupport | DWORD* | out | Get/Set 等の対応種別(KSPROPERTY_SUPPORT_*)を受け取る DWORD ポインタ。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IKsPropertySet "{31EFAC30-515C-11D0-A9AA-00AA0061BE93}" #usecom global IKsPropertySet IID_IKsPropertySet "{}" #comfunc global IKsPropertySet_Set 3 var,int,sptr,int,sptr,int #comfunc global IKsPropertySet_Get 4 var,int,sptr,int,sptr,int,var #comfunc global IKsPropertySet_QuerySupported 5 var,int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IKsPropertySet "{31EFAC30-515C-11D0-A9AA-00AA0061BE93}" #usecom global IKsPropertySet IID_IKsPropertySet "{}" #comfunc global IKsPropertySet_Set 3 sptr,int,sptr,int,sptr,int #comfunc global IKsPropertySet_Get 4 sptr,int,sptr,int,sptr,int,sptr #comfunc global IKsPropertySet_QuerySupported 5 sptr,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。