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

📄 dlgcode.c

📁 加密硬盘、分区、虚拟盘的程序源码
💻 C
📖 第 1 页 / 共 3 页
字号:

	win9x_r0->sectorstart += secs;

	return uBytes;
}

int
GetAvailableFixedDisks (HWND hComboBox, char *lpszRootPath)
{
	int i, n;
	int line = 0;

	for (i = 0; i < 64; i++)
	{
		BOOL drivePresent = FALSE;

		for (n = 1; n <= 32; n++)
		{
			char szTmp[TC_MAX_PATH], item1[100]={0}, item2[100]={0};
			OPEN_TEST_STRUCT driver;

			sprintf (szTmp, lpszRootPath, i, n);
			if (OpenDevice (szTmp, &driver) == TRUE)
			{
				int nDosLinkCreated;
				HANDLE dev;
				DWORD dwResult;
				BOOL bResult;
				PARTITION_INFORMATION diskInfo;
				
				LVITEM LvItem;

				char szDosDevice[TC_MAX_PATH], szCFDevice[TC_MAX_PATH];

				if(!drivePresent)
				{
					LVITEM LvItem;
					memset(&LvItem,0,sizeof(LvItem));
					LvItem.mask=LVIF_TEXT;
					LvItem.iItem= line++;

					sprintf(szDosDevice, " Harddisk %d:", i);
					LvItem.pszText = szDosDevice;
					SendMessage(hComboBox, LVM_INSERTITEM, 0, (LPARAM)&LvItem);
				}
				drivePresent = TRUE;

				if (nCurrentOS == WIN_NT)
				{
					nDosLinkCreated = FakeDosNameForDevice (szTmp, szDosDevice,
						szCFDevice, FALSE);

					dev = CreateFile (szCFDevice, GENERIC_READ, FILE_SHARE_WRITE , NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL);

					bResult = DeviceIoControl (dev, IOCTL_DISK_GET_PARTITION_INFO, NULL, 0,
						&diskInfo, sizeof (diskInfo), &dwResult, NULL);

					RemoveFakeDosName(szTmp, szDosDevice);
					CloseHandle(dev);

					if (bResult == TRUE)
					{
						char partType[100];

						switch(diskInfo.PartitionType)
						{
						case PARTITION_ENTRY_UNUSED:	strcpy(partType, "Empty"); break;
						case PARTITION_EXTENDED:		strcpy(partType, "Extended"); break;
						case PARTITION_HUGE:			strcpy(partType, "FAT"); break;
						case PARTITION_FAT_12:			strcpy(partType, "FAT12"); break;
						case PARTITION_FAT_16:			strcpy(partType, "FAT16"); break;
						case PARTITION_FAT32:		
						case PARTITION_FAT32_XINT13:	strcpy(partType, "FAT32"); break;
						case 0x11:
						case 0x14:
						case 0x16:
						case 0x1b:
						case 0x1c:
						case 0x1e:						strcpy(partType, "Hidden FAT"); break;
						case PARTITION_IFS:				strcpy(partType, "NTFS"); break;
						case 0x17:						strcpy(partType, "Hidden NTFS"); break;
						case PARTITION_LDM:				strcpy(partType, "LDM"); break;
						case PARTITION_UNIX:			strcpy(partType, "UNIX"); break;
						case 0x83:						strcpy(partType, "Linux"); break;
						case 0x82:						strcpy(partType, "Linux Swap"); break;

						default:						sprintf(partType, "Unknown (0x%02x)", diskInfo.PartitionType); break;
						}

						if(diskInfo.PartitionLength.QuadPart > 1024I64*1024*1024)
							sprintf (item1,"%.1f GB",(double)(diskInfo.PartitionLength.QuadPart/1024.0/1024/1024));
						else
							sprintf (item1,"%d MB", diskInfo.PartitionLength.QuadPart/1024/1024);

						strcpy (item2, partType);
					}
				}

				memset(&LvItem,0,sizeof(LvItem));
				LvItem.mask=LVIF_TEXT;   
				LvItem.iItem= line++;   

				LvItem.pszText=szTmp;
				SendMessage(hComboBox,LVM_INSERTITEM,0,(LPARAM)&LvItem);

				LvItem.iSubItem=1;
				LvItem.pszText=item1;
				SendMessage(hComboBox,LVM_SETITEM,0,(LPARAM)&LvItem); 

				LvItem.iSubItem=2;
				LvItem.pszText=item2;
				SendMessage(hComboBox,LVM_SETITEM,0,(LPARAM)&LvItem); 
			}
			else
			{
				if(drivePresent)
				{
					LVITEM LvItem;
					memset(&LvItem,0,sizeof(LvItem));
					LvItem.mask=LVIF_TEXT;   
					LvItem.iItem= line++;   

					LvItem.pszText="";
					SendMessage(hComboBox,LVM_INSERTITEM,0,(LPARAM)&LvItem);
				}

				if (n == 1)
					i = 64;
				break;
			}
		}
	}

	i = SendMessage (hComboBox, LVM_GETITEMCOUNT, 0, 0);
	if (i != CB_ERR)
		return i;
	else
		return 0;
}

