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

📄 kmprops.c

📁 vc环境下的pgp源码
💻 C
📖 第 1 页 / 共 5 页
字号:
								PGPONullOption (pkmpss->pKM->Context),
							PGPOLastOption (pkmpss->pKM->Context));
			KMReleaseSDKAccess (pkmpss->pKM);

			if (IsntPGPError (PGPclErrorBox (hDlg, err))) {
				pkmpss->bNeedsCommit = TRUE;
				lvI.mask = LVIF_IMAGE;
				lvI.iItem = iIndex;
				lvI.iSubItem = 0;
				lvI.iImage = IDX_DSAPUBREVKEY;
				ListView_SetItem (pkmpss->hwndSubKeys, &lvI);
			}
		}
	}

	if (pPasskey) 
		KMFreePasskey (pPasskey, sizePasskey);

	return TRUE;
}


//	___________________________________________________
//
//  Populate ListView with subkeys

static BOOL 
sInsertSubkeysIntoList (
		HWND			hwndList, 
		PGPKeyRef		key,
		PGPKeySetRef	keyset) 
{
	PGPSubKeyRef	subkey;
	PGPKeyListRef	keylist;
	PGPKeyIterRef	keyiter;
	LV_ITEM			lvI;
	CHAR			szSize[16];
	CHAR			szValid[32];
	CHAR			szExpires[32];
	PGPBoolean		bRevoked;
	PGPBoolean		bExpired;
	INT				iItem;
	PGPTime			time;
	PSUBKEYSTRUCT	psks;

	iItem = 0;

	PGPOrderKeySet (keyset, kPGPAnyOrdering, &keylist);
	PGPNewKeyIter (keylist, &keyiter);
	PGPKeyIterSeek (keyiter, key);
	PGPKeyIterNextSubKey (keyiter, &subkey);
	while (subkey) {

		// allocate structure to hold info
		psks = KMAlloc (sizeof(SUBKEYSTRUCT));
		if (!psks) break;

		// initialize structure
		psks->subkey = subkey;
		psks->uSize = 0;

		// get subkey info
		PGPGetSubKeyNumber (subkey, kPGPKeyPropBits, &psks->uSize);
		wsprintf (szSize, "%i", psks->uSize);

		PGPGetSubKeyBoolean (subkey, kPGPKeyPropIsExpired, &bExpired);
		PGPGetSubKeyBoolean (subkey, kPGPKeyPropIsRevoked, &bRevoked);

		PGPGetSubKeyTime (subkey, kPGPKeyPropCreation, &psks->timeStart);
		KMConvertTimeToString (psks->timeStart, szValid, sizeof (szValid));

		PGPGetSubKeyTime (subkey, kPGPKeyPropExpiration, &time);
		if (time != kPGPExpirationTime_Never) {
			psks->bNeverExpires = FALSE;
			KMConvertTimeToDays (time, &psks->iExpireDays);
			KMConvertTimeToString (time, szExpires, sizeof (szExpires));
		}
		else {
			psks->bNeverExpires = TRUE;
			psks->iExpireDays = 0;
			LoadString (g_hInst, IDS_NEVER, szExpires, sizeof (szExpires));
		}

		// insert listview item
		lvI.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE | LVIF_PARAM;
		lvI.state = 0;      
		lvI.stateMask = 0;
		if (bRevoked) 
			lvI.iImage = IDX_DSAPUBREVKEY;
		else if (bExpired)
			lvI.iImage = IDX_DSAPUBEXPKEY;
		else
			lvI.iImage = IDX_DSAPUBKEY;

		lvI.iItem = iItem;
		lvI.iSubItem = 0;
		lvI.pszText	= szValid; 
		lvI.cchTextMax = 0;
		lvI.lParam = (LPARAM)psks;

		if (ListView_InsertItem (hwndList, &lvI) == -1) return FALSE;

		// add strings for other columns
		ListView_SetItemText (hwndList, iItem, 1, szExpires);
		ListView_SetItemText (hwndList, iItem, 2, szSize);

		PGPKeyIterNextSubKey (keyiter, &subkey);

		iItem++;
	}

	PGPFreeKeyIter (keyiter);
	PGPFreeKeyList (keylist);

	return TRUE;
}


//	___________________________________________________
//
//  destroy all data structures associated with ListView

