屏蔽托盘右键菜单

news2024/9/24 9:18:57

最近有个需求需要屏蔽托盘图标的右下角菜单项:

       经过Apimonitor进行hook Explorer进程,发现弹出菜单是通过explorer调用InserMenuItem函数来实现的。通过注入explorer并挂钩InserMenuItemW函数,并屏蔽自己想要屏蔽的菜单项:

(上图将“弹出Standard Enhanced PCI to USb Host Controller”以及“弹出Standard Universal PCI to USb Host Controller”两个Menu项屏蔽了)

hook代码大概如下:

static BOOL(WINAPI* OrgInsertMenuItemW)(
    HMENU            hmenu,
    UINT             item,
    BOOL             fByPosition,
    LPCMENUITEMINFOW lpmi
) = InsertMenuItemW;

BOOL WINAPI NewInsertMenuItemW(
    HMENU            hmenu,
    UINT             item,
    BOOL             fByPosition,
    LPCMENUITEMINFOW lpmi
)
{
    wchar_t szBuf[200] = { 0 };
    wsprintf(szBuf, L"NewInsertMenuItemW, item:%d fByPosition:%d dwTypeData:%s  ", item, fByPosition, lpmi->dwTypeData);
    OutputDebugStringW(szBuf);
    if (lpmi->dwTypeData && wcsstr(lpmi->dwTypeData, L"USB Host Controller"))
    {
        OutputDebugStringW(L"will shield this menu");
        return TRUE;
    }
    return OrgInsertMenuItemW(hmenu, item, fByPosition, lpmi);
}

bool HookMenu()
{
    // 相关的初始化信息
    DetourTransactionBegin();
    // 更新线程信息
    DetourUpdateThread(GetCurrentThread());

    DetourAttach(&(PVOID&)OrgInsertMenuItemW, NewInsertMenuItemW);
    return NO_ERROR == DetourTransactionCommit();
}

但这个Item是从哪里来的呢,在自己的代码里面打上断点,用ida Attach到Explorer进程,并打印所有堆栈,然后找到自己的那个线程堆栈:

 跳转转到stobject!DllCanUnloadNow+0xc294:

       InsertMenuItem的字符串变量dwTypeData来自v59:v48.dwTypeData = v59; 而v59来自:sub_7FFB7D7FD3CC(v59, 260i64, v54, pszIconPath);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/823112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023-08-01 LeetCode每日一题(英雄的力量)

2023-08-01每日一题 一、题目编号 2681. 英雄的力量二、题目链接 点击跳转到题目位置 三、题目描述 给你一个下标从 0 开始的整数数组 nums ,它表示英雄的能力值。如果我们选出一部分英雄,这组英雄的 力量 定义为: i0 ,i1 &…

【ARM Coresight 系列文章 2.5 - Coresight 寄存器:PIDR0-PIDR7,CIDR0-CIDR3 介绍】