int
GetAvailableRemovables (HWND hComboBox, char *lpszRootPath)
{
	char szTmp[TC_MAX_PATH];
	int i;
	LVITEM LvItem;

	if (lpszRootPath);	/* Remove unused parameter warning */

	if (nCurrentOS != WIN_NT)
		return 0;

	memset(&LvItem,0,sizeof(LvItem));
	LvItem.mask = LVIF_TEXT;   
	LvItem.iItem = SendMessage (hComboBox, LVM_GETITEMCOUNT, 0, 0)+1;   

	if (QueryDosDevice ("A:", szTmp, sizeof (szTmp)) != 0)
	{
		LvItem.pszText="Floppy (A:)";
		SendMessage(hComboBox,LVM_INSERTITEM,0,(LPARAM)&LvItem);
	}
	if (QueryDosDevice ("B:", szTmp, sizeof (szTmp)) != 0)
	{
		LvItem.pszText="Floppy (B:)";
		SendMessage(hComboBox,LVM_INSERTITEM,0,(LPARAM)&LvItem);
	}

	i = SendMessage (hComboBox, LVM_GETITEMCOUNT, 0, 0);
	if (i != CB_ERR)
		return i;
	else
		return 0;
}

BOOL WINAPI
RawDevicesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
	static char *lpszFileName;
	WORD lw = LOWORD (wParam);

	if (lParam);		/* remove warning */

	switch (msg)
	{
	case WM_INITDIALOG:
		{
			int nCount;
			LVCOLUMN LvCol;
			HWND hList = GetDlgItem (hwndDlg, IDC_DEVICELIST);

			SetDefaultUserFont (hwndDlg);

			SendMessage(hList,LVM_SETEXTENDEDLISTVIEWSTYLE,0,
				LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_TWOCLICKACTIVATE 
				); 

			memset(&LvCol,0,sizeof(LvCol));               
			LvCol.mask = LVCF_TEXT|LVCF_WIDTH|LVCF_SUBITEM|LVCF_FMT;  
			LvCol.pszText = "Device";                           
			LvCol.cx =160;
			LvCol.fmt = LVCFMT_LEFT;
			SendMessage(hList,LVM_INSERTCOLUMN,0,(LPARAM)&LvCol);

			LvCol.pszText = "Size";  
			LvCol.cx = 64;           
			LvCol.fmt = LVCFMT_RIGHT;
			SendMessage(hList,LVM_INSERTCOLUMN,1,(LPARAM)&LvCol);

			LvCol.pszText = "Type";  
			LvCol.cx = 92;
			LvCol.fmt = LVCFMT_LEFT;
			SendMessage(hList,LVM_INSERTCOLUMN,2,(LPARAM)&LvCol);

			nCount = GetAvailableFixedDisks (hList, "\\Device\\Harddisk%d\\Partition%d");
			nCount += GetAvailableRemovables (hList, "\\Device\\Floppy%d");

			if (nCount == 0)
			{
				handleWin32Error (hwndDlg);
				MessageBox (hwndDlg, getstr (IDS_RAWDEVICES), lpszTitle, ICON_HAND);
				EndDialog (hwndDlg, IDCANCEL);
			}

			lpszFileName = (char *) lParam;
			return 1;
		}

	case WM_COMMAND:
	case WM_NOTIFY:

		// catch non-device line selected
		if (msg == WM_NOTIFY && ((LPNMHDR) lParam)->code == LVN_ITEMCHANGED && (((LPNMLISTVIEW) lParam)->uNewState & LVIS_FOCUSED ))
		{
			LVITEM LvItem;
			memset(&LvItem,0,sizeof(LvItem));
			LvItem.mask = LVIF_TEXT;   
			LvItem.iItem = ((LPNMLISTVIEW) lParam)->iItem;
			LvItem.pszText = lpszFileName;
			LvItem.cchTextMax = TC_MAX_PATH;

			SendMessage (GetDlgItem (hwndDlg, IDC_DEVICELIST), LVM_GETITEMTEXT, LvItem.iItem, (LPARAM) &LvItem);
			EnableWindow (GetDlgItem ((HWND) hwndDlg, IDOK), lpszFileName[0] != 0 && lpszFileName[0] != ' ');
			return 1;
		}

		if (msg == WM_COMMAND && lw == IDOK || msg == WM_NOTIFY && ((NMHDR *)lParam)->code == LVN_ITEMACTIVATE)
		{
			LVITEM LvItem;
			memset(&LvItem,0,sizeof(LvItem));
			LvItem.mask = LVIF_TEXT;   
			LvItem.iItem =  SendMessage (GetDlgItem (hwndDlg, IDC_DEVICELIST), LVM_GETSELECTIONMARK, 0, 0);
			LvItem.pszText = lpszFileName;
			LvItem.cchTextMax = TC_MAX_PATH;

			SendMessage (GetDlgItem (hwndDlg, IDC_DEVICELIST), LVM_GETITEMTEXT, LvItem.iItem, (LPARAM) &LvItem);

			if(lpszFileName[0]==0 || lpszFileName[0]==' ')
				break; // non-device line selected

			EndDialog (hwndDlg, IDOK);
			return 0;
		}

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

	return 0;
}

