NDK_SGE 結構 (ndkpi.h)

NDK_SGE 結構會指定 NDK 工作要求的本機緩衝區。

語法

typedef struct _NDK_SGE {
  union {
    PVOID               VirtualAddress;
    NDK_LOGICAL_ADDRESS LogicalAddress;
  };
  ULONG  Length;
  UINT32 MemoryRegionToken;
} NDK_SGE;

成員

VirtualAddress

虛擬位址。

LogicalAddress

邏輯位址。

Length

緩衝區的長度,以位元組為單位。

MemoryRegionToken

記憶體區域令牌。 當 MemoryRegionToken 設定為 NdkGetPrivilegedMemoryRegionToken (NDK_FN_GET_PRIVILEGED_MEMORY_REGION_TOKEN) 所傳回的令牌時, NDK_SGE 必須包含 LogicalAddress。 當 MemoryRegionToken 不等於 NdkGetPrivilegedMemoryRegionToken 所傳回的令牌時, NDK_SGE 結構必須包含 VirtualAddress。 當 NDK_SGE 結構用於具有 NDK_OP_FLAG_INLINE 旗標的工作要求時, MemoryRegionToken 可能無效。 如需 MemoryRegionToken 的詳細資訊,請參閱一節。

備註

NDK_SGE 結構會指定傳送、接收、讀取和寫入工作要求的本機緩衝區。

MemoryRegionToken 成員設定為 NdkGetPrivilegedMemoryRegionToken (NDK_FN_GET_PRIVILEGED_MEMORY_REGION_TOKEN) 傳回的令牌時, NDK_SGE 必須包含 NdkBuildLam ( (NDK_FN_BUILD_LAM) 函式具有 NDK_LOGICAL_ADDRESS_MAPPING 結構的邏輯位址。 請注意,NDK_LOGICAL_ADDRESS_MAPPINGAdapterPageArray 成員中的連續專案不一定是配接器邏輯位址空間中的連續頁面。 因此,NDK 取用者可能會使用多個 SCE 來涵蓋配接器頁面陣列中的所有頁面。

MemoryRegionToken 成員中的令牌不等於 NdkGetPrivilegedMemoryRegionToken 所傳回的令牌時, NDK_SGE 結構必須包含落在先前註冊記憶體區域的虛擬位址範圍內。

NDK_SGE 結構用於具有 NDK_OP_FLAG_INLINE 旗標的工作要求中時, MemoryRegionToken 中的令牌可能無效,因此 NDK 提供者必須忽略它。 指定NDK_OP_FLAG_INLINE旗標時,任何傳遞至工作要求函式之NDK_SGE結構的 VirtualAddress 成員都必須指向 NDK 提供者可存取的緩衝區,該緩衝區必須小於或等於DISPATCH_LEVEL,也就是說,緩衝區必須保證會駐留在物理記憶體中,直到工作要求函式傳回為止。 在單一呼叫中傳遞至提供者的內嵌數據大小總計不能超過在建立 QP) (佇列配對時所指定的 InlineDataSize 參數中的值。

規格需求

需求
最低支援的用戶端 NDIS 6.30 和更新版本中不支援,不支援。
最低支援的伺服器 Windows Server 2012
標頭 ndkpi.h (包含 Ndkpi.h)

另請參閱

NDKPI 物件存留期需求

NDK_FN_BUILD_LAM

NDK_FN_GET_PRIVILEGED_MEMORY_REGION_TOKEN

NDK_FN_READ

NDK_FN_RECEIVE

NDK_FN_SEND

NDK_FN_SRQ_RECEIVE

NDK_FN_WRITE

NDK_LOGICAL_ADDRESS_MAPPING