最近在参与公司一个PDF后缀名保护的驱动项目,这个驱动在win7上能稳定的保护.pdf后缀文件使用我们自己设定的PDF阅读器,而不会被其他PDF阅读器肆意篡改关联。
但是有意思的是,在win10上这个驱动并不能起到保护作用,其原因是win10系统自带了Microsoft Edge这个“流氓软件”,之所以叫它“流氓软件”主要有两个原因。
其一:功能鸡肋,该软件能打开.html、.pdf等后缀格式文件,但是打开网页的话,被Chrome各方面碾压,而且国内估计有90%的用户都不会使用Edge浏览网页。
其二:网上很多网友抱怨,自己修改了默认的后缀名打开方式,但是一段时间过后win10又会自动将默认方式改为Edge,而且这个软件是win10自带的,并不能通过常规途径卸载,所以网友对这个软件一向评价不高。
经过实验,我们每次通过hash解密过后,抢夺对.pdf后缀名文件的控制权,但是每次打开pdf后缀文件都会默认使用Edge,之所以是这样是因为win10系统将Edge这个软件设为最高优先级,每次抢夺后缀打开方式,ProId键的值都会指向AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723这个值,而这个值对应的项就是Edge这个软件(蛋疼),这就导致我们自己的第三方PDF阅读器能抢过其他PDF阅读器,但是怎么都抢不过这个Edge,所以我就在考虑怎么禁用Edge,经过一天的摸索,终于解决了这个问题。
方法一:注册表删除:
暴力方法:
最暴力方法是删除下面的注册表项路径,这样你电脑只要不更新就永远可以和Edge说byebye。
计算机\HKEY_CLASSES_ROOT\AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723
保险方法:
Edge仍然存在,但是不会将其首选为默认打开方式。
使用命令行WIN+R打开注册表regedit
输入Edge路径(1):
计算机\HKEY_CLASSES_ROOT\AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723\Shell\open
删除下面的所有键
以及路径(2)
计算机\HKEY_CLASSES_ROOT\AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723\Shell\open\command
删除过后,右键打开方式就没有Edge这个软件了,而且默认打开方式里边也不会有Edge这个选项。
方法二:驱动程序代码删除:
没接触过内核驱动开发的网友直接跳过,这个方法只适合程序员(狗头保命)
void NewDeleteEdgeK(UNICODE_STRING &Us,PCWSTR Ps);//原型
UNICODE_STRING RegUnicodeString;
#define REG_EDGE_OPENAIDV L"HKEY_CLASSES_ROOT\\AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723\\Shell\\open\\ActivatableClassId";
#define REG_EDGE_OPENCIDV L"HKEY_CLASSES_ROOT\\AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723\\Shell\\open\\ContractId";
#define REG_EDGE_OPENDSV L"HKEY_CLASSES_ROOT\\AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723\\Shell\\open\\DesiredInitialViewState";
#define REG_EDGE_OPENPIDV L"HKEY_CLASSES_ROOT\\AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723\\Shell\\open\\PackageId";
#define REG_EDGE_DelV L"HKEY_CLASSES_ROOT\\AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723\\Shell\\open\\command\\DelegateExecute";
UNICODE_STRING EDGE_OPENAIDV;
UNICODE_STRING EDGE_OPENCIDV;
UNICODE_STRING EDGE_OPENDSV;
UNICODE_STRING EDGE_OPENPIDV;
UNICODE_STRING EDGE_DelV;
void NewDeleteEdgeK(UNICODE_STRING &Us,PCWSTR Ps)
{
HANDLE hRegister;
RtlInitUnicodeString(&Us,REG_EDGE);
OBJECT_ATTRIBUTES objectAttributes;
//初始化objectAttributes
InitializeObjectAttributes(&objectAttributes,
&RegUnicodeString,
OBJ_CASE_INSENSITIVE, //对大小写敏感
NULL,
NULL);
//打开注册表
NTSTATUS ntStatus = ZwOpenKey(&hRegister,
KEY_ALL_ACCESS,
&objectAttributes);
//判断
if(NT_SUCCESS(ntStatus))
{
KdPrint(("Open register successfully!\n"));
}
//删除注册表键
ntStatus = ZwDeleteKey(hRegister);
if(NT_SUCCESS(ntStatus))
{
KdPrint(("DELETE the edge successfully\n"));
}
else if(ntStatus == STATUS_ACCESS_DENIED)
{
KdPrint(("STATUS_ACCESS_DENIED\n"));
}
else if(ntStatus == STATUS_INVALID_HANDLE)
else
{
KdPrint(("Maybe the item has sub item to delete\n"));
}
//关闭句柄
ZwClose(hRegister);
}
NewDeleteEdgeK(&RegUnicodeString,EDGE_OPENAIDV);
NewDeleteEdgeK(&RegUnicodeString,EDGE_OPENCIDV);
NewDeleteEdgeK(&RegUnicodeString,EDGE_OPENDSV);
NewDeleteEdgeK(&RegUnicodeString,EDGE_OPENPIDV);
NewDeleteEdgeK(&RegUnicodeString,EDGE_DelV);
改回方法:
打开左下角Windows图标进入设置->应用->搜索Edge->进入Edge高级设选项->修复即可还原
觉得不错的朋友可以点赞交流