Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- EditCommandColumn.cs
- ITreeGenerator.cs
- Blend.cs
- CharacterBufferReference.cs
- FixedSOMSemanticBox.cs
- EntryIndex.cs
- Crc32.cs
- ShaperBuffers.cs
- AsyncStreamReader.cs
- DefaultHttpHandler.cs
- RoleServiceManager.cs
- controlskin.cs
- ControlValuePropertyAttribute.cs
- BindingContext.cs
- MessageDescription.cs
- MasterPageCodeDomTreeGenerator.cs
- DataGridDesigner.cs
- Parameter.cs
- ExpressionEditorAttribute.cs
- Path.cs
- HtmlTableRowCollection.cs
- BrowserDefinition.cs
- InputScope.cs
- AppSettingsReader.cs
- ToolStrip.cs
- DataBoundControlActionList.cs
- SqlConnectionHelper.cs
- FixUpCollection.cs
- SequentialUshortCollection.cs
- PassportAuthentication.cs
- ISessionStateStore.cs
- TextCollapsingProperties.cs
- AccessText.cs
- URI.cs
- MsmqIntegrationProcessProtocolHandler.cs
- VirtualPathProvider.cs
- XAMLParseException.cs
- EntitySqlQueryBuilder.cs
- ControlType.cs
- RestHandler.cs
- ProxySimple.cs
- CultureSpecificStringDictionary.cs
- HelpProvider.cs
- TextTreeDeleteContentUndoUnit.cs
- ISAPIApplicationHost.cs
- SoapFault.cs
- TreeViewItemAutomationPeer.cs
- Scheduling.cs
- EventLogTraceListener.cs
- Event.cs
- HttpRuntimeSection.cs
- PersonalizablePropertyEntry.cs
- ReferencedType.cs
- MasterPage.cs
- CapacityStreamGeometryContext.cs
- EdmComplexTypeAttribute.cs
- LinearKeyFrames.cs
- keycontainerpermission.cs
- ConstrainedGroup.cs
- TypeUnloadedException.cs
- DeflateInput.cs
- WebCategoryAttribute.cs
- AttachedPropertyDescriptor.cs
- BindingManagerDataErrorEventArgs.cs
- unitconverter.cs
- XPathBuilder.cs
- SimpleHandlerBuildProvider.cs
- Message.cs
- Rijndael.cs
- CodeThrowExceptionStatement.cs
- XXXInfos.cs
- AttributeSetAction.cs
- OutputScopeManager.cs
- TargetParameterCountException.cs
- ExpressionTextBoxAutomationPeer.cs
- BaseTemplateBuildProvider.cs
- XamlStream.cs
- MouseActionConverter.cs
- ArglessEventHandlerProxy.cs
- DataBinding.cs
- __Error.cs
- DataComponentGenerator.cs
- NavigationExpr.cs
- OptimalTextSource.cs
- ReadOnlyAttribute.cs
- StringPropertyBuilder.cs
- WSFederationHttpSecurityElement.cs
- ErrorActivity.cs
- SimpleLine.cs
- SystemColors.cs
- ImageFormatConverter.cs
- PageBuildProvider.cs
- WorkflowPrinting.cs
- InkPresenterAutomationPeer.cs
- DbDataSourceEnumerator.cs
- HierarchicalDataSourceControl.cs
- CommaDelimitedStringAttributeCollectionConverter.cs
- UpDownEvent.cs
- PopupEventArgs.cs
- ComponentChangedEvent.cs