자녀 보호에 로깅 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