我正在开发一个C++应用程序,我需要检查证书的指纹.
我发现此解决方案使用CryptQueryObject()检查特定签名.但我仍然找不到检索Thumprint的方法.
在C#中,我可以使用方法GetCertHashString来获取哈希(这是我需要的)或使用属性X509Certificate.Thumbprint
我知道我需要获取公钥的哈希值,但我不知道如何检索公钥.
我怎么用C++做到这一点?有没有办法呢?
我在 .net 3.5 中使用 C#
我将我的程序数据保存在一个文件中:C:\Program Data\MyProgramName\fileName.xml
安装并运行我的应用程序一次后,我卸载了它(在卸载过程中我从“程序数据”中删除了所有文件),然后我重新安装了应用程序,并运行了它。
奇怪的是,我的应用程序启动时就好像程序数据中的文件存在一样 - 这意味着,即使数据文件被删除,我的应用程序中仍有旧数据。
运行时:
File.Exists("C:\Program Data\MyProgramName\fileName.xml")
Run Code Online (Sandbox Code Playgroud)
即使我确定该文件不存在,我也得到了“真实”。
当我以管理员身份运行应用程序然后文件不存在时,事情变得奇怪了。
经过研究,我发现在没有管理员权限的情况下运行我的应用程序而不是获取:“C:\Program Data\MyProgramName\fileName.xml”我得到“C:\Users\userName\AppData\Local\VirtualStore\ProgramData \MyProgramName\fileName.xml"
确实有一个文件存在于以前的安装中(我显然没有删除,因为我不知道它存在)。
所以很明显,程序数据下的文件有一些虚拟路径。
编辑 :
我发现在删除虚拟商店中的旧文件后,我的应用程序突然能够找到正确的文件。(我没有对 Program Data 下的文件进行任何更改。
我的问题是:
提前致谢
我正在使用WinVerifyTrust来验证文件签名.
与互联网的连接非常糟糕,所以我想只检查本地缓存.
问题是我对如何在WinTrustData中设置参数感到困惑
关于fdwRevocationChecks - 文档如下:
当WTD_REVOKE_NONE标志与WinVerifyTrust函数的pgActionID参数中设置的HTTPSPROV_ACTION值一起使用时,不会进行额外的吊销检查.要确保WinVerifyTrust函数在验证代码签名时不尝试任何网络检索,必须在dwProvFlags参数中设置WTD_CACHE_ONLY_URL_RETRIEVAL.
它是什么意思"没有额外的撤销检查" - 除了什么?它是否使用CRL进行撤销检查?如果我将此字段设置为*WTD_REVOKE_WHOLECHAIN*它也将在线检查吗?
如果我设置WTD_CACHE_ONLY_URL_RETRIEVAL就足够了,以确保它不会尝试从互联网上获取撤销列表?
底线:我如何确保有 CRL检查,但没有任何在线检查.
谢谢
我正在开发ac#应用程序,我需要提取一个cab文件.
我找不到在C#中执行此操作的库.由于许可问题,我无法使用Microsoft.Deployment.Compression.Cab.dll.
我找到了这个代码,但问题是,当我使用它时,我能够找到并提取机柜中的第一个文件.
仅当OutputFileOpen返回IntPtr.Zero时才调用OutputFileClose.但如果OutputFileClose是calles,则枚举将停止.因此,对于此代码,只能为一个文件调用OutputFileClose
有人可以帮我弄清楚如何编写一个可以提取所有文件的代码吗?
在 Protobuf 中声明 unsigned LongLong (unsigned __int64) 的正确方法是什么,以便它可用于 Android 和 Windows?
编辑: 我认为我可能需要使用变量,每个变量都包含一个 uint64,但我不确定这是否是正确的方法。
更新
我在protobuf文件中使用了uint64并编译它。cpp 文件中的结果是 unsigned __int64。我很困惑,因为在文档中他们说它映射到 long..
我有一个带有占位符的字符串,我想将索引附加到占位符上。
例如
'This @placeholder is @placeholder'
Run Code Online (Sandbox Code Playgroud)
应该成为
'This @param0 is @param1'
Run Code Online (Sandbox Code Playgroud)
假设我有一个包含 2 个值的参数列表(与 @placeholder 出现的次数匹配)。
一种可选的解决方案是。
result = ''
parts = my_text.split('@placeholder')
for i in range(0, len(params)):
result += '{}@param{}'.format(parts[i], i)
return result
Run Code Online (Sandbox Code Playgroud)
另一种选择是继续用当前索引替换占位符,但这意味着扫描字符串 len(params) 次。
for i in range(0, len(params)):
my_text = my_text.replace('@placeholder', '@param{}'.format(i), 1)
Run Code Online (Sandbox Code Playgroud)
在 python 中是否有更好的解决方案?
我在x64系统上运行32位应用程序.(Windows 7)我正在尝试运行Windows备份,它位于:c:\ System32\sdclt.exe.因为我作为32位进程运行,所以我必须禁用WOW64重定向(使用Wow64DisableWow64FsRedirection).问题是,在禁用wow64重定向后,我得到"无法找到指定的过程"错误.
我的猜测是,不知何故,当禁用重定向时,sdclt.exe无法加载其所有依赖的dll.
注意:1.只有在我没有使用高级特权的情况下才会发生这种情况.2.我将"使用shell执行"设置为true,因为我想让用户使用我的应用程序而没有提升权限.2.编译为64位时不会发生此错误.
c# ×2
c++ ×2
windows ×2
.net ×1
cab ×1
certificate ×1
filesystems ×1
long-long ×1
programdata ×1
python ×1
regex ×1
replace ×1
string ×1
winapi ×1