如何使用IOCTL_DISK_GROW_PARTITION?

发布于 2024-11-09 22:42:40 字数 1040 浏览 2 评论 0原文

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

I'm trying to shrink my partition to the last used LCN. Has anybody used this control code?

I'm getting System Error code 87 every time in the following code:

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

My hard drive has 3 partitions (C, D, E). The E: drive is practically empty.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

〆一缕阳光ご 2024-11-16 22:42:40

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

事实证明我的程序很好。将访问权限从更改为 后它开始

GENERIC_ALL

工作

GENERIC_READ | GENERIC_WRITE

[OP's solution converted to answer below]

It turns out my program was fine. It started working after changing access from

GENERIC_ALL

to

GENERIC_READ | GENERIC_WRITE
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文