我正在构建一个基于 c# 的服务来增强 Windows 文件历史记录。
浏览 API,我没有看到添加"包含"文件夹或库的方法。似乎只有一种添加"排除"文件夹的方法(仅供参考,包含和排除是指是否备份了特定文件夹或库(。
我检查了 SDK 中的 fhchg.h 头文件,也没有看到任何用于添加其中定义的文件夹或库的方法:
EXTERN_C const IID IID_IFhConfigMgr;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6A5FEA5B-BF8F-4EE5-B8C3-44D8A0D7331C")
IFhConfigMgr : public IUnknown
{
public:
virtual HRESULT STDMETHODCALLTYPE LoadConfiguration( void) = 0;
virtual HRESULT STDMETHODCALLTYPE CreateDefaultConfiguration(
/* [in] */ BOOL OverwriteIfExists) = 0;
virtual HRESULT STDMETHODCALLTYPE SaveConfiguration( void) = 0;
virtual HRESULT STDMETHODCALLTYPE AddRemoveExcludeRule(
/* [in] */ BOOL Add,
/* [in] */ FH_PROTECTED_ITEM_CATEGORY Category,
/* [in] */ __RPC__in BSTR Item) = 0;
virtual HRESULT STDMETHODCALLTYPE GetIncludeExcludeRules(
/* [in] */ BOOL Include,
/* [in] */ FH_PROTECTED_ITEM_CATEGORY Category,
/* [out] */ __RPC__deref_out_opt IFhScopeIterator **Iterator) = 0;
virtual HRESULT STDMETHODCALLTYPE GetLocalPolicy(
/* [in] */ FH_LOCAL_POLICY_TYPE LocalPolicyType,
/* [out] */ __RPC__out ULONGLONG *PolicyValue) = 0;
virtual HRESULT STDMETHODCALLTYPE SetLocalPolicy(
/* [in] */ FH_LOCAL_POLICY_TYPE LocalPolicyType,
/* [in] */ ULONGLONG PolicyValue) = 0;
virtual HRESULT STDMETHODCALLTYPE GetBackupStatus(
/* [out] */ __RPC__out FH_BACKUP_STATUS *BackupStatus) = 0;
virtual HRESULT STDMETHODCALLTYPE SetBackupStatus(
/* [in] */ FH_BACKUP_STATUS BackupStatus) = 0;
virtual HRESULT STDMETHODCALLTYPE GetDefaultTarget(
/* [out] */ __RPC__deref_out_opt IFhTarget **DefaultTarget) = 0;
virtual HRESULT STDMETHODCALLTYPE ValidateTarget(
/* [in] */ __RPC__in BSTR TargetUrl,
/* [out] */ __RPC__out PFH_DEVICE_VALIDATION_RESULT ValidationResult) = 0;
virtual HRESULT STDMETHODCALLTYPE ProvisionAndSetNewTarget(
/* [in] */ __RPC__in BSTR TargetUrl,
/* [in] */ __RPC__in BSTR TargetName) = 0;
virtual HRESULT STDMETHODCALLTYPE ChangeDefaultTargetRecommendation(
/* [in] */ BOOL Recommend) = 0;
virtual HRESULT STDMETHODCALLTYPE QueryProtectionStatus(
/* [out] */ __RPC__out DWORD *ProtectionState,
/* [out] */ __RPC__deref_out_opt BSTR *ProtectedUntilTime) = 0;
};
#else /* C style interface */
typedef struct IFhConfigMgrVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IFhConfigMgr * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
_COM_Outptr_ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IFhConfigMgr * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IFhConfigMgr * This);
HRESULT ( STDMETHODCALLTYPE *LoadConfiguration )(
__RPC__in IFhConfigMgr * This);
HRESULT ( STDMETHODCALLTYPE *CreateDefaultConfiguration )(
__RPC__in IFhConfigMgr * This,
/* [in] */ BOOL OverwriteIfExists);
HRESULT ( STDMETHODCALLTYPE *SaveConfiguration )(
__RPC__in IFhConfigMgr * This);
HRESULT ( STDMETHODCALLTYPE *AddRemoveExcludeRule )(
__RPC__in IFhConfigMgr * This,
/* [in] */ BOOL Add,
/* [in] */ FH_PROTECTED_ITEM_CATEGORY Category,
/* [in] */ __RPC__in BSTR Item);
HRESULT ( STDMETHODCALLTYPE *GetIncludeExcludeRules )(
__RPC__in IFhConfigMgr * This,
/* [in] */ BOOL Include,
/* [in] */ FH_PROTECTED_ITEM_CATEGORY Category,
/* [out] */ __RPC__deref_out_opt IFhScopeIterator **Iterator);
HRESULT ( STDMETHODCALLTYPE *GetLocalPolicy )(
__RPC__in IFhConfigMgr * This,
/* [in] */ FH_LOCAL_POLICY_TYPE LocalPolicyType,
/* [out] */ __RPC__out ULONGLONG *PolicyValue);
HRESULT ( STDMETHODCALLTYPE *SetLocalPolicy )(
__RPC__in IFhConfigMgr * This,
/* [in] */ FH_LOCAL_POLICY_TYPE LocalPolicyType,
/* [in] */ ULONGLONG PolicyValue);
HRESULT ( STDMETHODCALLTYPE *GetBackupStatus )(
__RPC__in IFhConfigMgr * This,
/* [out] */ __RPC__out FH_BACKUP_STATUS *BackupStatus);
HRESULT ( STDMETHODCALLTYPE *SetBackupStatus )(
__RPC__in IFhConfigMgr * This,
/* [in] */ FH_BACKUP_STATUS BackupStatus);
HRESULT ( STDMETHODCALLTYPE *GetDefaultTarget )(
__RPC__in IFhConfigMgr * This,
/* [out] */ __RPC__deref_out_opt IFhTarget **DefaultTarget);
HRESULT ( STDMETHODCALLTYPE *ValidateTarget )(
__RPC__in IFhConfigMgr * This,
/* [in] */ __RPC__in BSTR TargetUrl,
/* [out] */ __RPC__out PFH_DEVICE_VALIDATION_RESULT ValidationResult);
HRESULT ( STDMETHODCALLTYPE *ProvisionAndSetNewTarget )(
__RPC__in IFhConfigMgr * This,
/* [in] */ __RPC__in BSTR TargetUrl,
/* [in] */ __RPC__in BSTR TargetName);
HRESULT ( STDMETHODCALLTYPE *ChangeDefaultTargetRecommendation )(
__RPC__in IFhConfigMgr * This,
/* [in] */ BOOL Recommend);
HRESULT ( STDMETHODCALLTYPE *QueryProtectionStatus )(
__RPC__in IFhConfigMgr * This,
/* [out] */ __RPC__out DWORD *ProtectionState,
/* [out] */ __RPC__deref_out_opt BSTR *ProtectedUntilTime);
END_INTERFACE
} IFhConfigMgrVtbl;
interface IFhConfigMgr
{
CONST_VTBL struct IFhConfigMgrVtbl *lpVtbl;
};
然而,文件夹/库可以通过桌面设置界面包含在文件历史记录中。所以我显然错过了一些东西。
文件历史记录保护范围是一组受支持的文件 通过文件历史记录功能向上。它包含包含规则和 排除规则。 默认保护范围包括所有用户的所有文件夹 库以及"联系人"、"桌面"和"收藏夹"文件夹。
请参阅 "IFhConfigMgr::AddRemoveExcludeRule method"。
因此,您不需要添加"包含"文件夹或库,只需在不需要备份文件夹的文件历史记录时添加"排除"即可。
AFAICT,没有这样的API。 作为一种超级笨拙且不推荐的解决方法,我的脚本直接编辑了Config1.xml
文件并在%LOCALAPPDATA%/Microsoft/Windows/FileHistory/Configuration
中Config2.xml
文件。 不确定是否有必要,但我也会在进行编辑之前停止并禁用文件历史记录服务。
(不,我不知道为什么有两个相同的配置文件(