Verwenden von Protokollierungs-APIs für Jugendschutz
Aktivitätsberichte (Protokollierung)
Die WpcEvent.h-Headerdatei enthält Definitionen der Felder für jeden vordefinierten Aktivitätsereignistyp und den benutzerdefinierten Typ. In diesem Beispielcode werden die Schritte zum Protokollieren eines Chatunterhaltungseinladungsereignisses mithilfe der ETW-Veröffentlichungs-API veranschaulicht:
#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);
}
Benutzerdefinierte Protokollierung
Damit eine Anwendung die Ereignisse erweitert, die außerhalb der Gruppe vordefinierter Ereignisse oder des einen benutzerdefinierten Typs protokolliert werden, müssen Sie einen Anbieter dafür im Anwendungsmanifest definieren. Anschließend kann der WPC-Standardkanal importiert und anwendungsdefinierte Ereignisse protokolliert werden.
Protokollierungsrechte
Der WPC-Protokollierungskanal wird von der Zugriffssteuerungsliste (Access Control List , ACL) gesteuert, um vollzugriff nur für Administratoren zu ermöglichen. Nicht-Administratorkonten können in den Kanal schreiben, aber keinen Lese- oder Löschzugriff haben. Der Zugriff auf den Kanal erfolgt über die ETW-API.
Details des Protokollierungsanbieters für Jugendschutz
Der WPC-Anbieter hat den Namen Microsoft.com/Windows/ParentalControls mit der GUID {01090065-B467-4503-9B28-533766761087}. Der lokale Standardprotokollierungskanal ist Microsoft.com/Windows/ParentalControls/LocalEvents.
Protokolldateien werden im Ordner Windows\System32\Wpc\Logs gespeichert.
Benachrichtigung über bevorstehende Abmeldung von Zeitlimits
Das Jugendschutzsystem löst ein Warnereignis nach 15 Minuten und erneut nach 1 Minute aus, bevor sich ein kontrollierter Benutzer basierend auf Zeiteinschränkungen abmeldet. Anwendungen können diese Ereignisse abonnieren, insbesondere wenn sie im DirectX-Vollbildmodus ausgeführt werden, in dem windows-Standardbenachrichtigungen nicht angezeigt werden. Es wird ein Beispielcode bereitgestellt, der zeigt, wie Sie die Ereignisse abonnieren, eine Rückruffunktion registrieren und die Ereignisse empfangen.
Zugehörige Themen