다음을 통해 공유


메서드 및 이벤트에 대한 샘플 User-Mode 코드

이 섹션의 코드는 사용자 모드 KsProxy 플러그 인에서 메서드 및 이벤트를 사용하는 방법을 보여 줍니다.

커널 모드 미니드라이버에서 속성, 메서드 및 이벤트를 지원하는 방법을 알아보려면 Automation 테이블 정의를 참조하세요.

지정된 메서드를 지원하는 미니드라이버를 제공한 후 다음 코드 예제와 같이 사용자 모드 플러그 인에서 IKsControl::KsMethod 를 호출하여 해당 메서드를 호출할 수 있습니다.

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

커널 모드에서 제공하는 자동화 테이블에서 KSMETHOD_ITEMFlags 멤버를 사용하여 버퍼가 읽기/쓰기인지 여부와 매핑 또는 복사 여부를 지정할 수 있습니다.

미니 드라이버에서 지원하는 이벤트를 등록하려면 다음 사용자 모드 코드 예제를 사용합니다.

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

위의 예제에서는 미니드라이버가 이벤트를 사용하지 않도록 설정할 때까지 알림이 계속됩니다. 이벤트를 사용하지 않도록 설정하려면 IKsControl::KsEvent를 호출합니다. 이 이벤트가 처음 발생할 때만 알림을 받도록 하려면 Event.Flags에서 KSEVENT_TYPE_ONESHOT 설정합니다.

USB 비디오 클래스 확장 단위로 이벤트를 지원하는 경우 확장 단위로 이벤트 자동 업데이트 지원을 참조하세요.