ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:44.06KB ,
资源ID:21527757      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21527757.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第7章WinLogon编程Word格式文档下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第7章WinLogon编程Word格式文档下载.docx

1、比如说,用户登录到系统时,WinLogon会逐次调用通知包的登录事件处理函数提供事件的信息。通知包中的事件处理函数的名称由开发者提供,但是它的函数名称必须在注册表中注册,WinLogon会自动检查注册表,得到函数的名称。用户不必为每一个WinLogon事件实现和注册全部的事件处理。每一种事件处理函数都必须遵循事件处理函数规范。这种规范只有一个参数,即WLX_NOTIFICATION_INFO结构类型。WinLogon将忽略事件处理函数的输出,如果处理一个事件时需要和WinLogon交互,应该使用Winlgon支持函数。这些通知事件包括锁定、解锁、注销、登录、启动、关机、启动屏幕保护程序、终止屏

2、幕保护程序、启动外壳程序等。开发WinLogon通知包可以作为开发Windows服务的替代方案,这种方法的好处在于它可以得到许多用户活动的通知,而且编码要比使用WindowsNT服务简单得多。创建一个WinLogon通知包需要创建一个动态链接库,为了让WinLogon知道这个动态链接库,可以向注册表中加入适当的注册信息。在程序实现中启动一个Win32程序,由于进程是由WinLogon启动的,该进程拥有系统账号,因此用户是不能简单地通过终止任务结束这个进程的。这和WindowsNT服务是一致的。用户可以在Logoff中通知处理时终止进程。如果进程需要保持激活,可以使用EndProcessAtWi

3、nlogoff函数。如果希望这个进程为登录用户所有,则应该在启动通知期间而不是logon通知中使用CreateProcessAsUser函数。实现步骤如下:(1)创建动态链接库。/sample.cpp#includeWinwlx.hPROCESS_INFORMATION g_pi;TCHAR g_szPath=_T(c:somepathexecut.exearguments);SafeTerminateProcess(HANDLE hProcess,UINT uExitCode);BOOL WINAPIDllMain(HINSTANCEhInstance,DWORD dwReason,LPVO

4、ID lpReserved) switch(dwReason)case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls(hInstance); break; Return TRUE;VOID APIENTRYStartProcessAtWinLogon(PWLX_NOTIFICATION_INFO pInfo)STARTUPINFO si;si.cb=sizeof(STARTUPINFO);si.lpReserved=NULL;si.lpTitle=NULL;si.lpDesktop=WinSta0Default;si.dwX=si.dwY=si.d

5、wXSize=si.dwYSize=0L;si.dwFlags=0;si.wShowWindow=SW_SHOW;si.lpReserved2=NULL;si.cbReserved2=0;CreateProcess(NULL,g_szPath,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,&si,&g_pi);VOID APIENTRYStopProcessAtWinLogoff(PWLX_NOTIFICATION_INFOpInfo)SafeTerminateProcess(g_pi.hProcess,0xDEADBEEF);VOID APIENT

6、RYYOUR_EVENT_HANDLERS(PWLX_NOTIFICATION_INFO pInfo) (2)实现输出函数。sample.defEXPORTSStartProcessAtWinLogonStopProcessAtWinLogoff然后在编译选项中添加/def:sample.def(3)把编译好的sample.dll和sample.exp复制到WindowsNT的系统目录。(4)添加注册表信息。HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsNTCurrentVersionWinLogonNotifyNameOfProjectAsynchron

7、ousREG_DWORD0DllnameREG_SZNameOfDll.dllImpersonateREG_DWORD0LogonREG_SZStartProcessAtWinLogonLogoffREG_SZStopProcessAtWinLogoff.REG_SZNameOfFunction实际上如果用户打开注册表,就会发现在HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionWinLogonNotify键下保存着多个这样的子键。比如下面是导出的信息之一。WindowsRegistryEditorVersion5.00HKEY

8、_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionWinLogonNotifyHKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionWinLogonNotifycscdllDLLName=cscdll.dllLogonWinLogonLogonEventLogoffWinLogonLogoffEventScreenSaverWinLogonScreenSaverEventStartupWinLogonStartupEventShutdownWinLogonShutdownEv

9、entStartShellWinLogonStartShellEventImpersonate=dword:00000000Asynchronous00000001创建WinLogon通知包,有很多用途。如果用户希望在特定条件下完成指定的功能,比如用户希望在系统关闭的时候完成某些功能,这可能是最好的实现方法。7.3 GINA动态链接库编程实现GINA(GraphicalIdentificationandAuthentication)动态链接库有很多用途,它可实现对用户登录系统的接管,可以用来提供自己的Shell程序,实现自己的程序能够排他运行,比如开机后只能运行一个程序。实现GINA程序和创建

