HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\Mój Program
EventMessageFile = "path do pliku z MESSAGETABLE resource"
TypesSupported = 0x00000004 // EVENTLOG_INFORMATION_TYPE
EventMessageFile może wskazywać na plik winlogon.exe ponieważ ma on uniwersalny wpis w zasobie MESSAGETABLE: %s, a jego id = 1073742825.
Zasób MESSAGETABLE tworzy się kompilując poniższy skrypt (plik .mc) programem \Visual Studio\Common7\Tools\Bin\mc.exe
Kopiuj
MessageIdTypedef=DWORD
LanguageNames=(English=0x409:MSG00409)
SeverityNames=(Success=0x0:STATUS_SEVERITY_SUCCESS
Informational=0x1:STATUS_SEVERITY_INFORMATIONAL
Warning=0x2:STATUS_SEVERITY_WARNING
Error=0x3:STATUS_SEVERITY_ERROR
)
FacilityNames=(System=0x0:FACILITY_SYSTEM
Runtime=0x2:FACILITY_RUNTIME
Stubs=0x3:FACILITY_STUBS
Io=0x4:FACILITY_IO_ERROR_CODE
)
; // The following are message definitions.
MessageId=1 // to jest MSGSTRINGID dla ReportEvent()
Severity=Success
Facility=System
SymbolicName=MSG_BAD_COMMAND
Language=English
%1 // a to jest stringiem formatującym parametry LPCTSTR psz1[]
.
kompilacja: mc -d nazwa.mc
Zobacz też Message Compiler
Powstały plik .bin (tu: MSG00409.bin) dołączasz do pliku .rc jako1 MESSAGETABLE "MSG00409.bin"
Gdybyś chciał użyć pasywnie winlogona, to napisz tak (w logu będzie widoczny jako winlogon)
Kopiuj
#include <windows.h>
int main()
{
#define PARAMCOUNT 1
LPCTSTR psz1[PARAMCOUNT] = {TEXT("4programmers.net/Forum")};
HANDLE h = RegisterEventSource(0, TEXT("winlogon"));
#define LOGTYPE EVENTLOG_INFORMATION_TYPE
#define CATEGORY 0
#define DATALEN 0
#define DATAPTR 0
#define MSGSTRINGID 1073742825
#define USERSID 0
ReportEvent(h, LOGTYPE, CATEGORY, MSGSTRINGID, USERSID, PARAMCOUNT, DATALEN, psz1, DATAPTR);
DeregisterEventSource(h);
}
Gdybyś chciał użyć swojego zasobu, to zmień string w RegisterEventSource na "Mój Program" i MSGSTRINGID (tu: na 1)