同步操作将从 精易科技/eapi 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "..\include_eapi_header.h"#include<shlwapi.h>#include<shlobj_core.h>#include<wininet.h>#pragma comment(lib,"wininet.lib")#pragma comment(lib,"shlwapi.lib")//开源代码还是比较多的,github代码修改得到的//并且其他文件要用到,所以没办法内联或者static,防止符号污染namespace eApiDeleteFile {#define SWEEP_BUFFER_SIZE 0x2710ustatic BOOL ClearDir(const WCHAR* path){//初始化文件名字符串std::wstring lpFileName = path;WIN32_FIND_DATAW FindFileData;//确保文件名字符串以反斜杠结尾if (lpFileName[lpFileName.size() - 1] != L'\\'){lpFileName += L"\\";}//将通配符附加到文件名lpFileName += L"*.*";//查找目录中的第一个文件HANDLE hFindFile = FindFirstFileW(lpFileName.c_str(), &FindFileData);BOOL result = FALSE;//检查句柄是否有效if (hFindFile == INVALID_HANDLE_VALUE){result = FALSE;}else{//遍历目录中的所有文件BOOL IsHas = FALSE;do{IsHas = FindNextFileW(hFindFile, &FindFileData);//跳过当前目录和父目录if (wcscmp(FindFileData.cFileName, L".") && wcscmp(FindFileData.cFileName, L"..")){ClearDir(FindFileData.cFileName);}else{//删除当前目录或父目录DeleteFileW(lpFileName.c_str());}} while (IsHas);//清理FindClose(hFindFile);result = TRUE;}return result;}static BOOL WipeFile(LPCWSTR szDir, LPCWSTR szFile){std::wstring sPath;HANDLE hFile;DWORD dwSize;DWORD dwWrite;char sZero[SWEEP_BUFFER_SIZE];memset(sZero, 0, SWEEP_BUFFER_SIZE);sPath = szDir;sPath += L'\\';sPath += szFile;hFile = ::CreateFileW(sPath.c_str(), GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);if (hFile == INVALID_HANDLE_VALUE){return FALSE;}dwSize = ::GetFileSize(hFile, NULL);dwSize -= 64;::SetFilePointer(hFile, 64, NULL, FILE_BEGIN);while (dwSize > 0){if (dwSize > SWEEP_BUFFER_SIZE){::WriteFile(hFile, sZero, SWEEP_BUFFER_SIZE, &dwWrite, NULL);dwSize -= SWEEP_BUFFER_SIZE;}else{::WriteFile(hFile, sZero, dwSize, &dwWrite, NULL);break;}}CloseHandle(hFile);return TRUE;}static BOOL WipeFile(LPCSTR szDir, LPCSTR szFile){std::string sPath;HANDLE hFile;DWORD dwSize;DWORD dwWrite;char sZero[SWEEP_BUFFER_SIZE];memset(sZero, 0, SWEEP_BUFFER_SIZE);sPath = szDir;sPath += '\\';sPath += szFile;hFile = ::CreateFileA(sPath.c_str(), GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);if (hFile == INVALID_HANDLE_VALUE){return FALSE;}dwSize = ::GetFileSize(hFile, NULL);dwSize -= 64;::SetFilePointer(hFile, 64, NULL, FILE_BEGIN);while (dwSize > 0){if (dwSize > SWEEP_BUFFER_SIZE){::WriteFile(hFile, sZero, SWEEP_BUFFER_SIZE, &dwWrite, NULL);dwSize -= SWEEP_BUFFER_SIZE;}else{::WriteFile(hFile, sZero, dwSize, &dwWrite, NULL);break;}}CloseHandle(hFile);return TRUE;}BOOL EmptyDirectory(const CHAR* Path, BOOL bDeleteDesktopIni, BOOL bIndex) {std::string lpFileName = std::string(Path) + "\\*.*";std::string lpPathName;WIN32_FIND_DATAA FindFileData;HANDLE hFindFile = FindFirstFileA(lpFileName.c_str(), &FindFileData);if (hFindFile == INVALID_HANDLE_VALUE) {return false;}bool result = true;do {if (strcmp(FindFileData.cFileName, ".") != 0&& strcmp(FindFileData.cFileName, "..") != 0&& (bDeleteDesktopIni || strcmp(FindFileData.cFileName, "desktop.ini") != 0)) {lpPathName = std::string(Path) + "\\" + FindFileData.cFileName;DWORD dwFileAttributes = GetFileAttributesA(lpPathName.c_str());if (dwFileAttributes & FILE_ATTRIBUTE_READONLY) {dwFileAttributes &= 0xFE;}if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {if (!EmptyDirectory(lpPathName.c_str(), bDeleteDesktopIni, bIndex)) {result = false;break;}if (!RemoveDirectoryA(lpPathName.c_str())) {result = false;break;}}else {if (bIndex && strcmp(FindFileData.cFileName, "index.dat") == 0) {if (!WipeFile(Path, FindFileData.cFileName)) {result = false;break;}}if (!DeleteFileA(lpPathName.c_str())) {result = false;break;}}}} while (FindNextFileA(hFindFile, &FindFileData));FindClose(hFindFile);return result;}BOOL EmptyDirectory(const WCHAR* Path, BOOL bDeleteDesktopIni, BOOL bIndex) {std::wstring lpFileName = std::wstring(Path) + L"\\*.*";std::wstring lpPathName;WIN32_FIND_DATAW FindFileData;HANDLE hFindFile = FindFirstFileW(lpFileName.c_str(), &FindFileData);if (hFindFile == INVALID_HANDLE_VALUE) {return false;}bool result = true;do {if (wcscmp(FindFileData.cFileName, L".") != 0&& wcscmp(FindFileData.cFileName, L"..") != 0&& (bDeleteDesktopIni || wcscmp(FindFileData.cFileName, L"desktop.ini") != 0)) {lpPathName = std::wstring(Path) + L"\\" + FindFileData.cFileName;DWORD dwFileAttributes = GetFileAttributesW(lpPathName.c_str());if (dwFileAttributes & FILE_ATTRIBUTE_READONLY) {dwFileAttributes &= 0xFE;}if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {if (!EmptyDirectory(lpPathName.c_str(), bDeleteDesktopIni, bIndex)) {result = false;break;}if (!RemoveDirectoryW(lpPathName.c_str())) {result = false;break;}}else {if (bIndex && wcscmp(FindFileData.cFileName, L"index.dat") == 0) {if (!WipeFile(Path, FindFileData.cFileName)) {result = false;break;}}if (!DeleteFileW(lpPathName.c_str())) {result = false;break;}}}} while (FindNextFileW(hFindFile, &FindFileData));FindClose(hFindFile);return result;}static BOOL DeleteUrlCache(INT type){HANDLE hEntry;LPINTERNET_CACHE_ENTRY_INFOW lpCacheEntry = nullptr;DWORD dwEntrySize;dwEntrySize = 0;hEntry = FindFirstUrlCacheEntryW(NULL, NULL, &dwEntrySize);lpCacheEntry = (LPINTERNET_CACHE_ENTRY_INFOW) new char[dwEntrySize] {0};hEntry = FindFirstUrlCacheEntryW(NULL, lpCacheEntry, &dwEntrySize);if (hEntry == NULL){delete[] lpCacheEntry;return FALSE;}do{if (type){if (type == 1 && lpCacheEntry->CacheEntryType & COOKIE_CACHE_ENTRY){DeleteUrlCacheEntryW(lpCacheEntry->lpszSourceUrlName);}}else if (!(lpCacheEntry->CacheEntryType & COOKIE_CACHE_ENTRY)){DeleteUrlCacheEntryW(lpCacheEntry->lpszSourceUrlName);}dwEntrySize = 0;FindNextUrlCacheEntryW(hEntry, NULL, &dwEntrySize);delete[] lpCacheEntry;lpCacheEntry = (LPINTERNET_CACHE_ENTRY_INFOW) new char[dwEntrySize] {0};} while (FindNextUrlCacheEntryW(hEntry, lpCacheEntry, &dwEntrySize));delete[] lpCacheEntry;return TRUE;}/*可以被省略。临时文件类型,可以为以下常量值之一:0、#接口常量.系统临时文件;1、#接口常量.IE临时文件;2、#接口常量.回收站;3、#接口常量.存根文件。*/static BOOL DeleteTempFile(INT type){BOOL result = FALSE;WCHAR Buffer[MAX_PATH] = { 0 };switch (type){case 0:if (!GetTempPathW(MAX_PATH, Buffer)) {result = FALSE;break;}result = EmptyDirectory(Buffer, TRUE, FALSE);break;case 1:result = DeleteUrlCache(0);if (!SHGetSpecialFolderPathW(0, Buffer, CSIDL_INTERNET_CACHE, FALSE)) {result = FALSE;break;}ClearDir(Buffer);break;case 2:result = SHEmptyRecycleBinA(0, 0, SHERB_NOCONFIRMATION | SHERB_NOPROGRESSUI | SHERB_NOSOUND) == 0;break;case 3:result = DeleteUrlCache(1);if (SHGetSpecialFolderPathW(0, Buffer, CSIDL_COOKIES, FALSE)) {ClearDir(Buffer);}break;default:break;}return result;}}// 调用格式: SDT_BOOL 删除临时文件, 命令说明: "删除指定位置的临时文件。成功返回真;失败返回假。"// 参数<1>: [临时文件类型 SDT_INT], 参数说明: "可以被省略。临时文件类型,可以为以下常量值之一:0、#接口常量.系统临时文件;1、#接口常量.IE临时文件;2、#接口常量.回收站;3、#接口常量.存根文件。"EAPI_EXTERN_C void eapi_DeleteTempFile_26_eapi(PMDATA_INF pRetData, INT nArgCount, PMDATA_INF pArgInf){signed int type = 0;;if (pArgInf->m_dtDataType || pArgInf->m_int >= 0 || pArgInf->m_int <= 3) {type = pArgInf->m_int;}pRetData->m_bool = eApiDeleteFile::DeleteTempFile(type);}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。