Condividi tramite


Codice di esempio User-Mode per metodi ed eventi

Il codice in questa sezione illustra come usare metodi ed eventi da un plug-in KsProxy in modalità utente.

Per informazioni su come supportare proprietà, metodi ed eventi nel minidriver in modalità kernel, vedere Definizione delle tabelle di automazione.

Dopo aver fornito un minidriver che supporta un determinato metodo, è possibile richiamare tale metodo chiamando IKsControl::KsMethod da un plug-in in modalità utente, come illustrato nell'esempio di codice seguente.

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);

Nelle tabelle di automazione fornite in modalità kernel è possibile usare il membro Flags di KSMETHOD_ITEM per specificare se il buffer è di lettura/scrittura e se deve essere mappato o copiato.

Per registrarsi per un evento supportato nel minidriver, usare l'esempio di codice in modalità utente seguente.

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);

Nell'esempio precedente, la notifica continua fino a quando il minidriver non disabilita l'evento. Per disabilitare l'evento. chiamare IKsControl::KsEvent. Se si vuole ricevere una notifica solo la prima volta che si verifica questo evento, impostare KSEVENT_TYPE_ONESHOT in Event.Flags.

Se si supportano eventi con unità di estensione della classe video USB, vedere Supporto degli eventi di aggiornamento automatico con unità di estensione.