一、原理
在NT/2000中互動登陸支援是由WinLogon調用GINA DLL實現的,GINA DLL提供了一個互動介面為使用者登陸提供認證請求。WinLogon會和GINA DLL進行互動,預設是MSGINA.DLL(在System32目錄下)。微軟同時也為我們提供了介面,我們可以自己編寫GINA DLL來代替MSGINA.DLL。
WinLogon初始化時會建立3個案頭:
(1)、winlogon案頭:主要顯示Windows 安全等介面,如你按下CTRL+ALT+DEL,登陸的介面等
(2)、應用程式案頭:我們平時見到的那個有我的電腦的介面
(3)、螢幕保護裝置案頭:螢幕保護裝置顯示介面。
在預設情況下,GINA顯示登陸對話方塊,使用者輸入使用者名稱及密碼 。所以要獲得使用者名稱和密碼 ,則可以寫一個新的GINA DLL,其中提供介面調用msgina.dll的函數WlxLoggedOutSAS。
二、程式實現
GINA DLL要輸出下列函數(winlogon會調用):
(表一)GINA 函數一覽表
函數 |
描述 |
WlxActivateUserShell |
啟用使用者外殼程式 |
WlxDisplayLockedNotice |
允許GINA DLL 顯示鎖定資訊 |
WlxDisplaySASNotice |
當沒有使用者登陸時,Winlogon調用此函數 |
WlxDisplayStatusMessage |
Winlogon 用一個狀態資訊調用此函數進行顯示 |
WlxGetConsoleSwitchCredentials |
Winlogon調用此函數讀取當前登陸使用者的信任資訊,並透明地將它們傳到目標會話 |
WlxGetStatusMessage |
Winlogon 調用此函數擷取目前狀態資訊 |
WlxInitialize |
針對指定的視窗位置進行GINA DLL初始化 |
WlxIsLockOk |
驗證工作站正常鎖定 |
WlxIslogoffOk |
驗證登出正常 |
WlxLoggedOnSAS |
使用者已登陸並且工作站沒有被加鎖,如果此時接收到SAS事件,則Winlogon 調用此函數 |
WlxLoggedOutSAS |
沒有使用者登陸,如果此時收到SAS事件,則Winlogon 調用此函數, This indicates that a logon attempt should be made 。 |
WlxLogoff |
請求登出操作時通知GINA DLL |
WlxNegotiate |
表示當前的Winlogon版本是否能使用GINA DLL |
WlxNetworkProviderLoad |
在載入網路服務提供者收集了身份和認證資訊後,Winlogon 調用此函數 |
WlxRemoveStatusMessage |
Winlogon 調用此函數告訴GINA DLL 停止顯示狀態資訊 |
WlxScreensaverNotify |
允許GINA與螢幕保護裝置操作互動 |
WlxShutdown |
在關閉之前Winlogon 調用此函數,允許GINA實現任何關閉任務,例如從讀卡機中退出智慧卡 |
WlxStartApplication |
當系統需要在使用者的上下文中啟動應用程式時調用此函數 |
WlxWkstaLockedSAS |
當工作站被鎖定,如果接收到一個SAS,則Winlogon 調用此函數 |