Поделиться через


Использование API ведения журнала для родительского контроля

Отчеты о действиях (ведение журнала)

Файл заголовка WpcEvent.h содержит определения полей для каждого предопределенного типа события действия и настраиваемого типа. В этом примере кода показаны шаги для ведения журнала события приглашения на беседу с мгновенными сообщениями с помощью API публикации etw:

#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), чтобы предоставить полный доступ только администраторам. Учетные записи, не являющиеся администраторами, могут выполнять запись в канал, но не имеют доступа для чтения или удаления. Доступ к каналу осуществляется с помощью API трассировки событий Windows.

Сведения о поставщике ведения журнала родительского контроля

Поставщик WPC называется Microsoft.com/Windows/ParentalControls с GUID {01090065-B467-4503-9B28-533766761087}. Локальный канал ведения журнала по умолчанию — Microsoft.com/Windows/ParentalControls/LocalEvents.

Файлы журналов хранятся в папке Windows\System32\Wpc\Logs.

Уведомление о предстоящем выходе из системы ограничения времени

Система родительского контроля будет запускать предупреждение через 15 минут и снова через 1 минуту перед выходом контролируемого пользователя в зависимости от ограничений по времени. Приложения могут подписываться на эти события, особенно если они выполняются в полноэкранном режиме DirectX, где не отображаются стандартные уведомления Windows. Предоставляется пример кода, показывающий, как подписаться на события, зарегистрировать функцию обратного вызова и получить события.

Обзор функций расширения родительского контроля

EVENT_DATA_DESCRIPTOR

EventDataDescCreate

WPC_ARGS_CONVERSATIONINITEVENT