https://github.com/zk2013/windows_remote_lock_unlock_screen 將生成的DLL註冊至註冊表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\ ...
https://github.com/zk2013/windows_remote_lock_unlock_screen
將生成的DLL註冊至註冊表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers ,之後的每次鎖屏或開機登錄都會載入這個DLL。
實現這個DLL有相關的微軟文檔:
ICredentialProviderCredential 介面
ICredentialProviderCredential2 介面
以上操作只實現了替換解鎖Windows的登錄界面功能,接下來是實現自動登錄(自動解鎖)。
實現自動解鎖需要有通信機制發送接收Windows賬號密碼,接收端代碼里使用的是 C++的 CreateNamedPipe (命名管道)。在 ICredentialProviderCredential 介面的現實方法 GetSerialization 內創建了一個 pipe,管道名是 \\.\pipe\NoninteractiveUnlockCredentialProvider,( \\.\管道\管道名。最多可達256個字元的長度,而且不用區分大小寫 )。
現在實現發送端,使用 C++ 的 CreateFile (這是一個多功能的函數,可打開或創建文件或者I/O設備,並返回可訪問的句柄:控制台,通信資源,目錄(只讀打開),磁碟驅動器,文件,郵槽,管道。)發送賬號密碼至管道 ( \\.\pipe\NoninteractiveUnlockCredentialProvider ) 。
接收端收到賬號密碼後,在 GetSerialization 方法內 通過 KerbInteractiveUnlockLogonInit 和 KerbInteractiveUnlockLogonPack 校驗登錄。正確後觸發Windows登錄機制並解開屏幕鎖。