WlxNegotiate

自建的替換GINA必須實現WlxNegotiate函式,它是Winlogon調用的第一個GINA函式。WlxNegotiate允許GINA確認是否支持目前安裝的Winlogon版本。

基本介紹

  • 外文名:WlxNegotiate
  • 類型:函式
  • 作用:自建的替換GINA
  • 參數:dwWinLogonVersion [in]
函式介紹,代碼示例,

函式介紹

註:Windows Vista忽略GINA動態程式庫(Vista及以後版本參考ICredentialProvider)
語法
BOOL WlxNegotiate(
__in DWORD dwWinLogonVersion,
__out PDWORD pdwDllVersion
);
參數
dwWinLogonVersion [in]
指定了將與GINA互動的Winlogon版本
pdwDllVersion [out]
指明GINA支持的Winlogon版本。這個值也被Winlogon用來決定傳遞哪個分發表(dispatch table)給接下來的WlxInitialize函式。這個值不能比dwWinLogonVersion的值大。
返回值
如果dwWinLogonVersion表示的Winlogon版本大於或等於返回的pdwDllVersion值,函式返回TRUE,Winlogon將繼續初始化。
如果dwWinLogonVersion 小於pdwDllVersion,函式返回FALSE,Winlogon終止,系統不會啟動。
附註
調用WlxNegotiate之前,Winlogon設定桌面狀態,於是當前桌面為Winlogon桌面;Winlogon設定工作站狀態,於是桌面是鎖定的。
參數中的版本數宏定義所代表的Windows版本:
GINA版本
對應的Windows版本
WLX_VERSION_1_0
Windows NT 3.5.0
WLX_VERSION_1_1
Windows NT 3.5.1
WLX_VERSION_1_2
Windows NT 4.0
WLX_VERSION_1_3
Windows 2000
WLX_VERSION_1_4
Windows 2003/XP
需求
支持的最低客戶機
Windows 2000 Professional
支持的最低伺服器
Windows 2000 Server
最終支持客戶機
Windows XP
最終支持伺服器
Windows Server 2003
頭檔案
Winwlx.h

代碼示例

代碼來自於API sample -GINASTUB
BOOL
WINAPI
WlxNegotiate (DWORD dwWinlogonVersion,
DWORD * pdwDllVersion)
{
HINSTANCE hDll;
DWORD dwWlxVersion = GINASTUB_VERSION;
// Load MSGINA.DLL.
if (!(hDll = LoadLibrary(REALGINA_PATH)))
{
return FALSE;
}
// Get pointers to WlxNegotiate function in the real MSGINA.
pfWlxNegotiate = (PFWLXNEGOTIATE) GetProcAddress(hDll, "WlxNegotiate");
if (!pfWlxNegotiate)
{
return FALSE;
}
// Handle older version of Winlogon.
if (dwWinlogonVersion < dwWlxVersion)
{
dwWlxVersion = dwWinlogonVersion;
}
// Negotiate with MSGINA for version that we can support.
if (!pfWlxNegotiate(dwWlxVersion, &dwWlxVersion))
{
return FALSE;
}
// Load the rest of the WLX functions from the real MSGINA.
if (!MyInitialize(hDll, dwWlxVersion))
{
return FALSE;
}
// Inform Winlogon which version to use.
*pdwDllVersion = g_dwVersion = dwWlxVersion;
return TRUE;
}

相關詞條

熱門詞條

聯絡我們