10、WinLogon通知包一样,也需要编写一个动态链接库,这个动态链接库必须实现GINA规定的有关函数。另外,为了让WinLogon找到这个动态链接库,还必须在注册表中添加一个项,标识Gina动态链接库的名称,当然GINA必须位于Windows的系统目录。它要求在注册表下面的键下定义键项:HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionWinLogon 项的名称为GinaDLL,项值为库的名称,库的文件名应该包含扩展名,但不需要包含路径。注意:GINA是在系统启动时被加载的,如果这个程序加载失败,将导致系统崩溃,即便是安全模式也无

11、法实现修复。为了安全起见,用户最好准备两个操作系统,其中试验的操作系统,最好安装在FAT32分区。如果启动失败,可以使用Windows系统本身提供的MSGina.dll覆盖原来的GinaDLL文件,文件名不要变化。正常启动后,检查代码,或者删除指定键。当没有这个键项时,系统将使用MSGina.dll文件。GINA动态链接库要求实现下面的输出函数:WlxActivateUserShell用于激活用户外壳程序。WlxDisplayLockedNotice允许GINADLL显示锁定信息。WlxDisplaySASNotice当没有用户登录时WinLogon会调用这个函数。WlxDisplayStat

12、usMessage当状态信息显示时WinLogon调用这个函数。WlxGetConsoleSwitchCredentialsWinLogon调用这个函数去阅读当前登录用户的证书以便实现目标会话的透明传输。WlxGetStatusMessageWinLogon调用这个函数显示当前的状态信息。WlxInitialize初始化GINADLL。WlxIsLockOk验证当前工作站是否被锁定成功。WlxIslogoffOk验证注销是否成功。WlxLoggedOnSAS当WinLogon收到一个安全守护序列事件时,会调用这个函数,这时用户已经登录,但是工作站没有被锁定。WlxLoggedOutSAS当Wi

13、nLogon收到一个SAS事件而用户没有登录时会调用这个函数。WlxLogoff通知GINADLL,注销操作正在请求。WlxNegotiate预示当前版本的WinLogon可否和GINADLL一起使用。WlxNetworkProviderLoad当网络提供者被加载收集完有效的认证和识别信息时,WinLogon会回调这个函数。WlxRemoveStatusMessageWinLogon调用这个函数通知GINA状态信息正在被停止显示。WlxScreensaverNotify允许GINA和屏幕保护程序实现交互操作。WlxShutdownWinLogon会在关机前调用这个函数,允许GINA执行任何关机

14、前的操作,比如从阅读器中弹出智能卡。WlxStartApplication当系统需要一个应用程序在用户环境中启动时调用这个函数。WlxWkstaLockedSAS当工作者被锁定时收到SAS通知时调用这个函数。其中WlxNegotiate函数是必须实现的函数,这是WinLogon调用GINADLL的第一个函数。例7-1一个GINA链接库实现的框架。#ifndef UNICODE#define UNICODE#define _UNICODE#endif#includestdafx.hafxdllx.hprocess.h#define ULONG_PTR unsigned longTypedef s

15、truc t_WLX_CLIENT_CREDENTIALS_INFO DWORD dwType;PWSTR pszUserName;PWSTR pszDomain;PWSTR pszPassword;BOOL fPromptForPassword;WLX_CLIENT_CREDENTIALS_INFO_V1_0,*PWLX_CLIENT_CREDENTIALS_INFO_V1_0;Typedef BOOL (WINAPI*PWLX_CLOSE_USER_DESKTOP)(HANDLE hWlx,PWLX_DESKTOP pDesktop,HANDLEhToken);Typedef BOOL (

16、WINAPI*PWLX_SET_OPTION)(HANDLE hWlx,DWORD Option,ULONG_PTR Value,ULONG_PTR*OldValue);Typedef BOOL (WINAPI*PWLX_GET_OPTION)(HANDLE hWlx,DWORD Option,ULONG_PTR*Value);Typedef VOID(WINAPI*PWLX_WIN31_MIGRATE)(HANDLE hWlx);Typedef BOOL(WINAPI*PWLX_QUERY_CLIENT_CREDENTIALS)(PWLX_CLIENT_CREDENTIALS_INFO_V1

17、_0pCred);Typedef BOOL(WINAPI*PWLX_QUERY_IC_CREDENTIALS)(PWLX_CLIENT_CREDENTIALS_INFO_V1_0pCred);Typedef BOOL(WINAPI*PWLX_DISCONNECT)();#define WLX_DIRECTORY_LENGTH 1024Typedef struct _WLX_TERMINAL_SERVICES_DATA WCHAR ProfilePathWLX_DIRECTORY_LENGTH+1;WCHAR HomeDirWLX_DIRECTORY_LENGTH+1;WCHAR HomeDir