文章目录 1.1 JEDEC 与 JEP1061.2 PIDR0-PIDR7(peripheral identification registers)1.2 CIDR0-CIDR3(Component Identification Registers) 1.1 JEDEC 与 JEP106 JEDEC和JEP106都是来自美国电子工业联合会(JEDEC,Joint Electron Device Engineering C…

Kafka3.0.0版本——Broker(总体工作流程)

目录 一、Kafka中Broker总体工作流程图解二、Kafka中Broker总体工作流程步骤解析 一、Kafka中Broker总体工作流程图解 总体工作流程图解 二、Kafka中Broker总体工作流程步骤解析 1、broker启动后在zk中注册,如下图所示: 2、controller谁先注册&…

Java面向对象之UML类图

UML类图 表示 public 类型, - 表示 private 类型,#表示protected类型方法的写法:方法的类型(、-) 方法名(参数名: 参数类型):返回值类型

Windows下安装Spark(亲测成功安装)

Windows下安装Spark 一、Spark安装前提1.1、JDK安装(version:1.8)1.1.1、JDK官网下载1.1.2、JDK网盘下载1.1.3、JDK安装 1.2、Scala安装(version:2.11.12)1.2.1、Scala官网下载1.2.2、Scala网盘下载1.2.3、…

3DEXPERIENCE用户角色 | Structural Mechanics Engineer 结构力学工程师

真实条件下实施复杂的线性和非线性分析 直观验证设计并更快地做出产品决策 Structural Mechanics Engineer 在基于云的 3DEXPERIENCE 平台上构建,您可对产品行为执行结构线性和非线性静态、低速和高速动态和热仿真。具备材料校准功能,有助于确保材料行为…

wine意大利红酒数据标准化案例

1.数据和环境准备 将通过意大利红酒的部分数据,调用scikit-learn包(sklearn)分别实现0-1标准化和z-score标准化,总结学习这两种标准化方法的特点。 本案例使用的环境为Anaconda Jupyter notebook。 2.数据说明 我们使用的是U…

基于FPGA的超声波测距——UART串口输出

文章目录 前言一、超声波模块介绍1、产品特点2、超声波模块的时序图 二、系统设计1、系统模块框图2、RTL视图 三、源码1、div_clk_us(1us的分频)2、产生驱动超声波的信号3、串口发送模块4、HC_SR04_uart(顶层文件) 四、效果五、总结六、参考资料 前言 环境: 1、Quar…

linux安装python和部署Django项目

文章目录 1 python安装2 Django项目部署 1 python安装 官网地址:https://www.python.org/ 本次下载的python安装包地址:https://www.python.org/ftp/python/3.8.16/Python-3.8.16.tgz 解压下载的python压缩包 [rootlocalhost software]# tar -zxvf P…

Python(五十五)列表元素的修改操作

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

【LeetCode】446. 等差数列划分II -- 子序列

题目链接 文章目录 1. 思路讲解1.1 dp表的创建1.2 状态转移方程1.3 使用哈希表找到k1.4 初始化1.5 返回值1.6 该题坑爹的一点 2. 代码编写 1. 思路讲解 我们要知道以某个位置为结尾的子序列的数量,可以通过它的以上一位置的为结尾的子序列的数量得知,也…

如何微调医疗大模型llm:llama2学习笔记

三个微调方向:简单医疗问答 临床问答 影像学 一般流程: 1 数据集准备 2 模型基座选择 3 微调 4 案例拆解 1 数据集准备:两种类型,一种文本一种影像 扩展,多模态 2 模型基座选择 多模态处理所有视频,文本…

IntelliJ IDEA快捷键大全 + 动图演示!

一、构建/编译 Ctrl F9:构建项目该快捷键,等同于菜单【Build】—>【Build Project】 执行该命令后,IntelliJ IDEA 会编译项目中所有类,并将编译结果输出到out目录中。IntelliJ IDEA 支持增量构建,会在上次构建的基…

Delphi命令行执行优化 - 使用TDosCommand

TDosCommand 是 Delphi 的一个开源组件,可以在 Delphi 程序中方便地运行 DOS 命令,并获取其输出结果。在本文中,我们将介绍 TDosCommand 组件的用法,并演示如何使用它来运行 DOS 命令。 ## 安装 TDosCommand 组件 下载&#xff…

Linux学习之一次性计划任务at

计划任务: 让计算机在指定的时间运行程序的任务 计划任务的分类: 1)一次性计划任务 2)周期性计划任务 先来讲讲一次性执行任务at。执行at 18:32报错-bash: at: command not found。 yum install -y at安装at。 at 18:32后边按下…

【算法提高:动态规划】1.4 状态机模型 TODO

文章目录 例题列表1049. 大盗阿福(其实就是打家劫舍)1057. 股票买卖 IV(k笔交易)1058. 股票买卖 V(冷冻期)1052. 设计密码⭐⭐⭐🚹🚹🚹(TODO)1053…

SpringBoot集成MyBatisPlus+MySQL(超详细)

前言 查看此文章前强烈建议先看这篇文章:Java江湖路 | 专栏目录 该文章纪录的是SpringBoot快速集成MyBatis Plus,每一步都有记录,争取每一位看该文章的小伙伴都能操作成功。达到自己想要的效果~ 文章目录 前言1、什么是MyBatisPlus2、Spring…

【Uniapp 的APP热更新】

Uniapp 的APP热更新功能依赖于其打包工具 HBuilder,具体步骤如下: 1. 在 HBuilder 中构建并打包出应用程序 具体步骤: 1.点击发行,点击制作wgt包 2.根据需求修改文件储存路径和其他配置,点击确定 3.等待打包完成&a…

Linux第一个小程序-进度条(缓冲区概念)

1.\r和\n C语言中有很多字符 a.可显字符 b.控制字符 对于回车其实有两个动作,首先换行,在将光标指向最左侧 \r :回车 \n:换行 下面举个例子: 把\n去掉会怎样 什么都没输出。为什么? 2.缓冲区概念 观察下两个…

05、性能分析思路?

工具操作:包括压力工具、监控工具、剖析工具、调试工具。数值理解:包括上面工具中所有输出的数据。趋势分析、相关性分析、证据链分析:就是理解了工具产生的数值之后,还要把它们的逻辑关系想明白。这才是性能测试分析中最重要的一…