В документации GetNumberOfEventLogRecords()
:
NumberOfRecords
Указатель на переменную , которая получает количество записей в указанный журнал событий.
Ваша переменная numEvents
является указателем PDWORD
(DWORD*
) со значением 0. Таким образом, вы вызываете GetNumberOfEventLogRecords()
с указателем NULL в своем NumberOfRecords
параметр. Вот на что жалуется ошибка ERROR_INVALID_PARAMETER
- ей некуда записывать количество записей.
Вам нужно передать адрес действительной переменной DWORD
, а не указатель NULL.
Кроме того, вы не должны звонить GetLastError()
после OpenEventLog()
, если только это не произойдет.
Попробуйте:
#include <windows.h>
#include <stdio.h>
#include <strsafe.h>
#define PROVIDER_NAME "System"
void wmain(void)
{
HANDLE hEventLog = NULL;
DWORD numEvents = 0;
...
hEventLog = OpenEventLog(NULL, PROVIDER_NAME);
if (!hEventLog) {
printf("Failed OpenEventLog: %lu\n", GetLastError());
}
else {
if (!GetNumberOfEventLogRecords(hEventLog, &numEvents)) {
printf("Failed GetNumberOfEventLogRecords: %lu\n", GetLastError());
}
else {
...
}
CloseEventLog(hEventLog);
}
}