ペアレンタル コントロールのログ記録 API の使用
アクティビティ レポート (ログ記録)
WpcEvent.h ヘッダー ファイルには、定義済みの各アクティビティ イベントの種類とカスタム型のフィールドの定義が含まれています。 このサンプル コードでは、ETW 発行 API を使用してインスタント メッセージング会話の招待イベントをログに記録する手順を示します。
#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);
}
カスタム ログ
定義済みイベントのセットまたは 1 つのカスタム型の外部でログに記録されたイベントをアプリケーションで拡張するには、そのプロバイダーをアプリケーション マニフェストで定義する必要があります。 その後、WPC の既定のチャネルをインポートし、アプリケーション定義のイベントをログに記録できます。
ログの権限
WPC ログ チャネルは、管理者のみにフル アクセスを提供するために 、アクセス制御リスト (ACL) によって制御されます。 管理者以外のアカウントはチャネルに書き込む可能性がありますが、読み取りアクセスまたは削除アクセス権はありません。 チャネルへのアクセスは、ETW API を使用することです。
ペアレンタル コントロール ログ プロバイダーの詳細
WPC プロバイダーの名前は、GUID {01090065-B467-4503-9B28-533766761087} で Microsoft.com/Windows/ParentalControls。 既定のローカル ログ 記録チャネルは Microsoft.com/Windows/ParentalControls/LocalEvents。
ログ ファイルは、Windows\System32\Wpc\Logs フォルダーに格納されます。
差し迫った時間制限ログアウトの通知
Parental Controls システムは、時間制限に基づいて、制御されたユーザーのログアウト前に 15 分と 1 分後に警告イベントを発生させます。 アプリケーションは、特に標準の Windows 通知が表示されない DirectX 全画面表示モードで実行されている場合に、これらのイベントをサブスクライブできます。 イベントをサブスクライブし、コールバック関数を登録し、イベントを受信する方法を示すサンプル コードが提供されています。
関連トピック