TrueCrypt原理与系统开发(2):TrueCrypt Mount加载虚拟磁盘

第二部分、TrueCrypt Mount加载虚拟磁盘

      在创建完加密卷之后,怎么使用虚拟磁盘呢?这个时候需要加载虚拟磁盘,加载完虚拟磁盘后,就会在磁盘分区里多出一个分区,比如在我的电脑里可以看到一个新的本地磁盘 (L:)。那么,TrueCrypt里具体是怎么实现的?首先需要选择我们在上一步创建的加密卷,选择一个需要加载的分区,这其实就是在还没用到的分区卷标里选择一个,之后点击载入载入即可,这个时候就会找到加密卷进行加载,这时会需要用户输入创建加密卷时的设定的密码,加载成功后,就能看到新虚拟出来的磁盘了。

      因此,TrueCrypt另一个核心函数加载虚拟磁盘函数应该是接受加密卷、磁盘分区、用户密码等参数进行加载,该函数在TrueCrypt的原型是

 

[cpp:nogutter]  view plain copy
  1. int MountVolume (HWND hwndDlg,    
  2.                  int driveNo,    
  3.                  char *volumePath,    
  4.                  Password *password,    
  5.                  BOOL cachePassword,    
  6.                  BOOL sharedAccess,    
  7.                  MountOptions *mountOptions,    
  8.                  BOOL quiet,    
  9.                  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   在共享模式加载成功

      下面我们来看具体的实例

 

[cpp:nogutter]  view plain copy
  1. int Mount(char* szFile, char* szPassword, int nDriveNo, HWND hwndDlg)    
  2. {    
  3.     int nDosDriveNo;    
  4.     char szFileName[TC_MAX_PATH+1]; /* The file selected by the user */    
  5.     Password VolumePassword;            /* Password used for mounting volumes */    
  6.     BOOL bCacheInDriver = FALSE;        /* Cache any passwords we see */    
  7.     BOOL bForceMount = FALSE;           /* Mount volume even if host file/device already in use */    
  8.     MountOptions mountOptions;    
  9.     int mounted = 0;    
  10.     //nDosDriveNo = 8;    
  11.     nDosDriveNo = nDriveNo;    
  12.     //strcpy(szFileName, "C://1.txt");    
  13.     //szFileName[8] = 0;    
  14.     strcpy(szFileName, szFile);    
  15.     szFileName[strlen(szFile)] = 0;    
  16.     bCacheInDriver = FALSE;    
  17.     bForceMount = FALSE;    
  18.     //strcpy(VolumePassword.Text, "123456");    
  19.     strcpy(VolumePassword.Text, szPassword);    
  20.     VolumePassword.Length = strlen (VolumePassword.Text);    
  21.     mountOptions.PersistentVolume = 0;    
  22.     mountOptions.PreserveTimestamp = 1;    
  23.     strcpy(mountOptions.ProtectedHidVolPassword.Text, "");    
  24.     mountOptions.ProtectedHidVolPassword.Length = 0;    
  25.     mountOptions.ProtectHiddenVolume = 0;    
  26.     mountOptions.ReadOnly = 0;    
  27.     mountOptions.Removable = 0;    
  28.     mountOptions.SystemVolume = 0;    
  29.     mounted = MountVolume (hwndDlg, nDosDriveNo, szFileName, &VolumePassword, bCacheInDriver,     
  30.         bForceMount, &mountOptions, FALSE, TRUE);    
  31.     if(mounted == 1)    
  32.         return 1;    
  33.     else    
  34.         return 0;    
  35.     return 1;    
  36. }    
 

 

      成功虚拟磁盘后,即会弹出虚拟出的磁盘,可以在虚拟磁盘里创建文件,在虚拟磁盘里的文件都会加密到用户指定的加密卷文件中,任何人想要看到虚拟磁盘里的文件,需要加载该虚拟磁盘并正确输入密码。

你可能感兴趣的:(c,加密,Path,磁盘)