Как использовать IOCTL_DISK_GROW_PARTITION? - PullRequest
1 голос
/ 24 мая 2011

Я пытаюсь сжать свой раздел до последней использованной LCN. Кто-нибудь использовал этот контрольный код?

Я получаю код системной ошибки 87 каждый раз в следующем коде:

HANDLE hDiskHandle = NULL;
        DISK_GROW_PARTITION dgp;
        DWORD dwBytesReturned = 0;

        dgp.PartitionNumber = 2;
        dgp.BytesToGrow.QuadPart = -1;

        hDiskHandle = CreateFile(_T("\\.\PhysicalDrive0"), GENERIC_ALL, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, NULL, NULL);
        if (hDiskHandle == INVALID_HANDLE_VALUE) {
            int err = GetLastError();
            printf("Unable to get handle on Volume, error : %d", err);
        }

        if (!DeviceIoControl(
                hDiskHandle,       
                IOCTL_DISK_GROW_PARTITION,  
                &dgp,
                sizeof dgp,      
                NULL,       
                0,     
                &dwBytesReturned,  
                NULL
                )) {
            int err = GetLastError();
            printf("DeviceIoControl Failed, error : %d", err);;
        }

Мой жесткий диск имеет 3 раздела (C, D, E). Диск E: практически пуст.

1 Ответ

0 голосов
/ 30 октября 2014

[Решение ОП преобразовано в ответ ниже]

Оказывается, с моей программой все в порядке.Он начал работать после изменения доступа с

GENERIC_ALL

на

GENERIC_READ | GENERIC_WRITE
...