RegisterEventSource 書き込み用にイベントログをオープン

Cの宣言:

HANDLE RegisterEventSource(
	LPCTSTR ServerName, 
	LPCTSTR SourceName);

説明:

イベントログの書き込み用にイベントログをオープンする。

本関数はNTで使用可能。

本関数によってオープンしたイベントログをクローズするには、DeregisterEventSourceを使用する。

引数の意味は以下の通り。
ServerName オープンするイベントログが存在するサーバのUNC名。NULLを指定した場合、ローカルマシンが指定されたものとみなされる。
SourceName イベントのソース名。ReportEventによってイベントを書き込む際にこの情報が参照される。

戻り値は、オープンした結果のイベントログのハンドルである。関数の実行に失敗した場合、NULLが返される。

Cのサンプル:

イベントログにイベントを書き込む。 本サンプルを実行するには、まずtest.mcをメッセージコンパイラでコンパイルする(DOSプロンプトで「mc test.mc」を実行)。次に、生成されたtest.rcファイルをプロジェクトに追加し、コンパイルを行なう。(生成されたヘッダファイルやバイナリファイルなども参照可能でなければならない)。次に、レジストリのHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Applicationというキーに"Test"という名前のサブキーを作成し(通常管理者権限が必要)、REG_EXPAND_SZ型の"EventMessageFile"という名前のレジストリ値と、REG_DWORD型の"TypesSupported"という名前のレジストリ値を作成する。EventMessageFileの値は、作成したEXEのファイルパスである。TypesSupportedは5としておく。最後に、EXEを実行すると二つのイベントがApplicationログに記録される。
-------------------------------- test.mc --------------------------------
LanguageNames = (English=0x409:MSG00409)
LanguageNames = (Japanese=0x411:MSG00411)

MessageId = 1
Severity = Error
Facility = Application
SymbolicName = MSG_MEMORY_ERROR
Language = English
Memory Error.
.
Language = Japanese
メモリエラー。
.

MessageId = 2
Severity = Informational
Facility = Application
SymbolicName = MSG_FILE_NOT_FOUND

Language = English
File %1 is not equal to %2.
.
Language = Japanese
ファイル"%1"は"%2"と異なる。
.

-------------------------------- test.c --------------------------------
#include "test.h"

/* イベントログへ書き込み */
void WriteLog(void)
{
	HANDLE hEventLog;
	BOOL bResult;
	char *FileNotFoundArgs[] = {
		"src.dat",
		"dest.dat"
	};

	/* イベントログのオープン */
	hEventLog = RegisterEventSource(NULL, "Test");
	if(hEventLog == NULL) printf("event log can not open.\n");

	/* イベントログへ書き込みその1 */
	bResult = ReportEvent(
		hEventLog,
		EVENTLOG_ERROR_TYPE,
		0,
		MSG_MEMORY_ERROR,
		NULL,
		0,
		0,
		NULL,
		NULL);

	if(!bResult) printf("event1 can not write.\n");

	/* イベントログへ書き込みその2 */
	bResult = ReportEvent(
		hEventLog,
		EVENTLOG_INFORMATION_TYPE,
		0,
		MSG_FILE_NOT_FOUND,
		NULL,
		2,
		0,
		FileNotFoundArgs,
		NULL);		

	if(!bResult) printf("event2 can not write.\n");

	/* イベントログのクローズ */
	DeregisterEventSource(hEventLog);
}
(original text:2000/01/14 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。