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
要傳回 NdkRequestCompletion 回呼函式的提供者內容值,該函式是在 RequestCompletion 參數中指定的。
pNdkLAM
緩衝區的指標,將保存包含配接器頁面陣列的 NDK_LOGICAL_ADDRESS_MAPPING 結構。 配接器頁面陣列會儲存在 AdapterPageArray 成員中,而 AdapterPageCount 成員包含配接器頁面元素的數目。
pLAMSize
輸入之 pNdkLAM 參數的緩衝區大小,或針對輸出寫入的實際位元組數目。
[out] pFBO
第一個字節位移 (FBO) 值會在此位置傳回。 FBO 是第一個配接器頁面中的起始位移。
傳回值
NdkBuildLam 函式會傳回下列其中一個 NTSTATUS 程式代碼。
傳回碼 | 描述 |
---|---|
|
作業已順利完成。 |
|
要求擱置中,當 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 |
目標平臺 | 窗戶 |
標頭 | ndkpi.h (包括 Ndkpi.h) |
IRQL | <=DISPATCH_LEVEL |