Uso delle API di registrazione per i controlli genitori

Report attività (registrazione)

Il file di intestazione WpcEvent.h contiene definizioni dei campi per ogni tipo di evento di attività predefinito e il tipo personalizzato. Questo codice di esempio illustra i passaggi per registrare un evento di invito alla conversazione di messaggistica istantanea usando l'API di pubblicazione 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);
}

Registrazione personalizzata

Per estendere gli eventi registrati all'esterno del set di eventi predefiniti o di un tipo personalizzato, è necessario definire un provider per tale elemento nel manifesto dell'applicazione. Il canale predefinito WPC può quindi essere importato e gli eventi definiti dall'applicazione possono quindi essere registrati.

Diritti di registrazione

Il canale di registrazione WPC è controllato dall'elenco di controllo di accesso (ACL) per fornire l'accesso completo solo agli amministratori. Gli account non amministratori possono scrivere nel canale, ma non hanno accesso in lettura o eliminazione. L'accesso al canale è tramite l'API ETW.

Dettagli del provider di registrazione dei controlli genitori

Il provider WPC è denominato Microsoft.com/Windows/ParentalControls con GUID {01090065-B467-4503-9B28-533766761087}. Il canale di registrazione locale predefinito è Microsoft.com/Windows/ParentalControls/LocalEvents.

I file di log vengono archiviati nella cartella Windows\System32\Wpc\Logs.

Notifica del logout tempo in sospeso

Il sistema Controlli genitori attiva un evento di avviso a 15 minuti e di nuovo a 1 minuto prima dell'accesso di un utente controllato in base alle restrizioni temporali. Le applicazioni possono sottoscrivere questi eventi, soprattutto quando vengono eseguite in modalità schermo intero DirectX in cui le notifiche standard di Windows non vengono visualizzate. Il codice di esempio viene fornito che illustra come sottoscrivere gli eventi, registrare una funzione di callback e ricevere gli eventi.

Panoramica delle funzionalità di estendibilità dei controlli genitori

EVENT_DATA_DESCRIPTOR

EventDataDescCreate

WPC_ARGS_CONVERSATIONINITEVENT