|
如果通过mass storage driver与U盘交互我相信一定是有办法的,但涉及的东西可能就比较多。特别当我们需要一些不那么标准的IOCTL时,要研究的东西就更多了。SPTI是最简单直接的一种方法,以下这段代码就可以打开任何一个U盘的句柄:
BOOL OpenDevice()
{
char szDrive[] = "\\\\.\\C:";
char driveLabel;
DWORD dwDrivesOnSystem = GetLogicalDrives();
UINT uDriveType;
for (driveLabel = 'C'; driveLabel <= 'Z' && dwDrivesOnSystem > 0; driveLabel++, dwDrivesOnSystem >>= 1)
{
szDrive[4] = driveLabel;
uDriveType = GetDriveType ( &szDrive[4] );
if(uDriveType == DRIVE_REMOVABLE)
{
break;
}
}
m_driveLabel = szDrive[4] = driveLabel;
m_hDevHandle = CreateFile(szDrive,
GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);
if (m_hDevHandle == INVALID_HANDLE_VALUE)
RetOpenDevice = FALSE;
else
RetOpenDevice = TRUE;
return RetOpenDevice;
}
以后用在这里得到的句柄,再组装适合你的U盘的SCSI命令就能用DeviceIoControl与其交互了。
具体的你就要自己摸索喽。 |
|