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

📄 tcformat.c

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

	FILETIME ftLastAccessTime;
	BOOL bTimeStampValid = FALSE;

	hFile = CreateFile (szFileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

	if (hFile == INVALID_HANDLE_VALUE)
	{
		MessageBox (hwndDlg, "Error: Cannot access the volume!\n\nMake sure that the selected volume exists, that it is\nnot being used by the system or an application, and\nthat it is not write-protected.", lpszTitle, ICON_HAND);
		return FALSE;
	}

	/* Remember the container timestamp (used to reset file date and time of file-hosted
	   containers to preserve plausible deniability of hidden volumes)  */
	if (GetFileTime (hFile, NULL, &ftLastAccessTime, NULL) == 0)
	{
		bTimeStampValid = FALSE;
		MessageBox (hwndDlg, getstr (IDS_GETFILETIME_FAILED_IMPLANT), "TrueCrypt", MB_OK | MB_ICONEXCLAMATION);
	}
	else
		bTimeStampValid = TRUE;


	if (GetFileSizeEx(hFile, &fileSize) == 0)
	{
		MessageBox (hwndDlg, "Error: Cannot get volume size!\n\nMake sure the selected volume is not being used\nby the system or an application.", lpszTitle, ICON_HAND);
		if (bTimeStampValid)
		{
			// Restore the container timestamp (to preserve plausible deniability). 
			if (SetFileTime (hFile, NULL, &ftLastAccessTime, NULL) == 0)
				MessageBox (hwndDlg, getstr (IDS_SETFILETIME_FAILED_PREP_IMPLANT), "TrueCrypt", MB_OK | MB_ICONEXCLAMATION);
		}
		CloseHandle (hFile);
		return FALSE;
	}

	if (bTimeStampValid)
	{
		// Restore the container timestamp (to preserve plausible deniability). 
		if (SetFileTime (hFile, NULL, &ftLastAccessTime, NULL) == 0)
			MessageBox (hwndDlg, getstr (IDS_SETFILETIME_FAILED_PREP_IMPLANT), "TrueCrypt", MB_OK | MB_ICONEXCLAMATION);
	}
	CloseHandle (hFile);
	*size = fileSize.QuadPart;
	return TRUE;
}


BOOL
QueryFreeSpace (HWND hwndDlg, HWND hwndTextBox, BOOL display)
{
	if (bHiddenVol && !bHiddenVolHost)	// If it's a hidden volume
	{
		LARGE_INTEGER lDiskFree;
		char szTmp[TC_MAX_PATH];

		lDiskFree.QuadPart = nMaximumHiddenVolSize;

		if (display)
			PrintFreeSpace (hwndTextBox, szTmp, &lDiskFree);

		return TRUE;
	}
	else if (bDevice == FALSE)
	{
		char szTmp[TC_MAX_PATH];
		ULARGE_INTEGER free;
		BOOL bResult;

		bResult = GetDiskFreeSpaceEx (MakeRootName (szTmp, szFileName), &free, 0, 0);

		if (bResult == FALSE)
		{
			if (display)
				DisplaySizingErrorText (hwndTextBox);

			return FALSE;
		}
		else
		{
			LARGE_INTEGER lDiskFree;
			lDiskFree.QuadPart = free.QuadPart;

			if (display)
				PrintFreeSpace (hwndTextBox, szTmp, &lDiskFree);

			return TRUE;
		}
	}
	else if (nCurrentOS == WIN_NT)
	{
		char szDosDevice[TC_MAX_PATH], szCFDevice[TC_MAX_PATH];
		int nDosLinkCreated;
		HANDLE dev;

		nDosLinkCreated = FakeDosNameForDevice (szDiskFile, szDosDevice,
							szCFDevice, FALSE);
		if (nDosLinkCreated != 0)
		{
			if (display)
				DisplaySizingErrorText (hwndTextBox);

			return FALSE;
		}

		dev = CreateFile (szCFDevice, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

		if (dev == INVALID_HANDLE_VALUE)
		{
			int nStatus;

			if (display)
				DisplaySizingErrorText (hwndTextBox);

			nStatus = RemoveFakeDosName (szDiskFile, szDosDevice);
			if (nStatus != 0)
				handleWin32Error (hwndDlg);

			return FALSE;
		}
		else
		{
			DISK_GEOMETRY driveInfo;
			PARTITION_INFORMATION diskInfo;
			DWORD dwResult;
			int nStatus;
			BOOL bResult;

			nStatus = RemoveFakeDosName (szDiskFile, szDosDevice);
			if (nStatus != 0)
				handleWin32Error (hwndDlg);

			// Query partition size
			bResult = DeviceIoControl (dev, IOCTL_DISK_GET_PARTITION_INFO, NULL, 0,
				&diskInfo, sizeof (diskInfo), &dwResult, NULL);

			if (bResult == TRUE)
			{
				if (bResult == TRUE)
				{
					nVolumeSize = diskInfo.PartitionLength.QuadPart;

					if(display)
						nMultiplier = PrintFreeSpace (hwndTextBox, szDiskFile, &diskInfo.PartitionLength);

					nUIVolumeSize = diskInfo.PartitionLength.QuadPart / nMultiplier;

					if (nVolumeSize == 0)
					{
						if (display)
							SetWindowText (hwndTextBox, getstr (IDS_EXT_PARTITION));

						CloseHandle (dev);
						return FALSE;
					}
				}
			}
			else
			{
				LARGE_INTEGER lDiskFree;

				// Drive geometry info is used only when IOCTL_DISK_GET_PARTITION_INFO fails
				bResult = DeviceIoControl (dev, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0,
					&driveInfo, sizeof (driveInfo), &dwResult, NULL);

				if (!bResult)
				{
					if (display)
						DisplaySizingErrorText (hwndTextBox);

					CloseHandle (dev);
					return FALSE;
				}

				lDiskFree.QuadPart = driveInfo.Cylinders.QuadPart * driveInfo.BytesPerSector *
				    driveInfo.SectorsPerTrack * driveInfo.TracksPerCylinder;

				nVolumeSize = lDiskFree.QuadPart;

				if (display)
					nMultiplier = PrintFreeSpace (hwndTextBox, szDiskFile, &lDiskFree);

				nUIVolumeSize = lDiskFree.QuadPart / nMultiplier;
			}

			CloseHandle (dev);
			return TRUE;
		}
	}
	else
	{
		OPEN_TEST_STRUCT driver;
		BOOL bResult;

		bResult = OpenDevice (szDiskFile, &driver);

		if (bResult == TRUE)
		{
			LARGE_INTEGER lDiskFree;

			lDiskFree.QuadPart = (__int64) (driver.seclast - driver.secstart) * SECTOR_SIZE;
			nVolumeSize = lDiskFree.QuadPart;

			if (display)
				nMultiplier = PrintFreeSpace (hwndTextBox, szDiskFile, &lDiskFree);

			nUIVolumeSize = lDiskFree.QuadPart / nMultiplier;
		}
		else
		{
			if (display)
				DisplaySizingErrorText (hwndTextBox);

			return FALSE;
		}

		return TRUE;
	}
}

void
AddComboPair (HWND hComboBox, char *lpszItem, int value)
{
	LPARAM nIndex;

	nIndex = SendMessage (hComboBox, CB_ADDSTRING, 0, (LPARAM) lpszItem);
	nIndex = SendMessage (hComboBox, CB_SETITEMDATA, nIndex, (LPARAM) value);
}

void
SelectEA (HWND hComboBox, int *ea)
{
	LPARAM nCount = SendMessage (hComboBox, CB_GETCOUNT, 0, 0);
	LPARAM x, i;

	for (i = 0; i < nCount; i++)
	{
		x = SendMessage (hComboBox, CB_GETITEMDATA, i, 0);
		if (x == (LPARAM) * ea)
		{
			SendMessage (hComboBox, CB_SETCURSEL, i, 0);
			return;
		}
	}

	/* Something went wrong ; couldn't find the old ea so we drop
	   back to a default */

	*ea = SendMessage (hComboBox, CB_GETITEMDATA, 0, 0);

	SendMessage (hComboBox, CB_SETCURSEL, 0, 0);

}

/* Except in response to the WM_INITDIALOG message, the dialog box procedure
   should return nonzero if it processes the message, and zero if it does
   not. - see DialogProc */
BOOL CALLBACK
PageDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	WORD lw = LOWORD (wParam);
	WORD hw = HIWORD (wParam);

	switch (uMsg)
	{
	case WM_INITDIALOG:

		SetDefaultUserFont (hwndDlg);

		switch (nCurPageNo)
		{
		case INTRO_PAGE:
			{
				UINT nID[4];

				nID[0] = IDS_INTRO_HELP0;
				nID[1] = IDS_INTRO_HELP1;
				nID[2] = IDS_INTRO_HELP2;
				nID[3] = IDS_INTRO_HELP3;

				SetWindowText (GetDlgItem (GetParent (hwndDlg), IDC_BOX_TITLE), getstr (IDS_INTRO_TITLE));

				CheckButton (GetDlgItem (hwndDlg, bHiddenVol ? IDC_HIDDEN_VOL : IDC_STD_VOL));

				SetWindowText (GetDlgItem (hwndDlg, IDC_BOX_HELP), getmultilinestr (nID));

				EnableWindow (GetDlgItem (hwndDlg, IDC_STD_VOL), TRUE);
				EnableWindow (GetDlgItem (hwndDlg, IDC_HIDDEN_VOL), TRUE);

				SetWindowText (GetDlgItem (GetParent (hwndDlg), IDC_NEXT), getstr (IDS_NEXT));
				SetWindowText (GetDlgItem (GetParent (hwndDlg), IDC_PREV), getstr (IDS_PREV));
				SetWindowText (GetDlgItem (GetParent (hwndDlg), IDCANCEL), getstr (IDS_CANCEL));
				EnableWindow (GetDlgItem (GetParent (hwndDlg), IDC_NEXT), TRUE);
				EnableWindow (GetDlgItem (GetParent (hwndDlg), IDC_PREV), FALSE);

			}
			break;

		case HIDDEN_VOL_WIZARD_MODE_PAGE:
			{
				UINT nID[4];

				nID[0] = IDS_HIDDEN_VOL_WIZARD_MODE_HELP0;
				nID[1] = IDS_HIDDEN_VOL_WIZARD_MODE_HELP1;
				nID[2] = IDS_HIDDEN_VOL_WIZARD_MODE_HELP2;
				nID[3] = IDS_HIDDEN_VOL_WIZARD_MODE_HELP3;

				SetWindowText (GetDlgItem (GetParent (hwndDlg), IDC_BOX_TITLE), getstr (IDS_HIDDEN_VOL_WIZARD_MODE_TITLE));

				CheckButton (GetDlgItem (hwndDlg, bHiddenVolDirect ? IDC_HIDVOL_WIZ_MODE_DIRECT : IDC_HIDVOL_WIZ_MODE_FULL));

				SetWindowText (GetDlgItem (hwndDlg, IDC_BOX_HELP), getmultilinestr (nID));

				EnableWindow (GetDlgItem (hwndDlg, IDC_HIDVOL_WIZ_MODE_DIRECT), TRUE);
				EnableWindow (GetDlgItem (hwndDlg, IDC_HIDVOL_WIZ_MODE_FULL), TRUE);

				SetWindowText (GetDlgItem (GetParent (hwndDlg), IDC_NEXT), getstr (IDS_NEXT));
				SetWindowText (GetDlgItem (GetParent (hwndDlg), IDC_PREV), getstr (IDS_PREV));
				SetWindowText (GetDlgItem (GetParent (hwndDlg), IDCANCEL), getstr (IDS_CANCEL));
				EnableWindow (GetDlgItem (GetParent (hwndDlg), IDC_NEXT), TRUE);
				EnableWindow (GetDlgItem (GetParent (hwndDlg), IDC_PREV), TRUE);

			}
			break;

		case FILE_PAGE:
			{
				UINT nID[4] = { 0,0,0,0 };

				if (bHiddenVolDirect && bHiddenVolHost)
				{
					nID[0] = IDS_FILE_HELP0_HIDDEN_HOST_VOL_DIRECT;
					nID[1] = 0;
				}
				else
				{
					nID[0] = bHiddenVolHost ? IDS_FILE_HELP0_HIDDEN_HOST_VOL : IDS_FILE_HELP0;
					nID[1] = bHiddenVolHost ? IDS_FILE_HELP1_HIDDEN_HOST_VOL : IDS_FILE_HELP1;
				}

				SendMessage (GetDlgItem (hwndDlg, IDC_COMBO_BOX), CB_RESETCONTENT, 0, 0);

				SendMessage (GetDlgItem (hwndDlg, IDC_COMBO_BOX), CB_LIMITTEXT, TC_MAX_PATH, 0);

				LoadSettings (hwndDlg);

				SendMessage (GetDlgItem (hwndDlg, IDC_NO_HISTORY), BM_SETCHECK, bHistory ? BST_UNCHECKED : BST_CHECKED, 0);

				SetWindowText (GetDlgItem (GetParent (hwndDlg), IDC_BOX_TITLE), getstr (IDS_FILE_TITLE));
				SetWindowText (GetDlgItem (hwndDlg, IDC_BOX_HELP), getmultilinestr (nID));

				SetFocus (GetDlgItem (hwndDlg, IDC_COMBO_BOX));

				SetWindowText (GetDlgItem (GetParent (hwndDlg), IDC_NEXT), getstr (IDS_NEXT));
				SetWindowText (GetDlgItem (GetParent (hwndDlg), IDC_PREV), getstr (IDS_PREV));
				EnableWindow (GetDlgItem (GetParent (hwndDlg), IDC_PREV), TRUE);

				AddComboItem (GetDlgItem (hwndDlg, IDC_COMBO_BOX), szFileName);

				EnableDisableFileNext (GetDlgItem (hwndDlg, IDC_COMBO_BOX),
				GetDlgItem (GetParent (hwndDlg), IDC_NEXT));

			}
			break;

		case HIDDEN_VOL_HOST_PRE_CIPHER_PAGE:
			{
				UINT nID[4];

				nID[0] = IDS_HIDVOL_HOST_PRE_CIPHER_HELP0;
				nID[1] = IDS_HIDVOL_HOST_PRE_CIPHER_HELP1;
				nID[2] = IDS_HIDVOL_HOST_PRE_CIPHER_HELP2;
				nID[3] = IDS_HIDVOL_HOST_PRE_CIPHER_HELP3;

				SetWindowText (GetDlgItem (GetParent (hwndDlg), IDC_BOX_TITLE), getstr (IDS_HIDVOL_HOST_PRE_CIPHER_TITLE));

				SetWindowText (GetDlgItem (hwndDlg, IDC_BOX_HELP), getmultilinestr (nID));

				SetWindowText (GetDlgItem (GetParent (hwndDlg), IDC_NEXT), getstr (IDS_NEXT));
				SetWindowText (GetDlgItem (GetParent (hwndDlg), IDC_PREV), getstr (IDS_PREV));
				EnableWindow (GetDlgItem (GetParent (hwndDlg), IDC_NEXT), TRUE);
				EnableWindow (GetDlgItem (GetParent (hwndDlg), IDC_PREV), TRUE);

			}
			break;

		case HIDDEN_VOL_PRE_CIPHER_PAGE:
			{
				UINT nID[4];

				nID[0] = IDS_HIDVOL_PRE_CIPHER_HELP0;
				nID[1] = 0;
				nID[2] = 0;
				nID[3] = 0;

				SetWindowText (GetDlgItem (GetParent (hwndDlg), IDC_BOX_TITLE), getstr (IDS_HIDVOL_PRE_CIPHER_TITLE));

				SetWindowText (GetDlgItem (hwndDlg, IDC_BOX_HELP), getmultilinestr (nID));

				SetWindowText (GetDlgItem (GetParent (hwndDlg), IDC_NEXT), getstr (IDS_NEXT));
				SetWindowText (GetDlgItem (GetParent (hwndDlg), IDC_PREV), getstr (IDS_PREV));
				EnableWindow (GetDlgItem (GetParent (hwndDlg), IDC_NEXT), TRUE);
				EnableWindow (GetDlgItem (GetParent (hwndDlg), IDC_PREV), FALSE);

			}
			break;

		case CIPHER_PAGE:
			{
				int ea;
				char buf[100];

				SendMessage (GetDlgItem (hwndDlg, IDC_COMBO_BOX), CB_RESETCONTENT, 0, 0);

				if (bHiddenVol)
					SetWindowText (GetDlgItem (GetParent (hwndDlg), IDC_BOX_TITLE), getstr (bHiddenVolHost ? IDS_CIPHER_HIDVOL_HOST_TITLE : IDS_CIPHER_HIDVOL_TITLE));
				else
					SetWindowText (GetDlgItem (GetParent (hwndDlg), IDC_BOX_TITLE), getstr (IDS_CIPHER_TITLE));

				for (ea = EAGetFirst (); ea != 0; ea = EAGetNext (ea))
				{
					AddComboPair (GetDlgItem (hwndDlg, IDC_COMBO_BOX), EAGetName (buf, ea), ea);
				}

				SelectEA (GetDlgItem (hwndDlg, IDC_COMBO_BOX), &nVolumeEA);
				ComboSelChangeEA (hwndDlg);
				SetFocus (GetDlgItem (hwndDlg, IDC_COMBO_BOX));

				switch (pkcs5)
				{
				case SHA1:		CheckButton (GetDlgItem (hwndDlg, IDC_SHA1)); break;
				case RIPEMD160:	CheckButton (GetDlgItem (hwndDlg, IDC_RIPEMD160)); break;

⌨️ 快捷键说明

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