MmCopyMemory 函式 (ntddk.h)
MmCopyMemory 例程會將指定的虛擬或物理記憶體範圍複製到呼叫端提供的緩衝區。
語法
NTSTATUS MmCopyMemory(
[in] PVOID TargetAddress,
[in] MM_COPY_ADDRESS SourceAddress,
[in] SIZE_T NumberOfBytes,
[in] ULONG Flags,
[out] PSIZE_T NumberOfBytesTransferred
);
參數
[in] TargetAddress
呼叫端提供的緩衝區指標。 這個緩衝區必須位於不可分頁的記憶體中。
[in] SourceAddress
以傳值方式傳遞 的MM_COPY_ADDRESS 結構,其中包含要複製到 TargetAddress 所指向之緩衝區之數據的虛擬位址或實體位址。
[in] NumberOfBytes
要從 SourceAddress 複製到 TargetAddress 的位元元組數目。
[in] Flags
指出 SourceAddress 是虛擬位址還是實體位址的旗標。 為此參數定義下列旗標位。
旗標位 | Description |
---|---|
MM_COPY_MEMORY_PHYSICAL | SourceAddress 會指定實體位址。 |
MM_COPY_MEMORY_VIRTUAL | SourceAddress 會指定虛擬位址。 |
這兩個旗標位互斥。 呼叫端必須設定其中一個或另一個,但不能同時設定兩者。
[out] NumberOfBytesTransferred
例程將成功從 SourceAddress 位置複製到 TargetAddress 位置緩衝區之位元組數目的位置指標。
傳回值
如果已成功複製整個範圍,MmCopyMemory 會傳回STATUS_SUCCESS。 否則,會傳回錯誤狀態,而且呼叫端必須檢查 NumberOfBytesTransferred 參數所指向的輸出值,以判斷實際複製的位元組數目。
備註
內核模式驅動程式可以呼叫此例程,安全地存取任意實體或虛擬位址。
如果已設定MM_COPY_MEMORY_PHYSICAL旗標, SourceAddress 應該指向控制操作系統的一般記憶體。 MmCopyMemory 會針對參考 I/O 空間的實體位址傳回錯誤狀態代碼,其中包含記憶體對應裝置和韌體數據表。 若要存取 I/O 空間中的物理記憶體,驅動程式可以使用 MmMapIoSpace 例程。
如果已設定MM_COPY_MEMORY_VIRTUAL旗標, SourceAddress 可以指向系統地址空間中的緩衝區,或目前進程使用者位址空間中的緩衝區。 如果呼叫端未控制包含指定來源位址的配置存留期, MmCopyMemory 可能會失敗或可能會傳回不一致的數據,但不會造成系統當機,即使系統地址無效,也會直接參考時觸發錯誤檢查。 MmCopyMemory 會針對參考 I/O 空間的系統虛擬位址傳回錯誤狀態代碼。
如果 SourceAddress 所指定虛擬位址的記憶體未駐留, MmCopyMemory 會嘗試讓它成為駐留位置。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 從 Windows 8.1 開始提供。 |
目標平台 | Universal |
標頭 | ntddk.h |
程式庫 | Ntoskrnl.lib |
IRQL | <= APC_LEVEL |