小编c00*_*0fd的帖子

类似于.NET中的等待计时器

在非托管的Win32世界中,我习惯使用CreateWaitableTimer API 创建的等待计时器,可以用于WaitForSingleObject等同步调用,主要用于WaitForMultipleObjects.

在.NET和C#中必须有一个模拟等待计时器?

.net c# windows synchronization timer

7
推荐指数
1
解决办法
2616
查看次数

如何从可执行文件上的多/双代码签名中检索信息

我一直在使用以下代码(取自KB323809文章)来检索有关可执行文件上的代码签名的信息.这适用于单个数字签名.

但是如何检索多个代码签名的信息?

在这种情况下,下面的Microsoft代码只是为第一个签名重新获取信息.

我的想法是调用CryptMsgGetParamCMSG_SIGNER_COUNT_PARAM得到签名的数量,然后将每个签名指标传递给后续调用CryptMsgGetParamCMSG_SIGNER_INFO_PARAM(下面的代码中).但是,这种方法始终在这个返回1周的签名,即使我显然有更多的,像3例:

在此输入图像描述

#include <windows.h>
#include <wincrypt.h>
#include <wintrust.h>
#include <stdio.h>
#include <tchar.h>

#pragma comment(lib, "crypt32.lib")

#define ENCODING (X509_ASN_ENCODING | PKCS_7_ASN_ENCODING)

typedef struct {
    LPWSTR lpszProgramName;
    LPWSTR lpszPublisherLink;
    LPWSTR lpszMoreInfoLink;
} SPROG_PUBLISHERINFO, *PSPROG_PUBLISHERINFO;

BOOL GetProgAndPublisherInfo(PCMSG_SIGNER_INFO pSignerInfo,
                             PSPROG_PUBLISHERINFO Info);
BOOL GetDateOfTimeStamp(PCMSG_SIGNER_INFO pSignerInfo, SYSTEMTIME *st);
BOOL PrintCertificateInfo(PCCERT_CONTEXT pCertContext);
BOOL GetTimeStampSignerInfo(PCMSG_SIGNER_INFO pSignerInfo,
                            PCMSG_SIGNER_INFO *pCounterSignerInfo);

