IX509PrivateKey を使用して X.509 証明書要求のキーを作成し (「NT AUTHORITY\NETWORK SERVICE」として)、Create メソッドがアクセス拒否を生成しています (C# からディスパッチ インターフェイスを P/Invoke しています)。であるため、HRESULT は .NET 例外に変換されます)。Process Monitor は、キー ファイルへのアクセスが拒否されたことも示します (キー ファイルは作成中です)。
実際のコードは次のとおりです。
IX509PrivateKey privateKey = new CX509PrivateKey() as IX509PrivateKey;
privateKey.Length = request.KeyLength;
privateKey.ExportPolicy = X509PrivateKeyExportFlags.XCN_NCRYPT_ALLOW_EXPORT_FLAG;
privateKey.KeySpec = X509KeySpec.XCN_AT_SIGNATURE;
privateKey.KeyUsage = X509PrivateKeyUsageFlags.XCN_NCRYPT_ALLOW_ALL_USAGES;
privateKey.MachineContext = true;
privateKey.Create();
return privateKey;
代わりに (MachineContext を false に設定して) ユーザー キー セットを作成すると、「アクセスが拒否されました」ではなく「ファイルが見つかりません」と表示されます。しかし、ProcMon には何も表示されません。キーファイルへのアクセスは試みません。
Process Monitor で、「ネットワーク サービス」がキー ファイルにアクセスできないことが判明したため、IX509PrivateKey::SecurityDescriptor プロパティを使用して設定しました。「Network Service」は実際にキーファイルにアクセスできましたが、Createからアクセスが拒否され、ProcMonはファイルへのアクセスが拒否されたことを示していました.
ありとあらゆるアイデアのための多くのTIA。