VirtualBox

source: vbox/trunk/src/VBox/Additions/WINNT/Installer/VBoxGuestAdditionsW2KXP.nsh

Last change on this file was 98626, checked in by vboxsync, 15 months ago

Add/VBoxGuest.inf,VBoxVideo.inf,Installer: Seems we need special versions of the .INF-files for windows 2000 and NT4, as these doesn't grok the comma stuff in the [Manufacturer] section. VBoxGuest works, VBoxVideo not so much on W2K.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Revision
File size: 30.1 KB
RevLine 
[40270]1; $Id: VBoxGuestAdditionsW2KXP.nsh 98626 2023-02-18 02:13:49Z vboxsync $
[44352]2;; @file
[35753]3; VBoxGuestAdditionsW2KXP.nsh - Guest Additions installation for Windows 2000/XP.
4;
[31634]5
[35753]6;
[98103]7; Copyright (C) 2006-2023 Oracle and/or its affiliates.
[35753]8;
[96407]9; This file is part of VirtualBox base platform packages, as
10; available from https://www.virtualbox.org.
[35753]11;
[96407]12; This program is free software; you can redistribute it and/or
13; modify it under the terms of the GNU General Public License
14; as published by the Free Software Foundation, in version 3 of the
15; License.
16;
17; This program is distributed in the hope that it will be useful, but
18; WITHOUT ANY WARRANTY; without even the implied warranty of
19; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20; General Public License for more details.
21;
22; You should have received a copy of the GNU General Public License
23; along with this program; if not, see <https://www.gnu.org/licenses>.
24;
25; SPDX-License-Identifier: GPL-3.0-only
26;
[35680]27
[31634]28Function W2K_SetVideoResolution
29
30 ; NSIS only supports global vars, even in functions -- great
31 Var /GLOBAL i
32 Var /GLOBAL tmp
33 Var /GLOBAL tmppath
34 Var /GLOBAL dev_id
35 Var /GLOBAL dev_desc
36
37 ; Check for all required parameters
38 StrCmp $g_iScreenX "0" exit
39 StrCmp $g_iScreenY "0" exit
40 StrCmp $g_iScreenBpp "0" exit
41
[44417]42 ${LogVerbose} "Setting display parameters ($g_iScreenXx$g_iScreenY, $g_iScreenBpp BPP) ..."
[31634]43
44 ; Enumerate all video devices (up to 32 at the moment, use key "MaxObjectNumber" key later)
45 ${For} $i 0 32
46
47 ReadRegStr $tmp HKLM "HARDWARE\DEVICEMAP\VIDEO" "\Device\Video$i"
48 StrCmp $tmp "" dev_not_found
49
50 ; Extract path to video settings
51 ; Ex: \Registry\Machine\System\CurrentControlSet\Control\Video\{28B74D2B-F0A9-48E0-8028-D76F6BB1AE65}\0000
52 ; Or: \Registry\Machine\System\CurrentControlSet\Control\Video\vboxvideo\Device0
53 ; Result: Machine\System\CurrentControlSet\Control\Video\{28B74D2B-F0A9-48E0-8028-D76F6BB1AE65}\0000
[35651]54 Push "$tmp" ; String
55 Push "\" ; SubString
56 Push ">" ; SearchDirection
57 Push ">" ; StrInclusionDirection
58 Push "0" ; IncludeSubString
59 Push "2" ; Loops
60 Push "0" ; CaseSensitive
[31634]61 Call StrStrAdv
[35651]62 Pop $tmppath ; $1 only contains the full path
[31634]63 StrCmp $tmppath "" dev_not_found
64
65 ; Get device description
66 ReadRegStr $dev_desc HKLM "$tmppath" "Device Description"
67!ifdef _DEBUG
[44417]68 ${LogVerbose} "Registry path: $tmppath"
69 ${LogVerbose} "Registry path to device name: $temp"
[31634]70!endif
[44417]71 ${LogVerbose} "Detected video device: $dev_desc"
[31634]72
73 ${If} $dev_desc == "VirtualBox Graphics Adapter"
[44417]74 ${LogVerbose} "VirtualBox video device found!"
[31634]75 Goto dev_found
76 ${EndIf}
77 ${Next}
78 Goto dev_not_found
79
80dev_found:
81
82 ; If we're on Windows 2000, skip the ID detection ...
[32503]83 ${If} $g_strWinVersion == "2000"
84 Goto change_res
85 ${EndIf}
[31634]86 Goto dev_found_detect_id
87
88dev_found_detect_id:
89
90 StrCpy $i 0 ; Start at index 0
[44417]91 ${LogVerbose} "Detecting device ID ..."
[31634]92
93dev_found_detect_id_loop:
94
95 ; Resolve real path to hardware instance "{GUID}"
96 EnumRegKey $dev_id HKLM "SYSTEM\CurrentControlSet\Control\Video" $i
97 StrCmp $dev_id "" dev_not_found ; No more entries? Jump out
98!ifdef _DEBUG
[44417]99 ${LogVerbose} "Got device ID: $dev_id"
[31634]100!endif
101 ReadRegStr $dev_desc HKLM "SYSTEM\CurrentControlSet\Control\Video\$dev_id\0000" "Device Description" ; Try to read device name
102 ${If} $dev_desc == "VirtualBox Graphics Adapter"
[44417]103 ${LogVerbose} "Device ID of $dev_desc: $dev_id"
[31634]104 Goto change_res
105 ${EndIf}
106
107 IntOp $i $i + 1 ; Increment index
108 goto dev_found_detect_id_loop
109
110dev_not_found:
111
[44417]112 ${LogVerbose} "No VirtualBox video device (yet) detected! No custom mode set."
[31634]113 Goto exit
114
115change_res:
116
117!ifdef _DEBUG
[44417]118 ${LogVerbose} "Device description: $dev_desc"
119 ${LogVerbose} "Device ID: $dev_id"
[31634]120!endif
121
122 Var /GLOBAL reg_path_device
123 Var /GLOBAL reg_path_monitor
124
[44417]125 ${LogVerbose} "Custom mode set: Platform is Windows $g_strWinVersion"
[32503]126 ${If} $g_strWinVersion == "2000"
127 ${OrIf} $g_strWinVersion == "Vista"
[31634]128 StrCpy $reg_path_device "SYSTEM\CurrentControlSet\SERVICES\VBoxVideo\Device0"
129 StrCpy $reg_path_monitor "SYSTEM\CurrentControlSet\SERVICES\VBoxVideo\Device0\Mon00000001"
[32503]130 ${ElseIf} $g_strWinVersion == "XP"
131 ${OrIf} $g_strWinVersion == "7"
[38751]132 ${OrIf} $g_strWinVersion == "8"
[46845]133 ${OrIf} $g_strWinVersion == "8_1"
[53008]134 ${OrIf} $g_strWinVersion == "10"
[31634]135 StrCpy $reg_path_device "SYSTEM\CurrentControlSet\Control\Video\$dev_id\0000"
136 StrCpy $reg_path_monitor "SYSTEM\CurrentControlSet\Control\VIDEO\$dev_id\0000\Mon00000001"
137 ${Else}
[44417]138 ${LogVerbose} "Custom mode set: Windows $g_strWinVersion not supported yet"
[31634]139 Goto exit
140 ${EndIf}
141
142 ; Write the new value in the adapter config (VBoxVideo.sys) using hex values in binary format
[96687]143 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" registry write HKLM $reg_path_device CustomXRes REG_BIN $g_iScreenX DWORD" 'non-zero-exitcode=abort'
144 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" registry write HKLM $reg_path_device CustomYRes REG_BIN $g_iScreenY DWORD" 'non-zero-exitcode=abort'
145 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" registry write HKLM $reg_path_device CustomBPP REG_BIN $g_iScreenBpp DWORD" 'non-zero-exitcode=abort'
[31634]146
147 ; ... and tell Windows to use that mode on next start!
148 WriteRegDWORD HKCC $reg_path_device "DefaultSettings.XResolution" "$g_iScreenX"
149 WriteRegDWORD HKCC $reg_path_device "DefaultSettings.YResolution" "$g_iScreenY"
150 WriteRegDWORD HKCC $reg_path_device "DefaultSettings.BitsPerPixel" "$g_iScreenBpp"
151
152 WriteRegDWORD HKCC $reg_path_monitor "DefaultSettings.XResolution" "$g_iScreenX"
153 WriteRegDWORD HKCC $reg_path_monitor "DefaultSettings.YResolution" "$g_iScreenY"
154 WriteRegDWORD HKCC $reg_path_monitor "DefaultSettings.BitsPerPixel" "$g_iScreenBpp"
155
[44417]156 ${LogVerbose} "Custom mode set to $g_iScreenXx$g_iScreenY, $g_iScreenBpp BPP on next restart."
[31634]157
158exit:
159
160FunctionEnd
161
[96772]162!macro W2K_CleanupCerts un
163;;
164; Removes certificates and the certificate utility.
165;
166; Since the certificate collection depends on the build config and have
167; changed over time, we always clean it up before installation.
168;
169Function ${un}W2K_CleanupCerts
170 Delete /REBOOTOK "$INSTDIR\cert\vbox.cer"
171 Delete /REBOOTOK "$INSTDIR\cert\vbox-root.cer"
172 Delete /REBOOTOK "$INSTDIR\cert\vbox-timestamp-root.cer"
173 Delete /REBOOTOK "$INSTDIR\cert\vbox-sha1.cer"
174 Delete /REBOOTOK "$INSTDIR\cert\vbox-sha1-root.cer"
175 Delete /REBOOTOK "$INSTDIR\cert\vbox-sha1-timestamp-root.cer"
176 Delete /REBOOTOK "$INSTDIR\cert\vbox-sha256.cer"
177 Delete /REBOOTOK "$INSTDIR\cert\vbox-sha256-root.cer"
178 Delete /REBOOTOK "$INSTDIR\cert\vbox-sha256-timestamp-root.cer"
179 Delete /REBOOTOK "$INSTDIR\cert\vbox-sha256-r3.cer"
180 Delete /REBOOTOK "$INSTDIR\cert\vbox-sha256-r3-root.cer"
181 Delete /REBOOTOK "$INSTDIR\cert\vbox-sha256-r3-timestamp-root.cer"
182 Delete /REBOOTOK "$INSTDIR\cert\vbox-legacy-timestamp-ca.cer"
183 Delete /REBOOTOK "$INSTDIR\cert\root-versign-pca3-g5.cer" ; only for a while during 7.0 beta phase
184 Delete /REBOOTOK "$INSTDIR\cert\root-digicert-assured-id.cer" ; ditto
185 Delete /REBOOTOK "$INSTDIR\cert\root-digicert-high-assurance-ev.cer" ; ditto
186 Delete /REBOOTOK "$INSTDIR\cert\VBoxCertUtil.exe"
187 RMDir /REBOOTOK "$INSTDIR\cert"
188FunctionEnd
189!macroend
190!insertmacro W2K_CleanupCerts ""
191!insertmacro W2K_CleanupCerts "un."
192
193
[96774]194!macro W2K_CleanupObsoleteFiles un
195;;
196; Removes files we're no longer shipping.
197;
198; During installation this step should be taken before copy files over in case
199; the list gets out of sync and we start shipping files on it. That way it
200; doesn't much matter as the file will be restore afterwards.
201;
202Function ${un}W2K_CleanupObsoleteFiles
203 Delete /REBOOTOK "$INSTDIR\VBoxWHQLFake.exe" ; Removed in r152293 (runup to 7.0).
204 Delete /REBOOTOK "$INSTDIR\VBoxICD.dll" ; Removed in r151892 (runup to 7.0).
205FunctionEnd
206!macroend
207!insertmacro W2K_CleanupObsoleteFiles ""
208!insertmacro W2K_CleanupObsoleteFiles "un."
209
210
[96692]211!ifdef VBOX_SIGN_ADDITIONS
212;;
[96766]213; Run VBoxCertUtil to install the given certificate if absent on the system.
[96692]214;
[96766]215; @param pop1 The certificate file.
216; @param pop2 Short description.
[96692]217;
[96766]218Function W2K_InstallRootCert
219 ; Prolog: Save $0 & $1 and move the parameters into them.
[96692]220 Push $0
[96766]221 Exch 2
[96692]222 Push $1
[96766]223 Exch 2
224 Pop $0 ; Filename
225 Pop $1 ; Description.
[96692]226
[96766]227 ; Do the work.
228 ${LogVerbose} "Installing $1 ('$0') if missing ..."
229 ${CmdExecute} "$\"$INSTDIR\cert\VBoxCertUtil.exe$\" add-root --add-if-new $\"$INSTDIR\cert\$0$\"" 'non-zero-exitcode=abort'
[96692]230
[96766]231 ; Epilog: Restore $0 & $1 (we return nothing).
[96692]232 Pop $2
233 Pop $1
234 Pop $0
235FunctionEnd
236!endif
237
[31634]238Function W2K_Prepare
[96692]239 ; Save registers
240 Push $R0
241 Push $R1
242 Push $R2
243 Push $R3
244 Push $R4
[31634]245
[33087]246 ${If} $g_bNoVBoxServiceExit == "false"
247 ; Stop / kill VBoxService
248 Call StopVBoxService
249 ${EndIf}
[31634]250
[33970]251 ${If} $g_bNoVBoxTrayExit == "false"
252 ; Stop / kill VBoxTray
253 Call StopVBoxTray
254 ${EndIf}
[31634]255
256 ; Delete VBoxService from registry
257 DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Run" "VBoxService"
258
259 ; Delete old VBoxService.exe from install directory (replaced by VBoxTray.exe)
260 Delete /REBOOTOK "$INSTDIR\VBoxService.exe"
261
[96772]262 ; Ditch old certificates and stuff to avoid confusion if we now ship fewer / different files.
263 Call W2K_CleanupCerts
264
[96692]265!ifdef VBOX_SIGN_ADDITIONS
266 ;
[96766]267 ; When installing signed GAs, we need to make sure that the associated root
268 ; certs are present, we use VBoxCertUtil for this task.
[96692]269 ;
270 ${LogVerbose} "Installing VBoxCertUtil.exe ..."
271 SetOutPath "$INSTDIR\cert"
272 FILE "$%PATH_OUT%\bin\additions\VBoxCertUtil.exe"
[96766]273 !if "$%VBOX_GA_CERT_ROOT_SHA1%" != "none"
274 FILE "$%PATH_OUT%\bin\additions\$%VBOX_GA_CERT_ROOT_SHA1%"
[96692]275 !endif
[96766]276 !if "$%VBOX_GA_CERT_ROOT_SHA1_TS%" != "none"
277 FILE "$%PATH_OUT%\bin\additions\$%VBOX_GA_CERT_ROOT_SHA1_TS%"
[96692]278 !endif
[96766]279 !if "$%VBOX_GA_CERT_ROOT_SHA2%" != "none"
280 FILE "$%PATH_OUT%\bin\additions\$%VBOX_GA_CERT_ROOT_SHA2%"
[96692]281 !endif
[96766]282 !if "$%VBOX_GA_CERT_ROOT_SHA2_TS%" != "none"
283 FILE "$%PATH_OUT%\bin\additions\$%VBOX_GA_CERT_ROOT_SHA2_TS%"
[96692]284 !endif
[96766]285 !if "$%VBOX_GA_CERT_ROOT_SHA2_R3%" != "none"
286 FILE "$%PATH_OUT%\bin\additions\$%VBOX_GA_CERT_ROOT_SHA2_R3%"
[96692]287 !endif
[96766]288 !if "$%VBOX_GA_CERT_ROOT_SHA2_R3_TS%" != "none"
289 FILE "$%PATH_OUT%\bin\additions\$%VBOX_GA_CERT_ROOT_SHA2_R3_TS%"
290 !endif
[96692]291
292 ;
[96766]293 ; Install the certificates if missing.
[96692]294 ;
[96766]295 !if "$%VBOX_GA_CERT_ROOT_SHA1%" != "none"
296 Push "SHA-1 root"
297 Push "$%VBOX_GA_CERT_ROOT_SHA1%"
298 Call W2K_InstallRootCert
299 !endif
300 !if "$%VBOX_GA_CERT_ROOT_SHA1_TS%" != "none"
301 !ifdef VBOX_WITH_VBOX_LEGACY_TS_CA
302 ; If not explicitly specified, let the detected Windows version decide what
303 ; to do. On guest OSes < Windows 10 we always go for the PreW10 security
304 ; catalog files (.cat) and there we install our legacy timestamp CA by default.
[96696]305 ${If} $g_bInstallTimestampCA == "unset"
306 ${AndIf} $g_strWinVersion != "10"
307 StrCpy $g_bInstallTimestampCA "true"
[95753]308 ${EndIf}
[96696]309 ${If} $g_bInstallTimestampCA == "true"
[96766]310 Push "SHA-1 timestamp root"
311 Push "$%VBOX_GA_CERT_ROOT_SHA1_TS%"
312 Call W2K_InstallRootCert
[95730]313 ${EndIf}
[96766]314 !else
315 Push "SHA-1 timestamp root"
316 Push "$%VBOX_GA_CERT_ROOT_SHA1_TS%"
317 Call W2K_InstallRootCert
318 !endif ; VBOX_WITH_VBOX_LEGACY_TS_CA
319 !endif
[95697]320
[96766]321 ; XP sp3 and later can make use of SHA-2 certs. Windows 2000 cannot.
322 ; Note that VBOX_GA_CERT_ROOT_SHA1 may be a SHA-2 cert, the hash algorithm
323 ; refers to the windows signature structures not the certificate.
324 ${If} $g_strWinVersion != "2000"
325 !if "$%VBOX_GA_CERT_ROOT_SHA2%" != "none"
326 Push "SHA-2 root"
327 Push "$%VBOX_GA_CERT_ROOT_SHA2%"
328 Call W2K_InstallRootCert
329 !endif
330 !if "$%VBOX_GA_CERT_ROOT_SHA2_TS%" != "none"
331 Push "SHA-2 timestamp root"
332 Push "$%VBOX_GA_CERT_ROOT_SHA2_TS%"
333 Call W2K_InstallRootCert
334 !endif
335 !if "$%VBOX_GA_CERT_ROOT_SHA2_R3%" != "none"
336 Push "SHA-2 ring-3 root"
337 Push "$%VBOX_GA_CERT_ROOT_SHA2_R3%"
338 Call W2K_InstallRootCert
339 !endif
340 !if "$%VBOX_GA_CERT_ROOT_SHA2_R3_TS%" != "none"
341 Push "SHA-2 ring-3 timestamp root"
342 Push "$%VBOX_GA_CERT_ROOT_SHA2_R3_TS%"
343 Call W2K_InstallRootCert
344 !endif
345 ${EndIf}
346
347 ; Log the certificates present on the system.
348 ${CmdExecute} "$\"$INSTDIR\cert\VBoxCertUtil.exe$\" display-all" 'non-zero-exitcode=log'
[96692]349!endif ; VBOX_SIGN_ADDITIONS
350
351 ; Restore registers
352 Pop $R4
353 Pop $R3
354 Pop $R2
355 Pop $R1
356 Pop $R0
[31634]357FunctionEnd
358
359Function W2K_CopyFiles
360
[34352]361 Push $0
[31634]362 SetOutPath "$INSTDIR"
363
364 ; Video driver
365 FILE "$%PATH_OUT%\bin\additions\VBoxVideo.sys"
366 FILE "$%PATH_OUT%\bin\additions\VBoxDisp.dll"
367
368 ; Mouse driver
369 FILE "$%PATH_OUT%\bin\additions\VBoxMouse.sys"
370 FILE "$%PATH_OUT%\bin\additions\VBoxMouse.inf"
371!ifdef VBOX_SIGN_ADDITIONS
[94160]372 ${If} $g_strWinVersion == "10"
373 FILE "$%PATH_OUT%\bin\additions\VBoxMouse.cat"
374 ${Else}
375 FILE "/oname=VBoxMouse.cat" "$%PATH_OUT%\bin\additions\VBoxMouse-PreW10.cat"
376 ${EndIf}
[31634]377!endif
378
379 ; Guest driver
380 FILE "$%PATH_OUT%\bin\additions\VBoxGuest.sys"
381 FILE "$%PATH_OUT%\bin\additions\VBoxGuest.inf"
[98626]382!if $%KBUILD_TARGET_ARCH% == "x86"
383 ${If} $g_strEarlyNTDrvInfix != ""
384 FILE "$%PATH_OUT%\bin\additions\VBoxGuestEarlyNT.inf"
385 !ifdef VBOX_SIGN_ADDITIONS
386 FILE "$%PATH_OUT%\bin\additions\VBoxGuestEarlyNT.cat"
387 !endif
388 ${EndIf}
389!endif
[31634]390!ifdef VBOX_SIGN_ADDITIONS
[94160]391 ${If} $g_strWinVersion == "10"
392 FILE "$%PATH_OUT%\bin\additions\VBoxGuest.cat"
393 ${Else}
394 FILE "/oname=VBoxGuest.cat" "$%PATH_OUT%\bin\additions\VBoxGuest-PreW10.cat"
395 ${EndIf}
[31634]396!endif
397
398 ; Guest driver files
399 FILE "$%PATH_OUT%\bin\additions\VBoxTray.exe"
[96686]400 FILE "$%PATH_OUT%\bin\additions\VBoxControl.exe"
[31634]401
[96686]402 ; Misc
[89709]403!ifdef VBOX_WITH_ADDITIONS_SHIPPING_AUDIO_TEST
404 FILE "$%PATH_OUT%\bin\additions\VBoxAudioTest.exe"
405!endif
406
[31634]407 SetOutPath $g_strSystemDir
408
409 ; VBoxService
[43069]410 ${If} $g_bNoVBoxServiceExit == "false"
411 ; VBoxService has been terminated before, so just install the file
412 ; in the regular way
413 FILE "$%PATH_OUT%\bin\additions\VBoxService.exe"
414 ${Else}
415 ; VBoxService is in use and wasn't terminated intentionally. So extract the
416 ; new version into a temporary location and install it on next reboot
417 Push $0
418 ClearErrors
419 GetTempFileName $0
420 IfErrors 0 +3
[44417]421 ${LogVerbose} "Error getting temp file for VBoxService.exe"
[43069]422 StrCpy "$0" "$INSTDIR\VBoxServiceTemp.exe"
[44417]423 ${LogVerbose} "VBoxService is in use, will be installed on next reboot (from '$0')"
[43069]424 File "/oname=$0" "$%PATH_OUT%\bin\additions\VBoxService.exe"
425 IfErrors 0 +2
[44417]426 ${LogVerbose} "Error copying VBoxService.exe to '$0'"
[43069]427 Rename /REBOOTOK "$0" "$g_strSystemDir\VBoxService.exe"
428 IfErrors 0 +2
[44417]429 ${LogVerbose} "Error renaming '$0' to '$g_strSystemDir\VBoxService.exe'"
[43069]430 Pop $0
431 ${EndIf}
[31634]432
[35319]433!if $%VBOX_WITH_WDDM% == "1"
434 ${If} $g_bWithWDDM == "true"
435 ; WDDM Video driver
436 SetOutPath "$INSTDIR"
[35651]437
[71323]438 !ifdef VBOX_SIGN_ADDITIONS
[94160]439 ${If} $g_strWinVersion == "10"
440 FILE "$%PATH_OUT%\bin\additions\VBoxWddm.cat"
441 ${Else}
442 FILE "/oname=VBoxWddm.cat" "$%PATH_OUT%\bin\additions\VBoxWddm-PreW10.cat"
443 ${EndIf}
[71323]444 !endif
445 FILE "$%PATH_OUT%\bin\additions\VBoxWddm.sys"
446 FILE "$%PATH_OUT%\bin\additions\VBoxWddm.inf"
[42142]447
[35319]448 FILE "$%PATH_OUT%\bin\additions\VBoxDispD3D.dll"
[94485]449 !if $%VBOX_WITH_WDDM_DX% == "1"
450 FILE "$%PATH_OUT%\bin\additions\VBoxDX.dll"
451 !endif
[75445]452 !if $%VBOX_WITH_MESA3D% == "1"
453 FILE "$%PATH_OUT%\bin\additions\VBoxNine.dll"
454 FILE "$%PATH_OUT%\bin\additions\VBoxSVGA.dll"
455 FILE "$%PATH_OUT%\bin\additions\VBoxGL.dll"
456 !endif
[34310]457
[84945]458 !if $%KBUILD_TARGET_ARCH% == "amd64"
[35319]459 FILE "$%PATH_OUT%\bin\additions\VBoxDispD3D-x86.dll"
[94485]460 !if $%VBOX_WITH_WDDM_DX% == "1"
461 FILE "$%PATH_OUT%\bin\additions\VBoxDX-x86.dll"
462 !endif
[75445]463 !if $%VBOX_WITH_MESA3D% == "1"
464 FILE "$%PATH_OUT%\bin\additions\VBoxNine-x86.dll"
465 FILE "$%PATH_OUT%\bin\additions\VBoxSVGA-x86.dll"
466 FILE "$%PATH_OUT%\bin\additions\VBoxGL-x86.dll"
467 !endif
[84945]468 !endif ; $%KBUILD_TARGET_ARCH% == "amd64"
[35651]469
[35319]470 ${EndIf}
471!endif ; $%VBOX_WITH_WDDM% == "1"
472
[34352]473 Pop $0
474
[31634]475FunctionEnd
476
477
478Function W2K_InstallFiles
479
480 ; The Shared Folder IFS goes to the system directory
[84972]481 !if $%BUILD_TARGET_ARCH% == "x86"
482 ; On x86 we have to use a different shared folder driver linked against an older RDBSS for Windows 7 and older.
483 ${If} $g_strWinVersion == "2000"
[93262]484 ${OrIf} $g_strWinVersion == "XP"
485 ${OrIf} $g_strWinVersion == "2003"
[84972]486 ${OrIf} $g_strWinVersion == "Vista"
487 ${OrIf} $g_strWinVersion == "7"
488 !insertmacro ReplaceDLL "$%PATH_OUT%\bin\additions\VBoxSFW2K.sys" "$g_strSystemDir\drivers\VBoxSF.sys" "$INSTDIR"
489 ${Else}
490 !insertmacro ReplaceDLL "$%PATH_OUT%\bin\additions\VBoxSF.sys" "$g_strSystemDir\drivers\VBoxSF.sys" "$INSTDIR"
491 ${EndIf}
492 !else
493 !insertmacro ReplaceDLL "$%PATH_OUT%\bin\additions\VBoxSF.sys" "$g_strSystemDir\drivers\VBoxSF.sys" "$INSTDIR"
494 !endif
495
[31634]496 !insertmacro ReplaceDLL "$%PATH_OUT%\bin\additions\VBoxMRXNP.dll" "$g_strSystemDir\VBoxMRXNP.dll" "$INSTDIR"
497 AccessControl::GrantOnFile "$g_strSystemDir\VBoxMRXNP.dll" "(BU)" "GenericRead"
[84945]498 !if $%KBUILD_TARGET_ARCH% == "amd64"
[40136]499 ; Only 64-bit installer: Copy the 32-bit DLL for 32 bit applications.
500 !insertmacro ReplaceDLL "$%PATH_OUT%\bin\additions\VBoxMRXNP-x86.dll" "$g_strSysWow64\VBoxMRXNP.dll" "$INSTDIR"
501 AccessControl::GrantOnFile "$g_strSysWow64\VBoxMRXNP.dll" "(BU)" "GenericRead"
502 !endif
[31634]503
504 ; The VBoxTray hook DLL also goes to the system directory; it might be locked
505 !insertmacro ReplaceDLL "$%PATH_OUT%\bin\additions\VBoxHook.dll" "$g_strSystemDir\VBoxHook.dll" "$INSTDIR"
506 AccessControl::GrantOnFile "$g_strSystemDir\VBoxHook.dll" "(BU)" "GenericRead"
507
[44417]508 ${LogVerbose} "Installing drivers ..."
[31634]509
[35651]510 Push $0 ; For fetching results
511
[35679]512 SetOutPath "$INSTDIR"
[35678]513
[35700]514 ${If} $g_bNoGuestDrv == "false"
[44417]515 ${LogVerbose} "Installing guest driver ..."
[98626]516 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" driver install $\"$INSTDIR\VBoxGuest$g_strEarlyNTDrvInfix.inf$\" $\"$INSTDIR\install_drivers.log$\"" 'non-zero-exitcode=abort'
[35679]517 ${Else}
[44352]518 ${LogVerbose} "Guest driver installation skipped!"
[35679]519 ${EndIf}
[35678]520
[35700]521 ${If} $g_bNoVideoDrv == "false"
[35679]522 ${If} $g_bWithWDDM == "true"
[71323]523 ${LogVerbose} "Installing WDDM video driver..."
[96687]524 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" driver install $\"$INSTDIR\VBoxWddm.inf$\" $\"$INSTDIR\install_drivers.log$\"" 'non-zero-exitcode=abort'
[35679]525 ${Else}
[44417]526 ${LogVerbose} "Installing video driver ..."
[98626]527 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" driver install $\"$INSTDIR\VBoxVideo$g_strEarlyNTDrvInfix.inf$\" $\"$INSTDIR\install_drivers.log$\"" 'non-zero-exitcode=abort'
[35679]528 ${EndIf}
529 ${Else}
[44352]530 ${LogVerbose} "Video driver installation skipped!"
[35679]531 ${EndIf}
[31634]532
[96686]533 ;
534 ; Mouse driver.
535 ;
[35700]536 ${If} $g_bNoMouseDrv == "false"
[44417]537 ${LogVerbose} "Installing mouse driver ..."
[43072]538 ; The mouse filter does not contain any device IDs but a "DefaultInstall" section;
539 ; so this .INF file needs to be installed using "InstallHinfSection" which is implemented
540 ; with VBoxDrvInst's "driver executeinf" routine
[96687]541 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" driver install $\"$INSTDIR\VBoxMouse.inf$\"" 'non-zero-exitcode=abort'
[32241]542 ${Else}
[44352]543 ${LogVerbose} "Mouse driver installation skipped!"
[32241]544 ${EndIf}
[31634]545
[96686]546 ;
[31634]547 ; Create the VBoxService service
548 ; No need to stop/remove the service here! Do this only on uninstallation!
[96686]549 ;
[44417]550 ${LogVerbose} "Installing VirtualBox service ..."
[96687]551 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" service create $\"VBoxService$\" $\"VirtualBox Guest Additions Service$\" 16 2 $\"%SystemRoot%\System32\VBoxService.exe$\" $\"Base$\"" 'non-zero-exitcode=abort'
[31634]552
553 ; Set service description
554 WriteRegStr HKLM "SYSTEM\CurrentControlSet\Services\VBoxService" "Description" "Manages VM runtime information, time synchronization, remote sysprep execution and miscellaneous utilities for guest operating systems."
555
556
[96686]557 ;
558 ; Shared folders.
559 ;
[44417]560 ${LogVerbose} "Installing Shared Folders service ..."
[31634]561
562 ; Create the Shared Folders service ...
563 ; No need to stop/remove the service here! Do this only on uninstallation!
[96687]564 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" service create $\"VBoxSF$\" $\"VirtualBox Shared Folders$\" 2 1 $\"\SystemRoot\System32\drivers\VBoxSF.sys$\" $\"NetworkProvider$\"" 'non-zero-exitcode=abort'
[31634]565
566 ; ... and the link to the network provider
567 WriteRegStr HKLM "SYSTEM\CurrentControlSet\Services\VBoxSF\NetworkProvider" "DeviceName" "\Device\VBoxMiniRdr"
568 WriteRegStr HKLM "SYSTEM\CurrentControlSet\Services\VBoxSF\NetworkProvider" "Name" "VirtualBox Shared Folders"
569 WriteRegStr HKLM "SYSTEM\CurrentControlSet\Services\VBoxSF\NetworkProvider" "ProviderPath" "$SYSDIR\VBoxMRXNP.dll"
570
571 ; Add default network providers (if not present or corrupted)
[96687]572 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" netprovider add WebClient" 'non-zero-exitcode=abort'
573 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" netprovider add LanmanWorkstation" 'non-zero-exitcode=abort'
574 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" netprovider add RDPNP" 'non-zero-exitcode=abort'
[31634]575
576 ; Add the shared folders network provider
[44417]577 ${LogVerbose} "Adding network provider (Order = $g_iSfOrder) ..."
[96687]578 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" netprovider add VBoxSF $g_iSfOrder" 'non-zero-exitcode=abort'
[31634]579
580
[35651]581 Pop $0
582
[31634]583FunctionEnd
584
585Function W2K_Main
586
587 SetOutPath "$INSTDIR"
588 SetOverwrite on
589
590 Call W2K_Prepare
[96774]591 Call W2K_CleanupObsoleteFiles
[31634]592 Call W2K_CopyFiles
593 Call W2K_InstallFiles
594 Call W2K_SetVideoResolution
595
596FunctionEnd
597
598!macro W2K_UninstallInstDir un
599Function ${un}W2K_UninstallInstDir
600
601 Delete /REBOOTOK "$INSTDIR\VBoxVideo.sys"
602 Delete /REBOOTOK "$INSTDIR\VBoxVideo.inf"
603 Delete /REBOOTOK "$INSTDIR\VBoxVideo.cat"
[98626]604 Delete /REBOOTOK "$INSTDIR\VBoxVideoEarlyNT.inf"
605 Delete /REBOOTOK "$INSTDIR\VBoxVideoEarlyNT.cat"
[31634]606 Delete /REBOOTOK "$INSTDIR\VBoxDisp.dll"
607
608 Delete /REBOOTOK "$INSTDIR\VBoxMouse.sys"
609 Delete /REBOOTOK "$INSTDIR\VBoxMouse.inf"
610 Delete /REBOOTOK "$INSTDIR\VBoxMouse.cat"
611
612 Delete /REBOOTOK "$INSTDIR\VBoxTray.exe"
613
614 Delete /REBOOTOK "$INSTDIR\VBoxGuest.sys"
615 Delete /REBOOTOK "$INSTDIR\VBoxGuest.inf"
616 Delete /REBOOTOK "$INSTDIR\VBoxGuest.cat"
[98626]617 Delete /REBOOTOK "$INSTDIR\VBoxGuestEarlyNT.inf"
618 Delete /REBOOTOK "$INSTDIR\VBoxGuestEarlyNT.cat"
[31634]619
[35719]620 Delete /REBOOTOK "$INSTDIR\VBCoInst.dll" ; Deprecated, does not get installed anymore
[31634]621 Delete /REBOOTOK "$INSTDIR\VBoxControl.exe"
[35719]622 Delete /REBOOTOK "$INSTDIR\VBoxService.exe" ; Deprecated, does not get installed anymore
[35651]623
[35319]624!if $%VBOX_WITH_WDDM% == "1"
[78389]625 Delete /REBOOTOK "$INSTDIR\VBoxWddm.cat"
626 Delete /REBOOTOK "$INSTDIR\VBoxWddm.sys"
627 Delete /REBOOTOK "$INSTDIR\VBoxWddm.inf"
[71323]628 ; Obsolete files begin
[78389]629 Delete /REBOOTOK "$INSTDIR\VBoxVideoWddm.cat"
630 Delete /REBOOTOK "$INSTDIR\VBoxVideoWddm.sys"
631 Delete /REBOOTOK "$INSTDIR\VBoxVideoWddm.inf"
632 Delete /REBOOTOK "$INSTDIR\VBoxVideoW8.cat"
633 Delete /REBOOTOK "$INSTDIR\VBoxVideoW8.sys"
634 Delete /REBOOTOK "$INSTDIR\VBoxVideoW8.inf"
[71323]635 ; Obsolete files end
[78389]636 Delete /REBOOTOK "$INSTDIR\VBoxDispD3D.dll"
[94485]637 !if $%VBOX_WITH_WDDM_DX% == "1"
638 Delete /REBOOTOK "$INSTDIR\VBoxDX.dll"
639 !endif
[75445]640 !if $%VBOX_WITH_MESA3D% == "1"
[78389]641 Delete /REBOOTOK "$INSTDIR\VBoxNine.dll"
642 Delete /REBOOTOK "$INSTDIR\VBoxSVGA.dll"
643 Delete /REBOOTOK "$INSTDIR\VBoxICD.dll"
644 Delete /REBOOTOK "$INSTDIR\VBoxGL.dll"
[75445]645 !endif
[31634]646
[78389]647 Delete /REBOOTOK "$INSTDIR\VBoxD3D9wddm.dll"
648 Delete /REBOOTOK "$INSTDIR\wined3dwddm.dll"
[35651]649 ; Try to delete libWine in case it is there from old installation
[78389]650 Delete /REBOOTOK "$INSTDIR\libWine.dll"
[35651]651
[84945]652 !if $%KBUILD_TARGET_ARCH% == "amd64"
[78389]653 Delete /REBOOTOK "$INSTDIR\VBoxDispD3D-x86.dll"
[94485]654 !if $%VBOX_WITH_WDDM_DX% == "1"
655 Delete /REBOOTOK "$INSTDIR\VBoxDX-x86.dll"
656 !endif
[75445]657 !if $%VBOX_WITH_MESA3D% == "1"
[78389]658 Delete /REBOOTOK "$INSTDIR\VBoxNine-x86.dll"
659 Delete /REBOOTOK "$INSTDIR\VBoxSVGA-x86.dll"
660 Delete /REBOOTOK "$INSTDIR\VBoxICD-x86.dll"
661 Delete /REBOOTOK "$INSTDIR\VBoxGL-x86.dll"
[75445]662 !endif
[35319]663
[78389]664 Delete /REBOOTOK "$INSTDIR\VBoxD3D9wddm-x86.dll"
665 Delete /REBOOTOK "$INSTDIR\wined3dwddm-x86.dll"
[84945]666 !endif ; $%KBUILD_TARGET_ARCH% == "amd64"
[35319]667!endif ; $%VBOX_WITH_WDDM% == "1"
668
[96772]669 ; Certificates, utility and directory.
670 Call ${un}W2K_CleanupCerts
671
672 ; Log files
[31634]673 Delete /REBOOTOK "$INSTDIR\install.log"
674 Delete /REBOOTOK "$INSTDIR\install_ui.log"
[96772]675 Delete /REBOOTOK "$INSTDIR\install_drivers.log"
[31634]676
[96774]677 ; Obsolete stuff.
678 Call ${un}W2K_CleanupObsoleteFiles
679
[31634]680FunctionEnd
681!macroend
[96693]682;!insertmacro W2K_UninstallInstDir "" - only .un version used
[31634]683!insertmacro W2K_UninstallInstDir "un."
684
685!macro W2K_Uninstall un
686Function ${un}W2K_Uninstall
687
688 Push $0
689
[35651]690 ; Remove VirtualBox video driver
[44417]691 ${LogVerbose} "Uninstalling video driver ..."
[98626]692 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" driver uninstall $\"$INSTDIR\VBoxVideo$g_strEarlyNTDrvInfix.inf$\"" 'non-zero-exitcode=log'
[96687]693 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" service delete VBoxVideo" 'non-zero-exitcode=log'
[35651]694 Delete /REBOOTOK "$g_strSystemDir\drivers\VBoxVideo.sys"
695 Delete /REBOOTOK "$g_strSystemDir\VBoxDisp.dll"
[31634]696
697 ; Remove video driver
[35319]698!if $%VBOX_WITH_WDDM% == "1"
[42142]699
[71323]700 ${LogVerbose} "Uninstalling WDDM video driver..."
[96687]701 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" driver uninstall $\"$INSTDIR\VBoxWddm.inf$\"" 'non-zero-exitcode=log'
702 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" service delete VBoxWddm" 'non-zero-exitcode=log'
[71323]703 ;misha> @todo driver file removal (as well as service removal) should be done as driver package uninstall
704 ; could be done with "VBoxDrvInst.exe /u", e.g. by passing additional arg to it denoting that driver package is to be uninstalled
705 Delete /REBOOTOK "$g_strSystemDir\drivers\VBoxWddm.sys"
706
707 ; Obsolete files begin
[44417]708 ${LogVerbose} "Uninstalling WDDM video driver for Windows 8..."
[96687]709 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" driver uninstall $\"$INSTDIR\VBoxVideoW8.inf$\"" 'non-zero-exitcode=log'
710 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" service delete VBoxVideoW8" 'non-zero-exitcode=log'
[42142]711 ;misha> @todo driver file removal (as well as service removal) should be done as driver package uninstall
712 ; could be done with "VBoxDrvInst.exe /u", e.g. by passing additional arg to it denoting that driver package is to be uninstalled
713 Delete /REBOOTOK "$g_strSystemDir\drivers\VBoxVideoW8.sys"
714
[44417]715 ${LogVerbose} "Uninstalling WDDM video driver for Windows Vista and 7..."
[96687]716 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" driver uninstall $\"$INSTDIR\VBoxVideoWddm.inf$\"" 'non-zero-exitcode=log'
[35651]717 ; Always try to remove both VBoxVideoWddm & VBoxVideo services no matter what is installed currently
[96687]718 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" service delete VBoxVideoWddm" 'non-zero-exitcode=log'
[35319]719 ;misha> @todo driver file removal (as well as service removal) should be done as driver package uninstall
[35651]720 ; could be done with "VBoxDrvInst.exe /u", e.g. by passing additional arg to it denoting that driver package is to be uninstalled
[35319]721 Delete /REBOOTOK "$g_strSystemDir\drivers\VBoxVideoWddm.sys"
[71323]722 ; Obsolete files end
723
[35319]724 Delete /REBOOTOK "$g_strSystemDir\VBoxDispD3D.dll"
[84945]725 !if $%KBUILD_TARGET_ARCH% == "amd64"
[78389]726 Delete /REBOOTOK "$g_strSysWow64\VBoxDispD3D-x86.dll"
727 !endif
728
[94485]729 !if $%VBOX_WITH_WDDM_DX% == "1"
730 Delete /REBOOTOK "$g_strSystemDir\VBoxDX.dll"
731 !if $%KBUILD_TARGET_ARCH% == "amd64"
732 Delete /REBOOTOK "$g_strSysWow64\VBoxDX-x86.dll"
733 !endif
734 !endif
735
[75445]736 !if $%VBOX_WITH_MESA3D% == "1"
737 Delete /REBOOTOK "$g_strSystemDir\VBoxNine.dll"
738 Delete /REBOOTOK "$g_strSystemDir\VBoxSVGA.dll"
[75566]739 Delete /REBOOTOK "$g_strSystemDir\VBoxICD.dll"
[75445]740 Delete /REBOOTOK "$g_strSystemDir\VBoxGL.dll"
[78389]741
[84945]742 !if $%KBUILD_TARGET_ARCH% == "amd64"
[78389]743 Delete /REBOOTOK "$g_strSysWow64\VBoxNine-x86.dll"
744 Delete /REBOOTOK "$g_strSysWow64\VBoxSVGA-x86.dll"
745 Delete /REBOOTOK "$g_strSysWow64\VBoxICD-x86.dll"
746 Delete /REBOOTOK "$g_strSysWow64\VBoxGL-x86.dll"
747 !endif
[75445]748 !endif
[35319]749!endif ; $%VBOX_WITH_WDDM% == "1"
[32503]750
[35651]751 ; Remove mouse driver
[44417]752 ${LogVerbose} "Removing mouse driver ..."
[96687]753 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" service delete VBoxMouse" 'non-zero-exitcode=log'
[35651]754 Delete /REBOOTOK "$g_strSystemDir\drivers\VBoxMouse.sys"
[96687]755 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" registry delmultisz $\"SYSTEM\CurrentControlSet\Control\Class\{4D36E96F-E325-11CE-BFC1-08002BE10318}$\" $\"UpperFilters$\" $\"VBoxMouse$\"" 'non-zero-exitcode=log'
[35651]756
757 ; Delete the VBoxService service
758 Call ${un}StopVBoxService
[96687]759 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" service delete VBoxService" 'non-zero-exitcode=log'
[35651]760 DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Run" "VBoxService"
761 Delete /REBOOTOK "$g_strSystemDir\VBoxService.exe"
762
[37046]763 ; VBoxGINA
[35651]764 Delete /REBOOTOK "$g_strSystemDir\VBoxGINA.dll"
765 ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon" "GinaDLL"
766 ${If} $0 == "VBoxGINA.dll"
[44417]767 ${LogVerbose} "Removing auto-logon support ..."
[35651]768 DeleteRegValue HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon" "GinaDLL"
769 ${EndIf}
[40768]770 DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon\Notify\VBoxGINA"
[35651]771
772 ; Delete VBoxTray
773 Call ${un}StopVBoxTray
774 DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Run" "VBoxTray"
775
776 ; Remove guest driver
[44417]777 ${LogVerbose} "Removing guest driver ..."
[98626]778 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" driver uninstall $\"$INSTDIR\VBoxGuest$g_strEarlyNTDrvInfix.inf$\"" 'non-zero-exitcode=log'
[35651]779
[96687]780 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" service delete VBoxGuest" 'non-zero-exitcode=log'
[35651]781 Delete /REBOOTOK "$g_strSystemDir\drivers\VBoxGuest.sys"
[35719]782 Delete /REBOOTOK "$g_strSystemDir\VBCoInst.dll" ; Deprecated, does not get installed anymore
[35651]783 Delete /REBOOTOK "$g_strSystemDir\VBoxTray.exe"
784 Delete /REBOOTOK "$g_strSystemDir\VBoxHook.dll"
785 DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Run" "VBoxTray" ; Remove VBoxTray autorun
786 Delete /REBOOTOK "$g_strSystemDir\VBoxControl.exe"
787
788 ; Remove shared folders driver
[44417]789 ${LogVerbose} "Removing shared folders driver ..."
[96687]790 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" netprovider remove VBoxSF" 'non-zero-exitcode=log'
791 ${CmdExecute} "$\"$INSTDIR\VBoxDrvInst.exe$\" service delete VBoxSF" 'non-zero-exitcode=log'
[35719]792 Delete /REBOOTOK "$g_strSystemDir\VBoxMRXNP.dll" ; The network provider DLL will be locked
[84945]793 !if $%KBUILD_TARGET_ARCH% == "amd64"
[40136]794 ; Only 64-bit installer: Also remove 32-bit DLLs on 64-bit target arch in Wow64 node
795 Delete /REBOOTOK "$g_strSysWow64\VBoxMRXNP.dll"
796 !endif ; amd64
[35651]797 Delete /REBOOTOK "$g_strSystemDir\drivers\VBoxSF.sys"
798
[31634]799 Pop $0
800
801FunctionEnd
802!macroend
[96694]803!ifndef UNINSTALLER_ONLY
804 !insertmacro W2K_Uninstall ""
805!endif
[31634]806!insertmacro W2K_Uninstall "un."
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use