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。
发布于 2021-01-04 11:40:37
默认情况下,Windows Server 2016中的磁盘性能计数器处于关闭状态。
您可以以管理员身份运行CMD,然后输入diskperf -Y来启用任务管理器的磁盘计数器。

https://stackoverflow.com/questions/64456253
复制相似问题