由此引起任何法律问题,本人概不负责。
NT4代码相对比较全,可以编译出绝大部分系统核心文件,2000代码基本上只能看,不能编译,因为缺失了太多的头文件。
这篇文章主要讨论代码的编译环境搭建。下面就介绍XP系统下编译环境的搭建,在这你需要准备好VC6.0,NT4DDK以及NT4的源代码压缩包。
1. 安装VC6.0
2. 由于在XP和2003下没办法安装NT4 DDK,只好在另外一台WIN2K的机器(可以是虚拟机)上安装, 选自定义安装,仅安装库和头文件。假定安装到c:\ddk。
3. 把上一步中的c:\ddk目录整个拷到XP系统的d:\下,这样就类似于把NT4 DDK安装到XP系统下的d:\ddk中。
4. 把nt4源代码解压到d:\nt下,里面应包含private和public两个目录。
5. 在d:\ddk目录下创建buildchk.bat文件,其内容是:
cmd.exe /k D:\DDK\bin\setenv.bat D:\DDK checked
在d:\ddk目录下创建buildfre.bat文件,其内容是:
cmd.exe /k D:\DDK\bin\setenv.bat D:\DDK free
6. 拷贝D:\nt\public\sdk\lib\coffbase.txt到D:\DDK\lib\i386\free目录。
7. 点击d:\ddk\buildfre.bat,切换到D:\nt\private\sdktools目录,尽可能多的编译其中的文件,并把编好的文件拷贝到D:\nt\public\tools。其中至少应包括chmode.exe ech.exe gensrv.exe hextract.exe hsplist.exe listmung.exe masm386.exe strcto.exe touch.exe wcshdr.exe ws2hdr.exe。如果在编译过程中碰到类似“link() : error LNK1104: cannot open file "obj\i386\free\structo.exe"”的错误,手动在其i386目录下创建free目录,再重新编译。
8. 在d:\nt目录下创建ntos.bat文件,其内容是:
set CPUTYPE=I386
set USE_PDB=1
set NTDEBUG=ntsd
set NTDEBUGTYPE=windbg
set BASEDIR=\nt
set _NTDRIVE=d:
set _NTROOT=\nt
set NT_UP=1
rem set C_DEFINES=%C_DEFINES% -D_UNICODE -DUNICODE
path d:\nt\public\tools;%PATH%
9. 修改d:\ddk\inc下的MAKEFILE.DEF文件,其中原来的92-101行更改为:
#modified by David
SDK_INC_PATH = D:\nt\public\sdk\inc
CRT_INC_PATH = D:\nt\public\sdk\inc\crt
OAK_INC_PATH = D:\nt\public\oak\inc
#SDK_LIB_PATH = $(BASEDIR)\lib\*\$(DDKBUILDENV)
#DDK_LIB_PATH = $(BASEDIR)\lib\*\$(DDKBUILDENV)
#CRT_LIB_PATH = $(BASEDIR)\lib\*\$(DDKBUILDENV)
#modified by David
SDK_LIB_PATH = D:\nt\public\sdk\lib\*
DDK_LIB_PATH = D:\nt\public\sdk\lib\*
CRT_LIB_PATH = D:\nt\public\sdk\lib\*
USE_PDB=1
#BROWSER_INFO=1
BUILD_OPTIONS=fe
LINKER_FLAGS=$(LINKER_FLAGS) $(SDK_LIB_PATH)\exsup.lib
MASTER_VERSION_FILE = $(BASEDIR)\inc\ntverp.h
#modified by David
#COFFBASE_TXT_FILE = $(BASEDIR)\lib\*\$(DDKBUILDENV)\coffbase.txt
COFFBASE_TXT_FILE = $(BASEDIR)\public\sdk\lib\coffbase.txt
10. 如果你安装NT4DDK的WIN2K系统不是英文环境,修改D:\ddk\bin下的SETENV.BAT文件,其中原来的95行更改为:
set LANGUAGE=USA
原来的109行更改为:
set LANGUAGE=USA
11. 修改D:\nt\public\sdk\inc下的ntdbg.h文件,其中原来的213-221行更改为:
//modified by David
/*typedef enum _DBGUI_APINUMBER {
DbgUiWaitStateChangeApi,
DbgUiContinueApi,
DbgUiMaxI
}
CsrGetProcessLuid(
HANDLE ProcessHandle,
PLUID LuidProcess
);*/
//added by David
#define PCSR_API_ROUTINE ULONG
#define PCSR_1P_API_ROUTINE ULONG
#define PCSR_SERVER_CONNECT_ROUTINE ULONG
#define PCSR_SERVER_DISCONNECT_ROUTINE ULONG
#define PCSR_SERVER_ADDTHREAD_ROUTINE ULONG
#define PCSR_SERVER_DELETETHREAD_ROUTINE ULONG
#define PCSR_SERVER_INITTHREAD_ROUTINE ULONG
#define PCSR_SERVER_EXCEPTION_ROUTINE ULONG
#define PCSR_SERVER_HARDERROR_ROUTINE ULONG
#define PCSR_SERVER_ADDPROCESS_ROUTINE ULONG
#define PCSR_SERVER_SHUTDOWNPROCESS_ROUTINE ULONG
#define PCSR_API_DISPATCH_ROUTINE ULONG
原来的262行后插入:
//added by David
#define NTCSRAPI
#define PCSR_THREAD ULONG
原来的276行后插入:
//added by David
#define PCSR_NT_SESSION ULONG
原来的298行后插入:
//added by David
#define PCSR_PROCESS ULONG
原来的313行后插入:
//modified by David
#define PDBGSS_DBGKM_APIMSG_FILTER ULONG
原来的319-320行更改为:
OUT PCSR_PROCESS *Process,
IN ULONG NTCSoutine OPTIONAL,
原来的337行后插入:
//added by David
#define PDBGUI_WAIT_STATE_CHANGE ULONG