static VOID
sDestroySubKeyListAndStructures (KMPROPSHEETSTRUCT* pkmpss)
{
	INT		iIndex;
	INT		iNumItems;
	LV_ITEM	lvI;

	iNumItems = ListView_GetItemCount (pkmpss->hwndSubKeys);
	for (iIndex=0; iIndex<iNumItems; iIndex++) {
		lvI.mask = LVIF_PARAM;
		lvI.iItem = iIndex;
		lvI.iSubItem = 0;
		ListView_GetItem (pkmpss->hwndSubKeys, &lvI);
		KMFree ((VOID*)(lvI.lParam));
	}

	ListView_DeleteAllItems (pkmpss->hwndSubKeys);

	ImageList_Destroy (pkmpss->hIml);
}


//	___________________________________________________
//
//  create imagelist 

static VOID 
sCreateImageList (KMPROPSHEETSTRUCT* pkmpss) 
{
	HBITMAP		hBmp;
	HDC			hDC;
	INT			iNumBits;

	if (pkmpss->hIml)
		return;

	// create image list
	hDC = GetDC (NULL);		// DC for desktop
	iNumBits = GetDeviceCaps (hDC, BITSPIXEL) * GetDeviceCaps (hDC, PLANES);
	ReleaseDC (NULL, hDC);

	if (!pkmpss->hIml) {
		if (iNumBits <= 8) {
			pkmpss->hIml = ImageList_Create (16, 16, ILC_COLOR|ILC_MASK, 
											NUM_BITMAPS, 0); 
			hBmp = LoadBitmap (g_hInst, MAKEINTRESOURCE (IDB_IMAGES4BIT));
			ImageList_AddMasked (pkmpss->hIml, hBmp, RGB(255, 0, 255));
			DeleteObject (hBmp);
		}
		else {
			pkmpss->hIml = ImageList_Create (16, 16, ILC_COLOR24|ILC_MASK, 
											NUM_BITMAPS, 0); 
			hBmp = LoadBitmap (g_hInst, MAKEINTRESOURCE (IDB_IMAGES24BIT));
			ImageList_AddMasked (pkmpss->hIml, hBmp, RGB(255, 0, 255));
			DeleteObject (hBmp);
		}
	}
}


//	___________________________________________________
//
//  setup subkey ListView 

static VOID 
sFillSubKeyList (HWND hDlg, KMPROPSHEETSTRUCT* pkmpss) 
{

	LV_COLUMN	lvC; 
	CHAR		sz[256];

	sCreateImageList (pkmpss);
	ListView_SetImageList (pkmpss->hwndSubKeys, pkmpss->hIml, LVSIL_SMALL);

	lvC.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
	lvC.fmt = LVCFMT_CENTER; 
	lvC.pszText = sz;
	
	LoadString (g_hInst, IDS_VALIDFROM, sz, sizeof(sz));
	lvC.cx = 120;  
	lvC.iSubItem = 0;
	if (ListView_InsertColumn (pkmpss->hwndSubKeys, 0, &lvC) == -1) return;

	LoadString (g_hInst, IDS_EXPIRES, sz, sizeof(sz));
	lvC.cx = 70;   
	lvC.iSubItem = 1;
	if (ListView_InsertColumn (pkmpss->hwndSubKeys, 1, &lvC) == -1) return;

	LoadString (g_hInst, IDS_SIZE, sz, sizeof(sz));
	lvC.cx = 70;   
	lvC.iSubItem = 2;
	if (ListView_InsertColumn (pkmpss->hwndSubKeys, 2, &lvC) == -1) return;

	// populate control by iterating through subkeys
	sInsertSubkeysIntoList (pkmpss->hwndSubKeys, pkmpss->key, 
							pkmpss->keyset);
}


//	___________________________________________________
//
//  Key Properties Dialog Message procedure - subkey panel

static BOOL CALLBACK 
sKeyPropDlgProcSubkey (
		HWND	hDlg, 
		UINT	uMsg, 
		WPARAM	wParam,
		LPARAM	lParam) 
{
	KMPROPSHEETSTRUCT*	pkmpss;
	INT					iIndex;
	NMHDR*				pnmh;

	pkmpss = (KMPROPSHEETSTRUCT*)GetWindowLong (hDlg, GWL_USERDATA);

	switch (uMsg) {

	case WM_INITDIALOG:
		// store pointer to data structure
		SetWindowLong (hDlg, GWL_USERDATA, ((PROPSHEETPAGE*)lParam)->lParam);
		pkmpss = (KMPROPSHEETSTRUCT*)GetWindowLong (hDlg, GWL_USERDATA);
		pkmpss->hwndSubKeys = GetDlgItem (hDlg, IDC_SUBKEYLIST);

		// hide explanatory text for non-keypairs
		if (!pkmpss->bSecret) {
			ShowWindow (GetDlgItem (hDlg, IDC_STATICTEXT1), SW_HIDE);
			ShowWindow (GetDlgItem (hDlg, IDC_STATICTEXT2), SW_HIDE);
		}

		// initialize all controls
		PostMessage (hDlg, WM_APP, SERIALIZE, 0);
		return TRUE;

	case WM_APP :
		if (wParam == SERIALIZE)
			KMRequestSDKAccess (pkmpss->pKM);
		sFillSubKeyList (hDlg, pkmpss);
		if (wParam == SERIALIZE)
			KMReleaseSDKAccess (pkmpss->pKM);
		if (pkmpss->bKeyGenEnabled) {
			if (pkmpss->bSecret && !pkmpss->bRevoked && 
					!pkmpss->bExpired && !pkmpss->bReadOnly)
				EnableWindow (GetDlgItem (hDlg, IDC_NEWSUBKEY), TRUE);
		}
		break;

	case WM_COMMAND:
		switch(LOWORD (wParam)) {
		case IDC_NEWSUBKEY :
			DialogBoxParam (g_hInst, MAKEINTRESOURCE (IDD_NEWSUBKEY), 
						hDlg, sNewSubkeyDlgProc, (LPARAM)pkmpss);
			break;

		case IDC_REVOKESUBKEY :
			if (sRevokeSubKey (hDlg, pkmpss)) {
				EnableWindow (GetDlgItem (hDlg, IDC_REVOKESUBKEY), FALSE);
				EnableWindow (GetDlgItem (hDlg, IDC_REMOVESUBKEY), FALSE);
			}
			break;

		case IDC_REMOVESUBKEY :
			if (sRemoveSubKey (hDlg, pkmpss)) {
				EnableWindow (GetDlgItem (hDlg, IDC_REVOKESUBKEY), FALSE);
				EnableWindow (GetDlgItem (hDlg, IDC_REMOVESUBKEY), FALSE);
			}
			break;
		}
		return TRUE;

    case WM_HELP: 
        WinHelp (((LPHELPINFO) lParam)->hItemHandle, pkmpss->pKM->szHelpFile, 
            HELP_WM_HELP, (DWORD) (LPSTR) aSubkeyIds); 
        break; 
 
    case WM_CONTEXTMENU: 
        WinHelp ((HWND) wParam, pkmpss->pKM->szHelpFile, HELP_CONTEXTMENU, 
            (DWORD) (LPVOID) aSubkeyIds); 
        break; 

	case WM_DESTROY :
		sDestroySubKeyListAndStructures (pkmpss);
		break;

	case WM_NOTIFY :
		pnmh = (NMHDR*)lParam;
		switch (pnmh->code) {

		case PSN_HELP :
			WinHelp (hDlg, pkmpss->pKM->szHelpFile, HELP_CONTEXT, 
				IDH_PGPKM_PROPDIALOG); 
			break;

		case NM_CLICK :
		case LVN_KEYDOWN :
			if ((pnmh->idFrom == IDC_SUBKEYLIST) && 
				 pkmpss->bSecret &&
				!pkmpss->bReadOnly) 
			{
				iIndex = 
					ListView_GetNextItem (pkmpss->hwndSubKeys,
														-1, LVNI_SELECTED);
				if (iIndex > -1) {
					LV_ITEM lvI;

					lvI.mask = LVIF_IMAGE|LVIF_PARAM;
					lvI.iItem = iIndex;
					lvI.iSubItem = 0;
					ListView_GetItem(pkmpss->hwndSubKeys, &lvI);
					if ((lvI.iImage == IDX_DSAPUBKEY) && (pkmpss->bSecret))
						EnableWindow (
							GetDlgItem (hDlg, IDC_REVOKESUBKEY), TRUE);
					else
						EnableWindow (
							GetDlgItem (hDlg,IDC_REVOKESUBKEY), FALSE);

					EnableWindow (GetDlgItem (hDlg,IDC_REMOVESUBKEY), TRUE);
				}
				else {
					EnableWindow (GetDlgItem (hDlg,IDC_REVOKESUBKEY), FALSE);
					EnableWindow (GetDlgItem (hDlg,IDC_REMOVESUBKEY), FALSE);
				}
			}
			break;
		}
	}
	return FALSE;
}

//	___________________________________________________
//
//  Populate ListView with ADKs

