Código de User-Mode de exemplo para métodos e eventos
O código nesta seção mostra como você pode usar métodos e eventos de um plug-in KsProxy no modo de usuário.
Para saber como dar suporte a propriedades, métodos e eventos em seu minidriver no modo kernel, consulte Definindo tabelas de automação.
Depois de fornecer um minidriver que dá suporte a um determinado método, você pode invocar esse método chamando IKsControl::KsMethod de um plug-in no modo de usuário, conforme mostrado no exemplo de código a seguir.
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);
Nas tabelas de automação fornecidas no modo kernel, você pode usar o membro Flags do KSMETHOD_ITEM para especificar se o buffer é leitura/gravação e se ele deve ser mapeado ou copiado.
Para registrar-se para um evento que você dá suporte em seu minidriver, use o exemplo de código do modo de usuário a seguir.
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);
No exemplo acima, a notificação continua até que o minidriver desabilite o evento. Para desabilitar o evento. chame IKsControl::KsEvent. Se você quiser ser notificado apenas na primeira vez que esse evento ocorrer, defina KSEVENT_TYPE_ONESHOT em Event.Flags.
Se você estiver dando suporte a eventos com unidades de extensão de classe de vídeo USB, consulte Suporte a eventos de autenticação automática com unidades de extensão.