DEP引起的DLL库函数调用失败
1????????? 什么是DEP(数据执行保护) 根据微软官方定义:数据执行保护 (DEP) 是一种有助于防止您的计算机免受病毒和其他安全威胁破坏的安全功能。有害的程序可能会通过试图运行(也称为“执行”)计算机内存中为 Windows 和其他已授权程序保留的代码来攻击 Windows。这些类型的攻击可能会损害您的程序和文件。 DEP 可以通过监视程序以确保它们安全使用计算机内存,帮助保护您的计算机。如果 DEP 注意到计算机上的某个程序使用的内存不正确,则它将关闭该程序并通知您。 2????????? DEP的设置界面 DEP被WIN2003及之后的系统引入,是系统性能选项的一部分。“在计算机属性”配置页面中的“高级系统设置项”的“性能选项”,打开后界面如下。默认系统是不为其他应用程序启用DEP的,当然如果您系统安装时不小心选择了第二个选项,则所有的应用程序均在DEP保护范围内。
? 在VS2010的VC链接器配置里,我们也可以发现数据执行保护项,默认是被选择的,这样您写的小程序也就被DEP保护了。 ? 3????????? DEP导致的不兼容问题现象 一般情况下,保护给人的感觉总是不错的,然而,就是这默认的DEP,在我调用第三方的DLL库时引发了莫名的错误,我的环境是操作系统Windows 2003 server版,编译环境VS2005,使用的是NI Spectral Measurements 2.0 CVI的库,在别的机器上运行都比较正常,唯独在一台新装的Win2003系统上死活不能运行。跟踪问题,发现总是在库函数调用时弹出错误,信息如下:
|