Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / Data / System / Data / OleDb / SafeHandles.cs / 1 / SafeHandles.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //[....] //----------------------------------------------------------------------------- namespace System.Data.OleDb { using System; using System.Data.Common; using System.Data.ProviderBase; using System.Diagnostics; using System.Globalization; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; using System.Threading; using System.Runtime.ConstrainedExecution; internal sealed class DualCoTaskMem : SafeHandle { private IntPtr handle2; // this must be protected so derived classes can use out params. private DualCoTaskMem() : base(IntPtr.Zero, true) { this.handle2 = IntPtr.Zero; } // IDBInfo.GetLiteralInfo internal DualCoTaskMem(UnsafeNativeMethods.IDBInfo dbInfo, int[] literals, out int literalCount, out IntPtr literalInfo, out OleDbHResult hr) : this() { int count = (null != literals) ? literals.Length : 0; Bid.Trace("\n"); hr = dbInfo.GetLiteralInfo(count, literals, out literalCount, out base.handle, out this.handle2); literalInfo = base.handle; Bid.Trace(" %08X{HRESULT}\n", hr); } // IColumnsInfo.GetColumnInfo internal DualCoTaskMem(UnsafeNativeMethods.IColumnsInfo columnsInfo, out IntPtr columnCount, out IntPtr columnInfos, out OleDbHResult hr) : this() { Bid.Trace(" \n"); hr = columnsInfo.GetColumnInfo(out columnCount, out base.handle, out this.handle2); columnInfos = base.handle; Bid.Trace(" %08X{HRESULT}\n", hr); } // IDBSchemaRowset.GetSchemas internal DualCoTaskMem(UnsafeNativeMethods.IDBSchemaRowset dbSchemaRowset, out int schemaCount, out IntPtr schemaGuids, out IntPtr schemaRestrictions, out OleDbHResult hr) : this() { Bid.Trace(" \n"); hr = dbSchemaRowset.GetSchemas(out schemaCount, out base.handle, out this.handle2); schemaGuids = base.handle; schemaRestrictions = this.handle2; Bid.Trace(" %08X{HRESULT}\n", hr); } internal DualCoTaskMem(UnsafeNativeMethods.IColumnsRowset icolumnsRowset, out IntPtr cOptColumns, out OleDbHResult hr) : base(IntPtr.Zero, true) { Bid.Trace(" \n"); hr = icolumnsRowset.GetAvailableColumns(out cOptColumns, out base.handle); Bid.Trace(" %08X{HRESULT}\n", hr); } public override bool IsInvalid { get { return (((IntPtr.Zero == base.handle)) && (IntPtr.Zero == this.handle2)); } } protected override bool ReleaseHandle() { // NOTE: The SafeHandle class guarantees this will be called exactly once. IntPtr ptr = base.handle; base.handle = IntPtr.Zero; if (IntPtr.Zero != ptr) { SafeNativeMethods.CoTaskMemFree(ptr); } ptr = this.handle2; this.handle2 = IntPtr.Zero; if (IntPtr.Zero != ptr) { SafeNativeMethods.CoTaskMemFree(ptr); } return true; } } internal sealed class RowHandleBuffer : DbBuffer { internal RowHandleBuffer(IntPtr rowHandleFetchCount) : base((int)rowHandleFetchCount*ADP.PtrSize) { } internal IntPtr GetRowHandle(int index) { IntPtr value = ReadIntPtr( index * ADP.PtrSize); Debug.Assert(ODB.DB_NULL_HROW != value, "bad rowHandle"); return value; } } internal sealed class StringMemHandle : DbBuffer { internal StringMemHandle(string value) : base((null != value) ? checked(2+2*value.Length) : 0) { if (null != value) { // null-termination exists because of the extra 2+ which is zero'd during on allocation WriteCharArray(0, value.ToCharArray(), 0, value.Length); } } } internal sealed class ChapterHandle : WrappedIUnknown { internal static readonly ChapterHandle DB_NULL_HCHAPTER = new ChapterHandle(IntPtr.Zero); private IntPtr _chapterHandle; internal static ChapterHandle CreateChapterHandle(object chapteredRowset, RowBinding binding, int valueOffset) { if ((null == chapteredRowset) || (IntPtr.Zero == binding.ReadIntPtr(valueOffset))) { return ChapterHandle.DB_NULL_HCHAPTER; } return new ChapterHandle(chapteredRowset, binding, valueOffset); } // from ADODBRecordSetConstruction we do not want to release the initial chapter handle internal static ChapterHandle CreateChapterHandle(IntPtr chapter) { if (IntPtr.Zero == chapter) { return ChapterHandle.DB_NULL_HCHAPTER; } return new ChapterHandle(chapter); } // from ADODBRecordSetConstruction we do not want to release the initial chapter handle private ChapterHandle(IntPtr chapter) : base((object)null) { _chapterHandle = chapter; } private ChapterHandle(object chapteredRowset, RowBinding binding, int valueOffset) : base(chapteredRowset) { RuntimeHelpers.PrepareConstrainedRegions(); try {} finally { _chapterHandle = binding.InterlockedExchangePointer(valueOffset); } } internal IntPtr HChapter { get { return _chapterHandle; } } protected override bool ReleaseHandle() { // NOTE: The SafeHandle class guarantees this will be called exactly once and is non-interrutible. IntPtr chapter = _chapterHandle; _chapterHandle = IntPtr.Zero; if ((IntPtr.Zero != base.handle) && (IntPtr.Zero != chapter)) { Bid.Trace(" Chapter=%Id\n", chapter); OleDbHResult hr = (OleDbHResult)NativeOledbWrapper.IChapteredRowsetReleaseChapter(base.handle, chapter); Bid.Trace(" %08X{HRESULT}\n", hr); } return base.ReleaseHandle(); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //[....] //----------------------------------------------------------------------------- namespace System.Data.OleDb { using System; using System.Data.Common; using System.Data.ProviderBase; using System.Diagnostics; using System.Globalization; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; using System.Threading; using System.Runtime.ConstrainedExecution; internal sealed class DualCoTaskMem : SafeHandle { private IntPtr handle2; // this must be protected so derived classes can use out params. private DualCoTaskMem() : base(IntPtr.Zero, true) { this.handle2 = IntPtr.Zero; } // IDBInfo.GetLiteralInfo internal DualCoTaskMem(UnsafeNativeMethods.IDBInfo dbInfo, int[] literals, out int literalCount, out IntPtr literalInfo, out OleDbHResult hr) : this() { int count = (null != literals) ? literals.Length : 0; Bid.Trace("\n"); hr = dbInfo.GetLiteralInfo(count, literals, out literalCount, out base.handle, out this.handle2); literalInfo = base.handle; Bid.Trace(" %08X{HRESULT}\n", hr); } // IColumnsInfo.GetColumnInfo internal DualCoTaskMem(UnsafeNativeMethods.IColumnsInfo columnsInfo, out IntPtr columnCount, out IntPtr columnInfos, out OleDbHResult hr) : this() { Bid.Trace(" \n"); hr = columnsInfo.GetColumnInfo(out columnCount, out base.handle, out this.handle2); columnInfos = base.handle; Bid.Trace(" %08X{HRESULT}\n", hr); } // IDBSchemaRowset.GetSchemas internal DualCoTaskMem(UnsafeNativeMethods.IDBSchemaRowset dbSchemaRowset, out int schemaCount, out IntPtr schemaGuids, out IntPtr schemaRestrictions, out OleDbHResult hr) : this() { Bid.Trace(" \n"); hr = dbSchemaRowset.GetSchemas(out schemaCount, out base.handle, out this.handle2); schemaGuids = base.handle; schemaRestrictions = this.handle2; Bid.Trace(" %08X{HRESULT}\n", hr); } internal DualCoTaskMem(UnsafeNativeMethods.IColumnsRowset icolumnsRowset, out IntPtr cOptColumns, out OleDbHResult hr) : base(IntPtr.Zero, true) { Bid.Trace(" \n"); hr = icolumnsRowset.GetAvailableColumns(out cOptColumns, out base.handle); Bid.Trace(" %08X{HRESULT}\n", hr); } public override bool IsInvalid { get { return (((IntPtr.Zero == base.handle)) && (IntPtr.Zero == this.handle2)); } } protected override bool ReleaseHandle() { // NOTE: The SafeHandle class guarantees this will be called exactly once. IntPtr ptr = base.handle; base.handle = IntPtr.Zero; if (IntPtr.Zero != ptr) { SafeNativeMethods.CoTaskMemFree(ptr); } ptr = this.handle2; this.handle2 = IntPtr.Zero; if (IntPtr.Zero != ptr) { SafeNativeMethods.CoTaskMemFree(ptr); } return true; } } internal sealed class RowHandleBuffer : DbBuffer { internal RowHandleBuffer(IntPtr rowHandleFetchCount) : base((int)rowHandleFetchCount*ADP.PtrSize) { } internal IntPtr GetRowHandle(int index) { IntPtr value = ReadIntPtr( index * ADP.PtrSize); Debug.Assert(ODB.DB_NULL_HROW != value, "bad rowHandle"); return value; } } internal sealed class StringMemHandle : DbBuffer { internal StringMemHandle(string value) : base((null != value) ? checked(2+2*value.Length) : 0) { if (null != value) { // null-termination exists because of the extra 2+ which is zero'd during on allocation WriteCharArray(0, value.ToCharArray(), 0, value.Length); } } } internal sealed class ChapterHandle : WrappedIUnknown { internal static readonly ChapterHandle DB_NULL_HCHAPTER = new ChapterHandle(IntPtr.Zero); private IntPtr _chapterHandle; internal static ChapterHandle CreateChapterHandle(object chapteredRowset, RowBinding binding, int valueOffset) { if ((null == chapteredRowset) || (IntPtr.Zero == binding.ReadIntPtr(valueOffset))) { return ChapterHandle.DB_NULL_HCHAPTER; } return new ChapterHandle(chapteredRowset, binding, valueOffset); } // from ADODBRecordSetConstruction we do not want to release the initial chapter handle internal static ChapterHandle CreateChapterHandle(IntPtr chapter) { if (IntPtr.Zero == chapter) { return ChapterHandle.DB_NULL_HCHAPTER; } return new ChapterHandle(chapter); } // from ADODBRecordSetConstruction we do not want to release the initial chapter handle private ChapterHandle(IntPtr chapter) : base((object)null) { _chapterHandle = chapter; } private ChapterHandle(object chapteredRowset, RowBinding binding, int valueOffset) : base(chapteredRowset) { RuntimeHelpers.PrepareConstrainedRegions(); try {} finally { _chapterHandle = binding.InterlockedExchangePointer(valueOffset); } } internal IntPtr HChapter { get { return _chapterHandle; } } protected override bool ReleaseHandle() { // NOTE: The SafeHandle class guarantees this will be called exactly once and is non-interrutible. IntPtr chapter = _chapterHandle; _chapterHandle = IntPtr.Zero; if ((IntPtr.Zero != base.handle) && (IntPtr.Zero != chapter)) { Bid.Trace(" Chapter=%Id\n", chapter); OleDbHResult hr = (OleDbHResult)NativeOledbWrapper.IChapteredRowsetReleaseChapter(base.handle, chapter); Bid.Trace(" %08X{HRESULT}\n", hr); } return base.ReleaseHandle(); } } } // 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
- CommandField.cs
- InvalidProgramException.cs
- WCFServiceClientProxyGenerator.cs
- GenericParameterDataContract.cs
- Header.cs
- SqlTypesSchemaImporter.cs
- SqlParameterizer.cs
- TableItemPatternIdentifiers.cs
- ListDesigner.cs
- FontStretches.cs
- MissingMemberException.cs
- RunClient.cs
- hresults.cs
- BuilderPropertyEntry.cs
- XPathScanner.cs
- ComplexBindingPropertiesAttribute.cs
- sqlstateclientmanager.cs
- HelloMessage11.cs
- HwndHost.cs
- SecurityContextSecurityTokenResolver.cs
- EntityViewGenerator.cs
- KnownBoxes.cs
- HotSpot.cs
- UnicodeEncoding.cs
- Point4DValueSerializer.cs
- HotSpotCollection.cs
- ReadOnlyNameValueCollection.cs
- TCEAdapterGenerator.cs
- Int16.cs
- ExpressionQuoter.cs
- SimpleHandlerBuildProvider.cs
- InternalBase.cs
- CqlIdentifiers.cs
- CacheChildrenQuery.cs
- StateDesignerConnector.cs
- XmlSerializerOperationGenerator.cs
- WS2007FederationHttpBindingCollectionElement.cs
- XamlPathDataSerializer.cs
- CookielessHelper.cs
- Cursor.cs
- EntityWithChangeTrackerStrategy.cs
- MediaContext.cs
- MenuItemCollectionEditor.cs
- HttpUnhandledOperationInvoker.cs
- CqlQuery.cs
- XPathDescendantIterator.cs
- ComponentManagerBroker.cs
- oledbmetadatacollectionnames.cs
- Transform3DGroup.cs
- SchemaComplexType.cs
- Accessible.cs
- XmlTextReaderImplHelpers.cs
- BrowserCapabilitiesCodeGenerator.cs
- BulletedList.cs
- PropertyGridEditorPart.cs
- VSWCFServiceContractGenerator.cs
- MobileSysDescriptionAttribute.cs
- NonSerializedAttribute.cs
- ColorIndependentAnimationStorage.cs
- NumericUpDownAccelerationCollection.cs
- Error.cs
- HistoryEventArgs.cs
- SecurityKeyIdentifierClause.cs
- X509CertificateInitiatorClientCredential.cs
- AppSettings.cs
- ObjectViewListener.cs
- UniformGrid.cs
- StackOverflowException.cs
- ParseChildrenAsPropertiesAttribute.cs
- MachinePropertyVariants.cs
- InternalPermissions.cs
- DataTableMapping.cs
- TreeWalker.cs
- QuotaThrottle.cs
- WindowsTitleBar.cs
- ValueUnavailableException.cs
- SystemColors.cs
- SizeFConverter.cs
- FontUnitConverter.cs
- ClientSideQueueItem.cs
- RowParagraph.cs
- AnimatedTypeHelpers.cs
- CanExecuteRoutedEventArgs.cs
- FunctionQuery.cs
- MemberDomainMap.cs
- PolicyReader.cs
- DataColumnMappingCollection.cs
- ResourceWriter.cs
- ComEventsHelper.cs
- RenderCapability.cs
- OpenFileDialog.cs
- FormsAuthentication.cs
- FamilyTypefaceCollection.cs
- DispatcherTimer.cs
- ToolbarAUtomationPeer.cs
- DataTableMappingCollection.cs
- RtfNavigator.cs
- CannotUnloadAppDomainException.cs
- TransformerInfoCollection.cs
- BaseDataBoundControl.cs