bool CUSBControl::RemoveUSB(CString csDisk)
	HANDLE hDevice; // handle to the drive to be examined 
	BOOL bResult; // results flag 
	DWORD junk; // discard results 
	DWORD dwError; 
	CString csVolume;
	int nPos = csDisk.Find('\\');//csDisk like "H:\"
	if ( -1 != nPos )
		csDisk = csDisk.Left(nPos);
	csVolume.Format(L"\\\\.\\%s", csDisk);
	// Open the volume 
	hDevice = CreateFile(csVolume, // drive to open 
		GENERIC_READ | GENERIC_WRITE, 
		FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode 
		NULL, // default security attributes 
		OPEN_EXISTING, // disposition 
		0, // file attributes 
		NULL); // don't copy any file's attributes 
	if (hDevice == INVALID_HANDLE_VALUE) // can't open the drive 
		dwError = GetLastError(); 
		return FALSE; 
	//Dismount the volume 
	bResult = DeviceIoControl( 
		hDevice, // handle to volume 
		IOCTL_STORAGE_EJECT_MEDIA, //eject USB
		NULL, // lpInBuffer 
		0, // nInBufferSize 
		NULL, // lpOutBuffer 
		0, // nOutBufferSize 
		&junk, // discard count of bytes returned 
		(LPOVERLAPPED) NULL); // synchronous I/O 
	if (!bResult) // IOCTL failed 
		dwError = GetLastError(); 
	// Close the volume handle 
	bResult = CloseHandle(hDevice); 
	if (!bResult) 
		dwError = GetLastError(); 
	return FALSE;


csDisk怎么来的呢?

BOOL CUSBControl::OnDeviceChange( UINT nEventType, DWORD dwData) 
	DEV_BROADCAST_DEVICEINTERFACE* dbd = (DEV_BROADCAST_DEVICEINTERFACE*) dwData;
	PDEV_BROADCAST_VOLUME pDevVolume = NULL;	
	switch (nEventType) 
 	case DBT_DEVICEARRIVAL: 
  		pDevVolume = (PDEV_BROADCAST_VOLUME)dbd;   
   		switch(pDevVolume->dbcv_flags)   
   		case 0:   
     			if(DBT_DEVICEARRIVAL == nEventType)
     				CString strDisk;
      				strDisk.Format(L"%c:\\",FirstDriveFromMask(pDevVolume->dbcv_unitmask));   
                                RemoveUSB(strDisk);      
                break;
        break;	
	return TRUE;
char CUSBControl::FirstDriveFromMask( ULONG unitmask )
	char i;
	for (i = 0; i < 26; ++i)
		if (unitmask & 0x1)
			break;
		unitmask = unitmask >> 1;
	return( i + 'A' );
                    调研USB弹出,记录结果:bool CUSBControl::RemoveUSB(CString csDisk){	HANDLE hDevice; // handle to the drive to be examined 	BOOL bResult; // results flag 	DWORD junk; // discard results 	DWORD dwError;
				
1.无需安装SDK, DDK/WDK 2.参考了网上的介绍和程序,都不完整 3.安装了SDK,DDK, WDK.始终有一个函数CM_Request_Device_EjectW无法链接 4.最后抛弃SDK.DDK.WDK,用网上的一个有关USB的inc和lib包,搞定!
摘自http://bbs.pcbeta.com/viewthread-1067733-1-1.html windows弹出可移动媒体的时候,首先通过DeviceIoControl发送FSCTL_LOCK_VOLUME IOCTL来锁定卷,然后发送FSCTL_DISMOUNT_VOLUME IOCTL来卸载卷,这两步之后,可确保卷不被其他程序使用,这时拔出可移动磁盘可以确保没有损害,虽然并没有
上大学的时候有老师不给上课的PPT,就总想有个程序能偷偷复制老师的U盘。一直没有去实现,然后用C++做了个U盘“备份”器。现在将做好的软件的源代码和可执行文件(exe)分享给大家,交流学习 软件用法:直接双击运行(没有任何界面效果,软件已在后台运行,可在任务管理器中看到,高隐蔽性),程序会在C盘下创建一个名为UBack的文件夹(如果该文件夹已存在,则不会再次创建),然后即可静静等待U盘插入,插入后程序会自动将U盘中的所有内容悄悄拷贝到C盘UBack文件夹里面,拷贝完成后自动退出程序。整个过程只可能在任务管理器中查看,改个文件名更不易被人发现,隐蔽性极高
const char* temp = "\\\\.\\"; char device_path1[10] = { 0 }; memcpy(device_path1, temp, strlen(temp)); QByteArray dp = device_path.toLocal8Bit();
通过C++我们读取已经mount到设备上的数据节点,读取这个节点,将节点作为参数传递给shell脚本,最后通过shell脚本根据参数来选择格式化哪一个盘。 具体实现过程: 1.初始化系统盘节点信息,将所有信息保存在结构体中 /etc/mtab 文件里面保存的是所有已经挂载上的盘符信息,通过文件方式逐行读取并保存到结构体数组中。 fd = fopen(PARTITION_PATH,
我们可以通过以下步骤来获取U盘中的文件。首先,将U盘插入电脑。接着,在电脑桌面的“我的电脑”或“计算机”中找到U盘图标并双击打开。此时,我们可以看到U盘中的所有文件夹和文件。如果想要打开某个文件夹或文件,只需要单击它即可。 有时候,U盘中的文件可能很多,我们需要进行搜索。我们可以在U盘根目录中输入关键词并按回车键进行搜索。此时,系统会返回与该关键词相关的所有文件和文件夹。 如果我们想要将U盘中的某些文件复制到电脑上,只需选择需要复制的文件并按下“Ctrl+C”组合键。接着,在电脑上打开一个目录,右键单击空白处,选择“粘贴”即可将文件复制到该目录中。 在获取U盘中的文件时,注意不要意外删除或改名文件。如果不小心删除文件,可以尝试使用“回收站”恢复。如果需要修改文件名,可以右键单击文件并选择“重命名”进行修改。 总的来说,获取U盘中的文件非常简单,只需要插入U盘并打开对应文件夹即可。如果需要进行搜索或复制粘贴等操作,也都很容易操作。