AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1721502
Accepted
bananakid
bananakid
Asked: 2022-05-18 10:30:01 +0800 CST2022-05-18 10:30:01 +0800 CST 2022-05-18 10:30:01 +0800 CST

Atribuir um SID de máquina específico a uma nova instalação do Windows usando Sysprep

  • 772

Eu quero construir um script de sistema de desenvolvimento a partir de uma nova mídia de instalação do Windows como se fosse um contêiner Linux. Nesse caso, preciso que todos os sistemas Windows que construo compartilhem o mesmo SID da máquina.

De acordo com a explicação de @AntonTykhyy, isso é feito da seguinte maneira:

  1. A mídia de instalação nova é criada com Unattend.xmlarquivos encadeados em que o primeiro arquivo chama um único sysprep /generalize /oobe /unattend:C:\Windows\System32\Sysprep\Second_Unattend.xml> /shutdowncomando usando Microsoft-Windows-Setup-Shell/FirstLogonCommandso Windows Component empass 7
  2. Quando o Sysprep termina e o computador é desligado, o hive do Registro do Windows SYSTEM(de C:\Windows\System32\config\SYSTEM) deve ser carregado offline (usando regedit.exeexecutado a partir do Windows PE ou método diferente)
  3. O bit 2 deve ser definido 1no valor OperationFlagsda chave SYSTEM\Setup\SetupCl\PendingRequestdo hive offline, ou seja, REG_DWORDdeve ser alterado de hexadecimal 0x00007f0f( 01111111 00001111que é definido por padrão) para 0x00000004( 0100)
  4. O novo valor "binário"SidAccountDomainNew deve ser adicionado à SYSTEM\Setup\SetupCl\PendingRequestchave de registro com o valor do SID em "formato binário" de 24 bytes (o cabeçalho de comprimento fixo de 8 bytes e 4 subautoridades de 32 bits)

Concluí as etapas de 1 a 3 com sucesso e sempre recebo um novo SID de máquina aleatório. No entanto, eu absolutamente não consigo descobrir a etapa 4. Eu examinei a documentação do SID ( um , dois , três ), mas qualquer tipo de valor que eu especificar para SidAccountDomainNew- REG_BINARYou REG_DWORD- e qualquer valor que eu definir eu absolutamente não consigo fazê-lo funcionar (a caixa de Install Windowsdiálogo aparece após a reinicialização com esta mensagem Windows could not complete installation. To install Windows on this computer, restart the installation).

Meu melhor palpite de que o cabeçalho de 8 bytes SidAccountDomainNewestá S-1-5-21em binário ( 01010011 00101101 00110001 00101101 00110101 00101101 00110010 00110001usando o conversor de texto para binário ASCII online ) e é isso. Eu me reeduquei em binário ( bits e bytes e números de 32 bits ), mas não consigo fazer com que os números caibam em 24 bytes especificados por @AntonTykhyy.

De acordo com minha pesquisa, não há absolutamente nenhuma documentação sobre esse assunto na Internet e SetupCl.exeestá completamente em situação irregular. A única fonte de conhecimento são as informações fornecidas por @AntonTykhyy , mas não posso comentar em sua pergunta para pedir um exemplo de como o SidAccountDomainNewdeve ser definido corretamente para ie S-1-5-21-86420-86420-86420(ele também menciona 4 subautoridades para que o SID correto seja S-1-5-21-86420-86420-86420-somethingporque o artigo da Microsoft diz subautoridades são blocos de árvore de dígitos 1-2-3 que seguem S-1-5-21-, então não está claro o que são 4 subautoridades de 32 bits).

Eu também encontrei esta explicação SID que faz minhas suposições sobre os primeiros 8 bytes do cabeçalho incorretas, eu acho:

A maneira comum de escrever um SID é na forma S-1-5-21-xxx, ou SRIS… Onde o primeiro S é um literal para identificar que este é um SID, o R é o número da revisão, e até aqui foi apenas a revisão 1, o I é a autoridade identificadora e, em seguida, o último S é a subautoridade que teoricamente pode ser repetida até 15 vezes, embora para Windows seja repetido apenas 5 vezes. Portanto, para um computador Windows padrão ou SID de domínio, seria S-1-5-21-aaaaaaa-bbbbbbb-ccccccc-ddddddd.

