NdisRequest 関数 (ndis.h)

メモ NDIS 5。 x は非推奨となり、NDIS 6 に置き換えられます。 x があります。 新しい NDIS ドライバーの開発については、「 Windows Vista 以降のネットワーク ドライバー」を参照してください。 NDIS 5 の移植について説明します。 x ドライバーを NDIS 6 に設定します。 x については、「 NDIS 5.x ドライバーを NDIS 6.0 に移植する」を参照してください。

NdisRequest は、NIC の機能または状態のクエリを実行するか、NIC の状態を設定する要求を基になるドライバーに転送します。

構文

void NdisRequest(
  [out] PNDIS_STATUS  Status,
  [in]  NDIS_HANDLE   NdisBindingHandle,
  [in]  PNDIS_REQUEST NdisRequest
);

パラメーター

[out] Status

この関数から返されるときに設定される呼び出し元が指定した変数へのポインター。 基になるドライバーは、返されるNDIS_STATUS_XXX を決定しますが、通常は次のいずれかの値です。

  • NDIS_STATUS_SUCCESS
    要求された操作は正常に完了しました。

  • NDIS_STATUS_PENDING
    要求は非同期的に処理されており、呼び出し元の ProtocolRequestComplete 関数は完了すると呼び出されます。

  • NDIS_STATUS_INVALID_OID
    NdisRequest のNDIS_REQUEST構造化バッファーの Oid メンバーで指定されたOID_XXX コードが無効であるか、基になるドライバーによってサポートされていません。

  • NDIS_STATUS_INVALID_LENGTHまたはNDIS_STATUS_BUFFER_TOO_SHORT
    NdisRequest のNDIS_REQUEST構造化バッファーの InformationBufferLength メンバーで指定された値が、指定されたOID_XXX コードの要件と一致しません。 情報バッファーが小さすぎる場合、BytesNeeded メンバーには、NdisRequest から返されるときに InformationBufferLength の正しい値が含まれます。

  • NDIS_STATUS_INVALID_DATA
    指定されたNDIS_REQUEST構造体の InformationBuffer で指定されたデータは、指定されたOID_XXX コードに対して無効です。

  • NDIS_STATUS_NOT_SUPPORTEDまたはNDIS_STATUS_NOT_RECOGNIZED
    基になるドライバーは、要求された操作をサポートしていません。

  • NDIS_STATUS_RESOURCES
    リソース不足のため、要求を満たできませんでした。 通常、この戻り値は、メモリの割り当て試行が失敗したことを示しますが、同じ要求 (後で送信) が同じ理由で失敗するとは限りません。

  • NDIS_STATUS_NOT_ACCEPTED
    基になるドライバーは、要求された操作 (通常はセット) を NIC で試行しましたが、ネットカードによって失敗しました。 たとえば、マルチキャスト アドレスを多く設定しようとすると、この値が返される可能性があります。

  • NDIS_STATUS_CLOSINGまたはNDIS_STATUS_CLOSING_INDICATING
    閉じが進行中のため、基になるドライバーが要求された操作に失敗しました。

  • NDIS_STATUS_RESET_IN_PROGRESS
    基になる NIC ドライバーは、現在ネットカードをリセットしているため、現時点では要求を満たすことはできません。 呼び出し元の ProtocolStatus 関数は、リセットが進行中であることを示すために、NDIS_STATUS_RESET_STARTで 呼び出されました。または が呼び出されます。 この戻り値は、後で送信された同じ要求が同じ理由で失敗することを必ずしも示すわけではありません。

  • NDIS_STATUS_FAILURE
    通常、この値は非特定の既定値であり、より具体的なNDIS_STATUS_XXX が原因で基になるドライバーが要求を失敗させた場合に返されます。

[in] NdisBindingHandle

呼び出し元がバインドされている次の下位ドライバーのターゲット NIC または仮想アダプターを識別する NdisOpenAdapter によって返されるハンドルを指定します。

[in] NdisRequest

クエリまたはセットの特定のOID_ XXX コードで要求された操作を指定するバッファー構造へのポインター。

戻り値

なし

解説

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

中間 NDIS ドライバーの上に階層化された呼び出し元の 場合、NdisRequest は、独自の機能に関する情報を返す次の下位ドライバーに要求を転送するか、呼び出し元によって決定された方法で特定の機能を処理するようにドライバーに指示します。 次の下位ドライバーが NDIS 中間ドライバーの場合は、上位レベルのプロトコルによって最初に送信された要求を完了する前に、独自の OID 固有の要求で NdisRequest を呼び出すことができます。

Status で返される一部のエラーは、次のような回復可能です。

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

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

NDIS ライブラリは、基になるミニポート ドライバーのバインドを維持します。 特定の OID が、システムがフィルター ライブラリを提供するシステム定義のメディア型に関連付けられている場合、NDIS はバインド固有のクエリの情報を返すことができます。

一般的な OID とメディア固有の OID とその関連する情報バッファーの詳細については、「 NDIS オブジェクト識別子」を参照してください。

  • ターゲット プラットフォーム: ユニバーサル
  • バージョン: Windows Vista の NDIS 6.0 ドライバーではサポートされていません。 代わりに NdisOidRequestを使用してください。 Windows Vista および Windows XP の NDIS 5.1 ドライバーでサポートされています。

要件

要件
Header ndis.h (Ndis.h を含む)
Library Ndis.lib
IRQL IRQL <= DISPATCH_LEVEL

こちらもご覧ください