NdisDirectOidRequest 関数 (ndis.h)

NdisDirectOidRequest 関数は、アダプターの機能または状態を照会したり、アダプターの状態を設定したりするために、基になるドライバーに直接 OID 要求を転送します。

構文

NDIS_STATUS NdisDirectOidRequest(
  [in] NDIS_HANDLE       NdisBindingHandle,
  [in] PNDIS_OID_REQUEST OidRequest
);

パラメーター

[in] NdisBindingHandle

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

[in] OidRequest

アダプターの 状態を照会 するか、アダプターの状態を設定するために、特定のOID_Xxx コードで要求される操作を指定するNDIS_OID_REQUEST構造体へのポインター。

戻り値

基になるドライバーは、NdisDirectOidRequest が返すNDIS_STATUS_XXX コードを決定しますが、通常は次のいずれかの値です。

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

注釈

NdisDirectOidRequest 関数は、一般的な OID 要求には使用できません。 一般的な OID 要求の場合は、代わりに NdisOidRequest 関数を使用します。 NdisDirectOidRequest は、NDIS が直接 OID インターフェイスでの使用をサポートする OID にのみ使用できます。 たとえば、次の OID を使用できます。

OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA OID_TCP_TASK_IPSEC_OFFLOAD_V2_DELETE_SA OID_TCP_TASK_IPSEC_OFFLOAD_V2_UPDATE_SA

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

NdisDirectOidRequest は、基になるドライバーに要求を転送するか、要求自体を処理します。 次の下位ドライバーが NDIS 中間ドライバーの場合、中間ドライバーは、上位レベルのドライバーが最初に送信した要求を完了する前に、独自の OID 固有の要求で NdisDirectOidRequest を呼び出すことができます。

NdisDirectOidRequest を呼び出すドライバーは、 を登録する必要があります。 ProtocolDirectOidRequestComplete 関数。

直接 OID 要求インターフェイスは、一般的な OID 要求インターフェイスに似ています。 一般的な要求の発行の詳細については、「 NdisOidRequest」を参照してください。

メモ Direct OID 要求は一般的にシリアル化されませんが、NDIS 自体は要求にNDIS_STATUS_PENDINGを設定し、後で完了するために要求をキューに入れる可能性があります。 たとえば、NDIS はペンを実行し、現在低電力状態にある選択的な中断ミニポートに送信された直接 OID 要求をキューに入れます。 基になるミニポートが同期的に要求を完了する場合でも、NDIS_STATUS_PENDING コードを処理するためのプロトコルとフィルターを準備する必要があります。
 

要件

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

こちらもご覧ください

NDIS_OID_REQUEST

NdisOidRequest

NdisOpenAdapterEx

OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA OID_TCP_TASK_IPSEC_OFFLOAD_V2_DELETE_SA OID_TCP_TASK_IPSEC_OFFLOAD_V2_UPDATE_SA ProtocolDirectOidRequestComplete

ProtocolStatusEx