WlxNegotiate

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

函式介紹

註: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;

}

相關詞條

相關搜尋

熱門詞條

聯絡我們