在程序中移除U盘
来源:互联网 发布:年轮伴奏网络歌手 编辑:程序博客网 时间:2024/04/29 20:19
#include#include #include #define DWORD_PTR DWORD #define ULONG_PTR DWORD extern "C" { #include "hidsdi.h" } // 需加入hid.lib #include #include #pragma comment(lib,"setupapi.lib") #include #include #include #pragma comment(lib,"cfgmgr32.lib") #include //#include DEFINE_GUID(GUID_DEVINTERFACE_USB_DEVICE, 0xA5DCBF10L,0x6530,0x11D2, 0x90,0x1F,0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED); #define GUID_CLASS_USB_DEVICE GUID_DEVINTERFACE_USB_DEVICE int main(int argc, _TCHAR* argv[]) { HDEVINFO hDevInfo; SP_DEVINFO_DATA DeviceInfoData; DWORD i; //-------------------------------------------------------------------------- // 获取设备信息 hDevInfo = SetupDiGetClassDevs((LPGUID)&GUID_CLASS_USB_DEVICE, 0, // Enumerator 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE ); if (hDevInfo == INVALID_HANDLE_VALUE) { // 查询信息失败 printf("ERROR - SetupDiGetClassDevs()"); return 1; } //-------------------------------------------------------------------------- // 枚举每个USB设备 DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); for (i=0;SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData);i++) { LPTSTR buffer = NULL; PVOID buffer2 = NULL; DWORD buffersize = 0; ULONG len; CONFIGRET cr; PNP_VETO_TYPE pnpvietotype; CHAR vetoname[MAX_PATH]; ULONG ulStatus; ULONG ulProblemNumber; cr = CM_Get_DevNode_Status( &ulStatus, &ulProblemNumber, DeviceInfoData.DevInst, 0); if ( CR_SUCCESS == cr ) { printf("OK - CM_Get_DevNode_Status()[%d]/n", cr); printf("OK - CM_Get_DevNode_Status() sts [%x]/n", ulStatus); printf("OK - CM_Get_DevNode_Status() pro [%x]/n", ulProblemNumber); } else { printf("ERROR - CM_Get_DevNode_Status()[%d]/n", cr); printf("ERROR - CM_Get_DevNode_Status()[%d]/n", GetLastError()); } // DN_DISABLEABLE or DN_REMOVABLE if ((DN_DISABLEABLE & ulStatus ) != 0 ) { printf("HAS - DN_DISABLEABLE()[%x]/n", DN_DISABLEABLE & ulStatus); } else { continue; } if ((DN_REMOVABLE & ulStatus ) != 0 ) { printf("HAS - DN_REMOVABLE()[%x]/n", DN_REMOVABLE & ulStatus); } else { continue; } len = MAX_PATH; // pnpvietotype = PNP_VetoDevice; cr = CM_Request_Device_Eject( DeviceInfoData.DevInst, &pnpvietotype, vetoname, len, 0 ); if ( CR_SUCCESS == cr ) { printf("OK - CM_Request_Device_Eject()[%d]/n", cr); } else { printf("ERROR - CM_Request_Device_Eject()[%d]/n", cr); printf("ERROR - CM_Request_Device_Eject()[%d]/n", GetLastError()); } } if ( GetLastError()!=NO_ERROR && GetLastError()!=ERROR_NO_MORE_ITEMS ) { // Insert error handling here. return 1; } // Cleanup SetupDiDestroyDeviceInfoList(hDevInfo); return 0; }
说明:
cr = CM_Request_Device_Eject( DeviceInfoData.DevInst, &pnpvietotype, vetoname, len, 0 ); //没有气泡提示
cr = CM_Request_Device_Eject( DeviceInfoData.DevInst, &pnpvietotype, NULL, 0, 0 ); //这样就有气泡提示了。
对于CM_Request_Device_Eject这类在DDK中的函数,可以有如下几种方法
1.把DDK的头文件路径和库包含进来,但头文件包含必须使用
extern "C"
{
#include "hidsdi.h"
}
2. 把DDK里的相关文件拷到工程里来
3. 用GetProcAddress从相关DLL中取得函数来执行。
这种办法只能移除所有的U盘,没法移除某一盘符对应的U盘
- 在程序中移除U盘
- 在程序中移除U盘
- 在程序中移除U盘
- 移除U盘“写保护”
- 一个可以监控U盘接入、自动拷贝文件到U盘、自动移除U盘的小程序
- 用代码安全移除u盘
- c#能否判断程序是否在u盘中?
- 如何:在 Visual Studio 中添加或移除引用自己的程序集
- 在工作流中移除activity
- CvvImage在openCV2.2中移除
- 在项目中移除CocoaPods
- 在Word中移除MathType
- 根据盘符安全移除U盘
- 根据盘符安全移除U盘
- Delphi 移除U盘的两种方法
- VC WM_DEVICECHANGE消息,实时捕获U盘插入、移除
- VC WM_DEVICECHANGE消息,实时捕获U盘插入、移除
- 在运行时添加和移除事件处理程序
- [vs2005sp1]解决母版页报错“内容控件必须是内容页中的顶级控件,或是引用母版页的嵌套母版页。”
- Facebook推新主页更干净简洁 叫板MySpace
- 解决“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题”
- 传说中百度的试题,用C#做二进制运算得到2.5亿数字中不重复数字数的O(n)算法
- 实施MySQL千万数量级备份与恢复
- 在程序中移除U盘
- IPv6支持缺省将导致用户系统面临攻击威胁
- ajax即时显示并解析XML
- 美国开发新软件 有助于找回不翼而飞的电脑
- Vector和ArrayList Hashtable和HashMap ArrayList和LinkedList
- 以低就高 以弱图强
- 百度将推出C2C平台 打造第二大收入模式
- 用低调达到高调追求的效果
- 《分析模式》读书笔记:责任模式