Win32 API 日本語リファレンス
ホームMedia.DirectShow.Tv › IStreamBufferInitialize

IStreamBufferInitialize

COM
IID9ce50f2d-6ba7-40fb-a034-50b1a674ec78継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IStreamBufferInitialize インターフェイスは、stream buffer フィルターを構成するために使用します。Stream Buffer Source フィルター、Stream Buffer Sink フィルター、および StreamBufferConfig オブジェクトはいずれもこのインターフェイスを公開します。

解説(Remarks)

このインターフェイスのインターフェイス識別子 (IID) を宣言するには、__uuidof 演算子を使用します: __uuidof(IStreamBufferInitialize)

メソッド 2

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

vtbl 3 HRESULT SetHKEY(HKEY hkeyRoot)

SetHKEY メソッドは、stream buffer オブジェクトが構成情報を格納するレジストリキーを設定します。

hkeyRootHKEYinレジストリキーへのハンドル。

戻り値

HRESULT を返します。取り得る値には次の表に示すものが含まれます。

戻り値 説明
S_OK
メソッドは成功しました。
E_UNEXPECTED
SetHKEY が、フィルターの内部初期化後に呼び出されました。

解説(Remarks)

このメソッドを使用すると、アプリケーションは stream buffer オブジェクトが構成情報 (バッキングファイルの場所、バッキングファイルの数、およびそのサイズを含む) を保存するレジストリキーを指定できます。

このメソッドは、オブジェクトが明示的または暗黙的に初期化される前に呼び出す必要があります。Stream Buffer Sink フィルターの場合は、プロファイルがロックされる前にメソッドを呼び出します。Stream Buffer Source フィルターの場合は、ソースファイル名を設定する前にメソッドを呼び出します。

このメソッドを使用するには、次の手順を実行します。

  1. 新しいレジストリキーを作成するか、既存のキーを開きます。
  2. StreamBufferConfig オブジェクトのインスタンスを作成します。
  3. StreamBufferConfig オブジェクトに対して IStreamBufferInitialize インターフェイスをクエリします。
  4. レジストリキーへのハンドルを指定して、StreamBufferConfig オブジェクトに対して SetHKey を呼び出します。
  5. 必要に応じて、IStreamBufferConfigure メソッドを呼び出して、レジストリキーに格納される構成情報を変更します。
  6. 同じレジストリキーを使用して、Stream Buffer Source フィルターと Stream Buffer Sink フィルターに対して SetHKey を呼び出します。
ユーザーがレジストリキーに対する読み取り/書き込み権限を持っていることを確認する責任はアプリケーションにあります。

呼び出し側は、このメソッドを呼び出した後にレジストリキーハンドルを解放してかまいません。

次のコードは、バッキングファイルのディレクトリを構成する方法を示します。簡潔にするため、エラーチェックは省略しています。


// Create the StreamBufferConfig object.
CComPtr<IStreamBufferConfigure> pConfig;
hr = pConfig.CoCreateInstance(CLSID_StreamBufferConfig);

// Create a new registry key to hold our settings.
HKEY hkey = 0;
long lRes = RegCreateKey(HKEY_LOCAL_MACHINE,
    TEXT("SOFTWARE\\MyStreamBufferKey"), &hkey);

// Set the registry key.
CComPtr<IStreamBufferInitialize> pInit;
hr = pConfig.QueryInterface(&pInit);
hr = pInit->SetHKEY(hkey);
pInit.Release();

// Set the backing file directory.
hr = pConfig->SetDirectory(L"C:\\MyDirectory");

// Create the Stream Buffer Sink filter and set the registry key.
CComPtr<IStreamBufferSink> pSink;
hr = pSink.CoCreateInstance(CLSID_StreamBufferSink);
hr = pSink.QueryInterface(&pInit);
hr = pInit->SetHKEY(hkey);
pInit.Release();

// Create the Stream Buffer Source filter and set the registry key.
CComPtr<IStreamBufferSource> pSource;
hr = pSource.CoCreateInstance(CLSID_StreamBufferSource);
hr = pSource.QueryInterface(&pInit);
hr = pInit->SetHKEY(hkey);
vtbl 4 HRESULT SetSIDs(DWORD cSIDs, PSID* ppSID)

SetSIDs メソッドは、バッキングファイルへのアクセスを保護するために使用されるセキュリティ識別子 (SID) を設定します。

cSIDsDWORDinppSID パラメーターで指定される配列のサイズを指定します。
ppSIDPSID*inoutサイズが cSIDsSID 構造体の配列へのポインター。

戻り値

HRESULT を返します。取り得る値には次の表に示すものが含まれます。

戻り値 説明
E_INVALIDARG
無効な引数です。
E_POINTER
Null ポインター引数です。
S_OK
メソッドは成功しました。

解説(Remarks)

実行時に、Stream Buffer Source フィルターと Sink フィルターは、バッキングファイルへのアクセスがスレッド間で同期されるように、ミューテックスなどのさまざまな Win32 オブジェクトを作成します。各フィルターは、これらのオブジェクトを保護するために使用される SID のリストを保持しています。既定では、フィルターはホストプロセスから SID を継承します。アプリケーションは SetSIDs メソッドを使用して、既定の SID を上書きできます。

このメソッドを呼び出す場合は、sink フィルターをロックする前、またはソースフィルターでファイルを読み込む前に呼び出してください。すべてのフィルターに同じ SID を与えることをお勧めします。

このメソッドは、ディレクトリ構造の随意アクセス制御リスト (DACL) によって保護されるコンテンツ録画ファイルには適用されないことに注意してください。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IStreamBufferInitialize "{9CE50F2D-6BA7-40FB-A034-50B1A674EC78}"
#usecom global IStreamBufferInitialize IID_IStreamBufferInitialize "{}"
#comfunc global IStreamBufferInitialize_SetHKEY  3 sptr
#comfunc global IStreamBufferInitialize_SetSIDs  4 int,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。