Utilisation des API de journalisation pour le contrôle parental
Rapports d’activité (journalisation)
Le fichier d’en-tête WpcEvent.h contient des définitions des champs pour chaque type d’événement d’activité prédéfini et le type personnalisé. Cet exemple de code montre les étapes de journalisation d’un événement d’invitation à une conversation de messagerie instantanée à l’aide de l’API de publication 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);
}
Journalisation personnalisée
Pour qu’une application étende les événements consignés en dehors de l’ensemble d’événements prédéfinis ou d’un type personnalisé, vous devez définir un fournisseur pour cela dans le manifeste de l’application. Le canal par défaut WPC peut ensuite être importé et les événements définis par l’application peuvent ensuite être consignés.
Droits de journalisation
Le canal de journalisation WPC est contrôlé par la liste de contrôle d’accès (ACL) pour fournir un accès complet aux administrateurs uniquement. Les comptes non administrateurs peuvent écrire dans le canal, mais n’ont pas d’accès en lecture ou en suppression. L’accès au canal se fait à l’aide de l’API ETW.
Détails du fournisseur de journalisation des contrôles parentaux
Le fournisseur WPC est nommé Microsoft.com/Windows/ParentalControls avec le GUID {01090065-B467-4503-9B28-5337666761087}. Le canal de journalisation local par défaut est Microsoft.com/Windows/ParentalControls/LocalEvents.
Les fichiers journaux sont stockés dans le dossier Windows\System32\Wpc\Logs.
Notification de déconnexion des limites de temps imminentes
Le système de contrôle parental déclenche un événement d’avertissement à 15 minutes et à nouveau à 1 minute avant la déconnexion d’un utilisateur contrôlé en fonction des restrictions de temps. Les applications peuvent s’abonner à ces événements, en particulier lorsqu’elles s’exécutent en mode plein écran DirectX où les notifications Windows standard ne sont pas affichées. Un exemple de code montrant comment s’abonner aux événements, inscrire une fonction de rappel et recevoir les événements est fourni.
Rubriques connexes