- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
抱歉,这个问题太宽泛了。我想看看到底是什么 SetProcessMitigationPolicy
函数在 Windows 10 中执行,但我在网上找不到太多相关信息(除了我之前涉足该主题。)我正在测试它 PROCESS_MITIGATION_POLICY
选项一个一个,我对这些有一些问题:
ProcessSystemCallDisablePolicy
声明它“禁用在最低层使用 NTUser/GDI 函数的能力。”。所以我正在这样测试它:
PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY pmscdp = {0};
pmscdp.DisallowWin32kSystemCalls = 1;
BOOL bR = ::SetProcessMitigationPolicy(ProcessSystemCallDisablePolicy, &pmscdp, sizeof(pmscdp));
int err = ::GetLastError();
::GdiFlush(); //Try to trip it here
但它总是失败,错误代码为 19,或 ERROR_WRITE_PROTECT
。
那么它到底应该做什么以及如何设置它?
ProcessExtensionPointDisablePolicy
声明它“...防止将旧的扩展点 DLL 加载到进程中。”
PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY pmepdp = {0};
pmepdp.DisableExtensionPoints = 1;
BOOL bR = ::SetProcessMitigationPolicy(ProcessExtensionPointDisablePolicy, &pmepdp, sizeof(pmepdp));
int err = ::GetLastError();
对不起,我太天真了,扩展点 DLL
是什么?我该如何测试?
ProcessSignaturePolicy
声明它可以“将图像加载限制为由 Microsoft、Windows Store 或 Microsoft、Windows Store 和 Windows硬件质量实验室 (WHQL)”。
首先,它似乎对 CreateProcess
没有影响,并且只适用于 LoadLibrary
类型的函数。所以如果我这样做:
PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY pmbsp = {0};
pmbsp.MicrosoftSignedOnly = 1;
//pmbsp.StoreSignedOnly = 1; //always seems to fail with this flag
//pmbsp.MitigationOptIn = 1; //Doesn't seem to have any effect
BOOL bR = ::SetProcessMitigationPolicy(ProcessSignaturePolicy, &pmbsp, sizeof(pmbsp));
BOOL err = ::GetLastError();
然后尝试加载我的一些测试 DLL:
HMODULE hModDll = ::LoadLibrary(L".\\Dll1.dll");
LoadLibrary
函数失败,MessageBox
显示:
Bad Image
Dll-Name is either not designed to run on Windows or it contains an error. Try installing the program again using the original installation media or contact your system administrator or the software vendor for support. Error status 0xc0000428.
有趣的是,如果我在一些未签名的 System32
DLL 上调用它:
HMODULE hModDll = ::LoadLibrary(L"iologmsg.dll");
它似乎工作正常。但是,如果我将测试 Dll1.dll
的拷贝放入 System32
文件夹并以这种方式加载它:
HMODULE hModDll = ::LoadLibrary(L"Dll1_.dll");
它仍然失败并显示相同的消息框:
这很有趣。它如何区分 iologmsg.dll
和 Dll1_.dll
之间的区别?两个文件都没有签名。
附言。如果应用(或服务)不希望在该处显示任何 UI,那么该模式消息框可能会造成非常严重的干扰。
ProcessFontDisablePolicy
最后,我完全迷失了这个。它声明它“关闭进程加载非系统字体的能力。”
所以在我的 MFC GUI 应用程序中启用它之后:
PROCESS_MITIGATION_FONT_DISABLE_POLICY pmfdp = {0};
pmfdp.DisableNonSystemFonts = 1;
BOOL bR = ::SetProcessMitigationPolicy(ProcessFontDisablePolicy, &pmfdp, sizeof(pmfdp));
int err = ::GetLastError();
应用程序有一个 Richedit control我可以加载自定义字体。所以我上网下载了一个 totally random font .然后将其安装在 Windows 资源管理器中,并在启用该策略后尝试从应用程序中使用它:
//Set format for the text window
CHARFORMAT cf = { 0 };
cf.cbSize = sizeof(cf);
cf.dwMask = CFM_FACE | CFM_SIZE;
cf.yHeight = 18 * 20;
VERIFY(SUCCEEDED(::StringCchCopy(cf.szFaceName, _countof(cf.szFaceName), L"Action Man")));
VERIFY(SetDefaultCharFormat(cf));
该应用能够毫无问题地显示和使用该(显然非系统)字体:
那么我在该政策中遗漏了什么?
最佳答案
这是猜测,但由于函数文档中的许多链接都是 404,我相信以下内容是有效的:
1.可能还没有实现。
2.只是一个猜测(因为链接也是404),但它可能指的是在过时情况下使用的DLL(如XP及以下登录DLL,在Vista中被替换为Credential Providers)。
3.Windows DLL 被视为已签名(实际上没有附加数字签名),不仅因为它们驻留在 System32 中,而且因为 Windows 在内部为它们保留了一个映射。对于您的 DLL,它不起作用。此外,这在 CreateProcess() 中没有意义,因为新进程无法与您的进程交互(在您不知情的情况下),因此无法劫持它,其中加载了 LoadLibrary 的 DLL 可以做任何事情来破坏您的进程。
4.可能是指资源管理器没有安装的字体,是用AddFontResource添加的字体.
关于c++ - 尝试了解可由 SetProcessMitigationPolicy 函数设置的流程缓解策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53983079/
说真的,你怎么能在不发疯的情况下处理所有这些异常呢?我是不是读了太多关于异常处理的文章或什么?我尝试重构了几次,但每次似乎都以更糟糕的结果告终。也许我应该承认确实会发生异常(exception)情况,
背景 两者 try/rescue和 try/catch是 Elixir 中的错误处理技术。根据 corresponding chapter在介绍指南中。 Errors can be rescued u
每当我尝试在 Raspberry PI 上运行此 python 脚本时,我都会遇到问题: import socket import sys # Create a TCP/IP socket sock
我想知道一些关于 PHP 的 try , catch声明。 让我们考虑以下示例。 abstract class ExceptionA extends Exception {} class Except
我的 laravel v5.4 项目中有两个模型,user 和 admin。 在 config/auth.php 中,我向守卫和提供者添加了管理员,如下所示: 'guards' => [ 'w
try: r = requests.get(url, params={'s': thing}) except requests.ConnectionError, e: print e
我有以下代码。 但是,它并不能捕获所有错误,而我仍然会收到“throw er;//未处理的'错误'事件”。 为什么是这样? app.post('/api/properties/zip/:zip/bed
问题与细节 我正在使用自定义错误处理,遇到的错误之一是“路径中的非法字符”。我有一个自定义函数,旨在通过路径字符串查找此类非法字符,并在找到它们时引发自定义错误。但是我发现,取决于非法字符,Test-
This question already has answers here: How do I catch a numpy warning like it's an exception (not j
我正在使用其他人的代码,但我不熟悉try/catch,因此我举了一个类似的小例子。在第11行上,如果我写了error(''),似乎没有发现错误并增加了索引j。但是,编写error(' ')或error
我在我的一个程序中遇到了这个问题,在这种情况下,尝试/异常(exception)的错误使程序变得更好,以防用户意外输入了他们不应该输入的内容。它仍然给我错误,我为为什么感到困惑。如果对我的问题确实很重
我在尝试TRY ... CATCH块时遇到问题。有人可以解释为什么以下代码无法执行我的sp吗? DECLARE @Result int SET @Result = 0 BEGIN TRY SE
我有一个相当大的 powershell 脚本,其中包含许多(20 多个)执行各种操作的函数。 现在所有代码实际上都没有任何错误处理或重试功能。如果某个特定的任务/功能失败,它就会失败并继续。 我想改进
为什么我尝试时需要导入 inputmismatchException catch(InputMismatchException e){ System.out.println("
我对此感到困惑 - 我为辅助方法编写了一个 try/catch 。它的目的是捕获任何无效输入(任何不是“男性”或“女性”的内容(没有特定情况)。如果输入无效,它将通知用户,然后让他们重试。如果有效,则
我有时会发现自己处于如下场景。尽可能简单地陈述问题 “有时我会创建一段代码,Java 让我将其包含在 try/catch 语句中。我没有使用 catch,所以我将其留空。为什么这是错误的?” boo
我有点困惑为什么当我不使用 Try block 时会出现 Try block 错误。 我在代码块底部附近收到错误通知。如果我不使用 try/catch,有人可以向我解释为什么会发生这种情况吗? 它是否
我已经盯着我的电脑两个小时了,我不知道我做错了什么。谁能帮助我看到光明? package blackjack; import java.util.Random; import java.util.Sc
我想将方法保存在 Enum 中,但 Class.getDeclaredMethod 抛出 NoSuchMethodException,那么我该如何处理呢?我的代码: public enum Car
这个问题已经有答案了: Executing multi-line statements in the one-line command-line (18 个回答) 已关闭 3 年前。 如何使用try.
我是一名优秀的程序员,十分优秀!