我正在尝试使用 EvtQuery winapi crate阅读Windows事件日志。

我收到系统错误87-ERROR_INVALID_PARAMETER

fn to_vec(str: &str) -> Vec<u16> {
    return std::ffi::OsStr::new(str)
        .encode_wide()
        .chain(Some(0).into_iter())
        .collect();
}

fn read_log() {
    let v = to_vec("System");
    let provider = v.as_ptr();
    let vv = to_vec("*");
    let my_query = vv.as_ptr();
    unsafe {
        let query_read = winapi::um::winevt::EvtQuery(std::ptr::null_mut(), provider, my_query, 0);
        let status = winapi::um::errhandlingapi::GetLastError();
        println!("{}", status);
    }
}

我究竟做错了什么?

最佳答案

EvtQuery的flags参数必须是 EVT_QUERY_FLAGS 枚举中的一个或多个值。
您正在使用文字0,即no existing flag:

typedef enum _EVT_QUERY_FLAGS {
  EvtQueryChannelPath           = 0x1,
  EvtQueryFilePath              = 0x2,
  EvtQueryForwardDirection      = 0x100,
  EvtQueryReverseDirection      = 0x200,
  EvtQueryTolerateQueryErrors   = 0x1000
} EVT_QUERY_FLAGS;
在您的情况下,可以使用数值为1的EvtQueryChannelPath。这在winapi中显示为 EvtQueryChannelPath

关于winapi - 在Winapi crate 中使用EvtQuery时,为什么会收到ERROR_INVALID_PARAMETER?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55195454/

10-15 12:36