Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / AppModel / ProgressPage.cs / 1561345 / ProgressPage.cs
//+------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// Description:
// Deployment progress page. This is primarily a proxy to the native progress page, which supersedes
// the managed one from up to v3.5. See Host\DLL\ProgressPage.hxx for details.
//
// History:
// 2007/12/xx [....] Created
//
//-----------------------------------------------------------------------
using System;
using System.Runtime.InteropServices;
using System.Windows.Interop;
using System.Windows.Threading;
using System.Security;
// Disambiguate MS.Internal.HRESULT...
using HR = MS.Internal.Interop.HRESULT;
namespace MS.Internal.AppModel
{
///
/// Critical due to SUC.
/// Even if a partilar method is considered safe, applying [SecurityTreatAsSafe] to it here won't help
/// much, because the transparency model still requires SUC-d methods to be called only from
/// SecurityCritical ones.
///
[ComImport, Guid("1f681651-1024-4798-af36-119bbe5e5665")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[SecurityCritical, SuppressUnmanagedCodeSecurity]
interface INativeProgressPage
{
[PreserveSig]
HR Show();
[PreserveSig]
HR Hide();
[PreserveSig]
HR ShowProgressMessage(string message);
[PreserveSig]
HR SetApplicationName(string appName);
[PreserveSig]
HR SetPublisherName(string publisherName);
[PreserveSig]
HR OnDownloadProgress(ulong bytesDownloaded, ulong bytesTotal);
};
///
/// IProgressPage is public. It was introduced for the Media Center integration, which is now considered
/// deprecated, but we have to support it at least for as long as we keep doing in-place upgrades.
///
interface IProgressPage2 : IProgressPage
{
void ShowProgressMessage(string message);
};
class NativeProgressPageProxy : IProgressPage2
{
internal NativeProgressPageProxy(INativeProgressPage npp)
{
_npp = npp;
}
///
/// Critical: Calls a SUC'd COM interface method.
/// TreatAsSafe: No concern about "spoofing" progress messages. A web site could just render an HTML
/// page that looks like our progress page.
///
[SecurityCritical, SecurityTreatAsSafe]
public void ShowProgressMessage(string message)
{
// Ignore the error code. This page is transient and it's not the end of the world if this doesn't show up.
HR hr = _npp.ShowProgressMessage(message);
}
public Uri DeploymentPath
{
set { }
get { throw new System.NotImplementedException(); }
}
///
/// The native progress page sends a stop/cancel request to its host object, which then calls
/// IBrowserHostServices.ExecCommand(OLECMDID_STOP).
///
public DispatcherOperationCallback StopCallback
{
set { }
get { throw new System.NotImplementedException(); }
}
///
/// The native progress page sends a Refresh request to its host object, which then calls
/// IBrowserHostServices.ExecCommand(OLECMDID_REFRESH).
///
public System.Windows.Threading.DispatcherOperationCallback RefreshCallback
{
set { }
get { return null; }
}
///
/// Critical: Calls a SUC'd COM interface method.
/// TreatAsSafe: 1) The application name is coming from the manifest, so it could be anything.
/// This means the input doesn't need to be trusted.
/// 2) Setting arbitrary application/publisher can be considered spoofing, but a malicious website
/// could fake the whole progress page and still achieve the same.
///
public string ApplicationName
{
[SecurityCritical, SecurityTreatAsSafe]
set
{
// Ignore the error code. This page is transient and it's not the end of the world if this doesn't show up.
HR hr = _npp.SetApplicationName(value);
}
get { throw new System.NotImplementedException(); }
}
///
/// Critical: Calls a SUC'd COM interface method.
/// TreatAsSafe: 1) The publisher name is coming from the manifest, so it could be anything.
/// This means the input doesn't need to be trusted.
/// 2) Setting arbitrary application/publisher can be considered spoofing, but a malicious website
/// could fake the whole progress page and still achieve the same.
///
public string PublisherName
{
[SecurityCritical, SecurityTreatAsSafe]
set
{
// Ignore the error code. This page is transient and it's not the end of the world if this doesn't show up.
HR hr = _npp.SetPublisherName(value);
}
get { throw new System.NotImplementedException(); }
}
///
/// Critical: Calls a SUC'd COM interface method.
/// TreatAsSafe: Sending even arbitrary progress updates not considered harmful.
///
[SecurityCritical, SecurityTreatAsSafe]
public void UpdateProgress(long bytesDownloaded, long bytesTotal)
{
// Ignore the error code. This page is transient and it's not the end of the world if this doesn't show up.
HR hr = _npp.OnDownloadProgress((ulong)bytesDownloaded, (ulong)bytesTotal);
}
INativeProgressPage _npp;
};
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//+------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// Description:
// Deployment progress page. This is primarily a proxy to the native progress page, which supersedes
// the managed one from up to v3.5. See Host\DLL\ProgressPage.hxx for details.
//
// History:
// 2007/12/xx [....] Created
//
//-----------------------------------------------------------------------
using System;
using System.Runtime.InteropServices;
using System.Windows.Interop;
using System.Windows.Threading;
using System.Security;
// Disambiguate MS.Internal.HRESULT...
using HR = MS.Internal.Interop.HRESULT;
namespace MS.Internal.AppModel
{
///
/// Critical due to SUC.
/// Even if a partilar method is considered safe, applying [SecurityTreatAsSafe] to it here won't help
/// much, because the transparency model still requires SUC-d methods to be called only from
/// SecurityCritical ones.
///
[ComImport, Guid("1f681651-1024-4798-af36-119bbe5e5665")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[SecurityCritical, SuppressUnmanagedCodeSecurity]
interface INativeProgressPage
{
[PreserveSig]
HR Show();
[PreserveSig]
HR Hide();
[PreserveSig]
HR ShowProgressMessage(string message);
[PreserveSig]
HR SetApplicationName(string appName);
[PreserveSig]
HR SetPublisherName(string publisherName);
[PreserveSig]
HR OnDownloadProgress(ulong bytesDownloaded, ulong bytesTotal);
};
///
/// IProgressPage is public. It was introduced for the Media Center integration, which is now considered
/// deprecated, but we have to support it at least for as long as we keep doing in-place upgrades.
///
interface IProgressPage2 : IProgressPage
{
void ShowProgressMessage(string message);
};
class NativeProgressPageProxy : IProgressPage2
{
internal NativeProgressPageProxy(INativeProgressPage npp)
{
_npp = npp;
}
///
/// Critical: Calls a SUC'd COM interface method.
/// TreatAsSafe: No concern about "spoofing" progress messages. A web site could just render an HTML
/// page that looks like our progress page.
///
[SecurityCritical, SecurityTreatAsSafe]
public void ShowProgressMessage(string message)
{
// Ignore the error code. This page is transient and it's not the end of the world if this doesn't show up.
HR hr = _npp.ShowProgressMessage(message);
}
public Uri DeploymentPath
{
set { }
get { throw new System.NotImplementedException(); }
}
///
/// The native progress page sends a stop/cancel request to its host object, which then calls
/// IBrowserHostServices.ExecCommand(OLECMDID_STOP).
///
public DispatcherOperationCallback StopCallback
{
set { }
get { throw new System.NotImplementedException(); }
}
///
/// The native progress page sends a Refresh request to its host object, which then calls
/// IBrowserHostServices.ExecCommand(OLECMDID_REFRESH).
///
public System.Windows.Threading.DispatcherOperationCallback RefreshCallback
{
set { }
get { return null; }
}
///
/// Critical: Calls a SUC'd COM interface method.
/// TreatAsSafe: 1) The application name is coming from the manifest, so it could be anything.
/// This means the input doesn't need to be trusted.
/// 2) Setting arbitrary application/publisher can be considered spoofing, but a malicious website
/// could fake the whole progress page and still achieve the same.
///
public string ApplicationName
{
[SecurityCritical, SecurityTreatAsSafe]
set
{
// Ignore the error code. This page is transient and it's not the end of the world if this doesn't show up.
HR hr = _npp.SetApplicationName(value);
}
get { throw new System.NotImplementedException(); }
}
///
/// Critical: Calls a SUC'd COM interface method.
/// TreatAsSafe: 1) The publisher name is coming from the manifest, so it could be anything.
/// This means the input doesn't need to be trusted.
/// 2) Setting arbitrary application/publisher can be considered spoofing, but a malicious website
/// could fake the whole progress page and still achieve the same.
///
public string PublisherName
{
[SecurityCritical, SecurityTreatAsSafe]
set
{
// Ignore the error code. This page is transient and it's not the end of the world if this doesn't show up.
HR hr = _npp.SetPublisherName(value);
}
get { throw new System.NotImplementedException(); }
}
///
/// Critical: Calls a SUC'd COM interface method.
/// TreatAsSafe: Sending even arbitrary progress updates not considered harmful.
///
[SecurityCritical, SecurityTreatAsSafe]
public void UpdateProgress(long bytesDownloaded, long bytesTotal)
{
// Ignore the error code. This page is transient and it's not the end of the world if this doesn't show up.
HR hr = _npp.OnDownloadProgress((ulong)bytesDownloaded, (ulong)bytesTotal);
}
INativeProgressPage _npp;
};
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ProjectionCamera.cs
- UseLicense.cs
- ParserContext.cs
- OutputScopeManager.cs
- EntityDataSourceEntitySetNameItem.cs
- LinqDataSourceSelectEventArgs.cs
- FrameworkElement.cs
- Renderer.cs
- WebConfigurationFileMap.cs
- JsonMessageEncoderFactory.cs
- Message.cs
- LinearGradientBrush.cs
- DataGridViewSelectedRowCollection.cs
- _StreamFramer.cs
- OdbcErrorCollection.cs
- SharedStatics.cs
- InputLanguageProfileNotifySink.cs
- MessageQueuePermissionEntryCollection.cs
- DefaultHttpHandler.cs
- StdValidatorsAndConverters.cs
- TypeKeyValue.cs
- RtfToXamlReader.cs
- ReachDocumentReferenceCollectionSerializerAsync.cs
- DynamicDataRouteHandler.cs
- XpsResourcePolicy.cs
- ReadOnlyDataSourceView.cs
- CollectionConverter.cs
- RegexRunnerFactory.cs
- XamlSerializerUtil.cs
- UTF7Encoding.cs
- SafeRightsManagementHandle.cs
- SqlReferenceCollection.cs
- ThemeDirectoryCompiler.cs
- BinaryMessageFormatter.cs
- SqlFactory.cs
- ReferenceEqualityComparer.cs
- IChannel.cs
- WebPartAuthorizationEventArgs.cs
- StringFormat.cs
- ExtendedProtectionPolicyElement.cs
- DataGridViewCellStyle.cs
- WaitHandle.cs
- ProcessInputEventArgs.cs
- ReadOnlyCollection.cs
- PhysicalFontFamily.cs
- OracleMonthSpan.cs
- Validator.cs
- CollectionViewGroup.cs
- CodeDomExtensionMethods.cs
- OrthographicCamera.cs
- Clipboard.cs
- HtmlImage.cs
- HotSpot.cs
- PeekCompletedEventArgs.cs
- MethodRental.cs
- Point3DCollection.cs
- HttpProxyCredentialType.cs
- JpegBitmapEncoder.cs
- SqlNodeTypeOperators.cs
- CompilationUnit.cs
- TimeoutException.cs
- ImageClickEventArgs.cs
- XmlILModule.cs
- SignatureToken.cs
- RelatedPropertyManager.cs
- SqlGenerator.cs
- XmlDataProvider.cs
- selecteditemcollection.cs
- MembershipSection.cs
- TableColumnCollection.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- HostedBindingBehavior.cs
- GlyphInfoList.cs
- CompositeScriptReferenceEventArgs.cs
- UpdatePanelTriggerCollection.cs
- StylusShape.cs
- HashJoinQueryOperatorEnumerator.cs
- MultipartContentParser.cs
- HttpListenerContext.cs
- BaseDataListActionList.cs
- XPathBinder.cs
- WebMessageFormatHelper.cs
- ThicknessConverter.cs
- DefaultShape.cs
- CallbackHandler.cs
- EmptyImpersonationContext.cs
- OleDbCommand.cs
- HtmlInputRadioButton.cs
- TdsParserSafeHandles.cs
- TextParentUndoUnit.cs
- AutoGeneratedField.cs
- DesignerVerbCollection.cs
- PrintingPermission.cs
- SubMenuStyleCollection.cs
- BooleanKeyFrameCollection.cs
- Peer.cs
- HttpListenerResponse.cs
- OuterGlowBitmapEffect.cs
- webeventbuffer.cs
- PeerUnsafeNativeCryptMethods.cs