CreatePersistentTcpPortReservation

ローカルコンピュータで連続する TCP ポートブロックに対する永続的な TCP ポート予約を作成する。

CreatePersistentTcpPortReservation StartPort, NumberOfPorts, Token

StartPort : [int] ネットワークバイトオーダーでの開始 TCP ポート番号。
NumberOfPorts : [int] 予約する TCP ポート番号の個数。
Token : [var] 成功時に返されるポート予約トークンへのポインタ。

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

解説

ローカルコンピュータで連続する TCP ポートブロックに対する永続的な TCP ポート予約を作成する。

[戻り値]
関数が成功すると戻り値は NO_ERROR となる。失敗した場合の戻り値は以下のいずれかのエラーコードとなる。
このドキュメントは省略されている。

[備考]
CreatePersistentTcpPortReservation 関数は Windows Vista 以降で定義され、TCP
ポートブロックを永続的に予約する。アプリケーションやサービスがポートを予約する理由には 2 種類ある。動作に特定のポートを必要とする場合
(インストール時にマニフェストで指定するケース) と、実行時に任意の空きポート (ブロック) を必要とする場合である。前者は永続予約 /
ランタイム予約のどちらも可能だが、ワイルドカード予約はランタイムのみ対応する。本関数は永続 TCP
ポートブロック予約を提供し、Windows の TCP
モジュール用永続ストアに記録される。必要なポート数と特定範囲の要否を指定し、要求が満たせれば ULONG64
型の不透明トークンが返される。解放は DeletePersistentTcpPortReservation
で行う。再起動するとトークン値は変わりうる。永続予約にはコンポーネント間のセキュリティ制御はなく、永続予約を取得可能なコンポーネントは他コンポーネントの永続予約も消費できる。ランタイム予約はプロセスレベルのセキュリティが強制される。取得後は
TCP ソケットに対し WSAIoctl で SIO_ASSOCIATE_PORT_RESERVATION IOCTL
を呼んでトークンを渡し、その後 bind を行えばよい。SIO_ACQUIRE_PORT_RESERVATION IOCTL
でランタイム予約も可能。本関数は Administrators
グループのメンバーとしてログオンしたユーザーからのみ呼び出せる。Administrators グループのメンバーでないユーザーが呼び出すと
ERROR_ACCESS_DENIED を返して失敗する。Windows Vista 以降のユーザーアカウント制御 (UAC)
によっても失敗しうる。この関数を含むアプリケーションをビルトイン Administrator 以外の Administrators
グループのメンバーが実行した場合、マニフェストファイルで requestedExecutionLevel を
requireAdministrator に設定していない限りこの呼び出しは失敗する。マニフェストがない場合は、昇格シェル
(管理者として実行) から起動する必要がある。

情報

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