Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The code in this section shows how you can use methods and events from a user-mode KsProxy plug-in.
To learn how to support properties, methods, and events in your kernel-mode minidriver, see Defining Automation Tables.
After you have provided a minidriver that supports a given method, you can invoke that method by calling IKsControl::KsMethod from a user-mode plug-in, as shown in the following code example.
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);
In the automation tables you provide in kernel mode, you can use the Flags member of KSMETHOD_ITEM to specify whether the buffer is read/write and whether it should be mapped or copied.
To register for an event that you support in your minidriver, use the following user-mode code example.
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);
In the above example, notification continues until the minidriver disables the event. To disable the event. call IKsControl::KsEvent. If you want to be notified only the first time this event happens, set KSEVENT_TYPE_ONESHOT in Event.Flags.
If you are supporting events with USB Video Class Extension Units, see Supporting Autoupdate Events with Extension Units.