Tus*_*abh 0 windows winapi rust psapi windows-rs
我试图使用EnumProcessesWin32 (psapi) 提供的函数枚举 Windows 进程。生活很顺利,所以我使用 Rust 而不是 C++。代码如下。
Cargo.toml
[dependencies.windows]
features = [
"Win32_Foundation",
"Win32_System_ProcessStatus"
]
Run Code Online (Sandbox Code Playgroud)
主程序.rs
use windows::Win32::System::ProcessStatus::*;
fn main() {
unsafe{
let mut cb_needed: u32 = 0;
let mut a_processes: Vec<u32> = Vec::with_capacity(1024);
let result: windows::Win32::Foundation::BOOL = EnumProcesses(a_processes.as_mut_ptr(), 1024*4, &mut cb_needed);
let mut _c_processes: u32 = 0;
_c_processes = cb_needed / 4;
println!("{:?}",_c_processes);
let mut count: u32 = 0;
while count < _c_processes {
println!("{:?}",a_processes[count as usize]);
count += 1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我调试代码时,变量a_processes显示长度为零。然而,变量cb_needed(根据 Microsoft 文档显示返回的字节)返回非零(几乎 200)。变量 result 的值为 1,如果操作成功,则该值为 1。
当我尝试访问 时a_processes[count as usize],它因“索引超出范围”而失败。我尝试以管理员身份执行,仍然失败。知道为什么 a_processes 没有使用进程 ID 进行更新吗?
我正在从 Kenny Kerr 的入门中学习 Rust for Windows]( https://kennykerr.ca/rust-getting-started/ )。我浏览了Microsoftwindows-rs示例中的示例。我还关注了chuondong和lonami的博客。他们使用不同的板条箱,但要求EnumProcesses具有相同的签名。
| 归档时间: |
|
| 查看次数: |
168 次 |
| 最近记录: |