第7章WinLogon编程(2)

2018-12-27 16:05

WCHARProfilePath[WLX_DIRECTORY_LENGTH+1]; WCHARHomeDir[WLX_DIRECTORY_LENGTH+1]; WCHARHomeDirDrive[4];

}WLX_TERMINAL_SERVICES_DATA,*PWLX_TERMINAL_SERVICES_DATA; typedefDWORD(WINAPI*PWLX_QUERY_TERMINAL_SERVICES_DATA) (

HANDLEhWlx,

PWLX_TERMINAL_SERVICES_DATApTSData, WCHAR*UserName, WCHAR*Domain );

typedefstruct__win32_DISPATCH_VERSION_1_3 {

PWLX_USE_CTRL_ALT_DELWlxUseCtrlAltDel;

PWLX_SET_CONTEXT_POINTERWlxSetContextPointer; PWLX_SAS_NOTIFYWlxSasNotify; PWLX_SET_TIMEOUTWlxSetTimeout;

PWLX_ASSIGN_SHELL_PROTECTIONWlxAssignShellProtection; PWLX_MESSAGE_BOXWlxMessageBox; PWLX_DIALOG_BOXWlxDialogBox;

PWLX_DIALOG_BOX_PARAMWlxDialogBoxParam; PWLX_DIALOG_BOX_INDIRECTWlxDialogBoxIndirect;

PWLX_DIALOG_BOX_INDIRECT_PARAMWlxDialogBoxIndirectParam; PWLX_SWITCH_DESKTOP_TO_USERWlxSwitchDesktopToUser;

PWLX_SWITCH_DESKTOP_TO_WINLOGONWlxSwitchDesktopToWinLogon; PWLX_CHANGE_PASSWORD_NOTIFYWlxChangePasswordNotify; PWLX_GET_SOURCE_DESKTOPWlxGetSourceDesktop; PWLX_SET_RETURN_DESKTOPWlxSetReturnDesktop; PWLX_CREATE_USER_DESKTOPWlxCreateUserDesktop;

PWLX_CHANGE_PASSWORD_NOTIFY_EXWlxChangePasswordNotifyEx; PWLX_CLOSE_USER_DESKTOPWlxCloseUserDesktop; PWLX_SET_OPTIONWlxSetOption; PWLX_GET_OPTIONWlxGetOption;

PWLX_WIN31_MIGRATEWlxWin31Migrate;

PWLX_QUERY_CLIENT_CREDENTIALSWlxQueryClientCredentials; PWLX_QUERY_IC_CREDENTIALSWlxQueryInetConnectorCredentials; PWLX_DISCONNECTWlxDisconnect;

PWLX_QUERY_TERMINAL_SERVICES_DATAWlxQueryTerminalServicesData; }WLX_DISPATCH_VERSION_1_3,*PWLX_DISPATCH_VERSION_1_3; typedefstruct {

HANDLEhWlx; LPWSTRstation;

PWLX_DISPATCH_VERSION_1_3pWlxFuncs;

HANDLEhDllInstance; HANDLEUserToken;

}GINA_CONTEXT,*PGINA_CONTEXT; //GINAfunctiondefine

typedefBOOL(WINAPI*F_WlxNegotiate)(

DWORDdwWinLogonVersion,PDWORDpdwDllVersion);

typedefBOOL(WINAPI*F_WlxInitialize),(LPWSTRlpWinsta,HANDLE hWlx,PVOIDpvReserved,PVOIDpWinLogonFunctions,PVOID *pWlxContext);

typedefVOID(WINAPI*F_WlxDisplaySASNotice)(PVOIDpWlxContext); typedefint(WINAPI*F_WlxLoggedOutSAS)(

PVOIDpWlxContext,DWORDdwSasType,PLUIDpAuthenticationId, PSIDpLogonSid,PDWORDpdwOptions,PHANDLEphToken, PWLX_MPR_NOTIFY_INFOpNprNotifyInfo,PVOID*pProfile); typedefBOOL(WINAPI*F_WlxActivateUserShell)( PVOIDpWlxContext,PWSTRpszDesktopName, PWSTRpszMprLogonScript,PVOIDpEnvironment);

