EnumerateCLRs 函数

提供枚举进程中 CLR 的机制。

语法

HRESULT EnumerateCLRs (
    [in]  DWORD      debuggeePID,
    [out] HANDLE**   ppHandleArrayOut,
    [out] LPWSTR**   ppStringArrayOut,
    [out] DWORD*     pdwArrayLengthOut
);

参数

debuggeePID
[in] 要从其枚举已加载的 CLR 的进程的进程标识符。

ppHandleArrayOut
[out] 指向包含用于继续 CLR 启动的事件句柄的数组的指针。 不保证数组中的每个句柄都有效。 有效的句柄将作为相应运行时(位于与 ppStringArrayOut 相同的索引中)的继续启动事件使用。

ppStringArrayOut
[out] 指向一个字符串数组的指针,该字符串数组指定进程中加载的 CLR 的完整路径。

pdwArrayLengthOut
[out] 指向包含大小相等的 ppHandleArrayOutpdwArrayLengthOut 的长度的 DWORD 的指针。

返回值

S_OK
已成功确定该进程中的 CLR 的数目,并已正确填写相应的句柄数组和路径数组。

E_INVALIDARG
ppHandleArrayOutppStringArrayOut 为 null,或 pdwArrayLengthOut 为 null。

E_OUTOFMEMORY
该函数不能为句柄和路径数组分配足够的内存。

E_FAIL(或其他 E_ 返回代码)
无法枚举加载的 CLR。

备注

对于由 debuggeePID 标识的目标进程,函数将路径数组 ppStringArrayOut 返回到进程中加载的 CLR;并返回事件句柄数组 ppHandleArrayOut(其中可能包含相同索引处 CLR 的继续启动事件)以及数组的大小 pdwArrayLengthOut(它指定已加载的 CLR 的数目)。

在 Windows 操作系统上,debuggeePID 映射到 OS 进程标识符。

ppHandleArrayOutppStringArrayOut 的内存由此函数分配。 若要释放分配的内存,必须调用 CloseCLREnumeration 函数

为了在目标进程中返回 CLR 计数,可在两个数组参数均设为 null 的情况下调用此函数。 调用方可以从此计数推断将创建的缓冲区的大小:(sizeof(HANDLE) * count) + (sizeof(LPWSTR) * count) + (sizeof(WCHAR*) * count * MAX_PATH)

要求

平台:请参阅 .NET 支持的操作系统

标头:dbgshim.h

库:dbgshim.dll、libdbgshim.so、libdbgshim.dylib

.NET 版本:自 .NET Core 2.1 起可用