Работа с Реестром ОС WindowsNT/2000/XP, страница 13

1. Двойное слово DWORD, имеющее имя CategoryCount, хранящее количество категорий, которые приложение собирается записывать в Журнал событий. С его помощью Журнал, читая файл сообщений, начиная с первого сообщения, будет знать, сколько сообщений является категориями.

2. Пара параметр-значение с именем TypesSupported, имеющая тип данных DWORD. Она присутствует в разделе источника, который имеет значение равное 7.

3. Две пары, указывающие местоположение файла сообщений. Их имена EventMessageFile и CategoryMessageFile. Тип данных — string. Если вы раз били файл сообщений на две библиотеки DLL, один для категорий и одиь для сообщений, значения этих пар должны быть заданы соответствующт образом. Журнал событий использует эти пары для поиска библиотек DLL содержащих строки, которые должны быть отображены.

Можно перевести сообщения в вашей библиотеке DLL на другой язык и поставлять с каждой локализованной версией свою DLL. Таким образом, локализация Журнала событий в значительной степени облегчается.

1.            Откройте Microsoft Developer Studio.

2.            Выберите File >• New.

3.            Щелкните на Project Workspace.

4.            Дайте проекту имя ELogger.

5.            Из списка Туре выберите Console Application.

6.            Щелкните на кнопке Create.

7.            В пустой файл наберите код листинга 5.10.

8.            Сохраните файл с именем Elogger.cpp и подключите его к проекту, выбрав                Insert >• Files into Project и дважды щелкнув на Elogger.cpp.

Листинг 11

// расширения MFC

#include <afx.h>

#include <afxext.h>

#include <afxwin.h>

#include <iostream.h>

#include <basetyps.h>

// Это файл заголовка, созданный  компилятором сообщений

#include "EvntLog.h"

int main(int argc, char*argv[ ], char *envp[ ])

{

HANDLE hEventLog;           //обработчик, возвращенный функцией RegisterEventSource

PSID lpUserSid=NULL;    //идентификатор безопасности пользователя

//(необязательный параметр)

WORD wNumStrings;          //количество строк, объединяемых с сообщением

DWORD dwDataSize=0;   //размер двоичных данных в байтах

LPTSTR IpStrings[1];     //массив строк, объединяемых с сообщением

LPVOID lpRawData=NULL; // адрес двоичных данных

BOOL bReturn;

// Зарегистрировать источник событий, чтобы можно было в него записывать

if (!(hEventLog=RegisterEventSource( NULL, "EvntLog")))

{

delete IpStrings[0]; return (1);

}

// Запись события в виде предупреждения

bReturn=ReportEvent(hEventLog, EVENTLOG_WARNING_TYPE, EVCAT_TESTING, EVMSG_MEMORYl, IpUsersid, 0, dwDataSize, (LPCTSTR *) IpStrings, IpRawData);

// Запись события в виде ошибки

bReturn=ReportEvent(hEventLog, EVENTLOG_ERROR_TYPE, EVCAT_TESTING, EVMSG_MEMORY1, IpUserSid, 0, dwDataSize, (LPCTSTR *)IpStrings, IpRawData);

//            Создать массив строк для записи в Журнал событий

//            Одна созданная строка будет подставлена вместо %1

//            в сообщении для Журнала событий

wNumStrings=l;

IpStrings[0] = new TCHAR[_tcslen("Комментарий к тесту")+!];

_tcscpy(IpStrings[0],"Комментарий к тесту") ;

// Запись события как информационного

bReturn=ReportEvent(hEventLog, EVENTLOG_INFORMATION_TYPE, EVCAT_TESTING, EVMSG_MEMORY2 ,

IpUserSid, wNumStrings, dwDataSize, (LPCTSTR *) IpStrings, IpRawData);

// Прекращение регистрации источника

if (!DeregisterEventSource(hEventLog))

{

delete IpStrings[0];

return (1);

}

delete IpStrings[0];

return(0);

}

Перед компиляцией добавьте поддержку MFC. Далее выполните следующие действия:

1.            Выберите Project >• Settings.

2.            Откройте вкладку General.

3.            В списке Microsot Foundation Classes выберите Use MFC in a Static Library.

4.            Щелкните на кнопке ОК.

Теперь можно скомпилировать программу и запустить ее. В процессе работы приложение Elogger.exe занесет сообщение в Журнал событий, которое можно затем увидеть с помощью программы Просмотр событий из раздела Администрирование.