125 lines
4.4 KiB
C#
125 lines
4.4 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="ProcessModule.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//------------------------------------------------------------------------------
|
|
|
|
namespace System.Diagnostics {
|
|
using System.Diagnostics;
|
|
using System;
|
|
using System.Collections;
|
|
using System.IO;
|
|
using Microsoft.Win32;
|
|
using System.ComponentModel;
|
|
using System.Globalization;
|
|
using System.Security.Permissions;
|
|
// using System.Windows.Forms;
|
|
using System.Runtime.Versioning;
|
|
|
|
/// <devdoc>
|
|
/// A process module component represents a DLL or EXE loaded into
|
|
/// a particular process. Using this component, you can determine
|
|
/// information about the module.
|
|
/// </devdoc>
|
|
[Designer("System.Diagnostics.Design.ProcessModuleDesigner, " + AssemblyRef.SystemDesign)]
|
|
[PermissionSet(SecurityAction.LinkDemand, Name="FullTrust")]
|
|
[PermissionSet(SecurityAction.InheritanceDemand, Name="FullTrust")]
|
|
public class ProcessModule : Component {
|
|
internal ModuleInfo moduleInfo;
|
|
FileVersionInfo fileVersionInfo;
|
|
|
|
/// <devdoc>
|
|
/// Initialize the module.
|
|
/// </devdoc>
|
|
/// <internalonly/>
|
|
internal ProcessModule(ModuleInfo moduleInfo) {
|
|
this.moduleInfo = moduleInfo;
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// Make sure we are running on NT.
|
|
/// </devdoc>
|
|
/// <internalonly/>
|
|
internal void EnsureNtProcessInfo() {
|
|
if (Environment.OSVersion.Platform != PlatformID.Win32NT)
|
|
throw new PlatformNotSupportedException(SR.GetString(SR.WinNTRequired));
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// Returns the name of the Module.
|
|
/// </devdoc>
|
|
[MonitoringDescription(SR.ProcModModuleName)]
|
|
public string ModuleName {
|
|
get {
|
|
return moduleInfo.baseName;
|
|
}
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// Returns the full file path for the location of the module.
|
|
/// </devdoc>
|
|
[MonitoringDescription(SR.ProcModFileName)]
|
|
public string FileName {
|
|
[ResourceExposure(ResourceScope.Machine)]
|
|
get {
|
|
return moduleInfo.fileName;
|
|
}
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// Returns the memory address that the module was loaded at.
|
|
/// </devdoc>
|
|
[MonitoringDescription(SR.ProcModBaseAddress)]
|
|
public IntPtr BaseAddress {
|
|
[ResourceExposure(ResourceScope.Process)]
|
|
get {
|
|
return moduleInfo.baseOfDll;
|
|
}
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// Returns the amount of memory required to load the module. This does
|
|
/// not include any additional memory allocations made by the module once
|
|
/// it is running; it only includes the size of the static code and data
|
|
/// in the module file.
|
|
/// </devdoc>
|
|
[MonitoringDescription(SR.ProcModModuleMemorySize)]
|
|
public int ModuleMemorySize {
|
|
get {
|
|
return moduleInfo.sizeOfImage;
|
|
}
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// Returns the memory address for function that runs when the module is
|
|
/// loaded and run.
|
|
/// </devdoc>
|
|
[MonitoringDescription(SR.ProcModEntryPointAddress)]
|
|
public IntPtr EntryPointAddress {
|
|
get {
|
|
EnsureNtProcessInfo();
|
|
return moduleInfo.entryPoint;
|
|
}
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// Returns version information about the module.
|
|
/// </devdoc>
|
|
[Browsable(false)]
|
|
public FileVersionInfo FileVersionInfo {
|
|
[ResourceExposure(ResourceScope.Machine)] // Let's review callers - why do they want this?
|
|
[ResourceConsumption(ResourceScope.Machine)]
|
|
get {
|
|
if (fileVersionInfo == null)
|
|
fileVersionInfo = FileVersionInfo.GetVersionInfo(FileName);
|
|
return fileVersionInfo;
|
|
}
|
|
}
|
|
|
|
public override string ToString() {
|
|
return String.Format(CultureInfo.CurrentCulture, "{0} ({1})", base.ToString(), this.ModuleName);
|
|
}
|
|
}
|
|
}
|