Как-то так можно:
Код | BOOL result = TRUE; wchar_t volumeName[MAX_PATH] = {0}; wchar_t foundVolume[MAX_PATH] = {0}; HANDLE hFind = INVALID_HANDLE_VALUE; HANDLE hDev = INVALID_HANDLE_VALUE;
// Iterate volumes for(HANDLE hFind = FindFirstVolumeW(volumeName, sizeof(volumeName) / sizeof(wchar_t)); hFind != INVALID_HANDLE_VALUE && result != FALSE; result = FindNextVolumeW(hFind, volumeName, sizeof(volumeName) / sizeof(wchar_t))) { wchar_t volumePath[MAX_PATH] = {0}; DWORD retLength = 0;
// Get mount points for volume if(GetVolumePathNamesForVolumeNameW(volumeName, volumePath, sizeof(volumePath) / sizeof(wchar_t), &retLength) == TRUE) { UINT dType = GetDriveTypeW(volumeName);
// Save first volume without mount points located on removable drive if(dType == DRIVE_REMOVABLE && volumePath[0] == 0) { wcscpy(foundVolume, volumeName);
// Remove trailing slash if(foundVolume[wcslen(foundVolume) - 1] == L'\\') foundVolume[wcslen(foundVolume) - 1] = 0;
break; } } }
if(hFind != INVALID_HANDLE_VALUE) FindVolumeClose(hFind);
// Open volume for read/write hDev = CreateFileW(foundVolume, FILE_READ_DATA | FILE_WRITE_DATA, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if(hDev != INVALID_HANDLE_VALUE) { BYTE buffer[512] = {0}; DWORD bytes = 0;
// Read data result = ReadFile(hDev, buffer, sizeof(buffer), &bytes, NULL);
// Write data result = WriteFile(hDev, buffer, sizeof(buffer), &bytes, NULL);
CloseHandle(hDev); }
|
|