информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] Как записать entry в EventLog не перекомпилируя ресурсный message файл 19.07.07 05:10  Число просмотров: 1980
Автор: void <Grebnev Valery> Статус: Elderman
<"чистая" ссылка>
Как известно, стандартная процедура включает описание текстового сообщения для каждого MessageId в .mc файле:

MessageId = 100
SymbolicName = EVMSG_INSTALLED
Language = English
The service was installed.

Однако легко увидеть, что для .NET аппликаций мессадж файл не перекомпилируется для любых юзеровских ID и сообщений.

Интересно то, что если "подсунуть" этот единый для .NET аппликаций DLL-модуль сообщений, C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll, для Win32 аппликации, то можно также записывать любые текстовые собщения для любых ID.

Например, WriteEventLog(EVENTLOG_INFORMATION_TYPE, EVMSG_ERROR, _T("some_service")) будет отправлять вполне нормальные сообщения в EventLog, где:

bool WriteEventLog(WORD wType, DWORD dwID, LPCTSTR msg)
{
bool rc = true;
HANDLE hEventSource = ::RegisterEventSource(NULL, _T("MyEvent"));

if (hEventSource) {
LPCTSTR strings[] = {msg};
if ( ! ::ReportEvent(
hEventSource, /* Handle of event source */
wType, /* Event type */
0, /* Event category */
dwID, /* Event identifier */
NULL, /* User Security IDentifer */
1, /* Number of strings to merge with message */
0, /* Size of binary data (in bytes) */
strings, /* Array of strings to merge with message */
NULL) /* Address of binary data */
)
rc = false;
::DeregisterEventSource( hEventSource );
}
else
rc = false;
return rc;
}

Вопрос:

Кто может подсказать, как написать .MC файл, чтобы без его перекомпилляции можно было
записывать в Windows EventLogлюбыекомбинации (ID, MESSAGE)?

Несложные эксперименты с мессадж файл C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll пдсказывают, что скорее всего Microsoft включил (зарезервировал) ну просто огромный блок типа:

MessageId = 1
Language = English
%1
.

MessageId =
Language = English
%1
.

< и т.д. до офигения, типа >

MessageId = 10000
Language = English
%1
.

Кто может подтвердить, что так и есть? Типа самый копи-пэйстнутый копи-пейст от Microsoft? ;)))

Спасибо.
<programming> Поиск 
  • [Win32] Как записать entry в EventLog не перекомпи... - void 19.07.07 05:10 [1980]






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach