メソッドとイベントのサンプル ユーザーモード コード

このセクションのコードでは、ユーザー モードの KsProxy プラグインのメソッドとイベントを使用する方法を示します。

カーネル モード ミニドライバーでプロパティ、メソッド、およびイベントをサポートする方法については、自動化テーブルの定義を参照してください。

特定のメソッドをサポートするミニドライバーを提供したら、次のコード例に示すように、ユーザー モード プラグインから IKsControl::KsMethod を呼び出すことによって、そのメソッドを呼び出すことができます。

PVOID MethodBuffer; // Your method arguments buffer
ULONG MethodBufferSize; // Your method buffer size

KSMETHOD Method;
ULONG BytesReturned;

Method.Set = KSMETHODSETID_MyMethodSet;
Method.Id = KSMETHOD_MyMethodId;
Method.Flags = KSMETHOD_TYPE_SEND;

HRESULT hr = 
pIKsControl -> KsMethod (
    &Method,
        sizeof (Method),
    MethodBuffer,
    &MethodBufferSize,
    &BytesReturned);

カーネル モードで指定するオートメーション テーブルでは、KSMETHOD_ITEMフラグメンバーを使用して、バッファーを読み取り/書き込みするかどうか、またバッファーをマップするかコピーするかを指定できます。

ミニドライバーでサポートするイベントに登録するには、次のユーザー モードのコード例を使用します。

HANDLE EventHandle; // Your event handle.

KSEVENT Event;
KSEVENTDATA EventData;

Event.Set = KSEVENTSETID_MyEventSet;
Event.Id = KSEVENT_MyEventId;
Event.Flags = KSEVENT_TYPE_ENABLE;

EventData.NotificationType = KSEVENTF_EVENT_HANDLE;
EventData.EventHandle.Event = EventHandle;
EventData.EventHandle.Reserved [0] = 0;
EventData.EventHandle.Reserved [1] = 0;

ULONG BytesReturned;

HRESULT hr =
pIKsControl -> KsEvent (
    &Event,
        sizeof (Event),
    &EventData,
        sizeof (EventData),
    &BytesReturned);

上記の例では、ミニドライバーがイベントを無効にするまで通知が続きます。 イベントを無効にするには IKsControl::KsEvent を呼び出します。 このイベントが初めて発生したときにのみ通知を受け取る場合は、イベント フラグで KSEVENT_TYPE_ONESHOT を設定します。

USB Video クラス拡張ユニットでイベントをサポートする場合は、拡張ユニットによる自動更新イベントのサポートを参照してください。