Impostazione e recupero di un token di log per un thread

La registrazione setupAPI supporta un meccanismo che stabilisce un contesto di log per un thread. Questo contesto viene stabilito impostando un token di log per il thread. SetupAPI fornisce questo meccanismo in modo che il codice chiamato da un thread possa scrivere voci di log nel contesto di log del thread chiamante.

Ad esempio, un thread può impostare un token di log per il relativo contesto di log prima di chiamare un programma di installazione della classe o un co-programma di installazione. Il programma di installazione, a sua volta, può recuperare il token di log del thread chiamante e usare tale token per scrivere voci di log nel log di testo e sezione associate al contesto di log del thread chiamante.

Impostazione di un token di log per un thread

La funzione SetupSetThreadLogToken imposta un token di log per il thread da cui è stata chiamata questa funzione. Il token di log può essere un token di log definito dal sistema o un token di log recuperato chiamando SetupGetThreadLogToken.

Di seguito sono riportati esempi di come è possibile stabilire un contesto di log per un thread:

  • Un'applicazione di installazione può chiamare SetupSetThreadLogToken per stabilire un contesto di log per altri codici di installazione eseguiti nello stesso thread. Quando stabilisce il contesto di log per il thread, l'applicazione deve usare un token di log definito dal sistema, ad esempio LOGTOKEN_SETUPAPI_APPLOG, nella chiamata a SetupSetThreadLogToken.

    Nota Se il contesto di log viene impostato usando un token di log definito dal sistema, le chiamate successive a una funzione di registrazione SetupAPI effettuata dal contesto di log, scrivere voci di log nel log di installazione, che non fanno parte di una sezione log di testo.

  • Se un programma di installazione della classe o il co-programma di installazione avvia un nuovo thread, il programma di installazione può impostare il contesto di log per tale thread come thread padre. Questa operazione viene eseguita nel modo seguente:

    1. Prima che il thread padre inizi il nuovo thread, acquisisce il token di log corrente chiamando SetupGetThreadLogToken.
    2. Il thread padre avvia il nuovo thread e passa il token di log corrente tramite un metodo specifico dell'implementazione, ad esempio il salvataggio del token in una variabile globale.
    3. Il nuovo thread chiama SetupSetThreadLogToken con il token di log corrente. Di conseguenza, il nuovo thread "eredita" il contesto del log del thread padre.

    Nota Se un thread di un programma di installazione di classe o di un co-programma di installazione imposta il contesto di log usando questo metodo, le chiamate successive a una funzione di registrazione SetupAPI creata da tali voci di log di registrazione del contesto di log di installazione che possono far parte di una sezione log di testo. Ciò accade solo se una sezione del log di testo è stata stabilita dall'operazione di installazione setupAPI che ha chiamato il programma di installazione.

Di seguito è riportato un esempio di chiamata a SetupSetThreadLogToken che imposta il contesto di log del thread corrente sul log di installazione del dispositivo (SetupAPI.app.log) specificando il token di log definito dal sistema di LOGTOKEN_SETUPAPI_APPLOG. Una chiamata successiva a una funzione di registrazione setupAPI che usa questo contesto di log scriverà la voce di log nel log di installazione del dispositivo, ma non come parte di una sezione del log di testo.

SP_LOG_TOKEN LogToken = LOGTOKEN_SETUPAPI_APPLOG;
SetupSetThreadLogToken(LogToken);

Recupero di un token di log per un thread

La funzione SetupGetThreadLogToken recupera un token di log per il thread da cui è stata chiamata questa funzione.

Ad esempio, un programma di installazione della classe può chiamare SetupGetThreadLogToken per recuperare il token di log che si applica all'operazione SetupAPI che ha chiamato il programma di installazione della classe. Il programma di installazione della classe può quindi usare questo token di log recuperato per registrare le voci nel log di testo che si applica all'operazione SetupAPI corrispondente.

Nota Se il contesto di log di un thread non è stato impostato in precedenza da una chiamata a SetupSetThreadLogToken, una chiamata a SetupGetThreadLogToken restituisce un token di log con un valore di LOGTOKEN_UNSPECIFIED.

Di seguito è riportato un esempio di chiamata a SetupGetThreadLogToken che recupera il token di log per il thread corrente.

SP_LOG_TOKEN LogToken = SetupGetThreadLogToken();