CertEnroll::CX509CertificateRequestPkcs10 ライブラリを使用して、スマートカードから CSR を生成しようとしています。最初に実行するだけで問題なく動作します。ただし、事前に ADAL ログイン フローを実行すると、次のエラーが発生します。
CertEnroll::CX509CertificateRequestPkcs10::Encode: 無効なウィンドウ ハンドルです。0x80070578 (WIN32: 1400 ERROR_INVALID_WINDOW_HANDLE)
エラーを調べたところ、存在しなくなったウィンドウを呼び出すことが原因のようです。CertEnroll::CX509CertificateRequestPkcs10::Encode が呼び出すウィンドウを制御できないので、ポインターをクリアする方法や、このエラーを回避する方法はありますか?
参考までに、ここに私の登録コードを示します
var request = new CX509CertificateRequestPkcs10();
request.Initialize(X509CertificateEnrollmentContext.ContextUser);
request.PrivateKey.ExportPolicy = X509PrivateKeyExportFlags.XCN_NCRYPT_ALLOW_EXPORT_NONE;
request.PrivateKey.Length = 2048;
request.PrivateKey.ProviderName = "Microsoft Base Smart Card Crypto Provider";
request.PrivateKey.KeyUsage = X509PrivateKeyUsageFlags.XCN_NCRYPT_ALLOW_SIGNING_FLAG;
request.PrivateKey.KeySpec = X509KeySpec.XCN_AT_KEYEXCHANGE;
request.PrivateKey.MachineContext = false;
if (!subjectName.StartsWith("CN="))
subjectName = $"CN={subjectName}";
var subjectEncoded = new CX500DistinguishedNameClass();
subjectEncoded.Encode(subjectName);
request.Subject = subjectEncoded;
request.Encode();
これが私の認証コードです
result = authContext.AcquireTokenAsync(ResourceId, clientId, redirectUri, new PlatformParameters(PromptBehavior.Always));
result.Wait();
_userName = result.Result.UserInfo.DisplayableId;
return result.Result.AccessToken;