第二部分、TrueCrypt Mount加载虚拟磁盘
在创建完加密卷之后,怎么使用虚拟磁盘呢?这个时候需要加载虚拟磁盘,加载完虚拟磁盘后,就会在磁盘分区里多出一个分区,比如在我的电脑里可以看到一个新的本地磁盘 (L:)。那么,TrueCrypt里具体是怎么实现的?首先需要选择我们在上一步创建的加密卷,选择一个需要加载的分区,这其实就是在还没用到的分区卷标里选择一个,之后点击载入载入即可,这个时候就会找到加密卷进行加载,这时会需要用户输入创建加密卷时的设定的密码,加载成功后,就能看到新虚拟出来的磁盘了。
因此,TrueCrypt另一个核心函数加载虚拟磁盘函数应该是接受加密卷、磁盘分区、用户密码等参数进行加载,该函数在TrueCrypt的原型是
int MountVolume (HWND hwndDlg, int driveNo, char *volumePath, Password *password, BOOL cachePassword, BOOL sharedAccess, MountOptions *mountOptions, BOOL quiet, BOOL bReportWrongPassword )
下面我们来看下每个参数具体的含义
参数 类型 含义 示例 hwndDlg HWND 传入的窗口句柄 NULL driveNo int 加载的磁盘分区序号 8 volumePath char * 用户选择的加密卷文件 C://1.txt password Password 用户输入的密码 123456 cachePassword BOOL 是否采用缓存密码 FALSE sharedAccess BOOL FALSE mountOptions MountOptions 加载选项 quiet BOOL FALSE bReportWrongPassword BOOL 是否报告错误的密码 TRUE
MountVolume函数返回结果为
-1 用户终止加载
0 加载失败
1 加载成功
2 在共享模式加载成功
下面我们来看具体的实例
int Mount(char* szFile, char* szPassword, int nDriveNo, HWND hwndDlg) { int nDosDriveNo; char szFileName[TC_MAX_PATH+1]; /* The file selected by the user */ Password VolumePassword; /* Password used for mounting volumes */ BOOL bCacheInDriver = FALSE; /* Cache any passwords we see */ BOOL bForceMount = FALSE; /* Mount volume even if host file/device already in use */ MountOptions mountOptions; int mounted = 0; //nDosDriveNo = 8; nDosDriveNo = nDriveNo; //strcpy(szFileName, "C://1.txt"); //szFileName[8] = 0; strcpy(szFileName, szFile); szFileName[strlen(szFile)] = 0; bCacheInDriver = FALSE; bForceMount = FALSE; //strcpy(VolumePassword.Text, "123456"); strcpy(VolumePassword.Text, szPassword); VolumePassword.Length = strlen (VolumePassword.Text); mountOptions.PersistentVolume = 0; mountOptions.PreserveTimestamp = 1; strcpy(mountOptions.ProtectedHidVolPassword.Text, ""); mountOptions.ProtectedHidVolPassword.Length = 0; mountOptions.ProtectHiddenVolume = 0; mountOptions.ReadOnly = 0; mountOptions.Removable = 0; mountOptions.SystemVolume = 0; mounted = MountVolume (hwndDlg, nDosDriveNo, szFileName, &VolumePassword, bCacheInDriver, bForceMount, &mountOptions, FALSE, TRUE); if(mounted == 1) return 1; else return 0; return 1; }
成功虚拟磁盘后,即会弹出虚拟出的磁盘,可以在虚拟磁盘里创建文件,在虚拟磁盘里的文件都会加密到用户指定的加密卷文件中,任何人想要看到虚拟磁盘里的文件,需要加载该虚拟磁盘并正确输入密码。