Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Framework / MS / Internal / AppModel / ContentFilePart.cs / 1 / ContentFilePart.cs
//------------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
// Description:
// ContentFilePart is an implementation of the abstract PackagePart class. It contains an override for GetStreamCore.
//
// History:
// 6/16/2005: Erichar - Initial creation.
//
//-----------------------------------------------------------------------------
using System;
using System.IO.Packaging;
using System.Windows;
using System.Windows.Resources;
using System.IO;
using System.Resources;
using System.Globalization;
using System.Security;
using System.Security.Permissions;
using System.Windows.Navigation;
using System.Diagnostics;
using System.Reflection;
namespace MS.Internal.AppModel
{
///
/// ContentFilePart is an implementation of the abstract PackagePart class. It contains an override for GetStreamCore.
///
internal class ContentFilePart : System.IO.Packaging.PackagePart
{
//-----------------------------------------------------
//
// Public Constructors
//
//-----------------------------------------------------
#region Public Constructors
///
/// Critical - Accesses member _fullPath.
/// TreatAsSafe - Initializing _fullPath to null is safe
///
[SecurityCritical, SecurityTreatAsSafe]
internal ContentFilePart(Package container, Uri uri) :
base(container, uri)
{
Invariant.Assert(Application.ResourceAssembly != null, "If the entry assembly is null no ContentFileParts should be created");
_fullPath = null;
}
#endregion
//------------------------------------------------------
//
// Protected Methods
//
//-----------------------------------------------------
#region Protected Methods
///
/// Critical - Calls critical methods GetEntryAssemblyLocation() and CriticalOpenFile()
/// and accesses critical member _fullPath.
/// TreatAsSafe - The Uri supplied at construction is read only and must be on the list
/// of loose content files supplied at application compile time. It is ok
/// to return the stream because we know that the stream will be read only
/// and cannot be used to get the application into an invalid state.
///
[SecurityCritical, SecurityTreatAsSafe]
protected override Stream GetStreamCore(FileMode mode, FileAccess access)
{
Stream stream = null;
if (_fullPath == null)
{
// File name will be a path relative to the applications directory.
// - We do not want to use SiteOfOriginContainer.SiteOfOrigin because
// for deployed files the files are deployed with the application.
Uri codeBase = GetEntryAssemblyLocation();
string assemblyName, assemblyVersion, assemblyKey;
string filePath;
// For now, only Application assembly supports content files,
// so we can simply ignore the assemblyname etc.
// In the future, we may extend this support for regular library assembly,
// assemblyName will be used to predict the right file path.
BaseUriHelper.GetAssemblyNameAndPart(Uri, out filePath, out assemblyName, out assemblyVersion, out assemblyKey);
// filePath should not have leading slash. GetAssemblyNameAndPart( ) can guarantee it.
Uri file = new Uri(codeBase, filePath);
_fullPath = file.LocalPath;
}
stream = CriticalOpenFile(_fullPath);
if (stream == null)
{
throw new IOException(SR.Get(SRID.UnableToLocateResource, Uri.ToString()));
}
return stream;
}
protected override string GetContentTypeCore()
{
return MS.Internal.MimeTypeMapper.GetMimeTypeFromUri(new Uri(Uri.ToString(),UriKind.RelativeOrAbsolute)).ToString();
}
#endregion
//------------------------------------------------------
//
// Private Methods
//
//------------------------------------------------------
#region Private Methods
///
/// Asserts for to get the location of the entry assembly
///
[SecurityCritical]
private Uri GetEntryAssemblyLocation()
{
Uri entryLocation = null;
System.Security.PermissionSet permissionSet = new PermissionSet(null);
permissionSet.AddPermission(new FileIOPermission(PermissionState.Unrestricted));
permissionSet.Assert();
try
{
entryLocation = new Uri(Application.ResourceAssembly.CodeBase);
}
catch(Exception ex)
{
if (CriticalExceptions.IsCriticalException(ex))
{
throw;
}
// `Swallow any other exceptions to avoid disclosing the critical path.
//
// Possible Exceptions: ArgumentException, ArgumentNullException, PathTooLongException
// DirectoryNotFoundException, IOException, UnauthorizedAccessException,
// ArgumentOutOfRangeException, FileNotFoundException, NotSupportedException
}
finally
{
CodeAccessPermission.RevertAssert();
}
return entryLocation;
}
///
/// Asserts to open the file
///
[SecurityCritical]
private Stream CriticalOpenFile(string filename)
{
Stream s = null;
FileIOPermission filePermission = new FileIOPermission(FileIOPermissionAccess.Read, filename);
filePermission.Assert();
try
{
s = System.IO.File.Open(filename, FileMode.Open, FileAccess.Read, ResourceContainer.FileShare);
}
finally
{
CodeAccessPermission.RevertAssert();
}
return s;
}
#endregion
//-----------------------------------------------------
//
// Private Fields
//
//------------------------------------------------------
#region Private Members
///
/// Contains critical path information that shouldn't be disclosed.
///
[SecurityCritical]
private string _fullPath;
#endregion Private Members
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
// Description:
// ContentFilePart is an implementation of the abstract PackagePart class. It contains an override for GetStreamCore.
//
// History:
// 6/16/2005: Erichar - Initial creation.
//
//-----------------------------------------------------------------------------
using System;
using System.IO.Packaging;
using System.Windows;
using System.Windows.Resources;
using System.IO;
using System.Resources;
using System.Globalization;
using System.Security;
using System.Security.Permissions;
using System.Windows.Navigation;
using System.Diagnostics;
using System.Reflection;
namespace MS.Internal.AppModel
{
///
/// ContentFilePart is an implementation of the abstract PackagePart class. It contains an override for GetStreamCore.
///
internal class ContentFilePart : System.IO.Packaging.PackagePart
{
//-----------------------------------------------------
//
// Public Constructors
//
//-----------------------------------------------------
#region Public Constructors
///
/// Critical - Accesses member _fullPath.
/// TreatAsSafe - Initializing _fullPath to null is safe
///
[SecurityCritical, SecurityTreatAsSafe]
internal ContentFilePart(Package container, Uri uri) :
base(container, uri)
{
Invariant.Assert(Application.ResourceAssembly != null, "If the entry assembly is null no ContentFileParts should be created");
_fullPath = null;
}
#endregion
//------------------------------------------------------
//
// Protected Methods
//
//-----------------------------------------------------
#region Protected Methods
///
/// Critical - Calls critical methods GetEntryAssemblyLocation() and CriticalOpenFile()
/// and accesses critical member _fullPath.
/// TreatAsSafe - The Uri supplied at construction is read only and must be on the list
/// of loose content files supplied at application compile time. It is ok
/// to return the stream because we know that the stream will be read only
/// and cannot be used to get the application into an invalid state.
///
[SecurityCritical, SecurityTreatAsSafe]
protected override Stream GetStreamCore(FileMode mode, FileAccess access)
{
Stream stream = null;
if (_fullPath == null)
{
// File name will be a path relative to the applications directory.
// - We do not want to use SiteOfOriginContainer.SiteOfOrigin because
// for deployed files the files are deployed with the application.
Uri codeBase = GetEntryAssemblyLocation();
string assemblyName, assemblyVersion, assemblyKey;
string filePath;
// For now, only Application assembly supports content files,
// so we can simply ignore the assemblyname etc.
// In the future, we may extend this support for regular library assembly,
// assemblyName will be used to predict the right file path.
BaseUriHelper.GetAssemblyNameAndPart(Uri, out filePath, out assemblyName, out assemblyVersion, out assemblyKey);
// filePath should not have leading slash. GetAssemblyNameAndPart( ) can guarantee it.
Uri file = new Uri(codeBase, filePath);
_fullPath = file.LocalPath;
}
stream = CriticalOpenFile(_fullPath);
if (stream == null)
{
throw new IOException(SR.Get(SRID.UnableToLocateResource, Uri.ToString()));
}
return stream;
}
protected override string GetContentTypeCore()
{
return MS.Internal.MimeTypeMapper.GetMimeTypeFromUri(new Uri(Uri.ToString(),UriKind.RelativeOrAbsolute)).ToString();
}
#endregion
//------------------------------------------------------
//
// Private Methods
//
//------------------------------------------------------
#region Private Methods
///
/// Asserts for to get the location of the entry assembly
///
[SecurityCritical]
private Uri GetEntryAssemblyLocation()
{
Uri entryLocation = null;
System.Security.PermissionSet permissionSet = new PermissionSet(null);
permissionSet.AddPermission(new FileIOPermission(PermissionState.Unrestricted));
permissionSet.Assert();
try
{
entryLocation = new Uri(Application.ResourceAssembly.CodeBase);
}
catch(Exception ex)
{
if (CriticalExceptions.IsCriticalException(ex))
{
throw;
}
// `Swallow any other exceptions to avoid disclosing the critical path.
//
// Possible Exceptions: ArgumentException, ArgumentNullException, PathTooLongException
// DirectoryNotFoundException, IOException, UnauthorizedAccessException,
// ArgumentOutOfRangeException, FileNotFoundException, NotSupportedException
}
finally
{
CodeAccessPermission.RevertAssert();
}
return entryLocation;
}
///
/// Asserts to open the file
///
[SecurityCritical]
private Stream CriticalOpenFile(string filename)
{
Stream s = null;
FileIOPermission filePermission = new FileIOPermission(FileIOPermissionAccess.Read, filename);
filePermission.Assert();
try
{
s = System.IO.File.Open(filename, FileMode.Open, FileAccess.Read, ResourceContainer.FileShare);
}
finally
{
CodeAccessPermission.RevertAssert();
}
return s;
}
#endregion
//-----------------------------------------------------
//
// Private Fields
//
//------------------------------------------------------
#region Private Members
///
/// Contains critical path information that shouldn't be disclosed.
///
[SecurityCritical]
private string _fullPath;
#endregion Private Members
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Events.cs
- UnauthorizedAccessException.cs
- DateTimeStorage.cs
- ContextMenuStrip.cs
- SafeNativeMethods.cs
- TextProviderWrapper.cs
- ReflectionUtil.cs
- SiteMap.cs
- ContentFileHelper.cs
- OdbcDataAdapter.cs
- TextSegment.cs
- ActiveDocumentEvent.cs
- PopupEventArgs.cs
- WinEventHandler.cs
- DiagnosticTrace.cs
- EntityTypeEmitter.cs
- ToolStripPanelCell.cs
- DataBindingList.cs
- DecimalConverter.cs
- SystemResources.cs
- ToolStripSeparator.cs
- SmiEventSink.cs
- Matrix3D.cs
- Console.cs
- HtmlInputRadioButton.cs
- TypographyProperties.cs
- SecurityTokenValidationException.cs
- SevenBitStream.cs
- WSMessageEncoding.cs
- RequestQueryProcessor.cs
- BindingsSection.cs
- PeerCollaboration.cs
- CounterCreationDataConverter.cs
- AdapterDictionary.cs
- Line.cs
- TransactionValidationBehavior.cs
- RtfControlWordInfo.cs
- AuthorizationSection.cs
- EntitySqlQueryBuilder.cs
- Pair.cs
- ImportContext.cs
- MailDefinition.cs
- DependencyPropertyHelper.cs
- LifetimeManager.cs
- HtmlInputText.cs
- ClientBuildManager.cs
- SvcMapFileSerializer.cs
- DataErrorValidationRule.cs
- RangeBaseAutomationPeer.cs
- DayRenderEvent.cs
- HttpCacheVaryByContentEncodings.cs
- SqlServer2KCompatibilityAnnotation.cs
- MultiBinding.cs
- XmlSchemaSimpleTypeList.cs
- basenumberconverter.cs
- TimeManager.cs
- GenericTypeParameterBuilder.cs
- DataContractSerializerElement.cs
- JsonReader.cs
- ProcessModelInfo.cs
- PieceDirectory.cs
- IdentityHolder.cs
- SqlReferenceCollection.cs
- SharedPerformanceCounter.cs
- __TransparentProxy.cs
- WindowHelperService.cs
- EntityExpressionVisitor.cs
- NullRuntimeConfig.cs
- DesignerProperties.cs
- MsmqVerifier.cs
- BitmapMetadataEnumerator.cs
- QueryContext.cs
- XamlGridLengthSerializer.cs
- HttpRequestTraceRecord.cs
- SettingsPropertyCollection.cs
- DesignerActionService.cs
- MetadataUtil.cs
- TextStore.cs
- ChannelPool.cs
- ToolStripRendererSwitcher.cs
- WebEventCodes.cs
- DataTableClearEvent.cs
- RadioButtonPopupAdapter.cs
- Atom10FormatterFactory.cs
- OrthographicCamera.cs
- Baml2006SchemaContext.cs
- SqlMethods.cs
- MediaContextNotificationWindow.cs
- Literal.cs
- EntityDesignerUtils.cs
- EntityTypeBase.cs
- GeneralTransform.cs
- VarInfo.cs
- BamlLocalizabilityResolver.cs
- PartialClassGenerationTask.cs
- FileSecurity.cs
- isolationinterop.cs
- ForeignConstraint.cs
- DataControlExtensions.cs
- DataRow.cs