【问题标题】:Querying for Event Log. How to query in order to get the first and last event alone?查询事件日志。如何查询以单独获取第一个和最后一个事件?
【发布时间】:2018-08-18 13:11:58
【问题描述】:

我处理 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

【问题讨论】:

    标签: c++ windows event-log


    【解决方案1】:

    获取最后一个:使用带有参数 EVT_SEEK_FLAGS 枚举的 EvtSeek 函数:

    EvtSeekRelativeToLast 从结果集中的最后一个条目到指定的偏移量。偏移量必须为负值。

    很容易拿到第一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-29
      • 2018-10-20
      • 2021-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多