(刚发原贴内容时,发现不能加表情,以为重新编辑一下贴子,进入高级模式就可以加表情了,结果还是没有找到)
抽空分析了任务管理器的“结束进程树 ”功能,并实现了后(以前不做这个功能,以为是有什么相关的专用 API,后来分析了任务管理器 才发现没有,它考虑得很全面,感觉是系统中出现多个相同PID的进程也考虑了,个人感觉不会出现这个情况,先按任务管理器的方法来写吧, 还有,个人感觉WIN 7 任务管理器,当时按理是按兼容XP等旧系统来写的,部份进程访问权限方面,在 WIN 10 上不适用了)。
后来又无聊,看看进程方面有什么功能,任务管理器中有的,我未做过的,后来发现,有一个“UAC虚拟化”菜单。给我的第一感觉就是,只要这个菜单如果能启用,一点就可以启用 “UAC虚拟化”。因为有定义VIRTUALIZATION_ENABLED 这个枚举值。 (我本身对UAC虚拟化不了解,以前只做过检测进程是否启用了“UAC虚拟化 ”。 )
所以把整个系统所有进程都点了右键菜单来测试,看看有什么进程可以让这个禁用 状态的右键菜单可用,结果发现,没有一个进程是能让这个菜单激活的,就是说,这个菜单一直是禁用状态。
后来分析了一下 Win 7 任务管理器相关实现,结果发现,点菜单时,疑似传入的值,是 0(VIRTUALIZATION_UNKNOWN ), 相关调用是 SetTokenInformation(hToken, TokenVirtualizationEnabled, 0 ), 而不是我所想的 SetTokenInformation( VIRTUALIZATION_ENABLED ),后来不断分析,都没有找到有直接调用 VIRTUALIZATION_ENABLED 。
只找到了以下线索:
1、从它保存的进程信息数组指针中,查询这个进程的一个枚举值,如果是 VIRTUALIZATION_UNKNOWN 或 VIRTUALIZATION_NOTALLOWED, 把这个菜单设置为禁用状态,相关调用:EnableMenuItem(“UAC虚拟化”菜单, MF_GRAYED or MF_DISABLED or MF_BYCOMMAND)。
2、如果这个枚举值是 VIRTUALIZATION_ENABLED ,为这个右键菜单增加“选中标记 ” ,CheckMenuItem(MF_CHECKED),没有发现激活菜单的调用。
但又疑似 做了菜单点击的相关实现细节:
如果点击这个“UAC虚拟化”菜单,调用 SetTokenInformation(hToken, TokenVirtualizationEnabled, 0),设置为“未知 ”状态?并保存这个进程指向的数据的自定义虚拟化枚举值为“真 ”。(这样只有它内部生效?)
type // 虚拟化枚举值
{$Z4}
TVIRTUALIZATION = (
VIRTUALIZATION_UNKNOWN = 0, // 未知
VIRTUALIZATION_NOTALLOWED = 1, // 不允许
VIRTUALIZATION_DISABLED = 2, // 已禁用
VIRTUALIZATION_ENABLED = 3, // 已启用
VIRTUALIZATION_COUNT
);
{$Z1}
//疑似菜单点击的相关功能实现:
function xxVirtualization(const dwPID : DWORD; {忽略CreateTime : LONGLONG} const Virt : TVIRTUALIZATION): DWORD;
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 3天前
被kagayaki编辑
,原因: