Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Ведение журнала SetupAPI поддерживает механизм, который устанавливает контекст журнала для потока. Этот контекст устанавливается путем задания маркера журнала для потока. SetupAPI предоставляет этот механизм, чтобы код, вызываемый потоком, может записывать записи журнала в контекст журнала вызывающего потока.
Например, поток может задать маркер журнала для контекста журнала перед вызовом установщика класса или совместного установщика. В свою очередь установщик может получить маркер журнала вызывающего потока и использовать этот маркер для записи записей журнала в текстовом журнале и разделе, связанном с контекстом журнала вызывающего потока.
Настройка маркера журнала для потока
Функция SetupSetThreadLogToken задает маркер журнала для потока, из которого была вызвана эта функция. Маркер журнала может быть системным маркером журнала или маркером журнала, который был получен путем вызова SetupGetThreadLogToken.
Ниже приведены примеры того, как можно установить контекст журнала для потока:
Приложение установки может вызвать SetupSetThreadLogToken , чтобы установить контекст журнала для другого кода установки, который выполняется в одном потоке. При установке контекста журнала для потока приложение должно использовать системный маркер журнала, например LOGTOKEN_SETUPAPI_APPLOG, в вызове SetupSetThreadLogToken.
Заметка Если контекст журнала задается с помощью системного маркера журнала, последующие вызовы функции ведения журнала SetupAPI, сделанные из этого контекста журнала, записывают записи журнала в текстовый журнал установки, которые не являются частью раздела текстового журнала.
Если установщик класса или совместное установщик запускает новый поток, установщик может задать контекст журнала для этого потока так же, как и родительский поток. Это делается следующим образом:
- Перед запуском нового потока родительский поток получает текущий маркер журнала путем вызова SetupGetThreadLogToken.
- Родительский поток запускает новый поток и передает текущий маркер журнала через метод, зависящий от реализации, например сохранение маркера в глобальной переменной.
- Новый поток вызывает SetupSetThreadLogToken с текущим маркером журнала. В результате новый поток "наследует" контекст журнала родительского потока.
Заметка Если поток установщика класса или совместного установщика задает контекст журнала с помощью этого метода, последующие вызовы функции ведения журнала SetupAPI , сделанные из этого контекста журнала, записывают записи журнала установки в текстовый журнал установки, который может быть частью раздела текстового журнала. Это происходит только в том случае, если раздел текстового журнала был создан операцией установки SetupAPI, которая вызвала установщик.
Ниже приведен пример вызова setupSetThreadLogToken , который задает контекст журнала текущего потока в текстовом журнале установки устройства (SetupAPI.app.log), указав системный маркер журнала LOGTOKEN_SETUPAPI_APPLOG. Последующий вызов функции ведения журнала SetupAPI , которая использует этот контекст журнала, будет записывать запись журнала в текстовый журнал установки устройства, но не в рамках текстового раздела журнала.
SP_LOG_TOKEN LogToken = LOGTOKEN_SETUPAPI_APPLOG;
SetupSetThreadLogToken(LogToken);
Получение токена лога для потока
Функция SetupGetThreadLogToken извлекает маркер журнала для потока, из которого была вызвана эта функция.
Например, установщик класса может вызвать SetupGetThreadLogToken, чтобы получить маркер журнала, используемый для операции SetupAPI, которую вызвал установщик классов. Затем установщик класса может использовать этот полученный маркер журнала для записи в текстовом журнале, который применяется к соответствующей операции SetupAPI.
Заметка Если контекст журнала потока не был задан вызовом SetupSetThreadLogToken, вызов SetupGetThreadLogToken возвращает маркер журнала со значением LOGTOKEN_UNSPECIFIED.
Ниже приведен пример вызова SetupGetThreadLogToken , который извлекает маркер журнала для текущего потока.
SP_LOG_TOKEN LogToken = SetupGetThreadLogToken();