private void SetSecurityDescriptor(CmdletProvider providerInstance, string path, ObjectSecurity securityDescriptor, CmdletProviderContext context) { GetPermissionProviderInstance(providerInstance); try { providerInstance.SetSecurityDescriptor(path, securityDescriptor, context); } catch (LoopFlowException) { throw; } catch (PipelineStoppedException) { throw; } catch (ActionPreferenceStopException) { throw; } catch (PrivilegeNotHeldException exception) { context.WriteError(new ErrorRecord(exception, exception.GetType().FullName, ErrorCategory.PermissionDenied, path)); } catch (UnauthorizedAccessException exception2) { context.WriteError(new ErrorRecord(exception2, exception2.GetType().FullName, ErrorCategory.PermissionDenied, path)); } catch (NotSupportedException exception3) { context.WriteError(new ErrorRecord(exception3, exception3.GetType().FullName, ErrorCategory.InvalidOperation, path)); } catch (SystemException exception4) { CommandProcessorBase.CheckForSevereException(exception4); context.WriteError(new ErrorRecord(exception4, exception4.GetType().FullName, ErrorCategory.InvalidOperation, path)); } catch (Exception exception5) { CommandProcessorBase.CheckForSevereException(exception5); throw this.NewProviderInvocationException("SetSecurityDescriptorProviderException", SessionStateStrings.SetSecurityDescriptorProviderException, providerInstance.ProviderInfo, path, exception5); } }
} // SetSecurityDescriptor private void SetSecurityDescriptor( CmdletProvider providerInstance, string path, ObjectSecurity securityDescriptor, CmdletProviderContext context) { // All parameters should have been validated by caller Diagnostics.Assert( providerInstance != null, "Caller should validate providerInstance before calling this method"); Diagnostics.Assert( path != null, "Caller should validate path before calling this method"); Diagnostics.Assert( securityDescriptor != null, "Caller should validate securityDescriptor before calling this method"); Diagnostics.Assert( context != null, "Caller should validate context before calling this method"); // This just verifies that the provider supports the interface. GetPermissionProviderInstance(providerInstance); try { providerInstance.SetSecurityDescriptor(path, securityDescriptor, context); } catch (LoopFlowException) { throw; } catch (PipelineStoppedException) { throw; } catch (ActionPreferenceStopException) { throw; } catch (PrivilegeNotHeldException e) { // // thrown if one tries to set SACL and does not have // SeSecurityPrivilege // context.WriteError(new ErrorRecord(e, e.GetType().FullName, ErrorCategory.PermissionDenied, path)); } catch (UnauthorizedAccessException e) { // // thrown if // -- owner or pri. group are invalid OR // -- marta returns ERROR_ACCESS_DENIED // context.WriteError(new ErrorRecord(e, e.GetType().FullName, ErrorCategory.PermissionDenied, path)); } catch (NotSupportedException e) { // // thrown if path points to an item that does not // support access control. // // for example, FAT or FAT32 file in case of file system provider // context.WriteError(new ErrorRecord(e, e.GetType().FullName, ErrorCategory.InvalidOperation, path)); } catch (SystemException e) { CommandProcessorBase.CheckForSevereException(e); // // thrown if the CLR gets back unexpected error // from OS security or marta // context.WriteError(new ErrorRecord(e, e.GetType().FullName, ErrorCategory.InvalidOperation, path)); } catch (Exception e) // Catch-all OK, 3rd party callout. { CommandProcessorBase.CheckForSevereException(e); throw NewProviderInvocationException( "SetSecurityDescriptorProviderException", SessionStateStrings.SetSecurityDescriptorProviderException, providerInstance.ProviderInfo, path, e); } } // SetSecurityDescriptor