SetFileBandwidthReservation

指定ファイルストリームに対する帯域予約を要求する。予約は指定ファイルハンドル上の I/O リクエストに対する「ミリ秒周期あたりのバイト数」として指定される。

SetFileBandwidthReservation hFile, nPeriodMilliseconds, nBytesPerPeriod, bDiscardable, lpTransferSize, lpNumOutstandingRequests

hFile : [intptr] ファイルへのハンドル。
nPeriodMilliseconds : [int] 予約の周期 (ミリ秒)。周期は I/O がカーネルに発行されてから完了すべき時刻までの時間である。ファイルストリームに対してサポートされる最小値は、帯域予約が設定されていないハンドルで GetFileBandwidthReservation を呼び出した際の lpPeriodMilliseconds の戻り値で判定できる。
nBytesPerPeriod : [int] 予約する帯域幅 (1 周期あたりのバイト数)。ファイルストリームに対してサポートされる最大値は、帯域予約が設定されていないハンドルで GetFileBandwidthReservation を呼び出した際の lpBytesPerPeriod の戻り値で判定できる。
bDiscardable : [int] 期間満了前にドライバが I/O 操作を満たせなかった場合に、I/O をエラーで完了させるかどうかを示す。指定ファイルストリームのドライバのいずれかがこの機能をサポートしない場合、関数は成功を返しフラグを無視することがある。設定が尊重されたかを確認するには、同じ hFile ハンドルで GetFileBandwidthReservation を呼び出し *pDiscardable の戻り値を調べる。
lpTransferSize : [var] アプリケーションが発行する個々の I/O リクエストの最小サイズを受け取る変数へのポインタ。すべての I/O リクエストは TransferSize の倍数でなければならない。
lpNumOutstandingRequests : [var] OS に対して未処理のまま許容する TransferSize チャンク数を受け取る変数へのポインタ。これによりストレージスタックはデバイスをビジー状態に保ち、最大スループットを得られる。

(プラグイン / モジュール : kernel32.dll)

解説

指定ファイルストリームに対する帯域予約を要求する。予約は指定ファイルハンドル上の I/O
リクエストに対する「ミリ秒周期あたりのバイト数」として指定される。

[戻り値]
成功した場合は非ゼロ、そうでない場合はゼロを返す。既存の予約のためにボリュームに十分な帯域がない場合、予約は失敗することがあり、その場合
ERROR_NO_SYSTEM_RESOURCES が返る。拡張エラー情報を取得するには GetLastError を呼び出す。

[備考]
要求する帯域予約は周期あたり 1 パケット以上でなければならない。特定ボリュームの最小周期
(ミリ秒)、周期あたり最大バイト数、最小転送サイズ (バイト) は、SetFileBandwidthReservation
で未使用のハンドルで GetFileBandwidthReservation を呼び出したときに
lpPeriodMilliseconds、lpBytesPerPeriod、lpTransferSize から得られる。すなわち: 1 ?
(nBytesPerPeriod)×(*lpPeriodMilliseconds)/(*lpTransferSize)/(nPeriodMilliseconds)。Windows
8 および Windows Server 2012 では、この関数は以下の技術によってサポートされている。
(以下省略)

情報

プラグイン / モジュールkernel32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_kernel32_gen2.hs