Usando APIs de registro em log para controles dos pais

Relatório de atividades (registro em log)

O arquivo de cabeçalho WpcEvent.h contém definições dos campos para cada tipo de evento de atividade predefinido e o tipo personalizado. Este código de exemplo mostra as etapas para registrar um evento de convite de conversa de mensagens instantâneas usando a API de publicação do 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);
}

Registro em log personalizado

Para que um aplicativo estenda os eventos registrados fora do conjunto de eventos predefinidos ou de um tipo personalizado, você precisará definir um provedor para isso no manifesto do aplicativo. O canal padrão do WPC pode ser importado e os eventos definidos pelo aplicativo podem ser registrados em log.

Direitos de registro em log

O canal de registro em log do WPC é controlado pela ACL ( lista de controle de acesso ) para fornecer acesso completo somente aos administradores. Contas não administradoras podem gravar no canal, mas não têm acesso de leitura ou exclusão. O acesso ao canal é usando a API ETW.

Detalhes do provedor de registro em log de controles dos pais

O provedor WPC é nomeado Microsoft.com/Windows/ParentalControls com GUID {01090065-B467-4503-9B28-533766761087}. O canal de registro em log local padrão é Microsoft.com/Windows/ParentalControls/LocalEvents.

Os arquivos de log são armazenados na pasta Windows\System32\Wpc\Logs.

Notificação de logoff de limites de tempo iminentes

O sistema controles parentais disparará um evento de aviso em 15 minutos e novamente a 1 minuto antes do logoff de um usuário controlado com base nas restrições de tempo. Os aplicativos podem assinar esses eventos, especialmente quando estão em execução no modo de tela inteira do DirectX, em que as notificações padrão do Windows não são exibidas. O código de exemplo é fornecido que mostra como assinar os eventos, registrar uma função de retorno de chamada e receber os eventos.

Visão geral dos recursos de extensibilidade de controles dos pais

EVENT_DATA_DESCRIPTOR

EventDataDescCreate

WPC_ARGS_CONVERSATIONINITEVENT