////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 头文件
#define UNICODE
#define _UNICODE
#include <Windows.h>
#include <WinWlx.h>
#include <ShLwApi.h>
#include <TLHelp32.h>
#pragma comment(lib, "ShLwApi.lib")
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
#pragma comment(linker, "/EXPORT:Noname1=_AheadLib_Noname1,@1,NONAME")
#pragma comment(linker, "/EXPORT:Noname2=_AheadLib_Noname2,@2,NONAME")
#pragma comment(linker, "/EXPORT:Noname3=_AheadLib_Noname3,@3,NONAME")
#pragma comment(linker, "/EXPORT:Noname4=_AheadLib_Noname4,@4,NONAME")
#pragma comment(linker, "/EXPORT:Noname5=_AheadLib_Noname5,@5,NONAME")
#pragma comment(linker, "/EXPORT:Noname6=_AheadLib_Noname6,@6,NONAME")
#pragma comment(linker, "/EXPORT:Noname7=_AheadLib_Noname7,@7,NONAME")
#pragma comment(linker, "/EXPORT:Noname8=_AheadLib_Noname8,@8,NONAME")
#pragma comment(linker, "/EXPORT:Noname9=_AheadLib_Noname9,@9,NONAME")
#pragma comment(linker, "/EXPORT:Noname10=_AheadLib_Noname10,@10,NONAME")
#pragma comment(linker, "/EXPORT:Noname11=_AheadLib_Noname11,@11,NONAME")
#pragma comment(linker, "/EXPORT:Noname12=_AheadLib_Noname12,@12,NONAME")
#pragma comment(linker, "/EXPORT:Noname13=_AheadLib_Noname13,@13,NONAME")
#pragma comment(linker, "/EXPORT:Noname14=_AheadLib_Noname14,@14,NONAME")
#pragma comment(linker, "/EXPORT:Noname15=_AheadLib_Noname15,@15,NONAME")
#pragma comment(linker, "/EXPORT:Noname16=_AheadLib_Noname16,@16,NONAME")
#pragma comment(linker, "/EXPORT:Noname17=_AheadLib_Noname17,@17,NONAME")
#pragma comment(linker, "/EXPORT:Noname18=_AheadLib_Noname18,@18,NONAME")
#pragma comment(linker, "/EXPORT:Noname19=_AheadLib_Noname19,@19,NONAME")
#pragma comment(linker, "/EXPORT:Noname20=_AheadLib_Noname20,@20,NONAME")
#pragma comment(linker, "/EXPORT:Noname21=_AheadLib_Noname21,@21,NONAME")
#pragma comment(linker, "/EXPORT:Noname22=_AheadLib_Noname22,@22,NONAME")
#pragma comment(linker, "/EXPORT:Noname23=_AheadLib_Noname23,@23,NONAME")
#pragma comment(linker, "/EXPORT:Noname24=_AheadLib_Noname24,@24,NONAME")
#pragma comment(linker, "/EXPORT:Noname25=_AheadLib_Noname25,@25,NONAME")
#pragma comment(linker, "/EXPORT:Noname26=_AheadLib_Noname26,@26,NONAME")
#pragma comment(linker, "/EXPORT:Noname27=_AheadLib_Noname27,@27,NONAME")
#pragma comment(linker, "/EXPORT:Noname28=_AheadLib_Noname28,@28,NONAME")
#pragma comment(linker, "/EXPORT:ShellShutdownDialog=_AheadLib_ShellShutdownDialog,@29")
#pragma comment(linker, "/EXPORT:WlxActivateUserShell=_AheadLib_WlxActivateUserShell,@30")
#pragma comment(linker, "/EXPORT:WlxDisconnectNotify=_AheadLib_WlxDisconnectNotify,@31")
#pragma comment(linker, "/EXPORT:WlxDisplayLockedNotice=_AheadLib_WlxDisplayLockedNotice,@32")
#pragma comment(linker, "/EXPORT:WlxDisplaySASNotice=_AheadLib_WlxDisplaySASNotice,@33")
#pragma comment(linker, "/EXPORT:WlxDisplayStatusMessage=_AheadLib_WlxDisplayStatusMessage,@34")
#pragma comment(linker, "/EXPORT:WlxGetConsoleSwitchCredentials=_AheadLib_WlxGetConsoleSwitchCredentials,@35")
#pragma comment(linker, "/EXPORT:WlxGetStatusMessage=_AheadLib_WlxGetStatusMessage,@36")
#pragma comment(linker, "/EXPORT:WlxInitialize=_AheadLib_WlxInitialize,@37")
#pragma comment(linker, "/EXPORT:WlxIsLockOk=_AheadLib_WlxIsLockOk,@38")
#pragma comment(linker, "/EXPORT:WlxIsLogoffOk=_AheadLib_WlxIsLogoffOk,@39")
//#pragma comment(linker, "/EXPORT:WlxLoggedOnSAS=_AheadLib_WlxLoggedOnSAS,@40")
#pragma comment(linker, "/EXPORT:WlxLoggedOutSAS=_AheadLib_WlxLoggedOutSAS,@41")
#pragma comment(linker, "/EXPORT:WlxLogoff=_AheadLib_WlxLogoff,@42")
#pragma comment(linker, "/EXPORT:WlxNegotiate=_AheadLib_WlxNegotiate,@43")
#pragma comment(linker, "/EXPORT:WlxNetworkProviderLoad=_AheadLib_WlxNetworkProviderLoad,@44")
#pragma comment(linker, "/EXPORT:WlxReconnectNotify=_AheadLib_WlxReconnectNotify,@45")
#pragma comment(linker, "/EXPORT:WlxRemoveStatusMessage=_AheadLib_WlxRemoveStatusMessage,@46")
#pragma comment(linker, "/EXPORT:WlxScreenSaverNotify=_AheadLib_WlxScreenSaverNotify,@47")
#pragma comment(linker, "/EXPORT:WlxShutdown=_AheadLib_WlxShutdown,@48")
#pragma comment(linker, "/EXPORT:WlxStartApplication=_AheadLib_WlxStartApplication,@49")
#pragma comment(linker, "/EXPORT:WlxWkstaLockedSAS=_AheadLib_WlxWkstaLockedSAS,@50")
#pragma comment(linker, "/EXPORT:DllRegisterServer=_DllRegisterServer@0,PRIVATE")
#pragma comment(linker, "/EXPORT:DllUnregisterServer=_DllUnregisterServer@0,PRIVATE")
#pragma comment(linker, "/EXPORT:WlxLoggedOnSAS=_TNT_WlxLoggedOnSAS@12,@40")
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 宏定义
#define EXTERNC extern "C"
#define NAKED __declspec(naked)
#define EXPORT __declspec(dllexport)
#define ALCPP EXPORT NAKED
#define ALSTD EXTERNC EXPORT NAKED void __stdcall
#define ALCFAST EXTERNC EXPORT NAKED void __fastcall
#define ALCDECL EXTERNC NAKED void __cdecl
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// AheadLib 命名空间
namespace AheadLib
{
HMODULE m_hModule = NULL; // 原始模块句柄
DWORD m_dwReturn[50] = {0}; // 原始函数返回地址
// 加载原始模块
inline BOOL WINAPI Load()
{
TCHAR tzPath[MAX_PATH];
TCHAR tzTemp[MAX_PATH * 2];
GetSystemDirectory(tzPath, MAX_PATH);
lstrcat(tzPath, TEXT("\\MSGina"));
m_hModule = LoadLibrary(tzPath);
if (m_hModule == NULL)
{
wsprintf(tzTemp, TEXT("无法加载 %s,程序无法正常运行。"), tzPath);
MessageBox(NULL, tzTemp, TEXT("AheadLib"), MB_ICONSTOP);
}
return (m_hModule != NULL);
}
// 释放原始模块
inline VOID WINAPI Free()
{
if (m_hModule)
{
FreeLibrary(m_hModule);
}
}
// 获取原始函数地址
FARPROC WINAPI GetAddress(PCSTR pszProcName)
{
FARPROC fpAddress;
CHAR szProcName[16];
TCHAR tzTemp[MAX_PATH];
fpAddress = GetProcAddress(m_hModule, pszProcName);
if (fpAddress == NULL)
{
if (HIWORD(pszProcName) == 0)
{
wsprintfA(szProcName, "%d", pszProcName);
pszProcName = szProcName;
}
wsprintf(tzTemp, TEXT("无法找到函数 %hs,程序无法正常运行。"), pszProcName);
MessageBox(NULL, tzTemp, TEXT("AheadLib"), MB_ICONSTOP);
ExitProcess(-2);
}
return fpAddress;
}
}
using namespace AheadLib;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 入口函数
HMODULE g_hModule = NULL;
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
DisableThreadLibraryCalls(hModule);
g_hModule = hModule;
return Load();
}
else if (dwReason == DLL_PROCESS_DETACH)
{
Free();
}
return TRUE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_Noname1(void)
{
GetAddress(MAKEINTRESOURCEA(1));
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////