次の方法で共有


NdisMRegisterDmaChannel 関数 (ndis.h)

NdisMRegisterDmaChannel 関数は、下位 NIC または ISA バス マスター NIC での DMA 操作の初期化中にシステム DMA コントローラー チャネルを要求します。

構文

NDIS_STATUS NdisMRegisterDmaChannel(
  [out] PNDIS_HANDLE          MiniportDmaHandle,
  [in]  NDIS_HANDLE           MiniportAdapterHandle,
  [in]  UINT                  DmaChannel,
  [in]  BOOLEAN               Dma32BitAddresses,
  [in]  PNDIS_DMA_DESCRIPTION DmaDescription,
  [in]  ULONG                 MaximumLength
);

パラメーター

[out] MiniportDmaHandle

この関数が NdisMXxx システム DMA 関数への後続の呼び出しでミニポート ドライバーが使用するハンドルを返す呼び出し元から指定された変数へのポインター。

[in] MiniportAdapterHandle

ミニポート アダプターは、 への入力を処理します。 MiniportInitializeEx 関数。

[in] DmaChannel

無視されます。 DMA チャネル (存在する場合) を DmaDescription で設定します。

[in] Dma32BitAddresses

NIC に 32 のアドレス行がある場合は TRUE のブール値。 それ以外の場合は FALSE です

[in] DmaDescription

呼び出し元によって入力されたNDIS_DMA_DESCRIPTION構造体へのポインター。 この構造体は次のように定義されます。

typedef struct _NDIS_DMA_DESCRIPTION {
    BOOLEAN DemandMode;
    BOOLEAN AutoInitialize;
    BOOLEAN DmaChannelSpecified;
    DMA_WIDTH DmaWidth;
    DMA_SPEED DmaSpeed;
    ULONG DmaPort;
    ULONG DmaChannel;
} NDIS_DMA_DESCRIPTION, *PNDIS_DMA_DESCRIPTION;

ドライバーは、次のメンバーを入力する前に、この構造体を 0 で初期化する必要があります。

DemandMode

下位 NIC がシステム DMA コントローラーの要求モードを使用する場合は TRUE のブール値。 それ以外の場合は FALSE です

AutoInitialize

下位 NIC がシステム DMA コントローラーの自動初期化モードを使用する場合は TRUE のブール値。 それ以外の場合は FALSE です

DmaChannelSpecified

DMAChannel が NIC によって使用されるシステム DMA コントローラー チャネルのバス相対値に設定されている場合は TRUE のブール値。 それ以外の場合は FALSE です

DmaWidth

DMA 操作の転送幅( Width8BitsWidth16BitsWidth32Bits のいずれか)。

DmaSpeed

CompatibleTypeATypeB、または TypeC のいずれかとしての DMA 速度。

DmaPort

このメンバーは、サポートされなくなった MCA バスを参照します。 このメンバーは 0 である必要があります。

DmaChannel

NIC によって使用されるシステム DMA コントローラー チャネルのバス相対番号。

[in] MaximumLength

1 つの DMA 操作で NIC が転送できる最大バイト数。 NIC に無制限の転送容量がある場合は、このパラメーターを -1 に設定します。

戻り値

NdisMRegisterDmaChannel は 、次のいずれかの状態値を返すことができます。

リターン コード 説明
NDIS_STATUS_SUCCESS
NDIS は、呼び出し元の NIC のレジストリで指定された DMA チャネルを要求し、ミニポート ドライバーによる後続の DMA 操作に必要なリソースを設定します。
NDIS_STATUS_RESOURCE_CONFLICT
別のドライバーがそのデバイスのチャネルを既に要求している可能性があるため、レジストリ内の DMA チャネルを要求しようとしましたが失敗しました。 NdisMRegisterDmaChannel は 、これが発生した場合にエラーをログに記録します。
NDIS_STATUS_RESOURCES
NDIS では、このミニポート ドライバーによる DMA 操作をサポートするために必要なシステム リソースを割り当てませんでした。
NDIS_STATUS_FAILURE
バスの種類またはバス番号が範囲外であるか、ドライバーが NIC を ISA 以外の I/O バスのバス マスターとして宣言しました。

注釈

下位 DMA NIC のドライバーは、後続の DMA 操作のためにシステム リソースを予約し、レジストリでそれらを要求するために、その MiniportInitializeEx 関数から NdisMRegisterDmaChannel を呼び出す必要があります。

また、ISA バス マスター NIC のドライバーは、レジストリ内の NIC のシステム DMA コントローラー チャネルを要求するために、MiniportInitializeEx から NdisMRegisterDmaChannel を呼び出す必要があります。

MiniportInitializeEx は を呼び出す必要があります。 NdisMSetMiniportAttributes 関数は、 NdisMRegisterDmaChannel を呼び出す前に実行します。

MiniportInitializeEx は、レジストリから、または NdisMGetBusData 関数を呼び出すことによって、NdisMRegisterDmaChannel に渡されるバス相対値を取得しました。

このようなドライバーがデバイスに必要なシステム DMA リソースを割り当てることができない場合、 MiniportInitializeEx は、NIC に既に割り当てられているすべてのリソースを解放する必要があります。その後、その NIC の初期化に失敗します。

ドライバーが DMA チャネルを正常に登録した場合は、後で を呼び出す必要があります。DMA チャネルを登録解除するための NdisMDeregisterDmaChannel 関数。

要件

要件
サポートされている最小のクライアント Windows Vista の NDIS 6.0 および NDIS 5.1 ドライバー (「NdisMRegisterDmaChannel (NDIS 5.1)」を参照) でサポートされています。 Windows XP の NDIS 5.1 ドライバー (NdisMRegisterDmaChannel (NDIS 5.1) を参照) でサポートされています。
対象プラットフォーム ユニバーサル
Header ndis.h (Ndis.h を含む)
Library Ndis.lib
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 Irql_Miniport_Driver_Function(ndis)

こちらもご覧ください

MiniportInitializeEx

NdisMDeregisterDmaChannel

NdisMGetBusData

NdisMSetMiniportAttributes