Метод 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] Идентификатор процесса, к которому следует подключить профилировщик. На 64-разрядном компьютере разрядность профилируемого процесса должна соответствовать разрядности инициирующего процесса, вызывающего метод AttachProfiler
. Если учетная запись пользователя, в которой вызывается метод AttachProfiler
, имеет права администратора, целевым процессом может быть любой процесс в системе. В противном случае целевой процесс должен принадлежать той же учетной записи пользователя.
dwMillisecondsMax
[in] Время в миллисекундах для завершения выполнения AttachProfiler
. Инициирующий процесс должен передавать интервал времени, которого заведомо будет достаточно, чтобы конкретный профилировщик завершил свою инициализацию.
pClsidProfiler
[in] Указатель на идентификатор CLSID загружаемого профилировщика. Инициирующий процесс может повторно использовать эту память после возврата метода AttachProfiler
.
wszProfilerPath
[in] Полный путь к загружаемому DLL-файлу профилировщика. Эта строка должна содержать не более 260 символов, включая символ конца строки null. Если в параметре wszProfilerPath
задана пустая строка или значение null, среда CLR будет пытаться найти местоположение DLL-файла профилировщика путем поиска в реестре CLSID, на который указывает параметр pClsidProfiler
.
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