Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Скрытый раздел диска


Автор: BIV 6.11.2013, 16:22
Всем  доброе время суток!
У меня на флешке есть 2 раздела: 1 обычный, 2й скрытый. У скрытого есть только имя тома, но нет буквы. Можно ли средствами Visual C++ получить к доступ и выполнять операцию чтения и записи? Если можно, то как получить к нему доступ?

Автор: DarthTon 7.11.2013, 11:42
Как-то так можно:
Код

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);
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)