public HResult BroadcastPreMessageFilter(ref NiMessage message)
{
try
{
if (_preMessageFilterRecursion > 0)
return HResult.False;
_preMessageFilterRecursion++;
try
{
// We delay resolve the package manager because it is created
// after NiShell is.
if (_packageManager == null)
_packageManager = (NiPackageManager)GetService(typeof(INiPackageManager));
if (MessageFilterUtil.InvokeMessageFilter(ref message))
return HResult.OK;
foreach (var package in _packageManager.Packages)
{
var preMessageFilter = package.Package as INiPreMessageFilter;
if (
preMessageFilter != null &&
ErrorUtil.ThrowOnFailure(preMessageFilter.PreFilterMessage(ref message))
)
return HResult.OK;
}
return HResult.False;
}
finally
{
_preMessageFilterRecursion--;
}
}
catch (Exception ex)
{
return ErrorUtil.GetHResult(ex);
}
}