7. Скомпилируйте файл EvtLog.def, выбрав Build > Build EvtLog.exe.
8. Зарегистрируйте исполняемый файл, введя с клавиатуры командную строку
regsvr32 EvntLog.dll
Следует перейти в каталог, где находится EvtLog.exe.
В листинге 10 также реализована функция DllUnregisterServer, что позволит вам в последствии удалить записи из Реестра.
Листинг 10
#include <afx.h>
// расширения MFC |
#include <afxext.h>
#include <afxwin.h>
#include <iostream.h>
#include <basetyps.h>
STDAPI DllRegisterServer(void)
{
DWORD dwAllocBufferLength=500;
LPTSTR IpszBuffer = new TCHAR[dwAllocBufferLength];
HKEY hKey=HKEY_LOCAL_MACHINE; // обработчик открытого раздела
HKEYhkResultl; // адрес обработчика открытого раздела
HKEY hkResult2; // адрес обработчика открытого раздела
DWORD u!0ptions=0;
REGSAM samDesired=KEY_ALL_ACCESS;
DWORD Reserved=0; DWORD dwTypesSupported=7;
DWORD dwCategoryCount=l;
// Получить информацию о расположении файла DLL
if (!GetCurrentDirectory(dWAllocBufferLength, IpszBuffer)) goto Error;
_tcscat (IpszBuffer, "\\EvntLog.dll");
// Настройки Реестра, связанные с протоколированием событий
if (RegOpenKeyEx(hKey, "SYSTEM\\CurrentControlSet\\Services\\EventLog\\
Application", ulOptions, samDesired, ShkResultl)!=ERROR_SUCCESS) goto Error;
if (RegCreateKey(hkResultl, "EvntLog", &hkResult2) !=ERROR_SUCCESS)
{RegCloseKey(hkResultl) ;
goto Error;
}
if (RegSetValueEx(hkResult2, "EventMessageFile", Reserved, REG_EXPAND_SZ, (CONST BYTE *)IpszBuffer, _tcslen(IpszBuffer)) != ERROR_SUCCESS)
{
RegCloseKey(hkResultl);
RegCloseKey(hkResult2);
goto Error;
}
if (RegSetValueEx(hkResult2, "CategoryMessageFile", Reserved, REG_EXPAND_SZ,
(CONST BYTE *)IpszBuffer, _tcslen(IpszBuffer))!= ERROR_SUCCESS)
{
RegCloseKey(hkResultl); RegCloseKey(hkResult2); goto Error;
}
if (RegSetValueEx(hkResult2, "TypesSupported", Reserved, REG_DWORD,
(CONST BYTE *)SdwTypesSupported, sizeof(DWORD)) != ERROR_SUCCESS)
{
RegCloseKey(hkResultl); RegCloseKey(hkResult2); goto Error;
}
if (RegSetValueEx(hkResult2, "CategoryCount",
Reserved, REG_DWORD, (CONST BYTE *)SdwCategoryCount,
sizeof(DWORD))!= ERROR_SUCCESS)
{
RegCloseKey(hkResultl) ;
RegCloseKey(hkResult2);
goto Error;
}
RegCloseKey(hkResultl) ; RegCloseKey(hkResult2) ;
delete IpszBuffer; return(S_OK);
Error:
delete IpszBuffer.
return(E_UNEXPECTED) ;
}
STDAPI DllUnregisterServer(void)
{
if (RegDeleteKey(HKEY_LOCAL_MACHINE,
"SYSTEMX\CurrentControlSet\\Services\\EventLog\\
Application\\EvE)tLog"
) )
{
return (E_UNEXPECTED);
}
return (S_OK);
}
Записи Реестра, внесенные при регистрации EvntLog.dll
Настало время поговорить о записях Реестра, созданных при регистрации библиотеки EvntLog.dll.
Для того чтобы Журнал событий вызвал вашу DLL, в область Реестра, относящуюся к Журналу, необходимо поместить соответствующую запись. Для добавления приложения следует создать раздел в HKEY_LOCAL_MACHINE\ SYSTEM\ CurrentControlSet\ Semces\EventLog\Application\<Имя>, который будет хранить информацию из библиотеки DLL. Здесь <Имя> — это имя приложения. Например, мы создали раздел HKEY_LOCAL_MACHINE\ SYSTEM\ CurrentControlSet\Services\ EventLog\ Application\ EventLog.
Вы можете создать подраздел в системной области в HKEY_LOCAL_MACHINE\ SYSTEM\CurrentControlSet\Services\EventLog\System и в области безопасности HKEY_LOCAL_MACHINE\ SYSTEM\ CurrentControlSet\Services\EventLog\ Security.
Имя созданного раздела будет именем источника в Журнале событий. Независимо от того, находится ли подраздел, относящийся к Журналу, в разделе безопасности, приложений или системном разделе, он должен иметь следующие четыре пары параметр-значение:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.