Metodo ICLRProfiling::AttachProfiler
Connette il profiler specificato al processo specificato.
Sintassi
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
Parametri
dwProfileeProcessID
[in] ID del processo a cui connettere il profiler. In un computer a 64 bit, il numero di bit del processo profilato deve corrispondere a quello del processo trigger che chiama AttachProfiler
. Se l'account utente in cui viene chiamato AttachProfiler
dispone di privilegi amministrativi, il processo di destinazione può essere qualsiasi processo nel sistema. In caso contrario, il processo di destinazione deve essere di proprietà dello stesso account utente.
dwMillisecondsMax
[in] Intervallo di tempo, in millisecondi, richiesto per il completamento di AttachProfiler
. Il processo trigger deve passare un timeout sufficiente a garantire l'effettivo completamento dell'inizializzazione del profiler specifico.
pClsidProfiler
[in] Puntatore al CLSID del profiler da caricare. Il processo trigger può riutilizzare questa memoria dopo che AttachProfiler
restituisce un risultato.
wszProfilerPath
[in] Percorso completo del file DLL del profiler da caricare. Questa stringa deve contenere al massimo 260 caratteri, compreso il terminatore null. Se wszProfilerPath
è null o una stringa vuota, Common Language Runtime (CLR) tenterà di determinare il percorso del file DLL del profiler cercando nel Registro di sistema il CLSID a cui pClsidProfiler
punta.
pvClientData
[in] Puntatore ai dati da passare al profiler dal metodo ICorProfilerCallback3::InitializeForAttach . Il processo trigger può riutilizzare questa memoria dopo che AttachProfiler
restituisce un risultato. Se pvClientData
è null, cbClientData
deve essere 0 (zero).
cbClientData
[in] Dimensioni in byte dei dati a cui pvClientData
punta.
Valore restituito
Questo metodo restituisce gli HRESULT seguenti.
HRESULT | Descrizione |
---|---|
S_OK | Il profiler specificato è stato connesso correttamente al processo di destinazione. |
CORPROF_E_PROFILER_ALREADY_ACTIVE | È già presente un profiler attivo o connesso al processo di destinazione. |
CORPROF_E_PROFILER_NOT_ATTACHABLE | Il profiler specificato non supporta la connessione. Il processo trigger può tentare di connettere un profiler diverso. |
CORPROF_E_PROFILEE_INCOMPATIBLE_WITH_TRIGGER | Non è stato possibile richiedere una connessione del profiler poiché la versione del processo di destinazione è incompatibile con il processo corrente che chiama AttachProfiler . |
HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) | L'utente del processo trigger non ha accesso al processo di destinazione. |
HRESULT_FROM_WIN32(ERROR_PRIVILEGE_NOT_HELD) | L'utente del processo trigger non dispone dei privilegi necessari a connettere un profiler al processo di destinazione specificato. Il log eventi dell'applicazione può contenere altre informazioni. |
CORPROF_E_IPC_FAILED | Si è verificato un errore durante la comunicazione con il processo di destinazione. In genere questo errore si verifica se il processo di destinazione è in fase di chiusura. |
HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) | Il processo di destinazione non esiste o non restituisce un runtime che supporti la connessione. Ciò può indicare che il runtime è stato scaricato dopo la chiamata al metodo di enumerazione dei runtime. |
HRESULT_FROM_WIN32(ERROR_TIMEOUT) | Si è verificato il timeout prima dell'inizio del caricamento del profiler. È possibile ritentare l'operazione di connessione. I timeout si verificano quando un finalizzatore nel processo di destinazione viene eseguito per un tempo maggiore del valore di timeout. |
E_INVALIDARG | Uno o più parametri presentano valori non validi. |
E_FAIL | Si è verificato un errore non specificato di altro tipo. |
Altri codici di errore | Se il metodo ICorProfilerCallback3::InitializeForAttach del profiler restituisce un valore HRESULT che indica un errore, AttachProfiler restituisce lo stesso HRESULT. In questo caso, E_NOTIMPL viene convertito in CORPROF_E_PROFILER_NOT_ATTACHABLE. |
Commenti
Gestione della memoria
In conformità alle convenzioni COM, il chiamante di AttachProfiler
(ad esempio, il codice del trigger creato dallo sviluppatore del profiler) è responsabile dell'allocazione e della deallocazione della memoria dei dati a cui punta il parametro pvClientData
. Quando CLR esegue la chiamata a AttachProfiler
fa una copia della memoria a cui pvClientData
punta e la trasmette al processo di destinazione. Quando il runtime CLR nel processo di destinazione riceve la propria copia del blocco pvClientData
lo passa al profiler tramite il metodo InitializeForAttach
, quindi dealloca la propria copia del blocco pvClientData
dal processo di destinazione.
Requisiti
Piattaforme: vedere Requisiti di sistema di .NET Framework.
Intestazione: CorProf.idl, CorProf.h
Libreria: CorGuids.lib
Versioni di .NET Framework: Disponibile da 4