我有一个使用 CRYPT_NEWKEYSET调用CryptAcquireContext的可执行文件:
BOOL b_result;
HCRYPTPROV prov;
b_result = CryptAcquireContext(&prov, L"testcontext6", MS_DEF_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET);
if(!b_result) {
int err = GetLastError();
fprintf(stderr, "Error acquiring context: %#x\n", err);
return 1;
}
return 0;
如果我在本地运行它,它工作正常。如果我按如下方式通过 WMI 运行它,它会返回错误 0x5 (ERROR_ACCESS_DENIED):
using (var processClass = new ManagementClass(m_scope, new ManagementPath("Win32_Process"), new ObjectGetOptions()))
{
var inParams = processClass.GetMethodParameters("Create");
inParams["commandLine"] = @"cmd.exe /c C:\CppTest.exe 2>C:\test.log";
var outParams = processClass.InvokeMethod("Create", inParams, null);
return outParams["ProcessId"];
}
似乎 WMI 下的环境在某种程度上更具限制性,这会阻止创建新的密钥容器。关于为什么会这样以及如何解决它的任何建议?