Пример кода User-Mode для методов и событий
В коде в этом разделе показано, как использовать методы и события из подключаемого модуля KsProxy в пользовательском режиме.
Сведения о поддержке свойств, методов и событий в мини-driver в режиме ядра см. в статье Определение таблиц автоматизации.
После предоставления мини-драйвера, поддерживающего данный метод, можно вызвать этот метод, вызвав 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);
В таблицах автоматизации, предоставляемых в режиме ядра, можно использовать элемент FlagsKSMETHOD_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);
В приведенном выше примере уведомление продолжается до тех пор, пока мини-driver не отключит событие. Отключение события. вызовите IKsControl::KsEvent. Если вы хотите получать уведомления только при первом возникновении этого события, задайте KSEVENT_TYPE_ONESHOT в Event.Flags.
Если вы поддерживаете события с единицами расширения класса ВИДЕО USB, см. раздел Поддержка событий автоматического обновления с помощью модулей расширения.