NdisCoOidRequest 関数 (ndis.h)

NdisCoOidRequest 関数は、対象の CoNDIS ドライバーに要求を転送して、ターゲット ドライバーの OID 指定の情報を照会または設定します。

構文

NDIS_STATUS NdisCoOidRequest(
  [in]           NDIS_HANDLE       NdisBindingHandle,
  [in, optional] NDIS_HANDLE       NdisAfHandle,
  [in, optional] NDIS_HANDLE       NdisVcHandle,
  [in, optional] NDIS_HANDLE       NdisPartyHandle,
  [in, out]      PNDIS_OID_REQUEST OidRequest
);

パラメーター

[in] NdisBindingHandle

バインドのターゲット アダプターを識別する NdisOpenAdapterEx 関数が返したハンドル。

[in, optional] NdisAfHandle

クライアント、通話マネージャー、NDIS 間で共有されるアドレス ファミリ (AF) を識別するハンドル。 このハンドルは次のように取得されました。

  • 呼び出し元が呼び出しマネージャーに対して要求を行っているクライアントである場合、クライアントは最初に、 への正常な呼び出しからこのハンドルを取得しました。 NdisClOpenAddressFamilyEx 関数。
  • 呼び出し元がクライアントへの要求を行っているスタンドアロンの呼び出しマネージャーまたはミニポート呼び出しマネージャー (MCM) の場合、呼び出しマネージャーまたは MCM は、最初に ProtocolCmOpenAf 関数への入力パラメーターとしてこのハンドルを取得しました。
クライアントまたはスタンドアロンの呼び出しマネージャーから基になるミニポート ドライバーへの要求を行うには、このパラメーターは NULL である必要があります。

[in, optional] NdisVcHandle

呼び出し元が要求している仮想接続 (VC) を識別するハンドル。要求が VC 固有の場合は、情報を設定します。 それ以外の場合、このパラメーターが NULL の場合、要求は VC 固有ではありません。 VC 固有の要求の場合、呼び出し元は、 NdisCoCreateVc 関数を使用して VC を作成したとき、または ProtocolCoCreateVc 関数への入力パラメーターとして、最初にこのハンドルを取得しました。 基になるミニポート ドライバーに送信される VC 固有の要求の場合、このハンドルは VC を識別しますが、 NdisAfHandleNdisPartyHandleNULL です

[in, optional] NdisPartyHandle

要求がパーティ固有の場合に、呼び出し元が要求しているマルチポイント VC 上のパーティを識別するハンドル。または情報を設定します。 それ以外の場合、このパラメーターが NULL の場合、要求はパーティ固有ではありません。 パーティ固有の要求の場合、クライアントは、最初に NdisClAddParty 関数または NdisClMakeCall 関数または呼び出しマネージャーへの正常な呼び出しからこのハンドルを取得し、その ProtocolCmAddParty 関数への入力パラメーターとしてこのハンドルを取得しました。 NdisAfHandleNULL の場合、NdisPartyHandleNULL になります

[in, out] OidRequest

特定のOID_XXX コードを使用してクエリを実行したり、情報を設定したりするために要求される操作を指定するNDIS_OID_REQUEST構造体へのポインター。

戻り値

ターゲット ドライバーは、どのNDIS_STATUS_XXX コード NdisCoOidRequest が返すかを決定します。通常、次のいずれかの値です。

リターン コード 説明
NDIS_STATUS_SUCCESS
要求操作が正常に完了しました。
NDIS_STATUS_PENDING
要求は非同期的に処理されており、NDIS は呼び出し元の を呼び出します。要求が完了したときに ProtocolCoOidRequestComplete 関数。
NDIS_STATUS_INVALID_OID
OidRequest パラメーターのNDIS_OID_REQUEST構造体の Oid メンバーで指定されたOID_XXX コードが無効であるか、基になるドライバーではサポートされていません。
NDIS_STATUS_INVALID_LENGTHまたはNDIS_STATUS_BUFFER_TOO_SHORT
OidRequest のNDIS_OID_REQUEST構造化バッファーの InformationBufferLength メンバーで指定された値が、指定されたOID_XXX コードの要件と一致しません。 情報バッファーが小さすぎる場合、NdisCoOidRequest が返されるときに、NDIS_OID_REQUEST の BytesNeeded メンバーには InformationBufferLength の正しい値が含まれます。
NDIS_STATUS_INVALID_DATA
指定されたNDIS_OID_REQUEST構造体の InformationBuffer で指定されたデータは、指定されたOID_XXX コードに対して無効です。
NDIS_STATUS_NOT_SUPPORTEDまたはNDIS_STATUS_NOT_RECOGNIZED
基になるドライバーは、要求された操作をサポートしていません。
NDIS_STATUS_RESOURCES
リソースが不足しているため、要求を満たできませんでした。 通常、この戻り値は、メモリの割り当て試行が失敗したことを示しますが、同じ要求が後で送信された場合、同じ理由で失敗するとは限りません。
NDIS_STATUS_NOT_ACCEPTED
基になるドライバーは、要求された操作 (通常はセット要求) を試行しましたが、操作は失敗しました。 たとえば、マルチキャスト アドレスを設定しようとすると、 NdisCoOidRequest がこの値を返す可能性があります。
NDIS_STATUS_CLOSINGまたはNDIS_STATUS_CLOSING_INDICATING
閉じる操作が進行中のため、基になるドライバーが要求された操作に失敗しました。
NDIS_STATUS_RESET_IN_PROGRESS
基になるミニポート ドライバーは、現在影響を受ける NIC をリセットしているため、現時点では要求を満たすことはできません。 呼び出し元の ProtocolStatusEx 関数は、リセットが進行中であることを示すために、NDIS_STATUS_RESET_STARTで 呼び出されました。または 呼び出されます。 この戻り値は、同じ要求 (後で送信された場合) が同じ理由で失敗することを必ずしも示すわけではありません。
NDIS_STATUS_FAILURE
通常、この値は、より具体的な NDIS_STATUS_XXX が原因で基になるドライバーが要求を失敗させた場合に返される非特定の既定値です。
NDIS_STATUS_REQUEST_ABORTED
ミニポート ドライバーは、要求の処理を停止しました。 たとえば、NDIS は基になるミニポート ドライバーの ミニポートResetEx または MiniportCancelOidRequest 関数。

