4
我需要實現從磁盤流式傳輸數據的應用程序。數據吞吐量相當穩定並且不會被磁盤上的任何其他活動中斷。如何在Windows中使用文件帶寬保留(預定文件IO)
從Windows Vista開始,GetFileBandwidthReservation()和SetFileBandwidthReservation()函數專門用於此目的。但是,我無法得到這個工作。我搜索了互聯網,但我無法找到關於此的很多信息(並且沒有任何工作代碼示例似乎在線存在)。
代碼重現:
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上測試此功能。
有沒有人知道我做錯了什麼?任何幫助將不勝感激。
從哪裏獲得Server 2008的SP3? – 2011-01-11 14:53:42
GetLastError()返回什麼? – 2011-01-11 14:58:30