系统相关功能开发(二)-磁盘操作

来源:互联网 发布:网络抽奖 编辑:程序博客网 时间:2024/05/29 17:40

1.监视硬盘

void CDiskOperDlg::OnButtonMonitorDisk()// 监视硬盘{UpdateData(TRUE);// 从控件获取数据DWORD dwWaitStatus; HANDLE dwChangeHandle;dwChangeHandle=FindFirstChangeNotification(m_DiskName, TRUE, FILE_NOTIFY_CHANGE_FILE_NAME);  if (dwChangeHandle==INVALID_HANDLE_VALUE)        return; bMonitor = TRUE;WriteLog("正在监视%c盘重命名操作......", m_DiskName[0]);while (bMonitor) {  dwWaitStatus = WaitForSingleObject(dwChangeHandle, INFINITE); if (dwWaitStatus == WAIT_OBJECT_0){WriteLog("检测到%s文件重命名操作",m_DiskName);            MessageBox(m_DiskName,"检测到磁盘重命名操作");if (FindNextChangeNotification(dwChangeHandle) == FALSE) bMonitor = FALSE;}Sleep(100);    } FindCloseChangeNotification(dwChangeHandle);}


2.格式化磁盘

void CDiskOperDlg::OnButtonFormat()// 格式化磁盘{UpdateData(TRUE);UINT uiDriver = m_DiskName[0] - 'A';HINSTANCE   hInstance=LoadLibrary(_T("Shell32.dll"));     if (hInstance == NULL)   return; PFUNCTIONFORMAT   pFunctionFormat=(PFUNCTIONFORMAT)GetProcAddress(hInstance, _T("SHFormatDrive"));       if(pFunctionFormat==NULL)     {     // 如果没有获取格式化SHFormatDrive函数的指针,则返回FreeLibrary(hInstance);     return;     }DWORD dwResult = (pFunctionFormat)(this->m_hWnd, uiDriver, SHFMT_ID_DEFAULT, SHFMT_OPT_FULL);switch (dwResult){case SHFMT_ERROR:WriteLog("格式化磁盘%s发生错误", m_DiskName);break;case SHFMT_CANCEL:WriteLog("取消格式化磁盘%s", m_DiskName);break;case SHFMT_NOFORMAT:WriteLog("不能格式化磁盘%s", m_DiskName);break;default:WriteLog("格式化磁盘%s成功", m_DiskName);break;}FreeLibrary(hInstance);  return; }




3.关闭磁盘共享


void CDiskOperDlg::OnButtonDelshare()// 关闭磁盘共享{UpdateData(TRUE);// 从控件获取数据WCHAR wsz[MAX_PATH];// 定义Unicode字符数组CString disk;// 定义磁盘共享名称变量disk.Format("%c$", m_DiskName[0]);// 格式化磁盘共享名称wcscpy(wsz, disk.AllocSysString()); // 将共享名称转换到Unicode字符数组NET_API_STATUS dwStatus = NetShareDel(NULL,(LPWSTR)wsz,0);// 关闭磁盘共享switch(dwStatus)// 判断操作返回值,并输出提示信息{case NERR_Success:WriteLog("成功关闭%s磁盘共享\n", disk);break;case ERROR_ACCESS_DENIED:WriteLog("关闭%s磁盘共享错误\n原因=用户没有权限执行此项操作。", disk); break;case ERROR_INVALID_PARAMETER:WriteLog("关闭%s磁盘共享错误\n原因=参数无效。", disk); break;case ERROR_NOT_ENOUGH_MEMORY:WriteLog("关闭%s磁盘共享错误\n原因=内存不足。", disk); break;case NERR_NetNameNotFound:WriteLog("关闭%s磁盘共享错误\n原因=不存在此共享名称。", disk); break;default:WriteLog("关闭%s磁盘共享错误\n原因=未知。", disk); break;}}



4.设置磁盘卷标

void CDiskOperDlg::OnButtonSetvolum()// 设置磁盘卷标{UpdateData(TRUE);// 从控件获取数据if (SetVolumeLabel(m_DiskName, "我的系统盘")) // 设置磁盘卷标WriteLog("设置%s磁盘卷标成功", m_DiskName);else  WriteLog("设置%s磁盘卷标失败", m_DiskName);}


