Почему я получаю ERROR_INVALID_PARAMETER при использовании EvtQuery с ящиком для Winapi? - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь прочитать журнал событий Windows, используя EvtQuery и winapi crate .

Я получаю системную ошибку 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);
    }
}

Что я делаю не так?

1 Ответ

2 голосов
/ 16 марта 2019

Параметр flags для EvtQuery должен быть одним или несколькими значениями из перечисления EVT_QUERY_FLAGS.

Вы используете литерал 0, который не существует флага :

typedef enum _EVT_QUERY_FLAGS {
  EvtQueryChannelPath           = 0x1,
  EvtQueryFilePath              = 0x2,
  EvtQueryForwardDirection      = 0x100,
  EvtQueryReverseDirection      = 0x200,
  EvtQueryTolerateQueryErrors   = 0x1000 
} EVT_QUERY_FLAGS;

В вашем случае вы можете использовать EvtQueryChannelPath с числовым значением 1Это выставляется как EvtQueryChannelPath в winapi.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...