SzenarioWie kann ich immer einen Dialog aktivieren, der nach einem Smartcard-Pin fragt?
Ich versuche Zertifikate zum Signieren von Dokumenten zu verwenden. Das erste Mal, dass ich unterzeichne, fordert das Betriebssystem einen Dialog auf, damit der Benutzer die PIN einstellen kann, aber das nächste Mal nicht. Aus Sicherheitsgründen brauche ich jedes Mal, wenn ich unterzeichne, das Betriebssystem fragt die PIN für den Benutzer. Wer weiß, wie man das macht?
Dies ist der Code:
''// create ContentInfo
Dim content As New ContentInfo(bytesContenido)
''// create a signer
Dim signer As New CmsSigner(certificado)
''// SignedCms represents signed data
Dim signedMessage As New SignedCms(content)
''// sign the data
signedMessage.ComputeSignature(signer, False)
''// create and return PKCS #7 byte array
Return signedMessage.Encode()
Auf einigen Seiten habe ich gefunden, dass die CryptSetProvParam
mit dem Stift reinigen kann, aber bisher nicht funktioniert.
Die Aussage:
<DllImport("advapi32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _
Public Shared Function CryptSetProvParam(ByVal hProv As IntPtr, ByVal dwParam As Int32, ByVal pbData As Byte(), ByVal dwFlags As Int32) As Boolean
End Function
Der Aufruf:
Public punteroContexto As New System.IntPtr ''// Obtenido usando CryptAcquireContext
Public Const PP_SIGNATURE_PIN As UInt32 = 33
If (Not CryptSetProvParam(punteroContexto, PP_SIGNATURE_PIN, Nothing, 0)) Then
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error)
End If
die Fehler:
Invalid type specified. (Exception from HRESULT: 0x8009000A)
Auch testen Multi-Thread unter Verwendung (unter Verwendung eines anderen Thread nur zum Signieren), und es doesn' t arbeiten.
Vielen Dank!