注釈

CoNDIS クライアントとスタンドアロン呼び出しマネージャーは 、NdisCoOidRequest 関数を呼び出して、OID 要求を送信して、ターゲット ドライバーで OID 指定の情報を照会または設定できます。 ターゲット ドライバーには、別の CoNDIS プロトコル ドライバーまたは基になるドライバーを指定できます。

NdisCoOidRequest の呼び出し元は、指定された OID に関連付けられている情報バッファーを保持するのに十分なメモリを割り当てる必要があります。 呼び出し元は、NdisCoOidRequest を呼び出す前に、OidRequest でバッファーを割り当てて設定する必要もあります。 ターゲット ドライバーは要求の処理中に発生した IRQL で実行できるため、両方のバッファーを非ページ プールから割り当てる必要があります。

NdisCoOidRequest が返す一部のエラーは、次のような回復可能です。

  • NDIS_STATUS_INVALID_OID
  • NDIS_STATUS_INVALID_LENGTH
  • NDIS_STATUS_BUFFER_TOO_SHORT
  • NDIS_STATUS_INVALID_DATA
  • NDIS_STATUS_RESOURCES
  • NDIS_STATUS_RESET_IN_PROGRESS
つまり、ドライバーは OidRequest でパケットを適切に変更して、OID_XXX コードまたは InformationBuffer のバッファーのサイズまたは内容を修正し、要求パケットを NdisCoOidRequest に再送信できます。 ドライバーが NdisCoOidRequest に再送信すると、元の呼び出しでリセットが進行中であることが示された場合、またはリソース不足 (一時的な可能性があります) によってその要求が実行できなかった場合は、同じパケットが満たされる可能性があります。

NdisAfHandle パラメーターの値に応じて、クライアントとスタンドアロン呼び出しマネージャーは NdisCoOidRequest を呼び出して相互に通信するか、基になる接続指向ミニポート ドライバーと通信します。

ドライバーが NdisVcHandleNULL を渡す場合、要求は、要求がクライアント、呼び出しマネージャー、またはミニポート ドライバーに送信されるかどうかに関係なく、本質的にグローバルです。 たとえば、呼び出し元が NdisVcHandleNULL 以外の値を指定した場合、基になる接続指向ミニポート ドライバーに対するOID_GEN_CO_RCV_CRC_ERROR OID 要求は、特定の VC に対して発生した巡回冗長チェック (CRC) エラーの数を返します。 NdisVcHandleNULL を持つ同じ要求の場合、基になるミニポート ドライバーは、すべての VC で発生した CRC エラーの合計数を返します。

クライアントとスタンドアロンの呼び出しマネージャーは、接続指向ではないすべての OID に対して NdisOidRequest 関数を呼び出す必要があります。たとえば、プロトコル ドライバーが基になる NIC ドライバーにバインドした後、初期化中に一般的に発行される OID_GEN_SUPPORTED_LIST クエリで返される OID などです。

NdisCoOidRequest がNDIS_STATUS_PENDINGを返す場合、要求は非同期的に処理され、NDIS はドライバーの を呼び出します。要求が完了したときに ProtocolCoOidRequestComplete 関数。 NdisCoOidRequest が他の状態を返す場合、NdisCoOidRequest が返されるときに要求は完了し、NDIS は ProtocolCoOidRequestComplete を呼び出しません。

NdisCoOidRequest および NdisOidRequest で使用するように定義されている OID のセットの詳細については、「NDIS OID」を参照してください。

クライアントとスタンドアロン呼び出しマネージャー (プロトコル ドライバー) のみが NdisCoOidRequest を呼び出すことができます。 MCM は NdisMCmOidRequest 関数を呼び出して、クライアントと通信します。

要件

要件
サポートされている最小のクライアント NDIS 6.0 以降でサポートされています。
対象プラットフォーム デスクトップ
Header ndis.h (Ndis.h を含む)
Library Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 Irql_Connection_Function(ndis)

こちらもご覧ください

MiniportCancelOidRequest

MiniportResetEx

NDIS_OID_REQUEST

NdisClAddParty

NdisClMakeCall

NdisClOpenAddressFamilyEx

NdisCoCreateVc

NdisMCmOidRequest

NdisOidRequest

NdisOpenAdapterEx

OID_GEN_CO_RCV_CRC_ERROR

OID_GEN_SUPPORTED_LIST

ProtocolCmAddParty

ProtocolCmOpenAf

ProtocolCoCreateVc

ProtocolCoOidRequestComplete

ProtocolStatusEx