Freigeben über


Beispiel User-Mode Code für Methoden und Ereignisse

Der Code in diesem Abschnitt zeigt, wie Sie Methoden und Ereignisse aus einem KsProxy-Plug-In im Benutzermodus verwenden können.

Informationen zur Unterstützung von Eigenschaften, Methoden und Ereignissen in Ihrem Kernelmodus-Minidriver finden Sie unter Definieren von Automatisierungstabellen.

Nachdem Sie einen Minidriver bereitgestellt haben, der eine bestimmte Methode unterstützt, können Sie diese Methode aufrufen, indem Sie IKsControl::KsMethod aus einem Benutzermodus-Plug-In aufrufen, wie im folgenden Codebeispiel gezeigt.

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

In den Automatisierungstabellen, die Sie im Kernelmodus bereitstellen, können Sie den Flags-Member von KSMETHOD_ITEM verwenden, um anzugeben, ob der Puffer Lese-/Schreibzugriff hat und ob er zugeordnet oder kopiert werden soll.

Verwenden Sie das folgende Codebeispiel für den Benutzermodus, um sich für ein Ereignis zu registrieren, das Sie in Ihrem Minidriver unterstützen.

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

Im obigen Beispiel wird die Benachrichtigung fortgesetzt, bis der Minidriver das Ereignis deaktiviert. So deaktivieren Sie das Ereignis. rufen Sie IKsControl::KsEvent auf. Wenn Sie nur beim ersten Ereignis benachrichtigt werden möchten, legen Sie KSEVENT_TYPE_ONESHOT in Event.Flags fest.

Wenn Sie Ereignisse mit USB-Videoklassenerweiterungseinheiten unterstützen, finden Sie weitere Informationen unter Unterstützung von Automatischupdateereignissen mit Erweiterungseinheiten.