数据丢失预防策略使OpenMsgStore失败(0x80040312)



启用DLP策略时,赎回失败,并返回错误:"所有业务电子邮件都基于组织中的策略集受到保护。打开受保护的电子邮件时出错">

ulLowLevelError:2147746578(即0x80040312(
ulContext:805701633(0x30060801(

有办法解决这个问题吗?

尝试访问Store对象的IPMRootFolder属性时出错:

// A previous version of the code was multi-threaded, it is no longer.
Session = OutlookRpcLoader.new_RDOSession();
Session.Logon(ProfileName: profile, ShowDialog: false, NewSession: true);
var stores = Session.Stores;
var store = stores["{STORE-NAME}"];
var root = store.IPMRootFolder;

调用堆栈显示Redemption.IRDOStore.get_IPMRootFolder()引发了异常。

编辑

当使用通过.NET中的RedemptionLoader类加载的Redemption版本5.22.0.5498(无注册表COM(时,可以看到这一点
使用CreateObject()从VBScript使用Redemption版本5.19.0.5238进行测试时,不会发生错误
v5.19和v5.22之间会有什么变化吗?

首先,您需要检测代码运行的位置,无论是前台线程还是后台线程。我建议检查进程的ThreadID。前台线程的值设置为1。所有后台线程的值都将大于1。如果是辅助线程,则需要在要使用的辅助线程上创建一个新的赎回会话,并将MAPIOBJECT属性设置为从主线程检索的对象。例如,VB.NET中的原始草图:

Dim PrimaryRDOSession As New Redemption.RDOSession()
PrimaryRDOSession.Login([...])
Dim WorkerThread as New System.Threading.Thread(AddressOf ThreadProc)
WorkerThread.Start(PrimaryRDOSession.MAPIOBJECT)
Sub ThreadProc(ByVal param as Object)
Dim ThdRDOSession As New Redemption.RDOSession()
ThdRDOSession.MAPIOBJECT = param
' do other stuff
End Sub

如果您在辅助线程上,请不要使用在主线程上创建的对象。确保在使用对象时保持一致。

我认为这是由AppLocker规则阻止未签名二进制文件引起的。解决方案是对文件进行代码签名或将程序添加到AppLocker允许列表中。

相关内容

  • 没有找到相关文章

最新更新