我需要從一個程序發送證書信息發送到另一個,並登錄到Windows通過使用CredMarshalCredential和LogonUser這些信息幫助。我的程序當前使用常規用戶名/密碼組合傳遞憑證併成功登錄。我只是增加了使用智能卡憑證的功能。保存並加載智能卡證書
我用這個example成功地與一個智能卡證書登錄。
當你運行程序的用戶的工作,但沒有嘗試運行的程序作爲SYSTEM時。這是因爲SYSTEM無法訪問用戶的「我的」商店。我試圖解決這個問題,要麼通過將證書或整個證書存儲區作爲以用戶身份運行的應用程序作爲SYSTEM運行的程序。
我已經試過許多方法來得到的東西,將序列化之後成功登錄,但沒有得到任何東西能夠成功。似乎最好的方法是致電CertSaveStore並打開BLOB。我使用了這個Microsoft Example Page底部的最後一個例子。這將正確地從BLOB恢復證書存儲,查找證書,甚至生成用戶名。但生成的用戶名與原始生成的用戶名不同,並且無法以ERROR_LOGON_FAILURE(用戶名或密碼不正確)的錯誤登錄。
我目前的測試應用程序保存證書,並再次加載它在同一個程序。現在我已經將系統方面排除在等式之外。我猜測恢復的證書商店缺少一些信息,但我不確定我錯過了什麼。任何洞察力將不勝感激。最後
一個說明,我本來試圖將生成的用戶名和密碼只是傳遞到系統,並使其下臺,但它與同ERROR_LOGON_FAILURE錯誤而失敗。我假設用戶名必須重新生成,因爲被不同的用戶/程序調用,但是這種假設可能是錯誤的。
(我不是Win32內部專家):你不能使用具有特定容器名稱的CryptAcquireContext,如[這裏]所述(https://blogs.msdn.microsoft.com/alejacma/2008/03/03/how-to-select-which-smart-card-reader-to-perform-actions-on /)來訪問智能卡對象?然後使用證書登錄。注意:您的「示例」鏈接指向「LogonUser」文檔。 – vlp
[This](https://technet.microsoft.com/en-us/library/ff404289(WS.10).aspx)描述也很有趣。 – vlp
@vlp感謝您的評論。我修復了示例鏈接。我一直在研究CryptAcquireContext,我當然需要更好地理解它。我正在繼續深入研究文檔以嘗試獲得工作解決方案。 – Snowman6286