Мне нужно реализовать приложение для потоковой передачи данных с диска.Важно, чтобы пропускная способность данных была довольно постоянной и не прерывалась никакими другими действиями на диске.
Начиная с 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, что не очень полезно.Если попытаться вызвать * Установить * FileBandwithReservation, я получу тот же результат.
Я проверяю это на ПК с Windows Server 2008 SP2 (32-разрядная версия).
Кто-нибудь имеет представление о том, что я делаю неправильно?Любая помощь будет принята с благодарностью.