VC++弹出U盘

摘自http://bbs.pcbeta.com/viewthread-1067733-1-1.html

windows弹出可移动媒体的时候,首先通过DeviceIoControl发送FSCTL_LOCK_VOLUME IOCTL来锁定卷,然后发送FSCTL_DISMOUNT_VOLUME IOCTL来卸载卷,这两步之后,可确保卷不被其他程序使用,这时拔出可移动磁盘可以确保没有损害,虽然并没有删除盘符,但这没有关系。若在托盘弹出u盘,则会通过DeleteVolumeMountPoint删除卷装载点,删除掉u盘盘符,使其无法访问。虽然前者没有删除掉盘符,但是由于卷已经被lock和dismount,不会读写可移动磁盘,此时拔出是安全的。

上面的方法貌似没什么用,U盘盘符还在,U盘还室能打开。


下面的方法来自http://bbs.csdn.net/topics/390342966


//弹出U盘
//CreateFile的dwDesiredAccess至少要有GENERIC_READ权限,dwShareMode要有FILE_SHARE_READ | FILE_SHARE_WRITE属性
HANDLE hDevice = CreateFile(pszVolume, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

if (INVALID_HANDLE_VALUE == hDevice)
{
	return;
}

DWORD dwJunk = 0;
BOOL bRet = DeviceIoControl(hDevice,IOCTL_STORAGE_EJECT_MEDIA, NULL, 0, NULL, 0, &dwJunk, NULL);

CloseHandle(hDevice);
网上有人说这种方法没有用,但我这里一直没什么问题。

你可能感兴趣的:(Windows)