Код ниже используется для работы. Я думаю, что он сломался после некоторого обновления .NET Framework или Windows 10, но не уверен.
Открывает временное хранилище сертификатов для создания самозаверяющих сертификатов.
using System;
using System.Runtime.InteropServices;
namespace MyTestApp
{
internal static class Program
{
public static void Main(string[] arguments)
{
var certStore = CertOpenStore(
"Memory", // sz_CERT_STORE_PROV_MEMORY
0,
IntPtr.Zero,
CERT_STORE_CREATE_NEW_FLAG,
IntPtr.Zero
);
if (certStore != IntPtr.Zero)
{
Console.WriteLine("Success!");
}
else
{
var error = Marshal.GetHRForLastWin32Error();
Console.WriteLine("Error: " + error.ToString("X"));
}
Console.ReadLine();
}
private const uint CERT_STORE_CREATE_NEW_FLAG = 0x00002000;
[DllImport("Crypt32.dll", SetLastError = true, CharSet=CharSet.Auto, ExactSpelling = true)]
public static extern IntPtr CertOpenStore(
[MarshalAs(UnmanagedType.LPWStr)] string storeProvider,
uint messageAndCertificateEncodingType,
IntPtr cryptProvHandle,
uint flags,
IntPtr parameters
);
}
}
Вывод:
Error: 80070002
Что составляет ERROR_FILE_NOT_FOUND
. Протестировано на .NET 4.5
и 4.5.2
.
Что я могу сделать для дальнейшей диагностики или исправления?