메서드 및 이벤트에 대한 샘플 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 비디오 클래스 확장 단위로 이벤트를 지원하는 경우 확장 단위로 이벤트 자동 업데이트 지원을 참조하세요.