Windows 文件历史记录 API:添加包含规则



我正在构建一个基于 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/ConfigurationConfig2.xml文件。 不确定是否有必要,但我也会在进行编辑之前停止并禁用文件历史记录服务。

(不,我不知道为什么有两个相同的配置文件(

最新更新