ICLRProfiling::AttachProfiler — Metoda
Dołącza określony profiler do określonego procesu.
Składnia
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
Parametry
dwProfileeProcessID
[in] Identyfikator procesu, do którego należy dołączyć profiler. Na maszynie 64-bitowej bitowość profilowanego procesu musi być zgodna z bitowością procesu wyzwalacza, który wywołuje metodę AttachProfiler
. Jeśli konto użytkownika, w ramach którego AttachProfiler
jest wywoływane, ma uprawnienia administracyjne, proces docelowy może być dowolnym procesem w systemie. W przeciwnym razie proces docelowy musi być własnością tego samego konta użytkownika.
dwMillisecondsMax
[in] Czas trwania (w milisekundach) do AttachProfiler
ukończenia. Proces wyzwalacza powinien przekazać limit czasu, który jest znany jako wystarczający dla określonego profilera w celu ukończenia jego inicjowania.
pClsidProfiler
[in] Wskaźnik do identyfikatora CLSID profilera do załadowania. Proces wyzwalacza może ponownie używać tej pamięci po AttachProfiler
powrocie.
wszProfilerPath
[in] Pełna ścieżka do pliku DLL profilera do załadowania. Ten ciąg powinien zawierać nie więcej niż 260 znaków, w tym terminator o wartości null. Jeśli wszProfilerPath
parametr ma wartość null lub pusty ciąg, środowisko uruchomieniowe języka wspólnego (CLR) spróbuje znaleźć lokalizację pliku DLL profilera, wyszukując w rejestrze identyfikator CLSID wskazujący pClsidProfiler
.
pvClientData
[in] Wskaźnik do danych, które mają zostać przekazane do profilera przez metodę ICorProfilerCallback3::InitializeForAttach . Proces wyzwalacza może ponownie używać tej pamięci po AttachProfiler
powrocie. Jeśli pvClientData
parametr ma wartość null, cbClientData
musi mieć wartość 0 (zero).
cbClientData
[in] Rozmiar w bajtach danych, które pvClientData
wskazuje.
Wartość zwracana
Ta metoda zwraca następujące wartości HRESULTs.
HRESULT | Opis |
---|---|
S_OK | Określony profiler został pomyślnie dołączony do procesu docelowego. |
CORPROF_E_PROFILER_ALREADY_ACTIVE | Profiler jest już aktywny lub dołączany do procesu docelowego. |
CORPROF_E_PROFILER_NOT_ATTACHABLE | Określony profiler nie obsługuje załącznika. Proces wyzwalacza może podjąć próbę dołączenia innego profilera. |
CORPROF_E_PROFILEE_INCOMPATIBLE_WITH_TRIGGER | Nie można zażądać załącznika profilera, ponieważ wersja procesu docelowego jest niezgodna z bieżącym procesem wywołującym metodę AttachProfiler . |
HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) | Użytkownik procesu wyzwalacza nie ma dostępu do procesu docelowego. |
HRESULT_FROM_WIN32(ERROR_PRIVILEGE_NOT_HELD) | Użytkownik procesu wyzwalacza nie ma uprawnień niezbędnych do dołączenia profilera do danego procesu docelowego. Dziennik zdarzeń aplikacji może zawierać więcej informacji. |
CORPROF_E_IPC_FAILED | Wystąpił błąd podczas komunikowania się z procesem docelowym. Dzieje się tak często, jeśli proces docelowy został zamknięty. |
HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) | Proces docelowy nie istnieje lub nie uruchamia środowiska CLR obsługującego załącznik. Może to wskazywać, że clR został zwolniony od wywołania metody wyliczania środowiska uruchomieniowego. |
HRESULT_FROM_WIN32(ERROR_TIMEOUT) | Upłynął limit czasu bez rozpoczynania ładowania profilera. Możesz ponowić próbę wykonania operacji dołączania. Przekroczenia limitu czasu występują, gdy finalizator w procesie docelowym jest uruchamiany przez dłuższy czas niż wartość limitu czasu. |
E_INVALIDARG | Co najmniej jeden parametr ma nieprawidłowe wartości. |
E_FAIL | Wystąpił inny nieokreślony błąd. |
Inne kody błędów | Jeśli metoda ICorProfilerCallback3::InitializeForAttach profilera zwraca wartość HRESULT wskazującą błąd, AttachProfiler zwraca tę samą wartość HRESULT. W takim przypadku E_NOTIMPL jest konwertowana na CORPROF_E_PROFILER_NOT_ATTACHABLE. |
Uwagi
Zarządzanie pamięcią
Zgodnie z konwencjami COM obiekt wywołujący AttachProfiler
(na przykład kod wyzwalacza utworzony przez dewelopera profilera) jest odpowiedzialny za przydzielanie i delokowanie pamięci dla danych, do których pvClientData
wskazuje parametr. Gdy clR wykonuje AttachProfiler
wywołanie, wykonuje kopię pamięci, która pvClientData
wskazuje i przekazuje ją do procesu docelowego. Gdy clR wewnątrz procesu docelowego odbiera własną kopię pvClientData
bloku, przekazuje blok do profilera za pomocą InitializeForAttach
metody , a następnie cofa jego kopię pvClientData
bloku z procesu docelowego.
Wymagania
Platformy: Zobacz Wymagania systemowe.
Nagłówka: CorProf.idl, CorProf.h
Biblioteki: CorGuids.lib
wersje .NET Framework: dostępne od 4