Partilhar via


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.