Uso de api de registro para controles parentales

Informes de actividad (registro)

El archivo de encabezado WpcEvent.h contiene definiciones de los campos para cada tipo de evento de actividad predefinido y el tipo personalizado. En este código de ejemplo se muestran los pasos para registrar un evento de invitación de conversación de mensajería instantánea mediante la API de publicación de 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 personalizado

Para que una aplicación extienda los eventos registrados fuera del conjunto de eventos predefinidos o el tipo personalizado, deberá definir un proveedor para eso en el manifiesto de aplicación. El canal predeterminado de WPC se puede importar y, a continuación, se pueden registrar eventos definidos por la aplicación.

Derechos de registro

El canal de registro de WPC se controla mediante la lista de control de acceso (ACL) para proporcionar acceso completo solo a los administradores. Las cuentas que no son de administrador pueden escribir en el canal, pero no tienen acceso de lectura o eliminación. El acceso al canal es mediante la API ETW.

Detalles del proveedor de registro de controles parentales

El proveedor de WPC se denomina Microsoft.com/Windows/ParentalControls con GUID {01090065-B467-4503-9B28-533766761087}. El canal de registro local predeterminado es Microsoft.com/Windows/ParentalControls/LocalEvents.

Los archivos de registro se almacenan en la carpeta Windows\System32\Wpc\Logs.

Notificación de cierre de sesión de límites de tiempo inminentes

El sistema de controles parentales activará un evento de advertencia en 15 minutos y de nuevo a 1 minuto antes de cerrar sesión de un usuario controlado en función de las restricciones de tiempo. Las aplicaciones pueden suscribirse a estos eventos, especialmente cuando se ejecutan en modo de pantalla completa de DirectX donde no se muestran las notificaciones estándar de Windows. Se proporciona código de ejemplo que muestra cómo suscribirse a los eventos, registrar una función de devolución de llamada y recibir los eventos.

Información general sobre las características de extensibilidad de controles parentales

EVENT_DATA_DESCRIPTOR

EventDataDescCreate

WPC_ARGS_CONVERSATIONINITEVENT