方法和事件的示例用户模式代码

本部分中的代码演示如何使用用户模式 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_ITEMFlags 成员来指定缓冲区是读/写,还是应映射或复制缓冲区。

若要注册微型驱动程序中支持的事件,请使用以下用户模式代码示例。

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。 如果只想在首次发生此事件时收到通知,请在 Event.Flags 中设置KSEVENT_TYPE_ONESHOT。

如果要使用 USB 视频类扩展单元支持事件,请参阅 使用扩展单元支持自动更新事件