You can try GetLogicalDriveStrings to get drive letters, and then use GetDriveType to see if the drive is removable or not. Then you can get more information about the device like this (example for cd-rom, but should show you this idea):
//handle to the drive to be examined HANDLE hDevice = CreateFile(TEXT("\\\\.\\G:"), //Drive to open GENERIC_READ|GENERIC_WRITE, //Access to the drive FILE_SHARE_READ|FILE_SHARE_WRITE, //Share mode NULL, //Security OPEN_EXISTING,0, // no file attributes NULL); if (hDevice == INVALID_HANDLE_VALUE) return 0; CDROM_TOC val; // table of contents for a generic CDROM DWORD nBytesReturned; BOOL bResult= DeviceIoControl( hDevice, IOCTL_CDROM_READ_TOC,//operation to perform &val, sizeof(val),//no input buffer &val, sizeof(val),//output buffer &nBytesReturned,//#bytes returned (LPOVERLAPPED) NULL);//synchronous I/O CloseHandle(hDevice);
source share