Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Media / ColorContextHelper.cs / 1544694 / ColorContextHelper.cs
//------------------------------------------------------------------------------
// Microsoft Windows Client Platform
// Copyright (c) Microsoft Corporation, 2001, 2002, 2003
//
// File: ColorContextHelper.cs
//-----------------------------------------------------------------------------
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using MS.Internal;
using MS.Win32;
using System.Security;
using System.Security.Permissions;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design.Serialization;
using System.Reflection;
using System.Diagnostics;
using System.Globalization;
using Microsoft.Win32.SafeHandles;
using SR=MS.Internal.PresentationCore.SR;
using SRID=MS.Internal.PresentationCore.SRID;
using UnsafeNativeMethodsMilCoreApi=MS.Win32.PresentationCore.UnsafeNativeMethods;
namespace System.Windows.Media
{
#region SafeProfileHandle
internal class SafeProfileHandle : SafeHandleZeroOrMinusOneIsInvalid
{
///
/// Use this constructor if the handle exists at construction time.
///
///
/// Critical: The ctor of the base class requires SecurityPermission
///
[SecurityCritical]
internal SafeProfileHandle()
: base(true)
{
}
///
/// Use this constructor if the handle exists at construction time.
///
///
/// Critical: The ctor of the base class requires SecurityPermission
/// This code calls SetHandle
///
[SecurityCritical]
internal SafeProfileHandle(IntPtr profile)
: base(true)
{
SetHandle(profile);
}
///
/// Critical - calls unmanaged code, not treat as safe because you must
/// validate that handle is a valid color context handle.
///
[SecurityCritical]
protected override bool ReleaseHandle()
{
return UnsafeNativeMethodsMilCoreApi.Mscms.CloseColorProfile(handle);
}
}
#endregion
#region ColorContextHelper
///
/// Helper struct to call into MSCMS color context APIs
///
internal struct ColorContextHelper
{
/// Opens a color profile.
///
/// NOTE: This may fail. It is up to the caller to handle it by checking IsInvalid.
///
///
/// SecurityCritical: Calls unmanaged code, accepts InPtr/unverified data.
///
[SecurityCritical]
internal void OpenColorProfile(ref UnsafeNativeMethods.PROFILE profile)
{
// No need to get rid of the old handle as it will get GC'ed
_profileHandle = UnsafeNativeMethodsMilCoreApi.Mscms.OpenColorProfile(
ref profile,
NativeMethods.PROFILE_READ, // DesiredAccess
NativeMethods.FILE_SHARE_READ, // ShareMode
NativeMethods.OPEN_EXISTING // CreationMode
);
}
/// Retrieves the profile header
///
///
/// NOTE: This may fail. It is up to the caller to handle it by checking the bool.
///
///
/// SecurityCritical: Calls unmanaged code, accepts InPtr/unverified data.
///
[SecurityCritical]
internal bool GetColorProfileHeader(out UnsafeNativeMethods.PROFILEHEADER header)
{
if (IsInvalid)
{
throw new InvalidOperationException(SR.Get(SRID.Image_ColorContextInvalid));
}
return UnsafeNativeMethodsMilCoreApi.Mscms.GetColorProfileHeader(_profileHandle, out header);
}
/// Retrieves the color profile from handle
///
/// SecurityCritical: Calls unmanaged code, accepts InPtr/unverified data.
///
[SecurityCritical]
internal void GetColorProfileFromHandle(byte[] buffer, ref uint bufferSize)
{
Invariant.Assert(buffer == null || bufferSize <= buffer.Length);
if (IsInvalid)
{
throw new InvalidOperationException(SR.Get(SRID.Image_ColorContextInvalid));
}
// If the buffer is null, this function will return FALSE because it didn't actually copy anything. That's fine and that's
// what we want.
if (!UnsafeNativeMethodsMilCoreApi.Mscms.GetColorProfileFromHandle(_profileHandle, buffer, ref bufferSize) && buffer != null)
{
HRESULT.Check(Marshal.GetHRForLastWin32Error());
}
}
///
/// Critical - Accesses critical resource _profileHandle
/// TreatAsSafe - No inputs and just checks if SafeHandle is valid or not.
///
internal bool IsInvalid
{
[SecurityCritical, SecurityTreatAsSafe]
get
{
return _profileHandle == null || _profileHandle.IsInvalid;
}
}
///
/// ProfileHandle
///
///
/// SecurityCritical: This comes out of an elevation needs to be critical and tracked.
///
internal SafeProfileHandle ProfileHandle
{
[SecurityCritical]
get
{
return _profileHandle;
}
}
#region Data members
///
/// SecurityCritical: This comes out of an elevation needs to be critical and tracked.
///
[SecurityCritical]
SafeProfileHandle _profileHandle;
#endregion
}
#endregion
}
// 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
- CounterCreationData.cs
- UnauthorizedWebPart.cs
- RangeBase.cs
- FileStream.cs
- EntityDataSourceDataSelectionPanel.cs
- CapabilitiesState.cs
- DataRelationPropertyDescriptor.cs
- ContentControl.cs
- TextFindEngine.cs
- VSWCFServiceContractGenerator.cs
- RawStylusInputReport.cs
- TaskFormBase.cs
- DbConnectionHelper.cs
- WebPartConnectionsEventArgs.cs
- VisualBrush.cs
- FakeModelItemImpl.cs
- WebPartConnectionsDisconnectVerb.cs
- DependencyObjectType.cs
- SpinWait.cs
- TextRangeBase.cs
- AuthenticatingEventArgs.cs
- ReturnValue.cs
- SHA512Cng.cs
- TailCallAnalyzer.cs
- CatalogPartCollection.cs
- LockCookie.cs
- UserPersonalizationStateInfo.cs
- BookmarkScopeHandle.cs
- SortedSet.cs
- StateManagedCollection.cs
- ServerReliableChannelBinder.cs
- ValidationRuleCollection.cs
- XmlCompatibilityReader.cs
- Debugger.cs
- IgnoreDeviceFilterElement.cs
- RightsManagementInformation.cs
- RelationshipManager.cs
- TileBrush.cs
- DataViewManagerListItemTypeDescriptor.cs
- WebHttpSecurityModeHelper.cs
- DesignerTextViewAdapter.cs
- Expressions.cs
- StoryFragments.cs
- CodeGeneratorOptions.cs
- ParameterCollection.cs
- OdbcRowUpdatingEvent.cs
- TypeListConverter.cs
- LinqDataSourceDeleteEventArgs.cs
- ChtmlSelectionListAdapter.cs
- PenThreadWorker.cs
- ISAPIRuntime.cs
- EndOfStreamException.cs
- DocumentViewerBase.cs
- CurrencyWrapper.cs
- OciEnlistContext.cs
- GenericUI.cs
- StatusBarItemAutomationPeer.cs
- SoapMessage.cs
- RemotingServices.cs
- HtmlElement.cs
- RayMeshGeometry3DHitTestResult.cs
- GenericWebPart.cs
- GcSettings.cs
- TextFindEngine.cs
- CleanUpVirtualizedItemEventArgs.cs
- FormatControl.cs
- TypeSystem.cs
- ResourcePart.cs
- NumberSubstitution.cs
- PartialCachingControl.cs
- DataKeyCollection.cs
- IERequestCache.cs
- MemberInitExpression.cs
- ProfileSettings.cs
- DrawingBrush.cs
- DetailsViewDeleteEventArgs.cs
- IIS7WorkerRequest.cs
- ControllableStoryboardAction.cs
- BrowserDefinition.cs
- AssemblyAttributesGoHere.cs
- PenThreadPool.cs
- CacheAxisQuery.cs
- TypeSystem.cs
- ClipboardProcessor.cs
- HashCryptoHandle.cs
- WebSysDefaultValueAttribute.cs
- ThaiBuddhistCalendar.cs
- HttpProfileBase.cs
- PriorityRange.cs
- XmlAnyElementAttributes.cs
- SpellerInterop.cs
- NTAccount.cs
- Command.cs
- UIElementAutomationPeer.cs
- WebPageTraceListener.cs
- RotateTransform3D.cs
- AndCondition.cs
- SoapUnknownHeader.cs
- CodeGotoStatement.cs
- CommandID.cs