Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / MS / Internal / Automation / InteropAutomationProvider.cs / 1305600 / InteropAutomationProvider.cs
using System; using System.Windows; using System.Windows.Automation.Peers; using System.Windows.Automation.Provider; using System.Security; using System.Security.Permissions; using MS.Internal.PresentationCore; namespace MS.Internal.Automation { [FriendAccessAllowed] // Built into Core, also used by Framework. internal class InteropAutomationProvider: IRawElementProviderFragmentRoot { #region Constructors internal InteropAutomationProvider(HostedWindowWrapper wrapper, AutomationPeer parent) { if (wrapper == null) { throw new ArgumentNullException("wrapper"); } if (parent == null) { throw new ArgumentNullException("parent"); } _wrapper = wrapper; _parent = parent; } #endregion Constructors #region IRawElementProviderSimple /// ProviderOptions IRawElementProviderSimple.ProviderOptions { get { return ProviderOptions.ServerSideProvider | ProviderOptions.OverrideProvider; } } /// object IRawElementProviderSimple.GetPatternProvider(int patternId) { return null; } /// object IRawElementProviderSimple.GetPropertyValue(int propertyId) { return null; } ////// Critical - Calls critical HostedWindowWrapper.Handle. /// TreatAsSafe - The reason is described in the following comment by BrendanM /// HostProviderFromHandle is a public method the APTCA assembly UIAutomationProvider.dll; /// ...\windows\AccessibleTech\longhorn\Automation\UIAutomationProvider\System\Windows\Automation\Provider\AutomationInteropProvider.cs /// This calls through to an internal P/Invoke layer... /// ...\windows\AccessibleTech\longhorn\Automation\UIAutomationProvider\MS\Internal\Automation\UiaCoreProviderApi.cs /// Which P/Invokes to unmanaged UIAutomationCore.dll's UiaHostProviderFromHwnd API, /// ...\windows\AccessibleTech\longhorn\Automation\UnmanagedCore\UIAutomationCoreAPI.cpp /// Which checks the HWND with IsWindow, and returns a new MiniHwndProxy instance: /// ...\windows\AccessibleTech\longhorn\Automation\UnmanagedCore\MiniHwndProxy.cpp /// /// MiniHwndProxy does implement the IRawElementProviderSimple interface, but all methods /// return NULL or empty values; it does not expose any values or functionality through this. /// This object is designed to be an opaque cookie to contain the HWND so that only UIACore /// itself can access it. UIACore accesses the HWND by QI'ing for a private GUID, and then /// casting the returnd value to MiniHwndProxy, and calling a nonvirtual method to access a /// _hwnd field. While managed PT code maybe able to do a QI, the only way it could extract /// the _hwnd field would be by using unmanaged code. /// IRawElementProviderSimple IRawElementProviderSimple.HostRawElementProvider { [SecurityCritical, SecurityTreatAsSafe] get { return AutomationInteropProvider.HostProviderFromHandle(_wrapper.Handle); } } #endregion IRawElementProviderSimple #region IRawElementProviderFragment ////// TreatAsSafe - The reason this method can be treated as safe is because it yeilds information /// about the parent provider which can even otherwise be obtained by using public APIs such /// as UIElement.OnCreateAutomationPeer and AutomationProvider.ProviderFromPeer. /// IRawElementProviderFragment IRawElementProviderFragment.Navigate(NavigateDirection direction) { if (direction == NavigateDirection.Parent) { return (IRawElementProviderFragment)_parent.ProviderFromPeer(_parent); } return null; } /// int [] IRawElementProviderFragment.GetRuntimeId() { return null; } /// Rect IRawElementProviderFragment.BoundingRectangle { get { return Rect.Empty; } } /// IRawElementProviderSimple [] IRawElementProviderFragment.GetEmbeddedFragmentRoots() { return null; } /// void IRawElementProviderFragment.SetFocus() { throw new NotSupportedException(); } /// IRawElementProviderFragmentRoot IRawElementProviderFragment.FragmentRoot { get { return null; } } #endregion IRawElementProviderFragment #region IRawElementProviderFragmentRoot /// IRawElementProviderFragment IRawElementProviderFragmentRoot.ElementProviderFromPoint( double x, double y ) { return null; } /// IRawElementProviderFragment IRawElementProviderFragmentRoot.GetFocus() { return null; } #endregion IRawElementProviderFragmentRoot #region Data private HostedWindowWrapper _wrapper; private AutomationPeer _parent; #endregion Data } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System; using System.Windows; using System.Windows.Automation.Peers; using System.Windows.Automation.Provider; using System.Security; using System.Security.Permissions; using MS.Internal.PresentationCore; namespace MS.Internal.Automation { [FriendAccessAllowed] // Built into Core, also used by Framework. internal class InteropAutomationProvider: IRawElementProviderFragmentRoot { #region Constructors internal InteropAutomationProvider(HostedWindowWrapper wrapper, AutomationPeer parent) { if (wrapper == null) { throw new ArgumentNullException("wrapper"); } if (parent == null) { throw new ArgumentNullException("parent"); } _wrapper = wrapper; _parent = parent; } #endregion Constructors #region IRawElementProviderSimple /// ProviderOptions IRawElementProviderSimple.ProviderOptions { get { return ProviderOptions.ServerSideProvider | ProviderOptions.OverrideProvider; } } /// object IRawElementProviderSimple.GetPatternProvider(int patternId) { return null; } /// object IRawElementProviderSimple.GetPropertyValue(int propertyId) { return null; } ////// Critical - Calls critical HostedWindowWrapper.Handle. /// TreatAsSafe - The reason is described in the following comment by BrendanM /// HostProviderFromHandle is a public method the APTCA assembly UIAutomationProvider.dll; /// ...\windows\AccessibleTech\longhorn\Automation\UIAutomationProvider\System\Windows\Automation\Provider\AutomationInteropProvider.cs /// This calls through to an internal P/Invoke layer... /// ...\windows\AccessibleTech\longhorn\Automation\UIAutomationProvider\MS\Internal\Automation\UiaCoreProviderApi.cs /// Which P/Invokes to unmanaged UIAutomationCore.dll's UiaHostProviderFromHwnd API, /// ...\windows\AccessibleTech\longhorn\Automation\UnmanagedCore\UIAutomationCoreAPI.cpp /// Which checks the HWND with IsWindow, and returns a new MiniHwndProxy instance: /// ...\windows\AccessibleTech\longhorn\Automation\UnmanagedCore\MiniHwndProxy.cpp /// /// MiniHwndProxy does implement the IRawElementProviderSimple interface, but all methods /// return NULL or empty values; it does not expose any values or functionality through this. /// This object is designed to be an opaque cookie to contain the HWND so that only UIACore /// itself can access it. UIACore accesses the HWND by QI'ing for a private GUID, and then /// casting the returnd value to MiniHwndProxy, and calling a nonvirtual method to access a /// _hwnd field. While managed PT code maybe able to do a QI, the only way it could extract /// the _hwnd field would be by using unmanaged code. /// IRawElementProviderSimple IRawElementProviderSimple.HostRawElementProvider { [SecurityCritical, SecurityTreatAsSafe] get { return AutomationInteropProvider.HostProviderFromHandle(_wrapper.Handle); } } #endregion IRawElementProviderSimple #region IRawElementProviderFragment ////// TreatAsSafe - The reason this method can be treated as safe is because it yeilds information /// about the parent provider which can even otherwise be obtained by using public APIs such /// as UIElement.OnCreateAutomationPeer and AutomationProvider.ProviderFromPeer. /// IRawElementProviderFragment IRawElementProviderFragment.Navigate(NavigateDirection direction) { if (direction == NavigateDirection.Parent) { return (IRawElementProviderFragment)_parent.ProviderFromPeer(_parent); } return null; } /// int [] IRawElementProviderFragment.GetRuntimeId() { return null; } /// Rect IRawElementProviderFragment.BoundingRectangle { get { return Rect.Empty; } } /// IRawElementProviderSimple [] IRawElementProviderFragment.GetEmbeddedFragmentRoots() { return null; } /// void IRawElementProviderFragment.SetFocus() { throw new NotSupportedException(); } /// IRawElementProviderFragmentRoot IRawElementProviderFragment.FragmentRoot { get { return null; } } #endregion IRawElementProviderFragment #region IRawElementProviderFragmentRoot /// IRawElementProviderFragment IRawElementProviderFragmentRoot.ElementProviderFromPoint( double x, double y ) { return null; } /// IRawElementProviderFragment IRawElementProviderFragmentRoot.GetFocus() { return null; } #endregion IRawElementProviderFragmentRoot #region Data private HostedWindowWrapper _wrapper; private AutomationPeer _parent; #endregion Data } } // 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
- HebrewNumber.cs
- AssemblyUtil.cs
- ExpandSegmentCollection.cs
- DataControlLinkButton.cs
- WebPartCloseVerb.cs
- DataMember.cs
- UserThread.cs
- DBCommand.cs
- ObservableDictionary.cs
- BrushProxy.cs
- DeobfuscatingStream.cs
- FragmentQueryKB.cs
- PolicyStatement.cs
- DataControlLinkButton.cs
- XsltArgumentList.cs
- VisualTarget.cs
- QilChoice.cs
- Authorization.cs
- SerializeAbsoluteContext.cs
- EntityCommand.cs
- DataGridSortCommandEventArgs.cs
- ServiceCredentials.cs
- CharAnimationBase.cs
- Empty.cs
- Helpers.cs
- ColumnMapProcessor.cs
- ConfigurationStrings.cs
- LinqDataSourceContextData.cs
- TextComposition.cs
- FixedSOMImage.cs
- ImageAutomationPeer.cs
- HtmlInputImage.cs
- MatrixKeyFrameCollection.cs
- WindowsTokenRoleProvider.cs
- EntityChangedParams.cs
- IWorkflowDebuggerService.cs
- GridLength.cs
- TraceHandler.cs
- WinEventWrap.cs
- InterleavedZipPartStream.cs
- EntityViewContainer.cs
- Int16Converter.cs
- ObjectViewListener.cs
- Parser.cs
- SessionStateContainer.cs
- BidirectionalDictionary.cs
- RadioButton.cs
- LeaseManager.cs
- SvcMapFileSerializer.cs
- CacheRequest.cs
- ObjectIDGenerator.cs
- DesignerActionKeyboardBehavior.cs
- SurrogateSelector.cs
- LockedAssemblyCache.cs
- ReadOnlyDictionary.cs
- FixedPageProcessor.cs
- TextMarkerSource.cs
- ImageListUtils.cs
- TextRangeEdit.cs
- DataControlPagerLinkButton.cs
- Symbol.cs
- ToolboxService.cs
- AuthenticationModuleElementCollection.cs
- Models.cs
- TraceSource.cs
- GrammarBuilderRuleRef.cs
- ReadWriteSpinLock.cs
- StandardOleMarshalObject.cs
- Comparer.cs
- PageContent.cs
- CheckoutException.cs
- SingleAnimationUsingKeyFrames.cs
- DesignerLabelAdapter.cs
- Icon.cs
- ConnectionPoint.cs
- SqlDataSourceConfigureSortForm.cs
- LinqDataSourceUpdateEventArgs.cs
- MergeFilterQuery.cs
- cryptoapiTransform.cs
- DockProviderWrapper.cs
- EtwTrace.cs
- NetCodeGroup.cs
- followingquery.cs
- DeviceContexts.cs
- XmlElement.cs
- DocumentXPathNavigator.cs
- SqlConnectionString.cs
- CommandConverter.cs
- ZipIOLocalFileBlock.cs
- httpstaticobjectscollection.cs
- StringUtil.cs
- BufferedReceiveManager.cs
- ColumnMapTranslator.cs
- SimpleApplicationHost.cs
- _ConnectStream.cs
- ThreadStartException.cs
- XPathException.cs
- CacheSection.cs
- XmlQueryCardinality.cs
- BooleanConverter.cs