static VOID 
sInsertADKsIntoTree (
		PKEYMAN			pKM,
		HWND			hwndTree, 
		PGPKeyRef		key,
		PGPKeySetRef	keyset,
		UINT			uNumberADKs) 
{
	TL_TREEITEM		tlI;
	TL_LISTITEM		tlL;
	TL_INSERTSTRUCT tlIns;
	HTLITEM			hTNew;
	PGPKeyRef		keyADK;
	PGPKeyID		keyidADK;
	CHAR			szName[256];
	PGPError		err;
	CHAR			szID[kPGPMaxKeyIDStringSize];
	UINT			u;
	PGPByte			byteClass;
	BOOL			bItalics;

	tlI.hItem = NULL;
	tlI.mask = TLIF_TEXT | TLIF_IMAGE | TLIF_STATE;
	tlI.stateMask = TLIS_ITALICS;
	tlI.pszText = szName;

	for (u=0; u<uNumberADKs; u++) {
		byteClass = 0;
		tlI.iImage = IDX_DSAPUBDISKEY;
		tlI.state = 0;

		err = PGPGetIndexedAdditionalRecipientRequestKey (key, 
				keyset, u, &keyADK, &keyidADK, &byteClass);

		if (IsntPGPError (err)) { 

			if (PGPKeyRefIsValid (keyADK)) {
				KMGetKeyName (keyADK, szName, sizeof(szName));
				tlI.iImage = KMDetermineKeyIcon (pKM, keyADK, &bItalics);
				if (bItalics) tlI.state = TLIS_ITALICS;
			}
			else {
				tlI.state = TLIS_ITALICS;

				LoadString (g_hInst, IDS_UNKNOWNADK, 
									szName, sizeof(szName));
				err = PGPGetKeyIDString (&keyidADK, 
							kPGPKeyIDString_Abbreviated, szID);
				if (IsntPGPError (err)) {
					LoadString (g_hInst, IDS_UNKNOWNADKID, 
									szName, sizeof(szName));
					lstrcat (szName, szID);
				}
			}
		}

		else {
			LoadString (g_hInst, IDS_ERRONEOUSADK, szName, sizeof(szName));
		}

		tlI.cchTextMax = lstrlen (szName);
		tlIns.hInsertAfter = (HTLITEM)TLI_SORT;
		tlIns.item = tlI;
		tlIns.hParent = NULL;
		hTNew = TreeList_InsertItem (hwndTree, &tlIns);

		tlL.pszText = NULL;
		tlL.hItem = hTNew;
		tlL.stateMask = TLIS_VISIBLE;
		tlL.iSubItem = 1;
		tlL.mask = TLIF_DATAVALUE | TLIF_STATE;
		tlL.state = TLIS_VISIBLE;

		if (byteClass & 0x80) tlL.lDataValue = IDX_ADK;
		else tlL.lDataValue = IDX_NOADK;

		TreeList_SetListItem (hwndTree, &tlL, FALSE);
	}
}


//	_____________________________________________________
//
//  add columns to treelist

static BOOL 
sAddADKColumns (HWND hWndTree, INT iWidth) {
	TL_COLUMN tlc;
	CHAR sz[64];

	TreeList_DeleteAllColumns (hWndTree);

	tlc.mask = TLCF_FMT | TLCF_WIDTH | TLCF_TEXT | 
				TLCF_SUBITEM | TLCF_DATATYPE | TLCF_DATAMAX;
	tlc.pszText = sz;

	tlc.iSubItem = 0;
	tlc.fmt = TLCFMT_LEFT;
	tlc.iDataType = TLC_DATASTRING;
	tlc.cx = iWidth - ENFORCELISTWIDTH - 20;
	tlc.bMouseNotify = FALSE;
	LoadString (g_hInst, IDS_NAMEFIELD, sz, sizeof(sz));
	TreeList_InsertColumn (hWndTree, 0, &tlc);

	tlc.fmt = TLCFMT_IMAGE;
	tlc.iDataType = TLC_DATALONG;
	tlc.cx = ENFORCELISTWIDTH;
	tlc.bMouseNotify = FALSE;
	LoadString (g_hInst, IDS_ENFORCEFIELD, sz, sizeof(sz));
	TreeList_InsertColumn (hWndTree, 1, &tlc);

	return TRUE;
}


//	___________________________________________________
//
//  Key Properties Dialog Message procedure - ADK panel

static BOOL CALLBACK 
sKeyPropDlgProcADK (
		HWND	hDlg, 
		UINT	uMsg, 
		WPARAM	wParam,
		LPARAM	lParam) 
{
	KMPROPSHEETSTRUCT*	pkmpss;
	RECT				rc;

	pkmpss = (KMPROPSHEETSTRUCT*)GetWindowLong (hDlg, GWL_USERDATA);

⌨️ 快捷键说明

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