21xrx.com
2024-12-23 02:59:23 Monday
登录
文章检索 我的文章 写文章
利用C++编写U盘检测程序
2023-06-28 18:50:50 深夜i     --     --
C++ U盘 检测程序

随着U盘的普及,越来越多的人开始使用它来传输数据。但是,U盘也成为了传播病毒的重要途径,为保护计算机的安全,我们需要一种U盘检测程序。本文将介绍利用C++编写U盘检测程序的具体方法。

第一步:定义结构体

我们需要定义一个结构体来存储U盘的相关信息,包括U盘的盘符、容量、使用情况、制造商和序列号等。示例代码如下:


struct DiskInfo

  char drive_letter; //U盘盘符

  ULARGE_INTEGER total_capacity; //总容量

  ULARGE_INTEGER free_space; //可用空间

  CString vendor_id; //制造商

  CString product_id; //序列号

;

第二步:获取U盘信息

我们利用Windows API提供的`GetVolumeInformation()`函数获取U盘相关的信息。代码如下:


BOOL GetDiskInfo(const CString& drive, DiskInfo& disk_info) {

  TCHAR volume_name[MAX_PATH + 1] = { 0 };

  DWORD serial_number = 0;

  DWORD max_component_length = 0;

  DWORD file_system_flags = 0;

  TCHAR file_system_name[MAX_PATH + 1] = { 0 };

  ULARGE_INTEGER free_space_available = { 0 };

  ULARGE_INTEGER total_number_of_bytes = { 0 };

  ULARGE_INTEGER total_number_of_free_bytes = { 0 };

  CString root_path = drive + _T(":\\");

  BOOL result = ::GetVolumeInformation(root_path, volume_name, ARRAYSIZE(volume_name), &serial_number, &max_component_length, &file_system_flags, file_system_name, ARRAYSIZE(file_system_name));

  if (!result)

    return FALSE;

  

  result = ::GetDiskFreeSpaceEx(root_path, &free_space_available, &total_number_of_bytes, &total_number_of_free_bytes);

  if (!result)

    return FALSE;

  

  disk_info.drive_letter = drive[0];

  disk_info.vendor_id.Format(_T("%08lX"), serial_number);

  disk_info.product_id = volume_name;

  disk_info.total_capacity = total_number_of_bytes;

  disk_info.free_space = total_number_of_free_bytes;

  return TRUE;

}

第三步:检测U盘

我们可以通过遍历所有的驱动器获取到计算机上所有的U盘,并利用第二步中编写的函数获取它们的信息。通过比较容量和制造商等信息,可以判断是否为安全的U盘。示例代码如下:


int main() {

  TCHAR drive_strings[MAX_PATH];

  DWORD drives = ::GetLogicalDrives();

  TCHAR letter('A');

  for (int i = 0; i < 26; ++i) {

    if (drives & 0x00000001) {

      drive_strings[i] = letter;

    }

    else {

      drive_strings[i] = _T(' ');

    }

    drives = drives >> 1;

    letter = (TCHAR)(letter + 1);

  }

  DiskInfo disk_info;

  for (int i = 0; i < 26; ++i) {

    if (drive_strings[i] != _T(' ')) {

      CString drive(drive_strings[i]);

      if (GetDiskInfo(drive, disk_info)) {

        if (disk_info.total_capacity.QuadPart > 16 * 1024 * 1024) {

          if (disk_info.vendor_id.Left(4) == _T("0951")) {

            _tprintf(_T("%c: is Sandisk U disk\n"), drive_strings[i]);

          }

          else {

            _tprintf(_T("%c: is safe U disk\n"), drive_strings[i]);

          }

        }

      }

    }

  }

  return 0;

}

通过以上步骤,我们可以编写出一款简单而实用的U盘检测程序,从而在使用U盘传输数据时更加安心。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复