From ef1e2ab328087c61a6878c1e84f4fc5d710aebce Mon Sep 17 00:00:00 2001 From: dotnet-bot Date: Fri, 30 Jan 2015 14:14:42 -0800 Subject: Initial commit to populate CoreCLR repo [tfs-changeset: 1407945] --- src/inc/corpub.idl | 265 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 265 insertions(+) create mode 100644 src/inc/corpub.idl (limited to 'src/inc/corpub.idl') diff --git a/src/inc/corpub.idl b/src/inc/corpub.idl new file mode 100644 index 0000000000..c54605ef7e --- /dev/null +++ b/src/inc/corpub.idl @@ -0,0 +1,265 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// +/* -------------------------------------------------------------------------- * + * Common Language Runtime Process Publishing Interfaces + * -------------------------------------------------------------------------- */ + +cpp_quote("#if 0") +#ifndef DO_NO_IMPORTS +import "unknwn.idl"; +#endif +cpp_quote("#endif") + +typedef enum +{ + COR_PUB_MANAGEDONLY = 0x00000001 // Must always be set, + // only enumerates + // managed processes +} COR_PUB_ENUMPROCESS; + + +/* -------------------------------------------------------------------------- * + * Forward declarations + * -------------------------------------------------------------------------- */ +#pragma warning(push) +#pragma warning(disable:28718) //Unable to annotate as this is not a local interface + +interface ICorPublish; +interface ICorPublishProcess; +interface ICorPublishAppDomain; +interface ICorPublishProcessEnum; +interface ICorPublishAppDomainEnum; + +#pragma warning(pop) + +/* ------------------------------------------------------------------------- * + * Library defintion + * ------------------------------------------------------------------------- */ + +[ + uuid(e97ca460-657d-11d3-8d5b-00104b35e7ef), + version(1.0), + helpstring("Common Language Runtime Process Publishing Library") +] +library CorpubProcessLib +{ + importlib("STDOLE2.TLB"); + + // CorPublish is a shared component across all version of the runtime. + [ + uuid(047a9a40-657e-11d3-8d5b-00104b35e7ef) + ] + coclass CorpubPublish + { + [default] interface ICorPublish; + interface ICorPublishProcess; + interface ICorPublishAppDomain; + interface ICorPublishProcessEnum; + interface ICorPublishAppDomainEnum; + }; +}; + + +/* -------------------------------------------------------------------------- * + * Interface definitions + * -------------------------------------------------------------------------- */ + +/* + * This interface is the top level interface for publishing of processes. + */ +[ + object, + uuid(9613A0E7-5A68-11d3-8F84-00A0C9B4D50C), + pointer_default(unique), + local +] +interface ICorPublish : IUnknown +{ + /* + * Retrieves a list of managed processes on this machine which + * the current user has permission to debug. In this version, + * Type must always be equal to COR_PUB_MANAGEDONLY. + * The list is based on a snapshot of the processes running when + * the enum method is called. The enumerator will not reflect any + * processes that start before or terminate after EnumProcesses is called. + * If EnumProcesses is called more than once on this ICorPublish + * instance, a new up-to-date enumeration will be returned without + * affecting any previous ones. + */ + HRESULT EnumProcesses([in] COR_PUB_ENUMPROCESS Type, + [out] ICorPublishProcessEnum **ppIEnum); + + /* + * Gets a new ICorPublishProcess object for the managed process + * with the given process ID. Returns failure if the process doesn't + * exist, or isn't a managed process that can be debugged by the current + * user. + */ + HRESULT GetProcess([in] unsigned pid, + [out] ICorPublishProcess **ppProcess); +} + +/* + * An abstract enumerator. + */ +[ + object, + uuid(C0B22967-5A69-11d3-8F84-00A0C9B4D50C), + pointer_default(unique), + local +] +interface ICorPublishEnum : IUnknown +{ + /* + * Moves the current position forward the given number of + * elements. + */ + HRESULT Skip([in] ULONG celt); + + /* + * Sets the position of the enumerator to the beginning of the + * enumeration. + */ + HRESULT Reset(); + + /* + * Creates another enumerator with the same current position + * as this one. + */ + HRESULT Clone([out] ICorPublishEnum **ppEnum); + + /* + * Gets the number of elements in the enumeration + */ + HRESULT GetCount([out] ULONG *pcelt); +}; + +#pragma warning(push) +#pragma warning(disable:28718) +/* + * Describes a process on a machine. + */ +[ + object, + uuid(18D87AF1-5A6A-11d3-8F84-00A0C9B4D50C), + pointer_default(unique), + local +] +interface ICorPublishProcess : IUnknown +{ + /* + * Returns true if the process is known to have managed code + * running in it. Since this version of ICorPublish only provides access + * to managed processes, this method always returns true. + */ + HRESULT IsManaged([out] BOOL *pbManaged); + + /* + * Enumerates the list of known application domains in this process. + * This list is based on a snapshot of the existing AppDomains when + * this method is called. This method may be called more than + * once to create a new up-to-date list. Existing enumerations will not + * be affected by calls to this method. If the process has been + * terminated, this will fail with CORDBG_E_PROCESS_TERMINATED. + */ + HRESULT EnumAppDomains([out] ICorPublishAppDomainEnum **ppEnum); + + /* + * Returns the OS ID for this process. + */ + HRESULT GetProcessID([out] unsigned *pid); + + /* + * Get the full path of the executable for this process. + * If szName is non-null, this copies up to cchName characters (including + * the null terminator) into szName, and ensures it is null-terminated. + * If pcchName is non-null, the actual number of characters in the name + * (including the null terminator) is stored there. This method returns + * S_OK regardless of how many characters were copied. + */ + HRESULT GetDisplayName([in] ULONG32 cchName, + [out] ULONG32 *pcchName, + [out, size_is(cchName), + length_is(*pcchName)] WCHAR *szName); +} +#pragma warning(pop) + +#pragma warning(push) +#pragma warning(disable:28718) +/* + * Provide information on an Application Domain object. + */ +[ + object, + uuid(D6315C8F-5A6A-11d3-8F84-00A0C9B4D50C), + pointer_default(unique), + local +] +interface ICorPublishAppDomain : IUnknown +{ + /* + * Gets the identification number of this application domain. + * Note that this number is unique to this AppDomain, but only + * within the containing process. + */ + HRESULT GetID([out] ULONG32 *puId); + + /* + * Get the name for an application domain. + * If szName is non-null, this copies up to cchName characters (including + * the null terminator) into szName, and ensures it is null-terminated. + * If pcchName is non-null, the actual number of characters in the name + * (including the null terminator) is stored there. This method returns + * S_OK regardless of how many characters were copied. + */ + HRESULT GetName([in] ULONG32 cchName, + [out] ULONG32 *pcchName, + [out, size_is(cchName), + length_is(*pcchName)] WCHAR *szName); +} +#pragma warning(pop) + + +/* + * Enumerate a list of processes based on the filter criteria given + * when the enumerator object was created. + */ +[ + object, + uuid(A37FBD41-5A69-11d3-8F84-00A0C9B4D50C), + pointer_default(unique), + local +] +interface ICorPublishProcessEnum : ICorPublishEnum +{ + /* + * Gets the next "celt" processes in the enumeration. + */ + HRESULT Next([in] ULONG celt, + [out, size_is(celt), + length_is(*pceltFetched)] ICorPublishProcess **objects, + [out] ULONG *pceltFetched); +} + +/* + * Enumerate a list of app domains based in a process. + */ +[ + object, + uuid(9F0C98F5-5A6A-11d3-8F84-00A0C9B4D50C), + pointer_default(unique), + local +] +interface ICorPublishAppDomainEnum : ICorPublishEnum +{ + /* + * Gets the next "celt" application domains in the enumeration. + */ + HRESULT Next([in] ULONG celt, + [out, size_is(celt), + length_is(*pceltFetched)] ICorPublishAppDomain **objects, + [out] ULONG *pceltFetched); +} + -- cgit v1.2.3