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 函数

可以使用这两个数组参数设置为 null 调用此函数,以便返回目标进程中的 CLR 计数。 从此计数中,调用方可以推断将要创建的缓冲区的大小: (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 起可用