当前位置: 首页 > article >正文

Rust调用Windows API制作进程挂起工具

一个 sysinternals/pssuspend 替代工具,用于在Windows上挂起/恢复指定PID的进程。目前只能使用未公开的系统API来实现,底层使用了ntdll.dll,完整项目见Github。

use ntapi::ntpsapi::{NtResumeProcess, NtSuspendProcess};
use winapi::{
    shared::ntdef::NULL,
    um::{processthreadsapi::OpenProcess, winnt::PROCESS_SUSPEND_RESUME},
};

fn suspend_process(pid: u32) -> bool {
    let process_handle = unsafe { OpenProcess(PROCESS_SUSPEND_RESUME, 0, pid) };
    if process_handle == NULL {
        return false;
    }
    let suspend_status = unsafe { NtSuspendProcess(process_handle) };
    suspend_status == 0
}
fn resume_process(pid: u32) -> bool {
    let process_handle = unsafe { OpenProcess(PROCESS_SUSPEND_RESUME, 0, pid) };
    if process_handle == NULL {
        return false;
    }
    let resume_status = unsafe { NtResumeProcess(process_handle) };
    resume_status == 0
}

fn main() {
    let args: Vec<String> = std::env::args().collect();
    // dbg!(&args);
    match args.len() {
        2 => {
            let pid = args[1].parse::<u32>().expect("failed to parse pid!");
            if suspend_process(pid) {
                println!("process {} has been suspended successfully!", pid);
            } else {
                println!("failed to suspend process {}", pid);
            }
        }
        3 => {
            assert!(args[1].as_str() == "-r");
            let pid = args[2].parse::<u32>().expect("failed to parse pid!");
            if resume_process(pid) {
                println!("process {} has been resumed successfully!", pid);
            } else {
                println!("failed to resume process {}", pid);
            }
        }
        _ => println!("uncorrect input args!"),
    }
}


http://www.kler.cn/a/502517.html

相关文章:

  • Docker安装和卸载(centos)
  • RCE漏洞
  • 【Go】:图片上添加水印的全面指南——从基础到高级特性
  • 互联网架构变迁:从 TCP/IP “呼叫” 到 NDN “内容分发” 的逐浪之旅
  • Stable Diffusion本地部署教程(附安装包)
  • python异常机制
  • python bs4 selenium 查找a href=javascript:();的实际点击事件和url
  • 后端:Spring(IOC、AOP)
  • DHCP详解和部署
  • 电脑分辨率调到为多少最佳?电脑分辨率最佳设置
  • 17.C语言输入输出函数详解:从缓存原理到常用函数用法
  • 深入详解人工智能自然语言处理(NLP)之文本处理:分词、词性标注、命名实体识别
  • R语言的面向对象编程
  • MMDetection框架下的常见目标检测与分割模型综述与实践指南
  • 【数字化】华为-用变革的方法确保规划落地
  • 【Linux】Linux常见指令(下)
  • Flutter pubspec.yaml 使用方式
  • 重回C语言之老兵重装上阵(四)vscode配置C语言多文件编译运行
  • Cython全教程2 多种定义方式
  • 浏览器输入http形式网址后自动跳转https解决方法
  • 【Vue实战】Vuex 和 Axios 拦截器设置全局 Loading
  • 2024年11月架构设计师综合知识真题回顾,附参考答案、解析及所涉知识点(一)
  • iOS开发基础109-网络安全
  • Python脚本自动发送电子邮件
  • 【JAVA面试】java权限修饰符
  • STM32-Flash存储