2011-01-11 39 views
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上測試此功能。

有沒有人知道我做錯了什麼?任何幫助將不勝感激。

+1

從哪裏獲得Server 2008的SP3? – 2011-01-11 14:53:42

+0

GetLastError()返回什麼? – 2011-01-11 14:58:30

回答

3

這需要磁盤設備驅動程序的支持。您在高檔服務器中找到的那種驅動程序,而不是消費級機器。在serverfault.com上詢問有關此問題的更多問題

相關問題