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。
注解
请求的带宽预留必须大于或等于每个时间段一个数据包。 特定卷的最小时间段(以毫秒为单位)和最小传输大小(以字节为单位)通过 lpPeriodMilliseconds、lpBytesPeriod 和 lpTransferSize 参数返回到未在 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 |