int
DriverAttach (void)
{
	/* Try to open a handle to the device driver. It will be closed
	   later. */

	if (nCurrentOS == WIN_NT)
		hDriver = CreateFile (WIN32_ROOT_PREFIX, 0, 0, NULL, OPEN_EXISTING, 0, NULL);
	else
		hDriver = CreateFile (WIN9X_DRIVER_NAME, 0, 0, NULL, OPEN_EXISTING, 0, NULL);

	if (hDriver == INVALID_HANDLE_VALUE)
	{
		return ERR_OS_ERROR;
	}
#ifndef SETUP // Don't check version during setup to allow removal of older version
	else
	{
		LONG driver = 0;
		DWORD dwResult;

		BOOL bResult = DeviceIoControl (hDriver, DRIVER_VERSION,
				   &driver, 4, &driver, 4, &dwResult, NULL);

		if (bResult == FALSE)
			return ERR_OS_ERROR;
		else if (driver != VERSION_NUM)
			return ERR_DRIVER_VERSION;
	}
#endif

	if (nCurrentOS == WIN_98)
	{
		DWORD dwResult;
		DeviceIoControl (hDriver, ALLOW_FAST_SHUTDOWN, NULL, 0, NULL, 0, &dwResult, NULL);
	}

	return 0;
}

BOOL
BrowseFiles (HWND hwndDlg, UINT nTitleID, char *lpszFileName)
{
	OPENFILENAME ofn;
	char szFileTitle[TC_MAX_PATH];
	ZeroMemory (&ofn, sizeof (OPENFILENAME));

	*szFileTitle = *lpszFileName = 0;
	ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400; //sizeof (OPENFILENAME);
	ofn.hwndOwner = hwndDlg;
	ofn.lpstrFilter = "All Files (*.*)\0*.*\0TrueCrypt Volumes (*.tc)\0*.tc\0";
	ofn.lpstrCustomFilter = NULL;
	ofn.nFilterIndex = 1;
	ofn.lpstrFile = lpszFileName;
	ofn.nMaxFile = TC_MAX_PATH;
	ofn.lpstrFileTitle = szFileTitle;
	ofn.nMaxFileTitle = TC_MAX_PATH;
	ofn.lpstrInitialDir = NULL;
	ofn.lpstrTitle = getstr (nTitleID);
	ofn.Flags = OFN_HIDEREADONLY | OFN_PATHMUSTEXIST;
	//ofn.lpstrDefExt = "tc";

	if (!GetOpenFileName (&ofn))
		return FALSE;
	else
		return TRUE;
}


void
handleError (HWND hwndDlg, int code)
{
	char szTmp[512];

	switch (code)
	{
	case ERR_OS_ERROR:
		handleWin32Error (hwndDlg);
		break;
	case ERR_OUTOFMEMORY:
		MessageBox (hwndDlg, getstr (IDS_OUTOFMEMORY), lpszTitle, ICON_HAND);
		break;
	case ERR_PASSWORD_WRONG:
		MessageBox (hwndDlg, getstr (IDS_PASSWORD_WRONG), lpszTitle, MB_ICONEXCLAMATION);
		break;
	case ERR_VOL_FORMAT_BAD:
		MessageBox (hwndDlg, getstr (IDS_VOL_FORMAT_BAD), lpszTitle, ICON_HAND);
		break;
	case ERR_BAD_DRIVE_LETTER:
		MessageBox (hwndDlg, getstr (IDS_BAD_DRIVE_LETTER), lpszTitle, ICON_HAND);
		break;
	case ERR_DRIVE_NOT_FOUND:
		MessageBox (hwndDlg, getstr (IDS_NOT_FOUND), lpszTitle, ICON_HAND);
		break;
	case ERR_FILES_OPEN:
		MessageBox (hwndDlg, getstr (IDS_OPENFILES_DRIVER), lpszTitle, ICON_HAND);
		break;
	case ERR_FILES_OPEN_LOCK:
		MessageBox (hwndDlg, getstr (IDS_OPENFILES_LOCK), lpszTitle, ICON_HAND);
		break;
	case ERR_VOL_SIZE_WRONG:
		MessageBox (hwndDlg, getstr (IDS_VOL_SIZE_WRONG), lpszTitle, ICON_HAND);
		break;
	case ERR_COMPRESSION_NOT_SUPPORTED:
		MessageBox (hwndDlg, getstr (IDS_COMPRESSION_NOT_SUPPORTED), lpszTitle, ICON_HAND);
		break;
	case ERR_PASSWORD_CHANGE_VOL_TYPE:
		MessageBox (hwndDlg, getstr (IDS_WRONG_VOL_TYPE), lpszTitle, ICON_HAND);
		break;
	case ERR_PASSWORD_CHANGE_VOL_VERSION:
		MessageBox (hwndDlg, getstr (IDS_WRONG_VOL_VERSION), lpszTitle, ICON_HAND);
		break;
	case ERR_VOL_SEEKING:
		MessageBox (hwndDlg, getstr (IDS_VOL_SEEKING), lpszTitle, ICON_HAND);
		break;
	case ERR_VOL_WRITING:
		MessageBox (hwndDlg, getstr (IDS_VOL_WRITING), lpszTitle, ICON_HAND);
		break;
	case ERR_VOL_READING:
		MessageBox (hwndDlg, getstr (IDS_VOL_READING), lpszTitle, ICON_HAND);
		break;
	case ERR_VOL_ALREADY_MOUNTED:
		MessageBox (hwndDlg, getstr (IDS_VOL_ALREADY_MOUNTED), lpszTitle, ICON_HAND);
		break;
	case ERR_FILE_OPEN_FAILED:
		MessageBox (hwndDlg, getstr (IDS_FILE_OPEN_FAILED), lpszTitle, ICON_HAND);
		break;
	case ERR_VOL_MOUNT_FAILED:
		MessageBox (hwndDlg, getstr (IDS_VOL_MOUNT_FAILED), lpszTitle, MB_ICONEXCLAMATION);
		break;
	case ERR_NO_FREE_SLOTS:
		MessageBox (hwndDlg, getstr (IDS_NO_FREE_SLOTS), lpszTitle, ICON_HAND);
		break;
	case ERR_NO_FREE_DRIVES:
		MessageBox (hwndDlg, getstr (IDS_NO_FREE_DRIVES), lpszTitle, ICON_HAND);
		break;
	case ERR_INVALID_DEVICE:
		MessageBox (hwndDlg, getstr (IDS_INVALID_DEVICE), lpszTitle, ICON_HAND);
		break;
	case ERR_ACCESS_DENIED:
		MessageBox (hwndDlg, getstr (IDS_ACCESS_DENIED), lpszTitle, ICON_HAND);
		break;

	case ERR_DRIVER_VERSION:
		sprintf (szTmp, getstr (IDS_DRIVER_VERSION), VERSION_STRING);
		MessageBox (hwndDlg, szTmp, lpszTitle, ICON_HAND);
		break;

	case ERR_NEW_VERSION_REQUIRED:
		MessageBox (hwndDlg, getstr (IDS_NEW_VERSION_REQUIRED), lpszTitle, ICON_HAND);
		break;

	default:
		sprintf (szTmp, getstr (IDS_UNKNOWN), code);
		MessageBox (hwndDlg, szTmp, lpszTitle, ICON_HAND);

	}
}

static BOOL CALLBACK SetDefaultUserFontEnum( HWND hwnd, LPARAM font)
{
	SendMessage (hwnd, WM_SETFONT, (WPARAM) font, 0);
	return TRUE;
}

void SetDefaultUserFont (HWND hwnd)
{
	NONCLIENTMETRICS metric;

	if (hUserFont == 0)
	{
		metric.cbSize = sizeof (NONCLIENTMETRICS);
		SystemParametersInfo (SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &metric, 0);

		hUserFont = CreateFontIndirect (&metric.lfMessageFont);

		metric.lfMessageFont.lfUnderline = TRUE;
		hUserUnderlineFont = CreateFontIndirect (&metric.lfMessageFont);

		metric.lfMessageFont.lfUnderline = FALSE;
		metric.lfMessageFont.lfWeight = FW_BOLD;
		hUserBoldFont = CreateFontIndirect (&metric.lfMessageFont);
	}

	EnumChildWindows (hwnd, SetDefaultUserFontEnum, (LPARAM) hUserFont);
}

⌨️ 快捷键说明

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