Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2016, 14:31   #1
dmitrykzmn
Пользователь
 
Аватар для dmitrykzmn
 
Регистрация: 25.05.2015
Сообщений: 30
По умолчанию Парсинг ошибок из системного журнала system

Здравствуйте. В ОС Windows имеется журнал событий system, где хранятся предупреждения и ошибки. Скажите, пожалуйста, каким образом можно из него вытащить именно ошибки и загнать в строку или символьный массив.
Гуглить пробовал, но так ничего и не понял.
dmitrykzmn вне форума Ответить с цитированием
Старый 12.05.2016, 14:36   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

https://www.google.com/search?q=winapi+read+event+log
https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 12.05.2016, 14:50   #3
dmitrykzmn
Пользователь
 
Аватар для dmitrykzmn
 
Регистрация: 25.05.2015
Сообщений: 30
По умолчанию

Это я смотрел, но мало что понял.
Можете, пожалуйста привести пример кода, как из этого журнала конкретно ошибки вывести в массив строк, к примеру. А дальше я уже на примере разберусь.
Заранее спасибо.
dmitrykzmn вне форума Ответить с цитированием
Старый 12.05.2016, 14:52   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что именно непонятно в документации по второй ссылке?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 12.05.2016, 14:56   #5
dmitrykzmn
Пользователь
 
Аватар для dmitrykzmn
 
Регистрация: 25.05.2015
Сообщений: 30
По умолчанию

BOOL ReadEventLog(
_In_ HANDLE hEventLog,
_In_ DWORD dwReadFlags,
_In_ DWORD dwRecordOffset,
_Out_ LPVOID lpBuffer,
_In_ DWORD nNumberOfBytesToRead,
_Out_ DWORD *pnBytesRead,
_Out_ DWORD *pnMinNumberOfBytesNeeded
);

Например, что за параметры нужно передавать. И если функция возвращает булево значение, то как непосредственно таекст ошибки выявить?
dmitrykzmn вне форума Ответить с цитированием
Старый 12.05.2016, 15:17   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

согласен. с наскоку это не просто.
попробуйте разобрать вот этот пример на C++

Querying for Event Information (Windows)
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.05.2016, 15:20   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Например, что за параметры нужно передавать.
Дык ниже описание всех параметров. Вы его читали?

Цитата:
И если функция возвращает булево значение, то как непосредственно таекст ошибки выявить?
Цитата:
Сообщение от https://msdn.microsoft.com/en-us/library/windows/desktop/aa363674%28v=vs.85%29.aspx
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 12.05.2016 в 15:23.
Alex11223 вне форума Ответить с цитированием
Старый 14.05.2016, 20:17   #8
dmitrykzmn
Пользователь
 
Аватар для dmitrykzmn
 
Регистрация: 25.05.2015
Сообщений: 30
По умолчанию

Попробовал использовать данный код:
Код:
#include "windows.h"
#include "winbase.h"
#include <iostream>
#include <ctime>

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

	HANDLE h;
	EVENTLOGRECORD *pevlr;
	BYTE bBuffer[16384];
	DWORD dwRead, dwNeeded, cRecords, dwThisRecord;

	h = OpenEventLog(0, L"Application");
	if (h == NULL) std::cout << "Error open EventLog\n";
	pevlr = (EVENTLOGRECORD *)&bBuffer;
	GetOldestEventLogRecord(h, &dwThisRecord);
	time_t myt;
	while (ReadEventLog(h,
		EVENTLOG_FORWARDS_READ |
		EVENTLOG_SEQUENTIAL_READ,
		0,
		pevlr,
		16384,
		&dwRead,
		&dwNeeded))
	{
		while (dwRead > 0)
		{
			myt = pevlr->TimeGenerated;
			

			LPTSTR pstr = (LPTSTR)((LPBYTE)pevlr + pevlr->StringOffset);
			for (WORD i = 0; i < pevlr->NumStrings; i++)
			{
				std::wstring message = pstr;
				//std::wcout << message << std::endl;
				pstr += message.length() + 1;
			}

			dwRead -= pevlr->Length;
			pevlr = (EVENTLOGRECORD *)((LPBYTE)pevlr + pevlr->Length);
		}
		pevlr = (EVENTLOGRECORD *)&bBuffer;
	}
}
Однако ругается на строчку std::wcout << message << std::endl;
Ошибка:

2 IntelliSense: отсутствует оператор "<<", соответствующий этим операндам
типы операндов: std::wostream << std::wstring
dmitrykzmn вне форума Ответить с цитированием
Старый 14.05.2016, 20:23   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Код:
#include <string>
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.05.2016, 20:28   #10
dmitrykzmn
Пользователь
 
Аватар для dmitrykzmn
 
Регистрация: 25.05.2015
Сообщений: 30
По умолчанию

Ошибку уже не кидает. Однако на выходе получается пустая консоль без выведенных ошибок из журнала
dmitrykzmn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Необработанное исключение типа "System.ArgumentException" в System.Data.dll max_prorok Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 3 23.09.2014 09:45
C#. Парсинг XML-файла с использованием библиотеки System.xml.linq Gift020 Помощь студентам 5 04.04.2013 13:44
Ошибка Ambiguity between '_fastcall System::operator +(int,const System::Variant &)' and '_fastcall System::opera Jawner C++ Builder 1 12.04.2012 09:58
Возможен ли отлов ошибок "чужих" программ без скана экрана на предмет окон-ошибок? Человек_Борща Общие вопросы Delphi 4 21.04.2011 00:18