Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / Tools / xws_reg / System / ServiceModel / Install / WmiInstallComponent.cs / 1 / WmiInstallComponent.cs
//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
namespace System.ServiceModel.Install
{
using System.ComponentModel;
using System.Globalization;
using System.IO;
using System.Management;
using System.Security.AccessControl;
using System.Security.Principal;
class WmiInstallComponent : ServiceModelInstallComponent
{
const int WBEM_ENABLE = 0x1;
const int WBEM_METHOD_EXECUTE = 0x2;
const int WBEM_FULL_WRITE_REP = 0x4;
const int WBEM_PARTIAL_WRITE_REP = 0x8;
const int WBEM_WRITE_PROVIDER = 0x10;
const int WBEM_REMOTE_ACCESS = 0x20;
const int READ_CONTROL = 0x20000;
const int WRITE_DAC = 0x40000;
static string toolPath;
internal override string DisplayName
{
get { return SR.GetString(SR.WmiComponentName); }
}
protected override string InstallActionMessage
{
get { return SR.GetString(SR.WmiComponentInstall); }
}
internal override string[] InstalledVersions
{
get
{
string[] result;
if (this.IsInstalled)
{
result = new string[] { ServiceModelInstallStrings.LocalWmiNamespace };
}
else
{
result = new string[] { };
}
return result;
}
}
internal override bool IsInstalled
{
get
{
bool result = false;
try
{
ManagementScope scope = new ManagementScope(ServiceModelInstallStrings.LocalWmiNamespace);
scope.Connect();
result = true;
}
catch (ManagementException)
{
}
catch (System.Runtime.InteropServices.COMException)
{
}
catch (TypeInitializationException)
{
}
return result;
}
}
protected override string ReinstallActionMessage
{
get { return SR.GetString(SR.WmiComponentReinstall); }
}
static string ToolPath
{
get
{
if (String.IsNullOrEmpty(WmiInstallComponent.toolPath))
{
WmiInstallComponent.toolPath = Path.Combine(Environment.SystemDirectory, @"wbem\mofcomp.exe");
}
return WmiInstallComponent.toolPath;
}
}
protected override string UninstallActionMessage
{
get { return SR.GetString(SR.WmiComponentUninstall); }
}
internal override void Install(OutputLevel outputLevel)
{
if (this.IsInstalled)
{
EventLogger.LogWarning(SR.GetString(SR.WmiComponentAlreadyExists),
(OutputLevel.Verbose == outputLevel));
}
else
{
this.OnInstall(outputLevel);
}
}
void OnInstall(OutputLevel outputLevel)
{
string mofPath = Path.Combine(InstallHelper.GetWcfRuntimeInstallPath(),
"ServiceModel.mof");
string parameters = String.Format(CultureInfo.CurrentCulture, "\"{0}\"", mofPath);
Exception exception = null;
try
{
InstallHelper.ExecuteWait(ToolPath, parameters);
}
catch (ApplicationException e)
{
exception = e;
}
catch (FileNotFoundException e)
{
exception = e;
}
catch (Win32Exception e)
{
exception = e;
}
if (null != exception)
{
EventLogger.LogWarning(SR.GetString(SR.ProgramExecutionFailed, ToolPath, parameters, exception),
(OutputLevel.Normal == outputLevel));
}
ApplyNamespaceDacl(outputLevel);
}
internal override void Reinstall(OutputLevel outputLevel)
{
if (OutputLevel.Quiet != outputLevel)
{
EventLogger.LogToConsole(SR.GetString(SR.RepairMessage, this.DisplayName));
}
EventLogger.WriteMsiStyleLogEntry(SR.GetString(SR.RepairMessage, this.DisplayName));
this.OnInstall(outputLevel);
}
internal override void Uninstall(OutputLevel outputLevel)
{
if (!this.IsInstalled)
{
EventLogger.LogWarning(SR.GetString(SR.WmiComponentNotInstalled),
(OutputLevel.Verbose == outputLevel));
}
else
{
string mofPath = Path.Combine(InstallHelper.GetWcfRuntimeInstallPath(),
"ServiceModel.mof.uninstall");
InstallHelper.TryExecuteWait(outputLevel, ToolPath, String.Format(CultureInfo.CurrentCulture, "\"{0}\"", mofPath));
}
}
internal override InstallationState VerifyInstall()
{
return this.IsInstalled ? InstallationState.InstalledDefaults : InstallationState.NotInstalled;
}
void ApplyNamespaceDacl(OutputLevel outputLevel)
{
if (!this.IsInstalled)
{
EventLogger.LogError(SR.GetString(SR.WmiComponentNotInstalled));
}
else
{
ManagementObject systemSecurity = null;
try
{
systemSecurity = new ManagementObject(ServiceModelInstallStrings.LocalWmiNamespace + ":__SystemSecurity=@");
object[] result = new object[1];
result[0] = null;
systemSecurity.InvokeMethod("GetSD", result);
byte[] bytes = result[0] as byte[];
if (null != bytes)
{
RawSecurityDescriptor exisingSD = new RawSecurityDescriptor(bytes, 0);
RawAcl dacl = exisingSD.DiscretionaryAcl;
for (int i = dacl.Count - 1; i >= 0; i--)
{
dacl.RemoveAce(i);
}
SecurityIdentifier sidAdministrators = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
exisingSD.Owner = sidAdministrators;
CommonAce adminAce = new CommonAce(
AceFlags.ContainerInherit,
AceQualifier.AccessAllowed,
WBEM_ENABLE
| WBEM_METHOD_EXECUTE
| WBEM_FULL_WRITE_REP
| WBEM_WRITE_PROVIDER
| WBEM_PARTIAL_WRITE_REP
| WBEM_REMOTE_ACCESS
| READ_CONTROL
| WRITE_DAC,
sidAdministrators,
false,
null);
SecurityIdentifier sidNetworkService = new SecurityIdentifier(WellKnownSidType.NetworkServiceSid, null);
CommonAce networkSerivceAce = new CommonAce(
AceFlags.ContainerInherit, AceQualifier.AccessAllowed,
WBEM_ENABLE,
sidNetworkService, false, null);
SecurityIdentifier sidLocalService = new SecurityIdentifier(WellKnownSidType.LocalServiceSid, null);
CommonAce localServiceAce = new CommonAce(
AceFlags.ContainerInherit, AceQualifier.AccessAllowed,
WBEM_ENABLE,
sidLocalService, false, null);
int aceIndex = 0;
dacl.InsertAce(aceIndex++, adminAce);
dacl.InsertAce(aceIndex++, networkSerivceAce);
dacl.InsertAce(aceIndex++, localServiceAce);
NTAccount ntAccount = new NTAccount(Environment.MachineName, "ASPNET");
try
{
SecurityIdentifier sidAspNet = (SecurityIdentifier)ntAccount.Translate(typeof(SecurityIdentifier));
CommonAce aspNetAce = new CommonAce(
AceFlags.ContainerInherit, AceQualifier.AccessAllowed,
WBEM_ENABLE,
sidAspNet, false, null);
dacl.InsertAce(aceIndex++, aspNetAce);
using (ManagementObject wmiProvider = new ManagementObject(String.Format(CultureInfo.InvariantCulture, "{0}:__Win32Provider.Name=\"{1}\"", ServiceModelInstallStrings.LocalWmiNamespace, ServiceModelInstallStrings.ServiceModel)))
{
wmiProvider["SecurityDescriptor"] = String.Format(CultureInfo.InvariantCulture, "O:BAG:BAD:(A;;0x1;;;BA)(A;;0x1;;;NS)(A;;0x1;;;LS)(A;;0x1;;;{0})", sidAspNet);
wmiProvider.Put();
}
}
catch (IdentityNotMappedException)
{
EventLogger.LogInformation(SR.GetString(SR.WmiAspNetAccountNotFound),
(OutputLevel.Verbose == outputLevel));
}
catch (ManagementException e)
{
EventLogger.LogError(SR.GetString(SR.WmiComponentFailedToApplyProviderSecurity, e));
}
exisingSD.DiscretionaryAcl = dacl;
exisingSD.SetFlags(exisingSD.ControlFlags | ControlFlags.DiscretionaryAclProtected);
byte[] outbuff = new byte[exisingSD.BinaryLength];
exisingSD.GetBinaryForm(outbuff, 0);
result[0] = outbuff;
systemSecurity.InvokeMethod("SetSD", result);
}
}
catch (ManagementException e)
{
EventLogger.LogError(SR.GetString(SR.WmiComponentFailedToApplyNamespaceSecurity, e));
}
catch (System.Runtime.InteropServices.COMException e)
{
EventLogger.LogError(SR.GetString(SR.WmiComponentFailedToApplyNamespaceSecurity, e));
}
catch (TypeInitializationException e)
{
EventLogger.LogError(SR.GetString(SR.WmiComponentFailedToApplyNamespaceSecurity, e));
}
finally
{
if (null != systemSecurity)
{
systemSecurity.Dispose();
}
}
}
}
}
}
// 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
- SqlFlattener.cs
- ApplyImportsAction.cs
- LinearGradientBrush.cs
- ImageList.cs
- AsyncOperation.cs
- PermissionSetEnumerator.cs
- ConvertersCollection.cs
- ToolStripStatusLabel.cs
- MetabaseSettings.cs
- HttpSocketManager.cs
- TextTreeObjectNode.cs
- UnicodeEncoding.cs
- LinqToSqlWrapper.cs
- HtmlInputImage.cs
- ToolStripSplitStackLayout.cs
- MarkerProperties.cs
- Dynamic.cs
- OracleRowUpdatedEventArgs.cs
- RowToFieldTransformer.cs
- XmlByteStreamWriter.cs
- StaticSiteMapProvider.cs
- SymmetricAlgorithm.cs
- CryptoApi.cs
- WebOperationContext.cs
- PointIndependentAnimationStorage.cs
- ResourcesBuildProvider.cs
- OneToOneMappingSerializer.cs
- BaseTypeViewSchema.cs
- AnimatedTypeHelpers.cs
- OutputScope.cs
- Enum.cs
- PathFigure.cs
- LinqDataSourceHelper.cs
- recordstatescratchpad.cs
- MetaModel.cs
- WebPartDisplayModeCollection.cs
- Claim.cs
- ComponentChangingEvent.cs
- DataGridView.cs
- ResourceReader.cs
- DataGridViewRowPostPaintEventArgs.cs
- FixedSOMLineRanges.cs
- OciLobLocator.cs
- GeometryModel3D.cs
- FamilyMapCollection.cs
- DNS.cs
- ContractSearchPattern.cs
- httpapplicationstate.cs
- CodeExpressionStatement.cs
- PointLight.cs
- TdsParserSessionPool.cs
- ConnectionPointCookie.cs
- XmlSignatureProperties.cs
- SapiRecoInterop.cs
- COM2IVsPerPropertyBrowsingHandler.cs
- CodeSnippetStatement.cs
- ScriptingScriptResourceHandlerSection.cs
- MediaTimeline.cs
- ProgressChangedEventArgs.cs
- PerformanceCountersElement.cs
- ExpressionEditorSheet.cs
- ReadOnlyTernaryTree.cs
- HitTestWithGeometryDrawingContextWalker.cs
- RelatedPropertyManager.cs
- VirtualDirectoryMappingCollection.cs
- TextDecoration.cs
- ManagementExtension.cs
- FixedSOMElement.cs
- GifBitmapEncoder.cs
- XmlUtf8RawTextWriter.cs
- HttpModuleAction.cs
- TextSearch.cs
- HtmlLink.cs
- DelegatingTypeDescriptionProvider.cs
- PropertyGroupDescription.cs
- SqlConnectionPoolProviderInfo.cs
- XPathAncestorIterator.cs
- ResourceDisplayNameAttribute.cs
- EventHandlersStore.cs
- BaseCodePageEncoding.cs
- XmlTextWriter.cs
- XmlDocumentFragment.cs
- ClickablePoint.cs
- SqlDesignerDataSourceView.cs
- DuplexClientBase.cs
- ExtenderControl.cs
- OneWayChannelListener.cs
- TypeDelegator.cs
- EventlogProvider.cs
- KeyedHashAlgorithm.cs
- FactoryGenerator.cs
- WebEventCodes.cs
- EntityContainerEntitySet.cs
- TextParagraphProperties.cs
- BuildTopDownAttribute.cs
- UnsafeMethods.cs
- PhysicalFontFamily.cs
- TypeConverterAttribute.cs
- Timeline.cs
- HashUtility.cs