자녀 보호에 로깅 API 사용

활동 보고(로깅)

WpcEvent.h 헤더 파일에는 미리 정의된 각 활동 이벤트 유형 및 사용자 지정 형식에 대한 필드 정의가 포함되어 있습니다. 이 샘플 코드는 ETW 게시 API를 사용하여 인스턴트 메시징 대화 초대 이벤트를 로깅하는 단계를 보여줍니다.

#include <windows.h>
#include <evntprov.h>
#include <wpcevent.h>

#pragma comment(lib, "advapi32.lib")

#define BYTELEN(x) ((wcslen(x) + 1) * sizeof(WCHAR))

void main()
{
    REGHANDLE hWpc = 0;

    // Register
    ULONG res = EventRegister(&WPCPROV, NULL, NULL, &hWpc);

    // Log an event
    PCWSTR pcszAppName = L"SuperIM";
    PCWSTR pcszAppVersion = L"7.0";
    PCWSTR pcszAccountName = L"Kate";
    PCWSTR pcszConvID = L"102";
    PCWSTR pcszRequestingIP = L"192.168.2.100";
    PCWSTR pcszSender = L"imperson@isp.com";
    const DWORD dwReason = WPCFLAG_ISBLOCKED_NOTBLOCKED;
    const DWORD dwRecipCount = 1;
    PCWSTR pcszRecipient = L"otherim@isp.com";

    EVENT_DATA_DESCRIPTOR eventData[WPC_ARGS_CONVERSATIONINITEVENT_CARGS];

    EventDataDescCreate(&eventData[WPC_ARGS_CONVERSATIONINITEVENT_APPNAME],
        (const PVOID)pcszAppName, (ULONG)BYTELEN(pcszAppName));

    EventDataDescCreate(&eventData[WPC_ARGS_CONVERSATIONINITEVENT_APPVERSION],
        (const PVOID)pcszAppVersion,(ULONG)BYTELEN(pcszAppVersion));

    EventDataDescCreate(
        &eventData[WPC_ARGS_CONVERSATIONINITEVENT_ACCOUNTNAME], 
        (const PVOID)pcszAccountName, (ULONG)BYTELEN(pcszAccountName));

    EventDataDescCreate(&eventData[WPC_ARGS_CONVERSATIONINITEVENT_CONVID], 
        (const PVOID)pcszConvID, (ULONG)BYTELEN(pcszConvID));

    EventDataDescCreate(
        &eventData[WPC_ARGS_CONVERSATIONINITEVENT_REQUESTINGIP], 
        (const PVOID)pcszRequestingIP, (ULONG)BYTELEN(pcszRequestingIP));

    EventDataDescCreate(&eventData[WPC_ARGS_CONVERSATIONINITEVENT_SENDER],
        (const PVOID)pcszSender, (ULONG)BYTELEN(pcszSender));

    EventDataDescCreate(&eventData[WPC_ARGS_CONVERSATIONINITEVENT_REASON],
        (const PVOID)&dwReason, sizeof(dwReason));

    EventDataDescCreate(&eventData[WPC_ARGS_CONVERSATIONINITEVENT_RECIPCOUNT],
        (const PVOID)&dwRecipCount, sizeof(dwRecipCount));

    EventDataDescCreate(&eventData[WPC_ARGS_CONVERSATIONINITEVENT_RECIPIENT],
        (const PVOID)pcszRecipient, (ULONG)BYTELEN(pcszRecipient));


    ULONG lRet = EventWrite(hWpc, &WPCEVENT_IM_INVITATION, ARRAYSIZE(eventData), eventData);

    // Unregister
    EventUnregister(hWpc);
}

사용자 지정 로깅

애플리케이션이 미리 정의된 이벤트 집합 또는 하나의 사용자 지정 형식 외부에서 기록된 이벤트를 확장하려면 애플리케이션 매니페스트에서 해당 에 대한 공급자를 정의해야 합니다. 그런 다음 WPC 기본 채널을 가져오고 애플리케이션 정의 이벤트를 기록할 수 있습니다.

로깅 권한

WPC 로깅 채널은 관리자에게만 모든 권한을 제공하기 위해 ACL( 액세스 제어 목록 )에 의해 제어됩니다. 관리자가 아닌 계정은 채널에 쓸 수 있지만 읽기 또는 삭제 액세스 권한이 없습니다. 채널에 대한 액세스는 ETW API를 사용하는 것입니다.

자녀 보호 로깅 공급자 세부 정보

WPC 공급자 이름은 GUID {01090065-B467-4503-9B28-533766761087}을 사용하여 Microsoft.com/Windows/ParentalControls 명명됩니다. 기본 로컬 로깅 채널은 Microsoft.com/Windows/ParentalControls/LocalEvents.

로그 파일은 Windows\System32\Wpc\Logs 폴더에 저장됩니다.

임박한 시간 제한 로그아웃 알림

자녀 보호 시스템은 시간 제한에 따라 제어된 사용자의 로그아웃 전 15분 및 1분에 다시 경고 이벤트를 발생합니다. 애플리케이션은 특히 표준 Windows 알림이 표시되지 않는 DirectX 전체 화면 모드에서 실행되는 경우 이러한 이벤트를 구독할 수 있습니다. 이벤트를 구독하고, 콜백 함수를 등록하고, 이벤트를 수신하는 방법을 보여 주는 샘플 코드가 제공됩니다.

자녀 보호 확장 기능 개요

EVENT_DATA_DESCRIPTOR

EventDataDescCreate

WPC_ARGS_CONVERSATIONINITEVENT