⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mount.c

📁 一个提供档案及Partition作加解密的程式支援以下的加密演算法AESBlowfishCAST5SerpentTriple DESTwofishAES-BlowfishAES-TwofishAES-
💻 C
📖 第 1 页 / 共 4 页
字号:
			return 1;
		}

	case WM_COMMAND:

		if (lw == IDC_MOUNT_OPTIONS)
		{
			DialogBoxParam (hInst, 
				MAKEINTRESOURCE (IDD_MOUNT_OPTIONS), hwndDlg,
				(DLGPROC) MountOptionsDlgProc, (LPARAM) &mountOptions);
			return 1;
		}

		if (lw == IDCANCEL || lw == IDOK)
		{
			char tmp[MAX_PASSWORD+1];
			
			if (lw == IDOK)
			{
				GetWindowText (GetDlgItem (hwndDlg, IDC_PASSWORD), szXPwd, MAX_PASSWORD + 1);
				bCacheInDriver = IsButtonChecked (GetDlgItem (hwndDlg, IDC_CACHE));	 
			}

			// Attempt to wipe password stored in the input field buffer
			memset (tmp, 'X', MAX_PASSWORD);
			tmp[MAX_PASSWORD] = 0;
			SetWindowText (GetDlgItem (hwndDlg, IDC_PASSWORD), tmp);	
			SetWindowText (GetDlgItem (hwndDlg, IDC_PASSWORD), 0);	

			EndDialog (hwndDlg, lw);
			return 1;
		}
		return 0;
	}

	return 0;
}

BOOL WINAPI
PreferencesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
	WORD lw = LOWORD (wParam);

	switch (msg)
	{
	case WM_INITDIALOG:
		{
			SetDefaultUserFont (hwndDlg);
		
			SendMessage (GetDlgItem (hwndDlg, IDC_PREF_OPEN_EXPLORER), BM_SETCHECK, 
						bExplore ? BST_CHECKED:BST_UNCHECKED, 0);

			SendMessage (GetDlgItem (hwndDlg, IDC_PREF_CLOSE_DISMOUNTED_WINDOWS), BM_SETCHECK, 
						bCloseDismountedWindows ? BST_CHECKED:BST_UNCHECKED, 0);
			
			SendMessage (GetDlgItem (hwndDlg, IDC_PREF_WIPE_CACHE_ON_EXIT), BM_SETCHECK, 
						bWipeCacheOnExit ? BST_CHECKED:BST_UNCHECKED, 0);

			SendMessage (GetDlgItem (hwndDlg, IDC_PREF_CACHE_PASSWORDS), BM_SETCHECK, 
						bCacheInDriver ? BST_CHECKED:BST_UNCHECKED, 0);
			
			SendMessage (GetDlgItem (hwndDlg, IDC_PREF_MOUNT_READONLY), BM_SETCHECK, 
						defaultMountOptions.ReadOnly ? BST_CHECKED:BST_UNCHECKED, 0);

			SendMessage (GetDlgItem (hwndDlg, IDC_PREF_MOUNT_REMOVABLE), BM_SETCHECK, 
						defaultMountOptions.Removable ? BST_CHECKED:BST_UNCHECKED, 0);
			
			return 1;
		}

	case WM_COMMAND:

		if (lw == IDCANCEL)
		{
			EndDialog (hwndDlg, lw);
			return 1;
		}

		if (lw == IDOK)
		{
			bExplore = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_OPEN_EXPLORER));	 
			bCloseDismountedWindows = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_CLOSE_DISMOUNTED_WINDOWS));	 
			bWipeCacheOnExit = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_WIPE_CACHE_ON_EXIT));	 
			bCacheInDriver = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_CACHE_PASSWORDS));	 
			defaultMountOptions.ReadOnly = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_MOUNT_READONLY));
			defaultMountOptions.Removable = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_MOUNT_REMOVABLE));

			EndDialog (hwndDlg, lw);
			return 1;
		}
		return 0;
	}

	return 0;
}


BOOL WINAPI
VolumePropertiesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
	WORD lw = LOWORD (wParam);

	switch (msg)
	{
	case WM_INITDIALOG:
		{
			VOLUME_PROPERTIES_STRUCT prop;
			DWORD dwResult;
			BOOL bResult;	

			LVCOLUMN lvCol;
			LVITEM listItem;
			HWND list = GetDlgItem (hwndDlg, IDC_VOLUME_PROPERTIES_LIST);
			char szTmp[128];

			SetDefaultUserFont (hwndDlg);

			SendMessage (list,LVM_SETEXTENDEDLISTVIEWSTYLE,0,
				LVS_EX_FULLROWSELECT
				|LVS_EX_HEADERDRAGDROP 
				//|LVS_EX_GRIDLINES 
				//|LVS_EX_TWOCLICKACTIVATE 
				); 

			memset (&lvCol,0,sizeof(lvCol));               
			lvCol.mask = LVCF_TEXT|LVCF_WIDTH|LVCF_SUBITEM|LVCF_FMT;  
			lvCol.pszText = "Value";                           
			lvCol.cx = 213;
			lvCol.fmt = LVCFMT_LEFT ;
			SendMessage (list,LVM_INSERTCOLUMN,0,(LPARAM)&lvCol);

			lvCol.pszText = "Property";  
			lvCol.cx = 107;           
			lvCol.fmt = LVCFMT_LEFT;
			SendMessage (list,LVM_INSERTCOLUMN,0,(LPARAM)&lvCol);
	
	
			memset (&prop, 0, sizeof(prop));
			prop.driveNo = HIWORD (GetSelectedLong (GetDlgItem (GetParent(hwndDlg), IDC_DRIVELIST))) - 'A';

			bResult = DeviceIoControl (hDriver, VOLUME_PROPERTIES, &prop,
				sizeof (prop), &prop, sizeof (prop), &dwResult,
				NULL);
	
			memset (&listItem, 0, sizeof(listItem));

			listItem.mask = LVIF_TEXT;
			listItem.iItem = -1;

			listItem.pszText = "Volume Location";
			listItem.iItem++; 
			listItem.iSubItem = 0;
			ListView_InsertItem (list, &listItem);
			listItem.iSubItem++;
			listItem.pszText = (LPSTR)prop.wszVolume;
			if (nCurrentOS == WIN_NT)
			{
				ToSBCS (prop.wszVolume);
				if (prop.wszVolume[0] == '?\\')
				listItem.pszText = (LPSTR)prop.wszVolume + 4;
			}
			ListView_SetItem (list, &listItem);

			listItem.pszText = "Volume Size";
			listItem.iItem++;  
			listItem.iSubItem = 0;
			ListView_InsertItem (list, &listItem);
			listItem.iSubItem++;
			sprintf (szTmp, "%I64u bytes", prop.diskLength);
			listItem.pszText = szTmp;
			ListView_SetItem (list, &listItem);

			listItem.pszText = "Volume Type";
			listItem.iItem++;  
			listItem.iSubItem = 0;
			ListView_InsertItem (list, &listItem);
			listItem.iSubItem++;
			if (prop.hiddenVolume == TRUE)
				sprintf (szTmp, "Hidden");
			else
				sprintf (szTmp, "Normal");
			listItem.pszText = szTmp;
			ListView_SetItem (list, &listItem);
			
			listItem.pszText = "Access Mode";
			listItem.iItem++;  
			listItem.iSubItem = 0;
			ListView_InsertItem (list, &listItem);
			listItem.iSubItem++;
			strcpy (szTmp, prop.readOnly ? "Read-Only" : "Read-Write");
			listItem.pszText = szTmp;
			ListView_SetItem (list, &listItem);

			listItem.pszText = "Encryption Algorithm";
			listItem.iItem++; 
			listItem.iSubItem = 0;
			ListView_InsertItem (list, &listItem);
			listItem.iSubItem++;
			EAGetName (szTmp, prop.ea);
			listItem.pszText = szTmp;
			ListView_SetItem (list, &listItem);

			listItem.pszText = "Key Size";
			listItem.iItem++;  
			listItem.iSubItem = 0;
			ListView_InsertItem (list, &listItem);
			listItem.iSubItem++;
			sprintf (szTmp, "%d bits", EAGetKeySize (prop.ea)*8);
			listItem.pszText = szTmp;
			ListView_SetItem (list, &listItem);

			listItem.pszText = "Block Size";
			listItem.iItem++;  
			listItem.iSubItem = 0;
			ListView_InsertItem (list, &listItem);
			listItem.iSubItem++;

			if (EAGetMode (prop.ea) == INNER_CBC)
			{
				// Cascaded ciphers with non-equal block sizes
				char tmpstr[20];
				int i = EAGetLastCipher(prop.ea);

				sprintf (tmpstr, "%d", CipherGetBlockSize(i)*8);
				strcpy (szTmp, tmpstr);
				
				while (i = EAGetPreviousCipher(prop.ea, i))
				{
					sprintf (tmpstr, "/%d", CipherGetBlockSize(i)*8);
					strcat (szTmp, tmpstr);
				}
				strcat (szTmp, " bits");
			}
			else
			{
				sprintf (szTmp, "%d bits", CipherGetBlockSize (EAGetFirstCipher(prop.ea))*8);
			}
			listItem.pszText = szTmp;
			ListView_SetItem (list, &listItem);

			listItem.pszText = "Mode";
			listItem.iItem++; 
			listItem.iSubItem = 0;
			ListView_InsertItem (list, &listItem);
			listItem.iSubItem++;
			EAGetModeName (szTmp, prop.ea, TRUE);
			listItem.pszText = szTmp;
			ListView_SetItem (list, &listItem);

			listItem.pszText = "PKCS5 PRF";
			listItem.iItem++; 
			listItem.iSubItem = 0;
			ListView_InsertItem (list, &listItem);
			listItem.iSubItem++;
			listItem.pszText = get_hash_name (prop.pkcs5);
			ListView_SetItem (list, &listItem);

			listItem.pszText = "PKCS5 Iterations";
			listItem.iItem++;  
			listItem.iSubItem = 0;
			ListView_InsertItem (list, &listItem);
			listItem.iSubItem++;
			sprintf (szTmp, "%d", prop.pkcs5Iterations);
			listItem.pszText = szTmp;
			ListView_SetItem (list, &listItem);
			
			{
				FILETIME ft, curFt;
				SYSTEMTIME st;
				char date[128];
				memset (date, 0, sizeof (date));

				listItem.pszText = "Volume Created";
				listItem.iItem++;  
				listItem.iSubItem = 0;
				ListView_InsertItem (list, &listItem);

				listItem.iSubItem++;
				*(unsigned __int64 *)(&ft) = prop.volumeCreationTime;
				FileTimeToSystemTime (&ft, &st);
				GetDateFormat (LOCALE_USER_DEFAULT, 0, &st, 0, (LPSTR) szTmp, sizeof (szTmp));
				sprintf (date, "%s ", szTmp);
				GetTimeFormat (LOCALE_USER_DEFAULT, 0, &st, 0, (LPSTR) szTmp, sizeof (szTmp));
				strcat (date, szTmp);
				listItem.pszText = date;
				ListView_SetItem (list, &listItem);

				listItem.pszText = "Password Changed";
				listItem.iItem++;  
				listItem.iSubItem = 0;
				ListView_InsertItem (list, &listItem);

				listItem.iSubItem++;
				*(unsigned __int64 *)(&ft) = prop.headerCreationTime;
				FileTimeToSystemTime (&ft, &st);
				GetDateFormat (LOCALE_USER_DEFAULT, 0, &st, 0, (LPSTR) szTmp, sizeof (szTmp));
				sprintf (date, "%s ", szTmp);
				GetTimeFormat (LOCALE_USER_DEFAULT, 0, &st, 0, (LPSTR) szTmp, sizeof (szTmp));
				strcat (date, szTmp);

				GetLocalTime (&st);
				SystemTimeToFileTime (&st, &curFt);
				sprintf (date + strlen (date), " (%I64d days ago)"
					, (*(__int64 *)&curFt - *(__int64 *)&ft)/1000000000000 );
				listItem.pszText = date;
				ListView_SetItem (list, &listItem);
			}

			return 1;
		}

	case WM_COMMAND:

		if (lw == IDCANCEL)
		{
			EndDialog (hwndDlg, lw);
			return 1;
		}

		if (lw == IDOK)
		{
			EndDialog (hwndDlg, lw);
			return 1;
		}
		return 0;
	}

	return 0;
}