18、Drive4;WLX_TERMINAL_SERVICES_DATA,*PWLX_TERMINAL_SERVICES_DATA;Typedef DWORD(WINAPI*PWLX_QUERY_TERMINAL_SERVICES_DATA)( HANDLE hWlx, PWLX_TERMINAL_SERVICES_DATApTSData,WCHAR*UserName,WCHAR*Domain);Typedef struct _win32_DISPATCH_VERSION_1_3PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel;PWLX_SET_CONTEXT_POINT

19、ER WlxSetContextPointer;PWLX_SAS_NOTIFY WlxSasNotify;PWLX_SET_TIMEOUT WlxSetTimeout;PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection;PWLX_MESSAGE_BOX WlxMessageBox;PWLX_DIALOG_BOX WlxDialogBox;PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam;PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect;PWLX_DIALOG_BOX_

20、INDIRECT_PARAM WlxDialogBoxIndirectParam;PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser;PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinLogon;PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify;PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop;PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop;PWLX_CREA

21、TE_USER_DESKTOP WlxCreateUserDesktop;PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx;PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop;PWLX_SET_OPTION WlxSetOption;PWLX_GET_OPTION WlxGetOption;PWLX_WIN31_MIGRATE WlxWin31Migrate;PWLX_QUERY_CLIENT_CREDENTIALS WlxQueryClientCredentials;PWLX_QUERY_IC

22、_CREDENTIALS WlxQueryInetConnectorCredentials;PWLX_DISCONNECT WlxDisconnect;PWLX_QUERY_TERMINAL_SERVICES_DATA WlxQueryTerminalServicesData;WLX_DISPATCH_VERSION_1_3, *P WLX_DISPATCH_VERSION_1_3;Typedef structHANDLE hWlx;LPWSTR station;PWLX_DISPATCH_VERSION_1_3pWlxFunc s;HANDLEhDll Instance;HANDLE Use

23、rToken;GINA_CONTEXT,*PGINA_CONTEXT;/GINAfunctiondefineTypedef BOOL(WINAPI*F_WlxNegotiate)(DWORD dwWinLogonVersion,PDWORD pdwDllVersion);Typedef BOOL(WINAPI*F_WlxInitialize),(LPWSTR lpWinsta,HANDLEhWlx,PVOID pvReserved,PVOID pWinLogonFunctions,PVOID *pWlxContext);typedef VOID(WINAPI*F_WlxDisplaySASNo

24、tice)(PVOIDpWlxContext);typedef int(WINAPI*F_WlxLoggedOutSAS)(PVOID pWlxContext,DWORD dwSasType,PLUID pAuthenticationId,PSID pLogonSid,PDWORD pdwOptions,PHANDLE phToken,PWLX_MPR_NOTIFY_INFO pNprNotifyInfo,PVOID*pProfile);Typedef BOOL(WINAPI*F_WlxActivateUserShell)(PVOID pWlxContext,PWSTR pszDesktopN

25、ame, PWSTR pszMprLogonScript,PVOID pEnvironment);Typedef int(WINAPI*F_WlxLoggedOnSAS)(PVOID pWlxContext,DWORD dwSasType,PVOID pReserved);Typedef VOID(WINAPI*F_WlxDisplayLockedNotice)(PVOID pWlxContext);Typedef int(WINAPI*F_WlxWkstaLockedSAS)(PVOIDpWlxContext, DWORDdwSasType);Typedef BOOL (WINAPI *F_

26、WlxIsLockOk)(PVOID pWlxContext);Typedef BOOL (WINAPI *F_WlxIsLogoffOk)(PVOID pWlxContext);Typedef BOOL (WINAPI *F_WlxIsLogoff)(PVOID pWlxContext);Typedef VOID (WINAPI *F_WlxShutdown)(PVOID pWlxContext,DWOD ShutdownType);/version1.1Typedef BOOL(WINAPI*F_WlxScreenSaverNotify)(PVOID pWlxContext,BOOL*pS

27、ecure);Typedef BOOL(WINAPI*F_WlxStartApplication)(PVOID pWlxContext,PWSTR pszDesktopName,PVOIDpEnvironment, PWSTR pszCmdLine);/version1.3Typedef BOOL(WINAPI*F_WlxNetworkProviderLoad)(PVOID pWlxContext,PWLX_MPR_NOTIFY_INFO pNprNotifyInfo);Typedef BOOL(WINAPI*F_WlxDisplayStatusMessage)(PVOID pWlxContext,HDESKhDesktop,DWORD dwOptions,PWSTR pTitle,PWSTR pMessage);Typedef BOOL(WINAPI*F_WlxGetStatusMessage)(PVOID pWlxContext,DWORD*pdwOptions,PWSTR pMessage,DWORD dwBufferSize);Typedef BOOL(WINAPI*F_WlxRemoveStatusMessage)(PVOID pWlxContext);/functionF_WlxNegoti

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1