Программа установки Windows назначает уникальный идентификатор машины системе Windows во время установки. Идентификатор безопасности компьютера не отображается в сети, и поэтому обычно не имеет значения, что это такое, но идентификаторы безопасности локальных пользователей основаны на идентификаторе безопасности компьютера, и это может создать проблемы при совместном использовании профилей пользователей и созданных пользователями файлов на Тома NTFS. Даже если файлы и папки имеют списки управления доступом только с предопределенными, не зависящими от компьютера идентификаторами безопасности, такими как встроенная группа администраторов, их владельцем является создавающий локальный пользователь, идентифицируемый с помощью идентификатора безопасности компьютера и идентификатора пользователя RID. Этот сценарий подходит, например, если вы хотите создать сценарий своей системы разработки со свежего установочного носителя Windows, как если бы это был контейнер Linux. В этом случае вы хотите, чтобы каждая создаваемая вами система Windows имела один и тот же SID машины.
Однако утилита SysInternals NewSID была устаревшей и удалена еще в 2009 году, а не работает должным образом в современных версиях Windows. Есть ли способ достичь того же результата с помощью обычных инструментов развертывания Windows? Марк Руссинович намекнул в своем посте, осуждающем NewSID, что это может иметь место, но если это так, то эта возможность не задокументирована.Конечно, в этом нет ничего удивительного: у Microsoft долгая история недокументированных функций, восходящая к временам MS-DOS.
Недокументированная утилита SetupCl.exe
, которая является частью инструментария установки Windows и очищает образ системы как один из этапов процесса обобщения, который запускается при загрузке новой системы Windows, обычно выполняет такие действия. при генерации новых идентификаторов дисков исправьте точки повторной обработки и замените ссылки на системный корень по умолчанию (обычно X: \
) на то, что подходит для вашей целевой системы (обычно C: \
) во всех разделах реестра и, возможно, файлах конфигурации. Эта утилита вызывается процессом установки Windows при первой загрузке и управляется разделом реестра SYSTEM \ Setup \ SetupCl \ PendingRequest
. Значение DWORD OperationFlags
в этом ключе является битовым полем, которое указывает, какие преобразования будет выполнять утилита.
В дополнение к упомянутым выше преобразованиям, SetupCl
может заменить существующий компьютерный SID новым. Это преобразование запрашивается установкой бита 2 ( 0x4
) в OperationFlags
в ключе SYSTEM \ Setup \ SetupCl \ PendingRequest
. Два необязательных двоичных значения SidAccountDomainOld
и SidAccountDomainNew
в одном и том же ключе предоставляют идентификаторы безопасности исходного и целевого компьютера. Если SID источника опущен, SetupCl
берет его из работающей системы. Если целевой SID опущен, SetupCl
генерирует новый.Эти значения содержат идентификатор SID машины в двоичной форме и имеют длину 24 байта (8-байтовый заголовок фиксированной длины и 4 32-битных вспомогательных полномочия). Чтобы заставить SetupCl
назначить конкретный SID машины, установите бит 2 в OperationFlags
и создайте значение SidAccountDomainNew
, содержащее SID.
Эта процедура связана с несколькими сложностями:
Она работает с образами, подготовленными с помощью sysprep / generalize
, но не работает с образами Windows, только что развернутыми с помощью DISM или Expand-WindowsImage
] командлет. Свежие образы также находятся в обобщенном состоянии с ожидающим запросом SetupCl
, настроенным в кусте SYSTEM
для запуска при первой загрузке, но для этого запроса не установлен бит 2. Установка его в автономном образе приводит к тому, что образ не может быть развернут. Чтобы обойти это ограничение, нужно выполнить дополнительный раунд обобщения / специализации. Один из способов сделать это - использовать связанные файлы автоматической установки: в первом файле автоматической установки указывается одна команда Microsoft-Windows-Setup-Shell / FirstLogonCommands
для выполнения sysprep / generalize / oobe / unattend: <второй unattend файл> / выключение
.
Добавление значения SidAccountDomainNew
в Интернете до или после sysprep / generalize
не работает, скорее всего потому, что sysprep
планирует выполнение некоторых заключительных шагов на выключение системы.Подключите автономный образ Windows после завершения sysprep / generalize
и выключения системы, загрузите куст SYSTEM
и добавьте его в этот момент.
sysprep / generalize
не работает, если есть ожидающая перезагрузка из-за установки программного обеспечения. Перезагрузите систему перед обобщением или выполните дополнительный этап обобщения / специализации перед установкой программного обеспечения в образ.