windows 核心编程第五版 源代码 无法编译的问题
2010-06-19 17:45
381 查看
这段时间没事做,找了本windows 核心编程第五版 来看,下了源代码,编译,200多的编译错误。
上网找了下,都说装最新的SDK,当然,如果是家里的电脑,那安装就好了。如果是工作电脑最好就谨慎点。
装了SDK也不一定好使,有的哥们装了,原来的又编译不过了,都是路径的问题。
其实也不一定需要更新SDK,主要是认真看看问题,第五版是关联到VISTA,所以有些宏或函数就变成在之下的系统不能用了。
举个例子,APIHOOK的代码中有一段这样
void CAPIHook::FixupNewlyLoadedModule(HMODULE hmod, DWORD dwFlags) {
// If a new module is loaded, hook the hooked functions
if ((hmod != NULL) && // Do not hook our own module
(hmod != ModuleFromAddress(FixupNewlyLoadedModule)) &&
((dwFlags & LOAD_LIBRARY_AS_DATAFILE) == 0) &&
((dwFlags & LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE) == 0) &&
((dwFlags & LOAD_LIBRARY_AS_IMAGE_RESOURCE) == 0)
) {
for (CAPIHook* p = sm_pHead; p != NULL; p = p->m_pNext) {
if (p->m_pfnOrig != NULL) {
ReplaceIATEntryInAllMods(p->m_pszCalleeModName,
p->m_pfnOrig, p->m_pfnHook);
} else {
#ifdef _DEBUG
// We should never end up here
wchar_t szPathname[MAX_PATH];
GetModuleFileNameW(NULL, szPathname, _countof(szPathname));
wchar_t sz[1024];
StringCchPrintfW(sz, _countof(sz),
TEXT("[%4u - %s] impossible to find %S\r\n"),
GetCurrentProcessId(), szPathname, p->m_pszCalleeModName);
OutputDebugString(sz);
#endif
}
}
}
}
注意红色部分:LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE和LOAD_LIBRARY_AS_IMAGE_RESOURCE在Vista之下的系统根本没用,所以只要把代码((dwFlags & LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE) == 0) &&
((dwFlags & LOAD_LIBRARY_AS_IMAGE_RESOURCE) == 0)删除掉就能顺利编译了。
另外windows 核心编程第五版的随书代码,有些是需要Mfc库支持的,如果发现有的代码不行,就链接MFC试试。
上网找了下,都说装最新的SDK,当然,如果是家里的电脑,那安装就好了。如果是工作电脑最好就谨慎点。
装了SDK也不一定好使,有的哥们装了,原来的又编译不过了,都是路径的问题。
其实也不一定需要更新SDK,主要是认真看看问题,第五版是关联到VISTA,所以有些宏或函数就变成在之下的系统不能用了。
举个例子,APIHOOK的代码中有一段这样
void CAPIHook::FixupNewlyLoadedModule(HMODULE hmod, DWORD dwFlags) {
// If a new module is loaded, hook the hooked functions
if ((hmod != NULL) && // Do not hook our own module
(hmod != ModuleFromAddress(FixupNewlyLoadedModule)) &&
((dwFlags & LOAD_LIBRARY_AS_DATAFILE) == 0) &&
((dwFlags & LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE) == 0) &&
((dwFlags & LOAD_LIBRARY_AS_IMAGE_RESOURCE) == 0)
) {
for (CAPIHook* p = sm_pHead; p != NULL; p = p->m_pNext) {
if (p->m_pfnOrig != NULL) {
ReplaceIATEntryInAllMods(p->m_pszCalleeModName,
p->m_pfnOrig, p->m_pfnHook);
} else {
#ifdef _DEBUG
// We should never end up here
wchar_t szPathname[MAX_PATH];
GetModuleFileNameW(NULL, szPathname, _countof(szPathname));
wchar_t sz[1024];
StringCchPrintfW(sz, _countof(sz),
TEXT("[%4u - %s] impossible to find %S\r\n"),
GetCurrentProcessId(), szPathname, p->m_pszCalleeModName);
OutputDebugString(sz);
#endif
}
}
}
}
注意红色部分:LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE和LOAD_LIBRARY_AS_IMAGE_RESOURCE在Vista之下的系统根本没用,所以只要把代码((dwFlags & LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE) == 0) &&
((dwFlags & LOAD_LIBRARY_AS_IMAGE_RESOURCE) == 0)删除掉就能顺利编译了。
另外windows 核心编程第五版的随书代码,有些是需要Mfc库支持的,如果发现有的代码不行,就链接MFC试试。
相关文章推荐
- qt在windows下编译好的QT程序在其他没有安装QT的机器上会出现图标和图片无法正常显示的问题。
- Windows下根据源代码编译py module时遇到的若干问题
- windows游戏开发中一个关于Visual Studio的编译链接成功,输出窗口却显示线程已退出。无法运行项目的问题
- windows核心编程代码编译
- 无法编译出.sys文件 寒江孤钓<<windows 内核安全编程>> 学习笔记
- 使用RegOpenKeyEx 等windows注册函数时,编译无法解析问题
- 在windows下的qt5.7.1 的纯C或C++项目命令行中文乱码、无法编译等问题解决
- 【java】在windows dos下编译完成后,出现找不到或无法加载主类的问题
- cmake3.8X64编译opencv3.2出现opencv_ffmpeg、opencv_ffmpeg_64、ippicv_windows_20151201.zip无法下载问题解决方案
- cmake3.8X64编译opencv3.2出现opencv_ffmpeg、opencv_ffmpeg_64、ippicv_windows_20151201.zip无法下载问题解决方案
- ffmpeg库在windows下编译出现无法链接的问题的解决方法
- UNIX环境高级编程 源代码编译apue.h头文件的问题
- Windows下编译MICO源代码遇到的问题
- 解决android Launch2.2 源代码编译运行问题
- 在Ubuntu使用gcc编译的程序无法运行的问题。
- 基于visual c++之windows核心编程代码分析(21)获取和设置环境变量
- 关于用g++编译后运行时出现的问题:无法定位程序输入点__gxx_personality_v0
- Win8学习总结之"给定的 System.Uri 无法转换为 Windows.Foundation.Uri"问题
- Linux 环境中从源代码编译安装 ReText 问题与解决
- VS2015解决非Unicode编码包含中文字段无法编译的问题