double arrow

Случай Временных Профилей Реестра


Случай открылся, когда клиент поддержка Microsoft, с которой связываются, сообщая, что несколько из их пользователей будут иногда получать "Пользовательское сообщение об ошибке" Среды, показанное в рисунке 16-28, входя в систему к их системам. Эта ошибка вызванный Windows, чтобы создать временный профиль для сеанса входа в систему пользователя.

 

Рис. 16-28. Ошибка загрузки профиля пользователя при входе в систему.

Профиль пользователя состоит из папки файловой системы, %UserProfile %, в который приложения сохраняют специфичную для пользователя конфигурацию и файлы с данными, так же как файл улья реестра, хранивший в той папке, %UserProfile %\Ntuser.dat, что Winlogon обрабатывают загрузки, когда пользователь входит в систему. Приложения хранят пользовательские настройки в улье реестра, вызывая функции реестра, которые отсылают к HKEY_CURRENT_USER (HKCU) корневой ключ. Потеря пользователей доступа к их профилю, сделанному проблемой, критической, потому что всякий раз, когда это произошло, пользователи, будет казаться, потеряют все свои ­настройки и доступ к файлам, хранившим в их профилях. В большинстве случаев, пользователи, с которыми связываются служба поддержки компании, которая попросила бы, чтобы пользователь попытался перезагрузить и войти в систему до проблемы, разрешенной непосредственно.




Как со всеми случаями, поддержка Microsoft началась, спрашивая о системной конфигурации, материально-технических ресурсах установленного программного обеспечения, и любых недавних изменениях, которые компания произвела в их системах. В этом случае факт, который выделился, был то, что все системы, на которых произошла проблема, были недавно обновлены до новой версии клиента ICA Citrix Corporation, приложения удаленного рабочего стола. Поддержка Citrix Microsoft, с которой связываются, чтобы видеть, знали ли они о каких-либо проблемах с новым клиентом. Они не сделали, но сказали, что займутся расследованиями.

Неуверенный, было ли клиентское обновление ICA ответственно за проблему профиля,

