共用方式為


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

另請參閱

MM_COPY_ADDRESS

mmMapIoSpace