Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Activation / SharedMemory.cs / 1 / SharedMemory.cs
//---------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------------------- namespace System.ServiceModel.Activation { using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Security.Principal; using System.ServiceModel.Channels; using System.Threading; using System.ServiceModel; using System.ComponentModel; unsafe class SharedMemory : IDisposable { SafeFileMappingHandle fileMapping; SharedMemory(SafeFileMappingHandle fileMapping) { this.fileMapping = fileMapping; } public static unsafe SharedMemory Create(string name, Guid content, ListallowedSids) { int errorCode = UnsafeNativeMethods.ERROR_SUCCESS; byte[] binarySecurityDescriptor = SecurityDescriptorHelper.FromSecurityIdentifiers(allowedSids, UnsafeNativeMethods.GENERIC_READ); SafeFileMappingHandle fileMapping; UnsafeNativeMethods.SECURITY_ATTRIBUTES securityAttributes = new UnsafeNativeMethods.SECURITY_ATTRIBUTES(); fixed (byte* pinnedSecurityDescriptor = binarySecurityDescriptor) { securityAttributes.lpSecurityDescriptor = (IntPtr)pinnedSecurityDescriptor; fileMapping = UnsafeNativeMethods.CreateFileMapping((IntPtr)(-1), securityAttributes, UnsafeNativeMethods.PAGE_READWRITE, 0, sizeof(SharedMemoryContents), name); errorCode = Marshal.GetLastWin32Error(); } if (fileMapping.IsInvalid) { fileMapping.SetHandleAsInvalid(); fileMapping.Close(); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new Win32Exception(errorCode)); } SharedMemory sharedMemory = new SharedMemory(fileMapping); SafeViewOfFileHandle view; // Ignore return value. GetView(fileMapping, true, out view); try { SharedMemoryContents* contents = (SharedMemoryContents*)view.DangerousGetHandle(); contents->pipeGuid = content; Thread.MemoryBarrier(); contents->isInitialized = true; return sharedMemory; } finally { view.Close(); } } public void Dispose() { if (fileMapping != null) { fileMapping.Close(); fileMapping = null; } } static bool GetView(SafeFileMappingHandle fileMapping, bool writable, out SafeViewOfFileHandle handle) { handle = UnsafeNativeMethods.MapViewOfFile(fileMapping, writable ? UnsafeNativeMethods.FILE_MAP_WRITE : UnsafeNativeMethods.FILE_MAP_READ, 0, 0, (IntPtr)sizeof(SharedMemoryContents)); int errorCode = Marshal.GetLastWin32Error(); if (!handle.IsInvalid) { return true; } else { handle.SetHandleAsInvalid(); fileMapping.Close(); // Only return false when it's reading time. if (!writable && errorCode == UnsafeNativeMethods.ERROR_FILE_NOT_FOUND) { return false; } throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new Win32Exception(errorCode)); } } public static string Read(string name) { string content; if (Read(name, out content)) { return content; } throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new Win32Exception(UnsafeNativeMethods.ERROR_FILE_NOT_FOUND)); } public static bool Read(string name, out string content) { content = null; SafeFileMappingHandle fileMapping = UnsafeNativeMethods.OpenFileMapping(UnsafeNativeMethods.FILE_MAP_READ, false, ListenerConstants.GlobalPrefix + name); int errorCode = Marshal.GetLastWin32Error(); if (fileMapping.IsInvalid) { fileMapping.SetHandleAsInvalid(); fileMapping.Close(); if (errorCode == UnsafeNativeMethods.ERROR_FILE_NOT_FOUND) { return false; } throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new Win32Exception(errorCode)); } try { SafeViewOfFileHandle view; if (!GetView(fileMapping, false, out view)) { return false; } try { SharedMemoryContents* contents = (SharedMemoryContents*)view.DangerousGetHandle(); content = contents->isInitialized ? contents->pipeGuid.ToString() : null; return true; } finally { view.Close(); } } finally { fileMapping.Close(); } } [StructLayout(LayoutKind.Sequential)] struct SharedMemoryContents { public bool isInitialized; public Guid pipeGuid; } } } // 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
- WebSysDisplayNameAttribute.cs
- GcHandle.cs
- WebPartsPersonalization.cs
- ModifierKeysValueSerializer.cs
- TextComposition.cs
- ResourceExpressionBuilder.cs
- LayoutTable.cs
- WindowsComboBox.cs
- ScrollViewer.cs
- SignerInfo.cs
- XPathArrayIterator.cs
- ClientSideQueueItem.cs
- ExternalCalls.cs
- RealProxy.cs
- NativeCompoundFileAPIs.cs
- FixedPageProcessor.cs
- ScriptRegistrationManager.cs
- Effect.cs
- DisableDpiAwarenessAttribute.cs
- FlowLayoutSettings.cs
- VirtualizingStackPanel.cs
- ElementMarkupObject.cs
- DiscoveryDocumentSerializer.cs
- DocumentViewerAutomationPeer.cs
- ElementHost.cs
- QilFunction.cs
- HashStream.cs
- WebMessageEncodingBindingElement.cs
- MultipartContentParser.cs
- HttpWebRequestElement.cs
- DoubleUtil.cs
- ManualResetEventSlim.cs
- DataGridToolTip.cs
- SqlDataSourceEnumerator.cs
- ScrollViewer.cs
- MDIControlStrip.cs
- EditorZoneAutoFormat.cs
- DmlSqlGenerator.cs
- HtmlUtf8RawTextWriter.cs
- Helpers.cs
- CancellationScope.cs
- Scheduler.cs
- MethodBody.cs
- MethodRental.cs
- GeometryGroup.cs
- SqlBuilder.cs
- SerialPinChanges.cs
- ColumnTypeConverter.cs
- configsystem.cs
- Tuple.cs
- SqlEnums.cs
- BitmapEffectRenderDataResource.cs
- HMACSHA512.cs
- SingleAnimationBase.cs
- DecoderNLS.cs
- BamlLocalizationDictionary.cs
- ClientRolePrincipal.cs
- UIHelper.cs
- SystemMulticastIPAddressInformation.cs
- RuleAction.cs
- XmlSerializationGeneratedCode.cs
- IPPacketInformation.cs
- Stream.cs
- TdsParserSessionPool.cs
- XmlNamespaceMappingCollection.cs
- ByteStream.cs
- PreviewKeyDownEventArgs.cs
- HtmlAnchor.cs
- BigInt.cs
- MemoryStream.cs
- COM2PropertyPageUITypeConverter.cs
- ClipboardData.cs
- xmlformatgeneratorstatics.cs
- RuntimeResourceSet.cs
- TableParaClient.cs
- ApplicationInterop.cs
- GroupItem.cs
- InputBuffer.cs
- EntityTypeEmitter.cs
- BitmapEffectState.cs
- Geometry3D.cs
- WebServiceReceive.cs
- TreeView.cs
- NumericUpDown.cs
- ZoomPercentageConverter.cs
- MailHeaderInfo.cs
- SspiHelper.cs
- AssertHelper.cs
- DeviceContext2.cs
- EmbeddedMailObjectsCollection.cs
- DataViewSetting.cs
- XmlSchemaComplexContentRestriction.cs
- Filter.cs
- SmiContext.cs
- EncoderBestFitFallback.cs
- CheckBoxDesigner.cs
- TypeElement.cs
- FontDialog.cs
- XPathMultyIterator.cs
- ModuleBuilder.cs