setFileBandwidthReservation 函数 (winbase.h)

请求保留指定文件流的带宽。 保留指定为指定文件句柄上的 I/O 请求的字节数(按毫秒计)。

语法

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

参数

[in] hFile

文件的句柄。

[in] nPeriodMilliseconds

预留期(以毫秒为单位)。 时间段是向内核发出 I/O,直到完成 I/O 的时间。 可以通过在未设置带宽预留的句柄上查看通过 lpPeriodMilliseconds 参数返回给 GetFileBandwidthReservation 函数的值来确定文件流支持的最小值。

[in] nBytesPerPeriod

要保留的带宽,以字节为单位(以每个周期为单位)。 可以通过在未设置带宽预留的句柄上查看通过 lpBytesPerPeriod 参数返回给 GetFileBandwidthReservation 函数的值来确定文件流支持的最大值。

[in] bDiscardable

指示如果驱动程序在期限到期前无法满足 I/O 操作,是否应完成 I/O 并出现错误。 如果指定文件流的某个驱动程序不支持此功能,则此函数可能会返回成功并忽略 标志。 若要验证是否遵循该设置,请使用同一 hFile 句柄调用 GetFileBandwidthReservation 函数,并检查 *pDiscardable 返回值。

[out] lpTransferSize

指向变量的指针,该变量接收应用程序可能发出的任何单个 I/O 请求的最小大小。 所有 I/O 请求都应是 TransferSize 的倍数。

[out] lpNumOutstandingRequests

指向一个变量的指针,该变量接收应用程序应允许在操作系统中未完成的 TransferSize 区块数。 这允许存储堆栈使设备保持繁忙状态,并允许最大吞吐量。

返回值

如果成功,则返回非零值,否则返回零。

如果由于现有预留,卷上没有足够的可用带宽,预留可能会失败;在本例中 返回ERROR_NO_SYSTEM_RESOURCES

要获得更多的错误信息,请调用 GetLastError。

注解

请求的带宽预留必须大于或等于每个时间段一个数据包。 特定卷的最小时间段(以毫秒为单位)和最小传输大小(以字节为单位)通过 lpPeriodMillisecondslpBytesPeriodlpTransferSize 参数返回到未在 SetFileBandwidthReservation 调用的句柄上的 GetFileBandwidthReservation 换句话说:

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

在 I Windows 8 和 Windows Server 2012 中,以下技术支持此函数。

技术 支持
服务器消息块 (SMB) 3.0 协议
SMB 3.0 透明故障转移 (TFO)
具有横向扩展文件共享的 SMB 3.0 (SO)
群集共享卷文件系统 (CSV)
弹性文件系统 (ReFS)

要求

要求
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 winbase.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

文件管理函数

GetFileBandwidthReservation