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 是虛擬位址還是實體位址的旗標。 此參數定義了下列旗標位。
旗標位 | 描述 |
---|---|
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 開始提供。 |
目標平臺 | 普遍 |
標頭 | ntddk.h |
連結庫 | Ntoskrnl.lib |
IRQL | <= APC_LEVEL |