xpmgr/BuildTools/Include/corpub.idl

267 lines
8.0 KiB
Plaintext

// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
/* -------------------------------------------------------------------------- *
* 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);
}