Ramesh-vani commited on
Commit
3a15473
·
verified ·
1 Parent(s): 15c65b3

Upload 29 files

Browse files
.dockerignore ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .dockerignore
2
+ .git
3
+ .github
4
+ .gitignore
5
+ .gitlab-ci.yml
6
+ .gitmodules
7
+ Dockerfile
8
+ Dockerfile.archive
9
+ docker-compose.yml
10
+
11
+ *.md
.github/dependabot.yml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: docker
4
+ directory: /
5
+ schedule:
6
+ interval: weekly
7
+ - package-ecosystem: github-actions
8
+ directory: /
9
+ schedule:
10
+ interval: weekly
.github/logo.png ADDED
.github/renovate.json ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ {
2
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
+ "extends": ["config:recommended", ":disableDependencyDashboard"]
4
+ }
.github/workflows/build.yml ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Build
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ push:
6
+ branches:
7
+ - master
8
+ paths-ignore:
9
+ - '**/*.md'
10
+ - '**/*.yml'
11
+ - '.gitignore'
12
+ - '.dockerignore'
13
+ - '.github/**'
14
+ - '.github/workflows/**'
15
+
16
+ concurrency:
17
+ group: build
18
+ cancel-in-progress: false
19
+
20
+ jobs:
21
+ shellcheck:
22
+ name: Test
23
+ uses: ./.github/workflows/check.yml
24
+ build:
25
+ name: Build
26
+ needs: shellcheck
27
+ runs-on: ubuntu-latest
28
+ permissions:
29
+ actions: write
30
+ packages: write
31
+ contents: read
32
+ steps:
33
+ -
34
+ name: Checkout
35
+ uses: actions/checkout@v4
36
+ with:
37
+ fetch-depth: 0
38
+ -
39
+ name: Docker metadata
40
+ id: meta
41
+ uses: docker/metadata-action@v5
42
+ with:
43
+ context: git
44
+ images: |
45
+ ${{ secrets.DOCKERHUB_REPO }}
46
+ ghcr.io/${{ github.repository }}
47
+ tags: |
48
+ type=raw,value=latest,priority=100
49
+ type=raw,value=${{ vars.MAJOR }}.${{ vars.MINOR }}
50
+ labels: |
51
+ org.opencontainers.image.title=${{ vars.NAME }}
52
+ env:
53
+ DOCKER_METADATA_ANNOTATIONS_LEVELS: manifest,index
54
+ -
55
+ name: Set up Docker Buildx
56
+ uses: docker/setup-buildx-action@v3
57
+ -
58
+ name: Login into Docker Hub
59
+ uses: docker/login-action@v3
60
+ with:
61
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
62
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
63
+ -
64
+ name: Login to GitHub Container Registry
65
+ uses: docker/login-action@v3
66
+ with:
67
+ registry: ghcr.io
68
+ username: ${{ github.actor }}
69
+ password: ${{ secrets.GITHUB_TOKEN }}
70
+ -
71
+ name: Build Docker image
72
+ uses: docker/build-push-action@v5
73
+ with:
74
+ context: .
75
+ push: true
76
+ provenance: false
77
+ platforms: linux/amd64,linux/arm64,linux/arm
78
+ tags: ${{ steps.meta.outputs.tags }}
79
+ labels: ${{ steps.meta.outputs.labels }}
80
+ annotations: ${{ steps.meta.outputs.annotations }}
81
+ build-args: |
82
+ VERSION_ARG=${{ steps.meta.outputs.version }}
83
+ -
84
+ name: Create a release
85
+ uses: action-pack/github-release@v2
86
+ with:
87
+ tag: "v${{ steps.meta.outputs.version }}"
88
+ title: "v${{ steps.meta.outputs.version }}"
89
+ token: ${{ secrets.REPO_ACCESS_TOKEN }}
90
+ -
91
+ name: Increment version variable
92
+ uses: action-pack/bump@v2
93
+ with:
94
+ token: ${{ secrets.REPO_ACCESS_TOKEN }}
95
+ -
96
+ name: Send mail
97
+ uses: action-pack/send-mail@v1
98
+ with:
99
+ to: ${{secrets.MAILTO}}
100
+ from: Github Actions <${{secrets.MAILTO}}>
101
+ connection_url: ${{secrets.MAIL_CONNECTION}}
102
+ subject: Build of ${{ github.event.repository.name }} v${{ steps.meta.outputs.version }} completed
103
+ body: |
104
+ The build job of ${{ github.event.repository.name }} v${{ steps.meta.outputs.version }} was completed successfully!
105
+
106
+ See https://github.com/${{ github.repository }}/actions for more information.
.github/workflows/check.yml ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ on: [workflow_call]
2
+ name: "Check"
3
+ permissions: {}
4
+
5
+ jobs:
6
+ shellcheck:
7
+ name: shellcheck
8
+ runs-on: ubuntu-latest
9
+ steps:
10
+ - uses: actions/checkout@v4
11
+ - name: Run ShellCheck
12
+ uses: ludeeus/action-shellcheck@master
13
+ env:
14
+ SHELLCHECK_OPTS: -x --source-path=src -e SC1091 -e SC2001 -e SC2002 -e SC2034 -e SC2064 -e SC2153 -e SC2317 -e SC2028
15
+ - name: Validate XML
16
+ uses: action-pack/valid-xml@v1
17
+ with:
18
+ path: "assets"
19
+ file-endings: ".xml"
20
+ - name: Lint Dockerfile
21
+ uses: hadolint/[email protected]
22
+ with:
23
+ dockerfile: Dockerfile
24
+ ignore: DL3008
25
+ failure-threshold: warning
.github/workflows/hub.yml ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Update
2
+ on:
3
+ push:
4
+ branches:
5
+ - master
6
+ paths:
7
+ - readme.md
8
+ - README.md
9
+ - .github/workflows/hub.yml
10
+
11
+ jobs:
12
+ dockerHubDescription:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+ -
17
+ name: Docker Hub Description
18
+ uses: peter-evans/dockerhub-description@v4
19
+ with:
20
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
21
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
22
+ repository: ${{ secrets.DOCKERHUB_REPO }}
23
+ short-description: ${{ github.event.repository.description }}
24
+ readme-filepath: ./readme.md
.github/workflows/test.yml ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ on:
2
+ workflow_dispatch:
3
+ pull_request:
4
+ paths:
5
+ - '**/*.sh'
6
+ - '**/*.xml'
7
+ - '.github/workflows/test.yml'
8
+ - '.github/workflows/check.yml'
9
+ - 'Dockerfile'
10
+
11
+ name: "Test"
12
+ permissions: {}
13
+
14
+ jobs:
15
+ shellcheck:
16
+ name: Test
17
+ uses: ./.github/workflows/check.yml
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+
Dockerfile ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM scratch
2
+ COPY --from=qemux/qemu-docker:4.14 / /
3
+
4
+ ARG DEBCONF_NOWARNINGS="yes"
5
+ ARG DEBIAN_FRONTEND "noninteractive"
6
+ ARG DEBCONF_NONINTERACTIVE_SEEN "true"
7
+
8
+ RUN apt-get update \
9
+ && apt-get --no-install-recommends -y install \
10
+ curl \
11
+ 7zip \
12
+ wsdd \
13
+ samba \
14
+ wimtools \
15
+ dos2unix \
16
+ cabextract \
17
+ genisoimage \
18
+ libxml2-utils \
19
+ && apt-get clean \
20
+ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
21
+
22
+ COPY ./src /run/
23
+ COPY ./assets /run/assets
24
+
25
+ ADD https://raw.githubusercontent.com/christgau/wsdd/master/src/wsdd.py /usr/sbin/wsdd
26
+ ADD https://github.com/qemus/virtiso/releases/download/v0.1.240/virtio-win-0.1.240.iso /run/drivers.iso
27
+
28
+ RUN chmod +x /run/*.sh && chmod +x /usr/sbin/wsdd
29
+
30
+ EXPOSE 8006 3389
31
+ VOLUME /storage
32
+
33
+ ENV RAM_SIZE "4G"
34
+ ENV CPU_CORES "2"
35
+ ENV DISK_SIZE "64G"
36
+ ENV VERSION "win11"
37
+
38
+ ARG VERSION_ARG "0.0"
39
+ RUN echo "$VERSION_ARG" > /run/version
40
+
41
+ ENTRYPOINT ["/usr/bin/tini", "-s", "/run/entry.sh"]
assets/win10x64-ltsc.xml ADDED
@@ -0,0 +1,404 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
3
+ <settings pass="windowsPE">
4
+ <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
5
+ <SetupUILanguage>
6
+ <UILanguage>en-US</UILanguage>
7
+ </SetupUILanguage>
8
+ <InputLocale>0409:00000409</InputLocale>
9
+ <SystemLocale>en-US</SystemLocale>
10
+ <UILanguage>en-US</UILanguage>
11
+ <UserLocale>en-US</UserLocale>
12
+ </component>
13
+ <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
14
+ <DiskConfiguration>
15
+ <Disk wcm:action="add">
16
+ <DiskID>0</DiskID>
17
+ <WillWipeDisk>true</WillWipeDisk>
18
+ <CreatePartitions>
19
+ <!-- System partition (ESP) -->
20
+ <CreatePartition wcm:action="add">
21
+ <Order>1</Order>
22
+ <Type>EFI</Type>
23
+ <Size>128</Size>
24
+ </CreatePartition>
25
+ <!-- Microsoft reserved partition (MSR) -->
26
+ <CreatePartition wcm:action="add">
27
+ <Order>2</Order>
28
+ <Type>MSR</Type>
29
+ <Size>128</Size>
30
+ </CreatePartition>
31
+ <!-- Windows partition -->
32
+ <CreatePartition wcm:action="add">
33
+ <Order>3</Order>
34
+ <Type>Primary</Type>
35
+ <Extend>true</Extend>
36
+ </CreatePartition>
37
+ </CreatePartitions>
38
+ <ModifyPartitions>
39
+ <!-- System partition (ESP) -->
40
+ <ModifyPartition wcm:action="add">
41
+ <Order>1</Order>
42
+ <PartitionID>1</PartitionID>
43
+ <Label>System</Label>
44
+ <Format>FAT32</Format>
45
+ </ModifyPartition>
46
+ <!-- MSR partition does not need to be modified -->
47
+ <ModifyPartition wcm:action="add">
48
+ <Order>2</Order>
49
+ <PartitionID>2</PartitionID>
50
+ </ModifyPartition>
51
+ <!-- Windows partition -->
52
+ <ModifyPartition wcm:action="add">
53
+ <Order>3</Order>
54
+ <PartitionID>3</PartitionID>
55
+ <Label>Windows</Label>
56
+ <Letter>C</Letter>
57
+ <Format>NTFS</Format>
58
+ </ModifyPartition>
59
+ </ModifyPartitions>
60
+ </Disk>
61
+ </DiskConfiguration>
62
+ <ImageInstall>
63
+ <OSImage>
64
+ <InstallFrom>
65
+ <MetaData wcm:action="add">
66
+ <Key>/image/index</Key>
67
+ <Value>1</Value>
68
+ </MetaData>
69
+ </InstallFrom>
70
+ <InstallTo>
71
+ <DiskID>0</DiskID>
72
+ <PartitionID>3</PartitionID>
73
+ </InstallTo>
74
+ <InstallToAvailablePartition>false</InstallToAvailablePartition>
75
+ </OSImage>
76
+ </ImageInstall>
77
+ <DynamicUpdate>
78
+ <Enable>true</Enable>
79
+ <WillShowUI>Never</WillShowUI>
80
+ </DynamicUpdate>
81
+ <UpgradeData>
82
+ <Upgrade>false</Upgrade>
83
+ <WillShowUI>Never</WillShowUI>
84
+ </UpgradeData>
85
+ <UserData>
86
+ <AcceptEula>true</AcceptEula>
87
+ <FullName>Docker</FullName>
88
+ <Organization>Windows for Docker</Organization>
89
+ <ProductKey />
90
+ </UserData>
91
+ <EnableFirewall>false</EnableFirewall>
92
+ <Diagnostics>
93
+ <OptIn>false</OptIn>
94
+ </Diagnostics>
95
+ </component>
96
+ <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
97
+ <DriverPaths>
98
+ <PathAndCredentials wcm:action="add" wcm:keyValue="1">
99
+ <Path>D:\viostor\w10\amd64</Path>
100
+ </PathAndCredentials>
101
+ <PathAndCredentials wcm:action="add" wcm:keyValue="2">
102
+ <Path>D:\NetKVM\w10\amd64</Path>
103
+ </PathAndCredentials>
104
+ <PathAndCredentials wcm:action="add" wcm:keyValue="3">
105
+ <Path>D:\Balloon\w10\amd64</Path>
106
+ </PathAndCredentials>
107
+ <PathAndCredentials wcm:action="add" wcm:keyValue="4">
108
+ <Path>D:\pvpanic\w10\amd64</Path>
109
+ </PathAndCredentials>
110
+ <PathAndCredentials wcm:action="add" wcm:keyValue="5">
111
+ <Path>D:\qemupciserial\w10\amd64</Path>
112
+ </PathAndCredentials>
113
+ <PathAndCredentials wcm:action="add" wcm:keyValue="6">
114
+ <Path>D:\qxldod\w10\amd64</Path>
115
+ </PathAndCredentials>
116
+ <PathAndCredentials wcm:action="add" wcm:keyValue="7">
117
+ <Path>D:\vioinput\w10\amd64</Path>
118
+ </PathAndCredentials>
119
+ <PathAndCredentials wcm:action="add" wcm:keyValue="8">
120
+ <Path>D:\viorng\w10\amd64</Path>
121
+ </PathAndCredentials>
122
+ <PathAndCredentials wcm:action="add" wcm:keyValue="9">
123
+ <Path>D:\vioscsi\w10\amd64</Path>
124
+ </PathAndCredentials>
125
+ <PathAndCredentials wcm:action="add" wcm:keyValue="10">
126
+ <Path>D:\vioserial\w10\amd64</Path>
127
+ </PathAndCredentials>
128
+ <PathAndCredentials wcm:action="add" wcm:keyValue="11">
129
+ <Path>D:\viogpudo\w10\amd64</Path>
130
+ </PathAndCredentials>
131
+ <PathAndCredentials wcm:action="add" wcm:keyValue="12">
132
+ <Path>D:\sriov\w10\amd64</Path>
133
+ </PathAndCredentials>
134
+ <PathAndCredentials wcm:action="add" wcm:keyValue="13">
135
+ <Path>D:\viofs\w10\amd64</Path>
136
+ </PathAndCredentials>
137
+ </DriverPaths>
138
+ </component>
139
+ </settings>
140
+ <settings pass="offlineServicing">
141
+ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
142
+ <EnableLUA>false</EnableLUA>
143
+ </component>
144
+ </settings>
145
+ <settings pass="generalize">
146
+ <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
147
+ <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
148
+ </component>
149
+ <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
150
+ <SkipRearm>1</SkipRearm>
151
+ </component>
152
+ </settings>
153
+ <settings pass="specialize">
154
+ <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
155
+ <SkipAutoActivation>true</SkipAutoActivation>
156
+ </component>
157
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
158
+ <ComputerName>*</ComputerName>
159
+ <OEMInformation>
160
+ <Manufacturer>Dockur</Manufacturer>
161
+ <Model>Windows for Docker</Model>
162
+ <SupportHours>24/7</SupportHours>
163
+ <SupportPhone />
164
+ <SupportProvider>Dockur</SupportProvider>
165
+ <SupportURL>https://github.com/dockur/windows/issues</SupportURL>
166
+ </OEMInformation>
167
+ <OEMName>Windows for Docker</OEMName>
168
+ </component>
169
+ <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
170
+ <DisableWER>1</DisableWER>
171
+ </component>
172
+ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
173
+ <DisableAccelerators>true</DisableAccelerators>
174
+ <DisableFirstRunWizard>true</DisableFirstRunWizard>
175
+ <Home_Page>https://google.com</Home_Page>
176
+ <Help_Page>about:blank</Help_Page>
177
+ </component>
178
+ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
179
+ <DisableAccelerators>true</DisableAccelerators>
180
+ <DisableFirstRunWizard>true</DisableFirstRunWizard>
181
+ <Home_Page>https://google.com</Home_Page>
182
+ <Help_Page>about:blank</Help_Page>
183
+ </component>
184
+ <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
185
+ <CEIPEnabled>0</CEIPEnabled>
186
+ </component>
187
+ <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
188
+ <DisableSR>1</DisableSR>
189
+ </component>
190
+ <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
191
+ <InputLocale>0409:00000409</InputLocale>
192
+ <SystemLocale>en-US</SystemLocale>
193
+ <UILanguage>en-US</UILanguage>
194
+ <UserLocale>en-US</UserLocale>
195
+ </component>
196
+ <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
197
+ <RunSynchronous>
198
+ <RunSynchronousCommand wcm:action="add">
199
+ <Order>1</Order>
200
+ <Path>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v BypassNRO /t REG_DWORD /d 1 /f</Path>
201
+ </RunSynchronousCommand>
202
+ <RunSynchronousCommand wcm:action="add">
203
+ <Order>2</Order>
204
+ <Path>reg.exe load "HKU\mount" "C:\Users\Default\NTUSER.DAT"</Path>
205
+ </RunSynchronousCommand>
206
+ <RunSynchronousCommand wcm:action="add">
207
+ <Order>3</Order>
208
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f</Path>
209
+ </RunSynchronousCommand>
210
+ <RunSynchronousCommand wcm:action="add">
211
+ <Order>4</Order>
212
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f</Path>
213
+ </RunSynchronousCommand>
214
+ <RunSynchronousCommand wcm:action="add">
215
+ <Order>5</Order>
216
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path>
217
+ </RunSynchronousCommand>
218
+ <RunSynchronousCommand wcm:action="add">
219
+ <Order>6</Order>
220
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path>
221
+ </RunSynchronousCommand>
222
+ <RunSynchronousCommand wcm:action="add">
223
+ <Order>7</Order>
224
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f</Path>
225
+ </RunSynchronousCommand>
226
+ <RunSynchronousCommand wcm:action="add">
227
+ <Order>8</Order>
228
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path>
229
+ </RunSynchronousCommand>
230
+ <RunSynchronousCommand wcm:action="add">
231
+ <Order>9</Order>
232
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f</Path>
233
+ </RunSynchronousCommand>
234
+ <RunSynchronousCommand wcm:action="add">
235
+ <Order>10</Order>
236
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f</Path>
237
+ </RunSynchronousCommand>
238
+ <RunSynchronousCommand wcm:action="add">
239
+ <Order>11</Order>
240
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f</Path>
241
+ </RunSynchronousCommand>
242
+ <RunSynchronousCommand wcm:action="add">
243
+ <Order>12</Order>
244
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f</Path>
245
+ </RunSynchronousCommand>
246
+ <RunSynchronousCommand wcm:action="add">
247
+ <Order>13</Order>
248
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f</Path>
249
+ </RunSynchronousCommand>
250
+ <RunSynchronousCommand wcm:action="add">
251
+ <Order>14</Order>
252
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f</Path>
253
+ </RunSynchronousCommand>
254
+ <RunSynchronousCommand wcm:action="add">
255
+ <Order>15</Order>
256
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f</Path>
257
+ </RunSynchronousCommand>
258
+ <RunSynchronousCommand wcm:action="add">
259
+ <Order>16</Order>
260
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f</Path>
261
+ </RunSynchronousCommand>
262
+ <RunSynchronousCommand wcm:action="add">
263
+ <Order>17</Order>
264
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f</Path>
265
+ </RunSynchronousCommand>
266
+ <RunSynchronousCommand wcm:action="add">
267
+ <Order>18</Order>
268
+ <Path>reg.exe unload "HKU\mount"</Path>
269
+ </RunSynchronousCommand>
270
+ <RunSynchronousCommand wcm:action="add">
271
+ <Order>19</Order>
272
+ <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f</Path>
273
+ </RunSynchronousCommand>
274
+ </RunSynchronous>
275
+ </component>
276
+ <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
277
+ <fDenyTSConnections>false</fDenyTSConnections>
278
+ </component>
279
+ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
280
+ <UserAuthentication>0</UserAuthentication>
281
+ </component>
282
+ <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
283
+ <FirewallGroups>
284
+ <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop">
285
+ <Active>true</Active>
286
+ <Group>Remote Desktop</Group>
287
+ <Profile>all</Profile>
288
+ </FirewallGroup>
289
+ </FirewallGroups>
290
+ </component>
291
+ </settings>
292
+ <settings pass="auditSystem" />
293
+ <settings pass="auditUser" />
294
+ <settings pass="oobeSystem">
295
+ <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
296
+ <PreventDeviceEncryption>true</PreventDeviceEncryption>
297
+ </component>
298
+ <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
299
+ <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled>
300
+ </component>
301
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
302
+ <UserAccounts>
303
+ <LocalAccounts>
304
+ <LocalAccount wcm:action="add">
305
+ <Name>Docker</Name>
306
+ <Group>Administrators</Group>
307
+ <Password>
308
+ <Value />
309
+ <PlainText>true</PlainText>
310
+ </Password>
311
+ </LocalAccount>
312
+ </LocalAccounts>
313
+ <AdministratorPassword>
314
+ <Value>password</Value>
315
+ <PlainText>true</PlainText>
316
+ </AdministratorPassword>
317
+ </UserAccounts>
318
+ <AutoLogon>
319
+ <Username>Docker</Username>
320
+ <Enabled>true</Enabled>
321
+ <LogonCount>65432</LogonCount>
322
+ <Password>
323
+ <Value />
324
+ <PlainText>true</PlainText>
325
+ </Password>
326
+ </AutoLogon>
327
+ <OOBE>
328
+ <HideEULAPage>true</HideEULAPage>
329
+ <HideLocalAccountScreen>true</HideLocalAccountScreen>
330
+ <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
331
+ <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
332
+ <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
333
+ <NetworkLocation>Other</NetworkLocation>
334
+ <ProtectYourPC>3</ProtectYourPC>
335
+ <SkipUserOOBE>true</SkipUserOOBE>
336
+ <SkipMachineOOBE>true</SkipMachineOOBE>
337
+ </OOBE>
338
+ <RegisteredOrganization>Dockur</RegisteredOrganization>
339
+ <RegisteredOwner>Windows for Docker</RegisteredOwner>
340
+ <FirstLogonCommands>
341
+ <SynchronousCommand wcm:action="add">
342
+ <Order>1</Order>
343
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine>
344
+ <Description>Allow guest access to network shares</Description>
345
+ </SynchronousCommand>
346
+ <SynchronousCommand wcm:action="add">
347
+ <Order>2</Order>
348
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine>
349
+ <Description>Allow RDP login with blank password</Description>
350
+ </SynchronousCommand>
351
+ <SynchronousCommand wcm:action="add">
352
+ <Order>3</Order>
353
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine>
354
+ <Description>Enable option for passwordless sign-in</Description>
355
+ </SynchronousCommand>
356
+ <SynchronousCommand wcm:action="add">
357
+ <Order>4</Order>
358
+ <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine>
359
+ <Description>Password Never Expires</Description>
360
+ </SynchronousCommand>
361
+ <SynchronousCommand wcm:action="add">
362
+ <Order>5</Order>
363
+ <CommandLine>cmd /C POWERCFG -H OFF</CommandLine>
364
+ <Description>Disable Hibernation</Description>
365
+ </SynchronousCommand>
366
+ <SynchronousCommand wcm:action="add">
367
+ <Order>6</Order>
368
+ <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine>
369
+ <Description>Disable monitor blanking</Description>
370
+ </SynchronousCommand>
371
+ <SynchronousCommand wcm:action="add">
372
+ <Order>7</Order>
373
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine>
374
+ <Description>Disable Network Discovery popup</Description>
375
+ </SynchronousCommand>
376
+ <SynchronousCommand wcm:action="add">
377
+ <Order>8</Order>
378
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine>
379
+ <Description>Disable Network Discovery popup</Description>
380
+ </SynchronousCommand>
381
+ <SynchronousCommand wcm:action="add">
382
+ <Order>9</Order>
383
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine>
384
+ <Description>Disable first-run experience in Edge</Description>
385
+ </SynchronousCommand>
386
+ <SynchronousCommand wcm:action="add">
387
+ <Order>10</Order>
388
+ <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine>
389
+ <Description>Show file extensions in Explorer</Description>
390
+ </SynchronousCommand>
391
+ <SynchronousCommand wcm:action="add">
392
+ <Order>11</Order>
393
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine>
394
+ <Description>Zero Hibernation File</Description>
395
+ </SynchronousCommand>
396
+ <SynchronousCommand wcm:action="add">
397
+ <Order>12</Order>
398
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine>
399
+ <Description>Disable Hibernation Mode</Description>
400
+ </SynchronousCommand>
401
+ </FirstLogonCommands>
402
+ </component>
403
+ </settings>
404
+ </unattend>
assets/win10x64.xml ADDED
@@ -0,0 +1,400 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
3
+ <settings pass="windowsPE">
4
+ <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
5
+ <SetupUILanguage>
6
+ <UILanguage>en-US</UILanguage>
7
+ </SetupUILanguage>
8
+ <InputLocale>0409:00000409</InputLocale>
9
+ <SystemLocale>en-US</SystemLocale>
10
+ <UILanguage>en-US</UILanguage>
11
+ <UserLocale>en-US</UserLocale>
12
+ </component>
13
+ <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
14
+ <DiskConfiguration>
15
+ <Disk wcm:action="add">
16
+ <DiskID>0</DiskID>
17
+ <WillWipeDisk>true</WillWipeDisk>
18
+ <CreatePartitions>
19
+ <!-- System partition (ESP) -->
20
+ <CreatePartition wcm:action="add">
21
+ <Order>1</Order>
22
+ <Type>EFI</Type>
23
+ <Size>128</Size>
24
+ </CreatePartition>
25
+ <!-- Microsoft reserved partition (MSR) -->
26
+ <CreatePartition wcm:action="add">
27
+ <Order>2</Order>
28
+ <Type>MSR</Type>
29
+ <Size>128</Size>
30
+ </CreatePartition>
31
+ <!-- Windows partition -->
32
+ <CreatePartition wcm:action="add">
33
+ <Order>3</Order>
34
+ <Type>Primary</Type>
35
+ <Extend>true</Extend>
36
+ </CreatePartition>
37
+ </CreatePartitions>
38
+ <ModifyPartitions>
39
+ <!-- System partition (ESP) -->
40
+ <ModifyPartition wcm:action="add">
41
+ <Order>1</Order>
42
+ <PartitionID>1</PartitionID>
43
+ <Label>System</Label>
44
+ <Format>FAT32</Format>
45
+ </ModifyPartition>
46
+ <!-- MSR partition does not need to be modified -->
47
+ <ModifyPartition wcm:action="add">
48
+ <Order>2</Order>
49
+ <PartitionID>2</PartitionID>
50
+ </ModifyPartition>
51
+ <!-- Windows partition -->
52
+ <ModifyPartition wcm:action="add">
53
+ <Order>3</Order>
54
+ <PartitionID>3</PartitionID>
55
+ <Label>Windows</Label>
56
+ <Letter>C</Letter>
57
+ <Format>NTFS</Format>
58
+ </ModifyPartition>
59
+ </ModifyPartitions>
60
+ </Disk>
61
+ </DiskConfiguration>
62
+ <ImageInstall>
63
+ <OSImage>
64
+ <InstallTo>
65
+ <DiskID>0</DiskID>
66
+ <PartitionID>3</PartitionID>
67
+ </InstallTo>
68
+ <InstallToAvailablePartition>false</InstallToAvailablePartition>
69
+ </OSImage>
70
+ </ImageInstall>
71
+ <DynamicUpdate>
72
+ <Enable>true</Enable>
73
+ <WillShowUI>Never</WillShowUI>
74
+ </DynamicUpdate>
75
+ <UpgradeData>
76
+ <Upgrade>false</Upgrade>
77
+ <WillShowUI>Never</WillShowUI>
78
+ </UpgradeData>
79
+ <UserData>
80
+ <AcceptEula>true</AcceptEula>
81
+ <FullName>Docker</FullName>
82
+ <Organization>Windows for Docker</Organization>
83
+ <ProductKey>
84
+ <Key>VK7JG-NPHTM-C97JM-9MPGT-3V66T</Key>
85
+ </ProductKey>
86
+ </UserData>
87
+ <EnableFirewall>false</EnableFirewall>
88
+ <Diagnostics>
89
+ <OptIn>false</OptIn>
90
+ </Diagnostics>
91
+ </component>
92
+ <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
93
+ <DriverPaths>
94
+ <PathAndCredentials wcm:action="add" wcm:keyValue="1">
95
+ <Path>D:\viostor\w10\amd64</Path>
96
+ </PathAndCredentials>
97
+ <PathAndCredentials wcm:action="add" wcm:keyValue="2">
98
+ <Path>D:\NetKVM\w10\amd64</Path>
99
+ </PathAndCredentials>
100
+ <PathAndCredentials wcm:action="add" wcm:keyValue="3">
101
+ <Path>D:\Balloon\w10\amd64</Path>
102
+ </PathAndCredentials>
103
+ <PathAndCredentials wcm:action="add" wcm:keyValue="4">
104
+ <Path>D:\pvpanic\w10\amd64</Path>
105
+ </PathAndCredentials>
106
+ <PathAndCredentials wcm:action="add" wcm:keyValue="5">
107
+ <Path>D:\qemupciserial\w10\amd64</Path>
108
+ </PathAndCredentials>
109
+ <PathAndCredentials wcm:action="add" wcm:keyValue="6">
110
+ <Path>D:\qxldod\w10\amd64</Path>
111
+ </PathAndCredentials>
112
+ <PathAndCredentials wcm:action="add" wcm:keyValue="7">
113
+ <Path>D:\vioinput\w10\amd64</Path>
114
+ </PathAndCredentials>
115
+ <PathAndCredentials wcm:action="add" wcm:keyValue="8">
116
+ <Path>D:\viorng\w10\amd64</Path>
117
+ </PathAndCredentials>
118
+ <PathAndCredentials wcm:action="add" wcm:keyValue="9">
119
+ <Path>D:\vioscsi\w10\amd64</Path>
120
+ </PathAndCredentials>
121
+ <PathAndCredentials wcm:action="add" wcm:keyValue="10">
122
+ <Path>D:\vioserial\w10\amd64</Path>
123
+ </PathAndCredentials>
124
+ <PathAndCredentials wcm:action="add" wcm:keyValue="11">
125
+ <Path>D:\viogpudo\w10\amd64</Path>
126
+ </PathAndCredentials>
127
+ <PathAndCredentials wcm:action="add" wcm:keyValue="12">
128
+ <Path>D:\sriov\w10\amd64</Path>
129
+ </PathAndCredentials>
130
+ <PathAndCredentials wcm:action="add" wcm:keyValue="13">
131
+ <Path>D:\viofs\w10\amd64</Path>
132
+ </PathAndCredentials>
133
+ </DriverPaths>
134
+ </component>
135
+ </settings>
136
+ <settings pass="offlineServicing">
137
+ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
138
+ <EnableLUA>false</EnableLUA>
139
+ </component>
140
+ </settings>
141
+ <settings pass="generalize">
142
+ <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
143
+ <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
144
+ </component>
145
+ <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
146
+ <SkipRearm>1</SkipRearm>
147
+ </component>
148
+ </settings>
149
+ <settings pass="specialize">
150
+ <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
151
+ <SkipAutoActivation>true</SkipAutoActivation>
152
+ </component>
153
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
154
+ <ComputerName>*</ComputerName>
155
+ <OEMInformation>
156
+ <Manufacturer>Dockur</Manufacturer>
157
+ <Model>Windows for Docker</Model>
158
+ <SupportHours>24/7</SupportHours>
159
+ <SupportPhone />
160
+ <SupportProvider>Dockur</SupportProvider>
161
+ <SupportURL>https://github.com/dockur/windows/issues</SupportURL>
162
+ </OEMInformation>
163
+ <OEMName>Windows for Docker</OEMName>
164
+ </component>
165
+ <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
166
+ <DisableWER>1</DisableWER>
167
+ </component>
168
+ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
169
+ <DisableAccelerators>true</DisableAccelerators>
170
+ <DisableFirstRunWizard>true</DisableFirstRunWizard>
171
+ <Home_Page>https://google.com</Home_Page>
172
+ <Help_Page>about:blank</Help_Page>
173
+ </component>
174
+ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
175
+ <DisableAccelerators>true</DisableAccelerators>
176
+ <DisableFirstRunWizard>true</DisableFirstRunWizard>
177
+ <Home_Page>https://google.com</Home_Page>
178
+ <Help_Page>about:blank</Help_Page>
179
+ </component>
180
+ <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
181
+ <CEIPEnabled>0</CEIPEnabled>
182
+ </component>
183
+ <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
184
+ <DisableSR>1</DisableSR>
185
+ </component>
186
+ <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
187
+ <InputLocale>0409:00000409</InputLocale>
188
+ <SystemLocale>en-US</SystemLocale>
189
+ <UILanguage>en-US</UILanguage>
190
+ <UserLocale>en-US</UserLocale>
191
+ </component>
192
+ <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
193
+ <RunSynchronous>
194
+ <RunSynchronousCommand wcm:action="add">
195
+ <Order>1</Order>
196
+ <Path>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v BypassNRO /t REG_DWORD /d 1 /f</Path>
197
+ </RunSynchronousCommand>
198
+ <RunSynchronousCommand wcm:action="add">
199
+ <Order>2</Order>
200
+ <Path>reg.exe load "HKU\mount" "C:\Users\Default\NTUSER.DAT"</Path>
201
+ </RunSynchronousCommand>
202
+ <RunSynchronousCommand wcm:action="add">
203
+ <Order>3</Order>
204
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f</Path>
205
+ </RunSynchronousCommand>
206
+ <RunSynchronousCommand wcm:action="add">
207
+ <Order>4</Order>
208
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f</Path>
209
+ </RunSynchronousCommand>
210
+ <RunSynchronousCommand wcm:action="add">
211
+ <Order>5</Order>
212
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path>
213
+ </RunSynchronousCommand>
214
+ <RunSynchronousCommand wcm:action="add">
215
+ <Order>6</Order>
216
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path>
217
+ </RunSynchronousCommand>
218
+ <RunSynchronousCommand wcm:action="add">
219
+ <Order>7</Order>
220
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f</Path>
221
+ </RunSynchronousCommand>
222
+ <RunSynchronousCommand wcm:action="add">
223
+ <Order>8</Order>
224
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path>
225
+ </RunSynchronousCommand>
226
+ <RunSynchronousCommand wcm:action="add">
227
+ <Order>9</Order>
228
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f</Path>
229
+ </RunSynchronousCommand>
230
+ <RunSynchronousCommand wcm:action="add">
231
+ <Order>10</Order>
232
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f</Path>
233
+ </RunSynchronousCommand>
234
+ <RunSynchronousCommand wcm:action="add">
235
+ <Order>11</Order>
236
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f</Path>
237
+ </RunSynchronousCommand>
238
+ <RunSynchronousCommand wcm:action="add">
239
+ <Order>12</Order>
240
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f</Path>
241
+ </RunSynchronousCommand>
242
+ <RunSynchronousCommand wcm:action="add">
243
+ <Order>13</Order>
244
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f</Path>
245
+ </RunSynchronousCommand>
246
+ <RunSynchronousCommand wcm:action="add">
247
+ <Order>14</Order>
248
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f</Path>
249
+ </RunSynchronousCommand>
250
+ <RunSynchronousCommand wcm:action="add">
251
+ <Order>15</Order>
252
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f</Path>
253
+ </RunSynchronousCommand>
254
+ <RunSynchronousCommand wcm:action="add">
255
+ <Order>16</Order>
256
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f</Path>
257
+ </RunSynchronousCommand>
258
+ <RunSynchronousCommand wcm:action="add">
259
+ <Order>17</Order>
260
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f</Path>
261
+ </RunSynchronousCommand>
262
+ <RunSynchronousCommand wcm:action="add">
263
+ <Order>18</Order>
264
+ <Path>reg.exe unload "HKU\mount"</Path>
265
+ </RunSynchronousCommand>
266
+ <RunSynchronousCommand wcm:action="add">
267
+ <Order>19</Order>
268
+ <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f</Path>
269
+ </RunSynchronousCommand>
270
+ </RunSynchronous>
271
+ </component>
272
+ <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
273
+ <fDenyTSConnections>false</fDenyTSConnections>
274
+ </component>
275
+ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
276
+ <UserAuthentication>0</UserAuthentication>
277
+ </component>
278
+ <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
279
+ <FirewallGroups>
280
+ <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop">
281
+ <Active>true</Active>
282
+ <Group>Remote Desktop</Group>
283
+ <Profile>all</Profile>
284
+ </FirewallGroup>
285
+ </FirewallGroups>
286
+ </component>
287
+ </settings>
288
+ <settings pass="auditSystem" />
289
+ <settings pass="auditUser" />
290
+ <settings pass="oobeSystem">
291
+ <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
292
+ <PreventDeviceEncryption>true</PreventDeviceEncryption>
293
+ </component>
294
+ <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
295
+ <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled>
296
+ </component>
297
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
298
+ <UserAccounts>
299
+ <LocalAccounts>
300
+ <LocalAccount wcm:action="add">
301
+ <Name>Docker</Name>
302
+ <Group>Administrators</Group>
303
+ <Password>
304
+ <Value />
305
+ <PlainText>true</PlainText>
306
+ </Password>
307
+ </LocalAccount>
308
+ </LocalAccounts>
309
+ <AdministratorPassword>
310
+ <Value>password</Value>
311
+ <PlainText>true</PlainText>
312
+ </AdministratorPassword>
313
+ </UserAccounts>
314
+ <AutoLogon>
315
+ <Username>Docker</Username>
316
+ <Enabled>true</Enabled>
317
+ <LogonCount>65432</LogonCount>
318
+ <Password>
319
+ <Value />
320
+ <PlainText>true</PlainText>
321
+ </Password>
322
+ </AutoLogon>
323
+ <OOBE>
324
+ <HideEULAPage>true</HideEULAPage>
325
+ <HideLocalAccountScreen>true</HideLocalAccountScreen>
326
+ <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
327
+ <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
328
+ <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
329
+ <NetworkLocation>Other</NetworkLocation>
330
+ <ProtectYourPC>3</ProtectYourPC>
331
+ <SkipUserOOBE>true</SkipUserOOBE>
332
+ <SkipMachineOOBE>true</SkipMachineOOBE>
333
+ </OOBE>
334
+ <RegisteredOrganization>Dockur</RegisteredOrganization>
335
+ <RegisteredOwner>Windows for Docker</RegisteredOwner>
336
+ <FirstLogonCommands>
337
+ <SynchronousCommand wcm:action="add">
338
+ <Order>1</Order>
339
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine>
340
+ <Description>Allow guest access to network shares</Description>
341
+ </SynchronousCommand>
342
+ <SynchronousCommand wcm:action="add">
343
+ <Order>2</Order>
344
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine>
345
+ <Description>Allow RDP login with blank password</Description>
346
+ </SynchronousCommand>
347
+ <SynchronousCommand wcm:action="add">
348
+ <Order>3</Order>
349
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine>
350
+ <Description>Enable option for passwordless sign-in</Description>
351
+ </SynchronousCommand>
352
+ <SynchronousCommand wcm:action="add">
353
+ <Order>4</Order>
354
+ <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine>
355
+ <Description>Password Never Expires</Description>
356
+ </SynchronousCommand>
357
+ <SynchronousCommand wcm:action="add">
358
+ <Order>5</Order>
359
+ <CommandLine>cmd /C POWERCFG -H OFF</CommandLine>
360
+ <Description>Disable Hibernation</Description>
361
+ </SynchronousCommand>
362
+ <SynchronousCommand wcm:action="add">
363
+ <Order>6</Order>
364
+ <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine>
365
+ <Description>Disable monitor blanking</Description>
366
+ </SynchronousCommand>
367
+ <SynchronousCommand wcm:action="add">
368
+ <Order>7</Order>
369
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine>
370
+ <Description>Disable Network Discovery popup</Description>
371
+ </SynchronousCommand>
372
+ <SynchronousCommand wcm:action="add">
373
+ <Order>8</Order>
374
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine>
375
+ <Description>Disable Network Discovery popup</Description>
376
+ </SynchronousCommand>
377
+ <SynchronousCommand wcm:action="add">
378
+ <Order>9</Order>
379
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine>
380
+ <Description>Disable first-run experience in Edge</Description>
381
+ </SynchronousCommand>
382
+ <SynchronousCommand wcm:action="add">
383
+ <Order>10</Order>
384
+ <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine>
385
+ <Description>Show file extensions in Explorer</Description>
386
+ </SynchronousCommand>
387
+ <SynchronousCommand wcm:action="add">
388
+ <Order>11</Order>
389
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine>
390
+ <Description>Zero Hibernation File</Description>
391
+ </SynchronousCommand>
392
+ <SynchronousCommand wcm:action="add">
393
+ <Order>12</Order>
394
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine>
395
+ <Description>Disable Hibernation Mode</Description>
396
+ </SynchronousCommand>
397
+ </FirstLogonCommands>
398
+ </component>
399
+ </settings>
400
+ </unattend>
assets/win11x64.xml ADDED
@@ -0,0 +1,428 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
3
+ <settings pass="windowsPE">
4
+ <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
5
+ <SetupUILanguage>
6
+ <UILanguage>en-US</UILanguage>
7
+ </SetupUILanguage>
8
+ <InputLocale>0409:00000409</InputLocale>
9
+ <SystemLocale>en-US</SystemLocale>
10
+ <UILanguage>en-US</UILanguage>
11
+ <UserLocale>en-US</UserLocale>
12
+ </component>
13
+ <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
14
+ <DiskConfiguration>
15
+ <Disk wcm:action="add">
16
+ <DiskID>0</DiskID>
17
+ <WillWipeDisk>true</WillWipeDisk>
18
+ <CreatePartitions>
19
+ <!-- System partition (ESP) -->
20
+ <CreatePartition wcm:action="add">
21
+ <Order>1</Order>
22
+ <Type>EFI</Type>
23
+ <Size>128</Size>
24
+ </CreatePartition>
25
+ <!-- Microsoft reserved partition (MSR) -->
26
+ <CreatePartition wcm:action="add">
27
+ <Order>2</Order>
28
+ <Type>MSR</Type>
29
+ <Size>128</Size>
30
+ </CreatePartition>
31
+ <!-- Windows partition -->
32
+ <CreatePartition wcm:action="add">
33
+ <Order>3</Order>
34
+ <Type>Primary</Type>
35
+ <Extend>true</Extend>
36
+ </CreatePartition>
37
+ </CreatePartitions>
38
+ <ModifyPartitions>
39
+ <!-- System partition (ESP) -->
40
+ <ModifyPartition wcm:action="add">
41
+ <Order>1</Order>
42
+ <PartitionID>1</PartitionID>
43
+ <Label>System</Label>
44
+ <Format>FAT32</Format>
45
+ </ModifyPartition>
46
+ <!-- MSR partition does not need to be modified -->
47
+ <ModifyPartition wcm:action="add">
48
+ <Order>2</Order>
49
+ <PartitionID>2</PartitionID>
50
+ </ModifyPartition>
51
+ <!-- Windows partition -->
52
+ <ModifyPartition wcm:action="add">
53
+ <Order>3</Order>
54
+ <PartitionID>3</PartitionID>
55
+ <Label>Windows</Label>
56
+ <Letter>C</Letter>
57
+ <Format>NTFS</Format>
58
+ </ModifyPartition>
59
+ </ModifyPartitions>
60
+ </Disk>
61
+ </DiskConfiguration>
62
+ <ImageInstall>
63
+ <OSImage>
64
+ <InstallTo>
65
+ <DiskID>0</DiskID>
66
+ <PartitionID>3</PartitionID>
67
+ </InstallTo>
68
+ <InstallToAvailablePartition>false</InstallToAvailablePartition>
69
+ </OSImage>
70
+ </ImageInstall>
71
+ <DynamicUpdate>
72
+ <Enable>true</Enable>
73
+ <WillShowUI>Never</WillShowUI>
74
+ </DynamicUpdate>
75
+ <UpgradeData>
76
+ <Upgrade>false</Upgrade>
77
+ <WillShowUI>Never</WillShowUI>
78
+ </UpgradeData>
79
+ <UserData>
80
+ <AcceptEula>true</AcceptEula>
81
+ <FullName>Docker</FullName>
82
+ <Organization>Windows for Docker</Organization>
83
+ <ProductKey>
84
+ <Key>VK7JG-NPHTM-C97JM-9MPGT-3V66T</Key>
85
+ </ProductKey>
86
+ </UserData>
87
+ <EnableFirewall>false</EnableFirewall>
88
+ <Diagnostics>
89
+ <OptIn>false</OptIn>
90
+ </Diagnostics>
91
+ <RunSynchronous>
92
+ <RunSynchronousCommand wcm:action="add">
93
+ <Order>1</Order>
94
+ <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassTPMCheck /t REG_DWORD /d 1 /f</Path>
95
+ </RunSynchronousCommand>
96
+ <RunSynchronousCommand wcm:action="add">
97
+ <Order>2</Order>
98
+ <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassSecureBootCheck /t REG_DWORD /d 1 /f</Path>
99
+ </RunSynchronousCommand>
100
+ <RunSynchronousCommand wcm:action="add">
101
+ <Order>3</Order>
102
+ <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassRAMCheck /t REG_DWORD /d 1 /f</Path>
103
+ </RunSynchronousCommand>
104
+ <RunSynchronousCommand wcm:action="add">
105
+ <Order>4</Order>
106
+ <Path>reg.exe add "HKLM\SYSTEM\Setup\MoSetup" /v AllowUpgradesWithUnsupportedTPMOrCPU /t REG_DWORD /d 1 /f</Path>
107
+ </RunSynchronousCommand>
108
+ </RunSynchronous>
109
+ </component>
110
+ <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
111
+ <DriverPaths>
112
+ <PathAndCredentials wcm:action="add" wcm:keyValue="1">
113
+ <Path>D:\viostor\w11\amd64</Path>
114
+ </PathAndCredentials>
115
+ <PathAndCredentials wcm:action="add" wcm:keyValue="2">
116
+ <Path>D:\NetKVM\w11\amd64</Path>
117
+ </PathAndCredentials>
118
+ <PathAndCredentials wcm:action="add" wcm:keyValue="3">
119
+ <Path>D:\Balloon\w11\amd64</Path>
120
+ </PathAndCredentials>
121
+ <PathAndCredentials wcm:action="add" wcm:keyValue="4">
122
+ <Path>D:\pvpanic\w11\amd64</Path>
123
+ </PathAndCredentials>
124
+ <PathAndCredentials wcm:action="add" wcm:keyValue="5">
125
+ <Path>D:\qemupciserial\w11\amd64</Path>
126
+ </PathAndCredentials>
127
+ <PathAndCredentials wcm:action="add" wcm:keyValue="6">
128
+ <Path>D:\qxldod\w11\amd64</Path>
129
+ </PathAndCredentials>
130
+ <PathAndCredentials wcm:action="add" wcm:keyValue="7">
131
+ <Path>D:\vioinput\w11\amd64</Path>
132
+ </PathAndCredentials>
133
+ <PathAndCredentials wcm:action="add" wcm:keyValue="8">
134
+ <Path>D:\viorng\w11\amd64</Path>
135
+ </PathAndCredentials>
136
+ <PathAndCredentials wcm:action="add" wcm:keyValue="9">
137
+ <Path>D:\vioscsi\w11\amd64</Path>
138
+ </PathAndCredentials>
139
+ <PathAndCredentials wcm:action="add" wcm:keyValue="10">
140
+ <Path>D:\vioserial\w11\amd64</Path>
141
+ </PathAndCredentials>
142
+ <PathAndCredentials wcm:action="add" wcm:keyValue="11">
143
+ <Path>D:\viogpudo\w11\amd64</Path>
144
+ </PathAndCredentials>
145
+ <PathAndCredentials wcm:action="add" wcm:keyValue="12">
146
+ <Path>D:\sriov\w11\amd64</Path>
147
+ </PathAndCredentials>
148
+ <PathAndCredentials wcm:action="add" wcm:keyValue="13">
149
+ <Path>D:\viofs\w11\amd64</Path>
150
+ </PathAndCredentials>
151
+ </DriverPaths>
152
+ </component>
153
+ </settings>
154
+ <settings pass="offlineServicing">
155
+ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
156
+ <EnableLUA>false</EnableLUA>
157
+ </component>
158
+ </settings>
159
+ <settings pass="generalize">
160
+ <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
161
+ <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
162
+ </component>
163
+ <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
164
+ <SkipRearm>1</SkipRearm>
165
+ </component>
166
+ </settings>
167
+ <settings pass="specialize">
168
+ <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
169
+ <SkipAutoActivation>true</SkipAutoActivation>
170
+ </component>
171
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
172
+ <ComputerName>*</ComputerName>
173
+ <OEMInformation>
174
+ <Manufacturer>Dockur</Manufacturer>
175
+ <Model>Windows for Docker</Model>
176
+ <SupportHours>24/7</SupportHours>
177
+ <SupportPhone />
178
+ <SupportProvider>Dockur</SupportProvider>
179
+ <SupportURL>https://github.com/dockur/windows/issues</SupportURL>
180
+ </OEMInformation>
181
+ <OEMName>Windows for Docker</OEMName>
182
+ </component>
183
+ <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
184
+ <DisableWER>1</DisableWER>
185
+ </component>
186
+ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
187
+ <DisableAccelerators>true</DisableAccelerators>
188
+ <DisableFirstRunWizard>true</DisableFirstRunWizard>
189
+ <Home_Page>https://google.com</Home_Page>
190
+ <Help_Page>about:blank</Help_Page>
191
+ </component>
192
+ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
193
+ <DisableAccelerators>true</DisableAccelerators>
194
+ <DisableFirstRunWizard>true</DisableFirstRunWizard>
195
+ <Home_Page>https://google.com</Home_Page>
196
+ <Help_Page>about:blank</Help_Page>
197
+ </component>
198
+ <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
199
+ <CEIPEnabled>0</CEIPEnabled>
200
+ </component>
201
+ <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
202
+ <DisableSR>1</DisableSR>
203
+ </component>
204
+ <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
205
+ <InputLocale>0409:00000409</InputLocale>
206
+ <SystemLocale>en-US</SystemLocale>
207
+ <UILanguage>en-US</UILanguage>
208
+ <UserLocale>en-US</UserLocale>
209
+ </component>
210
+ <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
211
+ <RunSynchronous>
212
+ <RunSynchronousCommand wcm:action="add">
213
+ <Order>1</Order>
214
+ <Path>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v BypassNRO /t REG_DWORD /d 1 /f</Path>
215
+ </RunSynchronousCommand>
216
+ <RunSynchronousCommand wcm:action="add">
217
+ <Order>2</Order>
218
+ <Path>reg.exe load "HKU\mount" "C:\Users\Default\NTUSER.DAT"</Path>
219
+ </RunSynchronousCommand>
220
+ <RunSynchronousCommand wcm:action="add">
221
+ <Order>3</Order>
222
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f</Path>
223
+ </RunSynchronousCommand>
224
+ <RunSynchronousCommand wcm:action="add">
225
+ <Order>4</Order>
226
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f</Path>
227
+ </RunSynchronousCommand>
228
+ <RunSynchronousCommand wcm:action="add">
229
+ <Order>5</Order>
230
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path>
231
+ </RunSynchronousCommand>
232
+ <RunSynchronousCommand wcm:action="add">
233
+ <Order>6</Order>
234
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path>
235
+ </RunSynchronousCommand>
236
+ <RunSynchronousCommand wcm:action="add">
237
+ <Order>7</Order>
238
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f</Path>
239
+ </RunSynchronousCommand>
240
+ <RunSynchronousCommand wcm:action="add">
241
+ <Order>8</Order>
242
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path>
243
+ </RunSynchronousCommand>
244
+ <RunSynchronousCommand wcm:action="add">
245
+ <Order>9</Order>
246
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f</Path>
247
+ </RunSynchronousCommand>
248
+ <RunSynchronousCommand wcm:action="add">
249
+ <Order>10</Order>
250
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f</Path>
251
+ </RunSynchronousCommand>
252
+ <RunSynchronousCommand wcm:action="add">
253
+ <Order>11</Order>
254
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f</Path>
255
+ </RunSynchronousCommand>
256
+ <RunSynchronousCommand wcm:action="add">
257
+ <Order>12</Order>
258
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f</Path>
259
+ </RunSynchronousCommand>
260
+ <RunSynchronousCommand wcm:action="add">
261
+ <Order>13</Order>
262
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f</Path>
263
+ </RunSynchronousCommand>
264
+ <RunSynchronousCommand wcm:action="add">
265
+ <Order>14</Order>
266
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f</Path>
267
+ </RunSynchronousCommand>
268
+ <RunSynchronousCommand wcm:action="add">
269
+ <Order>15</Order>
270
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f</Path>
271
+ </RunSynchronousCommand>
272
+ <RunSynchronousCommand wcm:action="add">
273
+ <Order>16</Order>
274
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f</Path>
275
+ </RunSynchronousCommand>
276
+ <RunSynchronousCommand wcm:action="add">
277
+ <Order>17</Order>
278
+ <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f</Path>
279
+ </RunSynchronousCommand>
280
+ <RunSynchronousCommand wcm:action="add">
281
+ <Order>18</Order>
282
+ <Path>reg.exe unload "HKU\mount"</Path>
283
+ </RunSynchronousCommand>
284
+ <RunSynchronousCommand wcm:action="add">
285
+ <Order>19</Order>
286
+ <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f</Path>
287
+ </RunSynchronousCommand>
288
+ </RunSynchronous>
289
+ </component>
290
+ <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
291
+ <fDenyTSConnections>false</fDenyTSConnections>
292
+ </component>
293
+ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
294
+ <UserAuthentication>0</UserAuthentication>
295
+ </component>
296
+ <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
297
+ <FirewallGroups>
298
+ <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop">
299
+ <Active>true</Active>
300
+ <Group>Remote Desktop</Group>
301
+ <Profile>all</Profile>
302
+ </FirewallGroup>
303
+ </FirewallGroups>
304
+ </component>
305
+ </settings>
306
+ <settings pass="auditSystem" />
307
+ <settings pass="auditUser" />
308
+ <settings pass="oobeSystem">
309
+ <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
310
+ <PreventDeviceEncryption>true</PreventDeviceEncryption>
311
+ </component>
312
+ <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
313
+ <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled>
314
+ </component>
315
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
316
+ <UserAccounts>
317
+ <LocalAccounts>
318
+ <LocalAccount wcm:action="add">
319
+ <Name>Docker</Name>
320
+ <Group>Administrators</Group>
321
+ <Password>
322
+ <Value />
323
+ <PlainText>true</PlainText>
324
+ </Password>
325
+ </LocalAccount>
326
+ </LocalAccounts>
327
+ <AdministratorPassword>
328
+ <Value>password</Value>
329
+ <PlainText>true</PlainText>
330
+ </AdministratorPassword>
331
+ </UserAccounts>
332
+ <AutoLogon>
333
+ <Username>Docker</Username>
334
+ <Enabled>true</Enabled>
335
+ <LogonCount>65432</LogonCount>
336
+ <Password>
337
+ <Value />
338
+ <PlainText>true</PlainText>
339
+ </Password>
340
+ </AutoLogon>
341
+ <OOBE>
342
+ <HideEULAPage>true</HideEULAPage>
343
+ <HideLocalAccountScreen>true</HideLocalAccountScreen>
344
+ <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
345
+ <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
346
+ <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
347
+ <NetworkLocation>Other</NetworkLocation>
348
+ <ProtectYourPC>3</ProtectYourPC>
349
+ <SkipUserOOBE>true</SkipUserOOBE>
350
+ <SkipMachineOOBE>true</SkipMachineOOBE>
351
+ </OOBE>
352
+ <RegisteredOrganization>Dockur</RegisteredOrganization>
353
+ <RegisteredOwner>Windows for Docker</RegisteredOwner>
354
+ <FirstLogonCommands>
355
+ <SynchronousCommand wcm:action="add">
356
+ <Order>1</Order>
357
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine>
358
+ <Description>Allow guest access to network shares</Description>
359
+ </SynchronousCommand>
360
+ <SynchronousCommand wcm:action="add">
361
+ <Order>2</Order>
362
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine>
363
+ <Description>Allow RDP login with blank password</Description>
364
+ </SynchronousCommand>
365
+ <SynchronousCommand wcm:action="add">
366
+ <Order>3</Order>
367
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine>
368
+ <Description>Enable option for passwordless sign-in</Description>
369
+ </SynchronousCommand>
370
+ <SynchronousCommand wcm:action="add">
371
+ <Order>4</Order>
372
+ <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine>
373
+ <Description>Password Never Expires</Description>
374
+ </SynchronousCommand>
375
+ <SynchronousCommand wcm:action="add">
376
+ <Order>5</Order>
377
+ <CommandLine>cmd /C POWERCFG -H OFF</CommandLine>
378
+ <Description>Disable Hibernation</Description>
379
+ </SynchronousCommand>
380
+ <SynchronousCommand wcm:action="add">
381
+ <Order>6</Order>
382
+ <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine>
383
+ <Description>Disable monitor blanking</Description>
384
+ </SynchronousCommand>
385
+ <SynchronousCommand wcm:action="add">
386
+ <Order>7</Order>
387
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine>
388
+ <Description>Disable Network Discovery popup</Description>
389
+ </SynchronousCommand>
390
+ <SynchronousCommand wcm:action="add">
391
+ <Order>8</Order>
392
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine>
393
+ <Description>Disable Network Discovery popup</Description>
394
+ </SynchronousCommand>
395
+ <SynchronousCommand wcm:action="add">
396
+ <Order>9</Order>
397
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine>
398
+ <Description>Disable first-run experience in Edge</Description>
399
+ </SynchronousCommand>
400
+ <SynchronousCommand wcm:action="add">
401
+ <Order>10</Order>
402
+ <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine>
403
+ <Description>Show file extensions in Explorer</Description>
404
+ </SynchronousCommand>
405
+ <SynchronousCommand wcm:action="add">
406
+ <Order>11</Order>
407
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine>
408
+ <Description>Zero Hibernation File</Description>
409
+ </SynchronousCommand>
410
+ <SynchronousCommand wcm:action="add">
411
+ <Order>12</Order>
412
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine>
413
+ <Description>Disable Hibernation Mode</Description>
414
+ </SynchronousCommand>
415
+ <SynchronousCommand wcm:action="add">
416
+ <Order>13</Order>
417
+ <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine>
418
+ <Description>Disable unsupported hardware notifications</Description>
419
+ </SynchronousCommand>
420
+ <SynchronousCommand wcm:action="add">
421
+ <Order>14</Order>
422
+ <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine>
423
+ <Description>Disable unsupported hardware notifications</Description>
424
+ </SynchronousCommand>
425
+ </FirstLogonCommands>
426
+ </component>
427
+ </settings>
428
+ </unattend>
assets/win2008r2.xml ADDED
@@ -0,0 +1,288 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
3
+ <settings pass="windowsPE">
4
+ <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
5
+ <SetupUILanguage>
6
+ <UILanguage>en-US</UILanguage>
7
+ </SetupUILanguage>
8
+ <InputLocale>0409:00000409</InputLocale>
9
+ <SystemLocale>en-US</SystemLocale>
10
+ <UILanguage>en-US</UILanguage>
11
+ <UserLocale>en-US</UserLocale>
12
+ </component>
13
+ <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
14
+ <DiskConfiguration>
15
+ <WillShowUI>OnError</WillShowUI>
16
+ <Disk wcm:action="add">
17
+ <DiskID>0</DiskID>
18
+ <WillWipeDisk>true</WillWipeDisk>
19
+ <CreatePartitions>
20
+ <CreatePartition wcm:action="add">
21
+ <Order>1</Order>
22
+ <Type>Primary</Type>
23
+ <Size>100</Size>
24
+ </CreatePartition>
25
+ <CreatePartition wcm:action="add">
26
+ <Order>2</Order>
27
+ <Type>Primary</Type>
28
+ <Extend>true</Extend>
29
+ </CreatePartition>
30
+ </CreatePartitions>
31
+ <ModifyPartitions>
32
+ <ModifyPartition wcm:action="add">
33
+ <Format>NTFS</Format>
34
+ <Label>System Reserved</Label>
35
+ <Order>1</Order>
36
+ <Active>true</Active>
37
+ <PartitionID>1</PartitionID>
38
+ <TypeID>0x27</TypeID>
39
+ </ModifyPartition>
40
+ <ModifyPartition wcm:action="add">
41
+ <Active>true</Active>
42
+ <Format>NTFS</Format>
43
+ <Label>Windows</Label>
44
+ <Letter>C</Letter>
45
+ <Order>2</Order>
46
+ <PartitionID>2</PartitionID>
47
+ </ModifyPartition>
48
+ </ModifyPartitions>
49
+ </Disk>
50
+ </DiskConfiguration>
51
+ <ImageInstall>
52
+ <OSImage>
53
+ <InstallFrom>
54
+ <MetaData wcm:action="add">
55
+ <Value>1</Value>
56
+ <Key>/IMAGE/INDEX</Key>
57
+ </MetaData>
58
+ </InstallFrom>
59
+ <InstallTo>
60
+ <DiskID>0</DiskID>
61
+ <PartitionID>2</PartitionID>
62
+ </InstallTo>
63
+ <InstallToAvailablePartition>false</InstallToAvailablePartition>
64
+ </OSImage>
65
+ </ImageInstall>
66
+ <DynamicUpdate>
67
+ <Enable>true</Enable>
68
+ <WillShowUI>Never</WillShowUI>
69
+ </DynamicUpdate>
70
+ <UpgradeData>
71
+ <Upgrade>false</Upgrade>
72
+ <WillShowUI>Never</WillShowUI>
73
+ </UpgradeData>
74
+ <UserData>
75
+ <AcceptEula>true</AcceptEula>
76
+ <FullName>Docker</FullName>
77
+ <Organization>Windows for Docker</Organization>
78
+ <ProductKey />
79
+ </UserData>
80
+ <EnableFirewall>false</EnableFirewall>
81
+ <Diagnostics>
82
+ <OptIn>false</OptIn>
83
+ </Diagnostics>
84
+ </component>
85
+ <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
86
+ <DriverPaths>
87
+ <PathAndCredentials wcm:action="add" wcm:keyValue="1">
88
+ <Path>D:\viostor\2k8R2\amd64</Path>
89
+ </PathAndCredentials>
90
+ <PathAndCredentials wcm:action="add" wcm:keyValue="2">
91
+ <Path>D:\NetKVM\2k8R2\amd64</Path>
92
+ </PathAndCredentials>
93
+ <PathAndCredentials wcm:action="add" wcm:keyValue="3">
94
+ <Path>D:\Balloon\2k8R2\amd64</Path>
95
+ </PathAndCredentials>
96
+ <PathAndCredentials wcm:action="add" wcm:keyValue="4">
97
+ <Path>D:\pvpanic\2k8R2\amd64</Path>
98
+ </PathAndCredentials>
99
+ <PathAndCredentials wcm:action="add" wcm:keyValue="5">
100
+ <Path>D:\qemupciserial\2k8R2\amd64</Path>
101
+ </PathAndCredentials>
102
+ <PathAndCredentials wcm:action="add" wcm:keyValue="6">
103
+ <Path>D:\qxldod\2k8R2\amd64</Path>
104
+ </PathAndCredentials>
105
+ <PathAndCredentials wcm:action="add" wcm:keyValue="7">
106
+ <Path>D:\vioinput\2k8R2\amd64</Path>
107
+ </PathAndCredentials>
108
+ <PathAndCredentials wcm:action="add" wcm:keyValue="8">
109
+ <Path>D:\viorng\2k8R2\amd64</Path>
110
+ </PathAndCredentials>
111
+ <PathAndCredentials wcm:action="add" wcm:keyValue="9">
112
+ <Path>D:\vioscsi\2k8R2\amd64</Path>
113
+ </PathAndCredentials>
114
+ <PathAndCredentials wcm:action="add" wcm:keyValue="10">
115
+ <Path>D:\vioserial\2k8R2\amd64</Path>
116
+ </PathAndCredentials>
117
+ </DriverPaths>
118
+ </component>
119
+ </settings>
120
+ <settings pass="offlineServicing">
121
+ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
122
+ <EnableLUA>false</EnableLUA>
123
+ </component>
124
+ </settings>
125
+ <settings pass="generalize">
126
+ <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
127
+ <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
128
+ </component>
129
+ <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
130
+ <SkipRearm>1</SkipRearm>
131
+ </component>
132
+ </settings>
133
+ <settings pass="specialize">
134
+ <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
135
+ <SkipAutoActivation>true</SkipAutoActivation>
136
+ </component>
137
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
138
+ <ComputerName>*</ComputerName>
139
+ <OEMInformation>
140
+ <Manufacturer>Dockur</Manufacturer>
141
+ <Model>Windows for Docker</Model>
142
+ </OEMInformation>
143
+ </component>
144
+ <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
145
+ <DisableWER>1</DisableWER>
146
+ </component>
147
+ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
148
+ <DisableAccelerators>true</DisableAccelerators>
149
+ <DisableFirstRunWizard>true</DisableFirstRunWizard>
150
+ <Home_Page>https://google.com</Home_Page>
151
+ <Help_Page>about:blank</Help_Page>
152
+ </component>
153
+ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
154
+ <DisableAccelerators>true</DisableAccelerators>
155
+ <DisableFirstRunWizard>true</DisableFirstRunWizard>
156
+ <Home_Page>https://google.com</Home_Page>
157
+ <Help_Page>about:blank</Help_Page>
158
+ </component>
159
+ <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
160
+ <CEIPEnabled>0</CEIPEnabled>
161
+ </component>
162
+ <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
163
+ <DisableSR>1</DisableSR>
164
+ </component>
165
+ <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
166
+ <InputLocale>0409:00000409</InputLocale>
167
+ <SystemLocale>en-US</SystemLocale>
168
+ <UILanguage>en-US</UILanguage>
169
+ <UserLocale>en-US</UserLocale>
170
+ </component>
171
+ <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
172
+ <fDenyTSConnections>false</fDenyTSConnections>
173
+ </component>
174
+ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
175
+ <UserAuthentication>0</UserAuthentication>
176
+ </component>
177
+ <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
178
+ <FirewallGroups>
179
+ <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop">
180
+ <Active>true</Active>
181
+ <Group>Remote Desktop</Group>
182
+ <Profile>all</Profile>
183
+ </FirewallGroup>
184
+ </FirewallGroups>
185
+ </component>
186
+ </settings>
187
+ <settings pass="oobeSystem">
188
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
189
+ <UserAccounts>
190
+ <LocalAccounts>
191
+ <LocalAccount wcm:action="add">
192
+ <Name>Docker</Name>
193
+ <Group>Administrators</Group>
194
+ <Password>
195
+ <Value />
196
+ <PlainText>true</PlainText>
197
+ </Password>
198
+ </LocalAccount>
199
+ </LocalAccounts>
200
+ <AdministratorPassword>
201
+ <Value>password</Value>
202
+ <PlainText>true</PlainText>
203
+ </AdministratorPassword>
204
+ </UserAccounts>
205
+ <AutoLogon>
206
+ <Username>Docker</Username>
207
+ <Enabled>true</Enabled>
208
+ <LogonCount>65432</LogonCount>
209
+ <Password>
210
+ <Value />
211
+ <PlainText>true</PlainText>
212
+ </Password>
213
+ </AutoLogon>
214
+ <OOBE>
215
+ <HideEULAPage>true</HideEULAPage>
216
+ <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
217
+ <NetworkLocation>Other</NetworkLocation>
218
+ <ProtectYourPC>3</ProtectYourPC>
219
+ <SkipUserOOBE>true</SkipUserOOBE>
220
+ <SkipMachineOOBE>true</SkipMachineOOBE>
221
+ </OOBE>
222
+ <RegisteredOrganization>Dockur</RegisteredOrganization>
223
+ <RegisteredOwner>Windows for Docker</RegisteredOwner>
224
+ <FirstLogonCommands>
225
+ <SynchronousCommand wcm:action="add">
226
+ <Order>1</Order>
227
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine>
228
+ <Description>Allow guest access to network shares</Description>
229
+ </SynchronousCommand>
230
+ <SynchronousCommand wcm:action="add">
231
+ <Order>2</Order>
232
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine>
233
+ <Description>Allow RDP login with blank password</Description>
234
+ </SynchronousCommand>
235
+ <SynchronousCommand wcm:action="add">
236
+ <Order>3</Order>
237
+ <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine>
238
+ <Description>Password Never Expires</Description>
239
+ </SynchronousCommand>
240
+ <SynchronousCommand wcm:action="add">
241
+ <Order>4</Order>
242
+ <CommandLine>cmd /C POWERCFG -H OFF</CommandLine>
243
+ <Description>Disable Hibernation</Description>
244
+ </SynchronousCommand>
245
+ <SynchronousCommand wcm:action="add">
246
+ <Order>5</Order>
247
+ <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine>
248
+ <Description>Disable monitor blanking</Description>
249
+ </SynchronousCommand>
250
+ <SynchronousCommand wcm:action="add">
251
+ <Order>6</Order>
252
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine>
253
+ <Description>Disable Network Discovery popup</Description>
254
+ </SynchronousCommand>
255
+ <SynchronousCommand wcm:action="add">
256
+ <Order>7</Order>
257
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine>
258
+ <Description>Disable Network Discovery popup</Description>
259
+ </SynchronousCommand>
260
+ <SynchronousCommand wcm:action="add">
261
+ <Order>8</Order>
262
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine>
263
+ <Description>Disable Network Discovery popup</Description>
264
+ </SynchronousCommand>
265
+ <SynchronousCommand wcm:action="add">
266
+ <Order>9</Order>
267
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine>
268
+ <Description>Disable first-run experience in Edge</Description>
269
+ </SynchronousCommand>
270
+ <SynchronousCommand wcm:action="add">
271
+ <Order>10</Order>
272
+ <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine>
273
+ <Description>Show file extensions in Explorer</Description>
274
+ </SynchronousCommand>
275
+ <SynchronousCommand wcm:action="add">
276
+ <Order>11</Order>
277
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine>
278
+ <Description>Zero Hibernation File</Description>
279
+ </SynchronousCommand>
280
+ <SynchronousCommand wcm:action="add">
281
+ <Order>12</Order>
282
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine>
283
+ <Description>Disable Hibernation Mode</Description>
284
+ </SynchronousCommand>
285
+ </FirstLogonCommands>
286
+ </component>
287
+ </settings>
288
+ </unattend>
assets/win2012r2-eval.xml ADDED
@@ -0,0 +1,327 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
3
+ <settings pass="windowsPE">
4
+ <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
5
+ <SetupUILanguage>
6
+ <UILanguage>en-US</UILanguage>
7
+ </SetupUILanguage>
8
+ <InputLocale>0409:00000409</InputLocale>
9
+ <SystemLocale>en-US</SystemLocale>
10
+ <UILanguage>en-US</UILanguage>
11
+ <UILanguageFallback>en-US</UILanguageFallback>
12
+ <UserLocale>en-US</UserLocale>
13
+ </component>
14
+ <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
15
+ <DiskConfiguration>
16
+ <Disk wcm:action="add">
17
+ <DiskID>0</DiskID>
18
+ <WillWipeDisk>true</WillWipeDisk>
19
+ <CreatePartitions>
20
+ <!-- System partition (ESP) -->
21
+ <CreatePartition wcm:action="add">
22
+ <Order>1</Order>
23
+ <Type>EFI</Type>
24
+ <Size>128</Size>
25
+ </CreatePartition>
26
+ <!-- Microsoft reserved partition (MSR) -->
27
+ <CreatePartition wcm:action="add">
28
+ <Order>2</Order>
29
+ <Type>MSR</Type>
30
+ <Size>128</Size>
31
+ </CreatePartition>
32
+ <!-- Windows partition -->
33
+ <CreatePartition wcm:action="add">
34
+ <Order>3</Order>
35
+ <Type>Primary</Type>
36
+ <Extend>true</Extend>
37
+ </CreatePartition>
38
+ </CreatePartitions>
39
+ <ModifyPartitions>
40
+ <!-- System partition (ESP) -->
41
+ <ModifyPartition wcm:action="add">
42
+ <Order>1</Order>
43
+ <PartitionID>1</PartitionID>
44
+ <Label>System</Label>
45
+ <Format>FAT32</Format>
46
+ </ModifyPartition>
47
+ <!-- MSR partition does not need to be modified -->
48
+ <ModifyPartition wcm:action="add">
49
+ <Order>2</Order>
50
+ <PartitionID>2</PartitionID>
51
+ </ModifyPartition>
52
+ <!-- Windows partition -->
53
+ <ModifyPartition wcm:action="add">
54
+ <Order>3</Order>
55
+ <PartitionID>3</PartitionID>
56
+ <Label>Windows</Label>
57
+ <Letter>C</Letter>
58
+ <Format>NTFS</Format>
59
+ </ModifyPartition>
60
+ </ModifyPartitions>
61
+ </Disk>
62
+ </DiskConfiguration>
63
+ <ImageInstall>
64
+ <OSImage>
65
+ <InstallFrom>
66
+ <MetaData wcm:action="add">
67
+ <Key>/image/index</Key>
68
+ <Value>2</Value>
69
+ </MetaData>
70
+ </InstallFrom>
71
+ <InstallTo>
72
+ <DiskID>0</DiskID>
73
+ <PartitionID>3</PartitionID>
74
+ </InstallTo>
75
+ <WillShowUI>OnError</WillShowUI>
76
+ <InstallToAvailablePartition>false</InstallToAvailablePartition>
77
+ </OSImage>
78
+ </ImageInstall>
79
+ <DynamicUpdate>
80
+ <Enable>true</Enable>
81
+ <WillShowUI>Never</WillShowUI>
82
+ </DynamicUpdate>
83
+ <UpgradeData>
84
+ <Upgrade>false</Upgrade>
85
+ <WillShowUI>Never</WillShowUI>
86
+ </UpgradeData>
87
+ <UserData>
88
+ <AcceptEula>true</AcceptEula>
89
+ <FullName>Docker</FullName>
90
+ <Organization>Windows for Docker</Organization>
91
+ <ProductKey />
92
+ </UserData>
93
+ <EnableFirewall>false</EnableFirewall>
94
+ <Diagnostics>
95
+ <OptIn>false</OptIn>
96
+ </Diagnostics>
97
+ </component>
98
+ <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
99
+ <DriverPaths>
100
+ <PathAndCredentials wcm:action="add" wcm:keyValue="1">
101
+ <Path>D:\viostor\2k16\amd64</Path>
102
+ </PathAndCredentials>
103
+ <PathAndCredentials wcm:action="add" wcm:keyValue="2">
104
+ <Path>D:\NetKVM\2k16\amd64</Path>
105
+ </PathAndCredentials>
106
+ <PathAndCredentials wcm:action="add" wcm:keyValue="3">
107
+ <Path>D:\Balloon\2k16\amd64</Path>
108
+ </PathAndCredentials>
109
+ <PathAndCredentials wcm:action="add" wcm:keyValue="4">
110
+ <Path>D:\pvpanic\2k16\amd64</Path>
111
+ </PathAndCredentials>
112
+ <PathAndCredentials wcm:action="add" wcm:keyValue="5">
113
+ <Path>D:\qemupciserial\2k16\amd64</Path>
114
+ </PathAndCredentials>
115
+ <PathAndCredentials wcm:action="add" wcm:keyValue="6">
116
+ <Path>D:\qxldod\2k16\amd64</Path>
117
+ </PathAndCredentials>
118
+ <PathAndCredentials wcm:action="add" wcm:keyValue="7">
119
+ <Path>D:\vioinput\2k16\amd64</Path>
120
+ </PathAndCredentials>
121
+ <PathAndCredentials wcm:action="add" wcm:keyValue="8">
122
+ <Path>D:\viorng\2k16\amd64</Path>
123
+ </PathAndCredentials>
124
+ <PathAndCredentials wcm:action="add" wcm:keyValue="9">
125
+ <Path>D:\vioscsi\2k16\amd64</Path>
126
+ </PathAndCredentials>
127
+ <PathAndCredentials wcm:action="add" wcm:keyValue="10">
128
+ <Path>D:\vioserial\2k16\amd64</Path>
129
+ </PathAndCredentials>
130
+ <PathAndCredentials wcm:action="add" wcm:keyValue="11">
131
+ <Path>D:\viogpudo\2k16\amd64</Path>
132
+ </PathAndCredentials>
133
+ <PathAndCredentials wcm:action="add" wcm:keyValue="12">
134
+ <Path>D:\sriov\2k16\amd64</Path>
135
+ </PathAndCredentials>
136
+ <PathAndCredentials wcm:action="add" wcm:keyValue="13">
137
+ <Path>D:\viofs\2k16\amd64</Path>
138
+ </PathAndCredentials>
139
+ </DriverPaths>
140
+ </component>
141
+ </settings>
142
+ <settings pass="offlineServicing">
143
+ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
144
+ <EnableLUA>false</EnableLUA>
145
+ </component>
146
+ </settings>
147
+ <settings pass="generalize">
148
+ <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
149
+ <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
150
+ </component>
151
+ <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
152
+ <SkipRearm>1</SkipRearm>
153
+ </component>
154
+ </settings>
155
+ <settings pass="specialize">
156
+ <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
157
+ <SkipAutoActivation>true</SkipAutoActivation>
158
+ </component>
159
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
160
+ <ComputerName>*</ComputerName>
161
+ <OEMInformation>
162
+ <Manufacturer>Dockur</Manufacturer>
163
+ <Model>Windows for Docker</Model>
164
+ </OEMInformation>
165
+ <OEMName>Windows for Docker</OEMName>
166
+ </component>
167
+ <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
168
+ <DisableWER>1</DisableWER>
169
+ </component>
170
+ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
171
+ <DisableAccelerators>true</DisableAccelerators>
172
+ <DisableFirstRunWizard>true</DisableFirstRunWizard>
173
+ <Home_Page>https://google.com</Home_Page>
174
+ <Help_Page>about:blank</Help_Page>
175
+ </component>
176
+ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
177
+ <DisableAccelerators>true</DisableAccelerators>
178
+ <DisableFirstRunWizard>true</DisableFirstRunWizard>
179
+ <Home_Page>https://google.com</Home_Page>
180
+ <Help_Page>about:blank</Help_Page>
181
+ </component>
182
+ <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
183
+ <CEIPEnabled>0</CEIPEnabled>
184
+ </component>
185
+ <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
186
+ <DisableSR>1</DisableSR>
187
+ </component>
188
+ <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
189
+ <InputLocale>0409:00000409</InputLocale>
190
+ <SystemLocale>en-US</SystemLocale>
191
+ <UILanguage>en-US</UILanguage>
192
+ <UILanguageFallback>en-US</UILanguageFallback>
193
+ <UserLocale>en-US</UserLocale>
194
+ </component>
195
+ <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
196
+ <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon>
197
+ </component>
198
+ <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
199
+ <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon>
200
+ </component>
201
+ <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
202
+ <fDenyTSConnections>false</fDenyTSConnections>
203
+ </component>
204
+ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
205
+ <UserAuthentication>0</UserAuthentication>
206
+ </component>
207
+ <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
208
+ <FirewallGroups>
209
+ <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop">
210
+ <Active>true</Active>
211
+ <Group>Remote Desktop</Group>
212
+ <Profile>all</Profile>
213
+ </FirewallGroup>
214
+ </FirewallGroups>
215
+ </component>
216
+ </settings>
217
+ <settings pass="oobeSystem">
218
+ <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
219
+ <PreventDeviceEncryption>true</PreventDeviceEncryption>
220
+ </component>
221
+ <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
222
+ <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled>
223
+ </component>
224
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
225
+ <UserAccounts>
226
+ <LocalAccounts>
227
+ <LocalAccount wcm:action="add">
228
+ <Name>Docker</Name>
229
+ <Group>Administrators</Group>
230
+ <Password>
231
+ <Value />
232
+ <PlainText>true</PlainText>
233
+ </Password>
234
+ </LocalAccount>
235
+ </LocalAccounts>
236
+ <AdministratorPassword>
237
+ <Value>password</Value>
238
+ <PlainText>true</PlainText>
239
+ </AdministratorPassword>
240
+ </UserAccounts>
241
+ <AutoLogon>
242
+ <Username>Docker</Username>
243
+ <Enabled>true</Enabled>
244
+ <LogonCount>65432</LogonCount>
245
+ <Password>
246
+ <Value />
247
+ <PlainText>true</PlainText>
248
+ </Password>
249
+ </AutoLogon>
250
+ <OOBE>
251
+ <HideEULAPage>true</HideEULAPage>
252
+ <HideLocalAccountScreen>true</HideLocalAccountScreen>
253
+ <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
254
+ <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
255
+ <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
256
+ <NetworkLocation>Other</NetworkLocation>
257
+ <ProtectYourPC>3</ProtectYourPC>
258
+ <SkipUserOOBE>true</SkipUserOOBE>
259
+ <SkipMachineOOBE>true</SkipMachineOOBE>
260
+ </OOBE>
261
+ <RegisteredOrganization>Dockur</RegisteredOrganization>
262
+ <RegisteredOwner>Windows for Docker</RegisteredOwner>
263
+ <FirstLogonCommands>
264
+ <SynchronousCommand wcm:action="add">
265
+ <Order>1</Order>
266
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine>
267
+ <Description>Allow guest access to network shares</Description>
268
+ </SynchronousCommand>
269
+ <SynchronousCommand wcm:action="add">
270
+ <Order>2</Order>
271
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine>
272
+ <Description>Allow RDP login with blank password</Description>
273
+ </SynchronousCommand>
274
+ <SynchronousCommand wcm:action="add">
275
+ <Order>3</Order>
276
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine>
277
+ <Description>Enable option for passwordless sign-in</Description>
278
+ </SynchronousCommand>
279
+ <SynchronousCommand wcm:action="add">
280
+ <Order>4</Order>
281
+ <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine>
282
+ <Description>Password Never Expires</Description>
283
+ </SynchronousCommand>
284
+ <SynchronousCommand wcm:action="add">
285
+ <Order>5</Order>
286
+ <CommandLine>cmd /C POWERCFG -H OFF</CommandLine>
287
+ <Description>Disable Hibernation</Description>
288
+ </SynchronousCommand>
289
+ <SynchronousCommand wcm:action="add">
290
+ <Order>6</Order>
291
+ <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine>
292
+ <Description>Disable monitor blanking</Description>
293
+ </SynchronousCommand>
294
+ <SynchronousCommand wcm:action="add">
295
+ <Order>7</Order>
296
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine>
297
+ <Description>Disable Network Discovery popup</Description>
298
+ </SynchronousCommand>
299
+ <SynchronousCommand wcm:action="add">
300
+ <Order>8</Order>
301
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine>
302
+ <Description>Disable Network Discovery popup</Description>
303
+ </SynchronousCommand>
304
+ <SynchronousCommand wcm:action="add">
305
+ <Order>9</Order>
306
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine>
307
+ <Description>Disable first-run experience in Edge</Description>
308
+ </SynchronousCommand>
309
+ <SynchronousCommand wcm:action="add">
310
+ <Order>10</Order>
311
+ <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine>
312
+ <Description>Show file extensions in Explorer</Description>
313
+ </SynchronousCommand>
314
+ <SynchronousCommand wcm:action="add">
315
+ <Order>11</Order>
316
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine>
317
+ <Description>Zero Hibernation File</Description>
318
+ </SynchronousCommand>
319
+ <SynchronousCommand wcm:action="add">
320
+ <Order>12</Order>
321
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine>
322
+ <Description>Disable Hibernation Mode</Description>
323
+ </SynchronousCommand>
324
+ </FirstLogonCommands>
325
+ </component>
326
+ </settings>
327
+ </unattend>
assets/win2016-eval.xml ADDED
@@ -0,0 +1,327 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
3
+ <settings pass="windowsPE">
4
+ <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
5
+ <SetupUILanguage>
6
+ <UILanguage>en-US</UILanguage>
7
+ </SetupUILanguage>
8
+ <InputLocale>0409:00000409</InputLocale>
9
+ <SystemLocale>en-US</SystemLocale>
10
+ <UILanguage>en-US</UILanguage>
11
+ <UILanguageFallback>en-US</UILanguageFallback>
12
+ <UserLocale>en-US</UserLocale>
13
+ </component>
14
+ <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
15
+ <DiskConfiguration>
16
+ <Disk wcm:action="add">
17
+ <DiskID>0</DiskID>
18
+ <WillWipeDisk>true</WillWipeDisk>
19
+ <CreatePartitions>
20
+ <!-- System partition (ESP) -->
21
+ <CreatePartition wcm:action="add">
22
+ <Order>1</Order>
23
+ <Type>EFI</Type>
24
+ <Size>128</Size>
25
+ </CreatePartition>
26
+ <!-- Microsoft reserved partition (MSR) -->
27
+ <CreatePartition wcm:action="add">
28
+ <Order>2</Order>
29
+ <Type>MSR</Type>
30
+ <Size>128</Size>
31
+ </CreatePartition>
32
+ <!-- Windows partition -->
33
+ <CreatePartition wcm:action="add">
34
+ <Order>3</Order>
35
+ <Type>Primary</Type>
36
+ <Extend>true</Extend>
37
+ </CreatePartition>
38
+ </CreatePartitions>
39
+ <ModifyPartitions>
40
+ <!-- System partition (ESP) -->
41
+ <ModifyPartition wcm:action="add">
42
+ <Order>1</Order>
43
+ <PartitionID>1</PartitionID>
44
+ <Label>System</Label>
45
+ <Format>FAT32</Format>
46
+ </ModifyPartition>
47
+ <!-- MSR partition does not need to be modified -->
48
+ <ModifyPartition wcm:action="add">
49
+ <Order>2</Order>
50
+ <PartitionID>2</PartitionID>
51
+ </ModifyPartition>
52
+ <!-- Windows partition -->
53
+ <ModifyPartition wcm:action="add">
54
+ <Order>3</Order>
55
+ <PartitionID>3</PartitionID>
56
+ <Label>Windows</Label>
57
+ <Letter>C</Letter>
58
+ <Format>NTFS</Format>
59
+ </ModifyPartition>
60
+ </ModifyPartitions>
61
+ </Disk>
62
+ </DiskConfiguration>
63
+ <ImageInstall>
64
+ <OSImage>
65
+ <InstallFrom>
66
+ <MetaData wcm:action="add">
67
+ <Key>/IMAGE/NAME</Key>
68
+ <Value>Windows Server 2016 SERVERSTANDARD</Value>
69
+ </MetaData>
70
+ </InstallFrom>
71
+ <InstallTo>
72
+ <DiskID>0</DiskID>
73
+ <PartitionID>3</PartitionID>
74
+ </InstallTo>
75
+ <WillShowUI>OnError</WillShowUI>
76
+ <InstallToAvailablePartition>false</InstallToAvailablePartition>
77
+ </OSImage>
78
+ </ImageInstall>
79
+ <DynamicUpdate>
80
+ <Enable>true</Enable>
81
+ <WillShowUI>Never</WillShowUI>
82
+ </DynamicUpdate>
83
+ <UpgradeData>
84
+ <Upgrade>false</Upgrade>
85
+ <WillShowUI>Never</WillShowUI>
86
+ </UpgradeData>
87
+ <UserData>
88
+ <AcceptEula>true</AcceptEula>
89
+ <FullName>Docker</FullName>
90
+ <Organization>Windows for Docker</Organization>
91
+ <ProductKey />
92
+ </UserData>
93
+ <EnableFirewall>false</EnableFirewall>
94
+ <Diagnostics>
95
+ <OptIn>false</OptIn>
96
+ </Diagnostics>
97
+ </component>
98
+ <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
99
+ <DriverPaths>
100
+ <PathAndCredentials wcm:action="add" wcm:keyValue="1">
101
+ <Path>D:\viostor\2k16\amd64</Path>
102
+ </PathAndCredentials>
103
+ <PathAndCredentials wcm:action="add" wcm:keyValue="2">
104
+ <Path>D:\NetKVM\2k16\amd64</Path>
105
+ </PathAndCredentials>
106
+ <PathAndCredentials wcm:action="add" wcm:keyValue="3">
107
+ <Path>D:\Balloon\2k16\amd64</Path>
108
+ </PathAndCredentials>
109
+ <PathAndCredentials wcm:action="add" wcm:keyValue="4">
110
+ <Path>D:\pvpanic\2k16\amd64</Path>
111
+ </PathAndCredentials>
112
+ <PathAndCredentials wcm:action="add" wcm:keyValue="5">
113
+ <Path>D:\qemupciserial\2k16\amd64</Path>
114
+ </PathAndCredentials>
115
+ <PathAndCredentials wcm:action="add" wcm:keyValue="6">
116
+ <Path>D:\qxldod\2k16\amd64</Path>
117
+ </PathAndCredentials>
118
+ <PathAndCredentials wcm:action="add" wcm:keyValue="7">
119
+ <Path>D:\vioinput\2k16\amd64</Path>
120
+ </PathAndCredentials>
121
+ <PathAndCredentials wcm:action="add" wcm:keyValue="8">
122
+ <Path>D:\viorng\2k16\amd64</Path>
123
+ </PathAndCredentials>
124
+ <PathAndCredentials wcm:action="add" wcm:keyValue="9">
125
+ <Path>D:\vioscsi\2k16\amd64</Path>
126
+ </PathAndCredentials>
127
+ <PathAndCredentials wcm:action="add" wcm:keyValue="10">
128
+ <Path>D:\vioserial\2k16\amd64</Path>
129
+ </PathAndCredentials>
130
+ <PathAndCredentials wcm:action="add" wcm:keyValue="11">
131
+ <Path>D:\viogpudo\2k16\amd64</Path>
132
+ </PathAndCredentials>
133
+ <PathAndCredentials wcm:action="add" wcm:keyValue="12">
134
+ <Path>D:\sriov\2k16\amd64</Path>
135
+ </PathAndCredentials>
136
+ <PathAndCredentials wcm:action="add" wcm:keyValue="13">
137
+ <Path>D:\viofs\2k16\amd64</Path>
138
+ </PathAndCredentials>
139
+ </DriverPaths>
140
+ </component>
141
+ </settings>
142
+ <settings pass="offlineServicing">
143
+ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
144
+ <EnableLUA>false</EnableLUA>
145
+ </component>
146
+ </settings>
147
+ <settings pass="generalize">
148
+ <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
149
+ <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
150
+ </component>
151
+ <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
152
+ <SkipRearm>1</SkipRearm>
153
+ </component>
154
+ </settings>
155
+ <settings pass="specialize">
156
+ <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
157
+ <SkipAutoActivation>true</SkipAutoActivation>
158
+ </component>
159
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
160
+ <ComputerName>*</ComputerName>
161
+ <OEMInformation>
162
+ <Manufacturer>Dockur</Manufacturer>
163
+ <Model>Windows for Docker</Model>
164
+ </OEMInformation>
165
+ <OEMName>Windows for Docker</OEMName>
166
+ </component>
167
+ <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
168
+ <DisableWER>1</DisableWER>
169
+ </component>
170
+ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
171
+ <DisableAccelerators>true</DisableAccelerators>
172
+ <DisableFirstRunWizard>true</DisableFirstRunWizard>
173
+ <Home_Page>https://google.com</Home_Page>
174
+ <Help_Page>about:blank</Help_Page>
175
+ </component>
176
+ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
177
+ <DisableAccelerators>true</DisableAccelerators>
178
+ <DisableFirstRunWizard>true</DisableFirstRunWizard>
179
+ <Home_Page>https://google.com</Home_Page>
180
+ <Help_Page>about:blank</Help_Page>
181
+ </component>
182
+ <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
183
+ <CEIPEnabled>0</CEIPEnabled>
184
+ </component>
185
+ <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
186
+ <DisableSR>1</DisableSR>
187
+ </component>
188
+ <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
189
+ <InputLocale>0409:00000409</InputLocale>
190
+ <SystemLocale>en-US</SystemLocale>
191
+ <UILanguage>en-US</UILanguage>
192
+ <UILanguageFallback>en-US</UILanguageFallback>
193
+ <UserLocale>en-US</UserLocale>
194
+ </component>
195
+ <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
196
+ <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon>
197
+ </component>
198
+ <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
199
+ <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon>
200
+ </component>
201
+ <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
202
+ <fDenyTSConnections>false</fDenyTSConnections>
203
+ </component>
204
+ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
205
+ <UserAuthentication>0</UserAuthentication>
206
+ </component>
207
+ <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
208
+ <FirewallGroups>
209
+ <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop">
210
+ <Active>true</Active>
211
+ <Group>Remote Desktop</Group>
212
+ <Profile>all</Profile>
213
+ </FirewallGroup>
214
+ </FirewallGroups>
215
+ </component>
216
+ </settings>
217
+ <settings pass="oobeSystem">
218
+ <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
219
+ <PreventDeviceEncryption>true</PreventDeviceEncryption>
220
+ </component>
221
+ <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
222
+ <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled>
223
+ </component>
224
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
225
+ <UserAccounts>
226
+ <LocalAccounts>
227
+ <LocalAccount wcm:action="add">
228
+ <Name>Docker</Name>
229
+ <Group>Administrators</Group>
230
+ <Password>
231
+ <Value />
232
+ <PlainText>true</PlainText>
233
+ </Password>
234
+ </LocalAccount>
235
+ </LocalAccounts>
236
+ <AdministratorPassword>
237
+ <Value>password</Value>
238
+ <PlainText>true</PlainText>
239
+ </AdministratorPassword>
240
+ </UserAccounts>
241
+ <AutoLogon>
242
+ <Username>Docker</Username>
243
+ <Enabled>true</Enabled>
244
+ <LogonCount>65432</LogonCount>
245
+ <Password>
246
+ <Value />
247
+ <PlainText>true</PlainText>
248
+ </Password>
249
+ </AutoLogon>
250
+ <OOBE>
251
+ <HideEULAPage>true</HideEULAPage>
252
+ <HideLocalAccountScreen>true</HideLocalAccountScreen>
253
+ <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
254
+ <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
255
+ <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
256
+ <NetworkLocation>Other</NetworkLocation>
257
+ <ProtectYourPC>3</ProtectYourPC>
258
+ <SkipUserOOBE>true</SkipUserOOBE>
259
+ <SkipMachineOOBE>true</SkipMachineOOBE>
260
+ </OOBE>
261
+ <RegisteredOrganization>Dockur</RegisteredOrganization>
262
+ <RegisteredOwner>Windows for Docker</RegisteredOwner>
263
+ <FirstLogonCommands>
264
+ <SynchronousCommand wcm:action="add">
265
+ <Order>1</Order>
266
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine>
267
+ <Description>Allow guest access to network shares</Description>
268
+ </SynchronousCommand>
269
+ <SynchronousCommand wcm:action="add">
270
+ <Order>2</Order>
271
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine>
272
+ <Description>Allow RDP login with blank password</Description>
273
+ </SynchronousCommand>
274
+ <SynchronousCommand wcm:action="add">
275
+ <Order>3</Order>
276
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine>
277
+ <Description>Enable option for passwordless sign-in</Description>
278
+ </SynchronousCommand>
279
+ <SynchronousCommand wcm:action="add">
280
+ <Order>4</Order>
281
+ <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine>
282
+ <Description>Password Never Expires</Description>
283
+ </SynchronousCommand>
284
+ <SynchronousCommand wcm:action="add">
285
+ <Order>5</Order>
286
+ <CommandLine>cmd /C POWERCFG -H OFF</CommandLine>
287
+ <Description>Disable Hibernation</Description>
288
+ </SynchronousCommand>
289
+ <SynchronousCommand wcm:action="add">
290
+ <Order>6</Order>
291
+ <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine>
292
+ <Description>Disable monitor blanking</Description>
293
+ </SynchronousCommand>
294
+ <SynchronousCommand wcm:action="add">
295
+ <Order>7</Order>
296
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine>
297
+ <Description>Disable Network Discovery popup</Description>
298
+ </SynchronousCommand>
299
+ <SynchronousCommand wcm:action="add">
300
+ <Order>8</Order>
301
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine>
302
+ <Description>Disable Network Discovery popup</Description>
303
+ </SynchronousCommand>
304
+ <SynchronousCommand wcm:action="add">
305
+ <Order>9</Order>
306
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine>
307
+ <Description>Disable first-run experience in Edge</Description>
308
+ </SynchronousCommand>
309
+ <SynchronousCommand wcm:action="add">
310
+ <Order>10</Order>
311
+ <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine>
312
+ <Description>Show file extensions in Explorer</Description>
313
+ </SynchronousCommand>
314
+ <SynchronousCommand wcm:action="add">
315
+ <Order>11</Order>
316
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine>
317
+ <Description>Zero Hibernation File</Description>
318
+ </SynchronousCommand>
319
+ <SynchronousCommand wcm:action="add">
320
+ <Order>12</Order>
321
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine>
322
+ <Description>Disable Hibernation Mode</Description>
323
+ </SynchronousCommand>
324
+ </FirstLogonCommands>
325
+ </component>
326
+ </settings>
327
+ </unattend>
assets/win2019-eval.xml ADDED
@@ -0,0 +1,331 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
3
+ <settings pass="windowsPE">
4
+ <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
5
+ <SetupUILanguage>
6
+ <UILanguage>en-US</UILanguage>
7
+ </SetupUILanguage>
8
+ <InputLocale>0409:00000409</InputLocale>
9
+ <SystemLocale>en-US</SystemLocale>
10
+ <UILanguage>en-US</UILanguage>
11
+ <UILanguageFallback>en-US</UILanguageFallback>
12
+ <UserLocale>en-US</UserLocale>
13
+ </component>
14
+ <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
15
+ <DiskConfiguration>
16
+ <Disk wcm:action="add">
17
+ <DiskID>0</DiskID>
18
+ <WillWipeDisk>true</WillWipeDisk>
19
+ <CreatePartitions>
20
+ <!-- System partition (ESP) -->
21
+ <CreatePartition wcm:action="add">
22
+ <Order>1</Order>
23
+ <Type>EFI</Type>
24
+ <Size>128</Size>
25
+ </CreatePartition>
26
+ <!-- Microsoft reserved partition (MSR) -->
27
+ <CreatePartition wcm:action="add">
28
+ <Order>2</Order>
29
+ <Type>MSR</Type>
30
+ <Size>128</Size>
31
+ </CreatePartition>
32
+ <!-- Windows partition -->
33
+ <CreatePartition wcm:action="add">
34
+ <Order>3</Order>
35
+ <Type>Primary</Type>
36
+ <Extend>true</Extend>
37
+ </CreatePartition>
38
+ </CreatePartitions>
39
+ <ModifyPartitions>
40
+ <!-- System partition (ESP) -->
41
+ <ModifyPartition wcm:action="add">
42
+ <Order>1</Order>
43
+ <PartitionID>1</PartitionID>
44
+ <Label>System</Label>
45
+ <Format>FAT32</Format>
46
+ </ModifyPartition>
47
+ <!-- MSR partition does not need to be modified -->
48
+ <ModifyPartition wcm:action="add">
49
+ <Order>2</Order>
50
+ <PartitionID>2</PartitionID>
51
+ </ModifyPartition>
52
+ <!-- Windows partition -->
53
+ <ModifyPartition wcm:action="add">
54
+ <Order>3</Order>
55
+ <PartitionID>3</PartitionID>
56
+ <Label>Windows</Label>
57
+ <Letter>C</Letter>
58
+ <Format>NTFS</Format>
59
+ </ModifyPartition>
60
+ </ModifyPartitions>
61
+ </Disk>
62
+ </DiskConfiguration>
63
+ <ImageInstall>
64
+ <OSImage>
65
+ <InstallFrom>
66
+ <MetaData wcm:action="add">
67
+ <Key>/IMAGE/NAME</Key>
68
+ <Value>Windows Server 2019 SERVERSTANDARD</Value>
69
+ </MetaData>
70
+ </InstallFrom>
71
+ <InstallTo>
72
+ <DiskID>0</DiskID>
73
+ <PartitionID>3</PartitionID>
74
+ </InstallTo>
75
+ <WillShowUI>OnError</WillShowUI>
76
+ <InstallToAvailablePartition>false</InstallToAvailablePartition>
77
+ </OSImage>
78
+ </ImageInstall>
79
+ <DynamicUpdate>
80
+ <Enable>true</Enable>
81
+ <WillShowUI>Never</WillShowUI>
82
+ </DynamicUpdate>
83
+ <UpgradeData>
84
+ <Upgrade>false</Upgrade>
85
+ <WillShowUI>Never</WillShowUI>
86
+ </UpgradeData>
87
+ <UserData>
88
+ <AcceptEula>true</AcceptEula>
89
+ <FullName>Docker</FullName>
90
+ <Organization>Windows for Docker</Organization>
91
+ <ProductKey />
92
+ </UserData>
93
+ <EnableFirewall>false</EnableFirewall>
94
+ <Diagnostics>
95
+ <OptIn>false</OptIn>
96
+ </Diagnostics>
97
+ </component>
98
+ <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
99
+ <DriverPaths>
100
+ <PathAndCredentials wcm:action="add" wcm:keyValue="1">
101
+ <Path>D:\viostor\2k19\amd64</Path>
102
+ </PathAndCredentials>
103
+ <PathAndCredentials wcm:action="add" wcm:keyValue="2">
104
+ <Path>D:\NetKVM\2k19\amd64</Path>
105
+ </PathAndCredentials>
106
+ <PathAndCredentials wcm:action="add" wcm:keyValue="3">
107
+ <Path>D:\Balloon\2k19\amd64</Path>
108
+ </PathAndCredentials>
109
+ <PathAndCredentials wcm:action="add" wcm:keyValue="4">
110
+ <Path>D:\pvpanic\2k19\amd64</Path>
111
+ </PathAndCredentials>
112
+ <PathAndCredentials wcm:action="add" wcm:keyValue="5">
113
+ <Path>D:\qemupciserial\2k19\amd64</Path>
114
+ </PathAndCredentials>
115
+ <PathAndCredentials wcm:action="add" wcm:keyValue="6">
116
+ <Path>D:\qxldod\2k19\amd64</Path>
117
+ </PathAndCredentials>
118
+ <PathAndCredentials wcm:action="add" wcm:keyValue="7">
119
+ <Path>D:\vioinput\2k19\amd64</Path>
120
+ </PathAndCredentials>
121
+ <PathAndCredentials wcm:action="add" wcm:keyValue="8">
122
+ <Path>D:\viorng\2k19\amd64</Path>
123
+ </PathAndCredentials>
124
+ <PathAndCredentials wcm:action="add" wcm:keyValue="9">
125
+ <Path>D:\vioscsi\2k19\amd64</Path>
126
+ </PathAndCredentials>
127
+ <PathAndCredentials wcm:action="add" wcm:keyValue="10">
128
+ <Path>D:\vioserial\2k19\amd64</Path>
129
+ </PathAndCredentials>
130
+ <PathAndCredentials wcm:action="add" wcm:keyValue="11">
131
+ <Path>D:\viogpudo\2k19\amd64</Path>
132
+ </PathAndCredentials>
133
+ <PathAndCredentials wcm:action="add" wcm:keyValue="12">
134
+ <Path>D:\sriov\2k19\amd64</Path>
135
+ </PathAndCredentials>
136
+ <PathAndCredentials wcm:action="add" wcm:keyValue="13">
137
+ <Path>D:\viofs\2k19\amd64</Path>
138
+ </PathAndCredentials>
139
+ </DriverPaths>
140
+ </component>
141
+ </settings>
142
+ <settings pass="offlineServicing">
143
+ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
144
+ <EnableLUA>false</EnableLUA>
145
+ </component>
146
+ </settings>
147
+ <settings pass="generalize">
148
+ <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
149
+ <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
150
+ </component>
151
+ <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
152
+ <SkipRearm>1</SkipRearm>
153
+ </component>
154
+ </settings>
155
+ <settings pass="specialize">
156
+ <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
157
+ <SkipAutoActivation>true</SkipAutoActivation>
158
+ </component>
159
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
160
+ <ComputerName>*</ComputerName>
161
+ <OEMInformation>
162
+ <Manufacturer>Dockur</Manufacturer>
163
+ <Model>Windows for Docker</Model>
164
+ <SupportHours>24/7</SupportHours>
165
+ <SupportPhone />
166
+ <SupportProvider>Dockur</SupportProvider>
167
+ <SupportURL>https://github.com/dockur/windows/issues</SupportURL>
168
+ </OEMInformation>
169
+ <OEMName>Windows for Docker</OEMName>
170
+ </component>
171
+ <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
172
+ <DisableWER>1</DisableWER>
173
+ </component>
174
+ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
175
+ <DisableAccelerators>true</DisableAccelerators>
176
+ <DisableFirstRunWizard>true</DisableFirstRunWizard>
177
+ <Home_Page>https://google.com</Home_Page>
178
+ <Help_Page>about:blank</Help_Page>
179
+ </component>
180
+ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
181
+ <DisableAccelerators>true</DisableAccelerators>
182
+ <DisableFirstRunWizard>true</DisableFirstRunWizard>
183
+ <Home_Page>https://google.com</Home_Page>
184
+ <Help_Page>about:blank</Help_Page>
185
+ </component>
186
+ <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
187
+ <CEIPEnabled>0</CEIPEnabled>
188
+ </component>
189
+ <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
190
+ <DisableSR>1</DisableSR>
191
+ </component>
192
+ <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
193
+ <InputLocale>0409:00000409</InputLocale>
194
+ <SystemLocale>en-US</SystemLocale>
195
+ <UILanguage>en-US</UILanguage>
196
+ <UILanguageFallback>en-US</UILanguageFallback>
197
+ <UserLocale>en-US</UserLocale>
198
+ </component>
199
+ <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
200
+ <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon>
201
+ </component>
202
+ <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
203
+ <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon>
204
+ </component>
205
+ <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
206
+ <fDenyTSConnections>false</fDenyTSConnections>
207
+ </component>
208
+ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
209
+ <UserAuthentication>0</UserAuthentication>
210
+ </component>
211
+ <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
212
+ <FirewallGroups>
213
+ <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop">
214
+ <Active>true</Active>
215
+ <Group>Remote Desktop</Group>
216
+ <Profile>all</Profile>
217
+ </FirewallGroup>
218
+ </FirewallGroups>
219
+ </component>
220
+ </settings>
221
+ <settings pass="oobeSystem">
222
+ <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
223
+ <PreventDeviceEncryption>true</PreventDeviceEncryption>
224
+ </component>
225
+ <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
226
+ <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled>
227
+ </component>
228
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
229
+ <UserAccounts>
230
+ <LocalAccounts>
231
+ <LocalAccount wcm:action="add">
232
+ <Name>Docker</Name>
233
+ <Group>Administrators</Group>
234
+ <Password>
235
+ <Value />
236
+ <PlainText>true</PlainText>
237
+ </Password>
238
+ </LocalAccount>
239
+ </LocalAccounts>
240
+ <AdministratorPassword>
241
+ <Value>password</Value>
242
+ <PlainText>true</PlainText>
243
+ </AdministratorPassword>
244
+ </UserAccounts>
245
+ <AutoLogon>
246
+ <Username>Docker</Username>
247
+ <Enabled>true</Enabled>
248
+ <LogonCount>65432</LogonCount>
249
+ <Password>
250
+ <Value />
251
+ <PlainText>true</PlainText>
252
+ </Password>
253
+ </AutoLogon>
254
+ <OOBE>
255
+ <HideEULAPage>true</HideEULAPage>
256
+ <HideLocalAccountScreen>true</HideLocalAccountScreen>
257
+ <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
258
+ <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
259
+ <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
260
+ <NetworkLocation>Other</NetworkLocation>
261
+ <ProtectYourPC>3</ProtectYourPC>
262
+ <SkipUserOOBE>true</SkipUserOOBE>
263
+ <SkipMachineOOBE>true</SkipMachineOOBE>
264
+ </OOBE>
265
+ <RegisteredOrganization>Dockur</RegisteredOrganization>
266
+ <RegisteredOwner>Windows for Docker</RegisteredOwner>
267
+ <FirstLogonCommands>
268
+ <SynchronousCommand wcm:action="add">
269
+ <Order>1</Order>
270
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine>
271
+ <Description>Allow guest access to network shares</Description>
272
+ </SynchronousCommand>
273
+ <SynchronousCommand wcm:action="add">
274
+ <Order>2</Order>
275
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine>
276
+ <Description>Allow RDP login with blank password</Description>
277
+ </SynchronousCommand>
278
+ <SynchronousCommand wcm:action="add">
279
+ <Order>3</Order>
280
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine>
281
+ <Description>Enable option for passwordless sign-in</Description>
282
+ </SynchronousCommand>
283
+ <SynchronousCommand wcm:action="add">
284
+ <Order>4</Order>
285
+ <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine>
286
+ <Description>Password Never Expires</Description>
287
+ </SynchronousCommand>
288
+ <SynchronousCommand wcm:action="add">
289
+ <Order>5</Order>
290
+ <CommandLine>cmd /C POWERCFG -H OFF</CommandLine>
291
+ <Description>Disable Hibernation</Description>
292
+ </SynchronousCommand>
293
+ <SynchronousCommand wcm:action="add">
294
+ <Order>6</Order>
295
+ <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine>
296
+ <Description>Disable monitor blanking</Description>
297
+ </SynchronousCommand>
298
+ <SynchronousCommand wcm:action="add">
299
+ <Order>7</Order>
300
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine>
301
+ <Description>Disable Network Discovery popup</Description>
302
+ </SynchronousCommand>
303
+ <SynchronousCommand wcm:action="add">
304
+ <Order>8</Order>
305
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine>
306
+ <Description>Disable Network Discovery popup</Description>
307
+ </SynchronousCommand>
308
+ <SynchronousCommand wcm:action="add">
309
+ <Order>9</Order>
310
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine>
311
+ <Description>Disable first-run experience in Edge</Description>
312
+ </SynchronousCommand>
313
+ <SynchronousCommand wcm:action="add">
314
+ <Order>10</Order>
315
+ <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine>
316
+ <Description>Show file extensions in Explorer</Description>
317
+ </SynchronousCommand>
318
+ <SynchronousCommand wcm:action="add">
319
+ <Order>11</Order>
320
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine>
321
+ <Description>Zero Hibernation File</Description>
322
+ </SynchronousCommand>
323
+ <SynchronousCommand wcm:action="add">
324
+ <Order>12</Order>
325
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine>
326
+ <Description>Disable Hibernation Mode</Description>
327
+ </SynchronousCommand>
328
+ </FirstLogonCommands>
329
+ </component>
330
+ </settings>
331
+ </unattend>
assets/win2022-eval.xml ADDED
@@ -0,0 +1,331 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
3
+ <settings pass="windowsPE">
4
+ <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
5
+ <SetupUILanguage>
6
+ <UILanguage>en-US</UILanguage>
7
+ </SetupUILanguage>
8
+ <InputLocale>0409:00000409</InputLocale>
9
+ <SystemLocale>en-US</SystemLocale>
10
+ <UILanguage>en-US</UILanguage>
11
+ <UILanguageFallback>en-US</UILanguageFallback>
12
+ <UserLocale>en-US</UserLocale>
13
+ </component>
14
+ <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
15
+ <DiskConfiguration>
16
+ <Disk wcm:action="add">
17
+ <DiskID>0</DiskID>
18
+ <WillWipeDisk>true</WillWipeDisk>
19
+ <CreatePartitions>
20
+ <!-- System partition (ESP) -->
21
+ <CreatePartition wcm:action="add">
22
+ <Order>1</Order>
23
+ <Type>EFI</Type>
24
+ <Size>128</Size>
25
+ </CreatePartition>
26
+ <!-- Microsoft reserved partition (MSR) -->
27
+ <CreatePartition wcm:action="add">
28
+ <Order>2</Order>
29
+ <Type>MSR</Type>
30
+ <Size>128</Size>
31
+ </CreatePartition>
32
+ <!-- Windows partition -->
33
+ <CreatePartition wcm:action="add">
34
+ <Order>3</Order>
35
+ <Type>Primary</Type>
36
+ <Extend>true</Extend>
37
+ </CreatePartition>
38
+ </CreatePartitions>
39
+ <ModifyPartitions>
40
+ <!-- System partition (ESP) -->
41
+ <ModifyPartition wcm:action="add">
42
+ <Order>1</Order>
43
+ <PartitionID>1</PartitionID>
44
+ <Label>System</Label>
45
+ <Format>FAT32</Format>
46
+ </ModifyPartition>
47
+ <!-- MSR partition does not need to be modified -->
48
+ <ModifyPartition wcm:action="add">
49
+ <Order>2</Order>
50
+ <PartitionID>2</PartitionID>
51
+ </ModifyPartition>
52
+ <!-- Windows partition -->
53
+ <ModifyPartition wcm:action="add">
54
+ <Order>3</Order>
55
+ <PartitionID>3</PartitionID>
56
+ <Label>Windows</Label>
57
+ <Letter>C</Letter>
58
+ <Format>NTFS</Format>
59
+ </ModifyPartition>
60
+ </ModifyPartitions>
61
+ </Disk>
62
+ </DiskConfiguration>
63
+ <ImageInstall>
64
+ <OSImage>
65
+ <InstallFrom>
66
+ <MetaData wcm:action="add">
67
+ <Key>/IMAGE/NAME</Key>
68
+ <Value>Windows Server 2022 SERVERSTANDARD</Value>
69
+ </MetaData>
70
+ </InstallFrom>
71
+ <InstallTo>
72
+ <DiskID>0</DiskID>
73
+ <PartitionID>3</PartitionID>
74
+ </InstallTo>
75
+ <WillShowUI>OnError</WillShowUI>
76
+ <InstallToAvailablePartition>false</InstallToAvailablePartition>
77
+ </OSImage>
78
+ </ImageInstall>
79
+ <DynamicUpdate>
80
+ <Enable>true</Enable>
81
+ <WillShowUI>Never</WillShowUI>
82
+ </DynamicUpdate>
83
+ <UpgradeData>
84
+ <Upgrade>false</Upgrade>
85
+ <WillShowUI>Never</WillShowUI>
86
+ </UpgradeData>
87
+ <UserData>
88
+ <AcceptEula>true</AcceptEula>
89
+ <FullName>Docker</FullName>
90
+ <Organization>Windows for Docker</Organization>
91
+ <ProductKey />
92
+ </UserData>
93
+ <EnableFirewall>false</EnableFirewall>
94
+ <Diagnostics>
95
+ <OptIn>false</OptIn>
96
+ </Diagnostics>
97
+ </component>
98
+ <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
99
+ <DriverPaths>
100
+ <PathAndCredentials wcm:action="add" wcm:keyValue="1">
101
+ <Path>D:\viostor\2k22\amd64</Path>
102
+ </PathAndCredentials>
103
+ <PathAndCredentials wcm:action="add" wcm:keyValue="2">
104
+ <Path>D:\NetKVM\2k22\amd64</Path>
105
+ </PathAndCredentials>
106
+ <PathAndCredentials wcm:action="add" wcm:keyValue="3">
107
+ <Path>D:\Balloon\2k22\amd64</Path>
108
+ </PathAndCredentials>
109
+ <PathAndCredentials wcm:action="add" wcm:keyValue="4">
110
+ <Path>D:\pvpanic\2k22\amd64</Path>
111
+ </PathAndCredentials>
112
+ <PathAndCredentials wcm:action="add" wcm:keyValue="5">
113
+ <Path>D:\qemupciserial\2k22\amd64</Path>
114
+ </PathAndCredentials>
115
+ <PathAndCredentials wcm:action="add" wcm:keyValue="6">
116
+ <Path>D:\qxldod\2k22\amd64</Path>
117
+ </PathAndCredentials>
118
+ <PathAndCredentials wcm:action="add" wcm:keyValue="7">
119
+ <Path>D:\vioinput\2k22\amd64</Path>
120
+ </PathAndCredentials>
121
+ <PathAndCredentials wcm:action="add" wcm:keyValue="8">
122
+ <Path>D:\viorng\2k22\amd64</Path>
123
+ </PathAndCredentials>
124
+ <PathAndCredentials wcm:action="add" wcm:keyValue="9">
125
+ <Path>D:\vioscsi\2k22\amd64</Path>
126
+ </PathAndCredentials>
127
+ <PathAndCredentials wcm:action="add" wcm:keyValue="10">
128
+ <Path>D:\vioserial\2k22\amd64</Path>
129
+ </PathAndCredentials>
130
+ <PathAndCredentials wcm:action="add" wcm:keyValue="11">
131
+ <Path>D:\viogpudo\2k22\amd64</Path>
132
+ </PathAndCredentials>
133
+ <PathAndCredentials wcm:action="add" wcm:keyValue="12">
134
+ <Path>D:\sriov\2k22\amd64</Path>
135
+ </PathAndCredentials>
136
+ <PathAndCredentials wcm:action="add" wcm:keyValue="13">
137
+ <Path>D:\viofs\2k22\amd64</Path>
138
+ </PathAndCredentials>
139
+ </DriverPaths>
140
+ </component>
141
+ </settings>
142
+ <settings pass="offlineServicing">
143
+ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
144
+ <EnableLUA>false</EnableLUA>
145
+ </component>
146
+ </settings>
147
+ <settings pass="generalize">
148
+ <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
149
+ <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
150
+ </component>
151
+ <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
152
+ <SkipRearm>1</SkipRearm>
153
+ </component>
154
+ </settings>
155
+ <settings pass="specialize">
156
+ <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
157
+ <SkipAutoActivation>true</SkipAutoActivation>
158
+ </component>
159
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
160
+ <ComputerName>*</ComputerName>
161
+ <OEMInformation>
162
+ <Manufacturer>Dockur</Manufacturer>
163
+ <Model>Windows for Docker</Model>
164
+ <SupportHours>24/7</SupportHours>
165
+ <SupportPhone />
166
+ <SupportProvider>Dockur</SupportProvider>
167
+ <SupportURL>https://github.com/dockur/windows/issues</SupportURL>
168
+ </OEMInformation>
169
+ <OEMName>Windows for Docker</OEMName>
170
+ </component>
171
+ <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
172
+ <DisableWER>1</DisableWER>
173
+ </component>
174
+ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
175
+ <DisableAccelerators>true</DisableAccelerators>
176
+ <DisableFirstRunWizard>true</DisableFirstRunWizard>
177
+ <Home_Page>https://google.com</Home_Page>
178
+ <Help_Page>about:blank</Help_Page>
179
+ </component>
180
+ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
181
+ <DisableAccelerators>true</DisableAccelerators>
182
+ <DisableFirstRunWizard>true</DisableFirstRunWizard>
183
+ <Home_Page>https://google.com</Home_Page>
184
+ <Help_Page>about:blank</Help_Page>
185
+ </component>
186
+ <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
187
+ <CEIPEnabled>0</CEIPEnabled>
188
+ </component>
189
+ <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
190
+ <DisableSR>1</DisableSR>
191
+ </component>
192
+ <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
193
+ <InputLocale>0409:00000409</InputLocale>
194
+ <SystemLocale>en-US</SystemLocale>
195
+ <UILanguage>en-US</UILanguage>
196
+ <UILanguageFallback>en-US</UILanguageFallback>
197
+ <UserLocale>en-US</UserLocale>
198
+ </component>
199
+ <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
200
+ <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon>
201
+ </component>
202
+ <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
203
+ <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon>
204
+ </component>
205
+ <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
206
+ <fDenyTSConnections>false</fDenyTSConnections>
207
+ </component>
208
+ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
209
+ <UserAuthentication>0</UserAuthentication>
210
+ </component>
211
+ <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
212
+ <FirewallGroups>
213
+ <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop">
214
+ <Active>true</Active>
215
+ <Group>Remote Desktop</Group>
216
+ <Profile>all</Profile>
217
+ </FirewallGroup>
218
+ </FirewallGroups>
219
+ </component>
220
+ </settings>
221
+ <settings pass="oobeSystem">
222
+ <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
223
+ <PreventDeviceEncryption>true</PreventDeviceEncryption>
224
+ </component>
225
+ <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
226
+ <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled>
227
+ </component>
228
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
229
+ <UserAccounts>
230
+ <LocalAccounts>
231
+ <LocalAccount wcm:action="add">
232
+ <Name>Docker</Name>
233
+ <Group>Administrators</Group>
234
+ <Password>
235
+ <Value />
236
+ <PlainText>true</PlainText>
237
+ </Password>
238
+ </LocalAccount>
239
+ </LocalAccounts>
240
+ <AdministratorPassword>
241
+ <Value>password</Value>
242
+ <PlainText>true</PlainText>
243
+ </AdministratorPassword>
244
+ </UserAccounts>
245
+ <AutoLogon>
246
+ <Username>Docker</Username>
247
+ <Enabled>true</Enabled>
248
+ <LogonCount>65432</LogonCount>
249
+ <Password>
250
+ <Value />
251
+ <PlainText>true</PlainText>
252
+ </Password>
253
+ </AutoLogon>
254
+ <OOBE>
255
+ <HideEULAPage>true</HideEULAPage>
256
+ <HideLocalAccountScreen>true</HideLocalAccountScreen>
257
+ <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
258
+ <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
259
+ <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
260
+ <NetworkLocation>Other</NetworkLocation>
261
+ <ProtectYourPC>3</ProtectYourPC>
262
+ <SkipUserOOBE>true</SkipUserOOBE>
263
+ <SkipMachineOOBE>true</SkipMachineOOBE>
264
+ </OOBE>
265
+ <RegisteredOrganization>Dockur</RegisteredOrganization>
266
+ <RegisteredOwner>Windows for Docker</RegisteredOwner>
267
+ <FirstLogonCommands>
268
+ <SynchronousCommand wcm:action="add">
269
+ <Order>1</Order>
270
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine>
271
+ <Description>Allow guest access to network shares</Description>
272
+ </SynchronousCommand>
273
+ <SynchronousCommand wcm:action="add">
274
+ <Order>2</Order>
275
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine>
276
+ <Description>Allow RDP login with blank password</Description>
277
+ </SynchronousCommand>
278
+ <SynchronousCommand wcm:action="add">
279
+ <Order>3</Order>
280
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine>
281
+ <Description>Enable option for passwordless sign-in</Description>
282
+ </SynchronousCommand>
283
+ <SynchronousCommand wcm:action="add">
284
+ <Order>4</Order>
285
+ <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine>
286
+ <Description>Password Never Expires</Description>
287
+ </SynchronousCommand>
288
+ <SynchronousCommand wcm:action="add">
289
+ <Order>5</Order>
290
+ <CommandLine>cmd /C POWERCFG -H OFF</CommandLine>
291
+ <Description>Disable Hibernation</Description>
292
+ </SynchronousCommand>
293
+ <SynchronousCommand wcm:action="add">
294
+ <Order>6</Order>
295
+ <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine>
296
+ <Description>Disable monitor blanking</Description>
297
+ </SynchronousCommand>
298
+ <SynchronousCommand wcm:action="add">
299
+ <Order>7</Order>
300
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine>
301
+ <Description>Disable Network Discovery popup</Description>
302
+ </SynchronousCommand>
303
+ <SynchronousCommand wcm:action="add">
304
+ <Order>8</Order>
305
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine>
306
+ <Description>Disable Network Discovery popup</Description>
307
+ </SynchronousCommand>
308
+ <SynchronousCommand wcm:action="add">
309
+ <Order>9</Order>
310
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine>
311
+ <Description>Disable first-run experience in Edge</Description>
312
+ </SynchronousCommand>
313
+ <SynchronousCommand wcm:action="add">
314
+ <Order>10</Order>
315
+ <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine>
316
+ <Description>Show file extensions in Explorer</Description>
317
+ </SynchronousCommand>
318
+ <SynchronousCommand wcm:action="add">
319
+ <Order>11</Order>
320
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine>
321
+ <Description>Zero Hibernation File</Description>
322
+ </SynchronousCommand>
323
+ <SynchronousCommand wcm:action="add">
324
+ <Order>12</Order>
325
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine>
326
+ <Description>Disable Hibernation Mode</Description>
327
+ </SynchronousCommand>
328
+ </FirstLogonCommands>
329
+ </component>
330
+ </settings>
331
+ </unattend>
assets/win7x64.xml ADDED
@@ -0,0 +1,291 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
3
+ <settings pass="windowsPE">
4
+ <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
5
+ <SetupUILanguage>
6
+ <UILanguage>en-US</UILanguage>
7
+ </SetupUILanguage>
8
+ <InputLocale>0409:00000409</InputLocale>
9
+ <SystemLocale>en-US</SystemLocale>
10
+ <UILanguage>en-US</UILanguage>
11
+ <UserLocale>en-US</UserLocale>
12
+ </component>
13
+ <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
14
+ <DiskConfiguration>
15
+ <WillShowUI>OnError</WillShowUI>
16
+ <Disk wcm:action="add">
17
+ <DiskID>0</DiskID>
18
+ <WillWipeDisk>true</WillWipeDisk>
19
+ <CreatePartitions>
20
+ <CreatePartition wcm:action="add">
21
+ <Order>1</Order>
22
+ <Type>Primary</Type>
23
+ <Size>100</Size>
24
+ </CreatePartition>
25
+ <CreatePartition wcm:action="add">
26
+ <Order>2</Order>
27
+ <Type>Primary</Type>
28
+ <Extend>true</Extend>
29
+ </CreatePartition>
30
+ </CreatePartitions>
31
+ <ModifyPartitions>
32
+ <ModifyPartition wcm:action="add">
33
+ <Format>NTFS</Format>
34
+ <Label>System Reserved</Label>
35
+ <Order>1</Order>
36
+ <Active>true</Active>
37
+ <PartitionID>1</PartitionID>
38
+ <TypeID>0x27</TypeID>
39
+ </ModifyPartition>
40
+ <ModifyPartition wcm:action="add">
41
+ <Active>true</Active>
42
+ <Format>NTFS</Format>
43
+ <Label>Windows</Label>
44
+ <Letter>C</Letter>
45
+ <Order>2</Order>
46
+ <PartitionID>2</PartitionID>
47
+ </ModifyPartition>
48
+ </ModifyPartitions>
49
+ </Disk>
50
+ </DiskConfiguration>
51
+ <ImageInstall>
52
+ <OSImage>
53
+ <InstallFrom>
54
+ <MetaData wcm:action="add">
55
+ <Value>1</Value>
56
+ <Key>/IMAGE/INDEX</Key>
57
+ </MetaData>
58
+ </InstallFrom>
59
+ <InstallTo>
60
+ <DiskID>0</DiskID>
61
+ <PartitionID>2</PartitionID>
62
+ </InstallTo>
63
+ <InstallToAvailablePartition>false</InstallToAvailablePartition>
64
+ </OSImage>
65
+ </ImageInstall>
66
+ <DynamicUpdate>
67
+ <Enable>true</Enable>
68
+ <WillShowUI>Never</WillShowUI>
69
+ </DynamicUpdate>
70
+ <UpgradeData>
71
+ <Upgrade>false</Upgrade>
72
+ <WillShowUI>Never</WillShowUI>
73
+ </UpgradeData>
74
+ <UserData>
75
+ <AcceptEula>true</AcceptEula>
76
+ <FullName>Docker</FullName>
77
+ <Organization>Windows for Docker</Organization>
78
+ <ProductKey>
79
+ <Key>H7X92-3VPBB-Q799D-Y6JJ3-86WC6</Key>
80
+ <WillShowUI>OnError</WillShowUI>
81
+ </ProductKey>
82
+ </UserData>
83
+ <EnableFirewall>false</EnableFirewall>
84
+ <Diagnostics>
85
+ <OptIn>false</OptIn>
86
+ </Diagnostics>
87
+ </component>
88
+ <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
89
+ <DriverPaths>
90
+ <PathAndCredentials wcm:action="add" wcm:keyValue="1">
91
+ <Path>D:\viostor\w7\amd64</Path>
92
+ </PathAndCredentials>
93
+ <PathAndCredentials wcm:action="add" wcm:keyValue="2">
94
+ <Path>D:\NetKVM\w7\amd64</Path>
95
+ </PathAndCredentials>
96
+ <PathAndCredentials wcm:action="add" wcm:keyValue="3">
97
+ <Path>D:\Balloon\w7\amd64</Path>
98
+ </PathAndCredentials>
99
+ <PathAndCredentials wcm:action="add" wcm:keyValue="4">
100
+ <Path>D:\pvpanic\w7\amd64</Path>
101
+ </PathAndCredentials>
102
+ <PathAndCredentials wcm:action="add" wcm:keyValue="5">
103
+ <Path>D:\qemupciserial\w7\amd64</Path>
104
+ </PathAndCredentials>
105
+ <PathAndCredentials wcm:action="add" wcm:keyValue="6">
106
+ <Path>D:\qxldod\w8\amd64</Path>
107
+ </PathAndCredentials>
108
+ <PathAndCredentials wcm:action="add" wcm:keyValue="7">
109
+ <Path>D:\vioinput\w7\amd64</Path>
110
+ </PathAndCredentials>
111
+ <PathAndCredentials wcm:action="add" wcm:keyValue="8">
112
+ <Path>D:\viorng\w7\amd64</Path>
113
+ </PathAndCredentials>
114
+ <PathAndCredentials wcm:action="add" wcm:keyValue="9">
115
+ <Path>D:\vioscsi\w7\amd64</Path>
116
+ </PathAndCredentials>
117
+ <PathAndCredentials wcm:action="add" wcm:keyValue="10">
118
+ <Path>D:\vioserial\w7\amd64</Path>
119
+ </PathAndCredentials>
120
+ </DriverPaths>
121
+ </component>
122
+ </settings>
123
+ <settings pass="offlineServicing">
124
+ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
125
+ <EnableLUA>false</EnableLUA>
126
+ </component>
127
+ </settings>
128
+ <settings pass="generalize">
129
+ <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
130
+ <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
131
+ </component>
132
+ <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
133
+ <SkipRearm>1</SkipRearm>
134
+ </component>
135
+ </settings>
136
+ <settings pass="specialize">
137
+ <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
138
+ <SkipAutoActivation>true</SkipAutoActivation>
139
+ </component>
140
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
141
+ <ComputerName>*</ComputerName>
142
+ <OEMInformation>
143
+ <Manufacturer>Dockur</Manufacturer>
144
+ <Model>Windows for Docker</Model>
145
+ </OEMInformation>
146
+ </component>
147
+ <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
148
+ <DisableWER>1</DisableWER>
149
+ </component>
150
+ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
151
+ <DisableAccelerators>true</DisableAccelerators>
152
+ <DisableFirstRunWizard>true</DisableFirstRunWizard>
153
+ <Home_Page>https://google.com</Home_Page>
154
+ <Help_Page>about:blank</Help_Page>
155
+ </component>
156
+ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
157
+ <DisableAccelerators>true</DisableAccelerators>
158
+ <DisableFirstRunWizard>true</DisableFirstRunWizard>
159
+ <Home_Page>https://google.com</Home_Page>
160
+ <Help_Page>about:blank</Help_Page>
161
+ </component>
162
+ <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
163
+ <CEIPEnabled>0</CEIPEnabled>
164
+ </component>
165
+ <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
166
+ <DisableSR>1</DisableSR>
167
+ </component>
168
+ <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
169
+ <InputLocale>0409:00000409</InputLocale>
170
+ <SystemLocale>en-US</SystemLocale>
171
+ <UILanguage>en-US</UILanguage>
172
+ <UserLocale>en-US</UserLocale>
173
+ </component>
174
+ <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
175
+ <fDenyTSConnections>false</fDenyTSConnections>
176
+ </component>
177
+ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
178
+ <UserAuthentication>0</UserAuthentication>
179
+ </component>
180
+ <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
181
+ <FirewallGroups>
182
+ <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop">
183
+ <Active>true</Active>
184
+ <Group>Remote Desktop</Group>
185
+ <Profile>all</Profile>
186
+ </FirewallGroup>
187
+ </FirewallGroups>
188
+ </component>
189
+ </settings>
190
+ <settings pass="oobeSystem">
191
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
192
+ <UserAccounts>
193
+ <LocalAccounts>
194
+ <LocalAccount wcm:action="add">
195
+ <Name>Docker</Name>
196
+ <Group>Administrators</Group>
197
+ <Password>
198
+ <Value />
199
+ <PlainText>true</PlainText>
200
+ </Password>
201
+ </LocalAccount>
202
+ </LocalAccounts>
203
+ <AdministratorPassword>
204
+ <Value>password</Value>
205
+ <PlainText>true</PlainText>
206
+ </AdministratorPassword>
207
+ </UserAccounts>
208
+ <AutoLogon>
209
+ <Username>Docker</Username>
210
+ <Enabled>true</Enabled>
211
+ <LogonCount>65432</LogonCount>
212
+ <Password>
213
+ <Value />
214
+ <PlainText>true</PlainText>
215
+ </Password>
216
+ </AutoLogon>
217
+ <OOBE>
218
+ <HideEULAPage>true</HideEULAPage>
219
+ <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
220
+ <NetworkLocation>Other</NetworkLocation>
221
+ <ProtectYourPC>3</ProtectYourPC>
222
+ <SkipUserOOBE>true</SkipUserOOBE>
223
+ <SkipMachineOOBE>true</SkipMachineOOBE>
224
+ </OOBE>
225
+ <RegisteredOrganization>Dockur</RegisteredOrganization>
226
+ <RegisteredOwner>Windows for Docker</RegisteredOwner>
227
+ <FirstLogonCommands>
228
+ <SynchronousCommand wcm:action="add">
229
+ <Order>1</Order>
230
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine>
231
+ <Description>Allow guest access to network shares</Description>
232
+ </SynchronousCommand>
233
+ <SynchronousCommand wcm:action="add">
234
+ <Order>2</Order>
235
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine>
236
+ <Description>Allow RDP login with blank password</Description>
237
+ </SynchronousCommand>
238
+ <SynchronousCommand wcm:action="add">
239
+ <Order>3</Order>
240
+ <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine>
241
+ <Description>Password Never Expires</Description>
242
+ </SynchronousCommand>
243
+ <SynchronousCommand wcm:action="add">
244
+ <Order>4</Order>
245
+ <CommandLine>cmd /C POWERCFG -H OFF</CommandLine>
246
+ <Description>Disable Hibernation</Description>
247
+ </SynchronousCommand>
248
+ <SynchronousCommand wcm:action="add">
249
+ <Order>5</Order>
250
+ <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine>
251
+ <Description>Disable monitor blanking</Description>
252
+ </SynchronousCommand>
253
+ <SynchronousCommand wcm:action="add">
254
+ <Order>6</Order>
255
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine>
256
+ <Description>Disable Network Discovery popup</Description>
257
+ </SynchronousCommand>
258
+ <SynchronousCommand wcm:action="add">
259
+ <Order>7</Order>
260
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine>
261
+ <Description>Disable Network Discovery popup</Description>
262
+ </SynchronousCommand>
263
+ <SynchronousCommand wcm:action="add">
264
+ <Order>8</Order>
265
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine>
266
+ <Description>Disable Network Discovery popup</Description>
267
+ </SynchronousCommand>
268
+ <SynchronousCommand wcm:action="add">
269
+ <Order>9</Order>
270
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine>
271
+ <Description>Disable first-run experience in Edge</Description>
272
+ </SynchronousCommand>
273
+ <SynchronousCommand wcm:action="add">
274
+ <Order>10</Order>
275
+ <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine>
276
+ <Description>Show file extensions in Explorer</Description>
277
+ </SynchronousCommand>
278
+ <SynchronousCommand wcm:action="add">
279
+ <Order>11</Order>
280
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine>
281
+ <Description>Zero Hibernation File</Description>
282
+ </SynchronousCommand>
283
+ <SynchronousCommand wcm:action="add">
284
+ <Order>12</Order>
285
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine>
286
+ <Description>Disable Hibernation Mode</Description>
287
+ </SynchronousCommand>
288
+ </FirstLogonCommands>
289
+ </component>
290
+ </settings>
291
+ </unattend>
assets/win81x64.xml ADDED
@@ -0,0 +1,321 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
3
+ <settings pass="windowsPE">
4
+ <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
5
+ <SetupUILanguage>
6
+ <UILanguage>en-US</UILanguage>
7
+ </SetupUILanguage>
8
+ <InputLocale>0409:00000409</InputLocale>
9
+ <SystemLocale>en-US</SystemLocale>
10
+ <UILanguage>en-US</UILanguage>
11
+ <UserLocale>en-US</UserLocale>
12
+ </component>
13
+ <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
14
+ <DiskConfiguration>
15
+ <Disk wcm:action="add">
16
+ <DiskID>0</DiskID>
17
+ <WillWipeDisk>true</WillWipeDisk>
18
+ <CreatePartitions>
19
+ <!-- System partition (ESP) -->
20
+ <CreatePartition wcm:action="add">
21
+ <Order>1</Order>
22
+ <Type>EFI</Type>
23
+ <Size>128</Size>
24
+ </CreatePartition>
25
+ <!-- Microsoft reserved partition (MSR) -->
26
+ <CreatePartition wcm:action="add">
27
+ <Order>2</Order>
28
+ <Type>MSR</Type>
29
+ <Size>128</Size>
30
+ </CreatePartition>
31
+ <!-- Windows partition -->
32
+ <CreatePartition wcm:action="add">
33
+ <Order>3</Order>
34
+ <Type>Primary</Type>
35
+ <Extend>true</Extend>
36
+ </CreatePartition>
37
+ </CreatePartitions>
38
+ <ModifyPartitions>
39
+ <!-- System partition (ESP) -->
40
+ <ModifyPartition wcm:action="add">
41
+ <Order>1</Order>
42
+ <PartitionID>1</PartitionID>
43
+ <Label>System</Label>
44
+ <Format>FAT32</Format>
45
+ </ModifyPartition>
46
+ <!-- MSR partition does not need to be modified -->
47
+ <ModifyPartition wcm:action="add">
48
+ <Order>2</Order>
49
+ <PartitionID>2</PartitionID>
50
+ </ModifyPartition>
51
+ <!-- Windows partition -->
52
+ <ModifyPartition wcm:action="add">
53
+ <Order>3</Order>
54
+ <PartitionID>3</PartitionID>
55
+ <Label>Windows</Label>
56
+ <Letter>C</Letter>
57
+ <Format>NTFS</Format>
58
+ </ModifyPartition>
59
+ </ModifyPartitions>
60
+ </Disk>
61
+ </DiskConfiguration>
62
+ <ImageInstall>
63
+ <OSImage>
64
+ <InstallFrom>
65
+ <MetaData wcm:action="add">
66
+ <Value>Windows 8.1 Pro</Value>
67
+ <Key>/IMAGE/NAME</Key>
68
+ </MetaData>
69
+ </InstallFrom>
70
+ <InstallTo>
71
+ <DiskID>0</DiskID>
72
+ <PartitionID>3</PartitionID>
73
+ </InstallTo>
74
+ <InstallToAvailablePartition>false</InstallToAvailablePartition>
75
+ </OSImage>
76
+ </ImageInstall>
77
+ <DynamicUpdate>
78
+ <Enable>true</Enable>
79
+ <WillShowUI>Never</WillShowUI>
80
+ </DynamicUpdate>
81
+ <UpgradeData>
82
+ <Upgrade>false</Upgrade>
83
+ <WillShowUI>Never</WillShowUI>
84
+ </UpgradeData>
85
+ <UserData>
86
+ <AcceptEula>true</AcceptEula>
87
+ <FullName>Docker</FullName>
88
+ <Organization>Windows for Docker</Organization>
89
+ <ProductKey>
90
+ <Key>GCRJD-8NW9H-F2CDX-CCM8D-9D6T9</Key>
91
+ <WillShowUI>OnError</WillShowUI>
92
+ </ProductKey>
93
+ </UserData>
94
+ <EnableFirewall>false</EnableFirewall>
95
+ <Diagnostics>
96
+ <OptIn>false</OptIn>
97
+ </Diagnostics>
98
+ </component>
99
+ <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
100
+ <DriverPaths>
101
+ <PathAndCredentials wcm:action="add" wcm:keyValue="1">
102
+ <Path>D:\viostor\w10\amd64</Path>
103
+ </PathAndCredentials>
104
+ <PathAndCredentials wcm:action="add" wcm:keyValue="2">
105
+ <Path>D:\NetKVM\w10\amd64</Path>
106
+ </PathAndCredentials>
107
+ <PathAndCredentials wcm:action="add" wcm:keyValue="3">
108
+ <Path>D:\Balloon\w10\amd64</Path>
109
+ </PathAndCredentials>
110
+ <PathAndCredentials wcm:action="add" wcm:keyValue="4">
111
+ <Path>D:\pvpanic\w10\amd64</Path>
112
+ </PathAndCredentials>
113
+ <PathAndCredentials wcm:action="add" wcm:keyValue="5">
114
+ <Path>D:\qemupciserial\w10\amd64</Path>
115
+ </PathAndCredentials>
116
+ <PathAndCredentials wcm:action="add" wcm:keyValue="6">
117
+ <Path>D:\qxldod\w10\amd64</Path>
118
+ </PathAndCredentials>
119
+ <PathAndCredentials wcm:action="add" wcm:keyValue="7">
120
+ <Path>D:\vioinput\w10\amd64</Path>
121
+ </PathAndCredentials>
122
+ <PathAndCredentials wcm:action="add" wcm:keyValue="8">
123
+ <Path>D:\viorng\w10\amd64</Path>
124
+ </PathAndCredentials>
125
+ <PathAndCredentials wcm:action="add" wcm:keyValue="9">
126
+ <Path>D:\vioscsi\w10\amd64</Path>
127
+ </PathAndCredentials>
128
+ <PathAndCredentials wcm:action="add" wcm:keyValue="10">
129
+ <Path>D:\vioserial\w10\amd64</Path>
130
+ </PathAndCredentials>
131
+ <PathAndCredentials wcm:action="add" wcm:keyValue="11">
132
+ <Path>D:\viogpudo\w10\amd64</Path>
133
+ </PathAndCredentials>
134
+ <PathAndCredentials wcm:action="add" wcm:keyValue="12">
135
+ <Path>D:\sriov\w10\amd64</Path>
136
+ </PathAndCredentials>
137
+ <PathAndCredentials wcm:action="add" wcm:keyValue="13">
138
+ <Path>D:\viofs\w10\amd64</Path>
139
+ </PathAndCredentials>
140
+ </DriverPaths>
141
+ </component>
142
+ </settings>
143
+ <settings pass="offlineServicing">
144
+ <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
145
+ <EnableLUA>false</EnableLUA>
146
+ </component>
147
+ </settings>
148
+ <settings pass="generalize">
149
+ <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
150
+ <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
151
+ </component>
152
+ <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
153
+ <SkipRearm>1</SkipRearm>
154
+ </component>
155
+ </settings>
156
+ <settings pass="specialize">
157
+ <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
158
+ <SkipAutoActivation>true</SkipAutoActivation>
159
+ </component>
160
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
161
+ <ComputerName>*</ComputerName>
162
+ <OEMInformation>
163
+ <Manufacturer>Dockur</Manufacturer>
164
+ <Model>Windows for Docker</Model>
165
+ </OEMInformation>
166
+ <OEMName>Windows for Docker</OEMName>
167
+ </component>
168
+ <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
169
+ <DisableWER>1</DisableWER>
170
+ </component>
171
+ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
172
+ <DisableAccelerators>true</DisableAccelerators>
173
+ <DisableFirstRunWizard>true</DisableFirstRunWizard>
174
+ <Home_Page>https://google.com</Home_Page>
175
+ <Help_Page>about:blank</Help_Page>
176
+ </component>
177
+ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
178
+ <DisableAccelerators>true</DisableAccelerators>
179
+ <DisableFirstRunWizard>true</DisableFirstRunWizard>
180
+ <Home_Page>https://google.com</Home_Page>
181
+ <Help_Page>about:blank</Help_Page>
182
+ </component>
183
+ <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
184
+ <CEIPEnabled>0</CEIPEnabled>
185
+ </component>
186
+ <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
187
+ <DisableSR>1</DisableSR>
188
+ </component>
189
+ <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
190
+ <InputLocale>0409:00000409</InputLocale>
191
+ <SystemLocale>en-US</SystemLocale>
192
+ <UILanguage>en-US</UILanguage>
193
+ <UserLocale>en-US</UserLocale>
194
+ </component>
195
+ <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
196
+ <fDenyTSConnections>false</fDenyTSConnections>
197
+ </component>
198
+ <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
199
+ <UserAuthentication>0</UserAuthentication>
200
+ </component>
201
+ <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
202
+ <FirewallGroups>
203
+ <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop">
204
+ <Active>true</Active>
205
+ <Group>Remote Desktop</Group>
206
+ <Profile>all</Profile>
207
+ </FirewallGroup>
208
+ </FirewallGroups>
209
+ </component>
210
+ </settings>
211
+ <settings pass="oobeSystem">
212
+ <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
213
+ <PreventDeviceEncryption>true</PreventDeviceEncryption>
214
+ </component>
215
+ <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
216
+ <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled>
217
+ </component>
218
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
219
+ <UserAccounts>
220
+ <LocalAccounts>
221
+ <LocalAccount wcm:action="add">
222
+ <Name>Docker</Name>
223
+ <Group>Administrators</Group>
224
+ <Password>
225
+ <Value />
226
+ <PlainText>true</PlainText>
227
+ </Password>
228
+ </LocalAccount>
229
+ </LocalAccounts>
230
+ <AdministratorPassword>
231
+ <Value>password</Value>
232
+ <PlainText>true</PlainText>
233
+ </AdministratorPassword>
234
+ </UserAccounts>
235
+ <AutoLogon>
236
+ <Username>Docker</Username>
237
+ <Enabled>true</Enabled>
238
+ <LogonCount>65432</LogonCount>
239
+ <Password>
240
+ <Value />
241
+ <PlainText>true</PlainText>
242
+ </Password>
243
+ </AutoLogon>
244
+ <OOBE>
245
+ <HideEULAPage>true</HideEULAPage>
246
+ <HideLocalAccountScreen>true</HideLocalAccountScreen>
247
+ <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
248
+ <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
249
+ <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
250
+ <NetworkLocation>Other</NetworkLocation>
251
+ <ProtectYourPC>3</ProtectYourPC>
252
+ <SkipUserOOBE>true</SkipUserOOBE>
253
+ <SkipMachineOOBE>true</SkipMachineOOBE>
254
+ </OOBE>
255
+ <RegisteredOrganization>Dockur</RegisteredOrganization>
256
+ <RegisteredOwner>Windows for Docker</RegisteredOwner>
257
+ <FirstLogonCommands>
258
+ <SynchronousCommand wcm:action="add">
259
+ <Order>1</Order>
260
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine>
261
+ <Description>Allow guest access to network shares</Description>
262
+ </SynchronousCommand>
263
+ <SynchronousCommand wcm:action="add">
264
+ <Order>2</Order>
265
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine>
266
+ <Description>Allow RDP login with blank password</Description>
267
+ </SynchronousCommand>
268
+ <SynchronousCommand wcm:action="add">
269
+ <Order>3</Order>
270
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine>
271
+ <Description>Enable option for passwordless sign-in</Description>
272
+ </SynchronousCommand>
273
+ <SynchronousCommand wcm:action="add">
274
+ <Order>4</Order>
275
+ <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine>
276
+ <Description>Password Never Expires</Description>
277
+ </SynchronousCommand>
278
+ <SynchronousCommand wcm:action="add">
279
+ <Order>5</Order>
280
+ <CommandLine>cmd /C POWERCFG -H OFF</CommandLine>
281
+ <Description>Disable Hibernation</Description>
282
+ </SynchronousCommand>
283
+ <SynchronousCommand wcm:action="add">
284
+ <Order>6</Order>
285
+ <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine>
286
+ <Description>Disable monitor blanking</Description>
287
+ </SynchronousCommand>
288
+ <SynchronousCommand wcm:action="add">
289
+ <Order>7</Order>
290
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine>
291
+ <Description>Disable Network Discovery popup</Description>
292
+ </SynchronousCommand>
293
+ <SynchronousCommand wcm:action="add">
294
+ <Order>8</Order>
295
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine>
296
+ <Description>Disable Network Discovery popup</Description>
297
+ </SynchronousCommand>
298
+ <SynchronousCommand wcm:action="add">
299
+ <Order>9</Order>
300
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine>
301
+ <Description>Disable first-run experience in Edge</Description>
302
+ </SynchronousCommand>
303
+ <SynchronousCommand wcm:action="add">
304
+ <Order>10</Order>
305
+ <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine>
306
+ <Description>Show file extensions in Explorer</Description>
307
+ </SynchronousCommand>
308
+ <SynchronousCommand wcm:action="add">
309
+ <Order>11</Order>
310
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine>
311
+ <Description>Zero Hibernation File</Description>
312
+ </SynchronousCommand>
313
+ <SynchronousCommand wcm:action="add">
314
+ <Order>12</Order>
315
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine>
316
+ <Description>Disable Hibernation Mode</Description>
317
+ </SynchronousCommand>
318
+ </FirstLogonCommands>
319
+ </component>
320
+ </settings>
321
+ </unattend>
assets/winvistax64.xml ADDED
@@ -0,0 +1,255 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
3
+ <settings pass="windowsPE">
4
+ <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
5
+ <SetupUILanguage>
6
+ <UILanguage>en-US</UILanguage>
7
+ </SetupUILanguage>
8
+ <InputLocale>0409:00000409</InputLocale>
9
+ <SystemLocale>en-US</SystemLocale>
10
+ <UILanguage>en-US</UILanguage>
11
+ <UserLocale>en-US</UserLocale>
12
+ </component>
13
+ <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
14
+ <DiskConfiguration>
15
+ <WillShowUI>OnError</WillShowUI>
16
+ <Disk wcm:action="add">
17
+ <DiskID>0</DiskID>
18
+ <WillWipeDisk>true</WillWipeDisk>
19
+ <CreatePartitions>
20
+ <CreatePartition wcm:action="add">
21
+ <Order>1</Order>
22
+ <Type>Primary</Type>
23
+ <Size>100</Size>
24
+ </CreatePartition>
25
+ <CreatePartition wcm:action="add">
26
+ <Order>2</Order>
27
+ <Type>Primary</Type>
28
+ <Extend>true</Extend>
29
+ </CreatePartition>
30
+ </CreatePartitions>
31
+ <ModifyPartitions>
32
+ <ModifyPartition wcm:action="add">
33
+ <Format>NTFS</Format>
34
+ <Label>System Reserved</Label>
35
+ <Order>1</Order>
36
+ <Active>true</Active>
37
+ <PartitionID>1</PartitionID>
38
+ </ModifyPartition>
39
+ <ModifyPartition wcm:action="add">
40
+ <Active>true</Active>
41
+ <Format>NTFS</Format>
42
+ <Label>Windows</Label>
43
+ <Letter>C</Letter>
44
+ <Order>2</Order>
45
+ <PartitionID>2</PartitionID>
46
+ </ModifyPartition>
47
+ </ModifyPartitions>
48
+ </Disk>
49
+ </DiskConfiguration>
50
+ <ImageInstall>
51
+ <OSImage>
52
+ <InstallFrom>
53
+ <MetaData wcm:action="add">
54
+ <Value>Windows Vista Ultimate</Value>
55
+ <Key>/IMAGE/NAME</Key>
56
+ </MetaData>
57
+ </InstallFrom>
58
+ <InstallTo>
59
+ <DiskID>0</DiskID>
60
+ <PartitionID>2</PartitionID>
61
+ </InstallTo>
62
+ <WillShowUI>OnError</WillShowUI>
63
+ <InstallToAvailablePartition>false</InstallToAvailablePartition>
64
+ </OSImage>
65
+ </ImageInstall>
66
+ <UserData>
67
+ <AcceptEula>true</AcceptEula>
68
+ <FullName>Docker</FullName>
69
+ <Organization>Windows for Docker</Organization>
70
+ <ProductKey>
71
+ <Key>VMCB9-FDRV6-6CDQM-RV23K-RP8F7</Key>
72
+ </ProductKey>
73
+ </UserData>
74
+ </component>
75
+ <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
76
+ <DriverPaths>
77
+ <PathAndCredentials wcm:action="add" wcm:keyValue="1">
78
+ <Path>D:\viostor\2k8\amd64</Path>
79
+ </PathAndCredentials>
80
+ <PathAndCredentials wcm:action="add" wcm:keyValue="2">
81
+ <Path>D:\NetKVM\2k8\amd64</Path>
82
+ </PathAndCredentials>
83
+ <PathAndCredentials wcm:action="add" wcm:keyValue="3">
84
+ <Path>D:\vioscsi\2k8\amd64</Path>
85
+ </PathAndCredentials>
86
+ </DriverPaths>
87
+ </component>
88
+ </settings>
89
+ <settings pass="generalize">
90
+ <component name="Microsoft-Windows-PnpSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
91
+ <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
92
+ </component>
93
+ <component name="Microsoft-Windows-Security-Licensing-SLC" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
94
+ <SkipRearm>1</SkipRearm>
95
+ </component>
96
+ </settings>
97
+ <settings pass="specialize">
98
+ <component name="Microsoft-Windows-Security-Licensing-SLC-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
99
+ <SkipAutoActivation>true</SkipAutoActivation>
100
+ </component>
101
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
102
+ <ComputerName>*</ComputerName>
103
+ <ProductKey>VMCB9-FDRV6-6CDQM-RV23K-RP8F7</ProductKey>
104
+ <TimeZone>Pacific Standard Time</TimeZone>
105
+ <OEMInformation>
106
+ <Manufacturer>Dockur</Manufacturer>
107
+ <Model>Windows for Docker</Model>
108
+ </OEMInformation>
109
+ <RegisteredOrganization>Dockur</RegisteredOrganization>
110
+ <RegisteredOwner>Windows for Docker</RegisteredOwner>
111
+ </component>
112
+ <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
113
+ <DisableSR>1</DisableSR>
114
+ </component>
115
+ <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
116
+ <fDenyTSConnections>false</fDenyTSConnections>
117
+ </component>
118
+ </settings>
119
+ <settings pass="oobeSystem">
120
+ <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
121
+ <InputLocale>0409:00000409</InputLocale>
122
+ <UILanguage>en-US</UILanguage>
123
+ <UserLocale>en-US</UserLocale>
124
+ </component>
125
+ <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
126
+ <Home_Page>about:blank</Home_Page>
127
+ </component>
128
+ <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
129
+ <CEIPEnabled>0</CEIPEnabled>
130
+ </component>
131
+ <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
132
+ <UserAccounts>
133
+ <LocalAccounts>
134
+ <LocalAccount wcm:action="add">
135
+ <Name>Docker</Name>
136
+ <Group>Administrators</Group>
137
+ <Password>
138
+ <Value />
139
+ <PlainText>true</PlainText>
140
+ </Password>
141
+ </LocalAccount>
142
+ </LocalAccounts>
143
+ <AdministratorPassword>
144
+ <Value>password</Value>
145
+ <PlainText>true</PlainText>
146
+ </AdministratorPassword>
147
+ </UserAccounts>
148
+ <AutoLogon>
149
+ <Username>Docker</Username>
150
+ <Enabled>true</Enabled>
151
+ <LogonCount>65432</LogonCount>
152
+ <Password>
153
+ <Value />
154
+ <PlainText>true</PlainText>
155
+ </Password>
156
+ </AutoLogon>
157
+ <OOBE>
158
+ <HideEULAPage>true</HideEULAPage>
159
+ <NetworkLocation>Other</NetworkLocation>
160
+ <ProtectYourPC>3</ProtectYourPC>
161
+ <SkipUserOOBE>true</SkipUserOOBE>
162
+ <SkipMachineOOBE>false</SkipMachineOOBE>
163
+ </OOBE>
164
+ <RegisteredOrganization>Dockur</RegisteredOrganization>
165
+ <RegisteredOwner>Windows for Docker</RegisteredOwner>
166
+ <FirstLogonCommands>
167
+ <SynchronousCommand wcm:action="add">
168
+ <Order>1</Order>
169
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine>
170
+ <Description>Allow guest access to network shares</Description>
171
+ </SynchronousCommand>
172
+ <SynchronousCommand wcm:action="add">
173
+ <Order>2</Order>
174
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine>
175
+ <Description>Allow RDP login with blank password</Description>
176
+ </SynchronousCommand>
177
+ <SynchronousCommand wcm:action="add">
178
+ <Order>3</Order>
179
+ <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine>
180
+ <Description>Password Never Expires</Description>
181
+ </SynchronousCommand>
182
+ <SynchronousCommand wcm:action="add">
183
+ <Order>4</Order>
184
+ <CommandLine>cmd /C POWERCFG -H OFF</CommandLine>
185
+ <Description>Disable Hibernation</Description>
186
+ </SynchronousCommand>
187
+ <SynchronousCommand wcm:action="add">
188
+ <Order>5</Order>
189
+ <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine>
190
+ <Description>Disable monitor blanking</Description>
191
+ </SynchronousCommand>
192
+ <SynchronousCommand wcm:action="add">
193
+ <Order>6</Order>
194
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine>
195
+ <Description>Disable Network Discovery popup</Description>
196
+ </SynchronousCommand>
197
+ <SynchronousCommand wcm:action="add">
198
+ <Order>7</Order>
199
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine>
200
+ <Description>Disable Network Discovery popup</Description>
201
+ </SynchronousCommand>
202
+ <SynchronousCommand wcm:action="add">
203
+ <Order>8</Order>
204
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine>
205
+ <Description>Disable Network Discovery popup</Description>
206
+ </SynchronousCommand>
207
+ <SynchronousCommand wcm:action="add">
208
+ <Order>9</Order>
209
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine>
210
+ <Description>Disable first-run experience in Edge</Description>
211
+ </SynchronousCommand>
212
+ <SynchronousCommand wcm:action="add">
213
+ <Order>10</Order>
214
+ <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine>
215
+ <Description>Show file extensions in Explorer</Description>
216
+ </SynchronousCommand>
217
+ <SynchronousCommand wcm:action="add">
218
+ <Order>11</Order>
219
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine>
220
+ <Description>Zero Hibernation File</Description>
221
+ </SynchronousCommand>
222
+ <SynchronousCommand wcm:action="add">
223
+ <Order>12</Order>
224
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine>
225
+ <Description>Disable Hibernation Mode</Description>
226
+ </SynchronousCommand>
227
+ <SynchronousCommand wcm:action="add">
228
+ <Order>13</Order>
229
+ <CommandLine>netsh.exe advfirewall firewall set rule group="Remote Desktop" new enable=Yes</CommandLine>
230
+ <Description>Add RDP in firewall</Description>
231
+ </SynchronousCommand>
232
+ <SynchronousCommand wcm:action="add">
233
+ <Order>14</Order>
234
+ <CommandLine>netsh.exe Advfirewall set allprofiles state off</CommandLine>
235
+ <Description>Disable firewall</Description>
236
+ </SynchronousCommand>
237
+ <SynchronousCommand wcm:action="add">
238
+ <Order>15</Order>
239
+ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f</CommandLine>
240
+ <Description>Enable RDP</Description>
241
+ </SynchronousCommand>
242
+ <SynchronousCommand wcm:action="add">
243
+ <Order>16</Order>
244
+ <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Windows\Sidebar" /v "TurnOffSidebar" /t REG_DWORD /d 1 /f</CommandLine>
245
+ <Description>Turn off sidebar</Description>
246
+ </SynchronousCommand>
247
+ <SynchronousCommand wcm:action="add">
248
+ <Order>17</Order>
249
+ <CommandLine>reg.exe add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_DWORD /d 0 /f</CommandLine>
250
+ <Description>Disable screensaver</Description>
251
+ </SynchronousCommand>
252
+ </FirstLogonCommands>
253
+ </component>
254
+ </settings>
255
+ </unattend>
docker-compose.yml ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ version: "3"
2
+ services:
3
+ windows:
4
+ image: dockurr/windows
5
+ container_name: windows
6
+ devices:
7
+ - /dev/kvm
8
+ cap_add:
9
+ - NET_ADMIN
10
+ ports:
11
+ - 8006:8006
12
+ - 3389:3389/tcp
13
+ - 3389:3389/udp
14
+ stop_grace_period: 2m
15
+ restart: on-failure
license.md ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
readme.md ADDED
@@ -0,0 +1,291 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <h1 align="center">Windows<br />
2
+ <div align="center">
3
+ <a href="https://github.com/dockur/windows"><img src="https://github.com/dockur/windows/raw/master/.github/logo.png" title="Logo" style="max-width:100%;" width="128" /></a>
4
+ </div>
5
+ <div align="center">
6
+
7
+ [![Build]][build_url]
8
+ [![Version]][tag_url]
9
+ [![Size]][tag_url]
10
+ [![Pulls]][hub_url]
11
+
12
+ </div></h1>
13
+
14
+ Windows in a Docker container.
15
+
16
+ ## Features
17
+
18
+ - ISO downloader
19
+ - KVM acceleration
20
+ - Web-based viewer
21
+
22
+ ## Usage
23
+
24
+ Via `docker-compose.yml`
25
+
26
+ ```yaml
27
+ version: "3"
28
+ services:
29
+ windows:
30
+ image: dockurr/windows
31
+ container_name: windows
32
+ devices:
33
+ - /dev/kvm
34
+ cap_add:
35
+ - NET_ADMIN
36
+ ports:
37
+ - 8006:8006
38
+ - 3389:3389/tcp
39
+ - 3389:3389/udp
40
+ stop_grace_period: 2m
41
+ restart: on-failure
42
+ ```
43
+
44
+ Via `docker run`
45
+
46
+ ```bash
47
+ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows
48
+ ```
49
+
50
+ ## FAQ
51
+
52
+ * ### How do I use it?
53
+
54
+ Very simple! These are the steps:
55
+
56
+ - Start the container and connect to [port 8006](http://localhost:8006) using your web browser.
57
+
58
+ - Sit back and relax while the magic happens, the whole installation will be performed fully automatic.
59
+
60
+ - Once you see the desktop, your Windows installation is ready for use.
61
+
62
+ Enjoy your brand new machine, and don't forget to star this repo!
63
+
64
+ * ### How do I select the Windows version?
65
+
66
+ By default, Windows 11 will be installed. But you can add the `VERSION` environment variable to your compose file, in order to specify an alternative Windows version to be downloaded:
67
+
68
+ ```yaml
69
+ environment:
70
+ VERSION: "win11"
71
+ ```
72
+
73
+ Select from the values below:
74
+
75
+ | **Value** | **Description** | **Source** | **Transfer** | **Size** |
76
+ |---|---|---|---|---|
77
+ | `win11` | Windows 11 Pro | Microsoft | Fast | 6.4 GB |
78
+ | `win10` | Windows 10 Pro | Microsoft | Fast | 5.8 GB |
79
+ | `ltsc10` | Windows 10 LTSC | Microsoft | Fast | 4.6 GB |
80
+ | `win81` | Windows 8.1 Pro | Microsoft | Fast | 4.2 GB |
81
+ | `win7` | Windows 7 SP1 | Bob Pony | Medium | 3.0 GB |
82
+ | `vista` | Windows Vista SP2 | Bob Pony | Medium | 3.6 GB |
83
+ | `winxp` | Windows XP SP3 | Bob Pony | Medium | 0.6 GB |
84
+ ||||||
85
+ | `2022` | Windows Server 2022 | Microsoft | Fast | 4.7 GB |
86
+ | `2019` | Windows Server 2019 | Microsoft | Fast | 5.3 GB |
87
+ | `2016` | Windows Server 2016 | Microsoft | Fast | 6.5 GB |
88
+ | `2012` | Windows Server 2012 R2 | Microsoft | Fast | 4.3 GB |
89
+ | `2008` | Windows Server 2008 R2 | Microsoft | Fast | 3.0 GB |
90
+ ||||||
91
+ | `core11` | Tiny 11 Core | Archive.org | Slow | 2.1 GB |
92
+ | `tiny11` | Tiny 11 | Archive.org | Slow | 3.8 GB |
93
+ | `tiny10` | Tiny 10 | Archive.org | Slow | 3.6 GB |
94
+
95
+ To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/).
96
+
97
+ * ### How do I connect using RDP?
98
+
99
+ The web-viewer is mainly ment to be used during installation, as its picture quality is low, and it has no audio or clipboard for example.
100
+
101
+ So for a better experience you can connect using any Microsoft Remote Desktop client to the IP of the container, using the username `docker` and by leaving the password empty.
102
+
103
+ There is a good RDP client for [Android](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx) available from the Play Store. One for [iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB) is in the Apple Store. For Linux you can use [rdesktop](http://www.rdesktop.org/) and for Windows you don't need to install anything as it is already ships as part of the operating system.
104
+
105
+ * ### How do I increase the amount of CPU or RAM?
106
+
107
+ By default, 2 CPU cores and 4 GB of RAM are allocated to the container, as those are the minimum requirements of Windows 11.
108
+
109
+ To increase this, add the following environment variables:
110
+
111
+ ```yaml
112
+ environment:
113
+ RAM_SIZE: "8G"
114
+ CPU_CORES: "4"
115
+ ```
116
+
117
+ * ### How do I change the size of the disk?
118
+
119
+ To expand the default size of 64 GB, add the `DISK_SIZE` setting to your compose file and set it to your preferred capacity:
120
+
121
+ ```yaml
122
+ environment:
123
+ DISK_SIZE: "256G"
124
+ ```
125
+
126
+ This can also be used to resize the existing disk to a larger capacity without any data loss.
127
+
128
+ * ### How do I change the storage location?
129
+
130
+ To change the storage location, include the following bind mount in your compose file:
131
+
132
+ ```yaml
133
+ volumes:
134
+ - /var/win:/storage
135
+ ```
136
+
137
+ Replace the example path `/var/win` with the desired storage folder.
138
+
139
+ * ### How do I share files with the host?
140
+
141
+ Open File Explorer and click on the Network section, you will see a computer called `host.lan`, double-click it and it will show a folder called `Data`.
142
+
143
+ Inside this folder you can access any files that are placed in `/storage/shared` (see above) on the host.
144
+
145
+ * ### How do I install a custom image?
146
+
147
+ In order to download a custom ISO image, start a clean container with the URL of the ISO specified in the `VERSION` environment variable:
148
+
149
+ ```yaml
150
+ environment:
151
+ VERSION: "https://example.com/win.iso"
152
+ ```
153
+
154
+ Alternatively, you can also rename a local file to `custom.iso` and place it in an empty `/storage` folder to skip the download.
155
+
156
+ * ### How do I perform a manual installation?
157
+
158
+ It's best to use the automatic installation, as it optimizes various settings for use with this container.
159
+
160
+ However, if you insist on performing the installation manually, start a clean container with the following environment variable:
161
+
162
+ ```yaml
163
+ environment:
164
+ MANUAL: "Y"
165
+ ```
166
+
167
+ Then follow these steps:
168
+
169
+ - Start the container and connect to [port 8006](http://localhost:8006) of the container in your web browser. After the download is finished, you will see the Windows installation screen.
170
+
171
+ - Start the installation by clicking `Install now`. On the next screen, press 'OK' when prompted to `Load driver` and select the `VirtIO SCSI` driver from the list that matches your Windows version. So for Windows 11, select `D:\amd64\w11\vioscsi.inf` and click 'Next'.
172
+
173
+ - Accept the license agreement and select your preferred Windows edition, like Home or Pro.
174
+
175
+ - Choose `Custom: Install Windows only (advanced)`, and click `Load driver` on the next screen. Select 'Browse' and navigate to the `D:\NetKVM\w11\amd64` folder, and click 'OK'. Select the `VirtIO Ethernet Adapter` from the list and click 'Next'.
176
+
177
+ - Select `Drive 0` and click 'Next'.
178
+
179
+ - Wait until Windows finishes copying files and completes the installation.
180
+
181
+ - Once you see the desktop, open File Explorer and navigate to the CD-ROM drive (E:). Double-click on `virtio-win-gt-x64.msi` and proceed to install the VirtIO drivers.
182
+
183
+ Enjoy your brand new machine, and don't forget to star this repo!
184
+
185
+ * ### How do I assign an individual IP address to the container?
186
+
187
+ By default, the container uses bridge networking, which shares the IP address with the host.
188
+
189
+ If you want to assign an individual IP address to the container, you can create a macvlan network as follows:
190
+
191
+ ```bash
192
+ docker network create -d macvlan \
193
+ --subnet=192.168.0.0/24 \
194
+ --gateway=192.168.0.1 \
195
+ --ip-range=192.168.0.100/28 \
196
+ -o parent=eth0 vlan
197
+ ```
198
+
199
+ Be sure to modify these values to match your local subnet.
200
+
201
+ Once you have created the network, change your compose file to look as follows:
202
+
203
+ ```yaml
204
+ services:
205
+ windows:
206
+ container_name: windows
207
+ ..<snip>..
208
+ networks:
209
+ vlan:
210
+ ipv4_address: 192.168.0.100
211
+
212
+ networks:
213
+ vlan:
214
+ external: true
215
+ ```
216
+
217
+ An added benefit of this approach is that you won't have to perform any port mapping anymore, since all ports will be exposed by default.
218
+
219
+ Please note that this IP address won't be accessible from the Docker host due to the design of macvlan, which doesn't permit communication between the two. If this is a concern, you need to create a [second macvlan](https://blog.oddbit.com/post/2018-03-12-using-docker-macvlan-networks/#host-access) as a workaround.
220
+
221
+ * ### How can Windows acquire an IP address from my router?
222
+
223
+ After configuring the container for macvlan (see above), it is possible for Windows to become part of your home network by requesting an IP from your router, just like a real PC.
224
+
225
+ To enable this mode, add the following lines to your compose file:
226
+
227
+ ```yaml
228
+ environment:
229
+ DHCP: "Y"
230
+ device_cgroup_rules:
231
+ - 'c *:* rwm'
232
+ ```
233
+
234
+ Please note that in this mode, the container and Windows will each have their own separate IPs. The container will keep the macvlan IP, and Windows will use the DHCP IP.
235
+
236
+ * ### How do I pass-through a disk?
237
+
238
+ It is possible to pass-through disk devices directly by adding them to your compose file in this way:
239
+
240
+ ```yaml
241
+ environment:
242
+ DEVICE: "/dev/sda"
243
+ DEVICE2: "/dev/sdb"
244
+ devices:
245
+ - /dev/sda
246
+ - /dev/sdb
247
+ ```
248
+
249
+ Use `DEVICE` if you want it to become your main drive, and use `DEVICE2` and higher to add them as secondary drives.
250
+
251
+ * ### How do I pass-through a USB device?
252
+
253
+ To pass-through a USB device, first lookup its vendor and product id via the `lsusb` command, then add them to your compose file like this:
254
+
255
+ ```yaml
256
+ environment:
257
+ ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234"
258
+ devices:
259
+ - /dev/bus/usb
260
+ ```
261
+
262
+ * ### How do I verify if my system supports KVM?
263
+
264
+ To verify if your system supports KVM, run the following commands:
265
+
266
+ ```bash
267
+ sudo apt install cpu-checker
268
+ sudo kvm-ok
269
+ ```
270
+
271
+ If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check the virtualization settings in the BIOS.
272
+
273
+ * ### Is this project legal?
274
+
275
+ Yes, this project contains only open-source code and does not distribute any copyrighted material. Neither does it try to circumvent any copyright protection measures. So under all applicable laws, this project would be considered legal.
276
+
277
+ ## Stars
278
+ [![Stars](https://starchart.cc/dockur/windows.svg?variant=adaptive)](https://starchart.cc/dockur/windows)
279
+
280
+ ## Disclaimer
281
+
282
+ The product names, logos, brands, and other trademarks referred to within this project are the property of their respective trademark holders. This project is not affiliated, sponsored, or endorsed by Microsoft Corporation.
283
+
284
+ [build_url]: https://github.com/dockur/windows/
285
+ [hub_url]: https://hub.docker.com/r/dockurr/windows/
286
+ [tag_url]: https://hub.docker.com/r/dockurr/windows/tags
287
+
288
+ [Build]: https://github.com/dockur/windows/actions/workflows/build.yml/badge.svg
289
+ [Size]: https://img.shields.io/docker/image-size/dockurr/windows/latest?color=066da5&label=size
290
+ [Pulls]: https://img.shields.io/docker/pulls/dockurr/windows.svg?style=flat&label=pulls&logo=docker
291
+ [Version]: https://img.shields.io/docker/v/dockurr/windows/latest?arch=amd64&sort=semver&color=066da5
src/entry.sh ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env bash
2
+ set -Eeuo pipefail
3
+
4
+ APP="Windows"
5
+ BOOT_MODE="windows"
6
+ SUPPORT="https://github.com/dockur/windows"
7
+
8
+ cd /run
9
+
10
+ . reset.sh # Initialize system
11
+ . install.sh # Run installation
12
+ . disk.sh # Initialize disks
13
+ . display.sh # Initialize graphics
14
+ . network.sh # Initialize network
15
+ . samba.sh # Configure samba
16
+ . boot.sh # Configure boot
17
+ . proc.sh # Initialize processor
18
+ . power.sh # Configure shutdown
19
+ . config.sh # Configure arguments
20
+
21
+ trap - ERR
22
+
23
+ info "Booting $APP using $VERS..."
24
+ [[ "$DEBUG" == [Yy1]* ]] && echo "Arguments: $ARGS" && echo
25
+
26
+ { qemu-system-x86_64 ${ARGS:+ $ARGS} >"$QEMU_OUT" 2>"$QEMU_LOG"; rc=$?; } || :
27
+ (( rc != 0 )) && error "$(<"$QEMU_LOG")" && exit 15
28
+
29
+ terminal
30
+ tail -fn +0 "$QEMU_LOG" 2>/dev/null &
31
+ cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" &
32
+ wait $! || :
33
+
34
+ sleep 1 && finish 0
src/install.sh ADDED
@@ -0,0 +1,1059 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env bash
2
+ set -Eeuo pipefail
3
+
4
+ : "${MANUAL:=""}"
5
+ : "${DETECTED:=""}"
6
+ : "${VERSION:="win11x64"}"
7
+
8
+ if [[ "${VERSION}" == \"*\" || "${VERSION}" == \'*\' ]]; then
9
+ VERSION="${VERSION:1:-1}"
10
+ fi
11
+
12
+ [[ "${VERSION,,}" == "11" ]] && VERSION="win11x64"
13
+ [[ "${VERSION,,}" == "win11" ]] && VERSION="win11x64"
14
+
15
+ [[ "${VERSION,,}" == "10" ]] && VERSION="win10x64"
16
+ [[ "${VERSION,,}" == "win10" ]] && VERSION="win10x64"
17
+
18
+ [[ "${VERSION,,}" == "8" ]] && VERSION="win81x64"
19
+ [[ "${VERSION,,}" == "81" ]] && VERSION="win81x64"
20
+ [[ "${VERSION,,}" == "8.1" ]] && VERSION="win81x64"
21
+ [[ "${VERSION,,}" == "win8" ]] && VERSION="win81x64"
22
+ [[ "${VERSION,,}" == "win81" ]] && VERSION="win81x64"
23
+
24
+ [[ "${VERSION,,}" == "7" ]] && VERSION="win7x64"
25
+ [[ "${VERSION,,}" == "win7" ]] && VERSION="win7x64"
26
+
27
+ [[ "${VERSION,,}" == "vista" ]] && VERSION="winvistax64"
28
+ [[ "${VERSION,,}" == "winvista" ]] && VERSION="winvistax64"
29
+
30
+ [[ "${VERSION,,}" == "xp" ]] && VERSION="winxpx86"
31
+ [[ "${VERSION,,}" == "winxp" ]] && VERSION="winxpx86"
32
+
33
+ [[ "${VERSION,,}" == "22" ]] && VERSION="win2022-eval"
34
+ [[ "${VERSION,,}" == "2022" ]] && VERSION="win2022-eval"
35
+ [[ "${VERSION,,}" == "win22" ]] && VERSION="win2022-eval"
36
+ [[ "${VERSION,,}" == "win2022" ]] && VERSION="win2022-eval"
37
+
38
+ [[ "${VERSION,,}" == "19" ]] && VERSION="win2019-eval"
39
+ [[ "${VERSION,,}" == "2019" ]] && VERSION="win2019-eval"
40
+ [[ "${VERSION,,}" == "win19" ]] && VERSION="win2019-eval"
41
+ [[ "${VERSION,,}" == "win2019" ]] && VERSION="win2019-eval"
42
+
43
+ [[ "${VERSION,,}" == "16" ]] && VERSION="win2016-eval"
44
+ [[ "${VERSION,,}" == "2016" ]] && VERSION="win2016-eval"
45
+ [[ "${VERSION,,}" == "win16" ]] && VERSION="win2016-eval"
46
+ [[ "${VERSION,,}" == "win2016" ]] && VERSION="win2016-eval"
47
+
48
+ [[ "${VERSION,,}" == "2012" ]] && VERSION="win2012r2-eval"
49
+ [[ "${VERSION,,}" == "win2012" ]] && VERSION="win2012r2-eval"
50
+
51
+ [[ "${VERSION,,}" == "2008" ]] && VERSION="win2008r2"
52
+ [[ "${VERSION,,}" == "win2008" ]] && VERSION="win2008r2"
53
+
54
+ [[ "${VERSION,,}" == "ltsc10" ]] && VERSION="win10x64-enterprise-ltsc-eval"
55
+ [[ "${VERSION,,}" == "10ltsc" ]] && VERSION="win10x64-enterprise-ltsc-eval"
56
+ [[ "${VERSION,,}" == "win10-ltsc" ]] && VERSION="win10x64-enterprise-ltsc-eval"
57
+ [[ "${VERSION,,}" == "win10x64-ltsc" ]] && VERSION="win10x64-enterprise-ltsc-eval"
58
+
59
+ if [[ "${VERSION,,}" == "win10x64-enterprise-ltsc-eval" ]]; then
60
+ DETECTED="win10x64-ltsc"
61
+ fi
62
+
63
+ if [[ "${VERSION,,}" == "win7x64" ]]; then
64
+ DETECTED="win7x64"
65
+ VERSION="https://dl.bobpony.com/windows/7/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso"
66
+ fi
67
+
68
+ if [[ "${VERSION,,}" == "winvistax64" ]]; then
69
+ DETECTED="winvistax64"
70
+ VERSION="https://dl.bobpony.com/windows/vista/en_windows_vista_sp2_x64_dvd_342267.iso"
71
+ fi
72
+
73
+ if [[ "${VERSION,,}" == "winxpx86" ]]; then
74
+ DETECTED="winxpx86"
75
+ VERSION="https://dl.bobpony.com/windows/xp/professional/en_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73974.iso"
76
+ fi
77
+
78
+ if [[ "${VERSION,,}" == "core11" ]]; then
79
+ DETECTED="win11x64"
80
+ VERSION="https://archive.org/download/tiny-11-core-x-64-beta-1/tiny11%20core%20x64%20beta%201.iso"
81
+ fi
82
+
83
+ if [[ "${VERSION,,}" == "tiny11" ]]; then
84
+ DETECTED="win11x64"
85
+ VERSION="https://archive.org/download/tiny11-2311/tiny11%202311%20x64.iso"
86
+ fi
87
+
88
+ if [[ "${VERSION,,}" == "tiny10" ]]; then
89
+ DETECTED="win10x64-ltsc"
90
+ VERSION="https://archive.org/download/tiny-10-23-h2/tiny10%20x64%2023h2.iso"
91
+ fi
92
+
93
+ CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.iso -printf "%f\n" | head -n 1)
94
+ [ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname boot.iso -printf "%f\n" | head -n 1)
95
+ [ -z "$CUSTOM" ] && CUSTOM=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.img -printf "%f\n" | head -n 1)
96
+
97
+ ESD_URL=""
98
+ MACHINE="q35"
99
+ TMP="$STORAGE/tmp"
100
+ DIR="$TMP/unpack"
101
+ FB="falling back to manual installation!"
102
+ ETFS="boot/etfsboot.com"
103
+ EFISYS="efi/microsoft/boot/efisys_noprompt.bin"
104
+
105
+ printVersion() {
106
+
107
+ local id="$1"
108
+ local desc=""
109
+
110
+ [[ "$id" == "win7"* ]] && desc="Windows 7"
111
+ [[ "$id" == "win8"* ]] && desc="Windows 8"
112
+ [[ "$id" == "win10"* ]] && desc="Windows 10"
113
+ [[ "$id" == "win11"* ]] && desc="Windows 11"
114
+ [[ "$id" == "winxp"* ]] && desc="Windows XP"
115
+ [[ "$id" == "winvista"* ]] && desc="Windows Vista"
116
+ [[ "$id" == "win2025"* ]] && desc="Windows Server 2025"
117
+ [[ "$id" == "win2022"* ]] && desc="Windows Server 2022"
118
+ [[ "$id" == "win2019"* ]] && desc="Windows Server 2019"
119
+ [[ "$id" == "win2016"* ]] && desc="Windows Server 2016"
120
+ [[ "$id" == "win2012"* ]] && desc="Windows Server 2012"
121
+ [[ "$id" == "win2008"* ]] && desc="Windows Server 2008"
122
+ [[ "$id" == "win10x64-ltsc" ]] && desc="Windows 10 LTSC"
123
+
124
+ echo "$desc"
125
+ return 0
126
+ }
127
+
128
+ getName() {
129
+
130
+ local file="$1"
131
+ local desc=""
132
+
133
+ [[ "${file,,}" == "win11"* ]] && desc="Windows 11"
134
+ [[ "${file,,}" == "win10"* ]] && desc="Windows 10"
135
+ [[ "${file,,}" == "win8.1"* ]] && desc="Windows 8"
136
+ [[ "${file,,}" == "win8"* ]] && desc="Windows 8"
137
+ [[ "${file,,}" == "win7"* ]] && desc="Windows 7"
138
+ [[ "${file,,}" == "winxp"* ]] && desc="Windows XP"
139
+ [[ "${file,,}" == "winvista"* ]] && desc="Windows Vista"
140
+ [[ "${file,,}" == "tiny10"* ]] && desc="Tiny 10"
141
+ [[ "${file,,}" == "tiny11"* ]] && desc="Tiny 11"
142
+ [[ "${file,,}" == "tiny11_core"* ]] && desc="Tiny 11 Core"
143
+ [[ "${file,,}" == *"windows11"* ]] && desc="Windows 11"
144
+ [[ "${file,,}" == *"windows10"* ]] && desc="Windows 10"
145
+ [[ "${file,,}" == *"windows8.1"* ]] && desc="Windows 8"
146
+ [[ "${file,,}" == *"windows8"* ]] && desc="Windows 8"
147
+ [[ "${file,,}" == *"windows7"* ]] && desc="Windows 7"
148
+ [[ "${file,,}" == *"windowsxp"* ]] && desc="Windows XP"
149
+ [[ "${file,,}" == *"windowsvista"* ]] && desc="Windows Vista"
150
+ [[ "${file,,}" == *"windows_11"* ]] && desc="Windows 11"
151
+ [[ "${file,,}" == *"windows_10"* ]] && desc="Windows 10"
152
+ [[ "${file,,}" == *"windows_8.1"* ]] && desc="Windows 8"
153
+ [[ "${file,,}" == *"windows_8"* ]] && desc="Windows 8"
154
+ [[ "${file,,}" == *"windows_7"* ]] && desc="Windows 7"
155
+ [[ "${file,,}" == *"windows_xp"* ]] && desc="Windows XP"
156
+ [[ "${file,,}" == *"windows_vista"* ]] && desc="Windows Vista"
157
+ [[ "${file,,}" == *"server2008"* ]] && desc="Windows Server 2008"
158
+ [[ "${file,,}" == *"server2012"* ]] && desc="Windows Server 2012"
159
+ [[ "${file,,}" == *"server2016"* ]] && desc="Windows Server 2016"
160
+ [[ "${file,,}" == *"server2019"* ]] && desc="Windows Server 2019"
161
+ [[ "${file,,}" == *"server2022"* ]] && desc="Windows Server 2022"
162
+ [[ "${file,,}" == *"server2025"* ]] && desc="Windows Server 2025"
163
+ [[ "${file,,}" == *"server_2008"* ]] && desc="Windows Server 2008"
164
+ [[ "${file,,}" == *"server_2012"* ]] && desc="Windows Server 2012"
165
+ [[ "${file,,}" == *"server_2016"* ]] && desc="Windows Server 2016"
166
+ [[ "${file,,}" == *"server_2019"* ]] && desc="Windows Server 2019"
167
+ [[ "${file,,}" == *"server_2022"* ]] && desc="Windows Server 2022"
168
+ [[ "${file,,}" == *"server_2025"* ]] && desc="Windows Server 2025"
169
+
170
+ echo "$desc"
171
+ return 0
172
+ }
173
+
174
+ getVersion() {
175
+
176
+ local name="$1"
177
+ local detected=""
178
+
179
+ [[ "${name,,}" == *"windows 7"* ]] && detected="win7x64"
180
+ [[ "${name,,}" == *"windows 8"* ]] && detected="win81x64"
181
+ [[ "${name,,}" == *"windows 11"* ]] && detected="win11x64"
182
+ [[ "${name,,}" == *"windows vista"* ]] && detected="winvistax64"
183
+ [[ "${name,,}" == *"server 2025"* ]] && detected="win2025-eval"
184
+ [[ "${name,,}" == *"server 2022"* ]] && detected="win2022-eval"
185
+ [[ "${name,,}" == *"server 2019"* ]] && detected="win2019-eval"
186
+ [[ "${name,,}" == *"server 2016"* ]] && detected="win2016-eval"
187
+ [[ "${name,,}" == *"server 2012"* ]] && detected="win2012r2-eval"
188
+ [[ "${name,,}" == *"server 2008"* ]] && detected="win2008r2"
189
+
190
+ if [[ "${name,,}" == *"windows 10"* ]]; then
191
+ if [[ "${name,,}" == *"ltsc"* ]]; then
192
+ detected="win10x64-ltsc"
193
+ else
194
+ detected="win10x64"
195
+ fi
196
+ fi
197
+
198
+ echo "$detected"
199
+ return 0
200
+ }
201
+
202
+ hasDisk() {
203
+
204
+ [ -b "${DEVICE:-}" ] && return 0
205
+
206
+ if [ -f "$STORAGE/data.img" ] || [ -f "$STORAGE/data.qcow2" ]; then
207
+ return 0
208
+ fi
209
+
210
+ return 1
211
+ }
212
+
213
+ skipInstall() {
214
+
215
+ if hasDisk && [ -f "$STORAGE/windows.boot" ]; then
216
+ return 0
217
+ fi
218
+
219
+ return 1
220
+ }
221
+
222
+ finishInstall() {
223
+
224
+ local iso="$1"
225
+
226
+ # Mark ISO as prepared via magic byte
227
+ printf '\x16' | dd of="$iso" bs=1 seek=0 count=1 conv=notrunc status=none
228
+
229
+ rm -f "$STORAGE/windows.boot"
230
+ cp /run/version "$STORAGE/windows.ver"
231
+
232
+ if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then
233
+ echo "$MACHINE" > "$STORAGE/windows.old"
234
+ else
235
+ rm -f "$STORAGE/windows.old"
236
+ fi
237
+
238
+ rm -rf "$TMP"
239
+ return 0
240
+ }
241
+
242
+ abortInstall() {
243
+
244
+ local iso="$1"
245
+
246
+ if [[ "$iso" != "$STORAGE/$BASE" ]]; then
247
+ mv -f "$iso" "$STORAGE/$BASE"
248
+ fi
249
+
250
+ finishInstall "$STORAGE/$BASE"
251
+ return 0
252
+ }
253
+
254
+ startInstall() {
255
+
256
+ html "Starting Windows..."
257
+
258
+ if [ -f "$STORAGE/$CUSTOM" ]; then
259
+
260
+ EXTERNAL="Y"
261
+ BASE="$CUSTOM"
262
+
263
+ else
264
+
265
+ CUSTOM=""
266
+
267
+ if [[ "${VERSION,,}" == "http"* ]]; then
268
+ EXTERNAL="Y"
269
+ else
270
+ EXTERNAL="N"
271
+ fi
272
+
273
+ if [[ "$EXTERNAL" != [Yy1]* ]]; then
274
+
275
+ BASE="$VERSION.iso"
276
+
277
+ else
278
+
279
+ BASE=$(basename "${VERSION%%\?*}")
280
+ : "${BASE//+/ }"; printf -v BASE '%b' "${_//%/\\x}"
281
+ BASE=$(echo "$BASE" | sed -e 's/[^A-Za-z0-9._-]/_/g')
282
+
283
+ fi
284
+
285
+ [[ "${BASE,,}" == "boot."* ]] && BASE="windows.iso"
286
+ [[ "${BASE,,}" == "custom."* ]] && BASE="windows.iso"
287
+
288
+ fi
289
+
290
+ [ -z "$MANUAL" ] && MANUAL="N"
291
+
292
+ if [ -f "$STORAGE/$BASE" ]; then
293
+
294
+ # Check if the ISO was already processed by our script
295
+ local magic=""
296
+ magic=$(dd if="$STORAGE/$BASE" seek=0 bs=1 count=1 status=none | tr -d '\000')
297
+ magic="$(printf '%s' "$magic" | od -A n -t x1 -v | tr -d ' \n')"
298
+
299
+ if [[ "$magic" == "16" ]]; then
300
+
301
+ if hasDisk || [[ "$MANUAL" = [Yy1]* ]]; then
302
+ return 1
303
+ fi
304
+
305
+ fi
306
+
307
+ EXTERNAL="Y"
308
+ CUSTOM="$BASE"
309
+
310
+ else
311
+
312
+ if skipInstall; then
313
+ BASE=""
314
+ return 1
315
+ fi
316
+
317
+ fi
318
+
319
+ mkdir -p "$TMP"
320
+
321
+ if [ ! -f "$STORAGE/$CUSTOM" ]; then
322
+ CUSTOM=""
323
+ ISO="$TMP/$BASE"
324
+ else
325
+ ISO="$STORAGE/$CUSTOM"
326
+ fi
327
+
328
+ rm -f "$TMP/$BASE"
329
+ return 0
330
+ }
331
+
332
+ getESD() {
333
+
334
+ local dir="$1"
335
+ local file="$2"
336
+ local architecture="x64"
337
+ local winCatalog size
338
+
339
+ case "${VERSION,,}" in
340
+ win11x64)
341
+ winCatalog="https://go.microsoft.com/fwlink?linkid=2156292"
342
+ ;;
343
+ win10x64)
344
+ winCatalog="https://go.microsoft.com/fwlink/?LinkId=841361"
345
+ ;;
346
+ *)
347
+ error "Invalid ESD version specified: $VERSION"
348
+ return 1
349
+ ;;
350
+ esac
351
+
352
+ local msg="Downloading product information from Microsoft..."
353
+ info "$msg" && html "$msg"
354
+
355
+ rm -rf "$dir"
356
+ mkdir -p "$dir"
357
+
358
+ local wFile="catalog.cab"
359
+
360
+ { wget "$winCatalog" -O "$dir/$wFile" -q --no-check-certificate; rc=$?; } || :
361
+ (( rc != 0 )) && error "Failed to download $winCatalog , reason: $rc" && return 1
362
+
363
+ cd "$dir"
364
+
365
+ if ! cabextract "$wFile" > /dev/null; then
366
+ cd /run
367
+ error "Failed to extract CAB file!" && return 1
368
+ fi
369
+
370
+ cd /run
371
+
372
+ if [ ! -f "$dir/products.xml" ]; then
373
+ error "Failed to find products.xml!" && return 1
374
+ fi
375
+
376
+ local esdLang="en-us"
377
+ local editionName="Professional"
378
+ local edQuery='//File[Architecture="'${architecture}'"][Edition="'${editionName}'"]'
379
+
380
+ echo -e '<Catalog>' > "${dir}/products_filter.xml"
381
+ xmllint --nonet --xpath "${edQuery}" "${dir}/products.xml" >> "${dir}/products_filter.xml" 2>/dev/null
382
+ echo -e '</Catalog>'>> "${dir}/products_filter.xml"
383
+ xmllint --nonet --xpath '//File[LanguageCode="'${esdLang}'"]' "${dir}/products_filter.xml" >"${dir}/esd_edition.xml"
384
+
385
+ size=$(stat -c%s "${dir}/esd_edition.xml")
386
+ if ((size<20)); then
387
+ error "Failed to find Windows product!" && return 1
388
+ fi
389
+
390
+ ESD_URL=$(xmllint --nonet --xpath '//FilePath' "${dir}/esd_edition.xml" | sed -E -e 's/<[\/]?FilePath>//g')
391
+
392
+ if [ -z "$ESD_URL" ]; then
393
+ error "Failed to find ESD url!" && return 1
394
+ fi
395
+
396
+ rm -rf "$dir"
397
+ return 0
398
+ }
399
+
400
+ downloadImage() {
401
+
402
+ local iso="$1"
403
+ local url="$2"
404
+ local file="$iso"
405
+ local desc rc progress
406
+
407
+ rm -f "$iso"
408
+
409
+ if [[ "$EXTERNAL" != [Yy1]* ]]; then
410
+
411
+ file="$iso.PART"
412
+ desc=$(printVersion "$VERSION")
413
+ [ -z "$desc" ] && desc="Windows"
414
+
415
+ else
416
+
417
+ desc=$(getName "$BASE")
418
+ [ -z "$desc" ] && desc="$BASE"
419
+
420
+ fi
421
+
422
+ local msg="Downloading $desc..."
423
+ info "$msg" && html "$msg"
424
+ /run/progress.sh "$file" "Downloading $desc ([P])..." &
425
+
426
+ if [[ "$EXTERNAL" != [Yy1]* ]]; then
427
+
428
+ cd "$TMP"
429
+ { /run/mido.sh "$url"; rc=$?; } || :
430
+ cd /run
431
+
432
+ fKill "progress.sh"
433
+
434
+ if (( rc == 0 )); then
435
+
436
+ [ ! -f "$iso" ] && return 1
437
+
438
+ html "Download finished successfully..."
439
+ return 0
440
+ fi
441
+
442
+ if [[ "$VERSION" != "win10x64"* ]] && [[ "$VERSION" != "win11x64" ]]; then
443
+ return 1
444
+ fi
445
+
446
+ info "Failed to download $desc using Mido, will try a different method now..."
447
+
448
+ ISO="$TMP/$VERSION.esd"
449
+ iso="$ISO"
450
+ file="$ISO"
451
+ rm -f "$iso"
452
+
453
+ if ! getESD "$TMP/esd" "$iso"; then
454
+ return 1
455
+ fi
456
+
457
+ url="$ESD_URL"
458
+ msg="Downloading $desc..."
459
+ info "$msg" && html "$msg"
460
+ /run/progress.sh "$iso" "Downloading $desc ([P])..." &
461
+
462
+ fi
463
+
464
+ # Check if running with interactive TTY or redirected to docker log
465
+ if [ -t 1 ]; then
466
+ progress="--progress=bar:noscroll"
467
+ else
468
+ progress="--progress=dot:giga"
469
+ fi
470
+
471
+ { wget "$url" -O "$iso" -q --no-check-certificate --show-progress "$progress"; rc=$?; } || :
472
+
473
+ fKill "progress.sh"
474
+ (( rc != 0 )) && error "Failed to download $url , reason: $rc" && exit 60
475
+
476
+ [ ! -f "$iso" ] && return 1
477
+
478
+ html "Download finished successfully..."
479
+ return 0
480
+ }
481
+
482
+ extractESD() {
483
+
484
+ local iso="$1"
485
+ local dir="$2"
486
+ local size size_gb space space_gb desc
487
+
488
+ desc=$(printVersion "$VERSION")
489
+ local msg="Extracting $desc bootdisk..."
490
+ info "$msg" && html "$msg"
491
+
492
+ size=16106127360
493
+ size_gb=$(( (size + 1073741823)/1073741824 ))
494
+ space=$(df --output=avail -B 1 "$TMP" | tail -n 1)
495
+ space_gb=$(( (space + 1073741823)/1073741824 ))
496
+
497
+ if ((size<10000000)); then
498
+ error "Invalid ESD file: Size is smaller than 10 MB" && exit 62
499
+ fi
500
+
501
+ if (( size > space )); then
502
+ error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && exit 63
503
+ fi
504
+
505
+ rm -rf "$dir"
506
+ mkdir -p "$dir"
507
+
508
+ local esdImageCount
509
+ esdImageCount=$(wimlib-imagex info "${iso}" | awk '/Image Count:/ {print $3}')
510
+
511
+ wimlib-imagex apply "$iso" 1 "${dir}" --quiet 2>/dev/null || {
512
+ retVal=$?
513
+ error "Extracting bootdisk failed" && return $retVal
514
+ }
515
+
516
+ local bootWimFile="${dir}/sources/boot.wim"
517
+ local installWimFile="${dir}/sources/install.wim"
518
+
519
+ local msg="Extracting $desc environment..."
520
+ info "$msg" && html "$msg"
521
+
522
+ wimlib-imagex export "${iso}" 2 "${bootWimFile}" --compress=LZX --chunk-size 32K --quiet || {
523
+ retVal=$?
524
+ error "Adding WinPE failed" && return ${retVal}
525
+ }
526
+
527
+ local msg="Extracting $desc setup..."
528
+ info "$msg" && html "$msg"
529
+
530
+ wimlib-imagex export "${iso}" 3 "$bootWimFile" --compress=LZX --chunk-size 32K --boot --quiet || {
531
+ retVal=$?
532
+ error "Adding Windows Setup failed" && return ${retVal}
533
+ }
534
+
535
+ local msg="Extracting $desc image..."
536
+ info "$msg" && html "$msg"
537
+
538
+ local edition imageIndex imageEdition
539
+
540
+ case "${VERSION,,}" in
541
+ win11x64)
542
+ edition="11 pro"
543
+ ;;
544
+ win10x64)
545
+ edition="10 pro"
546
+ ;;
547
+ *)
548
+ error "Invalid version specified: $VERSION"
549
+ return 1
550
+ ;;
551
+ esac
552
+
553
+ for (( imageIndex=4; imageIndex<=esdImageCount; imageIndex++ )); do
554
+ imageEdition=$(wimlib-imagex info "${iso}" ${imageIndex} | grep '^Description:' | sed 's/Description:[ \t]*//')
555
+ [[ "${imageEdition,,}" != *"$edition"* ]] && continue
556
+ wimlib-imagex export "${iso}" ${imageIndex} "${installWimFile}" --compress=LZMS --chunk-size 128K --quiet || {
557
+ retVal=$?
558
+ error "Addition of ${imageIndex} to the image failed" && return $retVal
559
+ }
560
+ return 0
561
+ done
562
+
563
+ error "Failed to find product in install.wim!"
564
+ return 1
565
+ }
566
+
567
+ extractImage() {
568
+
569
+ local iso="$1"
570
+ local dir="$2"
571
+ local desc="downloaded ISO"
572
+ local size size_gb space space_gb
573
+
574
+ if [[ "${iso,,}" == *".esd" ]]; then
575
+ if ! extractESD "$iso" "$dir"; then
576
+ error "Failed to extract ESD file!"
577
+ exit 67
578
+ fi
579
+ return 0
580
+ fi
581
+
582
+ if [[ "$EXTERNAL" != [Yy1]* ]] && [ -z "$CUSTOM" ]; then
583
+ desc=$(printVersion "$VERSION")
584
+ [ -z "$desc" ] && desc="downloaded ISO"
585
+ fi
586
+
587
+ local msg="Extracting $desc image..."
588
+ [ -n "$CUSTOM" ] && msg="Extracting local ISO image..."
589
+ info "$msg" && html "$msg"
590
+
591
+ size=$(stat -c%s "$iso")
592
+ size_gb=$(( (size + 1073741823)/1073741824 ))
593
+ space=$(df --output=avail -B 1 "$TMP" | tail -n 1)
594
+ space_gb=$(( (space + 1073741823)/1073741824 ))
595
+
596
+ if ((size<10000000)); then
597
+ error "Invalid ISO file: Size is smaller than 10 MB" && exit 62
598
+ fi
599
+
600
+ if (( size > space )); then
601
+ error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && exit 63
602
+ fi
603
+
604
+ rm -rf "$dir"
605
+
606
+ if ! 7z x "$iso" -o"$dir" > /dev/null; then
607
+ error "Failed to extract ISO file!"
608
+ exit 66
609
+ fi
610
+
611
+ return 0
612
+ }
613
+
614
+ detectImage() {
615
+
616
+ XML=""
617
+ local dir="$1"
618
+
619
+ if [ -n "$CUSTOM" ]; then
620
+ DETECTED=""
621
+ else
622
+ if [ -z "$DETECTED" ] && [[ "$EXTERNAL" != [Yy1]* ]]; then
623
+ DETECTED="$VERSION"
624
+ fi
625
+ fi
626
+
627
+ if [ -n "$DETECTED" ]; then
628
+
629
+ if [ -f "/run/assets/$DETECTED.xml" ]; then
630
+ [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml"
631
+ return 0
632
+ fi
633
+
634
+ if [[ "${DETECTED,,}" != "winxp"* ]]; then
635
+
636
+ local dsc
637
+ dsc=$(printVersion "$DETECTED")
638
+ [ -z "$dsc" ] && dsc="$DETECTED"
639
+
640
+ warn "got $dsc, but no matching XML file exists, $FB."
641
+ fi
642
+
643
+ return 0
644
+ fi
645
+
646
+ info "Detecting Windows version from ISO image..."
647
+
648
+ if [ -f "$dir/WIN51" ] || [ -f "$dir/SETUPXP.HTM" ]; then
649
+ DETECTED="winxpx86"
650
+ info "Detected: Windows XP"
651
+ return 0
652
+ fi
653
+
654
+ local src loc tag result name name2 desc
655
+ src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1)
656
+
657
+ if [ ! -d "$src" ]; then
658
+ warn "failed to locate 'sources' folder in ISO image, $FB"
659
+ BOOT_MODE="windows_legacy"
660
+ return 1
661
+ fi
662
+
663
+ loc=$(find "$src" -maxdepth 1 -type f -iname install.wim | head -n 1)
664
+ [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname install.esd | head -n 1)
665
+
666
+ if [ ! -f "$loc" ]; then
667
+ warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB"
668
+ BOOT_MODE="windows_legacy"
669
+ return 1
670
+ fi
671
+
672
+ tag="DISPLAYNAME"
673
+ result=$(wimlib-imagex info -xml "$loc" | tr -d '\000')
674
+ name=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$result")
675
+ DETECTED=$(getVersion "$name")
676
+
677
+ if [ -z "$DETECTED" ]; then
678
+
679
+ tag="PRODUCTNAME"
680
+ name2=$(sed -n "/$tag/{s/.*<$tag>\(.*\)<\/$tag>.*/\1/;p}" <<< "$result")
681
+ [ -z "$name" ] && name="$name2"
682
+ DETECTED=$(getVersion "$name2")
683
+
684
+ fi
685
+
686
+ if [ -z "$DETECTED" ]; then
687
+ warn "failed to determine Windows version from string '$name', $FB"
688
+ return 0
689
+ fi
690
+
691
+ desc=$(printVersion "$DETECTED")
692
+ [ -z "$desc" ] && desc="$DETECTED"
693
+
694
+ if [ -f "/run/assets/$DETECTED.xml" ]; then
695
+ [[ "$MANUAL" != [Yy1]* ]] && XML="$DETECTED.xml"
696
+ info "Detected: $desc"
697
+ else
698
+ warn "detected $desc, but no matching XML file exists, $FB."
699
+ fi
700
+
701
+ return 0
702
+ }
703
+
704
+ prepareXP() {
705
+
706
+ local iso="$1"
707
+ local dir="$2"
708
+ local arch="x86"
709
+ local target="$dir/I386"
710
+
711
+ if [ -d "$dir/AMD64" ]; then
712
+ arch="amd64"
713
+ target="$dir/AMD64"
714
+ fi
715
+
716
+ MACHINE="pc-q35-2.10"
717
+ BOOT_MODE="windows_legacy"
718
+ ETFS="[BOOT]/Boot-NoEmul.img"
719
+
720
+ [[ "$MANUAL" == [Yy1]* ]] && return 0
721
+
722
+ local drivers="$TMP/drivers"
723
+ rm -rf "$drivers"
724
+
725
+ if ! 7z x /run/drivers.iso -o"$drivers" > /dev/null; then
726
+ error "Failed to extract driver ISO file!"
727
+ exit 66
728
+ fi
729
+
730
+ cp "$drivers/viostor/xp/$arch/viostor.sys" "$target"
731
+
732
+ mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor"
733
+ cp "$drivers/viostor/xp/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor"
734
+ cp "$drivers/viostor/xp/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor"
735
+ cp "$drivers/viostor/xp/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor"
736
+
737
+ mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM"
738
+ cp "$drivers/NetKVM/xp/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM"
739
+ cp "$drivers/NetKVM/xp/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM"
740
+ cp "$drivers/NetKVM/xp/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM"
741
+
742
+ sed -i '/^\[SCSI.Load\]/s/$/\nviostor=viostor.sys,4/' "$target/TXTSETUP.SIF"
743
+ sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\nviostor.sys=1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF"
744
+ sed -i '/^\[SCSI\]/s/$/\nviostor=\"Red Hat VirtIO SCSI Disk Device\"/' "$target/TXTSETUP.SIF"
745
+ sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF"
746
+ sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00020000=\"viostor\"/' "$target/TXTSETUP.SIF"
747
+ sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00021AF4=\"viostor\"/' "$target/TXTSETUP.SIF"
748
+ sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF"
749
+
750
+ mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata"
751
+
752
+ cp -a "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata"
753
+ cp -a "$drivers/sata/xp/$arch/." "$target"
754
+
755
+ sed -i '/^\[SCSI.Load\]/s/$/\niaStor=iaStor.sys,4/' "$target/TXTSETUP.SIF"
756
+ sed -i '/^\[FileFlags\]/s/$/\niaStor.sys = 16/' "$target/TXTSETUP.SIF"
757
+ sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF"
758
+ sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF"
759
+ sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF"
760
+ sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF"
761
+ sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaahci.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF"
762
+ sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaAHCI.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF"
763
+ sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$target/TXTSETUP.SIF"
764
+ sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$target/TXTSETUP.SIF"
765
+
766
+ local key="M6TF9-8XQ2M-YQK9F-7TBB2-XGG88"
767
+ [[ "${arch,,}" == "amd64" ]] && key="B66VY-4D94T-TPPD4-43F72-8X4FY"
768
+
769
+ find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \;
770
+
771
+ { echo "[Data]"
772
+ echo "AutoPartition=1"
773
+ echo "MsDosInitiated=\"0\""
774
+ echo "UnattendedInstall=\"Yes\""
775
+ echo "AutomaticUpdates=\"Yes\""
776
+ echo ""
777
+ echo "[Unattended]"
778
+ echo "UnattendSwitch=Yes"
779
+ echo "UnattendMode=FullUnattended"
780
+ echo "FileSystem=NTFS"
781
+ echo "OemSkipEula=Yes"
782
+ echo "OemPreinstall=Yes"
783
+ echo "Repartition=Yes"
784
+ echo "WaitForReboot=\"No\""
785
+ echo "DriverSigningPolicy=\"Ignore\""
786
+ echo "NonDriverSigningPolicy=\"Ignore\""
787
+ echo "OemPnPDriversPath=\"Drivers\viostor;Drivers\NetKVM;Drivers\sata\""
788
+ echo "NoWaitAfterTextMode=1"
789
+ echo "NoWaitAfterGUIMode=1"
790
+ echo "FileSystem-ConvertNTFS"
791
+ echo "ExtendOemPartition=0"
792
+ echo "Hibernation=\"No\""
793
+ echo ""
794
+ echo "[GuiUnattended]"
795
+ echo "OEMSkipRegional=1"
796
+ echo "OemSkipWelcome=1"
797
+ echo "AdminPassword=*"
798
+ echo "TimeZone=0"
799
+ echo "AutoLogon=Yes"
800
+ echo "AutoLogonCount=65432"
801
+ echo ""
802
+ echo "[UserData]"
803
+ echo "FullName=\"Docker\""
804
+ echo "ComputerName=\"*\""
805
+ echo "OrgName=\"Windows for Docker\""
806
+ echo "ProductKey=$key"
807
+ echo ""
808
+ echo "[Identification]"
809
+ echo "JoinWorkgroup = WORKGROUP"
810
+ echo ""
811
+ echo "[Networking]"
812
+ echo "InstallDefaultComponents=Yes"
813
+ echo ""
814
+ echo "[URL]"
815
+ echo "Home_Page = http://www.google.com"
816
+ echo "Search_Page = http://www.google.com/ie_rsearch.html"
817
+ echo "AutoConfig = 0"
818
+ echo ""
819
+ echo "[RegionalSettings]"
820
+ echo "Language=00000409"
821
+ echo ""
822
+ echo "[TerminalServices]"
823
+ echo "AllowConnections=1"
824
+ } | unix2dos > "$target/WINNT.SIF"
825
+
826
+ rm -rf "$drivers"
827
+ return 0
828
+ }
829
+
830
+ prepareLegacy() {
831
+
832
+ local iso="$1"
833
+ local dir="$2"
834
+
835
+ ETFS="boot.img"
836
+ BOOT_MODE="windows_legacy"
837
+
838
+ rm -f "$dir/$ETFS"
839
+
840
+ local len offset
841
+ len=$(isoinfo -d -i "$iso" | grep "Nsect " | grep -o "[^ ]*$")
842
+ offset=$(isoinfo -d -i "$iso" | grep "Bootoff " | grep -o "[^ ]*$")
843
+
844
+ if ! dd "if=$iso" "of=$dir/$ETFS" bs=2048 "count=$len" "skip=$offset" status=none; then
845
+ error "Failed to extract boot image from ISO!"
846
+ exit 67
847
+ fi
848
+
849
+ return 0
850
+ }
851
+
852
+ prepareImage() {
853
+
854
+ local iso="$1"
855
+ local dir="$2"
856
+
857
+ if [[ "${BOOT_MODE,,}" == "windows" ]]; then
858
+ if [[ "${DETECTED,,}" != "winxp"* ]] && [[ "${DETECTED,,}" != "win2008"* ]]; then
859
+ if [[ "${DETECTED,,}" != "winvista"* ]] && [[ "${DETECTED,,}" != "win7"* ]]; then
860
+
861
+ if [ -f "$dir/$ETFS" ] && [ -f "$dir/$EFISYS" ]; then
862
+ return 0
863
+ fi
864
+
865
+ if [ ! -f "$dir/$ETFS" ]; then
866
+ warn "failed to locate file 'etfsboot.com' in ISO image, falling back to legacy boot!"
867
+ else
868
+ warn "failed to locate file 'efisys_noprompt.bin' in ISO image, falling back to legacy boot!"
869
+ fi
870
+
871
+ fi
872
+ fi
873
+ fi
874
+
875
+ if [[ "${DETECTED,,}" == "winxp"* ]]; then
876
+ if ! prepareXP "$iso" "$dir"; then
877
+ error "Failed to prepare Windows XP ISO!"
878
+ return 1
879
+ fi
880
+ else
881
+ if ! prepareLegacy "$iso" "$dir"; then
882
+ error "Failed to prepare Windows ISO!"
883
+ return 1
884
+ fi
885
+ fi
886
+
887
+ return 0
888
+ }
889
+
890
+ updateImage() {
891
+
892
+ local iso="$1"
893
+ local dir="$2"
894
+ local asset="/run/assets/$3"
895
+ local path src loc index result
896
+
897
+ [ ! -f "$asset" ] && return 0
898
+
899
+ path=$(find "$dir" -maxdepth 1 -type f -iname autounattend.xml | head -n 1)
900
+ [ -n "$path" ] && cp "$asset" "$path"
901
+
902
+ src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1)
903
+
904
+ if [ ! -d "$src" ]; then
905
+ warn "failed to locate 'sources' folder in ISO image, $FB"
906
+ BOOT_MODE="windows_legacy"
907
+ return 1
908
+ fi
909
+
910
+ loc=$(find "$src" -maxdepth 1 -type f -iname boot.wim | head -n 1)
911
+ [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1)
912
+
913
+ if [ ! -f "$loc" ]; then
914
+ warn "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB"
915
+ BOOT_MODE="windows_legacy"
916
+ return 1
917
+ fi
918
+
919
+ info "Adding XML file for automatic installation..."
920
+
921
+ index="1"
922
+ result=$(wimlib-imagex info -xml "$loc" | tr -d '\000')
923
+
924
+ if [[ "${result^^}" == *"<IMAGE INDEX=\"2\">"* ]]; then
925
+ index="2"
926
+ fi
927
+
928
+ if ! wimlib-imagex update "$loc" "$index" --command "add $asset /autounattend.xml" > /dev/null; then
929
+ warn "failed to add XML to ISO image, $FB"
930
+ return 1
931
+ fi
932
+
933
+ return 0
934
+ }
935
+
936
+ buildImage() {
937
+
938
+ local dir="$1"
939
+ local cat="BOOT.CAT"
940
+ local label="${BASE%.*}"
941
+ local log="/run/shm/iso.log"
942
+ local size size_gb space space_gb desc
943
+
944
+ label="${label::30}"
945
+ local out="$TMP/$label.tmp"
946
+ rm -f "$out"
947
+
948
+ desc=$(printVersion "$DETECTED")
949
+ [ -z "$desc" ] && desc="ISO"
950
+
951
+ local msg="Building $desc image..."
952
+ info "$msg" && html "$msg"
953
+
954
+ size=$(du -h -b --max-depth=0 "$dir" | cut -f1)
955
+ size_gb=$(( (size + 1073741823)/1073741824 ))
956
+ space=$(df --output=avail -B 1 "$TMP" | tail -n 1)
957
+ space_gb=$(( (space + 1073741823)/1073741824 ))
958
+
959
+ if (( size > space )); then
960
+ error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB."
961
+ return 1
962
+ fi
963
+
964
+ if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then
965
+
966
+ if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "$label" \
967
+ -udf -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -allow-limited-size -quiet "$dir" 2> "$log"; then
968
+ [ -f "$log" ] && echo "$(<"$log")"
969
+ return 1
970
+ fi
971
+
972
+ else
973
+
974
+ if [[ "${DETECTED,,}" != "winxp"* ]]; then
975
+
976
+ if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames -V "$label" \
977
+ -udf -allow-limited-size -quiet "$dir" 2> "$log"; then
978
+ [ -f "$log" ] && echo "$(<"$log")"
979
+ return 1
980
+ fi
981
+
982
+ else
983
+
984
+ if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -boot-load-seg 1984 -boot-load-size 4 -c "$cat" -iso-level 2 -J -l -D -N -joliet-long \
985
+ -relaxed-filenames -V "$label" -quiet "$dir" 2> "$log"; then
986
+ [ -f "$log" ] && echo "$(<"$log")"
987
+ return 1
988
+ fi
989
+
990
+ fi
991
+ fi
992
+
993
+ local error=""
994
+ local hide="Warning: creating filesystem that does not conform to ISO-9660."
995
+
996
+ [ -f "$log" ] && error="$(<"$log")"
997
+ [[ "$error" != "$hide" ]] && echo "$error"
998
+
999
+ if [ -f "$STORAGE/$BASE" ]; then
1000
+ error "File $STORAGE/$BASE does already exist?!"
1001
+ return 1
1002
+ fi
1003
+
1004
+ mv "$out" "$STORAGE/$BASE"
1005
+ return 0
1006
+ }
1007
+
1008
+ ######################################
1009
+
1010
+ if ! startInstall; then
1011
+
1012
+ if [ -f "$STORAGE/windows.old" ]; then
1013
+ MACHINE=$(<"$STORAGE/windows.old")
1014
+ [ -z "$MACHINE" ] && MACHINE="q35"
1015
+ BOOT_MODE="windows_legacy"
1016
+ fi
1017
+
1018
+ rm -rf "$TMP"
1019
+ return 0
1020
+ fi
1021
+
1022
+ if [ ! -f "$ISO" ]; then
1023
+ if ! downloadImage "$ISO" "$VERSION"; then
1024
+ error "Failed to download $VERSION"
1025
+ exit 61
1026
+ fi
1027
+ fi
1028
+
1029
+ if ! extractImage "$ISO" "$DIR"; then
1030
+ abortInstall "$ISO"
1031
+ return 0
1032
+ fi
1033
+
1034
+ if ! detectImage "$DIR"; then
1035
+ abortInstall "$ISO"
1036
+ return 0
1037
+ fi
1038
+
1039
+ if ! prepareImage "$ISO" "$DIR"; then
1040
+ abortInstall "$ISO"
1041
+ return 0
1042
+ fi
1043
+
1044
+ if ! updateImage "$ISO" "$DIR" "$XML"; then
1045
+ abortInstall "$ISO"
1046
+ return 0
1047
+ fi
1048
+
1049
+ rm -f "$ISO"
1050
+
1051
+ if ! buildImage "$DIR"; then
1052
+ error "Failed to build image!"
1053
+ exit 65
1054
+ fi
1055
+
1056
+ finishInstall "$STORAGE/$BASE"
1057
+
1058
+ html "Successfully prepared image for installation..."
1059
+ return 0
src/mido.sh ADDED
@@ -0,0 +1,766 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/sh
2
+
3
+ # Copyright (C) 2024 Elliot Killick <[email protected]>
4
+ # Licensed under the MIT License. See LICENSE file for details.
5
+
6
+ [ "$DEBUG" ] && set -x
7
+
8
+ # Prefer Dash shell for greater security if available
9
+ if [ "$BASH" ] && command -v dash > /dev/null; then
10
+ exec dash "$0" "$@"
11
+ fi
12
+
13
+ # Test for 4-bit color (16 colors)
14
+ # Operand "colors" is undefined by POSIX
15
+ # If the operand doesn't exist, the terminal probably doesn't support color and the program will continue normally without it
16
+ if [ "0$(tput colors 2> /dev/null)" -ge 16 ]; then
17
+ RED='\033[0;31m'
18
+ BLUE='\033[0;34m'
19
+ GREEN='\033[0;32m'
20
+ NC='\033[0m'
21
+ fi
22
+
23
+ # Avoid printing messages as potential terminal escape sequences
24
+ echo_ok() { printf "%b%s%b" "${GREEN}[+]${NC} " "$1" "\n" >&2; }
25
+ echo_info() { printf "%b%s%b" "${BLUE}[i]${NC} " "$1" "\n" >&2; }
26
+ echo_err() { printf "%b%s%b" "${RED}[!]${NC} " "$1" "\n" >&2; }
27
+
28
+ # https://pubs.opengroup.org/onlinepubs/9699919799/utilities/fold.html
29
+ format() { fold -s; }
30
+
31
+ word_count() { echo $#; }
32
+
33
+ usage() {
34
+ echo "Mido - The Secure Microsoft Windows Downloader"
35
+ echo ""
36
+ echo "Usage: $0 <windows_media>..."
37
+ echo ""
38
+ echo "Download specified list of Windows media."
39
+ echo ""
40
+ echo "Specify \"all\", or one or more of the following Windows media:"
41
+ echo " win7x64-ultimate"
42
+ echo " win81x64"
43
+ echo " win10x64"
44
+ echo " win11x64"
45
+ echo " win81x64-enterprise-eval"
46
+ echo " win10x64-enterprise-eval"
47
+ echo " win11x64-enterprise-eval"
48
+ echo " win10x64-enterprise-ltsc-eval (most secure)"
49
+ echo " win2008r2"
50
+ echo " win2012r2-eval"
51
+ echo " win2016-eval"
52
+ echo " win2019-eval"
53
+ echo " win2022-eval"
54
+ echo ""
55
+ echo "Each ISO download takes between 3 - 7 GiBs (average: 5 GiBs)."
56
+ echo ""
57
+ echo "Updates"
58
+ echo "-------"
59
+ echo "All the downloads provided here are the most up-to-date releases that Microsoft provides. This is ensured by programmatically checking Microsoft's official download pages to get the latest download link. In other cases, the Windows version in question is no longer supported by Microsoft meaning a direct download link (stored in Mido) will always point to the most up-to-date release." | format
60
+ echo ""
61
+ echo "Remember to update Windows to the latest patch level after installation."
62
+ echo ""
63
+ echo "Overuse"
64
+ echo "-------"
65
+ echo "Newer consumer versions of Windows including win81x64, win10x64, and win11x64 are downloaded through Microsoft's gated download web interface. Do not overuse this interface. Microsoft may be quick to do ~24 hour IP address bans after only a few download requests (especially if they are done in quick succession). Being temporarily banned from one of these downloads (e.g. win11x64) doesn't cause you to be banned from any of the other downloads provided through this interface." | format
66
+ echo ""
67
+ echo "Privacy Preserving Technologies"
68
+ echo "-------------------------------"
69
+ echo "The aforementioned Microsoft gated download web interface is currently blocking Tor (and similar technologies). They say this is to prevent people in restricted regions from downloading certain Windows media they shouldn't have access to. This is fine by most standards because Tor is too slow for large downloads anyway and we have checksum verification for security." | format
70
+ echo ""
71
+ echo "Language"
72
+ echo "--------"
73
+ echo "All the downloads provided here are for English (United States). This helps to great simplify maintenance and minimize the user's fingerprint. If another language is desired then that can easily be configured in Windows once it's installed." | format
74
+ echo ""
75
+ echo "Architecture"
76
+ echo "------------"
77
+ echo "All the downloads provided here are for x86-64 (x64). This is the only architecture Microsoft ships Windows Server in.$([ -d /run/qubes ] && echo ' Also, the only architecture Qubes OS supports.')" | format
78
+ }
79
+
80
+ # Media naming scheme info:
81
+ # Windows Server has no architecture because Microsoft only supports amd64 for this version of Windows (the last version to support x86 was Windows Server 2008 without the R2)
82
+ # "eval" is short for "evaluation", it's simply the license type included with the Windows installation (only exists on enterprise/server) and must be specified in the associated answer file
83
+ # "win7x64" has the "ultimate" edition appended to it because it isn't "multi-edition" like the other Windows ISOs (for multi-edition ISOs the edition is specified in the associated answer file)
84
+
85
+ readonly win7x64_ultimate="win7x64-ultimate.iso"
86
+ readonly win81x64="win81x64.iso"
87
+ readonly win10x64="win10x64.iso"
88
+ readonly win11x64="win11x64.iso"
89
+ readonly win81x64_enterprise_eval="win81x64-enterprise-eval.iso"
90
+ readonly win10x64_enterprise_eval="win10x64-enterprise-eval.iso"
91
+ readonly win11x64_enterprise_eval="win11x64-enterprise-eval.iso"
92
+ readonly win10x64_enterprise_ltsc_eval="win10x64-enterprise-ltsc-eval.iso"
93
+ readonly win2008r2="win2008r2.iso"
94
+ readonly win2012r2_eval="win2012r2-eval.iso"
95
+ readonly win2016_eval="win2016-eval.iso"
96
+ readonly win2019_eval="win2019-eval.iso"
97
+ readonly win2022_eval="win2022-eval.iso"
98
+
99
+ parse_args() {
100
+ for arg in "$@"; do
101
+ if [ "$arg" = "-h" ] || [ "$arg" = "--help" ]; then
102
+ usage
103
+ exit
104
+ fi
105
+ done
106
+
107
+ if [ $# -lt 1 ]; then
108
+ usage >&2
109
+ exit 1
110
+ fi
111
+
112
+ # Append to media_list so media is downloaded in the order they're passed in
113
+ for arg in "$@"; do
114
+ case "$arg" in
115
+ win7x64-ultimate)
116
+ media_list="$media_list $win7x64_ultimate"
117
+ ;;
118
+ win81x64)
119
+ media_list="$media_list $win81x64"
120
+ ;;
121
+ win10x64)
122
+ media_list="$media_list $win10x64"
123
+ ;;
124
+ win11x64)
125
+ media_list="$media_list $win11x64"
126
+ ;;
127
+ win81x64-enterprise-eval)
128
+ media_list="$media_list $win81x64_enterprise_eval"
129
+ ;;
130
+ win10x64-enterprise-eval)
131
+ media_list="$media_list $win10x64_enterprise_eval"
132
+ ;;
133
+ win11x64-enterprise-eval)
134
+ media_list="$media_list $win11x64_enterprise_eval"
135
+ ;;
136
+ win10x64-enterprise-ltsc-eval)
137
+ media_list="$media_list $win10x64_enterprise_ltsc_eval"
138
+ ;;
139
+ win2008r2)
140
+ media_list="$media_list $win2008r2"
141
+ ;;
142
+ win2012r2-eval)
143
+ media_list="$media_list $win2012r2_eval"
144
+ ;;
145
+ win2016-eval)
146
+ media_list="$media_list $win2016_eval"
147
+ ;;
148
+ win2019-eval)
149
+ media_list="$media_list $win2019_eval"
150
+ ;;
151
+ win2022-eval)
152
+ media_list="$media_list $win2022_eval"
153
+ ;;
154
+ all)
155
+ media_list="$win7x64_ultimate $win81x64 $win10x64 $win11x64 $win81x64_enterprise_eval $win10x64_enterprise_eval $win11x64_enterprise_eval $win10x64_enterprise_ltsc_eval $win2008r2 $win2012r2_eval $win2016_eval $win2019_eval $win2022_eval"
156
+ break
157
+ ;;
158
+ *)
159
+ echo_err "Invalid Windows media specified: $arg"
160
+ exit 1
161
+ ;;
162
+ esac
163
+ done
164
+ }
165
+
166
+ handle_curl_error() {
167
+ error_code="$1"
168
+
169
+ fatal_error_action=2
170
+
171
+ case "$error_code" in
172
+ 6)
173
+ echo_err "Failed to resolve Microsoft servers! Is there an Internet connection? Exiting..."
174
+ return "$fatal_error_action"
175
+ ;;
176
+ 7)
177
+ echo_err "Failed to contact Microsoft servers! Is there an Internet connection or is the server down?"
178
+ ;;
179
+ 8)
180
+ echo_err "Microsoft servers returned a malformed HTTP response!"
181
+ ;;
182
+ 22)
183
+ echo_err "Microsoft servers returned a failing HTTP status code!"
184
+ ;;
185
+ 23)
186
+ echo_err "Failed at writing Windows media to disk! Out of disk space or permission error? Exiting..."
187
+ return "$fatal_error_action"
188
+ ;;
189
+ 26)
190
+ echo_err "Ran out of memory during download! Exiting..."
191
+ return "$fatal_error_action"
192
+ ;;
193
+ 36)
194
+ echo_err "Failed to continue earlier download!"
195
+ ;;
196
+ 63)
197
+ echo_err "Microsoft servers returned an unexpectedly large response!"
198
+ ;;
199
+ # POSIX defines exit statuses 1-125 as usable by us
200
+ # https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_08_02
201
+ $((error_code <= 125)))
202
+ # Must be some other server or network error (possibly with this specific request/file)
203
+ # This is when accounting for all possible errors in the curl manual assuming a correctly formed curl command and HTTP(S) request, using only the curl features we're using, and a sane build
204
+ echo_err "Miscellaneous server or network error!"
205
+ ;;
206
+ 126 | 127)
207
+ echo_err "Curl command not found! Please install curl and try again. Exiting..."
208
+ return "$fatal_error_action"
209
+ ;;
210
+ # Exit statuses are undefined by POSIX beyond this point
211
+ *)
212
+ case "$(kill -l "$error_code")" in
213
+ # Signals defined to exist by POSIX:
214
+ # https://pubs.opengroup.org/onlinepubs/009695399/basedefs/signal.h.html
215
+ INT)
216
+ echo_err "Curl was interrupted!"
217
+ ;;
218
+ # There could be other signals but these are most common
219
+ SEGV | ABRT)
220
+ echo_err "Curl crashed! Failed exploitation attempt? Please report any core dumps to curl developers. Exiting..."
221
+ return "$fatal_error_action"
222
+ ;;
223
+ *)
224
+ echo_err "Curl terminated due to a fatal signal!"
225
+ ;;
226
+ esac
227
+ esac
228
+
229
+ return 1
230
+ }
231
+
232
+ part_ext=".PART"
233
+ unverified_ext=".UNVERIFIED"
234
+
235
+ scurl_file() {
236
+ out_file="$1"
237
+ tls_version="$2"
238
+ url="$3"
239
+
240
+ part_file="${out_file}${part_ext}"
241
+
242
+ # --location: Microsoft likes to change which endpoint these downloads are stored on but is usually kind enough to add redirects
243
+ # --fail: Return an error on server errors where the HTTP response code is 400 or greater
244
+ curl --progress-bar --location --output "$part_file" --continue-at - --max-filesize 10G --fail --proto =https "--tlsv$tls_version" --http1.1 -- "$url" || {
245
+ error_code=$?
246
+ handle_curl_error "$error_code"
247
+ error_action=$?
248
+
249
+ # Clean up and make sure future resumes don't happen from bad download resume files
250
+ if [ -f "$out_file" ]; then
251
+ # If file is empty, bad HTTP code, or bad download resume file
252
+ if [ ! -s "$out_file" ] || [ "$error_code" = 22 ] || [ "$error_code" = 36 ]; then
253
+ echo_info "Deleting failed download..."
254
+ rm -f "$out_file"
255
+ fi
256
+ fi
257
+
258
+ return "$error_action"
259
+ }
260
+
261
+ # Full downloaded succeeded, ready for verification check
262
+ mv "$part_file" "${out_file}"
263
+ }
264
+
265
+ manual_verification() {
266
+ media_verification_failed_list="$1"
267
+ checksum_verification_failed_list="$2"
268
+
269
+ echo_info "Manual verification instructions"
270
+ echo " 1. Get checksum (may already be done for you):" >&2
271
+ echo " sha256sum <ISO_FILENAME>" >&2
272
+ echo "" >&2
273
+ echo " 2. Verify media:" >&2
274
+ echo " Web search: https://duckduckgo.com/?q=%22CHECKSUM_HERE%22" >&2
275
+ echo " Onion search: https://duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion/?q=%22CHECKSUM_HERE%22" >&2
276
+ echo " \"No results found\" or unexpected results indicates the media has been modified and should not be used." >&2
277
+ echo "" >&2
278
+ echo " 3. Remove the $unverified_ext extension from the file after performing or deciding to skip verification (not recommended):" >&2
279
+ echo " mv <ISO_FILENAME>$unverified_ext <ISO_FILENAME>" >&2
280
+ echo "" >&2
281
+
282
+ for media in $media_verification_failed_list; do
283
+ # Read current checksum in list and then read remaining checksums back into the list (effectively running "shift" on the variable)
284
+ # POSIX sh doesn't support indexing so do this instead to iterate both lists at once
285
+ # POSIX sh doesn't support here-strings (<<<). We could also use the "cut" program but that's not a builtin
286
+ IFS=' ' read -r checksum checksum_verification_failed_list << EOF
287
+ $checksum_verification_failed_list
288
+ EOF
289
+
290
+ echo " ${media}${unverified_ext} = $checksum" >&2
291
+ echo " Web search: https://duckduckgo.com/?q=%22$checksum%22" >&2
292
+ echo " Onion search: https://duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion/?q=%22$checksum%22" >&2
293
+ echo " mv ${media}${unverified_ext} $media" >&2
294
+ echo "" >&2
295
+ done
296
+
297
+ echo " Theses searches can be performed in a web/Tor browser or more securely using" >&2
298
+ echo " ddgr (Debian/Fedora packages available) terminal search tool if preferred." >&2
299
+ echo " Once validated, consider updating the checksums in Mido by submitting a pull request on GitHub." >&2
300
+
301
+ # If you're looking for a single secondary source to cross-reference checksums then try here: https://files.rg-adguard.net/search
302
+ # This site is recommended by the creator of Rufus in the Fido README and has worked well for me
303
+ }
304
+
305
+ consumer_download() {
306
+ # Copyright (C) 2024 Elliot Killick <[email protected]>
307
+ # Licensed under the MIT License. See LICENSE file for details.
308
+ #
309
+ # This function is from the Mido project:
310
+ # https://github.com/ElliotKillick/Mido
311
+
312
+ # Download newer consumer Windows versions from behind gated Microsoft API
313
+
314
+ out_file="$1"
315
+ # Either 8, 10, or 11
316
+ windows_version="$2"
317
+
318
+ url="https://www.microsoft.com/en-us/software-download/windows$windows_version"
319
+ case "$windows_version" in
320
+ 8 | 10) url="${url}ISO" ;;
321
+ esac
322
+
323
+ user_agent="Mozilla/5.0 (X11; Linux x86_64; rv:100.0) Gecko/20100101 Firefox/100.0"
324
+ # uuidgen: For MacOS (installed by default) and other systems (e.g. with no /proc) that don't have a kernel interface for generating random UUIDs
325
+ session_id="$(cat /proc/sys/kernel/random/uuid 2> /dev/null || uuidgen --random)"
326
+
327
+ # Get product edition ID for latest release of given Windows version
328
+ # Product edition ID: This specifies both the Windows release (e.g. 22H2) and edition ("multi-edition" is default, either Home/Pro/Edu/etc., we select "Pro" in the answer files) in one number
329
+ # This is a request we make that Fido doesn't. Fido manually maintains a list of all the Windows release/edition product edition IDs in its script (see: $WindowsVersions array). This is helpful for downloading older releases (e.g. Windows 10 1909, 21H1, etc.) but we always want to get the newest release which is why we get this value dynamically
330
+ # Also, keeping a "$WindowsVersions" array like Fido does would be way too much of a maintenance burden
331
+ # Remove "Accept" header that curl sends by default (match Fido requests)
332
+ iso_download_page_html="$(curl -sS --user-agent "$user_agent" --header "Accept:" --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url")" || {
333
+ handle_curl_error $?
334
+ return $?
335
+ }
336
+
337
+ # tr: Filter for only numerics to prevent HTTP parameter injection
338
+ # head -c was recently added to POSIX: https://austingroupbugs.net/view.php?id=407
339
+ product_edition_id="$(echo "$iso_download_page_html" | grep -Eo '<option value="[0-9]+">Windows' | cut -d '"' -f 2 | head -n 1 | tr -cd '0-9' | head -c 16)"
340
+ [ "$VERBOSE" ] && echo "Product edition ID: $product_edition_id" >&2
341
+
342
+ # Permit Session ID
343
+ # "org_id" is always the same value
344
+ curl -sS --output /dev/null --user-agent "$user_agent" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "https://vlscppe.microsoft.com/tags?org_id=y6jn8c31&session_id=$session_id" || {
345
+ # This should only happen if there's been some change to how this API works
346
+ handle_curl_error $?
347
+ return $?
348
+ }
349
+
350
+ # Extract everything after the last slash
351
+ url_segment_parameter="${url##*/}"
352
+
353
+ # Get language -> skuID association table
354
+ # SKU ID: This specifies the language of the ISO. We always use "English (United States)", however, the SKU for this changes with each Windows release
355
+ # We must make this request so our next one will be allowed
356
+ # --data "" is required otherwise no "Content-Length" header will be sent causing HTTP response "411 Length Required"
357
+ language_skuid_table_html="$(curl -sS --request POST --user-agent "$user_agent" --data "" --header "Accept:" --max-filesize 10K --fail --proto =https --tlsv1.2 --http1.1 -- "https://www.microsoft.com/en-US/api/controls/contentinclude/html?pageId=a8f8f489-4c7f-463a-9ca6-5cff94d8d041&host=www.microsoft.com&segments=software-download,$url_segment_parameter&query=&action=getskuinformationbyproductedition&sessionId=$session_id&productEditionId=$product_edition_id&sdVersion=2")" || {
358
+ handle_curl_error $?
359
+ return $?
360
+ }
361
+
362
+ # tr: Filter for only alphanumerics or "-" to prevent HTTP parameter injection
363
+ sku_id="$(echo "$language_skuid_table_html" | grep "English (United States)" | sed 's/&quot;//g' | cut -d ',' -f 1 | cut -d ':' -f 2 | tr -cd '[:alnum:]-' | head -c 16)"
364
+ [ "$VERBOSE" ] && echo "SKU ID: $sku_id" >&2
365
+
366
+ # Get ISO download link
367
+ # If any request is going to be blocked by Microsoft it's always this last one (the previous requests always seem to succeed)
368
+ # --referer: Required by Microsoft servers to allow request
369
+ iso_download_link_html="$(curl -sS --request POST --user-agent "$user_agent" --data "" --referer "$url" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "https://www.microsoft.com/en-US/api/controls/contentinclude/html?pageId=6e2a1789-ef16-4f27-a296-74ef7ef5d96b&host=www.microsoft.com&segments=software-download,$url_segment_parameter&query=&action=GetProductDownloadLinksBySku&sessionId=$session_id&skuId=$sku_id&language=English&sdVersion=2")" || {
370
+ # This should only happen if there's been some change to how this API works
371
+ handle_curl_error $?
372
+ return $?
373
+ }
374
+
375
+ if ! [ "$iso_download_link_html" ]; then
376
+ # This should only happen if there's been some change to how this API works
377
+ echo_err "Microsoft servers gave us an empty response to our request for an automated download. Please check the FAQ on how to boot from a local file and manually download this ISO in a web browser: $url"
378
+ manual_verification="true"
379
+ return 1
380
+ fi
381
+
382
+ if echo "$iso_download_link_html" | grep -q "We are unable to complete your request at this time."; then
383
+ echo_err "Microsoft blocked the automated download request based on your IP address. Please check the FAQ on how to boot from a local file and manually download this ISO in a web browser here: $url"
384
+ manual_verification="true"
385
+ return 1
386
+ fi
387
+
388
+ # Filter for 64-bit ISO download URL
389
+ # sed: HTML decode "&" character
390
+ # tr: Filter for only alphanumerics or punctuation
391
+ iso_download_link="$(echo "$iso_download_link_html" | grep -o "https://software.download.prss.microsoft.com.*IsoX64" | cut -d '"' -f 1 | sed 's/&amp;/\&/g' | tr -cd '[:alnum:][:punct:]' | head -c 512)"
392
+
393
+ if ! [ "$iso_download_link" ]; then
394
+ # This should only happen if there's been some change to the download endpoint web address
395
+ echo_err "Microsoft servers gave us no download link to our request for an automated download. Please check the FAQ on how to boot from a local file and manually download this ISO in a web browser: $url"
396
+ manual_verification="true"
397
+ return 1
398
+ fi
399
+
400
+ echo_ok "Got latest ISO download link (valid for 24 hours): $iso_download_link"
401
+
402
+ # Download ISO
403
+ scurl_file "$out_file" "1.3" "$iso_download_link"
404
+ }
405
+
406
+ enterprise_eval_download() {
407
+ # Copyright (C) 2024 Elliot Killick <[email protected]>
408
+ # Licensed under the MIT License. See LICENSE file for details.
409
+ #
410
+ # This function is from the Mido project:
411
+ # https://github.com/ElliotKillick/Mido
412
+
413
+ # Download enterprise evaluation Windows versions
414
+
415
+ out_file="$1"
416
+ windows_version="$2"
417
+ enterprise_type="$3"
418
+
419
+ url="https://www.microsoft.com/en-us/evalcenter/download-$windows_version"
420
+
421
+ iso_download_page_html="$(curl -sS --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url")" || {
422
+ handle_curl_error $?
423
+ return $?
424
+ }
425
+
426
+ if ! [ "$iso_download_page_html" ]; then
427
+ # This should only happen if there's been some change to where this download page is located
428
+ echo_err "Windows enterprise evaluation download page gave us an empty response"
429
+ return 1
430
+ fi
431
+
432
+ iso_download_links="$(echo "$iso_download_page_html" | grep -o "https://go.microsoft.com/fwlink/p/?LinkID=[0-9]\+&clcid=0x[0-9a-z]\+&culture=en-us&country=US")" || {
433
+ # This should only happen if there's been some change to the download endpoint web address
434
+ echo_err "Windows enterprise evaluation download page gave us no download link"
435
+ return 1
436
+ }
437
+
438
+ # Limit untrusted size for input validation
439
+ iso_download_links="$(echo "$iso_download_links" | head -c 1024)"
440
+
441
+ case "$enterprise_type" in
442
+ # Select x64 download link
443
+ "enterprise") iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) ;;
444
+ # Select x64 LTSC download link
445
+ "ltsc") iso_download_link=$(echo "$iso_download_links" | head -n 4 | tail -n 1) ;;
446
+ *) iso_download_link="$iso_download_links" ;;
447
+ esac
448
+
449
+ # Follow redirect so proceeding log message is useful
450
+ # This is a request we make this Fido doesn't
451
+ # We don't need to set "--max-filesize" here because this is a HEAD request and the output is to /dev/null anyway
452
+ iso_download_link="$(curl -sS --location --output /dev/null --silent --write-out "%{url_effective}" --head --fail --proto =https --tlsv1.2 --http1.1 -- "$iso_download_link")" || {
453
+ # This should only happen if the Microsoft servers are down
454
+ handle_curl_error $?
455
+ return $?
456
+ }
457
+
458
+ # Limit untrusted size for input validation
459
+ iso_download_link="$(echo "$iso_download_link" | head -c 1024)"
460
+
461
+ echo_ok "Got latest ISO download link: $iso_download_link"
462
+
463
+ # Use highest TLS version for endpoints that support it
464
+ case "$iso_download_link" in
465
+ "https://download.microsoft.com"*) tls_version="1.2" ;;
466
+ *) tls_version="1.3" ;;
467
+ esac
468
+
469
+ # Download ISO
470
+ scurl_file "$out_file" "$tls_version" "$iso_download_link"
471
+ }
472
+
473
+ download_media() {
474
+ echo_info "Downloading Windows media from official Microsoft servers..."
475
+
476
+ media_download_failed_list=""
477
+
478
+ for media in $media_list; do
479
+ case "$media" in
480
+ "$win7x64_ultimate")
481
+ echo_info "Downloading Windows 7..."
482
+ # Source, Google search this (it can be found many places): "dec04cbd352b453e437b2fe9614b67f28f7c0b550d8351827bc1e9ef3f601389" "download.microsoft.com"
483
+ # This Windows 7 ISO bundles MSU update packages
484
+ # It's the most up-to-date Windows 7 ISO that Microsoft offers (August 2018 update): https://files.rg-adguard.net/files/cea4210a-3474-a17a-88d4-4b3e10bd9f66
485
+ # Of particular interest to us is the update that adds support for SHA-256 driver signatures so Qubes Windows Tools installs correctly
486
+ #
487
+ # Microsoft purged Windows 7 from all their servers...
488
+ # More info about this event: https://github.com/pbatard/Fido/issues/64
489
+ # Luckily, the ISO is still available on the Wayback Machine so get the last copy of it from there
490
+ # This is still secure because we validate with the checksum from before the purge
491
+ # The only con then is that web.archive.org is a much slower download source than the Microsoft servers
492
+ echo_info "Microsoft has unfortunately purged all downloads of Windows 7 from their servers so this identical download is sourced from: web.archive.org"
493
+ scurl_file "$media" "1.3" "https://web.archive.org/web/20221228154140/https://download.microsoft.com/download/5/1/9/5195A765-3A41-4A72-87D8-200D897CBE21/7601.24214.180801-1700.win7sp1_ldr_escrow_CLIENT_ULTIMATE_x64FRE_en-us.iso"
494
+ ;;
495
+ "$win81x64")
496
+ echo_info "Downloading Windows 8.1..."
497
+ consumer_download "$media" 8
498
+ ;;
499
+ "$win10x64")
500
+ echo_info "Downloading Windows 10..."
501
+ consumer_download "$media" 10
502
+ ;;
503
+ "$win11x64")
504
+ echo_info "Downloading Windows 11..."
505
+ consumer_download "$media" 11
506
+ ;;
507
+
508
+ "$win81x64_enterprise_eval")
509
+ echo_info "Downloading Windows 8.1 Enterprise Evaluation..."
510
+ # This download link is "Update 1": https://files.rg-adguard.net/file/166cbcab-1647-53d5-1785-6ef9e22a6500
511
+ # A more up-to-date "Update 3" enterprise ISO exists but it was only ever distributed by Microsoft through MSDN which means it's impossible to get a Microsoft download link now: https://files.rg-adguard.net/file/549a58f2-7813-3e77-df6c-50609bc6dd7c
512
+ # win81x64 is "Update 3" but that's isn't an enterprise version (although technically it's possible to modify a few files in the ISO to get any edition)
513
+ # If you want "Update 3" enterprise though (not from Microsoft servers), then you should still be able to get it from here: https://archive.org/details/en_windows_8.1_enterprise_with_update_x64_dvd_6054382_202110
514
+ # "Update 1" enterprise also seems to be the ISO used by other projects
515
+ # Old source, used to be here but Microsoft deleted it: http://technet.microsoft.com/en-us/evalcenter/hh699156.aspx
516
+ # Source: https://gist.github.com/eyecatchup/11527136b23039a0066f
517
+ scurl_file "$media" "1.2" "https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO"
518
+ ;;
519
+ "$win10x64_enterprise_eval")
520
+ echo_info "Downloading Windows 10 Enterprise Evaluation..."
521
+ enterprise_eval_download "$media" windows-10-enterprise enterprise
522
+ ;;
523
+ "$win11x64_enterprise_eval")
524
+ echo_info "Downloading Windows 11 Enterprise Evaluation..."
525
+ enterprise_eval_download "$media" windows-11-enterprise enterprise
526
+ ;;
527
+ "$win10x64_enterprise_ltsc_eval")
528
+ echo_info "Downloading Windows 10 Enterprise LTSC Evaluation..."
529
+ enterprise_eval_download "$media" windows-10-enterprise ltsc
530
+ ;;
531
+
532
+ "$win2008r2")
533
+ echo_info "Downloading Windows Server 2008 R2..."
534
+ # Old source, used to be here but Microsoft deleted it: https://www.microsoft.com/en-us/download/details.aspx?id=11093
535
+ # Microsoft took down the original download link provided by that source too but this new one has the same checksum
536
+ # Source: https://github.com/rapid7/metasploitable3/pull/563
537
+ scurl_file "$media" "1.2" "https://download.microsoft.com/download/4/1/D/41DEA7E0-B30D-4012-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso"
538
+ ;;
539
+ "$win2012r2_eval")
540
+ echo_info "Downloading Windows Server 2012 R2 Evaluation..."
541
+ enterprise_eval_download "$media" windows-server-2012-r2 server
542
+ ;;
543
+ "$win2016_eval")
544
+ echo_info "Downloading Windows Server 2016 Evaluation..."
545
+ enterprise_eval_download "$media" windows-server-2016 server
546
+ ;;
547
+ "$win2019_eval")
548
+ echo_info "Downloading Windows Server 2019 Evaluation..."
549
+ enterprise_eval_download "$media" windows-server-2019 server
550
+ ;;
551
+ "$win2022_eval")
552
+ echo_info "Downloading Windows Server 2022 Evaluation..."
553
+ enterprise_eval_download "$media" windows-server-2022 server
554
+ ;;
555
+ esac || {
556
+ error_action=$?
557
+ media_download_failed_list="$media_download_failed_list $media"
558
+ # Return immediately on a fatal error action
559
+ if [ "$error_action" = 2 ]; then
560
+ return
561
+ fi
562
+ }
563
+ done
564
+ }
565
+
566
+ verify_media() {
567
+ # SHA256SUMS file
568
+ # Some of these Windows ISOs are EOL (e.g. win81x64) so their checksums will always match
569
+ # For all other Windows ISOs, a new release will make their checksums no longer match
570
+ #
571
+ # IMPORTANT: These checksums are not necessarily subject to being updated
572
+ # Unfortunately, the maintenance burden would be too large and even if I did there would still be some time gap between Microsoft releasing a new ISO and me updating the checksum (also, users would have to update this script)
573
+ # For these reasons, I've opted for a slightly more manual verification where you have to look up the checksum to see if it's a well-known Windows ISO checksum
574
+ # Ultimately, you have to trust Microsft because they could still include a backdoor in the verified ISO (keeping Windows air gapped could help with this)
575
+ # Community contributions for these checksums are welcome
576
+ #
577
+ # Leading backslash is to avoid prepending a newline while maintaining alignment
578
+ readonly sha256sums="\
579
+ dec04cbd352b453e437b2fe9614b67f28f7c0b550d8351827bc1e9ef3f601389 win7x64-ultimate.iso
580
+ d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51 win81x64.iso
581
+ # Windows 10 22H2
582
+ a6f470ca6d331eb353b815c043e327a347f594f37ff525f17764738fe812852e win10x64.iso
583
+ # Windows 11 23H2 v2
584
+ 36de5ecb7a0daa58dce68c03b9465a543ed0f5498aa8ae60ab45fb7c8c4ae402 win11x64.iso
585
+ 2dedd44c45646c74efc5a028f65336027e14a56f76686a4631cf94ffe37c72f2 win81x64-enterprise-eval.iso
586
+ ef7312733a9f5d7d51cfa04ac497671995674ca5e1058d5164d6028f0938d668 win10x64-enterprise-eval.iso
587
+ ebbc79106715f44f5020f77bd90721b17c5a877cbc15a3535b99155493a1bb3f win11x64-enterprise-eval.iso
588
+ e4ab2e3535be5748252a8d5d57539a6e59be8d6726345ee10e7afd2cb89fefb5 win10x64-enterprise-ltsc-eval.iso
589
+ 30832ad76ccfa4ce48ccb936edefe02079d42fb1da32201bf9e3a880c8ed6312 win2008r2.iso
590
+ 6612b5b1f53e845aacdf96e974bb119a3d9b4dcb5b82e65804ab7e534dc7b4d5 win2012r2-eval.iso
591
+ 1ce702a578a3cb1ac3d14873980838590f06d5b7101c5daaccbac9d73f1fb50f win2016-eval.iso
592
+ 6dae072e7f78f4ccab74a45341de0d6e2d45c39be25f1f5920a2ab4f51d7bcbb win2019-eval.iso
593
+ 3e4fa6d8507b554856fc9ca6079cc402df11a8b79344871669f0251535255325 win2022-eval.iso"
594
+
595
+ # Read sha256sums line-by-line to build known checksum and media lists
596
+ # Only use shell builtins for better security and stability
597
+ # Don't use a for loop because IFS cannot temporarily be set using that
598
+ while IFS="$(printf '\n')" read -r line; do
599
+ # Ignore comments and empty lines
600
+ case "$line" in
601
+ "#"* | "") continue ;;
602
+ esac
603
+
604
+ # Read first and second words of line
605
+ IFS=' ' read -r known_checksum known_media _ << EOF
606
+ $line
607
+ EOF
608
+
609
+ known_checksum_list="$known_checksum_list $known_checksum"
610
+ known_media_list="$known_media_list $known_media"
611
+ done << EOF
612
+ $sha256sums
613
+ EOF
614
+
615
+ media_verification_failed_list=""
616
+ checksum_verification_failed_list=""
617
+
618
+ for media in $media_list; do
619
+ # Scan for unverified media files
620
+ if ! [ -f "${media}${unverified_ext}" ]; then
621
+ continue
622
+ fi
623
+
624
+ if [ "$verify_media_message_shown" != "true" ]; then
625
+ echo_info "Verifying integrity..."
626
+ verify_media_message_shown="true"
627
+ fi
628
+
629
+ checksum_line="$(sha256sum "${media}${unverified_ext}")"
630
+ # Get first word of checksum line
631
+ IFS=' ' read -r checksum _ << EOF
632
+ $checksum_line
633
+ EOF
634
+
635
+ # Sanity check: Assert correct size of SHA-256 checksum
636
+ if [ ${#checksum} != 64 ]; then
637
+ echo_err "Failed SHA-256 sanity check! Exiting..."
638
+ exit 2
639
+ fi
640
+
641
+ known_checksum_list_iterator="$known_checksum_list"
642
+
643
+ # Search known media and checksum lists for the current media
644
+ for known_media in $known_media_list; do
645
+ IFS=' ' read -r known_checksum known_checksum_list_iterator << EOF
646
+ $known_checksum_list_iterator
647
+ EOF
648
+
649
+ if [ "$media" = "$known_media" ]; then
650
+ break
651
+ fi
652
+ done
653
+
654
+ # Verify current media integrity
655
+ if [ "$checksum" = "$known_checksum" ]; then
656
+ echo "$media: OK"
657
+ mv "${media}${unverified_ext}" "$media"
658
+ else
659
+ echo "$media: UNVERIFIED"
660
+ media_verification_failed_list="$media_verification_failed_list $media"
661
+ checksum_verification_failed_list="$checksum_verification_failed_list $checksum"
662
+ fi
663
+
664
+ # Reset known checksum list iterator so we can iterate on it again for the next media
665
+ known_checksum_list_iterator="$known_checksum_list"
666
+ done
667
+ }
668
+
669
+ ending_summary() {
670
+ echo "" >&2
671
+
672
+ if [ "$media_download_failed_list" ]; then
673
+ for media in $media_download_failed_list; do
674
+ media_download_failed_argument_list="$media_download_failed_argument_list ${media%%.iso}"
675
+ done
676
+
677
+ # shellcheck disable=SC2086
678
+ echo_err "$(word_count $media_download_failed_list) attempted download(s) failed! Please re-run Mido with these arguments to try downloading again (any partial downloads will be resumed):$media_download_failed_argument_list"
679
+ fi
680
+
681
+ # Exit codes
682
+ # 0: Success
683
+ # 1: Argument parsing error
684
+ # 2: Runtime error (see error message for more info)
685
+ # 3: One or more downloads failed
686
+ # 4: One or more verifications failed
687
+ # 5: At least one download and one verification failed (when more than one media is specified)
688
+
689
+ exit_code=0
690
+
691
+ # Determine exit code
692
+ if [ "$media_download_failed_list" ] && [ "$media_verification_failed_list" ]; then
693
+ exit_code=5
694
+ else
695
+ if [ "$media_download_failed_list" ]; then
696
+ exit_code=3
697
+ elif [ "$media_verification_failed_list" ]; then
698
+ exit_code=4
699
+ fi
700
+ fi
701
+
702
+ trap -- - EXIT
703
+
704
+ if [ "$exit_code" = 0 ]; then
705
+ echo_ok "Successfully downloaded Windows image!"
706
+ else
707
+ echo_ok "Finished! Please see the above errors with information"
708
+ exit "$exit_code"
709
+ fi
710
+ }
711
+
712
+ # https://unix.stackexchange.com/questions/752570/why-does-trap-passthough-zero-instead-of-the-signal-the-process-was-killed-wit
713
+ handle_exit() {
714
+ exit_code=$?
715
+ signal="$1"
716
+
717
+ if [ "$exit_code" != 0 ] || [ "$signal" ]; then
718
+ echo "" >&2
719
+ echo_err "Mido was exited abruptly! PARTially downloaded or UNVERIFIED Windows media may exist. Please re-run this Mido command and do not use the bad media."
720
+ fi
721
+
722
+ if [ "$exit_code" != 0 ]; then
723
+ trap -- - EXIT
724
+ exit "$exit_code"
725
+ elif [ "$signal" ]; then
726
+ trap -- - "$signal"
727
+ kill -s "$signal" -- $$
728
+ fi
729
+ }
730
+
731
+ # Enable exiting on error
732
+ #
733
+ # Disable shell globbing
734
+ # This isn't necessary given that all unquoted variables (e.g. for determining word count) are set directly by us but it's just a precaution
735
+ set -ef
736
+
737
+ # IFS defaults to many different kinds of whitespace but we only care about space
738
+ # Note: This means that ISO filenames cannot contain spaces but that's a bad idea anyway
739
+ IFS=' '
740
+
741
+ parse_args "$@"
742
+
743
+ # POSIX sh doesn't include signals in its EXIT trap so do it ourselves
744
+ signo=1
745
+ while true; do
746
+ # "kill" is a shell builtin
747
+ # shellcheck disable=SC2064
748
+ case "$(kill -l "$signo" 2> /dev/null)" in
749
+ # Trap on all catchable terminating signals as defined by POSIX
750
+ # Stop (i.e. suspend) signals (like Ctrl + Z or TSTP) are fine because they can be resumed
751
+ # Most signals result in termination so this way is easiest (Linux signal(7) only adds more terminating signals)
752
+ #
753
+ # https://pubs.opengroup.org/onlinepubs/009695399/basedefs/signal.h.html
754
+ # https://unix.stackexchange.com/a/490816
755
+ # Signal WINCH was recently added to POSIX: https://austingroupbugs.net/view.php?id=249
756
+ CHLD | CONT | URG | WINCH | KILL | STOP | TSTP | TTIN | TTOU) ;;
757
+ *) trap "handle_exit $signo" "$signo" 2> /dev/null || break ;;
758
+ esac
759
+
760
+ signo=$((signo + 1))
761
+ done
762
+ trap handle_exit EXIT
763
+
764
+ download_media
765
+ verify_media
766
+ ending_summary
src/power.sh ADDED
@@ -0,0 +1,193 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env bash
2
+ set -Eeuo pipefail
3
+
4
+ # Configure QEMU for graceful shutdown
5
+
6
+ QEMU_TERM=""
7
+ QEMU_PORT=7100
8
+ QEMU_TIMEOUT=110
9
+ QEMU_PID="/run/shm/qemu.pid"
10
+ QEMU_PTY="/run/shm/qemu.pty"
11
+ QEMU_LOG="/run/shm/qemu.log"
12
+ QEMU_OUT="/run/shm/qemu.out"
13
+ QEMU_END="/run/shm/qemu.end"
14
+
15
+ rm -f /run/shm/qemu.*
16
+ touch "$QEMU_LOG"
17
+
18
+ _trap() {
19
+ func="$1" ; shift
20
+ for sig ; do
21
+ trap "$func $sig" "$sig"
22
+ done
23
+ }
24
+
25
+ ready() {
26
+
27
+ [ -f "$STORAGE/windows.boot" ] && return 0
28
+ [ ! -f "$QEMU_PTY" ] && return 1
29
+
30
+ if [ -f "$STORAGE/windows.old" ]; then
31
+ local last
32
+ local bios="Booting from Hard"
33
+ last=$(grep "^Booting.*" "$QEMU_PTY" | tail -1)
34
+ if [[ "${last,,}" == "${bios,,}"* ]]; then
35
+ return 0
36
+ fi
37
+ return 1
38
+ fi
39
+
40
+ local line="Windows Boot Manager"
41
+ if grep -Fq "$line" "$QEMU_PTY"; then
42
+ return 0
43
+ fi
44
+
45
+ return 1
46
+ }
47
+
48
+ finish() {
49
+
50
+ local pid
51
+ local reason=$1
52
+
53
+ touch "$QEMU_END"
54
+
55
+ if [ -f "$QEMU_PID" ]; then
56
+
57
+ pid=$(<"$QEMU_PID")
58
+ error "Forcefully terminating Windows, reason: $reason..."
59
+ { kill -15 "$pid" || true; } 2>/dev/null
60
+
61
+ while isAlive "$pid"; do
62
+ sleep 1
63
+ # Workaround for zombie pid
64
+ [ ! -f "$QEMU_PID" ] && break
65
+ done
66
+ fi
67
+
68
+ if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$STORAGE/$BASE" ]; then
69
+ # Remove CD-ROM ISO after install
70
+ if ready; then
71
+ rm -f "$STORAGE/$BASE"
72
+ touch "$STORAGE/windows.boot"
73
+ fi
74
+ fi
75
+
76
+ pid="/var/run/tpm.pid"
77
+ [ -f "$pid" ] && pKill "$(<"$pid")"
78
+
79
+ fKill "wsdd"
80
+ fKill "smbd"
81
+
82
+ closeNetwork
83
+
84
+ sleep 0.5
85
+ echo "❯ Shutdown completed!"
86
+
87
+ exit "$reason"
88
+ }
89
+
90
+ terminal() {
91
+
92
+ local dev=""
93
+
94
+ if [ -f "$QEMU_OUT" ]; then
95
+
96
+ local msg
97
+ msg=$(<"$QEMU_OUT")
98
+
99
+ if [ -n "$msg" ]; then
100
+
101
+ if [[ "${msg,,}" != "char"* || "$msg" != *"serial0)" ]]; then
102
+ echo "$msg"
103
+ fi
104
+
105
+ dev="${msg#*/dev/p}"
106
+ dev="/dev/p${dev%% *}"
107
+
108
+ fi
109
+ fi
110
+
111
+ if [ ! -c "$dev" ]; then
112
+ dev=$(echo 'info chardev' | nc -q 1 -w 1 localhost "$QEMU_PORT" | tr -d '\000')
113
+ dev="${dev#*serial0}"
114
+ dev="${dev#*pty:}"
115
+ dev="${dev%%$'\n'*}"
116
+ dev="${dev%%$'\r'*}"
117
+ fi
118
+
119
+ if [ ! -c "$dev" ]; then
120
+ error "Device '$dev' not found!"
121
+ finish 34 && return 34
122
+ fi
123
+
124
+ QEMU_TERM="$dev"
125
+ return 0
126
+ }
127
+
128
+ _graceful_shutdown() {
129
+
130
+ local code=$?
131
+
132
+ set +e
133
+
134
+ if [ -f "$QEMU_END" ]; then
135
+ info "Received $1 while already shutting down..."
136
+ return
137
+ fi
138
+
139
+ touch "$QEMU_END"
140
+ info "Received $1, sending ACPI shutdown signal..."
141
+
142
+ if [ ! -f "$QEMU_PID" ]; then
143
+ error "QEMU PID file does not exist?"
144
+ finish "$code" && return "$code"
145
+ fi
146
+
147
+ local pid=""
148
+ pid=$(<"$QEMU_PID")
149
+
150
+ if ! isAlive "$pid"; then
151
+ error "QEMU process does not exist?"
152
+ finish "$code" && return "$code"
153
+ fi
154
+
155
+ if ! ready; then
156
+ info "Cannot send ACPI signal during Windows setup, aborting..."
157
+ finish "$code" && return "$code"
158
+ fi
159
+
160
+ # Send ACPI shutdown signal
161
+ echo 'system_powerdown' | nc -q 1 -w 1 localhost "${QEMU_PORT}" > /dev/null
162
+
163
+ local cnt=0
164
+ while [ "$cnt" -lt "$QEMU_TIMEOUT" ]; do
165
+
166
+ sleep 1
167
+ cnt=$((cnt+1))
168
+
169
+ ! isAlive "$pid" && break
170
+ # Workaround for zombie pid
171
+ [ ! -f "$QEMU_PID" ] && break
172
+
173
+ info "Waiting for Windows to shutdown... ($cnt/$QEMU_TIMEOUT)"
174
+
175
+ # Send ACPI shutdown signal
176
+ echo 'system_powerdown' | nc -q 1 -w 1 localhost "${QEMU_PORT}" > /dev/null
177
+
178
+ done
179
+
180
+ if [ "$cnt" -ge "$QEMU_TIMEOUT" ]; then
181
+ error "Shutdown timeout reached, aborting..."
182
+ fi
183
+
184
+ finish "$code" && return "$code"
185
+ }
186
+
187
+ SERIAL="pty"
188
+ MONITOR="telnet:localhost:$QEMU_PORT,server,nowait,nodelay"
189
+ MONITOR="$MONITOR -daemonize -D $QEMU_LOG -pidfile $QEMU_PID"
190
+
191
+ _trap _graceful_shutdown SIGTERM SIGHUP SIGINT SIGABRT SIGQUIT
192
+
193
+ return 0
src/samba.sh ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env bash
2
+ set -Eeuo pipefail
3
+
4
+ [[ "$DHCP" == [Yy1]* ]] && return 0
5
+
6
+ SHARE="$STORAGE/shared"
7
+
8
+ mkdir -p "$SHARE"
9
+ chmod -R 777 "$SHARE"
10
+
11
+ SAMBA="/etc/samba/smb.conf"
12
+
13
+ { echo "[global]"
14
+ echo " server string = Dockur"
15
+ echo " netbios name = dockur"
16
+ echo " workgroup = WORKGROUP"
17
+ echo " interfaces = dockerbridge"
18
+ echo " bind interfaces only = yes"
19
+ echo " security = user"
20
+ echo " guest account = nobody"
21
+ echo " map to guest = Bad User"
22
+ echo " server min protocol = SMB2"
23
+ echo ""
24
+ echo " # disable printing services"
25
+ echo " load printers = no"
26
+ echo " printing = bsd"
27
+ echo " printcap name = /dev/null"
28
+ echo " disable spoolss = yes"
29
+ echo ""
30
+ echo "[Data]"
31
+ echo " path = $SHARE"
32
+ echo " comment = Shared"
33
+ echo " writable = yes"
34
+ echo " guest ok = yes"
35
+ echo " guest only = yes"
36
+ echo " force user = root"
37
+ echo " force group = root"
38
+ } > "$SAMBA"
39
+
40
+ { echo "--------------------------------------------------------"
41
+ echo " $APP for Docker v$(</run/version)..."
42
+ echo " For support visit $SUPPORT"
43
+ echo "--------------------------------------------------------"
44
+ echo ""
45
+ echo "Using this folder you can share files with the host machine."
46
+ echo ""
47
+ echo "To change the storage location, include the following bind mount in your compose file:"
48
+ echo ""
49
+ echo " volumes:"
50
+ echo " - \"/home/user/example:/storage/shared\""
51
+ echo ""
52
+ echo "Or in your run command:"
53
+ echo ""
54
+ echo " -v \"/home/user/example:/storage/shared\""
55
+ echo ""
56
+ echo "Replace the example path /home/user/example with the desired storage folder."
57
+ echo ""
58
+ } | unix2dos > "$SHARE/readme.txt"
59
+
60
+ smbd -D
61
+ wsdd -i dockerbridge -p -n "host.lan" &
62
+
63
+ return 0