如何使用IOCTL_DISK_GROW_PARTITION?

问题描述

| 我正在尝试将分区缩小到最后使用的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);
        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,&dwBytesReturned,NULL
                )) {
            int err = GetLastError();
            printf(\"DeviceIoControl Failed,err);;
        }
我的硬盘驱动器有3个分区(C,D,E)。 E:驱动器实际上是空的。     

解决方法

[OP的解决方案转换为下面的答案] 事实证明,我的程序很好。从更改访问权限后开始工作
GENERIC_ALL
GENERIC_READ | GENERIC_WRITE