finished ICorPublish wrappers

git-svn-id: svn://svn.code.sf.net/p/processhacker/code@3392 21ef857c-d57f-4fe0-8362-d861dc6d29cd
This commit is contained in:
wj32
2010-07-18 09:03:34 +00:00
parent 48adb4a386
commit 98574d5848
2 changed files with 161 additions and 5 deletions
+128 -3
View File
@@ -21,6 +21,7 @@
*/
#include <ph.h>
#include <clrsup.h>
#define CINTERFACE
#define COBJMACROS
#include <corhdr.h>
@@ -28,7 +29,7 @@
#include <cordebug.h>
#include <corsym.h>
PVOID PhClrCreatePublish()
PPH_CLR_PUBLISH PhClrCreatePublish()
{
ICorPublish *publish;
@@ -40,7 +41,7 @@ PVOID PhClrCreatePublish()
&publish
)))
{
return publish;
return (PPH_CLR_PUBLISH)publish;
}
else
{
@@ -49,8 +50,132 @@ PVOID PhClrCreatePublish()
}
VOID PhClrFreePublish(
__in PVOID Publish
__in PPH_CLR_PUBLISH Publish
)
{
ICorPublish_Release((ICorPublish *)Publish);
}
PPH_CLR_PUBLISH_PROCESS PhClrGetProcessPublish(
__in PPH_CLR_PUBLISH Publish,
__in HANDLE ProcessId
)
{
ICorPublishProcess *process;
if (SUCCEEDED(ICorPublish_GetProcess(
(ICorPublish *)Publish,
(ULONG)ProcessId,
&process
)))
{
return (PPH_CLR_PUBLISH_PROCESS)process;
}
else
{
return NULL;
}
}
VOID PhClrFreePublishProcess(
__in PPH_CLR_PUBLISH_PROCESS Process
)
{
ICorPublishProcess_Release((ICorPublishProcess *)Process);
}
BOOLEAN PhClrIsManagedPublishProcess(
__in PPH_CLR_PUBLISH_PROCESS Process
)
{
BOOL managed;
if (SUCCEEDED(ICorPublishProcess_IsManaged(
(ICorPublishProcess *)Process,
&managed
)))
{
return !!managed;
}
return FALSE;
}
BOOLEAN PhClrEnumAppDomainsPublishProcess(
__in PPH_CLR_PUBLISH_PROCESS Process,
__out PPH_CLR_PUBLISH_APPDOMAIN *AppDomains,
__out PULONG NumberOfAppDomains
)
{
ICorPublishAppDomainEnum *appDomainEnum;
if (SUCCEEDED(ICorPublishProcess_EnumAppDomains(
(ICorPublishProcess *)Process,
&appDomainEnum
)))
{
PPH_CLR_PUBLISH_APPDOMAIN *appDomains;
ULONG count;
if (SUCCEEDED(ICorPublishAppDomainEnum_GetCount(
appDomainEnum,
&count
)))
{
appDomains = PhAllocate(sizeof(PPH_CLR_PUBLISH_APPDOMAIN) * count);
if (SUCCEEDED(ICorPublishAppDomainEnum_Next(
appDomainEnum,
count,
(ICorPublishAppDomain **)appDomains,
&count
)))
{
ICorPublishAppDomainEnum_Release(appDomainEnum);
*AppDomains = appDomains;
*NumberOfAppDomains = count;
return TRUE;
}
PhFree(appDomains);
}
ICorPublishAppDomainEnum_Release(appDomainEnum);
}
return FALSE;
}
VOID PhClrFreePublishAppDomain(
__in PPH_CLR_PUBLISH_APPDOMAIN AppDomain
)
{
ICorPublishAppDomain_Release((ICorPublishAppDomain *)AppDomain);
}
PPH_STRING PhClrGetNamePublishAppDomain(
__in PPH_CLR_PUBLISH_APPDOMAIN AppDomain
)
{
PPH_STRING name;
name = PhCreateStringEx(NULL, 0x100);
if (SUCCEEDED(ICorPublishAppDomain_GetName(
(ICorPublishAppDomain *)AppDomain,
name->Length,
NULL,
name->Buffer
)))
{
PhTrimStringToNullTerminator(name);
return name;
}
PhDereferenceObject(name);
return NULL;
}
+33 -2
View File
@@ -1,10 +1,41 @@
#ifndef _PH_CLRSUP_H
#define _PH_CLRSUP_H
PVOID PhClrCreatePublish();
typedef PVOID PPH_CLR_PUBLISH;
typedef PVOID PPH_CLR_PUBLISH_PROCESS;
typedef PVOID PPH_CLR_PUBLISH_APPDOMAIN;
PPH_CLR_PUBLISH PhClrCreatePublish();
VOID PhClrFreePublish(
__in PVOID Publish
__in PPH_CLR_PUBLISH Publish
);
PPH_CLR_PUBLISH_PROCESS PhClrGetProcessPublish(
__in PPH_CLR_PUBLISH Publish,
__in HANDLE ProcessId
);
VOID PhClrFreePublishProcess(
__in PPH_CLR_PUBLISH_PROCESS Process
);
BOOLEAN PhClrIsManagedPublishProcess(
__in PPH_CLR_PUBLISH_PROCESS Process
);
BOOLEAN PhClrEnumAppDomainsPublishProcess(
__in PPH_CLR_PUBLISH_PROCESS Process,
__out PPH_CLR_PUBLISH_APPDOMAIN *AppDomains,
__out PULONG NumberOfAppDomains
);
VOID PhClrFreePublishAppDomain(
__in PPH_CLR_PUBLISH_APPDOMAIN AppDomain
);
PPH_STRING PhClrGetNamePublishAppDomain(
__in PPH_CLR_PUBLISH_APPDOMAIN AppDomain
);
#endif