NDK_FN_BUILD_LAM回呼函式 (ndkpi.h)
NdkBuildLam (NDK_FN_BUILD_LAM) 函式會從 NDK 提供者取得幾乎連續記憶體區域的 LAM) 配接器邏輯位址 (對應。
語法
NDK_FN_BUILD_LAM NdkFnBuildLam;
NTSTATUS NdkFnBuildLam(
[in] NDK_ADAPTER *pNdkAdapter,
[in] MDL *Mdl,
[in] SIZE_T Length,
[in] NDK_FN_REQUEST_COMPLETION RequestCompletion,
[in, optional] PVOID RequestContext,
NDK_LOGICAL_ADDRESS_MAPPING *pNdkLAM,
ULONG *pLAMSize,
[out] ULONG *pFBO
)
{...}
參數
[in] pNdkAdapter
NDK 配接器物件的指標 (NDK_ADAPTER) 。
[in] Mdl
記憶體描述元清單 (MDL) 或 MDL 鏈結。 從起始虛擬位址到 Length 參數中位元組數目的 MDL 鏈結部分,必須代表幾乎連續的記憶體區域。
[in] Length
要從第一個 MDL 虛擬地址開始對應的位元元組數目。 您可以使用 MmGetMdlVirtualAddress 宏來取得 MDL 虛擬位址。 長度 不得超過 MDL 鏈結所代表的位元組總數。
[in] RequestCompletion
NdkRequestCompletion (NDK_FN_REQUEST_COMPLETION) 回呼函式的指標。
[in, optional] RequestContext
提供者要傳回至 RequestCompletion 參數中指定的 NdkRequestCompletion 回呼函式的內容值。
pNdkLAM
緩衝區的指標,將保存包含配接器頁面陣列 的NDK_LOGICAL_ADDRESS_MAPPING 結構。 配接器頁面陣列會儲存在 AdapterPageArray 成員中,而 AdapterPageCount 成員包含配接器頁面元素的數目。
pLAMSize
輸入 之 pNdkLAM 參數的緩衝區大小,或針對輸出寫入的實際位元組數目。
[out] pFBO
此位置會傳回第一個字節位移 (FBO) 值。 FBO 是第一個配接器頁面中的起始位移。
傳回值
NdkBuildLam 函式會傳回下列其中一個NTSTATUS代碼。
傳回碼 | Description |
---|---|
|
作業已成功完成。 |
|
要求擱置中,當 LAM 建置作業完成時,將會呼叫 在 RequestCompletion 參數中指定的函式 (NDK_FN_REQUEST_COMPLETION) 。 |
|
從起始虛擬位址到 Length 參數中指定的位元元組數目,MDL 鏈結的部分並不代表幾乎連續的記憶體區域。 |
|
要求失敗,因為資源不足。
重要 要求可以透過此狀態代碼以異步方式內嵌和失敗。
|
|
*pLAMSize 參數所指示的緩衝區大小太小,無法保存 LAM。 在此情況下, *pLAMSize 的值會以所需的緩衝區大小更新。 |
|
發生錯誤。 |
備註
從起始虛擬位址到 Length 參數中指定的位元元組數目的 MDL 鏈結部分,必須代表幾乎連續的記憶體區域。 否則,NDK 提供者必須失敗要求。 NDK 取用者負責確保 MDL 鏈結已鎖定。 也就是說,MDL 變更的頁面會釘選在實體記憶體中。
NDK 取用者可以呼叫 NdkGetPrivilegedMemoryRegionToken (NDK_FN_GET_PRIVILEGED_MEMORY_REGION_TOKEN) 函式,以從 NDK 提供者取得特殊許可權的記憶體區域令牌。
NDK 提供者傳回的所有配接器頁面長度都必須 PAGE_SIZE位元組, 其中 PAGE_SIZE 是主機平臺所支援的記憶體頁面大小,如 wdm.h 中所定義。
提供者必須將 MmGetMdlVirtualAddress 宏傳回的虛擬位址值視為要對應記憶體區域開頭的索引。 提供者不得使用虛擬位址值作為讀取或寫入緩衝區內容的有效虛擬位址。
如果提供者在處理 NdkBuildLam 要求時發生錯誤,提供者必須釋放它到目前為止內部建置的任何部分對應,才能完成失敗的要求。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 不支援,NDIS 6.30 和更新版本中支援。 |
最低支援的伺服器 | Windows Server 2012 |
目標平台 | Windows |
標頭 | ndkpi.h (包括 Ndkpi.h) |
IRQL | <=DISPATCH_LEVEL |