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

为什么“[DllImport]”的入口点为“RtlSecureZeroMemory”时会失败,即使它是一个有很好文档记录的入口点?

  •  0
  • John  · 技术社区  · 7 年前

    SecureZeroMemory ,使用下面的代码失败,错误为 System.EntryPointNotFoundException -尽管有很好的记录 here, on PInvoke ,和 here, on SO . 在目标.NET Framework 4.7.2上运行完全正常的Windows 10 Pro。

            /// <summary>
            /// A kernel32 function that destroys all values in a block of memory
            /// </summary>
            /// <param name="destination">The pointer to the start of the block to be zeroed</param>
            /// <param name="length">The number of bytes to zero</param>
            /// <returns></returns>
            [DllImport("kernel32.dll", CharSet = CharSet.Auto, EntryPoint = "RtlSecureZeroMemory")]
            public static extern void SecureZeroMemory(IntPtr destination, IntPtr length);
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   David Heffernan    7 年前

    这个函数是文档化的,但是您包含的两个链接都不是文档。要理解发生了什么,您应该从阅读实际文档开始,这里是: https://msdn.microsoft.com/en-us/library/windows/desktop/aa366877(v=vs.85).aspx

    此函数定义为 函数(参见WinBase.h)。实施 RTLSecureZero内存 内联提供,可以在任何版本的Windows上使用(请参阅WinNT.h.)

    “提供内联”的意思是函数在头文件中定义,而不是由任何系统DLL导出。这意味着p/invoke不能调用它。

    推荐文章