代码之家  ›  专栏  ›  技术社区  ›  Oorang

RTLCopyMemory在Vista中工作吗?

  •  2
  • Oorang  · 技术社区  · 16 年前

    我注意到RTL 记忆似乎很好。但是当我尝试使用RTL时 复制

    Private Declare Sub CopyMem Lib "kernel32" Alias "RtlCopyMemory" ( _
        ByVal dest As Long, _
        ByVal source As Long, _
        ByVal bytLen As Long)
    
    3 回复  |  直到 14 年前
        1
  •  5
  •   Aaron Klotz    16 年前

    RtlCopyMemory provided inline . 定义见 winnt.h memcpy . 这意味着它不包含在Win32 DLL中,而是C运行时库的一部分。你可以尝试导入 memcpy c:\windows\system32\msvcrt.dll .

        2
  •  3
  •   MarkJ    16 年前

    为什么不直接使用 RtlMoveMemory RtlCopyMemory 除了它以不同的方式处理重叠内存之外。

    布鲁斯·麦金尼 pioneered RtlMoveMemory的使用已经超过10年了 standard 用于VB6内存复制。

        3
  •  1
  •   GiM    15 年前

    我知道这是一个老问题,但我有同样的问题,所以我想我可以回答。

    kernel32.dll中的RtlCopyMemory应该是 Export Forward 进入ntdll, missed that one 在x64版本的Vista上(不知道它在x86上如何) (见下文)。

    编辑:我指的方法不是导出的,而是通过符号在ntdll中显示为

    EDIT2:为了确定我检查了一些东西,这里是总结:

    • RtlCopyMemory和RTLCopyMemoryOnTemporal都是从x64 Vista(普通、SP1、SP2)中的ntdll.dll导出的
    • x64 Vista的内核32.dll中有RtlCopyMemory的导出转发
    • x86 Vista的ntdll.dll中的RTLCopyMemoryOnTemporal

    另外,我对x64和x86的看法是错误的,因为我正在编译x86应用程序,并在x64上运行它(WOW模式), 因此,它使用了32位版本的内核32、ntdll,而不是x64。