Поддержка Microsoft, проинструктированная клиент, чтобы включить журналированию профиля, которое можно сделать, конфигурируя регистрационный ключ как описано в статье Microsoft Knowledge Base 221833 (http://support.microsoft.com/221833), "Как включить пользовательской отладке среды, входящей в систему розничные сборки Windows." Клиент, выставленный сценарий к их системам, чтобы произвести необходимые изменения реестра и, вскоре после, получил другой вызов от пользователя с проблемой профиля. Они захватили копию профиля, выходят из системы система от %SystemRoot %\Debug\UserMode\Userenv.log и отправил это в Microsoft. Журнал был неокончательным, но он действительно давал важное представление: это указало, что профиль пользователя был не в состоянии загрузиться из-за ошибки 32, который является ERROR_SHARING_VIOLATION. См. (рисунок 16-29.)



Рис. 16-29. Userenv.log указание на профиль загружает отказ из-за нарушения совместного использования.

Когда процесс открывает файл, он определяет, какие виды совместного использования он учитывает файл. Если это пишет в файл, это могло бы позволить другим процессам читать из файла, например, но не также писать в файл. Нарушение совместного использования в файле системного журнала, предназначенном, что другой процесс открыл улей реестра пользователя в пути, который был несовместимым с путем который процесс входа в систему, требуемый, чтобы открыть файл.

Тем временем больше клиентов во всем мире начало связываться с Microsoft и Citrix с той же самой проблемой, все из которых также развернули новый клиент ICA. Поддержка Citrix, о которой тогда сообщают, что они подозревали нарушение совместного использования, могла бы быть вызвана одним из клиентских процессов ICA, Ssonvr.exe. Во время установки клиент ICA регистрирует Сетевой DLL Провайдера (Pnsson.dll), который вызывает Windows Multiple Provider Notification Application (%SystemRoot %\System32\Mpnotify.exe), когда система загружается. Mpnotify.exe самостоятельно запускается при входе в систему процессом Winlogon. DLL уведомления Citrix запускается Ssonvr.exe процесс, асинхронный к входу в систему пользователя, как показано в рисунке 16-30. Единственная проблема с теорией состояла в том, что разработчики Citrix настояли, что процесс не пытался загрузить любой пользовательский профиль реестра или даже считать любые ключи или значения от одного. И Microsoft и Citrix были озадачены.



Рис. 16-30. Асинхронный запуск Ssonsvr.exe во время пользовательского входа в систему.

Microsoft, создаваемая версия Winlogon и ядра с дополнительной диагностической информацией и попробованный, чтобы воспроизвести проблему на системах лаборатории, сконфигурированных тождественно клиенту, но без успеха. Клиент не мог даже воспроизвести проблему с измененными изображениями Windows, по-видимому потому что изображения, измененные синхронизация системы достаточно, чтобы избежать проблемы. В этой точке инженер службы поддержки Microsoft предложил, чтобы клиент получил трассировку действия входа в систему с Procmon.

 

Есть несколько способов сконфигурировать Procmon, чтобы записать операции входа в систему: нужно использовать PsExec Sysinternals, чтобы запустить это в неинтерактивной станции окна в сеансе 02 так, чтобы это пережило выход из системы и последующий вход в систему, и другой должен использовать функцию журналирования начальной загрузки, чтобы получить действие от рано в начальной загрузке, включая вход в систему. Инженер выбрал ­последнего, таким образом, он сказал клиенту выполнять Монитор Процесса на одной из систем, которые регулярно показывали проблему, выберите Журналирование Начальной загрузки Включения из меню опций Монитора Процесса, и перезагрузку, повторяя шаги до воспроизведенной проблемы. Эта процедура конфигурирует драйвер Монитора Процесса, чтобы загрузиться рано в процессе загрузки и действии журнала к %SystemRoot %\Procmon.pmb. Когда клиент, с которым затем встречаются проблема, они должны были выполнить Монитор Процесса снова, в которой точке драйвер прекратит регистрировать, и Монитор Процесса предложил бы преобразовывать журнал начальной загрузки в стандартный файл системного журнала Монитора Процесса.

После нескольких попыток, пользователь, полученный файл системного журнала начальной загрузки и представленный это Microsoft. Инженеры службы поддержки Microsoft, отсканированные через журнал и, сталкивались с ошибкой нарушения совместного использования когда Винлогон, которого судят, чтобы загрузить улей реестра пользователя. (См. рисунок 16-31.) Это было очевидно из операций, сразу предшествующих ошибке, которая Ssonsvr.exe была процессом, которому открыли улей. Вопрос был, почему Ssonsvr.exe открывал улей реестра?

Рис. 16-31. SSonsvr.exe открывая Ntuser.dat, приводя к нарушению совместного использования когда открыто Winlogon.exe.

Чтобы ответить на тот вопрос, инженеры, превращенные, чтобы Обработать стек Монитора, прослеживают функциональность. Монитор процесса получает стек вызова для каждой работы, которая представляет вложение вызова функции, ответственное за работу. Смотря на стек вызова, можно часто определять первопричину работы, когда это не могло бы быть очевидно только из процесса, который выполнил это. Например, стек показывает Вам, если DLL, загруженный в процесс, выполняемый, работа, и если Вам сконфигурировали символы и вызов, произойдет в изображении Windows или другом изображении, для которого у Вас есть символы, то это даже покажет Вам имена ответственных функций.

Стек для Ssonsvr.exe открытого из файла Ntuser.dat (показанный в рисунке 16-32) показал, что Ssonsvr.exe не было фактически ответственно за работу: Windows Logical Prefetcher был.

См. Главу 2, Windows Core Concepts," для получения дополнительной информации о станциях окна и сеансе 0 и Главе 4, "Монитор Процесса," для получения дополнительной информации о запуске этого с PsExec.

Рис. 16-32. Выделенный код Перед устройством выбора, вызывающий loCreateFile, чтобы открыть Ntuser.dat.

Представленный в Windows XP, Логическое Предварительное устройство выбора - компонент ядра, который контролирует первые 10 секунд запуска процесса, записывая каталоги и части файлов, к которым получает доступ процесс в течение того времени к файлу, который это хранит в %SystemRoot %\Prefetch. Так, чтобы многократные исполнимые программы с тем же самым именем, но в различной папке получили свои собственные файлы упреждающей выборки, Логическое Предварительное устройство выбора дает файлу имя, это - связь исполнимого названия картинки и хеш пути, в котором изображение сохранено — например, NOTEPAD.EXE-D8414F97.pf. Можно фактически видеть файлы и папки, которые Логическое Предварительное устройство выбора видело в приложении, ссылаются в прошлый раз, когда оно запускалось при использовании утилиты Sysinternals Strings, чтобы отсканировать файл упреждающей выборки как это:

строковый файл упреждающей выборки.

В следующий раз запуски приложения, Логическое Предварительное устройство выбора, выполняющееся в контексте первого потока процесса, ищут файл упреждающей выборки. Если Вы существуете, это открывает каждый каталог, который это перечисляет, чтобы загрузить метаданные папки в память, если это уже не присутствует. Логическое Предварительное устройство выбора тогда отображает каждый файл, перечисленный в файле упреждающей выборки, и ссылается на части, к которым получают доступ в прошлый раз, когда приложение работало так, чтобы они также были загружены в память. Логическое Предварительное устройство выбора может ускорить запуск приложения, потому что он генерирует большой, последовательный I/Os вместо того, чтобы выпустить маленький произвольный доступ к данным файла, как приложение обычно делало бы во время запуска.

Импликация Логического Предварительного устройства выбора в проблеме профиля, только повышенной больше вопросов, как бы то ни было. Почему это выбирало файл улья пользователя с упреждением в контексте Ssonsvr.exe, когда Ssonsvr.exe непосредственно никогда реестр доступов не профилирует? Поддержка Microsoft, с которой связываются группа разработчиков Логического Предварительного устройства выбора для ответа. Разработчики сначала отметили, что реестр на Windows XP читается в память, используя кэшируемые операции ввода-вывода файла, что означает, что поток чтения вперед менеджера по Кэшу заранее считает части улья. Поскольку поток чтения вперед выполняется в Системном процессе, и Логическое Предварительное устройство выбора ­связывает Системное действие процесса с в настоящий момент процессом запуска, определенной последовательностью синхронизации запусков процесса и действия во время начальной загрузки, и войдите в систему, мог заставить доступы улья быть замеченными Логическим Предварительным устройством выбора, как являющимся частью Ssonsvr.exe запуск. Если бы порядок немного отличался во время следующей начальной загрузки, и войдите в систему, то Winlogon мог бы столкнуться с Логическим Предварительным устройством выбора, как замечено в полученном журнале начальной загрузки.

 

Логическое Предварительное устройство выбора, как предполагается, выполняется прозрачно к другим действиям на системе, но ее регистрационные номера могут привести к совместному использованию нарушений как это на системах Windows XP.

(На системах сервера Логическое Предварительное устройство выбора выбирает с упреждением только действие начальной загрузки, и оно делает так синхронно прежде, чем процесс загрузки продолжается.)

По этой причине, на Windows Vista и системах Windows 7, Логическое Предварительное устройство выбора использует драйвер минифильтра файловой системы, Fileinfo (%SystemRoot %\System32\Drivers\Fileinfo.sys), чтобы наблюдать за потенциальными коллизиями нарушения совместного использования и предотвратить их, останавливая вторую открытую работу на файле, получаемом доступ Логическим Предварительным устройством выбора, пока Логическое Предварительное устройство выбора не закрывает файл.

Теперь, когда проблема была понята, Microsoft и Citrix, проведенный коллективное обсуждение на клиентах обходных решений, могли применяться, в то время как Citrix, работавший на обновлении Клиенту ICA, который предотвратит нарушение совместного использования. Одно обходное решение должно было отключить упреждающую выборку приложения, и другой должен был записать сценарий выхода из системы, который удаляет Ssonsvr.exe файлы упреждающей выборки. Citrix, опубликованный обходные решения в Citrix Knowledge Base article3 и Microsoft опубликованный в статье Microsoft Knowledge Base 969100 (http://support.microsoft.com/kb/969100).

Обновление Клиенту ICA, который был сделан доступным несколько дней спустя, изменило сетевой DLL провайдера на 10 секунд после Ssonsvr.exe запуски перед возвращением управления к Mpnotify.exe. Поскольку Винлогон ожидает Mpnotify, чтобы выйти перед входом в систему пользователя, Логическое Предварительное устройство выбора не будет доступы партнера Винлогона улья пользователя с Ssonsvr.exe запуском.

Как я сказал во введении, я считаю этот случай особенно интересным, потому что это демонстрирует малоизвестную функцию Procmon, журналирование начальной загрузки, и питание трассировок стека для анализа первопричины — два ключевых инструмента для общего арсенала поиска и устранения неисправностей. Это также показывает, как ­успешный поиск и устранение неисправностей иногда означает придумывать обходное решение, когда нет никаких, фиксируют или когда следует ожидать, пока поставщик не обеспечивает тот. Другой случай, с которым успешно соглашаются Procmon!

3 http://support.citrix.com/article/CTX118226







Сейчас читают про: