NDIS ポートの割り当て
ミニポート アダプターの NDIS ポートを割り当てるため、ミニポート ドライバーは NdisMAllocatePort 関数を呼び出します。 NdisMAllocatePort は同期的であり、NDIS がポートに必要なリソースを正常に割り当てた後に返されます。
ミニポート ドライバーが NdisMAllocatePortを呼び出す前に、ドライバーは NdisMSetMiniportAttributes 関数を呼び出して、 NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 構造の属性を設定する必要があります。 ミニポート ドライバーは、ミニポート アダプターの NdisMAllocatePort の呼び出しを、NdisMSetMiniportAttributes が正常に戻り、NDIS がそのミニポート アダプターの MiniportHaltEx 機能を呼び出す前に実行できます。
NDIS は常に既定のポート (ポート 0) を割り当てるので、ミニポート ドライバーは既定のポートを割り当てないようにします。 NDIS は、ミニポート ドライバーが MiniportHaltEx フォームを返した後、既定のポートを解放します。
NDIS は、ミニポート ドライバーが NdisMAllocatePort を呼び出す際にポートにポート番号を割り当てます。 ドライバーは、NDIS_PORT_CHARACTERISTICS 構造のポートの特性の指定を、ドライバーが NdisMAllocatePort を呼び出す前に実施します。 NdisMAllocatePort が正常に返されると、PortNumber メンバー (PortCharacteristics パラメーターが指定する NDIS_PORT_CHARACTERISTICSの) は、NDIS がポートに割り当てたポート番号に設定されます。
MiniportHaltEx から戻る前に、ミニポート ドライバーはミニポート アダプターに関連付けられているすべてのポートを解放する NdisMFreePort 関数を呼び出す必要があります。 ミニポート アダプターの初期化に失敗した場合、ドライバーは、 NdisMFreePort の呼び出しを MiniportInitializeEx 機能から戻る前に実施する必要があります。 NDIS ポートの解放の詳細については、「NDIS ポートの解放」を参照してください。
ミニポート ドライバーが割り当てることができるポートの最大数は 0xffffff です。 ただし、実際には、ドライバーはポートの種類とドライバー アプリケーションの要件に基づいて最大数を設定します。 たとえば、ブリッジ アプリケーションの場合、ポートの数が 16 を超える可能性はほとんどありません。 802.1x サプリカント ポートを使用するアクセス ポイントではポートの数が多く、仮想プライベート ネットワーク (VPN) ポートを使用する WAN ドライバーの場合は大幅に多くなります。
ミニポート ドライバーがポートを割り当てた後、ポートは割り当てられた状態であり、ポートはアクティブではありません。 ポートがアクティブになるまで、ポートを使用してデータの送受信、状態表示の開始、OID 要求の発行、またはプラグ アンド プレイ (PnP) イベントの開始を行うことはできません。 NDIS は、ミニポート ドライバーが NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 構造の登録属性を設定した後、既定のポートを自動的にアクティブ化します。 NDIS が既定のポートをアクティブ化しないことを要求するため、ミニポート ドライバーは、NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES の AttributeFlags メンバーで NDIS_MINIPORT_ATTRIBUTES_CONTROLS_DEFAULT_PORT を設定できます。
NDIS は、既定のポートの認証状態を、 MiniportInitializeEx 関数 (DefaultPortAuthStates メンバー、 NDIS_MINIPORT_INIT_PARAMETERS 構造にある) に渡します。 ミニポート ドライバーが既定のポートを制御する場合は、ミニポート ドライバーが既定のポートをアクティブ化する際に、既定の認証設定を使用して既定のポートをアクティブ化できます。 既定のポートのアクティブ化の詳細については、「NDIS ポートのアクティブ化」を参照してください。
ミニポート ドライバーは、NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS フラグを Flags メンバー (ドライバーが割り当ててアクティブ化するポートの NDIS_PORT_CHARACTERISTICS 構造) で使用できます。 割り当てケースの場合、NDIS は新しいポートに既定の認証状態を割り当て、NdisMAllocatePort 関数に渡される認証状態を無視します。
NDIS ポートの状態の詳細については、「NDIS ポートの状態」を参照してください。 ポートのアクティブ化の詳細については、「NDIS ポートのアクティブ化」を参照してください。