다음을 통해 공유


EvtSubscribe 함수(winevt.h)

지정된 쿼리 조건과 일치하는 채널 또는 로그 파일에서 현재 및 이후 이벤트를 수신할 구독을 만듭니다.

구문

EVT_HANDLE EvtSubscribe(
  [in] EVT_HANDLE             Session,
  [in] HANDLE                 SignalEvent,
  [in] LPCWSTR                ChannelPath,
  [in] LPCWSTR                Query,
  [in] EVT_HANDLE             Bookmark,
  [in] PVOID                  Context,
  [in] EVT_SUBSCRIBE_CALLBACK Callback,
  [in] DWORD                  Flags
);

매개 변수

[in] Session

EvtOpenSession 함수가 반환하는 원격 세션 핸들입니다. 로컬 컴퓨터의 이벤트를 구독하려면 NULL 로 설정합니다.

[in] SignalEvent

쿼리 조건과 일치하는 새 이벤트를 사용할 수 있을 때 서비스에서 신호를 보낼 이벤트 개체에 대한 핸들입니다. 콜백 매개 변수가 NULL이 아닌 경우 이 매개 변수는 NULL이어야 합니다.

[in] ChannelPath

구독하려는 이벤트가 포함된 관리 또는 운영 채널의 이름입니다(분석 또는 디버그 채널을 구독할 수 없음). 쿼리 매개 변수에 XPath 쿼리가 포함된 경우 경로가 필요합니다. 쿼리 매개 변수에 구조적 XML 쿼리가 포함되어 있으면 경로가 무시됩니다.

[in] Query

구독 서비스에서 반환할 이벤트 유형을 지정하는 쿼리입니다. XPath 1.0 쿼리 또는 구조적 XML 쿼리를 지정할 수 있습니다. XPath에 20개 이상의 식이 포함된 경우 구조적 XML 쿼리를 사용합니다. 모든 이벤트를 수신하려면 이 매개 변수를 NULL 또는 "*"로 설정합니다.

[in] Bookmark

구독의 시작점을 식별하는 책갈피에 대한 핸들입니다. 책갈피 핸들을 얻으려면 EvtCreateBookmark 함수를 호출합니다. Flags 매개 변수에 EvtSubscribeStartAfterBookmark 플래그가 포함된 경우 이 매개 변수를 설정해야 합니다. 그렇지 않으면 NULL입니다.

[in] Context

구독 서비스가 이벤트를 제공할 때마다 지정된 콜백에 전달할 호출자 정의 컨텍스트 값입니다.

[in] Callback

구독 이벤트를 수신할 EVT_SUBSCRIBE_CALLBACK 콜백 함수에 대한 포인터입니다. SignalEvent 매개 변수가 NULL이 아닌 경우 이 매개 변수는 NULL이어야 합니다.

[in] Flags

이벤트 구독을 시작할 시기를 지정하는 하나 이상의 플래그입니다. 예를 들어 EvtSubscribeStartAtOldestRecord를 지정하면 서비스는 쿼리 조건과 일치하는 모든 현재 및 이후 이벤트를 검색합니다. 그러나 EvtSubscribeToFutureEvents를 지정하는 경우 서비스는 쿼리 조건과 일치하는 이후 이벤트만 반환합니다. 가능한 값은 EVT_SUBSCRIBE_FLAGS 열거형을 참조하세요.

반환 값

성공한 경우 구독에 대한 핸들입니다. 그렇지 않으면 NULL입니다. 함수가 NULL을 반환하는 경우 GetLastError 함수를 호출하여 오류 코드를 가져옵니다. 완료되면 구독 핸들을 사용하여 EvtClose 함수를 호출해야 합니다.

설명

구독을 취소하려면 반환된 구독 핸들을 EvtClose 함수에 전달합니다.

두 가지 구독 모델, 즉 폴링 모델과 푸시 모델이 있습니다. 푸시 모델에서 구독 콜백을 구현하고 콜백 매개 변수를 구현으로 설정합니다. 서비스는 쿼리 조건과 일치하는 각 이벤트에 대해 콜백을 호출합니다(또는 오류가 발생하는 경우).

폴링 모델에서 서비스에서 신호를 전송하는 이벤트 개체를 만듭니다. 신호를 받으면 구독 핸들을 사용하여 EvtNext 함수를 호출하여 이벤트를 열거합니다. 열거하는 각 이벤트에서 EvtClose 함수를 호출해야 합니다. 그런 다음 개체를 초기화하고 서비스가 다시 신호를 보낼 때까지 기다립니다. 이 프로세스는 구독을 취소할 때까지 반복됩니다.

예제

이 함수를 사용하는 방법을 보여 주는 예제는 이벤트 구독을 참조하세요.

요구 사항

   
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 winevt.h
라이브러리 Wevtapi.lib
DLL Wevtapi.dll

추가 정보

EVT_SUBSCRIBE_CALLBACK

EvtQuery