Поделиться через


Функция SetFileBandwidthReservation (winbase.h)

Запрашивает резервирование пропускной способности для указанного потока файлов. Резервирование указывается в виде количества байтов в миллисекундах для запросов ввода-вывода в указанном дескрипторе файла.

Синтаксис

BOOL SetFileBandwidthReservation(
  [in]  HANDLE  hFile,
  [in]  DWORD   nPeriodMilliseconds,
  [in]  DWORD   nBytesPerPeriod,
  [in]  BOOL    bDiscardable,
  [out] LPDWORD lpTransferSize,
  [out] LPDWORD lpNumOutstandingRequests
);

Параметры

[in] hFile

Дескриптор файла.

[in] nPeriodMilliseconds

Период резервирования в миллисекундах. Период — это время, с которого операции ввода-вывода выдаются ядру до момента завершения ввода-вывода. Минимальное поддерживаемое значение для файлового потока можно определить, просмотрев значение, возвращаемое с помощью параметра lpPeriodMilliseconds для функции GetFileBandwidthReservation , на дескрипторе, для которого не задано резервирование пропускной способности.

[in] nBytesPerPeriod

Резервируемая пропускная способность в байтах на период. Максимальное поддерживаемое значение для потока файлов можно определить, просмотрев значение, возвращаемое с помощью параметра lpBytesPeriod функции GetFileBandwidthReservation , на дескрипторе, для которого не задано резервирование пропускной способности.

[in] bDiscardable

Указывает, следует ли завершать операции ввода-вывода с ошибкой, если драйвер не может выполнить операцию ввода-вывода до истечения периода. Если один из драйверов для указанного потока файлов не поддерживает эту функцию, эта функция может вернуть успешное выполнение и игнорировать флаг . Чтобы проверить, будет ли этот параметр соблюдаться, вызовите функцию GetFileBandwidthReservation , используя тот же дескриптор hFile , и проверьте возвращаемое значение *pDiscardable .

[out] lpTransferSize

Указатель на переменную, которая получает минимальный размер любого отдельного запроса ввода-вывода, который может быть выдан приложением. Все запросы ввода-вывода должны быть кратными для TransferSize.

[out] lpNumOutstandingRequests

Указатель на переменную, которая получает количество блоков TransferSize , которые приложение должно разрешить, чтобы быть неоплаченными в операционной системе. Это позволяет стеку хранилища сохранять занятое устройство и обеспечивает максимальную пропускную способность.

Возвращаемое значение

Возвращает ненулевое значение в случае успешного выполнения или ноль в противном случае.

Резервирование может завершиться ошибкой, если для тома недостаточно доступной пропускной способности из-за существующих резервирований; в этом случае возвращается ERROR_NO_SYSTEM_RESOURCES .

Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Запрошенное резервирование пропускной способности должно быть больше или равно одному пакету на период. Минимальный период (в миллисекундах), максимальный размер байтов на период и минимальный размер передачи в байтах для определенного тома возвращаются с помощью параметров lpPeriodMilliseconds, lpBytesPerperiod и lpTransferSize в GetFileBandwidthReservation на дескрипторе, который не использовался в вызове SetFileBandwidthReservation. Другими словами:

1 ≤ (nBytesPerPeriod)×(lpPeriodMilliseconds)/(lpTransferSize)/(nPeriodMilliseconds)

В Windows 8 и Windows Server 2012 эта функция поддерживается следующими технологиями.

Технология Поддерживается
Протокол SMB 3.0 Нет
Прозрачная отработка отказа (TFO) SMB 3.0 Нет
SMB 3.0 с масштабируемыми общими папками (SO) Нет
Файловая система общего тома кластера (CSVFS) Нет
Восстанавливаемая файловая система (ReFS) Да

Требования

Требование Значение
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Целевая платформа Windows
Header winbase.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

Функции управления файлами

GetFileBandwidthReservation