typedefint(WINAPI*F_WlxLoggedOnSAS)(PVOIDpWlxContext,DWORD dwSasType,PVOIDpReserved);

typedefVOID(WINAPI*F_WlxDisplayLockedNotice)(PVOID pWlxContext);

typedefint(WINAPI*F_WlxWkstaLockedSAS)(PVOIDpWlxContext, DWORDdwSasType);

//version1.1

typedefBOOL(WINAPI*F_WlxScreenSaverNotify)(PVOIDpWlxContext, BOOL*pSecure);

typedefBOOL(WINAPI*F_WlxStartApplication)( PVOIDpWlxContext,PWSTRpszDesktopName,PVOID pEnvironment,

PWSTRpszCmdLine); //version1.3

typedefBOOL(WINAPI*F_WlxNetworkProviderLoad)(

PVOIDpWlxContext,PWLX_MPR_NOTIFY_INFOpNprNotifyInfo); typedefBOOL(WINAPI*F_WlxDisplayStatusMessage)( PVOIDpWlxContext,HDESKhDesktop,DWORDdwOptions, PWSTRpTitle,PWSTRpMessage);

typedefBOOL(WINAPI*F_WlxGetStatusMessage)(PVOIDpWlxContext, DWORD*pdwOptions,PWSTRpMessage,DWORDdwBufferSize); typedefBOOL(WINAPI*F_WlxRemoveStatusMessage)(PVOID pWlxContext);

//function

F_WlxNegotiatep_WlxNegotiate=NULL; F_WlxInitializep_WlxInitialize=NULL;

F_WlxDisplaySASNoticep_WlxDisplaySASNotice=NULL; F_WlxLoggedOutSASp_WlxLoggedOutSAS=NULL;

F_WlxActivateUserShellp_WlxActivateUserShell=NULL; F_WlxLoggedOnSASp_WlxLoggedOnSAS=NULL;

F_WlxDisplayLockedNoticep_WlxDisplayLockedNotice=NULL; F_WlxWkstaLockedSASp_WlxWkstaLockedSAS=NULL; F_WlxIsLockOkp_WlxIsLockOk=NULL; F_WlxIsLogoffOkp_WlxIsLogoffOk=NULL; F_WlxLogoffp_WlxLogoff=NULL;

F_WlxShutdownp_WlxShutdown=NULL;

F_WlxScreenSaverNotifyp_WlxScreenSaverNotify=NULL; F_WlxStartApplicationp_WlxStartApplication=NULL;

F_WlxNetworkProviderLoadp_WlxNetworkProviderLoad=NULL; F_WlxDisplayStatusMessagep_WlxDisplayStatusMessage=NULL; F_WlxGetStatusMessagep_WlxGetStatusMessage=NULL;

F_WlxRemoveStatusMessagep_WlxRemoveStatusMessage=NULL; //initGINAfunction

staticHINSTANCEg_hGinaDll=NULL;

#defineGINA_DLLNAME_T(\BOOLLoadGinaDll() {

g_hGinaDll=LoadLibrary(GINA_DLLNAME); if(g_hGinaDll!=NULL) {

p_WlxNegotiate=(F_WlxNegotiate)GetProcAddress(g_hGinaDll, _T(\

p_WlxInitialize=(F_WlxInitialize)GetProcAddress(g_hGinaDll,

(g_hGinaDll,_T(\

p_WlxLoggedOutSAS=(F_WlxLoggedOutSAS)GetProcAddress(g_hGinaDll, _T(\p_WlxActivateUserShell=

(F_WlxActivateUserShell)GetProcAddress (g_hGinaDll,_T(\

p_WlxLoggedOnSAS=(F_WlxLoggedOnSAS)GetProcAddress(g_hGinaDll, _T(\p_WlxDisplayLockedNotice=

(F_WlxDisplayLockedNotice)GetProcAddress (g_hGinaDll,_T(\

p_WlxWkstaLockedSAS=

(F_WlxWkstaLockedSAS)GetProcAddress(g_hGinaDll, _T(\

p_WlxIsLockOk=(F_WlxIsLockOk)GetProcAddress(g_hGinaDll, _T(\

p_WlxIsLogoffOk=(F_WlxIsLogoffOk)GetProcAddress(g_hGinaDll, _T(\

p_WlxLogoff=(F_WlxLogoff)GetProcAddress(g_hGinaDll, _T(\

p_WlxShutdown=(F_WlxShutdown)GetProcAddress(g_hGinaDll, _T(\p_WlxScreenSaverNotify=

(F_WlxScreenSaverNotify)GetProcAddress (g_hGinaDll,_T(\p_WlxStartApplication=

(F_WlxStartApplication)GetProcAddress (g_hGinaDll,_T(\p_WlxNetworkProviderLoad=

(F_WlxNetworkProviderLoad)GetProcAddress (g_hGinaDll,_T(\p_WlxDisplayStatusMessage=

(F_WlxDisplayStatusMessage)GetProcAddress (g_hGinaDll,_T(\p_WlxGetStatusMessage=

(F_WlxGetStatusMessage)GetProcAddress(g_hGinaDll, _T(\p_WlxRemoveStatusMessage=

(F_WlxRemoveStatusMessage)GetProcAddress (g_hGinaDll,_T(\}

returnp_WlxNegotiate&&p_WlxInitialize&&p_WlxDisplaySASNotice&& p_WlxLoggedOutSAS&&p_WlxActivateUserShell&&p_WlxLoggedOnSAS&& p_WlxDisplayLockedNotice&&p_WlxWkstaLockedSAS&&p_WlxIsLockOk&& p_WlxIsLogoffOk&&p_WlxLogoff&&p_WlxShutdown &&p_WlxScreenSaverNotify&&

p_WlxStartApplication&&p_WlxNetworkProviderLoad&& p_WlxDisplayStatusMessage&&p_WlxGetStatusMessage

voidReleaseGinaDll() {

if(g_hGinaDll!=NULL){ FreeLibrary(g_hGinaDll); }

}

staticAFX_EXTENSION_MODULEGinaDLL={NULL,NULL}; staticHINSTANCEg_hdfginadll=NULL;

staticPGINA_CONTEXTg_pgContext=NULL; extern\

DllMain(HINSTANCEhInstance,DWORDdwReason,LPVOIDlpReserved) {

if(dwReason==DLL_PROCESS_ATTACH){ g_hdfginadll=hInstance; BOOLbRet=LoadGinaDll(); }

elseif(dwReason==DLL_PROCESS_DETACH){ ReleaseGinaDll(); }

return1; }

//GINAfunctiondefine

BOOLWINAPIWlxNegotiate(DWORDdwWinLogonVersion,PDWORDpdwDllVersion) {

returnp_WlxNegotiate(dwWinLogonVersion,pdwDllVersion); }

BOOLWINAPIWlxInitialize(LPWSTRlpWinsta,HANDLEhWlx,PVOID pvReserved,

PVOIDpWinLogonFunctions,PVOID*pWlxContext) {

BOOLbRet=p_WlxInitialize(lpWinsta,hWlx,pvReserved, pWinLogonFunctions,pWlxContext);

g_pgContext=(PGINA_CONTEXT)LocalAlloc(LMEM_FIXED|LMEM_ZEROINIT, sizeof(GINA_CONTEXT)); if(!g_pgContext)returnFALSE;

g_pgContext->hDllInstance=g_hdfginadll; g_pgContext->pWlxFuncs=

(PWLX_DISPATCH_VERSION_1_3)pWinLogonFunctions; g_pgContext->hWlx=hWlx;

g_pgContext->station=lpWinsta; returnbRet; }

VOIDWINAPIWlxDisplaySASNotice(PVOIDpWlxContext) {

p_WlxDisplaySASNotice(pWlxContext); }

intWINAPIWlxLoggedOutSAS(PVOIDpWlxContext,DWORDdwSasType, PLUIDpAuthenticationId,PSIDpLogonSid, PDWORDpdwOptions,PHANDLEphToken,


第7章WinLogon编程(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:20101014123937765《社会工作导论》试题及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: