如何使用IOCTL_DISK_GROW_PARTITION

How to use IOCTL_DISK_GROW_PARTITION?

本文关键字:GROW PARTITION DISK IOCTL 何使用      更新时间:2023-10-16

我正在尝试将分区缩小到上次使用的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: 驱动器实际上是空的。

[OP 的解决方案转换为下面的答案]

事实证明我的程序很好。 从以下位置更改访问权限后,它开始工作

GENERIC_ALL

GENERIC_READ | GENERIC_WRITE