自定义Gina运行时出错 本帖最后由 stlnkm 于 2010-08-22 00:29:15 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 代码如下://msgina.cpp#include <windows.h>#include <winwlx.h>#include <tchar.h>#define _LNKMDEBUG#ifdef _LNKMDEBUG#define MSGBOXEX(Msg,Title) MessageBox(NULL,_T(#Msg),_T(#Title),MB_OK);#else#define MSGBOXEX(Msg,Title) #endif#define MSGBOX(Msg) MSGBOXEX(Msg,Function)#define MSG(Msg) _T(#Msg)##_T("\r\n")typedef BOOL (WINAPI * PFWLXNEGOTIATE)(DWORD,PDWORD);typedef BOOL (WINAPI * PFWLXINITIALIZE)(LPWSTR,HANDLE,PVOID,PVOID,PVOID *);typedef void (WINAPI * PFWLXDISPLAYSASNOTICE)(PVOID);typedef int (WINAPI * PFWLXLOGGEDOUTSAS)(PVOID,DWORD,PLUID,PSID,PDWORD,PHANDLE,PWLX_MPR_NOTIFY_INFO,PVOID *);typedef BOOL (WINAPI * PFWLXACTIVATEUSERSHELL)(PVOID,PWSTR,PWSTR,PVOID);typedef int (WINAPI * PFWLXLOGGEDONSAS)(PVOID,DWORD,PVOID);typedef VOID (WINAPI * PFWLXDISPLAYLOCKEDNOTICE)(PVOID);typedef int (WINAPI * PFWLXWKSTALOCKEDSAS)(PVOID,DWORD);typedef BOOL (WINAPI * PFWLXISLOCKOK)(PVOID);typedef BOOL (WINAPI * PFWLXISLOGOFFOK)(PVOID);typedef void (WINAPI * PFWLXLOGOFF)(PVOID);typedef void (WINAPI * PFWLXSHUTDOWN)(PVOID,DWORD);typedef BOOL (WINAPI * PFWLXSTARTAPPLICATION)(PVOID,PWSTR,PVOID,PWSTR);typedef BOOL (WINAPI * PFWLXSCREENSAVERNOTIFY)(PVOID,BOOL *);typedef BOOL (WINAPI * PFWLXNETWORKPROVIDERLOAD)(PVOID,PWLX_MPR_NOTIFY_INFO);typedef BOOL (WINAPI * PFWLXDISPLAYSTATUSMESSAGE)(PVOID,HDESK,DWORD,PWSTR,PWSTR);typedef BOOL (WINAPI * PFWLXGETSTATUSMESSAGE)(PVOID,DWORD *,PWSTR,DWORD);typedef BOOL (WINAPI * PFWLXREMOVESTATUSMESSAGE)(PVOID);typedef BOOL (WINAPI * PFWLXGETCONSOLESWITCHCREDENTIALS) (PVOID,PVOID);PFWLXNEGOTIATE pfnWlxNegotiate=NULL;PFWLXINITIALIZE pfnWlxInitialize=NULL;PFWLXACTIVATEUSERSHELL pfnWlxActivateUserShell=NULL;PFWLXDISPLAYLOCKEDNOTICE pfnWlxDisplayLockedNotice=NULL;PFWLXDISPLAYSASNOTICE pfnWlxDisplaySASNotice=NULL;PFWLXDISPLAYSTATUSMESSAGE pfnWlxDisplayStatusMessage=NULL;PFWLXGETCONSOLESWITCHCREDENTIALS pfnWlxGetConsoleSwitchCredentials=NULL;PFWLXGETSTATUSMESSAGE pfnWlxGetStatusMessage=NULL;PFWLXISLOCKOK pfnWlxIsLockOk=NULL;PFWLXISLOGOFFOK pfnWlxIsLogoffOk=NULL;PFWLXLOGGEDONSAS pfnWlxLoggedOnSAS=NULL;PFWLXLOGGEDOUTSAS pfnWlxLoggedOutSAS=NULL;PFWLXLOGOFF pfnWlxLogoff=NULL;PFWLXNETWORKPROVIDERLOAD pfnWlxNetworkProviderLoad=NULL;PFWLXREMOVESTATUSMESSAGE pfnWlxRemoveStatusMessage=NULL;PFWLXSCREENSAVERNOTIFY pfnWlxScreenSaverNotify=NULL;PFWLXSHUTDOWN pfnWlxShutdown=NULL;PFWLXSTARTAPPLICATION pfnWlxStartApplication=NULL;PFWLXWKSTALOCKEDSAS pfnWlxWkstaLockedSAS=NULL;//日志文件句柄HANDLE g_hLogFile=NULL;//写日志inline int WriteLog(TCHAR *pszMsg){ DWORD dwFileSizeHigh=0; DWORD dwFileSizeLow=0; dwFileSizeLow=::GetFileSize(g_hLogFile,&dwFileSizeHigh); ::SetFilePointer(g_hLogFile,dwFileSizeLow,PLONG(&dwFileSizeHigh),FILE_BEGIN); DWORD dwWriteBytes=0; ::WriteFile(g_hLogFile,pszMsg,_tcslen(pszMsg)*sizeof(TCHAR),&dwWriteBytes,NULL); return dwWriteBytes;}BOOL LoadOldGina(){ HMODULE hOldGina=::LoadLibrary(_T("oldmsgina.dll")); if(!hOldGina) { WriteLog(MSG(LoadLibrary() Failed!)); return FALSE; } pfnWlxNegotiate=(PFWLXNEGOTIATE)::GetProcAddress(hOldGina,"WlxNegotiate"); pfnWlxInitialize=(PFWLXINITIALIZE)::GetProcAddress(hOldGina,"WlxInitialize"); pfnWlxActivateUserShell=(PFWLXACTIVATEUSERSHELL)::GetProcAddress(hOldGina,"WlxActivateUserShell"); pfnWlxDisplayLockedNotice=(PFWLXDISPLAYLOCKEDNOTICE)::GetProcAddress(hOldGina,"WlxDisplayLockedNotice"); pfnWlxDisplaySASNotice=(PFWLXDISPLAYSASNOTICE)::GetProcAddress(hOldGina,"WlxDisplaySASNotice"); pfnWlxDisplayStatusMessage=(PFWLXDISPLAYSTATUSMESSAGE)::GetProcAddress(hOldGina,"WlxDisplayStatusMessage"); pfnWlxGetConsoleSwitchCredentials=(PFWLXGETCONSOLESWITCHCREDENTIALS)::GetProcAddress(hOldGina,"WlxGetConsoleSwitchCredentials"); pfnWlxGetStatusMessage=(PFWLXGETSTATUSMESSAGE)::GetProcAddress(hOldGina,"WlxGetStatusMessage"); pfnWlxIsLockOk=(PFWLXISLOCKOK)::GetProcAddress(hOldGina,"WlxIsLockOk"); pfnWlxIsLogoffOk=(PFWLXISLOGOFFOK)::GetProcAddress(hOldGina,"WlxIsLogoffOk"); pfnWlxLoggedOnSAS=(PFWLXLOGGEDONSAS)::GetProcAddress(hOldGina,"WlxLoggedOnSAS"); pfnWlxLoggedOutSAS=(PFWLXLOGGEDOUTSAS)::GetProcAddress(hOldGina,"WlxLoggedOutSAS"); pfnWlxLogoff=(PFWLXLOGOFF)::GetProcAddress(hOldGina,"WlxLogoff"); pfnWlxNetworkProviderLoad=(PFWLXNETWORKPROVIDERLOAD)::GetProcAddress(hOldGina,"WlxNetworkProviderLoad"); pfnWlxRemoveStatusMessage=(PFWLXREMOVESTATUSMESSAGE)::GetProcAddress(hOldGina,"WlxRemoveStatusMessage"); pfnWlxScreenSaverNotify=(PFWLXSCREENSAVERNOTIFY)::GetProcAddress(hOldGina,"WlxScreenSaverNotify"); pfnWlxShutdown=(PFWLXSHUTDOWN)::GetProcAddress(hOldGina,"WlxShutdown"); pfnWlxStartApplication=(PFWLXSTARTAPPLICATION)::GetProcAddress(hOldGina,"WlxStartApplication"); pfnWlxWkstaLockedSAS=(PFWLXWKSTALOCKEDSAS)::GetProcAddress(hOldGina,"WlxWkstaLockedSAS"); BOOL bRet=pfnWlxNegotiate && pfnWlxInitialize && pfnWlxActivateUserShell && pfnWlxDisplayLockedNotice && pfnWlxDisplaySASNotice && pfnWlxDisplayStatusMessage && pfnWlxGetConsoleSwitchCredentials && pfnWlxGetStatusMessage && pfnWlxIsLockOk && pfnWlxIsLogoffOk && pfnWlxLoggedOnSAS && pfnWlxLoggedOutSAS && pfnWlxLogoff && pfnWlxNetworkProviderLoad && pfnWlxRemoveStatusMessage && pfnWlxScreenSaverNotify && pfnWlxShutdown && pfnWlxStartApplication && pfnWlxWkstaLockedSAS; return bRet;} BOOL WINAPI WlxNegotiate( __in DWORD dwWinLogonVersion, __out PDWORD pdwDllVersion){ WriteLog(MSG(WlxNegotiate)); MSGBOX(WlxNegotiate) if(!LoadOldGina()) { WriteLog(MSG(LoadOldGina() Failed!)); return FALSE; } return pfnWlxNegotiate(dwWinLogonVersion,pdwDllVersion);}BOOL WINAPI WlxInitialize( __in LPWSTR lpWinsta, __in HANDLE hWlx, PVOID pvReserved, __in PVOID pWinlogonFunctions, __out PVOID* pWlxContext){ WriteLog(MSG(WlxInitialize)); MSGBOX(WlxInitialize) return pfnWlxInitialize(lpWinsta,hWlx,pvReserved,pWinlogonFunctions,pWlxContext);}BOOL WINAPI WlxActivateUserShell( __in PVOID pWlxContext, __in PWSTR pszDesktopName, __in PWSTR pszMprLogonScript, __in PVOID pEnvironment){ WriteLog(MSG(WlxActivateUserShell)); MSGBOX(WlxActivateUserShell) return pfnWlxActivateUserShell(pWlxContext,pszDesktopName,pszMprLogonScript,pEnvironment);}VOID WINAPI WlxDisplayLockedNotice( __in PVOID pWlxContext){ WriteLog(MSG(WlxDisplayLockedNotice)); MSGBOX(WlxDisplayLockedNotice) pfnWlxDisplayLockedNotice(pWlxContext);}void WINAPI WlxDisplaySASNotice( __in PVOID pWlxContext){ WriteLog(MSG(WlxDisplaySASNotice)); MSGBOX(WlxDisplaySASNotice) pfnWlxDisplaySASNotice(pWlxContext);}BOOL WINAPI WlxDisplayStatusMessage( __in PVOID pWlxContext, __in HDESK hDesktop, __in DWORD dwOptions, __in PWSTR pTitle, __in PWSTR pMessage){ WriteLog(MSG(WlxDisplayStatusMessage)); MSGBOX(WlxDisplayStatusMessage) return pfnWlxDisplayStatusMessage(pWlxContext,hDesktop,dwOptions,pTitle,pMessage);}BOOL WINAPI WlxGetStatusMessage( __in PVOID pWlxContext, __out DWORD* pdwOptions, __out PWSTR pMessage, __in DWORD dwBufferSize){ WriteLog(MSG(WlxGetStatusMessage)); MSGBOX(WlxGetStatusMessage) return pfnWlxGetStatusMessage(pWlxContext,pdwOptions,pMessage,dwBufferSize);}BOOL WINAPI WlxIsLockOk( __in PVOID pWlxContext){ WriteLog(MSG(WlxIsLockOk)); MSGBOX(WlxIsLockOk) return pfnWlxIsLockOk(pWlxContext);}BOOL WINAPI WlxIsLogoffOk( __in PVOID pWlxContext){ WriteLog(MSG(WlxIsLogoffOk)); MSGBOX(WlxIsLogoffOk) return pfnWlxIsLogoffOk(pWlxContext);}int WINAPI WlxLoggedOnSAS( __in PVOID pWlxContext, __in DWORD dwSasType, __in PVOID pReserved){ WriteLog(MSG(WlxLoggedOnSAS)); MSGBOX(WlxLoggedOnSAS) return pfnWlxLoggedOnSAS(pWlxContext,dwSasType,pReserved);}int WINAPI WlxLoggedOutSAS( __in PVOID pWlxContext, __in DWORD dwSasType, __out PLUID pAuthenticationId, __in_out PSID pLogonSid, __out PDWORD pdwOptions, __out PHANDLE phToken, __out PWLX_MPR_NOTIFY_INFO pNprNotifyInfo, __out PVOID* pProfile){ WriteLog(MSG(WlxLoggedOutSAS)); MSGBOX(WlxLoggedOutSAS) return pfnWlxLoggedOutSAS(pWlxContext,dwSasType,pAuthenticationId,pLogonSid,pdwOptions,phToken,pNprNotifyInfo,pProfile);}void WINAPI WlxLogoff( __in PVOID pWlxContext){ WriteLog(MSG(WlxLogoff)); MSGBOX(WlxLogoff) pfnWlxLogoff(pWlxContext);}BOOL WINAPI WlxNetworkProviderLoad( __in PVOID pWlxContext, __out PWLX_MPR_NOTIFY_INFO pNprNotifyInfo){ WriteLog(MSG(WlxNetworkProviderLoad)); MSGBOX(WlxNetworkProviderLoad) return pfnWlxNetworkProviderLoad(pWlxContext,pNprNotifyInfo);}BOOL WINAPI WlxRemoveStatusMessage( __in PVOID pWlxContext){ WriteLog(MSG(WlxRemoveStatusMessage)); MSGBOX(WlxRemoveStatusMessage) return pfnWlxRemoveStatusMessage(pWlxContext);}BOOL WINAPI WlxScreenSaverNotify( __in PVOID pWlxContext, __in_out BOOL* pSecure){ WriteLog(MSG(WlxScreenSaverNotify)); MSGBOX(WlxScreenSaverNotify) return pfnWlxScreenSaverNotify(pWlxContext,pSecure);}void WINAPI WlxShutdown( __in PVOID pWlxContext, __in DWORD ShutdownType){ WriteLog(MSG(WlxShutdown)); MSGBOX(WlxShutdown) pfnWlxShutdown(pWlxContext,ShutdownType);}BOOL WINAPI WlxStartApplication( __in PVOID pWlxContext, __in PWSTR pszDesktopName, __in PVOID pEnvironment, __in PWSTR pszCmdLine){ WriteLog(MSG(WlxStartApplication)); MSGBOX(WlxStartApplication) return pfnWlxStartApplication(pWlxContext,pszDesktopName,pEnvironment,pszCmdLine);}int WINAPI WlxWkstaLockedSAS( __in PVOID pWlxContext, __in DWORD dwSasType){ WriteLog(MSG(WlxWkstaLockedSAS)); MSGBOX(WlxWkstaLockedSAS) return pfnWlxWkstaLockedSAS(pWlxContext,dwSasType);}BOOL WINAPI WlxGetConsoleSwitchCredentials( __in PVOID pWlxContext, __out PVOID pInfo){ WriteLog(MSG(WlxGetConsoleSwitchCredentials)); MSGBOX(WlxGetConsoleSwitchCredentials); return pfnWlxGetConsoleSwitchCredentials(pWlxContext,pInfo);}//dllmain.cppconst TCHAR szFileName[MAX_PATH]=_T("C:\\Gina.log");extern HANDLE g_hLogFile;BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: g_hLogFile=::CreateFile(szFileName,FILE_WRITE_DATA,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: ::CloseHandle(g_hLogFile); g_hLogFile=NULL; break; } return TRUE;}//msgina.def文件LIBRARY msginaEXPORTS WlxNegotiate WlxInitialize WlxActivateUserShell WlxDisplayLockedNotice WlxDisplaySASNotice WlxDisplayStatusMessage WlxGetConsoleSwitchCredentials WlxGetStatusMessage WlxIsLockOk WlxIsLogoffOk WlxLoggedOnSAS WlxLoggedOutSAS WlxLogoff WlxNetworkProviderLoad WlxRemoveStatusMessage WlxScreenSaverNotify WlxShutdown WlxStartApplication WlxWkstaLockedSAS 列表控件数据存储问题 怎样用ATL COM撰写 service object 呵呵,俺搞java的,来玩玩,程序还是vc做的跑的快呀!! 求类似VC.NET的语法高亮,和列出函数信息的编辑器代码? 一对多,怎么做?(高分相送) Help me with VxD Tools 如何从dll文件得到.h文件? 为何我定义的struct和初始化不对? 所有csdn的高手,如何解决这个问题?一口价---------100分 关于windows的消息系统 想了 5个晚上 没想明白!!求求帮我比较2段代码区别 我写的导航器在防缩是1.0情况下正常 放大缩小后就不正常了
#include <windows.h>
#include <winwlx.h>
#include <tchar.h>#define _LNKMDEBUG#ifdef _LNKMDEBUG
#define MSGBOXEX(Msg,Title) MessageBox(NULL,_T(#Msg),_T(#Title),MB_OK);
#else
#define MSGBOXEX(Msg,Title)
#endif#define MSGBOX(Msg) MSGBOXEX(Msg,Function)
#define MSG(Msg) _T(#Msg)##_T("\r\n")typedef BOOL (WINAPI * PFWLXNEGOTIATE)(DWORD,PDWORD);
typedef BOOL (WINAPI * PFWLXINITIALIZE)(LPWSTR,HANDLE,PVOID,PVOID,PVOID *);
typedef void (WINAPI * PFWLXDISPLAYSASNOTICE)(PVOID);
typedef int (WINAPI * PFWLXLOGGEDOUTSAS)(PVOID,DWORD,PLUID,PSID,PDWORD,PHANDLE,PWLX_MPR_NOTIFY_INFO,PVOID *);
typedef BOOL (WINAPI * PFWLXACTIVATEUSERSHELL)(PVOID,PWSTR,PWSTR,PVOID);
typedef int (WINAPI * PFWLXLOGGEDONSAS)(PVOID,DWORD,PVOID);
typedef VOID (WINAPI * PFWLXDISPLAYLOCKEDNOTICE)(PVOID);
typedef int (WINAPI * PFWLXWKSTALOCKEDSAS)(PVOID,DWORD);
typedef BOOL (WINAPI * PFWLXISLOCKOK)(PVOID);
typedef BOOL (WINAPI * PFWLXISLOGOFFOK)(PVOID);
typedef void (WINAPI * PFWLXLOGOFF)(PVOID);
typedef void (WINAPI * PFWLXSHUTDOWN)(PVOID,DWORD);
typedef BOOL (WINAPI * PFWLXSTARTAPPLICATION)(PVOID,PWSTR,PVOID,PWSTR);
typedef BOOL (WINAPI * PFWLXSCREENSAVERNOTIFY)(PVOID,BOOL *);
typedef BOOL (WINAPI * PFWLXNETWORKPROVIDERLOAD)(PVOID,PWLX_MPR_NOTIFY_INFO);
typedef BOOL (WINAPI * PFWLXDISPLAYSTATUSMESSAGE)(PVOID,HDESK,DWORD,PWSTR,PWSTR);
typedef BOOL (WINAPI * PFWLXGETSTATUSMESSAGE)(PVOID,DWORD *,PWSTR,DWORD);
typedef BOOL (WINAPI * PFWLXREMOVESTATUSMESSAGE)(PVOID);
typedef BOOL (WINAPI * PFWLXGETCONSOLESWITCHCREDENTIALS) (PVOID,PVOID);PFWLXNEGOTIATE pfnWlxNegotiate=NULL;
PFWLXINITIALIZE pfnWlxInitialize=NULL;
PFWLXACTIVATEUSERSHELL pfnWlxActivateUserShell=NULL;
PFWLXDISPLAYLOCKEDNOTICE pfnWlxDisplayLockedNotice=NULL;
PFWLXDISPLAYSASNOTICE pfnWlxDisplaySASNotice=NULL;
PFWLXDISPLAYSTATUSMESSAGE pfnWlxDisplayStatusMessage=NULL;
PFWLXGETCONSOLESWITCHCREDENTIALS pfnWlxGetConsoleSwitchCredentials=NULL;
PFWLXGETSTATUSMESSAGE pfnWlxGetStatusMessage=NULL;
PFWLXISLOCKOK pfnWlxIsLockOk=NULL;
PFWLXISLOGOFFOK pfnWlxIsLogoffOk=NULL;
PFWLXLOGGEDONSAS pfnWlxLoggedOnSAS=NULL;
PFWLXLOGGEDOUTSAS pfnWlxLoggedOutSAS=NULL;
PFWLXLOGOFF pfnWlxLogoff=NULL;
PFWLXNETWORKPROVIDERLOAD pfnWlxNetworkProviderLoad=NULL;
PFWLXREMOVESTATUSMESSAGE pfnWlxRemoveStatusMessage=NULL;
PFWLXSCREENSAVERNOTIFY pfnWlxScreenSaverNotify=NULL;
PFWLXSHUTDOWN pfnWlxShutdown=NULL;
PFWLXSTARTAPPLICATION pfnWlxStartApplication=NULL;
PFWLXWKSTALOCKEDSAS pfnWlxWkstaLockedSAS=NULL;//日志文件句柄
HANDLE g_hLogFile=NULL;//写日志
inline int WriteLog(TCHAR *pszMsg)
{
DWORD dwFileSizeHigh=0;
DWORD dwFileSizeLow=0;
dwFileSizeLow=::GetFileSize(g_hLogFile,&dwFileSizeHigh);
::SetFilePointer(g_hLogFile,dwFileSizeLow,PLONG(&dwFileSizeHigh),FILE_BEGIN);
DWORD dwWriteBytes=0;
::WriteFile(g_hLogFile,pszMsg,_tcslen(pszMsg)*sizeof(TCHAR),&dwWriteBytes,NULL);
return dwWriteBytes;
}
BOOL LoadOldGina()
{
HMODULE hOldGina=::LoadLibrary(_T("oldmsgina.dll"));
if(!hOldGina)
{
WriteLog(MSG(LoadLibrary() Failed!));
return FALSE;
}
pfnWlxNegotiate=(PFWLXNEGOTIATE)::GetProcAddress(hOldGina,"WlxNegotiate");
pfnWlxInitialize=(PFWLXINITIALIZE)::GetProcAddress(hOldGina,"WlxInitialize");
pfnWlxActivateUserShell=(PFWLXACTIVATEUSERSHELL)::GetProcAddress(hOldGina,"WlxActivateUserShell");
pfnWlxDisplayLockedNotice=(PFWLXDISPLAYLOCKEDNOTICE)::GetProcAddress(hOldGina,"WlxDisplayLockedNotice");
pfnWlxDisplaySASNotice=(PFWLXDISPLAYSASNOTICE)::GetProcAddress(hOldGina,"WlxDisplaySASNotice");
pfnWlxDisplayStatusMessage=(PFWLXDISPLAYSTATUSMESSAGE)::GetProcAddress(hOldGina,"WlxDisplayStatusMessage");
pfnWlxGetConsoleSwitchCredentials=(PFWLXGETCONSOLESWITCHCREDENTIALS)::GetProcAddress(hOldGina,"WlxGetConsoleSwitchCredentials");
pfnWlxGetStatusMessage=(PFWLXGETSTATUSMESSAGE)::GetProcAddress(hOldGina,"WlxGetStatusMessage");
pfnWlxIsLockOk=(PFWLXISLOCKOK)::GetProcAddress(hOldGina,"WlxIsLockOk");
pfnWlxIsLogoffOk=(PFWLXISLOGOFFOK)::GetProcAddress(hOldGina,"WlxIsLogoffOk");
pfnWlxLoggedOnSAS=(PFWLXLOGGEDONSAS)::GetProcAddress(hOldGina,"WlxLoggedOnSAS");
pfnWlxLoggedOutSAS=(PFWLXLOGGEDOUTSAS)::GetProcAddress(hOldGina,"WlxLoggedOutSAS");
pfnWlxLogoff=(PFWLXLOGOFF)::GetProcAddress(hOldGina,"WlxLogoff");
pfnWlxNetworkProviderLoad=(PFWLXNETWORKPROVIDERLOAD)::GetProcAddress(hOldGina,"WlxNetworkProviderLoad");
pfnWlxRemoveStatusMessage=(PFWLXREMOVESTATUSMESSAGE)::GetProcAddress(hOldGina,"WlxRemoveStatusMessage");
pfnWlxScreenSaverNotify=(PFWLXSCREENSAVERNOTIFY)::GetProcAddress(hOldGina,"WlxScreenSaverNotify");
pfnWlxShutdown=(PFWLXSHUTDOWN)::GetProcAddress(hOldGina,"WlxShutdown");
pfnWlxStartApplication=(PFWLXSTARTAPPLICATION)::GetProcAddress(hOldGina,"WlxStartApplication");
pfnWlxWkstaLockedSAS=(PFWLXWKSTALOCKEDSAS)::GetProcAddress(hOldGina,"WlxWkstaLockedSAS"); BOOL bRet=pfnWlxNegotiate && pfnWlxInitialize && pfnWlxActivateUserShell && pfnWlxDisplayLockedNotice && pfnWlxDisplaySASNotice &&
pfnWlxDisplayStatusMessage && pfnWlxGetConsoleSwitchCredentials && pfnWlxGetStatusMessage && pfnWlxIsLockOk && pfnWlxIsLogoffOk &&
pfnWlxLoggedOnSAS && pfnWlxLoggedOutSAS && pfnWlxLogoff && pfnWlxNetworkProviderLoad && pfnWlxRemoveStatusMessage &&
pfnWlxScreenSaverNotify && pfnWlxShutdown && pfnWlxStartApplication && pfnWlxWkstaLockedSAS;
return bRet;
}
BOOL WINAPI WlxNegotiate(
__in DWORD dwWinLogonVersion,
__out PDWORD pdwDllVersion
)
{
WriteLog(MSG(WlxNegotiate));
MSGBOX(WlxNegotiate)
if(!LoadOldGina())
{
WriteLog(MSG(LoadOldGina() Failed!));
return FALSE;
}
return pfnWlxNegotiate(dwWinLogonVersion,pdwDllVersion);
}BOOL WINAPI WlxInitialize(
__in LPWSTR lpWinsta,
__in HANDLE hWlx,
PVOID pvReserved,
__in PVOID pWinlogonFunctions,
__out PVOID* pWlxContext
)
{
WriteLog(MSG(WlxInitialize));
MSGBOX(WlxInitialize)
return pfnWlxInitialize(lpWinsta,hWlx,pvReserved,pWinlogonFunctions,pWlxContext);
}BOOL WINAPI WlxActivateUserShell(
__in PVOID pWlxContext,
__in PWSTR pszDesktopName,
__in PWSTR pszMprLogonScript,
__in PVOID pEnvironment
)
{
WriteLog(MSG(WlxActivateUserShell));
MSGBOX(WlxActivateUserShell)
return pfnWlxActivateUserShell(pWlxContext,pszDesktopName,pszMprLogonScript,pEnvironment);
}VOID WINAPI WlxDisplayLockedNotice(
__in PVOID pWlxContext
)
{
WriteLog(MSG(WlxDisplayLockedNotice));
MSGBOX(WlxDisplayLockedNotice)
pfnWlxDisplayLockedNotice(pWlxContext);
}void WINAPI WlxDisplaySASNotice(
__in PVOID pWlxContext
)
{
WriteLog(MSG(WlxDisplaySASNotice));
MSGBOX(WlxDisplaySASNotice)
pfnWlxDisplaySASNotice(pWlxContext);
}BOOL WINAPI WlxDisplayStatusMessage(
__in PVOID pWlxContext,
__in HDESK hDesktop,
__in DWORD dwOptions,
__in PWSTR pTitle,
__in PWSTR pMessage
)
{
WriteLog(MSG(WlxDisplayStatusMessage));
MSGBOX(WlxDisplayStatusMessage)
return pfnWlxDisplayStatusMessage(pWlxContext,hDesktop,dwOptions,pTitle,pMessage);
}BOOL WINAPI WlxGetStatusMessage(
__in PVOID pWlxContext,
__out DWORD* pdwOptions,
__out PWSTR pMessage,
__in DWORD dwBufferSize
)
{
WriteLog(MSG(WlxGetStatusMessage));
MSGBOX(WlxGetStatusMessage)
return pfnWlxGetStatusMessage(pWlxContext,pdwOptions,pMessage,dwBufferSize);
}BOOL WINAPI WlxIsLockOk(
__in PVOID pWlxContext
)
{
WriteLog(MSG(WlxIsLockOk));
MSGBOX(WlxIsLockOk)
return pfnWlxIsLockOk(pWlxContext);
}BOOL WINAPI WlxIsLogoffOk(
__in PVOID pWlxContext
)
{
WriteLog(MSG(WlxIsLogoffOk));
MSGBOX(WlxIsLogoffOk)
return pfnWlxIsLogoffOk(pWlxContext);
}int WINAPI WlxLoggedOnSAS(
__in PVOID pWlxContext,
__in DWORD dwSasType,
__in PVOID pReserved
)
{
WriteLog(MSG(WlxLoggedOnSAS));
MSGBOX(WlxLoggedOnSAS)
return pfnWlxLoggedOnSAS(pWlxContext,dwSasType,pReserved);
}int WINAPI WlxLoggedOutSAS(
__in PVOID pWlxContext,
__in DWORD dwSasType,
__out PLUID pAuthenticationId,
__in_out PSID pLogonSid,
__out PDWORD pdwOptions,
__out PHANDLE phToken,
__out PWLX_MPR_NOTIFY_INFO pNprNotifyInfo,
__out PVOID* pProfile
)
{
WriteLog(MSG(WlxLoggedOutSAS));
MSGBOX(WlxLoggedOutSAS)
return pfnWlxLoggedOutSAS(pWlxContext,dwSasType,pAuthenticationId,pLogonSid,pdwOptions,phToken,pNprNotifyInfo,pProfile);
}void WINAPI WlxLogoff(
__in PVOID pWlxContext
)
{
WriteLog(MSG(WlxLogoff));
MSGBOX(WlxLogoff)
pfnWlxLogoff(pWlxContext);
}BOOL WINAPI WlxNetworkProviderLoad(
__in PVOID pWlxContext,
__out PWLX_MPR_NOTIFY_INFO pNprNotifyInfo
)
{
WriteLog(MSG(WlxNetworkProviderLoad));
MSGBOX(WlxNetworkProviderLoad)
return pfnWlxNetworkProviderLoad(pWlxContext,pNprNotifyInfo);
}BOOL WINAPI WlxRemoveStatusMessage(
__in PVOID pWlxContext
)
{
WriteLog(MSG(WlxRemoveStatusMessage));
MSGBOX(WlxRemoveStatusMessage)
return pfnWlxRemoveStatusMessage(pWlxContext);
}BOOL WINAPI WlxScreenSaverNotify(
__in PVOID pWlxContext,
__in_out BOOL* pSecure
)
{
WriteLog(MSG(WlxScreenSaverNotify));
MSGBOX(WlxScreenSaverNotify)
return pfnWlxScreenSaverNotify(pWlxContext,pSecure);
}void WINAPI WlxShutdown(
__in PVOID pWlxContext,
__in DWORD ShutdownType
)
{
WriteLog(MSG(WlxShutdown));
MSGBOX(WlxShutdown)
pfnWlxShutdown(pWlxContext,ShutdownType);
}BOOL WINAPI WlxStartApplication(
__in PVOID pWlxContext,
__in PWSTR pszDesktopName,
__in PVOID pEnvironment,
__in PWSTR pszCmdLine
)
{
WriteLog(MSG(WlxStartApplication));
MSGBOX(WlxStartApplication)
return pfnWlxStartApplication(pWlxContext,pszDesktopName,pEnvironment,pszCmdLine);
}int WINAPI WlxWkstaLockedSAS(
__in PVOID pWlxContext,
__in DWORD dwSasType
)
{
WriteLog(MSG(WlxWkstaLockedSAS));
MSGBOX(WlxWkstaLockedSAS)
return pfnWlxWkstaLockedSAS(pWlxContext,dwSasType);
}BOOL WINAPI WlxGetConsoleSwitchCredentials(
__in PVOID pWlxContext,
__out PVOID pInfo
)
{
WriteLog(MSG(WlxGetConsoleSwitchCredentials));
MSGBOX(WlxGetConsoleSwitchCredentials);
return pfnWlxGetConsoleSwitchCredentials(pWlxContext,pInfo);
}
//dllmain.cpp
const TCHAR szFileName[MAX_PATH]=_T("C:\\Gina.log");
extern HANDLE g_hLogFile;BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
g_hLogFile=::CreateFile(szFileName,FILE_WRITE_DATA,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
::CloseHandle(g_hLogFile);
g_hLogFile=NULL;
break;
}
return TRUE;
}//msgina.def文件LIBRARY msginaEXPORTS
WlxNegotiate
WlxInitialize
WlxActivateUserShell
WlxDisplayLockedNotice
WlxDisplaySASNotice
WlxDisplayStatusMessage
WlxGetConsoleSwitchCredentials
WlxGetStatusMessage
WlxIsLockOk
WlxIsLogoffOk
WlxLoggedOnSAS
WlxLoggedOutSAS
WlxLogoff
WlxNetworkProviderLoad
WlxRemoveStatusMessage
WlxScreenSaverNotify
WlxShutdown
WlxStartApplication
WlxWkstaLockedSAS