Запрос для журнала событий. Как сделать запрос, чтобы получить первое и последнее событие в одиночку?

Я имел дело с журналами событий Windows некоторое время. Я собираю журналы, используя EvtQuery() функция.

Я не привык к языку запросов. Мне удалось собрать все данные и обработать их, используя EvtRender() функция.

Мне нужно, чтобы получить конкретные данные. То есть мне нужно добавить фильтр в запрос, чтобы я мог получить только первые и последние данные. Может кто-нибудь помочь мне с этим?

редактировать

Вот что я попробовал. Как я уже говорил, я не привык к языку запросов. Я просто не опубликовал программу, так как не нашел ее релевантной заданному вопросу. Я могу получить полные журналы с помощью программы. Просто мне не нужны все данные.

DWORD PrintResults(EVT_HANDLE hResults);
DWORD PrintEventValues(EVT_HANDLE hEvent);

void main() {

DWORD status = ERROR_SUCCESS;
EVT_HANDLE hResults = NULL;
const wchar_t *channelPath = L"Security";
const wchar_t *query = L"*";

//Remote handle
EVT_HANDLE hRemoteHandle;
EVT_RPC_LOGIN Credentials;
RtlZeroMemory(&Credentials, sizeof(EVT_RPC_LOGIN));

wstring comp_name = L"<ip>";
wstring user_name = L"<username>";
wstring password = L"<password>";

Credentials.Server = &comp_name[0];
Credentials.Domain = NULL;
Credentials.User = &user_name[0];
Credentials.Password = &password[0];
Credentials.Flags = EvtRpcLoginAuthNTLM;
hRemoteHandle = EvtOpenSession(EvtRpcLogin, &Credentials, 0, 0);

hResults = EvtQuery(hRemoteHandle , channelPath, query, EvtQueryChannelPath|
EvtQueryForwardDirection);
if (hResults == NULL) {                             //Check for an error
status = GetLastError();
if (status == ERROR_EVT_CHANNEL_NOT_FOUND)
cout << "ERROR : Channel not found...\n";
else if (status == ERROR_EVT_INVALID_QUERY)
cout << "ERROR : Invalid Query...\n";
else
cout << "ERROR STATUS : " << status;
goto Cleanup;
}

PrintResults(hResults);

Cleanup:
if (hResults)
EvtClose(hResults);
cin.get();

}

DWORD PrintResults(EVT_HANDLE hResults) {........} //Function defined

DWORD PrintEventValues(EVT_HANDLE hEvent){........} //Function defined

0

Решение

Получите последнее: используйте функцию EvtSeek с параметром EVT_SEEK_FLAGS. Перечисление говорит:

EvtSeekRelativeToLast Поиск указанного смещения из последней записи в наборе результатов. Смещение должно быть отрицательным значением.

Легко получить первым.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector