NdisRegisterProtocol 関数 (ndis.h)
注 NDIS 5 です。 x は非推奨となり、NDIS 6 に置き換えられます。 x をします。 新しい NDIS ドライバーの開発については、「Windows Vista 以降のネットワーク ドライバーを参照してください。 NDIS 5 の移植に関する情報。 NDIS 6 に x ドライバーを します。 x、NDIS 6.0 に NDIS 5.x ドライバーを移植するを参照してください。
NdisRegisterProtocol は、ドライバーの初期化時に NDIS ドライバーの ProtocolXxx エントリ ポイントと名前を NDIS ライブラリに登録します。
構文
void NdisRegisterProtocol(
[out] PNDIS_STATUS Status,
[out] PNDIS_HANDLE NdisProtocolHandle,
[in] PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics,
[in] UINT CharacteristicsLength
);
パラメーター
[out] Status
呼び出し元が指定した変数へのポインター。この関数からの戻り値に次のいずれかの値を指定できます。
NDIS_STATUS_SUCCESS
NDIS ライブラリは、プロトコル ドライバーとして呼び出し元を登録しました。NDIS_STATUS_BAD_CHARACTERISTICS
CharacteristicsLength は、protocolCharacteristics のバッファーで指定された MajorNdisVersion小さすぎます。NDIS_STATUS_BAD_VERSION
ProtocolCharacteristics でバッファーで指定 MajorNdisVersion が無効です。NDIS_STATUS_RESOURCES
リソースの不足 (メモリの可能性あり) により、NDIS ライブラリが呼び出し元を登録できなくなります。
[out] NdisProtocolHandle
この関数が登録済みのドライバーを表すハンドルを返す、呼び出し元が指定した変数へのポインター。
[in] ProtocolCharacteristics
呼び出し元によって設定されたNDIS_PROTOCOL_CHARACTERISTICS構造体へのポインター。 ProtocolCharacteristics の構造は次のように定義されています。
typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
UCHAR MajorNdisVersion;
UCHAR MinorNdisVersion;
UINT Reserved;
OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler;
CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler;
SEND_COMPLETE_HANDLER SendCompleteHandler;
TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
RESET_COMPLETE_HANDLER ResetCompleteHandler;
REQUEST_COMPLETE_HANDLER RequestCompleteHandler;
RECEIVE_HANDLER ReceiveHandler;
RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
STATUS_HANDLER StatusHandler;
STATUS_COMPLETE_HANDLER StatusCompleteHandler;
NDIS_STRING Name;
//
// MajorNdisVersion must be set to 0x04 or 0x05
// with any of the following members.
//
RECEIVE_PACKET_HANDLER ReceivePacketHandler;
BIND_HANDLER BindAdapterHandler;
UNBIND_HANDLER UnbindAdapterHandler;
PNP_EVENT_HANDLER PnPEventHandler;
UNLOAD_PROTOCOL_HANDLER UnloadHandler;
//
// MajorNdisVersion must be set to 0x05
// with any of the following members.
//
CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler;
CO_STATUS_HANDLER CoStatusHandler;
CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler;
CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
} NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;
ドライバーは、次のメンバーを設定する前に、ゼロでこの構造体を初期化する必要があります。
MajorNdisVersion
ドライバーが使用している NDIS ライブラリのメジャー バージョンを指定します。 現在の値は0x05ですが、NDIS ライブラリは NDIS V4.0 用に開発された既存のドライバーを引き続きサポートします。 NDIS は V3.0 プロトコルをサポートしなくなりました。MinorNdisVersion
マイナー NDIS バージョンを指定します。 現在の値は0x00。予約済み
このメンバーは、システム使用のために予約されています。OpenAdapterCompleteHandler
呼び出し元の ProtocolOpenAdapterComplete 関数のエントリ ポイントを指定します。CloseAdapterCompleteHandler の
呼び出し元の ProtocolCloseAdapterComplete 関数のエントリ ポイントを指定します。SendCompleteHandler
呼び出し元の ProtocolSendComplete 関数のエントリ ポイント (存在する場合) を指定します。TransferDataCompleteHandler
呼び出し元の ProtocolTransferDataComplete 関数のエントリ ポイント (存在する場合) を指定します。ResetCompleteHandler の
呼び出し元の ProtocolResetComplete 関数のエントリ ポイントを指定します。RequestCompleteHandler を する
呼び出し元の ProtocolRequestComplete 関数のエントリ ポイントを指定します。ReceiveHandler の
呼び出し元の ProtocolReceive 関数のエントリ ポイント (存在する場合) を指定します。ReceiveCompleteHandler を する
呼び出し元の ProtocolReceiveComplete 関数のエントリ ポイントを指定します。StatusHandler の
呼び出し元の ProtocolStatus 関数のエントリ ポイント (存在する場合) を指定します。StatusCompleteHandler の
呼び出し元の ProtocolStatusComplete 関数のエントリ ポイントを指定します。名の
呼び出し元で初期化されたカウントされた文字列を含むNDIS_STRING型。システムの既定の文字セットにドライバーの名前を付けます。 Windows 2000 以降のドライバーの場合、この文字列には Unicode 文字が含まれます。 つまり、Windows 2000 以降では、NDIS はNDIS_STRING型を UNICODE_STRING 型として定義します。 この文字列は、プロトコルのインストール時にレジストリ (Services) で指定されたものと一致する必要があります。NdisRegisterProtocol 指定した文字列を大文字に変換するため、プロトコル ドライバー ライターは、既に登録されているプロトコル名の大文字と小文字を変更すると、ドライバーの一意の名前を作成することを想定できません。
ReceivePacketHandler を する
呼び出し元の ProtocolReceivePacket 関数のエントリ ポイント (存在する場合) または null 指定します。 マルチパケットをサポートする NIC ドライバーにバインドするプロトコルは、パフォーマンスを向上させるために、ProtocolReceivePacket 関数を提供する必要があります。 ただし、それ自体を接続指向のミニポートに排他的にバインドするプロトコルでは、このメンバーを null 設定することもできます。BindAdapterHandler の
呼び出し元の ProtocolBindAdapter 関数のエントリ ポイントを指定します。 MajorNdisVersion メンバーの値を 0x05 または 0x04 に設定する呼び出し元は、ProtocolBindAdapter 関数を指定し、プラグ アンド プレイをサポートする必要があります。 NDIS 中間ドライバーは、ProtocolBindAdapter 関数も提供する必要があります。これにより、これらの中間ドライバーは NdisIMRegisterLayeredMiniport呼び出し、基になる NIC ドライバーが初期化されるまでドライバーの完全な初期化を延期できます。UnbindAdapterHandler の
呼び出し元の ProtocolUnbindAdapter 関数のエントリ ポイントを指定します。 ProtocolBindAdapter 関数を提供する NDIS ドライバーも、ProtocolUnbindAdapter 関数を指定する必要があります。PnPEventHandler を する
呼び出し元の ProtocolPnPEvent 関数のエントリ ポイント (存在する場合) を指定します。UnloadHandler の
呼び出し元の ProtocolUnbind 関数のエントリ ポイント (存在する場合) を指定するか、NULL します。CoSendCompleteHandler
呼び出し元の ProtocolCoSendComplete 関数のエントリ ポイントを指定します。これは、接続指向のクライアントまたは呼び出しマネージャーが指定する必要があります。 接続指向クライアントは、ProtocolSendComplete 関数もコネクションレス ミニポートにバインドする場合に提供します。CoStatusHandlerCoStatusHandler
呼び出し元の ProtocolCoStatus 関数のエントリ ポイントを指定します。これは、接続指向のクライアントまたは呼び出しマネージャーが指定する必要があります。 接続指向クライアントは、ProtocolStatus 関数も接続なしのミニポートにバインドする場合に提供します。CoReceivePacketHandler
呼び出し元の ProtocolCoReceivePacket 関数のエントリ ポイントを指定します。これは、接続指向のクライアントまたは呼び出しマネージャーが指定する必要があります。 接続指向のクライアントは、ProtocolReceivePacket 関数や ProtocolReceiveを提供し、ProtocolTransferDataComplete 関数も接続なしのミニポートにバインドする場合に提供します。CoAfRegisterNotifyHandler
呼び出し元の ProtocolAfRegisterNotify 関数のエントリ ポイントを指定します。これは、接続指向クライアントが指定する必要があります。
[in] CharacteristicsLength
ProtocolCharacteristics の構造体のサイズバイト単位で指定します。 ビルド ディレクティブ -DNDIS50=1 または -DNDIS40=1 #includeNdis.h の前にファイル ソースで指定すると、sizeof(NDIS_PROTOCOL_CHARACTERISTICS) は自動的に適切な値に設定されます。 どちらのディレクティブも指定されていない場合、NDIS は V3.0 特性構造体が使用されていると見なします。
MajorNdisVersion および MinorNdisVersion メンバーで設定される値は、それぞれビルド ディレクティブと一致しているか、0x03および0x00である必要があります。
戻り値
何一つ
備考
プロトコル ドライバーでは、0x05 (現在のバージョン) または0x04の MajorNdisVersion を指定する必要があります。 NDIS は V.30 プロトコルをサポートしなくなったため、0x03の MajorNdisVersion を指定するプロトコルは読み込まれません。
すべてのプロトコルはプラグ アンド プレイ (PnP) 対応である必要があります。 そのため、プロトコルでは、BindAdapterHandler と UnbindAdapterHandler エントリ ポイントを指定する必要があります。 NDIS では、これらのハンドラー NULL を指定するプロトコルは読み込まれません。
可能な限り最高のパフォーマンスを得るためのプロトコルは、マルチパケット受信をサポートするコネクションレス NIC ドライバーの上にそれ自体を重ねて、ProtocolReceivePacket 関数を提供する必要があります。 このようなプロトコル ドライバーは、ProtocolReceive 関数も提供する必要があります。 マルチパケット送信をサポートする接続なしの NIC ドライバーも、マルチパケット受信を示す可能性があります。
すべての接続指向プロトコル (クライアントまたは呼び出しマネージャー) は、ProtocolCoReceivePacket 関数を登録する必要があります。 また、自身をコネクションレス NIC ドライバーにバインドするクライアント プロトコルは、ProtocolReceivePacket および ProtocolReceive関数も提供します。 接続指向プロトコルでは、クライアントの ndisClOpenAddressFamilyを呼び出すか、ProtocolBindAdapter 関数から呼び出しマネージャーの NdisCmRegisterAddressFamily を呼び出すことによって、NDIS に追加の接続指向エントリ ポイントを登録する必要があります。
NdisRegisterProtocol 正常に呼び出されると、ドライバーは、指定した ProtocolXxx 関数のセット 変更できません。
正常に登録されたドライバーは、NdisProtocolHandle で返されたハンドル保存する必要があります。 これは、ドライバーが後で呼び出す他の NdisXxx 関数に必要なパラメーターです。
NdisRegisterProtocol 正常に呼び出されると、PnP 対応または接続指向プロトコルの DriverEntry 関数は制御を返します。これは、このようなドライバーの ProtocolBindAdapter 関数が、その後 1 回以上呼び出され、基になる NIC へのバインドを設定するためです。 それ以外の場合、プロトコル ドライバー NdisOpenAdapter を呼び出して、基になる NIC ドライバーへのバインドを設定したり、NDIS ミニポートXxx 関数のセットを登録した NDIS ドライバーの上に自身をレイヤー化したりできます。
- ターゲット プラットフォーム: ユニバーサル
- バージョン: Windows Vista の NDIS 6.0 ドライバーではサポートされていません。 代わりに、NdisRegisterProtocolDriver使用してください。 Windows Vista および Windows XP の NDIS 5.1 ドライバーでサポートされています。
必要条件
要件 | 価値 |
---|---|
ヘッダー | ndis.h (Ndis.h を含む) |
ライブラリ | Ndis.lib |
IRQL | PASSIVE_LEVEL |
関連項目
- ANSI_STRING
- NDIS プロトコル ドライバーののDriverEntry
- NdisClOpenAddressFamilyの
- NdisCmRegisterAddressFamilyの
- NdisDeregisterProtocolの
- NdisIMRegisterLayeredMiniportの
- NdisInitializeString
- NdisInitUnicodeStringの
- NdisMCmRegisterAddressFamilyの
- NdisOpenAdapterの
- NdisZeroMemoryの
- ProtocolBindAdapter
- ProtocolCloseAdapterComplete
- ProtocolCoAfRegisterNotify
- ProtocolCoReceivePacket
- ProtocolCoSendComplete
- ProtocolCoStatus
- ProtocolOpenAdapterComplete
- ProtocolPnPEvent
- ProtocolReceive
- ProtocolReceiveComplete
- ProtocolReceivePacket
- ProtocolRequestComplete
- ProtocolResetComplete
- ProtocolSendComplete
- ProtocolStatus
- ProtocolStatusComplete
- ProtocolTransferDataComplete
- ProtocolUnbindAdapter
- UNICODE_STRING