次の方法で共有


SET_OPTIONS コールバック関数 (ndis.h)

NDIS は、ドライバーの XxxSetOptions 関数を呼び出して、ドライバーがオプションのサービスを登録できるようにします。 この関数は、ミニポート ドライバーの 場合は MiniportSetOptions 、プロトコル ドライバーの 場合は ProtocolSetOptions 、フィルター ドライバー の場合は FilterSetOptions として定義されます。

メモXxx_SET_OPTIONS型を使用して関数を宣言する必要があります。 詳細については、「例」のセクションを参照してください。
 

構文

SET_OPTIONS SetOptions;

NDIS_STATUS SetOptions(
  [in] NDIS_HANDLE NdisDriverHandle,
  [in] NDIS_HANDLE DriverContext
)
{...}

パラメーター

[in] NdisDriverHandle

ドライバーを識別するハンドル。 NDIS は、ドライバー登録関数 (ミニポート ドライバーの 場合は NdisMRegisterMiniportDriver 、プロトコル ドライバーの 場合は NdisRegisterProtocolDriver 、フィルター ドライバーの 場合は NdisFRegisterFilterDriver ) からこのハンドルをドライバーに返します。

[in] DriverContext

ドライバーコンテキスト領域を識別する NdisRegisterXxxDriver にドライバーが渡されたハンドル 。Xxx はドライバーの種類 (ミニポート、プロトコル、またはフィルター) です。

戻り値

XxxSetOptions は、 次のいずれかの状態値を返します。

リターン コード 説明
NDIS_STATUS_SUCCESS
XxxSetOptions は、 ドライバーのオプションのサービスとリソースを正常に登録しました。
NDIS_STATUS_RESOURCES
XxxSetOptions は、 ドライバーに必要なリソースを割り当てませんでした。
NDIS_STATUS_XXXまたはNTSTATUS_XXX
ドライバーがオプションを登録しようとしましたが失敗しました。 通常、このようなエラー状態は NdisXxx 関数またはカーネル モード サポート ルーチンから伝達されます。

注釈

XxxSetOptions は省略可能な関数です。 NDIS は、 に対するドライバーの呼び出しのコンテキスト内で XxxSetOptions を呼び出します。 NdisRegisterXxxDriver 関数。Xxx はドライバーの種類 (ミニポート、プロトコル、またはフィルター) です。

XxxSetOptions は 省略可能なサービスを登録し、他のドライバー リソースを割り当てることができます。 省略可能な ミニポートXxxProtocolXxx、または FilterXxx 関数を登録するには、ドライバーは NdisSetOptionalHandlers 関数を呼び出します。 ドライバーは、NdisSetOptionalHandlersNdisHandle パラメーターNdisDriverHandle パラメーターからハンドルを渡し、OptionalHandlers パラメーターで特性構造を渡します。

ミニポート ドライバーは、次の特性構造で定義されているオプションのサービスに適用できます。

NDIS_MINIPORT_CO_CHARACTERISTICS
NDIS_MINIPORT_PNP_CHARACTERISTICS
NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS
NDIS_PROVIDER_CHIMNEY_OFFLOAD_GENERIC_CHARACTERISTICS ( NDIS 6.0 TCP チムニー オフロードドキュメントを参照)
NDIS_PROVIDER_CHIMNEY_OFFLOAD_TCP_CHARACTERISTICS ( NDIS 6.0 TCP チムニー オフロードドキュメントを参照)

プロトコル ドライバーは、次の特性構造で定義されているオプションのサービスに適用できます。

NDIS_PROTOCOL_CO_CHARACTERISTICS
NDIS_CO_CLIENT_OPTIONAL_HANDLERS
NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS

現在の Windows バージョンには、オプションのフィルター ドライバー サービスはありません。

NDIS は、XxxSetOptions が返された後、いつでもドライバーの他のミニポートXxxProtocolXxx、または FilterXxx 関数を呼び出すことができます。 ドライバーは、初期化関数で呼び出されるように準備する必要があります。(ミニポート ドライバーの場合は MiniportInitializeEx 、プロトコル ドライバーの 場合は ProtocolBindAdapterEx 、フィルター ドライバーの 場合は FilterAttach )。

ミニポート ドライバーの場合、NDIS が MiniportInitializeEx を呼び出す前に、ミニポート アダプターは停止状態になります。 プロトコル ドライバーの場合、NDIS が ProtocolBindAdapterEx を呼び出す前に、プロトコル バインドは Unbound 状態になります。 フィルター ドライバーの場合、フィルター モジュールは、NDIS が FilterAttach を呼び出す前にデタッチされた状態になります。

リソースまたはサービスの割り当てが失敗した場合、 XxxSetOptions は、NDIS_STATUS_SUCCESS以外の状態のコントロールを返す前に、成功したすべての割り当てを元に戻す必要があります。

ミニポートドライバーとフィルター ドライバーの XxxDriverUnload は、XxxSetOptions で実行されたすべての操作を元に戻す必要があります

NDIS は、IRQL = PASSIVE_LEVEL で XxxSetOptions を呼び出します。

XxxSetOptions 関数を定義するには、まず、定義する関数の型を識別する関数宣言を指定する必要があります。 Windows には、ドライバーの関数型のセットが用意されています。 関数の種類を使用して関数を宣言すると、 ドライバーのコード分析静的ドライバー検証ツール (SDV)、およびその他の検証ツールでエラーが検出され、Windows オペレーティング システム用のドライバーを記述するための要件になります。

Ndis.h ヘッダー ファイルでは、SET_OPTIONSコールバック関数は次のようにさらに定義されます。

typedef SET_OPTIONS (*SET_OPTIONS_HANDLER);
typedef SET_OPTIONS (MINIPORT_SET_OPTIONS);
typedef SET_OPTIONS (PROTOCOL_SET_OPTIONS);
typedef SET_OPTIONS (FILTER_SET_OPTIONS);
これにより、すべての NDIS ドライバーは、同じ構文で XxxSetOptions コールバック関数を実装できます。 ミニポート ドライバーは MINIPORT_SET_OPTIONS の種類を使用し、プロトコル ドライバーは PROTOCOL_SET_OPTIONS の種類を使用し、フィルター ドライバーは FILTER_SET_OPTIONS の種類を使用します。

たとえば、" MySetOptions" という名前の MiniportSetOptions 関数を定義するには、次のコード例に示すように 、MINIPORT_SET_OPTIONS 型を使用します。

MINIPORT_SET_OPTIONS MySetOptions;

次に、次のように関数を実装します。

_Use_decl_annotations_
NDIS_STATUS
 MySetOptions(
    NDIS_HANDLE  NdisDriverHandle,
    NDIS_HANDLE  DriverContext
    )
  {...}

SET_OPTIONS関数の種類は、Ndis.h ヘッダー ファイルで定義されます。 コード分析ツールを実行するときにエラーをより正確に識別するには、 Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations注釈を使用すると、ヘッダー ファイル内のSET_OPTIONS関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「NDIS ドライバーの関数 ロール型を使用して関数を宣言する」を参照してください。

Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。

要件

要件
サポートされている最小のクライアント NDIS 6.0 以降でサポートされています。
対象プラットフォーム Windows
ヘッダー ndis.h (Ndis.h を含む)
IRQL PASSIVE_LEVEL

こちらもご覧ください

NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS NDIS_CO_CLIENT_OPTIONAL_HANDLERS NDIS_PROTOCOL_CO_CHARACTERISTICS

NdisOpenAdapterEx

NdisRegisterProtocolDriver

NdisSetOptionalHandlers

ProtocolBindAdapterEx