ICLRProfiling::AttachProfiler 方法

将指定的探查器附加到指定的进程中。

语法

HRESULT AttachProfiler(  
  [in] DWORD dwProfileeProcessID,  
  [in] DWORD dwMillisecondsMax,                     // optional  
  [in] const CLSID * pClsidProfiler,  
  [in] LPCWSTR wszProfilerPath,                     // optional  
  [in] size_is(cbClientData)] void * pvClientData,  // optional  
  [in] UINT cbClientData);                          // optional  

参数

dwProfileeProcessID
[in] 应附加探查器的进程的进程 ID。 在 64 位计算机上,被分析进程的位数必须匹配调用 AttachProfiler 的触发进程的位数。 如果调用 AttachProfiler 的用户帐户具有管理特权,则目标进程可能是系统上的任何进程。 否则,相同的用户帐户必须拥有目标进程。

dwMillisecondsMax
[in] AttachProfiler 完成的持续时间(以毫秒为单位)。 触发器进程应传递一个特定探查器足以完成其初始化的已知超时。

pClsidProfiler
[in] 指向要加载的探查器 CLSID 的指针。 AttachProfiler 返回后,触发器进程可重用此内存。

wszProfilerPath
[in] 要加载的探查器 DLL 文件的完整路径。 此字符串应包含不超过 260 个字符,包括 null 终止符。 如果 wszProfilerPath 为 null 或为空字符串,公共语言运行时 (CLR) 将通过在 pClsidProfiler 指向的 CLSID 的注册表中查找探查器的 DLL 文件的位置。

pvClientData
[in] 指向要通过 ICorProfilerCallback3::InitializeForAttach 方法传递给探查器的数据的指针。 AttachProfiler 返回后,触发器进程可重用此内存。 如果 pvClientData 为 null,cbClientData 必须为 0(零)。

cbClientData
[in] pvClientData 指向的数据的大小(以字节为单位)。

返回值

此方法将返回以下 HRESULT。

HRESULT 说明
S_OK 指定的探查器已成功附加到目标进程中。
CORPROF_E_PROFILER_ALREADY_ACTIVE 已有活动的或附加到目标进程的探查器。
CORPROF_E_PROFILER_NOT_ATTACHABLE 指定的探查器不支持附件。 触发进程可能会尝试附加不同的探查器。
CORPROF_E_PROFILEE_INCOMPATIBLE_WITH_TRIGGER 无法请求探查器附件,因为目标进程的版本与当前正在调用 AttachProfiler 的进程不兼容。
HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) 触发进程的用户没有访问目标进程的权限。
HRESULT_FROM_WIN32(ERROR_PRIVILEGE_NOT_HELD) 触发进程的用户没有将探查器附加到给定的目标进程所必需的特权。 应用程序事件日志可能包含详细信息。
CORPROF_E_IPC_FAILED 与目标进程进行通信时发生错误。 通常在目标进程已关闭时,会发生此类错误。
HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) 目标进程中不存在或未运行支持附件的 CLR。 这可能表示,自调用运行时枚举方法时,就已卸载 CLR。
HRESULT_FROM_WIN32(ERROR_TIMEOUT) 尚未开始加载探查器,超时就已过期。 可重试附加操作。 当目标进程中的终结器运行时间长于超时值时,就会出现超时。
E_INVALIDARG 一个或多个参数具有无效值。
E_FAIL 出现其他未指定错误。
其他错误代码 如果探查器的 ICorProfilerCallback3::InitializeForAttach 方法返回指示失败的 HRESULT,AttachProfiler 将返回相同的 HRESULT。 在这种情况下,E_NOTIMPL 将转换为 CORPROF_E_PROFILER_NOT_ATTACHABLE。

注解

内存管理

与 COM 约定一致,AttachProfiler 的调用方(例如,由探查器开发人员创作的触发器代码)将负责分配和释放 pvClientData 参数指向的数据的内存。 当 CLR 执行 AttachProfiler 调用时,会创建 pvClientData 指向的内存的副本,并将其传输到目标进程中。 当目标进程内部的 CLR 接收到自己的 pvClientData 块副本时,会通过 InitializeForAttach 方法将块传递给探查器,然后从目标进程释放其 pvClientData 块的副本。

要求

平台:请参阅系统要求

头文件: CorProf.idl、CorProf.h

库:CorGuids.lib

.NET Framework 版本:自 4 起可用

另请参阅