我需要实现一个从磁盘stream式传输数据的应用程序。 数据吞吐量相当稳定并且不会被磁盘上的任何其他活动中断。
从Windows Vista开始,专门为此引入了GetFileBandwidthReservation()和SetFileBandwidthReservation()函数。 但是,我无法得到这个工作。 我search了互联网,但我找不到这方面的很多信息(并没有工作代码样本似乎在线存在)。
代码重现:
HANDLE h = ::CreateFile(L"D:\\testfile", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING | FILE_FLAG_SEQUENTIAL_SCAN, NULL); DWORD periodMilliseconds, bytesPerPeriod, transferSize, numOutstandingRequests; BOOL discardable; BOOL result = ::GetFileBandwidthReservation(h, &periodMilliseconds, &bytesPerPeriod, &discardable, &transferSize, &numOutstandingRequests); if (result == FALSE) // result is always false! { DWORD reason = ::GetLastError(); // reason is always 1! std::cout << "Error: " << reason << std::endl; } result = ::CloseHandle(h);
对GetFileBandwidthReservation的调用总是返回FALSE,表示失败。 GetLastError返回1,这不是非常有用的。 如果试图调用* Set * FileBandwithReservation,我会得到相同的结果。
我正在使用Windows Server 2008 SP2(32位)在PC上testing此function。
有谁知道我做错了什么? 任何帮助将不胜感激。
这需要磁盘设备驱动程序的支持。 您在高档服务器中找到的那种驱动程序,而不是消费级机器。 在serverfault.com上询问更多的问题