1 本文对象
如果您对TrueCrypt充满兴趣并想在此基础上进行个性化开发;
如果您对TrueCrypt的编译过程还不太了解;
如果您当前还在使用VS2005集成开发环境,并期望在其中对TrueCrypt进行编译。
2 TrueCrypt介绍
TrueCrypt是一款开源的磁盘加密软件,支持从文件虚拟磁盘,对整个分区进行加密,以及对整个硬盘(包括系统盘)进行加密。
TrueCrypt中包含了16位的boot程序,32位和64位的磁盘(/过滤)驱动程序,以及UI界面程序。TrueCrypt在Visual Studio 2008 IDE中进行开发,因此必须经过的转换才能在Visual Studio 2005中进行编译。
3 编译平台
操作系统:Windows XP Professional SP3 32bit Platform
硬件平台:Intel Core 2 Duo CPU
4 准备工作
4.1 Microsoft Visual Studio 2005 IDE
4.2 Microsoft Windows Driver Kit 6001.18002
下载地址:http://www.microsoft.com/whdc/DevTools/WDK/WDKpkg.mspx (免费)
注:这个地址保存的是最新的WDK版本,因此可能和本文所述版本不吻合
4.3 Microsoft Visual C++ 1.5/1.52
下载地址:(当前无)
4.4 gzip 1.2.4 win32以上版本
下载地址:http://www.gzip.org (免费)
4.5 nasm version 2.07 win32 以上版本
下载地址:http://www.nasm.us/pub/nasm/releasebuilds/2.07/win32/nasm-2.07-win32.zip (免费)
4.6 yasm 0.8.0 win32 version以上版本
下载地址:http://www.tortall.net/projects/yasm/wiki/Download (免费)
4.7 TrueCrypt 6.0a Source Code Package
下载地址:http://www.truecrypt.org/downloads2 (免费)
注:这个地址保存当前最新的TrueCrypt源码版本,因此可能和文本所述版本不吻合
4.8 PKCS11_INC header Package
下载地址:http://svn.openvpn.net/projects/openvpn/test/time/openvpn/pkcs11-headers/ (免费)
4.9 Winheader.h文件(由于Visual Studio 2005中不包含该文件)
下载地址:该文件位于Visual Studio 2008中,其中代码如下:
#ifndef TC_WIN_HEADER_H
#define TC_WIN_HEADER_H
//structure and definition need by VS2005 on WINXP.
// New WINERROR.H and winioctl.h files contain the below structs and definitions
//#include <WINERROR.H>
//#include <winioctl.h>
#define ERROR_BAD_CLUSTERS 6849L
#define FSCTL_SHRINK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) // SHRINK_VOLUME_INFORMATION
typedef enum _SHRINK_VOLUME_REQUEST_TYPES
{
ShrinkPrepare = 1,
ShrinkCommit,
ShrinkAbort
} SHRINK_VOLUME_REQUEST_TYPES, *PSHRINK_VOLUME_REQUEST_TYPES;
typedef struct _SHRINK_VOLUME_INFORMATION {
SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType;
DWORDLONG Flags;
LONGLONG NewNumberOfSectors;
}SHRINK_VOLUME_INFORMATION, *PSHRINK_VOLUME_INFORMATION;
typedef struct tagBIND_OPTS3 {
DWORD cbStruct;
DWORD grfFlags;
DWORD grfMode;
DWORD dwTickCountDeadline;
DWORD dwTrackFlags;
DWORD dwClassContext;
LCID locale;
COSERVERINFO *pServerInfo;
HWND hwnd;
}BIND_OPTS3, *LPBIND_OPTS3;
//END
#endif // TC_WIN_OTHER_H
5 编译环境配置
5.1 安装4.1,假设到C:/Program Files/Microsoft Visual Studio 8
5.2 安装4.2,假设到C盘根目录,C:/WinDDK
5.3 设置环境变量WINDDK_ROOT = C:/WinDDK
5.4 安装4.3,假设到C盘根目录,C:/MSVC
5.5 设置环境变量MSVC16_ROOT = C:/MSVC
5.6 重新启动计算机,使环境变量生效
5.7 将4.4得到的gzip.exe拷贝至系统目录下,假设到C:/Windows/System32
5.8 将4.5得到的nasm.exe拷贝至系统目录下,假设到C:/Windows/System32
5.9 将4.6得到的yasm.exe拷贝至系统目录下,假设到C:/Windows/System32
5.10 解压4.7得到的TrueCrypt源代码包,假设解压到TrueCrypt6.0aSource文件夹
5.11 确保得到的PKCS11_INC文件夹中有三个文件
5.12 将得到的WinHeader.H文件拷贝至PKCS11_INC文件夹中
5.13 将得到的PKCS11_INC文件夹拷贝至./TrueCrypt6.0aSource/目录下
5.14 将./TrueCrypt6.0aSource/目录下的Truecrypt.sln用文本编辑器打开,修改其中的 Format Version 10.00为Format Version 9.00
5.15 将./TrueCrypt 6.0aSource/Boot/Windows/目录下的Boot.vcproj用文本编辑器打开,修改其中的Version="9.00"为Version="8.00",类似的,按此规则分别修改Crypto, Driver, Mount, Format, Setup目录下的.vcproj文件
5.16 双击TrueCrypt.sln启动TrueCrypt工作区,在Format工程和Mount工程中包含PKCS11_INC所在路径,具体设置方法为,鼠标右键Format/Mount工程->属性->配置属性->C/C++->General,在Additional Include Directories中输入../PKCS11_INC
5.17 在./TrueCrypt6.0aSource/Common/Dlgcode.c和./TrueCrypt6.0aSource/Common/ BaseCom.cpp文件中包含WinHeader.h
5.18 在编译Driver模块时,应将BuildDriver.cmd文件中TC_WINDDK_BUILD的值修改为WDK对应的版本号,即C:/WinDDK目录下的文件夹名