Exemple de code User-Mode pour les méthodes et les événements
Le code de cette section montre comment utiliser des méthodes et des événements à partir d’un plug-in KsProxy en mode utilisateur.
Pour savoir comment prendre en charge les propriétés, les méthodes et les événements dans votre minidriver en mode noyau, consultez Définition de tables Automation.
Une fois que vous avez fourni un minidriver qui prend en charge une méthode donnée, vous pouvez appeler cette méthode en appelant IKsControl::KsMethod à partir d’un plug-in en mode utilisateur, comme illustré dans l’exemple de code suivant.
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);
Dans les tables Automation que vous fournissez en mode noyau, vous pouvez utiliser le membre Indicateurs de KSMETHOD_ITEM pour spécifier si la mémoire tampon est en lecture/écriture et si elle doit être mappée ou copiée.
Pour vous inscrire à un événement que vous prenez en charge dans votre minidriver, utilisez l’exemple de code en mode utilisateur suivant.
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);
Dans l’exemple ci-dessus, la notification continue jusqu’à ce que le minidriver désactive l’événement. Pour désactiver l’événement. appelez IKsControl::KsEvent. Si vous souhaitez être averti uniquement la première fois que cet événement se produit, définissez KSEVENT_TYPE_ONESHOT dans Event.Flags.
Si vous prendz en charge des événements avec des unités d’extension de classe vidéo USB, consultez Prise en charge des événements de mise à jour automatique avec des unités d’extension.