Internamente no Windows, um SID é armazenado como uma matriz variável de inteiros de 32 bits, geralmente para um total de 28 bytes. O primeiro inteiro armazena a revisão, a contagem do número de subautoridades e a autoridade do identificador. Isto é seguido por quantas subautoridades estão neste SID. Esses inteiros de subautoridade são armazenados no formato little-endian, o que significa que o byte menos significativo é armazenado primeiro e explica por que temos que fazer uma transformação complexa para passar dos inteiros para o mais comum S-1-5-21-* formato.

Para resumir, peço um exemplo de atribuição de SID específico S-1-5-21-86420-86420-86420para máquina usando OperationFlagse SidAccountDomainNewdepois de executar sysprep /generalize, especificamente que tipo de SidAccountDomainNewvalor deve ser usado e qual entrada real do usuário é necessária.

O exemplo de SID S-1-5-21-86420-86420-86420servirá, pois, de acordo com o artigo , sabe-se que a representação de 32 bits de 86420 decimal é 000000000000000 10101000110010100- isso pode economizar tempo de gravação de resposta (se forem dados relevantes).

PS Eu também não tenho certeza se a configuração OperationFlagspara hexadecimal 0x00000004é necessária porque hexadecimal 0x00007f0f( 01111111 00001111) também tem o bit 2 definido.

windows sysprep
  • 1 1 respostas
  • 174 Views

1 respostas

  • Voted
  1. Best Answer
    Ben N
    2022-05-18T16:06:24+08:002022-05-18T16:06:24+08:00

    O problema está no formato do cabeçalho de 8 bytes. De acordo com a SIDestrutura , o cabeçalho consiste em 1 byte para a versão do formato SID, 1 byte para o número de subautoridades e 6 bytes (um SID_IDENTIFIER_AUTHORITY) para a autoridade. Em "S-1-5-21-86420-86420-86420", o 1 é a versão, o 5 é a autoridade e cada componente restante (incluindo o 21, em contradição com vários artigos!) é uma subautoridade. Então, um campo por vez, a representação numérica (bytes escritos em hexadecimal aqui) deste SID é:

    • 01para a versão (1)
    • 04para o número de subautoridades (4), que não está escrito explicitamente na forma textual SDDL
    • 00 00 00 00 00 05para a autoridade (5), em ordem big-endian ao contrário das subautoridades
    • 15 00 00 00para a primeira subautoridade (21)
    • 94 51 01 00três vezes, para as três últimas subautoridades (cada 86420)

    Para converter mais facilmente um SID em formato numérico, você pode usar o PowerShell!

    #                                                         ↓ Change to your desired SID ↓
    $sid = [System.Security.Principal.SecurityIdentifier]::new('S-1-5-21-86420-86420-86420')
    $bytes = [array]::CreateInstance([byte], $sid.BinaryLength)
    $sid.GetBinaryForm($bytes, 0)
    $bytes | Format-Hex
    

    Escrever esses 24 bytes como um REG_BINARYvalor nomeado SidAccountDomainNewfuncionou para mim no Windows 10 2004 Enterprise. Não precisei alterar OperationFlagsporque, como você disse, seus dados já tinham o bit 2 definido.

    • 0

relate perguntas

  • Como desativar a aceleração do mouse em um touchpad de precisão do Windows?

  • renomear em massa conjuntos de arquivos de imagem

  • Qual seria o equivalente em lote do argumento "pass" do Python?

  • Comunique-se com o daemon do Docker no Windows

  • atalho do shell da área de trabalho no painel lateral do explorer

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    Saaru Lindestøkke Por que os arquivos tar.xz são 15x menores ao usar a biblioteca tar do Python em comparação com o tar do macOS? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 Por que uma conexão de Internet gigabit/s via cabo (coaxial) não oferece velocidades simétricas como fibra? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve