使用日志记录 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 提供程序 Microsoft.com/Windows/ParentalControls 命名,GUID 为 {01090065-B467-4503-9B28-533766761087}。 默认的本地日志记录通道为 Microsoft.com/Windows/ParentalControls/LocalEvents。

日志文件存储在 Windows\System32\Wpc\Logs 文件夹中。

即将发生的时间限制注销通知

家长控制系统将在 15 分钟和 1 分钟触发警告事件,然后根据时间限制注销受控用户。 应用程序可以订阅这些事件,尤其是在未显示标准 Windows 通知的 DirectX 全屏模式下运行时。 提供的示例代码演示如何订阅事件、注册回调函数和接收事件。

家长控制扩展性功能概述

EVENT_DATA_DESCRIPTOR

EventDataDescCreate

WPC_ARGS_CONVERSATIONINITEVENT