首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么DeviceIoControl有时无法工作(error=2)?

为什么DeviceIoControl有时无法工作(error=2)?
EN

Stack Overflow用户
提问于 2020-10-21 11:29:30
回答 1查看 262关注 0票数 0
代码语言:javascript
复制
DISK_PERFORMANCE DiskPerformance = {0};

DWORD dwDiskInfoSize = 0;

for (int i = 0; i < 10; i++)
{

    std::printf("Try %d th Open \\\\.\\c:\n", i);

    HANDLE hDevice = CreateFile(L"\\\\.\\c:",
                                0,
                                FILE_SHARE_READ | FILE_SHARE_WRITE,
                                //SYNCHRONIZE | FILE_READ_ATTRIBUTES,
                                NULL,
                                OPEN_EXISTING,
                                0,
                                NULL);
    std::printf("hDevice = %p\n", hDevice);

    if (hDevice == INVALID_HANDLE_VALUE)
    {
        std::printf("CreateFile failed  = %d \n", GetLastError());

        continue;
    }

    if (!DeviceIoControl(hDevice,
                         IOCTL_DISK_PERFORMANCE,
                         NULL,
                         0,
                         &DiskPerformance,
                         sizeof(DiskPerformance),
                         &dwDiskInfoSize,
                         NULL))
    {

        CloseHandle(hDevice);

        std::printf("DeviceIoControl failed  = %d \n", GetLastError());

        continue;
    }

    std::printf("QuDeviceIoControlery Success\n");

    CloseHandle(hDevice);

    Sleep(1000);

    std::printf("\n\n");
}

我重新启动程序,大约95%的DeviceIoControl会得到error 2,5%会得到正确的结果。

我不能在另一台机器上重现这个错误,因为这个代码在我的笔记本电脑(win10)上是100%有效的。

我的目标操作系统是Windows Server 2016。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-04 11:40:37

默认情况下,Windows Server 2016中的磁盘性能计数器处于关闭状态。

您可以以管理员身份运行CMD,然后输入diskperf -Y来启用任务管理器的磁盘计数器。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64456253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档