Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Services / Messaging / System / Messaging / AccessControlList.cs / 1305376 / AccessControlList.cs
using System; using System.Security.Permissions; using System.Security; using System.Collections; using System.Runtime.InteropServices; using System.ComponentModel; using System.Text; using System.Messaging.Interop; namespace System.Messaging { ////// /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1039:ListsAreStronglyTyped")] [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")] public class AccessControlList : CollectionBase { internal static readonly int UnknownEnvironment = 0; internal static readonly int W2kEnvironment = 1; internal static readonly int NtEnvironment = 2; internal static readonly int NonNtEnvironment = 3; private static int environment = UnknownEnvironment; private static object staticLock = new object(); ///[To be supplied.] ///public AccessControlList() { } internal static int CurrentEnvironment { get { if (environment == UnknownEnvironment) { lock (AccessControlList.staticLock) { if (environment == UnknownEnvironment) { //SECREVIEW: [....]- need to assert Environment permissions here // the environment check is not exposed as a public // method EnvironmentPermission environmentPermission = new EnvironmentPermission(PermissionState.Unrestricted); environmentPermission.Assert(); try { if (Environment.OSVersion.Platform == PlatformID.Win32NT) { if (Environment.OSVersion.Version.Major >= 5) environment = W2kEnvironment; else environment = NtEnvironment; } else environment = NonNtEnvironment; } finally { EnvironmentPermission.RevertAssert(); } } } } return environment; } } /// /// /// public int Add(AccessControlEntry entry) { return List.Add(entry); } ///[To be supplied.] ////// /// public void Insert(int index, AccessControlEntry entry) { List.Insert(index, entry); } ///[To be supplied.] ////// /// public int IndexOf(AccessControlEntry entry) { return List.IndexOf(entry); } internal static void CheckEnvironment() { if (CurrentEnvironment == NonNtEnvironment) throw new PlatformNotSupportedException(Res.GetString(Res.WinNTRequired)); } ///[To be supplied.] ////// /// public bool Contains(AccessControlEntry entry) { return List.Contains(entry); } ///[To be supplied.] ////// /// public void Remove(AccessControlEntry entry) { List.Remove(entry); } ///[To be supplied.] ////// /// public void CopyTo(AccessControlEntry[] array, int index) { List.CopyTo(array, index); } internal IntPtr MakeAcl(IntPtr oldAcl) { CheckEnvironment(); int ACECount = List.Count; IntPtr newAcl; NativeMethods.ExplicitAccess[] entries = new NativeMethods.ExplicitAccess[ACECount]; GCHandle mem = GCHandle.Alloc(entries, GCHandleType.Pinned); try { for (int i = 0; i < ACECount; i++) { int sidSize = 0; int sidtype; int domainSize = 0; AccessControlEntry ace = (AccessControlEntry)List[i]; if (ace.Trustee == null) throw new InvalidOperationException(Res.GetString(Res.InvalidTrustee)); string name = ace.Trustee.Name; if (name == null) throw new InvalidOperationException(Res.GetString(Res.InvalidTrusteeName)); if ((ace.Trustee.TrusteeType == TrusteeType.Computer) && !name.EndsWith("$")) name += "$"; if (!UnsafeNativeMethods.LookupAccountName(ace.Trustee.SystemName, name, (IntPtr)0, ref sidSize, null, ref domainSize, out sidtype)) { int errval = Marshal.GetLastWin32Error(); if (errval != 122) throw new InvalidOperationException(Res.GetString(Res.CouldntResolve ,ace.Trustee.Name, errval)); } entries[i].data = (IntPtr)Marshal.AllocHGlobal(sidSize); StringBuilder domainName = new StringBuilder(domainSize); if (!UnsafeNativeMethods.LookupAccountName(ace.Trustee.SystemName, name, entries[i].data, ref sidSize, domainName, ref domainSize, out sidtype)) throw new InvalidOperationException(Res.GetString(Res.CouldntResolveName, ace.Trustee.Name)); entries[i].grfAccessPermissions = ace.accessFlags; entries[i].grfAccessMode = (int)ace.EntryType; entries[i].grfInheritance = 0; entries[i].pMultipleTrustees = (IntPtr)0; entries[i].MultipleTrusteeOperation = NativeMethods.NO_MULTIPLE_TRUSTEE; entries[i].TrusteeForm = NativeMethods.TRUSTEE_IS_SID; entries[i].TrusteeType = (int)ace.Trustee.TrusteeType; } int err = SafeNativeMethods.SetEntriesInAclW(ACECount, (IntPtr)mem.AddrOfPinnedObject(), oldAcl, out newAcl); if (err != NativeMethods.ERROR_SUCCESS) throw new Win32Exception(err); } finally { mem.Free(); for (int i = 0; i < ACECount; i++) if (entries[i].data != (IntPtr)0) Marshal.FreeHGlobal(entries[i].data); } return newAcl; } internal static void FreeAcl(IntPtr acl) { SafeNativeMethods.LocalFree(acl); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System; using System.Security.Permissions; using System.Security; using System.Collections; using System.Runtime.InteropServices; using System.ComponentModel; using System.Text; using System.Messaging.Interop; namespace System.Messaging { ///[To be supplied.] ////// /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1039:ListsAreStronglyTyped")] [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")] public class AccessControlList : CollectionBase { internal static readonly int UnknownEnvironment = 0; internal static readonly int W2kEnvironment = 1; internal static readonly int NtEnvironment = 2; internal static readonly int NonNtEnvironment = 3; private static int environment = UnknownEnvironment; private static object staticLock = new object(); ///[To be supplied.] ///public AccessControlList() { } internal static int CurrentEnvironment { get { if (environment == UnknownEnvironment) { lock (AccessControlList.staticLock) { if (environment == UnknownEnvironment) { //SECREVIEW: [....]- need to assert Environment permissions here // the environment check is not exposed as a public // method EnvironmentPermission environmentPermission = new EnvironmentPermission(PermissionState.Unrestricted); environmentPermission.Assert(); try { if (Environment.OSVersion.Platform == PlatformID.Win32NT) { if (Environment.OSVersion.Version.Major >= 5) environment = W2kEnvironment; else environment = NtEnvironment; } else environment = NonNtEnvironment; } finally { EnvironmentPermission.RevertAssert(); } } } } return environment; } } /// /// /// public int Add(AccessControlEntry entry) { return List.Add(entry); } ///[To be supplied.] ////// /// public void Insert(int index, AccessControlEntry entry) { List.Insert(index, entry); } ///[To be supplied.] ////// /// public int IndexOf(AccessControlEntry entry) { return List.IndexOf(entry); } internal static void CheckEnvironment() { if (CurrentEnvironment == NonNtEnvironment) throw new PlatformNotSupportedException(Res.GetString(Res.WinNTRequired)); } ///[To be supplied.] ////// /// public bool Contains(AccessControlEntry entry) { return List.Contains(entry); } ///[To be supplied.] ////// /// public void Remove(AccessControlEntry entry) { List.Remove(entry); } ///[To be supplied.] ////// /// public void CopyTo(AccessControlEntry[] array, int index) { List.CopyTo(array, index); } internal IntPtr MakeAcl(IntPtr oldAcl) { CheckEnvironment(); int ACECount = List.Count; IntPtr newAcl; NativeMethods.ExplicitAccess[] entries = new NativeMethods.ExplicitAccess[ACECount]; GCHandle mem = GCHandle.Alloc(entries, GCHandleType.Pinned); try { for (int i = 0; i < ACECount; i++) { int sidSize = 0; int sidtype; int domainSize = 0; AccessControlEntry ace = (AccessControlEntry)List[i]; if (ace.Trustee == null) throw new InvalidOperationException(Res.GetString(Res.InvalidTrustee)); string name = ace.Trustee.Name; if (name == null) throw new InvalidOperationException(Res.GetString(Res.InvalidTrusteeName)); if ((ace.Trustee.TrusteeType == TrusteeType.Computer) && !name.EndsWith("$")) name += "$"; if (!UnsafeNativeMethods.LookupAccountName(ace.Trustee.SystemName, name, (IntPtr)0, ref sidSize, null, ref domainSize, out sidtype)) { int errval = Marshal.GetLastWin32Error(); if (errval != 122) throw new InvalidOperationException(Res.GetString(Res.CouldntResolve ,ace.Trustee.Name, errval)); } entries[i].data = (IntPtr)Marshal.AllocHGlobal(sidSize); StringBuilder domainName = new StringBuilder(domainSize); if (!UnsafeNativeMethods.LookupAccountName(ace.Trustee.SystemName, name, entries[i].data, ref sidSize, domainName, ref domainSize, out sidtype)) throw new InvalidOperationException(Res.GetString(Res.CouldntResolveName, ace.Trustee.Name)); entries[i].grfAccessPermissions = ace.accessFlags; entries[i].grfAccessMode = (int)ace.EntryType; entries[i].grfInheritance = 0; entries[i].pMultipleTrustees = (IntPtr)0; entries[i].MultipleTrusteeOperation = NativeMethods.NO_MULTIPLE_TRUSTEE; entries[i].TrusteeForm = NativeMethods.TRUSTEE_IS_SID; entries[i].TrusteeType = (int)ace.Trustee.TrusteeType; } int err = SafeNativeMethods.SetEntriesInAclW(ACECount, (IntPtr)mem.AddrOfPinnedObject(), oldAcl, out newAcl); if (err != NativeMethods.ERROR_SUCCESS) throw new Win32Exception(err); } finally { mem.Free(); for (int i = 0; i < ACECount; i++) if (entries[i].data != (IntPtr)0) Marshal.FreeHGlobal(entries[i].data); } return newAcl; } internal static void FreeAcl(IntPtr acl) { SafeNativeMethods.LocalFree(acl); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.[To be supplied.] ///
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AuthorizationSection.cs
- DesignerDataStoredProcedure.cs
- LinkLabelLinkClickedEvent.cs
- DBDataPermissionAttribute.cs
- EndpointAddress.cs
- XmlSchemaFacet.cs
- OdbcTransaction.cs
- CorruptStoreException.cs
- OutputCacheProfile.cs
- SqlDataAdapter.cs
- ColumnMapCopier.cs
- WebServiceEnumData.cs
- GlobalizationSection.cs
- BinaryFormatterWriter.cs
- Validator.cs
- MarkupWriter.cs
- DisposableCollectionWrapper.cs
- PrivilegeNotHeldException.cs
- documentsequencetextpointer.cs
- ParallelTimeline.cs
- WebPartEditorOkVerb.cs
- FontStretch.cs
- objectresult_tresulttype.cs
- XmlIgnoreAttribute.cs
- AnnotationAdorner.cs
- BinaryObjectInfo.cs
- ThreadAbortException.cs
- TextRange.cs
- LinearGradientBrush.cs
- ThreadSafeList.cs
- SHA256Managed.cs
- DefaultAssemblyResolver.cs
- PassportAuthenticationModule.cs
- DesignTimeXamlWriter.cs
- HttpCacheParams.cs
- SizeConverter.cs
- PackageDigitalSignature.cs
- DeviceContext.cs
- TypographyProperties.cs
- PointF.cs
- WorkflowRuntimeServiceElementCollection.cs
- OpenTypeLayoutCache.cs
- JsonEnumDataContract.cs
- SerialReceived.cs
- Compiler.cs
- NameSpaceExtractor.cs
- ToolboxBitmapAttribute.cs
- CodeFieldReferenceExpression.cs
- Pair.cs
- DoubleAnimationBase.cs
- ObjectList.cs
- ToolbarAUtomationPeer.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- TextMetrics.cs
- CheckBoxStandardAdapter.cs
- UTF32Encoding.cs
- GrammarBuilder.cs
- Model3DGroup.cs
- FieldCollectionEditor.cs
- TransformGroup.cs
- compensatingcollection.cs
- CheckoutException.cs
- BadImageFormatException.cs
- Script.cs
- SmtpLoginAuthenticationModule.cs
- TableLayoutPanelCellPosition.cs
- MenuTracker.cs
- InputBuffer.cs
- DefaultHttpHandler.cs
- ImageDrawing.cs
- RoutingExtensionElement.cs
- cookiecollection.cs
- ImmutableAssemblyCacheEntry.cs
- _Connection.cs
- Formatter.cs
- Message.cs
- FileDialogCustomPlacesCollection.cs
- WindowsAltTab.cs
- OneOfConst.cs
- StringUtil.cs
- GridItemCollection.cs
- PageStatePersister.cs
- AccessKeyManager.cs
- MemberListBinding.cs
- QilExpression.cs
- SignatureDescription.cs
- AdjustableArrowCap.cs
- RangeValidator.cs
- TreeViewDesigner.cs
- ApplyHostConfigurationBehavior.cs
- CategoryAttribute.cs
- OpacityConverter.cs
- TraceProvider.cs
- TableLayoutCellPaintEventArgs.cs
- MultiPropertyDescriptorGridEntry.cs
- HttpCookie.cs
- InvokeProviderWrapper.cs
- DateTimeOffsetConverter.cs
- CellQuery.cs
- ReturnEventArgs.cs