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
- ExchangeUtilities.cs
- QilBinary.cs
- CompareInfo.cs
- ReaderOutput.cs
- InstanceView.cs
- autovalidator.cs
- Int32Rect.cs
- EventLogPermission.cs
- WSTrustFeb2005.cs
- WhitespaceRule.cs
- DrawListViewItemEventArgs.cs
- TextShapeableCharacters.cs
- CalendarDay.cs
- MultipartIdentifier.cs
- SiteMembershipCondition.cs
- Process.cs
- CodeObject.cs
- SafeCertificateContext.cs
- GC.cs
- RegisteredHiddenField.cs
- Sentence.cs
- MouseCaptureWithinProperty.cs
- ClickablePoint.cs
- XmlDocumentFieldSchema.cs
- EntityParameter.cs
- hwndwrapper.cs
- ExceptionUtil.cs
- WebRequestModuleElement.cs
- DropDownList.cs
- DesignerFrame.cs
- PhysicalFontFamily.cs
- TableAutomationPeer.cs
- LinqDataSourceInsertEventArgs.cs
- MaskedTextProvider.cs
- DataContractSerializerServiceBehavior.cs
- Deflater.cs
- MenuStrip.cs
- TaskFactory.cs
- ButtonRenderer.cs
- BackgroundFormatInfo.cs
- UnmanagedMemoryStream.cs
- ProfileManager.cs
- EntityDataSourceDataSelection.cs
- SqlConnectionString.cs
- BindingsCollection.cs
- RouteUrlExpressionBuilder.cs
- TableCell.cs
- CollectionViewGroup.cs
- CharacterMetricsDictionary.cs
- CollectionDataContract.cs
- HashCodeCombiner.cs
- DateTimeFormatInfo.cs
- OpenFileDialog.cs
- ServiceNotStartedException.cs
- ScrollEventArgs.cs
- HierarchicalDataSourceDesigner.cs
- ProfileInfo.cs
- XmlDataSourceView.cs
- SqlReferenceCollection.cs
- Style.cs
- SingletonInstanceContextProvider.cs
- Attributes.cs
- MarkupCompilePass1.cs
- remotingproxy.cs
- EncodingInfo.cs
- EntitySqlQueryState.cs
- UIAgentAsyncBeginRequest.cs
- ItemContainerGenerator.cs
- NativeMethods.cs
- DetailsViewUpdatedEventArgs.cs
- CompilerWrapper.cs
- GlobalId.cs
- WinCategoryAttribute.cs
- RSACryptoServiceProvider.cs
- ReverseQueryOperator.cs
- DateTimeConstantAttribute.cs
- BamlLocalizableResourceKey.cs
- GrammarBuilderPhrase.cs
- BufferedWebEventProvider.cs
- RTLAwareMessageBox.cs
- BezierSegment.cs
- FlagsAttribute.cs
- TypeNameConverter.cs
- BufferModesCollection.cs
- ListViewItemCollectionEditor.cs
- TimeSpanValidator.cs
- SerializerDescriptor.cs
- EntityDataSourceDesigner.cs
- CommandEventArgs.cs
- HasCopySemanticsAttribute.cs
- RelationshipWrapper.cs
- mediapermission.cs
- QuaternionKeyFrameCollection.cs
- DataGridToolTip.cs
- LinqDataSourceDeleteEventArgs.cs
- InvokePattern.cs
- ProfileBuildProvider.cs
- SqlCacheDependencyDatabaseCollection.cs
- WmlCalendarAdapter.cs
- Popup.cs