BOOL WINAPI
TravellerDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
	WORD lw = LOWORD (wParam);

	switch (msg)
	{
	case WM_INITDIALOG:
		{
			int i, index;
			char drive[] = { 0, ':', 0 };

			SetDefaultUserFont (hwndDlg);

			SendDlgItemMessage (hwndDlg, IDC_COPY_WIZARD, BM_SETCHECK, 
						BST_CHECKED, 0);

			SendDlgItemMessage (hwndDlg, IDC_PREF_OPEN_EXPLORER, BM_SETCHECK, 
						BST_CHECKED, 0);

			SendDlgItemMessage (hwndDlg, IDC_AUTORUN_DISABLE, BM_SETCHECK, 
						BST_CHECKED, 0);

			SendDlgItemMessage (hwndDlg, IDC_DRIVELIST, CB_RESETCONTENT, 0, 0);

			index = SendDlgItemMessage (hwndDlg, IDC_DRIVELIST, CB_ADDSTRING, 0, (LPARAM) "First available");
			SendDlgItemMessage (hwndDlg, IDC_DRIVELIST, CB_SETITEMDATA, index, (LPARAM) 0);

			for (i = 'A'; i <= 'Z'; i++)
			{
				drive[0] = i;
				index = SendDlgItemMessage (hwndDlg, IDC_DRIVELIST, CB_ADDSTRING, 0, (LPARAM) drive);
				SendDlgItemMessage (hwndDlg, IDC_DRIVELIST, CB_SETITEMDATA, index, (LPARAM) i);
			}
		
			SendDlgItemMessage (hwndDlg, IDC_DRIVELIST, CB_SETCURSEL, 0, 0);

			return 1;
		}


	case WM_COMMAND:

		if (HIWORD (wParam) == BN_CLICKED
			&& (lw == IDC_AUTORUN_DISABLE || lw == IDC_AUTORUN_MOUNT || lw == IDC_AUTORUN_START ))
		{
			BOOL enabled = !IsButtonChecked (GetDlgItem (hwndDlg, IDC_AUTORUN_DISABLE));
			
			EnableWindow (GetDlgItem (hwndDlg, IDC_BROWSE_FILES), enabled);
			EnableWindow (GetDlgItem (hwndDlg, IDC_VOLUME_NAME), enabled);
			EnableWindow (GetDlgItem (hwndDlg, IDC_PREF_OPEN_EXPLORER), enabled);
			EnableWindow (GetDlgItem (hwndDlg, IDC_PREF_CACHE_PASSWORDS), enabled);
			EnableWindow (GetDlgItem (hwndDlg, IDC_MOUNT_READONLY), enabled);
			EnableWindow (GetDlgItem (hwndDlg, IDC_DRIVELIST), enabled);
			EnableWindow (GetDlgItem (hwndDlg, IDC_STATIC2), enabled);
			EnableWindow (GetDlgItem (hwndDlg, IDC_STATIC3), enabled);
			EnableWindow (GetDlgItem (hwndDlg, IDC_STATIC4), enabled);

			return 1;
		}

		if (lw == IDC_BROWSE_FILES)
		{
			char volName[MAX_PATH] = { 0 };

			if (BrowseFiles (hwndDlg, IDS_OPEN_TITLE, volName, FALSE))
				SetDlgItemText (hwndDlg, IDC_VOLUME_NAME, strchr (volName, '\\') + 1);

			return 1;
		}

		if (lw == IDC_BROWSE_DIRS)
		{
			char dstPath[MAX_PATH * 2];
			GetDlgItemText (hwndDlg, IDC_DIRECTORY, dstPath, sizeof dstPath);

			if (BrowseDirectories (hwndDlg, getstr (IDS_SELECT_DEST_DIR), dstPath))
				SetDlgItemText (hwndDlg, IDC_DIRECTORY, dstPath);

			return 1;
		}

		if (lw == IDCANCEL)
		{
			EndDialog (hwndDlg, lw);
			return 1;
		}

		if (lw == IDOK)
		{
			BOOL copyWizard, bExplore, bCacheInDriver, bAutoRun, bAutoMount, bMountReadOnly;
			char dstDir[MAX_PATH];
			char srcPath[MAX_PATH * 2];
			char dstPath[MAX_PATH * 2];
			char appDir[MAX_PATH];
			char sysDir[MAX_PATH];
			char volName[MAX_PATH];
			char tmpMsg[1024];
			int drive;

			GetDlgItemText (hwndDlg, IDC_DIRECTORY, dstDir, sizeof dstDir);
			volName[0] = 0;
			GetDlgItemText (hwndDlg, IDC_VOLUME_NAME, volName + 1, sizeof volName);
			
			drive = SendDlgItemMessage (hwndDlg, IDC_DRIVELIST, CB_GETCURSEL, 0, 0);
			drive = SendDlgItemMessage (hwndDlg, IDC_DRIVELIST, CB_GETITEMDATA, drive, 0);

			copyWizard = IsButtonChecked (GetDlgItem (hwndDlg, IDC_COPY_WIZARD));
			bExplore = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_OPEN_EXPLORER));
			bCacheInDriver = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_CACHE_PASSWORDS));
			bMountReadOnly = IsButtonChecked (GetDlgItem (hwndDlg, IDC_MOUNT_READONLY));
			bAutoRun = !IsButtonChecked (GetDlgItem (hwndDlg, IDC_AUTORUN_DISABLE));
			bAutoMount = IsButtonChecked (GetDlgItem (hwndDlg, IDC_AUTORUN_MOUNT));

			if (dstDir[0] == 0)
			{
				SetFocus (GetDlgItem (hwndDlg, IDC_DIRECTORY));
				MessageBox(hwndDlg, getstr (IDS_NO_PATH_SELECTED), lpszTitle, MB_ICONEXCLAMATION);
				return 1;
			}

			
			if (bAutoMount && volName[1] == 0)
			{
				SetFocus (GetDlgItem (hwndDlg, IDC_VOLUME_NAME));
				MessageBox(hwndDlg, getstr (IDS_NO_FILE_SELECTED), lpszTitle, MB_ICONEXCLAMATION);
				return 1;
			}

			if (volName[1] != 0)
			{
				volName[0] = '"';
				strcat (volName, "\"");
			}

			EnableWindow (GetDlgItem (hwndDlg, IDOK), FALSE);
			EnableWindow (GetDlgItem (hwndDlg, IDCANCEL), FALSE);

			GetModuleFileName (NULL, appDir, sizeof (appDir));
			strrchr (appDir, '\\')[0] = 0;

			ArrowWaitCursor();
			GetSystemDirectory (sysDir, sizeof (sysDir));

			sprintf (dstPath, "%s\\TrueCrypt", dstDir);
			CreateDirectory (dstPath, NULL);

			// Main app
			sprintf (srcPath, "%s\\TrueCrypt.exe", appDir);
			sprintf (dstPath, "%s\\TrueCrypt\\TrueCrypt.exe", dstDir);
			if (!TCCopyFile (srcPath, dstPath))
			{
				handleWin32Error (hwndDlg);
				goto stop;
			}

			// Wizard
			if (copyWizard)
			{
				sprintf (srcPath, "%s\\TrueCrypt Format.exe", appDir);
				sprintf (dstPath, "%s\\TrueCrypt\\TrueCrypt Format.exe", dstDir);
				if (!TCCopyFile (srcPath, dstPath))
				{
					handleWin32Error (hwndDlg);
					goto stop;
				}
			}

			// Driver
			sprintf (srcPath, "%s\\Drivers\\truecrypt.sys", sysDir);
			sprintf (dstPath, "%s\\TrueCrypt\\truecrypt.sys", dstDir);
			if (!TCCopyFile (srcPath, dstPath))
			{
				handleWin32Error (hwndDlg);
				goto stop;
			}

			// AutoRun
			if (bAutoRun)
			{
				FILE *af;
				char autoMount[100];
				char openApp[100];
				char driveLetter[] = { ' ', '/', 'l', drive, 0 };

				sprintf (dstPath, "%s\\autorun.inf", dstDir);
				af = fopen (dstPath, "w");

				if (af == NULL)
				{
					MessageBox (hwndDlg, "Cannot create autorun.inf", lpszTitle, MB_ICONERROR);
					goto stop;
				}

				fprintf (af, "[autorun]\n");

				sprintf (autoMount, "TrueCrypt\\TrueCrypt.exe /q /a%s%s%s%s /m rm /v %s",
					drive > 0 ? driveLetter : "",
					bExplore ? " /e" : "",
					bCacheInDriver ? " /cy" : "",
					bMountReadOnly ? " /m ro" : "",
					volName);

				sprintf (openApp, "TrueCrypt\\TrueCrypt.exe%s%s%s%s /m rm%s%s",
					drive > 0 ? driveLetter : "",
					bExplore ? " /e" : "",
					bCacheInDriver ? " /cy" : "",
					bMountReadOnly ? " /m ro" : "",
					volName[0] != 0 ? " /v " : "",
					volName[0] != 0 ? volName : "");

				fprintf (af, "open=%s\n", 
					bAutoMount ? autoMount : openApp);

				fprintf (af, "shell=%s\n", 
					bAutoMount ? "mount" : "open");

				fprintf (af, "action=%s\n", 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -