0

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 の下の環境は、どういうわけか制限が厳しく、新しいキー コンテナーの作成が停止しているようです。これが考えられる理由と、それを回避する方法についての提案はありますか?

4

1 に答える 1

1

Win32_Process.CreateProcess の下の環境では、対話操作の使用が禁止されています。また、CryptAcquireContext を使用して (コンピューター全体ではなく) ユーザー固有のキー コンテナーにアクセスしても、非対話型環境では機能しないことが判明しました ( http://social.msdn.microsoft.com/Forums/uk/clr/を参照)。スレッド/2033c171-0809-4e14-aa50-1b9287389cb3など)。

于 2012-12-27T11:11:48.683 に答える