/* ** s e c l a b e l. h ** ** Purpose: Security labels interface ** ** Ported from O2K fed release by YST ** ** Copyright (C) Microsoft Corp. 1996-1999 */ #ifndef __SECLABEL_H #define __SECLABEL_H #ifdef SMIME_V3 #include "SMimePol.h" #include "safepnt.h" #ifdef YST extern const CHAR c_szDefaultPolicyOid[]; extern const WCHAR c_wszEmpty[]; extern const WCHAR c_wszPolicyNone[]; #endif // YST extern CRYPT_DECODE_PARA SecLabelDecode; extern CRYPT_ENCODE_PARA SecLabelEncode; #define MAX_SECURITY_POLICIES_CACHED 4 typedef struct _SMIME_SECURITY_POLICY { BOOL fDefault; // TRUE if this is the default ssp. BOOL fValid; // True if this struct contains valid data. CHAR szPolicyOid[MAX_OID_LENGTH]; // Oid for policy module. WCHAR wszPolicyName[MAX_POLICY_NAME]; // Display Name for policy. CHAR szDllPath[MAX_PATH]; // security policy Dll name & path. CHAR szFuncName[MAX_FUNC_NAME]; // Entry func name. DWORD dwOtherInfo; // other policy info. DWORD dwUsage; // just count of # of accesses. HINSTANCE hinstDll; // handle to module(if loaded) or NULL. PFNGetSMimePolicy pfnGetSMimePolicy; // valid fn ptr or NULL. IUnknown *punk; // valid interface pointer to the policy object. } SMIME_SECURITY_POLICY, *PSMIME_SECURITY_POLICY; // Useful Macros #define DimensionOf(_array) (sizeof(_array) / sizeof((_array)[0])) // #define fFalse FALSE // #define fTrue TRUE // Useful safe pointers SAFE_INTERFACE_PTR(ISMimePolicySimpleEdit); SAFE_INTERFACE_PTR(ISMimePolicyFullEdit); SAFE_INTERFACE_PTR(ISMimePolicyCheckAccess); SAFE_INTERFACE_PTR(ISMimePolicyLabelInfo); SAFE_INTERFACE_PTR(ISMimePolicyValidateSend); // Function prototypes. // Is Policy RegInfo Loaded, Load/Unload it. BOOL FLoadedPolicyRegInfo(); BOOL FPresentPolicyRegInfo(); HRESULT HrLoadPolicyRegInfo(DWORD dwFlags); HRESULT HrUnloadPolicyRegInfo(DWORD dwFlags); HRESULT HrReloadPolicyRegInfo(DWORD dwFlags); // Find policy, is policy loaded, load/unload policy, ensure policy loaded. BOOL FFindPolicy(LPSTR szPolicyOid, PSMIME_SECURITY_POLICY *ppSsp); BOOL FIsPolicyLoaded(PSMIME_SECURITY_POLICY pSsp); HRESULT HrUnloadPolicy(PSMIME_SECURITY_POLICY pSsp); HRESULT HrLoadPolicy(PSMIME_SECURITY_POLICY pSsp); HRESULT HrEnsurePolicyLoaded(PSMIME_SECURITY_POLICY pSsp); HRESULT HrGetPolicy(LPSTR szPolicyOid, PSMIME_SECURITY_POLICY *ppSsp); HRESULT HrGetPolicyFlags(LPSTR szPolicyOid, LPDWORD pdwFlags) ; HRESULT HrQueryPolicyInterface(DWORD dwFlags, LPCSTR szPolicyOid, REFIID riid, LPVOID * ppv); // // Security label dlgproc, utility fns etc. // HRESULT HrGetLabelFromData(PSMIME_SECURITY_LABEL *pplabel, LPCSTR szPolicyOid, DWORD fHasClassification, DWORD dwClassification, LPCWSTR wszPrivacyMark, DWORD cCategories, CRYPT_ATTRIBUTE_TYPE_VALUE *rgCategories); HRESULT HrSetLabel(HWND hwndDlg, INT idcPolicyModule, INT idcClassification, INT idcPrivacyMark, INT idcConfigure, PSMIME_SECURITY_POLICY pSsp, PSMIME_SECURITY_LABEL pssl); BOOL SecurityLabelsOnInitDialog(HWND hwndDlg, PSMIME_SECURITY_LABEL plabel, INT idcPolicyModule, INT idcClassification, INT idcPrivacyMark, INT idcConfigure); HRESULT HrUpdateLabel(HWND hwndDlg, INT idcPolicyModule, INT idcClassification, INT idcPrivacyMark, INT idcConfigure, PSMIME_SECURITY_LABEL *pplabel); BOOL OnChangePolicy(HWND hwndDlg, LONG_PTR iEntry, INT idcPolicyModule, INT idcClassification, INT idcPrivacyMark, INT idcConfigure, PSMIME_SECURITY_LABEL *pplabel); INT_PTR CALLBACK SecurityLabelsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); HRESULT HrValidateLabelOnSend(PSMIME_SECURITY_LABEL plabel, HWND hwndParent, PCCERT_CONTEXT pccertSign, ULONG ccertRecip, PCCERT_CONTEXT *rgccertRecip); HRESULT HrValidateLabelRecipCert(PSMIME_SECURITY_LABEL plabel, HWND hwndParent, PCCERT_CONTEXT pccertRecip); DWORD DetermineCertUsageWithLabel(PCCERT_CONTEXT pccert, PSMIME_SECURITY_LABEL pLabel); BOOL FCompareLabels(PSMIME_SECURITY_LABEL plabel1, PSMIME_SECURITY_LABEL plabel2); HRESULT HrGetDefaultLabel(PSMIME_SECURITY_LABEL *pplabel); HRESULT HrGetOELabel(PSMIME_SECURITY_LABEL *pplabel); HRESULT HrSetOELabel(PSMIME_SECURITY_LABEL plabel); #endif // SMIME_V3 #endif // __SECLABEL_H