我正在尝试使用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);
}
}
我在做什么错了?
答案 0 :(得分:2)
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
。