крейта winapi c помощью этого кода
/* imports */
fn main() {
// Get process handle
let handle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, process_id);
// Make array for modules with size of 100
let mut buffer: [*mut HMODULE; 100] = [std::ptr::null_mut::<HMODULE>(); 100];
let result = EnumProcessModules(
handle,
*buffer.as_mut_ptr(),
mem::size_of_val(&buffer) as u32,
null_mut(),
);
println!("Modules: {:?}", buffer.to_vec());
}
Что кажется довольно простым на первый взгляд.
Первая проблема заключается в первом аргументе OpenProcess, с масками доступа PROCESS_QUERY_INFORMATION | PROCESS_VM_READ это вызывает ERROR_NOACCESS - Invalid access to memory location.
Вторая проблема заключается в том, что даже если результат OpenProcess не NULL тогда EnumProcessModules продуцирует ошибку ERROR_ACCESS_DENIED - Access is denied.
Пример кода: https://yaso.su/UBYULyPL
Тут вопрос не по расту а по винапи. Текущий юзер не имеет таких прав видать. Нужно копать в сторону повышения привилегий для текущего процесса, что-то типа adjust privileges.
Винапи вообще в какой-то суперпозиции находится. Я только что снова запустил код и оно работает, я даже не понял что случилось
ну что тут можно сказать. винапи такое винапи... боюсь тут даже синей изолентой не помочь.
Сколько ни работал с винапи оно очень хорошее. Получше позикс по крайней мере
Подобное обычно означает UB.
Обсуждают сегодня