int _tmain(int argc, TCHAR *argv[])
{
    WCHAR szFileName[MAX_PATH]; 
    HCERTSTORE hStore = NULL;
    HCRYPTMSG hMsg = NULL; 
    PCCERT_CONTEXT pCertContext …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi code-signing certificate

7
推荐指数
2
解决办法
1208
查看次数

如何通过C ++可执行文件中的清单启用“长路径感知”行为?

我正在尝试遵循Microsoft文档,以解除MAX_PATHWindows 10下API中文件路径的限制。它说:

您还可以通过清单来为每个应用启用新的长路径行为:

<application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
        <ws2:longPathAware>true</ws2:longPathAware>
    </windowsSettings>
</application>
Run Code Online (Sandbox Code Playgroud)

所以,第一个问题。是否可以在Visual Studio 2017的项目属性中启用它?

第二个问题:我没有在上面找到答案,所以我决定走一条手工路线:

  1. 我这样创建了additional.manifest文本文件:

    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
    <application xmlns="urn:schemas-microsoft-com:asm.v3">
        <windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
            <ws2:longPathAware>true</ws2:longPathAware>
        </windowsSettings>
    </application>
    </assembly>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后,将其添加到项目属性中:

在此处输入图片说明

  1. 但是,当我编译它时,它给了我这个警告,并且该清单在应用程序运行时似乎没有任何作用:

1> additional.manifest:清单创作警告81010002:名称空间“ http://schemas.microsoft.com/SMI/2016/WindowsSettings ”中无法识别的元素“ longPathAware ”。

那我在做什么错?

c++ manifest long-filenames visual-studio visual-studio-2017

7
推荐指数
1
解决办法
853
查看次数

尝试了解可以通过 SetProcessMitigationPolicy 函数设置的进程缓解策略

抱歉,如果这个问题太广泛了。我试图了解SetProcessMitigationPolicyWindows 10 中的 function 到底有什么作用,但我在网上找不到太多关于它的信息(除了我之前涉足这个主题之外)。我正在PROCESS_MITIGATION_POLICY一一测试它的选项,并且我有一些关于这些的问题:

  1. 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
    
    Run Code Online (Sandbox Code Playgroud)

    但它总是失败并显示错误代码 19 或ERROR_WRITE_PROTECT

    那么它到底应该做什么以及如何设置呢?

  2. ProcessExtensionPointDisablePolicy声明它“ ...阻止遗留扩展点 DLL 加载到进程中。

    PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY pmepdp = {0};
    pmepdp.DisableExtensionPoints = 1;
    BOOL bR = ::SetProcessMitigationPolicy(ProcessExtensionPointDisablePolicy, &pmepdp, sizeof(pmepdp));
    int err = ::GetLastError();
    
    Run Code Online (Sandbox Code Playgroud)

    抱歉我的天真,但是那是什么extension point DLL?我该如何测试呢?

  3. ProcessSignaturePolicy声明它可以“将图像加载限制为由 Mi​​crosoft、Windows 应用商店或 Microsoft、Windows 应用商店和 Windows …

c++ security winapi mfc windows-10

7
推荐指数
1
解决办法
3393
查看次数

PHP 7 中的“JIT 内存分配失败,PCRE JIT 将被禁用”警告

我正在将我的网站从安装在共享网络托管帐户(在 DreamHost)上的 PHP v.5 转换为在 PHP 7.3.11 上运行。转换后,我开始注意到偶尔会收到以下警告:

警告:preg_match_all():JIT 内存分配失败,PCRE JIT 将被禁用。这可能是由安全限制引起的。要么授予 PHP 分配可执行内存的权限,要么设置 pcre.jit=0

最后一个源自这行代码,它应该替换我为页面发布的 HTML 中的特殊标签:

if(preg_match_all("/\[".$tagBegin."(\S)+\]/U", $html, $matches, PREG_OFFSET_CAPTURE) !== false)
Run Code Online (Sandbox Code Playgroud)

我需要在 v.7.3 中做一些不同的事情来避免该警告吗?

php dreamhost php-7

7
推荐指数
1
解决办法
1万
查看次数

Windows 关键部分的自旋锁中的这些填充指令的目的是什么?

我一直在EnterCriticalSection对 Windows 10 上的函数进行逆向工程,发现了这个有趣的自旋循环:

在此输入图像描述

它是这样的:

lbl_loop:

mov     ecx, [rsp+60h]
mov     ecx, [rsp+60h]
mov     ecx, [rsp+60h]
pause
mov     ecx, [rsp+60h]
inc     ecx
mov     [rsp+60h], ecx

cmp     ecx, eax
jb      lbl_loop
Run Code Online (Sandbox Code Playgroud)

[rsp+60h]所以我的问题是 -循环读取 4 次然后写回的目的是什么?

为什么他们不能这样做:

lbl_loop:

pause
inc     ecx

cmp     ecx, eax
jb      lbl_loop

mov     [rsp+60h], ecx
Run Code Online (Sandbox Code Playgroud)

附言。请注意,这是 Windows 10 的生产版本。其余功能EnterCriticalSection均已优化。所以这不是调试版本。

assembly winapi x86-64 intel spinlock

7
推荐指数
0
解决办法
134
查看次数

将CreateWaitableTimer设置为不存在的日期/时间时会发生什么?

2013年的夏令时(美国)于3月10日星期日凌晨2:00开始.因此,现在是2013年3月9日,我在已创建的等待计时器句柄上调用以下API:

FILETIME ftWhen = //Points as absolute time to March 10th, 2013, at 2:10 AM
SetWaitableTimer(hTimer, ftWhen, 0, NULL, NULL, TRUE);
Run Code Online (Sandbox Code Playgroud)

March 10th, 2013, 2:10 AM 是一个不存在的时间,因为时间将提前一小时调整,而不是凌晨2点,它将是凌晨3点.

所以我的问题是,我的计时器会发生什么?(我似乎无法找到此案例的文档.)

c++ winapi timer dst

6
推荐指数
1
解决办法
600
查看次数

如果我删除 &lt;br /&gt; 等标签中的空格,会有什么不同吗?

我不断寻找这个问题的不同答案。有些人说它使标记与旧版 Web 浏览器不兼容 - 并引用 Netscape :) 因此,我想重新表述今天(2014 年)的问题,如果我删除标签中的空格,例如是否会对<br />Web 浏览器产生影响?

html

6
推荐指数
1
解决办法
437
查看次数

通过Windows脚本宿主以UTF-8编码运行JScr​​ipt或VBScript文件的问题

我不确定我做错了什么,但是Windows Script Host如果我将它保存在.js带有UTF-8编码的文件中,我似乎无法运行以下JScript :

var name = "Hello world!";
WScript.echo(name);
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它给了我这个错误:

在此输入图像描述

请注意,如果我使用ANSI编码保存脚本,脚本运行正常.

Windows Script Host引擎不兼容的UTF-8编码?

windows vbscript wsh utf-8 jscript

6
推荐指数
2
解决办法
2541
查看次数

什么是"api-ms-win - * - * - lx-xx.dll"伞库?

我一直在运行具有长文件名的DLL.例如两个:"api-ms-win-appmodel-runtime-l1-1-1.dll""api-ms-win-appmodel-identity-l1-2-0.dll".显然,微软称他们为" 伞库 ".

我最初的理解是它们只是带有新文件名的新DLL,但后来我尝试搜索这些文件.好吧,我找不到它们作为磁盘上的物理文件......

所以我很好奇,它们是否是磁盘上不存在的某种虚拟DLL文件名?

WCHAR buff[MAX_PATH];
buff[0] = 0;
GetSystemDirectory(buff, MAX_PATH);
StringCchCat(buff, MAX_PATH, L"\\api-ms-win-appmodel-runtime-l1-1-1.dll");

HMODULE hModule = LoadLibrary(buff);
//'hModule' is NULL & error code is ERROR_MOD_NOT_FOUND
Run Code Online (Sandbox Code Playgroud)

但以下工作:

HMODULE hModule = LoadLibrary(L"api-ms-win-appmodel-runtime-l1-1-1.dll");
Run Code Online (Sandbox Code Playgroud)

c++ dll winapi uwp

6
推荐指数
1
解决办法
978
查看次数