5.磁盘碎片整理

void CDiskOperDlg::OnButtonSpzl()// 磁盘碎片整理{system("defrag E:");}


6.AT32转换为NTFS



void CDiskOperDlg::OnButtonFat32tontfs() // 从FAT32转换为NTFS{system("convert E: /FS:NTFS");}



7.隐藏磁盘分区

void CDiskOperDlg::OnButtonHidedisk()// 隐藏磁盘分区{UpdateData(TRUE);// 从控件获取数据memset(szPath,0x00, sizeof(szPath));// 初始化路径变量CString csDisk;// 定义磁盘名称csDisk.Format("%c:", m_DiskName[0]);// 格式化要隐藏的磁盘名称if (QueryDosDeviceA(csDisk, szPath, MAX_PATH) == 0)// 查询磁盘对应的设备路径{WriteLog("获取磁盘分区%s路径名失败", csDisk);// 查询失败,显示结果return;// 查询失败,返回}if (DefineDosDeviceA(DDD_REMOVE_DEFINITION, csDisk, NULL))// 删除设备路径名称的定义,即隐藏磁盘分区WriteLog("隐藏磁盘分区%s成功。\r\n路径名称=%s", csDisk, szPath);// 操作成功,显示操作日志elseWriteLog("隐藏磁盘分区%s失败。\r\n路径名称=%s", csDisk, szPath);// 操作失败,显示操作日志}


8.隐藏的磁盘分区

void CDiskOperDlg::OnButtonShowdisk()// 显示被隐藏的磁盘分区{UpdateData(TRUE);// 从控件获取数据CString csDisk;// 定义磁盘名称csDisk.Format("%c:", m_DiskName[0]);// 格式化要隐藏的磁盘名称if (DefineDosDevice(DDD_RAW_TARGET_PATH, csDisk, szPath))// 增加指定设备路径对应的磁盘名称WriteLog("显示被隐藏的磁盘分区%s成功。\r\n路径名称=%s", csDisk, szPath);// 操作成功,显示操作日志elseWriteLog("显示被隐藏的磁盘分区%s失败。\r\n路径名称=%s", csDisk, szPath);// 操作失败,显示操作日志}


9.更改分区号

void CDiskOperDlg::OnButtonUpdatediskno()// 更改分区号{UpdateData(TRUE);// 从控件获取数据HMODULE hKernel = GetModuleHandle("kernel32");// 装载kernel32.dllif (hKernel){// 获取GetVolumeNameForVolumeMountPointA函数入口PROCGET getAPI = (PROCGET)GetProcAddress(hKernel,"GetVolumeNameForVolumeMountPointA");// 获取DeleteVolumeMountPointA函数入口PROCDEL delAPI = (PROCDEL)GetProcAddress(hKernel,"DeleteVolumeMountPointA");// 获取SetVolumeMountPointA函数入口PROCSET setAPI = (PROCSET)GetProcAddress(hKernel,"SetVolumeMountPointA"); char szVolName [MAX_PATH];// 定义卷名变量DWORD dwLen;// 定义卷名长度变量if (!getAPI(m_DiskName, szVolName, &dwLen)) // 查询指定分区的卷名{WriteLog("查询分区%s的卷名失败。", m_DiskName);// 显示错误信息return;// 查询失败,返回}if (!delAPI(m_DiskName))// 删除卷名对应的分区号{WriteLog("删除卷名为%s对应的%s分区号。", szVolName, m_DiskName);// 显示错误信息return;// 删除失败,返回}if (!setAPI(_T("Z:\\"), szVolName))// 为卷设置新的分区号为Z{WriteLog("将卷名为%s的分区号改为Z:失败。", szVolName);// 显示错误信息return;// 设置失败,返回}WriteLog("将卷名为%s的分区号改为Z:成功。\r\n原来的分区号=%s", szVolName, m_DiskName);// 显示日志}elseWriteLog("装载kernel32失败!");// 显示装载DLL失败信息}



原创粉丝点击