Files
anit-cheat/Anit-Cheat_EXE/utils.cpp
T
2026-08-24 14:47:59 +08:00

50 lines
1.2 KiB
C++

#include "utils.h"
#define MUTEX_NAME XOR_STRING_W(L"Local\\seriver_mutex_anit")
auto utils::check_mutex() -> BOOL
{
HANDLE mutex = CreateMutex(nullptr, TRUE, MUTEX_NAME);
if (!mutex || GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(mutex);
return FALSE;
}
return TRUE;
}
// 不区分大小写宽字符串查找
bool utils::StrContainsI(LPCWSTR Source, LPCWSTR Sub)
{
if (!Source || !Sub)
return FALSE;
WCHAR srcBuf[1024] = { 0 };
WCHAR subBuf[1024] = { 0 };
lstrcpyW(srcBuf, Source);
lstrcpyW(subBuf, Sub);
_wcslwr(srcBuf);
_wcslwr(subBuf);
return wcsstr(srcBuf, subBuf) != nullptr;
}
// 读取注册表字符串值
BOOL utils::RegReadString(HKEY hRoot, LPCSTR szSubKey, LPCSTR szValueName, char* outBuf, DWORD bufSize)
{
HKEY hKey;
LONG ret = RegOpenKeyExA(hRoot, szSubKey, 0, KEY_READ, &hKey);
if (ret != ERROR_SUCCESS)
return FALSE;
DWORD dataType = REG_SZ;
DWORD dataLen = bufSize;
ret = RegQueryValueExA(hKey, szValueName, nullptr, &dataType, (LPBYTE)outBuf, &dataLen);
RegCloseKey(hKey);
if (ret != ERROR_SUCCESS)
return FALSE;
outBuf[dataLen] = '\0';
return TRUE;
}