Repository: kirb/LegacyUpdate
Branch: main
Commit: aa9588ac9647
Files: 179
Total size: 1.4 MB
Directory structure:
gitextract_cbt5iapr/
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── 01-bug_report.yml
│ │ ├── 02-update_issue.yml
│ │ ├── 03-download_center_issue.yml
│ │ ├── 04-feature_suggestion.yml
│ │ └── config.yml
│ └── workflows/
│ ├── build-nt4.yml
│ └── build.yml
├── .gitignore
├── .idea/
│ └── .idea.LegacyUpdate/
│ └── .idea/
│ ├── .gitignore
│ ├── discord.xml
│ ├── indexLayout.xml
│ └── vcs.xml
├── .vscode/
│ ├── c_cpp_properties.json
│ └── settings.json
├── LICENSE.md
├── LegacyUpdate/
│ ├── ClassFactory.cpp
│ ├── ClassFactory.h
│ ├── Compat.cpp
│ ├── Compat.h
│ ├── ElevationHelper.cpp
│ ├── ElevationHelper.h
│ ├── IUpdateInstaller4.h
│ ├── LaunchUpdateSite.cpp
│ ├── LegacyUpdate.def
│ ├── LegacyUpdate.idl
│ ├── LegacyUpdate.rc
│ ├── LegacyUpdate.vcxproj
│ ├── LegacyUpdate.vcxproj.filters
│ ├── LegacyUpdateCtrl.cpp
│ ├── LegacyUpdateCtrl.h
│ ├── Makefile
│ ├── NGen.cpp
│ ├── NGen.h
│ ├── ProductName.cpp
│ ├── ProductName.h
│ ├── ProgressBarControl.cpp
│ ├── ProgressBarControl.h
│ ├── ProgressBarControl.html
│ ├── Utils.cpp
│ ├── Utils.h
│ ├── dlldatax.c
│ ├── dlldatax.h
│ ├── dllmain.cpp
│ ├── dllmain.h
│ ├── resource.h
│ ├── stdafx.h
│ ├── wuapi.idl
│ ├── wuerror.mc
│ └── wuguid.cpp
├── LegacyUpdate.sln
├── Makefile
├── README.md
├── build/
│ ├── fix-nsis.sh
│ ├── get-nt4-patches.sh
│ ├── getvc.cmd
│ ├── shared.mk
│ ├── sign.cmd
│ └── sign.sh
├── include/
│ ├── com/
│ │ ├── ComClass.h
│ │ ├── ComPtr.h
│ │ ├── IDispatchImpl.h
│ │ ├── IOleInPlaceActiveObjectImpl.h
│ │ ├── IOleInPlaceObjectImpl.h
│ │ ├── IOleObjectImpl.h
│ │ ├── IQuickActivateImpl.h
│ │ ├── IUnknownImpl.h
│ │ ├── IViewObjectExImpl.h
│ │ └── helpers.h
│ ├── com.h
│ ├── licdll.h
│ ├── licdll.idl
│ ├── nsis/
│ │ ├── api.h
│ │ ├── nsis_tchar.h
│ │ ├── pluginapi.c
│ │ └── pluginapi.h
│ ├── slpublic.h
│ ├── wuapi.h
│ └── wuerror.h
├── launcher/
│ ├── CplTasks.xml
│ ├── InitRunOnce.c
│ ├── LaunchLog.c
│ ├── LaunchUpdateSite.c
│ ├── Makefile
│ ├── MsgBox.c
│ ├── MsgBox.h
│ ├── Options.c
│ ├── RegisterServer.c
│ ├── RegisterServer.h
│ ├── SelfElevate.c
│ ├── SelfElevate.h
│ ├── main.c
│ ├── main.h
│ ├── manifest.xml
│ ├── resource.h
│ ├── resource.rc
│ └── stdafx.h
├── nsisplugin/
│ ├── CloseIEWindows.c
│ ├── DialogInit.c
│ ├── EnableMicrosoftUpdate.c
│ ├── Exec.c
│ ├── IsActivated.c
│ ├── IsAdmin.c
│ ├── IsMultiCPU.c
│ ├── IsServerCore.c
│ ├── Makefile
│ ├── MessageForHresult.c
│ ├── NeedsRootsUpdate.c
│ ├── RebootPage.c
│ ├── TaskbarProgress.c
│ ├── UpdateRoots.c
│ ├── VerifyFileHash.c
│ ├── WriteLog.c
│ ├── main.c
│ ├── main.h
│ ├── resource.h
│ ├── resource.rc
│ ├── sha256.c
│ ├── sha256.h
│ └── stdafx.h
├── setup/
│ ├── ActiveX.inf
│ ├── ActiveXPage.nsh
│ ├── AeroWizard.nsh
│ ├── Common.nsh
│ ├── Constants.nsh
│ ├── Download2KXP.nsh
│ ├── DownloadIE.nsh
│ ├── DownloadNT4.nsh
│ ├── DownloadVista78.nsh
│ ├── DownloadWUA.nsh
│ ├── Makefile
│ ├── NT4USB.nsh
│ ├── PatchInstall.nsh
│ ├── Patches.ini
│ ├── PatchesNT4.ini
│ ├── RebootPage.nsh
│ ├── RunOnce.nsh
│ ├── Strings.nsh
│ ├── UpdateRoots.nsh
│ ├── Win32.nsh
│ ├── WinVer.nsh
│ ├── codebase/
│ │ ├── lucontrl.ddf
│ │ ├── setup.inf
│ │ └── test.html
│ ├── patches/
│ │ └── .gitignore
│ ├── resource.c
│ ├── resource.h
│ ├── resource.rc
│ ├── setup-nt4.nsi
│ ├── setup.nsi
│ └── stdafx.h
└── shared/
├── Exec.c
├── Exec.h
├── HResult.c
├── HResult.h
├── LegacyUpdate.c
├── LegacyUpdate.h
├── LoadImage.c
├── LoadImage.h
├── Log.c
├── Log.h
├── ProductInfo.c
├── ProductInfo.h
├── Registry.c
├── Registry.h
├── Startup.h
├── Trace.h
├── User.h
├── Version.h
├── VersionInfo.h
├── ViewLog.c
├── ViewLog.h
├── WMI.c
├── WMI.h
├── Wow64.c
├── Wow64.h
└── stdafx.h
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
# http://editorconfig.org
root = true
[*]
indent_style = tab
tab_width = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
================================================
FILE: .gitattributes
================================================
* text=auto eol=lf
*.sln eol=crlf
*.vcxproj eol=crlf
================================================
FILE: .github/FUNDING.yml
================================================
github: kirb
ko_fi: adamdemasi
patreon: adamdemasi
custom: ["https://paypal.me/HashbangProductions"]
================================================
FILE: .github/ISSUE_TEMPLATE/01-bug_report.yml
================================================
name: "Bug Report"
description: "Report something that isn’t working as expected"
labels: ["Bug", "Needs triage"]
body:
- type: markdown
attributes:
value: |
Thank you for taking the time to report a bug! To help us resolve the problem quickly, please fill out the details below as best as you can.
- type: markdown
attributes:
value: |
---
### Describe the issue
- type: textarea
id: actual
attributes:
label: "What is happening?"
description: "Describe the issue you’re experiencing. If you have screenshots or log files, please paste them here."
validations:
required: true
- type: textarea
id: expected
attributes:
label: "What should have happened?"
description: "What did you expect to happen instead?"
validations:
required: true
- type: textarea
id: steps
attributes:
label: "Steps to reproduce the issue"
description: "Write the step-by-step instructions that lead to the bug happening."
placeholder: |
1. …
2. …
3. …
validations:
required: true
- type: markdown
attributes:
value: |
---
### Provide as many of these details as possible
- type: dropdown
id: os
attributes:
label: "Operating System"
options:
- Not applicable
- Windows NT 4.0
- Windows 2000
- Windows XP
- Windows Server 2003
- Windows Vista/Windows Server 2008
- Windows 7/Windows Server 2008 R2
- Windows 8/Windows Server 2012
- Windows 8.1/Windows Server 2012 R2
- Windows 10
- Windows 11
validations:
required: true
- type: dropdown
id: sp
attributes:
label: "Service Pack"
options:
- Not applicable
- Don’t know
- RTM
- SP1
- SP2
- SP3
- SP4
- SP5
- SP6
validations:
required: true
- type: dropdown
id: arch
attributes:
label: "Architecture"
description: "Which architecture edition of Windows are you using?"
options:
- Not applicable
- Don’t know
- 32-bit (x86)
- 64-bit (x64)
- Itanium (ia64)
validations:
required: true
- type: dropdown
id: vm
attributes:
label: "Virtual Machine"
description: "Are you running Windows in a virtual machine or emulator?"
options:
- Not applicable
- "No"
- Yes, 86Box
- Yes, Hyper-V
- Yes, Parallels
- Yes, QEMU/KVM
- Yes, UTM
- Yes, VirtualBox
- Yes, Virtual PC
- Yes, VMware
- Yes, something else
validations:
required: true
- type: dropdown
id: hardware
attributes:
label: "Hardware"
description: "Select the option that best describes the hardware you are using."
options:
- Not applicable
- Don’t know
- 386
- 486
- Intel Pentium
- AMD K5/K6
- Cyrix 5x86/6x86
- Intel P6 (Pentium Pro/II/III)
- AMD K7 (e.g. Athlon XP)
- Cyrix III
- Intel Pentium 4
- Intel Pentium M
- AMD K8 (e.g. Athlon 64)
- Intel Pentium D
- Intel Core
- Intel Core 2
- AMD K10 (e.g. Phenom)
- Intel Core i
- AMD Bulldozer
- AMD Ryzen/Threadripper
- Other (please describe below)
validations:
required: true
- type: dropdown
id: software
attributes:
label: "Software Installed"
description: "Select all other Microsoft software installed on your system. If any others are installed that aren’t listed here, please describe them below."
multiple: true
options:
- Not applicable
- Office XP (2002)
- Office 2003
- Office 2007
- Office 2010
- Office 2013 or later
- Visual Studio .NET 2002
- Visual Studio .NET 2003
- Visual Studio 2005
- Visual Studio 2008
- Visual Studio 2010
- Visual Studio 2012 or later
- SQL Server 2000
- SQL Server 2005
- SQL Server 2008
- SQL Server 2012 or later
- Exchange Server 2000
- Exchange Server 2003
- Exchange Server 2007
- Exchange Server 2010 or later
- type: markdown
attributes:
value: |
---
### Any other details that might be relevant?
- type: textarea
id: notes
attributes:
label: "Other details"
description: "You can list hardware specifications here if you know them."
validations:
required: true
- type: markdown
attributes:
value: |
---
### Before you submit…
Please check [Legacy Update Help](https://legacyupdate.net/help/) to learn more about common issues, and [search for issues](https://github.com/LegacyUpdate/LegacyUpdate/issues) that could be similar to this one. It helps us to keep this project organised. Thanks!
- type: checkboxes
id: terms
attributes:
label: Confirmation
options:
- label: "I have checked that this issue hasn’t already been reported"
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/02-update_issue.yml
================================================
name: "Update Issue"
description: "Report a problem with an update"
labels: ["Needs triage"]
body:
- type: markdown
attributes:
value: |
Thank you for taking the time to report a problem! To help us resolve the problem quickly, please fill out the details below as best as you can.
- type: input
id: update
attributes:
label: "Update"
description: "Provide the name or KB number of the update(s) you’re reporting an issue with."
validations:
required: true
- type: markdown
attributes:
value: |
---
### Describe the issue
If applicable, please include the error code from Windows Update:
* From the Legacy Update website: Click “Update History”, then click  next to the failed update.
* From the Windows Update control panel: Click “View update history”, then double-click the failed update.
- type: textarea
id: actual
attributes:
label: "What is happening?"
description: "Describe the issue you’re experiencing. If you have screenshots or log files, please paste them here."
validations:
required: true
- type: textarea
id: expected
attributes:
label: "What should have happened?"
description: "What did you expect to happen instead?"
validations:
required: true
- type: textarea
id: steps
attributes:
label: "Steps to reproduce the issue"
description: "Write the step-by-step instructions that lead to the bug happening."
placeholder: |
1. …
2. …
3. …
validations:
required: true
- type: markdown
attributes:
value: |
---
### Provide as many of these details as possible
- type: dropdown
id: os
attributes:
label: "Operating System"
options:
- Not applicable
- Windows NT 4.0
- Windows 2000
- Windows XP
- Windows Server 2003
- Windows Vista/Windows Server 2008
- Windows 7/Windows Server 2008 R2
- Windows 8/Windows Server 2012
- Windows 8.1/Windows Server 2012 R2
- Windows 10
- Windows 11
validations:
required: true
- type: dropdown
id: sp
attributes:
label: "Service Pack"
options:
- Not applicable
- Don’t know
- RTM
- SP1
- SP2
- SP3
- SP4
- SP5
- SP6
validations:
required: true
- type: dropdown
id: arch
attributes:
label: "Architecture"
description: "Which architecture edition of Windows are you using?"
options:
- Not applicable
- Don’t know
- 32-bit (x86)
- 64-bit (x64)
- Itanium (ia64)
validations:
required: true
- type: dropdown
id: vm
attributes:
label: "Virtual Machine"
description: "Are you running Windows in a virtual machine or emulator?"
options:
- Not applicable
- "No"
- Yes, 86Box
- Yes, Hyper-V
- Yes, Parallels
- Yes, QEMU/KVM
- Yes, UTM
- Yes, VirtualBox
- Yes, Virtual PC
- Yes, VMware
- Yes, something else
validations:
required: true
- type: dropdown
id: hardware
attributes:
label: "Hardware"
description: "Select the option that best describes the hardware you are using."
options:
- Not applicable
- Don’t know
- 386
- 486
- Intel Pentium
- AMD K5/K6
- Cyrix 5x86/6x86
- Intel P6 (Pentium Pro/II/III)
- AMD K7 (e.g. Athlon XP)
- Cyrix III
- Intel Pentium 4
- Intel Pentium M
- AMD K8 (e.g. Athlon 64)
- Intel Pentium D
- Intel Core
- Intel Core 2
- AMD K10 (e.g. Phenom)
- Intel Core i
- AMD Bulldozer
- AMD Ryzen/Threadripper
- Other (please describe below)
validations:
required: true
- type: dropdown
id: software
attributes:
label: "Software"
description: "Select the software this issue is relevant to. If it isn’t listed here, please describe below."
options:
- Not applicable
- Office XP (2002)
- Office 2003
- Office 2007
- Office 2010
- Office 2013 or later
- Visual Studio .NET 2002
- Visual Studio .NET 2003
- Visual Studio 2005
- Visual Studio 2008
- Visual Studio 2010
- Visual Studio 2012 or later
- SQL Server 2000
- SQL Server 2005
- SQL Server 2008
- SQL Server 2012 or later
- Exchange Server 2000
- Exchange Server 2003
- Exchange Server 2007
- Exchange Server 2010 or later
- Other
validations:
required: true
- type: dropdown
id: software-arch
attributes:
label: "Software Architecture"
description: "Which architecture edition of the software are you using?"
options:
- Not applicable
- Don’t know
- 32-bit (x86)
- 64-bit (x64)
- Itanium (ia64)
validations:
required: true
- type: markdown
attributes:
value: |
---
### Any other details that might be relevant?
- type: textarea
id: notes
attributes:
label: "Other details"
description: "You can list hardware specifications here if you know them."
validations:
required: true
- type: markdown
attributes:
value: |
---
### Before you submit…
Please check [Legacy Update Help](https://legacyupdate.net/help/) to learn more about common issues, and [search for issues](https://github.com/LegacyUpdate/LegacyUpdate/issues) that could be similar to this one. It helps us to keep this project organised. Thanks!
- type: checkboxes
id: terms
attributes:
label: Confirmation
options:
- label: "I have checked that this issue hasn’t already been reported"
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/03-download_center_issue.yml
================================================
name: "Download Center Issue"
description: "Report a problem with the Microsoft Download Center Archive"
labels: ["Component: Download Center", "Needs triage"]
body:
- type: markdown
attributes:
value: |
Thank you for taking the time to report a bug! To help us resolve the problem quickly, please fill out the details below as best as you can.
- type: input
id: url
attributes:
label: "URL"
description: "Paste the link to the download page you’re reporting an issue with."
validations:
required: true
- type: dropdown
id: type
attributes:
label: "Type of Issue"
options:
- File missing (not shown on the page)
- File deleted (404 Not Found)
- File corrupted (error when downloading)
- Incorrect metadata
- Other
validations:
required: true
- type: textarea
id: notes
attributes:
label: "Details"
description: "Include more information about the issue."
validations:
required: true
- type: markdown
attributes:
value: |
---
### Before you submit…
Please check [Legacy Update Help](https://legacyupdate.net/help/) to learn more about common issues, and [search for issues](https://github.com/LegacyUpdate/LegacyUpdate/issues) that could be similar to this one. It helps us to keep this project organised. Thanks!
- type: checkboxes
id: terms
attributes:
label: Confirmation
options:
- label: "I have checked that this issue hasn’t already been reported"
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/04-feature_suggestion.yml
================================================
name: "Feature Suggestion"
description: "Suggest a feature to be added to Legacy Update"
labels: ["Enhancement", "Needs triage"]
body:
- type: markdown
attributes:
value: |
Thank you for taking the time to suggest a feature! To help us understand your idea better, please fill out the details below as best as you can.
- type: dropdown
id: component
attributes:
label: "Component"
description: "Which part of Legacy Update does this apply to?"
options:
- ActiveX control
- Download Center Archive
- Update server (WSUS)
- Update website
- Setup
- Other
validations:
required: true
- type: textarea
id: notes
attributes:
label: "Details"
description: "Describe the feature you would like to see. How will it work? Does it fix an issue?"
validations:
required: true
- type: markdown
attributes:
value: |
---
### Before you submit…
Please check [Legacy Update Help](https://legacyupdate.net/help/) to learn more about common issues, and [search for issues](https://github.com/LegacyUpdate/LegacyUpdate/issues) that could be similar to this one. It helps us to keep this project organised. Thanks!
- type: checkboxes
id: terms
attributes:
label: Confirmation
options:
- label: "I have checked that this issue hasn’t already been reported"
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: Legacy Update Help
url: https://legacyupdate.net/help/
about: Many common issues are already answered on our website.
- name: Get help on GitHub Discussions
url: https://github.com/orgs/LegacyUpdate/discussions
about: If this isn’t a bug with Legacy Update, you can post in our community discussion forum.
- name: Get help on Discord
url: https://legacyupdate.net/discord
about: If you prefer Discord, you can create a support thread in our Discord community.
================================================
FILE: .github/workflows/build-nt4.yml
================================================
name: Build Legacy Update NT
on:
push:
branches: []
pull_request:
branches: []
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Set up
run: |
sudo apt-get update -q
sudo apt-get install -qy curl make mingw-w64-x86-64-dev nsis p7zip-full upx-ucl unzip
- name: MinGW toolchain cache
id: mingw-cache
uses: actions/cache@v5
with:
path: |
/opt/gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0-i686
/opt/gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0-x86_64
key: gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0
- name: Install MinGW toolchain
if: steps.mingw-cache.outputs.cache-hit != 'true'
run: |
curl -fsSL https://linuxfromscratch.org/~renodr/gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0-i686.tar.xz -o /tmp/mingw32.tar.xz
curl -fsSL https://linuxfromscratch.org/~renodr/gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0-x86_64.tar.xz -o /tmp/mingw64.tar.xz
sudo tar -xf /tmp/mingw32.tar.xz -C /opt
sudo tar -xf /tmp/mingw64.tar.xz -C /opt
rm /tmp/mingw{32,64}.tar.xz
- name: NSIS cache
id: nsis-cache
uses: actions/cache@v5
with:
path: /opt/nsis-3.11
key: nsis-3.11
- name: Install custom NSIS package
if: steps.nsis-cache.outputs.cache-hit != 'true'
run: |
curl -fsSL https://linuxfromscratch.org/~renodr/nsis-3.11-lfsci-2.tar.xz -o /tmp/nsis-3.11.tar.xz
sudo tar -xf /tmp/nsis-3.11.tar.xz -C /opt
rm /tmp/nsis-3.11.tar.xz
- name: Patches cache
id: patches-cache
uses: actions/cache@v4
with:
path: setup/patches/
key: nt4-patches-${{hashFiles('setup/patches/**')}}
- name: Download patches
if: steps.patches-cache.outputs.cache-hit != 'true'
run: |
./build/get-nt4-patches.sh
- name: Build
id: build
run: |
export PATH=/opt/gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0-i686/bin:$PATH
export PATH=/opt/gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0-x86_64/bin:$PATH
export PATH=/opt/nsis-3.11/bin:$PATH
make -j$(nproc) CI=1 DEBUG=0 nt4
- name: Upload Build Artifact
uses: actions/upload-artifact@v7
with:
path: |
setup/LegacyUpdateNT-*.exe
================================================
FILE: .github/workflows/build.yml
================================================
name: Build Legacy Update
on:
push:
branches: []
pull_request:
branches: []
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Set up
run: |
sudo apt-get update -q
sudo apt-get install -qy --no-install-recommends curl libwine-dev make mingw-w64-tools mingw-w64-x86-64-dev nsis p7zip-full upx-ucl unzip
- name: MinGW toolchain cache
id: mingw-cache
uses: actions/cache@v5
with:
path: |
/opt/gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0-i686
/opt/gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0-x86_64
key: gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0
- name: Install MinGW toolchain
if: steps.mingw-cache.outputs.cache-hit != 'true'
run: |
curl -fsSL https://linuxfromscratch.org/~renodr/gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0-i686.tar.xz -o /tmp/mingw32.tar.xz
curl -fsSL https://linuxfromscratch.org/~renodr/gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0-x86_64.tar.xz -o /tmp/mingw64.tar.xz
sudo tar -xf /tmp/mingw32.tar.xz -C /opt
sudo tar -xf /tmp/mingw64.tar.xz -C /opt
rm /tmp/mingw{32,64}.tar.xz
- name: NSIS cache
id: nsis-cache
uses: actions/cache@v5
with:
path: /opt/nsis-3.11
key: nsis-3.11
- name: Install custom NSIS package
if: steps.nsis-cache.outputs.cache-hit != 'true'
run: |
curl -fsSL https://linuxfromscratch.org/~renodr/nsis-3.11-lfsci-2.tar.xz -o /tmp/nsis-3.11.tar.xz
sudo tar -xf /tmp/nsis-3.11.tar.xz -C /opt
rm /tmp/nsis-3.11.tar.xz
- name: Build
id: build
run: |
export PATH=/opt/gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0-i686/bin:$PATH
export PATH=/opt/gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0-x86_64/bin:$PATH
export PATH=/opt/nsis-3.11/bin:$PATH
make -j$(nproc) CI=1 DEBUG=0
- name: Upload Build Artifact
uses: actions/upload-artifact@v7
with:
path: |
setup/LegacyUpdate-*.exe
================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
*.userprefs
# Build results
Debug/
Debug-VC08/
Debug-VC17/
Release/
*.exe
*.dll
!setup/x86-unicode/*.dll
setup/x86-unicode/LegacyUpdateNSIS.dll
obj/
*_layout.inf
# Visual Studio 2015/2017 cache/options directory
.vs/
# Visual Studio 2017 auto generated files
Generated\ Files/
# Files built by Visual Studio
*_i.c
*_p.c
*_i.h
*idl.h
*.i
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
================================================
FILE: .idea/.idea.LegacyUpdate/.idea/.gitignore
================================================
# Default ignored files
/shelf/
/workspace.xml
# Rider ignored files
/.idea.LegacyUpdate.iml
/modules.xml
/contentModel.xml
/projectSettingsUpdater.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
================================================
FILE: .idea/.idea.LegacyUpdate/.idea/discord.xml
================================================
================================================
FILE: .idea/.idea.LegacyUpdate/.idea/indexLayout.xml
================================================
.
================================================
FILE: .idea/.idea.LegacyUpdate/.idea/vcs.xml
================================================
================================================
FILE: .vscode/c_cpp_properties.json
================================================
{
"configurations": [
{
"name": "MinGW",
"includePath": [
"${workspaceFolder}/include",
"${workspaceFolder}/shared"
],
"compilerPath": "/usr/bin/i686-w64-mingw32-g++",
"cStandard": "c17",
"cppStandard": "c++11",
"intelliSenseMode": "windows-gcc-x86",
"compilerArgs": [
"-mwindows",
"-municode",
"-fPIE",
"-fno-unwind-tables",
"-fno-asynchronous-unwind-tables",
"-fno-exceptions",
"-Wall",
"-Wextra",
"-Wpedantic",
"-Wno-unused-parameter",
"-Wno-unused-variable",
"-Wno-unknown-pragmas",
"-Wno-cast-function-type",
"-Wno-missing-field-initializers",
"-Iobj",
"-include stdafx.h"
],
"defines": [
"UNICODE",
"_UNICODE"
]
}
],
"version": 4
}
================================================
FILE: .vscode/settings.json
================================================
{
"files.associations": {
"*.rc": "cpp",
"*.idl": "cpp"
}
}
================================================
FILE: LICENSE.md
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: LegacyUpdate/ClassFactory.cpp
================================================
#include "ClassFactory.h"
#include "LegacyUpdate_i.h"
#include "LegacyUpdateCtrl.h"
#include "ElevationHelper.h"
#include "ProgressBarControl.h"
#include "dllmain.h"
#include
STDMETHODIMP CClassFactory::Create(IUnknown *pUnkOuter, REFIID riid, void **ppv) {
if (pUnkOuter != NULL) {
return CLASS_E_NOAGGREGATION;
}
CClassFactory *pThis = (CClassFactory *)CoTaskMemAlloc(sizeof(CClassFactory));
if (pThis == NULL) {
return E_OUTOFMEMORY;
}
new(pThis) CClassFactory();
HRESULT hr = pThis->QueryInterface(riid, ppv);
CHECK_HR_OR_RETURN(L"QueryInterface");
pThis->Release();
return hr;
}
CClassFactory::~CClassFactory(void) {
}
STDMETHODIMP CClassFactory::QueryInterface(REFIID riid, void **ppvObject) {
if (ppvObject == NULL) {
return E_POINTER;
}
*ppvObject = NULL;
if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IClassFactory)) {
*ppvObject = this;
AddRef();
return S_OK;
}
return E_NOINTERFACE;
}
STDMETHODIMP_(ULONG) CClassFactory::AddRef(void) {
return InterlockedIncrement(&m_refCount);
}
STDMETHODIMP_(ULONG) CClassFactory::Release(void) {
ULONG count = InterlockedDecrement(&m_refCount);
if (count == 0) {
this->~CClassFactory();
CoTaskMemFree(this);
}
return count;
}
STDMETHODIMP CClassFactory::CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppvObject) {
return createFunc(pUnkOuter, riid, ppvObject);
}
STDMETHODIMP CClassFactory::LockServer(BOOL fLock) {
if (fLock) {
InterlockedIncrement(&g_serverLocks);
} else {
InterlockedDecrement(&g_serverLocks);
}
return S_OK;
}
================================================
FILE: LegacyUpdate/ClassFactory.h
================================================
#pragma once
#include "com.h"
STDMETHODIMP CreateClassFactory(IUnknown *pUnkOuter, REFIID riid, void **ppv);
class DECLSPEC_NOVTABLE CClassFactory : public IClassFactory {
public:
CClassFactory() :
m_refCount(1),
createFunc(NULL),
clsid(NULL) {}
virtual ~CClassFactory();
static STDMETHODIMP Create(IUnknown *pUnkOuter, REFIID riid, void **ppv);
private:
LONG m_refCount;
public:
STDMETHODIMP (*createFunc)(IUnknown *pUnkOuter, REFIID riid, void **ppv);
const GUID *clsid;
// IUnknown
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
// IClassFactory
STDMETHODIMP CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppvObject);
STDMETHODIMP LockServer(BOOL fLock);
};
================================================
FILE: LegacyUpdate/Compat.cpp
================================================
#include "Compat.h"
#include
#include
#include "resource.h"
#include "ProductInfo.h"
typedef BOOL (WINAPI *_SetProcessDpiAwarenessContext)(DPI_AWARENESS_CONTEXT);
typedef HRESULT (WINAPI *_SetProcessDpiAwareness)(PROCESS_DPI_AWARENESS);
typedef void (WINAPI *_SetProcessDPIAware)();
typedef HANDLE (WINAPI *_CreateActCtxW)(const ACTCTX *);
typedef BOOL (WINAPI *_ActivateActCtx)(HANDLE, ULONG_PTR *);
typedef BOOL (WINAPI *_DeactivateActCtx)(DWORD, ULONG_PTR);
typedef void (WINAPI *_ReleaseActCtx)(HANDLE);
typedef BOOL (WINAPI *_GetCurrentActCtx)(HANDLE *);
static BOOL actCtxLoaded = FALSE;
static _CreateActCtxW $CreateActCtx;
static _ActivateActCtx $ActivateActCtx;
static _DeactivateActCtx $DeactivateActCtx;
static _ReleaseActCtx $ReleaseActCtx;
static _GetCurrentActCtx $GetCurrentActCtx;
static BOOL comctlLoaded = FALSE;
static HMODULE hComctl32 = NULL;
void BecomeDPIAware(void) {
// Make the process DPI-aware... hopefully
// Windows 10 1703+ per-monitor v2
_SetProcessDpiAwarenessContext $SetProcessDpiAwarenessContext = (_SetProcessDpiAwarenessContext)GetProcAddress(LoadLibrary(L"user32.dll"), "SetProcessDpiAwarenessContext");
if ($SetProcessDpiAwarenessContext) {
$SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
return;
}
// Windows 8.1 - 10 1607 per-monitor v1
_SetProcessDpiAwareness $SetProcessDpiAwareness = (_SetProcessDpiAwareness)GetProcAddress(LoadLibrary(L"shcore.dll"), "SetProcessDpiAwareness");
if ($SetProcessDpiAwareness) {
$SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
return;
}
// Windows Vista - 8
_SetProcessDPIAware $SetProcessDPIAware = (_SetProcessDPIAware)GetProcAddress(LoadLibrary(L"user32.dll"), "SetProcessDPIAware");
if ($SetProcessDPIAware) {
$SetProcessDPIAware();
}
}
// Handling for SxS contexts (mainly for comctl 6.0)
void IsolationAwareStart(ULONG_PTR *cookie) {
*cookie = 0;
if (!actCtxLoaded) {
actCtxLoaded = TRUE;
HMODULE kernel32 = GetModuleHandle(L"kernel32.dll");
$CreateActCtx = (_CreateActCtxW)GetProcAddress(kernel32, "CreateActCtxW");
$ActivateActCtx = (_ActivateActCtx)GetProcAddress(kernel32, "ActivateActCtx");
$DeactivateActCtx = (_DeactivateActCtx)GetProcAddress(kernel32, "DeactivateActCtx");
$ReleaseActCtx = (_ReleaseActCtx)GetProcAddress(kernel32, "ReleaseActCtx");
$GetCurrentActCtx = (_GetCurrentActCtx)GetProcAddress(kernel32, "GetCurrentActCtx");
}
if (!$CreateActCtx || !$ActivateActCtx || !$ReleaseActCtx) {
return;
}
// Borrowing the manifest from shell32.dll
WCHAR shell32[MAX_PATH];
GetModuleFileName(GetModuleHandle(L"shell32.dll"), shell32, ARRAYSIZE(shell32));
ACTCTX actCtx = {0};
actCtx.cbSize = sizeof(actCtx);
actCtx.dwFlags = ACTCTX_FLAG_RESOURCE_NAME_VALID;
actCtx.lpSource = shell32;
actCtx.lpResourceName = MAKEINTRESOURCE(124);
HANDLE hActCtx = $CreateActCtx(&actCtx);
if (hActCtx != INVALID_HANDLE_VALUE) {
if (!$ActivateActCtx(hActCtx, cookie)) {
$ReleaseActCtx(hActCtx);
hActCtx = INVALID_HANDLE_VALUE;
}
}
}
void IsolationAwareEnd(ULONG_PTR *cookie) {
if (!$DeactivateActCtx || !$GetCurrentActCtx) {
return;
}
if (*cookie != 0) {
HANDLE hActCtx = INVALID_HANDLE_VALUE;
if ($GetCurrentActCtx(&hActCtx) && hActCtx != INVALID_HANDLE_VALUE) {
$DeactivateActCtx(0, *cookie);
$ReleaseActCtx(hActCtx);
}
*cookie = 0;
}
}
================================================
FILE: LegacyUpdate/Compat.h
================================================
#pragma once
void BecomeDPIAware();
void IsolationAwareStart(ULONG_PTR *cookie);
void IsolationAwareEnd(ULONG_PTR *cookie);
================================================
FILE: LegacyUpdate/ElevationHelper.cpp
================================================
// ElevationHelper.cpp : Implementation of CElevationHelper
#include "ElevationHelper.h"
#include "Compat.h"
#include "HResult.h"
#include "LegacyUpdate.h"
#include "NGen.h"
#include "Registry.h"
#include "Utils.h"
#include "VersionInfo.h"
#include
#include
#include "IUpdateInstaller4.h"
const WCHAR *permittedProgIDs[] = {
L"Microsoft.Update."
};
DEFINE_UUIDOF(CElevationHelper, CLSID_ElevationHelper);
BOOL ProgIDIsPermitted(PWSTR progID) {
if (progID == NULL) {
return FALSE;
}
for (DWORD i = 0; i < ARRAYSIZE(permittedProgIDs); i++) {
if (wcsncmp(progID, permittedProgIDs[i], wcslen(permittedProgIDs[i])) == 0) {
return TRUE;
}
}
return FALSE;
}
STDMETHODIMP CoCreateInstanceAsAdmin(HWND hwnd, REFCLSID rclsid, REFIID riid, void **ppv) {
WCHAR clsidString[39];
StringFromGUID2(rclsid, clsidString, ARRAYSIZE(clsidString));
WCHAR monikerName[67];
wsprintf(monikerName, L"Elevation:Administrator!new:%ls", clsidString);
BIND_OPTS3 bindOpts;
ZeroMemory(&bindOpts, sizeof(bindOpts));
bindOpts.cbStruct = sizeof(bindOpts);
bindOpts.hwnd = hwnd;
bindOpts.dwClassContext = CLSCTX_LOCAL_SERVER;
return CoGetObject(monikerName, (BIND_OPTS *)&bindOpts, riid, ppv);
}
STDMETHODIMP CElevationHelper::Create(IUnknown *pUnkOuter, REFIID riid, void **ppv) {
if (pUnkOuter != NULL) {
return CLASS_E_NOAGGREGATION;
}
CElevationHelper *pThis = (CElevationHelper *)CoTaskMemAlloc(sizeof(CElevationHelper));
if (pThis == NULL) {
return E_OUTOFMEMORY;
}
new(pThis) CElevationHelper();
// TODO: Only do this if we're in dllhost
BecomeDPIAware();
HRESULT hr = pThis->QueryInterface(riid, ppv);
CHECK_HR_OR_RETURN(L"QueryInterface");
pThis->Release();
return hr;
}
CElevationHelper::~CElevationHelper(void) {
}
STDMETHODIMP CElevationHelper::UpdateRegistry(BOOL bRegister) {
if (bRegister) {
RegistryEntry entries[] = {
{HKEY_CLASSES_ROOT, L"LegacyUpdate.ElevationHelper", NULL, REG_SZ, (LPVOID)L"Legacy Update Elevation Helper"},
{HKEY_CLASSES_ROOT, L"LegacyUpdate.ElevationHelper\\CurVer", NULL, REG_SZ, (LPVOID)L"LegacyUpdate.ElevationHelper.1"},
{HKEY_CLASSES_ROOT, L"LegacyUpdate.ElevationHelper.1", NULL, REG_SZ, (LPVOID)L"Legacy Update Elevation Helper"},
{HKEY_CLASSES_ROOT, L"LegacyUpdate.ElevationHelper.1\\CLSID", NULL, REG_SZ, (LPVOID)L"%CLSID%"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%", NULL, REG_SZ, (LPVOID)L"Legacy Update Elevation Helper"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%", L"AppID", REG_SZ, (LPVOID)L"%APPID%"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%", L"LocalizedString", REG_SZ, (LPVOID)L"@%MODULE%,-1"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\ProgID", NULL, REG_SZ, (LPVOID)L"LegacyUpdate.ElevationHelper.1"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\VersionIndependentProgID", NULL, REG_SZ, (LPVOID)L"LegacyUpdate.ElevationHelper"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\InprocServer32", NULL, REG_SZ, (LPVOID)L"%MODULE%"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\InprocServer32", L"ThreadingModel", REG_SZ, (LPVOID)L"Apartment"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\TypeLib", NULL, REG_SZ, (LPVOID)L"%LIBID%"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\Version", NULL, REG_SZ, (LPVOID)L"1.0"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\Elevation", L"Enabled", REG_DWORD, (LPVOID)1},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\Elevation", L"IconReference", REG_SZ, (LPVOID)L"@%INSTALLPATH%\\LegacyUpdate.exe,-100"},
{}
};
return SetRegistryEntries(entries);
} else {
RegistryEntry entries[] = {
{HKEY_CLASSES_ROOT, L"LegacyUpdate.ElevationHelper", NULL, 0, DELETE_KEY},
{HKEY_CLASSES_ROOT, L"LegacyUpdate.ElevationHelper.1", NULL, 0, DELETE_KEY},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%", NULL, 0, DELETE_KEY},
{}
};
return SetRegistryEntries(entries);
}
}
#pragma mark - IUnknown
STDMETHODIMP CElevationHelper::QueryInterface(REFIID riid, void **ppvObject) {
if (ppvObject == NULL) {
return E_POINTER;
}
*ppvObject = NULL;
return IDispatchImpl::QueryInterface(riid, ppvObject);
}
STDMETHODIMP_(ULONG) CElevationHelper::AddRef(void) {
return InterlockedIncrement(&m_refCount);
}
STDMETHODIMP_(ULONG) CElevationHelper::Release(void) {
ULONG count = InterlockedDecrement(&m_refCount);
if (count == 0) {
this->~CElevationHelper();
CoTaskMemFree(this);
}
return count;
}
#pragma mark - IElevationHelper
STDMETHODIMP CElevationHelper::CreateObject(BSTR progID, IDispatch **retval) {
if (progID == NULL || retval == NULL) {
return E_INVALIDARG;
}
*retval = NULL;
HRESULT hr = S_OK;
CComPtr object;
CLSID clsid;
if (!ProgIDIsPermitted(progID)) {
return E_ACCESSDENIED;
}
hr = CLSIDFromProgID(progID, &clsid);
CHECK_HR_OR_RETURN(L"CLSIDFromProgID");
hr = object.CoCreateInstance(clsid, IID_IDispatch, NULL, CLSCTX_INPROC_SERVER);
CHECK_HR_OR_RETURN(L"CoCreateInstance");
*retval = object.Detach();
return hr;
}
STDMETHODIMP CElevationHelper::SetBrowserHwnd(IUpdateInstaller *installer, HWND hwnd) {
if (installer == NULL) {
return E_INVALIDARG;
}
CComPtr updateInstaller;
HRESULT hr = installer->QueryInterface(IID_IUpdateInstaller, (void **)&updateInstaller);
CHECK_HR_OR_RETURN(L"QueryInterface IID_IUpdateInstaller");
hr = updateInstaller->put_ParentHwnd(hwnd);
CHECK_HR_OR_RETURN(L"put_ParentHwnd");
return S_OK;
}
STDMETHODIMP CElevationHelper::Reboot(void) {
// Calling Commit() is recommended on Windows 10, to ensure feature updates are properly prepared prior to the reboot.
// If IUpdateInstaller4 doesn't exist, we can skip this.
CComPtr installer;
HRESULT hr = installer.CoCreateInstance(CLSID_UpdateInstaller, NULL, CLSCTX_INPROC_SERVER);
if (SUCCEEDED(hr) && hr != REGDB_E_CLASSNOTREG) {
hr = installer->Commit(0);
CHECK_HR_OR_GOTO_END(L"Commit");
}
end:
return ::Reboot();
}
STDMETHODIMP CElevationHelper::BeforeUpdate(void) {
return PauseResumeNGenQueue(FALSE);
}
STDMETHODIMP CElevationHelper::AfterUpdate(void) {
return PauseResumeNGenQueue(TRUE);
}
================================================
FILE: LegacyUpdate/ElevationHelper.h
================================================
#pragma once
// ElevationHelper.h : Declaration of the CElevationHelper class.
#include "resource.h"
#include "com.h"
#include "LegacyUpdate_i.h"
BOOL ProgIDIsPermitted(PWSTR progID);
STDMETHODIMP CoCreateInstanceAsAdmin(HWND hwnd, REFCLSID rclsid, REFIID riid, void **ppv);
class DECLSPEC_NOVTABLE CElevationHelper :
public IDispatchImpl {
public:
CElevationHelper() :
m_refCount(1) {}
virtual ~CElevationHelper();
static STDMETHODIMP Create(IUnknown *pUnkOuter, REFIID riid, void **ppv);
static STDMETHODIMP UpdateRegistry(BOOL bRegister);
private:
LONG m_refCount;
public:
// IUnknown
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
// IElevationHelper
STDMETHODIMP CreateObject(BSTR progID, IDispatch **retval);
STDMETHODIMP SetBrowserHwnd(IUpdateInstaller *installer, HWND hwnd);
STDMETHODIMP Reboot();
STDMETHODIMP BeforeUpdate();
STDMETHODIMP AfterUpdate();
};
================================================
FILE: LegacyUpdate/IUpdateInstaller4.h
================================================
#pragma once
#include
// Copied from wuapi.h in Windows SDK 10.0.19041.0
#ifndef __IUpdateInstaller3_FWD_DEFINED__
#define __IUpdateInstaller3_FWD_DEFINED__
typedef interface IUpdateInstaller3 IUpdateInstaller3;
#endif /* __IUpdateInstaller3_FWD_DEFINED__ */
#ifndef __IUpdateInstaller4_FWD_DEFINED__
#define __IUpdateInstaller4_FWD_DEFINED__
typedef interface IUpdateInstaller4 IUpdateInstaller4;
#endif /* __IUpdateInstaller4_FWD_DEFINED__ */
// {16d11c35-099a-48d0-8338-5fae64047f8e}
DEFINE_GUID(IID_IUpdateInstaller3,0x16d11c35,0x099a,0x48d0,0x83,0x38,0x5f,0xae,0x64,0x04,0x7f,0x8e);
// {EF8208EA-2304-492D-9109-23813B0958E1}
DEFINE_GUID(IID_IUpdateInstaller4, 0xef8208ea, 0x2304, 0x492d, 0x91, 0x9, 0x23, 0x81, 0x3b, 0x9, 0x58, 0xe1);
#ifndef __IUpdateInstaller3_INTERFACE_DEFINED__
#define __IUpdateInstaller3_INTERFACE_DEFINED__
/* interface IUpdateInstaller3 */
/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateInstaller3;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("16d11c35-099a-48d0-8338-5fae64047f8e")
IUpdateInstaller3 : public IUpdateInstaller2
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AttemptCloseAppsIfNecessary(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_AttemptCloseAppsIfNecessary(
/* [in] */ VARIANT_BOOL value) = 0;
};
#else /* C style interface */
typedef struct IUpdateInstaller3Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateInstaller3 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
_COM_Outptr_ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateInstaller3 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateInstaller3 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateInstaller3 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateInstaller3 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateInstaller3 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateInstaller3 * This,
/* [annotation][in] */
_In_ DISPID dispIdMember,
/* [annotation][in] */
_In_ REFIID riid,
/* [annotation][in] */
_In_ LCID lcid,
/* [annotation][in] */
_In_ WORD wFlags,
/* [annotation][out][in] */
_In_ DISPPARAMS *pDispParams,
/* [annotation][out] */
_Out_opt_ VARIANT *pVarResult,
/* [annotation][out] */
_Out_opt_ EXCEPINFO *pExcepInfo,
/* [annotation][out] */
_Out_opt_ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(
__RPC__in IUpdateInstaller3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(
__RPC__in IUpdateInstaller3 * This,
/* [in] */ __RPC__in BSTR value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsForced )(
__RPC__in IUpdateInstaller3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsForced )(
__RPC__in IUpdateInstaller3 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][restricted][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ParentHwnd )(
__RPC__in IUpdateInstaller3 * This,
/* [retval][out] */ __RPC__deref_out_opt HWND *retval);
/* [helpstring][restricted][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ParentHwnd )(
__RPC__in IUpdateInstaller3 * This,
/* [unique][in] */ __RPC__in_opt HWND value);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ParentWindow )(
__RPC__in IUpdateInstaller3 * This,
/* [unique][in] */ __RPC__in_opt IUnknown *value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ParentWindow )(
__RPC__in IUpdateInstaller3 * This,
/* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Updates )(
__RPC__in IUpdateInstaller3 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Updates )(
__RPC__in IUpdateInstaller3 * This,
/* [in] */ __RPC__in_opt IUpdateCollection *value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginInstall )(
__RPC__in IUpdateInstaller3 * This,
/* [in] */ __RPC__in_opt IUnknown *onProgressChanged,
/* [in] */ __RPC__in_opt IUnknown *onCompleted,
/* [in] */ VARIANT state,
/* [retval][out] */ __RPC__deref_out_opt IInstallationJob **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginUninstall )(
__RPC__in IUpdateInstaller3 * This,
/* [in] */ __RPC__in_opt IUnknown *onProgressChanged,
/* [in] */ __RPC__in_opt IUnknown *onCompleted,
/* [in] */ VARIANT state,
/* [retval][out] */ __RPC__deref_out_opt IInstallationJob **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndInstall )(
__RPC__in IUpdateInstaller3 * This,
/* [in] */ __RPC__in_opt IInstallationJob *value,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndUninstall )(
__RPC__in IUpdateInstaller3 * This,
/* [in] */ __RPC__in_opt IInstallationJob *value,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Install )(
__RPC__in IUpdateInstaller3 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RunWizard )(
__RPC__in IUpdateInstaller3 * This,
/* [defaultvalue][unique][in] */ __RPC__in_opt BSTR dialogTitle,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBusy )(
__RPC__in IUpdateInstaller3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Uninstall )(
__RPC__in IUpdateInstaller3 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AllowSourcePrompts )(
__RPC__in IUpdateInstaller3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_AllowSourcePrompts )(
__RPC__in IUpdateInstaller3 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequiredBeforeInstallation )(
__RPC__in IUpdateInstaller3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ForceQuiet )(
__RPC__in IUpdateInstaller3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ForceQuiet )(
__RPC__in IUpdateInstaller3 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AttemptCloseAppsIfNecessary )(
__RPC__in IUpdateInstaller3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_AttemptCloseAppsIfNecessary )(
__RPC__in IUpdateInstaller3 * This,
/* [in] */ VARIANT_BOOL value);
END_INTERFACE
} IUpdateInstaller3Vtbl;
interface IUpdateInstaller3
{
CONST_VTBL struct IUpdateInstaller3Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateInstaller3_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateInstaller3_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateInstaller3_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateInstaller3_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateInstaller3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateInstaller3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateInstaller3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateInstaller3_get_ClientApplicationID(This,retval) \
( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )
#define IUpdateInstaller3_put_ClientApplicationID(This,value) \
( (This)->lpVtbl -> put_ClientApplicationID(This,value) )
#define IUpdateInstaller3_get_IsForced(This,retval) \
( (This)->lpVtbl -> get_IsForced(This,retval) )
#define IUpdateInstaller3_put_IsForced(This,value) \
( (This)->lpVtbl -> put_IsForced(This,value) )
#define IUpdateInstaller3_get_ParentHwnd(This,retval) \
( (This)->lpVtbl -> get_ParentHwnd(This,retval) )
#define IUpdateInstaller3_put_ParentHwnd(This,value) \
( (This)->lpVtbl -> put_ParentHwnd(This,value) )
#define IUpdateInstaller3_put_ParentWindow(This,value) \
( (This)->lpVtbl -> put_ParentWindow(This,value) )
#define IUpdateInstaller3_get_ParentWindow(This,retval) \
( (This)->lpVtbl -> get_ParentWindow(This,retval) )
#define IUpdateInstaller3_get_Updates(This,retval) \
( (This)->lpVtbl -> get_Updates(This,retval) )
#define IUpdateInstaller3_put_Updates(This,value) \
( (This)->lpVtbl -> put_Updates(This,value) )
#define IUpdateInstaller3_BeginInstall(This,onProgressChanged,onCompleted,state,retval) \
( (This)->lpVtbl -> BeginInstall(This,onProgressChanged,onCompleted,state,retval) )
#define IUpdateInstaller3_BeginUninstall(This,onProgressChanged,onCompleted,state,retval) \
( (This)->lpVtbl -> BeginUninstall(This,onProgressChanged,onCompleted,state,retval) )
#define IUpdateInstaller3_EndInstall(This,value,retval) \
( (This)->lpVtbl -> EndInstall(This,value,retval) )
#define IUpdateInstaller3_EndUninstall(This,value,retval) \
( (This)->lpVtbl -> EndUninstall(This,value,retval) )
#define IUpdateInstaller3_Install(This,retval) \
( (This)->lpVtbl -> Install(This,retval) )
#define IUpdateInstaller3_RunWizard(This,dialogTitle,retval) \
( (This)->lpVtbl -> RunWizard(This,dialogTitle,retval) )
#define IUpdateInstaller3_get_IsBusy(This,retval) \
( (This)->lpVtbl -> get_IsBusy(This,retval) )
#define IUpdateInstaller3_Uninstall(This,retval) \
( (This)->lpVtbl -> Uninstall(This,retval) )
#define IUpdateInstaller3_get_AllowSourcePrompts(This,retval) \
( (This)->lpVtbl -> get_AllowSourcePrompts(This,retval) )
#define IUpdateInstaller3_put_AllowSourcePrompts(This,value) \
( (This)->lpVtbl -> put_AllowSourcePrompts(This,value) )
#define IUpdateInstaller3_get_RebootRequiredBeforeInstallation(This,retval) \
( (This)->lpVtbl -> get_RebootRequiredBeforeInstallation(This,retval) )
#define IUpdateInstaller3_get_ForceQuiet(This,retval) \
( (This)->lpVtbl -> get_ForceQuiet(This,retval) )
#define IUpdateInstaller3_put_ForceQuiet(This,value) \
( (This)->lpVtbl -> put_ForceQuiet(This,value) )
#define IUpdateInstaller3_get_AttemptCloseAppsIfNecessary(This,retval) \
( (This)->lpVtbl -> get_AttemptCloseAppsIfNecessary(This,retval) )
#define IUpdateInstaller3_put_AttemptCloseAppsIfNecessary(This,value) \
( (This)->lpVtbl -> put_AttemptCloseAppsIfNecessary(This,value) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateInstaller3_INTERFACE_DEFINED__ */
#ifndef __IUpdateInstaller4_INTERFACE_DEFINED__
#define __IUpdateInstaller4_INTERFACE_DEFINED__
/* interface IUpdateInstaller4 */
/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateInstaller4;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("EF8208EA-2304-492D-9109-23813B0958E1")
IUpdateInstaller4 : public IUpdateInstaller3
{
public:
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Commit(
/* [in] */ DWORD dwFlags) = 0;
};
#else /* C style interface */
typedef struct IUpdateInstaller4Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateInstaller4 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
_COM_Outptr_ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateInstaller4 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateInstaller4 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateInstaller4 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateInstaller4 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateInstaller4 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateInstaller4 * This,
/* [annotation][in] */
_In_ DISPID dispIdMember,
/* [annotation][in] */
_In_ REFIID riid,
/* [annotation][in] */
_In_ LCID lcid,
/* [annotation][in] */
_In_ WORD wFlags,
/* [annotation][out][in] */
_In_ DISPPARAMS *pDispParams,
/* [annotation][out] */
_Out_opt_ VARIANT *pVarResult,
/* [annotation][out] */
_Out_opt_ EXCEPINFO *pExcepInfo,
/* [annotation][out] */
_Out_opt_ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(
__RPC__in IUpdateInstaller4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(
__RPC__in IUpdateInstaller4 * This,
/* [in] */ __RPC__in BSTR value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsForced )(
__RPC__in IUpdateInstaller4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsForced )(
__RPC__in IUpdateInstaller4 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][restricted][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ParentHwnd )(
__RPC__in IUpdateInstaller4 * This,
/* [retval][out] */ __RPC__deref_out_opt HWND *retval);
/* [helpstring][restricted][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ParentHwnd )(
__RPC__in IUpdateInstaller4 * This,
/* [unique][in] */ __RPC__in_opt HWND value);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ParentWindow )(
__RPC__in IUpdateInstaller4 * This,
/* [unique][in] */ __RPC__in_opt IUnknown *value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ParentWindow )(
__RPC__in IUpdateInstaller4 * This,
/* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Updates )(
__RPC__in IUpdateInstaller4 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Updates )(
__RPC__in IUpdateInstaller4 * This,
/* [in] */ __RPC__in_opt IUpdateCollection *value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginInstall )(
__RPC__in IUpdateInstaller4 * This,
/* [in] */ __RPC__in_opt IUnknown *onProgressChanged,
/* [in] */ __RPC__in_opt IUnknown *onCompleted,
/* [in] */ VARIANT state,
/* [retval][out] */ __RPC__deref_out_opt IInstallationJob **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginUninstall )(
__RPC__in IUpdateInstaller4 * This,
/* [in] */ __RPC__in_opt IUnknown *onProgressChanged,
/* [in] */ __RPC__in_opt IUnknown *onCompleted,
/* [in] */ VARIANT state,
/* [retval][out] */ __RPC__deref_out_opt IInstallationJob **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndInstall )(
__RPC__in IUpdateInstaller4 * This,
/* [in] */ __RPC__in_opt IInstallationJob *value,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndUninstall )(
__RPC__in IUpdateInstaller4 * This,
/* [in] */ __RPC__in_opt IInstallationJob *value,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Install )(
__RPC__in IUpdateInstaller4 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RunWizard )(
__RPC__in IUpdateInstaller4 * This,
/* [defaultvalue][unique][in] */ __RPC__in_opt BSTR dialogTitle,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBusy )(
__RPC__in IUpdateInstaller4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Uninstall )(
__RPC__in IUpdateInstaller4 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AllowSourcePrompts )(
__RPC__in IUpdateInstaller4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_AllowSourcePrompts )(
__RPC__in IUpdateInstaller4 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequiredBeforeInstallation )(
__RPC__in IUpdateInstaller4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ForceQuiet )(
__RPC__in IUpdateInstaller4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ForceQuiet )(
__RPC__in IUpdateInstaller4 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AttemptCloseAppsIfNecessary )(
__RPC__in IUpdateInstaller4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_AttemptCloseAppsIfNecessary )(
__RPC__in IUpdateInstaller4 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Commit )(
__RPC__in IUpdateInstaller4 * This,
/* [in] */ DWORD dwFlags);
END_INTERFACE
} IUpdateInstaller4Vtbl;
interface IUpdateInstaller4
{
CONST_VTBL struct IUpdateInstaller4Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateInstaller4_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateInstaller4_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateInstaller4_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateInstaller4_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateInstaller4_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateInstaller4_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateInstaller4_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateInstaller4_get_ClientApplicationID(This,retval) \
( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )
#define IUpdateInstaller4_put_ClientApplicationID(This,value) \
( (This)->lpVtbl -> put_ClientApplicationID(This,value) )
#define IUpdateInstaller4_get_IsForced(This,retval) \
( (This)->lpVtbl -> get_IsForced(This,retval) )
#define IUpdateInstaller4_put_IsForced(This,value) \
( (This)->lpVtbl -> put_IsForced(This,value) )
#define IUpdateInstaller4_get_ParentHwnd(This,retval) \
( (This)->lpVtbl -> get_ParentHwnd(This,retval) )
#define IUpdateInstaller4_put_ParentHwnd(This,value) \
( (This)->lpVtbl -> put_ParentHwnd(This,value) )
#define IUpdateInstaller4_put_ParentWindow(This,value) \
( (This)->lpVtbl -> put_ParentWindow(This,value) )
#define IUpdateInstaller4_get_ParentWindow(This,retval) \
( (This)->lpVtbl -> get_ParentWindow(This,retval) )
#define IUpdateInstaller4_get_Updates(This,retval) \
( (This)->lpVtbl -> get_Updates(This,retval) )
#define IUpdateInstaller4_put_Updates(This,value) \
( (This)->lpVtbl -> put_Updates(This,value) )
#define IUpdateInstaller4_BeginInstall(This,onProgressChanged,onCompleted,state,retval) \
( (This)->lpVtbl -> BeginInstall(This,onProgressChanged,onCompleted,state,retval) )
#define IUpdateInstaller4_BeginUninstall(This,onProgressChanged,onCompleted,state,retval) \
( (This)->lpVtbl -> BeginUninstall(This,onProgressChanged,onCompleted,state,retval) )
#define IUpdateInstaller4_EndInstall(This,value,retval) \
( (This)->lpVtbl -> EndInstall(This,value,retval) )
#define IUpdateInstaller4_EndUninstall(This,value,retval) \
( (This)->lpVtbl -> EndUninstall(This,value,retval) )
#define IUpdateInstaller4_Install(This,retval) \
( (This)->lpVtbl -> Install(This,retval) )
#define IUpdateInstaller4_RunWizard(This,dialogTitle,retval) \
( (This)->lpVtbl -> RunWizard(This,dialogTitle,retval) )
#define IUpdateInstaller4_get_IsBusy(This,retval) \
( (This)->lpVtbl -> get_IsBusy(This,retval) )
#define IUpdateInstaller4_Uninstall(This,retval) \
( (This)->lpVtbl -> Uninstall(This,retval) )
#define IUpdateInstaller4_get_AllowSourcePrompts(This,retval) \
( (This)->lpVtbl -> get_AllowSourcePrompts(This,retval) )
#define IUpdateInstaller4_put_AllowSourcePrompts(This,value) \
( (This)->lpVtbl -> put_AllowSourcePrompts(This,value) )
#define IUpdateInstaller4_get_RebootRequiredBeforeInstallation(This,retval) \
( (This)->lpVtbl -> get_RebootRequiredBeforeInstallation(This,retval) )
#define IUpdateInstaller4_get_ForceQuiet(This,retval) \
( (This)->lpVtbl -> get_ForceQuiet(This,retval) )
#define IUpdateInstaller4_put_ForceQuiet(This,value) \
( (This)->lpVtbl -> put_ForceQuiet(This,value) )
#define IUpdateInstaller4_get_AttemptCloseAppsIfNecessary(This,retval) \
( (This)->lpVtbl -> get_AttemptCloseAppsIfNecessary(This,retval) )
#define IUpdateInstaller4_put_AttemptCloseAppsIfNecessary(This,value) \
( (This)->lpVtbl -> put_AttemptCloseAppsIfNecessary(This,value) )
#define IUpdateInstaller4_Commit(This,dwFlags) \
( (This)->lpVtbl -> Commit(This,dwFlags) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateInstaller4_INTERFACE_DEFINED__ */
================================================
FILE: LegacyUpdate/LaunchUpdateSite.cpp
================================================
#include "Exec.h"
#include "HResult.h"
#include "Utils.h"
#include
// Function signature required by Rundll32.exe.
EXTERN_C __declspec(dllexport)
void CALLBACK LaunchUpdateSite(HWND hwnd, HINSTANCE hInstance, LPSTR lpszCmdLine, int nCmdShow) {
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
if (!SUCCEEDED(hr)) {
goto end;
}
// This just calls LegacyUpdate.exe now for backwards compatibility.
hr = StartLauncher(L"/launch", TRUE);
end:
if (!SUCCEEDED(hr)) {
LPWSTR message = GetMessageForHresult(hr);
MessageBox(NULL, message, L"Legacy Update", MB_OK | MB_ICONERROR);
LocalFree(message);
}
CoUninitialize();
}
================================================
FILE: LegacyUpdate/LegacyUpdate.def
================================================
; LegacyUpdate.def : Declares the module parameters.
EXPORTS
; Registration
DllCanUnloadNow PRIVATE
DllGetClassObject PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
; Rundll32
LaunchUpdateSite PRIVATE
; Internal use
GetMessageForHresult
================================================
FILE: LegacyUpdate/LegacyUpdate.idl
================================================
// LegacyUpdate.idl : IDL source for LegacyUpdate
//
// This file will be processed by the MIDL tool to
// produce the type library (LegacyUpdate.tlb) and marshalling code.
#include
#include
import "oaidl.idl";
import "ocidl.idl";
import "wuapi.idl";
typedef enum OSVersionField {
e_majorVer = 0,
e_minorVer = 1,
e_buildNumber = 2,
e_platform = 3,
e_SPMajor = 4,
e_SPMinor = 5,
e_productSuite = 6,
e_productType = 7,
e_systemMetric = 8,
e_SPVersionString = 9,
e_controlVersionString = 10,
e_VistaProductType = 11,
e_productName = 12,
e_displayVersion = 13,
e_maxOSVersionFieldValue = 13
} OSVersionField;
typedef enum UserType {
e_nonAdmin = 0,
e_admin = 2,
e_elevated = 3
} UserType;
typedef enum ViewLogType {
e_legacyUpdate = 0,
e_legacyUpdateLocal = 1,
e_legacyUpdateLocalLow = 2,
e_windowsUpdate = 3,
} ViewLogType;
[
object,
uuid(C33085BB-C3E1-4D27-A214-AF01953DF5E5),
dual,
nonextensible,
helpstring("ILegacyUpdateCtrl Interface"),
pointer_default(unique)
]
interface ILegacyUpdateCtrl : IDispatch {
[id(1)] HRESULT CheckControl([out, retval] VARIANT_BOOL *retval);
[id(2)] HRESULT MessageForHresult(LONG inHresult, [out, retval] BSTR *retval);
[id(3)] HRESULT GetOSVersionInfo(OSVersionField osField, LONG systemMetric, [out, retval] VARIANT *retval);
[id(14)] HRESULT RequestElevation(void);
[id(4)] HRESULT CreateObject(BSTR progID, [out, retval] IDispatch **retval);
[id(15)] HRESULT SetBrowserHwnd(IUpdateInstaller *installer);
[id(5)] HRESULT GetUserType([out, retval] UserType *retval);
[id(8)] HRESULT RebootIfRequired(void);
[id(18)] HRESULT ViewLog(ViewLogType logType);
[id(9)] HRESULT ViewWindowsUpdateLog(void);
[id(13)] HRESULT OpenWindowsUpdateSettings(void);
[id(16)] HRESULT BeforeUpdate(void);
[id(17)] HRESULT AfterUpdate(void);
[id(6), propget] HRESULT IsRebootRequired([out, retval] VARIANT_BOOL *retval);
[id(7), propget] HRESULT IsWindowsUpdateDisabled([out, retval] VARIANT_BOOL *retval);
[id(10), propget] HRESULT IsUsingWsusServer([out, retval] VARIANT_BOOL *retval);
[id(11), propget] HRESULT WsusServerUrl([out, retval] BSTR *retval);
[id(12), propget] HRESULT WsusStatusServerUrl([out, retval] BSTR *retval);
};
[
object,
uuid(4524BFBF-70BD-4EAC-AD33-6BADA4FB0638),
dual,
nonextensible,
pointer_default(unique)
]
interface IProgressBarControl : IDispatch
{
[id(1), propget] HRESULT Value([out, retval] SHORT *retval);
[id(1), propput] HRESULT Value([in] SHORT newVal);
};
[
object,
uuid(3236E684-0E4B-4780-9F31-F1983F5AB78D),
dual,
nonextensible,
pointer_default(unique),
oleautomation
]
interface IElevationHelper : IDispatch
{
[id(1)] HRESULT CreateObject(BSTR progID, [out, retval] IDispatch **retval);
[id(5)] HRESULT SetBrowserHwnd(IUpdateInstaller *installer, HWND hwnd);
[id(2)] HRESULT Reboot(void);
[id(3)] HRESULT BeforeUpdate(void);
[id(4)] HRESULT AfterUpdate(void);
};
[
uuid(05D22F33-C7C3-4C90-BDD9-CEDC86EA8FBE),
version(1.0),
helpstring("Legacy Update Control")
]
library LegacyUpdateLib {
importlib("stdole2.tlb");
[
uuid(AD28E0DF-5F5A-40B5-9432-85EFD97D1F9F),
control,
helpstring("LegacyUpdateCtrl Class")
]
coclass LegacyUpdateCtrl {
[default] interface ILegacyUpdateCtrl;
};
[
uuid(7B875A2F-2DFB-4D38-91F5-5C0BFB74C377),
control,
helpstring("ProgressBarControl Class")
]
coclass ProgressBarControl
{
[default] interface IProgressBarControl;
};
[
uuid(84F517AD-6438-478F-BEA8-F0B808DC257F),
helpstring("ElevationHelper Class")
]
coclass ElevationHelper
{
[default] interface IElevationHelper;
};
};
================================================
FILE: LegacyUpdate/LegacyUpdate.rc
================================================
#include "resource.h"
#include
#include "Version.h"
/////////////////////////////////////////////////////////////////////////////
// English (United States) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(65001)
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION VERSION
PRODUCTVERSION VERSION
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG | VS_FF_PRERELEASE
#else
FILEFLAGS 0
#endif
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE VFT2_UNKNOWN
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "Hashbang Productions"
VALUE "FileDescription", "Legacy Update"
VALUE "FileVersion", VERSION_STRING
VALUE "InternalName", "LegacyUpdate.dll"
VALUE "LegalCopyright", "© Hashbang Productions. All rights reserved."
VALUE "OriginalFilename", "LegacyUpdate.dll"
VALUE "ProductName", "Legacy Update"
VALUE "ProductVersion", VERSION_STRING
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x0409, 0x04b0
END
END
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE
BEGIN
IDS_LEGACYUPDATE "Legacy Update"
END
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
//
// Type Library
//
ID_TYPELIB TYPELIB "LegacyUpdate.tlb"
#include "wuerror.rc"
================================================
FILE: LegacyUpdate/LegacyUpdate.vcxproj
================================================
Debug
Win32
Release
Win32
Debug
x64
Release
x64
17.0
Win32Proj
{e9142706-8e21-4ece-80f8-d3f7b95c6f27}
LegacyUpdate
10.0
Application
true
v143
Unicode
Application
false
v143
true
Unicode
DynamicLibrary
true
v143
Unicode
DynamicLibrary
false
v143
true
Unicode
Level3
true
WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
Console
true
Level3
true
true
true
WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
Console
true
Level3
true
_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
Console
true
Level3
true
true
true
NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
Console
true
================================================
FILE: LegacyUpdate/LegacyUpdate.vcxproj.filters
================================================
{4FC737F1-C7A5-4376-A066-2A32D752A2FF}
cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
{93995380-89BD-4b04-88EB-625FBE52EBFB}
h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
================================================
FILE: LegacyUpdate/LegacyUpdateCtrl.cpp
================================================
// LegacyUpdateCtrl.cpp : Implementation of the CLegacyUpdateCtrl ActiveX Control class.
#include "LegacyUpdateCtrl.h"
#include "Compat.h"
#include "ElevationHelper.h"
#include "Exec.h"
#include "HResult.h"
#include "LegacyUpdate.h"
#include "ProductInfo.h"
#include "ProductName.h"
#include "Registry.h"
#include "User.h"
#include "Utils.h"
#include "Version.h"
#include "VersionInfo.h"
#include "ViewLog.h"
#include
#include
#include
#include
const WCHAR *permittedHosts[] = {
L"legacyupdate.net",
L"test.legacyupdate.net"
};
#define LEGACYUPDATECTRL_MISCSTATUS (OLEMISC_RECOMPOSEONRESIZE | OLEMISC_CANTLINKINSIDE | OLEMISC_INSIDEOUT | OLEMISC_ACTIVATEWHENVISIBLE | OLEMISC_SETCLIENTSITEFIRST)
DEFINE_UUIDOF(CLegacyUpdateCtrl, CLSID_LegacyUpdateCtrl);
STDMETHODIMP CLegacyUpdateCtrl::Create(IUnknown *pUnkOuter, REFIID riid, void **ppv) {
if (pUnkOuter != NULL) {
return CLASS_E_NOAGGREGATION;
}
CLegacyUpdateCtrl *pThis = (CLegacyUpdateCtrl *)CoTaskMemAlloc(sizeof(CLegacyUpdateCtrl));
if (pThis == NULL) {
return E_OUTOFMEMORY;
}
new(pThis) CLegacyUpdateCtrl();
HRESULT hr = pThis->QueryInterface(riid, ppv);
pThis->Release();
return hr;
}
CLegacyUpdateCtrl::~CLegacyUpdateCtrl(void) {
if (m_clientSite) {
m_clientSite->Release();
m_clientSite = NULL;
}
if (m_adviseSink) {
m_adviseSink->Release();
m_adviseSink = NULL;
}
if (m_elevatedHelper) {
m_elevatedHelper->Release();
m_elevatedHelper = NULL;
}
if (m_nonElevatedHelper) {
m_nonElevatedHelper->Release();
m_nonElevatedHelper = NULL;
}
}
STDMETHODIMP CLegacyUpdateCtrl::UpdateRegistry(BOOL bRegister) {
if (bRegister) {
RegistryEntry entries[] = {
{HKEY_CLASSES_ROOT, L"LegacyUpdate.Control", NULL, REG_SZ, (LPVOID)L"Legacy Update Control"},
{HKEY_CLASSES_ROOT, L"LegacyUpdate.Control\\CurVer", NULL, REG_SZ, (LPVOID)L"LegacyUpdate.Control.1"},
{HKEY_CLASSES_ROOT, L"LegacyUpdate.Control.1", NULL, REG_SZ, (LPVOID)L"Legacy Update Control"},
{HKEY_CLASSES_ROOT, L"LegacyUpdate.Control.1\\CLSID", NULL, REG_SZ, (LPVOID)L"%CLSID%"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%", NULL, REG_SZ, (LPVOID)L"Legacy Update Control"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%", L"AppID", REG_SZ, (LPVOID)L"%APPID%"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\ProgID", NULL, REG_SZ, (LPVOID)L"LegacyUpdate.Control.1"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\VersionIndependentProgID", NULL, REG_SZ, (LPVOID)L"LegacyUpdate.Control"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\Programmable", NULL, REG_SZ, NULL},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\InprocServer32", NULL, REG_SZ, (LPVOID)L"%MODULE%"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\InprocServer32", L"ThreadingModel", REG_SZ, (LPVOID)L"Apartment"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\Control", NULL, REG_SZ, NULL},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\TypeLib", NULL, REG_SZ, (LPVOID)L"%LIBID%"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\Version", NULL, REG_SZ, (LPVOID)L"1.0"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\MiscStatus", NULL, REG_DWORD, (LPVOID)LEGACYUPDATECTRL_MISCSTATUS},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\Implemented Categories\\{7DD95801-9882-11CF-9FA9-00AA006C42C4}", NULL, REG_SZ, NULL},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\Implemented Categories\\{7DD95802-9882-11CF-9FA9-00AA006C42C4}", NULL, REG_SZ, NULL},
{}
};
return SetRegistryEntries(entries);
} else {
RegistryEntry entries[] = {
{HKEY_CLASSES_ROOT, L"LegacyUpdate.Control", NULL, 0, DELETE_KEY},
{HKEY_CLASSES_ROOT, L"LegacyUpdate.Control.1", NULL, 0, DELETE_KEY},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%", NULL, 0, DELETE_KEY},
{}
};
return SetRegistryEntries(entries);
}
}
#pragma mark - IUnknown
STDMETHODIMP CLegacyUpdateCtrl::QueryInterface(REFIID riid, void **ppvObject) {
if (ppvObject == NULL) {
return E_POINTER;
}
*ppvObject = NULL;
if (IsEqualIID(riid, IID_IOleObject)) {
*ppvObject = &m_IOleObject;
AddRef();
return S_OK;
}
return IDispatchImpl::QueryInterface(riid, ppvObject);
}
STDMETHODIMP_(ULONG) CLegacyUpdateCtrl::AddRef(void) {
return InterlockedIncrement(&m_refCount);
}
STDMETHODIMP_(ULONG) CLegacyUpdateCtrl::Release(void) {
ULONG count = InterlockedDecrement(&m_refCount);
if (count == 0) {
this->~CLegacyUpdateCtrl();
CoTaskMemFree(this);
}
return count;
}
#pragma mark - ILegacyUpdateCtrl
STDMETHODIMP CLegacyUpdateCtrl::GetHTMLDocument(IHTMLDocument2 **retval) {
if (m_clientSite == NULL) {
return E_ACCESSDENIED;
}
CComPtr container;
HRESULT hr = m_clientSite->GetContainer(&container);
CHECK_HR_OR_RETURN(L"GetContainer");
hr = container->QueryInterface(IID_IHTMLDocument2, (void **)retval);
CHECK_HR_OR_RETURN(L"QueryInterface IID_IHTMLDocument2");
return hr;
}
STDMETHODIMP CLegacyUpdateCtrl::IsPermitted(void) {
CComPtr document;
CComPtr location;
BSTR host = NULL;
HRESULT hr = GetHTMLDocument(&document);
if (!SUCCEEDED(hr)) {
#ifdef _DEBUG
// Allow debugging outside of IE (e.g. via PowerShell)
TRACE(L"GetHTMLDocument() failed - allowing anyway due to debug build");
return S_OK;
#else
goto end;
#endif
}
hr = document->get_location(&location);
CHECK_HR_OR_GOTO_END(L"get_location");
if (location == NULL) {
hr = E_ACCESSDENIED;
goto end;
}
hr = location->get_host(&host);
CHECK_HR_OR_GOTO_END(L"get_host");
for (DWORD i = 0; i < ARRAYSIZE(permittedHosts); i++) {
if (wcscmp(host, permittedHosts[i]) == 0) {
SysFreeString(host);
return S_OK;
}
}
end:
if (host) {
SysFreeString(host);
}
return hr;
}
STDMETHODIMP CLegacyUpdateCtrl::GetIEWindowHWND(HWND *retval) {
*retval = NULL;
if (m_clientSite == NULL) {
return E_FAIL;
}
CComPtr oleWindow;
HRESULT hr = m_clientSite->QueryInterface(IID_IOleWindow, (void **)&oleWindow);
CHECK_HR_OR_RETURN(L"QueryInterface");
hr = oleWindow->GetWindow(retval);
CHECK_HR_OR_RETURN(L"GetWindow");
return hr;
}
STDMETHODIMP CLegacyUpdateCtrl::GetElevatedHelper(IElevationHelper **retval) {
IElevationHelper *elevatedHelper = m_elevatedHelper ? m_elevatedHelper : m_nonElevatedHelper;
if (elevatedHelper == NULL) {
// Use the helper directly, without elevation. It's the responsibility of the caller to ensure it
// is already running as admin on 2k/XP, or that it has requested elevation on Vista+.
HRESULT hr = CoCreateInstance(CLSID_ElevationHelper, NULL, CLSCTX_INPROC_SERVER, IID_IElevationHelper, (void **)&elevatedHelper);
CHECK_HR_OR_RETURN(L"CoCreateInstance");
if (elevatedHelper == NULL) {
return E_POINTER;
}
m_nonElevatedHelper = elevatedHelper;
}
*retval = elevatedHelper;
return S_OK;
}
#define DoIsPermittedCheck(void) { \
HRESULT hr = IsPermitted(); \
if (!SUCCEEDED(hr)) { \
return hr; \
} \
}
STDMETHODIMP CLegacyUpdateCtrl::CheckControl(VARIANT_BOOL *retval) {
if (retval == NULL) {
return E_POINTER;
}
DoIsPermittedCheck();
*retval = VARIANT_TRUE;
return S_OK;
}
STDMETHODIMP CLegacyUpdateCtrl::MessageForHresult(LONG inHresult, BSTR *retval) {
DoIsPermittedCheck();
LPWSTR message = GetMessageForHresult(inHresult);
*retval = SysAllocString(message);
LocalFree(message);
return S_OK;
}
STDMETHODIMP CLegacyUpdateCtrl::GetOSVersionInfo(OSVersionField osField, LONG systemMetric, VARIANT *retval) {
DoIsPermittedCheck();
VariantInit(retval);
OSVERSIONINFOEX *versionInfo = GetVersionInfo();
switch (osField) {
case e_majorVer:
retval->vt = VT_UI4;
retval->ulVal = versionInfo->dwMajorVersion;
break;
case e_minorVer:
retval->vt = VT_UI4;
retval->ulVal = versionInfo->dwMinorVersion;
break;
case e_buildNumber:
retval->vt = VT_UI4;
retval->ulVal = versionInfo->dwBuildNumber;
break;
case e_platform:
retval->vt = VT_UI4;
retval->ulVal = versionInfo->dwPlatformId;
break;
case e_SPMajor:
retval->vt = VT_I4;
retval->lVal = versionInfo->wServicePackMajor;
break;
case e_SPMinor:
retval->vt = VT_I4;
retval->lVal = versionInfo->wServicePackMinor;
break;
case e_productSuite:
retval->vt = VT_I4;
retval->lVal = versionInfo->wSuiteMask;
break;
case e_productType:
retval->vt = VT_I4;
retval->lVal = versionInfo->wProductType;
break;
case e_systemMetric:
retval->vt = VT_I4;
retval->lVal = GetSystemMetrics(systemMetric);
break;
case e_SPVersionString: {
LPWSTR data = NULL;
DWORD size = 0;
HRESULT hr = GetRegistryString(HKEY_LOCAL_MACHINE, REGPATH_WINNT, L"BuildLab", KEY_WOW64_64KEY, &data, &size);
retval->vt = VT_BSTR;
retval->bstrVal = SUCCEEDED(hr)
? SysAllocStringLen(data, size - 1)
// BuildLab doesn't exist on Windows 2000.
: SysAllocString(versionInfo->szCSDVersion);
if (data) {
LocalFree(data);
}
break;
}
case e_controlVersionString:
retval->vt = VT_BSTR;
retval->bstrVal = SysAllocString(L"" VERSION_STRING);
break;
case e_VistaProductType: {
DWORD productType = 0;
GetVistaProductInfo(versionInfo->dwMajorVersion, versionInfo->dwMinorVersion, versionInfo->wServicePackMajor, versionInfo->wServicePackMinor, &productType);
retval->vt = VT_UI4;
retval->ulVal = productType;
break;
}
case e_productName:
return GetOSProductName(retval);
case e_displayVersion: {
LPWSTR data = NULL;
DWORD size = 0;
HRESULT hr = GetRegistryString(HKEY_LOCAL_MACHINE, REGPATH_WINNT, L"DisplayVersion", KEY_WOW64_64KEY, &data, &size);
if (SUCCEEDED(hr)) {
retval->vt = VT_BSTR;
retval->bstrVal = SysAllocStringLen(data, size - 1);
LocalFree(data);
}
break;
}
}
return S_OK;
}
STDMETHODIMP CLegacyUpdateCtrl::RequestElevation(void) {
DoIsPermittedCheck();
if (m_elevatedHelper != NULL || !AtLeastWinVista()) {
return S_OK;
}
// https://learn.microsoft.com/en-us/windows/win32/com/the-com-elevation-moniker
HWND hwnd;
GetIEWindowHWND(&hwnd);
HRESULT hr = CoCreateInstanceAsAdmin(hwnd, CLSID_ElevationHelper, IID_IElevationHelper, (void**)&m_elevatedHelper);
CHECK_HR_OR_RETURN(L"CoCreateInstanceAsAdmin");
return hr;
}
STDMETHODIMP CLegacyUpdateCtrl::CreateObject(BSTR progID, IDispatch **retval) {
DoIsPermittedCheck();
if (progID == NULL) {
return E_INVALIDARG;
}
if (!ProgIDIsPermitted(progID)) {
return E_ACCESSDENIED;
}
IElevationHelper *elevatedHelper;
HRESULT hr = GetElevatedHelper(&elevatedHelper);
CHECK_HR_OR_RETURN(L"GetElevatedHelper");
return elevatedHelper->CreateObject(progID, retval);
}
STDMETHODIMP CLegacyUpdateCtrl::SetBrowserHwnd(IUpdateInstaller *installer) {
DoIsPermittedCheck();
if (installer == NULL) {
return E_INVALIDARG;
}
IElevationHelper *elevatedHelper;
HRESULT hr = GetElevatedHelper(&elevatedHelper);
CHECK_HR_OR_RETURN(L"GetElevatedHelper");
HWND hwnd;
hr = GetIEWindowHWND(&hwnd);
CHECK_HR_OR_RETURN(L"GetIEWindowHWND");
return elevatedHelper->SetBrowserHwnd(installer, hwnd);
}
STDMETHODIMP CLegacyUpdateCtrl::GetUserType(UserType *retval) {
DoIsPermittedCheck();
if (IsUserAdmin()) {
// Entire process is elevated.
*retval = e_admin;
} else if (m_elevatedHelper != NULL) {
// Our control has successfully received elevation.
*retval = e_elevated;
} else {
// The control has no admin rights (although it may not have requested them yet).
*retval = e_nonAdmin;
}
return S_OK;
}
STDMETHODIMP CLegacyUpdateCtrl::get_IsRebootRequired(VARIANT_BOOL *retval) {
DoIsPermittedCheck();
// Ask WU itself whether a reboot is required
CComPtr systemInfo;
if (SUCCEEDED(systemInfo.CoCreateInstance(CLSID_SystemInformation, NULL, CLSCTX_INPROC_SERVER))) {
if (SUCCEEDED(systemInfo->get_RebootRequired(retval)) && *retval == VARIANT_TRUE) {
return S_OK;
}
}
// Check reboot flag in registry
HKEY subkey = NULL;
HRESULT hr = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGPATH_WU_REBOOTREQUIRED, 0, GetRegistryWow64Flag(KEY_READ | KEY_WOW64_64KEY), &subkey));
if (SUCCEEDED(hr)) {
RegCloseKey(subkey);
*retval = VARIANT_TRUE;
return S_OK;
}
*retval = VARIANT_FALSE;
return S_OK;
}
STDMETHODIMP CLegacyUpdateCtrl::get_IsWindowsUpdateDisabled(VARIANT_BOOL *retval) {
DoIsPermittedCheck();
// Future note: These are in HKCU on NT; HKLM on 9x.
// Remove links and access to Windows Update
DWORD value = 0;
HRESULT hr = GetRegistryDword(HKEY_CURRENT_USER, REGPATH_POLICIES_EXPLORER, L"NoWindowsUpdate", KEY_WOW64_64KEY, &value);
if (SUCCEEDED(hr) && value == 1) {
*retval = VARIANT_TRUE;
return S_OK;
}
// Remove access to use all Windows Update features
hr = GetRegistryDword(HKEY_CURRENT_USER, REGPATH_POLICIES_WU, L"DisableWindowsUpdateAccess", KEY_WOW64_64KEY, &value);
if (SUCCEEDED(hr) && value == 1) {
*retval = VARIANT_TRUE;
return S_OK;
}
*retval = VARIANT_FALSE;
return S_OK;
}
STDMETHODIMP CLegacyUpdateCtrl::RebootIfRequired(void) {
DoIsPermittedCheck();
VARIANT_BOOL isRebootRequired = VARIANT_FALSE;
HRESULT hr = get_IsRebootRequired(&isRebootRequired);
if (SUCCEEDED(hr) && isRebootRequired == VARIANT_TRUE) {
IElevationHelper *elevatedHelper;
hr = GetElevatedHelper(&elevatedHelper);
CHECK_HR_OR_RETURN(L"GetElevatedHelper");
hr = elevatedHelper->Reboot();
CHECK_HR_OR_RETURN(L"Reboot");
}
return hr;
}
static LPCWSTR logTypeParams[] = {
L"/log system",
L"/log local",
L"/log locallow",
L"/log windowsupdate"
};
STDMETHODIMP CLegacyUpdateCtrl::ViewLog(ViewLogType logType) {
DoIsPermittedCheck();
if (logType < 0 || logType >= ARRAYSIZE(logTypeParams)) {
return E_INVALIDARG;
}
HRESULT hr = StartLauncher(logTypeParams[logType], FALSE);
if (!SUCCEEDED(hr)) {
// Try directly
hr = ::ViewLog((LogAction)logType, SW_SHOWDEFAULT, TRUE);
}
CHECK_HR_OR_RETURN(L"ViewLog");
return hr;
}
STDMETHODIMP CLegacyUpdateCtrl::ViewWindowsUpdateLog(void) {
return ViewLog(e_windowsUpdate);
}
STDMETHODIMP CLegacyUpdateCtrl::OpenWindowsUpdateSettings(void) {
DoIsPermittedCheck();
HRESULT hr = StartLauncher(L"/options", FALSE);
if (!SUCCEEDED(hr)) {
TRACE(L"OpenWindowsUpdateSettings() failed, falling back: %08x", hr);
// Might happen if the site isn't trusted, and the user rejected the IE medium integrity prompt.
// Use the basic Automatic Updates dialog directly from COM.
CComPtr automaticUpdates;
hr = automaticUpdates.CoCreateInstance(CLSID_AutomaticUpdates, NULL, CLSCTX_INPROC_SERVER);
CHECK_HR_OR_RETURN(L"CoCreateInstance CLSID_AutomaticUpdates");
hr = automaticUpdates->ShowSettingsDialog();
CHECK_HR_OR_RETURN(L"ShowSettingsDialog");
}
return hr;
}
STDMETHODIMP CLegacyUpdateCtrl::get_IsUsingWsusServer(VARIANT_BOOL *retval) {
DoIsPermittedCheck();
DWORD useWUServer = 0;
HRESULT hr = GetRegistryDword(HKEY_LOCAL_MACHINE, REGPATH_POLICIES_WU_AU, L"UseWUServer", KEY_WOW64_64KEY, &useWUServer);
*retval = SUCCEEDED(hr) && useWUServer == 1 ? VARIANT_TRUE : VARIANT_FALSE;
return S_OK;
}
STDMETHODIMP CLegacyUpdateCtrl::get_WsusServerUrl(BSTR *retval) {
DoIsPermittedCheck();
LPWSTR data = NULL;
DWORD size = 0;
HRESULT hr = GetRegistryString(HKEY_LOCAL_MACHINE, REGPATH_POLICIES_WU, L"WUServer", KEY_WOW64_64KEY, &data, &size);
*retval = SUCCEEDED(hr) ? SysAllocStringLen(data, size - 1) : NULL;
if (data) {
LocalFree(data);
}
return S_OK;
}
STDMETHODIMP CLegacyUpdateCtrl::get_WsusStatusServerUrl(BSTR *retval) {
DoIsPermittedCheck();
LPWSTR data = NULL;
DWORD size = 0;
HRESULT hr = GetRegistryString(HKEY_LOCAL_MACHINE, REGPATH_POLICIES_WU, L"WUStatusServer", KEY_WOW64_64KEY, &data, &size);
*retval = SUCCEEDED(hr) ? SysAllocStringLen(data, size - 1) : NULL;
if (data) {
LocalFree(data);
}
return S_OK;
}
STDMETHODIMP CLegacyUpdateCtrl::BeforeUpdate(void) {
DoIsPermittedCheck();
IElevationHelper *elevatedHelper;
HRESULT hr = GetElevatedHelper(&elevatedHelper);
CHECK_HR_OR_RETURN(L"GetElevatedHelper");
return elevatedHelper->BeforeUpdate();
}
STDMETHODIMP CLegacyUpdateCtrl::AfterUpdate(void) {
DoIsPermittedCheck();
IElevationHelper *elevatedHelper;
HRESULT hr = GetElevatedHelper(&elevatedHelper);
CHECK_HR_OR_RETURN(L"GetElevatedHelper");
return elevatedHelper->AfterUpdate();
}
================================================
FILE: LegacyUpdate/LegacyUpdateCtrl.h
================================================
#pragma once
// LegacyUpdateCtrl.h : Declaration of the CLegacyUpdateCtrl ActiveX Control class.
// CLegacyUpdateCtrl : See LegacyUpdateCtrl.cpp for implementation.
#include
#include
#include "resource.h"
#include "com.h"
#include "LegacyUpdate_i.h"
class CLegacyUpdateCtrl;
class DECLSPEC_NOVTABLE CLegacyUpdateCtrl_IOleObject :
public IOleObjectImpl {
public:
CLegacyUpdateCtrl_IOleObject(CLegacyUpdateCtrl *pParent) :
IOleObjectImpl(pParent) {}
};
class DECLSPEC_NOVTABLE CLegacyUpdateCtrl :
public IDispatchImpl {
public:
CLegacyUpdateCtrl() :
m_IOleObject(this),
m_refCount(1),
m_clientSite(NULL),
m_adviseSink(NULL),
m_elevatedHelper(NULL),
m_nonElevatedHelper(NULL) {}
virtual ~CLegacyUpdateCtrl();
static STDMETHODIMP Create(IUnknown *pUnkOuter, REFIID riid, void **ppv);
static STDMETHODIMP UpdateRegistry(BOOL bRegister);
private:
CLegacyUpdateCtrl_IOleObject m_IOleObject;
LONG m_refCount;
public:
// IUnknown
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
IOleClientSite *m_clientSite;
IAdviseSink *m_adviseSink;
private:
IElevationHelper *m_elevatedHelper;
IElevationHelper *m_nonElevatedHelper;
STDMETHODIMP GetHTMLDocument(IHTMLDocument2 **retval);
STDMETHODIMP IsPermitted();
STDMETHODIMP GetIEWindowHWND(HWND *retval);
STDMETHODIMP GetElevatedHelper(IElevationHelper **retval);
public:
// ILegacyUpdateCtrl
STDMETHODIMP CheckControl(VARIANT_BOOL *retval);
STDMETHODIMP MessageForHresult(LONG inHresult, BSTR *retval);
STDMETHODIMP GetOSVersionInfo(OSVersionField osField, LONG systemMetric, VARIANT *retval);
STDMETHODIMP RequestElevation();
STDMETHODIMP CreateObject(BSTR progID, IDispatch **retval);
STDMETHODIMP SetBrowserHwnd(IUpdateInstaller *installer);
STDMETHODIMP GetUserType(UserType *retval);
STDMETHODIMP get_IsRebootRequired(VARIANT_BOOL *retval);
STDMETHODIMP get_IsWindowsUpdateDisabled(VARIANT_BOOL *retval);
STDMETHODIMP RebootIfRequired();
STDMETHODIMP ViewLog(ViewLogType logType);
STDMETHODIMP ViewWindowsUpdateLog();
STDMETHODIMP OpenWindowsUpdateSettings();
STDMETHODIMP get_IsUsingWsusServer(VARIANT_BOOL *retval);
STDMETHODIMP get_WsusServerUrl(BSTR *retval);
STDMETHODIMP get_WsusStatusServerUrl(BSTR *retval);
STDMETHODIMP BeforeUpdate();
STDMETHODIMP AfterUpdate();
};
================================================
FILE: LegacyUpdate/Makefile
================================================
FILES = \
$(wildcard *.cpp) \
dlldatax.c \
../shared/Exec.c \
../shared/HResult.c \
../shared/LegacyUpdate.c \
../shared/Log.c \
../shared/ProductInfo.c \
../shared/Registry.c \
../shared/ViewLog.c \
../shared/WMI.c \
../shared/Wow64.c \
$(OBJDIR)/LegacyUpdate_i.c
RCFILES = LegacyUpdate.rc
MCFILES = wuerror.mc
IDLFILES = LegacyUpdate.idl
BIN = obj/LegacyUpdate$(ARCH).dll
DEF = LegacyUpdate.def
C_LANG = c++
CXX_LANG = c++
all:: all-archs
all-archs: all-32 all-64
include ../build/shared.mk
CFLAGS += \
-DLOG_NAME="\"Control\""
LDFLAGS += \
-shared \
-lkernel32 \
-luser32 \
-lgdi32 \
-lole32 \
-loleaut32 \
-ladvapi32 \
-lshell32 \
-lcomctl32 \
-lpsapi \
-lwbemuuid \
-luuid \
-lshlwapi \
-lrpcrt4 \
-lrpcns4
ifeq ($(ARCH),64)
LDFLAGS += -Wl,-eDllMain
else
LDFLAGS += -Wl,-e_DllMain
endif
$(OBJ): $(OBJDIR)/LegacyUpdate_i.h
$(OBJDIR)/dlldatax.o: dlldatax.c $(DLLDATA) $(IDL_P)
$(CC) -x c $< $(filter-out -Wpedantic, $(CFLAGS)) -c -o $@
.PHONY: all all-archs all-32 all-64
================================================
FILE: LegacyUpdate/NGen.cpp
================================================
#include "NGen.h"
#include "Exec.h"
#include "VersionInfo.h"
#include "Wow64.h"
#include
STDMETHODIMP PauseResumeNGenQueue(BOOL state) {
// Only necessary prior to Windows 8
if (AtLeastWin8()) {
return S_OK;
}
// If resuming but the system is already shutting down, ignore because it will process on boot
if (state && GetSystemMetrics(SM_SHUTTINGDOWN)) {
return S_OK;
}
// Pause and resume .NET Framework global assembly cache (GAC) and NGen queue
static LPCWSTR versions[] = {
L"v4.0.30319",
L"v2.0.50727"
};
SYSTEM_INFO systemInfo;
OurGetNativeSystemInfo(&systemInfo);
BOOL hasFramework64 = systemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 || systemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64;
HRESULT hr = S_OK;
for (DWORD i = 0; i < ARRAYSIZE(versions); i++) {
for (int j = 0; j < 2; j++) {
if (j == 1 && !hasFramework64) {
break;
}
WCHAR path[MAX_PATH], expandedPath[MAX_PATH];
wsprintf(path, L"%%SystemRoot%%\\Microsoft.NET\\Framework%ls\\%ls\\ngen.exe", j == 1 ? L"64": L"", versions[i]);
ExpandEnvironmentStrings(path, expandedPath, ARRAYSIZE(expandedPath));
if (PathFileExists(expandedPath)) {
SHELLEXECUTEINFO execInfo = {0};
execInfo.cbSize = sizeof(execInfo);
execInfo.fMask = SEE_MASK_FLAG_NO_UI;
execInfo.lpFile = expandedPath;
execInfo.lpParameters = state ? L"queue pause" : L"queue continue";
execInfo.nShow = SW_HIDE;
hr = ExecEx(&execInfo, TRUE, NULL);
if (SUCCEEDED(hr)) {
break;
}
}
}
}
return hr;
}
================================================
FILE: LegacyUpdate/NGen.h
================================================
#pragma once
STDMETHODIMP PauseResumeNGenQueue(BOOL state);
================================================
FILE: LegacyUpdate/ProductName.cpp
================================================
#include
#include
#include "Registry.h"
#include "VersionInfo.h"
#include "WMI.h"
#include "Wow64.h"
typedef WINBOOL (__stdcall *_IsOS)(DWORD dwOS);
static VARIANT _productName;
typedef struct {
LPCWSTR library;
UINT stringID;
} WinNT5BrandString;
typedef struct {
DWORD version;
DWORD osFlag;
WORD archFlag;
UINT stringIDs[3];
} WinNT5Variant;
#define STR_WINXP 1
#define STR_SRV03 2
#define STR_IA64 3
#define STR_EMBEDDED 4
#define STR_HOME 5
#define STR_PRO 6
#define STR_STANDARD 7
#define STR_ENTERPRISE 8
#define STR_DATACENTER 9
#define STR_BLADE 10
#define STR_SBS 11
#define STR_TABLETPC2005 12
#define STR_WIN 13
#define STR_TABLETPC 14
#define STR_MEDIACENTER 15
#define STR_STARTER 16
#define STR_EMBPOS 17
#define STR_WINFLP 18
#define STR_EMBSTD2009 19
#define STR_EMBPOS2009 20
#define STR_PROIA64 21
#define STR_STANDARDIA64 22
#define STR_ENTERPRISEIA64 23
#define STR_DATACENTERIA64 24
#define STR_PROX64 25
#define STR_STANDARDX64 26
#define STR_ENTERPRISEX64 27
#define STR_DATACENTERX64 28
#define STR_SRV03R2 29
#define STR_APPLIANCE 30
#define STR_STORAGESERVER_1 31
#define STR_STORAGESERVER_2 32
#define STR_UDSSERVER_2 33
#define STR_COMPUTECLUSTER_1 34
#define STR_COMPUTECLUSTER_2 35
#define STR_COMPUTECLUSTER_3 36
#define STR_HOMESERVER_1 37
#define STR_HOMESERVER_2 38
static const WinNT5BrandString nt5BrandStrings[] = {
// Skip index 0
{},
// Base editions
{L"sysdm.cpl", 180}, // "Microsoft Windows XP"
{L"sysdm.cpl", 181}, // "Microsoft Windows Server 2003"
{L"sysdm.cpl", 188}, // "64-Bit Edition"
{L"sysdm.cpl", 189}, // "Embedded"
{L"sysdm.cpl", 190}, // "Home Edition"
{L"sysdm.cpl", 191}, // "Professional"
{L"sysdm.cpl", 192}, // "Standard Edition"
{L"sysdm.cpl", 193}, // "Enterprise Edition"
{L"sysdm.cpl", 194}, // "Datacenter Edition"
{L"sysdm.cpl", 196}, // "Web Edition"
{L"sysdm.cpl", 197}, // "for Small Business Server"
// Post-SP1
{L"xpsp2res.dll", 13813}, // "Tablet PC Edition 2005"
// Post-SP2
{L"xpsp3res.dll", 2000}, // "Microsoft Windows"
// XP
{L"winbrand.dll", 2000}, // "Tablet PC Edition"
{L"winbrand.dll", 2001}, // "Media Center Edition"
{L"winbrand.dll", 2002}, // "Starter Edition"
{L"winbrand.dll", 2003}, // "Embedded for Point of Service"
{L"winbrand.dll", 2004}, // "Fundamentals for Legacy PCs"
{L"winbrand.dll", 2005}, // "Windows Embedded Standard"
{L"winbrand.dll", 2006}, // "Embedded POSReady 2009"
// Server 2003
{L"ws03res.dll", 4600}, // "Microsoft(R) Windows(R) XP 64-Bit Edition for Itanium-based Systems"
{L"ws03res.dll", 4601}, // "Microsoft(R) Windows(R) Server 2003, Standard Edition for 64-Bit Itanium-based Systems"
{L"ws03res.dll", 4602}, // "Microsoft(R) Windows(R) Server 2003, Enterprise Edition for 64-Bit Itanium-based Systems"
{L"ws03res.dll", 4603}, // "Microsoft(R) Windows(R) Server 2003, Datacenter Edition for 64-Bit Itanium-based Systems"
{L"ws03res.dll", 13812}, // "Professional x64 Edition"
{L"ws03res.dll", 13814}, // "Standard x64 Edition"
{L"ws03res.dll", 13815}, // "Enterprise x64 Edition"
{L"ws03res.dll", 13816}, // "Datacenter x64 Edition"
// R2
{L"r2brand.dll", 1101}, // "Microsoft Windows Server 2003 R2"
// Appliance Server
{L"winbrand.dll", 2002}, // "Appliance Server"
// Storage Server
{L"wssbrand.dll", 1101}, // "Microsoft"
{L"wssbrand.dll", 1102}, // "Windows Storage Server 2003 R2"
{L"wssbrand.dll", 1104}, // "Windows UDS Server 2003"
// Compute Cluster
{L"hpcbrand.dll", 1101}, // "Microsoft"
{L"hpcbrand.dll", 1102}, // "Windows Server 2003"
{L"hpcbrand.dll", 1103}, // "Compute Cluster Edition"
// Home Server
{L"whsbrand.dll", 1101}, // "Microsoft"
{L"whsbrand.dll", 1102} // "Windows Home Server"
};
static const WinNT5Variant nt5Variants[] = {
// XP
// "XP Reloaded" editions - also identifies as OS_PROFESSIONAL
{MAXDWORD, OS_TABLETPC, MAXWORD, {STR_WINXP, STR_TABLETPC}}, // "Microsoft Windows XP Tablet PC Edition"
{MAXDWORD, OS_MEDIACENTER, MAXWORD, {STR_WINXP, STR_MEDIACENTER}}, // "Microsoft Windows XP Media Center Edition"
{MAXDWORD, OS_STARTER, MAXWORD, {STR_WINXP, STR_STARTER}}, // "Microsoft Windows XP Starter Edition"
// Embedded editions - also identifies as OS_EMBEDDED and OS_PROFESSIONAL
{0x0501, OS_EMBPOS, MAXWORD, {STR_WIN, STR_EMBPOS}}, // "Microsoft Windows Embedded for Point of Service"
{MAXDWORD, OS_WINFLP, MAXWORD, {STR_WIN, STR_WINFLP}}, // "Microsoft Windows Fundamentals for Legacy PCs"
{MAXDWORD, OS_EMBSTD2009, MAXWORD, {STR_WIN, STR_EMBSTD2009}}, // "Microsoft Windows Embedded Standard"
{MAXDWORD, OS_EMBPOS2009, MAXWORD, {STR_WIN, STR_EMBPOS2009}}, // "Microsoft Windows Embedded POSReady 2009"
{MAXDWORD, OS_EMBEDDED, MAXWORD, {STR_WINXP, STR_EMBEDDED}}, // "Microsoft Windows XP Embedded"
// Base editions
{MAXDWORD, OS_HOME, MAXWORD, {STR_WINXP, STR_HOME}}, // "Microsoft Windows XP Home Edition"
{MAXDWORD, OS_PROFESSIONAL, PROCESSOR_ARCHITECTURE_AMD64, {STR_WINXP, STR_PROX64}}, // "Microsoft Windows XP Professional x64 Edition"
{MAXDWORD, OS_PROFESSIONAL, PROCESSOR_ARCHITECTURE_IA64, {STR_WINXP, STR_PRO, STR_IA64}}, // "Microsoft Windows XP Professional 64-Bit Edition"
{MAXDWORD, OS_PROFESSIONAL, MAXWORD, {STR_WINXP, STR_PRO}}, // "Microsoft Windows XP Professional"
// Server 2003
// Neutral
{MAXDWORD, OS_APPLIANCE, MAXWORD, {STR_SRV03, STR_APPLIANCE}}, // "Microsoft Windows Server 2003, Appliance Server"
{MAXDWORD, OS_STORAGESERVER, MAXWORD, {STR_STORAGESERVER_1, STR_STORAGESERVER_2}}, // "Microsoft Windows Storage Server 2003 R2"
{MAXDWORD, OS_COMPUTECLUSTER, MAXWORD, {STR_COMPUTECLUSTER_1, STR_COMPUTECLUSTER_2, STR_COMPUTECLUSTER_3}}, // "Microsoft Windows Server 2003 Compute Cluster Edition"
{0x0502, OS_HOMESERVER, MAXWORD, {STR_HOMESERVER_1, STR_HOMESERVER_2}}, // "Microsoft Windows Home Server"
// Base editions
{MAXDWORD, OS_SMALLBUSINESSSERVER, MAXWORD, {STR_SRV03, STR_SBS}}, // "Microsoft Windows Server 2003 for Small Business Server"
// Itanium
{MAXDWORD, OS_SERVER, PROCESSOR_ARCHITECTURE_IA64, {STR_STANDARDIA64}}, // "Microsoft(R) Windows(R) Server 2003, Standard Edition for 64-Bit Itanium-based Systems"
{MAXDWORD, OS_ADVSERVER, PROCESSOR_ARCHITECTURE_IA64, {STR_ENTERPRISEIA64}}, // "Microsoft(R) Windows(R) Server 2003, Enterprise Edition for 64-Bit Itanium-based Systems"
{MAXDWORD, OS_DATACENTER, PROCESSOR_ARCHITECTURE_IA64, {STR_DATACENTERIA64}}, // "Microsoft(R) Windows(R) Server 2003, Datacenter Edition for 64-Bit Itanium-based Systems"
// x64
{MAXDWORD, OS_SERVER, PROCESSOR_ARCHITECTURE_AMD64, {STR_SRV03, STR_STANDARDX64}}, // "Microsoft Windows Server 2003, Standard x64 Edition"
{MAXDWORD, OS_ADVSERVER, PROCESSOR_ARCHITECTURE_AMD64, {STR_SRV03, STR_ENTERPRISEX64}}, // "Microsoft Windows Server 2003, Enterprise x64 Edition"
{MAXDWORD, OS_DATACENTER, PROCESSOR_ARCHITECTURE_AMD64, {STR_SRV03, STR_DATACENTERX64}}, // "Microsoft Windows Server 2003, Datacenter x64 Edition"
// x86
{MAXDWORD, OS_SERVER, MAXWORD, {STR_SRV03, STR_STANDARD}}, // "Microsoft Windows Server 2003, Standard Edition"
{MAXDWORD, OS_ADVSERVER, MAXWORD, {STR_SRV03, STR_ENTERPRISE}}, // "Microsoft Windows Server 2003, Enterprise Edition"
{MAXDWORD, OS_WEBSERVER, MAXWORD, {STR_SRV03, STR_BLADE}}, // "Microsoft Windows Server 2003, Web Edition"
{MAXDWORD, OS_DATACENTER, MAXWORD, {STR_SRV03, STR_DATACENTER}}, // "Microsoft Windows Server 2003, Datacenter Edition"
// Fallbacks
{0x0501, MAXDWORD, MAXWORD, {STR_WINXP}}, // "Microsoft Windows XP"
{0x0502, MAXDWORD, MAXWORD, {STR_SRV03}}, // "Microsoft Windows Server 2003"
};
HRESULT GetOSProductName(LPVARIANT productName) {
if (_productName.vt == VT_EMPTY) {
VariantInit(&_productName);
// Handle the absolute disaster of Windows XP/Server 2003 edition branding
WORD winver = GetWinVer();
if (HIBYTE(winver) == 5 && LOBYTE(winver) != 0) {
_IsOS $IsOS = (_IsOS)GetProcAddress(LoadLibrary(L"shlwapi.dll"), MAKEINTRESOURCEA(437));
if (!$IsOS) {
return E_FAIL;
}
SYSTEM_INFO systemInfo;
OurGetNativeSystemInfo(&systemInfo);
WinNT5Variant variant = {};
for (DWORD i = 0; i < ARRAYSIZE(nt5Variants); i++) {
WinNT5Variant thisVariant = nt5Variants[i];
if ((thisVariant.version == MAXDWORD || thisVariant.version == winver) &&
(thisVariant.archFlag == MAXWORD || thisVariant.archFlag == systemInfo.wProcessorArchitecture) &&
(thisVariant.osFlag == MAXDWORD || $IsOS(thisVariant.osFlag))) {
variant = thisVariant;
break;
}
}
if (variant.version != 0) {
WCHAR brandStr[1024];
ZeroMemory(brandStr, ARRAYSIZE(brandStr));
for (DWORD i = 0; variant.stringIDs[i] != 0; i++) {
UINT id = variant.stringIDs[i];
// If Server 2003 R2, override to R2 string
if (id == STR_SRV03 && $IsOS(OS_SERVERR2)) {
id = STR_SRV03R2;
}
// If XP Tablet PC SP2, override to 2005 string
if (id == STR_TABLETPC && GetVersionInfo()->wServicePackMajor >= 2) {
id = STR_TABLETPC2005;
}
WinNT5BrandString brandString = nt5BrandStrings[id];
WCHAR str[340];
HMODULE dll = LoadLibraryEx(brandString.library, NULL, LOAD_LIBRARY_AS_DATAFILE);
if (dll) {
LoadString(dll, brandString.stringID, str, ARRAYSIZE(str));
FreeLibrary(dll);
}
// If Server 2003 (except SBS), add comma
if (i == 1) {
UINT lastID = variant.stringIDs[i - 1];
if (lastID == STR_SRV03 && !$IsOS(OS_SMALLBUSINESSSERVER)) {
wcscat(brandStr, L",");
}
}
if (i > 0) {
wcscat(brandStr, L" ");
}
wcscat(brandStr, str);
}
if (wcslen(brandStr) > 0) {
_productName.vt = VT_BSTR;
_productName.bstrVal = SysAllocString(brandStr);
}
}
}
if (_productName.vt == VT_EMPTY) {
// Get from WMI
HRESULT hr = QueryWMIProperty(L"SELECT Caption FROM Win32_OperatingSystem", L"Caption", &_productName);
CHECK_HR_OR_RETURN(L"QueryWMIProperty");
}
if (_productName.vt == VT_EMPTY) {
// Get from registry
LPWSTR data = NULL;
DWORD size = 0;
HRESULT hr = GetRegistryString(HKEY_LOCAL_MACHINE, REGPATH_WINNT, L"ProductName", KEY_WOW64_64KEY, &data, &size);
CHECK_HR_OR_RETURN(L"GetRegistryString");
_productName.vt = VT_BSTR;
_productName.bstrVal = SysAllocStringLen(data, size - 1);
LocalFree(data);
}
}
VariantCopy(productName, &_productName);
return S_OK;
}
================================================
FILE: LegacyUpdate/ProductName.h
================================================
#pragma once
HRESULT GetOSProductName(LPVARIANT productName);
================================================
FILE: LegacyUpdate/ProgressBarControl.cpp
================================================
// ProgressBarControl.cpp : Implementation of CProgressBarControl
#include "ProgressBarControl.h"
#include
#include
#include "Compat.h"
#include "Registry.h"
#include "resource.h"
#include "VersionInfo.h"
#define PROGRESSBARCONTROL_MISCSTATUS (OLEMISC_RECOMPOSEONRESIZE | OLEMISC_CANTLINKINSIDE | OLEMISC_INSIDEOUT | OLEMISC_ACTIVATEWHENVISIBLE | OLEMISC_SETCLIENTSITEFIRST | OLEMISC_NOUIACTIVATE)
DEFINE_UUIDOF(CProgressBarControl, CLSID_ProgressBarControl);
STDMETHODIMP CProgressBarControl::Create(IUnknown *pUnkOuter, REFIID riid, void **ppv) {
if (pUnkOuter != NULL) {
return CLASS_E_NOAGGREGATION;
}
CProgressBarControl *pThis = (CProgressBarControl *)CoTaskMemAlloc(sizeof(CProgressBarControl));
if (pThis == NULL) {
return E_OUTOFMEMORY;
}
new(pThis) CProgressBarControl();
HRESULT hr = pThis->QueryInterface(riid, ppv);
CHECK_HR_OR_RETURN(L"QueryInterface");
pThis->Release();
return hr;
}
CProgressBarControl::~CProgressBarControl(void) {
DestroyControlWindow();
if (m_clientSite) {
m_clientSite->Release();
m_clientSite = NULL;
}
if (m_adviseSink) {
m_adviseSink->Release();
m_adviseSink = NULL;
}
}
STDMETHODIMP CProgressBarControl::UpdateRegistry(BOOL bRegister) {
if (bRegister) {
RegistryEntry entries[] = {
{HKEY_CLASSES_ROOT, L"LegacyUpdate.ProgressBar", NULL, REG_SZ, (LPVOID)L"Legacy Update Progress Bar Control"},
{HKEY_CLASSES_ROOT, L"LegacyUpdate.ProgressBar\\CurVer", NULL, REG_SZ, (LPVOID)L"LegacyUpdate.ProgressBar.1"},
{HKEY_CLASSES_ROOT, L"LegacyUpdate.ProgressBar.1", NULL, REG_SZ, (LPVOID)L"Legacy Update Progress Bar Control"},
{HKEY_CLASSES_ROOT, L"LegacyUpdate.ProgressBar.1\\CLSID", NULL, REG_SZ, (LPVOID)L"%CLSID%"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%", NULL, REG_SZ, (LPVOID)L"Legacy Update Progress Bar Control"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%", L"AppID", REG_SZ, (LPVOID)L"%APPID%"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\ProgID", NULL, REG_SZ, (LPVOID)L"LegacyUpdate.ProgressBar.1"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\VersionIndependentProgID", NULL, REG_SZ, (LPVOID)L"LegacyUpdate.ProgressBar"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\Programmable", NULL, REG_SZ, NULL},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\InprocServer32", NULL, REG_SZ, (LPVOID)L"%MODULE%"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\InprocServer32", L"ThreadingModel", REG_SZ, (LPVOID)L"Apartment"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\Control", NULL, REG_SZ, NULL},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\TypeLib", NULL, REG_SZ, (LPVOID)L"%LIBID%"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\Version", NULL, REG_SZ, (LPVOID)L"1.0"},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\MiscStatus", NULL, REG_DWORD, (LPVOID)PROGRESSBARCONTROL_MISCSTATUS},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\Implemented Categories\\{7DD95801-9882-11CF-9FA9-00AA006C42C4}", NULL, REG_SZ, NULL},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%\\Implemented Categories\\{7DD95802-9882-11CF-9FA9-00AA006C42C4}", NULL, REG_SZ, NULL},
{}
};
return SetRegistryEntries(entries);
} else {
RegistryEntry entries[] = {
{HKEY_CLASSES_ROOT, L"LegacyUpdate.ProgressBar", NULL, 0, DELETE_KEY},
{HKEY_CLASSES_ROOT, L"LegacyUpdate.ProgressBar.1", NULL, 0, DELETE_KEY},
{HKEY_CLASSES_ROOT, L"CLSID\\%CLSID%", NULL, 0, DELETE_KEY},
{}
};
return SetRegistryEntries(entries);
}
}
#pragma mark - IUnknown
STDMETHODIMP CProgressBarControl::QueryInterface(REFIID riid, void **ppvObject) {
if (ppvObject == NULL) {
return E_POINTER;
}
*ppvObject = NULL;
if (IsEqualIID(riid, IID_IOleObject)) {
*ppvObject = (IOleObject *)&m_IOleObject;
AddRef();
return S_OK;
} else if (IsEqualIID(riid, IID_IViewObject) || IsEqualIID(riid, IID_IViewObject2) || IsEqualIID(riid, IID_IViewObjectEx)) {
*ppvObject = (IViewObjectEx *)&m_IViewObjectEx;
AddRef();
return S_OK;
} else if (IsEqualIID(riid, IID_IOleInPlaceObject) || IsEqualIID(riid, IID_IOleWindow) || IsEqualIID(riid, IID_IOleInPlaceObjectWindowless)) {
*ppvObject = (IOleInPlaceObject *)&m_IOleInPlaceObject;
AddRef();
return S_OK;
} else if (IsEqualIID(riid, IID_IOleInPlaceActiveObject)) {
*ppvObject = (IOleInPlaceActiveObject *)&m_IOleInPlaceActiveObject;
AddRef();
return S_OK;
} else if (IsEqualIID(riid, IID_IQuickActivate)) {
*ppvObject = (IQuickActivate *)&m_IQuickActivateImpl;
AddRef();
return S_OK;
}
return IDispatchImpl::QueryInterface(riid, ppvObject);
}
STDMETHODIMP_(ULONG) CProgressBarControl::AddRef(void) {
return InterlockedIncrement(&m_refCount);
}
STDMETHODIMP_(ULONG) CProgressBarControl::Release(void) {
ULONG count = InterlockedDecrement(&m_refCount);
if (count == 0) {
this->~CProgressBarControl();
CoTaskMemFree(this);
}
return count;
}
#pragma mark - IOleObject
STDMETHODIMP CProgressBarControl_IOleObject::GetExtent(DWORD dwDrawAspect, SIZEL *psizel) {
if (psizel == NULL) {
return E_POINTER;
}
if (dwDrawAspect != DVASPECT_CONTENT) {
return DV_E_DVASPECT;
}
// Convert to HIMETRIC
HDC hdc = GetDC(NULL);
int ppiX = GetDeviceCaps(hdc, LOGPIXELSX);
int ppiY = GetDeviceCaps(hdc, LOGPIXELSY);
ReleaseDC(NULL, hdc);
psizel->cx = MAP_PIX_TO_LOGHIM(m_pParent->m_width, ppiX);
psizel->cy = MAP_PIX_TO_LOGHIM(m_pParent->m_height, ppiY);
return S_OK;
}
STDMETHODIMP CProgressBarControl_IOleObject::SetExtent(DWORD dwDrawAspect, SIZEL *psizel) {
if (psizel == NULL) {
return E_POINTER;
}
if (dwDrawAspect != DVASPECT_CONTENT) {
return DV_E_DVASPECT;
}
// Convert from HIMETRIC
HDC hdc = GetDC(NULL);
int ppiX = GetDeviceCaps(hdc, LOGPIXELSX);
int ppiY = GetDeviceCaps(hdc, LOGPIXELSY);
ReleaseDC(NULL, hdc);
m_pParent->m_width = MAP_LOGHIM_TO_PIX(psizel->cx, ppiX);
m_pParent->m_height = MAP_LOGHIM_TO_PIX(psizel->cy, ppiY);
if (m_pParent->m_innerHwnd) {
SetWindowPos(
m_pParent->m_innerHwnd, NULL,
0, 0,
m_pParent->m_width, m_pParent->m_height,
SWP_NOZORDER | SWP_NOACTIVATE
);
}
return S_OK;
}
STDMETHODIMP CProgressBarControl_IOleObject::DoVerb(LONG iVerb, LPMSG lpmsg, IOleClientSite *pActiveSite, LONG lindex, HWND hwndParent, LPCRECT lprcPosRect) {
switch (iVerb) {
case OLEIVERB_INPLACEACTIVATE:
case OLEIVERB_UIACTIVATE:
case OLEIVERB_SHOW:
if (hwndParent && lprcPosRect) {
HRESULT hr = m_pParent->CreateControlWindow(hwndParent, lprcPosRect);
CHECK_HR_OR_RETURN(L"CreateControlWindow");
}
return S_OK;
case OLEIVERB_HIDE:
return S_OK;
default:
return OLEOBJ_S_INVALIDVERB;
}
}
STDMETHODIMP CProgressBarControl_IOleObject::GetMiscStatus(DWORD dwAspect, DWORD *pdwStatus) {
if (pdwStatus == NULL) {
return E_POINTER;
}
if (dwAspect == DVASPECT_CONTENT) {
*pdwStatus = PROGRESSBARCONTROL_MISCSTATUS;
return S_OK;
}
*pdwStatus = 0;
return S_OK;
}
STDMETHODIMP CProgressBarControl_IOleObject::Close(DWORD dwSaveOption) {
m_pParent->DestroyControlWindow();
return IOleObjectImpl::Close(dwSaveOption);
}
STDMETHODIMP CProgressBarControl::CreateControlWindow(HWND hParent, const RECT *pRect) {
m_width = pRect->right - pRect->left;
m_height = pRect->bottom - pRect->top;
if (m_innerHwnd) {
if (m_hwnd == hParent) {
// Just update the position
SetWindowPos(
m_innerHwnd, NULL,
pRect->left, pRect->top,
m_width, m_height,
SWP_NOZORDER | SWP_NOACTIVATE
);
return S_OK;
} else {
// Parent changed, start over
DestroyControlWindow();
}
}
m_hwnd = hParent;
// Bind to our manifest to ensure we get visual styles and marquee
ULONG_PTR cookie;
IsolationAwareStart(&cookie);
// Load and init comctl (hopefully 6.0)
LoadLibrary(L"comctl32.dll");
INITCOMMONCONTROLSEX initComctl = {0};
initComctl.dwSize = sizeof(initComctl);
initComctl.dwICC = ICC_PROGRESS_CLASS;
InitCommonControlsEx(&initComctl);
// Create progress bar window
m_innerHwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
PROGRESS_CLASS,
NULL,
WS_CHILD | WS_VISIBLE,
0, 0,
m_width, m_height,
m_hwnd,
NULL,
OWN_MODULE,
NULL
);
IsolationAwareEnd(&cookie);
if (!m_innerHwnd) {
return E_FAIL;
}
return put_Value(-1);
}
STDMETHODIMP CProgressBarControl::DestroyControlWindow(void) {
if (m_innerHwnd) {
DestroyWindow(m_innerHwnd);
m_innerHwnd = NULL;
}
m_hwnd = NULL;
return S_OK;
}
#pragma mark - IViewObjectEx
STDMETHODIMP CProgressBarControl::OnDraw(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hdcTargetDev, HDC hdcDraw, LPCRECTL lprcBounds, LPCRECTL lprcWBounds, BOOL (STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue), ULONG_PTR dwContinue) {
if (lprcBounds == NULL || hdcDraw == NULL) {
return E_POINTER;
}
switch (dwDrawAspect) {
case DVASPECT_CONTENT:
case DVASPECT_OPAQUE:
case DVASPECT_TRANSPARENT:
break;
default:
return DV_E_DVASPECT;
}
if (m_innerHwnd) {
// Set size
LONG width = lprcBounds->right - lprcBounds->left;
LONG height = lprcBounds->bottom - lprcBounds->top;
SetWindowPos(
m_innerHwnd, NULL,
lprcBounds->left, lprcBounds->top,
width, height,
SWP_NOZORDER | SWP_NOACTIVATE
);
}
return S_OK;
}
#pragma mark - IOleInPlaceObject
STDMETHODIMP CProgressBarControl_IOleInPlaceObject::SetObjectRects(LPCRECT lprcPosRect, LPCRECT lprcClipRect) {
if (lprcPosRect == NULL) {
return E_POINTER;
}
m_pParent->m_width = lprcPosRect->right - lprcPosRect->left;
m_pParent->m_height = lprcPosRect->bottom - lprcPosRect->top;
return S_OK;
}
#pragma mark - IOleInPlaceActiveObject
STDMETHODIMP CProgressBarControl_IOleInPlaceActiveObject::ResizeBorder(LPCRECT prcBorder, IOleInPlaceUIWindow *pUIWindow, BOOL fFrameWindow) {
if (prcBorder && m_pParent->m_innerHwnd) {
LONG width = prcBorder->right - prcBorder->left;
LONG height = prcBorder->bottom - prcBorder->top;
m_pParent->m_width = width;
m_pParent->m_height = height;
SetWindowPos(
m_pParent->m_innerHwnd, NULL,
prcBorder->left, prcBorder->top,
width, height,
SWP_NOZORDER | SWP_NOACTIVATE
);
}
return S_OK;
}
#pragma mark - Helper methods
STDMETHODIMP CProgressBarControl::InvalidateContainer(void) {
if (m_adviseSink) {
m_adviseSink->OnViewChange(DVASPECT_CONTENT, -1);
}
if (m_clientSite) {
CComPtr inPlaceSiteWindowless;
m_clientSite->QueryInterface(IID_IOleInPlaceSiteWindowless, (void**)&inPlaceSiteWindowless);
if (inPlaceSiteWindowless) {
inPlaceSiteWindowless->InvalidateRect(NULL, TRUE);
} else {
CComPtr inPlaceSite;
m_clientSite->QueryInterface(IID_IOleInPlaceSite, (void**)&inPlaceSite);
if (inPlaceSite) {
HWND containerHwnd;
if (SUCCEEDED(inPlaceSite->GetWindow(&containerHwnd)) && containerHwnd) {
InvalidateRect(containerHwnd, NULL, TRUE);
}
}
}
}
return S_OK;
}
#pragma mark - IProgressBarControl
STDMETHODIMP CProgressBarControl::get_Value(SHORT *pValue) {
if (pValue == NULL) {
return E_POINTER;
}
if (m_innerHwnd == NULL) {
*pValue = 0;
return S_OK;
}
if (GetWindowLongPtr(m_innerHwnd, GWL_STYLE) & PBS_MARQUEE) {
// Marquee - no value
*pValue = -1;
} else {
// Normal - return PBM_GETPOS
*pValue = (SHORT)SendMessage(m_innerHwnd, PBM_GETPOS, 0, 0);
}
return S_OK;
}
STDMETHODIMP CProgressBarControl::put_Value(SHORT value) {
if (m_innerHwnd == NULL) {
return E_FAIL;
}
ULONG_PTR cookie;
IsolationAwareStart(&cookie);
if (value == -1) {
// Marquee style
SetWindowLongPtr(m_innerHwnd, GWL_STYLE, GetWindowLongPtr(m_innerHwnd, GWL_STYLE) | PBS_MARQUEE);
SendMessage(m_innerHwnd, PBM_SETMARQUEE, TRUE, 100);
} else {
// Normal style
SHORT oldValue = -1;
get_Value(&oldValue);
if (oldValue == -1) {
SendMessage(m_innerHwnd, PBM_SETMARQUEE, FALSE, 0);
SetWindowLongPtr(m_innerHwnd, GWL_STYLE, GetWindowLongPtr(m_innerHwnd, GWL_STYLE) & ~PBS_MARQUEE);
SendMessage(m_innerHwnd, PBM_SETRANGE, 0, MAKELPARAM(0, 100));
}
SendMessage(m_innerHwnd, PBM_SETPOS, value, 0);
}
IsolationAwareEnd(&cookie);
InvalidateContainer();
return S_OK;
}
================================================
FILE: LegacyUpdate/ProgressBarControl.h
================================================
#pragma once
// ProgressBarControl.h : Declaration of the CProgressBarControl class.
#include "resource.h"
#include "com.h"
#include "LegacyUpdate_i.h"
class CProgressBarControl;
class DECLSPEC_NOVTABLE CProgressBarControl_IOleObject :
public IOleObjectImpl {
public:
CProgressBarControl_IOleObject(CProgressBarControl *pParent) :
IOleObjectImpl(pParent) {}
STDMETHODIMP GetExtent(DWORD dwDrawAspect, SIZEL *psizel);
STDMETHODIMP SetExtent(DWORD dwDrawAspect, SIZEL *psizel);
STDMETHODIMP DoVerb(LONG iVerb, LPMSG lpmsg, IOleClientSite *pActiveSite, LONG lindex, HWND hwndParent, LPCRECT lprcPosRect);
STDMETHODIMP GetMiscStatus(DWORD dwAspect, DWORD *pdwStatus);
STDMETHODIMP Close(DWORD dwSaveOption);
};
class DECLSPEC_NOVTABLE CProgressBarControl_IViewObjectEx :
public IViewObjectExImpl {
public:
CProgressBarControl_IViewObjectEx(CProgressBarControl *pParent) :
IViewObjectExImpl(pParent) {}
};
class DECLSPEC_NOVTABLE CProgressBarControl_IOleInPlaceObject :
public IOleInPlaceObjectImpl {
public:
CProgressBarControl_IOleInPlaceObject(CProgressBarControl *pParent) :
IOleInPlaceObjectImpl(pParent) {}
STDMETHODIMP SetObjectRects(LPCRECT lprcPosRect, LPCRECT lprcClipRect);
};
class DECLSPEC_NOVTABLE CProgressBarControl_IOleInPlaceActiveObject :
public IOleInPlaceActiveObjectImpl {
public:
CProgressBarControl_IOleInPlaceActiveObject(CProgressBarControl *pParent) :
IOleInPlaceActiveObjectImpl(pParent) {}
// IOleInPlaceActiveObject
STDMETHODIMP ResizeBorder(LPCRECT prcBorder, IOleInPlaceUIWindow *pUIWindow, BOOL fFrameWindow);
};
class DECLSPEC_NOVTABLE CProgressBarControl_IQuickActivateImpl :
public IQuickActivateImpl {
public:
CProgressBarControl_IQuickActivateImpl(CProgressBarControl *pParent) :
IQuickActivateImpl(pParent) {}
};
class DECLSPEC_NOVTABLE CProgressBarControl :
public IDispatchImpl {
public:
CProgressBarControl() :
m_IOleObject(this),
m_IViewObjectEx(this),
m_IOleInPlaceObject(this),
m_IOleInPlaceActiveObject(this),
m_IQuickActivateImpl(this),
m_refCount(1),
m_hwnd(NULL),
m_innerHwnd(NULL),
m_width(0),
m_height(0),
m_clientSite(NULL),
m_adviseSink(NULL) {
}
virtual ~CProgressBarControl();
static STDMETHODIMP Create(IUnknown *pUnkOuter, REFIID riid, void **ppv);
static STDMETHODIMP UpdateRegistry(BOOL bRegister);
public:
CProgressBarControl_IOleObject m_IOleObject;
CProgressBarControl_IViewObjectEx m_IViewObjectEx;
CProgressBarControl_IOleInPlaceObject m_IOleInPlaceObject;
CProgressBarControl_IOleInPlaceActiveObject m_IOleInPlaceActiveObject;
CProgressBarControl_IQuickActivateImpl m_IQuickActivateImpl;
private:
LONG m_refCount;
public:
HWND m_hwnd;
HWND m_innerHwnd;
LONG m_width;
LONG m_height;
IOleClientSite *m_clientSite;
IAdviseSink *m_adviseSink;
// IUnknown
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
// IProgressBarControl
STDMETHODIMP get_Value(SHORT *pValue);
STDMETHODIMP put_Value(SHORT value);
// Helpers
STDMETHODIMP CreateControlWindow(HWND hParent, const RECT *pRect);
STDMETHODIMP DestroyControlWindow();
STDMETHODIMP OnDraw(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hdcTargetDev, HDC hdcDraw, LPCRECTL lprcBounds, LPCRECTL lprcWBounds, BOOL (STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue), ULONG_PTR dwContinue);
STDMETHODIMP InvalidateContainer();
};
================================================
FILE: LegacyUpdate/ProgressBarControl.html
================================================
ATL test page for object ProgressBarControl
-1
================================================
FILE: LegacyUpdate/Utils.cpp
================================================
#include "Utils.h"
#include
#include
#include "Exec.h"
#include "LegacyUpdate.h"
#include "ViewLog.h"
#ifndef SHUTDOWN_RESTART
#define SHUTDOWN_RESTART 0x00000004
#endif
#ifndef SHUTDOWN_INSTALL_UPDATES
#define SHUTDOWN_INSTALL_UPDATES 0x00000040
#endif
typedef DWORD (WINAPI *_InitiateShutdownW)(LPWSTR lpMachineName, LPWSTR lpMessage, DWORD dwGracePeriod, DWORD dwShutdownFlags, DWORD dwReason);
HRESULT StartLauncher(LPCWSTR params, BOOL wait) {
LPWSTR path = NULL;
HRESULT hr = GetInstallPath(&path);
CHECK_HR_OR_RETURN(L"GetInstallPath");
PathAppend(path, L"LegacyUpdate.exe");
DWORD code = 0;
hr = Exec(NULL, path, params, NULL, SW_SHOWDEFAULT, wait, &code);
CHECK_HR_OR_GOTO_END(L"Exec");
hr = HRESULT_FROM_WIN32(code);
end:
LocalFree(path);
return hr;
}
HRESULT Reboot(void) {
HRESULT hr = E_FAIL;
HANDLE token = NULL;
TOKEN_PRIVILEGES privileges;
LUID shutdownLuid;
_InitiateShutdownW $InitiateShutdownW = (_InitiateShutdownW)GetProcAddress(GetModuleHandle(L"advapi32.dll"), "InitiateShutdownW");
// Make sure we have permission to shut down
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &token)) {
hr = HRESULT_FROM_WIN32(GetLastError());
CHECK_HR_OR_GOTO_END(L"OpenProcessToken");
}
if (!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &shutdownLuid)) {
hr = HRESULT_FROM_WIN32(GetLastError());
CHECK_HR_OR_GOTO_END(L"LookupPrivilegeValue");
}
// Ask the system nicely to give us shutdown privilege
privileges.PrivilegeCount = 1;
privileges.Privileges[0].Luid = shutdownLuid;
privileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(token, FALSE, &privileges, 0, NULL, NULL)) {
hr = HRESULT_FROM_WIN32(GetLastError());
CHECK_HR_OR_GOTO_END(L"AdjustTokenPrivileges");
}
// Reboot with reason "Operating System: Security fix (Unplanned)", ensuring to install updates.
// Try InitiateShutdown first (Vista+)
if ($InitiateShutdownW) {
hr = HRESULT_FROM_WIN32($InitiateShutdownW(NULL, NULL, 0, SHUTDOWN_RESTART | SHUTDOWN_INSTALL_UPDATES, SHTDN_REASON_MAJOR_OPERATINGSYSTEM | SHTDN_REASON_MINOR_SECURITYFIX));
}
// Try InitiateSystemShutdownEx (2k/XP)
if (!SUCCEEDED(hr)) {
TRACE(L"InitiateShutdown failed: %08x", hr);
if (InitiateSystemShutdownEx(NULL, NULL, 0, FALSE, TRUE, SHTDN_REASON_MAJOR_OPERATINGSYSTEM | SHTDN_REASON_MINOR_SECURITYFIX) == 0) {
hr = HRESULT_FROM_WIN32(GetLastError());
CHECK_HR_OR_GOTO_END(L"InitiateSystemShutdownEx");
}
}
// Last-ditch attempt ExitWindowsEx (only guaranteed to work for the current logged in user)
if (!SUCCEEDED(hr) && !ExitWindowsEx(EWX_REBOOT | EWX_FORCEIFHUNG, SHTDN_REASON_MAJOR_OPERATINGSYSTEM | SHTDN_REASON_MINOR_SECURITYFIX)) {
hr = HRESULT_FROM_WIN32(GetLastError());
CHECK_HR_OR_GOTO_END(L"ExitWindowsEx");
}
end:
if (token) {
CloseHandle(token);
}
return hr;
}
void operator delete(void *ptr) {
free(ptr);
}
================================================
FILE: LegacyUpdate/Utils.h
================================================
#pragma once
HRESULT StartLauncher(LPCWSTR params, BOOL wait);
HRESULT Reboot();
================================================
FILE: LegacyUpdate/dlldatax.c
================================================
// wrapper for dlldata.c
#include
#include
#define REGISTER_PROXY_DLL
#define USE_STUBLESS_PROXY
#define PROXY_DELEGATION
#define ENTRY_PREFIX Prx
#include
#include "LegacyUpdate_i.h"
#include "LegacyUpdate_dlldata.c"
#include "LegacyUpdate_p.c"
================================================
FILE: LegacyUpdate/dlldatax.h
================================================
#pragma once
EXTERN_C BOOL WINAPI PrxDllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved);
EXTERN_C STDAPI PrxDllCanUnloadNow(void);
EXTERN_C STDAPI PrxDllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv);
EXTERN_C STDAPI PrxDllRegisterServer(void);
EXTERN_C STDAPI PrxDllUnregisterServer(void);
================================================
FILE: LegacyUpdate/dllmain.cpp
================================================
// dllmain.cpp : Implementation of DLL Exports.
#include "LegacyUpdate_i.h"
#include "dllmain.h"
#include "dlldatax.h"
#include "ClassFactory.h"
#include "ElevationHelper.h"
#include "ElevationHelper.h"
#include "LegacyUpdate.h"
#include "LegacyUpdateCtrl.h"
#include "ProgressBarControl.h"
#include "Registry.h"
#include "VersionInfo.h"
#include
#include
static LPCWSTR APPID_LegacyUpdateLib = L"{D0A82CD0-B6F0-4101-83ED-DA47D0D04830}";
HINSTANCE g_hInstance = NULL;
LONG g_serverLocks = 0;
typedef struct ClassEntry {
const GUID *clsid;
STDMETHODIMP (*createFunc)(IUnknown *pUnkOuter, REFIID riid, void **ppv);
STDMETHODIMP (*updateRegistryFunc)(BOOL bRegister);
} ClassEntry;
static ClassEntry g_classEntries[] = {
{&CLSID_LegacyUpdateCtrl, &CLegacyUpdateCtrl::Create, &CLegacyUpdateCtrl::UpdateRegistry},
{&CLSID_ElevationHelper, &CElevationHelper::Create, &CElevationHelper::UpdateRegistry},
{&CLSID_ProgressBarControl, &CProgressBarControl::Create, &CProgressBarControl::UpdateRegistry}
};
// DLL Entry Point
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) {
if (!PrxDllMain(hInstance, dwReason, lpReserved)) {
return FALSE;
}
switch (dwReason) {
case DLL_PROCESS_ATTACH:
g_hInstance = hInstance;
DisableThreadLibraryCalls(hInstance);
OpenLog();
break;
case DLL_PROCESS_DETACH:
g_hInstance = NULL;
CloseLog();
break;
}
return TRUE;
}
// Used to determine whether the DLL can be unloaded by OLE
STDAPI DllCanUnloadNow(void) {
HRESULT hr = PrxDllCanUnloadNow();
if (hr != S_OK) {
return hr;
}
return g_serverLocks == 0 ? S_OK : S_FALSE;
}
// Returns a class factory to create an object of the requested type
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) {
if (PrxDllGetClassObject(rclsid, riid, ppv) == S_OK) {
return S_OK;
}
if (ppv == NULL) {
return E_POINTER;
}
*ppv = NULL;
for (DWORD i = 0; i < ARRAYSIZE(g_classEntries); i++) {
if (IsEqualCLSID(rclsid, *g_classEntries[i].clsid)) {
CClassFactory *pFactory;
HRESULT hr = CClassFactory::Create(NULL, riid, (void **)&pFactory);
if (pFactory == NULL) {
return E_OUTOFMEMORY;
}
pFactory->createFunc = g_classEntries[i].createFunc;
pFactory->clsid = g_classEntries[i].clsid;
*ppv = pFactory;
return hr;
}
}
return CLASS_E_CLASSNOTAVAILABLE;
}
// Shared register/unregister method
STDAPI UpdateRegistration(BOOL state) {
HRESULT hr = OleInitialize(NULL);
BOOL oleInitialized = SUCCEEDED(hr);
if (hr != RPC_E_CHANGED_MODE && hr != CO_E_ALREADYINITIALIZED) {
CHECK_HR_OR_RETURN(L"OleInitialize");
}
LPWSTR installPath = NULL, filename = NULL, libid = NULL;
hr = GetInstallPath(&installPath);
CHECK_HR_OR_GOTO_END(L"GetInstallPath");
hr = GetOwnFileName(&filename);
CHECK_HR_OR_GOTO_END(L"GetOwnFileName");
// Register type library
if (state) {
CComPtr typeLib;
hr = LoadTypeLib(filename, &typeLib);
CHECK_HR_OR_GOTO_END(L"LoadTypeLib");
hr = RegisterTypeLib(typeLib, filename, NULL);
CHECK_HR_OR_GOTO_END(L"RegisterTypeLib");
} else {
CComPtr typeLib;
hr = LoadRegTypeLib(LIBID_LegacyUpdateLib, 1, 0, LOCALE_NEUTRAL, &typeLib);
if (hr != TYPE_E_LIBNOTREGISTERED) {
CHECK_HR_OR_GOTO_END(L"LoadRegTypeLib");
TLIBATTR *attrs;
hr = typeLib->GetLibAttr(&attrs);
CHECK_HR_OR_GOTO_END(L"GetLibAttr");
hr = UnRegisterTypeLib(attrs->guid, attrs->wMajorVerNum, attrs->wMinorVerNum, attrs->lcid, attrs->syskind);
typeLib->ReleaseTLibAttr(attrs);
CHECK_HR_OR_GOTO_END(L"UnRegisterTypeLib");
}
}
// Set vars used for expansions
hr = StringFromCLSID(LIBID_LegacyUpdateLib, &libid);
CHECK_HR_OR_GOTO_END(L"StringFromCLSID");
SetEnvironmentVariable(L"APPID", APPID_LegacyUpdateLib);
SetEnvironmentVariable(L"LIBID", libid);
SetEnvironmentVariable(L"MODULE", filename);
SetEnvironmentVariable(L"INSTALLPATH", installPath);
CoTaskMemFree(libid);
// Main
if (state) {
RegistryEntry entries[] = {
{HKEY_CLASSES_ROOT, L"AppID\\%APPID%", NULL, REG_SZ, (LPVOID)L"Legacy Update Control"},
{HKEY_CLASSES_ROOT, L"AppID\\%APPID%", L"DllSurrogate", REG_SZ, (LPVOID)L""},
{HKEY_CLASSES_ROOT, L"AppID\\LegacyUpdate.dll", L"AppID", REG_SZ, (LPVOID)L"%APPID%"},
{}
};
hr = SetRegistryEntries(entries);
} else {
RegistryEntry entries[] = {
{HKEY_CLASSES_ROOT, L"AppID\\%APPID%", NULL, 0, DELETE_KEY},
{HKEY_CLASSES_ROOT, L"AppID\\LegacyUpdate.dll", NULL, 0, DELETE_KEY},
{}
};
hr = SetRegistryEntries(entries);
}
CHECK_HR_OR_GOTO_END(L"SetRegistryEntries main");
// Register classes
for (DWORD i = 0; i < ARRAYSIZE(g_classEntries); i++) {
ClassEntry entry = g_classEntries[i];
LPWSTR clsidStr;
hr = StringFromCLSID(*entry.clsid, &clsidStr);
CHECK_HR_OR_GOTO_END(L"StringFromCLSID");
SetEnvironmentVariable(L"CLSID", clsidStr);
CoTaskMemFree(clsidStr);
hr = entry.updateRegistryFunc(state);
CHECK_HR_OR_GOTO_END(L"SetRegistryEntries class");
}
// Register proxy
hr = state ? PrxDllRegisterServer() : PrxDllUnregisterServer();
CHECK_HR_OR_GOTO_END(L"Proxy registration");
end:
// Clean up environment
static LPCWSTR envVars[] = {L"APPID", L"LIBID", L"MODULE", L"INSTALLPATH", L"CLSID"};
for (DWORD i = 0; i < ARRAYSIZE(envVars); i++) {
SetEnvironmentVariable(envVars[i], NULL);
}
if (installPath) {
LocalFree(installPath);
}
if (filename) {
LocalFree(filename);
}
if (oleInitialized) {
OleUninitialize();
}
return hr;
}
// DllRegisterServer - Adds entries to the system registry
STDAPI DllRegisterServer(void) {
LOG(L"DllRegisterServer");
return UpdateRegistration(TRUE);
}
// DllUnregisterServer - Removes entries from the system registry
STDAPI DllUnregisterServer(void) {
LOG(L"DllUnregisterServer");
return UpdateRegistration(FALSE);
}
// DllInstall - Adds/Removes entries to the system registry per machine only.
STDAPI DllInstall(BOOL bInstall, LPCWSTR pszCmdLine) {
LOG(L"DllInstall(%d)", bInstall);
return HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED);
}
================================================
FILE: LegacyUpdate/dllmain.h
================================================
#pragma once
// dllmain.h : Declaration of module class.
extern HINSTANCE g_hInstance;
extern LONG g_serverLocks;
================================================
FILE: LegacyUpdate/resource.h
================================================
#define IDS_LEGACYUPDATE 1
#define ID_TYPELIB 1
================================================
FILE: LegacyUpdate/stdafx.h
================================================
#pragma once
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently,
// but are changed infrequently
#define STRICT
#define WINVER _WIN32_WINNT_WIN2K
#define _WIN32_WINNT _WIN32_WINNT_WIN2K
// Use msvcrt stdio functions
#define __USE_MINGW_ANSI_STDIO 0
#include "resource.h"
#include "Trace.h"
#include
================================================
FILE: LegacyUpdate/wuapi.idl
================================================
import "oaidl.idl";
// Just types we need from wuapi.idl
[
helpstring("IUpdateInstaller Interface"),
object,
oleautomation,
dual,
nonextensible,
uuid(7b929c68-ccdc-4226-96b1-8724600b54c2),
pointer_default(unique),
]
interface IUpdateInstaller : IDispatch {
[id(0x60020003), propget, restricted]
HRESULT ParentHwnd([out, retval] HWND *retval);
[id(0x60020003), propput, restricted]
HRESULT ParentHwnd([in, unique] HWND value);
};
[
uuid(B596CC9F-56E5-419E-A622-E01BB457431E),
version(2.0),
helpstring("WUAPI 2.0 Type Library")
]
library WUApiLib
{
importlib("stdole2.tlb");
[
helpstring("UpdateInstaller Class"),
uuid(D2E0FE7F-D23E-48E1-93C0-6FA8CC346474)
]
coclass UpdateInstaller
{
[default] interface IUpdateInstaller2;
};
};
================================================
FILE: LegacyUpdate/wuerror.mc
================================================
;// Reverse engineered from wuerror.h from Windows SDK 10.0.26100.0
;/***************************************************************************
;* *
;* wuerror.mc -- error code definitions for Windows Update. *
;* *
;* Copyright (c) Microsoft Corporation. All rights reserved. *
;* *
;***************************************************************************/
;#ifndef _WUERROR_
;#define _WUERROR_
MessageIdTypedef = DWORD
OutputBase = 16
FacilityNames = (
WindowsUpdate = 0x024
)
SeverityNames = (
Success = 0x0
Error = 0x2
)
LanguageNames = (
English = 0x0409:MSG0409
)
;///////////////////////////////////////////////////////////////////////////////
;// Windows Update Success Codes
;///////////////////////////////////////////////////////////////////////////////
MessageId = 0x0001
Facility = WindowsUpdate
Severity = Success
SymbolicName = WU_S_SERVICE_STOP
Language = English
Windows Update Agent was stopped successfully.
.
MessageId = 0x0002
Facility = WindowsUpdate
Severity = Success
SymbolicName = WU_S_SELFUPDATE
Language = English
Windows Update Agent updated itself.
.
MessageId = 0x0003
Facility = WindowsUpdate
Severity = Success
SymbolicName = WU_S_UPDATE_ERROR
Language = English
Operation completed successfully but there were errors applying the updates.
.
MessageId = 0x0004
Facility = WindowsUpdate
Severity = Success
SymbolicName = WU_S_MARKED_FOR_DISCONNECT
Language = English
A callback was marked to be disconnected later because the request to disconnect the operation came while a callback was executing.
.
MessageId = 0x0005
Facility = WindowsUpdate
Severity = Success
SymbolicName = WU_S_REBOOT_REQUIRED
Language = English
The system must be restarted to complete installation of the update.
.
MessageId = 0x0006
Facility = WindowsUpdate
Severity = Success
SymbolicName = WU_S_ALREADY_INSTALLED
Language = English
The update to be installed is already installed on the system.
.
MessageId = 0x0007
Facility = WindowsUpdate
Severity = Success
SymbolicName = WU_S_ALREADY_UNINSTALLED
Language = English
The update to be removed is not installed on the system.
.
MessageId = 0x0008
Facility = WindowsUpdate
Severity = Success
SymbolicName = WU_S_ALREADY_DOWNLOADED
Language = English
The update to be downloaded has already been downloaded.
.
MessageId = 0x0009
Facility = WindowsUpdate
Severity = Success
SymbolicName = WU_S_SOME_UPDATES_SKIPPED_ON_BATTERY
Language = English
The operation completed successfully, but some updates were skipped because the system is running on batteries.
.
MessageId = 0x000A
Facility = WindowsUpdate
Severity = Success
SymbolicName = WU_S_ALREADY_REVERTED
Language = English
The update to be reverted is not present on the system.
.
MessageId = 0x0010
Facility = WindowsUpdate
Severity = Success
SymbolicName = WU_S_SEARCH_CRITERIA_NOT_SUPPORTED
Language = English
The operation is skipped because the update service does not support the requested search criteria.
.
MessageId = 0x2015
Facility = WindowsUpdate
Severity = Success
SymbolicName = WU_S_UH_INSTALLSTILLPENDING
Language = English
The installation operation for the update is still in progress.
.
MessageId = 0x2016
Facility = WindowsUpdate
Severity = Success
SymbolicName = WU_S_UH_DOWNLOAD_SIZE_CALCULATED
Language = English
The actual download size has been calculated by the handler.
.
MessageId = 0x5001
Facility = WindowsUpdate
Severity = Success
SymbolicName = WU_S_SIH_NOOP
Language = English
No operation was required by the server-initiated healing server response.
.
MessageId = 0x6001
Facility = WindowsUpdate
Severity = Success
SymbolicName = WU_S_DM_ALREADYDOWNLOADING
Language = English
The update to be downloaded is already being downloaded.
.
MessageId = 0x7101
Facility = WindowsUpdate
Severity = Success
SymbolicName = WU_S_METADATA_SKIPPED_BY_ENFORCEMENTMODE
Language = English
Metadata verification was skipped by enforcement mode.
.
MessageId = 0x7102
Facility = WindowsUpdate
Severity = Success
SymbolicName = WU_S_METADATA_IGNORED_SIGNATURE_VERIFICATION
Language = English
A server configuration refresh resulted in metadata signature verification to be ignored.
.
MessageId = 0x8001
Facility = WindowsUpdate
Severity = Success
SymbolicName = WU_S_SEARCH_LOAD_SHEDDING
Language = English
Search operation completed successfully but one or more services were shedding load.
.
MessageId = 0x8002
Facility = WindowsUpdate
Severity = Success
SymbolicName = WU_S_AAD_DEVICE_TICKET_NOT_NEEDED
Language = English
There was no need to retrieve an AAD device ticket.
.
;///////////////////////////////////////////////////////////////////////////////
;// Windows Update Error Codes
;///////////////////////////////////////////////////////////////////////////////
MessageId = 0x0001
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_NO_SERVICE
Language = English
Windows Update Agent was unable to provide the service.
.
MessageId = 0x0002
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_MAX_CAPACITY_REACHED
Language = English
The maximum capacity of the service was exceeded.
.
MessageId = 0x0003
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UNKNOWN_ID
Language = English
An ID cannot be found.
.
MessageId = 0x0004
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_NOT_INITIALIZED
Language = English
The object could not be initialized.
.
MessageId = 0x0005
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_RANGEOVERLAP
Language = English
The update handler requested a byte range overlapping a previously requested range.
.
MessageId = 0x0006
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_TOOMANYRANGES
Language = English
The requested number of byte ranges exceeds the maximum number (2^31 - 1).
.
MessageId = 0x0007
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INVALIDINDEX
Language = English
The index to a collection was invalid.
.
MessageId = 0x0008
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_ITEMNOTFOUND
Language = English
The key for the item queried could not be found.
.
MessageId = 0x0009
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_OPERATIONINPROGRESS
Language = English
Another conflicting operation was in progress. Some operations such as installation cannot be performed twice simultaneously.
.
MessageId = 0x000A
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_COULDNOTCANCEL
Language = English
Cancellation of the operation was not allowed.
.
MessageId = 0x000B
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_CALL_CANCELLED
Language = English
Operation was cancelled.
.
MessageId = 0x000C
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_NOOP
Language = English
No operation was required.
.
MessageId = 0x000D
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_XML_MISSINGDATA
Language = English
Windows Update Agent could not find required information in the update's XML data.
.
MessageId = 0x000E
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_XML_INVALID
Language = English
Windows Update Agent found invalid information in the update's XML data.
.
MessageId = 0x000F
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_CYCLE_DETECTED
Language = English
Circular update relationships were detected in the metadata.
.
MessageId = 0x0010
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_TOO_DEEP_RELATION
Language = English
Update relationships too deep to evaluate were evaluated.
.
MessageId = 0x0011
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INVALID_RELATIONSHIP
Language = English
An invalid update relationship was detected.
.
MessageId = 0x0012
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_REG_VALUE_INVALID
Language = English
An invalid registry value was read.
.
MessageId = 0x0013
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DUPLICATE_ITEM
Language = English
Operation tried to add a duplicate item to a list.
.
MessageId = 0x0014
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INVALID_INSTALL_REQUESTED
Language = English
Updates requested for install are not installable by caller.
.
MessageId = 0x0016
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INSTALL_NOT_ALLOWED
Language = English
Operation tried to install while another installation was in progress or the system was pending a mandatory restart.
.
MessageId = 0x0017
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_NOT_APPLICABLE
Language = English
Operation was not performed because there are no applicable updates.
.
MessageId = 0x0018
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_NO_USERTOKEN
Language = English
Operation failed because a required user token is missing.
.
MessageId = 0x0019
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_EXCLUSIVE_INSTALL_CONFLICT
Language = English
An exclusive update cannot be installed with other updates at the same time.
.
MessageId = 0x001A
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_POLICY_NOT_SET
Language = English
A policy value was not set.
.
MessageId = 0x001B
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SELFUPDATE_IN_PROGRESS
Language = English
The operation could not be performed because the Windows Update Agent is self-updating.
.
MessageId = 0x001D
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INVALID_UPDATE
Language = English
An update contains invalid metadata.
.
MessageId = 0x001E
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SERVICE_STOP
Language = English
Operation did not complete because the service or system was being shut down.
.
MessageId = 0x001F
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_NO_CONNECTION
Language = English
Operation did not complete because the network connection was unavailable.
.
MessageId = 0x0020
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_NO_INTERACTIVE_USER
Language = English
Operation did not complete because there is no logged-on interactive user.
.
MessageId = 0x0021
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_TIME_OUT
Language = English
Operation did not complete because it timed out.
.
MessageId = 0x0022
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_ALL_UPDATES_FAILED
Language = English
Operation failed for all the updates.
.
MessageId = 0x0023
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_EULAS_DECLINED
Language = English
The license terms for all updates were declined.
.
MessageId = 0x0024
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_NO_UPDATE
Language = English
There are no updates.
.
MessageId = 0x0025
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_USER_ACCESS_DISABLED
Language = English
Group Policy settings prevented access to Windows Update.
.
MessageId = 0x0026
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INVALID_UPDATE_TYPE
Language = English
The type of update is invalid.
.
MessageId = 0x0027
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_URL_TOO_LONG
Language = English
The URL exceeded the maximum length.
.
MessageId = 0x0028
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UNINSTALL_NOT_ALLOWED
Language = English
The update could not be uninstalled because the request did not originate from a WSUS server.
.
MessageId = 0x0029
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INVALID_PRODUCT_LICENSE
Language = English
Search may have missed some updates before there is an unlicensed application on the system.
.
MessageId = 0x002A
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_MISSING_HANDLER
Language = English
A component required to detect applicable updates was missing.
.
MessageId = 0x002B
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_LEGACYSERVER
Language = English
An operation did not complete because it requires a newer version of server.
.
MessageId = 0x002C
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_BIN_SOURCE_ABSENT
Language = English
A delta-compressed update could not be installed because it required the source.
.
MessageId = 0x002D
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SOURCE_ABSENT
Language = English
A full-file update could not be installed because it required the source.
.
MessageId = 0x002E
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_WU_DISABLED
Language = English
Access to an unmanaged server is not allowed.
.
MessageId = 0x002F
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_CALL_CANCELLED_BY_POLICY
Language = English
Operation did not complete because the DisableWindowsUpdateAccess policy was set.
.
MessageId = 0x0030
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INVALID_PROXY_SERVER
Language = English
The format of the proxy list was invalid.
.
MessageId = 0x0031
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INVALID_FILE
Language = English
The file is in the wrong format.
.
MessageId = 0x0032
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INVALID_CRITERIA
Language = English
The search criteria string was invalid.
.
MessageId = 0x0033
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_EULA_UNAVAILABLE
Language = English
License terms could not be downloaded.
.
MessageId = 0x0034
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DOWNLOAD_FAILED
Language = English
Update failed to download.
.
MessageId = 0x0035
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UPDATE_NOT_PROCESSED
Language = English
The update was not processed.
.
MessageId = 0x0036
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INVALID_OPERATION
Language = English
The object's current state did not allow the operation.
.
MessageId = 0x0037
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_NOT_SUPPORTED
Language = English
The functionality for the operation is not supported.
.
MessageId = 0x0038
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_WINHTTP_INVALID_FILE
Language = English
The downloaded file has an unexpected content type.
.
MessageId = 0x0039
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_TOO_MANY_RESYNC
Language = English
Agent is asked by server to resync too many times.
.
MessageId = 0x0040
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_NO_SERVER_CORE_SUPPORT
Language = English
WUA API method does not run on Server Core installation.
.
MessageId = 0x0041
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SYSPREP_IN_PROGRESS
Language = English
Service is not available while sysprep is running.
.
MessageId = 0x0042
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UNKNOWN_SERVICE
Language = English
The update service is no longer registered with AU.
.
MessageId = 0x0043
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_NO_UI_SUPPORT
Language = English
There is no support for WUA UI.
.
MessageId = 0x0044
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PER_MACHINE_UPDATE_ACCESS_DENIED
Language = English
Only administrators can perform this operation on per-machine updates.
.
MessageId = 0x0045
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UNSUPPORTED_SEARCHSCOPE
Language = English
A search was attempted with a scope that is not currently supported for this type of search.
.
MessageId = 0x0046
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_BAD_FILE_URL
Language = English
The URL does not point to a file.
.
MessageId = 0x0047
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_REVERT_NOT_ALLOWED
Language = English
The update could not be reverted.
.
MessageId = 0x0048
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INVALID_NOTIFICATION_INFO
Language = English
The featured update notification info returned by the server is invalid.
.
MessageId = 0x0049
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_OUTOFRANGE
Language = English
The data is out of range.
.
MessageId = 0x004A
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SETUP_IN_PROGRESS
Language = English
Windows Update agent operations are not available while OS setup is running.
.
MessageId = 0x004B
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_ORPHANED_DOWNLOAD_JOB
Language = English
An orphaned downloadjob was found with no active callers.
.
MessageId = 0x004C
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_LOW_BATTERY
Language = English
An update could not be installed because the system battery power level is too low.
.
MessageId = 0x004D
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INFRASTRUCTUREFILE_INVALID_FORMAT
Language = English
The downloaded infrastructure file is incorrectly formatted.
.
MessageId = 0x004E
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INFRASTRUCTUREFILE_REQUIRES_SSL
Language = English
The infrastructure file must be downloaded using strong SSL.
.
MessageId = 0x004F
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_IDLESHUTDOWN_OPCOUNT_DISCOVERY
Language = English
A discovery call contributed to a non-zero operation count at idle timer shutdown.
.
MessageId = 0x0050
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_IDLESHUTDOWN_OPCOUNT_SEARCH
Language = English
A search call contributed to a non-zero operation count at idle timer shutdown.
.
MessageId = 0x0051
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_IDLESHUTDOWN_OPCOUNT_DOWNLOAD
Language = English
A download call contributed to a non-zero operation count at idle timer shutdown.
.
MessageId = 0x0052
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_IDLESHUTDOWN_OPCOUNT_INSTALL
Language = English
An install call contributed to a non-zero operation count at idle timer shutdown.
.
MessageId = 0x0053
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_IDLESHUTDOWN_OPCOUNT_OTHER
Language = English
An unspecified call contributed to a non-zero operation count at idle timer shutdown.
.
MessageId = 0x0054
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INTERACTIVE_CALL_CANCELLED
Language = English
An interactive user cancelled this operation, which was started from the Windows Update Agent UI.
.
MessageId = 0x0055
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_AU_CALL_CANCELLED
Language = English
Automatic Updates cancelled this operation because it applies to an update that is no longer applicable to this computer.
.
MessageId = 0x0056
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SYSTEM_UNSUPPORTED
Language = English
This version or edition of the operating system doesn't support the needed functionality.
.
MessageId = 0x0057
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_NO_SUCH_HANDLER_PLUGIN
Language = English
The requested update download or install handler, or update applicability expression evaluator, is not provided by this Agent plugin.
.
MessageId = 0x0058
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INVALID_SERIALIZATION_VERSION
Language = English
The requested serialization version is not supported.
.
MessageId = 0x0059
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_NETWORK_COST_EXCEEDS_POLICY
Language = English
The current network cost does not meet the conditions set by the network cost policy.
.
MessageId = 0x005A
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_CALL_CANCELLED_BY_HIDE
Language = English
The call is cancelled because it applies to an update that is hidden (no longer applicable to this computer).
.
MessageId = 0x005B
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_CALL_CANCELLED_BY_INVALID
Language = English
The call is cancelled because it applies to an update that is invalid (no longer applicable to this computer).
.
MessageId = 0x005C
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INVALID_VOLUMEID
Language = English
The specified volume id is invalid.
.
MessageId = 0x005D
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UNRECOGNIZED_VOLUMEID
Language = English
The specified volume id is unrecognized by the system.
.
MessageId = 0x005E
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_EXTENDEDERROR_NOTSET
Language = English
The installation extended error code is not specified.
.
MessageId = 0x005F
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_EXTENDEDERROR_FAILED
Language = English
The installation extended error code is set to general fail.
.
MessageId = 0x0060
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_IDLESHUTDOWN_OPCOUNT_SERVICEREGISTRATION
Language = English
A service registration call contributed to a non-zero operation count at idle timer shutdown.
.
MessageId = 0x0061
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_FILETRUST_SHA2SIGNATURE_MISSING
Language = English
Signature validation of the file fails to find valid SHA2+ signature on MS signed payload.
.
MessageId = 0x0062
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UPDATE_NOT_APPROVED
Language = English
The update is not in the servicing approval list.
.
MessageId = 0x0063
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_CALL_CANCELLED_BY_INTERACTIVE_SEARCH
Language = English
The search call was cancelled by another interactive search against the same service.
.
MessageId = 0x0064
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INSTALL_JOB_RESUME_NOT_ALLOWED
Language = English
Resume of install job not allowed due to another installation in progress.
.
MessageId = 0x0065
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INSTALL_JOB_NOT_SUSPENDED
Language = English
Resume of install job not allowed because job is not suspended.
.
MessageId = 0x0066
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INSTALL_USERCONTEXT_ACCESSDENIED
Language = English
User context passed to installation from caller with insufficient privileges.
.
MessageId = 0x0067
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_STANDBY_ACTIVITY_NOT_ALLOWED
Language = English
Operation is not allowed because the device is in DC (Direct Current) and DS (Disconnected Standby).
.
MessageId = 0x0068
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_COULD_NOT_EVALUATE_PROPERTY
Language = English
The property could not be evaluated.
.
MessageId = 0x0FFF
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UNEXPECTED
Language = English
An operation failed due to reasons not covered by another error code.
.
;///////////////////////////////////////////////////////////////////////////////
;// Windows Installer minor errors
;//
;// The following errors are used to indicate that part of a search failed for
;// MSI problems. Another part of the search may successfully return updates.
;// All MSI minor codes should share the same error code range so that the caller
;// tell that they are related to Windows Installer.
;///////////////////////////////////////////////////////////////////////////////
MessageId = 0x1001
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_MSI_WRONG_VERSION
Language = English
Search may have missed some updates because the Windows Installer is less than version 3.1.
.
MessageId = 0x1002
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_MSI_NOT_CONFIGURED
Language = English
Search may have missed some updates because the Windows Installer is not configured.
.
MessageId = 0x1003
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_MSP_DISABLED
Language = English
Search may have missed some updates because policy has disabled Windows Installer patching.
.
MessageId = 0x1004
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_MSI_WRONG_APP_CONTEXT
Language = English
An update could not be applied because the application is installed per-user.
.
MessageId = 0x1005
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_MSI_NOT_PRESENT
Language = English
Search may have missed some updates because the Windows Installer is less than version 3.1.
.
MessageId = 0x1FFF
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_MSP_UNEXPECTED
Language = English
Search may have missed some updates because there was a failure of the Windows Installer.
.
;///////////////////////////////////////////////////////////////////////////////
;// Protocol Talker errors
;//
;// The following map to SOAPCLIENT_ERRORs from atlsoap.h. These errors
;// are obtained from calling GetClientError() on the CClientWebService
;// object.
;///////////////////////////////////////////////////////////////////////////////
MessageId = 0x4000
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_SOAPCLIENT_BASE
Language = English
WU_E_PT_SOAPCLIENT_* error codes map to the SOAPCLIENT_ERROR enum of the ATL Server Library.
.
MessageId = 0x4001
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_SOAPCLIENT_INITIALIZE
Language = English
SOAPCLIENT_INITIALIZE_ERROR - initialization of the SOAP client failed, possibly because of an MSXML installation failure.
.
MessageId = 0x4002
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_SOAPCLIENT_OUTOFMEMORY
Language = English
SOAPCLIENT_OUTOFMEMORY - SOAP client failed because it ran out of memory.
.
MessageId = 0x4003
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_SOAPCLIENT_GENERATE
Language = English
SOAPCLIENT_GENERATE_ERROR - SOAP client failed to generate the request.
.
MessageId = 0x4004
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_SOAPCLIENT_CONNECT
Language = English
SOAPCLIENT_CONNECT_ERROR - SOAP client failed to connect to the server.
.
MessageId = 0x4005
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_SOAPCLIENT_SEND
Language = English
SOAPCLIENT_SEND_ERROR - SOAP client failed to send a message for reasons of WU_E_WINHTTP_* error codes.
.
MessageId = 0x4006
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_SOAPCLIENT_SERVER
Language = English
SOAPCLIENT_SERVER_ERROR - SOAP client failed because there was a server error.
.
MessageId = 0x4007
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_SOAPCLIENT_SOAPFAULT
Language = English
SOAPCLIENT_SOAPFAULT - SOAP client failed because there was a SOAP fault for reasons of WU_E_PT_SOAP_* error codes.
.
MessageId = 0x4008
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_SOAPCLIENT_PARSEFAULT
Language = English
SOAPCLIENT_PARSEFAULT_ERROR - SOAP client failed to parse a SOAP fault.
.
MessageId = 0x4009
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_SOAPCLIENT_READ
Language = English
SOAPCLIENT_READ_ERROR - SOAP client failed while reading the response from the server.
.
MessageId = 0x400A
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_SOAPCLIENT_PARSE
Language = English
SOAPCLIENT_PARSE_ERROR - SOAP client failed to parse the response from the server.
.
;// The following map to SOAP_ERROR_CODEs from atlsoap.h. These errors
;// are obtained from the m_fault.m_soapErrCode member on the
;// CClientWebService object when GetClientError() returned
;// SOAPCLIENT_SOAPFAULT.
MessageId = 0x400B
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_SOAP_VERSION
Language = English
SOAP_E_VERSION_MISMATCH - SOAP client found an unrecognizable namespace for the SOAP envelope.
.
MessageId = 0x400C
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_SOAP_MUST_UNDERSTAND
Language = English
SOAP_E_MUST_UNDERSTAND - SOAP client was unable to understand a header.
.
MessageId = 0x400D
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_SOAP_CLIENT
Language = English
SOAP_E_CLIENT - SOAP client found the message was malformed; fix before resending.
.
MessageId = 0x400E
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_SOAP_SERVER
Language = English
SOAP_E_SERVER - The SOAP message could not be processed due to a server error; resend later.
.
MessageId = 0x400F
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_WMI_ERROR
Language = English
There was an unspecified Windows Management Instrumentation (WMI) error.
.
MessageId = 0x4010
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_EXCEEDED_MAX_SERVER_TRIPS
Language = English
The number of round trips to the server exceeded the maximum limit.
.
MessageId = 0x4011
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_SUS_SERVER_NOT_SET
Language = English
WUServer policy value is missing in the registry.
.
MessageId = 0x4012
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_DOUBLE_INITIALIZATION
Language = English
Initialization failed because the object was already initialized.
.
MessageId = 0x4013
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_INVALID_COMPUTER_NAME
Language = English
The computer name could not be determined.
.
MessageId = 0x4015
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_REFRESH_CACHE_REQUIRED
Language = English
The reply from the server indicates that the server was changed or the cookie was invalid; refresh the state of the internal cache and retry.
.
MessageId = 0x4016
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_HTTP_STATUS_BAD_REQUEST
Language = English
HTTP status 400 - the server could not process the request due to invalid syntax.
.
MessageId = 0x4017
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_HTTP_STATUS_DENIED
Language = English
HTTP status 401 - the requested resource requires user authentication.
.
MessageId = 0x4018
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_HTTP_STATUS_FORBIDDEN
Language = English
HTTP status 403 - server understood the request, but declined to fulfill it.
.
MessageId = 0x4019
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_HTTP_STATUS_NOT_FOUND
Language = English
HTTP status 404 - the server cannot find the requested URI (Uniform Resource Identifier).
.
MessageId = 0x401A
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_HTTP_STATUS_BAD_METHOD
Language = English
HTTP status 405 - the HTTP method is not allowed.
.
MessageId = 0x401B
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_HTTP_STATUS_PROXY_AUTH_REQ
Language = English
HTTP status 407 - proxy authentication is required.
.
MessageId = 0x401C
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_HTTP_STATUS_REQUEST_TIMEOUT
Language = English
HTTP status 408 - the server timed out waiting for the request.
.
MessageId = 0x401D
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_HTTP_STATUS_CONFLICT
Language = English
HTTP status 409 - the request was not completed due to a conflict with the current state of the resource.
.
MessageId = 0x401E
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_HTTP_STATUS_GONE
Language = English
HTTP status 410 - requested resource is no longer available at the server.
.
MessageId = 0x401F
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_HTTP_STATUS_SERVER_ERROR
Language = English
HTTP status 500 - an error internal to the server prevented fulfilling the request.
.
MessageId = 0x4020
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_HTTP_STATUS_NOT_SUPPORTED
Language = English
HTTP status 501 - server does not support the functionality required to fulfill the request.
.
MessageId = 0x4021
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_HTTP_STATUS_BAD_GATEWAY
Language = English
HTTP status 502 - the server, while acting as a gateway or proxy, received an invalid response from the upstream server it accessed in attempting to fulfill the request.
.
MessageId = 0x4022
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_HTTP_STATUS_SERVICE_UNAVAIL
Language = English
HTTP status 503 - the service is temporarily overloaded.
.
MessageId = 0x4023
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_HTTP_STATUS_GATEWAY_TIMEOUT
Language = English
HTTP status 504 - the request was timed out waiting for a gateway.
.
MessageId = 0x4024
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_HTTP_STATUS_VERSION_NOT_SUP
Language = English
HTTP status 505 - the server does not support the HTTP protocol version used for the request.
.
MessageId = 0x4025
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_FILE_LOCATIONS_CHANGED
Language = English
Operation failed due to a changed file location; refresh internal state and resend.
.
MessageId = 0x4026
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_REGISTRATION_NOT_SUPPORTED
Language = English
Operation failed because Windows Update Agent does not support registration with a non-WSUS server.
.
MessageId = 0x4027
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_NO_AUTH_PLUGINS_REQUESTED
Language = English
The server returned an empty authentication information list.
.
MessageId = 0x4028
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_NO_AUTH_COOKIES_CREATED
Language = English
Windows Update Agent was unable to create any valid authentication cookies.
.
MessageId = 0x4029
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_INVALID_CONFIG_PROP
Language = English
A configuration property value was wrong.
.
MessageId = 0x402A
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_CONFIG_PROP_MISSING
Language = English
A configuration property value was missing.
.
MessageId = 0x402B
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_HTTP_STATUS_NOT_MAPPED
Language = English
The HTTP request could not be completed and the reason did not correspond to any of the WU_E_PT_HTTP_* error codes.
.
MessageId = 0x402C
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_WINHTTP_NAME_NOT_RESOLVED
Language = English
ERROR_WINHTTP_NAME_NOT_RESOLVED - the proxy server or target server name cannot be resolved.
.
MessageId = 0x402D
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_LOAD_SHEDDING
Language = English
The server is shedding load.
.
MessageId = 0x402E
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_CLIENT_ENFORCED_LOAD_SHEDDING
Language = English
Windows Update Agent is enforcing honoring the service load shedding interval.
.
MessageId = 0x502D
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_SAME_REDIR_ID
Language = English
Windows Update Agent failed to download a redirector cabinet file with a new redirectorId value from the server during the recovery.
.
MessageId = 0x502E
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_NO_MANAGED_RECOVER
Language = English
A redirector recovery action did not complete because the server is managed.
.
MessageId = 0x402F
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_ECP_SUCCEEDED_WITH_ERRORS
Language = English
External cab file processing completed with some errors.
.
MessageId = 0x4030
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_ECP_INIT_FAILED
Language = English
The external cab processor initialization did not complete.
.
MessageId = 0x4031
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_ECP_INVALID_FILE_FORMAT
Language = English
The format of a metadata file was invalid.
.
MessageId = 0x4032
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_ECP_INVALID_METADATA
Language = English
External cab processor found invalid metadata.
.
MessageId = 0x4033
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_ECP_FAILURE_TO_EXTRACT_DIGEST
Language = English
The file digest could not be extracted from an external cab file.
.
MessageId = 0x4034
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_ECP_FAILURE_TO_DECOMPRESS_CAB_FILE
Language = English
An external cab file could not be decompressed.
.
MessageId = 0x4035
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_ECP_FILE_LOCATION_ERROR
Language = English
External cab processor was unable to get file locations.
.
MessageId = 0x0436
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_CATALOG_SYNC_REQUIRED
Language = English
The server does not support category-specific search; Full catalog search has to be issued instead.
.
MessageId = 0x0437
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_SECURITY_VERIFICATION_FAILURE
Language = English
There was a problem authorizing with the service.
.
MessageId = 0x0438
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_ENDPOINT_UNREACHABLE
Language = English
There is no route or network connectivity to the endpoint.
.
MessageId = 0x0439
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_INVALID_FORMAT
Language = English
The data received does not meet the data contract expectations.
.
MessageId = 0x043A
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_INVALID_URL
Language = English
The url is invalid.
.
MessageId = 0x043B
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_NWS_NOT_LOADED
Language = English
Unable to load NWS runtime.
.
MessageId = 0x043C
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_PROXY_AUTH_SCHEME_NOT_SUPPORTED
Language = English
The proxy auth scheme is not supported.
.
MessageId = 0x043D
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SERVICEPROP_NOTAVAIL
Language = English
The requested service property is not available.
.
MessageId = 0x043E
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_ENDPOINT_REFRESH_REQUIRED
Language = English
The endpoint provider plugin requires online refresh.
.
MessageId = 0x043F
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_ENDPOINTURL_NOTAVAIL
Language = English
A URL for the requested service endpoint is not available.
.
MessageId = 0x0440
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_ENDPOINT_DISCONNECTED
Language = English
The connection to the service endpoint died.
.
MessageId = 0x0441
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_INVALID_OPERATION
Language = English
The operation is invalid because protocol talker is in an inappropriate state.
.
;// Same as WS_E_OBJECT_FAULTED
MessageId = 0x0442
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_OBJECT_FAULTED
Language = English
The object is in a faulted state due to a previous error.
.
;// Same as WS_E_NUMERIC_OVERFLOW
MessageId = 0x0443
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_NUMERIC_OVERFLOW
Language = English
The operation would lead to numeric overflow.
.
;// Same as WS_E_OPERATION_ABORTED
MessageId = 0x0444
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_OPERATION_ABORTED
Language = English
The operation was aborted.
.
;// Same as WS_E_OPERATION_ABANDONED
MessageId = 0x0445
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_OPERATION_ABANDONED
Language = English
The operation was abandoned.
.
;// Same as WS_E_QUOTA_EXCEEDED
MessageId = 0x0446
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_QUOTA_EXCEEDED
Language = English
A quota was exceeded.
.
;// Same as WS_E_NO_TRANSLATION_AVAILABLE
MessageId = 0x0447
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_NO_TRANSLATION_AVAILABLE
Language = English
The information was not available in the specified language.
.
;// Same as WS_E_ADDRESS_IN_USE
MessageId = 0x0448
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_ADDRESS_IN_USE
Language = English
The address is already being used.
.
;// Same as WS_E_ADDRESS_NOT_AVAILABLE
MessageId = 0x0449
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_ADDRESS_NOT_AVAILABLE
Language = English
The address is not valid for this context.
.
;// Same as WS_E_OTHER
MessageId = 0x044A
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_OTHER
Language = English
Unrecognized error occurred in the Windows Web Services framework.
.
;// Same as WS_E_SECURITY_SYSTEM_FAILURE
MessageId = 0x044B
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_SECURITY_SYSTEM_FAILURE
Language = English
A security operation failed in the Windows Web Services framework.
.
MessageId = 0x4100
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_DATA_BOUNDARY_RESTRICTED
Language = English
The client is data boundary restricted and needs to talk to a restricted endpoint.
.
MessageId = 0x4101
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_GENERAL_AAD_CLIENT_ERROR
Language = English
The client hit an error in retrieving AAD device ticket.
.
MessageId = 0x4FFF
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_PT_UNEXPECTED
Language = English
A communication error not covered by another WU_E_PT_* error code.
.
;///////////////////////////////////////////////////////////////////////////////
;// Redirector errors
;//
;// The following errors are generated by the components that download and
;// parse the wuredir.cab
;///////////////////////////////////////////////////////////////////////////////
MessageId = 0x5001
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_REDIRECTOR_LOAD_XML
Language = English
The redirector XML document could not be loaded into the DOM class.
.
MessageId = 0x5002
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_REDIRECTOR_S_FALSE
Language = English
The redirector XML document is missing some required information.
.
MessageId = 0x5003
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_REDIRECTOR_ID_SMALLER
Language = English
The redirectorId in the downloaded redirector cab is less than in the cached cab.
.
MessageId = 0x5004
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_REDIRECTOR_UNKNOWN_SERVICE
Language = English
The service ID is not supported in the service environment.
.
MessageId = 0x5005
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_REDIRECTOR_UNSUPPORTED_CONTENTTYPE
Language = English
The response from the redirector server had an unsupported content type.
.
MessageId = 0x5006
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_REDIRECTOR_INVALID_RESPONSE
Language = English
The response from the redirector server had an error status or was invalid.
.
MessageId = 0x5008
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_REDIRECTOR_ATTRPROVIDER_EXCEEDED_MAX_NAMEVALUE
Language = English
The maximum number of name value pairs was exceeded by the attribute provider.
.
MessageId = 0x5009
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_REDIRECTOR_ATTRPROVIDER_INVALID_NAME
Language = English
The name received from the attribute provider was invalid.
.
MessageId = 0x500A
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_REDIRECTOR_ATTRPROVIDER_INVALID_VALUE
Language = English
The value received from the attribute provider was invalid.
.
MessageId = 0x500B
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_REDIRECTOR_SLS_GENERIC_ERROR
Language = English
There was an error in connecting to or parsing the response from the Service Locator Service redirector server.
.
MessageId = 0x500C
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_REDIRECTOR_CONNECT_POLICY
Language = English
Connections to the redirector server are disallowed by managed policy.
.
MessageId = 0x500D
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_REDIRECTOR_ONLINE_DISALLOWED
Language = English
The redirector would go online but is disallowed by caller configuration.
.
MessageId = 0x50FF
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_REDIRECTOR_UNEXPECTED
Language = English
The redirector failed for reasons not covered by another WU_E_REDIRECTOR_* error code.
.
;///////////////////////////////////////////////////////////////////////////////
;// SIH errors
;//
;// The following errors are generated by the components that are involved with
;// service-initiated healing.
;///////////////////////////////////////////////////////////////////////////////
MessageId = 0x5101
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SIH_VERIFY_DOWNLOAD_ENGINE
Language = English
Verification of the servicing engine package failed.
.
MessageId = 0x5102
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SIH_VERIFY_DOWNLOAD_PAYLOAD
Language = English
Verification of a servicing package failed.
.
MessageId = 0x5103
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SIH_VERIFY_STAGE_ENGINE
Language = English
Verification of the staged engine failed.
.
MessageId = 0x5104
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SIH_VERIFY_STAGE_PAYLOAD
Language = English
Verification of a staged payload failed.
.
MessageId = 0x5105
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SIH_ACTION_NOT_FOUND
Language = English
An internal error occurred where the servicing action was not found.
.
MessageId = 0x5106
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SIH_SLS_PARSE
Language = English
There was a parse error in the service environment response.
.
MessageId = 0x5107
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SIH_INVALIDHASH
Language = English
A downloaded file failed an integrity check.
.
MessageId = 0x5108
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SIH_NO_ENGINE
Language = English
No engine was provided by the server-initiated healing server response.
.
MessageId = 0x5109
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SIH_POST_REBOOT_INSTALL_FAILED
Language = English
Post-reboot install failed.
.
MessageId = 0x510A
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SIH_POST_REBOOT_NO_CACHED_SLS_RESPONSE
Language = English
There were pending reboot actions, but cached SLS response was not found post-reboot.
.
MessageId = 0x510B
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SIH_PARSE
Language = English
Parsing command line arguments failed.
.
MessageId = 0x510C
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SIH_SECURITY
Language = English
Security check failed.
.
MessageId = 0x510D
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SIH_PPL
Language = English
PPL check failed.
.
MessageId = 0x510E
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SIH_POLICY
Language = English
Execution was disabled by policy.
.
MessageId = 0x510F
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SIH_STDEXCEPTION
Language = English
A standard exception was caught.
.
MessageId = 0x5110
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SIH_NONSTDEXCEPTION
Language = English
A non-standard exception was caught.
.
MessageId = 0x5111
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SIH_ENGINE_EXCEPTION
Language = English
The server-initiated healing engine encountered an exception not covered by another WU_E_SIH_* error code.
.
MessageId = 0x5112
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SIH_BLOCKED_FOR_PLATFORM
Language = English
You are running SIH Client with cmd not supported on your platform.
.
MessageId = 0x5113
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SIH_ANOTHER_INSTANCE_RUNNING
Language = English
Another SIH Client is already running.
.
MessageId = 0x5114
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SIH_DNSRESILIENCY_OFF
Language = English
Disable DNS resiliency feature per service configuration.
.
MessageId = 0x51FF
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SIH_UNEXPECTED
Language = English
There was a failure for reasons not covered by another WU_E_SIH_* error code.
.
;///////////////////////////////////////////////////////////////////////////////
;// driver util errors
;//
;// The device PnP enumerated device was pruned from the SystemSpec because
;// one of the hardware or compatible IDs matched an installed printer driver.
;// This is not considered a fatal error and the device is simply skipped.
;///////////////////////////////////////////////////////////////////////////////
MessageId = 0xC001
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DRV_PRUNED
Language = English
A driver was skipped.
.
MessageId = 0xC002
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DRV_NOPROP_OR_LEGACY
Language = English
A property for the driver could not be found. It may not conform with required specifications.
.
MessageId = 0xC003
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DRV_REG_MISMATCH
Language = English
The registry type read for the driver does not match the expected type.
.
MessageId = 0xC004
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DRV_NO_METADATA
Language = English
The driver update is missing metadata.
.
MessageId = 0xC005
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DRV_MISSING_ATTRIBUTE
Language = English
The driver update is missing a required attribute.
.
MessageId = 0xC006
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DRV_SYNC_FAILED
Language = English
Driver synchronization failed.
.
MessageId = 0xC007
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DRV_NO_PRINTER_CONTENT
Language = English
Information required for the synchronization of applicable printers is missing.
.
MessageId = 0xC008
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DRV_DEVICE_PROBLEM
Language = English
After installing a driver update, the updated device has reported a problem.
.
;// MessageId 0xCE00 through 0xCEFF are reserved for post-install driver problem codes
;// (see uhdriver.cpp)
MessageId = 0xCFFF
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DRV_UNEXPECTED
Language = English
A driver error not covered by another WU_E_DRV_* code.
.
;//////////////////////////////////////////////////////////////////////////////
;// data store errors
;///////////////////////////////////////////////////////////////////////////////
MessageId = 0x8000
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_SHUTDOWN
Language = English
An operation failed because Windows Update Agent is shutting down.
.
MessageId = 0x8001
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_INUSE
Language = English
An operation failed because the data store was in use.
.
MessageId = 0x8002
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_INVALID
Language = English
The current and expected states of the data store do not match.
.
MessageId = 0x8003
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_TABLEMISSING
Language = English
The data store is missing a table.
.
MessageId = 0x8004
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_TABLEINCORRECT
Language = English
The data store contains a table with unexpected columns.
.
MessageId = 0x8005
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_INVALIDTABLENAME
Language = English
A table could not be opened because the table is not in the data store.
.
MessageId = 0x8006
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_BADVERSION
Language = English
The current and expected versions of the data store do not match.
.
MessageId = 0x8007
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_NODATA
Language = English
The information requested is not in the data store.
.
MessageId = 0x8008
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_MISSINGDATA
Language = English
The data store is missing required information or has a NULL in a table column that requires a non-null value.
.
MessageId = 0x8009
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_MISSINGREF
Language = English
The data store is missing required information or has a reference to missing license terms, file, localized property or linked row.
.
MessageId = 0x800A
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_UNKNOWNHANDLER
Language = English
The update was not processed because its update handler could not be recognized.
.
MessageId = 0x800B
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_CANTDELETE
Language = English
The update was not deleted because it is still referenced by one or more services.
.
MessageId = 0x800C
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_LOCKTIMEOUTEXPIRED
Language = English
The data store section could not be locked within the allotted time.
.
MessageId = 0x800D
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_NOCATEGORIES
Language = English
The category was not added because it contains no parent categories and is not a top-level category itself.
.
MessageId = 0x800E
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_ROWEXISTS
Language = English
The row was not added because an existing row has the same primary key.
.
MessageId = 0x800F
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_STOREFILELOCKED
Language = English
The data store could not be initialized because it was locked by another process.
.
MessageId = 0x8010
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_CANNOTREGISTER
Language = English
The data store is not allowed to be registered with COM in the current process.
.
MessageId = 0x8011
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_UNABLETOSTART
Language = English
Could not create a data store object in another process.
.
MessageId = 0x8013
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_DUPLICATEUPDATEID
Language = English
The server sent the same update to the client with two different revision IDs.
.
MessageId = 0x8014
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_UNKNOWNSERVICE
Language = English
An operation did not complete because the service is not in the data store.
.
MessageId = 0x8015
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_SERVICEEXPIRED
Language = English
An operation did not complete because the registration of the service has expired.
.
MessageId = 0x8016
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_DECLINENOTALLOWED
Language = English
A request to hide an update was declined because it is a mandatory update or because it was deployed with a deadline.
.
MessageId = 0x8017
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_TABLESESSIONMISMATCH
Language = English
A table was not closed because it is not associated with the session.
.
MessageId = 0x8018
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_SESSIONLOCKMISMATCH
Language = English
A table was not closed because it is not associated with the session.
.
MessageId = 0x8019
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_NEEDWINDOWSSERVICE
Language = English
A request to remove the Windows Update service or to unregister it with Automatic Updates was declined because it is a built-in service and/or Automatic Updates cannot fall back to another service.
.
MessageId = 0x801A
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_INVALIDOPERATION
Language = English
A request was declined because the operation is not allowed.
.
MessageId = 0x801B
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_SCHEMAMISMATCH
Language = English
The schema of the current data store and the schema of a table in a backup XML document do not match.
.
MessageId = 0x801C
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_RESETREQUIRED
Language = English
The data store requires a session reset; release the session and retry with a new session.
.
MessageId = 0x801D
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_IMPERSONATED
Language = English
A data store operation did not complete because it was requested with an impersonated identity.
.
MessageId = 0x801E
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_DATANOTAVAILABLE
Language = English
An operation against update metadata did not complete because the data was never received from server.
.
MessageId = 0x801F
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_DATANOTLOADED
Language = English
An operation against update metadata did not complete because the data was available but not loaded from datastore.
.
MessageId = 0x8020
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_NODATA_NOSUCHREVISION
Language = English
A data store operation did not complete because no such update revision is known.
.
MessageId = 0x8021
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_NODATA_NOSUCHUPDATE
Language = English
A data store operation did not complete because no such update is known.
.
MessageId = 0x8022
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_NODATA_EULA
Language = English
A data store operation did not complete because an update's EULA information is missing.
.
MessageId = 0x8023
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_NODATA_SERVICE
Language = English
A data store operation did not complete because a service's information is missing.
.
MessageId = 0x8024
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_NODATA_COOKIE
Language = English
A data store operation did not complete because a service's synchronization information is missing.
.
MessageId = 0x8025
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_NODATA_TIMER
Language = English
A data store operation did not complete because a timer's information is missing.
.
MessageId = 0x8026
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_NODATA_CCR
Language = English
A data store operation did not complete because a download's information is missing.
.
MessageId = 0x8027
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_NODATA_FILE
Language = English
A data store operation did not complete because a file's information is missing.
.
MessageId = 0x8028
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_NODATA_DOWNLOADJOB
Language = English
A data store operation did not complete because a download job's information is missing.
.
MessageId = 0x8029
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_NODATA_TMI
Language = English
A data store operation did not complete because a service's timestamp information is missing.
.
MessageId = 0x8FFF
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DS_UNEXPECTED
Language = English
A data store error not covered by another WU_E_DS_* code.
.
;/////////////////////////////////////////////////////////////////////////////
;//Inventory Errors
;/////////////////////////////////////////////////////////////////////////////
MessageId = 0x9001
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INVENTORY_PARSEFAILED
Language = English
Parsing of the rule file failed.
.
MessageId = 0x9002
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INVENTORY_GET_INVENTORY_TYPE_FAILED
Language = English
Failed to get the requested inventory type from the server.
.
MessageId = 0x9003
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INVENTORY_RESULT_UPLOAD_FAILED
Language = English
Failed to upload inventory result to the server.
.
MessageId = 0x9004
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INVENTORY_UNEXPECTED
Language = English
There was an inventory error not covered by another error code.
.
MessageId = 0x9005
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INVENTORY_WMI_ERROR
Language = English
A WMI error occurred when enumerating the instances for a particular class.
.
;/////////////////////////////////////////////////////////////////////////////
;//AU Errors
;/////////////////////////////////////////////////////////////////////////////
MessageId = 0xA000
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_AU_NOSERVICE
Language = English
Automatic Updates was unable to service incoming requests.
.
MessageId = 0xA002
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_AU_NONLEGACYSERVER
Language = English
The old version of the Automatic Updates client has stopped because the WSUS server has been upgraded.
.
MessageId = 0xA003
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_AU_LEGACYCLIENTDISABLED
Language = English
The old version of the Automatic Updates client was disabled.
.
MessageId = 0xA004
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_AU_PAUSED
Language = English
Automatic Updates was unable to process incoming requests because it was paused.
.
MessageId = 0xA005
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_AU_NO_REGISTERED_SERVICE
Language = English
No unmanaged service is registered with AU.
.
MessageId = 0xA006
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_AU_DETECT_SVCID_MISMATCH
Language = English
The default service registered with AU changed during the search.
.
MessageId = 0xA007
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_REBOOT_IN_PROGRESS
Language = English
A reboot is in progress.
.
MessageId = 0xA008
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_AU_OOBE_IN_PROGRESS
Language = English
Automatic Updates can't process incoming requests while Windows Welcome is running.
.
MessageId = 0xAFFF
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_AU_UNEXPECTED
Language = English
An Automatic Updates error not covered by another WU_E_AU * code.
.
;//////////////////////////////////////////////////////////////////////////////
;// update handler errors
;///////////////////////////////////////////////////////////////////////////////
MessageId = 0x2000
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_REMOTEUNAVAILABLE
Language = English
A request for a remote update handler could not be completed because no remote process is available.
.
MessageId = 0x2001
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_LOCALONLY
Language = English
A request for a remote update handler could not be completed because the handler is local only.
.
MessageId = 0x2002
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_UNKNOWNHANDLER
Language = English
A request for an update handler could not be completed because the handler could not be recognized.
.
MessageId = 0x2003
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_REMOTEALREADYACTIVE
Language = English
A remote update handler could not be created because one already exists.
.
MessageId = 0x2004
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_DOESNOTSUPPORTACTION
Language = English
A request for the handler to install (uninstall) an update could not be completed because the update does not support install (uninstall).
.
MessageId = 0x2005
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_WRONGHANDLER
Language = English
An operation did not complete because the wrong handler was specified.
.
MessageId = 0x2006
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_INVALIDMETADATA
Language = English
A handler operation could not be completed because the update contains invalid metadata.
.
MessageId = 0x2007
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_INSTALLERHUNG
Language = English
An operation could not be completed because the installer exceeded the time limit.
.
MessageId = 0x2008
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_OPERATIONCANCELLED
Language = English
An operation being done by the update handler was cancelled.
.
MessageId = 0x2009
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_BADHANDLERXML
Language = English
An operation could not be completed because the handler-specific metadata is invalid.
.
MessageId = 0x200A
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_CANREQUIREINPUT
Language = English
A request to the handler to install an update could not be completed because the update requires user input.
.
MessageId = 0x200B
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_INSTALLERFAILURE
Language = English
The installer failed to install (uninstall) one or more updates.
.
MessageId = 0x200C
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_FALLBACKTOSELFCONTAINED
Language = English
The update handler should download self-contained content rather than delta-compressed content for the update.
.
MessageId = 0x200D
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_NEEDANOTHERDOWNLOAD
Language = English
The update handler did not install the update because it needs to be downloaded again.
.
MessageId = 0x200E
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_NOTIFYFAILURE
Language = English
The update handler failed to send notification of the status of the install (uninstall) operation.
.
MessageId = 0x200F
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_INCONSISTENT_FILE_NAMES
Language = English
The file names contained in the update metadata and in the update package are inconsistent.
.
MessageId = 0x2010
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_FALLBACKERROR
Language = English
The update handler failed to fall back to the self-contained content.
.
MessageId = 0x2011
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_TOOMANYDOWNLOADREQUESTS
Language = English
The update handler has exceeded the maximum number of download requests.
.
MessageId = 0x2012
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_UNEXPECTEDCBSRESPONSE
Language = English
The update handler has received an unexpected response from CBS.
.
MessageId = 0x2013
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_BADCBSPACKAGEID
Language = English
The update metadata contains an invalid CBS package identifier.
.
MessageId = 0x2014
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_POSTREBOOTSTILLPENDING
Language = English
The post-reboot operation for the update is still in progress.
.
MessageId = 0x2015
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_POSTREBOOTRESULTUNKNOWN
Language = English
The result of the post-reboot operation for the update could not be determined.
.
MessageId = 0x2016
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_POSTREBOOTUNEXPECTEDSTATE
Language = English
The state of the update after its post-reboot operation has completed is unexpected.
.
MessageId = 0x2017
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_NEW_SERVICING_STACK_REQUIRED
Language = English
The OS servicing stack must be updated before this update is downloaded or installed.
.
MessageId = 0x2018
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_CALLED_BACK_FAILURE
Language = English
A callback installer called back with an error.
.
MessageId = 0x2019
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_CUSTOMINSTALLER_INVALID_SIGNATURE
Language = English
The custom installer signature did not match the signature required by the update.
.
MessageId = 0x201A
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_UNSUPPORTED_INSTALLCONTEXT
Language = English
The installer does not support the installation configuration.
.
MessageId = 0x201B
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_INVALID_TARGETSESSION
Language = English
The targeted session for install is invalid.
.
MessageId = 0x201C
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_DECRYPTFAILURE
Language = English
The handler failed to decrypt the update files.
.
MessageId = 0x201D
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_HANDLER_DISABLEDUNTILREBOOT
Language = English
The update handler is disabled until the system reboots.
.
MessageId = 0x201E
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_APPX_NOT_PRESENT
Language = English
The AppX infrastructure is not present on the system.
.
MessageId = 0x201F
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_NOTREADYTOCOMMIT
Language = English
The update cannot be committed because it has not been previously installed or staged.
.
MessageId = 0x2020
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_APPX_INVALID_PACKAGE_VOLUME
Language = English
The specified volume is not a valid AppX package volume.
.
MessageId = 0x2021
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_APPX_DEFAULT_PACKAGE_VOLUME_UNAVAILABLE
Language = English
The configured default storage volume is unavailable.
.
MessageId = 0x2022
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_APPX_INSTALLED_PACKAGE_VOLUME_UNAVAILABLE
Language = English
The volume on which the application is installed is unavailable.
.
MessageId = 0x2023
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_APPX_PACKAGE_FAMILY_NOT_FOUND
Language = English
The specified package family is not present on the system.
.
MessageId = 0x2024
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_APPX_SYSTEM_VOLUME_NOT_FOUND
Language = English
Unable to find a package volume marked as system.
.
MessageId = 0x2025
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_UA_SESSION_INFO_VERSION_NOT_SUPPORTED
Language = English
UA does not support the version of OptionalSessionInfo.
.
MessageId = 0x2026
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_RESERVICING_REQUIRED_BASELINE
Language = English
This operation cannot be completed. You must install the baseline update(s) before you can install this update.
.
MessageId = 0x2FFF
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UH_UNEXPECTED
Language = English
An update handler error not covered by another WU_E_UH_* code.
.
;//////////////////////////////////////////////////////////////////////////////
;// download manager errors
;///////////////////////////////////////////////////////////////////////////////
MessageId = 0x6001
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_URLNOTAVAILABLE
Language = English
A download manager operation could not be completed because the requested file does not have a URL.
.
MessageId = 0x6002
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_INCORRECTFILEHASH
Language = English
A download manager operation could not be completed because the file digest was not recognized.
.
MessageId = 0x6003
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_UNKNOWNALGORITHM
Language = English
A download manager operation could not be completed because the file metadata requested an unrecognized hash algorithm.
.
MessageId = 0x6004
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_NEEDDOWNLOADREQUEST
Language = English
An operation could not be completed because a download request is required from the download handler.
.
MessageId = 0x6005
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_NONETWORK
Language = English
A download manager operation could not be completed because the network connection was unavailable.
.
MessageId = 0x6006
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_WRONGBITSVERSION
Language = English
A download manager operation could not be completed because the version of Background Intelligent Transfer Service (BITS) is incompatible.
.
MessageId = 0x6007
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_NOTDOWNLOADED
Language = English
The update has not been downloaded.
.
MessageId = 0x6008
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_FAILTOCONNECTTOBITS
Language = English
A download manager operation failed because the download manager was unable to connect the Background Intelligent Transfer Service (BITS).
.
MessageId = 0x6009
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_BITSTRANSFERERROR
Language = English
A download manager operation failed because there was an unspecified Background Intelligent Transfer Service (BITS) transfer error.
.
MessageId = 0x600A
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_DOWNLOADLOCATIONCHANGED
Language = English
A download must be restarted because the location of the source of the download has changed.
.
MessageId = 0x600B
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_CONTENTCHANGED
Language = English
A download must be restarted because the update content changed in a new revision.
.
MessageId = 0x600C
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_DOWNLOADLIMITEDBYUPDATESIZE
Language = English
A download failed because the current network limits downloads by update size for the update service.
.
MessageId = 0x600E
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_UNAUTHORIZED
Language = English
The download failed because the client was denied authorization to download the content.
.
MessageId = 0x600F
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_BG_ERROR_TOKEN_REQUIRED
Language = English
The download failed because the user token associated with the BITS job no longer exists.
.
MessageId = 0x6010
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_DOWNLOADSANDBOXNOTFOUND
Language = English
The sandbox directory for the downloaded update was not found.
.
MessageId = 0x6011
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_DOWNLOADFILEPATHUNKNOWN
Language = English
The downloaded update has an unknown file path.
.
MessageId = 0x6012
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_DOWNLOADFILEMISSING
Language = English
One or more of the files for the downloaded update is missing.
.
MessageId = 0x6013
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_UPDATEREMOVED
Language = English
An attempt was made to access a downloaded update that has already been removed.
.
MessageId = 0x6014
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_READRANGEFAILED
Language = English
Windows Update couldn't find a needed portion of a downloaded update's file.
.
MessageId = 0x6016
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_UNAUTHORIZED_NO_USER
Language = English
The download failed because the client was denied authorization to download the content due to no user logged on.
.
MessageId = 0x6017
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_UNAUTHORIZED_LOCAL_USER
Language = English
The download failed because the local user was denied authorization to download the content.
.
MessageId = 0x6018
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_UNAUTHORIZED_DOMAIN_USER
Language = English
The download failed because the domain user was denied authorization to download the content.
.
MessageId = 0x6019
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_UNAUTHORIZED_MSA_USER
Language = English
The download failed because the MSA account associated with the user was denied authorization to download the content.
.
MessageId = 0x601A
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_FALLINGBACKTOBITS
Language = English
The download will be continued by falling back to BITS to download the content.
.
MessageId = 0x601B
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_DOWNLOAD_VOLUME_CONFLICT
Language = English
Another caller has requested download to a different volume.
.
MessageId = 0x601C
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_SANDBOX_HASH_MISMATCH
Language = English
The hash of the update's sandbox does not match the expected value.
.
MessageId = 0x601D
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_HARDRESERVEID_CONFLICT
Language = English
The hard reserve id specified conflicts with an id from another caller.
.
MessageId = 0x601E
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_DOSVC_REQUIRED
Language = English
The update has to be downloaded via DO.
.
MessageId = 0x601F
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_DOWNLOADTYPE_CONFLICT
Language = English
Windows Update only supports one download type per update at one time. The download failure is by design here since the same update with different download type is operating. Please try again later.
.
MessageId = 0x6FFF
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_DM_UNEXPECTED
Language = English
There was a download manager error not covered by another WU_E_DM_* error code.
.
;//////////////////////////////////////////////////////////////////////////////
;// Setup/SelfUpdate errors
;///////////////////////////////////////////////////////////////////////////////
MessageId = 0xD001
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SETUP_INVALID_INFDATA
Language = English
Windows Update Agent could not be updated because an INF file contains invalid information.
.
MessageId = 0xD002
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SETUP_INVALID_IDENTDATA
Language = English
Windows Update Agent could not be updated because the wuident.cab file contains invalid information.
.
MessageId = 0xD003
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SETUP_ALREADY_INITIALIZED
Language = English
Windows Update Agent could not be updated because of an internal error that caused setup initialization to be performed twice.
.
MessageId = 0xD004
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SETUP_NOT_INITIALIZED
Language = English
Windows Update Agent could not be updated because setup initialization never completed successfully.
.
MessageId = 0xD005
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SETUP_SOURCE_VERSION_MISMATCH
Language = English
Windows Update Agent could not be updated because the versions specified in the INF do not match the actual source file versions.
.
MessageId = 0xD006
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SETUP_TARGET_VERSION_GREATER
Language = English
Windows Update Agent could not be updated because a WUA file on the target system is newer than the corresponding source file.
.
MessageId = 0xD007
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SETUP_REGISTRATION_FAILED
Language = English
Windows Update Agent could not be updated because regsvr32.exe returned an error.
.
MessageId = 0xD008
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SELFUPDATE_SKIP_ON_FAILURE
Language = English
An update to the Windows Update Agent was skipped because previous attempts to update have failed.
.
MessageId = 0xD009
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SETUP_SKIP_UPDATE
Language = English
An update to the Windows Update Agent was skipped due to a directive in the wuident.cab file.
.
MessageId = 0xD00A
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SETUP_UNSUPPORTED_CONFIGURATION
Language = English
Windows Update Agent could not be updated because the current system configuration is not supported.
.
MessageId = 0xD00B
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SETUP_BLOCKED_CONFIGURATION
Language = English
Windows Update Agent could not be updated because the system is configured to block the update.
.
MessageId = 0xD00C
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SETUP_REBOOT_TO_FIX
Language = English
Windows Update Agent could not be updated because a restart of the system is required.
.
MessageId = 0xD00D
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SETUP_ALREADYRUNNING
Language = English
Windows Update Agent setup is already running.
.
MessageId = 0xD00E
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SETUP_REBOOTREQUIRED
Language = English
Windows Update Agent setup package requires a reboot to complete installation.
.
MessageId = 0xD00F
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SETUP_HANDLER_EXEC_FAILURE
Language = English
Windows Update Agent could not be updated because the setup handler failed during execution.
.
MessageId = 0xD010
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SETUP_INVALID_REGISTRY_DATA
Language = English
Windows Update Agent could not be updated because the registry contains invalid information.
.
MessageId = 0xD011
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SELFUPDATE_REQUIRED
Language = English
Windows Update Agent must be updated before search can continue.
.
MessageId = 0xD012
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SELFUPDATE_REQUIRED_ADMIN
Language = English
Windows Update Agent must be updated before search can continue. An administrator is required to perform the operation.
.
MessageId = 0xD013
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SETUP_WRONG_SERVER_VERSION
Language = English
Windows Update Agent could not be updated because the server does not contain update information for this version.
.
MessageId = 0xD014
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SETUP_DEFERRABLE_REBOOT_PENDING
Language = English
Windows Update Agent is successfully updated, but a reboot is required to complete the setup.
.
MessageId = 0xD015
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SETUP_NON_DEFERRABLE_REBOOT_PENDING
Language = English
Windows Update Agent is successfully updated, but a reboot is required to complete the setup.
.
MessageId = 0xD016
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SETUP_FAIL
Language = English
Windows Update Agent could not be updated because of an unknown error.
.
MessageId = 0xDFFF
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SETUP_UNEXPECTED
Language = English
Windows Update Agent could not be updated because of an error not covered by another WU_E_SETUP_* error code.
.
;//////////////////////////////////////////////////////////////////////////////
;// expression evaluator errors
;///////////////////////////////////////////////////////////////////////////////
MessageId = 0xE001
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_EE_UNKNOWN_EXPRESSION
Language = English
An expression evaluator operation could not be completed because an expression was unrecognized.
.
MessageId = 0xE002
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_EE_INVALID_EXPRESSION
Language = English
An expression evaluator operation could not be completed because an expression was invalid.
.
MessageId = 0xE003
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_EE_MISSING_METADATA
Language = English
An expression evaluator operation could not be completed because an expression contains an incorrect number of metadata nodes.
.
MessageId = 0xE004
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_EE_INVALID_VERSION
Language = English
An expression evaluator operation could not be completed because the version of the serialized expression data is invalid.
.
MessageId = 0xE005
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_EE_NOT_INITIALIZED
Language = English
The expression evaluator could not be initialized.
.
MessageId = 0xE006
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_EE_INVALID_ATTRIBUTEDATA
Language = English
An expression evaluator operation could not be completed because there was an invalid attribute.
.
MessageId = 0xE007
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_EE_CLUSTER_ERROR
Language = English
An expression evaluator operation could not be completed because the cluster state of the computer could not be determined.
.
MessageId = 0xEFFF
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_EE_UNEXPECTED
Language = English
There was an expression evaluator error not covered by another WU_E_EE_* error code.
.
;//////////////////////////////////////////////////////////////////////////////
;// UI errors
;///////////////////////////////////////////////////////////////////////////////
MessageId = 0x3001
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INSTALLATION_RESULTS_UNKNOWN_VERSION
Language = English
The results of download and installation could not be read from the registry due to an unrecognized data format version.
.
MessageId = 0x3002
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INSTALLATION_RESULTS_INVALID_DATA
Language = English
The results of download and installation could not be read from the registry due to an invalid data format.
.
MessageId = 0x3003
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INSTALLATION_RESULTS_NOT_FOUND
Language = English
The results of download and installation are not available; the operation may have failed to start.
.
MessageId = 0x3004
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_TRAYICON_FAILURE
Language = English
A failure occurred when trying to create an icon in the taskbar notification area.
.
MessageId = 0x3FFD
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_NON_UI_MODE
Language = English
Unable to show UI when in non-UI mode; WU client UI modules may not be installed.
.
MessageId = 0x3FFE
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_WUCLTUI_UNSUPPORTED_VERSION
Language = English
Unsupported version of WU client UI exported functions.
.
MessageId = 0x3FFF
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_AUCLIENT_UNEXPECTED
Language = English
There was a user interface error not covered by another WU_E_AUCLIENT_* error code.
.
;//////////////////////////////////////////////////////////////////////////////
;// reporter errors
;///////////////////////////////////////////////////////////////////////////////
MessageId = 0xF001
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_REPORTER_EVENTCACHECORRUPT
Language = English
The event cache file was defective.
.
MessageId = 0xF002
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_REPORTER_EVENTNAMESPACEPARSEFAILED
Language = English
The XML in the event namespace descriptor could not be parsed.
.
MessageId = 0xF003
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INVALID_EVENT
Language = English
The XML in the event namespace descriptor could not be parsed.
.
MessageId = 0xF004
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SERVER_BUSY
Language = English
The server rejected an event because the server was too busy.
.
MessageId = 0xF005
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_CALLBACK_COOKIE_NOT_FOUND
Language = English
The specified callback cookie is not found.
.
MessageId = 0xFFFF
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_REPORTER_UNEXPECTED
Language = English
There was a reporter error not covered by another error code.
.
MessageId = 0x7001
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_OL_INVALID_SCANFILE
Language = English
An operation could not be completed because the scan package was invalid.
.
MessageId = 0x7002
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_OL_NEWCLIENT_REQUIRED
Language = English
An operation could not be completed because the scan package requires a greater version of the Windows Update Agent.
.
MessageId = 0x7003
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INVALID_EVENT_PAYLOAD
Language = English
An invalid event payload was specified.
.
MessageId = 0x7004
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_INVALID_EVENT_PAYLOADSIZE
Language = English
The size of the event payload submitted is invalid.
.
MessageId = 0x7005
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SERVICE_NOT_REGISTERED
Language = English
The service is not registered.
.
MessageId = 0x7FFF
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_OL_UNEXPECTED
Language = English
Search using the scan package failed.
.
;//////////////////////////////////////////////////////////////////////////////
;// WU Metadata Integrity related errors - 0x71FE
;///////////////////////////////////////////////////////////////////////////////
;///////
;// Metadata General errors 0x7100 - 0x711F
;///////
MessageId = 0x7100
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_NOOP
Language = English
No operation was required by update metadata verification.
.
MessageId = 0x7101
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_CONFIG_INVALID_BINARY_ENCODING
Language = English
The binary encoding of metadata config data was invalid.
.
MessageId = 0x7102
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_FETCH_CONFIG
Language = English
Unable to fetch required configuration for metadata signature verification.
.
MessageId = 0x7104
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_INVALID_PARAMETER
Language = English
A metadata verification operation failed due to an invalid parameter.
.
MessageId = 0x7105
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_UNEXPECTED
Language = English
A metadata verification operation failed due to reasons not covered by another error code.
.
MessageId = 0x7106
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_NO_VERIFICATION_DATA
Language = English
None of the update metadata had verification data, which may be disabled on the update server.
.
MessageId = 0x7107
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_BAD_FRAGMENTSIGNING_CONFIG
Language = English
The fragment signing configuration used for verifying update metadata signatures was bad.
.
MessageId = 0x7108
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_FAILURE_PROCESSING_FRAGMENTSIGNING_CONFIG
Language = English
There was an unexpected operational failure while parsing fragment signing configuration.
.
;///////
;// Metadata XML errors 0x7120 - 0x713F
;///////
MessageId = 0x7120
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_XML_MISSING
Language = English
Required xml data was missing from configuration.
.
MessageId = 0x7121
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_XML_FRAGMENTSIGNING_MISSING
Language = English
Required fragmentsigning data was missing from xml configuration.
.
MessageId = 0x7122
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_XML_MODE_MISSING
Language = English
Required mode data was missing from xml configuration.
.
MessageId = 0x7123
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_XML_MODE_INVALID
Language = English
An invalid metadata enforcement mode was detected.
.
MessageId = 0x7124
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_XML_VALIDITY_INVALID
Language = English
An invalid timestamp validity window configuration was detected.
.
MessageId = 0x7125
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_XML_LEAFCERT_MISSING
Language = English
Required leaf certificate data was missing from xml configuration.
.
MessageId = 0x7126
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_XML_INTERMEDIATECERT_MISSING
Language = English
Required intermediate certificate data was missing from xml configuration.
.
MessageId = 0x7127
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_XML_LEAFCERT_ID_MISSING
Language = English
Required leaf certificate id attribute was missing from xml configuration.
.
MessageId = 0x7128
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_XML_BASE64CERDATA_MISSING
Language = English
Required certificate base64CerData attribute was missing from xml configuration.
.
;///////
;// Metadata Signature/Hash-related errors 0x7140 - 0x714F
;///////
MessageId = 0x7140
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_BAD_SIGNATURE
Language = English
The metadata for an update was found to have a bad or invalid digital signature.
.
MessageId = 0x7141
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_UNSUPPORTED_HASH_ALG
Language = English
An unsupported hash algorithm for metadata verification was specified.
.
MessageId = 0x7142
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_SIGNATURE_VERIFY_FAILED
Language = English
An error occurred during an update's metadata signature verification.
.
;///////
;// Metadata Certificate Chain trust related errors 0x7150 - 0x715F
;///////
MessageId = 0x7150
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATATRUST_CERTIFICATECHAIN_VERIFICATION
Language = English
An failure occurred while verifying trust for metadata signing certificate chains.
.
MessageId = 0x7151
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATATRUST_UNTRUSTED_CERTIFICATECHAIN
Language = English
A metadata signing certificate had an untrusted certificate chain.
.
;///////
;// Metadata Timestamp Token/Signature errors 0x7160 - 0x717F
;///////
MessageId = 0x7160
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_MISSING
Language = English
An expected metadata timestamp token was missing.
.
MessageId = 0x7161
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_VERIFICATION_FAILED
Language = English
A metadata Timestamp token failed verification.
.
MessageId = 0x7162
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_UNTRUSTED
Language = English
A metadata timestamp token signer certificate chain was untrusted.
.
MessageId = 0x7163
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_VALIDITY_WINDOW
Language = English
A metadata signature timestamp token was no longer within the validity window.
.
MessageId = 0x7164
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_SIGNATURE
Language = English
A metadata timestamp token failed signature validation
.
MessageId = 0x7165
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_CERTCHAIN
Language = English
A metadata timestamp token certificate failed certificate chain verification.
.
MessageId = 0x7166
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_REFRESHONLINE
Language = English
A failure occurred when refreshing a missing timestamp token from the network.
.
MessageId = 0x7167
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_ALL_BAD
Language = English
All update metadata verification timestamp tokens from the timestamp token cache are invalid.
.
MessageId = 0x7168
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_NODATA
Language = English
No update metadata verification timestamp tokens exist in the timestamp token cache.
.
MessageId = 0x7169
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_CACHELOOKUP
Language = English
An error occurred during cache lookup of update metadata verification timestamp token.
.
MessageId = 0x717E
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_VALIDITYWINDOW_UNEXPECTED
Language = English
An metadata timestamp token validity window failed unexpectedly due to reasons not covered by another error code.
.
MessageId = 0x717F
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_UNEXPECTED
Language = English
An metadata timestamp token verification operation failed due to reasons not covered by another error code.
.
;///////
;// Metadata Certificate-Related errors 0x7180 - 0x719F
;///////
MessageId = 0x7180
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_CERT_MISSING
Language = English
An expected metadata signing certificate was missing.
.
MessageId = 0x7181
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_LEAFCERT_BAD_TRANSPORT_ENCODING
Language = English
The transport encoding of a metadata signing leaf certificate was malformed.
.
MessageId = 0x7182
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_INTCERT_BAD_TRANSPORT_ENCODING
Language = English
The transport encoding of a metadata signing intermediate certificate was malformed.
.
MessageId = 0x7183
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_METADATA_CERT_UNTRUSTED
Language = English
A metadata certificate chain was untrusted.
.
;//////////////////////////////////////////////////////////////////////////////
;// WU Task related errors
;///////////////////////////////////////////////////////////////////////////////
MessageId = 0xB001
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_WUTASK_INPROGRESS
Language = English
The task is currently in progress.
.
MessageId = 0xB002
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_WUTASK_STATUS_DISABLED
Language = English
The operation cannot be completed since the task status is currently disabled.
.
MessageId = 0xB003
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_WUTASK_NOT_STARTED
Language = English
The operation cannot be completed since the task is not yet started.
.
MessageId = 0xB004
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_WUTASK_RETRY
Language = English
The task was stopped and needs to be run again to complete.
.
MessageId = 0xB005
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_WUTASK_CANCELINSTALL_DISALLOWED
Language = English
Cannot cancel a non-scheduled install.
.
;//////////////////////////////////////////////////////////////////////////////
;// Hardware Capability related errors
;////
MessageId = 0xB101
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UNKNOWN_HARDWARECAPABILITY
Language = English
Hardware capability meta data was not found after a sync with the service.
.
MessageId = 0xB102
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_BAD_XML_HARDWARECAPABILITY
Language = English
Hardware capability meta data was malformed and/or failed to parse.
.
MessageId = 0xB103
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_WMI_NOT_SUPPORTED
Language = English
Unable to complete action due to WMI dependency, which isn't supported on this platform.
.
MessageId = 0xB104
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_UPDATE_MERGE_NOT_ALLOWED
Language = English
Merging of the update is not allowed
.
MessageId = 0xB105
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SKIPPED_UPDATE_INSTALLATION
Language = English
Installing merged updates only. So skipping non mergeable updates.
.
;//////////////////////////////////////////////////////////////////////////////
;// SLS related errors - 0xB201
;////
;///////
;// SLS General errors 0xB201 - 0xB2FF
;///////
MessageId = 0xB201
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_SLS_INVALID_REVISION
Language = English
SLS response returned invalid revision number.
.
;//////////////////////////////////////////////////////////////////////////////
;// trust related errors - 0xB301
;////
;///////
;// trust General errors 0xB301 - 0xB3FF
;///////
MessageId = 0xB301
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_FILETRUST_DUALSIGNATURE_RSA
Language = English
File signature validation fails to find valid RSA signature on infrastructure payload.
.
MessageId = 0xB302
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_FILETRUST_DUALSIGNATURE_ECC
Language = English
File signature validation fails to find valid ECC signature on infrastructure payload.
.
MessageId = 0xB303
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_TRUST_SUBJECT_NOT_TRUSTED
Language = English
The subject is not trusted by WU for the specified action.
.
MessageId = 0xB304
Facility = WindowsUpdate
Severity = Error
SymbolicName = WU_E_TRUST_PROVIDER_UNKNOWN
Language = English
Unknown trust provider for WU.
.
;#endif //_WUERROR_
================================================
FILE: LegacyUpdate/wuguid.cpp
================================================
#include
#include
#include
DEFINE_GUID(CLSID_UpdateInstaller, 0xd2e0fe7f, 0xd23e, 0x48e1, 0x93, 0xc0, 0x6f, 0xa8, 0xcc, 0x34, 0x64, 0x74);
DEFINE_GUID(IID_IUpdateInstaller, 0x7b929c68, 0xccdc, 0x4226, 0x96, 0xb1, 0x87, 0x24, 0x60, 0x0b, 0x54, 0xc2);
DEFINE_GUID(IID_IUpdateInstaller4, 0xef8208ea, 0x2304, 0x492d, 0x91, 0x09, 0x23, 0x81, 0x3b, 0x09, 0x58, 0xe1);
DEFINE_GUID(CLSID_AutomaticUpdates, 0xbfe18e9c, 0x6d87, 0x4450, 0xb3, 0x7c, 0xe0, 0x2f, 0x0b, 0x37, 0x38, 0x03);
DEFINE_GUID(IID_IAutomaticUpdates, 0x673425bf, 0xc082, 0x4c7c, 0xbd, 0xfd, 0x56, 0x9e, 0xd4, 0x53, 0x17, 0xc5);
DEFINE_GUID(CLSID_SystemInformation, 0xc01b9ba0, 0xbea7, 0x41ba, 0xb6, 0x04, 0xd0, 0xa3, 0x6f, 0x46, 0x91, 0x33);
DEFINE_GUID(IID_ISystemInformation, 0xada74191, 0x3b75, 0x4b40, 0x9b, 0xd8, 0x7f, 0x29, 0x30, 0x7b, 0xb7, 0xa5);
interface ISystemInformation;
interface IAutomaticUpdates;
interface IUpdateInstaller4;
EXTERN_C const GUID IID_ISystemInformation;
EXTERN_C const GUID IID_IAutomaticUpdates;
EXTERN_C const GUID IID_IUpdateInstaller4;
DEFINE_UUIDOF(ISystemInformation, IID_ISystemInformation);
DEFINE_UUIDOF(IAutomaticUpdates, IID_IAutomaticUpdates);
DEFINE_UUIDOF(IUpdateInstaller4, IID_IUpdateInstaller4);
================================================
FILE: LegacyUpdate.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.14.36408.4 d17.14
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LegacyUpdate", "LegacyUpdate\LegacyUpdate.vcxproj", "{E9142706-8E21-4ECE-80F8-D3F7B95C6F27}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{E9142706-8E21-4ECE-80F8-D3F7B95C6F27}.Debug|x64.ActiveCfg = Debug|x64
{E9142706-8E21-4ECE-80F8-D3F7B95C6F27}.Debug|x64.Build.0 = Debug|x64
{E9142706-8E21-4ECE-80F8-D3F7B95C6F27}.Debug|x86.ActiveCfg = Debug|Win32
{E9142706-8E21-4ECE-80F8-D3F7B95C6F27}.Debug|x86.Build.0 = Debug|Win32
{E9142706-8E21-4ECE-80F8-D3F7B95C6F27}.Release|x64.ActiveCfg = Release|x64
{E9142706-8E21-4ECE-80F8-D3F7B95C6F27}.Release|x64.Build.0 = Release|x64
{E9142706-8E21-4ECE-80F8-D3F7B95C6F27}.Release|x86.ActiveCfg = Release|Win32
{E9142706-8E21-4ECE-80F8-D3F7B95C6F27}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {64E0615D-0D1F-45F1-9634-2EE6D534187B}
EndGlobalSection
EndGlobal
================================================
FILE: Makefile
================================================
export CI ?= 0
export SIGN ?= 0
export DEBUG ?= 1
all: setup
activex:
+$(MAKE) -C LegacyUpdate
launcher:
+$(MAKE) -C launcher
nsisplugin:
+$(MAKE) -C nsisplugin
setup: activex launcher nsisplugin
+$(MAKE) -C setup
setup-nt4: nsisplugin
+$(MAKE) -C setup nt4
nt4: setup-nt4
clean:
+$(MAKE) -C LegacyUpdate clean
+$(MAKE) -C launcher clean
+$(MAKE) -C nsisplugin clean
+$(MAKE) -C setup clean
clean-nt4:
+$(MAKE) -C nsisplugin clean
+$(MAKE) -C setup clean
.PHONY: all activex launcher nsisplugin setup nt4 clean clean-nt4
================================================
FILE: README.md
================================================
# [
](http://legacyupdate.net/)
[](https://wakatime.com/badge/user/b9fcf8ba-3fce-41a4-a480-d3fe6074a1ad/project/c9516ff1-10b9-41da-82fb-b86b24b0acc8)
[](https://github.com/LegacyUpdate/LegacyUpdate/actions/workflows/build.yml)
Since Windows XP was discontinued in 2014, followed by Windows 7 in 2020, Microsoft has closed services they depend on, such as Windows Update. There are also design flaws with these earlier versions of Windows Update, which make them difficult to get working on new installations.
Legacy Update can install all relevant updates necessary to fix access to the Windows Update service on unsupported versions of Windows. These versions of Windows may display the error “Windows could not search for new updates: Windows Update encountered an unknown error” with error code **80072EFE**, or may simply never finish checking for updates. Legacy Update identifies the updates your system lacks, and installs them automatically, restoring the Windows Update service to full functionality.
Windows Update provides many optional and recommended updates, in addition to drivers for your system, but Windows XP and 2000 can only install critical security updates through the built-in Automatic Updates feature. **Legacy Update** revives the original Windows Update website - the only way to see and install every update available for your system. Legacy Update also restores access to **Windows Ultimate Extras** on Windows Vista Ultimate.
Legacy Update also restores connectivity to some websites in Internet Explorer, and other programs that use the Windows built-in networking functionality. This includes **Windows Product Activation** on Windows XP and Windows Server 2003, allowing you to activate these versions of Windows online in seconds (a legitimate product key is [still required](https://legacyupdate.net/faq/security)).
Just want to appreciate the nostalgia of the classic Windows Update website? Legacy Update can also be installed on Windows 10 and 11. This works even on versions of these OSes that have removed Internet Explorer. Legacy Update won’t modify your Windows 10 or 11 installation.
> *If this website helped you to update your old PCs, please consider [leaving a tip](https://ko-fi.com/adamdemasi) to help me pay for the server costs. Thank you!*
## Download
Download the latest version from the [Releases](https://github.com/LegacyUpdate/LegacyUpdate/releases) page of this repo, or from [**legacyupdate.net**](https://legacyupdate.net/).
You can also download the [latest nightly build](https://nightly.link/LegacyUpdate/LegacyUpdate/workflows/build/main/artifact.zip), based on the current development work. Nightly builds are not guaranteed to be stable. You may also need to accept extra SmartScreen and other security warnings since these executables are unique to each build. If you’re not sure what to download, you probably want the [stable release](https://legacyupdate.net/).
## The ActiveX Control
This repo hosts an ActiveX control used as a replica of the original one developed by Microsoft for the official Windows Update website. The original version of Legacy Update required using a proxy autoconfiguration file (.pac) and some additional configuration of Internet Explorer security settings to intercept requests to the **update.microsoft.com** domain, because the Microsoft Wuweb.dll control has safety measures ensuring it can only be used by the official update.microsoft.com domain. With the custom Legacy Update ActiveX control, proxying is no longer required, because we have full control over the validation logic.
This also allows us to extend it with convenient features not possible with JavaScript alone. Particularly, we have “forward-ported” the control to add support for Windows Vista and later, which introduces extra challenges such as User Account Control (UAC) and Internet Explorer’s Protected Mode.
### Building
The project is built using [MinGW-w64](https://www.mingw-w64.org/) on Linux. You can test much of the project using your running version of Windows, although for best results you should test using a virtual machine of Windows XP, Windows Vista, and Windows 7. Take snapshots of your VMs - this will make it far easier to test update scenarios.
You will need to install:
* [MinGW-w64](https://www.mingw-w64.org/) for i686 and x86_64
* [NSIS](https://nsis.sourceforge.io/)
* [UPX](https://upx.github.io/)
* [Wine](https://www.winehq.org/) development tools
Run the following command to install build dependencies. This command specific to Ubuntu - if you use a different distro, you will need to find and install the equivalent packages from your package manager.
```bash
sudo apt install libwine-dev make mingw-w64-i686-dev mingw-w64-x86-64-dev nsis upx-ucl
```
If you use Debian/Ubuntu’s build of NSIS, please note that it is compiled for Pentium II and later, and will fail to launch on Pentium, AMD K6, and other CPUs lacking SSE instructions. If you want to support these CPUs, run `./build/fix-nsis.sh` to patch the NSIS exehead binaries with a build that supports these CPUs.
### Testing
A barebones Visual Studio project is included to help with debugging.
For debugging, if running on Windows XP with IE8, consider installing [Utilu IE Collection](https://www.utilu.com/iecollection/). IE6/IE7 are more convenient for debugging the native code because of their simplistic single-process model. Visual Studio is able to launch it and directly attach to the process the code is running in. Otherwise, you will need to manually find and attach the debugger to the IE child process hosting the website and ActiveX control.
To configure the debugger:
1. Right-click LegacyUpdate in the Solution Explorer → Properties
2. In the Debugging tab, set the Command field to:
* For system IE install: `$(ProgramW6432)\Internet Explorer\iexplore.exe`
* For Utilu IE6 RTM: `$(ProgramW6432)\Utilu IE Collection\IE600\iexplore.exe`
* For Utilu IE6 SP2: `$(ProgramW6432)\Utilu IE Collection\IE600XPSP2\iexplore.exe`
* For Utilu IE7: `$(ProgramW6432)\Utilu IE Collection\IE700\iexplore.exe`
* For PowerShell: `$(SystemRoot)\System32\WindowsPowerShell\v1.0\powershell.exe` (or SysWOW64 to test the 32-bit build on 64-bit Windows)
3. If using IE, set the Command Arguments field to `http://legacyupdate.net/windowsupdate/v6/`, or any other URL you want to use for debugging
You can directly test the ActiveX control using PowerShell:
```powershell
PS> $lu = New-Object -ComObject LegacyUpdate.Control
PS> $lu.CheckControl()
True
```
If set up correctly, `CheckControl()` should return `True`. This is only supported in debug builds - release builds throw `E_ACCESSDENIED`.
## Setup and Launcher
Legacy Update makes use of the [Nullsoft Scriptable Install System](https://nsis.sourceforge.io/) (NSIS) for its setup program. NSIS provides a scripting language we use to install prerequisite updates. We extend NSIS with a custom plugin to provide features that improve the setup user experience.
As of 1.10, Legacy Update includes a “launcher” program, responsible for tasks including launching the website in Internet Explorer, repairing a broken installation of Legacy Update, and continuing setup when the system restarts into Winlogon “setup mode”.
Both are compiled using MinGW-w64 and are written in C to keep things simple.
## Website source code
I haven’t yet open sourced the website. This is because much of it is Microsoft code - just with patches I’ve made to remove Microsoft trademark branding, switch it to the Legacy Update ActiveX control, and make some quality-of-life improvements. It doesn’t feel appropriate to put an open source license on something I don’t own. Since it’s almost entirely client-side HTML and JavaScript, you can still review it by poking around the source on the website. You might find [DebugBar](https://www.debugbar.com/download.php) and [CompanionJS](https://www.my-debugbar.com/wiki/CompanionJS/HomePage) (requires Visual Studio or standalone [Microsoft Script Debugger](https://web.archive.org/web/20131113042519/http://download.microsoft.com/download/7/7/d/77d8df05-6fbc-4718-a319-be14317a6811/scd10en.exe)) useful.
I’ve tinkered with writing a [ground-up replacement](https://twitter.com/hbkirb/status/1584537446716350466) of the Microsoft-developed Windows Update website. I haven’t worked on this in a while, but I’ll open source it when I feel it’s ready enough.
## Disclaimer
The existence of this project shouldn’t be taken as an endorsement to continue using unsupported OSes. You should stick to a supported OS such as Windows 10 or 11 (or, try Linux?!). However, this service exists anyway in recognition that using these OSes is sometimes necessary to run legacy hardware/software, or just interesting to play around with.
This project is not affiliated with or endorsed by Microsoft. This software is provided “as is”, without warranty of any kind. We don’t believe anything should go wrong, but please ensure you have backups of any important data anyway.
## Credits
Legacy Update was started and is primarily developed by [Adam Demasi (@kirb)](https://kirb.me/), with contributions from:
* [Douglas R. Reno (@renodr)](https://github.com/renodr): Build system improvements and other project maintenance. Check out his awesome work on [Linux From Scratch](https://www.linuxfromscratch.org/)!
* [Jonas Deutz (@CHA0SHACKER)](https://github.com/CHA0SHACKER): Helps us with finding and sorting through the crazy number of patches. Check out his [update archives](https://archive.org/details/@cha0shacker)!
* [@stdin82](https://github.com/stdin82): Helped us find some patches on the Windows Update server, and other general help on the issue tracker.
* The [Windows Update Restored](https://windowsupdaterestored.com/) team: [@CaptainTER06](https://github.com/CaptainTER06), [@TheOneGoofAli](https://github.com/TheOneGoofAli), [et al.](https://windowsupdaterestored.com/)
Legacy Update NT is built thanks to the great research and documentation on Windows NT 4.0 updates by [ZCM Services](https://nt4ref.zcm.com.au/), [Bear Windows](https://bearwindows.zcm.com.au/), [MDGx](https://www.mdgx.com/), and members of [MSFN](https://msfn.org/).
We make use of some portions of the Windows SDK, [MinGW-w64](https://www.mingw-w64.org/), and [NSIS](https://nsis.sourceforge.io/).
## License
Licensed under the Apache License, version 2.0. Refer to [LICENSE.md](https://github.com/LegacyUpdate/LegacyUpdate/blob/main/LICENSE.md).
The repository includes some portions of NSIS, licensed under the [zlib/libpng license](https://nsis.sourceforge.io/License). It also includes a compiled copy of my fork of [NSxfer](https://github.com/kirb/nsis-nsxfer), licensed under the [zlib/libpng license](https://github.com/kirb/nsis-nsxfer/blob/master/LICENSE).
================================================
FILE: build/fix-nsis.sh
================================================
#!/bin/bash
# Fixes NSIS binaries so they run on Pentium/486. Debian's build of NSIS is compiled with MinGW,
# but they lack any -mcpu flag, so the binaries receive a default of i686. To fix this, we'll
# download the official Windows build of NSIS and extract its binaries. We only handle stubs though,
# because we provide our own plugin builds in this repo.
set -e
if [[ $UID != 0 ]]; then
echo "This script needs to be run as root (sorry)" >&2
exit 1
fi
if [[ ! -d /usr/share/nsis/Stubs ]]; then
echo "NSIS not installed, or Stubs directory is broken" >&2
exit 1
fi
if [[ -d /usr/share/nsis/Stubs_old ]]; then
echo "NSIS stubs are already fixed" >&2
exit 0
fi
apt-get install -qy curl p7zip-full
mkdir /tmp/nsis
cd /tmp/nsis
curl -fSL https://prdownloads.sourceforge.net/nsis/NSIS%203/3.11/nsis-3.11-setup.exe -o nsis.exe
7z x nsis.exe
mv /usr/share/nsis/Stubs{,_old}
cp -ra Stubs /usr/share/nsis/Stubs
rm -rf /tmp/nsis
================================================
FILE: build/get-nt4-patches.sh
================================================
#!/bin/bash
# Get dependencies for NT4 build
set -e
cd "$(dirname "$0")"/..
for i in usb; do
echo "Downloading $i..."
curl -fL https://content.legacyupdate.net/legacyupdate/patches/nt4/$i.zip -o /tmp/$i.zip
mkdir -p setup/patches/nt4/$i
unzip -o /tmp/$i.zip -d setup/patches/nt4/$i
rm /tmp/$i.zip
done
================================================
FILE: build/getvc.cmd
================================================
@REM @echo off
setlocal enabledelayedexpansion
set ProgramFiles32=%ProgramFiles%
if "%ProgramFiles(x86)%" neq "" set ProgramFiles32=%ProgramFiles(x86)%
:: Find Visual Studio installation
if exist "%ProgramFiles32%\Microsoft Visual Studio\Installer\vswhere.exe" (
:: Get modern Visual Studio install path
for /f "usebackq tokens=*" %%i in (`"%ProgramFiles32%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -property installationPath`) do set VSPath=%%i
set "vcvarsall=!VSPath!\VC\Auxiliary\Build\vcvarsall.bat"
if "%errorlevel%" neq "0" exit /b %errorlevel%
) else if exist "%VS100COMNTOOLS%\..\..\VC\vcvarsall.bat" (
:: Visual Studio 2010
set "vcvarsall=%VS100COMNTOOLS%\..\..\VC\vcvarsall.bat"
if "%errorlevel%" neq "0" exit /b %errorlevel%
) else (
echo Visual Studio not found. Refer to README.md. >&2
exit /b 1
)
endlocal & set "vcvarsall=%vcvarsall%"
call "%vcvarsall%" %* >nul
================================================
FILE: build/shared.mk
================================================
_COMMA = ,
CLANG ?= 0
ARCH ?= 32
ifeq ($(ARCH),64)
TAG = x86_64
else
TAG = i686
endif
PREFIX = $(TAG)-w64-mingw32-
EXT = $(if $(findstring .exe,$(BIN)),exe,dll)
ifeq ($(DEF),)
DEF = $(patsubst %.$(EXT),%.def,$(BIN))
EMITDEF = 1
endif
STATIC = $(patsubst %.$(EXT),%.a,$(BIN))
OBJDIR = obj/$(TAG)
OBJ = $(foreach file,$(FILES),$(OBJDIR)/$(notdir $(basename $(file)).o))
DEFDLL = $(foreach file,$(DEFFILES),$(OBJDIR)/lib$(notdir $(basename $(file)).a))
RES = $(foreach file,$(RCFILES),$(OBJDIR)/$(notdir $(basename $(file)).res))
MSG = $(foreach file,$(MCFILES),$(OBJDIR)/$(notdir $(basename $(file)).bin))
IDL = $(foreach file,$(IDLFILES),$(OBJDIR)/$(notdir $(basename $(file))_i.c))
IDL_H = $(foreach file,$(IDLFILES),$(OBJDIR)/$(notdir $(basename $(file))_i.h))
IDL_P = $(foreach file,$(IDLFILES),$(OBJDIR)/$(notdir $(basename $(file))_p.c))
DLLDATA = $(foreach file,$(IDLFILES),$(OBJDIR)/$(notdir $(basename $(file))_dlldata.c))
TLB = $(foreach file,$(IDLFILES),$(OBJDIR)/$(notdir $(basename $(file)).tlb))
ifeq ($(CLANG),1)
CC = $(PREFIX)clang++
else
CC = $(PREFIX)gcc
endif
RC = $(PREFIX)windres
MC = $(PREFIX)windmc
WIDL = $(PREFIX)widl
DLLTOOL = $(PREFIX)dlltool
C_LANG ?= c
CXX_LANG ?= c++
override DEBUG := $(or $(DEBUG),1)
CFLAGS += \
-municode \
-DUNICODE \
-D_UNICODE \
-DWIN32_LEAN_AND_MEAN \
$(if $(filter 1,$(DEBUG)),-D_DEBUG -g,-DNDEBUG -Os -s) \
-fPIE \
-ffunction-sections \
-fdata-sections \
-fno-unwind-tables \
-fno-asynchronous-unwind-tables \
-fno-exceptions \
$(if $(EMITDEF),-flto,) \
-Wall \
-Wextra \
-Wpedantic \
-Wno-unused-parameter \
-Wno-unused-variable \
-Wno-unknown-pragmas \
-Wno-cast-function-type \
-Wno-missing-field-initializers \
-I../include \
-I../shared \
-I$(OBJDIR) \
-include stdafx.h
ifeq ($(CLANG),1)
CFLAGS += \
-Wno-dollar-in-identifier-extension \
-Wno-missing-braces \
-Wno-duplicate-decl-specifier
endif
CXXFLAGS += \
$(CFLAGS) \
-std=c++11 \
-fno-rtti
LDFLAGS += \
-nodefaultlibs \
-nostartfiles \
-nostdlib \
-Wl,--gc-sections \
-Wl,--no-seh \
-Wl,--nxcompat \
-Wl,--enable-auto-image-base \
-Wl,--enable-stdcall-fixup \
-Wl,--out-implib,$(STATIC) \
$(if $(EMITDEF),-Wl$(_COMMA)--output-def$(_COMMA)$(DEF),$(DEF)) \
$(if $(filter 1,$(DEBUG)),,-Wl$(_COMMA)--strip-all) \
-lmsvcrt
ifeq ($(CLANG),1)
LDFLAGS += \
-static
else
LDFLAGS += \
-lgcc
endif
RCFLAGS += \
-O coff \
-I$(OBJDIR) \
-I../shared
MCFLAGS +=
IDLFLAGS += \
-m$(ARCH) \
--win$(ARCH) \
-Oicf \
-Ishared \
-I/usr/include/wine/wine/windows \
-L/usr/lib/x86_64-linux-gnu/wine/x86_64-windows
ifeq ($(ARCH),64)
RCFLAGS += -F pe-x86-64
else
CFLAGS += -march=i486
RCFLAGS += -F pe-i386
endif
all::
all-32:
+$(MAKE) internal-all ARCH=32
all-64:
+$(MAKE) internal-all ARCH=64
internal-all:: $(BIN)
ifeq ($(SIGN),1)
../build/sign.sh $(BIN)
endif
$(BIN): $(OBJ) $(RES)
$(CC) $^ $(CFLAGS) $(LDFLAGS) -o $@
$(DEF): ;
$(OBJDIR):
mkdir -p $@
$(OBJDIR)/lib%.a: ../LegacyUpdate/%.def
$(DLLTOOL) -d $< -l $@ -D $(notdir $(basename $<).dll)
$(OBJDIR)/%.o: %.c
$(CC) -x $(C_LANG) $< $(CFLAGS) -c -o $@
$(OBJDIR)/%.o: %.cpp
$(CC) -x $(CXX_LANG) $< $(CXXFLAGS) -c -o $@
$(OBJDIR)/%.o: ../shared/%.c
$(CC) -x $(C_LANG) $< $(CFLAGS) -c -o $@
$(OBJDIR)/%.o: ../shared/%.cpp
$(CC) -x $(CXX_LANG) $< $(CXXFLAGS) -c -o $@
$(OBJDIR)/%.o: $(OBJDIR)/%.c
$(CC) -x $(C_LANG) $< $(CFLAGS) -c -o $@
$(OBJDIR)/%.o: $(OBJDIR)/%.c
$(CC) -x $(C_LANG) $< $(CFLAGS) -c -o $@
$(OBJDIR)/%.res: %.rc
$(RC) $< $(RCFLAGS) -o $@
$(OBJDIR)/%.bin: %.mc
$(MC) $< $(MCFLAGS) -h $(dir $@) -r $(dir $@)
$(OBJDIR)/%.tlb: %.idl | $(OBJDIR)
$(WIDL) $(IDLFLAGS) -t -o $@ $<
$(OBJDIR)/%_i.h: %.idl | $(OBJDIR)
$(WIDL) $(IDLFLAGS) -h -o $@ $<
$(OBJDIR)/%_i.c: %.idl | $(OBJDIR)
$(WIDL) $(IDLFLAGS) -u -o $@ $<
$(OBJDIR)/%_p.c: %.idl | $(OBJDIR)
$(WIDL) $(IDLFLAGS) -p -o $@ $<
$(OBJDIR)/%_dlldata.c: %.idl | $(OBJDIR)
$(WIDL) $(IDLFLAGS) --dlldata-only -o $@ $(notdir $(basename $<))
$(OBJ): stdafx.h $(IDL_H)
$(OBJ) $(RES) $(MSG): | $(OBJDIR)
$(RES): $(MSG) $(TLB)
clean::
rm -rf obj
.PHONY: all all-32 all-64 internal-all clean
================================================
FILE: build/sign.cmd
================================================
@echo off
setlocal enabledelayedexpansion
:: Find Visual Studio installation
call %~dp0getvc.cmd x64
:: Sign
signtool sign /n "Hashbang Productions" /tr http://time.certum.pl/ /fd SHA1 /td SHA256 /v %*
signtool sign /n "Hashbang Productions" /tr http://time.certum.pl/ /fd SHA256 /td SHA256 /as /v %*
if "%errorlevel%" neq "0" exit /b %errorlevel%
================================================
FILE: build/sign.sh
================================================
#!/bin/bash
args=("$(wslpath -w "$(dirname "$0")/sign.cmd")")
for arg in "$@"; do
case "$arg" in
*/*) args+=("$(wslpath -w "$arg")") ;;
*) args+=("$arg") ;;
esac
done
exec cmd.exe /c "${args[@]}"
================================================
FILE: include/com/ComClass.h
================================================
#pragma once
#include
#include
#include
template
class ComClass : public TInterface {
protected:
TImpl *m_pParent;
public:
ComClass(TImpl *pParent) : m_pParent(pParent) {}
// IUnknown delegation
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject) {
return m_pParent->QueryInterface(riid, ppvObject);
}
STDMETHODIMP_(ULONG) AddRef(void) {
return m_pParent->AddRef();
}
STDMETHODIMP_(ULONG) Release(void) {
return m_pParent->Release();
}
};
================================================
FILE: include/com/ComPtr.h
================================================
#pragma once
#ifdef __cplusplus
template
class CComPtr {
public:
TInterface *pointer;
void *operator new(size_t) = delete;
void *operator new[](size_t) = delete;
void operator delete(void *ptr) = delete;
void operator delete[](void *ptr) = delete;
CComPtr(void) {
this->pointer = NULL;
}
CComPtr(TInterface *ptr) {
this->pointer = ptr;
if (this->pointer != NULL) {
this->pointer->AddRef();
}
}
CComPtr(CComPtr &other) : CComPtr(other.pointer) {}
CComPtr(CComPtr &&other) {
other.Swap(*this);
}
~CComPtr(void) {
TInterface *pointer = this->pointer;
if (pointer != NULL) {
this->pointer = NULL;
pointer->Release();
}
}
operator TInterface *(void) {
return this->pointer;
}
operator TInterface *() const {
return this->pointer;
}
TInterface &operator *(void) {
return *this->pointer;
}
TInterface &operator *() const {
return *this->pointer;
}
TInterface **operator &(void) {
return &this->pointer;
}
TInterface **operator &() const {
return &this->pointer;
}
TInterface *operator ->(void) {
return this->pointer;
}
TInterface *operator ->() const {
return this->pointer;
}
TInterface *operator =(TInterface *other) {
if (this->pointer != other) {
TInterface *oldPtr = this->pointer;
this->pointer = other;
if (this->pointer != NULL) {
this->pointer->AddRef();
}
if (oldPtr != NULL) {
oldPtr->Release();
}
}
return this->pointer;
}
TInterface *operator =(const CComPtr &other) {
if (this->pointer != other.pointer) {
TInterface *oldPtr = this->pointer;
this->pointer = other.pointer;
if (this->pointer != NULL) {
this->pointer->AddRef();
}
if (oldPtr != NULL) {
oldPtr->Release();
}
}
return this->pointer;
}
bool operator !() const {
return this->pointer == NULL;
}
bool operator <(TInterface *other) const {
return this->pointer < other;
}
bool operator ==(TInterface *other) const {
return this->pointer == other;
}
bool operator ==(const CComPtr &other) const {
return this->pointer == other;
}
void Release(void) {
this->~CComPtr();
}
TInterface *Detach(void) {
TInterface *ptr = this->pointer;
this->pointer = NULL;
return ptr;
}
void Swap(CComPtr &other) {
TInterface *ptr = this->pointer;
this->pointer = other.pointer;
other.pointer = ptr;
}
HRESULT CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter = NULL, DWORD dwClsContext = CLSCTX_ALL) {
return ::CoCreateInstance(rclsid, pUnkOuter, dwClsContext, __uuidof(TInterface), (void **)&this->pointer);
}
HRESULT CoCreateInstance(REFCLSID rclsid, REFIID riid, LPUNKNOWN pUnkOuter = NULL, DWORD dwClsContext = CLSCTX_ALL) {
return ::CoCreateInstance(rclsid, pUnkOuter, dwClsContext, riid, (void **)&this->pointer);
}
};
#endif
================================================
FILE: include/com/IDispatchImpl.h
================================================
#pragma once
#include
#include
#include
#include
#include "ComPtr.h"
template
class IDispatchImpl : public TImpl
{
private:
CComPtr m_pTypeInfo;
public:
// IUnknown
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject) {
if (ppvObject == NULL) {
return E_POINTER;
}
*ppvObject = NULL;
if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IDispatch) || IsEqualIID(riid, __uuidof(TImpl))) {
*ppvObject = (TImpl *)this;
this->AddRef();
return S_OK;
}
return E_NOINTERFACE;
}
// IDispatch
STDMETHODIMP GetTypeInfoCount(UINT *pctinfo) {
if (pctinfo == NULL) {
return E_POINTER;
}
*pctinfo = 1;
return S_OK;
}
STDMETHODIMP GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) {
if (ppTInfo == NULL) {
return E_POINTER;
}
*ppTInfo = NULL;
if (iTInfo != 0) {
return DISP_E_BADINDEX;
}
if (m_pTypeInfo == NULL) {
if (plibid == NULL) {
return E_NOTIMPL;
}
CComPtr pTypeLib;
HRESULT hr = LoadRegTypeLib(*plibid, 1, 0, LOCALE_NEUTRAL, &pTypeLib);
CHECK_HR_OR_RETURN(L"LoadRegTypeLib");
hr = pTypeLib->GetTypeInfoOfGuid(__uuidof(TImpl), &m_pTypeInfo);
CHECK_HR_OR_RETURN(L"GetTypeInfoOfGuid");
}
*ppTInfo = m_pTypeInfo;
m_pTypeInfo->AddRef();
return S_OK;
}
STDMETHODIMP GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) {
if (rgszNames == NULL || rgDispId == NULL) {
return E_POINTER;
}
if (!IsEqualIID(riid, IID_NULL)) {
return DISP_E_UNKNOWNINTERFACE;
}
CComPtr pTypeInfo;
HRESULT hr = GetTypeInfo(0, lcid, &pTypeInfo);
CHECK_HR_OR_RETURN(L"GetTypeInfo");
return pTypeInfo->GetIDsOfNames(rgszNames, cNames, rgDispId);
}
STDMETHODIMP Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) {
if (!IsEqualIID(riid, IID_NULL)) {
return DISP_E_UNKNOWNINTERFACE;
}
CComPtr pTypeInfo;
HRESULT hr = GetTypeInfo(0, lcid, &pTypeInfo);
CHECK_HR_OR_RETURN(L"GetTypeInfo");
return pTypeInfo->Invoke(this, dispIdMember, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
};
================================================
FILE: include/com/IOleInPlaceActiveObjectImpl.h
================================================
#pragma once
#include
#include
#include
#include "ComClass.h"
template
class IOleInPlaceActiveObjectImpl : public ComClass {
public:
IOleInPlaceActiveObjectImpl(TImpl *pParent) : ComClass(pParent) {}
// IOleWindow
STDMETHODIMP GetWindow(HWND *phwnd) {
if (phwnd == NULL) {
return E_POINTER;
}
*phwnd = this->m_pParent->m_innerHwnd;
return *phwnd == NULL ? E_FAIL : S_OK;
}
STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode) {
return E_NOTIMPL;
}
// IOleInPlaceActiveObject
STDMETHODIMP TranslateAccelerator(LPMSG lpmsg) {
return S_FALSE;
}
STDMETHODIMP OnFrameWindowActivate(WINBOOL fActivate) {
return S_OK;
}
STDMETHODIMP OnDocWindowActivate(WINBOOL fActivate) {
return S_OK;
}
STDMETHODIMP ResizeBorder(LPCRECT prcBorder, IOleInPlaceUIWindow *pUIWindow, WINBOOL fFrameWindow) {
return S_OK;
}
STDMETHODIMP EnableModeless(WINBOOL fEnable) {
return S_OK;
}
};
================================================
FILE: include/com/IOleInPlaceObjectImpl.h
================================================
#pragma once
#include
#include
#include
#include "ComClass.h"
template
class IOleInPlaceObjectImpl : public ComClass {
public:
IOleInPlaceObjectImpl(TImpl *pParent) : ComClass(pParent) {}
// IOleWindow
STDMETHODIMP GetWindow(HWND *phwnd) {
if (phwnd == NULL) {
return E_POINTER;
}
*phwnd = this->m_pParent->m_innerHwnd;
return *phwnd == NULL ? E_FAIL : S_OK;
}
STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode) {
return E_NOTIMPL;
}
// IOleInPlaceObject
STDMETHODIMP InPlaceDeactivate(void) {
return S_OK;
}
STDMETHODIMP UIDeactivate(void) {
return S_OK;
}
STDMETHODIMP SetObjectRects(LPCRECT lprcPosRect, LPCRECT lprcClipRect) {
if (lprcPosRect == NULL) {
return E_POINTER;
}
if (this->m_pParent->m_innerHwnd) {
SetWindowPos(
this->m_pParent->m_innerHwnd, NULL,
lprcPosRect->left, lprcPosRect->top,
lprcPosRect->right - lprcPosRect->left,
lprcPosRect->bottom - lprcPosRect->top,
SWP_NOZORDER | SWP_SHOWWINDOW
);
}
return S_OK;
}
STDMETHODIMP ReactivateAndUndo(void) {
return E_NOTIMPL;
}
};
================================================
FILE: include/com/IOleObjectImpl.h
================================================
#pragma once
#include
#include
#include
#include "ComClass.h"
template
class IOleObjectImpl : public ComClass {
public:
IOleObjectImpl(TImpl *pParent) : ComClass(pParent) {}
// IOleObject
STDMETHODIMP SetClientSite(IOleClientSite *pClientSite) {
if (this->m_pParent->m_clientSite) {
this->m_pParent->m_clientSite->Release();
}
this->m_pParent->m_clientSite = pClientSite;
if (this->m_pParent->m_clientSite) {
this->m_pParent->m_clientSite->AddRef();
}
return S_OK;
}
STDMETHODIMP GetClientSite(IOleClientSite **ppClientSite) {
if (ppClientSite == NULL) {
return E_POINTER;
}
if (this->m_pParent->m_clientSite == NULL) {
*ppClientSite = NULL;
return E_FAIL;
}
this->m_pParent->m_clientSite->AddRef();
*ppClientSite = this->m_pParent->m_clientSite;
return S_OK;
}
STDMETHODIMP SetHostNames(LPCOLESTR szContainerApp, LPCOLESTR szContainerObj) {
return S_OK;
}
STDMETHODIMP Close(DWORD dwSaveOption) {
if (this->m_pParent->m_clientSite) {
this->m_pParent->m_clientSite->Release();
this->m_pParent->m_clientSite = NULL;
}
return S_OK;
}
STDMETHODIMP SetMoniker(DWORD dwWhichMoniker, IMoniker *pmk) {
return E_NOTIMPL;
}
STDMETHODIMP GetMoniker(DWORD dwAssign, DWORD dwWhichMoniker, IMoniker **ppmk) {
return E_NOTIMPL;
}
STDMETHODIMP InitFromData(IDataObject *pDataObject, BOOL fCreation, DWORD dwReserved) {
return E_NOTIMPL;
}
STDMETHODIMP GetClipboardData(DWORD dwReserved, IDataObject **ppDataObject) {
return E_NOTIMPL;
}
STDMETHODIMP DoVerb(LONG iVerb, LPMSG lpmsg, IOleClientSite *pActiveSite, LONG lindex, HWND hwndParent, LPCRECT lprcPosRect) {
switch (iVerb) {
case OLEIVERB_INPLACEACTIVATE:
case OLEIVERB_UIACTIVATE:
case OLEIVERB_SHOW:
return S_OK;
default:
return OLEOBJ_S_INVALIDVERB;
}
}
STDMETHODIMP EnumVerbs(IEnumOLEVERB **ppEnumOleVerb) {
if (ppEnumOleVerb == NULL) {
return E_POINTER;
}
return OleRegEnumVerbs(__uuidof(TImpl), ppEnumOleVerb);
}
STDMETHODIMP Update(void) {
return S_OK;
}
STDMETHODIMP IsUpToDate(void) {
return S_OK;
}
STDMETHODIMP GetUserClassID(CLSID *pClsid) {
if (pClsid == NULL) {
return E_POINTER;
}
*pClsid = __uuidof(TImpl);
return S_OK;
}
STDMETHODIMP GetUserType(DWORD dwFormOfType, LPOLESTR *pszUserType) {
if (pszUserType == NULL) {
return E_POINTER;
}
return OleRegGetUserType(__uuidof(TImpl), dwFormOfType, pszUserType);
}
STDMETHODIMP SetExtent(DWORD dwDrawAspect, SIZEL *psizel) {
return S_OK;
}
STDMETHODIMP GetExtent(DWORD dwDrawAspect, SIZEL *psizel) {
if (psizel == NULL) {
return E_POINTER;
}
psizel->cx = 0;
psizel->cy = 0;
return S_OK;
}
STDMETHODIMP Advise(IAdviseSink *pAdvSink, DWORD *pdwConnection) {
return S_OK;
}
STDMETHODIMP Unadvise(DWORD dwConnection) {
return E_NOTIMPL;
}
STDMETHODIMP EnumAdvise(IEnumSTATDATA **ppenumAdvise) {
return E_NOTIMPL;
}
STDMETHODIMP GetMiscStatus(DWORD dwAspect, DWORD *pdwStatus) {
return OleRegGetMiscStatus(__uuidof(TImpl), dwAspect, pdwStatus);
}
STDMETHODIMP SetColorScheme(LOGPALETTE *pLogpal) {
return E_NOTIMPL;
}
};
================================================
FILE: include/com/IQuickActivateImpl.h
================================================
#pragma once
#include
#include
#include
#include "ComClass.h"
template
class IQuickActivateImpl : public ComClass {
public:
IQuickActivateImpl(TImpl *pParent) : ComClass(pParent) {}
// IQuickActivate
STDMETHODIMP QuickActivate(QACONTAINER *pQaContainer, QACONTROL *pQaControl) {
CComPtr oleObject;
CComPtr viewObject;
this->m_pParent->QueryInterface(IID_IOleObject, (void **)&oleObject);
this->m_pParent->QueryInterface(IID_IViewObjectEx, (void **)&viewObject);
if (!oleObject || !viewObject) {
return E_NOINTERFACE;
}
oleObject->SetClientSite(pQaContainer->pClientSite);
if (pQaContainer->pAdviseSink) {
viewObject->SetAdvise(DVASPECT_CONTENT, 0, pQaContainer->pAdviseSink);
}
oleObject->GetMiscStatus(DVASPECT_CONTENT, &pQaControl->dwMiscStatus);
viewObject->GetViewStatus(&pQaControl->dwViewStatus);
return S_OK;
}
STDMETHODIMP SetContentExtent(LPSIZEL pSizel) {
CComPtr oleObject;
this->m_pParent->QueryInterface(IID_IOleObject, (void **)&oleObject);
if (!oleObject) {
return E_NOINTERFACE;
}
return oleObject->SetExtent(DVASPECT_CONTENT, pSizel);
}
STDMETHODIMP GetContentExtent(LPSIZEL pSizel) {
CComPtr oleObject;
this->m_pParent->QueryInterface(IID_IOleObject, (void **)&oleObject);
if (!oleObject) {
return E_NOINTERFACE;
}
return oleObject->GetExtent(DVASPECT_CONTENT, pSizel);
}
};
================================================
FILE: include/com/IUnknownImpl.h
================================================
#pragma once
#include
#include
#include
#include "ComClass.h"
class IUnknownImpl {
private:
LONG m_refCount;
protected:
IUnknownImpl() : m_refCount(1) {}
virtual ~IUnknownImpl(void) {
if (m_refCount != 0) {
DebugBreak();
}
}
public:
// IUnknown
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject) {
if (ppvObject == NULL) {
return E_POINTER;
}
*ppvObject = NULL;
if (IsEqualIID(riid, IID_IUnknown)) {
*ppvObject = (IUnknown *)this;
}
if (*ppvObject != NULL) {
this->AddRef();
return S_OK;
}
return E_NOINTERFACE;
}
STDMETHODIMP_(ULONG) AddRef(void) {
return InterlockedIncrement(&m_refCount);
}
STDMETHODIMP_(ULONG) Release(void) {
ULONG count = InterlockedDecrement(&m_refCount);
if (count == 0) {
delete this;
}
return count;
}
};
================================================
FILE: include/com/IViewObjectExImpl.h
================================================
#pragma once
#include
#include
#include
#include "ComClass.h"
template
class IViewObjectExImpl : public ComClass {
public:
IViewObjectExImpl(TImpl *pParent) : ComClass(pParent) {}
// IViewObject
STDMETHODIMP Draw(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hdcTargetDev, HDC hdcDraw, LPCRECTL lprcBounds, LPCRECTL lprcWBounds, BOOL (STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue), ULONG_PTR dwContinue) {
return this->m_pParent->OnDraw(dwDrawAspect, lindex, pvAspect, ptd, hdcTargetDev, hdcDraw, lprcBounds, lprcWBounds, pfnContinue, dwContinue);
}
STDMETHODIMP GetColorSet(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hicTargetDev, LOGPALETTE **ppColorSet) {
if (ppColorSet == NULL) {
return E_POINTER;
}
*ppColorSet = NULL;
return S_FALSE;
}
STDMETHODIMP Freeze(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DWORD *pdwFreeze) {
return E_NOTIMPL;
}
STDMETHODIMP Unfreeze(DWORD dwFreeze) {
return E_NOTIMPL;
}
STDMETHODIMP SetAdvise(DWORD aspects, DWORD advf, IAdviseSink *pAdvSink) {
if (this->m_pParent->m_adviseSink) {
this->m_pParent->m_adviseSink->Release();
}
this->m_pParent->m_adviseSink = pAdvSink;
if (this->m_pParent->m_adviseSink) {
this->m_pParent->m_adviseSink->AddRef();
}
return S_OK;
}
STDMETHODIMP GetAdvise(DWORD *pAspects, DWORD *pAdvf, IAdviseSink **ppAdvSink) {
if (pAspects) {
*pAspects = DVASPECT_CONTENT;
}
if (pAdvf) {
*pAdvf = 0;
}
if (ppAdvSink) {
*ppAdvSink = this->m_pParent->m_adviseSink;
}
return S_OK;
}
// IViewObject2
STDMETHODIMP GetExtent(DWORD dwAspect, LONG lindex, DVTARGETDEVICE *ptd, LPSIZEL lpsizel) {
if (lpsizel == NULL) {
return E_POINTER;
}
if (dwAspect != DVASPECT_CONTENT) {
return DV_E_DVASPECT;
}
if (!this->m_pParent->m_innerHwnd) {
lpsizel->cx = 0;
lpsizel->cy = 0;
return E_FAIL;
}
RECT rect;
GetClientRect(this->m_pParent->m_innerHwnd, &rect);
// Convert to HIMETRIC
HDC hdc = GetDC(NULL);
int ppiX = GetDeviceCaps(hdc, LOGPIXELSX);
int ppiY = GetDeviceCaps(hdc, LOGPIXELSY);
ReleaseDC(NULL, hdc);
lpsizel->cx = MAP_PIX_TO_LOGHIM(rect.right - rect.left, ppiX);
lpsizel->cy = MAP_PIX_TO_LOGHIM(rect.bottom - rect.top, ppiY);
return S_OK;
}
// IViewObjectEx
STDMETHODIMP GetRect(DWORD dwAspect, LPRECTL pRect) {
if (pRect == NULL) {
return E_POINTER;
}
if (dwAspect != DVASPECT_CONTENT) {
return DV_E_DVASPECT;
}
if (!this->m_pParent->m_innerHwnd) {
return E_FAIL;
}
RECT rect;
GetClientRect(this->m_pParent->m_innerHwnd, &rect);
pRect->left = rect.left;
pRect->top = rect.top;
pRect->right = rect.right;
pRect->bottom = rect.bottom;
return S_OK;
}
STDMETHODIMP GetViewStatus(DWORD *pdwStatus) {
if (pdwStatus == NULL) {
return E_POINTER;
}
*pdwStatus = VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE;
return S_OK;
}
STDMETHODIMP QueryHitPoint(DWORD dwAspect, LPCRECT pRectBounds, POINT ptlLoc, LONG lCloseHint, DWORD *pHitResult) {
if (pRectBounds == NULL || pHitResult == NULL) {
return E_POINTER;
}
*pHitResult = PtInRect(pRectBounds, *(POINT *)&ptlLoc) ? HITRESULT_HIT : HITRESULT_OUTSIDE;
return S_OK;
}
STDMETHODIMP QueryHitRect(DWORD dwAspect, LPCRECT pRectBounds, LPCRECT pRectLoc, LONG lCloseHint, DWORD *pHitResult) {
if (pRectBounds == NULL || pRectLoc == NULL || pHitResult == NULL) {
return E_POINTER;
}
*pHitResult = IntersectRect((LPRECT)pHitResult, pRectBounds, pRectLoc) ? HITRESULT_HIT : HITRESULT_OUTSIDE;
return S_OK;
}
STDMETHODIMP GetNaturalExtent(DWORD dwAspect, LONG lindex, DVTARGETDEVICE *ptd, HDC hicTargetDev, DVEXTENTINFO *pExtentInfo, LPSIZEL pSizel) {
return GetExtent(dwAspect, lindex, ptd, pSizel);
}
};
================================================
FILE: include/com/helpers.h
================================================
#pragma once
#include
#include
#include
#define DEFINE_UUIDOF(cls, uuid) \
template<> const GUID &__mingw_uuidof(void) { \
return uuid; \
}
#define HIMETRIC_PER_INCH 2540
#define MAP_PIX_TO_LOGHIM(x, ppli) MulDiv(HIMETRIC_PER_INCH, (x), (ppli))
#define MAP_LOGHIM_TO_PIX(x, ppli) MulDiv((ppli), (x), HIMETRIC_PER_INCH)
================================================
FILE: include/com.h
================================================
#pragma once
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
================================================
FILE: include/licdll.h
================================================
/*** Autogenerated by WIDL 8.5 from licdll.idl - Do not edit ***/
#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include
#include
#endif
#ifndef COM_NO_WINDOWS_H
#include
#include
#endif
#ifndef __licdll_h__
#define __licdll_h__
#ifndef __WIDL_INLINE
#if defined(__cplusplus) || defined(_MSC_VER)
#define __WIDL_INLINE inline
#elif defined(__GNUC__)
#define __WIDL_INLINE __inline__
#endif
#endif
/* Forward declarations */
#ifndef __COMLicenseAgent_FWD_DEFINED__
#define __COMLicenseAgent_FWD_DEFINED__
#ifdef __cplusplus
typedef class COMLicenseAgent COMLicenseAgent;
#else
typedef struct COMLicenseAgent COMLicenseAgent;
#endif /* defined __cplusplus */
#endif /* defined __COMLicenseAgent_FWD_DEFINED__ */
#ifndef __ICOMLicenseAgent_FWD_DEFINED__
#define __ICOMLicenseAgent_FWD_DEFINED__
typedef interface ICOMLicenseAgent ICOMLicenseAgent;
#ifdef __cplusplus
interface ICOMLicenseAgent;
#endif /* __cplusplus */
#endif
#ifndef __ICOMLicenseAgent2_FWD_DEFINED__
#define __ICOMLicenseAgent2_FWD_DEFINED__
typedef interface ICOMLicenseAgent2 ICOMLicenseAgent2;
#ifdef __cplusplus
interface ICOMLicenseAgent2;
#endif /* __cplusplus */
#endif
/* Headers for imported files */
#include
#ifdef __cplusplus
extern "C" {
#endif
#ifndef __LICDLLLib_LIBRARY_DEFINED__
#define __LICDLLLib_LIBRARY_DEFINED__
DEFINE_GUID(LIBID_LICDLLLib, 0xc7879482, 0xf798, 0x4a74, 0xaf,0x43, 0xe8,0x87,0xfb,0xdc,0xed,0x40);
#ifndef __ICOMLicenseAgent_FWD_DEFINED__
#define __ICOMLicenseAgent_FWD_DEFINED__
typedef interface ICOMLicenseAgent ICOMLicenseAgent;
#ifdef __cplusplus
interface ICOMLicenseAgent;
#endif /* __cplusplus */
#endif
#ifndef __ICOMLicenseAgent2_FWD_DEFINED__
#define __ICOMLicenseAgent2_FWD_DEFINED__
typedef interface ICOMLicenseAgent2 ICOMLicenseAgent2;
#ifdef __cplusplus
interface ICOMLicenseAgent2;
#endif /* __cplusplus */
#endif
/*****************************************************************************
* COMLicenseAgent coclass
*/
DEFINE_GUID(CLSID_COMLicenseAgent, 0xacadf079, 0xcbcd, 0x4032, 0x83,0xf2, 0xfa,0x47,0xc4,0xdb,0x09,0x6f);
#ifdef __cplusplus
class DECLSPEC_UUID("acadf079-cbcd-4032-83f2-fa47c4db096f") COMLicenseAgent;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(COMLicenseAgent, 0xacadf079, 0xcbcd, 0x4032, 0x83,0xf2, 0xfa,0x47,0xc4,0xdb,0x09,0x6f)
#endif
#endif
/*****************************************************************************
* ICOMLicenseAgent interface
*/
#ifndef __ICOMLicenseAgent_INTERFACE_DEFINED__
#define __ICOMLicenseAgent_INTERFACE_DEFINED__
DEFINE_GUID(IID_ICOMLicenseAgent, 0xb8cbad79, 0x3f1f, 0x481a, 0xbb,0x0c, 0xe7,0xbb,0xd7,0x7b,0xdd,0xd1);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b8cbad79-3f1f-481a-bb0c-e7bbd77bddd1")
ICOMLicenseAgent : public IDispatch
{
virtual HRESULT STDMETHODCALLTYPE Initialize(
ULONG dwBPC,
ULONG dwMode,
BSTR bstrLicSource,
ULONG *pdwRetCode) = 0;
virtual HRESULT STDMETHODCALLTYPE GetFirstName(
BSTR *pbstrVal) = 0;
virtual HRESULT STDMETHODCALLTYPE SetFirstName(
BSTR bstrNewVal) = 0;
virtual HRESULT STDMETHODCALLTYPE GetLastName(
BSTR *pbstrVal) = 0;
virtual HRESULT STDMETHODCALLTYPE SetLastName(
BSTR bstrNewVal) = 0;
virtual HRESULT STDMETHODCALLTYPE GetOrgName(
BSTR *pbstrVal) = 0;
virtual HRESULT STDMETHODCALLTYPE SetOrgName(
BSTR bstrNewVal) = 0;
virtual HRESULT STDMETHODCALLTYPE GetEmail(
BSTR *pbstrVal) = 0;
virtual HRESULT STDMETHODCALLTYPE SetEmail(
BSTR bstrNewVal) = 0;
virtual HRESULT STDMETHODCALLTYPE GetPhone(
BSTR *pbstrVal) = 0;
virtual HRESULT STDMETHODCALLTYPE SetPhone(
BSTR bstrNewVal) = 0;
virtual HRESULT STDMETHODCALLTYPE GetAddress1(
BSTR *pbstrVal) = 0;
virtual HRESULT STDMETHODCALLTYPE SetAddress1(
BSTR bstrNewVal) = 0;
virtual HRESULT STDMETHODCALLTYPE GetCity(
BSTR *pbstrVal) = 0;
virtual HRESULT STDMETHODCALLTYPE SetCity(
BSTR bstrNewVal) = 0;
virtual HRESULT STDMETHODCALLTYPE GetState(
BSTR *pbstrVal) = 0;
virtual HRESULT STDMETHODCALLTYPE SetState(
BSTR bstrNewVal) = 0;
virtual HRESULT STDMETHODCALLTYPE GetCountryCode(
BSTR *pbstrVal) = 0;
virtual HRESULT STDMETHODCALLTYPE SetCountryCode(
BSTR bstrNewVal) = 0;
virtual HRESULT STDMETHODCALLTYPE GetCountryDesc(
BSTR *pbstrVal) = 0;
virtual HRESULT STDMETHODCALLTYPE SetCountryDesc(
BSTR bstrNewVal) = 0;
virtual HRESULT STDMETHODCALLTYPE GetZip(
BSTR *pbstrVal) = 0;
virtual HRESULT STDMETHODCALLTYPE SetZip(
BSTR bstrNewVal) = 0;
virtual HRESULT STDMETHODCALLTYPE GetIsoLanguage(
ULONG *pdwVal) = 0;
virtual HRESULT STDMETHODCALLTYPE SetIsoLanguage(
ULONG dwNewVal) = 0;
virtual HRESULT STDMETHODCALLTYPE GetMSUpdate(
BSTR *pbstrVal) = 0;
virtual HRESULT STDMETHODCALLTYPE SetMSUpdate(
BSTR bstrNewVal) = 0;
virtual HRESULT STDMETHODCALLTYPE GetMSOffer(
BSTR *pbstrVal) = 0;
virtual HRESULT STDMETHODCALLTYPE SetMSOffer(
BSTR bstrNewVal) = 0;
virtual HRESULT STDMETHODCALLTYPE GetOtherOffer(
BSTR *pbstrVal) = 0;
virtual HRESULT STDMETHODCALLTYPE SetOtherOffer(
BSTR bstrNewVal) = 0;
virtual HRESULT STDMETHODCALLTYPE GetAddress2(
BSTR *pbstrVal) = 0;
virtual HRESULT STDMETHODCALLTYPE SetAddress2(
BSTR bstrNewVal) = 0;
virtual HRESULT STDMETHODCALLTYPE AsyncProcessHandshakeRequest(
LONG bReviseCustInfo) = 0;
virtual HRESULT STDMETHODCALLTYPE AsyncProcessNewLicenseRequest(
) = 0;
virtual HRESULT STDMETHODCALLTYPE AsyncProcessReissueLicenseRequest(
) = 0;
virtual HRESULT STDMETHODCALLTYPE AsyncProcessReviseCustInfoRequest(
) = 0;
virtual HRESULT STDMETHODCALLTYPE GetAsyncProcessReturnCode(
ULONG *pdwRetCode) = 0;
virtual HRESULT STDMETHODCALLTYPE AsyncProcessDroppedLicenseRequest(
) = 0;
virtual HRESULT STDMETHODCALLTYPE GenerateInstallationId(
BSTR *pbstrVal) = 0;
virtual HRESULT STDMETHODCALLTYPE DepositConfirmationId(
BSTR bstrVal,
ULONG *pdwRetCode) = 0;
virtual HRESULT STDMETHODCALLTYPE GetExpirationInfo(
ULONG *pdwWPALeft,
ULONG *pdwEvalLeft) = 0;
virtual HRESULT STDMETHODCALLTYPE AsyncProcessRegistrationRequest(
) = 0;
virtual HRESULT STDMETHODCALLTYPE ProcessHandshakeRequest(
LONG bReviseCustInfo) = 0;
virtual HRESULT STDMETHODCALLTYPE ProcessNewLicenseRequest(
) = 0;
virtual HRESULT STDMETHODCALLTYPE ProcessDroppedLicenseRequest(
) = 0;
virtual HRESULT STDMETHODCALLTYPE ProcessReissueLicenseRequest(
) = 0;
virtual HRESULT STDMETHODCALLTYPE ProcessReviseCustInfoRequest(
) = 0;
virtual HRESULT STDMETHODCALLTYPE EnsureInternetConnection(
) = 0;
virtual HRESULT STDMETHODCALLTYPE SetProductKey(
LPWSTR pszNewProductKey) = 0;
virtual HRESULT STDMETHODCALLTYPE GetProductID(
BSTR *pbstrVal) = 0;
virtual HRESULT STDMETHODCALLTYPE VerifyCheckDigits(
BSTR bstrCIDIID,
LONG *pbValue) = 0;
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ICOMLicenseAgent, 0xb8cbad79, 0x3f1f, 0x481a, 0xbb,0x0c, 0xe7,0xbb,0xd7,0x7b,0xdd,0xd1)
#endif
#else
typedef struct ICOMLicenseAgentVtbl {
BEGIN_INTERFACE
/*** IUnknown methods ***/
HRESULT (STDMETHODCALLTYPE *QueryInterface)(
ICOMLicenseAgent *This,
REFIID riid,
void **ppvObject);
ULONG (STDMETHODCALLTYPE *AddRef)(
ICOMLicenseAgent *This);
ULONG (STDMETHODCALLTYPE *Release)(
ICOMLicenseAgent *This);
/*** IDispatch methods ***/
HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
ICOMLicenseAgent *This,
UINT *pctinfo);
HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
ICOMLicenseAgent *This,
UINT iTInfo,
LCID lcid,
ITypeInfo **ppTInfo);
HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
ICOMLicenseAgent *This,
REFIID riid,
LPOLESTR *rgszNames,
UINT cNames,
LCID lcid,
DISPID *rgDispId);
HRESULT (STDMETHODCALLTYPE *Invoke)(
ICOMLicenseAgent *This,
DISPID dispIdMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS *pDispParams,
VARIANT *pVarResult,
EXCEPINFO *pExcepInfo,
UINT *puArgErr);
/*** ICOMLicenseAgent methods ***/
HRESULT (STDMETHODCALLTYPE *Initialize)(
ICOMLicenseAgent *This,
ULONG dwBPC,
ULONG dwMode,
BSTR bstrLicSource,
ULONG *pdwRetCode);
HRESULT (STDMETHODCALLTYPE *GetFirstName)(
ICOMLicenseAgent *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetFirstName)(
ICOMLicenseAgent *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetLastName)(
ICOMLicenseAgent *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetLastName)(
ICOMLicenseAgent *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetOrgName)(
ICOMLicenseAgent *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetOrgName)(
ICOMLicenseAgent *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetEmail)(
ICOMLicenseAgent *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetEmail)(
ICOMLicenseAgent *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetPhone)(
ICOMLicenseAgent *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetPhone)(
ICOMLicenseAgent *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetAddress1)(
ICOMLicenseAgent *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetAddress1)(
ICOMLicenseAgent *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetCity)(
ICOMLicenseAgent *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetCity)(
ICOMLicenseAgent *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetState)(
ICOMLicenseAgent *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetState)(
ICOMLicenseAgent *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetCountryCode)(
ICOMLicenseAgent *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetCountryCode)(
ICOMLicenseAgent *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetCountryDesc)(
ICOMLicenseAgent *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetCountryDesc)(
ICOMLicenseAgent *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetZip)(
ICOMLicenseAgent *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetZip)(
ICOMLicenseAgent *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetIsoLanguage)(
ICOMLicenseAgent *This,
ULONG *pdwVal);
HRESULT (STDMETHODCALLTYPE *SetIsoLanguage)(
ICOMLicenseAgent *This,
ULONG dwNewVal);
HRESULT (STDMETHODCALLTYPE *GetMSUpdate)(
ICOMLicenseAgent *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetMSUpdate)(
ICOMLicenseAgent *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetMSOffer)(
ICOMLicenseAgent *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetMSOffer)(
ICOMLicenseAgent *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetOtherOffer)(
ICOMLicenseAgent *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetOtherOffer)(
ICOMLicenseAgent *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetAddress2)(
ICOMLicenseAgent *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetAddress2)(
ICOMLicenseAgent *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *AsyncProcessHandshakeRequest)(
ICOMLicenseAgent *This,
LONG bReviseCustInfo);
HRESULT (STDMETHODCALLTYPE *AsyncProcessNewLicenseRequest)(
ICOMLicenseAgent *This);
HRESULT (STDMETHODCALLTYPE *AsyncProcessReissueLicenseRequest)(
ICOMLicenseAgent *This);
HRESULT (STDMETHODCALLTYPE *AsyncProcessReviseCustInfoRequest)(
ICOMLicenseAgent *This);
HRESULT (STDMETHODCALLTYPE *GetAsyncProcessReturnCode)(
ICOMLicenseAgent *This,
ULONG *pdwRetCode);
HRESULT (STDMETHODCALLTYPE *AsyncProcessDroppedLicenseRequest)(
ICOMLicenseAgent *This);
HRESULT (STDMETHODCALLTYPE *GenerateInstallationId)(
ICOMLicenseAgent *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *DepositConfirmationId)(
ICOMLicenseAgent *This,
BSTR bstrVal,
ULONG *pdwRetCode);
HRESULT (STDMETHODCALLTYPE *GetExpirationInfo)(
ICOMLicenseAgent *This,
ULONG *pdwWPALeft,
ULONG *pdwEvalLeft);
HRESULT (STDMETHODCALLTYPE *AsyncProcessRegistrationRequest)(
ICOMLicenseAgent *This);
HRESULT (STDMETHODCALLTYPE *ProcessHandshakeRequest)(
ICOMLicenseAgent *This,
LONG bReviseCustInfo);
HRESULT (STDMETHODCALLTYPE *ProcessNewLicenseRequest)(
ICOMLicenseAgent *This);
HRESULT (STDMETHODCALLTYPE *ProcessDroppedLicenseRequest)(
ICOMLicenseAgent *This);
HRESULT (STDMETHODCALLTYPE *ProcessReissueLicenseRequest)(
ICOMLicenseAgent *This);
HRESULT (STDMETHODCALLTYPE *ProcessReviseCustInfoRequest)(
ICOMLicenseAgent *This);
HRESULT (STDMETHODCALLTYPE *EnsureInternetConnection)(
ICOMLicenseAgent *This);
HRESULT (STDMETHODCALLTYPE *SetProductKey)(
ICOMLicenseAgent *This,
LPWSTR pszNewProductKey);
HRESULT (STDMETHODCALLTYPE *GetProductID)(
ICOMLicenseAgent *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *VerifyCheckDigits)(
ICOMLicenseAgent *This,
BSTR bstrCIDIID,
LONG *pbValue);
END_INTERFACE
} ICOMLicenseAgentVtbl;
interface ICOMLicenseAgent {
CONST_VTBL ICOMLicenseAgentVtbl* lpVtbl;
};
#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ICOMLicenseAgent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ICOMLicenseAgent_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ICOMLicenseAgent_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ICOMLicenseAgent_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ICOMLicenseAgent_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ICOMLicenseAgent_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ICOMLicenseAgent_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ICOMLicenseAgent methods ***/
#define ICOMLicenseAgent_Initialize(This,dwBPC,dwMode,bstrLicSource,pdwRetCode) (This)->lpVtbl->Initialize(This,dwBPC,dwMode,bstrLicSource,pdwRetCode)
#define ICOMLicenseAgent_GetFirstName(This,pbstrVal) (This)->lpVtbl->GetFirstName(This,pbstrVal)
#define ICOMLicenseAgent_SetFirstName(This,bstrNewVal) (This)->lpVtbl->SetFirstName(This,bstrNewVal)
#define ICOMLicenseAgent_GetLastName(This,pbstrVal) (This)->lpVtbl->GetLastName(This,pbstrVal)
#define ICOMLicenseAgent_SetLastName(This,bstrNewVal) (This)->lpVtbl->SetLastName(This,bstrNewVal)
#define ICOMLicenseAgent_GetOrgName(This,pbstrVal) (This)->lpVtbl->GetOrgName(This,pbstrVal)
#define ICOMLicenseAgent_SetOrgName(This,bstrNewVal) (This)->lpVtbl->SetOrgName(This,bstrNewVal)
#define ICOMLicenseAgent_GetEmail(This,pbstrVal) (This)->lpVtbl->GetEmail(This,pbstrVal)
#define ICOMLicenseAgent_SetEmail(This,bstrNewVal) (This)->lpVtbl->SetEmail(This,bstrNewVal)
#define ICOMLicenseAgent_GetPhone(This,pbstrVal) (This)->lpVtbl->GetPhone(This,pbstrVal)
#define ICOMLicenseAgent_SetPhone(This,bstrNewVal) (This)->lpVtbl->SetPhone(This,bstrNewVal)
#define ICOMLicenseAgent_GetAddress1(This,pbstrVal) (This)->lpVtbl->GetAddress1(This,pbstrVal)
#define ICOMLicenseAgent_SetAddress1(This,bstrNewVal) (This)->lpVtbl->SetAddress1(This,bstrNewVal)
#define ICOMLicenseAgent_GetCity(This,pbstrVal) (This)->lpVtbl->GetCity(This,pbstrVal)
#define ICOMLicenseAgent_SetCity(This,bstrNewVal) (This)->lpVtbl->SetCity(This,bstrNewVal)
#define ICOMLicenseAgent_GetState(This,pbstrVal) (This)->lpVtbl->GetState(This,pbstrVal)
#define ICOMLicenseAgent_SetState(This,bstrNewVal) (This)->lpVtbl->SetState(This,bstrNewVal)
#define ICOMLicenseAgent_GetCountryCode(This,pbstrVal) (This)->lpVtbl->GetCountryCode(This,pbstrVal)
#define ICOMLicenseAgent_SetCountryCode(This,bstrNewVal) (This)->lpVtbl->SetCountryCode(This,bstrNewVal)
#define ICOMLicenseAgent_GetCountryDesc(This,pbstrVal) (This)->lpVtbl->GetCountryDesc(This,pbstrVal)
#define ICOMLicenseAgent_SetCountryDesc(This,bstrNewVal) (This)->lpVtbl->SetCountryDesc(This,bstrNewVal)
#define ICOMLicenseAgent_GetZip(This,pbstrVal) (This)->lpVtbl->GetZip(This,pbstrVal)
#define ICOMLicenseAgent_SetZip(This,bstrNewVal) (This)->lpVtbl->SetZip(This,bstrNewVal)
#define ICOMLicenseAgent_GetIsoLanguage(This,pdwVal) (This)->lpVtbl->GetIsoLanguage(This,pdwVal)
#define ICOMLicenseAgent_SetIsoLanguage(This,dwNewVal) (This)->lpVtbl->SetIsoLanguage(This,dwNewVal)
#define ICOMLicenseAgent_GetMSUpdate(This,pbstrVal) (This)->lpVtbl->GetMSUpdate(This,pbstrVal)
#define ICOMLicenseAgent_SetMSUpdate(This,bstrNewVal) (This)->lpVtbl->SetMSUpdate(This,bstrNewVal)
#define ICOMLicenseAgent_GetMSOffer(This,pbstrVal) (This)->lpVtbl->GetMSOffer(This,pbstrVal)
#define ICOMLicenseAgent_SetMSOffer(This,bstrNewVal) (This)->lpVtbl->SetMSOffer(This,bstrNewVal)
#define ICOMLicenseAgent_GetOtherOffer(This,pbstrVal) (This)->lpVtbl->GetOtherOffer(This,pbstrVal)
#define ICOMLicenseAgent_SetOtherOffer(This,bstrNewVal) (This)->lpVtbl->SetOtherOffer(This,bstrNewVal)
#define ICOMLicenseAgent_GetAddress2(This,pbstrVal) (This)->lpVtbl->GetAddress2(This,pbstrVal)
#define ICOMLicenseAgent_SetAddress2(This,bstrNewVal) (This)->lpVtbl->SetAddress2(This,bstrNewVal)
#define ICOMLicenseAgent_AsyncProcessHandshakeRequest(This,bReviseCustInfo) (This)->lpVtbl->AsyncProcessHandshakeRequest(This,bReviseCustInfo)
#define ICOMLicenseAgent_AsyncProcessNewLicenseRequest(This) (This)->lpVtbl->AsyncProcessNewLicenseRequest(This)
#define ICOMLicenseAgent_AsyncProcessReissueLicenseRequest(This) (This)->lpVtbl->AsyncProcessReissueLicenseRequest(This)
#define ICOMLicenseAgent_AsyncProcessReviseCustInfoRequest(This) (This)->lpVtbl->AsyncProcessReviseCustInfoRequest(This)
#define ICOMLicenseAgent_GetAsyncProcessReturnCode(This,pdwRetCode) (This)->lpVtbl->GetAsyncProcessReturnCode(This,pdwRetCode)
#define ICOMLicenseAgent_AsyncProcessDroppedLicenseRequest(This) (This)->lpVtbl->AsyncProcessDroppedLicenseRequest(This)
#define ICOMLicenseAgent_GenerateInstallationId(This,pbstrVal) (This)->lpVtbl->GenerateInstallationId(This,pbstrVal)
#define ICOMLicenseAgent_DepositConfirmationId(This,bstrVal,pdwRetCode) (This)->lpVtbl->DepositConfirmationId(This,bstrVal,pdwRetCode)
#define ICOMLicenseAgent_GetExpirationInfo(This,pdwWPALeft,pdwEvalLeft) (This)->lpVtbl->GetExpirationInfo(This,pdwWPALeft,pdwEvalLeft)
#define ICOMLicenseAgent_AsyncProcessRegistrationRequest(This) (This)->lpVtbl->AsyncProcessRegistrationRequest(This)
#define ICOMLicenseAgent_ProcessHandshakeRequest(This,bReviseCustInfo) (This)->lpVtbl->ProcessHandshakeRequest(This,bReviseCustInfo)
#define ICOMLicenseAgent_ProcessNewLicenseRequest(This) (This)->lpVtbl->ProcessNewLicenseRequest(This)
#define ICOMLicenseAgent_ProcessDroppedLicenseRequest(This) (This)->lpVtbl->ProcessDroppedLicenseRequest(This)
#define ICOMLicenseAgent_ProcessReissueLicenseRequest(This) (This)->lpVtbl->ProcessReissueLicenseRequest(This)
#define ICOMLicenseAgent_ProcessReviseCustInfoRequest(This) (This)->lpVtbl->ProcessReviseCustInfoRequest(This)
#define ICOMLicenseAgent_EnsureInternetConnection(This) (This)->lpVtbl->EnsureInternetConnection(This)
#define ICOMLicenseAgent_SetProductKey(This,pszNewProductKey) (This)->lpVtbl->SetProductKey(This,pszNewProductKey)
#define ICOMLicenseAgent_GetProductID(This,pbstrVal) (This)->lpVtbl->GetProductID(This,pbstrVal)
#define ICOMLicenseAgent_VerifyCheckDigits(This,bstrCIDIID,pbValue) (This)->lpVtbl->VerifyCheckDigits(This,bstrCIDIID,pbValue)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ICOMLicenseAgent_QueryInterface(ICOMLicenseAgent* This,REFIID riid,void **ppvObject) {
return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ICOMLicenseAgent_AddRef(ICOMLicenseAgent* This) {
return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ICOMLicenseAgent_Release(ICOMLicenseAgent* This) {
return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetTypeInfoCount(ICOMLicenseAgent* This,UINT *pctinfo) {
return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetTypeInfo(ICOMLicenseAgent* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetIDsOfNames(ICOMLicenseAgent* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_Invoke(ICOMLicenseAgent* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ICOMLicenseAgent methods ***/
static __WIDL_INLINE HRESULT ICOMLicenseAgent_Initialize(ICOMLicenseAgent* This,ULONG dwBPC,ULONG dwMode,BSTR bstrLicSource,ULONG *pdwRetCode) {
return This->lpVtbl->Initialize(This,dwBPC,dwMode,bstrLicSource,pdwRetCode);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetFirstName(ICOMLicenseAgent* This,BSTR *pbstrVal) {
return This->lpVtbl->GetFirstName(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_SetFirstName(ICOMLicenseAgent* This,BSTR bstrNewVal) {
return This->lpVtbl->SetFirstName(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetLastName(ICOMLicenseAgent* This,BSTR *pbstrVal) {
return This->lpVtbl->GetLastName(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_SetLastName(ICOMLicenseAgent* This,BSTR bstrNewVal) {
return This->lpVtbl->SetLastName(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetOrgName(ICOMLicenseAgent* This,BSTR *pbstrVal) {
return This->lpVtbl->GetOrgName(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_SetOrgName(ICOMLicenseAgent* This,BSTR bstrNewVal) {
return This->lpVtbl->SetOrgName(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetEmail(ICOMLicenseAgent* This,BSTR *pbstrVal) {
return This->lpVtbl->GetEmail(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_SetEmail(ICOMLicenseAgent* This,BSTR bstrNewVal) {
return This->lpVtbl->SetEmail(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetPhone(ICOMLicenseAgent* This,BSTR *pbstrVal) {
return This->lpVtbl->GetPhone(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_SetPhone(ICOMLicenseAgent* This,BSTR bstrNewVal) {
return This->lpVtbl->SetPhone(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetAddress1(ICOMLicenseAgent* This,BSTR *pbstrVal) {
return This->lpVtbl->GetAddress1(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_SetAddress1(ICOMLicenseAgent* This,BSTR bstrNewVal) {
return This->lpVtbl->SetAddress1(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetCity(ICOMLicenseAgent* This,BSTR *pbstrVal) {
return This->lpVtbl->GetCity(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_SetCity(ICOMLicenseAgent* This,BSTR bstrNewVal) {
return This->lpVtbl->SetCity(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetState(ICOMLicenseAgent* This,BSTR *pbstrVal) {
return This->lpVtbl->GetState(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_SetState(ICOMLicenseAgent* This,BSTR bstrNewVal) {
return This->lpVtbl->SetState(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetCountryCode(ICOMLicenseAgent* This,BSTR *pbstrVal) {
return This->lpVtbl->GetCountryCode(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_SetCountryCode(ICOMLicenseAgent* This,BSTR bstrNewVal) {
return This->lpVtbl->SetCountryCode(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetCountryDesc(ICOMLicenseAgent* This,BSTR *pbstrVal) {
return This->lpVtbl->GetCountryDesc(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_SetCountryDesc(ICOMLicenseAgent* This,BSTR bstrNewVal) {
return This->lpVtbl->SetCountryDesc(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetZip(ICOMLicenseAgent* This,BSTR *pbstrVal) {
return This->lpVtbl->GetZip(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_SetZip(ICOMLicenseAgent* This,BSTR bstrNewVal) {
return This->lpVtbl->SetZip(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetIsoLanguage(ICOMLicenseAgent* This,ULONG *pdwVal) {
return This->lpVtbl->GetIsoLanguage(This,pdwVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_SetIsoLanguage(ICOMLicenseAgent* This,ULONG dwNewVal) {
return This->lpVtbl->SetIsoLanguage(This,dwNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetMSUpdate(ICOMLicenseAgent* This,BSTR *pbstrVal) {
return This->lpVtbl->GetMSUpdate(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_SetMSUpdate(ICOMLicenseAgent* This,BSTR bstrNewVal) {
return This->lpVtbl->SetMSUpdate(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetMSOffer(ICOMLicenseAgent* This,BSTR *pbstrVal) {
return This->lpVtbl->GetMSOffer(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_SetMSOffer(ICOMLicenseAgent* This,BSTR bstrNewVal) {
return This->lpVtbl->SetMSOffer(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetOtherOffer(ICOMLicenseAgent* This,BSTR *pbstrVal) {
return This->lpVtbl->GetOtherOffer(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_SetOtherOffer(ICOMLicenseAgent* This,BSTR bstrNewVal) {
return This->lpVtbl->SetOtherOffer(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetAddress2(ICOMLicenseAgent* This,BSTR *pbstrVal) {
return This->lpVtbl->GetAddress2(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_SetAddress2(ICOMLicenseAgent* This,BSTR bstrNewVal) {
return This->lpVtbl->SetAddress2(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_AsyncProcessHandshakeRequest(ICOMLicenseAgent* This,LONG bReviseCustInfo) {
return This->lpVtbl->AsyncProcessHandshakeRequest(This,bReviseCustInfo);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_AsyncProcessNewLicenseRequest(ICOMLicenseAgent* This) {
return This->lpVtbl->AsyncProcessNewLicenseRequest(This);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_AsyncProcessReissueLicenseRequest(ICOMLicenseAgent* This) {
return This->lpVtbl->AsyncProcessReissueLicenseRequest(This);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_AsyncProcessReviseCustInfoRequest(ICOMLicenseAgent* This) {
return This->lpVtbl->AsyncProcessReviseCustInfoRequest(This);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetAsyncProcessReturnCode(ICOMLicenseAgent* This,ULONG *pdwRetCode) {
return This->lpVtbl->GetAsyncProcessReturnCode(This,pdwRetCode);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_AsyncProcessDroppedLicenseRequest(ICOMLicenseAgent* This) {
return This->lpVtbl->AsyncProcessDroppedLicenseRequest(This);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GenerateInstallationId(ICOMLicenseAgent* This,BSTR *pbstrVal) {
return This->lpVtbl->GenerateInstallationId(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_DepositConfirmationId(ICOMLicenseAgent* This,BSTR bstrVal,ULONG *pdwRetCode) {
return This->lpVtbl->DepositConfirmationId(This,bstrVal,pdwRetCode);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetExpirationInfo(ICOMLicenseAgent* This,ULONG *pdwWPALeft,ULONG *pdwEvalLeft) {
return This->lpVtbl->GetExpirationInfo(This,pdwWPALeft,pdwEvalLeft);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_AsyncProcessRegistrationRequest(ICOMLicenseAgent* This) {
return This->lpVtbl->AsyncProcessRegistrationRequest(This);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_ProcessHandshakeRequest(ICOMLicenseAgent* This,LONG bReviseCustInfo) {
return This->lpVtbl->ProcessHandshakeRequest(This,bReviseCustInfo);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_ProcessNewLicenseRequest(ICOMLicenseAgent* This) {
return This->lpVtbl->ProcessNewLicenseRequest(This);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_ProcessDroppedLicenseRequest(ICOMLicenseAgent* This) {
return This->lpVtbl->ProcessDroppedLicenseRequest(This);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_ProcessReissueLicenseRequest(ICOMLicenseAgent* This) {
return This->lpVtbl->ProcessReissueLicenseRequest(This);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_ProcessReviseCustInfoRequest(ICOMLicenseAgent* This) {
return This->lpVtbl->ProcessReviseCustInfoRequest(This);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_EnsureInternetConnection(ICOMLicenseAgent* This) {
return This->lpVtbl->EnsureInternetConnection(This);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_SetProductKey(ICOMLicenseAgent* This,LPWSTR pszNewProductKey) {
return This->lpVtbl->SetProductKey(This,pszNewProductKey);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_GetProductID(ICOMLicenseAgent* This,BSTR *pbstrVal) {
return This->lpVtbl->GetProductID(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent_VerifyCheckDigits(ICOMLicenseAgent* This,BSTR bstrCIDIID,LONG *pbValue) {
return This->lpVtbl->VerifyCheckDigits(This,bstrCIDIID,pbValue);
}
#endif
#endif
#endif
#endif /* __ICOMLicenseAgent_INTERFACE_DEFINED__ */
/*****************************************************************************
* ICOMLicenseAgent2 interface
*/
#ifndef __ICOMLicenseAgent2_INTERFACE_DEFINED__
#define __ICOMLicenseAgent2_INTERFACE_DEFINED__
DEFINE_GUID(IID_ICOMLicenseAgent2, 0x6a07c5a3, 0x9c67, 0x4bb6, 0xb0,0x20, 0xec,0xbe,0x7f,0xdf,0xd3,0x26);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6a07c5a3-9c67-4bb6-b020-ecbe7fdfd326")
ICOMLicenseAgent2 : public ICOMLicenseAgent
{
virtual HRESULT STDMETHODCALLTYPE SetReminders(
LONG bValue) = 0;
virtual HRESULT STDMETHODCALLTYPE GetReminders(
LONG *pbValue) = 0;
virtual HRESULT STDMETHODCALLTYPE GetKeyType(
ULONG *pdwKeyType) = 0;
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ICOMLicenseAgent2, 0x6a07c5a3, 0x9c67, 0x4bb6, 0xb0,0x20, 0xec,0xbe,0x7f,0xdf,0xd3,0x26)
#endif
#else
typedef struct ICOMLicenseAgent2Vtbl {
BEGIN_INTERFACE
/*** IUnknown methods ***/
HRESULT (STDMETHODCALLTYPE *QueryInterface)(
ICOMLicenseAgent2 *This,
REFIID riid,
void **ppvObject);
ULONG (STDMETHODCALLTYPE *AddRef)(
ICOMLicenseAgent2 *This);
ULONG (STDMETHODCALLTYPE *Release)(
ICOMLicenseAgent2 *This);
/*** IDispatch methods ***/
HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
ICOMLicenseAgent2 *This,
UINT *pctinfo);
HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
ICOMLicenseAgent2 *This,
UINT iTInfo,
LCID lcid,
ITypeInfo **ppTInfo);
HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
ICOMLicenseAgent2 *This,
REFIID riid,
LPOLESTR *rgszNames,
UINT cNames,
LCID lcid,
DISPID *rgDispId);
HRESULT (STDMETHODCALLTYPE *Invoke)(
ICOMLicenseAgent2 *This,
DISPID dispIdMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS *pDispParams,
VARIANT *pVarResult,
EXCEPINFO *pExcepInfo,
UINT *puArgErr);
/*** ICOMLicenseAgent methods ***/
HRESULT (STDMETHODCALLTYPE *Initialize)(
ICOMLicenseAgent2 *This,
ULONG dwBPC,
ULONG dwMode,
BSTR bstrLicSource,
ULONG *pdwRetCode);
HRESULT (STDMETHODCALLTYPE *GetFirstName)(
ICOMLicenseAgent2 *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetFirstName)(
ICOMLicenseAgent2 *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetLastName)(
ICOMLicenseAgent2 *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetLastName)(
ICOMLicenseAgent2 *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetOrgName)(
ICOMLicenseAgent2 *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetOrgName)(
ICOMLicenseAgent2 *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetEmail)(
ICOMLicenseAgent2 *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetEmail)(
ICOMLicenseAgent2 *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetPhone)(
ICOMLicenseAgent2 *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetPhone)(
ICOMLicenseAgent2 *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetAddress1)(
ICOMLicenseAgent2 *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetAddress1)(
ICOMLicenseAgent2 *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetCity)(
ICOMLicenseAgent2 *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetCity)(
ICOMLicenseAgent2 *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetState)(
ICOMLicenseAgent2 *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetState)(
ICOMLicenseAgent2 *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetCountryCode)(
ICOMLicenseAgent2 *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetCountryCode)(
ICOMLicenseAgent2 *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetCountryDesc)(
ICOMLicenseAgent2 *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetCountryDesc)(
ICOMLicenseAgent2 *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetZip)(
ICOMLicenseAgent2 *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetZip)(
ICOMLicenseAgent2 *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetIsoLanguage)(
ICOMLicenseAgent2 *This,
ULONG *pdwVal);
HRESULT (STDMETHODCALLTYPE *SetIsoLanguage)(
ICOMLicenseAgent2 *This,
ULONG dwNewVal);
HRESULT (STDMETHODCALLTYPE *GetMSUpdate)(
ICOMLicenseAgent2 *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetMSUpdate)(
ICOMLicenseAgent2 *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetMSOffer)(
ICOMLicenseAgent2 *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetMSOffer)(
ICOMLicenseAgent2 *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetOtherOffer)(
ICOMLicenseAgent2 *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetOtherOffer)(
ICOMLicenseAgent2 *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *GetAddress2)(
ICOMLicenseAgent2 *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *SetAddress2)(
ICOMLicenseAgent2 *This,
BSTR bstrNewVal);
HRESULT (STDMETHODCALLTYPE *AsyncProcessHandshakeRequest)(
ICOMLicenseAgent2 *This,
LONG bReviseCustInfo);
HRESULT (STDMETHODCALLTYPE *AsyncProcessNewLicenseRequest)(
ICOMLicenseAgent2 *This);
HRESULT (STDMETHODCALLTYPE *AsyncProcessReissueLicenseRequest)(
ICOMLicenseAgent2 *This);
HRESULT (STDMETHODCALLTYPE *AsyncProcessReviseCustInfoRequest)(
ICOMLicenseAgent2 *This);
HRESULT (STDMETHODCALLTYPE *GetAsyncProcessReturnCode)(
ICOMLicenseAgent2 *This,
ULONG *pdwRetCode);
HRESULT (STDMETHODCALLTYPE *AsyncProcessDroppedLicenseRequest)(
ICOMLicenseAgent2 *This);
HRESULT (STDMETHODCALLTYPE *GenerateInstallationId)(
ICOMLicenseAgent2 *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *DepositConfirmationId)(
ICOMLicenseAgent2 *This,
BSTR bstrVal,
ULONG *pdwRetCode);
HRESULT (STDMETHODCALLTYPE *GetExpirationInfo)(
ICOMLicenseAgent2 *This,
ULONG *pdwWPALeft,
ULONG *pdwEvalLeft);
HRESULT (STDMETHODCALLTYPE *AsyncProcessRegistrationRequest)(
ICOMLicenseAgent2 *This);
HRESULT (STDMETHODCALLTYPE *ProcessHandshakeRequest)(
ICOMLicenseAgent2 *This,
LONG bReviseCustInfo);
HRESULT (STDMETHODCALLTYPE *ProcessNewLicenseRequest)(
ICOMLicenseAgent2 *This);
HRESULT (STDMETHODCALLTYPE *ProcessDroppedLicenseRequest)(
ICOMLicenseAgent2 *This);
HRESULT (STDMETHODCALLTYPE *ProcessReissueLicenseRequest)(
ICOMLicenseAgent2 *This);
HRESULT (STDMETHODCALLTYPE *ProcessReviseCustInfoRequest)(
ICOMLicenseAgent2 *This);
HRESULT (STDMETHODCALLTYPE *EnsureInternetConnection)(
ICOMLicenseAgent2 *This);
HRESULT (STDMETHODCALLTYPE *SetProductKey)(
ICOMLicenseAgent2 *This,
LPWSTR pszNewProductKey);
HRESULT (STDMETHODCALLTYPE *GetProductID)(
ICOMLicenseAgent2 *This,
BSTR *pbstrVal);
HRESULT (STDMETHODCALLTYPE *VerifyCheckDigits)(
ICOMLicenseAgent2 *This,
BSTR bstrCIDIID,
LONG *pbValue);
/*** ICOMLicenseAgent2 methods ***/
HRESULT (STDMETHODCALLTYPE *SetReminders)(
ICOMLicenseAgent2 *This,
LONG bValue);
HRESULT (STDMETHODCALLTYPE *GetReminders)(
ICOMLicenseAgent2 *This,
LONG *pbValue);
HRESULT (STDMETHODCALLTYPE *GetKeyType)(
ICOMLicenseAgent2 *This,
ULONG *pdwKeyType);
END_INTERFACE
} ICOMLicenseAgent2Vtbl;
interface ICOMLicenseAgent2 {
CONST_VTBL ICOMLicenseAgent2Vtbl* lpVtbl;
};
#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ICOMLicenseAgent2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ICOMLicenseAgent2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ICOMLicenseAgent2_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ICOMLicenseAgent2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ICOMLicenseAgent2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ICOMLicenseAgent2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ICOMLicenseAgent2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ICOMLicenseAgent methods ***/
#define ICOMLicenseAgent2_Initialize(This,dwBPC,dwMode,bstrLicSource,pdwRetCode) (This)->lpVtbl->Initialize(This,dwBPC,dwMode,bstrLicSource,pdwRetCode)
#define ICOMLicenseAgent2_GetFirstName(This,pbstrVal) (This)->lpVtbl->GetFirstName(This,pbstrVal)
#define ICOMLicenseAgent2_SetFirstName(This,bstrNewVal) (This)->lpVtbl->SetFirstName(This,bstrNewVal)
#define ICOMLicenseAgent2_GetLastName(This,pbstrVal) (This)->lpVtbl->GetLastName(This,pbstrVal)
#define ICOMLicenseAgent2_SetLastName(This,bstrNewVal) (This)->lpVtbl->SetLastName(This,bstrNewVal)
#define ICOMLicenseAgent2_GetOrgName(This,pbstrVal) (This)->lpVtbl->GetOrgName(This,pbstrVal)
#define ICOMLicenseAgent2_SetOrgName(This,bstrNewVal) (This)->lpVtbl->SetOrgName(This,bstrNewVal)
#define ICOMLicenseAgent2_GetEmail(This,pbstrVal) (This)->lpVtbl->GetEmail(This,pbstrVal)
#define ICOMLicenseAgent2_SetEmail(This,bstrNewVal) (This)->lpVtbl->SetEmail(This,bstrNewVal)
#define ICOMLicenseAgent2_GetPhone(This,pbstrVal) (This)->lpVtbl->GetPhone(This,pbstrVal)
#define ICOMLicenseAgent2_SetPhone(This,bstrNewVal) (This)->lpVtbl->SetPhone(This,bstrNewVal)
#define ICOMLicenseAgent2_GetAddress1(This,pbstrVal) (This)->lpVtbl->GetAddress1(This,pbstrVal)
#define ICOMLicenseAgent2_SetAddress1(This,bstrNewVal) (This)->lpVtbl->SetAddress1(This,bstrNewVal)
#define ICOMLicenseAgent2_GetCity(This,pbstrVal) (This)->lpVtbl->GetCity(This,pbstrVal)
#define ICOMLicenseAgent2_SetCity(This,bstrNewVal) (This)->lpVtbl->SetCity(This,bstrNewVal)
#define ICOMLicenseAgent2_GetState(This,pbstrVal) (This)->lpVtbl->GetState(This,pbstrVal)
#define ICOMLicenseAgent2_SetState(This,bstrNewVal) (This)->lpVtbl->SetState(This,bstrNewVal)
#define ICOMLicenseAgent2_GetCountryCode(This,pbstrVal) (This)->lpVtbl->GetCountryCode(This,pbstrVal)
#define ICOMLicenseAgent2_SetCountryCode(This,bstrNewVal) (This)->lpVtbl->SetCountryCode(This,bstrNewVal)
#define ICOMLicenseAgent2_GetCountryDesc(This,pbstrVal) (This)->lpVtbl->GetCountryDesc(This,pbstrVal)
#define ICOMLicenseAgent2_SetCountryDesc(This,bstrNewVal) (This)->lpVtbl->SetCountryDesc(This,bstrNewVal)
#define ICOMLicenseAgent2_GetZip(This,pbstrVal) (This)->lpVtbl->GetZip(This,pbstrVal)
#define ICOMLicenseAgent2_SetZip(This,bstrNewVal) (This)->lpVtbl->SetZip(This,bstrNewVal)
#define ICOMLicenseAgent2_GetIsoLanguage(This,pdwVal) (This)->lpVtbl->GetIsoLanguage(This,pdwVal)
#define ICOMLicenseAgent2_SetIsoLanguage(This,dwNewVal) (This)->lpVtbl->SetIsoLanguage(This,dwNewVal)
#define ICOMLicenseAgent2_GetMSUpdate(This,pbstrVal) (This)->lpVtbl->GetMSUpdate(This,pbstrVal)
#define ICOMLicenseAgent2_SetMSUpdate(This,bstrNewVal) (This)->lpVtbl->SetMSUpdate(This,bstrNewVal)
#define ICOMLicenseAgent2_GetMSOffer(This,pbstrVal) (This)->lpVtbl->GetMSOffer(This,pbstrVal)
#define ICOMLicenseAgent2_SetMSOffer(This,bstrNewVal) (This)->lpVtbl->SetMSOffer(This,bstrNewVal)
#define ICOMLicenseAgent2_GetOtherOffer(This,pbstrVal) (This)->lpVtbl->GetOtherOffer(This,pbstrVal)
#define ICOMLicenseAgent2_SetOtherOffer(This,bstrNewVal) (This)->lpVtbl->SetOtherOffer(This,bstrNewVal)
#define ICOMLicenseAgent2_GetAddress2(This,pbstrVal) (This)->lpVtbl->GetAddress2(This,pbstrVal)
#define ICOMLicenseAgent2_SetAddress2(This,bstrNewVal) (This)->lpVtbl->SetAddress2(This,bstrNewVal)
#define ICOMLicenseAgent2_AsyncProcessHandshakeRequest(This,bReviseCustInfo) (This)->lpVtbl->AsyncProcessHandshakeRequest(This,bReviseCustInfo)
#define ICOMLicenseAgent2_AsyncProcessNewLicenseRequest(This) (This)->lpVtbl->AsyncProcessNewLicenseRequest(This)
#define ICOMLicenseAgent2_AsyncProcessReissueLicenseRequest(This) (This)->lpVtbl->AsyncProcessReissueLicenseRequest(This)
#define ICOMLicenseAgent2_AsyncProcessReviseCustInfoRequest(This) (This)->lpVtbl->AsyncProcessReviseCustInfoRequest(This)
#define ICOMLicenseAgent2_GetAsyncProcessReturnCode(This,pdwRetCode) (This)->lpVtbl->GetAsyncProcessReturnCode(This,pdwRetCode)
#define ICOMLicenseAgent2_AsyncProcessDroppedLicenseRequest(This) (This)->lpVtbl->AsyncProcessDroppedLicenseRequest(This)
#define ICOMLicenseAgent2_GenerateInstallationId(This,pbstrVal) (This)->lpVtbl->GenerateInstallationId(This,pbstrVal)
#define ICOMLicenseAgent2_DepositConfirmationId(This,bstrVal,pdwRetCode) (This)->lpVtbl->DepositConfirmationId(This,bstrVal,pdwRetCode)
#define ICOMLicenseAgent2_GetExpirationInfo(This,pdwWPALeft,pdwEvalLeft) (This)->lpVtbl->GetExpirationInfo(This,pdwWPALeft,pdwEvalLeft)
#define ICOMLicenseAgent2_AsyncProcessRegistrationRequest(This) (This)->lpVtbl->AsyncProcessRegistrationRequest(This)
#define ICOMLicenseAgent2_ProcessHandshakeRequest(This,bReviseCustInfo) (This)->lpVtbl->ProcessHandshakeRequest(This,bReviseCustInfo)
#define ICOMLicenseAgent2_ProcessNewLicenseRequest(This) (This)->lpVtbl->ProcessNewLicenseRequest(This)
#define ICOMLicenseAgent2_ProcessDroppedLicenseRequest(This) (This)->lpVtbl->ProcessDroppedLicenseRequest(This)
#define ICOMLicenseAgent2_ProcessReissueLicenseRequest(This) (This)->lpVtbl->ProcessReissueLicenseRequest(This)
#define ICOMLicenseAgent2_ProcessReviseCustInfoRequest(This) (This)->lpVtbl->ProcessReviseCustInfoRequest(This)
#define ICOMLicenseAgent2_EnsureInternetConnection(This) (This)->lpVtbl->EnsureInternetConnection(This)
#define ICOMLicenseAgent2_SetProductKey(This,pszNewProductKey) (This)->lpVtbl->SetProductKey(This,pszNewProductKey)
#define ICOMLicenseAgent2_GetProductID(This,pbstrVal) (This)->lpVtbl->GetProductID(This,pbstrVal)
#define ICOMLicenseAgent2_VerifyCheckDigits(This,bstrCIDIID,pbValue) (This)->lpVtbl->VerifyCheckDigits(This,bstrCIDIID,pbValue)
/*** ICOMLicenseAgent2 methods ***/
#define ICOMLicenseAgent2_SetReminders(This,bValue) (This)->lpVtbl->SetReminders(This,bValue)
#define ICOMLicenseAgent2_GetReminders(This,pbValue) (This)->lpVtbl->GetReminders(This,pbValue)
#define ICOMLicenseAgent2_GetKeyType(This,pdwKeyType) (This)->lpVtbl->GetKeyType(This,pdwKeyType)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_QueryInterface(ICOMLicenseAgent2* This,REFIID riid,void **ppvObject) {
return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ICOMLicenseAgent2_AddRef(ICOMLicenseAgent2* This) {
return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ICOMLicenseAgent2_Release(ICOMLicenseAgent2* This) {
return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetTypeInfoCount(ICOMLicenseAgent2* This,UINT *pctinfo) {
return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetTypeInfo(ICOMLicenseAgent2* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetIDsOfNames(ICOMLicenseAgent2* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_Invoke(ICOMLicenseAgent2* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ICOMLicenseAgent methods ***/
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_Initialize(ICOMLicenseAgent2* This,ULONG dwBPC,ULONG dwMode,BSTR bstrLicSource,ULONG *pdwRetCode) {
return This->lpVtbl->Initialize(This,dwBPC,dwMode,bstrLicSource,pdwRetCode);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetFirstName(ICOMLicenseAgent2* This,BSTR *pbstrVal) {
return This->lpVtbl->GetFirstName(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetFirstName(ICOMLicenseAgent2* This,BSTR bstrNewVal) {
return This->lpVtbl->SetFirstName(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetLastName(ICOMLicenseAgent2* This,BSTR *pbstrVal) {
return This->lpVtbl->GetLastName(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetLastName(ICOMLicenseAgent2* This,BSTR bstrNewVal) {
return This->lpVtbl->SetLastName(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetOrgName(ICOMLicenseAgent2* This,BSTR *pbstrVal) {
return This->lpVtbl->GetOrgName(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetOrgName(ICOMLicenseAgent2* This,BSTR bstrNewVal) {
return This->lpVtbl->SetOrgName(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetEmail(ICOMLicenseAgent2* This,BSTR *pbstrVal) {
return This->lpVtbl->GetEmail(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetEmail(ICOMLicenseAgent2* This,BSTR bstrNewVal) {
return This->lpVtbl->SetEmail(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetPhone(ICOMLicenseAgent2* This,BSTR *pbstrVal) {
return This->lpVtbl->GetPhone(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetPhone(ICOMLicenseAgent2* This,BSTR bstrNewVal) {
return This->lpVtbl->SetPhone(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetAddress1(ICOMLicenseAgent2* This,BSTR *pbstrVal) {
return This->lpVtbl->GetAddress1(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetAddress1(ICOMLicenseAgent2* This,BSTR bstrNewVal) {
return This->lpVtbl->SetAddress1(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetCity(ICOMLicenseAgent2* This,BSTR *pbstrVal) {
return This->lpVtbl->GetCity(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetCity(ICOMLicenseAgent2* This,BSTR bstrNewVal) {
return This->lpVtbl->SetCity(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetState(ICOMLicenseAgent2* This,BSTR *pbstrVal) {
return This->lpVtbl->GetState(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetState(ICOMLicenseAgent2* This,BSTR bstrNewVal) {
return This->lpVtbl->SetState(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetCountryCode(ICOMLicenseAgent2* This,BSTR *pbstrVal) {
return This->lpVtbl->GetCountryCode(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetCountryCode(ICOMLicenseAgent2* This,BSTR bstrNewVal) {
return This->lpVtbl->SetCountryCode(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetCountryDesc(ICOMLicenseAgent2* This,BSTR *pbstrVal) {
return This->lpVtbl->GetCountryDesc(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetCountryDesc(ICOMLicenseAgent2* This,BSTR bstrNewVal) {
return This->lpVtbl->SetCountryDesc(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetZip(ICOMLicenseAgent2* This,BSTR *pbstrVal) {
return This->lpVtbl->GetZip(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetZip(ICOMLicenseAgent2* This,BSTR bstrNewVal) {
return This->lpVtbl->SetZip(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetIsoLanguage(ICOMLicenseAgent2* This,ULONG *pdwVal) {
return This->lpVtbl->GetIsoLanguage(This,pdwVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetIsoLanguage(ICOMLicenseAgent2* This,ULONG dwNewVal) {
return This->lpVtbl->SetIsoLanguage(This,dwNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetMSUpdate(ICOMLicenseAgent2* This,BSTR *pbstrVal) {
return This->lpVtbl->GetMSUpdate(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetMSUpdate(ICOMLicenseAgent2* This,BSTR bstrNewVal) {
return This->lpVtbl->SetMSUpdate(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetMSOffer(ICOMLicenseAgent2* This,BSTR *pbstrVal) {
return This->lpVtbl->GetMSOffer(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetMSOffer(ICOMLicenseAgent2* This,BSTR bstrNewVal) {
return This->lpVtbl->SetMSOffer(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetOtherOffer(ICOMLicenseAgent2* This,BSTR *pbstrVal) {
return This->lpVtbl->GetOtherOffer(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetOtherOffer(ICOMLicenseAgent2* This,BSTR bstrNewVal) {
return This->lpVtbl->SetOtherOffer(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetAddress2(ICOMLicenseAgent2* This,BSTR *pbstrVal) {
return This->lpVtbl->GetAddress2(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetAddress2(ICOMLicenseAgent2* This,BSTR bstrNewVal) {
return This->lpVtbl->SetAddress2(This,bstrNewVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_AsyncProcessHandshakeRequest(ICOMLicenseAgent2* This,LONG bReviseCustInfo) {
return This->lpVtbl->AsyncProcessHandshakeRequest(This,bReviseCustInfo);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_AsyncProcessNewLicenseRequest(ICOMLicenseAgent2* This) {
return This->lpVtbl->AsyncProcessNewLicenseRequest(This);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_AsyncProcessReissueLicenseRequest(ICOMLicenseAgent2* This) {
return This->lpVtbl->AsyncProcessReissueLicenseRequest(This);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_AsyncProcessReviseCustInfoRequest(ICOMLicenseAgent2* This) {
return This->lpVtbl->AsyncProcessReviseCustInfoRequest(This);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetAsyncProcessReturnCode(ICOMLicenseAgent2* This,ULONG *pdwRetCode) {
return This->lpVtbl->GetAsyncProcessReturnCode(This,pdwRetCode);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_AsyncProcessDroppedLicenseRequest(ICOMLicenseAgent2* This) {
return This->lpVtbl->AsyncProcessDroppedLicenseRequest(This);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GenerateInstallationId(ICOMLicenseAgent2* This,BSTR *pbstrVal) {
return This->lpVtbl->GenerateInstallationId(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_DepositConfirmationId(ICOMLicenseAgent2* This,BSTR bstrVal,ULONG *pdwRetCode) {
return This->lpVtbl->DepositConfirmationId(This,bstrVal,pdwRetCode);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetExpirationInfo(ICOMLicenseAgent2* This,ULONG *pdwWPALeft,ULONG *pdwEvalLeft) {
return This->lpVtbl->GetExpirationInfo(This,pdwWPALeft,pdwEvalLeft);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_AsyncProcessRegistrationRequest(ICOMLicenseAgent2* This) {
return This->lpVtbl->AsyncProcessRegistrationRequest(This);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_ProcessHandshakeRequest(ICOMLicenseAgent2* This,LONG bReviseCustInfo) {
return This->lpVtbl->ProcessHandshakeRequest(This,bReviseCustInfo);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_ProcessNewLicenseRequest(ICOMLicenseAgent2* This) {
return This->lpVtbl->ProcessNewLicenseRequest(This);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_ProcessDroppedLicenseRequest(ICOMLicenseAgent2* This) {
return This->lpVtbl->ProcessDroppedLicenseRequest(This);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_ProcessReissueLicenseRequest(ICOMLicenseAgent2* This) {
return This->lpVtbl->ProcessReissueLicenseRequest(This);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_ProcessReviseCustInfoRequest(ICOMLicenseAgent2* This) {
return This->lpVtbl->ProcessReviseCustInfoRequest(This);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_EnsureInternetConnection(ICOMLicenseAgent2* This) {
return This->lpVtbl->EnsureInternetConnection(This);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetProductKey(ICOMLicenseAgent2* This,LPWSTR pszNewProductKey) {
return This->lpVtbl->SetProductKey(This,pszNewProductKey);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetProductID(ICOMLicenseAgent2* This,BSTR *pbstrVal) {
return This->lpVtbl->GetProductID(This,pbstrVal);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_VerifyCheckDigits(ICOMLicenseAgent2* This,BSTR bstrCIDIID,LONG *pbValue) {
return This->lpVtbl->VerifyCheckDigits(This,bstrCIDIID,pbValue);
}
/*** ICOMLicenseAgent2 methods ***/
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetReminders(ICOMLicenseAgent2* This,LONG bValue) {
return This->lpVtbl->SetReminders(This,bValue);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetReminders(ICOMLicenseAgent2* This,LONG *pbValue) {
return This->lpVtbl->GetReminders(This,pbValue);
}
static __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetKeyType(ICOMLicenseAgent2* This,ULONG *pdwKeyType) {
return This->lpVtbl->GetKeyType(This,pdwKeyType);
}
#endif
#endif
#endif
#endif /* __ICOMLicenseAgent2_INTERFACE_DEFINED__ */
#endif /* __LICDLLLib_LIBRARY_DEFINED__ */
/* Begin additional prototypes for all interfaces */
ULONG __RPC_USER BSTR_UserSize (ULONG *, ULONG, BSTR *);
unsigned char * __RPC_USER BSTR_UserMarshal (ULONG *, unsigned char *, BSTR *);
unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
void __RPC_USER BSTR_UserFree (ULONG *, BSTR *);
/* End additional prototypes */
#ifdef __cplusplus
}
#endif
#endif /* __licdll_h__ */
================================================
FILE: include/licdll.idl
================================================
import "oaidl.idl";
// Generated .IDL file (by the OLE/COM Object Viewer)
//
// typelib filename: licdll.dll
[
uuid(C7879482-F798-4A74-AF43-E887FBDCED40),
version(1.0),
helpstring("licdll 1.0 Type Library")
]
library LICDLLLib
{
// TLib : // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
importlib("stdole2.tlb");
// Forward declare all types defined in this typelib
interface ICOMLicenseAgent;
interface ICOMLicenseAgent2;
[
uuid(ACADF079-CBCD-4032-83F2-FA47C4DB096F),
helpstring("COMLicenseAgent Class")
]
coclass COMLicenseAgent {
[default] interface ICOMLicenseAgent;
interface ICOMLicenseAgent2;
};
[
odl,
uuid(B8CBAD79-3F1F-481A-BB0C-E7BBD77BDDD1),
helpstring("ICOMLicenseAgent Interface"),
dual,
oleautomation
]
interface ICOMLicenseAgent : IDispatch {
[id(0x00000001), helpstring("method Initialize")]
HRESULT Initialize(
[in] unsigned long dwBPC,
[in] unsigned long dwMode,
[in] BSTR bstrLicSource,
[out, retval] unsigned long* pdwRetCode);
[id(0x00000003), helpstring("method GetFirstName")]
HRESULT GetFirstName([out, retval] BSTR* pbstrVal);
[id(0x00000004), helpstring("method SetFirstName")]
HRESULT SetFirstName([in] BSTR bstrNewVal);
[id(0x00000005), helpstring("method GetLastName")]
HRESULT GetLastName([out, retval] BSTR* pbstrVal);
[id(0x00000006), helpstring("method SetLastName")]
HRESULT SetLastName([in] BSTR bstrNewVal);
[id(0x00000007), helpstring("method GetOrgName")]
HRESULT GetOrgName([out, retval] BSTR* pbstrVal);
[id(0x00000008), helpstring("method SetOrgName")]
HRESULT SetOrgName([in] BSTR bstrNewVal);
[id(0x00000009), helpstring("method GetEmail")]
HRESULT GetEmail([out, retval] BSTR* pbstrVal);
[id(0x0000000a), helpstring("method SetEmail")]
HRESULT SetEmail([in] BSTR bstrNewVal);
[id(0x0000000b), helpstring("method GetPhone")]
HRESULT GetPhone([out, retval] BSTR* pbstrVal);
[id(0x0000000c), helpstring("method SetPhone")]
HRESULT SetPhone([in] BSTR bstrNewVal);
[id(0x0000000d), helpstring("method GetAddress1")]
HRESULT GetAddress1([out, retval] BSTR* pbstrVal);
[id(0x0000000e), helpstring("method SetAddress1")]
HRESULT SetAddress1([in] BSTR bstrNewVal);
[id(0x0000000f), helpstring("method GetCity")]
HRESULT GetCity([out, retval] BSTR* pbstrVal);
[id(0x00000010), helpstring("method SetCity")]
HRESULT SetCity([in] BSTR bstrNewVal);
[id(0x00000011), helpstring("method GetState")]
HRESULT GetState([out, retval] BSTR* pbstrVal);
[id(0x00000012), helpstring("method SetState")]
HRESULT SetState([in] BSTR bstrNewVal);
[id(0x00000013), helpstring("method GetCountryCode")]
HRESULT GetCountryCode([out, retval] BSTR* pbstrVal);
[id(0x00000014), helpstring("method SetCountryCode")]
HRESULT SetCountryCode([in] BSTR bstrNewVal);
[id(0x00000015), helpstring("method GetCountryDesc")]
HRESULT GetCountryDesc([out, retval] BSTR* pbstrVal);
[id(0x00000016), helpstring("method SetCountryDesc")]
HRESULT SetCountryDesc([in] BSTR bstrNewVal);
[id(0x00000017), helpstring("method GetZip")]
HRESULT GetZip([out, retval] BSTR* pbstrVal);
[id(0x00000018), helpstring("method SetZip")]
HRESULT SetZip([in] BSTR bstrNewVal);
[id(0x00000019), helpstring("method GetIsoLanguage")]
HRESULT GetIsoLanguage([out, retval] unsigned long* pdwVal);
[id(0x0000001a), helpstring("method SetIsoLanguage")]
HRESULT SetIsoLanguage([in] unsigned long dwNewVal);
[id(0x00000020), helpstring("method GetMSUpdate")]
HRESULT GetMSUpdate([out, retval] BSTR* pbstrVal);
[id(0x00000021), helpstring("method SetMSUpdate")]
HRESULT SetMSUpdate([in] BSTR bstrNewVal);
[id(0x00000022), helpstring("method GetMSOffer")]
HRESULT GetMSOffer([out, retval] BSTR* pbstrVal);
[id(0x00000023), helpstring("method SetMSOffer")]
HRESULT SetMSOffer([in] BSTR bstrNewVal);
[id(0x00000024), helpstring("method GetOtherOffer")]
HRESULT GetOtherOffer([out, retval] BSTR* pbstrVal);
[id(0x00000025), helpstring("method SetOtherOffer")]
HRESULT SetOtherOffer([in] BSTR bstrNewVal);
[id(0x00000026), helpstring("method GetAddress2")]
HRESULT GetAddress2([out, retval] BSTR* pbstrVal);
[id(0x00000027), helpstring("method SetAddress2")]
HRESULT SetAddress2([in] BSTR bstrNewVal);
[id(0x00000052), helpstring("method AsyncProcessHandshakeRequest")]
HRESULT AsyncProcessHandshakeRequest([in] long bReviseCustInfo);
[id(0x00000053), helpstring("method AsyncProcessNewLicenseRequest")]
HRESULT AsyncProcessNewLicenseRequest();
[id(0x00000054), helpstring("method AsyncProcessReissueLicenseRequest")]
HRESULT AsyncProcessReissueLicenseRequest();
[id(0x00000056), helpstring("method AsyncProcessReviseCustInfoRequest")]
HRESULT AsyncProcessReviseCustInfoRequest();
[id(0x0000005a), helpstring("method GetAsyncProcessReturnCode")]
HRESULT GetAsyncProcessReturnCode([out, retval] unsigned long* pdwRetCode);
[id(0x0000005d), helpstring("method AsyncProcessDroppedLicenseRequest")]
HRESULT AsyncProcessDroppedLicenseRequest();
[id(0x00000064), helpstring("method GenerateInstallationId")]
HRESULT GenerateInstallationId([out, retval] BSTR* pbstrVal);
[id(0x00000065), helpstring("method DepositConfirmationId")]
HRESULT DepositConfirmationId(
[in] BSTR bstrVal,
[out, retval] unsigned long* pdwRetCode);
[id(0x00000066), helpstring("method GetExpirationInfo")]
HRESULT GetExpirationInfo(
[out] unsigned long* pdwWPALeft,
[out, retval] unsigned long* pdwEvalLeft);
[id(0x00000067), helpstring("method AsyncProcessRegistrationRequest")]
HRESULT AsyncProcessRegistrationRequest();
[id(0x00000068), helpstring("method ProcessHandshakeRequest")]
HRESULT ProcessHandshakeRequest([in] long bReviseCustInfo);
[id(0x00000069), helpstring("method ProcessNewLicenseRequest")]
HRESULT ProcessNewLicenseRequest();
[id(0x0000006a), helpstring("method ProcessDroppedLicenseRequest")]
HRESULT ProcessDroppedLicenseRequest();
[id(0x0000006b), helpstring("method ProcessReissueLicenseRequest")]
HRESULT ProcessReissueLicenseRequest();
[id(0x0000006d), helpstring("method ProcessReviseCustInfoRequest")]
HRESULT ProcessReviseCustInfoRequest();
[id(0x0000006e), helpstring("method EnsureInternetConnection")]
HRESULT EnsureInternetConnection();
[id(0x0000006f), helpstring("method SetProductKey")]
HRESULT SetProductKey([in] LPWSTR pszNewProductKey);
[id(0x00000070), helpstring("method GetProductID")]
HRESULT GetProductID([out, retval] BSTR* pbstrVal);
[id(0x00000071), helpstring("method VerifyCheckDigits")]
HRESULT VerifyCheckDigits(
BSTR bstrCIDIID,
[out, retval] long* pbValue);
};
[
odl,
uuid(6A07C5A3-9C67-4BB6-B020-ECBE7FDFD326),
helpstring("ICOMLicenseAgent Interface 2"),
dual,
oleautomation
]
interface ICOMLicenseAgent2 : ICOMLicenseAgent {
[id(0x00000072), helpstring("method SetReminders")]
HRESULT SetReminders(long bValue);
[id(0x00000073), helpstring("method GetReminders")]
HRESULT GetReminders(long* pbValue);
[id(0x00000074), helpstring("method GetKeyType")]
HRESULT GetKeyType([out, retval] unsigned long* pdwKeyType);
};
};
================================================
FILE: include/nsis/api.h
================================================
/*
* apih
*
* This file is a part of NSIS.
*
* Copyright (C) 1999-2023 Nullsoft and Contributors
*
* Licensed under the zlib/libpng license (the "License");
* you may not use this file except in compliance with the License.
*
* Licence details can be found in the file COPYING.
*
* This software is provided 'as-is', without any express or implied
* warranty.
*/
#ifndef _NSIS_EXEHEAD_API_H_
#define _NSIS_EXEHEAD_API_H_
// Starting with NSIS 2.42, you can check the version of the plugin API in exec_flags->plugin_api_version
// The format is 0xXXXXYYYY where X is the major version and Y is the minor version (MAKELONG(y,x))
// When doing version checks, always remember to use >=, ex: if (pX->exec_flags->plugin_api_version >= NSISPIAPIVER_1_0) {}
#define NSISPIAPIVER_1_0 0x00010000
#define NSISPIAPIVER_CURR NSISPIAPIVER_1_0
// NSIS Plug-In Callback Messages
enum NSPIM
{
NSPIM_UNLOAD, // This is the last message a plugin gets, do final cleanup
NSPIM_GUIUNLOAD, // Called after .onGUIEnd
};
// Prototype for callbacks registered with extra_parameters->RegisterPluginCallback()
// Return NULL for unknown messages
// Should always be __cdecl for future expansion possibilities
typedef UINT_PTR (*NSISPLUGINCALLBACK)(enum NSPIM);
// extra_parameters data structure containing other interesting stuff
// besides the stack, variables and HWND passed on to plug-ins.
typedef struct
{
int autoclose; // SetAutoClose
int all_user_var; // SetShellVarContext: User context = 0, Machine context = 1
int exec_error; // IfErrors/ClearErrors/SetErrors
int abort; // IfAbort
int exec_reboot; // IfRebootFlag/SetRebootFlag (NSIS_SUPPORT_REBOOT)
int reboot_called; // NSIS_SUPPORT_REBOOT
int XXX_cur_insttype; // Deprecated
int plugin_api_version; // Plug-in ABI. See NSISPIAPIVER_CURR (Note: used to be XXX_insttype_changed)
int silent; // IfSilent/SetSilent (NSIS_CONFIG_SILENT_SUPPORT)
int instdir_error; // GetInstDirError
int rtl; // IfRtlLanguage: 1 if $LANGUAGE is a RTL language
int errlvl; // SetErrorLevel
int alter_reg_view; // SetRegView: Default View = 0, Alternative View = (sizeof(void*) > 4 ? KEY_WOW64_32KEY : KEY_WOW64_64KEY)
int status_update; // SetDetailsPrint
} exec_flags_t;
#ifndef NSISCALL
# define NSISCALL __stdcall
#endif
#if !defined(_WIN32) && !defined(LPTSTR)
# define LPTSTR TCHAR*
#endif
typedef struct {
exec_flags_t *exec_flags;
int (NSISCALL *ExecuteCodeSegment)(int, HWND);
void (NSISCALL *validate_filename)(LPTSTR);
int (NSISCALL *RegisterPluginCallback)(HMODULE, NSISPLUGINCALLBACK); // returns 0 on success, 1 if already registered and < 0 on errors
} extra_parameters;
// Definitions for page showing plug-ins
// See Ui.c to understand better how they're used
// sent to the outer window to tell it to go to the next inner window
#define WM_NOTIFY_OUTER_NEXT (WM_USER+0x8)
// custom pages should send this message to let NSIS know they're ready
#define WM_NOTIFY_CUSTOM_READY (WM_USER+0xd)
// sent as wParam with WM_NOTIFY_OUTER_NEXT when user cancels - heed its warning
#define NOTIFY_BYE_BYE 'x'
#endif /* _NSIS_EXEHEAD_API_H_ */
================================================
FILE: include/nsis/nsis_tchar.h
================================================
/*
* nsis_tchar.h
*
* This file is a part of NSIS.
*
* Copyright (C) 1999-2023 Nullsoft and Contributors
*
* This software is provided 'as-is', without any express or implied
* warranty.
*
* For Unicode support by Jim Park -- 08/30/2007
*/
// Jim Park: Only those we use are listed here.
#pragma once
#ifdef _UNICODE
#ifndef _T
#define __T(x) L ## x
#define _T(x) __T(x)
#define _TEXT(x) __T(x)
#endif
#ifndef _TCHAR_DEFINED
#define _TCHAR_DEFINED
#if !defined(_NATIVE_WCHAR_T_DEFINED) && !defined(_WCHAR_T_DEFINED)
typedef unsigned short TCHAR;
#else
typedef wchar_t TCHAR;
#endif
#endif
// program
#define _tenviron _wenviron
#define __targv __wargv
// printfs
#define _ftprintf fwprintf
#define _sntprintf _snwprintf
#if (defined(_MSC_VER) && (_MSC_VER<=1310||_MSC_FULL_VER<=140040310)) || defined(__MINGW32__)
# define _stprintf swprintf
#else
# define _stprintf _swprintf
#endif
#define _tprintf wprintf
#define _vftprintf vfwprintf
#define _vsntprintf _vsnwprintf
#if defined(_MSC_VER) && (_MSC_VER<=1310)
# define _vstprintf vswprintf
#else
# define _vstprintf _vswprintf
#endif
// scanfs
#define _tscanf wscanf
#define _stscanf swscanf
// string manipulations
#define _tcscat wcscat
#define _tcschr wcschr
#define _tcsclen wcslen
#define _tcscpy wcscpy
#define _tcsdup _wcsdup
#define _tcslen wcslen
#define _tcsnccpy wcsncpy
#define _tcsncpy wcsncpy
#define _tcsrchr wcsrchr
#define _tcsstr wcsstr
#define _tcstok wcstok
// string comparisons
#define _tcscmp wcscmp
#define _tcsicmp _wcsicmp
#define _tcsncicmp _wcsnicmp
#define _tcsncmp wcsncmp
#define _tcsnicmp _wcsnicmp
// upper / lower
#define _tcslwr _wcslwr
#define _tcsupr _wcsupr
#define _totlower towlower
#define _totupper towupper
// conversions to numbers
#define _tcstoi64 _wcstoi64
#define _tcstol wcstol
#define _tcstoul wcstoul
#define _tstof _wtof
#define _tstoi _wtoi
#define _tstoi64 _wtoi64
#define _ttoi _wtoi
#define _ttoi64 _wtoi64
#define _ttol _wtol
// conversion from numbers to strings
#define _itot _itow
#define _ltot _ltow
#define _i64tot _i64tow
#define _ui64tot _ui64tow
// file manipulations
#define _tfopen _wfopen
#define _topen _wopen
#define _tremove _wremove
#define _tunlink _wunlink
// reading and writing to i/o
#define _fgettc fgetwc
#define _fgetts fgetws
#define _fputts fputws
#define _gettchar getwchar
// directory
#define _tchdir _wchdir
// environment
#define _tgetenv _wgetenv
#define _tsystem _wsystem
// time
#define _tcsftime wcsftime
#else // ANSI
#ifndef _T
#define _T(x) x
#define _TEXT(x) x
#endif
#ifndef _TCHAR_DEFINED
#define _TCHAR_DEFINED
typedef char TCHAR;
#endif
// program
#define _tenviron environ
#define __targv __argv
// printfs
#define _ftprintf fprintf
#define _sntprintf _snprintf
#define _stprintf sprintf
#define _tprintf printf
#define _vftprintf vfprintf
#define _vsntprintf _vsnprintf
#define _vstprintf vsprintf
// scanfs
#define _tscanf scanf
#define _stscanf sscanf
// string manipulations
#define _tcscat strcat
#define _tcschr strchr
#define _tcsclen strlen
#define _tcscnlen strnlen
#define _tcscpy strcpy
#define _tcsdup _strdup
#define _tcslen strlen
#define _tcsnccpy strncpy
#define _tcsrchr strrchr
#define _tcsstr strstr
#define _tcstok strtok
// string comparisons
#define _tcscmp strcmp
#define _tcsicmp _stricmp
#define _tcsncmp strncmp
#define _tcsncicmp _strnicmp
#define _tcsnicmp _strnicmp
// upper / lower
#define _tcslwr _strlwr
#define _tcsupr _strupr
#define _totupper toupper
#define _totlower tolower
// conversions to numbers
#define _tcstol strtol
#define _tcstoul strtoul
#define _tstof atof
#define _tstoi atoi
#define _tstoi64 _atoi64
#define _tstoi64 _atoi64
#define _ttoi atoi
#define _ttoi64 _atoi64
#define _ttol atol
// conversion from numbers to strings
#define _i64tot _i64toa
#define _itot _itoa
#define _ltot _ltoa
#define _ui64tot _ui64toa
// file manipulations
#define _tfopen fopen
#define _topen _open
#define _tremove remove
#define _tunlink _unlink
// reading and writing to i/o
#define _fgettc fgetc
#define _fgetts fgets
#define _fputts fputs
#define _gettchar getchar
// directory
#define _tchdir _chdir
// environment
#define _tgetenv getenv
#define _tsystem system
// time
#define _tcsftime strftime
#endif
// is functions (the same in Unicode / ANSI)
#define _istgraph isgraph
#define _istascii __isascii
#define __TFILE__ _T(__FILE__)
#define __TDATE__ _T(__DATE__)
#define __TTIME__ _T(__TIME__)
================================================
FILE: include/nsis/pluginapi.c
================================================
#include
#include "pluginapi.h"
#ifndef COUNTOF
#define COUNTOF(a) (sizeof(a)/sizeof(a[0]))
#endif
// minimal tchar.h emulation
#ifndef _T
# define _T TEXT
#endif
#if !defined(TCHAR) && !defined(_TCHAR_DEFINED)
# ifdef UNICODE
# define TCHAR WCHAR
# else
# define TCHAR char
# endif
#endif
#define isvalidnsisvarindex(varnum) ( ((unsigned int)(varnum)) < (__INST_LAST) )
unsigned int g_stringsize;
stack_t **g_stacktop;
LPTSTR g_variables;
// utility functions (not required but often useful)
int NSISCALL popstring(LPTSTR str)
{
stack_t *th;
if (!g_stacktop || !*g_stacktop) return 1;
th=(*g_stacktop);
if (str) lstrcpy(str,th->text);
*g_stacktop = th->next;
GlobalFree((HGLOBAL)th);
return 0;
}
int NSISCALL popstringn(LPTSTR str, int maxlen)
{
stack_t *th;
if (!g_stacktop || !*g_stacktop) return 1;
th=(*g_stacktop);
if (str) lstrcpyn(str,th->text,maxlen?maxlen:(int)g_stringsize);
*g_stacktop = th->next;
GlobalFree((HGLOBAL)th);
return 0;
}
void NSISCALL pushstring(LPCTSTR str)
{
stack_t *th;
if (!g_stacktop) return;
th=(stack_t*)GlobalAlloc(GPTR,(sizeof(stack_t)+(g_stringsize)*sizeof(*str)));
lstrcpyn(th->text,str,g_stringsize);
th->next=*g_stacktop;
*g_stacktop=th;
}
LPTSTR NSISCALL getuservariable(const int varnum)
{
if (!isvalidnsisvarindex(varnum)) return NULL;
return g_variables+varnum*g_stringsize;
}
void NSISCALL setuservariable(const int varnum, LPCTSTR var)
{
if (var && isvalidnsisvarindex(varnum))
lstrcpy(g_variables + varnum*g_stringsize, var);
}
#ifdef UNICODE
int NSISCALL PopStringA(LPSTR ansiStr)
{
LPWSTR wideStr = (LPWSTR) GlobalAlloc(GPTR, g_stringsize*sizeof(WCHAR));
int rval = popstring(wideStr);
WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);
GlobalFree((HGLOBAL)wideStr);
return rval;
}
int NSISCALL PopStringNA(LPSTR ansiStr, int maxlen)
{
int realLen = maxlen ? maxlen : (int)g_stringsize;
LPWSTR wideStr = (LPWSTR) GlobalAlloc(GPTR, realLen*sizeof(WCHAR));
int rval = popstringn(wideStr, realLen);
WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, realLen, NULL, NULL);
GlobalFree((HGLOBAL)wideStr);
return rval;
}
void NSISCALL PushStringA(LPCSTR ansiStr)
{
LPWSTR wideStr = (LPWSTR) GlobalAlloc(GPTR, g_stringsize*sizeof(WCHAR));
MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);
pushstring(wideStr);
GlobalFree((HGLOBAL)wideStr);
return;
}
void NSISCALL GetUserVariableW(const int varnum, LPWSTR wideStr)
{
lstrcpyW(wideStr, getuservariable(varnum));
}
void NSISCALL GetUserVariableA(const int varnum, LPSTR ansiStr)
{
LPWSTR wideStr = getuservariable(varnum);
WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);
}
void NSISCALL SetUserVariableA(const int varnum, LPCSTR ansiStr)
{
if (ansiStr && isvalidnsisvarindex(varnum))
{
LPWSTR wideStr = g_variables + varnum * g_stringsize;
MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);
}
}
#else
// ANSI defs
int NSISCALL PopStringW(LPWSTR wideStr)
{
LPSTR ansiStr = (LPSTR) GlobalAlloc(GPTR, g_stringsize);
int rval = popstring(ansiStr);
MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);
GlobalFree((HGLOBAL)ansiStr);
return rval;
}
int NSISCALL PopStringNW(LPWSTR wideStr, int maxlen)
{
int realLen = maxlen ? maxlen : g_stringsize;
LPSTR ansiStr = (LPSTR) GlobalAlloc(GPTR, realLen);
int rval = popstringn(ansiStr, realLen);
MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, realLen);
GlobalFree((HGLOBAL)ansiStr);
return rval;
}
void NSISCALL PushStringW(LPWSTR wideStr)
{
LPSTR ansiStr = (LPSTR) GlobalAlloc(GPTR, g_stringsize);
WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);
pushstring(ansiStr);
GlobalFree((HGLOBAL)ansiStr);
}
void NSISCALL GetUserVariableW(const int varnum, LPWSTR wideStr)
{
LPSTR ansiStr = getuservariable(varnum);
MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);
}
void NSISCALL GetUserVariableA(const int varnum, LPSTR ansiStr)
{
lstrcpyA(ansiStr, getuservariable(varnum));
}
void NSISCALL SetUserVariableW(const int varnum, LPCWSTR wideStr)
{
if (wideStr && isvalidnsisvarindex(varnum))
{
LPSTR ansiStr = g_variables + varnum * g_stringsize;
WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);
}
}
#endif
// playing with integers
INT_PTR NSISCALL nsishelper_str_to_ptr(LPCTSTR s)
{
INT_PTR v=0;
if (*s == _T('0') && (s[1] == _T('x') || s[1] == _T('X')))
{
s++;
for (;;)
{
int c=*(++s);
if (c >= _T('0') && c <= _T('9')) c-=_T('0');
else if (c >= _T('a') && c <= _T('f')) c-=_T('a')-10;
else if (c >= _T('A') && c <= _T('F')) c-=_T('A')-10;
else break;
v<<=4;
v+=c;
}
}
else if (*s == _T('0') && s[1] <= _T('7') && s[1] >= _T('0'))
{
for (;;)
{
int c=*(++s);
if (c >= _T('0') && c <= _T('7')) c-=_T('0');
else break;
v<<=3;
v+=c;
}
}
else
{
int sign=0;
if (*s == _T('-')) sign++; else s--;
for (;;)
{
int c=*(++s) - _T('0');
if (c < 0 || c > 9) break;
v*=10;
v+=c;
}
if (sign) v = -v;
}
return v;
}
unsigned int NSISCALL myatou(LPCTSTR s)
{
unsigned int v=0;
for (;;)
{
unsigned int c=*s++;
if (c >= _T('0') && c <= _T('9')) c-=_T('0');
else break;
v*=10;
v+=c;
}
return v;
}
int NSISCALL myatoi_or(LPCTSTR s)
{
int v=0;
if (*s == _T('0') && (s[1] == _T('x') || s[1] == _T('X')))
{
s++;
for (;;)
{
int c=*(++s);
if (c >= _T('0') && c <= _T('9')) c-=_T('0');
else if (c >= _T('a') && c <= _T('f')) c-=_T('a')-10;
else if (c >= _T('A') && c <= _T('F')) c-=_T('A')-10;
else break;
v<<=4;
v+=c;
}
}
else if (*s == _T('0') && s[1] <= _T('7') && s[1] >= _T('0'))
{
for (;;)
{
int c=*(++s);
if (c >= _T('0') && c <= _T('7')) c-=_T('0');
else break;
v<<=3;
v+=c;
}
}
else
{
int sign=0;
if (*s == _T('-')) sign++; else s--;
for (;;)
{
int c=*(++s) - _T('0');
if (c < 0 || c > 9) break;
v*=10;
v+=c;
}
if (sign) v = -v;
}
// Support for simple ORed expressions
if (*s == _T('|'))
{
v |= myatoi_or(s+1);
}
return v;
}
INT_PTR NSISCALL popintptr(void)
{
TCHAR buf[128];
if (popstringn(buf,COUNTOF(buf)))
return 0;
return nsishelper_str_to_ptr(buf);
}
int NSISCALL popint_or(void)
{
TCHAR buf[128];
if (popstringn(buf,COUNTOF(buf)))
return 0;
return myatoi_or(buf);
}
void NSISCALL pushintptr(INT_PTR value)
{
TCHAR buffer[30];
wsprintf(buffer, sizeof(void*) > 4 ? _T("%Id") : _T("%d"), value);
pushstring(buffer);
}
================================================
FILE: include/nsis/pluginapi.h
================================================
#ifndef ___NSIS_PLUGIN__H___
#define ___NSIS_PLUGIN__H___
#ifdef __cplusplus
extern "C" {
#endif
#include "api.h"
#include "nsis_tchar.h" // BUGBUG: Why cannot our plugins use the compilers tchar.h?
#ifndef NSISCALL
# define NSISCALL WINAPI
#endif
#define EXDLL_INIT() { \
g_stringsize=string_size; \
g_stacktop=stacktop; \
g_variables=variables; }
typedef struct _stack_t {
struct _stack_t *next;
#ifdef UNICODE
WCHAR text[1]; // this should be the length of g_stringsize when allocating
#else
char text[1];
#endif
} stack_t;
enum
{
INST_0, // $0
INST_1, // $1
INST_2, // $2
INST_3, // $3
INST_4, // $4
INST_5, // $5
INST_6, // $6
INST_7, // $7
INST_8, // $8
INST_9, // $9
INST_R0, // $R0
INST_R1, // $R1
INST_R2, // $R2
INST_R3, // $R3
INST_R4, // $R4
INST_R5, // $R5
INST_R6, // $R6
INST_R7, // $R7
INST_R8, // $R8
INST_R9, // $R9
INST_CMDLINE, // $CMDLINE
INST_INSTDIR, // $INSTDIR
INST_OUTDIR, // $OUTDIR
INST_EXEDIR, // $EXEDIR
INST_LANG, // $LANGUAGE
__INST_LAST
};
extern unsigned int g_stringsize;
extern stack_t **g_stacktop;
extern LPTSTR g_variables;
void NSISCALL pushstring(LPCTSTR str);
void NSISCALL pushintptr(INT_PTR value);
#define pushint(v) pushintptr((INT_PTR)(v))
int NSISCALL popstring(LPTSTR str); // 0 on success, 1 on empty stack
int NSISCALL popstringn(LPTSTR str, int maxlen); // with length limit, pass 0 for g_stringsize
INT_PTR NSISCALL popintptr(void);
#define popint() ( (int) popintptr() )
int NSISCALL popint_or(void); // with support for or'ing (2|4|8)
INT_PTR NSISCALL nsishelper_str_to_ptr(LPCTSTR s);
#define myatoi(s) ( (int) nsishelper_str_to_ptr(s) ) // converts a string to an integer
unsigned int NSISCALL myatou(LPCTSTR s); // converts a string to an unsigned integer, decimal only
int NSISCALL myatoi_or(LPCTSTR s); // with support for or'ing (2|4|8)
LPTSTR NSISCALL getuservariable(const int varnum);
void NSISCALL setuservariable(const int varnum, LPCTSTR var);
#ifdef UNICODE
#define PopStringW(x) popstring(x)
#define PushStringW(x) pushstring(x)
#define SetUserVariableW(x,y) setuservariable(x,y)
int NSISCALL PopStringA(LPSTR ansiStr);
void NSISCALL PushStringA(LPCSTR ansiStr);
void NSISCALL GetUserVariableW(const int varnum, LPWSTR wideStr);
void NSISCALL GetUserVariableA(const int varnum, LPSTR ansiStr);
void NSISCALL SetUserVariableA(const int varnum, LPCSTR ansiStr);
#else
// ANSI defs
#define PopStringA(x) popstring(x)
#define PushStringA(x) pushstring(x)
#define SetUserVariableA(x,y) setuservariable(x,y)
int NSISCALL PopStringW(LPWSTR wideStr);
void NSISCALL PushStringW(LPWSTR wideStr);
void NSISCALL GetUserVariableW(const int varnum, LPWSTR wideStr);
void NSISCALL GetUserVariableA(const int varnum, LPSTR ansiStr);
void NSISCALL SetUserVariableW(const int varnum, LPCWSTR wideStr);
#endif
#ifdef __cplusplus
}
#endif
#endif//!___NSIS_PLUGIN__H___
================================================
FILE: include/slpublic.h
================================================
#pragma once
#include
#ifdef __cplusplus
extern "C" {
#endif
typedef GUID SLID;
typedef PVOID HSLC;
DEFINE_GUID(WINDOWS_SLID, 0x55c92734, 0xd682, 0x4d71, 0x98, 0x3e, 0xd6, 0xec, 0x3f, 0x16, 0x05, 0x9f);
typedef enum _tagSLLICENSINGSTATUS {
SL_LICENSING_STATUS_UNLICENSED,
SL_LICENSING_STATUS_LICENSED,
SL_LICENSING_STATUS_IN_GRACE_PERIOD,
SL_LICENSING_STATUS_NOTIFICATION,
SL_LICENSING_STATUS_LAST
} SLLICENSINGSTATUS;
typedef struct _tagSL_LICENSING_STATUS {
SLID SkuId;
SLLICENSINGSTATUS eStatus;
DWORD dwGraceTime;
DWORD dwTotalGraceDays;
HRESULT hrReason;
UINT64 qwValidityExpiration;
} SL_LICENSING_STATUS;
#ifdef __cplusplus
}
#endif
================================================
FILE: include/wuapi.h
================================================
/* this ALWAYS GENERATED file contains the definitions for the interfaces */
/* File created by MIDL compiler version 7.00.0555 */
/* Compiler settings for wuapi.idl:
Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
protocol : dce , ms_ext, c_ext, robust
error checks: allocation ref bounds_check enum stub_data
VC __declspec() decoration level:
__declspec(uuid()), __declspec(selectany), __declspec(novtable)
DECLSPEC_UUID(), MIDL_INTERFACE()
*/
/* @@MIDL_FILE_HEADING( ) */
#pragma warning( disable: 4049 ) /* more than 64k source lines */
/* verify that the version is high enough to compile this file*/
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
/* verify that the version is high enough to compile this file*/
#ifndef __REQUIRED_RPCSAL_H_VERSION__
#define __REQUIRED_RPCSAL_H_VERSION__ 100
#endif
#include "rpc.h"
#include "rpcndr.h"
#ifndef __RPCNDR_H_VERSION__
#error this stub requires an updated version of
#endif // __RPCNDR_H_VERSION__
#ifndef COM_NO_WINDOWS_H
#include "windows.h"
#include "ole2.h"
#endif /*COM_NO_WINDOWS_H*/
#ifndef __wuapi_h__
#define __wuapi_h__
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
#pragma once
#endif
/* Forward Declarations */
#ifndef __IUpdateLockdown_FWD_DEFINED__
#define __IUpdateLockdown_FWD_DEFINED__
typedef interface IUpdateLockdown IUpdateLockdown;
#endif /* __IUpdateLockdown_FWD_DEFINED__ */
#ifndef __IStringCollection_FWD_DEFINED__
#define __IStringCollection_FWD_DEFINED__
typedef interface IStringCollection IStringCollection;
#endif /* __IStringCollection_FWD_DEFINED__ */
#ifndef __IWebProxy_FWD_DEFINED__
#define __IWebProxy_FWD_DEFINED__
typedef interface IWebProxy IWebProxy;
#endif /* __IWebProxy_FWD_DEFINED__ */
#ifndef __ISystemInformation_FWD_DEFINED__
#define __ISystemInformation_FWD_DEFINED__
typedef interface ISystemInformation ISystemInformation;
#endif /* __ISystemInformation_FWD_DEFINED__ */
#ifndef __IWindowsUpdateAgentInfo_FWD_DEFINED__
#define __IWindowsUpdateAgentInfo_FWD_DEFINED__
typedef interface IWindowsUpdateAgentInfo IWindowsUpdateAgentInfo;
#endif /* __IWindowsUpdateAgentInfo_FWD_DEFINED__ */
#ifndef __IAutomaticUpdatesResults_FWD_DEFINED__
#define __IAutomaticUpdatesResults_FWD_DEFINED__
typedef interface IAutomaticUpdatesResults IAutomaticUpdatesResults;
#endif /* __IAutomaticUpdatesResults_FWD_DEFINED__ */
#ifndef __IAutomaticUpdatesSettings_FWD_DEFINED__
#define __IAutomaticUpdatesSettings_FWD_DEFINED__
typedef interface IAutomaticUpdatesSettings IAutomaticUpdatesSettings;
#endif /* __IAutomaticUpdatesSettings_FWD_DEFINED__ */
#ifndef __IAutomaticUpdatesSettings2_FWD_DEFINED__
#define __IAutomaticUpdatesSettings2_FWD_DEFINED__
typedef interface IAutomaticUpdatesSettings2 IAutomaticUpdatesSettings2;
#endif /* __IAutomaticUpdatesSettings2_FWD_DEFINED__ */
#ifndef __IAutomaticUpdatesSettings3_FWD_DEFINED__
#define __IAutomaticUpdatesSettings3_FWD_DEFINED__
typedef interface IAutomaticUpdatesSettings3 IAutomaticUpdatesSettings3;
#endif /* __IAutomaticUpdatesSettings3_FWD_DEFINED__ */
#ifndef __IAutomaticUpdates_FWD_DEFINED__
#define __IAutomaticUpdates_FWD_DEFINED__
typedef interface IAutomaticUpdates IAutomaticUpdates;
#endif /* __IAutomaticUpdates_FWD_DEFINED__ */
#ifndef __IAutomaticUpdates2_FWD_DEFINED__
#define __IAutomaticUpdates2_FWD_DEFINED__
typedef interface IAutomaticUpdates2 IAutomaticUpdates2;
#endif /* __IAutomaticUpdates2_FWD_DEFINED__ */
#ifndef __IUpdateIdentity_FWD_DEFINED__
#define __IUpdateIdentity_FWD_DEFINED__
typedef interface IUpdateIdentity IUpdateIdentity;
#endif /* __IUpdateIdentity_FWD_DEFINED__ */
#ifndef __IImageInformation_FWD_DEFINED__
#define __IImageInformation_FWD_DEFINED__
typedef interface IImageInformation IImageInformation;
#endif /* __IImageInformation_FWD_DEFINED__ */
#ifndef __ICategory_FWD_DEFINED__
#define __ICategory_FWD_DEFINED__
typedef interface ICategory ICategory;
#endif /* __ICategory_FWD_DEFINED__ */
#ifndef __ICategoryCollection_FWD_DEFINED__
#define __ICategoryCollection_FWD_DEFINED__
typedef interface ICategoryCollection ICategoryCollection;
#endif /* __ICategoryCollection_FWD_DEFINED__ */
#ifndef __IInstallationBehavior_FWD_DEFINED__
#define __IInstallationBehavior_FWD_DEFINED__
typedef interface IInstallationBehavior IInstallationBehavior;
#endif /* __IInstallationBehavior_FWD_DEFINED__ */
#ifndef __IUpdateDownloadContent_FWD_DEFINED__
#define __IUpdateDownloadContent_FWD_DEFINED__
typedef interface IUpdateDownloadContent IUpdateDownloadContent;
#endif /* __IUpdateDownloadContent_FWD_DEFINED__ */
#ifndef __IUpdateDownloadContent2_FWD_DEFINED__
#define __IUpdateDownloadContent2_FWD_DEFINED__
typedef interface IUpdateDownloadContent2 IUpdateDownloadContent2;
#endif /* __IUpdateDownloadContent2_FWD_DEFINED__ */
#ifndef __IUpdateDownloadContentCollection_FWD_DEFINED__
#define __IUpdateDownloadContentCollection_FWD_DEFINED__
typedef interface IUpdateDownloadContentCollection IUpdateDownloadContentCollection;
#endif /* __IUpdateDownloadContentCollection_FWD_DEFINED__ */
#ifndef __IUpdate_FWD_DEFINED__
#define __IUpdate_FWD_DEFINED__
typedef interface IUpdate IUpdate;
#endif /* __IUpdate_FWD_DEFINED__ */
#ifndef __IWindowsDriverUpdate_FWD_DEFINED__
#define __IWindowsDriverUpdate_FWD_DEFINED__
typedef interface IWindowsDriverUpdate IWindowsDriverUpdate;
#endif /* __IWindowsDriverUpdate_FWD_DEFINED__ */
#ifndef __IUpdate2_FWD_DEFINED__
#define __IUpdate2_FWD_DEFINED__
typedef interface IUpdate2 IUpdate2;
#endif /* __IUpdate2_FWD_DEFINED__ */
#ifndef __IUpdate3_FWD_DEFINED__
#define __IUpdate3_FWD_DEFINED__
typedef interface IUpdate3 IUpdate3;
#endif /* __IUpdate3_FWD_DEFINED__ */
#ifndef __IUpdate4_FWD_DEFINED__
#define __IUpdate4_FWD_DEFINED__
typedef interface IUpdate4 IUpdate4;
#endif /* __IUpdate4_FWD_DEFINED__ */
#ifndef __IUpdate5_FWD_DEFINED__
#define __IUpdate5_FWD_DEFINED__
typedef interface IUpdate5 IUpdate5;
#endif /* __IUpdate5_FWD_DEFINED__ */
#ifndef __IWindowsDriverUpdate2_FWD_DEFINED__
#define __IWindowsDriverUpdate2_FWD_DEFINED__
typedef interface IWindowsDriverUpdate2 IWindowsDriverUpdate2;
#endif /* __IWindowsDriverUpdate2_FWD_DEFINED__ */
#ifndef __IWindowsDriverUpdate3_FWD_DEFINED__
#define __IWindowsDriverUpdate3_FWD_DEFINED__
typedef interface IWindowsDriverUpdate3 IWindowsDriverUpdate3;
#endif /* __IWindowsDriverUpdate3_FWD_DEFINED__ */
#ifndef __IWindowsDriverUpdateEntry_FWD_DEFINED__
#define __IWindowsDriverUpdateEntry_FWD_DEFINED__
typedef interface IWindowsDriverUpdateEntry IWindowsDriverUpdateEntry;
#endif /* __IWindowsDriverUpdateEntry_FWD_DEFINED__ */
#ifndef __IWindowsDriverUpdateEntryCollection_FWD_DEFINED__
#define __IWindowsDriverUpdateEntryCollection_FWD_DEFINED__
typedef interface IWindowsDriverUpdateEntryCollection IWindowsDriverUpdateEntryCollection;
#endif /* __IWindowsDriverUpdateEntryCollection_FWD_DEFINED__ */
#ifndef __IWindowsDriverUpdate4_FWD_DEFINED__
#define __IWindowsDriverUpdate4_FWD_DEFINED__
typedef interface IWindowsDriverUpdate4 IWindowsDriverUpdate4;
#endif /* __IWindowsDriverUpdate4_FWD_DEFINED__ */
#ifndef __IWindowsDriverUpdate5_FWD_DEFINED__
#define __IWindowsDriverUpdate5_FWD_DEFINED__
typedef interface IWindowsDriverUpdate5 IWindowsDriverUpdate5;
#endif /* __IWindowsDriverUpdate5_FWD_DEFINED__ */
#ifndef __IUpdateCollection_FWD_DEFINED__
#define __IUpdateCollection_FWD_DEFINED__
typedef interface IUpdateCollection IUpdateCollection;
#endif /* __IUpdateCollection_FWD_DEFINED__ */
#ifndef __IUpdateException_FWD_DEFINED__
#define __IUpdateException_FWD_DEFINED__
typedef interface IUpdateException IUpdateException;
#endif /* __IUpdateException_FWD_DEFINED__ */
#ifndef __IInvalidProductLicenseException_FWD_DEFINED__
#define __IInvalidProductLicenseException_FWD_DEFINED__
typedef interface IInvalidProductLicenseException IInvalidProductLicenseException;
#endif /* __IInvalidProductLicenseException_FWD_DEFINED__ */
#ifndef __IUpdateExceptionCollection_FWD_DEFINED__
#define __IUpdateExceptionCollection_FWD_DEFINED__
typedef interface IUpdateExceptionCollection IUpdateExceptionCollection;
#endif /* __IUpdateExceptionCollection_FWD_DEFINED__ */
#ifndef __ISearchResult_FWD_DEFINED__
#define __ISearchResult_FWD_DEFINED__
typedef interface ISearchResult ISearchResult;
#endif /* __ISearchResult_FWD_DEFINED__ */
#ifndef __ISearchJob_FWD_DEFINED__
#define __ISearchJob_FWD_DEFINED__
typedef interface ISearchJob ISearchJob;
#endif /* __ISearchJob_FWD_DEFINED__ */
#ifndef __ISearchCompletedCallbackArgs_FWD_DEFINED__
#define __ISearchCompletedCallbackArgs_FWD_DEFINED__
typedef interface ISearchCompletedCallbackArgs ISearchCompletedCallbackArgs;
#endif /* __ISearchCompletedCallbackArgs_FWD_DEFINED__ */
#ifndef __ISearchCompletedCallback_FWD_DEFINED__
#define __ISearchCompletedCallback_FWD_DEFINED__
typedef interface ISearchCompletedCallback ISearchCompletedCallback;
#endif /* __ISearchCompletedCallback_FWD_DEFINED__ */
#ifndef __IUpdateHistoryEntry_FWD_DEFINED__
#define __IUpdateHistoryEntry_FWD_DEFINED__
typedef interface IUpdateHistoryEntry IUpdateHistoryEntry;
#endif /* __IUpdateHistoryEntry_FWD_DEFINED__ */
#ifndef __IUpdateHistoryEntry2_FWD_DEFINED__
#define __IUpdateHistoryEntry2_FWD_DEFINED__
typedef interface IUpdateHistoryEntry2 IUpdateHistoryEntry2;
#endif /* __IUpdateHistoryEntry2_FWD_DEFINED__ */
#ifndef __IUpdateHistoryEntryCollection_FWD_DEFINED__
#define __IUpdateHistoryEntryCollection_FWD_DEFINED__
typedef interface IUpdateHistoryEntryCollection IUpdateHistoryEntryCollection;
#endif /* __IUpdateHistoryEntryCollection_FWD_DEFINED__ */
#ifndef __IUpdateSearcher_FWD_DEFINED__
#define __IUpdateSearcher_FWD_DEFINED__
typedef interface IUpdateSearcher IUpdateSearcher;
#endif /* __IUpdateSearcher_FWD_DEFINED__ */
#ifndef __IUpdateSearcher2_FWD_DEFINED__
#define __IUpdateSearcher2_FWD_DEFINED__
typedef interface IUpdateSearcher2 IUpdateSearcher2;
#endif /* __IUpdateSearcher2_FWD_DEFINED__ */
#ifndef __IUpdateSearcher3_FWD_DEFINED__
#define __IUpdateSearcher3_FWD_DEFINED__
typedef interface IUpdateSearcher3 IUpdateSearcher3;
#endif /* __IUpdateSearcher3_FWD_DEFINED__ */
#ifndef __IUpdateDownloadResult_FWD_DEFINED__
#define __IUpdateDownloadResult_FWD_DEFINED__
typedef interface IUpdateDownloadResult IUpdateDownloadResult;
#endif /* __IUpdateDownloadResult_FWD_DEFINED__ */
#ifndef __IDownloadResult_FWD_DEFINED__
#define __IDownloadResult_FWD_DEFINED__
typedef interface IDownloadResult IDownloadResult;
#endif /* __IDownloadResult_FWD_DEFINED__ */
#ifndef __IDownloadProgress_FWD_DEFINED__
#define __IDownloadProgress_FWD_DEFINED__
typedef interface IDownloadProgress IDownloadProgress;
#endif /* __IDownloadProgress_FWD_DEFINED__ */
#ifndef __IDownloadJob_FWD_DEFINED__
#define __IDownloadJob_FWD_DEFINED__
typedef interface IDownloadJob IDownloadJob;
#endif /* __IDownloadJob_FWD_DEFINED__ */
#ifndef __IDownloadCompletedCallbackArgs_FWD_DEFINED__
#define __IDownloadCompletedCallbackArgs_FWD_DEFINED__
typedef interface IDownloadCompletedCallbackArgs IDownloadCompletedCallbackArgs;
#endif /* __IDownloadCompletedCallbackArgs_FWD_DEFINED__ */
#ifndef __IDownloadCompletedCallback_FWD_DEFINED__
#define __IDownloadCompletedCallback_FWD_DEFINED__
typedef interface IDownloadCompletedCallback IDownloadCompletedCallback;
#endif /* __IDownloadCompletedCallback_FWD_DEFINED__ */
#ifndef __IDownloadProgressChangedCallbackArgs_FWD_DEFINED__
#define __IDownloadProgressChangedCallbackArgs_FWD_DEFINED__
typedef interface IDownloadProgressChangedCallbackArgs IDownloadProgressChangedCallbackArgs;
#endif /* __IDownloadProgressChangedCallbackArgs_FWD_DEFINED__ */
#ifndef __IDownloadProgressChangedCallback_FWD_DEFINED__
#define __IDownloadProgressChangedCallback_FWD_DEFINED__
typedef interface IDownloadProgressChangedCallback IDownloadProgressChangedCallback;
#endif /* __IDownloadProgressChangedCallback_FWD_DEFINED__ */
#ifndef __IUpdateDownloader_FWD_DEFINED__
#define __IUpdateDownloader_FWD_DEFINED__
typedef interface IUpdateDownloader IUpdateDownloader;
#endif /* __IUpdateDownloader_FWD_DEFINED__ */
#ifndef __IUpdateInstallationResult_FWD_DEFINED__
#define __IUpdateInstallationResult_FWD_DEFINED__
typedef interface IUpdateInstallationResult IUpdateInstallationResult;
#endif /* __IUpdateInstallationResult_FWD_DEFINED__ */
#ifndef __IInstallationResult_FWD_DEFINED__
#define __IInstallationResult_FWD_DEFINED__
typedef interface IInstallationResult IInstallationResult;
#endif /* __IInstallationResult_FWD_DEFINED__ */
#ifndef __IInstallationProgress_FWD_DEFINED__
#define __IInstallationProgress_FWD_DEFINED__
typedef interface IInstallationProgress IInstallationProgress;
#endif /* __IInstallationProgress_FWD_DEFINED__ */
#ifndef __IInstallationJob_FWD_DEFINED__
#define __IInstallationJob_FWD_DEFINED__
typedef interface IInstallationJob IInstallationJob;
#endif /* __IInstallationJob_FWD_DEFINED__ */
#ifndef __IInstallationCompletedCallbackArgs_FWD_DEFINED__
#define __IInstallationCompletedCallbackArgs_FWD_DEFINED__
typedef interface IInstallationCompletedCallbackArgs IInstallationCompletedCallbackArgs;
#endif /* __IInstallationCompletedCallbackArgs_FWD_DEFINED__ */
#ifndef __IInstallationCompletedCallback_FWD_DEFINED__
#define __IInstallationCompletedCallback_FWD_DEFINED__
typedef interface IInstallationCompletedCallback IInstallationCompletedCallback;
#endif /* __IInstallationCompletedCallback_FWD_DEFINED__ */
#ifndef __IInstallationProgressChangedCallbackArgs_FWD_DEFINED__
#define __IInstallationProgressChangedCallbackArgs_FWD_DEFINED__
typedef interface IInstallationProgressChangedCallbackArgs IInstallationProgressChangedCallbackArgs;
#endif /* __IInstallationProgressChangedCallbackArgs_FWD_DEFINED__ */
#ifndef __IInstallationProgressChangedCallback_FWD_DEFINED__
#define __IInstallationProgressChangedCallback_FWD_DEFINED__
typedef interface IInstallationProgressChangedCallback IInstallationProgressChangedCallback;
#endif /* __IInstallationProgressChangedCallback_FWD_DEFINED__ */
#ifndef __IUpdateInstaller_FWD_DEFINED__
#define __IUpdateInstaller_FWD_DEFINED__
typedef interface IUpdateInstaller IUpdateInstaller;
#endif /* __IUpdateInstaller_FWD_DEFINED__ */
#ifndef __IUpdateInstaller2_FWD_DEFINED__
#define __IUpdateInstaller2_FWD_DEFINED__
typedef interface IUpdateInstaller2 IUpdateInstaller2;
#endif /* __IUpdateInstaller2_FWD_DEFINED__ */
#ifndef __IUpdateSession_FWD_DEFINED__
#define __IUpdateSession_FWD_DEFINED__
typedef interface IUpdateSession IUpdateSession;
#endif /* __IUpdateSession_FWD_DEFINED__ */
#ifndef __IUpdateSession2_FWD_DEFINED__
#define __IUpdateSession2_FWD_DEFINED__
typedef interface IUpdateSession2 IUpdateSession2;
#endif /* __IUpdateSession2_FWD_DEFINED__ */
#ifndef __IUpdateSession3_FWD_DEFINED__
#define __IUpdateSession3_FWD_DEFINED__
typedef interface IUpdateSession3 IUpdateSession3;
#endif /* __IUpdateSession3_FWD_DEFINED__ */
#ifndef __IUpdateService_FWD_DEFINED__
#define __IUpdateService_FWD_DEFINED__
typedef interface IUpdateService IUpdateService;
#endif /* __IUpdateService_FWD_DEFINED__ */
#ifndef __IUpdateService2_FWD_DEFINED__
#define __IUpdateService2_FWD_DEFINED__
typedef interface IUpdateService2 IUpdateService2;
#endif /* __IUpdateService2_FWD_DEFINED__ */
#ifndef __IUpdateServiceCollection_FWD_DEFINED__
#define __IUpdateServiceCollection_FWD_DEFINED__
typedef interface IUpdateServiceCollection IUpdateServiceCollection;
#endif /* __IUpdateServiceCollection_FWD_DEFINED__ */
#ifndef __IUpdateServiceRegistration_FWD_DEFINED__
#define __IUpdateServiceRegistration_FWD_DEFINED__
typedef interface IUpdateServiceRegistration IUpdateServiceRegistration;
#endif /* __IUpdateServiceRegistration_FWD_DEFINED__ */
#ifndef __IUpdateServiceManager_FWD_DEFINED__
#define __IUpdateServiceManager_FWD_DEFINED__
typedef interface IUpdateServiceManager IUpdateServiceManager;
#endif /* __IUpdateServiceManager_FWD_DEFINED__ */
#ifndef __IUpdateServiceManager2_FWD_DEFINED__
#define __IUpdateServiceManager2_FWD_DEFINED__
typedef interface IUpdateServiceManager2 IUpdateServiceManager2;
#endif /* __IUpdateServiceManager2_FWD_DEFINED__ */
#ifndef __IInstallationAgent_FWD_DEFINED__
#define __IInstallationAgent_FWD_DEFINED__
typedef interface IInstallationAgent IInstallationAgent;
#endif /* __IInstallationAgent_FWD_DEFINED__ */
#ifndef __IUpdateLockdown_FWD_DEFINED__
#define __IUpdateLockdown_FWD_DEFINED__
typedef interface IUpdateLockdown IUpdateLockdown;
#endif /* __IUpdateLockdown_FWD_DEFINED__ */
#ifndef __IUpdateException_FWD_DEFINED__
#define __IUpdateException_FWD_DEFINED__
typedef interface IUpdateException IUpdateException;
#endif /* __IUpdateException_FWD_DEFINED__ */
#ifndef __IInvalidProductLicenseException_FWD_DEFINED__
#define __IInvalidProductLicenseException_FWD_DEFINED__
typedef interface IInvalidProductLicenseException IInvalidProductLicenseException;
#endif /* __IInvalidProductLicenseException_FWD_DEFINED__ */
#ifndef __IAutomaticUpdatesSettings_FWD_DEFINED__
#define __IAutomaticUpdatesSettings_FWD_DEFINED__
typedef interface IAutomaticUpdatesSettings IAutomaticUpdatesSettings;
#endif /* __IAutomaticUpdatesSettings_FWD_DEFINED__ */
#ifndef __IAutomaticUpdatesSettings2_FWD_DEFINED__
#define __IAutomaticUpdatesSettings2_FWD_DEFINED__
typedef interface IAutomaticUpdatesSettings2 IAutomaticUpdatesSettings2;
#endif /* __IAutomaticUpdatesSettings2_FWD_DEFINED__ */
#ifndef __IAutomaticUpdatesSettings3_FWD_DEFINED__
#define __IAutomaticUpdatesSettings3_FWD_DEFINED__
typedef interface IAutomaticUpdatesSettings3 IAutomaticUpdatesSettings3;
#endif /* __IAutomaticUpdatesSettings3_FWD_DEFINED__ */
#ifndef __IUpdate_FWD_DEFINED__
#define __IUpdate_FWD_DEFINED__
typedef interface IUpdate IUpdate;
#endif /* __IUpdate_FWD_DEFINED__ */
#ifndef __IUpdate2_FWD_DEFINED__
#define __IUpdate2_FWD_DEFINED__
typedef interface IUpdate2 IUpdate2;
#endif /* __IUpdate2_FWD_DEFINED__ */
#ifndef __IUpdate3_FWD_DEFINED__
#define __IUpdate3_FWD_DEFINED__
typedef interface IUpdate3 IUpdate3;
#endif /* __IUpdate3_FWD_DEFINED__ */
#ifndef __IWindowsDriverUpdateEntry_FWD_DEFINED__
#define __IWindowsDriverUpdateEntry_FWD_DEFINED__
typedef interface IWindowsDriverUpdateEntry IWindowsDriverUpdateEntry;
#endif /* __IWindowsDriverUpdateEntry_FWD_DEFINED__ */
#ifndef __IWindowsDriverUpdateEntryCollection_FWD_DEFINED__
#define __IWindowsDriverUpdateEntryCollection_FWD_DEFINED__
typedef interface IWindowsDriverUpdateEntryCollection IWindowsDriverUpdateEntryCollection;
#endif /* __IWindowsDriverUpdateEntryCollection_FWD_DEFINED__ */
#ifndef __IUpdate4_FWD_DEFINED__
#define __IUpdate4_FWD_DEFINED__
typedef interface IUpdate4 IUpdate4;
#endif /* __IUpdate4_FWD_DEFINED__ */
#ifndef __IUpdate5_FWD_DEFINED__
#define __IUpdate5_FWD_DEFINED__
typedef interface IUpdate5 IUpdate5;
#endif /* __IUpdate5_FWD_DEFINED__ */
#ifndef __IWindowsDriverUpdate_FWD_DEFINED__
#define __IWindowsDriverUpdate_FWD_DEFINED__
typedef interface IWindowsDriverUpdate IWindowsDriverUpdate;
#endif /* __IWindowsDriverUpdate_FWD_DEFINED__ */
#ifndef __IWindowsDriverUpdate2_FWD_DEFINED__
#define __IWindowsDriverUpdate2_FWD_DEFINED__
typedef interface IWindowsDriverUpdate2 IWindowsDriverUpdate2;
#endif /* __IWindowsDriverUpdate2_FWD_DEFINED__ */
#ifndef __IWindowsDriverUpdate3_FWD_DEFINED__
#define __IWindowsDriverUpdate3_FWD_DEFINED__
typedef interface IWindowsDriverUpdate3 IWindowsDriverUpdate3;
#endif /* __IWindowsDriverUpdate3_FWD_DEFINED__ */
#ifndef __IWindowsDriverUpdate4_FWD_DEFINED__
#define __IWindowsDriverUpdate4_FWD_DEFINED__
typedef interface IWindowsDriverUpdate4 IWindowsDriverUpdate4;
#endif /* __IWindowsDriverUpdate4_FWD_DEFINED__ */
#ifndef __IWindowsDriverUpdate5_FWD_DEFINED__
#define __IWindowsDriverUpdate5_FWD_DEFINED__
typedef interface IWindowsDriverUpdate5 IWindowsDriverUpdate5;
#endif /* __IWindowsDriverUpdate5_FWD_DEFINED__ */
#ifndef __ISearchCompletedCallback_FWD_DEFINED__
#define __ISearchCompletedCallback_FWD_DEFINED__
typedef interface ISearchCompletedCallback ISearchCompletedCallback;
#endif /* __ISearchCompletedCallback_FWD_DEFINED__ */
#ifndef __IDownloadCompletedCallback_FWD_DEFINED__
#define __IDownloadCompletedCallback_FWD_DEFINED__
typedef interface IDownloadCompletedCallback IDownloadCompletedCallback;
#endif /* __IDownloadCompletedCallback_FWD_DEFINED__ */
#ifndef __IDownloadProgressChangedCallback_FWD_DEFINED__
#define __IDownloadProgressChangedCallback_FWD_DEFINED__
typedef interface IDownloadProgressChangedCallback IDownloadProgressChangedCallback;
#endif /* __IDownloadProgressChangedCallback_FWD_DEFINED__ */
#ifndef __IInstallationCompletedCallback_FWD_DEFINED__
#define __IInstallationCompletedCallback_FWD_DEFINED__
typedef interface IInstallationCompletedCallback IInstallationCompletedCallback;
#endif /* __IInstallationCompletedCallback_FWD_DEFINED__ */
#ifndef __IInstallationProgressChangedCallback_FWD_DEFINED__
#define __IInstallationProgressChangedCallback_FWD_DEFINED__
typedef interface IInstallationProgressChangedCallback IInstallationProgressChangedCallback;
#endif /* __IInstallationProgressChangedCallback_FWD_DEFINED__ */
#ifndef __IUpdateHistoryEntry_FWD_DEFINED__
#define __IUpdateHistoryEntry_FWD_DEFINED__
typedef interface IUpdateHistoryEntry IUpdateHistoryEntry;
#endif /* __IUpdateHistoryEntry_FWD_DEFINED__ */
#ifndef __IUpdateHistoryEntry2_FWD_DEFINED__
#define __IUpdateHistoryEntry2_FWD_DEFINED__
typedef interface IUpdateHistoryEntry2 IUpdateHistoryEntry2;
#endif /* __IUpdateHistoryEntry2_FWD_DEFINED__ */
#ifndef __IUpdateDownloadContent_FWD_DEFINED__
#define __IUpdateDownloadContent_FWD_DEFINED__
typedef interface IUpdateDownloadContent IUpdateDownloadContent;
#endif /* __IUpdateDownloadContent_FWD_DEFINED__ */
#ifndef __IUpdateDownloadContent2_FWD_DEFINED__
#define __IUpdateDownloadContent2_FWD_DEFINED__
typedef interface IUpdateDownloadContent2 IUpdateDownloadContent2;
#endif /* __IUpdateDownloadContent2_FWD_DEFINED__ */
#ifndef __StringCollection_FWD_DEFINED__
#define __StringCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class StringCollection StringCollection;
#else
typedef struct StringCollection StringCollection;
#endif /* __cplusplus */
#endif /* __StringCollection_FWD_DEFINED__ */
#ifndef __UpdateSearcher_FWD_DEFINED__
#define __UpdateSearcher_FWD_DEFINED__
#ifdef __cplusplus
typedef class UpdateSearcher UpdateSearcher;
#else
typedef struct UpdateSearcher UpdateSearcher;
#endif /* __cplusplus */
#endif /* __UpdateSearcher_FWD_DEFINED__ */
#ifndef __WebProxy_FWD_DEFINED__
#define __WebProxy_FWD_DEFINED__
#ifdef __cplusplus
typedef class WebProxy WebProxy;
#else
typedef struct WebProxy WebProxy;
#endif /* __cplusplus */
#endif /* __WebProxy_FWD_DEFINED__ */
#ifndef __SystemInformation_FWD_DEFINED__
#define __SystemInformation_FWD_DEFINED__
#ifdef __cplusplus
typedef class SystemInformation SystemInformation;
#else
typedef struct SystemInformation SystemInformation;
#endif /* __cplusplus */
#endif /* __SystemInformation_FWD_DEFINED__ */
#ifndef __WindowsUpdateAgentInfo_FWD_DEFINED__
#define __WindowsUpdateAgentInfo_FWD_DEFINED__
#ifdef __cplusplus
typedef class WindowsUpdateAgentInfo WindowsUpdateAgentInfo;
#else
typedef struct WindowsUpdateAgentInfo WindowsUpdateAgentInfo;
#endif /* __cplusplus */
#endif /* __WindowsUpdateAgentInfo_FWD_DEFINED__ */
#ifndef __AutomaticUpdates_FWD_DEFINED__
#define __AutomaticUpdates_FWD_DEFINED__
#ifdef __cplusplus
typedef class AutomaticUpdates AutomaticUpdates;
#else
typedef struct AutomaticUpdates AutomaticUpdates;
#endif /* __cplusplus */
#endif /* __AutomaticUpdates_FWD_DEFINED__ */
#ifndef __UpdateCollection_FWD_DEFINED__
#define __UpdateCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class UpdateCollection UpdateCollection;
#else
typedef struct UpdateCollection UpdateCollection;
#endif /* __cplusplus */
#endif /* __UpdateCollection_FWD_DEFINED__ */
#ifndef __UpdateDownloader_FWD_DEFINED__
#define __UpdateDownloader_FWD_DEFINED__
#ifdef __cplusplus
typedef class UpdateDownloader UpdateDownloader;
#else
typedef struct UpdateDownloader UpdateDownloader;
#endif /* __cplusplus */
#endif /* __UpdateDownloader_FWD_DEFINED__ */
#ifndef __UpdateInstaller_FWD_DEFINED__
#define __UpdateInstaller_FWD_DEFINED__
#ifdef __cplusplus
typedef class UpdateInstaller UpdateInstaller;
#else
typedef struct UpdateInstaller UpdateInstaller;
#endif /* __cplusplus */
#endif /* __UpdateInstaller_FWD_DEFINED__ */
#ifndef __UpdateSession_FWD_DEFINED__
#define __UpdateSession_FWD_DEFINED__
#ifdef __cplusplus
typedef class UpdateSession UpdateSession;
#else
typedef struct UpdateSession UpdateSession;
#endif /* __cplusplus */
#endif /* __UpdateSession_FWD_DEFINED__ */
#ifndef __UpdateServiceManager_FWD_DEFINED__
#define __UpdateServiceManager_FWD_DEFINED__
#ifdef __cplusplus
typedef class UpdateServiceManager UpdateServiceManager;
#else
typedef struct UpdateServiceManager UpdateServiceManager;
#endif /* __cplusplus */
#endif /* __UpdateServiceManager_FWD_DEFINED__ */
#ifndef __InstallationAgent_FWD_DEFINED__
#define __InstallationAgent_FWD_DEFINED__
#ifdef __cplusplus
typedef class InstallationAgent InstallationAgent;
#else
typedef struct InstallationAgent InstallationAgent;
#endif /* __cplusplus */
#endif /* __InstallationAgent_FWD_DEFINED__ */
/* header files for imported files */
#include "oaidl.h"
#ifdef __cplusplus
extern "C"{
#endif
/* interface __MIDL_itf_wuapi_0000_0000 */
/* [local] */
//=--------------------------------------------------------------------------=
// wuapi.h
//=--------------------------------------------------------------------------=
// (C) Copyright 2003-2004 Microsoft Corporation. All Rights Reserved.
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//=--------------------------------------------------------------------------=
#pragma comment(lib, "wuguid.lib")
//--------------------------------------------------------------------------
// Windows Update Services Client Interfaces.
// --------------------------------------------------------------------------------
// GUIDS
// --------------------------------------------------------------------------------
// {B596CC9F-56E5-419E-A622-E01BB457431E}
DEFINE_GUID(LIBID_WUApiLib,0xB596CC9F,0x56E5,0x419E,0xA6,0x22,0xE0,0x1B,0xB4,0x57,0x43,0x1E);
// {A976C28D-75A1-42AA-94AE-8AF8B872089A}
DEFINE_GUID(IID_IUpdateLockdown,0xa976c28d,0x75a1,0x42aa,0x94,0xae,0x8a,0xf8,0xb8,0x72,0x08,0x9a);
// {EFF90582-2DDC-480F-A06D-60F3FBC362C3}
DEFINE_GUID(IID_IStringCollection,0xeff90582,0x2ddc,0x480f,0xa0,0x6d,0x60,0xf3,0xfb,0xc3,0x62,0xc3);
// {174C81FE-AECD-4DAE-B8A0-2C6318DD86A8}
DEFINE_GUID(IID_IWebProxy,0x174c81fe,0xaecd,0x4dae,0xb8,0xa0,0x2c,0x63,0x18,0xdd,0x86,0xa8);
// {ADE87BF7-7B56-4275-8FAB-B9B0E591844B}
DEFINE_GUID(IID_ISystemInformation,0xade87bf7,0x7b56,0x4275,0x8f,0xab,0xb9,0xb0,0xe5,0x91,0x84,0x4b);
// {85713FA1-7796-4FA2-BE3B-E2D6124DD373}
DEFINE_GUID(IID_IWindowsUpdateAgentInfo,0x85713FA1,0x7796,0x4FA2,0xBE,0x3B,0xE2,0xD6,0x12,0x4D,0xD3,0x73);
// {E7A4D634-7942-4DD9-A111-82228BA33901}
DEFINE_GUID(IID_IAutomaticUpdatesResults,0xe7a4d634,0x7942,0x4DD9,0xA1,0x11,0x82,0x22,0x8b,0xa3,0x39,0x1);
// {2EE48F22-AF3C-405F-8970-F71BE12EE9A2}
DEFINE_GUID(IID_IAutomaticUpdatesSettings,0x2ee48f22,0xaf3c,0x405f,0x89,0x70,0xf7,0x1b,0xe1,0x2e,0xe9,0xa2);
// {6ABC136A-C3CA-4384-8171-CB2B1E59B8DC}
DEFINE_GUID(IID_IAutomaticUpdatesSettings2,0x6abc136a,0xc3ca,0x4384,0x81,0x71,0xcb,0x2b,0x1e,0x59,0xb8,0xdc);
// {B587F5C3-F57E-485F-BBF5-0D181C5CD0DC}
DEFINE_GUID(IID_IAutomaticUpdatesSettings3,0xb587f5c3,0xf57e,0x485f,0xbb,0xf5,0x0d,0x18,0x1c,0x5c,0xd0,0xdc);
// {673425BF-C082-4C7C-BDFD-569464B8E0CE}
DEFINE_GUID(IID_IAutomaticUpdates,0x673425bf,0xc082,0x4c7c,0xbd,0xfd,0x56,0x94,0x64,0xb8,0xe0,0xce);
// {4A2F5C31-CFD9-410E-B7FB-29A653973A0F}
DEFINE_GUID(IID_IAutomaticUpdates2,0x4A2f5C31,0xCFD9,0x410E,0xB7,0xFB,0x29,0xA6,0x53,0x97,0x3A,0xF);
// {46297823-9940-4C09-AED9-CD3EA6D05968}
DEFINE_GUID(IID_IUpdateIdentity,0x46297823,0x9940,0x4c09,0xae,0xd9,0xcd,0x3e,0xa6,0xd0,0x59,0x68);
// {7C907864-346C-4AEB-8F3F-57DA289F969F}
DEFINE_GUID(IID_IImageInformation,0x7c907864,0x346c,0x4aeb,0x8f,0x3f,0x57,0xda,0x28,0x9f,0x96,0x9f);
// {81DDC1B8-9D35-47A6-B471-5B80F519223B}
DEFINE_GUID(IID_ICategory,0x81ddc1b8,0x9d35,0x47a6,0xb4,0x71,0x5b,0x80,0xf5,0x19,0x22,0x3b);
// {3A56BFB8-576C-43F7-9335-FE4838FD7E37}
DEFINE_GUID(IID_ICategoryCollection,0x3a56bfb8,0x576c,0x43f7,0x93,0x35,0xfe,0x48,0x38,0xfd,0x7e,0x37);
// {D9A59339-E245-4DBD-9686-4D5763E39624}
DEFINE_GUID(IID_IInstallationBehavior,0xd9a59339,0xe245,0x4dbd,0x96,0x86,0x4d,0x57,0x63,0xe3,0x96,0x24);
// {54A2CB2D-9A0C-48B6-8A50-9ABB69EE2D02}
DEFINE_GUID(IID_IUpdateDownloadContent,0x54a2cb2d,0x9a0c,0x48b6,0x8a,0x50,0x9a,0xbb,0x69,0xee,0x2d,0x02);
// {C97AD11B-F257-420B-9D9F-377F733F6F68}
DEFINE_GUID(IID_IUpdateDownloadContent2,0xc97ad11b,0xf257,0x420b,0x9d,0x9f,0x37,0x7f,0x73,0x3f,0x6f,0x68);
// {BC5513C8-B3B8-4BF7-A4D4-361C0D8C88BA}
DEFINE_GUID(IID_IUpdateDownloadContentCollection,0xbc5513c8,0xb3b8,0x4bf7,0xa4,0xd4,0x36,0x1c,0x0d,0x8c,0x88,0xba);
// {6A92B07A-D821-4682-B423-5C805022CC4D}
DEFINE_GUID(IID_IUpdate,0x6a92b07a,0xd821,0x4682,0xb4,0x23,0x5c,0x80,0x50,0x22,0xcc,0x4d);
// {144fe9b0-d23d-4a8b-8634-fb4457533b7a}
DEFINE_GUID(IID_IUpdate2,0x144fe9b0,0xd23d,0x4a8b,0x86,0x34,0xfb,0x44,0x57,0x53,0x3b,0x7a);
// {112EDA6B-95B3-476F-9D90-AEE82C6B8181}
DEFINE_GUID(IID_IUpdate3,0x112EDA6B,0x95B3,0x476F,0x9D,0x90,0xAE,0xE8,0x2C,0x6B,0x81,0x81);
// {27E94B0D-5139-49A2-9A61-93522DC54652}
DEFINE_GUID(IID_IUpdate4,0x27e94b0d,0x5139,0x49a2,0x9a, 0x61, 0x93, 0x52, 0x2d, 0xc5, 0x46, 0x52);
// {C1C2F21A-D2F4-4902-B5C6-8A081C19A890}
DEFINE_GUID(IID_IUpdate5,0xc1c2f21a,0xd2f4,0x4902,0xb5, 0xc6, 0x8a, 0x08, 0x1c, 0x19, 0xa8, 0x90);
// {B383CD1A-5CE9-4504-9F63-764B1236F191}
DEFINE_GUID(IID_IWindowsDriverUpdate,0xb383cd1a,0x5ce9,0x4504,0x9f,0x63,0x76,0x4b,0x12,0x36,0xf1,0x91);
// {615c4269-7a48-43bd-96b7-bf6ca27d6c3e}
DEFINE_GUID(IID_IWindowsDriverUpdate2,0x615c4269,0x7a48,0x43bd,0x96,0xb7,0xbf,0x6c,0xa2,0x7d,0x6c,0x3e);
// {49EBD502-4A96-41BD-9E3E-4C5057F4250C}
DEFINE_GUID(IID_IWindowsDriverUpdate3,0x49EBD502,0x4A96,0x41BD,0x9E,0x3E,0x4C,0x50,0x57,0xF4,0x25,0x0C);
// {004C6A2B-0C19-4c69-9F5C-A269B2560DB9}
DEFINE_GUID(IID_IWindowsDriverUpdate4,0x004C6A2B,0x0C19,0x4c69,0x9F,0x5C,0xA2,0x69,0xB2,0x56,0x0D,0xB9);
// {70CF5C82-8642-42bb-9DBC-0CFD263C6C4F}
DEFINE_GUID(IID_IWindowsDriverUpdate5,0x70CF5C82,0x8642,0x42bb,0x9d,0xbc,0x0c,0xfd,0x26,0x3c,0x6c,0x4f);
// {0D521700-A372-4bef-828B-3D00C10ADEBD}
DEFINE_GUID(IID_IWindowsDriverUpdateEntryCollection,0x0D521700,0xA372,0x4bef,0x82,0x8B,0x3D,0x00,0xC1,0x0A,0xDE,0xBD);
// {ED8BFE40-A60B-42ea-9652-817DFCFA23EC}
DEFINE_GUID(IID_IWindowsDriverUpdateEntry,0xED8BFE40,0xA60B,0x42ea,0x96,0x52,0x81,0x7D,0xFC,0xFA,0x23,0xEC);
// {07F7438C-7709-4CA5-B518-91279288134E}
DEFINE_GUID(IID_IUpdateCollection,0x07f7438c,0x7709,0x4ca5,0xb5,0x18,0x91,0x27,0x92,0x88,0x13,0x4e);
// {A376DD5E-09D4-427F-AF7C-FED5B6E1C1D6}
DEFINE_GUID(IID_IUpdateException,0xa376dd5e,0x09d4,0x427f,0xaf,0x7c,0xfe,0xd5,0xb6,0xe1,0xc1,0xd6);
// {A37D00F5-7BB0-4953-B414-F9E98326F2E8}
DEFINE_GUID(IID_IInvalidProductLicenseException,0xa37d00f5,0x7bb0,0x4953,0xb4,0x14,0xf9,0xe9,0x83,0x26,0xf2,0xe8);
// {A37D00F5-7BB0-4953-B414-F9E98326F2E8}
DEFINE_GUID(IID_IUpdateExceptionCollection,0x503626a3,0x8e14,0x4729,0x93,0x55,0x0f,0xe6,0x64,0xbd,0x23,0x21);
// {D40CFF62-E08C-4498-941A-01E25F0FD33C}
DEFINE_GUID(IID_ISearchResult,0xd40cff62,0xe08c,0x4498,0x94,0x1a,0x01,0xe2,0x5f,0x0f,0xd3,0x3c);
// {7366EA16-7A1A-4EA2-B042-973D3E9CD99B}
DEFINE_GUID(IID_ISearchJob,0x7366ea16,0x7a1a,0x4ea2,0xb0,0x42,0x97,0x3d,0x3e,0x9c,0xd9,0x9b);
// {A700A634-2850-4C47-938A-9E4B6E5AF9A6}
DEFINE_GUID(IID_ISearchCompletedCallbackArgs,0xa700a634,0x2850,0x4c47,0x93,0x8a,0x9e,0x4b,0x6e,0x5a,0xf9,0xa6);
// {88AEE058-D4B0-4725-A2F1-814A67AE964C}
DEFINE_GUID(IID_ISearchCompletedCallback,0x88aee058,0xd4b0,0x4725,0xa2,0xf1,0x81,0x4a,0x67,0xae,0x96,0x4c);
// {BE56A644-AF0E-4E0E-A311-C1D8E695CBFF}
DEFINE_GUID(IID_IUpdateHistoryEntry,0xbe56a644,0xaf0e,0x4e0e,0xa3,0x11,0xc1,0xd8,0xe6,0x95,0xcb,0xff);
// {C2BFB780-4539-4132-AB8C-0A8772013AB6}
DEFINE_GUID(IID_IUpdateHistoryEntry2,0xc2bfb780,0x4539,0x4132,0xab,0x8c,0x0a,0x87,0x72,0x01,0x3a,0xb6);
// {A7F04F3C-A290-435B-AADF-A116C3357A5C}
DEFINE_GUID(IID_IUpdateHistoryEntryCollection,0xa7f04f3c,0xa290,0x435b,0xaa,0xdf,0xa1,0x16,0xc3,0x35,0x7a,0x5c);
// {8F45ABF1-F9AE-4B95-A933-F0F66E5056EA}
DEFINE_GUID(IID_IUpdateSearcher,0x8f45abf1,0xf9ae,0x4b95,0xa9,0x33,0xf0,0xf6,0x6e,0x50,0x56,0xea);
// {4CBDCB2D-1589-4BEB-BD1C-3E582FF0ADD0}
DEFINE_GUID(IID_IUpdateSearcher2,0x4cbdcb2d,0x1589,0x4beb,0xbd,0x1c,0x3e,0x58,0x2f,0xf0,0xad,0xd0);
// {04C6895D-EAF2-4034-97F3-311DE9BE413A}
DEFINE_GUID(IID_IUpdateSearcher3,0x4c6895d,0xeaf2,0x4034,0x97,0xf3,0x31,0x1d,0xe9,0xbe,0x41,0x3a);
// {BF99AF76-B575-42AD-8AA4-33CBB5477AF1}
DEFINE_GUID(IID_IUpdateDownloadResult,0xbf99af76,0xb575,0x42ad,0x8a,0xa4,0x33,0xcb,0xb5,0x47,0x7a,0xf1);
// {DAA4FDD0-4727-4DBE-A1E7-745DCA317144}
DEFINE_GUID(IID_IDownloadResult,0xdaa4fdd0,0x4727,0x4dbe,0xa1,0xe7,0x74,0x5d,0xca,0x31,0x71,0x44);
// {D31A5BAC-F719-4178-9DBB-5E2CB47FD18A}
DEFINE_GUID(IID_IDownloadProgress,0xd31a5bac,0xf719,0x4178,0x9d,0xbb,0x5e,0x2c,0xb4,0x7f,0xd1,0x8a);
// {C574DE85-7358-43F6-AAE8-8697E62D8BA7}
DEFINE_GUID(IID_IDownloadJob,0xc574de85,0x7358,0x43f6,0xaa,0xe8,0x86,0x97,0xe6,0x2d,0x8b,0xa7);
// {FA565B23-498C-47A0-979D-E7D5B1813360}
DEFINE_GUID(IID_IDownloadCompletedCallbackArgs,0xfa565b23,0x498c,0x47a0,0x97,0x9d,0xe7,0xd5,0xb1,0x81,0x33,0x60);
// {77254866-9F5B-4C8E-B9E2-C77A8530D64B}
DEFINE_GUID(IID_IDownloadCompletedCallback,0x77254866,0x9f5b,0x4c8e,0xb9,0xe2,0xc7,0x7a,0x85,0x30,0xd6,0x4b);
// {324FF2C6-4981-4B04-9412-57481745AB24}
DEFINE_GUID(IID_IDownloadProgressChangedCallbackArgs,0x324ff2c6,0x4981,0x4b04,0x94,0x12,0x57,0x48,0x17,0x45,0xab,0x24);
// {8C3F1CDD-6173-4591-AEBD-A56A53CA77C1}
DEFINE_GUID(IID_IDownloadProgressChangedCallback,0x8c3f1cdd,0x6173,0x4591,0xae,0xbd,0xa5,0x6a,0x53,0xca,0x77,0xc1);
// {68F1C6F9-7ECC-4666-A464-247FE12496C3}
DEFINE_GUID(IID_IUpdateDownloader,0x68f1c6f9,0x7ecc,0x4666,0xa4,0x64,0x24,0x7f,0xe1,0x24,0x96,0xc3);
// {D940F0F8-3CBB-4FD0-993F-471E7F2328AD}
DEFINE_GUID(IID_IUpdateInstallationResult,0xd940f0f8,0x3cbb,0x4fd0,0x99,0x3f,0x47,0x1e,0x7f,0x23,0x28,0xad);
// {A43C56D6-7451-48D4-AF96-B6CD2D0D9B7A}
DEFINE_GUID(IID_IInstallationResult,0xa43c56d6,0x7451,0x48d4,0xaf,0x96,0xb6,0xcd,0x2d,0x0d,0x9b,0x7a);
// {345C8244-43A3-4E32-A368-65F073B76F36}
DEFINE_GUID(IID_IInstallationProgress,0x345c8244,0x43a3,0x4e32,0xa3,0x68,0x65,0xf0,0x73,0xb7,0x6f,0x36);
// {5C209F0B-BAD5-432A-9556-4699BED2638A}
DEFINE_GUID(IID_IInstallationJob,0x5c209f0b,0xbad5,0x432a,0x95,0x56,0x46,0x99,0xbe,0xd2,0x63,0x8a);
// {250E2106-8EFB-4705-9653-EF13C581B6A1}
DEFINE_GUID(IID_IInstallationCompletedCallbackArgs,0x250e2106,0x8efb,0x4705,0x96,0x53,0xef,0x13,0xc5,0x81,0xb6,0xa1);
// {45F4F6F3-D602-4F98-9A8A-3EFA152AD2D3}
DEFINE_GUID(IID_IInstallationCompletedCallback,0x45f4f6f3,0xd602,0x4f98,0x9a,0x8a,0x3e,0xfa,0x15,0x2a,0xd2,0xd3);
// {E4F14E1E-689D-4218-A0B9-BC189C484A01}
DEFINE_GUID(IID_IInstallationProgressChangedCallbackArgs,0xe4f14e1e,0x689d,0x4218,0xa0,0xb9,0xbc,0x18,0x9c,0x48,0x4a,0x01);
// {E01402D5-F8DA-43BA-A012-38894BD048F1}
DEFINE_GUID(IID_IInstallationProgressChangedCallback,0xe01402d5,0xf8da,0x43ba,0xa0,0x12,0x38,0x89,0x4b,0xd0,0x48,0xf1);
// {7B929C68-CCDC-4226-96B1-8724600B54C2}
DEFINE_GUID(IID_IUpdateInstaller,0x7b929c68,0xccdc,0x4226,0x96,0xb1,0x87,0x24,0x60,0x0b,0x54,0xc2);
// {3442d4fe-224d-4cee-98cf-30e0c4d229e6}
DEFINE_GUID(IID_IUpdateInstaller2,0x3442d4fe,0x224d,0x4cee,0x98,0xcf,0x30,0xe0,0xc4,0xd2,0x29,0xe6);
// {816858A4-260D-4260-933A-2585F1ABC76B}
DEFINE_GUID(IID_IUpdateSession,0x816858a4,0x260d,0x4260,0x93,0x3a,0x25,0x85,0xf1,0xab,0xc7,0x6b);
// {91CAF7B0-EB23-49ED-9937-C52D817F46F7}
DEFINE_GUID(IID_IUpdateSession2,0x91caf7b0,0xeb23,0x49ed,0x99,0x37,0xc5,0x2d,0x81,0x7f,0x46,0xf7);
// {918EFD1E-B5D8-4c90-8540-AEB9BDC56F9D}
DEFINE_GUID(IID_IUpdateSession3,0x918efd1e,0xb5d8,0x4c90,0x85,0x40,0xae,0xb9,0xbd,0xc5,0x6f,0x9d);
// {76B3B17E-AED6-4DA5-85F0-83587F81ABE3}
DEFINE_GUID(IID_IUpdateService,0x76b3b17e,0xaed6,0x4da5,0x85,0xf0,0x83,0x58,0x7f,0x81,0xab,0xe3);
// {1518B460-6518-4172-940F-C75883B24CEB}
DEFINE_GUID(IID_IUpdateService2,0x1518b460,0x6518,0x4172,0x94,0x0f,0xc7,0x58,0x83,0xb2,0x4c,0xeb);
// {9B0353AA-0E52-44FF-B8B0-1F7FA0437F88}
DEFINE_GUID(IID_IUpdateServiceCollection,0x9b0353aa,0x0e52,0x44ff,0xb8,0xb0,0x1f,0x7f,0xa0,0x43,0x7f,0x88);
// {DDE02280-12B3-4E0B-937B-6747F6ACB286}
DEFINE_GUID(IID_IUpdateServiceRegistration,0xdde02280,0x12b3,0x4e0b,0x93,0x7b,0x67,0x47,0xf6,0xac,0xb2,0x86);
// {23857E3C-02BA-44A3-9423-B1C900805F37}
DEFINE_GUID(IID_IUpdateServiceManager,0x23857E3C,0x02BA,0x44A3,0x94,0x23,0xB1,0xC9,0x00,0x80,0x5F,0x37);
// {0BB8531D-7E8D-424F-986C-A0B8F60A3E7B}
DEFINE_GUID(IID_IUpdateServiceManager2,0x0BB8531D,0x7E8D,0x424F,0x98,0x6C,0xA0,0xB8,0xF6,0x0A,0x3E,0x7B);
// {925CBC18-A2EA-4648-BF1C-EC8BADCFE20A}
DEFINE_GUID(IID_IInstallationAgent,0x925CBC18,0xA2EA,0x4648,0xBF,0x1C,0xEC,0x8B,0xAD,0xCF,0xE2,0x0A);
// {72C97D74-7C3B-40AE-B77D-ABDB22EBA6FB}
DEFINE_GUID(CLSID_StringCollection,0x72C97D74,0x7C3B,0x40AE,0xB7,0x7D,0xAB,0xDB,0x22,0xEB,0xA6,0xFB);
// {B699E5E8-67FF-4177-88B0-3684A3388BFB}
DEFINE_GUID(CLSID_UpdateSearcher,0xB699E5E8,0x67FF,0x4177,0x88,0xB0,0x36,0x84,0xA3,0x38,0x8B,0xFB);
// {650503cf-9108-4ddc-a2ce-6c2341e1c582}
DEFINE_GUID(CLSID_WebProxy,0x650503cf,0x9108,0x4ddc,0xa2,0xce,0x6c,0x23,0x41,0xe1,0xc5,0x82);
// {C01B9BA0-BEA7-41BA-B604-D0A36F469133}
DEFINE_GUID(CLSID_SystemInformation,0xC01B9BA0,0xBEA7,0x41BA,0xB6,0x04,0xD0,0xA3,0x6F,0x46,0x91,0x33);
// {C2E88C2F-6F5B-4AAA-894B-55C847AD3A2D}
DEFINE_GUID(CLSID_WindowsUpdateAgentInfo,0xC2E88C2F,0x6F5B,0x4AAA,0x89,0x4B,0x55,0xC8,0x47,0xAD,0x3A,0x2D);
// {BFE18E9C-6D87-4450-B37C-E02F0B373803}
DEFINE_GUID(CLSID_AutomaticUpdates,0xBFE18E9C,0x6D87,0x4450,0xB3,0x7C,0xE0,0x2F,0x0B,0x37,0x38,0x03);
// {13639463-00DB-4646-803D-528026140D88}
DEFINE_GUID(CLSID_UpdateCollection,0x13639463,0x00DB,0x4646,0x80,0x3D,0x52,0x80,0x26,0x14,0x0D,0x88);
// {5BAF654A-5A07-4264-A255-9FF54C7151E7}
DEFINE_GUID(CLSID_UpdateDownloader,0x5BAF654A,0x5A07,0x4264,0xA2,0x55,0x9F,0xF5,0x4C,0x71,0x51,0xE7);
// {D2E0FE7F-D23E-48E1-93C0-6FA8CC346474}
DEFINE_GUID(CLSID_UpdateInstaller,0xD2E0FE7F,0xD23E,0x48E1,0x93,0xC0,0x6F,0xA8,0xCC,0x34,0x64,0x74);
// {4CB43D7F-7EEE-4906-8698-60DA1C38F2FE}
DEFINE_GUID(CLSID_UpdateSession,0x4CB43D7F,0x7EEE,0x4906,0x86,0x98,0x60,0xDA,0x1C,0x38,0xF2,0xFE);
// {F8D253D9-89A4-4DAA-87B6-1168369F0B21}
DEFINE_GUID(CLSID_UpdateServiceManager,0xF8D253D9,0x89A4,0x4DAA,0x87,0xB6,0x11,0x68,0x36,0x9F,0x0B,0x21);
// {317E92FC-1679-46FD-A0B5-F08914DD8623}
DEFINE_GUID(CLSID_InstallationAgent,0x317E92FC,0x1679,0x46FD,0xA0,0xB5,0xF0,0x89,0x14,0xDD,0x86,0x23);
typedef /* [v1_enum][helpstring][public] */
enum tagAutomaticUpdatesNotificationLevel
{ aunlNotConfigured = 0,
aunlDisabled = 1,
aunlNotifyBeforeDownload = 2,
aunlNotifyBeforeInstallation = 3,
aunlScheduledInstallation = 4
} AutomaticUpdatesNotificationLevel;
typedef /* [v1_enum][helpstring][public] */
enum tagAutomaticUpdatesScheduledInstallationDay
{ ausidEveryDay = 0,
ausidEverySunday = 1,
ausidEveryMonday = 2,
ausidEveryTuesday = 3,
ausidEveryWednesday = 4,
ausidEveryThursday = 5,
ausidEveryFriday = 6,
ausidEverySaturday = 7
} AutomaticUpdatesScheduledInstallationDay;
typedef /* [v1_enum][helpstring][public] */
enum tagDownloadPhase
{ dphInitializing = 1,
dphDownloading = 2,
dphVerifying = 3
} DownloadPhase;
typedef /* [v1_enum][helpstring][public] */
enum tagDownloadPriority
{ dpLow = 1,
dpNormal = 2,
dpHigh = 3
} DownloadPriority;
typedef /* [v1_enum][helpstring][public] */
enum tagAutoSelectionMode
{ asLetWindowsUpdateDecide = 0,
asAutoSelectIfDownloaded = 1,
asNeverAutoSelect = 2,
asAlwaysAutoSelect = 3
} AutoSelectionMode;
typedef /* [v1_enum][helpstring][public] */
enum tagAutoDownloadMode
{ adLetWindowsUpdateDecide = 0,
adNeverAutoDownload = 1,
adAlwaysAutoDownload = 2
} AutoDownloadMode;
typedef /* [v1_enum][helpstring][public] */
enum tagInstallationImpact
{ iiNormal = 0,
iiMinor = 1,
iiRequiresExclusiveHandling = 2
} InstallationImpact;
typedef /* [v1_enum][helpstring][public] */
enum tagInstallationRebootBehavior
{ irbNeverReboots = 0,
irbAlwaysRequiresReboot = 1,
irbCanRequestReboot = 2
} InstallationRebootBehavior;
typedef /* [v1_enum][helpstring][public] */
enum tagOperationResultCode
{ orcNotStarted = 0,
orcInProgress = 1,
orcSucceeded = 2,
orcSucceededWithErrors = 3,
orcFailed = 4,
orcAborted = 5
} OperationResultCode;
typedef /* [v1_enum][helpstring][public] */
enum tagServerSelection
{ ssDefault = 0,
ssManagedServer = 1,
ssWindowsUpdate = 2,
ssOthers = 3
} ServerSelection;
typedef /* [v1_enum][helpstring][public] */
enum tagUpdateType
{ utSoftware = 1,
utDriver = 2
} UpdateType;
typedef /* [v1_enum][helpstring][public] */
enum tagUpdateOperation
{ uoInstallation = 1,
uoUninstallation = 2
} UpdateOperation;
typedef /* [v1_enum][helpstring][public] */
enum tagDeploymentAction
{ daNone = 0,
daInstallation = 1,
daUninstallation = 2,
daDetection = 3
} DeploymentAction;
typedef /* [v1_enum][helpstring][public] */
enum tagUpdateExceptionContext
{ uecGeneral = 1,
uecWindowsDriver = 2,
uecWindowsInstaller = 3
} UpdateExceptionContext;
typedef /* [v1_enum][helpstring][public] */
enum tagAutomaticUpdatesUserType
{ auutCurrentUser = 1,
auutLocalAdministrator = 2
} AutomaticUpdatesUserType;
typedef /* [v1_enum][helpstring][public] */
enum tagAutomaticUpdatesPermissionType
{ auptSetNotificationLevel = 1,
auptDisableAutomaticUpdates = 2,
auptSetIncludeRecommendedUpdates = 3,
auptSetFeaturedUpdatesEnabled = 4,
auptSetNonAdministratorsElevated = 5
} AutomaticUpdatesPermissionType;
typedef /* [v1_enum][helpstring][public] */
enum tagUpdateServiceRegistrationState
{ usrsNotRegistered = 1,
usrsRegistrationPending = 2,
usrsRegistered = 3
} UpdateServiceRegistrationState;
typedef /* [v1_enum][helpstring][public] */
enum tagSearchScope
{ searchScopeDefault = 0,
searchScopeMachineOnly = 1,
searchScopeCurrentUserOnly = 2,
searchScopeMachineAndCurrentUser = 3,
searchScopeMachineAndAllUsers = 4,
searchScopeAllUsers = 5
} SearchScope;
#define UPDATE_LOCKDOWN_WEBSITE_ACCESS ( 0x1 )
extern RPC_IF_HANDLE __MIDL_itf_wuapi_0000_0000_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_wuapi_0000_0000_v0_0_s_ifspec;
#ifndef __IUpdateLockdown_INTERFACE_DEFINED__
#define __IUpdateLockdown_INTERFACE_DEFINED__
/* interface IUpdateLockdown */
/* [unique][uuid][nonextensible][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateLockdown;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a976c28d-75a1-42aa-94ae-8af8b872089a")
IUpdateLockdown : public IUnknown
{
public:
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE LockDown(
/* [in] */ LONG flags) = 0;
};
#else /* C style interface */
typedef struct IUpdateLockdownVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateLockdown * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateLockdown * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateLockdown * This);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *LockDown )(
__RPC__in IUpdateLockdown * This,
/* [in] */ LONG flags);
END_INTERFACE
} IUpdateLockdownVtbl;
interface IUpdateLockdown
{
CONST_VTBL struct IUpdateLockdownVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateLockdown_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateLockdown_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateLockdown_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateLockdown_LockDown(This,flags) \
( (This)->lpVtbl -> LockDown(This,flags) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateLockdown_INTERFACE_DEFINED__ */
#ifndef __IStringCollection_INTERFACE_DEFINED__
#define __IStringCollection_INTERFACE_DEFINED__
/* interface IStringCollection */
/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IStringCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("eff90582-2ddc-480f-a06d-60f3fbc362c3")
IStringCollection : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Item(
/* [in] */ LONG index,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Item(
/* [in] */ LONG index,
/* [in] */ __RPC__in BSTR value) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get__NewEnum(
/* [retval][out] */ __RPC__deref_out_opt IUnknown **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Count(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ReadOnly(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Add(
/* [in] */ __RPC__in BSTR value,
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Clear( void) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Copy(
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Insert(
/* [in] */ LONG index,
/* [in] */ __RPC__in BSTR value) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RemoveAt(
/* [in] */ LONG index) = 0;
};
#else /* C style interface */
typedef struct IStringCollectionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IStringCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IStringCollection * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IStringCollection * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IStringCollection * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IStringCollection * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IStringCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IStringCollection * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(
__RPC__in IStringCollection * This,
/* [in] */ LONG index,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Item )(
__RPC__in IStringCollection * This,
/* [in] */ LONG index,
/* [in] */ __RPC__in BSTR value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(
__RPC__in IStringCollection * This,
/* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(
__RPC__in IStringCollection * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReadOnly )(
__RPC__in IStringCollection * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Add )(
__RPC__in IStringCollection * This,
/* [in] */ __RPC__in BSTR value,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Clear )(
__RPC__in IStringCollection * This);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Copy )(
__RPC__in IStringCollection * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Insert )(
__RPC__in IStringCollection * This,
/* [in] */ LONG index,
/* [in] */ __RPC__in BSTR value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RemoveAt )(
__RPC__in IStringCollection * This,
/* [in] */ LONG index);
END_INTERFACE
} IStringCollectionVtbl;
interface IStringCollection
{
CONST_VTBL struct IStringCollectionVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IStringCollection_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IStringCollection_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IStringCollection_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IStringCollection_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IStringCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IStringCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IStringCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IStringCollection_get_Item(This,index,retval) \
( (This)->lpVtbl -> get_Item(This,index,retval) )
#define IStringCollection_put_Item(This,index,value) \
( (This)->lpVtbl -> put_Item(This,index,value) )
#define IStringCollection_get__NewEnum(This,retval) \
( (This)->lpVtbl -> get__NewEnum(This,retval) )
#define IStringCollection_get_Count(This,retval) \
( (This)->lpVtbl -> get_Count(This,retval) )
#define IStringCollection_get_ReadOnly(This,retval) \
( (This)->lpVtbl -> get_ReadOnly(This,retval) )
#define IStringCollection_Add(This,value,retval) \
( (This)->lpVtbl -> Add(This,value,retval) )
#define IStringCollection_Clear(This) \
( (This)->lpVtbl -> Clear(This) )
#define IStringCollection_Copy(This,retval) \
( (This)->lpVtbl -> Copy(This,retval) )
#define IStringCollection_Insert(This,index,value) \
( (This)->lpVtbl -> Insert(This,index,value) )
#define IStringCollection_RemoveAt(This,index) \
( (This)->lpVtbl -> RemoveAt(This,index) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IStringCollection_INTERFACE_DEFINED__ */
#ifndef __IWebProxy_INTERFACE_DEFINED__
#define __IWebProxy_INTERFACE_DEFINED__
/* interface IWebProxy */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IWebProxy;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("174c81fe-aecd-4dae-b8a0-2c6318dd86a8")
IWebProxy : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Address(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Address(
/* [in] */ __RPC__in BSTR value) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_BypassList(
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_BypassList(
/* [in] */ __RPC__in_opt IStringCollection *value) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_BypassProxyOnLocal(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_BypassProxyOnLocal(
/* [in] */ VARIANT_BOOL value) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ReadOnly(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UserName(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_UserName(
/* [in] */ __RPC__in BSTR value) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetPassword(
/* [in] */ __RPC__in BSTR value) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE PromptForCredentials(
/* [unique][in] */ __RPC__in_opt IUnknown *parentWindow,
/* [in] */ __RPC__in BSTR title) = 0;
virtual /* [helpstring][restricted][id] */ HRESULT STDMETHODCALLTYPE PromptForCredentialsFromHwnd(
/* [unique][in] */ __RPC__in_opt HWND parentWindow,
/* [in] */ __RPC__in BSTR title) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AutoDetect(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_AutoDetect(
/* [in] */ VARIANT_BOOL value) = 0;
};
#else /* C style interface */
typedef struct IWebProxyVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IWebProxy * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IWebProxy * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IWebProxy * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IWebProxy * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IWebProxy * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IWebProxy * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IWebProxy * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Address )(
__RPC__in IWebProxy * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Address )(
__RPC__in IWebProxy * This,
/* [in] */ __RPC__in BSTR value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BypassList )(
__RPC__in IWebProxy * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_BypassList )(
__RPC__in IWebProxy * This,
/* [in] */ __RPC__in_opt IStringCollection *value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BypassProxyOnLocal )(
__RPC__in IWebProxy * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_BypassProxyOnLocal )(
__RPC__in IWebProxy * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReadOnly )(
__RPC__in IWebProxy * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UserName )(
__RPC__in IWebProxy * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_UserName )(
__RPC__in IWebProxy * This,
/* [in] */ __RPC__in BSTR value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetPassword )(
__RPC__in IWebProxy * This,
/* [in] */ __RPC__in BSTR value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *PromptForCredentials )(
__RPC__in IWebProxy * This,
/* [unique][in] */ __RPC__in_opt IUnknown *parentWindow,
/* [in] */ __RPC__in BSTR title);
/* [helpstring][restricted][id] */ HRESULT ( STDMETHODCALLTYPE *PromptForCredentialsFromHwnd )(
__RPC__in IWebProxy * This,
/* [unique][in] */ __RPC__in_opt HWND parentWindow,
/* [in] */ __RPC__in BSTR title);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoDetect )(
__RPC__in IWebProxy * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_AutoDetect )(
__RPC__in IWebProxy * This,
/* [in] */ VARIANT_BOOL value);
END_INTERFACE
} IWebProxyVtbl;
interface IWebProxy
{
CONST_VTBL struct IWebProxyVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IWebProxy_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IWebProxy_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IWebProxy_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IWebProxy_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IWebProxy_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IWebProxy_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IWebProxy_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IWebProxy_get_Address(This,retval) \
( (This)->lpVtbl -> get_Address(This,retval) )
#define IWebProxy_put_Address(This,value) \
( (This)->lpVtbl -> put_Address(This,value) )
#define IWebProxy_get_BypassList(This,retval) \
( (This)->lpVtbl -> get_BypassList(This,retval) )
#define IWebProxy_put_BypassList(This,value) \
( (This)->lpVtbl -> put_BypassList(This,value) )
#define IWebProxy_get_BypassProxyOnLocal(This,retval) \
( (This)->lpVtbl -> get_BypassProxyOnLocal(This,retval) )
#define IWebProxy_put_BypassProxyOnLocal(This,value) \
( (This)->lpVtbl -> put_BypassProxyOnLocal(This,value) )
#define IWebProxy_get_ReadOnly(This,retval) \
( (This)->lpVtbl -> get_ReadOnly(This,retval) )
#define IWebProxy_get_UserName(This,retval) \
( (This)->lpVtbl -> get_UserName(This,retval) )
#define IWebProxy_put_UserName(This,value) \
( (This)->lpVtbl -> put_UserName(This,value) )
#define IWebProxy_SetPassword(This,value) \
( (This)->lpVtbl -> SetPassword(This,value) )
#define IWebProxy_PromptForCredentials(This,parentWindow,title) \
( (This)->lpVtbl -> PromptForCredentials(This,parentWindow,title) )
#define IWebProxy_PromptForCredentialsFromHwnd(This,parentWindow,title) \
( (This)->lpVtbl -> PromptForCredentialsFromHwnd(This,parentWindow,title) )
#define IWebProxy_get_AutoDetect(This,retval) \
( (This)->lpVtbl -> get_AutoDetect(This,retval) )
#define IWebProxy_put_AutoDetect(This,value) \
( (This)->lpVtbl -> put_AutoDetect(This,value) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IWebProxy_INTERFACE_DEFINED__ */
#ifndef __ISystemInformation_INTERFACE_DEFINED__
#define __ISystemInformation_INTERFACE_DEFINED__
/* interface ISystemInformation */
/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_ISystemInformation;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ade87bf7-7b56-4275-8fab-b9b0e591844b")
ISystemInformation : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_OemHardwareSupportLink(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RebootRequired(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
};
#else /* C style interface */
typedef struct ISystemInformationVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in ISystemInformation * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in ISystemInformation * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in ISystemInformation * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in ISystemInformation * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in ISystemInformation * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in ISystemInformation * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
ISystemInformation * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_OemHardwareSupportLink )(
__RPC__in ISystemInformation * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(
__RPC__in ISystemInformation * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
END_INTERFACE
} ISystemInformationVtbl;
interface ISystemInformation
{
CONST_VTBL struct ISystemInformationVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define ISystemInformation_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define ISystemInformation_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define ISystemInformation_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define ISystemInformation_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define ISystemInformation_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define ISystemInformation_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define ISystemInformation_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define ISystemInformation_get_OemHardwareSupportLink(This,retval) \
( (This)->lpVtbl -> get_OemHardwareSupportLink(This,retval) )
#define ISystemInformation_get_RebootRequired(This,retval) \
( (This)->lpVtbl -> get_RebootRequired(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __ISystemInformation_INTERFACE_DEFINED__ */
#ifndef __IWindowsUpdateAgentInfo_INTERFACE_DEFINED__
#define __IWindowsUpdateAgentInfo_INTERFACE_DEFINED__
/* interface IWindowsUpdateAgentInfo */
/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IWindowsUpdateAgentInfo;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("85713fa1-7796-4fa2-be3b-e2d6124dd373")
IWindowsUpdateAgentInfo : public IDispatch
{
public:
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetInfo(
/* [in] */ VARIANT varInfoIdentifier,
/* [retval][out] */ __RPC__out VARIANT *retval) = 0;
};
#else /* C style interface */
typedef struct IWindowsUpdateAgentInfoVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IWindowsUpdateAgentInfo * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IWindowsUpdateAgentInfo * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IWindowsUpdateAgentInfo * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IWindowsUpdateAgentInfo * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IWindowsUpdateAgentInfo * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IWindowsUpdateAgentInfo * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IWindowsUpdateAgentInfo * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetInfo )(
__RPC__in IWindowsUpdateAgentInfo * This,
/* [in] */ VARIANT varInfoIdentifier,
/* [retval][out] */ __RPC__out VARIANT *retval);
END_INTERFACE
} IWindowsUpdateAgentInfoVtbl;
interface IWindowsUpdateAgentInfo
{
CONST_VTBL struct IWindowsUpdateAgentInfoVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IWindowsUpdateAgentInfo_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IWindowsUpdateAgentInfo_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IWindowsUpdateAgentInfo_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IWindowsUpdateAgentInfo_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IWindowsUpdateAgentInfo_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IWindowsUpdateAgentInfo_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IWindowsUpdateAgentInfo_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IWindowsUpdateAgentInfo_GetInfo(This,varInfoIdentifier,retval) \
( (This)->lpVtbl -> GetInfo(This,varInfoIdentifier,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IWindowsUpdateAgentInfo_INTERFACE_DEFINED__ */
#ifndef __IAutomaticUpdatesResults_INTERFACE_DEFINED__
#define __IAutomaticUpdatesResults_INTERFACE_DEFINED__
/* interface IAutomaticUpdatesResults */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IAutomaticUpdatesResults;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("E7A4D634-7942-4DD9-A111-82228BA33901")
IAutomaticUpdatesResults : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_LastSearchSuccessDate(
/* [retval][out] */ __RPC__out VARIANT *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_LastInstallationSuccessDate(
/* [retval][out] */ __RPC__out VARIANT *retval) = 0;
};
#else /* C style interface */
typedef struct IAutomaticUpdatesResultsVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IAutomaticUpdatesResults * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IAutomaticUpdatesResults * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IAutomaticUpdatesResults * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IAutomaticUpdatesResults * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IAutomaticUpdatesResults * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IAutomaticUpdatesResults * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IAutomaticUpdatesResults * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastSearchSuccessDate )(
__RPC__in IAutomaticUpdatesResults * This,
/* [retval][out] */ __RPC__out VARIANT *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastInstallationSuccessDate )(
__RPC__in IAutomaticUpdatesResults * This,
/* [retval][out] */ __RPC__out VARIANT *retval);
END_INTERFACE
} IAutomaticUpdatesResultsVtbl;
interface IAutomaticUpdatesResults
{
CONST_VTBL struct IAutomaticUpdatesResultsVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IAutomaticUpdatesResults_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IAutomaticUpdatesResults_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IAutomaticUpdatesResults_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IAutomaticUpdatesResults_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IAutomaticUpdatesResults_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IAutomaticUpdatesResults_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IAutomaticUpdatesResults_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IAutomaticUpdatesResults_get_LastSearchSuccessDate(This,retval) \
( (This)->lpVtbl -> get_LastSearchSuccessDate(This,retval) )
#define IAutomaticUpdatesResults_get_LastInstallationSuccessDate(This,retval) \
( (This)->lpVtbl -> get_LastInstallationSuccessDate(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IAutomaticUpdatesResults_INTERFACE_DEFINED__ */
#ifndef __IAutomaticUpdatesSettings_INTERFACE_DEFINED__
#define __IAutomaticUpdatesSettings_INTERFACE_DEFINED__
/* interface IAutomaticUpdatesSettings */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IAutomaticUpdatesSettings;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2ee48f22-af3c-405f-8970-f71be12ee9a2")
IAutomaticUpdatesSettings : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_NotificationLevel(
/* [retval][out] */ __RPC__out AutomaticUpdatesNotificationLevel *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_NotificationLevel(
/* [in] */ AutomaticUpdatesNotificationLevel value) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ReadOnly(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Required(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ScheduledInstallationDay(
/* [retval][out] */ __RPC__out AutomaticUpdatesScheduledInstallationDay *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ScheduledInstallationDay(
/* [in] */ AutomaticUpdatesScheduledInstallationDay value) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ScheduledInstallationTime(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ScheduledInstallationTime(
/* [in] */ LONG value) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Refresh( void) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Save( void) = 0;
};
#else /* C style interface */
typedef struct IAutomaticUpdatesSettingsVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IAutomaticUpdatesSettings * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IAutomaticUpdatesSettings * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IAutomaticUpdatesSettings * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IAutomaticUpdatesSettings * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IAutomaticUpdatesSettings * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IAutomaticUpdatesSettings * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IAutomaticUpdatesSettings * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_NotificationLevel )(
__RPC__in IAutomaticUpdatesSettings * This,
/* [retval][out] */ __RPC__out AutomaticUpdatesNotificationLevel *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_NotificationLevel )(
__RPC__in IAutomaticUpdatesSettings * This,
/* [in] */ AutomaticUpdatesNotificationLevel value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReadOnly )(
__RPC__in IAutomaticUpdatesSettings * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Required )(
__RPC__in IAutomaticUpdatesSettings * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ScheduledInstallationDay )(
__RPC__in IAutomaticUpdatesSettings * This,
/* [retval][out] */ __RPC__out AutomaticUpdatesScheduledInstallationDay *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ScheduledInstallationDay )(
__RPC__in IAutomaticUpdatesSettings * This,
/* [in] */ AutomaticUpdatesScheduledInstallationDay value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ScheduledInstallationTime )(
__RPC__in IAutomaticUpdatesSettings * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ScheduledInstallationTime )(
__RPC__in IAutomaticUpdatesSettings * This,
/* [in] */ LONG value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Refresh )(
__RPC__in IAutomaticUpdatesSettings * This);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Save )(
__RPC__in IAutomaticUpdatesSettings * This);
END_INTERFACE
} IAutomaticUpdatesSettingsVtbl;
interface IAutomaticUpdatesSettings
{
CONST_VTBL struct IAutomaticUpdatesSettingsVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IAutomaticUpdatesSettings_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IAutomaticUpdatesSettings_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IAutomaticUpdatesSettings_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IAutomaticUpdatesSettings_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IAutomaticUpdatesSettings_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IAutomaticUpdatesSettings_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IAutomaticUpdatesSettings_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IAutomaticUpdatesSettings_get_NotificationLevel(This,retval) \
( (This)->lpVtbl -> get_NotificationLevel(This,retval) )
#define IAutomaticUpdatesSettings_put_NotificationLevel(This,value) \
( (This)->lpVtbl -> put_NotificationLevel(This,value) )
#define IAutomaticUpdatesSettings_get_ReadOnly(This,retval) \
( (This)->lpVtbl -> get_ReadOnly(This,retval) )
#define IAutomaticUpdatesSettings_get_Required(This,retval) \
( (This)->lpVtbl -> get_Required(This,retval) )
#define IAutomaticUpdatesSettings_get_ScheduledInstallationDay(This,retval) \
( (This)->lpVtbl -> get_ScheduledInstallationDay(This,retval) )
#define IAutomaticUpdatesSettings_put_ScheduledInstallationDay(This,value) \
( (This)->lpVtbl -> put_ScheduledInstallationDay(This,value) )
#define IAutomaticUpdatesSettings_get_ScheduledInstallationTime(This,retval) \
( (This)->lpVtbl -> get_ScheduledInstallationTime(This,retval) )
#define IAutomaticUpdatesSettings_put_ScheduledInstallationTime(This,value) \
( (This)->lpVtbl -> put_ScheduledInstallationTime(This,value) )
#define IAutomaticUpdatesSettings_Refresh(This) \
( (This)->lpVtbl -> Refresh(This) )
#define IAutomaticUpdatesSettings_Save(This) \
( (This)->lpVtbl -> Save(This) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IAutomaticUpdatesSettings_INTERFACE_DEFINED__ */
#ifndef __IAutomaticUpdatesSettings2_INTERFACE_DEFINED__
#define __IAutomaticUpdatesSettings2_INTERFACE_DEFINED__
/* interface IAutomaticUpdatesSettings2 */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IAutomaticUpdatesSettings2;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6abc136a-c3ca-4384-8171-cb2b1e59b8dc")
IAutomaticUpdatesSettings2 : public IAutomaticUpdatesSettings
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IncludeRecommendedUpdates(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_IncludeRecommendedUpdates(
/* [in] */ VARIANT_BOOL value) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CheckPermission(
/* [in] */ AutomaticUpdatesUserType userType,
/* [in] */ AutomaticUpdatesPermissionType permissionType,
/* [retval][out] */ __RPC__out VARIANT_BOOL *userHasPermission) = 0;
};
#else /* C style interface */
typedef struct IAutomaticUpdatesSettings2Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IAutomaticUpdatesSettings2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IAutomaticUpdatesSettings2 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IAutomaticUpdatesSettings2 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IAutomaticUpdatesSettings2 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IAutomaticUpdatesSettings2 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IAutomaticUpdatesSettings2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IAutomaticUpdatesSettings2 * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_NotificationLevel )(
__RPC__in IAutomaticUpdatesSettings2 * This,
/* [retval][out] */ __RPC__out AutomaticUpdatesNotificationLevel *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_NotificationLevel )(
__RPC__in IAutomaticUpdatesSettings2 * This,
/* [in] */ AutomaticUpdatesNotificationLevel value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReadOnly )(
__RPC__in IAutomaticUpdatesSettings2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Required )(
__RPC__in IAutomaticUpdatesSettings2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ScheduledInstallationDay )(
__RPC__in IAutomaticUpdatesSettings2 * This,
/* [retval][out] */ __RPC__out AutomaticUpdatesScheduledInstallationDay *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ScheduledInstallationDay )(
__RPC__in IAutomaticUpdatesSettings2 * This,
/* [in] */ AutomaticUpdatesScheduledInstallationDay value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ScheduledInstallationTime )(
__RPC__in IAutomaticUpdatesSettings2 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ScheduledInstallationTime )(
__RPC__in IAutomaticUpdatesSettings2 * This,
/* [in] */ LONG value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Refresh )(
__RPC__in IAutomaticUpdatesSettings2 * This);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Save )(
__RPC__in IAutomaticUpdatesSettings2 * This);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IncludeRecommendedUpdates )(
__RPC__in IAutomaticUpdatesSettings2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IncludeRecommendedUpdates )(
__RPC__in IAutomaticUpdatesSettings2 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CheckPermission )(
__RPC__in IAutomaticUpdatesSettings2 * This,
/* [in] */ AutomaticUpdatesUserType userType,
/* [in] */ AutomaticUpdatesPermissionType permissionType,
/* [retval][out] */ __RPC__out VARIANT_BOOL *userHasPermission);
END_INTERFACE
} IAutomaticUpdatesSettings2Vtbl;
interface IAutomaticUpdatesSettings2
{
CONST_VTBL struct IAutomaticUpdatesSettings2Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IAutomaticUpdatesSettings2_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IAutomaticUpdatesSettings2_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IAutomaticUpdatesSettings2_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IAutomaticUpdatesSettings2_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IAutomaticUpdatesSettings2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IAutomaticUpdatesSettings2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IAutomaticUpdatesSettings2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IAutomaticUpdatesSettings2_get_NotificationLevel(This,retval) \
( (This)->lpVtbl -> get_NotificationLevel(This,retval) )
#define IAutomaticUpdatesSettings2_put_NotificationLevel(This,value) \
( (This)->lpVtbl -> put_NotificationLevel(This,value) )
#define IAutomaticUpdatesSettings2_get_ReadOnly(This,retval) \
( (This)->lpVtbl -> get_ReadOnly(This,retval) )
#define IAutomaticUpdatesSettings2_get_Required(This,retval) \
( (This)->lpVtbl -> get_Required(This,retval) )
#define IAutomaticUpdatesSettings2_get_ScheduledInstallationDay(This,retval) \
( (This)->lpVtbl -> get_ScheduledInstallationDay(This,retval) )
#define IAutomaticUpdatesSettings2_put_ScheduledInstallationDay(This,value) \
( (This)->lpVtbl -> put_ScheduledInstallationDay(This,value) )
#define IAutomaticUpdatesSettings2_get_ScheduledInstallationTime(This,retval) \
( (This)->lpVtbl -> get_ScheduledInstallationTime(This,retval) )
#define IAutomaticUpdatesSettings2_put_ScheduledInstallationTime(This,value) \
( (This)->lpVtbl -> put_ScheduledInstallationTime(This,value) )
#define IAutomaticUpdatesSettings2_Refresh(This) \
( (This)->lpVtbl -> Refresh(This) )
#define IAutomaticUpdatesSettings2_Save(This) \
( (This)->lpVtbl -> Save(This) )
#define IAutomaticUpdatesSettings2_get_IncludeRecommendedUpdates(This,retval) \
( (This)->lpVtbl -> get_IncludeRecommendedUpdates(This,retval) )
#define IAutomaticUpdatesSettings2_put_IncludeRecommendedUpdates(This,value) \
( (This)->lpVtbl -> put_IncludeRecommendedUpdates(This,value) )
#define IAutomaticUpdatesSettings2_CheckPermission(This,userType,permissionType,userHasPermission) \
( (This)->lpVtbl -> CheckPermission(This,userType,permissionType,userHasPermission) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IAutomaticUpdatesSettings2_INTERFACE_DEFINED__ */
#ifndef __IAutomaticUpdatesSettings3_INTERFACE_DEFINED__
#define __IAutomaticUpdatesSettings3_INTERFACE_DEFINED__
/* interface IAutomaticUpdatesSettings3 */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IAutomaticUpdatesSettings3;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b587f5c3-f57e-485f-bbf5-0d181c5cd0dc")
IAutomaticUpdatesSettings3 : public IAutomaticUpdatesSettings2
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_NonAdministratorsElevated(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_NonAdministratorsElevated(
/* [in] */ VARIANT_BOOL value) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_FeaturedUpdatesEnabled(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_FeaturedUpdatesEnabled(
/* [in] */ VARIANT_BOOL value) = 0;
};
#else /* C style interface */
typedef struct IAutomaticUpdatesSettings3Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IAutomaticUpdatesSettings3 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IAutomaticUpdatesSettings3 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IAutomaticUpdatesSettings3 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IAutomaticUpdatesSettings3 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IAutomaticUpdatesSettings3 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IAutomaticUpdatesSettings3 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IAutomaticUpdatesSettings3 * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_NotificationLevel )(
__RPC__in IAutomaticUpdatesSettings3 * This,
/* [retval][out] */ __RPC__out AutomaticUpdatesNotificationLevel *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_NotificationLevel )(
__RPC__in IAutomaticUpdatesSettings3 * This,
/* [in] */ AutomaticUpdatesNotificationLevel value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReadOnly )(
__RPC__in IAutomaticUpdatesSettings3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Required )(
__RPC__in IAutomaticUpdatesSettings3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ScheduledInstallationDay )(
__RPC__in IAutomaticUpdatesSettings3 * This,
/* [retval][out] */ __RPC__out AutomaticUpdatesScheduledInstallationDay *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ScheduledInstallationDay )(
__RPC__in IAutomaticUpdatesSettings3 * This,
/* [in] */ AutomaticUpdatesScheduledInstallationDay value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ScheduledInstallationTime )(
__RPC__in IAutomaticUpdatesSettings3 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ScheduledInstallationTime )(
__RPC__in IAutomaticUpdatesSettings3 * This,
/* [in] */ LONG value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Refresh )(
__RPC__in IAutomaticUpdatesSettings3 * This);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Save )(
__RPC__in IAutomaticUpdatesSettings3 * This);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IncludeRecommendedUpdates )(
__RPC__in IAutomaticUpdatesSettings3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IncludeRecommendedUpdates )(
__RPC__in IAutomaticUpdatesSettings3 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CheckPermission )(
__RPC__in IAutomaticUpdatesSettings3 * This,
/* [in] */ AutomaticUpdatesUserType userType,
/* [in] */ AutomaticUpdatesPermissionType permissionType,
/* [retval][out] */ __RPC__out VARIANT_BOOL *userHasPermission);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_NonAdministratorsElevated )(
__RPC__in IAutomaticUpdatesSettings3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_NonAdministratorsElevated )(
__RPC__in IAutomaticUpdatesSettings3 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_FeaturedUpdatesEnabled )(
__RPC__in IAutomaticUpdatesSettings3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_FeaturedUpdatesEnabled )(
__RPC__in IAutomaticUpdatesSettings3 * This,
/* [in] */ VARIANT_BOOL value);
END_INTERFACE
} IAutomaticUpdatesSettings3Vtbl;
interface IAutomaticUpdatesSettings3
{
CONST_VTBL struct IAutomaticUpdatesSettings3Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IAutomaticUpdatesSettings3_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IAutomaticUpdatesSettings3_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IAutomaticUpdatesSettings3_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IAutomaticUpdatesSettings3_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IAutomaticUpdatesSettings3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IAutomaticUpdatesSettings3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IAutomaticUpdatesSettings3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IAutomaticUpdatesSettings3_get_NotificationLevel(This,retval) \
( (This)->lpVtbl -> get_NotificationLevel(This,retval) )
#define IAutomaticUpdatesSettings3_put_NotificationLevel(This,value) \
( (This)->lpVtbl -> put_NotificationLevel(This,value) )
#define IAutomaticUpdatesSettings3_get_ReadOnly(This,retval) \
( (This)->lpVtbl -> get_ReadOnly(This,retval) )
#define IAutomaticUpdatesSettings3_get_Required(This,retval) \
( (This)->lpVtbl -> get_Required(This,retval) )
#define IAutomaticUpdatesSettings3_get_ScheduledInstallationDay(This,retval) \
( (This)->lpVtbl -> get_ScheduledInstallationDay(This,retval) )
#define IAutomaticUpdatesSettings3_put_ScheduledInstallationDay(This,value) \
( (This)->lpVtbl -> put_ScheduledInstallationDay(This,value) )
#define IAutomaticUpdatesSettings3_get_ScheduledInstallationTime(This,retval) \
( (This)->lpVtbl -> get_ScheduledInstallationTime(This,retval) )
#define IAutomaticUpdatesSettings3_put_ScheduledInstallationTime(This,value) \
( (This)->lpVtbl -> put_ScheduledInstallationTime(This,value) )
#define IAutomaticUpdatesSettings3_Refresh(This) \
( (This)->lpVtbl -> Refresh(This) )
#define IAutomaticUpdatesSettings3_Save(This) \
( (This)->lpVtbl -> Save(This) )
#define IAutomaticUpdatesSettings3_get_IncludeRecommendedUpdates(This,retval) \
( (This)->lpVtbl -> get_IncludeRecommendedUpdates(This,retval) )
#define IAutomaticUpdatesSettings3_put_IncludeRecommendedUpdates(This,value) \
( (This)->lpVtbl -> put_IncludeRecommendedUpdates(This,value) )
#define IAutomaticUpdatesSettings3_CheckPermission(This,userType,permissionType,userHasPermission) \
( (This)->lpVtbl -> CheckPermission(This,userType,permissionType,userHasPermission) )
#define IAutomaticUpdatesSettings3_get_NonAdministratorsElevated(This,retval) \
( (This)->lpVtbl -> get_NonAdministratorsElevated(This,retval) )
#define IAutomaticUpdatesSettings3_put_NonAdministratorsElevated(This,value) \
( (This)->lpVtbl -> put_NonAdministratorsElevated(This,value) )
#define IAutomaticUpdatesSettings3_get_FeaturedUpdatesEnabled(This,retval) \
( (This)->lpVtbl -> get_FeaturedUpdatesEnabled(This,retval) )
#define IAutomaticUpdatesSettings3_put_FeaturedUpdatesEnabled(This,value) \
( (This)->lpVtbl -> put_FeaturedUpdatesEnabled(This,value) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IAutomaticUpdatesSettings3_INTERFACE_DEFINED__ */
#ifndef __IAutomaticUpdates_INTERFACE_DEFINED__
#define __IAutomaticUpdates_INTERFACE_DEFINED__
/* interface IAutomaticUpdates */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IAutomaticUpdates;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("673425bf-c082-4c7c-bdfd-569464b8e0ce")
IAutomaticUpdates : public IDispatch
{
public:
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE DetectNow( void) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Pause( void) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Resume( void) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE ShowSettingsDialog( void) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Settings(
/* [retval][out] */ __RPC__deref_out_opt IAutomaticUpdatesSettings **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ServiceEnabled(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EnableService( void) = 0;
};
#else /* C style interface */
typedef struct IAutomaticUpdatesVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IAutomaticUpdates * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IAutomaticUpdates * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IAutomaticUpdates * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IAutomaticUpdates * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IAutomaticUpdates * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IAutomaticUpdates * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IAutomaticUpdates * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *DetectNow )(
__RPC__in IAutomaticUpdates * This);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Pause )(
__RPC__in IAutomaticUpdates * This);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Resume )(
__RPC__in IAutomaticUpdates * This);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *ShowSettingsDialog )(
__RPC__in IAutomaticUpdates * This);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )(
__RPC__in IAutomaticUpdates * This,
/* [retval][out] */ __RPC__deref_out_opt IAutomaticUpdatesSettings **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceEnabled )(
__RPC__in IAutomaticUpdates * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EnableService )(
__RPC__in IAutomaticUpdates * This);
END_INTERFACE
} IAutomaticUpdatesVtbl;
interface IAutomaticUpdates
{
CONST_VTBL struct IAutomaticUpdatesVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IAutomaticUpdates_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IAutomaticUpdates_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IAutomaticUpdates_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IAutomaticUpdates_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IAutomaticUpdates_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IAutomaticUpdates_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IAutomaticUpdates_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IAutomaticUpdates_DetectNow(This) \
( (This)->lpVtbl -> DetectNow(This) )
#define IAutomaticUpdates_Pause(This) \
( (This)->lpVtbl -> Pause(This) )
#define IAutomaticUpdates_Resume(This) \
( (This)->lpVtbl -> Resume(This) )
#define IAutomaticUpdates_ShowSettingsDialog(This) \
( (This)->lpVtbl -> ShowSettingsDialog(This) )
#define IAutomaticUpdates_get_Settings(This,retval) \
( (This)->lpVtbl -> get_Settings(This,retval) )
#define IAutomaticUpdates_get_ServiceEnabled(This,retval) \
( (This)->lpVtbl -> get_ServiceEnabled(This,retval) )
#define IAutomaticUpdates_EnableService(This) \
( (This)->lpVtbl -> EnableService(This) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IAutomaticUpdates_INTERFACE_DEFINED__ */
#ifndef __IAutomaticUpdates2_INTERFACE_DEFINED__
#define __IAutomaticUpdates2_INTERFACE_DEFINED__
/* interface IAutomaticUpdates2 */
/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IAutomaticUpdates2;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("4A2F5C31-CFD9-410E-B7FB-29A653973A0F")
IAutomaticUpdates2 : public IAutomaticUpdates
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Results(
/* [retval][out] */ __RPC__deref_out_opt IAutomaticUpdatesResults **retval) = 0;
};
#else /* C style interface */
typedef struct IAutomaticUpdates2Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IAutomaticUpdates2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IAutomaticUpdates2 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IAutomaticUpdates2 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IAutomaticUpdates2 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IAutomaticUpdates2 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IAutomaticUpdates2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IAutomaticUpdates2 * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *DetectNow )(
__RPC__in IAutomaticUpdates2 * This);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Pause )(
__RPC__in IAutomaticUpdates2 * This);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Resume )(
__RPC__in IAutomaticUpdates2 * This);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *ShowSettingsDialog )(
__RPC__in IAutomaticUpdates2 * This);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )(
__RPC__in IAutomaticUpdates2 * This,
/* [retval][out] */ __RPC__deref_out_opt IAutomaticUpdatesSettings **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceEnabled )(
__RPC__in IAutomaticUpdates2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EnableService )(
__RPC__in IAutomaticUpdates2 * This);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Results )(
__RPC__in IAutomaticUpdates2 * This,
/* [retval][out] */ __RPC__deref_out_opt IAutomaticUpdatesResults **retval);
END_INTERFACE
} IAutomaticUpdates2Vtbl;
interface IAutomaticUpdates2
{
CONST_VTBL struct IAutomaticUpdates2Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IAutomaticUpdates2_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IAutomaticUpdates2_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IAutomaticUpdates2_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IAutomaticUpdates2_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IAutomaticUpdates2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IAutomaticUpdates2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IAutomaticUpdates2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IAutomaticUpdates2_DetectNow(This) \
( (This)->lpVtbl -> DetectNow(This) )
#define IAutomaticUpdates2_Pause(This) \
( (This)->lpVtbl -> Pause(This) )
#define IAutomaticUpdates2_Resume(This) \
( (This)->lpVtbl -> Resume(This) )
#define IAutomaticUpdates2_ShowSettingsDialog(This) \
( (This)->lpVtbl -> ShowSettingsDialog(This) )
#define IAutomaticUpdates2_get_Settings(This,retval) \
( (This)->lpVtbl -> get_Settings(This,retval) )
#define IAutomaticUpdates2_get_ServiceEnabled(This,retval) \
( (This)->lpVtbl -> get_ServiceEnabled(This,retval) )
#define IAutomaticUpdates2_EnableService(This) \
( (This)->lpVtbl -> EnableService(This) )
#define IAutomaticUpdates2_get_Results(This,retval) \
( (This)->lpVtbl -> get_Results(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IAutomaticUpdates2_INTERFACE_DEFINED__ */
#ifndef __IUpdateIdentity_INTERFACE_DEFINED__
#define __IUpdateIdentity_INTERFACE_DEFINED__
/* interface IUpdateIdentity */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateIdentity;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("46297823-9940-4c09-aed9-cd3ea6d05968")
IUpdateIdentity : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RevisionNumber(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UpdateID(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
};
#else /* C style interface */
typedef struct IUpdateIdentityVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateIdentity * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateIdentity * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateIdentity * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateIdentity * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateIdentity * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateIdentity * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateIdentity * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RevisionNumber )(
__RPC__in IUpdateIdentity * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UpdateID )(
__RPC__in IUpdateIdentity * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
END_INTERFACE
} IUpdateIdentityVtbl;
interface IUpdateIdentity
{
CONST_VTBL struct IUpdateIdentityVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateIdentity_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateIdentity_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateIdentity_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateIdentity_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateIdentity_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateIdentity_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateIdentity_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateIdentity_get_RevisionNumber(This,retval) \
( (This)->lpVtbl -> get_RevisionNumber(This,retval) )
#define IUpdateIdentity_get_UpdateID(This,retval) \
( (This)->lpVtbl -> get_UpdateID(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateIdentity_INTERFACE_DEFINED__ */
#ifndef __IImageInformation_INTERFACE_DEFINED__
#define __IImageInformation_INTERFACE_DEFINED__
/* interface IImageInformation */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IImageInformation;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("7c907864-346c-4aeb-8f3f-57da289f969f")
IImageInformation : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AltText(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Height(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Source(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Width(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
};
#else /* C style interface */
typedef struct IImageInformationVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IImageInformation * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IImageInformation * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IImageInformation * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IImageInformation * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IImageInformation * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IImageInformation * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IImageInformation * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AltText )(
__RPC__in IImageInformation * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Height )(
__RPC__in IImageInformation * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Source )(
__RPC__in IImageInformation * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Width )(
__RPC__in IImageInformation * This,
/* [retval][out] */ __RPC__out LONG *retval);
END_INTERFACE
} IImageInformationVtbl;
interface IImageInformation
{
CONST_VTBL struct IImageInformationVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IImageInformation_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IImageInformation_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IImageInformation_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IImageInformation_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IImageInformation_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IImageInformation_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IImageInformation_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IImageInformation_get_AltText(This,retval) \
( (This)->lpVtbl -> get_AltText(This,retval) )
#define IImageInformation_get_Height(This,retval) \
( (This)->lpVtbl -> get_Height(This,retval) )
#define IImageInformation_get_Source(This,retval) \
( (This)->lpVtbl -> get_Source(This,retval) )
#define IImageInformation_get_Width(This,retval) \
( (This)->lpVtbl -> get_Width(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IImageInformation_INTERFACE_DEFINED__ */
#ifndef __ICategory_INTERFACE_DEFINED__
#define __ICategory_INTERFACE_DEFINED__
/* interface ICategory */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_ICategory;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("81ddc1b8-9d35-47a6-b471-5b80f519223b")
ICategory : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Name(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CategoryID(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Children(
/* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Description(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Image(
/* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Order(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Parent(
/* [retval][out] */ __RPC__deref_out_opt ICategory **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Type(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Updates(
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval) = 0;
};
#else /* C style interface */
typedef struct ICategoryVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in ICategory * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in ICategory * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in ICategory * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in ICategory * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in ICategory * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in ICategory * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
ICategory * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Name )(
__RPC__in ICategory * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CategoryID )(
__RPC__in ICategory * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Children )(
__RPC__in ICategory * This,
/* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(
__RPC__in ICategory * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(
__RPC__in ICategory * This,
/* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Order )(
__RPC__in ICategory * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Parent )(
__RPC__in ICategory * This,
/* [retval][out] */ __RPC__deref_out_opt ICategory **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(
__RPC__in ICategory * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Updates )(
__RPC__in ICategory * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);
END_INTERFACE
} ICategoryVtbl;
interface ICategory
{
CONST_VTBL struct ICategoryVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define ICategory_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define ICategory_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define ICategory_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define ICategory_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define ICategory_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define ICategory_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define ICategory_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define ICategory_get_Name(This,retval) \
( (This)->lpVtbl -> get_Name(This,retval) )
#define ICategory_get_CategoryID(This,retval) \
( (This)->lpVtbl -> get_CategoryID(This,retval) )
#define ICategory_get_Children(This,retval) \
( (This)->lpVtbl -> get_Children(This,retval) )
#define ICategory_get_Description(This,retval) \
( (This)->lpVtbl -> get_Description(This,retval) )
#define ICategory_get_Image(This,retval) \
( (This)->lpVtbl -> get_Image(This,retval) )
#define ICategory_get_Order(This,retval) \
( (This)->lpVtbl -> get_Order(This,retval) )
#define ICategory_get_Parent(This,retval) \
( (This)->lpVtbl -> get_Parent(This,retval) )
#define ICategory_get_Type(This,retval) \
( (This)->lpVtbl -> get_Type(This,retval) )
#define ICategory_get_Updates(This,retval) \
( (This)->lpVtbl -> get_Updates(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __ICategory_INTERFACE_DEFINED__ */
#ifndef __ICategoryCollection_INTERFACE_DEFINED__
#define __ICategoryCollection_INTERFACE_DEFINED__
/* interface ICategoryCollection */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_ICategoryCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("3a56bfb8-576c-43f7-9335-fe4838fd7e37")
ICategoryCollection : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Item(
/* [in] */ LONG index,
/* [retval][out] */ __RPC__deref_out_opt ICategory **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get__NewEnum(
/* [retval][out] */ __RPC__deref_out_opt IUnknown **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Count(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
};
#else /* C style interface */
typedef struct ICategoryCollectionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in ICategoryCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in ICategoryCollection * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in ICategoryCollection * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in ICategoryCollection * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in ICategoryCollection * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in ICategoryCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
ICategoryCollection * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(
__RPC__in ICategoryCollection * This,
/* [in] */ LONG index,
/* [retval][out] */ __RPC__deref_out_opt ICategory **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(
__RPC__in ICategoryCollection * This,
/* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(
__RPC__in ICategoryCollection * This,
/* [retval][out] */ __RPC__out LONG *retval);
END_INTERFACE
} ICategoryCollectionVtbl;
interface ICategoryCollection
{
CONST_VTBL struct ICategoryCollectionVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define ICategoryCollection_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define ICategoryCollection_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define ICategoryCollection_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define ICategoryCollection_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define ICategoryCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define ICategoryCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define ICategoryCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define ICategoryCollection_get_Item(This,index,retval) \
( (This)->lpVtbl -> get_Item(This,index,retval) )
#define ICategoryCollection_get__NewEnum(This,retval) \
( (This)->lpVtbl -> get__NewEnum(This,retval) )
#define ICategoryCollection_get_Count(This,retval) \
( (This)->lpVtbl -> get_Count(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __ICategoryCollection_INTERFACE_DEFINED__ */
#ifndef __IInstallationBehavior_INTERFACE_DEFINED__
#define __IInstallationBehavior_INTERFACE_DEFINED__
/* interface IInstallationBehavior */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IInstallationBehavior;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("d9a59339-e245-4dbd-9686-4d5763e39624")
IInstallationBehavior : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CanRequestUserInput(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Impact(
/* [retval][out] */ __RPC__out InstallationImpact *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RebootBehavior(
/* [retval][out] */ __RPC__out InstallationRebootBehavior *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RequiresNetworkConnectivity(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
};
#else /* C style interface */
typedef struct IInstallationBehaviorVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IInstallationBehavior * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IInstallationBehavior * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IInstallationBehavior * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IInstallationBehavior * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IInstallationBehavior * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IInstallationBehavior * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IInstallationBehavior * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequestUserInput )(
__RPC__in IInstallationBehavior * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Impact )(
__RPC__in IInstallationBehavior * This,
/* [retval][out] */ __RPC__out InstallationImpact *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootBehavior )(
__RPC__in IInstallationBehavior * This,
/* [retval][out] */ __RPC__out InstallationRebootBehavior *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RequiresNetworkConnectivity )(
__RPC__in IInstallationBehavior * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
END_INTERFACE
} IInstallationBehaviorVtbl;
interface IInstallationBehavior
{
CONST_VTBL struct IInstallationBehaviorVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IInstallationBehavior_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IInstallationBehavior_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IInstallationBehavior_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IInstallationBehavior_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IInstallationBehavior_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IInstallationBehavior_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IInstallationBehavior_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IInstallationBehavior_get_CanRequestUserInput(This,retval) \
( (This)->lpVtbl -> get_CanRequestUserInput(This,retval) )
#define IInstallationBehavior_get_Impact(This,retval) \
( (This)->lpVtbl -> get_Impact(This,retval) )
#define IInstallationBehavior_get_RebootBehavior(This,retval) \
( (This)->lpVtbl -> get_RebootBehavior(This,retval) )
#define IInstallationBehavior_get_RequiresNetworkConnectivity(This,retval) \
( (This)->lpVtbl -> get_RequiresNetworkConnectivity(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IInstallationBehavior_INTERFACE_DEFINED__ */
#ifndef __IUpdateDownloadContent_INTERFACE_DEFINED__
#define __IUpdateDownloadContent_INTERFACE_DEFINED__
/* interface IUpdateDownloadContent */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateDownloadContent;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("54a2cb2d-9a0c-48b6-8a50-9abb69ee2d02")
IUpdateDownloadContent : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DownloadUrl(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
};
#else /* C style interface */
typedef struct IUpdateDownloadContentVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateDownloadContent * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateDownloadContent * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateDownloadContent * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateDownloadContent * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateDownloadContent * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateDownloadContent * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateDownloadContent * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadUrl )(
__RPC__in IUpdateDownloadContent * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
END_INTERFACE
} IUpdateDownloadContentVtbl;
interface IUpdateDownloadContent
{
CONST_VTBL struct IUpdateDownloadContentVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateDownloadContent_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateDownloadContent_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateDownloadContent_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateDownloadContent_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateDownloadContent_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateDownloadContent_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateDownloadContent_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateDownloadContent_get_DownloadUrl(This,retval) \
( (This)->lpVtbl -> get_DownloadUrl(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateDownloadContent_INTERFACE_DEFINED__ */
#ifndef __IUpdateDownloadContent2_INTERFACE_DEFINED__
#define __IUpdateDownloadContent2_INTERFACE_DEFINED__
/* interface IUpdateDownloadContent2 */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateDownloadContent2;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c97ad11b-f257-420b-9d9f-377f733f6f68")
IUpdateDownloadContent2 : public IUpdateDownloadContent
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsDeltaCompressedContent(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
};
#else /* C style interface */
typedef struct IUpdateDownloadContent2Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateDownloadContent2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateDownloadContent2 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateDownloadContent2 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateDownloadContent2 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateDownloadContent2 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateDownloadContent2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateDownloadContent2 * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadUrl )(
__RPC__in IUpdateDownloadContent2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDeltaCompressedContent )(
__RPC__in IUpdateDownloadContent2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
END_INTERFACE
} IUpdateDownloadContent2Vtbl;
interface IUpdateDownloadContent2
{
CONST_VTBL struct IUpdateDownloadContent2Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateDownloadContent2_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateDownloadContent2_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateDownloadContent2_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateDownloadContent2_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateDownloadContent2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateDownloadContent2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateDownloadContent2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateDownloadContent2_get_DownloadUrl(This,retval) \
( (This)->lpVtbl -> get_DownloadUrl(This,retval) )
#define IUpdateDownloadContent2_get_IsDeltaCompressedContent(This,retval) \
( (This)->lpVtbl -> get_IsDeltaCompressedContent(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateDownloadContent2_INTERFACE_DEFINED__ */
#ifndef __IUpdateDownloadContentCollection_INTERFACE_DEFINED__
#define __IUpdateDownloadContentCollection_INTERFACE_DEFINED__
/* interface IUpdateDownloadContentCollection */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateDownloadContentCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("bc5513c8-b3b8-4bf7-a4d4-361c0d8c88ba")
IUpdateDownloadContentCollection : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Item(
/* [in] */ LONG index,
/* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContent **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get__NewEnum(
/* [retval][out] */ __RPC__deref_out_opt IUnknown **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Count(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
};
#else /* C style interface */
typedef struct IUpdateDownloadContentCollectionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateDownloadContentCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateDownloadContentCollection * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateDownloadContentCollection * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateDownloadContentCollection * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateDownloadContentCollection * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateDownloadContentCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateDownloadContentCollection * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(
__RPC__in IUpdateDownloadContentCollection * This,
/* [in] */ LONG index,
/* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContent **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(
__RPC__in IUpdateDownloadContentCollection * This,
/* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(
__RPC__in IUpdateDownloadContentCollection * This,
/* [retval][out] */ __RPC__out LONG *retval);
END_INTERFACE
} IUpdateDownloadContentCollectionVtbl;
interface IUpdateDownloadContentCollection
{
CONST_VTBL struct IUpdateDownloadContentCollectionVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateDownloadContentCollection_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateDownloadContentCollection_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateDownloadContentCollection_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateDownloadContentCollection_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateDownloadContentCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateDownloadContentCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateDownloadContentCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateDownloadContentCollection_get_Item(This,index,retval) \
( (This)->lpVtbl -> get_Item(This,index,retval) )
#define IUpdateDownloadContentCollection_get__NewEnum(This,retval) \
( (This)->lpVtbl -> get__NewEnum(This,retval) )
#define IUpdateDownloadContentCollection_get_Count(This,retval) \
( (This)->lpVtbl -> get_Count(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateDownloadContentCollection_INTERFACE_DEFINED__ */
#ifndef __IUpdate_INTERFACE_DEFINED__
#define __IUpdate_INTERFACE_DEFINED__
/* interface IUpdate */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdate;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6a92b07a-d821-4682-b423-5c805022cc4d")
IUpdate : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Title(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AutoSelectOnWebSites(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_BundledUpdates(
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CanRequireSource(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Categories(
/* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Deadline(
/* [retval][out] */ __RPC__out VARIANT *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DeltaCompressedContentAvailable(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DeltaCompressedContentPreferred(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Description(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_EulaAccepted(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_EulaText(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_HandlerID(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Identity(
/* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Image(
/* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_InstallationBehavior(
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsBeta(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsDownloaded(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsHidden(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_IsHidden(
/* [in] */ VARIANT_BOOL value) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsInstalled(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsMandatory(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsUninstallable(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Languages(
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_LastDeploymentChangeTime(
/* [retval][out] */ __RPC__out DATE *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_MaxDownloadSize(
/* [retval][out] */ __RPC__out DECIMAL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_MinDownloadSize(
/* [retval][out] */ __RPC__out DECIMAL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_MoreInfoUrls(
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_MsrcSeverity(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RecommendedCpuSpeed(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RecommendedHardDiskSpace(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RecommendedMemory(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ReleaseNotes(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_SecurityBulletinIDs(
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_SupersededUpdateIDs(
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_SupportUrl(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Type(
/* [retval][out] */ __RPC__out UpdateType *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UninstallationNotes(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UninstallationBehavior(
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UninstallationSteps(
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_KBArticleIDs(
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE AcceptEula( void) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DeploymentAction(
/* [retval][out] */ __RPC__out DeploymentAction *retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CopyFromCache(
/* [ref][in] */ __RPC__in BSTR path,
/* [in] */ VARIANT_BOOL toExtractCabFiles) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DownloadPriority(
/* [retval][out] */ __RPC__out DownloadPriority *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DownloadContents(
/* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval) = 0;
};
#else /* C style interface */
typedef struct IUpdateVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdate * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdate * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdate * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdate * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdate * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdate * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdate * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelectOnWebSites )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BundledUpdates )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequireSource )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Deadline )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__out VARIANT *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentAvailable )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentPreferred )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaAccepted )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaText )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HandlerID )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Identity )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_InstallationBehavior )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBeta )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDownloaded )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsHidden )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsHidden )(
__RPC__in IUpdate * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsInstalled )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsMandatory )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsUninstallable )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Languages )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastDeploymentChangeTime )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MaxDownloadSize )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MinDownloadSize )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MoreInfoUrls )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MsrcSeverity )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedCpuSpeed )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedHardDiskSpace )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedMemory )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReleaseNotes )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SecurityBulletinIDs )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupersededUpdateIDs )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__out UpdateType *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationBehavior )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_KBArticleIDs )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AcceptEula )(
__RPC__in IUpdate * This);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeploymentAction )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__out DeploymentAction *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyFromCache )(
__RPC__in IUpdate * This,
/* [ref][in] */ __RPC__in BSTR path,
/* [in] */ VARIANT_BOOL toExtractCabFiles);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadPriority )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__out DownloadPriority *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadContents )(
__RPC__in IUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval);
END_INTERFACE
} IUpdateVtbl;
interface IUpdate
{
CONST_VTBL struct IUpdateVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdate_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdate_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdate_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdate_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdate_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdate_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdate_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdate_get_Title(This,retval) \
( (This)->lpVtbl -> get_Title(This,retval) )
#define IUpdate_get_AutoSelectOnWebSites(This,retval) \
( (This)->lpVtbl -> get_AutoSelectOnWebSites(This,retval) )
#define IUpdate_get_BundledUpdates(This,retval) \
( (This)->lpVtbl -> get_BundledUpdates(This,retval) )
#define IUpdate_get_CanRequireSource(This,retval) \
( (This)->lpVtbl -> get_CanRequireSource(This,retval) )
#define IUpdate_get_Categories(This,retval) \
( (This)->lpVtbl -> get_Categories(This,retval) )
#define IUpdate_get_Deadline(This,retval) \
( (This)->lpVtbl -> get_Deadline(This,retval) )
#define IUpdate_get_DeltaCompressedContentAvailable(This,retval) \
( (This)->lpVtbl -> get_DeltaCompressedContentAvailable(This,retval) )
#define IUpdate_get_DeltaCompressedContentPreferred(This,retval) \
( (This)->lpVtbl -> get_DeltaCompressedContentPreferred(This,retval) )
#define IUpdate_get_Description(This,retval) \
( (This)->lpVtbl -> get_Description(This,retval) )
#define IUpdate_get_EulaAccepted(This,retval) \
( (This)->lpVtbl -> get_EulaAccepted(This,retval) )
#define IUpdate_get_EulaText(This,retval) \
( (This)->lpVtbl -> get_EulaText(This,retval) )
#define IUpdate_get_HandlerID(This,retval) \
( (This)->lpVtbl -> get_HandlerID(This,retval) )
#define IUpdate_get_Identity(This,retval) \
( (This)->lpVtbl -> get_Identity(This,retval) )
#define IUpdate_get_Image(This,retval) \
( (This)->lpVtbl -> get_Image(This,retval) )
#define IUpdate_get_InstallationBehavior(This,retval) \
( (This)->lpVtbl -> get_InstallationBehavior(This,retval) )
#define IUpdate_get_IsBeta(This,retval) \
( (This)->lpVtbl -> get_IsBeta(This,retval) )
#define IUpdate_get_IsDownloaded(This,retval) \
( (This)->lpVtbl -> get_IsDownloaded(This,retval) )
#define IUpdate_get_IsHidden(This,retval) \
( (This)->lpVtbl -> get_IsHidden(This,retval) )
#define IUpdate_put_IsHidden(This,value) \
( (This)->lpVtbl -> put_IsHidden(This,value) )
#define IUpdate_get_IsInstalled(This,retval) \
( (This)->lpVtbl -> get_IsInstalled(This,retval) )
#define IUpdate_get_IsMandatory(This,retval) \
( (This)->lpVtbl -> get_IsMandatory(This,retval) )
#define IUpdate_get_IsUninstallable(This,retval) \
( (This)->lpVtbl -> get_IsUninstallable(This,retval) )
#define IUpdate_get_Languages(This,retval) \
( (This)->lpVtbl -> get_Languages(This,retval) )
#define IUpdate_get_LastDeploymentChangeTime(This,retval) \
( (This)->lpVtbl -> get_LastDeploymentChangeTime(This,retval) )
#define IUpdate_get_MaxDownloadSize(This,retval) \
( (This)->lpVtbl -> get_MaxDownloadSize(This,retval) )
#define IUpdate_get_MinDownloadSize(This,retval) \
( (This)->lpVtbl -> get_MinDownloadSize(This,retval) )
#define IUpdate_get_MoreInfoUrls(This,retval) \
( (This)->lpVtbl -> get_MoreInfoUrls(This,retval) )
#define IUpdate_get_MsrcSeverity(This,retval) \
( (This)->lpVtbl -> get_MsrcSeverity(This,retval) )
#define IUpdate_get_RecommendedCpuSpeed(This,retval) \
( (This)->lpVtbl -> get_RecommendedCpuSpeed(This,retval) )
#define IUpdate_get_RecommendedHardDiskSpace(This,retval) \
( (This)->lpVtbl -> get_RecommendedHardDiskSpace(This,retval) )
#define IUpdate_get_RecommendedMemory(This,retval) \
( (This)->lpVtbl -> get_RecommendedMemory(This,retval) )
#define IUpdate_get_ReleaseNotes(This,retval) \
( (This)->lpVtbl -> get_ReleaseNotes(This,retval) )
#define IUpdate_get_SecurityBulletinIDs(This,retval) \
( (This)->lpVtbl -> get_SecurityBulletinIDs(This,retval) )
#define IUpdate_get_SupersededUpdateIDs(This,retval) \
( (This)->lpVtbl -> get_SupersededUpdateIDs(This,retval) )
#define IUpdate_get_SupportUrl(This,retval) \
( (This)->lpVtbl -> get_SupportUrl(This,retval) )
#define IUpdate_get_Type(This,retval) \
( (This)->lpVtbl -> get_Type(This,retval) )
#define IUpdate_get_UninstallationNotes(This,retval) \
( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )
#define IUpdate_get_UninstallationBehavior(This,retval) \
( (This)->lpVtbl -> get_UninstallationBehavior(This,retval) )
#define IUpdate_get_UninstallationSteps(This,retval) \
( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )
#define IUpdate_get_KBArticleIDs(This,retval) \
( (This)->lpVtbl -> get_KBArticleIDs(This,retval) )
#define IUpdate_AcceptEula(This) \
( (This)->lpVtbl -> AcceptEula(This) )
#define IUpdate_get_DeploymentAction(This,retval) \
( (This)->lpVtbl -> get_DeploymentAction(This,retval) )
#define IUpdate_CopyFromCache(This,path,toExtractCabFiles) \
( (This)->lpVtbl -> CopyFromCache(This,path,toExtractCabFiles) )
#define IUpdate_get_DownloadPriority(This,retval) \
( (This)->lpVtbl -> get_DownloadPriority(This,retval) )
#define IUpdate_get_DownloadContents(This,retval) \
( (This)->lpVtbl -> get_DownloadContents(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdate_INTERFACE_DEFINED__ */
#ifndef __IWindowsDriverUpdate_INTERFACE_DEFINED__
#define __IWindowsDriverUpdate_INTERFACE_DEFINED__
/* interface IWindowsDriverUpdate */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IWindowsDriverUpdate;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b383cd1a-5ce9-4504-9f63-764b1236f191")
IWindowsDriverUpdate : public IUpdate
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverClass(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverHardwareID(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverManufacturer(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverModel(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverProvider(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverVerDate(
/* [retval][out] */ __RPC__out DATE *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DeviceProblemNumber(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DeviceStatus(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
};
#else /* C style interface */
typedef struct IWindowsDriverUpdateVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IWindowsDriverUpdate * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IWindowsDriverUpdate * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IWindowsDriverUpdate * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IWindowsDriverUpdate * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IWindowsDriverUpdate * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IWindowsDriverUpdate * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IWindowsDriverUpdate * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelectOnWebSites )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BundledUpdates )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequireSource )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Deadline )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out VARIANT *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentAvailable )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentPreferred )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaAccepted )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaText )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HandlerID )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Identity )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_InstallationBehavior )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBeta )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDownloaded )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsHidden )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsHidden )(
__RPC__in IWindowsDriverUpdate * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsInstalled )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsMandatory )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsUninstallable )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Languages )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastDeploymentChangeTime )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MaxDownloadSize )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MinDownloadSize )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MoreInfoUrls )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MsrcSeverity )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedCpuSpeed )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedHardDiskSpace )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedMemory )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReleaseNotes )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SecurityBulletinIDs )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupersededUpdateIDs )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out UpdateType *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationBehavior )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_KBArticleIDs )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AcceptEula )(
__RPC__in IWindowsDriverUpdate * This);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeploymentAction )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out DeploymentAction *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyFromCache )(
__RPC__in IWindowsDriverUpdate * This,
/* [ref][in] */ __RPC__in BSTR path,
/* [in] */ VARIANT_BOOL toExtractCabFiles);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadPriority )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out DownloadPriority *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadContents )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverClass )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverHardwareID )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverManufacturer )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverModel )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverProvider )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverVerDate )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceProblemNumber )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceStatus )(
__RPC__in IWindowsDriverUpdate * This,
/* [retval][out] */ __RPC__out LONG *retval);
END_INTERFACE
} IWindowsDriverUpdateVtbl;
interface IWindowsDriverUpdate
{
CONST_VTBL struct IWindowsDriverUpdateVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IWindowsDriverUpdate_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IWindowsDriverUpdate_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IWindowsDriverUpdate_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IWindowsDriverUpdate_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IWindowsDriverUpdate_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IWindowsDriverUpdate_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IWindowsDriverUpdate_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IWindowsDriverUpdate_get_Title(This,retval) \
( (This)->lpVtbl -> get_Title(This,retval) )
#define IWindowsDriverUpdate_get_AutoSelectOnWebSites(This,retval) \
( (This)->lpVtbl -> get_AutoSelectOnWebSites(This,retval) )
#define IWindowsDriverUpdate_get_BundledUpdates(This,retval) \
( (This)->lpVtbl -> get_BundledUpdates(This,retval) )
#define IWindowsDriverUpdate_get_CanRequireSource(This,retval) \
( (This)->lpVtbl -> get_CanRequireSource(This,retval) )
#define IWindowsDriverUpdate_get_Categories(This,retval) \
( (This)->lpVtbl -> get_Categories(This,retval) )
#define IWindowsDriverUpdate_get_Deadline(This,retval) \
( (This)->lpVtbl -> get_Deadline(This,retval) )
#define IWindowsDriverUpdate_get_DeltaCompressedContentAvailable(This,retval) \
( (This)->lpVtbl -> get_DeltaCompressedContentAvailable(This,retval) )
#define IWindowsDriverUpdate_get_DeltaCompressedContentPreferred(This,retval) \
( (This)->lpVtbl -> get_DeltaCompressedContentPreferred(This,retval) )
#define IWindowsDriverUpdate_get_Description(This,retval) \
( (This)->lpVtbl -> get_Description(This,retval) )
#define IWindowsDriverUpdate_get_EulaAccepted(This,retval) \
( (This)->lpVtbl -> get_EulaAccepted(This,retval) )
#define IWindowsDriverUpdate_get_EulaText(This,retval) \
( (This)->lpVtbl -> get_EulaText(This,retval) )
#define IWindowsDriverUpdate_get_HandlerID(This,retval) \
( (This)->lpVtbl -> get_HandlerID(This,retval) )
#define IWindowsDriverUpdate_get_Identity(This,retval) \
( (This)->lpVtbl -> get_Identity(This,retval) )
#define IWindowsDriverUpdate_get_Image(This,retval) \
( (This)->lpVtbl -> get_Image(This,retval) )
#define IWindowsDriverUpdate_get_InstallationBehavior(This,retval) \
( (This)->lpVtbl -> get_InstallationBehavior(This,retval) )
#define IWindowsDriverUpdate_get_IsBeta(This,retval) \
( (This)->lpVtbl -> get_IsBeta(This,retval) )
#define IWindowsDriverUpdate_get_IsDownloaded(This,retval) \
( (This)->lpVtbl -> get_IsDownloaded(This,retval) )
#define IWindowsDriverUpdate_get_IsHidden(This,retval) \
( (This)->lpVtbl -> get_IsHidden(This,retval) )
#define IWindowsDriverUpdate_put_IsHidden(This,value) \
( (This)->lpVtbl -> put_IsHidden(This,value) )
#define IWindowsDriverUpdate_get_IsInstalled(This,retval) \
( (This)->lpVtbl -> get_IsInstalled(This,retval) )
#define IWindowsDriverUpdate_get_IsMandatory(This,retval) \
( (This)->lpVtbl -> get_IsMandatory(This,retval) )
#define IWindowsDriverUpdate_get_IsUninstallable(This,retval) \
( (This)->lpVtbl -> get_IsUninstallable(This,retval) )
#define IWindowsDriverUpdate_get_Languages(This,retval) \
( (This)->lpVtbl -> get_Languages(This,retval) )
#define IWindowsDriverUpdate_get_LastDeploymentChangeTime(This,retval) \
( (This)->lpVtbl -> get_LastDeploymentChangeTime(This,retval) )
#define IWindowsDriverUpdate_get_MaxDownloadSize(This,retval) \
( (This)->lpVtbl -> get_MaxDownloadSize(This,retval) )
#define IWindowsDriverUpdate_get_MinDownloadSize(This,retval) \
( (This)->lpVtbl -> get_MinDownloadSize(This,retval) )
#define IWindowsDriverUpdate_get_MoreInfoUrls(This,retval) \
( (This)->lpVtbl -> get_MoreInfoUrls(This,retval) )
#define IWindowsDriverUpdate_get_MsrcSeverity(This,retval) \
( (This)->lpVtbl -> get_MsrcSeverity(This,retval) )
#define IWindowsDriverUpdate_get_RecommendedCpuSpeed(This,retval) \
( (This)->lpVtbl -> get_RecommendedCpuSpeed(This,retval) )
#define IWindowsDriverUpdate_get_RecommendedHardDiskSpace(This,retval) \
( (This)->lpVtbl -> get_RecommendedHardDiskSpace(This,retval) )
#define IWindowsDriverUpdate_get_RecommendedMemory(This,retval) \
( (This)->lpVtbl -> get_RecommendedMemory(This,retval) )
#define IWindowsDriverUpdate_get_ReleaseNotes(This,retval) \
( (This)->lpVtbl -> get_ReleaseNotes(This,retval) )
#define IWindowsDriverUpdate_get_SecurityBulletinIDs(This,retval) \
( (This)->lpVtbl -> get_SecurityBulletinIDs(This,retval) )
#define IWindowsDriverUpdate_get_SupersededUpdateIDs(This,retval) \
( (This)->lpVtbl -> get_SupersededUpdateIDs(This,retval) )
#define IWindowsDriverUpdate_get_SupportUrl(This,retval) \
( (This)->lpVtbl -> get_SupportUrl(This,retval) )
#define IWindowsDriverUpdate_get_Type(This,retval) \
( (This)->lpVtbl -> get_Type(This,retval) )
#define IWindowsDriverUpdate_get_UninstallationNotes(This,retval) \
( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )
#define IWindowsDriverUpdate_get_UninstallationBehavior(This,retval) \
( (This)->lpVtbl -> get_UninstallationBehavior(This,retval) )
#define IWindowsDriverUpdate_get_UninstallationSteps(This,retval) \
( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )
#define IWindowsDriverUpdate_get_KBArticleIDs(This,retval) \
( (This)->lpVtbl -> get_KBArticleIDs(This,retval) )
#define IWindowsDriverUpdate_AcceptEula(This) \
( (This)->lpVtbl -> AcceptEula(This) )
#define IWindowsDriverUpdate_get_DeploymentAction(This,retval) \
( (This)->lpVtbl -> get_DeploymentAction(This,retval) )
#define IWindowsDriverUpdate_CopyFromCache(This,path,toExtractCabFiles) \
( (This)->lpVtbl -> CopyFromCache(This,path,toExtractCabFiles) )
#define IWindowsDriverUpdate_get_DownloadPriority(This,retval) \
( (This)->lpVtbl -> get_DownloadPriority(This,retval) )
#define IWindowsDriverUpdate_get_DownloadContents(This,retval) \
( (This)->lpVtbl -> get_DownloadContents(This,retval) )
#define IWindowsDriverUpdate_get_DriverClass(This,retval) \
( (This)->lpVtbl -> get_DriverClass(This,retval) )
#define IWindowsDriverUpdate_get_DriverHardwareID(This,retval) \
( (This)->lpVtbl -> get_DriverHardwareID(This,retval) )
#define IWindowsDriverUpdate_get_DriverManufacturer(This,retval) \
( (This)->lpVtbl -> get_DriverManufacturer(This,retval) )
#define IWindowsDriverUpdate_get_DriverModel(This,retval) \
( (This)->lpVtbl -> get_DriverModel(This,retval) )
#define IWindowsDriverUpdate_get_DriverProvider(This,retval) \
( (This)->lpVtbl -> get_DriverProvider(This,retval) )
#define IWindowsDriverUpdate_get_DriverVerDate(This,retval) \
( (This)->lpVtbl -> get_DriverVerDate(This,retval) )
#define IWindowsDriverUpdate_get_DeviceProblemNumber(This,retval) \
( (This)->lpVtbl -> get_DeviceProblemNumber(This,retval) )
#define IWindowsDriverUpdate_get_DeviceStatus(This,retval) \
( (This)->lpVtbl -> get_DeviceStatus(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IWindowsDriverUpdate_INTERFACE_DEFINED__ */
#ifndef __IUpdate2_INTERFACE_DEFINED__
#define __IUpdate2_INTERFACE_DEFINED__
/* interface IUpdate2 */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdate2;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("144fe9b0-d23d-4a8b-8634-fb4457533b7a")
IUpdate2 : public IUpdate
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RebootRequired(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsPresent(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CveIDs(
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CopyToCache(
/* [in] */ __RPC__in_opt IStringCollection *pFiles) = 0;
};
#else /* C style interface */
typedef struct IUpdate2Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdate2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdate2 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdate2 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdate2 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdate2 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdate2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdate2 * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelectOnWebSites )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BundledUpdates )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequireSource )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Deadline )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentAvailable )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentPreferred )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaAccepted )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaText )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HandlerID )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Identity )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_InstallationBehavior )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBeta )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDownloaded )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsHidden )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsHidden )(
__RPC__in IUpdate2 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsInstalled )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsMandatory )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsUninstallable )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Languages )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastDeploymentChangeTime )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MaxDownloadSize )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MinDownloadSize )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MoreInfoUrls )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MsrcSeverity )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedCpuSpeed )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedHardDiskSpace )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedMemory )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReleaseNotes )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SecurityBulletinIDs )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupersededUpdateIDs )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out UpdateType *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationBehavior )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_KBArticleIDs )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AcceptEula )(
__RPC__in IUpdate2 * This);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeploymentAction )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out DeploymentAction *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyFromCache )(
__RPC__in IUpdate2 * This,
/* [ref][in] */ __RPC__in BSTR path,
/* [in] */ VARIANT_BOOL toExtractCabFiles);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadPriority )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out DownloadPriority *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadContents )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsPresent )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CveIDs )(
__RPC__in IUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyToCache )(
__RPC__in IUpdate2 * This,
/* [in] */ __RPC__in_opt IStringCollection *pFiles);
END_INTERFACE
} IUpdate2Vtbl;
interface IUpdate2
{
CONST_VTBL struct IUpdate2Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdate2_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdate2_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdate2_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdate2_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdate2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdate2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdate2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdate2_get_Title(This,retval) \
( (This)->lpVtbl -> get_Title(This,retval) )
#define IUpdate2_get_AutoSelectOnWebSites(This,retval) \
( (This)->lpVtbl -> get_AutoSelectOnWebSites(This,retval) )
#define IUpdate2_get_BundledUpdates(This,retval) \
( (This)->lpVtbl -> get_BundledUpdates(This,retval) )
#define IUpdate2_get_CanRequireSource(This,retval) \
( (This)->lpVtbl -> get_CanRequireSource(This,retval) )
#define IUpdate2_get_Categories(This,retval) \
( (This)->lpVtbl -> get_Categories(This,retval) )
#define IUpdate2_get_Deadline(This,retval) \
( (This)->lpVtbl -> get_Deadline(This,retval) )
#define IUpdate2_get_DeltaCompressedContentAvailable(This,retval) \
( (This)->lpVtbl -> get_DeltaCompressedContentAvailable(This,retval) )
#define IUpdate2_get_DeltaCompressedContentPreferred(This,retval) \
( (This)->lpVtbl -> get_DeltaCompressedContentPreferred(This,retval) )
#define IUpdate2_get_Description(This,retval) \
( (This)->lpVtbl -> get_Description(This,retval) )
#define IUpdate2_get_EulaAccepted(This,retval) \
( (This)->lpVtbl -> get_EulaAccepted(This,retval) )
#define IUpdate2_get_EulaText(This,retval) \
( (This)->lpVtbl -> get_EulaText(This,retval) )
#define IUpdate2_get_HandlerID(This,retval) \
( (This)->lpVtbl -> get_HandlerID(This,retval) )
#define IUpdate2_get_Identity(This,retval) \
( (This)->lpVtbl -> get_Identity(This,retval) )
#define IUpdate2_get_Image(This,retval) \
( (This)->lpVtbl -> get_Image(This,retval) )
#define IUpdate2_get_InstallationBehavior(This,retval) \
( (This)->lpVtbl -> get_InstallationBehavior(This,retval) )
#define IUpdate2_get_IsBeta(This,retval) \
( (This)->lpVtbl -> get_IsBeta(This,retval) )
#define IUpdate2_get_IsDownloaded(This,retval) \
( (This)->lpVtbl -> get_IsDownloaded(This,retval) )
#define IUpdate2_get_IsHidden(This,retval) \
( (This)->lpVtbl -> get_IsHidden(This,retval) )
#define IUpdate2_put_IsHidden(This,value) \
( (This)->lpVtbl -> put_IsHidden(This,value) )
#define IUpdate2_get_IsInstalled(This,retval) \
( (This)->lpVtbl -> get_IsInstalled(This,retval) )
#define IUpdate2_get_IsMandatory(This,retval) \
( (This)->lpVtbl -> get_IsMandatory(This,retval) )
#define IUpdate2_get_IsUninstallable(This,retval) \
( (This)->lpVtbl -> get_IsUninstallable(This,retval) )
#define IUpdate2_get_Languages(This,retval) \
( (This)->lpVtbl -> get_Languages(This,retval) )
#define IUpdate2_get_LastDeploymentChangeTime(This,retval) \
( (This)->lpVtbl -> get_LastDeploymentChangeTime(This,retval) )
#define IUpdate2_get_MaxDownloadSize(This,retval) \
( (This)->lpVtbl -> get_MaxDownloadSize(This,retval) )
#define IUpdate2_get_MinDownloadSize(This,retval) \
( (This)->lpVtbl -> get_MinDownloadSize(This,retval) )
#define IUpdate2_get_MoreInfoUrls(This,retval) \
( (This)->lpVtbl -> get_MoreInfoUrls(This,retval) )
#define IUpdate2_get_MsrcSeverity(This,retval) \
( (This)->lpVtbl -> get_MsrcSeverity(This,retval) )
#define IUpdate2_get_RecommendedCpuSpeed(This,retval) \
( (This)->lpVtbl -> get_RecommendedCpuSpeed(This,retval) )
#define IUpdate2_get_RecommendedHardDiskSpace(This,retval) \
( (This)->lpVtbl -> get_RecommendedHardDiskSpace(This,retval) )
#define IUpdate2_get_RecommendedMemory(This,retval) \
( (This)->lpVtbl -> get_RecommendedMemory(This,retval) )
#define IUpdate2_get_ReleaseNotes(This,retval) \
( (This)->lpVtbl -> get_ReleaseNotes(This,retval) )
#define IUpdate2_get_SecurityBulletinIDs(This,retval) \
( (This)->lpVtbl -> get_SecurityBulletinIDs(This,retval) )
#define IUpdate2_get_SupersededUpdateIDs(This,retval) \
( (This)->lpVtbl -> get_SupersededUpdateIDs(This,retval) )
#define IUpdate2_get_SupportUrl(This,retval) \
( (This)->lpVtbl -> get_SupportUrl(This,retval) )
#define IUpdate2_get_Type(This,retval) \
( (This)->lpVtbl -> get_Type(This,retval) )
#define IUpdate2_get_UninstallationNotes(This,retval) \
( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )
#define IUpdate2_get_UninstallationBehavior(This,retval) \
( (This)->lpVtbl -> get_UninstallationBehavior(This,retval) )
#define IUpdate2_get_UninstallationSteps(This,retval) \
( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )
#define IUpdate2_get_KBArticleIDs(This,retval) \
( (This)->lpVtbl -> get_KBArticleIDs(This,retval) )
#define IUpdate2_AcceptEula(This) \
( (This)->lpVtbl -> AcceptEula(This) )
#define IUpdate2_get_DeploymentAction(This,retval) \
( (This)->lpVtbl -> get_DeploymentAction(This,retval) )
#define IUpdate2_CopyFromCache(This,path,toExtractCabFiles) \
( (This)->lpVtbl -> CopyFromCache(This,path,toExtractCabFiles) )
#define IUpdate2_get_DownloadPriority(This,retval) \
( (This)->lpVtbl -> get_DownloadPriority(This,retval) )
#define IUpdate2_get_DownloadContents(This,retval) \
( (This)->lpVtbl -> get_DownloadContents(This,retval) )
#define IUpdate2_get_RebootRequired(This,retval) \
( (This)->lpVtbl -> get_RebootRequired(This,retval) )
#define IUpdate2_get_IsPresent(This,retval) \
( (This)->lpVtbl -> get_IsPresent(This,retval) )
#define IUpdate2_get_CveIDs(This,retval) \
( (This)->lpVtbl -> get_CveIDs(This,retval) )
#define IUpdate2_CopyToCache(This,pFiles) \
( (This)->lpVtbl -> CopyToCache(This,pFiles) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdate2_INTERFACE_DEFINED__ */
#ifndef __IUpdate3_INTERFACE_DEFINED__
#define __IUpdate3_INTERFACE_DEFINED__
/* interface IUpdate3 */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdate3;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("112EDA6B-95B3-476F-9D90-AEE82C6B8181")
IUpdate3 : public IUpdate2
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_BrowseOnly(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
};
#else /* C style interface */
typedef struct IUpdate3Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdate3 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdate3 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdate3 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdate3 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdate3 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdate3 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdate3 * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelectOnWebSites )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BundledUpdates )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequireSource )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Deadline )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentAvailable )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentPreferred )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaAccepted )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaText )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HandlerID )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Identity )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_InstallationBehavior )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBeta )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDownloaded )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsHidden )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsHidden )(
__RPC__in IUpdate3 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsInstalled )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsMandatory )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsUninstallable )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Languages )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastDeploymentChangeTime )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MaxDownloadSize )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MinDownloadSize )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MoreInfoUrls )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MsrcSeverity )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedCpuSpeed )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedHardDiskSpace )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedMemory )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReleaseNotes )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SecurityBulletinIDs )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupersededUpdateIDs )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out UpdateType *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationBehavior )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_KBArticleIDs )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AcceptEula )(
__RPC__in IUpdate3 * This);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeploymentAction )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out DeploymentAction *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyFromCache )(
__RPC__in IUpdate3 * This,
/* [ref][in] */ __RPC__in BSTR path,
/* [in] */ VARIANT_BOOL toExtractCabFiles);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadPriority )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out DownloadPriority *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadContents )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsPresent )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CveIDs )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyToCache )(
__RPC__in IUpdate3 * This,
/* [in] */ __RPC__in_opt IStringCollection *pFiles);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BrowseOnly )(
__RPC__in IUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
END_INTERFACE
} IUpdate3Vtbl;
interface IUpdate3
{
CONST_VTBL struct IUpdate3Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdate3_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdate3_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdate3_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdate3_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdate3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdate3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdate3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdate3_get_Title(This,retval) \
( (This)->lpVtbl -> get_Title(This,retval) )
#define IUpdate3_get_AutoSelectOnWebSites(This,retval) \
( (This)->lpVtbl -> get_AutoSelectOnWebSites(This,retval) )
#define IUpdate3_get_BundledUpdates(This,retval) \
( (This)->lpVtbl -> get_BundledUpdates(This,retval) )
#define IUpdate3_get_CanRequireSource(This,retval) \
( (This)->lpVtbl -> get_CanRequireSource(This,retval) )
#define IUpdate3_get_Categories(This,retval) \
( (This)->lpVtbl -> get_Categories(This,retval) )
#define IUpdate3_get_Deadline(This,retval) \
( (This)->lpVtbl -> get_Deadline(This,retval) )
#define IUpdate3_get_DeltaCompressedContentAvailable(This,retval) \
( (This)->lpVtbl -> get_DeltaCompressedContentAvailable(This,retval) )
#define IUpdate3_get_DeltaCompressedContentPreferred(This,retval) \
( (This)->lpVtbl -> get_DeltaCompressedContentPreferred(This,retval) )
#define IUpdate3_get_Description(This,retval) \
( (This)->lpVtbl -> get_Description(This,retval) )
#define IUpdate3_get_EulaAccepted(This,retval) \
( (This)->lpVtbl -> get_EulaAccepted(This,retval) )
#define IUpdate3_get_EulaText(This,retval) \
( (This)->lpVtbl -> get_EulaText(This,retval) )
#define IUpdate3_get_HandlerID(This,retval) \
( (This)->lpVtbl -> get_HandlerID(This,retval) )
#define IUpdate3_get_Identity(This,retval) \
( (This)->lpVtbl -> get_Identity(This,retval) )
#define IUpdate3_get_Image(This,retval) \
( (This)->lpVtbl -> get_Image(This,retval) )
#define IUpdate3_get_InstallationBehavior(This,retval) \
( (This)->lpVtbl -> get_InstallationBehavior(This,retval) )
#define IUpdate3_get_IsBeta(This,retval) \
( (This)->lpVtbl -> get_IsBeta(This,retval) )
#define IUpdate3_get_IsDownloaded(This,retval) \
( (This)->lpVtbl -> get_IsDownloaded(This,retval) )
#define IUpdate3_get_IsHidden(This,retval) \
( (This)->lpVtbl -> get_IsHidden(This,retval) )
#define IUpdate3_put_IsHidden(This,value) \
( (This)->lpVtbl -> put_IsHidden(This,value) )
#define IUpdate3_get_IsInstalled(This,retval) \
( (This)->lpVtbl -> get_IsInstalled(This,retval) )
#define IUpdate3_get_IsMandatory(This,retval) \
( (This)->lpVtbl -> get_IsMandatory(This,retval) )
#define IUpdate3_get_IsUninstallable(This,retval) \
( (This)->lpVtbl -> get_IsUninstallable(This,retval) )
#define IUpdate3_get_Languages(This,retval) \
( (This)->lpVtbl -> get_Languages(This,retval) )
#define IUpdate3_get_LastDeploymentChangeTime(This,retval) \
( (This)->lpVtbl -> get_LastDeploymentChangeTime(This,retval) )
#define IUpdate3_get_MaxDownloadSize(This,retval) \
( (This)->lpVtbl -> get_MaxDownloadSize(This,retval) )
#define IUpdate3_get_MinDownloadSize(This,retval) \
( (This)->lpVtbl -> get_MinDownloadSize(This,retval) )
#define IUpdate3_get_MoreInfoUrls(This,retval) \
( (This)->lpVtbl -> get_MoreInfoUrls(This,retval) )
#define IUpdate3_get_MsrcSeverity(This,retval) \
( (This)->lpVtbl -> get_MsrcSeverity(This,retval) )
#define IUpdate3_get_RecommendedCpuSpeed(This,retval) \
( (This)->lpVtbl -> get_RecommendedCpuSpeed(This,retval) )
#define IUpdate3_get_RecommendedHardDiskSpace(This,retval) \
( (This)->lpVtbl -> get_RecommendedHardDiskSpace(This,retval) )
#define IUpdate3_get_RecommendedMemory(This,retval) \
( (This)->lpVtbl -> get_RecommendedMemory(This,retval) )
#define IUpdate3_get_ReleaseNotes(This,retval) \
( (This)->lpVtbl -> get_ReleaseNotes(This,retval) )
#define IUpdate3_get_SecurityBulletinIDs(This,retval) \
( (This)->lpVtbl -> get_SecurityBulletinIDs(This,retval) )
#define IUpdate3_get_SupersededUpdateIDs(This,retval) \
( (This)->lpVtbl -> get_SupersededUpdateIDs(This,retval) )
#define IUpdate3_get_SupportUrl(This,retval) \
( (This)->lpVtbl -> get_SupportUrl(This,retval) )
#define IUpdate3_get_Type(This,retval) \
( (This)->lpVtbl -> get_Type(This,retval) )
#define IUpdate3_get_UninstallationNotes(This,retval) \
( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )
#define IUpdate3_get_UninstallationBehavior(This,retval) \
( (This)->lpVtbl -> get_UninstallationBehavior(This,retval) )
#define IUpdate3_get_UninstallationSteps(This,retval) \
( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )
#define IUpdate3_get_KBArticleIDs(This,retval) \
( (This)->lpVtbl -> get_KBArticleIDs(This,retval) )
#define IUpdate3_AcceptEula(This) \
( (This)->lpVtbl -> AcceptEula(This) )
#define IUpdate3_get_DeploymentAction(This,retval) \
( (This)->lpVtbl -> get_DeploymentAction(This,retval) )
#define IUpdate3_CopyFromCache(This,path,toExtractCabFiles) \
( (This)->lpVtbl -> CopyFromCache(This,path,toExtractCabFiles) )
#define IUpdate3_get_DownloadPriority(This,retval) \
( (This)->lpVtbl -> get_DownloadPriority(This,retval) )
#define IUpdate3_get_DownloadContents(This,retval) \
( (This)->lpVtbl -> get_DownloadContents(This,retval) )
#define IUpdate3_get_RebootRequired(This,retval) \
( (This)->lpVtbl -> get_RebootRequired(This,retval) )
#define IUpdate3_get_IsPresent(This,retval) \
( (This)->lpVtbl -> get_IsPresent(This,retval) )
#define IUpdate3_get_CveIDs(This,retval) \
( (This)->lpVtbl -> get_CveIDs(This,retval) )
#define IUpdate3_CopyToCache(This,pFiles) \
( (This)->lpVtbl -> CopyToCache(This,pFiles) )
#define IUpdate3_get_BrowseOnly(This,retval) \
( (This)->lpVtbl -> get_BrowseOnly(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdate3_INTERFACE_DEFINED__ */
#ifndef __IUpdate4_INTERFACE_DEFINED__
#define __IUpdate4_INTERFACE_DEFINED__
/* interface IUpdate4 */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdate4;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("27e94b0d-5139-49a2-9a61-93522dc54652")
IUpdate4 : public IUpdate3
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_PerUser(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
};
#else /* C style interface */
typedef struct IUpdate4Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdate4 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdate4 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdate4 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdate4 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdate4 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdate4 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdate4 * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelectOnWebSites )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BundledUpdates )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequireSource )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Deadline )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentAvailable )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentPreferred )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaAccepted )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaText )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HandlerID )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Identity )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_InstallationBehavior )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBeta )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDownloaded )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsHidden )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsHidden )(
__RPC__in IUpdate4 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsInstalled )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsMandatory )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsUninstallable )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Languages )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastDeploymentChangeTime )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MaxDownloadSize )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MinDownloadSize )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MoreInfoUrls )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MsrcSeverity )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedCpuSpeed )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedHardDiskSpace )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedMemory )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReleaseNotes )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SecurityBulletinIDs )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupersededUpdateIDs )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out UpdateType *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationBehavior )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_KBArticleIDs )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AcceptEula )(
__RPC__in IUpdate4 * This);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeploymentAction )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out DeploymentAction *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyFromCache )(
__RPC__in IUpdate4 * This,
/* [ref][in] */ __RPC__in BSTR path,
/* [in] */ VARIANT_BOOL toExtractCabFiles);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadPriority )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out DownloadPriority *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadContents )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsPresent )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CveIDs )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyToCache )(
__RPC__in IUpdate4 * This,
/* [in] */ __RPC__in_opt IStringCollection *pFiles);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BrowseOnly )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_PerUser )(
__RPC__in IUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
END_INTERFACE
} IUpdate4Vtbl;
interface IUpdate4
{
CONST_VTBL struct IUpdate4Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdate4_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdate4_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdate4_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdate4_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdate4_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdate4_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdate4_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdate4_get_Title(This,retval) \
( (This)->lpVtbl -> get_Title(This,retval) )
#define IUpdate4_get_AutoSelectOnWebSites(This,retval) \
( (This)->lpVtbl -> get_AutoSelectOnWebSites(This,retval) )
#define IUpdate4_get_BundledUpdates(This,retval) \
( (This)->lpVtbl -> get_BundledUpdates(This,retval) )
#define IUpdate4_get_CanRequireSource(This,retval) \
( (This)->lpVtbl -> get_CanRequireSource(This,retval) )
#define IUpdate4_get_Categories(This,retval) \
( (This)->lpVtbl -> get_Categories(This,retval) )
#define IUpdate4_get_Deadline(This,retval) \
( (This)->lpVtbl -> get_Deadline(This,retval) )
#define IUpdate4_get_DeltaCompressedContentAvailable(This,retval) \
( (This)->lpVtbl -> get_DeltaCompressedContentAvailable(This,retval) )
#define IUpdate4_get_DeltaCompressedContentPreferred(This,retval) \
( (This)->lpVtbl -> get_DeltaCompressedContentPreferred(This,retval) )
#define IUpdate4_get_Description(This,retval) \
( (This)->lpVtbl -> get_Description(This,retval) )
#define IUpdate4_get_EulaAccepted(This,retval) \
( (This)->lpVtbl -> get_EulaAccepted(This,retval) )
#define IUpdate4_get_EulaText(This,retval) \
( (This)->lpVtbl -> get_EulaText(This,retval) )
#define IUpdate4_get_HandlerID(This,retval) \
( (This)->lpVtbl -> get_HandlerID(This,retval) )
#define IUpdate4_get_Identity(This,retval) \
( (This)->lpVtbl -> get_Identity(This,retval) )
#define IUpdate4_get_Image(This,retval) \
( (This)->lpVtbl -> get_Image(This,retval) )
#define IUpdate4_get_InstallationBehavior(This,retval) \
( (This)->lpVtbl -> get_InstallationBehavior(This,retval) )
#define IUpdate4_get_IsBeta(This,retval) \
( (This)->lpVtbl -> get_IsBeta(This,retval) )
#define IUpdate4_get_IsDownloaded(This,retval) \
( (This)->lpVtbl -> get_IsDownloaded(This,retval) )
#define IUpdate4_get_IsHidden(This,retval) \
( (This)->lpVtbl -> get_IsHidden(This,retval) )
#define IUpdate4_put_IsHidden(This,value) \
( (This)->lpVtbl -> put_IsHidden(This,value) )
#define IUpdate4_get_IsInstalled(This,retval) \
( (This)->lpVtbl -> get_IsInstalled(This,retval) )
#define IUpdate4_get_IsMandatory(This,retval) \
( (This)->lpVtbl -> get_IsMandatory(This,retval) )
#define IUpdate4_get_IsUninstallable(This,retval) \
( (This)->lpVtbl -> get_IsUninstallable(This,retval) )
#define IUpdate4_get_Languages(This,retval) \
( (This)->lpVtbl -> get_Languages(This,retval) )
#define IUpdate4_get_LastDeploymentChangeTime(This,retval) \
( (This)->lpVtbl -> get_LastDeploymentChangeTime(This,retval) )
#define IUpdate4_get_MaxDownloadSize(This,retval) \
( (This)->lpVtbl -> get_MaxDownloadSize(This,retval) )
#define IUpdate4_get_MinDownloadSize(This,retval) \
( (This)->lpVtbl -> get_MinDownloadSize(This,retval) )
#define IUpdate4_get_MoreInfoUrls(This,retval) \
( (This)->lpVtbl -> get_MoreInfoUrls(This,retval) )
#define IUpdate4_get_MsrcSeverity(This,retval) \
( (This)->lpVtbl -> get_MsrcSeverity(This,retval) )
#define IUpdate4_get_RecommendedCpuSpeed(This,retval) \
( (This)->lpVtbl -> get_RecommendedCpuSpeed(This,retval) )
#define IUpdate4_get_RecommendedHardDiskSpace(This,retval) \
( (This)->lpVtbl -> get_RecommendedHardDiskSpace(This,retval) )
#define IUpdate4_get_RecommendedMemory(This,retval) \
( (This)->lpVtbl -> get_RecommendedMemory(This,retval) )
#define IUpdate4_get_ReleaseNotes(This,retval) \
( (This)->lpVtbl -> get_ReleaseNotes(This,retval) )
#define IUpdate4_get_SecurityBulletinIDs(This,retval) \
( (This)->lpVtbl -> get_SecurityBulletinIDs(This,retval) )
#define IUpdate4_get_SupersededUpdateIDs(This,retval) \
( (This)->lpVtbl -> get_SupersededUpdateIDs(This,retval) )
#define IUpdate4_get_SupportUrl(This,retval) \
( (This)->lpVtbl -> get_SupportUrl(This,retval) )
#define IUpdate4_get_Type(This,retval) \
( (This)->lpVtbl -> get_Type(This,retval) )
#define IUpdate4_get_UninstallationNotes(This,retval) \
( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )
#define IUpdate4_get_UninstallationBehavior(This,retval) \
( (This)->lpVtbl -> get_UninstallationBehavior(This,retval) )
#define IUpdate4_get_UninstallationSteps(This,retval) \
( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )
#define IUpdate4_get_KBArticleIDs(This,retval) \
( (This)->lpVtbl -> get_KBArticleIDs(This,retval) )
#define IUpdate4_AcceptEula(This) \
( (This)->lpVtbl -> AcceptEula(This) )
#define IUpdate4_get_DeploymentAction(This,retval) \
( (This)->lpVtbl -> get_DeploymentAction(This,retval) )
#define IUpdate4_CopyFromCache(This,path,toExtractCabFiles) \
( (This)->lpVtbl -> CopyFromCache(This,path,toExtractCabFiles) )
#define IUpdate4_get_DownloadPriority(This,retval) \
( (This)->lpVtbl -> get_DownloadPriority(This,retval) )
#define IUpdate4_get_DownloadContents(This,retval) \
( (This)->lpVtbl -> get_DownloadContents(This,retval) )
#define IUpdate4_get_RebootRequired(This,retval) \
( (This)->lpVtbl -> get_RebootRequired(This,retval) )
#define IUpdate4_get_IsPresent(This,retval) \
( (This)->lpVtbl -> get_IsPresent(This,retval) )
#define IUpdate4_get_CveIDs(This,retval) \
( (This)->lpVtbl -> get_CveIDs(This,retval) )
#define IUpdate4_CopyToCache(This,pFiles) \
( (This)->lpVtbl -> CopyToCache(This,pFiles) )
#define IUpdate4_get_BrowseOnly(This,retval) \
( (This)->lpVtbl -> get_BrowseOnly(This,retval) )
#define IUpdate4_get_PerUser(This,retval) \
( (This)->lpVtbl -> get_PerUser(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdate4_INTERFACE_DEFINED__ */
#ifndef __IUpdate5_INTERFACE_DEFINED__
#define __IUpdate5_INTERFACE_DEFINED__
/* interface IUpdate5 */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdate5;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("C1C2F21A-D2F4-4902-B5C6-8A081C19A890")
IUpdate5 : public IUpdate4
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AutoSelection(
/* [retval][out] */ __RPC__out AutoSelectionMode *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AutoDownload(
/* [retval][out] */ __RPC__out AutoDownloadMode *retval) = 0;
};
#else /* C style interface */
typedef struct IUpdate5Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdate5 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdate5 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdate5 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdate5 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdate5 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdate5 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdate5 * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelectOnWebSites )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BundledUpdates )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequireSource )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Deadline )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentAvailable )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentPreferred )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaAccepted )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaText )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HandlerID )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Identity )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_InstallationBehavior )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBeta )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDownloaded )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsHidden )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsHidden )(
__RPC__in IUpdate5 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsInstalled )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsMandatory )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsUninstallable )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Languages )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastDeploymentChangeTime )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MaxDownloadSize )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MinDownloadSize )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MoreInfoUrls )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MsrcSeverity )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedCpuSpeed )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedHardDiskSpace )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedMemory )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReleaseNotes )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SecurityBulletinIDs )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupersededUpdateIDs )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out UpdateType *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationBehavior )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_KBArticleIDs )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AcceptEula )(
__RPC__in IUpdate5 * This);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeploymentAction )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out DeploymentAction *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyFromCache )(
__RPC__in IUpdate5 * This,
/* [ref][in] */ __RPC__in BSTR path,
/* [in] */ VARIANT_BOOL toExtractCabFiles);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadPriority )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out DownloadPriority *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadContents )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsPresent )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CveIDs )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyToCache )(
__RPC__in IUpdate5 * This,
/* [in] */ __RPC__in_opt IStringCollection *pFiles);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BrowseOnly )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_PerUser )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelection )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out AutoSelectionMode *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoDownload )(
__RPC__in IUpdate5 * This,
/* [retval][out] */ __RPC__out AutoDownloadMode *retval);
END_INTERFACE
} IUpdate5Vtbl;
interface IUpdate5
{
CONST_VTBL struct IUpdate5Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdate5_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdate5_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdate5_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdate5_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdate5_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdate5_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdate5_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdate5_get_Title(This,retval) \
( (This)->lpVtbl -> get_Title(This,retval) )
#define IUpdate5_get_AutoSelectOnWebSites(This,retval) \
( (This)->lpVtbl -> get_AutoSelectOnWebSites(This,retval) )
#define IUpdate5_get_BundledUpdates(This,retval) \
( (This)->lpVtbl -> get_BundledUpdates(This,retval) )
#define IUpdate5_get_CanRequireSource(This,retval) \
( (This)->lpVtbl -> get_CanRequireSource(This,retval) )
#define IUpdate5_get_Categories(This,retval) \
( (This)->lpVtbl -> get_Categories(This,retval) )
#define IUpdate5_get_Deadline(This,retval) \
( (This)->lpVtbl -> get_Deadline(This,retval) )
#define IUpdate5_get_DeltaCompressedContentAvailable(This,retval) \
( (This)->lpVtbl -> get_DeltaCompressedContentAvailable(This,retval) )
#define IUpdate5_get_DeltaCompressedContentPreferred(This,retval) \
( (This)->lpVtbl -> get_DeltaCompressedContentPreferred(This,retval) )
#define IUpdate5_get_Description(This,retval) \
( (This)->lpVtbl -> get_Description(This,retval) )
#define IUpdate5_get_EulaAccepted(This,retval) \
( (This)->lpVtbl -> get_EulaAccepted(This,retval) )
#define IUpdate5_get_EulaText(This,retval) \
( (This)->lpVtbl -> get_EulaText(This,retval) )
#define IUpdate5_get_HandlerID(This,retval) \
( (This)->lpVtbl -> get_HandlerID(This,retval) )
#define IUpdate5_get_Identity(This,retval) \
( (This)->lpVtbl -> get_Identity(This,retval) )
#define IUpdate5_get_Image(This,retval) \
( (This)->lpVtbl -> get_Image(This,retval) )
#define IUpdate5_get_InstallationBehavior(This,retval) \
( (This)->lpVtbl -> get_InstallationBehavior(This,retval) )
#define IUpdate5_get_IsBeta(This,retval) \
( (This)->lpVtbl -> get_IsBeta(This,retval) )
#define IUpdate5_get_IsDownloaded(This,retval) \
( (This)->lpVtbl -> get_IsDownloaded(This,retval) )
#define IUpdate5_get_IsHidden(This,retval) \
( (This)->lpVtbl -> get_IsHidden(This,retval) )
#define IUpdate5_put_IsHidden(This,value) \
( (This)->lpVtbl -> put_IsHidden(This,value) )
#define IUpdate5_get_IsInstalled(This,retval) \
( (This)->lpVtbl -> get_IsInstalled(This,retval) )
#define IUpdate5_get_IsMandatory(This,retval) \
( (This)->lpVtbl -> get_IsMandatory(This,retval) )
#define IUpdate5_get_IsUninstallable(This,retval) \
( (This)->lpVtbl -> get_IsUninstallable(This,retval) )
#define IUpdate5_get_Languages(This,retval) \
( (This)->lpVtbl -> get_Languages(This,retval) )
#define IUpdate5_get_LastDeploymentChangeTime(This,retval) \
( (This)->lpVtbl -> get_LastDeploymentChangeTime(This,retval) )
#define IUpdate5_get_MaxDownloadSize(This,retval) \
( (This)->lpVtbl -> get_MaxDownloadSize(This,retval) )
#define IUpdate5_get_MinDownloadSize(This,retval) \
( (This)->lpVtbl -> get_MinDownloadSize(This,retval) )
#define IUpdate5_get_MoreInfoUrls(This,retval) \
( (This)->lpVtbl -> get_MoreInfoUrls(This,retval) )
#define IUpdate5_get_MsrcSeverity(This,retval) \
( (This)->lpVtbl -> get_MsrcSeverity(This,retval) )
#define IUpdate5_get_RecommendedCpuSpeed(This,retval) \
( (This)->lpVtbl -> get_RecommendedCpuSpeed(This,retval) )
#define IUpdate5_get_RecommendedHardDiskSpace(This,retval) \
( (This)->lpVtbl -> get_RecommendedHardDiskSpace(This,retval) )
#define IUpdate5_get_RecommendedMemory(This,retval) \
( (This)->lpVtbl -> get_RecommendedMemory(This,retval) )
#define IUpdate5_get_ReleaseNotes(This,retval) \
( (This)->lpVtbl -> get_ReleaseNotes(This,retval) )
#define IUpdate5_get_SecurityBulletinIDs(This,retval) \
( (This)->lpVtbl -> get_SecurityBulletinIDs(This,retval) )
#define IUpdate5_get_SupersededUpdateIDs(This,retval) \
( (This)->lpVtbl -> get_SupersededUpdateIDs(This,retval) )
#define IUpdate5_get_SupportUrl(This,retval) \
( (This)->lpVtbl -> get_SupportUrl(This,retval) )
#define IUpdate5_get_Type(This,retval) \
( (This)->lpVtbl -> get_Type(This,retval) )
#define IUpdate5_get_UninstallationNotes(This,retval) \
( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )
#define IUpdate5_get_UninstallationBehavior(This,retval) \
( (This)->lpVtbl -> get_UninstallationBehavior(This,retval) )
#define IUpdate5_get_UninstallationSteps(This,retval) \
( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )
#define IUpdate5_get_KBArticleIDs(This,retval) \
( (This)->lpVtbl -> get_KBArticleIDs(This,retval) )
#define IUpdate5_AcceptEula(This) \
( (This)->lpVtbl -> AcceptEula(This) )
#define IUpdate5_get_DeploymentAction(This,retval) \
( (This)->lpVtbl -> get_DeploymentAction(This,retval) )
#define IUpdate5_CopyFromCache(This,path,toExtractCabFiles) \
( (This)->lpVtbl -> CopyFromCache(This,path,toExtractCabFiles) )
#define IUpdate5_get_DownloadPriority(This,retval) \
( (This)->lpVtbl -> get_DownloadPriority(This,retval) )
#define IUpdate5_get_DownloadContents(This,retval) \
( (This)->lpVtbl -> get_DownloadContents(This,retval) )
#define IUpdate5_get_RebootRequired(This,retval) \
( (This)->lpVtbl -> get_RebootRequired(This,retval) )
#define IUpdate5_get_IsPresent(This,retval) \
( (This)->lpVtbl -> get_IsPresent(This,retval) )
#define IUpdate5_get_CveIDs(This,retval) \
( (This)->lpVtbl -> get_CveIDs(This,retval) )
#define IUpdate5_CopyToCache(This,pFiles) \
( (This)->lpVtbl -> CopyToCache(This,pFiles) )
#define IUpdate5_get_BrowseOnly(This,retval) \
( (This)->lpVtbl -> get_BrowseOnly(This,retval) )
#define IUpdate5_get_PerUser(This,retval) \
( (This)->lpVtbl -> get_PerUser(This,retval) )
#define IUpdate5_get_AutoSelection(This,retval) \
( (This)->lpVtbl -> get_AutoSelection(This,retval) )
#define IUpdate5_get_AutoDownload(This,retval) \
( (This)->lpVtbl -> get_AutoDownload(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdate5_INTERFACE_DEFINED__ */
#ifndef __IWindowsDriverUpdate2_INTERFACE_DEFINED__
#define __IWindowsDriverUpdate2_INTERFACE_DEFINED__
/* interface IWindowsDriverUpdate2 */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IWindowsDriverUpdate2;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("615c4269-7a48-43bd-96b7-bf6ca27d6c3e")
IWindowsDriverUpdate2 : public IWindowsDriverUpdate
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RebootRequired(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsPresent(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CveIDs(
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CopyToCache(
/* [in] */ __RPC__in_opt IStringCollection *pFiles) = 0;
};
#else /* C style interface */
typedef struct IWindowsDriverUpdate2Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IWindowsDriverUpdate2 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IWindowsDriverUpdate2 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IWindowsDriverUpdate2 * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelectOnWebSites )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BundledUpdates )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequireSource )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Deadline )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentAvailable )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentPreferred )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaAccepted )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaText )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HandlerID )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Identity )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_InstallationBehavior )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBeta )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDownloaded )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsHidden )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsHidden )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsInstalled )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsMandatory )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsUninstallable )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Languages )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastDeploymentChangeTime )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MaxDownloadSize )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MinDownloadSize )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MoreInfoUrls )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MsrcSeverity )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedCpuSpeed )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedHardDiskSpace )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedMemory )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReleaseNotes )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SecurityBulletinIDs )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupersededUpdateIDs )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out UpdateType *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationBehavior )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_KBArticleIDs )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AcceptEula )(
__RPC__in IWindowsDriverUpdate2 * This);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeploymentAction )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out DeploymentAction *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyFromCache )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [ref][in] */ __RPC__in BSTR path,
/* [in] */ VARIANT_BOOL toExtractCabFiles);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadPriority )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out DownloadPriority *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadContents )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverClass )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverHardwareID )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverManufacturer )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverModel )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverProvider )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverVerDate )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceProblemNumber )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceStatus )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsPresent )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CveIDs )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyToCache )(
__RPC__in IWindowsDriverUpdate2 * This,
/* [in] */ __RPC__in_opt IStringCollection *pFiles);
END_INTERFACE
} IWindowsDriverUpdate2Vtbl;
interface IWindowsDriverUpdate2
{
CONST_VTBL struct IWindowsDriverUpdate2Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IWindowsDriverUpdate2_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IWindowsDriverUpdate2_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IWindowsDriverUpdate2_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IWindowsDriverUpdate2_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IWindowsDriverUpdate2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IWindowsDriverUpdate2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IWindowsDriverUpdate2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IWindowsDriverUpdate2_get_Title(This,retval) \
( (This)->lpVtbl -> get_Title(This,retval) )
#define IWindowsDriverUpdate2_get_AutoSelectOnWebSites(This,retval) \
( (This)->lpVtbl -> get_AutoSelectOnWebSites(This,retval) )
#define IWindowsDriverUpdate2_get_BundledUpdates(This,retval) \
( (This)->lpVtbl -> get_BundledUpdates(This,retval) )
#define IWindowsDriverUpdate2_get_CanRequireSource(This,retval) \
( (This)->lpVtbl -> get_CanRequireSource(This,retval) )
#define IWindowsDriverUpdate2_get_Categories(This,retval) \
( (This)->lpVtbl -> get_Categories(This,retval) )
#define IWindowsDriverUpdate2_get_Deadline(This,retval) \
( (This)->lpVtbl -> get_Deadline(This,retval) )
#define IWindowsDriverUpdate2_get_DeltaCompressedContentAvailable(This,retval) \
( (This)->lpVtbl -> get_DeltaCompressedContentAvailable(This,retval) )
#define IWindowsDriverUpdate2_get_DeltaCompressedContentPreferred(This,retval) \
( (This)->lpVtbl -> get_DeltaCompressedContentPreferred(This,retval) )
#define IWindowsDriverUpdate2_get_Description(This,retval) \
( (This)->lpVtbl -> get_Description(This,retval) )
#define IWindowsDriverUpdate2_get_EulaAccepted(This,retval) \
( (This)->lpVtbl -> get_EulaAccepted(This,retval) )
#define IWindowsDriverUpdate2_get_EulaText(This,retval) \
( (This)->lpVtbl -> get_EulaText(This,retval) )
#define IWindowsDriverUpdate2_get_HandlerID(This,retval) \
( (This)->lpVtbl -> get_HandlerID(This,retval) )
#define IWindowsDriverUpdate2_get_Identity(This,retval) \
( (This)->lpVtbl -> get_Identity(This,retval) )
#define IWindowsDriverUpdate2_get_Image(This,retval) \
( (This)->lpVtbl -> get_Image(This,retval) )
#define IWindowsDriverUpdate2_get_InstallationBehavior(This,retval) \
( (This)->lpVtbl -> get_InstallationBehavior(This,retval) )
#define IWindowsDriverUpdate2_get_IsBeta(This,retval) \
( (This)->lpVtbl -> get_IsBeta(This,retval) )
#define IWindowsDriverUpdate2_get_IsDownloaded(This,retval) \
( (This)->lpVtbl -> get_IsDownloaded(This,retval) )
#define IWindowsDriverUpdate2_get_IsHidden(This,retval) \
( (This)->lpVtbl -> get_IsHidden(This,retval) )
#define IWindowsDriverUpdate2_put_IsHidden(This,value) \
( (This)->lpVtbl -> put_IsHidden(This,value) )
#define IWindowsDriverUpdate2_get_IsInstalled(This,retval) \
( (This)->lpVtbl -> get_IsInstalled(This,retval) )
#define IWindowsDriverUpdate2_get_IsMandatory(This,retval) \
( (This)->lpVtbl -> get_IsMandatory(This,retval) )
#define IWindowsDriverUpdate2_get_IsUninstallable(This,retval) \
( (This)->lpVtbl -> get_IsUninstallable(This,retval) )
#define IWindowsDriverUpdate2_get_Languages(This,retval) \
( (This)->lpVtbl -> get_Languages(This,retval) )
#define IWindowsDriverUpdate2_get_LastDeploymentChangeTime(This,retval) \
( (This)->lpVtbl -> get_LastDeploymentChangeTime(This,retval) )
#define IWindowsDriverUpdate2_get_MaxDownloadSize(This,retval) \
( (This)->lpVtbl -> get_MaxDownloadSize(This,retval) )
#define IWindowsDriverUpdate2_get_MinDownloadSize(This,retval) \
( (This)->lpVtbl -> get_MinDownloadSize(This,retval) )
#define IWindowsDriverUpdate2_get_MoreInfoUrls(This,retval) \
( (This)->lpVtbl -> get_MoreInfoUrls(This,retval) )
#define IWindowsDriverUpdate2_get_MsrcSeverity(This,retval) \
( (This)->lpVtbl -> get_MsrcSeverity(This,retval) )
#define IWindowsDriverUpdate2_get_RecommendedCpuSpeed(This,retval) \
( (This)->lpVtbl -> get_RecommendedCpuSpeed(This,retval) )
#define IWindowsDriverUpdate2_get_RecommendedHardDiskSpace(This,retval) \
( (This)->lpVtbl -> get_RecommendedHardDiskSpace(This,retval) )
#define IWindowsDriverUpdate2_get_RecommendedMemory(This,retval) \
( (This)->lpVtbl -> get_RecommendedMemory(This,retval) )
#define IWindowsDriverUpdate2_get_ReleaseNotes(This,retval) \
( (This)->lpVtbl -> get_ReleaseNotes(This,retval) )
#define IWindowsDriverUpdate2_get_SecurityBulletinIDs(This,retval) \
( (This)->lpVtbl -> get_SecurityBulletinIDs(This,retval) )
#define IWindowsDriverUpdate2_get_SupersededUpdateIDs(This,retval) \
( (This)->lpVtbl -> get_SupersededUpdateIDs(This,retval) )
#define IWindowsDriverUpdate2_get_SupportUrl(This,retval) \
( (This)->lpVtbl -> get_SupportUrl(This,retval) )
#define IWindowsDriverUpdate2_get_Type(This,retval) \
( (This)->lpVtbl -> get_Type(This,retval) )
#define IWindowsDriverUpdate2_get_UninstallationNotes(This,retval) \
( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )
#define IWindowsDriverUpdate2_get_UninstallationBehavior(This,retval) \
( (This)->lpVtbl -> get_UninstallationBehavior(This,retval) )
#define IWindowsDriverUpdate2_get_UninstallationSteps(This,retval) \
( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )
#define IWindowsDriverUpdate2_get_KBArticleIDs(This,retval) \
( (This)->lpVtbl -> get_KBArticleIDs(This,retval) )
#define IWindowsDriverUpdate2_AcceptEula(This) \
( (This)->lpVtbl -> AcceptEula(This) )
#define IWindowsDriverUpdate2_get_DeploymentAction(This,retval) \
( (This)->lpVtbl -> get_DeploymentAction(This,retval) )
#define IWindowsDriverUpdate2_CopyFromCache(This,path,toExtractCabFiles) \
( (This)->lpVtbl -> CopyFromCache(This,path,toExtractCabFiles) )
#define IWindowsDriverUpdate2_get_DownloadPriority(This,retval) \
( (This)->lpVtbl -> get_DownloadPriority(This,retval) )
#define IWindowsDriverUpdate2_get_DownloadContents(This,retval) \
( (This)->lpVtbl -> get_DownloadContents(This,retval) )
#define IWindowsDriverUpdate2_get_DriverClass(This,retval) \
( (This)->lpVtbl -> get_DriverClass(This,retval) )
#define IWindowsDriverUpdate2_get_DriverHardwareID(This,retval) \
( (This)->lpVtbl -> get_DriverHardwareID(This,retval) )
#define IWindowsDriverUpdate2_get_DriverManufacturer(This,retval) \
( (This)->lpVtbl -> get_DriverManufacturer(This,retval) )
#define IWindowsDriverUpdate2_get_DriverModel(This,retval) \
( (This)->lpVtbl -> get_DriverModel(This,retval) )
#define IWindowsDriverUpdate2_get_DriverProvider(This,retval) \
( (This)->lpVtbl -> get_DriverProvider(This,retval) )
#define IWindowsDriverUpdate2_get_DriverVerDate(This,retval) \
( (This)->lpVtbl -> get_DriverVerDate(This,retval) )
#define IWindowsDriverUpdate2_get_DeviceProblemNumber(This,retval) \
( (This)->lpVtbl -> get_DeviceProblemNumber(This,retval) )
#define IWindowsDriverUpdate2_get_DeviceStatus(This,retval) \
( (This)->lpVtbl -> get_DeviceStatus(This,retval) )
#define IWindowsDriverUpdate2_get_RebootRequired(This,retval) \
( (This)->lpVtbl -> get_RebootRequired(This,retval) )
#define IWindowsDriverUpdate2_get_IsPresent(This,retval) \
( (This)->lpVtbl -> get_IsPresent(This,retval) )
#define IWindowsDriverUpdate2_get_CveIDs(This,retval) \
( (This)->lpVtbl -> get_CveIDs(This,retval) )
#define IWindowsDriverUpdate2_CopyToCache(This,pFiles) \
( (This)->lpVtbl -> CopyToCache(This,pFiles) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IWindowsDriverUpdate2_INTERFACE_DEFINED__ */
#ifndef __IWindowsDriverUpdate3_INTERFACE_DEFINED__
#define __IWindowsDriverUpdate3_INTERFACE_DEFINED__
/* interface IWindowsDriverUpdate3 */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IWindowsDriverUpdate3;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("49EBD502-4A96-41BD-9E3E-4C5057F4250C")
IWindowsDriverUpdate3 : public IWindowsDriverUpdate2
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_BrowseOnly(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
};
#else /* C style interface */
typedef struct IWindowsDriverUpdate3Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IWindowsDriverUpdate3 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IWindowsDriverUpdate3 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IWindowsDriverUpdate3 * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelectOnWebSites )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BundledUpdates )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequireSource )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Deadline )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentAvailable )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentPreferred )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaAccepted )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaText )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HandlerID )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Identity )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_InstallationBehavior )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBeta )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDownloaded )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsHidden )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsHidden )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsInstalled )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsMandatory )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsUninstallable )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Languages )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastDeploymentChangeTime )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MaxDownloadSize )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MinDownloadSize )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MoreInfoUrls )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MsrcSeverity )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedCpuSpeed )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedHardDiskSpace )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedMemory )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReleaseNotes )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SecurityBulletinIDs )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupersededUpdateIDs )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out UpdateType *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationBehavior )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_KBArticleIDs )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AcceptEula )(
__RPC__in IWindowsDriverUpdate3 * This);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeploymentAction )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out DeploymentAction *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyFromCache )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [ref][in] */ __RPC__in BSTR path,
/* [in] */ VARIANT_BOOL toExtractCabFiles);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadPriority )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out DownloadPriority *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadContents )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverClass )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverHardwareID )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverManufacturer )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverModel )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverProvider )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverVerDate )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceProblemNumber )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceStatus )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsPresent )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CveIDs )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyToCache )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [in] */ __RPC__in_opt IStringCollection *pFiles);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BrowseOnly )(
__RPC__in IWindowsDriverUpdate3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
END_INTERFACE
} IWindowsDriverUpdate3Vtbl;
interface IWindowsDriverUpdate3
{
CONST_VTBL struct IWindowsDriverUpdate3Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IWindowsDriverUpdate3_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IWindowsDriverUpdate3_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IWindowsDriverUpdate3_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IWindowsDriverUpdate3_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IWindowsDriverUpdate3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IWindowsDriverUpdate3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IWindowsDriverUpdate3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IWindowsDriverUpdate3_get_Title(This,retval) \
( (This)->lpVtbl -> get_Title(This,retval) )
#define IWindowsDriverUpdate3_get_AutoSelectOnWebSites(This,retval) \
( (This)->lpVtbl -> get_AutoSelectOnWebSites(This,retval) )
#define IWindowsDriverUpdate3_get_BundledUpdates(This,retval) \
( (This)->lpVtbl -> get_BundledUpdates(This,retval) )
#define IWindowsDriverUpdate3_get_CanRequireSource(This,retval) \
( (This)->lpVtbl -> get_CanRequireSource(This,retval) )
#define IWindowsDriverUpdate3_get_Categories(This,retval) \
( (This)->lpVtbl -> get_Categories(This,retval) )
#define IWindowsDriverUpdate3_get_Deadline(This,retval) \
( (This)->lpVtbl -> get_Deadline(This,retval) )
#define IWindowsDriverUpdate3_get_DeltaCompressedContentAvailable(This,retval) \
( (This)->lpVtbl -> get_DeltaCompressedContentAvailable(This,retval) )
#define IWindowsDriverUpdate3_get_DeltaCompressedContentPreferred(This,retval) \
( (This)->lpVtbl -> get_DeltaCompressedContentPreferred(This,retval) )
#define IWindowsDriverUpdate3_get_Description(This,retval) \
( (This)->lpVtbl -> get_Description(This,retval) )
#define IWindowsDriverUpdate3_get_EulaAccepted(This,retval) \
( (This)->lpVtbl -> get_EulaAccepted(This,retval) )
#define IWindowsDriverUpdate3_get_EulaText(This,retval) \
( (This)->lpVtbl -> get_EulaText(This,retval) )
#define IWindowsDriverUpdate3_get_HandlerID(This,retval) \
( (This)->lpVtbl -> get_HandlerID(This,retval) )
#define IWindowsDriverUpdate3_get_Identity(This,retval) \
( (This)->lpVtbl -> get_Identity(This,retval) )
#define IWindowsDriverUpdate3_get_Image(This,retval) \
( (This)->lpVtbl -> get_Image(This,retval) )
#define IWindowsDriverUpdate3_get_InstallationBehavior(This,retval) \
( (This)->lpVtbl -> get_InstallationBehavior(This,retval) )
#define IWindowsDriverUpdate3_get_IsBeta(This,retval) \
( (This)->lpVtbl -> get_IsBeta(This,retval) )
#define IWindowsDriverUpdate3_get_IsDownloaded(This,retval) \
( (This)->lpVtbl -> get_IsDownloaded(This,retval) )
#define IWindowsDriverUpdate3_get_IsHidden(This,retval) \
( (This)->lpVtbl -> get_IsHidden(This,retval) )
#define IWindowsDriverUpdate3_put_IsHidden(This,value) \
( (This)->lpVtbl -> put_IsHidden(This,value) )
#define IWindowsDriverUpdate3_get_IsInstalled(This,retval) \
( (This)->lpVtbl -> get_IsInstalled(This,retval) )
#define IWindowsDriverUpdate3_get_IsMandatory(This,retval) \
( (This)->lpVtbl -> get_IsMandatory(This,retval) )
#define IWindowsDriverUpdate3_get_IsUninstallable(This,retval) \
( (This)->lpVtbl -> get_IsUninstallable(This,retval) )
#define IWindowsDriverUpdate3_get_Languages(This,retval) \
( (This)->lpVtbl -> get_Languages(This,retval) )
#define IWindowsDriverUpdate3_get_LastDeploymentChangeTime(This,retval) \
( (This)->lpVtbl -> get_LastDeploymentChangeTime(This,retval) )
#define IWindowsDriverUpdate3_get_MaxDownloadSize(This,retval) \
( (This)->lpVtbl -> get_MaxDownloadSize(This,retval) )
#define IWindowsDriverUpdate3_get_MinDownloadSize(This,retval) \
( (This)->lpVtbl -> get_MinDownloadSize(This,retval) )
#define IWindowsDriverUpdate3_get_MoreInfoUrls(This,retval) \
( (This)->lpVtbl -> get_MoreInfoUrls(This,retval) )
#define IWindowsDriverUpdate3_get_MsrcSeverity(This,retval) \
( (This)->lpVtbl -> get_MsrcSeverity(This,retval) )
#define IWindowsDriverUpdate3_get_RecommendedCpuSpeed(This,retval) \
( (This)->lpVtbl -> get_RecommendedCpuSpeed(This,retval) )
#define IWindowsDriverUpdate3_get_RecommendedHardDiskSpace(This,retval) \
( (This)->lpVtbl -> get_RecommendedHardDiskSpace(This,retval) )
#define IWindowsDriverUpdate3_get_RecommendedMemory(This,retval) \
( (This)->lpVtbl -> get_RecommendedMemory(This,retval) )
#define IWindowsDriverUpdate3_get_ReleaseNotes(This,retval) \
( (This)->lpVtbl -> get_ReleaseNotes(This,retval) )
#define IWindowsDriverUpdate3_get_SecurityBulletinIDs(This,retval) \
( (This)->lpVtbl -> get_SecurityBulletinIDs(This,retval) )
#define IWindowsDriverUpdate3_get_SupersededUpdateIDs(This,retval) \
( (This)->lpVtbl -> get_SupersededUpdateIDs(This,retval) )
#define IWindowsDriverUpdate3_get_SupportUrl(This,retval) \
( (This)->lpVtbl -> get_SupportUrl(This,retval) )
#define IWindowsDriverUpdate3_get_Type(This,retval) \
( (This)->lpVtbl -> get_Type(This,retval) )
#define IWindowsDriverUpdate3_get_UninstallationNotes(This,retval) \
( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )
#define IWindowsDriverUpdate3_get_UninstallationBehavior(This,retval) \
( (This)->lpVtbl -> get_UninstallationBehavior(This,retval) )
#define IWindowsDriverUpdate3_get_UninstallationSteps(This,retval) \
( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )
#define IWindowsDriverUpdate3_get_KBArticleIDs(This,retval) \
( (This)->lpVtbl -> get_KBArticleIDs(This,retval) )
#define IWindowsDriverUpdate3_AcceptEula(This) \
( (This)->lpVtbl -> AcceptEula(This) )
#define IWindowsDriverUpdate3_get_DeploymentAction(This,retval) \
( (This)->lpVtbl -> get_DeploymentAction(This,retval) )
#define IWindowsDriverUpdate3_CopyFromCache(This,path,toExtractCabFiles) \
( (This)->lpVtbl -> CopyFromCache(This,path,toExtractCabFiles) )
#define IWindowsDriverUpdate3_get_DownloadPriority(This,retval) \
( (This)->lpVtbl -> get_DownloadPriority(This,retval) )
#define IWindowsDriverUpdate3_get_DownloadContents(This,retval) \
( (This)->lpVtbl -> get_DownloadContents(This,retval) )
#define IWindowsDriverUpdate3_get_DriverClass(This,retval) \
( (This)->lpVtbl -> get_DriverClass(This,retval) )
#define IWindowsDriverUpdate3_get_DriverHardwareID(This,retval) \
( (This)->lpVtbl -> get_DriverHardwareID(This,retval) )
#define IWindowsDriverUpdate3_get_DriverManufacturer(This,retval) \
( (This)->lpVtbl -> get_DriverManufacturer(This,retval) )
#define IWindowsDriverUpdate3_get_DriverModel(This,retval) \
( (This)->lpVtbl -> get_DriverModel(This,retval) )
#define IWindowsDriverUpdate3_get_DriverProvider(This,retval) \
( (This)->lpVtbl -> get_DriverProvider(This,retval) )
#define IWindowsDriverUpdate3_get_DriverVerDate(This,retval) \
( (This)->lpVtbl -> get_DriverVerDate(This,retval) )
#define IWindowsDriverUpdate3_get_DeviceProblemNumber(This,retval) \
( (This)->lpVtbl -> get_DeviceProblemNumber(This,retval) )
#define IWindowsDriverUpdate3_get_DeviceStatus(This,retval) \
( (This)->lpVtbl -> get_DeviceStatus(This,retval) )
#define IWindowsDriverUpdate3_get_RebootRequired(This,retval) \
( (This)->lpVtbl -> get_RebootRequired(This,retval) )
#define IWindowsDriverUpdate3_get_IsPresent(This,retval) \
( (This)->lpVtbl -> get_IsPresent(This,retval) )
#define IWindowsDriverUpdate3_get_CveIDs(This,retval) \
( (This)->lpVtbl -> get_CveIDs(This,retval) )
#define IWindowsDriverUpdate3_CopyToCache(This,pFiles) \
( (This)->lpVtbl -> CopyToCache(This,pFiles) )
#define IWindowsDriverUpdate3_get_BrowseOnly(This,retval) \
( (This)->lpVtbl -> get_BrowseOnly(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IWindowsDriverUpdate3_INTERFACE_DEFINED__ */
#ifndef __IWindowsDriverUpdateEntry_INTERFACE_DEFINED__
#define __IWindowsDriverUpdateEntry_INTERFACE_DEFINED__
/* interface IWindowsDriverUpdateEntry */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IWindowsDriverUpdateEntry;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ED8BFE40-A60B-42ea-9652-817DFCFA23EC")
IWindowsDriverUpdateEntry : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverClass(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverHardwareID(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverManufacturer(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverModel(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverProvider(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverVerDate(
/* [retval][out] */ __RPC__out DATE *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DeviceProblemNumber(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DeviceStatus(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
};
#else /* C style interface */
typedef struct IWindowsDriverUpdateEntryVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IWindowsDriverUpdateEntry * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IWindowsDriverUpdateEntry * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IWindowsDriverUpdateEntry * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IWindowsDriverUpdateEntry * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IWindowsDriverUpdateEntry * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IWindowsDriverUpdateEntry * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IWindowsDriverUpdateEntry * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverClass )(
__RPC__in IWindowsDriverUpdateEntry * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverHardwareID )(
__RPC__in IWindowsDriverUpdateEntry * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverManufacturer )(
__RPC__in IWindowsDriverUpdateEntry * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverModel )(
__RPC__in IWindowsDriverUpdateEntry * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverProvider )(
__RPC__in IWindowsDriverUpdateEntry * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverVerDate )(
__RPC__in IWindowsDriverUpdateEntry * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceProblemNumber )(
__RPC__in IWindowsDriverUpdateEntry * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceStatus )(
__RPC__in IWindowsDriverUpdateEntry * This,
/* [retval][out] */ __RPC__out LONG *retval);
END_INTERFACE
} IWindowsDriverUpdateEntryVtbl;
interface IWindowsDriverUpdateEntry
{
CONST_VTBL struct IWindowsDriverUpdateEntryVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IWindowsDriverUpdateEntry_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IWindowsDriverUpdateEntry_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IWindowsDriverUpdateEntry_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IWindowsDriverUpdateEntry_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IWindowsDriverUpdateEntry_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IWindowsDriverUpdateEntry_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IWindowsDriverUpdateEntry_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IWindowsDriverUpdateEntry_get_DriverClass(This,retval) \
( (This)->lpVtbl -> get_DriverClass(This,retval) )
#define IWindowsDriverUpdateEntry_get_DriverHardwareID(This,retval) \
( (This)->lpVtbl -> get_DriverHardwareID(This,retval) )
#define IWindowsDriverUpdateEntry_get_DriverManufacturer(This,retval) \
( (This)->lpVtbl -> get_DriverManufacturer(This,retval) )
#define IWindowsDriverUpdateEntry_get_DriverModel(This,retval) \
( (This)->lpVtbl -> get_DriverModel(This,retval) )
#define IWindowsDriverUpdateEntry_get_DriverProvider(This,retval) \
( (This)->lpVtbl -> get_DriverProvider(This,retval) )
#define IWindowsDriverUpdateEntry_get_DriverVerDate(This,retval) \
( (This)->lpVtbl -> get_DriverVerDate(This,retval) )
#define IWindowsDriverUpdateEntry_get_DeviceProblemNumber(This,retval) \
( (This)->lpVtbl -> get_DeviceProblemNumber(This,retval) )
#define IWindowsDriverUpdateEntry_get_DeviceStatus(This,retval) \
( (This)->lpVtbl -> get_DeviceStatus(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IWindowsDriverUpdateEntry_INTERFACE_DEFINED__ */
#ifndef __IWindowsDriverUpdateEntryCollection_INTERFACE_DEFINED__
#define __IWindowsDriverUpdateEntryCollection_INTERFACE_DEFINED__
/* interface IWindowsDriverUpdateEntryCollection */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IWindowsDriverUpdateEntryCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0D521700-A372-4bef-828B-3D00C10ADEBD")
IWindowsDriverUpdateEntryCollection : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Item(
/* [in] */ LONG index,
/* [retval][out] */ __RPC__deref_out_opt IWindowsDriverUpdateEntry **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get__NewEnum(
/* [retval][out] */ __RPC__deref_out_opt IUnknown **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Count(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
};
#else /* C style interface */
typedef struct IWindowsDriverUpdateEntryCollectionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IWindowsDriverUpdateEntryCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IWindowsDriverUpdateEntryCollection * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IWindowsDriverUpdateEntryCollection * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IWindowsDriverUpdateEntryCollection * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IWindowsDriverUpdateEntryCollection * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IWindowsDriverUpdateEntryCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IWindowsDriverUpdateEntryCollection * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(
__RPC__in IWindowsDriverUpdateEntryCollection * This,
/* [in] */ LONG index,
/* [retval][out] */ __RPC__deref_out_opt IWindowsDriverUpdateEntry **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(
__RPC__in IWindowsDriverUpdateEntryCollection * This,
/* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(
__RPC__in IWindowsDriverUpdateEntryCollection * This,
/* [retval][out] */ __RPC__out LONG *retval);
END_INTERFACE
} IWindowsDriverUpdateEntryCollectionVtbl;
interface IWindowsDriverUpdateEntryCollection
{
CONST_VTBL struct IWindowsDriverUpdateEntryCollectionVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IWindowsDriverUpdateEntryCollection_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IWindowsDriverUpdateEntryCollection_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IWindowsDriverUpdateEntryCollection_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IWindowsDriverUpdateEntryCollection_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IWindowsDriverUpdateEntryCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IWindowsDriverUpdateEntryCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IWindowsDriverUpdateEntryCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IWindowsDriverUpdateEntryCollection_get_Item(This,index,retval) \
( (This)->lpVtbl -> get_Item(This,index,retval) )
#define IWindowsDriverUpdateEntryCollection_get__NewEnum(This,retval) \
( (This)->lpVtbl -> get__NewEnum(This,retval) )
#define IWindowsDriverUpdateEntryCollection_get_Count(This,retval) \
( (This)->lpVtbl -> get_Count(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IWindowsDriverUpdateEntryCollection_INTERFACE_DEFINED__ */
#ifndef __IWindowsDriverUpdate4_INTERFACE_DEFINED__
#define __IWindowsDriverUpdate4_INTERFACE_DEFINED__
/* interface IWindowsDriverUpdate4 */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IWindowsDriverUpdate4;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("004C6A2B-0C19-4c69-9F5C-A269B2560DB9")
IWindowsDriverUpdate4 : public IWindowsDriverUpdate3
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_WindowsDriverUpdateEntries(
/* [retval][out] */ __RPC__deref_out_opt IWindowsDriverUpdateEntryCollection **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_PerUser(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
};
#else /* C style interface */
typedef struct IWindowsDriverUpdate4Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IWindowsDriverUpdate4 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IWindowsDriverUpdate4 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IWindowsDriverUpdate4 * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelectOnWebSites )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BundledUpdates )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequireSource )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Deadline )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentAvailable )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentPreferred )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaAccepted )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaText )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HandlerID )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Identity )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_InstallationBehavior )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBeta )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDownloaded )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsHidden )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsHidden )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsInstalled )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsMandatory )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsUninstallable )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Languages )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastDeploymentChangeTime )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MaxDownloadSize )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MinDownloadSize )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MoreInfoUrls )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MsrcSeverity )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedCpuSpeed )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedHardDiskSpace )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedMemory )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReleaseNotes )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SecurityBulletinIDs )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupersededUpdateIDs )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out UpdateType *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationBehavior )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_KBArticleIDs )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AcceptEula )(
__RPC__in IWindowsDriverUpdate4 * This);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeploymentAction )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out DeploymentAction *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyFromCache )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [ref][in] */ __RPC__in BSTR path,
/* [in] */ VARIANT_BOOL toExtractCabFiles);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadPriority )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out DownloadPriority *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadContents )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverClass )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverHardwareID )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverManufacturer )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverModel )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverProvider )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverVerDate )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceProblemNumber )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceStatus )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsPresent )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CveIDs )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyToCache )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [in] */ __RPC__in_opt IStringCollection *pFiles);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BrowseOnly )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_WindowsDriverUpdateEntries )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__deref_out_opt IWindowsDriverUpdateEntryCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_PerUser )(
__RPC__in IWindowsDriverUpdate4 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
END_INTERFACE
} IWindowsDriverUpdate4Vtbl;
interface IWindowsDriverUpdate4
{
CONST_VTBL struct IWindowsDriverUpdate4Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IWindowsDriverUpdate4_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IWindowsDriverUpdate4_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IWindowsDriverUpdate4_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IWindowsDriverUpdate4_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IWindowsDriverUpdate4_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IWindowsDriverUpdate4_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IWindowsDriverUpdate4_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IWindowsDriverUpdate4_get_Title(This,retval) \
( (This)->lpVtbl -> get_Title(This,retval) )
#define IWindowsDriverUpdate4_get_AutoSelectOnWebSites(This,retval) \
( (This)->lpVtbl -> get_AutoSelectOnWebSites(This,retval) )
#define IWindowsDriverUpdate4_get_BundledUpdates(This,retval) \
( (This)->lpVtbl -> get_BundledUpdates(This,retval) )
#define IWindowsDriverUpdate4_get_CanRequireSource(This,retval) \
( (This)->lpVtbl -> get_CanRequireSource(This,retval) )
#define IWindowsDriverUpdate4_get_Categories(This,retval) \
( (This)->lpVtbl -> get_Categories(This,retval) )
#define IWindowsDriverUpdate4_get_Deadline(This,retval) \
( (This)->lpVtbl -> get_Deadline(This,retval) )
#define IWindowsDriverUpdate4_get_DeltaCompressedContentAvailable(This,retval) \
( (This)->lpVtbl -> get_DeltaCompressedContentAvailable(This,retval) )
#define IWindowsDriverUpdate4_get_DeltaCompressedContentPreferred(This,retval) \
( (This)->lpVtbl -> get_DeltaCompressedContentPreferred(This,retval) )
#define IWindowsDriverUpdate4_get_Description(This,retval) \
( (This)->lpVtbl -> get_Description(This,retval) )
#define IWindowsDriverUpdate4_get_EulaAccepted(This,retval) \
( (This)->lpVtbl -> get_EulaAccepted(This,retval) )
#define IWindowsDriverUpdate4_get_EulaText(This,retval) \
( (This)->lpVtbl -> get_EulaText(This,retval) )
#define IWindowsDriverUpdate4_get_HandlerID(This,retval) \
( (This)->lpVtbl -> get_HandlerID(This,retval) )
#define IWindowsDriverUpdate4_get_Identity(This,retval) \
( (This)->lpVtbl -> get_Identity(This,retval) )
#define IWindowsDriverUpdate4_get_Image(This,retval) \
( (This)->lpVtbl -> get_Image(This,retval) )
#define IWindowsDriverUpdate4_get_InstallationBehavior(This,retval) \
( (This)->lpVtbl -> get_InstallationBehavior(This,retval) )
#define IWindowsDriverUpdate4_get_IsBeta(This,retval) \
( (This)->lpVtbl -> get_IsBeta(This,retval) )
#define IWindowsDriverUpdate4_get_IsDownloaded(This,retval) \
( (This)->lpVtbl -> get_IsDownloaded(This,retval) )
#define IWindowsDriverUpdate4_get_IsHidden(This,retval) \
( (This)->lpVtbl -> get_IsHidden(This,retval) )
#define IWindowsDriverUpdate4_put_IsHidden(This,value) \
( (This)->lpVtbl -> put_IsHidden(This,value) )
#define IWindowsDriverUpdate4_get_IsInstalled(This,retval) \
( (This)->lpVtbl -> get_IsInstalled(This,retval) )
#define IWindowsDriverUpdate4_get_IsMandatory(This,retval) \
( (This)->lpVtbl -> get_IsMandatory(This,retval) )
#define IWindowsDriverUpdate4_get_IsUninstallable(This,retval) \
( (This)->lpVtbl -> get_IsUninstallable(This,retval) )
#define IWindowsDriverUpdate4_get_Languages(This,retval) \
( (This)->lpVtbl -> get_Languages(This,retval) )
#define IWindowsDriverUpdate4_get_LastDeploymentChangeTime(This,retval) \
( (This)->lpVtbl -> get_LastDeploymentChangeTime(This,retval) )
#define IWindowsDriverUpdate4_get_MaxDownloadSize(This,retval) \
( (This)->lpVtbl -> get_MaxDownloadSize(This,retval) )
#define IWindowsDriverUpdate4_get_MinDownloadSize(This,retval) \
( (This)->lpVtbl -> get_MinDownloadSize(This,retval) )
#define IWindowsDriverUpdate4_get_MoreInfoUrls(This,retval) \
( (This)->lpVtbl -> get_MoreInfoUrls(This,retval) )
#define IWindowsDriverUpdate4_get_MsrcSeverity(This,retval) \
( (This)->lpVtbl -> get_MsrcSeverity(This,retval) )
#define IWindowsDriverUpdate4_get_RecommendedCpuSpeed(This,retval) \
( (This)->lpVtbl -> get_RecommendedCpuSpeed(This,retval) )
#define IWindowsDriverUpdate4_get_RecommendedHardDiskSpace(This,retval) \
( (This)->lpVtbl -> get_RecommendedHardDiskSpace(This,retval) )
#define IWindowsDriverUpdate4_get_RecommendedMemory(This,retval) \
( (This)->lpVtbl -> get_RecommendedMemory(This,retval) )
#define IWindowsDriverUpdate4_get_ReleaseNotes(This,retval) \
( (This)->lpVtbl -> get_ReleaseNotes(This,retval) )
#define IWindowsDriverUpdate4_get_SecurityBulletinIDs(This,retval) \
( (This)->lpVtbl -> get_SecurityBulletinIDs(This,retval) )
#define IWindowsDriverUpdate4_get_SupersededUpdateIDs(This,retval) \
( (This)->lpVtbl -> get_SupersededUpdateIDs(This,retval) )
#define IWindowsDriverUpdate4_get_SupportUrl(This,retval) \
( (This)->lpVtbl -> get_SupportUrl(This,retval) )
#define IWindowsDriverUpdate4_get_Type(This,retval) \
( (This)->lpVtbl -> get_Type(This,retval) )
#define IWindowsDriverUpdate4_get_UninstallationNotes(This,retval) \
( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )
#define IWindowsDriverUpdate4_get_UninstallationBehavior(This,retval) \
( (This)->lpVtbl -> get_UninstallationBehavior(This,retval) )
#define IWindowsDriverUpdate4_get_UninstallationSteps(This,retval) \
( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )
#define IWindowsDriverUpdate4_get_KBArticleIDs(This,retval) \
( (This)->lpVtbl -> get_KBArticleIDs(This,retval) )
#define IWindowsDriverUpdate4_AcceptEula(This) \
( (This)->lpVtbl -> AcceptEula(This) )
#define IWindowsDriverUpdate4_get_DeploymentAction(This,retval) \
( (This)->lpVtbl -> get_DeploymentAction(This,retval) )
#define IWindowsDriverUpdate4_CopyFromCache(This,path,toExtractCabFiles) \
( (This)->lpVtbl -> CopyFromCache(This,path,toExtractCabFiles) )
#define IWindowsDriverUpdate4_get_DownloadPriority(This,retval) \
( (This)->lpVtbl -> get_DownloadPriority(This,retval) )
#define IWindowsDriverUpdate4_get_DownloadContents(This,retval) \
( (This)->lpVtbl -> get_DownloadContents(This,retval) )
#define IWindowsDriverUpdate4_get_DriverClass(This,retval) \
( (This)->lpVtbl -> get_DriverClass(This,retval) )
#define IWindowsDriverUpdate4_get_DriverHardwareID(This,retval) \
( (This)->lpVtbl -> get_DriverHardwareID(This,retval) )
#define IWindowsDriverUpdate4_get_DriverManufacturer(This,retval) \
( (This)->lpVtbl -> get_DriverManufacturer(This,retval) )
#define IWindowsDriverUpdate4_get_DriverModel(This,retval) \
( (This)->lpVtbl -> get_DriverModel(This,retval) )
#define IWindowsDriverUpdate4_get_DriverProvider(This,retval) \
( (This)->lpVtbl -> get_DriverProvider(This,retval) )
#define IWindowsDriverUpdate4_get_DriverVerDate(This,retval) \
( (This)->lpVtbl -> get_DriverVerDate(This,retval) )
#define IWindowsDriverUpdate4_get_DeviceProblemNumber(This,retval) \
( (This)->lpVtbl -> get_DeviceProblemNumber(This,retval) )
#define IWindowsDriverUpdate4_get_DeviceStatus(This,retval) \
( (This)->lpVtbl -> get_DeviceStatus(This,retval) )
#define IWindowsDriverUpdate4_get_RebootRequired(This,retval) \
( (This)->lpVtbl -> get_RebootRequired(This,retval) )
#define IWindowsDriverUpdate4_get_IsPresent(This,retval) \
( (This)->lpVtbl -> get_IsPresent(This,retval) )
#define IWindowsDriverUpdate4_get_CveIDs(This,retval) \
( (This)->lpVtbl -> get_CveIDs(This,retval) )
#define IWindowsDriverUpdate4_CopyToCache(This,pFiles) \
( (This)->lpVtbl -> CopyToCache(This,pFiles) )
#define IWindowsDriverUpdate4_get_BrowseOnly(This,retval) \
( (This)->lpVtbl -> get_BrowseOnly(This,retval) )
#define IWindowsDriverUpdate4_get_WindowsDriverUpdateEntries(This,retval) \
( (This)->lpVtbl -> get_WindowsDriverUpdateEntries(This,retval) )
#define IWindowsDriverUpdate4_get_PerUser(This,retval) \
( (This)->lpVtbl -> get_PerUser(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IWindowsDriverUpdate4_INTERFACE_DEFINED__ */
#ifndef __IWindowsDriverUpdate5_INTERFACE_DEFINED__
#define __IWindowsDriverUpdate5_INTERFACE_DEFINED__
/* interface IWindowsDriverUpdate5 */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IWindowsDriverUpdate5;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("70CF5C82-8642-42bb-9DBC-0CFD263C6C4F")
IWindowsDriverUpdate5 : public IWindowsDriverUpdate4
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AutoSelection(
/* [retval][out] */ __RPC__out AutoSelectionMode *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AutoDownload(
/* [retval][out] */ __RPC__out AutoDownloadMode *retval) = 0;
};
#else /* C style interface */
typedef struct IWindowsDriverUpdate5Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IWindowsDriverUpdate5 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IWindowsDriverUpdate5 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IWindowsDriverUpdate5 * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelectOnWebSites )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BundledUpdates )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequireSource )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Deadline )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentAvailable )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentPreferred )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaAccepted )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaText )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HandlerID )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Identity )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_InstallationBehavior )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBeta )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDownloaded )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsHidden )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsHidden )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsInstalled )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsMandatory )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsUninstallable )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Languages )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastDeploymentChangeTime )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MaxDownloadSize )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MinDownloadSize )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MoreInfoUrls )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MsrcSeverity )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedCpuSpeed )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedHardDiskSpace )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedMemory )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReleaseNotes )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SecurityBulletinIDs )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupersededUpdateIDs )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out UpdateType *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationBehavior )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_KBArticleIDs )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AcceptEula )(
__RPC__in IWindowsDriverUpdate5 * This);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeploymentAction )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out DeploymentAction *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyFromCache )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [ref][in] */ __RPC__in BSTR path,
/* [in] */ VARIANT_BOOL toExtractCabFiles);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadPriority )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out DownloadPriority *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadContents )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverClass )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverHardwareID )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverManufacturer )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverModel )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverProvider )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverVerDate )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceProblemNumber )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceStatus )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsPresent )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CveIDs )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyToCache )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [in] */ __RPC__in_opt IStringCollection *pFiles);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BrowseOnly )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_WindowsDriverUpdateEntries )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__deref_out_opt IWindowsDriverUpdateEntryCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_PerUser )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelection )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out AutoSelectionMode *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoDownload )(
__RPC__in IWindowsDriverUpdate5 * This,
/* [retval][out] */ __RPC__out AutoDownloadMode *retval);
END_INTERFACE
} IWindowsDriverUpdate5Vtbl;
interface IWindowsDriverUpdate5
{
CONST_VTBL struct IWindowsDriverUpdate5Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IWindowsDriverUpdate5_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IWindowsDriverUpdate5_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IWindowsDriverUpdate5_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IWindowsDriverUpdate5_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IWindowsDriverUpdate5_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IWindowsDriverUpdate5_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IWindowsDriverUpdate5_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IWindowsDriverUpdate5_get_Title(This,retval) \
( (This)->lpVtbl -> get_Title(This,retval) )
#define IWindowsDriverUpdate5_get_AutoSelectOnWebSites(This,retval) \
( (This)->lpVtbl -> get_AutoSelectOnWebSites(This,retval) )
#define IWindowsDriverUpdate5_get_BundledUpdates(This,retval) \
( (This)->lpVtbl -> get_BundledUpdates(This,retval) )
#define IWindowsDriverUpdate5_get_CanRequireSource(This,retval) \
( (This)->lpVtbl -> get_CanRequireSource(This,retval) )
#define IWindowsDriverUpdate5_get_Categories(This,retval) \
( (This)->lpVtbl -> get_Categories(This,retval) )
#define IWindowsDriverUpdate5_get_Deadline(This,retval) \
( (This)->lpVtbl -> get_Deadline(This,retval) )
#define IWindowsDriverUpdate5_get_DeltaCompressedContentAvailable(This,retval) \
( (This)->lpVtbl -> get_DeltaCompressedContentAvailable(This,retval) )
#define IWindowsDriverUpdate5_get_DeltaCompressedContentPreferred(This,retval) \
( (This)->lpVtbl -> get_DeltaCompressedContentPreferred(This,retval) )
#define IWindowsDriverUpdate5_get_Description(This,retval) \
( (This)->lpVtbl -> get_Description(This,retval) )
#define IWindowsDriverUpdate5_get_EulaAccepted(This,retval) \
( (This)->lpVtbl -> get_EulaAccepted(This,retval) )
#define IWindowsDriverUpdate5_get_EulaText(This,retval) \
( (This)->lpVtbl -> get_EulaText(This,retval) )
#define IWindowsDriverUpdate5_get_HandlerID(This,retval) \
( (This)->lpVtbl -> get_HandlerID(This,retval) )
#define IWindowsDriverUpdate5_get_Identity(This,retval) \
( (This)->lpVtbl -> get_Identity(This,retval) )
#define IWindowsDriverUpdate5_get_Image(This,retval) \
( (This)->lpVtbl -> get_Image(This,retval) )
#define IWindowsDriverUpdate5_get_InstallationBehavior(This,retval) \
( (This)->lpVtbl -> get_InstallationBehavior(This,retval) )
#define IWindowsDriverUpdate5_get_IsBeta(This,retval) \
( (This)->lpVtbl -> get_IsBeta(This,retval) )
#define IWindowsDriverUpdate5_get_IsDownloaded(This,retval) \
( (This)->lpVtbl -> get_IsDownloaded(This,retval) )
#define IWindowsDriverUpdate5_get_IsHidden(This,retval) \
( (This)->lpVtbl -> get_IsHidden(This,retval) )
#define IWindowsDriverUpdate5_put_IsHidden(This,value) \
( (This)->lpVtbl -> put_IsHidden(This,value) )
#define IWindowsDriverUpdate5_get_IsInstalled(This,retval) \
( (This)->lpVtbl -> get_IsInstalled(This,retval) )
#define IWindowsDriverUpdate5_get_IsMandatory(This,retval) \
( (This)->lpVtbl -> get_IsMandatory(This,retval) )
#define IWindowsDriverUpdate5_get_IsUninstallable(This,retval) \
( (This)->lpVtbl -> get_IsUninstallable(This,retval) )
#define IWindowsDriverUpdate5_get_Languages(This,retval) \
( (This)->lpVtbl -> get_Languages(This,retval) )
#define IWindowsDriverUpdate5_get_LastDeploymentChangeTime(This,retval) \
( (This)->lpVtbl -> get_LastDeploymentChangeTime(This,retval) )
#define IWindowsDriverUpdate5_get_MaxDownloadSize(This,retval) \
( (This)->lpVtbl -> get_MaxDownloadSize(This,retval) )
#define IWindowsDriverUpdate5_get_MinDownloadSize(This,retval) \
( (This)->lpVtbl -> get_MinDownloadSize(This,retval) )
#define IWindowsDriverUpdate5_get_MoreInfoUrls(This,retval) \
( (This)->lpVtbl -> get_MoreInfoUrls(This,retval) )
#define IWindowsDriverUpdate5_get_MsrcSeverity(This,retval) \
( (This)->lpVtbl -> get_MsrcSeverity(This,retval) )
#define IWindowsDriverUpdate5_get_RecommendedCpuSpeed(This,retval) \
( (This)->lpVtbl -> get_RecommendedCpuSpeed(This,retval) )
#define IWindowsDriverUpdate5_get_RecommendedHardDiskSpace(This,retval) \
( (This)->lpVtbl -> get_RecommendedHardDiskSpace(This,retval) )
#define IWindowsDriverUpdate5_get_RecommendedMemory(This,retval) \
( (This)->lpVtbl -> get_RecommendedMemory(This,retval) )
#define IWindowsDriverUpdate5_get_ReleaseNotes(This,retval) \
( (This)->lpVtbl -> get_ReleaseNotes(This,retval) )
#define IWindowsDriverUpdate5_get_SecurityBulletinIDs(This,retval) \
( (This)->lpVtbl -> get_SecurityBulletinIDs(This,retval) )
#define IWindowsDriverUpdate5_get_SupersededUpdateIDs(This,retval) \
( (This)->lpVtbl -> get_SupersededUpdateIDs(This,retval) )
#define IWindowsDriverUpdate5_get_SupportUrl(This,retval) \
( (This)->lpVtbl -> get_SupportUrl(This,retval) )
#define IWindowsDriverUpdate5_get_Type(This,retval) \
( (This)->lpVtbl -> get_Type(This,retval) )
#define IWindowsDriverUpdate5_get_UninstallationNotes(This,retval) \
( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )
#define IWindowsDriverUpdate5_get_UninstallationBehavior(This,retval) \
( (This)->lpVtbl -> get_UninstallationBehavior(This,retval) )
#define IWindowsDriverUpdate5_get_UninstallationSteps(This,retval) \
( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )
#define IWindowsDriverUpdate5_get_KBArticleIDs(This,retval) \
( (This)->lpVtbl -> get_KBArticleIDs(This,retval) )
#define IWindowsDriverUpdate5_AcceptEula(This) \
( (This)->lpVtbl -> AcceptEula(This) )
#define IWindowsDriverUpdate5_get_DeploymentAction(This,retval) \
( (This)->lpVtbl -> get_DeploymentAction(This,retval) )
#define IWindowsDriverUpdate5_CopyFromCache(This,path,toExtractCabFiles) \
( (This)->lpVtbl -> CopyFromCache(This,path,toExtractCabFiles) )
#define IWindowsDriverUpdate5_get_DownloadPriority(This,retval) \
( (This)->lpVtbl -> get_DownloadPriority(This,retval) )
#define IWindowsDriverUpdate5_get_DownloadContents(This,retval) \
( (This)->lpVtbl -> get_DownloadContents(This,retval) )
#define IWindowsDriverUpdate5_get_DriverClass(This,retval) \
( (This)->lpVtbl -> get_DriverClass(This,retval) )
#define IWindowsDriverUpdate5_get_DriverHardwareID(This,retval) \
( (This)->lpVtbl -> get_DriverHardwareID(This,retval) )
#define IWindowsDriverUpdate5_get_DriverManufacturer(This,retval) \
( (This)->lpVtbl -> get_DriverManufacturer(This,retval) )
#define IWindowsDriverUpdate5_get_DriverModel(This,retval) \
( (This)->lpVtbl -> get_DriverModel(This,retval) )
#define IWindowsDriverUpdate5_get_DriverProvider(This,retval) \
( (This)->lpVtbl -> get_DriverProvider(This,retval) )
#define IWindowsDriverUpdate5_get_DriverVerDate(This,retval) \
( (This)->lpVtbl -> get_DriverVerDate(This,retval) )
#define IWindowsDriverUpdate5_get_DeviceProblemNumber(This,retval) \
( (This)->lpVtbl -> get_DeviceProblemNumber(This,retval) )
#define IWindowsDriverUpdate5_get_DeviceStatus(This,retval) \
( (This)->lpVtbl -> get_DeviceStatus(This,retval) )
#define IWindowsDriverUpdate5_get_RebootRequired(This,retval) \
( (This)->lpVtbl -> get_RebootRequired(This,retval) )
#define IWindowsDriverUpdate5_get_IsPresent(This,retval) \
( (This)->lpVtbl -> get_IsPresent(This,retval) )
#define IWindowsDriverUpdate5_get_CveIDs(This,retval) \
( (This)->lpVtbl -> get_CveIDs(This,retval) )
#define IWindowsDriverUpdate5_CopyToCache(This,pFiles) \
( (This)->lpVtbl -> CopyToCache(This,pFiles) )
#define IWindowsDriverUpdate5_get_BrowseOnly(This,retval) \
( (This)->lpVtbl -> get_BrowseOnly(This,retval) )
#define IWindowsDriverUpdate5_get_WindowsDriverUpdateEntries(This,retval) \
( (This)->lpVtbl -> get_WindowsDriverUpdateEntries(This,retval) )
#define IWindowsDriverUpdate5_get_PerUser(This,retval) \
( (This)->lpVtbl -> get_PerUser(This,retval) )
#define IWindowsDriverUpdate5_get_AutoSelection(This,retval) \
( (This)->lpVtbl -> get_AutoSelection(This,retval) )
#define IWindowsDriverUpdate5_get_AutoDownload(This,retval) \
( (This)->lpVtbl -> get_AutoDownload(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IWindowsDriverUpdate5_INTERFACE_DEFINED__ */
#ifndef __IUpdateCollection_INTERFACE_DEFINED__
#define __IUpdateCollection_INTERFACE_DEFINED__
/* interface IUpdateCollection */
/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("07f7438c-7709-4ca5-b518-91279288134e")
IUpdateCollection : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Item(
/* [in] */ LONG index,
/* [retval][out] */ __RPC__deref_out_opt IUpdate **retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Item(
/* [in] */ LONG index,
/* [in] */ __RPC__in_opt IUpdate *value) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get__NewEnum(
/* [retval][out] */ __RPC__deref_out_opt IUnknown **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Count(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ReadOnly(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Add(
/* [in] */ __RPC__in_opt IUpdate *value,
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Clear( void) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Copy(
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Insert(
/* [in] */ LONG index,
/* [in] */ __RPC__in_opt IUpdate *value) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RemoveAt(
/* [in] */ LONG index) = 0;
};
#else /* C style interface */
typedef struct IUpdateCollectionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateCollection * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateCollection * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateCollection * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateCollection * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateCollection * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(
__RPC__in IUpdateCollection * This,
/* [in] */ LONG index,
/* [retval][out] */ __RPC__deref_out_opt IUpdate **retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Item )(
__RPC__in IUpdateCollection * This,
/* [in] */ LONG index,
/* [in] */ __RPC__in_opt IUpdate *value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(
__RPC__in IUpdateCollection * This,
/* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(
__RPC__in IUpdateCollection * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReadOnly )(
__RPC__in IUpdateCollection * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Add )(
__RPC__in IUpdateCollection * This,
/* [in] */ __RPC__in_opt IUpdate *value,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Clear )(
__RPC__in IUpdateCollection * This);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Copy )(
__RPC__in IUpdateCollection * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Insert )(
__RPC__in IUpdateCollection * This,
/* [in] */ LONG index,
/* [in] */ __RPC__in_opt IUpdate *value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RemoveAt )(
__RPC__in IUpdateCollection * This,
/* [in] */ LONG index);
END_INTERFACE
} IUpdateCollectionVtbl;
interface IUpdateCollection
{
CONST_VTBL struct IUpdateCollectionVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateCollection_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateCollection_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateCollection_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateCollection_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateCollection_get_Item(This,index,retval) \
( (This)->lpVtbl -> get_Item(This,index,retval) )
#define IUpdateCollection_put_Item(This,index,value) \
( (This)->lpVtbl -> put_Item(This,index,value) )
#define IUpdateCollection_get__NewEnum(This,retval) \
( (This)->lpVtbl -> get__NewEnum(This,retval) )
#define IUpdateCollection_get_Count(This,retval) \
( (This)->lpVtbl -> get_Count(This,retval) )
#define IUpdateCollection_get_ReadOnly(This,retval) \
( (This)->lpVtbl -> get_ReadOnly(This,retval) )
#define IUpdateCollection_Add(This,value,retval) \
( (This)->lpVtbl -> Add(This,value,retval) )
#define IUpdateCollection_Clear(This) \
( (This)->lpVtbl -> Clear(This) )
#define IUpdateCollection_Copy(This,retval) \
( (This)->lpVtbl -> Copy(This,retval) )
#define IUpdateCollection_Insert(This,index,value) \
( (This)->lpVtbl -> Insert(This,index,value) )
#define IUpdateCollection_RemoveAt(This,index) \
( (This)->lpVtbl -> RemoveAt(This,index) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateCollection_INTERFACE_DEFINED__ */
#ifndef __IUpdateException_INTERFACE_DEFINED__
#define __IUpdateException_INTERFACE_DEFINED__
/* interface IUpdateException */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateException;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a376dd5e-09d4-427f-af7c-fed5b6e1c1d6")
IUpdateException : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Message(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_HResult(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Context(
/* [retval][out] */ __RPC__out UpdateExceptionContext *retval) = 0;
};
#else /* C style interface */
typedef struct IUpdateExceptionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateException * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateException * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateException * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateException * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateException * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateException * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateException * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Message )(
__RPC__in IUpdateException * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HResult )(
__RPC__in IUpdateException * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Context )(
__RPC__in IUpdateException * This,
/* [retval][out] */ __RPC__out UpdateExceptionContext *retval);
END_INTERFACE
} IUpdateExceptionVtbl;
interface IUpdateException
{
CONST_VTBL struct IUpdateExceptionVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateException_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateException_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateException_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateException_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateException_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateException_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateException_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateException_get_Message(This,retval) \
( (This)->lpVtbl -> get_Message(This,retval) )
#define IUpdateException_get_HResult(This,retval) \
( (This)->lpVtbl -> get_HResult(This,retval) )
#define IUpdateException_get_Context(This,retval) \
( (This)->lpVtbl -> get_Context(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateException_INTERFACE_DEFINED__ */
#ifndef __IInvalidProductLicenseException_INTERFACE_DEFINED__
#define __IInvalidProductLicenseException_INTERFACE_DEFINED__
/* interface IInvalidProductLicenseException */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IInvalidProductLicenseException;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a37d00f5-7bb0-4953-b414-f9e98326f2e8")
IInvalidProductLicenseException : public IUpdateException
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Product(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
};
#else /* C style interface */
typedef struct IInvalidProductLicenseExceptionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IInvalidProductLicenseException * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IInvalidProductLicenseException * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IInvalidProductLicenseException * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IInvalidProductLicenseException * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IInvalidProductLicenseException * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IInvalidProductLicenseException * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IInvalidProductLicenseException * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Message )(
__RPC__in IInvalidProductLicenseException * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HResult )(
__RPC__in IInvalidProductLicenseException * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Context )(
__RPC__in IInvalidProductLicenseException * This,
/* [retval][out] */ __RPC__out UpdateExceptionContext *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Product )(
__RPC__in IInvalidProductLicenseException * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
END_INTERFACE
} IInvalidProductLicenseExceptionVtbl;
interface IInvalidProductLicenseException
{
CONST_VTBL struct IInvalidProductLicenseExceptionVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IInvalidProductLicenseException_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IInvalidProductLicenseException_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IInvalidProductLicenseException_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IInvalidProductLicenseException_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IInvalidProductLicenseException_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IInvalidProductLicenseException_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IInvalidProductLicenseException_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IInvalidProductLicenseException_get_Message(This,retval) \
( (This)->lpVtbl -> get_Message(This,retval) )
#define IInvalidProductLicenseException_get_HResult(This,retval) \
( (This)->lpVtbl -> get_HResult(This,retval) )
#define IInvalidProductLicenseException_get_Context(This,retval) \
( (This)->lpVtbl -> get_Context(This,retval) )
#define IInvalidProductLicenseException_get_Product(This,retval) \
( (This)->lpVtbl -> get_Product(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IInvalidProductLicenseException_INTERFACE_DEFINED__ */
#ifndef __IUpdateExceptionCollection_INTERFACE_DEFINED__
#define __IUpdateExceptionCollection_INTERFACE_DEFINED__
/* interface IUpdateExceptionCollection */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateExceptionCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("503626a3-8e14-4729-9355-0fe664bd2321")
IUpdateExceptionCollection : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Item(
/* [in] */ LONG index,
/* [retval][out] */ __RPC__deref_out_opt IUpdateException **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get__NewEnum(
/* [retval][out] */ __RPC__deref_out_opt IUnknown **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Count(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
};
#else /* C style interface */
typedef struct IUpdateExceptionCollectionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateExceptionCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateExceptionCollection * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateExceptionCollection * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateExceptionCollection * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateExceptionCollection * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateExceptionCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateExceptionCollection * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(
__RPC__in IUpdateExceptionCollection * This,
/* [in] */ LONG index,
/* [retval][out] */ __RPC__deref_out_opt IUpdateException **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(
__RPC__in IUpdateExceptionCollection * This,
/* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(
__RPC__in IUpdateExceptionCollection * This,
/* [retval][out] */ __RPC__out LONG *retval);
END_INTERFACE
} IUpdateExceptionCollectionVtbl;
interface IUpdateExceptionCollection
{
CONST_VTBL struct IUpdateExceptionCollectionVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateExceptionCollection_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateExceptionCollection_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateExceptionCollection_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateExceptionCollection_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateExceptionCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateExceptionCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateExceptionCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateExceptionCollection_get_Item(This,index,retval) \
( (This)->lpVtbl -> get_Item(This,index,retval) )
#define IUpdateExceptionCollection_get__NewEnum(This,retval) \
( (This)->lpVtbl -> get__NewEnum(This,retval) )
#define IUpdateExceptionCollection_get_Count(This,retval) \
( (This)->lpVtbl -> get_Count(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateExceptionCollection_INTERFACE_DEFINED__ */
#ifndef __ISearchResult_INTERFACE_DEFINED__
#define __ISearchResult_INTERFACE_DEFINED__
/* interface ISearchResult */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_ISearchResult;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("d40cff62-e08c-4498-941a-01e25f0fd33c")
ISearchResult : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ResultCode(
/* [retval][out] */ __RPC__out OperationResultCode *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RootCategories(
/* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Updates(
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Warnings(
/* [retval][out] */ __RPC__deref_out_opt IUpdateExceptionCollection **retval) = 0;
};
#else /* C style interface */
typedef struct ISearchResultVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in ISearchResult * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in ISearchResult * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in ISearchResult * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in ISearchResult * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in ISearchResult * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in ISearchResult * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
ISearchResult * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ResultCode )(
__RPC__in ISearchResult * This,
/* [retval][out] */ __RPC__out OperationResultCode *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RootCategories )(
__RPC__in ISearchResult * This,
/* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Updates )(
__RPC__in ISearchResult * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Warnings )(
__RPC__in ISearchResult * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateExceptionCollection **retval);
END_INTERFACE
} ISearchResultVtbl;
interface ISearchResult
{
CONST_VTBL struct ISearchResultVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define ISearchResult_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define ISearchResult_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define ISearchResult_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define ISearchResult_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define ISearchResult_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define ISearchResult_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define ISearchResult_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define ISearchResult_get_ResultCode(This,retval) \
( (This)->lpVtbl -> get_ResultCode(This,retval) )
#define ISearchResult_get_RootCategories(This,retval) \
( (This)->lpVtbl -> get_RootCategories(This,retval) )
#define ISearchResult_get_Updates(This,retval) \
( (This)->lpVtbl -> get_Updates(This,retval) )
#define ISearchResult_get_Warnings(This,retval) \
( (This)->lpVtbl -> get_Warnings(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __ISearchResult_INTERFACE_DEFINED__ */
#ifndef __ISearchJob_INTERFACE_DEFINED__
#define __ISearchJob_INTERFACE_DEFINED__
/* interface ISearchJob */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_ISearchJob;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("7366ea16-7a1a-4ea2-b042-973d3e9cd99b")
ISearchJob : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AsyncState(
/* [retval][out] */ __RPC__out VARIANT *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsCompleted(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CleanUp( void) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RequestAbort( void) = 0;
};
#else /* C style interface */
typedef struct ISearchJobVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in ISearchJob * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in ISearchJob * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in ISearchJob * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in ISearchJob * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in ISearchJob * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in ISearchJob * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
ISearchJob * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AsyncState )(
__RPC__in ISearchJob * This,
/* [retval][out] */ __RPC__out VARIANT *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsCompleted )(
__RPC__in ISearchJob * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CleanUp )(
__RPC__in ISearchJob * This);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RequestAbort )(
__RPC__in ISearchJob * This);
END_INTERFACE
} ISearchJobVtbl;
interface ISearchJob
{
CONST_VTBL struct ISearchJobVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define ISearchJob_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define ISearchJob_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define ISearchJob_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define ISearchJob_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define ISearchJob_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define ISearchJob_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define ISearchJob_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define ISearchJob_get_AsyncState(This,retval) \
( (This)->lpVtbl -> get_AsyncState(This,retval) )
#define ISearchJob_get_IsCompleted(This,retval) \
( (This)->lpVtbl -> get_IsCompleted(This,retval) )
#define ISearchJob_CleanUp(This) \
( (This)->lpVtbl -> CleanUp(This) )
#define ISearchJob_RequestAbort(This) \
( (This)->lpVtbl -> RequestAbort(This) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __ISearchJob_INTERFACE_DEFINED__ */
#ifndef __ISearchCompletedCallbackArgs_INTERFACE_DEFINED__
#define __ISearchCompletedCallbackArgs_INTERFACE_DEFINED__
/* interface ISearchCompletedCallbackArgs */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_ISearchCompletedCallbackArgs;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a700a634-2850-4c47-938a-9e4b6e5af9a6")
ISearchCompletedCallbackArgs : public IDispatch
{
public:
};
#else /* C style interface */
typedef struct ISearchCompletedCallbackArgsVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in ISearchCompletedCallbackArgs * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in ISearchCompletedCallbackArgs * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in ISearchCompletedCallbackArgs * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in ISearchCompletedCallbackArgs * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in ISearchCompletedCallbackArgs * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in ISearchCompletedCallbackArgs * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
ISearchCompletedCallbackArgs * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
END_INTERFACE
} ISearchCompletedCallbackArgsVtbl;
interface ISearchCompletedCallbackArgs
{
CONST_VTBL struct ISearchCompletedCallbackArgsVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define ISearchCompletedCallbackArgs_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define ISearchCompletedCallbackArgs_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define ISearchCompletedCallbackArgs_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define ISearchCompletedCallbackArgs_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define ISearchCompletedCallbackArgs_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define ISearchCompletedCallbackArgs_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define ISearchCompletedCallbackArgs_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __ISearchCompletedCallbackArgs_INTERFACE_DEFINED__ */
#ifndef __ISearchCompletedCallback_INTERFACE_DEFINED__
#define __ISearchCompletedCallback_INTERFACE_DEFINED__
/* interface ISearchCompletedCallback */
/* [unique][uuid][nonextensible][oleautomation][object][helpstring] */
EXTERN_C const IID IID_ISearchCompletedCallback;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("88aee058-d4b0-4725-a2f1-814a67ae964c")
ISearchCompletedCallback : public IUnknown
{
public:
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Invoke(
/* [in] */ __RPC__in_opt ISearchJob *searchJob,
/* [in] */ __RPC__in_opt ISearchCompletedCallbackArgs *callbackArgs) = 0;
};
#else /* C style interface */
typedef struct ISearchCompletedCallbackVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in ISearchCompletedCallback * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in ISearchCompletedCallback * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in ISearchCompletedCallback * This);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
__RPC__in ISearchCompletedCallback * This,
/* [in] */ __RPC__in_opt ISearchJob *searchJob,
/* [in] */ __RPC__in_opt ISearchCompletedCallbackArgs *callbackArgs);
END_INTERFACE
} ISearchCompletedCallbackVtbl;
interface ISearchCompletedCallback
{
CONST_VTBL struct ISearchCompletedCallbackVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define ISearchCompletedCallback_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define ISearchCompletedCallback_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define ISearchCompletedCallback_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define ISearchCompletedCallback_Invoke(This,searchJob,callbackArgs) \
( (This)->lpVtbl -> Invoke(This,searchJob,callbackArgs) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __ISearchCompletedCallback_INTERFACE_DEFINED__ */
#ifndef __IUpdateHistoryEntry_INTERFACE_DEFINED__
#define __IUpdateHistoryEntry_INTERFACE_DEFINED__
/* interface IUpdateHistoryEntry */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateHistoryEntry;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("be56a644-af0e-4e0e-a311-c1d8e695cbff")
IUpdateHistoryEntry : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Operation(
/* [retval][out] */ __RPC__out UpdateOperation *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ResultCode(
/* [retval][out] */ __RPC__out OperationResultCode *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_HResult(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Date(
/* [retval][out] */ __RPC__out DATE *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UpdateIdentity(
/* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Title(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Description(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UnmappedResultCode(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ClientApplicationID(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ServerSelection(
/* [retval][out] */ __RPC__out ServerSelection *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ServiceID(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UninstallationSteps(
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UninstallationNotes(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_SupportUrl(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
};
#else /* C style interface */
typedef struct IUpdateHistoryEntryVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateHistoryEntry * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateHistoryEntry * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateHistoryEntry * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateHistoryEntry * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateHistoryEntry * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateHistoryEntry * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateHistoryEntry * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Operation )(
__RPC__in IUpdateHistoryEntry * This,
/* [retval][out] */ __RPC__out UpdateOperation *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ResultCode )(
__RPC__in IUpdateHistoryEntry * This,
/* [retval][out] */ __RPC__out OperationResultCode *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HResult )(
__RPC__in IUpdateHistoryEntry * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Date )(
__RPC__in IUpdateHistoryEntry * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UpdateIdentity )(
__RPC__in IUpdateHistoryEntry * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(
__RPC__in IUpdateHistoryEntry * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(
__RPC__in IUpdateHistoryEntry * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UnmappedResultCode )(
__RPC__in IUpdateHistoryEntry * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(
__RPC__in IUpdateHistoryEntry * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServerSelection )(
__RPC__in IUpdateHistoryEntry * This,
/* [retval][out] */ __RPC__out ServerSelection *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceID )(
__RPC__in IUpdateHistoryEntry * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(
__RPC__in IUpdateHistoryEntry * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(
__RPC__in IUpdateHistoryEntry * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(
__RPC__in IUpdateHistoryEntry * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
END_INTERFACE
} IUpdateHistoryEntryVtbl;
interface IUpdateHistoryEntry
{
CONST_VTBL struct IUpdateHistoryEntryVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateHistoryEntry_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateHistoryEntry_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateHistoryEntry_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateHistoryEntry_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateHistoryEntry_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateHistoryEntry_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateHistoryEntry_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateHistoryEntry_get_Operation(This,retval) \
( (This)->lpVtbl -> get_Operation(This,retval) )
#define IUpdateHistoryEntry_get_ResultCode(This,retval) \
( (This)->lpVtbl -> get_ResultCode(This,retval) )
#define IUpdateHistoryEntry_get_HResult(This,retval) \
( (This)->lpVtbl -> get_HResult(This,retval) )
#define IUpdateHistoryEntry_get_Date(This,retval) \
( (This)->lpVtbl -> get_Date(This,retval) )
#define IUpdateHistoryEntry_get_UpdateIdentity(This,retval) \
( (This)->lpVtbl -> get_UpdateIdentity(This,retval) )
#define IUpdateHistoryEntry_get_Title(This,retval) \
( (This)->lpVtbl -> get_Title(This,retval) )
#define IUpdateHistoryEntry_get_Description(This,retval) \
( (This)->lpVtbl -> get_Description(This,retval) )
#define IUpdateHistoryEntry_get_UnmappedResultCode(This,retval) \
( (This)->lpVtbl -> get_UnmappedResultCode(This,retval) )
#define IUpdateHistoryEntry_get_ClientApplicationID(This,retval) \
( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )
#define IUpdateHistoryEntry_get_ServerSelection(This,retval) \
( (This)->lpVtbl -> get_ServerSelection(This,retval) )
#define IUpdateHistoryEntry_get_ServiceID(This,retval) \
( (This)->lpVtbl -> get_ServiceID(This,retval) )
#define IUpdateHistoryEntry_get_UninstallationSteps(This,retval) \
( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )
#define IUpdateHistoryEntry_get_UninstallationNotes(This,retval) \
( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )
#define IUpdateHistoryEntry_get_SupportUrl(This,retval) \
( (This)->lpVtbl -> get_SupportUrl(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateHistoryEntry_INTERFACE_DEFINED__ */
#ifndef __IUpdateHistoryEntry2_INTERFACE_DEFINED__
#define __IUpdateHistoryEntry2_INTERFACE_DEFINED__
/* interface IUpdateHistoryEntry2 */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateHistoryEntry2;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c2bfb780-4539-4132-ab8c-0a8772013ab6")
IUpdateHistoryEntry2 : public IUpdateHistoryEntry
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Categories(
/* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval) = 0;
};
#else /* C style interface */
typedef struct IUpdateHistoryEntry2Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateHistoryEntry2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateHistoryEntry2 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateHistoryEntry2 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateHistoryEntry2 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateHistoryEntry2 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateHistoryEntry2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateHistoryEntry2 * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Operation )(
__RPC__in IUpdateHistoryEntry2 * This,
/* [retval][out] */ __RPC__out UpdateOperation *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ResultCode )(
__RPC__in IUpdateHistoryEntry2 * This,
/* [retval][out] */ __RPC__out OperationResultCode *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HResult )(
__RPC__in IUpdateHistoryEntry2 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Date )(
__RPC__in IUpdateHistoryEntry2 * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UpdateIdentity )(
__RPC__in IUpdateHistoryEntry2 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(
__RPC__in IUpdateHistoryEntry2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(
__RPC__in IUpdateHistoryEntry2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UnmappedResultCode )(
__RPC__in IUpdateHistoryEntry2 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(
__RPC__in IUpdateHistoryEntry2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServerSelection )(
__RPC__in IUpdateHistoryEntry2 * This,
/* [retval][out] */ __RPC__out ServerSelection *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceID )(
__RPC__in IUpdateHistoryEntry2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(
__RPC__in IUpdateHistoryEntry2 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(
__RPC__in IUpdateHistoryEntry2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(
__RPC__in IUpdateHistoryEntry2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(
__RPC__in IUpdateHistoryEntry2 * This,
/* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);
END_INTERFACE
} IUpdateHistoryEntry2Vtbl;
interface IUpdateHistoryEntry2
{
CONST_VTBL struct IUpdateHistoryEntry2Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateHistoryEntry2_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateHistoryEntry2_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateHistoryEntry2_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateHistoryEntry2_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateHistoryEntry2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateHistoryEntry2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateHistoryEntry2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateHistoryEntry2_get_Operation(This,retval) \
( (This)->lpVtbl -> get_Operation(This,retval) )
#define IUpdateHistoryEntry2_get_ResultCode(This,retval) \
( (This)->lpVtbl -> get_ResultCode(This,retval) )
#define IUpdateHistoryEntry2_get_HResult(This,retval) \
( (This)->lpVtbl -> get_HResult(This,retval) )
#define IUpdateHistoryEntry2_get_Date(This,retval) \
( (This)->lpVtbl -> get_Date(This,retval) )
#define IUpdateHistoryEntry2_get_UpdateIdentity(This,retval) \
( (This)->lpVtbl -> get_UpdateIdentity(This,retval) )
#define IUpdateHistoryEntry2_get_Title(This,retval) \
( (This)->lpVtbl -> get_Title(This,retval) )
#define IUpdateHistoryEntry2_get_Description(This,retval) \
( (This)->lpVtbl -> get_Description(This,retval) )
#define IUpdateHistoryEntry2_get_UnmappedResultCode(This,retval) \
( (This)->lpVtbl -> get_UnmappedResultCode(This,retval) )
#define IUpdateHistoryEntry2_get_ClientApplicationID(This,retval) \
( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )
#define IUpdateHistoryEntry2_get_ServerSelection(This,retval) \
( (This)->lpVtbl -> get_ServerSelection(This,retval) )
#define IUpdateHistoryEntry2_get_ServiceID(This,retval) \
( (This)->lpVtbl -> get_ServiceID(This,retval) )
#define IUpdateHistoryEntry2_get_UninstallationSteps(This,retval) \
( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )
#define IUpdateHistoryEntry2_get_UninstallationNotes(This,retval) \
( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )
#define IUpdateHistoryEntry2_get_SupportUrl(This,retval) \
( (This)->lpVtbl -> get_SupportUrl(This,retval) )
#define IUpdateHistoryEntry2_get_Categories(This,retval) \
( (This)->lpVtbl -> get_Categories(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateHistoryEntry2_INTERFACE_DEFINED__ */
#ifndef __IUpdateHistoryEntryCollection_INTERFACE_DEFINED__
#define __IUpdateHistoryEntryCollection_INTERFACE_DEFINED__
/* interface IUpdateHistoryEntryCollection */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateHistoryEntryCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a7f04f3c-a290-435b-aadf-a116c3357a5c")
IUpdateHistoryEntryCollection : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Item(
/* [in] */ LONG index,
/* [retval][out] */ __RPC__deref_out_opt IUpdateHistoryEntry **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get__NewEnum(
/* [retval][out] */ __RPC__deref_out_opt IUnknown **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Count(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
};
#else /* C style interface */
typedef struct IUpdateHistoryEntryCollectionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateHistoryEntryCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateHistoryEntryCollection * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateHistoryEntryCollection * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateHistoryEntryCollection * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateHistoryEntryCollection * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateHistoryEntryCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateHistoryEntryCollection * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(
__RPC__in IUpdateHistoryEntryCollection * This,
/* [in] */ LONG index,
/* [retval][out] */ __RPC__deref_out_opt IUpdateHistoryEntry **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(
__RPC__in IUpdateHistoryEntryCollection * This,
/* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(
__RPC__in IUpdateHistoryEntryCollection * This,
/* [retval][out] */ __RPC__out LONG *retval);
END_INTERFACE
} IUpdateHistoryEntryCollectionVtbl;
interface IUpdateHistoryEntryCollection
{
CONST_VTBL struct IUpdateHistoryEntryCollectionVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateHistoryEntryCollection_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateHistoryEntryCollection_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateHistoryEntryCollection_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateHistoryEntryCollection_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateHistoryEntryCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateHistoryEntryCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateHistoryEntryCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateHistoryEntryCollection_get_Item(This,index,retval) \
( (This)->lpVtbl -> get_Item(This,index,retval) )
#define IUpdateHistoryEntryCollection_get__NewEnum(This,retval) \
( (This)->lpVtbl -> get__NewEnum(This,retval) )
#define IUpdateHistoryEntryCollection_get_Count(This,retval) \
( (This)->lpVtbl -> get_Count(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateHistoryEntryCollection_INTERFACE_DEFINED__ */
#ifndef __IUpdateSearcher_INTERFACE_DEFINED__
#define __IUpdateSearcher_INTERFACE_DEFINED__
/* interface IUpdateSearcher */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateSearcher;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("8f45abf1-f9ae-4b95-a933-f0f66e5056ea")
IUpdateSearcher : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CanAutomaticallyUpgradeService(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_CanAutomaticallyUpgradeService(
/* [in] */ VARIANT_BOOL value) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ClientApplicationID(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ClientApplicationID(
/* [in] */ __RPC__in BSTR value) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IncludePotentiallySupersededUpdates(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_IncludePotentiallySupersededUpdates(
/* [in] */ VARIANT_BOOL value) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ServerSelection(
/* [retval][out] */ __RPC__out ServerSelection *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ServerSelection(
/* [in] */ ServerSelection value) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE BeginSearch(
/* [in] */ __RPC__in BSTR criteria,
/* [in] */ __RPC__in_opt IUnknown *onCompleted,
/* [in] */ VARIANT state,
/* [retval][out] */ __RPC__deref_out_opt ISearchJob **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EndSearch(
/* [in] */ __RPC__in_opt ISearchJob *searchJob,
/* [retval][out] */ __RPC__deref_out_opt ISearchResult **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EscapeString(
/* [in] */ __RPC__in BSTR unescaped,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE QueryHistory(
/* [in] */ LONG startIndex,
/* [in] */ LONG count,
/* [retval][out] */ __RPC__deref_out_opt IUpdateHistoryEntryCollection **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Search(
/* [in] */ __RPC__in BSTR criteria,
/* [retval][out] */ __RPC__deref_out_opt ISearchResult **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Online(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Online(
/* [in] */ VARIANT_BOOL value) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetTotalHistoryCount(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ServiceID(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ServiceID(
/* [in] */ __RPC__in BSTR value) = 0;
};
#else /* C style interface */
typedef struct IUpdateSearcherVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateSearcher * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateSearcher * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateSearcher * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateSearcher * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateSearcher * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateSearcher * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateSearcher * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanAutomaticallyUpgradeService )(
__RPC__in IUpdateSearcher * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_CanAutomaticallyUpgradeService )(
__RPC__in IUpdateSearcher * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(
__RPC__in IUpdateSearcher * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(
__RPC__in IUpdateSearcher * This,
/* [in] */ __RPC__in BSTR value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IncludePotentiallySupersededUpdates )(
__RPC__in IUpdateSearcher * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IncludePotentiallySupersededUpdates )(
__RPC__in IUpdateSearcher * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServerSelection )(
__RPC__in IUpdateSearcher * This,
/* [retval][out] */ __RPC__out ServerSelection *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ServerSelection )(
__RPC__in IUpdateSearcher * This,
/* [in] */ ServerSelection value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginSearch )(
__RPC__in IUpdateSearcher * This,
/* [in] */ __RPC__in BSTR criteria,
/* [in] */ __RPC__in_opt IUnknown *onCompleted,
/* [in] */ VARIANT state,
/* [retval][out] */ __RPC__deref_out_opt ISearchJob **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndSearch )(
__RPC__in IUpdateSearcher * This,
/* [in] */ __RPC__in_opt ISearchJob *searchJob,
/* [retval][out] */ __RPC__deref_out_opt ISearchResult **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EscapeString )(
__RPC__in IUpdateSearcher * This,
/* [in] */ __RPC__in BSTR unescaped,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *QueryHistory )(
__RPC__in IUpdateSearcher * This,
/* [in] */ LONG startIndex,
/* [in] */ LONG count,
/* [retval][out] */ __RPC__deref_out_opt IUpdateHistoryEntryCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Search )(
__RPC__in IUpdateSearcher * This,
/* [in] */ __RPC__in BSTR criteria,
/* [retval][out] */ __RPC__deref_out_opt ISearchResult **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Online )(
__RPC__in IUpdateSearcher * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Online )(
__RPC__in IUpdateSearcher * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetTotalHistoryCount )(
__RPC__in IUpdateSearcher * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceID )(
__RPC__in IUpdateSearcher * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ServiceID )(
__RPC__in IUpdateSearcher * This,
/* [in] */ __RPC__in BSTR value);
END_INTERFACE
} IUpdateSearcherVtbl;
interface IUpdateSearcher
{
CONST_VTBL struct IUpdateSearcherVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateSearcher_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateSearcher_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateSearcher_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateSearcher_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateSearcher_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateSearcher_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateSearcher_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateSearcher_get_CanAutomaticallyUpgradeService(This,retval) \
( (This)->lpVtbl -> get_CanAutomaticallyUpgradeService(This,retval) )
#define IUpdateSearcher_put_CanAutomaticallyUpgradeService(This,value) \
( (This)->lpVtbl -> put_CanAutomaticallyUpgradeService(This,value) )
#define IUpdateSearcher_get_ClientApplicationID(This,retval) \
( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )
#define IUpdateSearcher_put_ClientApplicationID(This,value) \
( (This)->lpVtbl -> put_ClientApplicationID(This,value) )
#define IUpdateSearcher_get_IncludePotentiallySupersededUpdates(This,retval) \
( (This)->lpVtbl -> get_IncludePotentiallySupersededUpdates(This,retval) )
#define IUpdateSearcher_put_IncludePotentiallySupersededUpdates(This,value) \
( (This)->lpVtbl -> put_IncludePotentiallySupersededUpdates(This,value) )
#define IUpdateSearcher_get_ServerSelection(This,retval) \
( (This)->lpVtbl -> get_ServerSelection(This,retval) )
#define IUpdateSearcher_put_ServerSelection(This,value) \
( (This)->lpVtbl -> put_ServerSelection(This,value) )
#define IUpdateSearcher_BeginSearch(This,criteria,onCompleted,state,retval) \
( (This)->lpVtbl -> BeginSearch(This,criteria,onCompleted,state,retval) )
#define IUpdateSearcher_EndSearch(This,searchJob,retval) \
( (This)->lpVtbl -> EndSearch(This,searchJob,retval) )
#define IUpdateSearcher_EscapeString(This,unescaped,retval) \
( (This)->lpVtbl -> EscapeString(This,unescaped,retval) )
#define IUpdateSearcher_QueryHistory(This,startIndex,count,retval) \
( (This)->lpVtbl -> QueryHistory(This,startIndex,count,retval) )
#define IUpdateSearcher_Search(This,criteria,retval) \
( (This)->lpVtbl -> Search(This,criteria,retval) )
#define IUpdateSearcher_get_Online(This,retval) \
( (This)->lpVtbl -> get_Online(This,retval) )
#define IUpdateSearcher_put_Online(This,value) \
( (This)->lpVtbl -> put_Online(This,value) )
#define IUpdateSearcher_GetTotalHistoryCount(This,retval) \
( (This)->lpVtbl -> GetTotalHistoryCount(This,retval) )
#define IUpdateSearcher_get_ServiceID(This,retval) \
( (This)->lpVtbl -> get_ServiceID(This,retval) )
#define IUpdateSearcher_put_ServiceID(This,value) \
( (This)->lpVtbl -> put_ServiceID(This,value) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateSearcher_INTERFACE_DEFINED__ */
#ifndef __IUpdateSearcher2_INTERFACE_DEFINED__
#define __IUpdateSearcher2_INTERFACE_DEFINED__
/* interface IUpdateSearcher2 */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateSearcher2;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("4cbdcb2d-1589-4beb-bd1c-3e582ff0add0")
IUpdateSearcher2 : public IUpdateSearcher
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IgnoreDownloadPriority(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_IgnoreDownloadPriority(
/* [in] */ VARIANT_BOOL value) = 0;
};
#else /* C style interface */
typedef struct IUpdateSearcher2Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateSearcher2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateSearcher2 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateSearcher2 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateSearcher2 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateSearcher2 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateSearcher2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateSearcher2 * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanAutomaticallyUpgradeService )(
__RPC__in IUpdateSearcher2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_CanAutomaticallyUpgradeService )(
__RPC__in IUpdateSearcher2 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(
__RPC__in IUpdateSearcher2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(
__RPC__in IUpdateSearcher2 * This,
/* [in] */ __RPC__in BSTR value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IncludePotentiallySupersededUpdates )(
__RPC__in IUpdateSearcher2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IncludePotentiallySupersededUpdates )(
__RPC__in IUpdateSearcher2 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServerSelection )(
__RPC__in IUpdateSearcher2 * This,
/* [retval][out] */ __RPC__out ServerSelection *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ServerSelection )(
__RPC__in IUpdateSearcher2 * This,
/* [in] */ ServerSelection value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginSearch )(
__RPC__in IUpdateSearcher2 * This,
/* [in] */ __RPC__in BSTR criteria,
/* [in] */ __RPC__in_opt IUnknown *onCompleted,
/* [in] */ VARIANT state,
/* [retval][out] */ __RPC__deref_out_opt ISearchJob **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndSearch )(
__RPC__in IUpdateSearcher2 * This,
/* [in] */ __RPC__in_opt ISearchJob *searchJob,
/* [retval][out] */ __RPC__deref_out_opt ISearchResult **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EscapeString )(
__RPC__in IUpdateSearcher2 * This,
/* [in] */ __RPC__in BSTR unescaped,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *QueryHistory )(
__RPC__in IUpdateSearcher2 * This,
/* [in] */ LONG startIndex,
/* [in] */ LONG count,
/* [retval][out] */ __RPC__deref_out_opt IUpdateHistoryEntryCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Search )(
__RPC__in IUpdateSearcher2 * This,
/* [in] */ __RPC__in BSTR criteria,
/* [retval][out] */ __RPC__deref_out_opt ISearchResult **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Online )(
__RPC__in IUpdateSearcher2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Online )(
__RPC__in IUpdateSearcher2 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetTotalHistoryCount )(
__RPC__in IUpdateSearcher2 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceID )(
__RPC__in IUpdateSearcher2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ServiceID )(
__RPC__in IUpdateSearcher2 * This,
/* [in] */ __RPC__in BSTR value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IgnoreDownloadPriority )(
__RPC__in IUpdateSearcher2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IgnoreDownloadPriority )(
__RPC__in IUpdateSearcher2 * This,
/* [in] */ VARIANT_BOOL value);
END_INTERFACE
} IUpdateSearcher2Vtbl;
interface IUpdateSearcher2
{
CONST_VTBL struct IUpdateSearcher2Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateSearcher2_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateSearcher2_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateSearcher2_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateSearcher2_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateSearcher2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateSearcher2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateSearcher2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateSearcher2_get_CanAutomaticallyUpgradeService(This,retval) \
( (This)->lpVtbl -> get_CanAutomaticallyUpgradeService(This,retval) )
#define IUpdateSearcher2_put_CanAutomaticallyUpgradeService(This,value) \
( (This)->lpVtbl -> put_CanAutomaticallyUpgradeService(This,value) )
#define IUpdateSearcher2_get_ClientApplicationID(This,retval) \
( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )
#define IUpdateSearcher2_put_ClientApplicationID(This,value) \
( (This)->lpVtbl -> put_ClientApplicationID(This,value) )
#define IUpdateSearcher2_get_IncludePotentiallySupersededUpdates(This,retval) \
( (This)->lpVtbl -> get_IncludePotentiallySupersededUpdates(This,retval) )
#define IUpdateSearcher2_put_IncludePotentiallySupersededUpdates(This,value) \
( (This)->lpVtbl -> put_IncludePotentiallySupersededUpdates(This,value) )
#define IUpdateSearcher2_get_ServerSelection(This,retval) \
( (This)->lpVtbl -> get_ServerSelection(This,retval) )
#define IUpdateSearcher2_put_ServerSelection(This,value) \
( (This)->lpVtbl -> put_ServerSelection(This,value) )
#define IUpdateSearcher2_BeginSearch(This,criteria,onCompleted,state,retval) \
( (This)->lpVtbl -> BeginSearch(This,criteria,onCompleted,state,retval) )
#define IUpdateSearcher2_EndSearch(This,searchJob,retval) \
( (This)->lpVtbl -> EndSearch(This,searchJob,retval) )
#define IUpdateSearcher2_EscapeString(This,unescaped,retval) \
( (This)->lpVtbl -> EscapeString(This,unescaped,retval) )
#define IUpdateSearcher2_QueryHistory(This,startIndex,count,retval) \
( (This)->lpVtbl -> QueryHistory(This,startIndex,count,retval) )
#define IUpdateSearcher2_Search(This,criteria,retval) \
( (This)->lpVtbl -> Search(This,criteria,retval) )
#define IUpdateSearcher2_get_Online(This,retval) \
( (This)->lpVtbl -> get_Online(This,retval) )
#define IUpdateSearcher2_put_Online(This,value) \
( (This)->lpVtbl -> put_Online(This,value) )
#define IUpdateSearcher2_GetTotalHistoryCount(This,retval) \
( (This)->lpVtbl -> GetTotalHistoryCount(This,retval) )
#define IUpdateSearcher2_get_ServiceID(This,retval) \
( (This)->lpVtbl -> get_ServiceID(This,retval) )
#define IUpdateSearcher2_put_ServiceID(This,value) \
( (This)->lpVtbl -> put_ServiceID(This,value) )
#define IUpdateSearcher2_get_IgnoreDownloadPriority(This,retval) \
( (This)->lpVtbl -> get_IgnoreDownloadPriority(This,retval) )
#define IUpdateSearcher2_put_IgnoreDownloadPriority(This,value) \
( (This)->lpVtbl -> put_IgnoreDownloadPriority(This,value) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateSearcher2_INTERFACE_DEFINED__ */
#ifndef __IUpdateSearcher3_INTERFACE_DEFINED__
#define __IUpdateSearcher3_INTERFACE_DEFINED__
/* interface IUpdateSearcher3 */
/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateSearcher3;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("04C6895D-EAF2-4034-97F3-311DE9BE413A")
IUpdateSearcher3 : public IUpdateSearcher2
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_SearchScope(
/* [retval][out] */ __RPC__out SearchScope *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_SearchScope(
/* [in] */ SearchScope value) = 0;
};
#else /* C style interface */
typedef struct IUpdateSearcher3Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateSearcher3 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateSearcher3 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateSearcher3 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateSearcher3 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateSearcher3 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateSearcher3 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateSearcher3 * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanAutomaticallyUpgradeService )(
__RPC__in IUpdateSearcher3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_CanAutomaticallyUpgradeService )(
__RPC__in IUpdateSearcher3 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(
__RPC__in IUpdateSearcher3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(
__RPC__in IUpdateSearcher3 * This,
/* [in] */ __RPC__in BSTR value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IncludePotentiallySupersededUpdates )(
__RPC__in IUpdateSearcher3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IncludePotentiallySupersededUpdates )(
__RPC__in IUpdateSearcher3 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServerSelection )(
__RPC__in IUpdateSearcher3 * This,
/* [retval][out] */ __RPC__out ServerSelection *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ServerSelection )(
__RPC__in IUpdateSearcher3 * This,
/* [in] */ ServerSelection value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginSearch )(
__RPC__in IUpdateSearcher3 * This,
/* [in] */ __RPC__in BSTR criteria,
/* [in] */ __RPC__in_opt IUnknown *onCompleted,
/* [in] */ VARIANT state,
/* [retval][out] */ __RPC__deref_out_opt ISearchJob **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndSearch )(
__RPC__in IUpdateSearcher3 * This,
/* [in] */ __RPC__in_opt ISearchJob *searchJob,
/* [retval][out] */ __RPC__deref_out_opt ISearchResult **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EscapeString )(
__RPC__in IUpdateSearcher3 * This,
/* [in] */ __RPC__in BSTR unescaped,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *QueryHistory )(
__RPC__in IUpdateSearcher3 * This,
/* [in] */ LONG startIndex,
/* [in] */ LONG count,
/* [retval][out] */ __RPC__deref_out_opt IUpdateHistoryEntryCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Search )(
__RPC__in IUpdateSearcher3 * This,
/* [in] */ __RPC__in BSTR criteria,
/* [retval][out] */ __RPC__deref_out_opt ISearchResult **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Online )(
__RPC__in IUpdateSearcher3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Online )(
__RPC__in IUpdateSearcher3 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetTotalHistoryCount )(
__RPC__in IUpdateSearcher3 * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceID )(
__RPC__in IUpdateSearcher3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ServiceID )(
__RPC__in IUpdateSearcher3 * This,
/* [in] */ __RPC__in BSTR value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IgnoreDownloadPriority )(
__RPC__in IUpdateSearcher3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IgnoreDownloadPriority )(
__RPC__in IUpdateSearcher3 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SearchScope )(
__RPC__in IUpdateSearcher3 * This,
/* [retval][out] */ __RPC__out SearchScope *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_SearchScope )(
__RPC__in IUpdateSearcher3 * This,
/* [in] */ SearchScope value);
END_INTERFACE
} IUpdateSearcher3Vtbl;
interface IUpdateSearcher3
{
CONST_VTBL struct IUpdateSearcher3Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateSearcher3_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateSearcher3_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateSearcher3_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateSearcher3_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateSearcher3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateSearcher3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateSearcher3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateSearcher3_get_CanAutomaticallyUpgradeService(This,retval) \
( (This)->lpVtbl -> get_CanAutomaticallyUpgradeService(This,retval) )
#define IUpdateSearcher3_put_CanAutomaticallyUpgradeService(This,value) \
( (This)->lpVtbl -> put_CanAutomaticallyUpgradeService(This,value) )
#define IUpdateSearcher3_get_ClientApplicationID(This,retval) \
( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )
#define IUpdateSearcher3_put_ClientApplicationID(This,value) \
( (This)->lpVtbl -> put_ClientApplicationID(This,value) )
#define IUpdateSearcher3_get_IncludePotentiallySupersededUpdates(This,retval) \
( (This)->lpVtbl -> get_IncludePotentiallySupersededUpdates(This,retval) )
#define IUpdateSearcher3_put_IncludePotentiallySupersededUpdates(This,value) \
( (This)->lpVtbl -> put_IncludePotentiallySupersededUpdates(This,value) )
#define IUpdateSearcher3_get_ServerSelection(This,retval) \
( (This)->lpVtbl -> get_ServerSelection(This,retval) )
#define IUpdateSearcher3_put_ServerSelection(This,value) \
( (This)->lpVtbl -> put_ServerSelection(This,value) )
#define IUpdateSearcher3_BeginSearch(This,criteria,onCompleted,state,retval) \
( (This)->lpVtbl -> BeginSearch(This,criteria,onCompleted,state,retval) )
#define IUpdateSearcher3_EndSearch(This,searchJob,retval) \
( (This)->lpVtbl -> EndSearch(This,searchJob,retval) )
#define IUpdateSearcher3_EscapeString(This,unescaped,retval) \
( (This)->lpVtbl -> EscapeString(This,unescaped,retval) )
#define IUpdateSearcher3_QueryHistory(This,startIndex,count,retval) \
( (This)->lpVtbl -> QueryHistory(This,startIndex,count,retval) )
#define IUpdateSearcher3_Search(This,criteria,retval) \
( (This)->lpVtbl -> Search(This,criteria,retval) )
#define IUpdateSearcher3_get_Online(This,retval) \
( (This)->lpVtbl -> get_Online(This,retval) )
#define IUpdateSearcher3_put_Online(This,value) \
( (This)->lpVtbl -> put_Online(This,value) )
#define IUpdateSearcher3_GetTotalHistoryCount(This,retval) \
( (This)->lpVtbl -> GetTotalHistoryCount(This,retval) )
#define IUpdateSearcher3_get_ServiceID(This,retval) \
( (This)->lpVtbl -> get_ServiceID(This,retval) )
#define IUpdateSearcher3_put_ServiceID(This,value) \
( (This)->lpVtbl -> put_ServiceID(This,value) )
#define IUpdateSearcher3_get_IgnoreDownloadPriority(This,retval) \
( (This)->lpVtbl -> get_IgnoreDownloadPriority(This,retval) )
#define IUpdateSearcher3_put_IgnoreDownloadPriority(This,value) \
( (This)->lpVtbl -> put_IgnoreDownloadPriority(This,value) )
#define IUpdateSearcher3_get_SearchScope(This,retval) \
( (This)->lpVtbl -> get_SearchScope(This,retval) )
#define IUpdateSearcher3_put_SearchScope(This,value) \
( (This)->lpVtbl -> put_SearchScope(This,value) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateSearcher3_INTERFACE_DEFINED__ */
#ifndef __IUpdateDownloadResult_INTERFACE_DEFINED__
#define __IUpdateDownloadResult_INTERFACE_DEFINED__
/* interface IUpdateDownloadResult */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateDownloadResult;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("bf99af76-b575-42ad-8aa4-33cbb5477af1")
IUpdateDownloadResult : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_HResult(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ResultCode(
/* [retval][out] */ __RPC__out OperationResultCode *retval) = 0;
};
#else /* C style interface */
typedef struct IUpdateDownloadResultVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateDownloadResult * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateDownloadResult * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateDownloadResult * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateDownloadResult * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateDownloadResult * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateDownloadResult * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateDownloadResult * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HResult )(
__RPC__in IUpdateDownloadResult * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ResultCode )(
__RPC__in IUpdateDownloadResult * This,
/* [retval][out] */ __RPC__out OperationResultCode *retval);
END_INTERFACE
} IUpdateDownloadResultVtbl;
interface IUpdateDownloadResult
{
CONST_VTBL struct IUpdateDownloadResultVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateDownloadResult_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateDownloadResult_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateDownloadResult_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateDownloadResult_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateDownloadResult_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateDownloadResult_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateDownloadResult_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateDownloadResult_get_HResult(This,retval) \
( (This)->lpVtbl -> get_HResult(This,retval) )
#define IUpdateDownloadResult_get_ResultCode(This,retval) \
( (This)->lpVtbl -> get_ResultCode(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateDownloadResult_INTERFACE_DEFINED__ */
#ifndef __IDownloadResult_INTERFACE_DEFINED__
#define __IDownloadResult_INTERFACE_DEFINED__
/* interface IDownloadResult */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IDownloadResult;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("daa4fdd0-4727-4dbe-a1e7-745dca317144")
IDownloadResult : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_HResult(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ResultCode(
/* [retval][out] */ __RPC__out OperationResultCode *retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetUpdateResult(
/* [in] */ LONG updateIndex,
/* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadResult **retval) = 0;
};
#else /* C style interface */
typedef struct IDownloadResultVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IDownloadResult * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IDownloadResult * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IDownloadResult * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IDownloadResult * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IDownloadResult * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IDownloadResult * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IDownloadResult * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HResult )(
__RPC__in IDownloadResult * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ResultCode )(
__RPC__in IDownloadResult * This,
/* [retval][out] */ __RPC__out OperationResultCode *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetUpdateResult )(
__RPC__in IDownloadResult * This,
/* [in] */ LONG updateIndex,
/* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadResult **retval);
END_INTERFACE
} IDownloadResultVtbl;
interface IDownloadResult
{
CONST_VTBL struct IDownloadResultVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IDownloadResult_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IDownloadResult_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IDownloadResult_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IDownloadResult_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IDownloadResult_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IDownloadResult_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IDownloadResult_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IDownloadResult_get_HResult(This,retval) \
( (This)->lpVtbl -> get_HResult(This,retval) )
#define IDownloadResult_get_ResultCode(This,retval) \
( (This)->lpVtbl -> get_ResultCode(This,retval) )
#define IDownloadResult_GetUpdateResult(This,updateIndex,retval) \
( (This)->lpVtbl -> GetUpdateResult(This,updateIndex,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IDownloadResult_INTERFACE_DEFINED__ */
#ifndef __IDownloadProgress_INTERFACE_DEFINED__
#define __IDownloadProgress_INTERFACE_DEFINED__
/* interface IDownloadProgress */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IDownloadProgress;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("d31a5bac-f719-4178-9dbb-5e2cb47fd18a")
IDownloadProgress : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CurrentUpdateBytesDownloaded(
/* [retval][out] */ __RPC__out DECIMAL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CurrentUpdateBytesToDownload(
/* [retval][out] */ __RPC__out DECIMAL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CurrentUpdateIndex(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_PercentComplete(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_TotalBytesDownloaded(
/* [retval][out] */ __RPC__out DECIMAL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_TotalBytesToDownload(
/* [retval][out] */ __RPC__out DECIMAL *retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetUpdateResult(
/* [in] */ LONG updateIndex,
/* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadResult **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CurrentUpdateDownloadPhase(
/* [retval][out] */ __RPC__out DownloadPhase *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CurrentUpdatePercentComplete(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
};
#else /* C style interface */
typedef struct IDownloadProgressVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IDownloadProgress * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IDownloadProgress * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IDownloadProgress * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IDownloadProgress * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IDownloadProgress * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IDownloadProgress * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IDownloadProgress * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CurrentUpdateBytesDownloaded )(
__RPC__in IDownloadProgress * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CurrentUpdateBytesToDownload )(
__RPC__in IDownloadProgress * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CurrentUpdateIndex )(
__RPC__in IDownloadProgress * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_PercentComplete )(
__RPC__in IDownloadProgress * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_TotalBytesDownloaded )(
__RPC__in IDownloadProgress * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_TotalBytesToDownload )(
__RPC__in IDownloadProgress * This,
/* [retval][out] */ __RPC__out DECIMAL *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetUpdateResult )(
__RPC__in IDownloadProgress * This,
/* [in] */ LONG updateIndex,
/* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadResult **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CurrentUpdateDownloadPhase )(
__RPC__in IDownloadProgress * This,
/* [retval][out] */ __RPC__out DownloadPhase *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CurrentUpdatePercentComplete )(
__RPC__in IDownloadProgress * This,
/* [retval][out] */ __RPC__out LONG *retval);
END_INTERFACE
} IDownloadProgressVtbl;
interface IDownloadProgress
{
CONST_VTBL struct IDownloadProgressVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IDownloadProgress_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IDownloadProgress_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IDownloadProgress_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IDownloadProgress_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IDownloadProgress_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IDownloadProgress_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IDownloadProgress_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IDownloadProgress_get_CurrentUpdateBytesDownloaded(This,retval) \
( (This)->lpVtbl -> get_CurrentUpdateBytesDownloaded(This,retval) )
#define IDownloadProgress_get_CurrentUpdateBytesToDownload(This,retval) \
( (This)->lpVtbl -> get_CurrentUpdateBytesToDownload(This,retval) )
#define IDownloadProgress_get_CurrentUpdateIndex(This,retval) \
( (This)->lpVtbl -> get_CurrentUpdateIndex(This,retval) )
#define IDownloadProgress_get_PercentComplete(This,retval) \
( (This)->lpVtbl -> get_PercentComplete(This,retval) )
#define IDownloadProgress_get_TotalBytesDownloaded(This,retval) \
( (This)->lpVtbl -> get_TotalBytesDownloaded(This,retval) )
#define IDownloadProgress_get_TotalBytesToDownload(This,retval) \
( (This)->lpVtbl -> get_TotalBytesToDownload(This,retval) )
#define IDownloadProgress_GetUpdateResult(This,updateIndex,retval) \
( (This)->lpVtbl -> GetUpdateResult(This,updateIndex,retval) )
#define IDownloadProgress_get_CurrentUpdateDownloadPhase(This,retval) \
( (This)->lpVtbl -> get_CurrentUpdateDownloadPhase(This,retval) )
#define IDownloadProgress_get_CurrentUpdatePercentComplete(This,retval) \
( (This)->lpVtbl -> get_CurrentUpdatePercentComplete(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IDownloadProgress_INTERFACE_DEFINED__ */
#ifndef __IDownloadJob_INTERFACE_DEFINED__
#define __IDownloadJob_INTERFACE_DEFINED__
/* interface IDownloadJob */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IDownloadJob;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c574de85-7358-43f6-aae8-8697e62d8ba7")
IDownloadJob : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AsyncState(
/* [retval][out] */ __RPC__out VARIANT *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsCompleted(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Updates(
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CleanUp( void) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetProgress(
/* [retval][out] */ __RPC__deref_out_opt IDownloadProgress **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RequestAbort( void) = 0;
};
#else /* C style interface */
typedef struct IDownloadJobVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IDownloadJob * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IDownloadJob * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IDownloadJob * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IDownloadJob * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IDownloadJob * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IDownloadJob * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IDownloadJob * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AsyncState )(
__RPC__in IDownloadJob * This,
/* [retval][out] */ __RPC__out VARIANT *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsCompleted )(
__RPC__in IDownloadJob * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Updates )(
__RPC__in IDownloadJob * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CleanUp )(
__RPC__in IDownloadJob * This);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetProgress )(
__RPC__in IDownloadJob * This,
/* [retval][out] */ __RPC__deref_out_opt IDownloadProgress **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RequestAbort )(
__RPC__in IDownloadJob * This);
END_INTERFACE
} IDownloadJobVtbl;
interface IDownloadJob
{
CONST_VTBL struct IDownloadJobVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IDownloadJob_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IDownloadJob_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IDownloadJob_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IDownloadJob_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IDownloadJob_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IDownloadJob_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IDownloadJob_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IDownloadJob_get_AsyncState(This,retval) \
( (This)->lpVtbl -> get_AsyncState(This,retval) )
#define IDownloadJob_get_IsCompleted(This,retval) \
( (This)->lpVtbl -> get_IsCompleted(This,retval) )
#define IDownloadJob_get_Updates(This,retval) \
( (This)->lpVtbl -> get_Updates(This,retval) )
#define IDownloadJob_CleanUp(This) \
( (This)->lpVtbl -> CleanUp(This) )
#define IDownloadJob_GetProgress(This,retval) \
( (This)->lpVtbl -> GetProgress(This,retval) )
#define IDownloadJob_RequestAbort(This) \
( (This)->lpVtbl -> RequestAbort(This) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IDownloadJob_INTERFACE_DEFINED__ */
#ifndef __IDownloadCompletedCallbackArgs_INTERFACE_DEFINED__
#define __IDownloadCompletedCallbackArgs_INTERFACE_DEFINED__
/* interface IDownloadCompletedCallbackArgs */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IDownloadCompletedCallbackArgs;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("fa565b23-498c-47a0-979d-e7d5b1813360")
IDownloadCompletedCallbackArgs : public IDispatch
{
public:
};
#else /* C style interface */
typedef struct IDownloadCompletedCallbackArgsVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IDownloadCompletedCallbackArgs * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IDownloadCompletedCallbackArgs * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IDownloadCompletedCallbackArgs * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IDownloadCompletedCallbackArgs * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IDownloadCompletedCallbackArgs * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IDownloadCompletedCallbackArgs * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IDownloadCompletedCallbackArgs * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
END_INTERFACE
} IDownloadCompletedCallbackArgsVtbl;
interface IDownloadCompletedCallbackArgs
{
CONST_VTBL struct IDownloadCompletedCallbackArgsVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IDownloadCompletedCallbackArgs_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IDownloadCompletedCallbackArgs_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IDownloadCompletedCallbackArgs_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IDownloadCompletedCallbackArgs_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IDownloadCompletedCallbackArgs_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IDownloadCompletedCallbackArgs_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IDownloadCompletedCallbackArgs_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IDownloadCompletedCallbackArgs_INTERFACE_DEFINED__ */
#ifndef __IDownloadCompletedCallback_INTERFACE_DEFINED__
#define __IDownloadCompletedCallback_INTERFACE_DEFINED__
/* interface IDownloadCompletedCallback */
/* [unique][uuid][nonextensible][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IDownloadCompletedCallback;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("77254866-9f5b-4c8e-b9e2-c77a8530d64b")
IDownloadCompletedCallback : public IUnknown
{
public:
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Invoke(
/* [in] */ __RPC__in_opt IDownloadJob *downloadJob,
/* [in] */ __RPC__in_opt IDownloadCompletedCallbackArgs *callbackArgs) = 0;
};
#else /* C style interface */
typedef struct IDownloadCompletedCallbackVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IDownloadCompletedCallback * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IDownloadCompletedCallback * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IDownloadCompletedCallback * This);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
__RPC__in IDownloadCompletedCallback * This,
/* [in] */ __RPC__in_opt IDownloadJob *downloadJob,
/* [in] */ __RPC__in_opt IDownloadCompletedCallbackArgs *callbackArgs);
END_INTERFACE
} IDownloadCompletedCallbackVtbl;
interface IDownloadCompletedCallback
{
CONST_VTBL struct IDownloadCompletedCallbackVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IDownloadCompletedCallback_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IDownloadCompletedCallback_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IDownloadCompletedCallback_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IDownloadCompletedCallback_Invoke(This,downloadJob,callbackArgs) \
( (This)->lpVtbl -> Invoke(This,downloadJob,callbackArgs) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IDownloadCompletedCallback_INTERFACE_DEFINED__ */
#ifndef __IDownloadProgressChangedCallbackArgs_INTERFACE_DEFINED__
#define __IDownloadProgressChangedCallbackArgs_INTERFACE_DEFINED__
/* interface IDownloadProgressChangedCallbackArgs */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IDownloadProgressChangedCallbackArgs;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("324ff2c6-4981-4b04-9412-57481745ab24")
IDownloadProgressChangedCallbackArgs : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Progress(
/* [retval][out] */ __RPC__deref_out_opt IDownloadProgress **retval) = 0;
};
#else /* C style interface */
typedef struct IDownloadProgressChangedCallbackArgsVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IDownloadProgressChangedCallbackArgs * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IDownloadProgressChangedCallbackArgs * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IDownloadProgressChangedCallbackArgs * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IDownloadProgressChangedCallbackArgs * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IDownloadProgressChangedCallbackArgs * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IDownloadProgressChangedCallbackArgs * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IDownloadProgressChangedCallbackArgs * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Progress )(
__RPC__in IDownloadProgressChangedCallbackArgs * This,
/* [retval][out] */ __RPC__deref_out_opt IDownloadProgress **retval);
END_INTERFACE
} IDownloadProgressChangedCallbackArgsVtbl;
interface IDownloadProgressChangedCallbackArgs
{
CONST_VTBL struct IDownloadProgressChangedCallbackArgsVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IDownloadProgressChangedCallbackArgs_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IDownloadProgressChangedCallbackArgs_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IDownloadProgressChangedCallbackArgs_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IDownloadProgressChangedCallbackArgs_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IDownloadProgressChangedCallbackArgs_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IDownloadProgressChangedCallbackArgs_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IDownloadProgressChangedCallbackArgs_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IDownloadProgressChangedCallbackArgs_get_Progress(This,retval) \
( (This)->lpVtbl -> get_Progress(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IDownloadProgressChangedCallbackArgs_INTERFACE_DEFINED__ */
#ifndef __IDownloadProgressChangedCallback_INTERFACE_DEFINED__
#define __IDownloadProgressChangedCallback_INTERFACE_DEFINED__
/* interface IDownloadProgressChangedCallback */
/* [unique][uuid][nonextensible][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IDownloadProgressChangedCallback;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("8c3f1cdd-6173-4591-aebd-a56a53ca77c1")
IDownloadProgressChangedCallback : public IUnknown
{
public:
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Invoke(
/* [in] */ __RPC__in_opt IDownloadJob *downloadJob,
/* [in] */ __RPC__in_opt IDownloadProgressChangedCallbackArgs *callbackArgs) = 0;
};
#else /* C style interface */
typedef struct IDownloadProgressChangedCallbackVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IDownloadProgressChangedCallback * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IDownloadProgressChangedCallback * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IDownloadProgressChangedCallback * This);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
__RPC__in IDownloadProgressChangedCallback * This,
/* [in] */ __RPC__in_opt IDownloadJob *downloadJob,
/* [in] */ __RPC__in_opt IDownloadProgressChangedCallbackArgs *callbackArgs);
END_INTERFACE
} IDownloadProgressChangedCallbackVtbl;
interface IDownloadProgressChangedCallback
{
CONST_VTBL struct IDownloadProgressChangedCallbackVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IDownloadProgressChangedCallback_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IDownloadProgressChangedCallback_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IDownloadProgressChangedCallback_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IDownloadProgressChangedCallback_Invoke(This,downloadJob,callbackArgs) \
( (This)->lpVtbl -> Invoke(This,downloadJob,callbackArgs) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IDownloadProgressChangedCallback_INTERFACE_DEFINED__ */
#ifndef __IUpdateDownloader_INTERFACE_DEFINED__
#define __IUpdateDownloader_INTERFACE_DEFINED__
/* interface IUpdateDownloader */
/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateDownloader;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("68f1c6f9-7ecc-4666-a464-247fe12496c3")
IUpdateDownloader : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ClientApplicationID(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ClientApplicationID(
/* [in] */ __RPC__in BSTR value) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsForced(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_IsForced(
/* [in] */ VARIANT_BOOL value) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Priority(
/* [retval][out] */ __RPC__out DownloadPriority *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Priority(
/* [in] */ DownloadPriority value) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Updates(
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Updates(
/* [in] */ __RPC__in_opt IUpdateCollection *value) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE BeginDownload(
/* [in] */ __RPC__in_opt IUnknown *onProgressChanged,
/* [in] */ __RPC__in_opt IUnknown *onCompleted,
/* [in] */ VARIANT state,
/* [retval][out] */ __RPC__deref_out_opt IDownloadJob **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Download(
/* [retval][out] */ __RPC__deref_out_opt IDownloadResult **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EndDownload(
/* [in] */ __RPC__in_opt IDownloadJob *value,
/* [retval][out] */ __RPC__deref_out_opt IDownloadResult **retval) = 0;
};
#else /* C style interface */
typedef struct IUpdateDownloaderVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateDownloader * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateDownloader * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateDownloader * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateDownloader * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateDownloader * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateDownloader * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateDownloader * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(
__RPC__in IUpdateDownloader * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(
__RPC__in IUpdateDownloader * This,
/* [in] */ __RPC__in BSTR value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsForced )(
__RPC__in IUpdateDownloader * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsForced )(
__RPC__in IUpdateDownloader * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Priority )(
__RPC__in IUpdateDownloader * This,
/* [retval][out] */ __RPC__out DownloadPriority *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Priority )(
__RPC__in IUpdateDownloader * This,
/* [in] */ DownloadPriority value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Updates )(
__RPC__in IUpdateDownloader * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Updates )(
__RPC__in IUpdateDownloader * This,
/* [in] */ __RPC__in_opt IUpdateCollection *value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginDownload )(
__RPC__in IUpdateDownloader * This,
/* [in] */ __RPC__in_opt IUnknown *onProgressChanged,
/* [in] */ __RPC__in_opt IUnknown *onCompleted,
/* [in] */ VARIANT state,
/* [retval][out] */ __RPC__deref_out_opt IDownloadJob **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Download )(
__RPC__in IUpdateDownloader * This,
/* [retval][out] */ __RPC__deref_out_opt IDownloadResult **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndDownload )(
__RPC__in IUpdateDownloader * This,
/* [in] */ __RPC__in_opt IDownloadJob *value,
/* [retval][out] */ __RPC__deref_out_opt IDownloadResult **retval);
END_INTERFACE
} IUpdateDownloaderVtbl;
interface IUpdateDownloader
{
CONST_VTBL struct IUpdateDownloaderVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateDownloader_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateDownloader_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateDownloader_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateDownloader_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateDownloader_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateDownloader_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateDownloader_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateDownloader_get_ClientApplicationID(This,retval) \
( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )
#define IUpdateDownloader_put_ClientApplicationID(This,value) \
( (This)->lpVtbl -> put_ClientApplicationID(This,value) )
#define IUpdateDownloader_get_IsForced(This,retval) \
( (This)->lpVtbl -> get_IsForced(This,retval) )
#define IUpdateDownloader_put_IsForced(This,value) \
( (This)->lpVtbl -> put_IsForced(This,value) )
#define IUpdateDownloader_get_Priority(This,retval) \
( (This)->lpVtbl -> get_Priority(This,retval) )
#define IUpdateDownloader_put_Priority(This,value) \
( (This)->lpVtbl -> put_Priority(This,value) )
#define IUpdateDownloader_get_Updates(This,retval) \
( (This)->lpVtbl -> get_Updates(This,retval) )
#define IUpdateDownloader_put_Updates(This,value) \
( (This)->lpVtbl -> put_Updates(This,value) )
#define IUpdateDownloader_BeginDownload(This,onProgressChanged,onCompleted,state,retval) \
( (This)->lpVtbl -> BeginDownload(This,onProgressChanged,onCompleted,state,retval) )
#define IUpdateDownloader_Download(This,retval) \
( (This)->lpVtbl -> Download(This,retval) )
#define IUpdateDownloader_EndDownload(This,value,retval) \
( (This)->lpVtbl -> EndDownload(This,value,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateDownloader_INTERFACE_DEFINED__ */
#ifndef __IUpdateInstallationResult_INTERFACE_DEFINED__
#define __IUpdateInstallationResult_INTERFACE_DEFINED__
/* interface IUpdateInstallationResult */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateInstallationResult;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("d940f0f8-3cbb-4fd0-993f-471e7f2328ad")
IUpdateInstallationResult : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_HResult(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RebootRequired(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ResultCode(
/* [retval][out] */ __RPC__out OperationResultCode *retval) = 0;
};
#else /* C style interface */
typedef struct IUpdateInstallationResultVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateInstallationResult * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateInstallationResult * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateInstallationResult * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateInstallationResult * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateInstallationResult * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateInstallationResult * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateInstallationResult * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HResult )(
__RPC__in IUpdateInstallationResult * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(
__RPC__in IUpdateInstallationResult * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ResultCode )(
__RPC__in IUpdateInstallationResult * This,
/* [retval][out] */ __RPC__out OperationResultCode *retval);
END_INTERFACE
} IUpdateInstallationResultVtbl;
interface IUpdateInstallationResult
{
CONST_VTBL struct IUpdateInstallationResultVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateInstallationResult_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateInstallationResult_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateInstallationResult_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateInstallationResult_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateInstallationResult_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateInstallationResult_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateInstallationResult_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateInstallationResult_get_HResult(This,retval) \
( (This)->lpVtbl -> get_HResult(This,retval) )
#define IUpdateInstallationResult_get_RebootRequired(This,retval) \
( (This)->lpVtbl -> get_RebootRequired(This,retval) )
#define IUpdateInstallationResult_get_ResultCode(This,retval) \
( (This)->lpVtbl -> get_ResultCode(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateInstallationResult_INTERFACE_DEFINED__ */
#ifndef __IInstallationResult_INTERFACE_DEFINED__
#define __IInstallationResult_INTERFACE_DEFINED__
/* interface IInstallationResult */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IInstallationResult;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a43c56d6-7451-48d4-af96-b6cd2d0d9b7a")
IInstallationResult : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_HResult(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RebootRequired(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ResultCode(
/* [retval][out] */ __RPC__out OperationResultCode *retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetUpdateResult(
/* [in] */ LONG updateIndex,
/* [retval][out] */ __RPC__deref_out_opt IUpdateInstallationResult **retval) = 0;
};
#else /* C style interface */
typedef struct IInstallationResultVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IInstallationResult * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IInstallationResult * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IInstallationResult * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IInstallationResult * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IInstallationResult * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IInstallationResult * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IInstallationResult * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HResult )(
__RPC__in IInstallationResult * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(
__RPC__in IInstallationResult * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ResultCode )(
__RPC__in IInstallationResult * This,
/* [retval][out] */ __RPC__out OperationResultCode *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetUpdateResult )(
__RPC__in IInstallationResult * This,
/* [in] */ LONG updateIndex,
/* [retval][out] */ __RPC__deref_out_opt IUpdateInstallationResult **retval);
END_INTERFACE
} IInstallationResultVtbl;
interface IInstallationResult
{
CONST_VTBL struct IInstallationResultVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IInstallationResult_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IInstallationResult_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IInstallationResult_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IInstallationResult_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IInstallationResult_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IInstallationResult_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IInstallationResult_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IInstallationResult_get_HResult(This,retval) \
( (This)->lpVtbl -> get_HResult(This,retval) )
#define IInstallationResult_get_RebootRequired(This,retval) \
( (This)->lpVtbl -> get_RebootRequired(This,retval) )
#define IInstallationResult_get_ResultCode(This,retval) \
( (This)->lpVtbl -> get_ResultCode(This,retval) )
#define IInstallationResult_GetUpdateResult(This,updateIndex,retval) \
( (This)->lpVtbl -> GetUpdateResult(This,updateIndex,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IInstallationResult_INTERFACE_DEFINED__ */
#ifndef __IInstallationProgress_INTERFACE_DEFINED__
#define __IInstallationProgress_INTERFACE_DEFINED__
/* interface IInstallationProgress */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IInstallationProgress;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("345c8244-43a3-4e32-a368-65f073b76f36")
IInstallationProgress : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CurrentUpdateIndex(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CurrentUpdatePercentComplete(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_PercentComplete(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetUpdateResult(
/* [in] */ LONG updateIndex,
/* [retval][out] */ __RPC__deref_out_opt IUpdateInstallationResult **retval) = 0;
};
#else /* C style interface */
typedef struct IInstallationProgressVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IInstallationProgress * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IInstallationProgress * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IInstallationProgress * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IInstallationProgress * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IInstallationProgress * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IInstallationProgress * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IInstallationProgress * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CurrentUpdateIndex )(
__RPC__in IInstallationProgress * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CurrentUpdatePercentComplete )(
__RPC__in IInstallationProgress * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_PercentComplete )(
__RPC__in IInstallationProgress * This,
/* [retval][out] */ __RPC__out LONG *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetUpdateResult )(
__RPC__in IInstallationProgress * This,
/* [in] */ LONG updateIndex,
/* [retval][out] */ __RPC__deref_out_opt IUpdateInstallationResult **retval);
END_INTERFACE
} IInstallationProgressVtbl;
interface IInstallationProgress
{
CONST_VTBL struct IInstallationProgressVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IInstallationProgress_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IInstallationProgress_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IInstallationProgress_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IInstallationProgress_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IInstallationProgress_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IInstallationProgress_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IInstallationProgress_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IInstallationProgress_get_CurrentUpdateIndex(This,retval) \
( (This)->lpVtbl -> get_CurrentUpdateIndex(This,retval) )
#define IInstallationProgress_get_CurrentUpdatePercentComplete(This,retval) \
( (This)->lpVtbl -> get_CurrentUpdatePercentComplete(This,retval) )
#define IInstallationProgress_get_PercentComplete(This,retval) \
( (This)->lpVtbl -> get_PercentComplete(This,retval) )
#define IInstallationProgress_GetUpdateResult(This,updateIndex,retval) \
( (This)->lpVtbl -> GetUpdateResult(This,updateIndex,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IInstallationProgress_INTERFACE_DEFINED__ */
#ifndef __IInstallationJob_INTERFACE_DEFINED__
#define __IInstallationJob_INTERFACE_DEFINED__
/* interface IInstallationJob */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IInstallationJob;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("5c209f0b-bad5-432a-9556-4699bed2638a")
IInstallationJob : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AsyncState(
/* [retval][out] */ __RPC__out VARIANT *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsCompleted(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Updates(
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CleanUp( void) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetProgress(
/* [retval][out] */ __RPC__deref_out_opt IInstallationProgress **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RequestAbort( void) = 0;
};
#else /* C style interface */
typedef struct IInstallationJobVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IInstallationJob * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IInstallationJob * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IInstallationJob * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IInstallationJob * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IInstallationJob * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IInstallationJob * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IInstallationJob * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AsyncState )(
__RPC__in IInstallationJob * This,
/* [retval][out] */ __RPC__out VARIANT *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsCompleted )(
__RPC__in IInstallationJob * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Updates )(
__RPC__in IInstallationJob * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CleanUp )(
__RPC__in IInstallationJob * This);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetProgress )(
__RPC__in IInstallationJob * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationProgress **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RequestAbort )(
__RPC__in IInstallationJob * This);
END_INTERFACE
} IInstallationJobVtbl;
interface IInstallationJob
{
CONST_VTBL struct IInstallationJobVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IInstallationJob_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IInstallationJob_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IInstallationJob_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IInstallationJob_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IInstallationJob_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IInstallationJob_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IInstallationJob_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IInstallationJob_get_AsyncState(This,retval) \
( (This)->lpVtbl -> get_AsyncState(This,retval) )
#define IInstallationJob_get_IsCompleted(This,retval) \
( (This)->lpVtbl -> get_IsCompleted(This,retval) )
#define IInstallationJob_get_Updates(This,retval) \
( (This)->lpVtbl -> get_Updates(This,retval) )
#define IInstallationJob_CleanUp(This) \
( (This)->lpVtbl -> CleanUp(This) )
#define IInstallationJob_GetProgress(This,retval) \
( (This)->lpVtbl -> GetProgress(This,retval) )
#define IInstallationJob_RequestAbort(This) \
( (This)->lpVtbl -> RequestAbort(This) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IInstallationJob_INTERFACE_DEFINED__ */
#ifndef __IInstallationCompletedCallbackArgs_INTERFACE_DEFINED__
#define __IInstallationCompletedCallbackArgs_INTERFACE_DEFINED__
/* interface IInstallationCompletedCallbackArgs */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IInstallationCompletedCallbackArgs;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("250e2106-8efb-4705-9653-ef13c581b6a1")
IInstallationCompletedCallbackArgs : public IDispatch
{
public:
};
#else /* C style interface */
typedef struct IInstallationCompletedCallbackArgsVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IInstallationCompletedCallbackArgs * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IInstallationCompletedCallbackArgs * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IInstallationCompletedCallbackArgs * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IInstallationCompletedCallbackArgs * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IInstallationCompletedCallbackArgs * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IInstallationCompletedCallbackArgs * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IInstallationCompletedCallbackArgs * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
END_INTERFACE
} IInstallationCompletedCallbackArgsVtbl;
interface IInstallationCompletedCallbackArgs
{
CONST_VTBL struct IInstallationCompletedCallbackArgsVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IInstallationCompletedCallbackArgs_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IInstallationCompletedCallbackArgs_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IInstallationCompletedCallbackArgs_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IInstallationCompletedCallbackArgs_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IInstallationCompletedCallbackArgs_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IInstallationCompletedCallbackArgs_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IInstallationCompletedCallbackArgs_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IInstallationCompletedCallbackArgs_INTERFACE_DEFINED__ */
#ifndef __IInstallationCompletedCallback_INTERFACE_DEFINED__
#define __IInstallationCompletedCallback_INTERFACE_DEFINED__
/* interface IInstallationCompletedCallback */
/* [unique][uuid][nonextensible][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IInstallationCompletedCallback;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("45f4f6f3-d602-4f98-9a8a-3efa152ad2d3")
IInstallationCompletedCallback : public IUnknown
{
public:
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Invoke(
/* [in] */ __RPC__in_opt IInstallationJob *installationJob,
/* [in] */ __RPC__in_opt IInstallationCompletedCallbackArgs *callbackArgs) = 0;
};
#else /* C style interface */
typedef struct IInstallationCompletedCallbackVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IInstallationCompletedCallback * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IInstallationCompletedCallback * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IInstallationCompletedCallback * This);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
__RPC__in IInstallationCompletedCallback * This,
/* [in] */ __RPC__in_opt IInstallationJob *installationJob,
/* [in] */ __RPC__in_opt IInstallationCompletedCallbackArgs *callbackArgs);
END_INTERFACE
} IInstallationCompletedCallbackVtbl;
interface IInstallationCompletedCallback
{
CONST_VTBL struct IInstallationCompletedCallbackVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IInstallationCompletedCallback_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IInstallationCompletedCallback_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IInstallationCompletedCallback_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IInstallationCompletedCallback_Invoke(This,installationJob,callbackArgs) \
( (This)->lpVtbl -> Invoke(This,installationJob,callbackArgs) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IInstallationCompletedCallback_INTERFACE_DEFINED__ */
#ifndef __IInstallationProgressChangedCallbackArgs_INTERFACE_DEFINED__
#define __IInstallationProgressChangedCallbackArgs_INTERFACE_DEFINED__
/* interface IInstallationProgressChangedCallbackArgs */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IInstallationProgressChangedCallbackArgs;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("e4f14e1e-689d-4218-a0b9-bc189c484a01")
IInstallationProgressChangedCallbackArgs : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Progress(
/* [retval][out] */ __RPC__deref_out_opt IInstallationProgress **retval) = 0;
};
#else /* C style interface */
typedef struct IInstallationProgressChangedCallbackArgsVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IInstallationProgressChangedCallbackArgs * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IInstallationProgressChangedCallbackArgs * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IInstallationProgressChangedCallbackArgs * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IInstallationProgressChangedCallbackArgs * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IInstallationProgressChangedCallbackArgs * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IInstallationProgressChangedCallbackArgs * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IInstallationProgressChangedCallbackArgs * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Progress )(
__RPC__in IInstallationProgressChangedCallbackArgs * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationProgress **retval);
END_INTERFACE
} IInstallationProgressChangedCallbackArgsVtbl;
interface IInstallationProgressChangedCallbackArgs
{
CONST_VTBL struct IInstallationProgressChangedCallbackArgsVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IInstallationProgressChangedCallbackArgs_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IInstallationProgressChangedCallbackArgs_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IInstallationProgressChangedCallbackArgs_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IInstallationProgressChangedCallbackArgs_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IInstallationProgressChangedCallbackArgs_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IInstallationProgressChangedCallbackArgs_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IInstallationProgressChangedCallbackArgs_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IInstallationProgressChangedCallbackArgs_get_Progress(This,retval) \
( (This)->lpVtbl -> get_Progress(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IInstallationProgressChangedCallbackArgs_INTERFACE_DEFINED__ */
#ifndef __IInstallationProgressChangedCallback_INTERFACE_DEFINED__
#define __IInstallationProgressChangedCallback_INTERFACE_DEFINED__
/* interface IInstallationProgressChangedCallback */
/* [unique][uuid][nonextensible][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IInstallationProgressChangedCallback;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("e01402d5-f8da-43ba-a012-38894bd048f1")
IInstallationProgressChangedCallback : public IUnknown
{
public:
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Invoke(
/* [in] */ __RPC__in_opt IInstallationJob *installationJob,
/* [in] */ __RPC__in_opt IInstallationProgressChangedCallbackArgs *callbackArgs) = 0;
};
#else /* C style interface */
typedef struct IInstallationProgressChangedCallbackVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IInstallationProgressChangedCallback * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IInstallationProgressChangedCallback * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IInstallationProgressChangedCallback * This);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
__RPC__in IInstallationProgressChangedCallback * This,
/* [in] */ __RPC__in_opt IInstallationJob *installationJob,
/* [in] */ __RPC__in_opt IInstallationProgressChangedCallbackArgs *callbackArgs);
END_INTERFACE
} IInstallationProgressChangedCallbackVtbl;
interface IInstallationProgressChangedCallback
{
CONST_VTBL struct IInstallationProgressChangedCallbackVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IInstallationProgressChangedCallback_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IInstallationProgressChangedCallback_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IInstallationProgressChangedCallback_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IInstallationProgressChangedCallback_Invoke(This,installationJob,callbackArgs) \
( (This)->lpVtbl -> Invoke(This,installationJob,callbackArgs) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IInstallationProgressChangedCallback_INTERFACE_DEFINED__ */
#ifndef __IUpdateInstaller_INTERFACE_DEFINED__
#define __IUpdateInstaller_INTERFACE_DEFINED__
/* interface IUpdateInstaller */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateInstaller;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("7b929c68-ccdc-4226-96b1-8724600b54c2")
IUpdateInstaller : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ClientApplicationID(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ClientApplicationID(
/* [in] */ __RPC__in BSTR value) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsForced(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_IsForced(
/* [in] */ VARIANT_BOOL value) = 0;
virtual /* [helpstring][restricted][propget][id] */ HRESULT STDMETHODCALLTYPE get_ParentHwnd(
/* [retval][out] */ __RPC__deref_out_opt HWND *retval) = 0;
virtual /* [helpstring][restricted][propput][id] */ HRESULT STDMETHODCALLTYPE put_ParentHwnd(
/* [unique][in] */ __RPC__in_opt HWND value) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ParentWindow(
/* [unique][in] */ __RPC__in_opt IUnknown *value) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ParentWindow(
/* [retval][out] */ __RPC__deref_out_opt IUnknown **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Updates(
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Updates(
/* [in] */ __RPC__in_opt IUpdateCollection *value) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE BeginInstall(
/* [in] */ __RPC__in_opt IUnknown *onProgressChanged,
/* [in] */ __RPC__in_opt IUnknown *onCompleted,
/* [in] */ VARIANT state,
/* [retval][out] */ __RPC__deref_out_opt IInstallationJob **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE BeginUninstall(
/* [in] */ __RPC__in_opt IUnknown *onProgressChanged,
/* [in] */ __RPC__in_opt IUnknown *onCompleted,
/* [in] */ VARIANT state,
/* [retval][out] */ __RPC__deref_out_opt IInstallationJob **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EndInstall(
/* [in] */ __RPC__in_opt IInstallationJob *value,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EndUninstall(
/* [in] */ __RPC__in_opt IInstallationJob *value,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Install(
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RunWizard(
/* [defaultvalue][unique][in] */ __RPC__in_opt BSTR dialogTitle,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsBusy(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Uninstall(
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AllowSourcePrompts(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_AllowSourcePrompts(
/* [in] */ VARIANT_BOOL value) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RebootRequiredBeforeInstallation(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
};
#else /* C style interface */
typedef struct IUpdateInstallerVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateInstaller * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateInstaller * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateInstaller * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateInstaller * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateInstaller * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateInstaller * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateInstaller * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(
__RPC__in IUpdateInstaller * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(
__RPC__in IUpdateInstaller * This,
/* [in] */ __RPC__in BSTR value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsForced )(
__RPC__in IUpdateInstaller * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsForced )(
__RPC__in IUpdateInstaller * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][restricted][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ParentHwnd )(
__RPC__in IUpdateInstaller * This,
/* [retval][out] */ __RPC__deref_out_opt HWND *retval);
/* [helpstring][restricted][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ParentHwnd )(
__RPC__in IUpdateInstaller * This,
/* [unique][in] */ __RPC__in_opt HWND value);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ParentWindow )(
__RPC__in IUpdateInstaller * This,
/* [unique][in] */ __RPC__in_opt IUnknown *value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ParentWindow )(
__RPC__in IUpdateInstaller * This,
/* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Updates )(
__RPC__in IUpdateInstaller * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Updates )(
__RPC__in IUpdateInstaller * This,
/* [in] */ __RPC__in_opt IUpdateCollection *value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginInstall )(
__RPC__in IUpdateInstaller * This,
/* [in] */ __RPC__in_opt IUnknown *onProgressChanged,
/* [in] */ __RPC__in_opt IUnknown *onCompleted,
/* [in] */ VARIANT state,
/* [retval][out] */ __RPC__deref_out_opt IInstallationJob **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginUninstall )(
__RPC__in IUpdateInstaller * This,
/* [in] */ __RPC__in_opt IUnknown *onProgressChanged,
/* [in] */ __RPC__in_opt IUnknown *onCompleted,
/* [in] */ VARIANT state,
/* [retval][out] */ __RPC__deref_out_opt IInstallationJob **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndInstall )(
__RPC__in IUpdateInstaller * This,
/* [in] */ __RPC__in_opt IInstallationJob *value,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndUninstall )(
__RPC__in IUpdateInstaller * This,
/* [in] */ __RPC__in_opt IInstallationJob *value,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Install )(
__RPC__in IUpdateInstaller * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RunWizard )(
__RPC__in IUpdateInstaller * This,
/* [defaultvalue][unique][in] */ __RPC__in_opt BSTR dialogTitle,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBusy )(
__RPC__in IUpdateInstaller * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Uninstall )(
__RPC__in IUpdateInstaller * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AllowSourcePrompts )(
__RPC__in IUpdateInstaller * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_AllowSourcePrompts )(
__RPC__in IUpdateInstaller * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequiredBeforeInstallation )(
__RPC__in IUpdateInstaller * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
END_INTERFACE
} IUpdateInstallerVtbl;
interface IUpdateInstaller
{
CONST_VTBL struct IUpdateInstallerVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateInstaller_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateInstaller_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateInstaller_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateInstaller_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateInstaller_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateInstaller_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateInstaller_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateInstaller_get_ClientApplicationID(This,retval) \
( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )
#define IUpdateInstaller_put_ClientApplicationID(This,value) \
( (This)->lpVtbl -> put_ClientApplicationID(This,value) )
#define IUpdateInstaller_get_IsForced(This,retval) \
( (This)->lpVtbl -> get_IsForced(This,retval) )
#define IUpdateInstaller_put_IsForced(This,value) \
( (This)->lpVtbl -> put_IsForced(This,value) )
#define IUpdateInstaller_get_ParentHwnd(This,retval) \
( (This)->lpVtbl -> get_ParentHwnd(This,retval) )
#define IUpdateInstaller_put_ParentHwnd(This,value) \
( (This)->lpVtbl -> put_ParentHwnd(This,value) )
#define IUpdateInstaller_put_ParentWindow(This,value) \
( (This)->lpVtbl -> put_ParentWindow(This,value) )
#define IUpdateInstaller_get_ParentWindow(This,retval) \
( (This)->lpVtbl -> get_ParentWindow(This,retval) )
#define IUpdateInstaller_get_Updates(This,retval) \
( (This)->lpVtbl -> get_Updates(This,retval) )
#define IUpdateInstaller_put_Updates(This,value) \
( (This)->lpVtbl -> put_Updates(This,value) )
#define IUpdateInstaller_BeginInstall(This,onProgressChanged,onCompleted,state,retval) \
( (This)->lpVtbl -> BeginInstall(This,onProgressChanged,onCompleted,state,retval) )
#define IUpdateInstaller_BeginUninstall(This,onProgressChanged,onCompleted,state,retval) \
( (This)->lpVtbl -> BeginUninstall(This,onProgressChanged,onCompleted,state,retval) )
#define IUpdateInstaller_EndInstall(This,value,retval) \
( (This)->lpVtbl -> EndInstall(This,value,retval) )
#define IUpdateInstaller_EndUninstall(This,value,retval) \
( (This)->lpVtbl -> EndUninstall(This,value,retval) )
#define IUpdateInstaller_Install(This,retval) \
( (This)->lpVtbl -> Install(This,retval) )
#define IUpdateInstaller_RunWizard(This,dialogTitle,retval) \
( (This)->lpVtbl -> RunWizard(This,dialogTitle,retval) )
#define IUpdateInstaller_get_IsBusy(This,retval) \
( (This)->lpVtbl -> get_IsBusy(This,retval) )
#define IUpdateInstaller_Uninstall(This,retval) \
( (This)->lpVtbl -> Uninstall(This,retval) )
#define IUpdateInstaller_get_AllowSourcePrompts(This,retval) \
( (This)->lpVtbl -> get_AllowSourcePrompts(This,retval) )
#define IUpdateInstaller_put_AllowSourcePrompts(This,value) \
( (This)->lpVtbl -> put_AllowSourcePrompts(This,value) )
#define IUpdateInstaller_get_RebootRequiredBeforeInstallation(This,retval) \
( (This)->lpVtbl -> get_RebootRequiredBeforeInstallation(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateInstaller_INTERFACE_DEFINED__ */
#ifndef __IUpdateInstaller2_INTERFACE_DEFINED__
#define __IUpdateInstaller2_INTERFACE_DEFINED__
/* interface IUpdateInstaller2 */
/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateInstaller2;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("3442d4fe-224d-4cee-98cf-30e0c4d229e6")
IUpdateInstaller2 : public IUpdateInstaller
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ForceQuiet(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ForceQuiet(
/* [in] */ VARIANT_BOOL value) = 0;
};
#else /* C style interface */
typedef struct IUpdateInstaller2Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateInstaller2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateInstaller2 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateInstaller2 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateInstaller2 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateInstaller2 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateInstaller2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateInstaller2 * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(
__RPC__in IUpdateInstaller2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(
__RPC__in IUpdateInstaller2 * This,
/* [in] */ __RPC__in BSTR value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsForced )(
__RPC__in IUpdateInstaller2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsForced )(
__RPC__in IUpdateInstaller2 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][restricted][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ParentHwnd )(
__RPC__in IUpdateInstaller2 * This,
/* [retval][out] */ __RPC__deref_out_opt HWND *retval);
/* [helpstring][restricted][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ParentHwnd )(
__RPC__in IUpdateInstaller2 * This,
/* [unique][in] */ __RPC__in_opt HWND value);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ParentWindow )(
__RPC__in IUpdateInstaller2 * This,
/* [unique][in] */ __RPC__in_opt IUnknown *value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ParentWindow )(
__RPC__in IUpdateInstaller2 * This,
/* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Updates )(
__RPC__in IUpdateInstaller2 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Updates )(
__RPC__in IUpdateInstaller2 * This,
/* [in] */ __RPC__in_opt IUpdateCollection *value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginInstall )(
__RPC__in IUpdateInstaller2 * This,
/* [in] */ __RPC__in_opt IUnknown *onProgressChanged,
/* [in] */ __RPC__in_opt IUnknown *onCompleted,
/* [in] */ VARIANT state,
/* [retval][out] */ __RPC__deref_out_opt IInstallationJob **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginUninstall )(
__RPC__in IUpdateInstaller2 * This,
/* [in] */ __RPC__in_opt IUnknown *onProgressChanged,
/* [in] */ __RPC__in_opt IUnknown *onCompleted,
/* [in] */ VARIANT state,
/* [retval][out] */ __RPC__deref_out_opt IInstallationJob **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndInstall )(
__RPC__in IUpdateInstaller2 * This,
/* [in] */ __RPC__in_opt IInstallationJob *value,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndUninstall )(
__RPC__in IUpdateInstaller2 * This,
/* [in] */ __RPC__in_opt IInstallationJob *value,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Install )(
__RPC__in IUpdateInstaller2 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RunWizard )(
__RPC__in IUpdateInstaller2 * This,
/* [defaultvalue][unique][in] */ __RPC__in_opt BSTR dialogTitle,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBusy )(
__RPC__in IUpdateInstaller2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Uninstall )(
__RPC__in IUpdateInstaller2 * This,
/* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AllowSourcePrompts )(
__RPC__in IUpdateInstaller2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_AllowSourcePrompts )(
__RPC__in IUpdateInstaller2 * This,
/* [in] */ VARIANT_BOOL value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequiredBeforeInstallation )(
__RPC__in IUpdateInstaller2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ForceQuiet )(
__RPC__in IUpdateInstaller2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ForceQuiet )(
__RPC__in IUpdateInstaller2 * This,
/* [in] */ VARIANT_BOOL value);
END_INTERFACE
} IUpdateInstaller2Vtbl;
interface IUpdateInstaller2
{
CONST_VTBL struct IUpdateInstaller2Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateInstaller2_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateInstaller2_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateInstaller2_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateInstaller2_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateInstaller2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateInstaller2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateInstaller2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateInstaller2_get_ClientApplicationID(This,retval) \
( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )
#define IUpdateInstaller2_put_ClientApplicationID(This,value) \
( (This)->lpVtbl -> put_ClientApplicationID(This,value) )
#define IUpdateInstaller2_get_IsForced(This,retval) \
( (This)->lpVtbl -> get_IsForced(This,retval) )
#define IUpdateInstaller2_put_IsForced(This,value) \
( (This)->lpVtbl -> put_IsForced(This,value) )
#define IUpdateInstaller2_get_ParentHwnd(This,retval) \
( (This)->lpVtbl -> get_ParentHwnd(This,retval) )
#define IUpdateInstaller2_put_ParentHwnd(This,value) \
( (This)->lpVtbl -> put_ParentHwnd(This,value) )
#define IUpdateInstaller2_put_ParentWindow(This,value) \
( (This)->lpVtbl -> put_ParentWindow(This,value) )
#define IUpdateInstaller2_get_ParentWindow(This,retval) \
( (This)->lpVtbl -> get_ParentWindow(This,retval) )
#define IUpdateInstaller2_get_Updates(This,retval) \
( (This)->lpVtbl -> get_Updates(This,retval) )
#define IUpdateInstaller2_put_Updates(This,value) \
( (This)->lpVtbl -> put_Updates(This,value) )
#define IUpdateInstaller2_BeginInstall(This,onProgressChanged,onCompleted,state,retval) \
( (This)->lpVtbl -> BeginInstall(This,onProgressChanged,onCompleted,state,retval) )
#define IUpdateInstaller2_BeginUninstall(This,onProgressChanged,onCompleted,state,retval) \
( (This)->lpVtbl -> BeginUninstall(This,onProgressChanged,onCompleted,state,retval) )
#define IUpdateInstaller2_EndInstall(This,value,retval) \
( (This)->lpVtbl -> EndInstall(This,value,retval) )
#define IUpdateInstaller2_EndUninstall(This,value,retval) \
( (This)->lpVtbl -> EndUninstall(This,value,retval) )
#define IUpdateInstaller2_Install(This,retval) \
( (This)->lpVtbl -> Install(This,retval) )
#define IUpdateInstaller2_RunWizard(This,dialogTitle,retval) \
( (This)->lpVtbl -> RunWizard(This,dialogTitle,retval) )
#define IUpdateInstaller2_get_IsBusy(This,retval) \
( (This)->lpVtbl -> get_IsBusy(This,retval) )
#define IUpdateInstaller2_Uninstall(This,retval) \
( (This)->lpVtbl -> Uninstall(This,retval) )
#define IUpdateInstaller2_get_AllowSourcePrompts(This,retval) \
( (This)->lpVtbl -> get_AllowSourcePrompts(This,retval) )
#define IUpdateInstaller2_put_AllowSourcePrompts(This,value) \
( (This)->lpVtbl -> put_AllowSourcePrompts(This,value) )
#define IUpdateInstaller2_get_RebootRequiredBeforeInstallation(This,retval) \
( (This)->lpVtbl -> get_RebootRequiredBeforeInstallation(This,retval) )
#define IUpdateInstaller2_get_ForceQuiet(This,retval) \
( (This)->lpVtbl -> get_ForceQuiet(This,retval) )
#define IUpdateInstaller2_put_ForceQuiet(This,value) \
( (This)->lpVtbl -> put_ForceQuiet(This,value) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateInstaller2_INTERFACE_DEFINED__ */
#ifndef __IUpdateSession_INTERFACE_DEFINED__
#define __IUpdateSession_INTERFACE_DEFINED__
/* interface IUpdateSession */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateSession;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("816858a4-260d-4260-933a-2585f1abc76b")
IUpdateSession : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ClientApplicationID(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ClientApplicationID(
/* [in] */ __RPC__in BSTR value) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ReadOnly(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_WebProxy(
/* [retval][out] */ __RPC__deref_out_opt IWebProxy **retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_WebProxy(
/* [unique][in] */ __RPC__in_opt IWebProxy *value) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CreateUpdateSearcher(
/* [retval][out] */ __RPC__deref_out_opt IUpdateSearcher **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CreateUpdateDownloader(
/* [retval][out] */ __RPC__deref_out_opt IUpdateDownloader **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CreateUpdateInstaller(
/* [retval][out] */ __RPC__deref_out_opt IUpdateInstaller **retval) = 0;
};
#else /* C style interface */
typedef struct IUpdateSessionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateSession * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateSession * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateSession * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateSession * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateSession * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateSession * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateSession * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(
__RPC__in IUpdateSession * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(
__RPC__in IUpdateSession * This,
/* [in] */ __RPC__in BSTR value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReadOnly )(
__RPC__in IUpdateSession * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_WebProxy )(
__RPC__in IUpdateSession * This,
/* [retval][out] */ __RPC__deref_out_opt IWebProxy **retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_WebProxy )(
__RPC__in IUpdateSession * This,
/* [unique][in] */ __RPC__in_opt IWebProxy *value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CreateUpdateSearcher )(
__RPC__in IUpdateSession * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateSearcher **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CreateUpdateDownloader )(
__RPC__in IUpdateSession * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateDownloader **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CreateUpdateInstaller )(
__RPC__in IUpdateSession * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateInstaller **retval);
END_INTERFACE
} IUpdateSessionVtbl;
interface IUpdateSession
{
CONST_VTBL struct IUpdateSessionVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateSession_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateSession_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateSession_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateSession_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateSession_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateSession_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateSession_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateSession_get_ClientApplicationID(This,retval) \
( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )
#define IUpdateSession_put_ClientApplicationID(This,value) \
( (This)->lpVtbl -> put_ClientApplicationID(This,value) )
#define IUpdateSession_get_ReadOnly(This,retval) \
( (This)->lpVtbl -> get_ReadOnly(This,retval) )
#define IUpdateSession_get_WebProxy(This,retval) \
( (This)->lpVtbl -> get_WebProxy(This,retval) )
#define IUpdateSession_put_WebProxy(This,value) \
( (This)->lpVtbl -> put_WebProxy(This,value) )
#define IUpdateSession_CreateUpdateSearcher(This,retval) \
( (This)->lpVtbl -> CreateUpdateSearcher(This,retval) )
#define IUpdateSession_CreateUpdateDownloader(This,retval) \
( (This)->lpVtbl -> CreateUpdateDownloader(This,retval) )
#define IUpdateSession_CreateUpdateInstaller(This,retval) \
( (This)->lpVtbl -> CreateUpdateInstaller(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateSession_INTERFACE_DEFINED__ */
#ifndef __IUpdateSession2_INTERFACE_DEFINED__
#define __IUpdateSession2_INTERFACE_DEFINED__
/* interface IUpdateSession2 */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateSession2;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("91caf7b0-eb23-49ed-9937-c52d817f46f7")
IUpdateSession2 : public IUpdateSession
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UserLocale(
/* [retval][out] */ __RPC__out LCID *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_UserLocale(
/* [in] */ LCID lcid) = 0;
};
#else /* C style interface */
typedef struct IUpdateSession2Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateSession2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateSession2 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateSession2 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateSession2 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateSession2 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateSession2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateSession2 * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(
__RPC__in IUpdateSession2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(
__RPC__in IUpdateSession2 * This,
/* [in] */ __RPC__in BSTR value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReadOnly )(
__RPC__in IUpdateSession2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_WebProxy )(
__RPC__in IUpdateSession2 * This,
/* [retval][out] */ __RPC__deref_out_opt IWebProxy **retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_WebProxy )(
__RPC__in IUpdateSession2 * This,
/* [unique][in] */ __RPC__in_opt IWebProxy *value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CreateUpdateSearcher )(
__RPC__in IUpdateSession2 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateSearcher **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CreateUpdateDownloader )(
__RPC__in IUpdateSession2 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateDownloader **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CreateUpdateInstaller )(
__RPC__in IUpdateSession2 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateInstaller **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UserLocale )(
__RPC__in IUpdateSession2 * This,
/* [retval][out] */ __RPC__out LCID *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_UserLocale )(
__RPC__in IUpdateSession2 * This,
/* [in] */ LCID lcid);
END_INTERFACE
} IUpdateSession2Vtbl;
interface IUpdateSession2
{
CONST_VTBL struct IUpdateSession2Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateSession2_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateSession2_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateSession2_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateSession2_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateSession2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateSession2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateSession2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateSession2_get_ClientApplicationID(This,retval) \
( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )
#define IUpdateSession2_put_ClientApplicationID(This,value) \
( (This)->lpVtbl -> put_ClientApplicationID(This,value) )
#define IUpdateSession2_get_ReadOnly(This,retval) \
( (This)->lpVtbl -> get_ReadOnly(This,retval) )
#define IUpdateSession2_get_WebProxy(This,retval) \
( (This)->lpVtbl -> get_WebProxy(This,retval) )
#define IUpdateSession2_put_WebProxy(This,value) \
( (This)->lpVtbl -> put_WebProxy(This,value) )
#define IUpdateSession2_CreateUpdateSearcher(This,retval) \
( (This)->lpVtbl -> CreateUpdateSearcher(This,retval) )
#define IUpdateSession2_CreateUpdateDownloader(This,retval) \
( (This)->lpVtbl -> CreateUpdateDownloader(This,retval) )
#define IUpdateSession2_CreateUpdateInstaller(This,retval) \
( (This)->lpVtbl -> CreateUpdateInstaller(This,retval) )
#define IUpdateSession2_get_UserLocale(This,retval) \
( (This)->lpVtbl -> get_UserLocale(This,retval) )
#define IUpdateSession2_put_UserLocale(This,lcid) \
( (This)->lpVtbl -> put_UserLocale(This,lcid) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateSession2_INTERFACE_DEFINED__ */
#ifndef __IUpdateSession3_INTERFACE_DEFINED__
#define __IUpdateSession3_INTERFACE_DEFINED__
/* interface IUpdateSession3 */
/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateSession3;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("918EFD1E-B5D8-4c90-8540-AEB9BDC56F9D")
IUpdateSession3 : public IUpdateSession2
{
public:
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CreateUpdateServiceManager(
/* [retval][out] */ __RPC__deref_out_opt IUpdateServiceManager2 **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE QueryHistory(
/* [in] */ __RPC__in BSTR criteria,
/* [in] */ LONG startIndex,
/* [in] */ LONG count,
/* [retval][out] */ __RPC__deref_out_opt IUpdateHistoryEntryCollection **retval) = 0;
};
#else /* C style interface */
typedef struct IUpdateSession3Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateSession3 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateSession3 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateSession3 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateSession3 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateSession3 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateSession3 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateSession3 * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(
__RPC__in IUpdateSession3 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(
__RPC__in IUpdateSession3 * This,
/* [in] */ __RPC__in BSTR value);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReadOnly )(
__RPC__in IUpdateSession3 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_WebProxy )(
__RPC__in IUpdateSession3 * This,
/* [retval][out] */ __RPC__deref_out_opt IWebProxy **retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_WebProxy )(
__RPC__in IUpdateSession3 * This,
/* [unique][in] */ __RPC__in_opt IWebProxy *value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CreateUpdateSearcher )(
__RPC__in IUpdateSession3 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateSearcher **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CreateUpdateDownloader )(
__RPC__in IUpdateSession3 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateDownloader **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CreateUpdateInstaller )(
__RPC__in IUpdateSession3 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateInstaller **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UserLocale )(
__RPC__in IUpdateSession3 * This,
/* [retval][out] */ __RPC__out LCID *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_UserLocale )(
__RPC__in IUpdateSession3 * This,
/* [in] */ LCID lcid);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CreateUpdateServiceManager )(
__RPC__in IUpdateSession3 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateServiceManager2 **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *QueryHistory )(
__RPC__in IUpdateSession3 * This,
/* [in] */ __RPC__in BSTR criteria,
/* [in] */ LONG startIndex,
/* [in] */ LONG count,
/* [retval][out] */ __RPC__deref_out_opt IUpdateHistoryEntryCollection **retval);
END_INTERFACE
} IUpdateSession3Vtbl;
interface IUpdateSession3
{
CONST_VTBL struct IUpdateSession3Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateSession3_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateSession3_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateSession3_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateSession3_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateSession3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateSession3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateSession3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateSession3_get_ClientApplicationID(This,retval) \
( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )
#define IUpdateSession3_put_ClientApplicationID(This,value) \
( (This)->lpVtbl -> put_ClientApplicationID(This,value) )
#define IUpdateSession3_get_ReadOnly(This,retval) \
( (This)->lpVtbl -> get_ReadOnly(This,retval) )
#define IUpdateSession3_get_WebProxy(This,retval) \
( (This)->lpVtbl -> get_WebProxy(This,retval) )
#define IUpdateSession3_put_WebProxy(This,value) \
( (This)->lpVtbl -> put_WebProxy(This,value) )
#define IUpdateSession3_CreateUpdateSearcher(This,retval) \
( (This)->lpVtbl -> CreateUpdateSearcher(This,retval) )
#define IUpdateSession3_CreateUpdateDownloader(This,retval) \
( (This)->lpVtbl -> CreateUpdateDownloader(This,retval) )
#define IUpdateSession3_CreateUpdateInstaller(This,retval) \
( (This)->lpVtbl -> CreateUpdateInstaller(This,retval) )
#define IUpdateSession3_get_UserLocale(This,retval) \
( (This)->lpVtbl -> get_UserLocale(This,retval) )
#define IUpdateSession3_put_UserLocale(This,lcid) \
( (This)->lpVtbl -> put_UserLocale(This,lcid) )
#define IUpdateSession3_CreateUpdateServiceManager(This,retval) \
( (This)->lpVtbl -> CreateUpdateServiceManager(This,retval) )
#define IUpdateSession3_QueryHistory(This,criteria,startIndex,count,retval) \
( (This)->lpVtbl -> QueryHistory(This,criteria,startIndex,count,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateSession3_INTERFACE_DEFINED__ */
#ifndef __IUpdateService_INTERFACE_DEFINED__
#define __IUpdateService_INTERFACE_DEFINED__
/* interface IUpdateService */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateService;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("76b3b17e-aed6-4da5-85f0-83587f81abe3")
IUpdateService : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Name(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ContentValidationCert(
/* [retval][out] */ __RPC__out VARIANT *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ExpirationDate(
/* [retval][out] */ __RPC__out DATE *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsManaged(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsRegisteredWithAU(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IssueDate(
/* [retval][out] */ __RPC__out DATE *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_OffersWindowsUpdates(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RedirectUrls(
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ServiceID(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsScanPackageService(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CanRegisterWithAU(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ServiceUrl(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_SetupPrefix(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
};
#else /* C style interface */
typedef struct IUpdateServiceVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateService * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateService * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateService * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateService * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateService * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateService * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateService * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Name )(
__RPC__in IUpdateService * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ContentValidationCert )(
__RPC__in IUpdateService * This,
/* [retval][out] */ __RPC__out VARIANT *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ExpirationDate )(
__RPC__in IUpdateService * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsManaged )(
__RPC__in IUpdateService * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsRegisteredWithAU )(
__RPC__in IUpdateService * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IssueDate )(
__RPC__in IUpdateService * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_OffersWindowsUpdates )(
__RPC__in IUpdateService * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RedirectUrls )(
__RPC__in IUpdateService * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceID )(
__RPC__in IUpdateService * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsScanPackageService )(
__RPC__in IUpdateService * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRegisterWithAU )(
__RPC__in IUpdateService * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceUrl )(
__RPC__in IUpdateService * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SetupPrefix )(
__RPC__in IUpdateService * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
END_INTERFACE
} IUpdateServiceVtbl;
interface IUpdateService
{
CONST_VTBL struct IUpdateServiceVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateService_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateService_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateService_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateService_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateService_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateService_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateService_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateService_get_Name(This,retval) \
( (This)->lpVtbl -> get_Name(This,retval) )
#define IUpdateService_get_ContentValidationCert(This,retval) \
( (This)->lpVtbl -> get_ContentValidationCert(This,retval) )
#define IUpdateService_get_ExpirationDate(This,retval) \
( (This)->lpVtbl -> get_ExpirationDate(This,retval) )
#define IUpdateService_get_IsManaged(This,retval) \
( (This)->lpVtbl -> get_IsManaged(This,retval) )
#define IUpdateService_get_IsRegisteredWithAU(This,retval) \
( (This)->lpVtbl -> get_IsRegisteredWithAU(This,retval) )
#define IUpdateService_get_IssueDate(This,retval) \
( (This)->lpVtbl -> get_IssueDate(This,retval) )
#define IUpdateService_get_OffersWindowsUpdates(This,retval) \
( (This)->lpVtbl -> get_OffersWindowsUpdates(This,retval) )
#define IUpdateService_get_RedirectUrls(This,retval) \
( (This)->lpVtbl -> get_RedirectUrls(This,retval) )
#define IUpdateService_get_ServiceID(This,retval) \
( (This)->lpVtbl -> get_ServiceID(This,retval) )
#define IUpdateService_get_IsScanPackageService(This,retval) \
( (This)->lpVtbl -> get_IsScanPackageService(This,retval) )
#define IUpdateService_get_CanRegisterWithAU(This,retval) \
( (This)->lpVtbl -> get_CanRegisterWithAU(This,retval) )
#define IUpdateService_get_ServiceUrl(This,retval) \
( (This)->lpVtbl -> get_ServiceUrl(This,retval) )
#define IUpdateService_get_SetupPrefix(This,retval) \
( (This)->lpVtbl -> get_SetupPrefix(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateService_INTERFACE_DEFINED__ */
#ifndef __IUpdateService2_INTERFACE_DEFINED__
#define __IUpdateService2_INTERFACE_DEFINED__
/* interface IUpdateService2 */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateService2;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("1518b460-6518-4172-940f-c75883b24ceb")
IUpdateService2 : public IUpdateService
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsDefaultAUService(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
};
#else /* C style interface */
typedef struct IUpdateService2Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateService2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateService2 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateService2 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateService2 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateService2 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateService2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateService2 * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Name )(
__RPC__in IUpdateService2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ContentValidationCert )(
__RPC__in IUpdateService2 * This,
/* [retval][out] */ __RPC__out VARIANT *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ExpirationDate )(
__RPC__in IUpdateService2 * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsManaged )(
__RPC__in IUpdateService2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsRegisteredWithAU )(
__RPC__in IUpdateService2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IssueDate )(
__RPC__in IUpdateService2 * This,
/* [retval][out] */ __RPC__out DATE *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_OffersWindowsUpdates )(
__RPC__in IUpdateService2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RedirectUrls )(
__RPC__in IUpdateService2 * This,
/* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceID )(
__RPC__in IUpdateService2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsScanPackageService )(
__RPC__in IUpdateService2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRegisterWithAU )(
__RPC__in IUpdateService2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceUrl )(
__RPC__in IUpdateService2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SetupPrefix )(
__RPC__in IUpdateService2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultAUService )(
__RPC__in IUpdateService2 * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
END_INTERFACE
} IUpdateService2Vtbl;
interface IUpdateService2
{
CONST_VTBL struct IUpdateService2Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateService2_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateService2_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateService2_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateService2_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateService2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateService2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateService2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateService2_get_Name(This,retval) \
( (This)->lpVtbl -> get_Name(This,retval) )
#define IUpdateService2_get_ContentValidationCert(This,retval) \
( (This)->lpVtbl -> get_ContentValidationCert(This,retval) )
#define IUpdateService2_get_ExpirationDate(This,retval) \
( (This)->lpVtbl -> get_ExpirationDate(This,retval) )
#define IUpdateService2_get_IsManaged(This,retval) \
( (This)->lpVtbl -> get_IsManaged(This,retval) )
#define IUpdateService2_get_IsRegisteredWithAU(This,retval) \
( (This)->lpVtbl -> get_IsRegisteredWithAU(This,retval) )
#define IUpdateService2_get_IssueDate(This,retval) \
( (This)->lpVtbl -> get_IssueDate(This,retval) )
#define IUpdateService2_get_OffersWindowsUpdates(This,retval) \
( (This)->lpVtbl -> get_OffersWindowsUpdates(This,retval) )
#define IUpdateService2_get_RedirectUrls(This,retval) \
( (This)->lpVtbl -> get_RedirectUrls(This,retval) )
#define IUpdateService2_get_ServiceID(This,retval) \
( (This)->lpVtbl -> get_ServiceID(This,retval) )
#define IUpdateService2_get_IsScanPackageService(This,retval) \
( (This)->lpVtbl -> get_IsScanPackageService(This,retval) )
#define IUpdateService2_get_CanRegisterWithAU(This,retval) \
( (This)->lpVtbl -> get_CanRegisterWithAU(This,retval) )
#define IUpdateService2_get_ServiceUrl(This,retval) \
( (This)->lpVtbl -> get_ServiceUrl(This,retval) )
#define IUpdateService2_get_SetupPrefix(This,retval) \
( (This)->lpVtbl -> get_SetupPrefix(This,retval) )
#define IUpdateService2_get_IsDefaultAUService(This,retval) \
( (This)->lpVtbl -> get_IsDefaultAUService(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateService2_INTERFACE_DEFINED__ */
#ifndef __IUpdateServiceCollection_INTERFACE_DEFINED__
#define __IUpdateServiceCollection_INTERFACE_DEFINED__
/* interface IUpdateServiceCollection */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateServiceCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("9b0353aa-0e52-44ff-b8b0-1f7fa0437f88")
IUpdateServiceCollection : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Item(
/* [in] */ LONG index,
/* [retval][out] */ __RPC__deref_out_opt IUpdateService **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get__NewEnum(
/* [retval][out] */ __RPC__deref_out_opt IUnknown **retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Count(
/* [retval][out] */ __RPC__out LONG *retval) = 0;
};
#else /* C style interface */
typedef struct IUpdateServiceCollectionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateServiceCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateServiceCollection * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateServiceCollection * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateServiceCollection * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateServiceCollection * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateServiceCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateServiceCollection * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(
__RPC__in IUpdateServiceCollection * This,
/* [in] */ LONG index,
/* [retval][out] */ __RPC__deref_out_opt IUpdateService **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(
__RPC__in IUpdateServiceCollection * This,
/* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(
__RPC__in IUpdateServiceCollection * This,
/* [retval][out] */ __RPC__out LONG *retval);
END_INTERFACE
} IUpdateServiceCollectionVtbl;
interface IUpdateServiceCollection
{
CONST_VTBL struct IUpdateServiceCollectionVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateServiceCollection_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateServiceCollection_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateServiceCollection_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateServiceCollection_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateServiceCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateServiceCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateServiceCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateServiceCollection_get_Item(This,index,retval) \
( (This)->lpVtbl -> get_Item(This,index,retval) )
#define IUpdateServiceCollection_get__NewEnum(This,retval) \
( (This)->lpVtbl -> get__NewEnum(This,retval) )
#define IUpdateServiceCollection_get_Count(This,retval) \
( (This)->lpVtbl -> get_Count(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateServiceCollection_INTERFACE_DEFINED__ */
#ifndef __IUpdateServiceRegistration_INTERFACE_DEFINED__
#define __IUpdateServiceRegistration_INTERFACE_DEFINED__
/* interface IUpdateServiceRegistration */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateServiceRegistration;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("dde02280-12b3-4e0b-937b-6747f6acb286")
IUpdateServiceRegistration : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RegistrationState(
/* [retval][out] */ __RPC__out UpdateServiceRegistrationState *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ServiceID(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsPendingRegistrationWithAU(
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Service(
/* [retval][out] */ __RPC__deref_out_opt IUpdateService2 **retval) = 0;
};
#else /* C style interface */
typedef struct IUpdateServiceRegistrationVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateServiceRegistration * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateServiceRegistration * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateServiceRegistration * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateServiceRegistration * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateServiceRegistration * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateServiceRegistration * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateServiceRegistration * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RegistrationState )(
__RPC__in IUpdateServiceRegistration * This,
/* [retval][out] */ __RPC__out UpdateServiceRegistrationState *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceID )(
__RPC__in IUpdateServiceRegistration * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsPendingRegistrationWithAU )(
__RPC__in IUpdateServiceRegistration * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *retval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Service )(
__RPC__in IUpdateServiceRegistration * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateService2 **retval);
END_INTERFACE
} IUpdateServiceRegistrationVtbl;
interface IUpdateServiceRegistration
{
CONST_VTBL struct IUpdateServiceRegistrationVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateServiceRegistration_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateServiceRegistration_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateServiceRegistration_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateServiceRegistration_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateServiceRegistration_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateServiceRegistration_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateServiceRegistration_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateServiceRegistration_get_RegistrationState(This,retval) \
( (This)->lpVtbl -> get_RegistrationState(This,retval) )
#define IUpdateServiceRegistration_get_ServiceID(This,retval) \
( (This)->lpVtbl -> get_ServiceID(This,retval) )
#define IUpdateServiceRegistration_get_IsPendingRegistrationWithAU(This,retval) \
( (This)->lpVtbl -> get_IsPendingRegistrationWithAU(This,retval) )
#define IUpdateServiceRegistration_get_Service(This,retval) \
( (This)->lpVtbl -> get_Service(This,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateServiceRegistration_INTERFACE_DEFINED__ */
#ifndef __IUpdateServiceManager_INTERFACE_DEFINED__
#define __IUpdateServiceManager_INTERFACE_DEFINED__
/* interface IUpdateServiceManager */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateServiceManager;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("23857e3c-02ba-44a3-9423-b1c900805f37")
IUpdateServiceManager : public IDispatch
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Services(
/* [retval][out] */ __RPC__deref_out_opt IUpdateServiceCollection **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE AddService(
/* [in] */ __RPC__in BSTR serviceID,
/* [in] */ __RPC__in BSTR authorizationCabPath,
/* [retval][out] */ __RPC__deref_out_opt IUpdateService **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RegisterServiceWithAU(
/* [in] */ __RPC__in BSTR serviceID) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RemoveService(
/* [in] */ __RPC__in BSTR serviceID) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE UnregisterServiceWithAU(
/* [in] */ __RPC__in BSTR serviceID) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE AddScanPackageService(
/* [in] */ __RPC__in BSTR serviceName,
/* [in] */ __RPC__in BSTR scanFileLocation,
/* [defaultvalue][in] */ LONG flags,
/* [retval][out] */ __RPC__deref_out_opt IUpdateService **ppService) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetOption(
/* [in] */ __RPC__in BSTR optionName,
/* [in] */ VARIANT optionValue) = 0;
};
#else /* C style interface */
typedef struct IUpdateServiceManagerVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateServiceManager * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateServiceManager * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateServiceManager * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateServiceManager * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateServiceManager * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateServiceManager * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateServiceManager * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Services )(
__RPC__in IUpdateServiceManager * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateServiceCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AddService )(
__RPC__in IUpdateServiceManager * This,
/* [in] */ __RPC__in BSTR serviceID,
/* [in] */ __RPC__in BSTR authorizationCabPath,
/* [retval][out] */ __RPC__deref_out_opt IUpdateService **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RegisterServiceWithAU )(
__RPC__in IUpdateServiceManager * This,
/* [in] */ __RPC__in BSTR serviceID);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RemoveService )(
__RPC__in IUpdateServiceManager * This,
/* [in] */ __RPC__in BSTR serviceID);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *UnregisterServiceWithAU )(
__RPC__in IUpdateServiceManager * This,
/* [in] */ __RPC__in BSTR serviceID);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AddScanPackageService )(
__RPC__in IUpdateServiceManager * This,
/* [in] */ __RPC__in BSTR serviceName,
/* [in] */ __RPC__in BSTR scanFileLocation,
/* [defaultvalue][in] */ LONG flags,
/* [retval][out] */ __RPC__deref_out_opt IUpdateService **ppService);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetOption )(
__RPC__in IUpdateServiceManager * This,
/* [in] */ __RPC__in BSTR optionName,
/* [in] */ VARIANT optionValue);
END_INTERFACE
} IUpdateServiceManagerVtbl;
interface IUpdateServiceManager
{
CONST_VTBL struct IUpdateServiceManagerVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateServiceManager_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateServiceManager_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateServiceManager_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateServiceManager_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateServiceManager_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateServiceManager_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateServiceManager_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateServiceManager_get_Services(This,retval) \
( (This)->lpVtbl -> get_Services(This,retval) )
#define IUpdateServiceManager_AddService(This,serviceID,authorizationCabPath,retval) \
( (This)->lpVtbl -> AddService(This,serviceID,authorizationCabPath,retval) )
#define IUpdateServiceManager_RegisterServiceWithAU(This,serviceID) \
( (This)->lpVtbl -> RegisterServiceWithAU(This,serviceID) )
#define IUpdateServiceManager_RemoveService(This,serviceID) \
( (This)->lpVtbl -> RemoveService(This,serviceID) )
#define IUpdateServiceManager_UnregisterServiceWithAU(This,serviceID) \
( (This)->lpVtbl -> UnregisterServiceWithAU(This,serviceID) )
#define IUpdateServiceManager_AddScanPackageService(This,serviceName,scanFileLocation,flags,ppService) \
( (This)->lpVtbl -> AddScanPackageService(This,serviceName,scanFileLocation,flags,ppService) )
#define IUpdateServiceManager_SetOption(This,optionName,optionValue) \
( (This)->lpVtbl -> SetOption(This,optionName,optionValue) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateServiceManager_INTERFACE_DEFINED__ */
#ifndef __IUpdateServiceManager2_INTERFACE_DEFINED__
#define __IUpdateServiceManager2_INTERFACE_DEFINED__
/* interface IUpdateServiceManager2 */
/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IUpdateServiceManager2;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0bb8531d-7e8d-424f-986c-a0b8f60a3e7b")
IUpdateServiceManager2 : public IUpdateServiceManager
{
public:
virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ClientApplicationID(
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;
virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ClientApplicationID(
/* [in] */ __RPC__in BSTR value) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE QueryServiceRegistration(
/* [in] */ __RPC__in BSTR serviceID,
/* [retval][out] */ __RPC__deref_out_opt IUpdateServiceRegistration **retval) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE AddService2(
/* [in] */ __RPC__in BSTR serviceID,
/* [in] */ LONG flags,
/* [in] */ __RPC__in BSTR authorizationCabPath,
/* [retval][out] */ __RPC__deref_out_opt IUpdateServiceRegistration **retval) = 0;
};
#else /* C style interface */
typedef struct IUpdateServiceManager2Vtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IUpdateServiceManager2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IUpdateServiceManager2 * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IUpdateServiceManager2 * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IUpdateServiceManager2 * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IUpdateServiceManager2 * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IUpdateServiceManager2 * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IUpdateServiceManager2 * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Services )(
__RPC__in IUpdateServiceManager2 * This,
/* [retval][out] */ __RPC__deref_out_opt IUpdateServiceCollection **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AddService )(
__RPC__in IUpdateServiceManager2 * This,
/* [in] */ __RPC__in BSTR serviceID,
/* [in] */ __RPC__in BSTR authorizationCabPath,
/* [retval][out] */ __RPC__deref_out_opt IUpdateService **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RegisterServiceWithAU )(
__RPC__in IUpdateServiceManager2 * This,
/* [in] */ __RPC__in BSTR serviceID);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RemoveService )(
__RPC__in IUpdateServiceManager2 * This,
/* [in] */ __RPC__in BSTR serviceID);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *UnregisterServiceWithAU )(
__RPC__in IUpdateServiceManager2 * This,
/* [in] */ __RPC__in BSTR serviceID);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AddScanPackageService )(
__RPC__in IUpdateServiceManager2 * This,
/* [in] */ __RPC__in BSTR serviceName,
/* [in] */ __RPC__in BSTR scanFileLocation,
/* [defaultvalue][in] */ LONG flags,
/* [retval][out] */ __RPC__deref_out_opt IUpdateService **ppService);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetOption )(
__RPC__in IUpdateServiceManager2 * This,
/* [in] */ __RPC__in BSTR optionName,
/* [in] */ VARIANT optionValue);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(
__RPC__in IUpdateServiceManager2 * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *retval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(
__RPC__in IUpdateServiceManager2 * This,
/* [in] */ __RPC__in BSTR value);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *QueryServiceRegistration )(
__RPC__in IUpdateServiceManager2 * This,
/* [in] */ __RPC__in BSTR serviceID,
/* [retval][out] */ __RPC__deref_out_opt IUpdateServiceRegistration **retval);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AddService2 )(
__RPC__in IUpdateServiceManager2 * This,
/* [in] */ __RPC__in BSTR serviceID,
/* [in] */ LONG flags,
/* [in] */ __RPC__in BSTR authorizationCabPath,
/* [retval][out] */ __RPC__deref_out_opt IUpdateServiceRegistration **retval);
END_INTERFACE
} IUpdateServiceManager2Vtbl;
interface IUpdateServiceManager2
{
CONST_VTBL struct IUpdateServiceManager2Vtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IUpdateServiceManager2_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IUpdateServiceManager2_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IUpdateServiceManager2_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IUpdateServiceManager2_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IUpdateServiceManager2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IUpdateServiceManager2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IUpdateServiceManager2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IUpdateServiceManager2_get_Services(This,retval) \
( (This)->lpVtbl -> get_Services(This,retval) )
#define IUpdateServiceManager2_AddService(This,serviceID,authorizationCabPath,retval) \
( (This)->lpVtbl -> AddService(This,serviceID,authorizationCabPath,retval) )
#define IUpdateServiceManager2_RegisterServiceWithAU(This,serviceID) \
( (This)->lpVtbl -> RegisterServiceWithAU(This,serviceID) )
#define IUpdateServiceManager2_RemoveService(This,serviceID) \
( (This)->lpVtbl -> RemoveService(This,serviceID) )
#define IUpdateServiceManager2_UnregisterServiceWithAU(This,serviceID) \
( (This)->lpVtbl -> UnregisterServiceWithAU(This,serviceID) )
#define IUpdateServiceManager2_AddScanPackageService(This,serviceName,scanFileLocation,flags,ppService) \
( (This)->lpVtbl -> AddScanPackageService(This,serviceName,scanFileLocation,flags,ppService) )
#define IUpdateServiceManager2_SetOption(This,optionName,optionValue) \
( (This)->lpVtbl -> SetOption(This,optionName,optionValue) )
#define IUpdateServiceManager2_get_ClientApplicationID(This,retval) \
( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )
#define IUpdateServiceManager2_put_ClientApplicationID(This,value) \
( (This)->lpVtbl -> put_ClientApplicationID(This,value) )
#define IUpdateServiceManager2_QueryServiceRegistration(This,serviceID,retval) \
( (This)->lpVtbl -> QueryServiceRegistration(This,serviceID,retval) )
#define IUpdateServiceManager2_AddService2(This,serviceID,flags,authorizationCabPath,retval) \
( (This)->lpVtbl -> AddService2(This,serviceID,flags,authorizationCabPath,retval) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IUpdateServiceManager2_INTERFACE_DEFINED__ */
#ifndef __IInstallationAgent_INTERFACE_DEFINED__
#define __IInstallationAgent_INTERFACE_DEFINED__
/* interface IInstallationAgent */
/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */
EXTERN_C const IID IID_IInstallationAgent;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("925cbc18-a2ea-4648-bf1c-ec8badcfe20a")
IInstallationAgent : public IDispatch
{
public:
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RecordInstallationResult(
/* [in] */ __RPC__in BSTR installationResultCookie,
/* [in] */ LONG hresult,
/* [in] */ __RPC__in_opt IStringCollection *extendedReportingData) = 0;
};
#else /* C style interface */
typedef struct IInstallationAgentVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IInstallationAgent * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IInstallationAgent * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IInstallationAgent * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IInstallationAgent * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IInstallationAgent * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IInstallationAgent * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IInstallationAgent * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RecordInstallationResult )(
__RPC__in IInstallationAgent * This,
/* [in] */ __RPC__in BSTR installationResultCookie,
/* [in] */ LONG hresult,
/* [in] */ __RPC__in_opt IStringCollection *extendedReportingData);
END_INTERFACE
} IInstallationAgentVtbl;
interface IInstallationAgent
{
CONST_VTBL struct IInstallationAgentVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define IInstallationAgent_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define IInstallationAgent_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define IInstallationAgent_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define IInstallationAgent_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define IInstallationAgent_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define IInstallationAgent_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define IInstallationAgent_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#define IInstallationAgent_RecordInstallationResult(This,installationResultCookie,hresult,extendedReportingData) \
( (This)->lpVtbl -> RecordInstallationResult(This,installationResultCookie,hresult,extendedReportingData) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __IInstallationAgent_INTERFACE_DEFINED__ */
#ifndef __WUApiLib_LIBRARY_DEFINED__
#define __WUApiLib_LIBRARY_DEFINED__
/* library WUApiLib */
/* [helpstring][version][uuid] */
typedef /* [v1_enum][helpstring][public] */
enum tagUpdateLockdownOption
{ uloForWebsiteAccess = 0x1
} UpdateLockdownOption;
typedef /* [v1_enum][helpstring][public] */
enum tagAddServiceFlag
{ asfAllowPendingRegistration = 0x1,
asfAllowOnlineRegistration = 0x2,
asfRegisterServiceWithAU = 0x4
} AddServiceFlag;
typedef /* [v1_enum][helpstring][public] */
enum tagUpdateServiceOption
{ usoNonVolatileService = 0x1
} UpdateServiceOption;
EXTERN_C const IID LIBID_WUApiLib;
EXTERN_C const CLSID CLSID_StringCollection;
#ifdef __cplusplus
class DECLSPEC_UUID("72C97D74-7C3B-40AE-B77D-ABDB22EBA6FB")
StringCollection;
#endif
EXTERN_C const CLSID CLSID_UpdateSearcher;
#ifdef __cplusplus
class DECLSPEC_UUID("B699E5E8-67FF-4177-88B0-3684A3388BFB")
UpdateSearcher;
#endif
EXTERN_C const CLSID CLSID_WebProxy;
#ifdef __cplusplus
class DECLSPEC_UUID("650503cf-9108-4ddc-a2ce-6c2341e1c582")
WebProxy;
#endif
EXTERN_C const CLSID CLSID_SystemInformation;
#ifdef __cplusplus
class DECLSPEC_UUID("C01B9BA0-BEA7-41BA-B604-D0A36F469133")
SystemInformation;
#endif
EXTERN_C const CLSID CLSID_WindowsUpdateAgentInfo;
#ifdef __cplusplus
class DECLSPEC_UUID("C2E88C2F-6F5B-4AAA-894B-55C847AD3A2D")
WindowsUpdateAgentInfo;
#endif
EXTERN_C const CLSID CLSID_AutomaticUpdates;
#ifdef __cplusplus
class DECLSPEC_UUID("BFE18E9C-6D87-4450-B37C-E02F0B373803")
AutomaticUpdates;
#endif
EXTERN_C const CLSID CLSID_UpdateCollection;
#ifdef __cplusplus
class DECLSPEC_UUID("13639463-00DB-4646-803D-528026140D88")
UpdateCollection;
#endif
EXTERN_C const CLSID CLSID_UpdateDownloader;
#ifdef __cplusplus
class DECLSPEC_UUID("5BAF654A-5A07-4264-A255-9FF54C7151E7")
UpdateDownloader;
#endif
EXTERN_C const CLSID CLSID_UpdateInstaller;
#ifdef __cplusplus
class DECLSPEC_UUID("D2E0FE7F-D23E-48E1-93C0-6FA8CC346474")
UpdateInstaller;
#endif
EXTERN_C const CLSID CLSID_UpdateSession;
#ifdef __cplusplus
class DECLSPEC_UUID("4CB43D7F-7EEE-4906-8698-60DA1C38F2FE")
UpdateSession;
#endif
EXTERN_C const CLSID CLSID_UpdateServiceManager;
#ifdef __cplusplus
class DECLSPEC_UUID("F8D253D9-89A4-4DAA-87B6-1168369F0B21")
UpdateServiceManager;
#endif
EXTERN_C const CLSID CLSID_InstallationAgent;
#ifdef __cplusplus
class DECLSPEC_UUID("317E92FC-1679-46FD-A0B5-F08914DD8623")
InstallationAgent;
#endif
#endif /* __WUApiLib_LIBRARY_DEFINED__ */
/* Additional Prototypes for ALL interfaces */
unsigned long __RPC_USER BSTR_UserSize( __RPC__in unsigned long *, unsigned long , __RPC__in BSTR * );
unsigned char * __RPC_USER BSTR_UserMarshal( __RPC__in unsigned long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in BSTR * );
unsigned char * __RPC_USER BSTR_UserUnmarshal(__RPC__in unsigned long *, __RPC__in_xcount(0) unsigned char *, __RPC__out BSTR * );
void __RPC_USER BSTR_UserFree( __RPC__in unsigned long *, __RPC__in BSTR * );
unsigned long __RPC_USER HWND_UserSize( __RPC__in unsigned long *, unsigned long , __RPC__in HWND * );
unsigned char * __RPC_USER HWND_UserMarshal( __RPC__in unsigned long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in HWND * );
unsigned char * __RPC_USER HWND_UserUnmarshal(__RPC__in unsigned long *, __RPC__in_xcount(0) unsigned char *, __RPC__out HWND * );
void __RPC_USER HWND_UserFree( __RPC__in unsigned long *, __RPC__in HWND * );
unsigned long __RPC_USER VARIANT_UserSize( __RPC__in unsigned long *, unsigned long , __RPC__in VARIANT * );
unsigned char * __RPC_USER VARIANT_UserMarshal( __RPC__in unsigned long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in VARIANT * );
unsigned char * __RPC_USER VARIANT_UserUnmarshal(__RPC__in unsigned long *, __RPC__in_xcount(0) unsigned char *, __RPC__out VARIANT * );
void __RPC_USER VARIANT_UserFree( __RPC__in unsigned long *, __RPC__in VARIANT * );
/* end of Additional Prototypes */
#ifdef __cplusplus
}
#endif
#endif
================================================
FILE: include/wuerror.h
================================================
/***************************************************************************
* *
* wuerror.mc -- error code definitions for Windows Update. *
* *
* Copyright (c) Microsoft Corporation. All rights reserved. *
* *
***************************************************************************/
#ifndef _WUERROR_
#define _WUERROR_
#if defined (_MSC_VER) && (_MSC_VER >= 1020) && !defined(__midl)
#pragma once
#endif
#ifdef RC_INVOKED
#define _HRESULT_TYPEDEF_(_sc) _sc
#else // RC_INVOKED
#define _HRESULT_TYPEDEF_(_sc) ((HRESULT)_sc)
#endif // RC_INVOKED
///////////////////////////////////////////////////////////////////////////////
// Windows Update Success Codes
///////////////////////////////////////////////////////////////////////////////
//
// Values are 32 bit values laid out as follows:
//
// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
// +---+-+-+-----------------------+-------------------------------+
// |Sev|C|R| Facility | Code |
// +---+-+-+-----------------------+-------------------------------+
//
// where
//
// Sev - is the severity code
//
// 00 - Success
// 01 - Informational
// 10 - Warning
// 11 - Error
//
// C - is the Customer code flag
//
// R - is a reserved bit
//
// Facility - is the facility code
//
// Code - is the facility's status code
//
//
// Define the facility codes
//
//
// Define the severity codes
//
//
// MessageId: WU_S_SERVICE_STOP
//
// MessageText:
//
// Windows Update Agent was stopped successfully.
//
#define WU_S_SERVICE_STOP _HRESULT_TYPEDEF_(0x00240001L)
//
// MessageId: WU_S_SELFUPDATE
//
// MessageText:
//
// Windows Update Agent updated itself.
//
#define WU_S_SELFUPDATE _HRESULT_TYPEDEF_(0x00240002L)
//
// MessageId: WU_S_UPDATE_ERROR
//
// MessageText:
//
// Operation completed successfully but there were errors applying the updates.
//
#define WU_S_UPDATE_ERROR _HRESULT_TYPEDEF_(0x00240003L)
//
// MessageId: WU_S_MARKED_FOR_DISCONNECT
//
// MessageText:
//
// A callback was marked to be disconnected later because the request to disconnect the operation came while a callback was executing.
//
#define WU_S_MARKED_FOR_DISCONNECT _HRESULT_TYPEDEF_(0x00240004L)
//
// MessageId: WU_S_REBOOT_REQUIRED
//
// MessageText:
//
// The system must be restarted to complete installation of the update.
//
#define WU_S_REBOOT_REQUIRED _HRESULT_TYPEDEF_(0x00240005L)
//
// MessageId: WU_S_ALREADY_INSTALLED
//
// MessageText:
//
// The update to be installed is already installed on the system.
//
#define WU_S_ALREADY_INSTALLED _HRESULT_TYPEDEF_(0x00240006L)
//
// MessageId: WU_S_ALREADY_UNINSTALLED
//
// MessageText:
//
// The update to be removed is not installed on the system.
//
#define WU_S_ALREADY_UNINSTALLED _HRESULT_TYPEDEF_(0x00240007L)
//
// MessageId: WU_S_ALREADY_DOWNLOADED
//
// MessageText:
//
// The update to be downloaded has already been downloaded.
//
#define WU_S_ALREADY_DOWNLOADED _HRESULT_TYPEDEF_(0x00240008L)
//
// MessageId: WU_S_UH_INSTALLSTILLPENDING
//
// MessageText:
//
// The installation operation for the update is still in progress.
//
#define WU_S_UH_INSTALLSTILLPENDING _HRESULT_TYPEDEF_(0x00242015L)
///////////////////////////////////////////////////////////////////////////////
// Windows Update Error Codes
///////////////////////////////////////////////////////////////////////////////
//
// MessageId: WU_E_NO_SERVICE
//
// MessageText:
//
// Windows Update Agent was unable to provide the service.
//
#define WU_E_NO_SERVICE _HRESULT_TYPEDEF_(0x80240001L)
//
// MessageId: WU_E_MAX_CAPACITY_REACHED
//
// MessageText:
//
// The maximum capacity of the service was exceeded.
//
#define WU_E_MAX_CAPACITY_REACHED _HRESULT_TYPEDEF_(0x80240002L)
//
// MessageId: WU_E_UNKNOWN_ID
//
// MessageText:
//
// An ID cannot be found.
//
#define WU_E_UNKNOWN_ID _HRESULT_TYPEDEF_(0x80240003L)
//
// MessageId: WU_E_NOT_INITIALIZED
//
// MessageText:
//
// The object could not be initialized.
//
#define WU_E_NOT_INITIALIZED _HRESULT_TYPEDEF_(0x80240004L)
//
// MessageId: WU_E_RANGEOVERLAP
//
// MessageText:
//
// The update handler requested a byte range overlapping a previously requested range.
//
#define WU_E_RANGEOVERLAP _HRESULT_TYPEDEF_(0x80240005L)
//
// MessageId: WU_E_TOOMANYRANGES
//
// MessageText:
//
// The requested number of byte ranges exceeds the maximum number (2^31 - 1).
//
#define WU_E_TOOMANYRANGES _HRESULT_TYPEDEF_(0x80240006L)
//
// MessageId: WU_E_INVALIDINDEX
//
// MessageText:
//
// The index to a collection was invalid.
//
#define WU_E_INVALIDINDEX _HRESULT_TYPEDEF_(0x80240007L)
//
// MessageId: WU_E_ITEMNOTFOUND
//
// MessageText:
//
// The key for the item queried could not be found.
//
#define WU_E_ITEMNOTFOUND _HRESULT_TYPEDEF_(0x80240008L)
//
// MessageId: WU_E_OPERATIONINPROGRESS
//
// MessageText:
//
// Another conflicting operation was in progress. Some operations such as installation cannot be performed twice simultaneously.
//
#define WU_E_OPERATIONINPROGRESS _HRESULT_TYPEDEF_(0x80240009L)
//
// MessageId: WU_E_COULDNOTCANCEL
//
// MessageText:
//
// Cancellation of the operation was not allowed.
//
#define WU_E_COULDNOTCANCEL _HRESULT_TYPEDEF_(0x8024000AL)
//
// MessageId: WU_E_CALL_CANCELLED
//
// MessageText:
//
// Operation was cancelled.
//
#define WU_E_CALL_CANCELLED _HRESULT_TYPEDEF_(0x8024000BL)
//
// MessageId: WU_E_NOOP
//
// MessageText:
//
// No operation was required.
//
#define WU_E_NOOP _HRESULT_TYPEDEF_(0x8024000CL)
//
// MessageId: WU_E_XML_MISSINGDATA
//
// MessageText:
//
// Windows Update Agent could not find required information in the update's XML data.
//
#define WU_E_XML_MISSINGDATA _HRESULT_TYPEDEF_(0x8024000DL)
//
// MessageId: WU_E_XML_INVALID
//
// MessageText:
//
// Windows Update Agent found invalid information in the update's XML data.
//
#define WU_E_XML_INVALID _HRESULT_TYPEDEF_(0x8024000EL)
//
// MessageId: WU_E_CYCLE_DETECTED
//
// MessageText:
//
// Circular update relationships were detected in the metadata.
//
#define WU_E_CYCLE_DETECTED _HRESULT_TYPEDEF_(0x8024000FL)
//
// MessageId: WU_E_TOO_DEEP_RELATION
//
// MessageText:
//
// Update relationships too deep to evaluate were evaluated.
//
#define WU_E_TOO_DEEP_RELATION _HRESULT_TYPEDEF_(0x80240010L)
//
// MessageId: WU_E_INVALID_RELATIONSHIP
//
// MessageText:
//
// An invalid update relationship was detected.
//
#define WU_E_INVALID_RELATIONSHIP _HRESULT_TYPEDEF_(0x80240011L)
//
// MessageId: WU_E_REG_VALUE_INVALID
//
// MessageText:
//
// An invalid registry value was read.
//
#define WU_E_REG_VALUE_INVALID _HRESULT_TYPEDEF_(0x80240012L)
//
// MessageId: WU_E_DUPLICATE_ITEM
//
// MessageText:
//
// Operation tried to add a duplicate item to a list.
//
#define WU_E_DUPLICATE_ITEM _HRESULT_TYPEDEF_(0x80240013L)
//
// MessageId: WU_E_INVALID_INSTALL_REQUESTED
//
// MessageText:
//
// Updates requested for install are not installable by caller.
//
#define WU_E_INVALID_INSTALL_REQUESTED _HRESULT_TYPEDEF_(0x80240014L)
//
// MessageId: WU_E_INSTALL_NOT_ALLOWED
//
// MessageText:
//
// Operation tried to install while another installation was in progress or the system was pending a mandatory restart.
//
#define WU_E_INSTALL_NOT_ALLOWED _HRESULT_TYPEDEF_(0x80240016L)
//
// MessageId: WU_E_NOT_APPLICABLE
//
// MessageText:
//
// Operation was not performed because there are no applicable updates.
//
#define WU_E_NOT_APPLICABLE _HRESULT_TYPEDEF_(0x80240017L)
//
// MessageId: WU_E_NO_USERTOKEN
//
// MessageText:
//
// Operation failed because a required user token is missing.
//
#define WU_E_NO_USERTOKEN _HRESULT_TYPEDEF_(0x80240018L)
//
// MessageId: WU_E_EXCLUSIVE_INSTALL_CONFLICT
//
// MessageText:
//
// An exclusive update cannot be installed with other updates at the same time.
//
#define WU_E_EXCLUSIVE_INSTALL_CONFLICT _HRESULT_TYPEDEF_(0x80240019L)
//
// MessageId: WU_E_POLICY_NOT_SET
//
// MessageText:
//
// A policy value was not set.
//
#define WU_E_POLICY_NOT_SET _HRESULT_TYPEDEF_(0x8024001AL)
//
// MessageId: WU_E_SELFUPDATE_IN_PROGRESS
//
// MessageText:
//
// The operation could not be performed because the Windows Update Agent is self-updating.
//
#define WU_E_SELFUPDATE_IN_PROGRESS _HRESULT_TYPEDEF_(0x8024001BL)
//
// MessageId: WU_E_INVALID_UPDATE
//
// MessageText:
//
// An update contains invalid metadata.
//
#define WU_E_INVALID_UPDATE _HRESULT_TYPEDEF_(0x8024001DL)
//
// MessageId: WU_E_SERVICE_STOP
//
// MessageText:
//
// Operation did not complete because the service or system was being shut down.
//
#define WU_E_SERVICE_STOP _HRESULT_TYPEDEF_(0x8024001EL)
//
// MessageId: WU_E_NO_CONNECTION
//
// MessageText:
//
// Operation did not complete because the network connection was unavailable.
//
#define WU_E_NO_CONNECTION _HRESULT_TYPEDEF_(0x8024001FL)
//
// MessageId: WU_E_NO_INTERACTIVE_USER
//
// MessageText:
//
// Operation did not complete because there is no logged-on interactive user.
//
#define WU_E_NO_INTERACTIVE_USER _HRESULT_TYPEDEF_(0x80240020L)
//
// MessageId: WU_E_TIME_OUT
//
// MessageText:
//
// Operation did not complete because it timed out.
//
#define WU_E_TIME_OUT _HRESULT_TYPEDEF_(0x80240021L)
//
// MessageId: WU_E_ALL_UPDATES_FAILED
//
// MessageText:
//
// Operation failed for all the updates.
//
#define WU_E_ALL_UPDATES_FAILED _HRESULT_TYPEDEF_(0x80240022L)
//
// MessageId: WU_E_EULAS_DECLINED
//
// MessageText:
//
// The license terms for all updates were declined.
//
#define WU_E_EULAS_DECLINED _HRESULT_TYPEDEF_(0x80240023L)
//
// MessageId: WU_E_NO_UPDATE
//
// MessageText:
//
// There are no updates.
//
#define WU_E_NO_UPDATE _HRESULT_TYPEDEF_(0x80240024L)
//
// MessageId: WU_E_USER_ACCESS_DISABLED
//
// MessageText:
//
// Group Policy settings prevented access to Windows Update.
//
#define WU_E_USER_ACCESS_DISABLED _HRESULT_TYPEDEF_(0x80240025L)
//
// MessageId: WU_E_INVALID_UPDATE_TYPE
//
// MessageText:
//
// The type of update is invalid.
//
#define WU_E_INVALID_UPDATE_TYPE _HRESULT_TYPEDEF_(0x80240026L)
//
// MessageId: WU_E_URL_TOO_LONG
//
// MessageText:
//
// The URL exceeded the maximum length.
//
#define WU_E_URL_TOO_LONG _HRESULT_TYPEDEF_(0x80240027L)
//
// MessageId: WU_E_UNINSTALL_NOT_ALLOWED
//
// MessageText:
//
// The update could not be uninstalled because the request did not originate from a WSUS server.
//
#define WU_E_UNINSTALL_NOT_ALLOWED _HRESULT_TYPEDEF_(0x80240028L)
//
// MessageId: WU_E_INVALID_PRODUCT_LICENSE
//
// MessageText:
//
// Search may have missed some updates before there is an unlicensed application on the system.
//
#define WU_E_INVALID_PRODUCT_LICENSE _HRESULT_TYPEDEF_(0x80240029L)
//
// MessageId: WU_E_MISSING_HANDLER
//
// MessageText:
//
// A component required to detect applicable updates was missing.
//
#define WU_E_MISSING_HANDLER _HRESULT_TYPEDEF_(0x8024002AL)
//
// MessageId: WU_E_LEGACYSERVER
//
// MessageText:
//
// An operation did not complete because it requires a newer version of server.
//
#define WU_E_LEGACYSERVER _HRESULT_TYPEDEF_(0x8024002BL)
//
// MessageId: WU_E_BIN_SOURCE_ABSENT
//
// MessageText:
//
// A delta-compressed update could not be installed because it required the source.
//
#define WU_E_BIN_SOURCE_ABSENT _HRESULT_TYPEDEF_(0x8024002CL)
//
// MessageId: WU_E_SOURCE_ABSENT
//
// MessageText:
//
// A full-file update could not be installed because it required the source.
//
#define WU_E_SOURCE_ABSENT _HRESULT_TYPEDEF_(0x8024002DL)
//
// MessageId: WU_E_WU_DISABLED
//
// MessageText:
//
// Access to an unmanaged server is not allowed.
//
#define WU_E_WU_DISABLED _HRESULT_TYPEDEF_(0x8024002EL)
//
// MessageId: WU_E_CALL_CANCELLED_BY_POLICY
//
// MessageText:
//
// Operation did not complete because the DisableWindowsUpdateAccess policy was set.
//
#define WU_E_CALL_CANCELLED_BY_POLICY _HRESULT_TYPEDEF_(0x8024002FL)
//
// MessageId: WU_E_INVALID_PROXY_SERVER
//
// MessageText:
//
// The format of the proxy list was invalid.
//
#define WU_E_INVALID_PROXY_SERVER _HRESULT_TYPEDEF_(0x80240030L)
//
// MessageId: WU_E_INVALID_FILE
//
// MessageText:
//
// The file is in the wrong format.
//
#define WU_E_INVALID_FILE _HRESULT_TYPEDEF_(0x80240031L)
//
// MessageId: WU_E_INVALID_CRITERIA
//
// MessageText:
//
// The search criteria string was invalid.
//
#define WU_E_INVALID_CRITERIA _HRESULT_TYPEDEF_(0x80240032L)
//
// MessageId: WU_E_EULA_UNAVAILABLE
//
// MessageText:
//
// License terms could not be downloaded.
//
#define WU_E_EULA_UNAVAILABLE _HRESULT_TYPEDEF_(0x80240033L)
//
// MessageId: WU_E_DOWNLOAD_FAILED
//
// MessageText:
//
// Update failed to download.
//
#define WU_E_DOWNLOAD_FAILED _HRESULT_TYPEDEF_(0x80240034L)
//
// MessageId: WU_E_UPDATE_NOT_PROCESSED
//
// MessageText:
//
// The update was not processed.
//
#define WU_E_UPDATE_NOT_PROCESSED _HRESULT_TYPEDEF_(0x80240035L)
//
// MessageId: WU_E_INVALID_OPERATION
//
// MessageText:
//
// The object's current state did not allow the operation.
//
#define WU_E_INVALID_OPERATION _HRESULT_TYPEDEF_(0x80240036L)
//
// MessageId: WU_E_NOT_SUPPORTED
//
// MessageText:
//
// The functionality for the operation is not supported.
//
#define WU_E_NOT_SUPPORTED _HRESULT_TYPEDEF_(0x80240037L)
//
// MessageId: WU_E_WINHTTP_INVALID_FILE
//
// MessageText:
//
// The downloaded file has an unexpected content type.
//
#define WU_E_WINHTTP_INVALID_FILE _HRESULT_TYPEDEF_(0x80240038L)
//
// MessageId: WU_E_TOO_MANY_RESYNC
//
// MessageText:
//
// Agent is asked by server to resync too many times.
//
#define WU_E_TOO_MANY_RESYNC _HRESULT_TYPEDEF_(0x80240039L)
//
// MessageId: WU_E_NO_SERVER_CORE_SUPPORT
//
// MessageText:
//
// WUA API method does not run on Server Core installation.
//
#define WU_E_NO_SERVER_CORE_SUPPORT _HRESULT_TYPEDEF_(0x80240040L)
//
// MessageId: WU_E_SYSPREP_IN_PROGRESS
//
// MessageText:
//
// Service is not available while sysprep is running.
//
#define WU_E_SYSPREP_IN_PROGRESS _HRESULT_TYPEDEF_(0x80240041L)
//
// MessageId: WU_E_UNKNOWN_SERVICE
//
// MessageText:
//
// The update service is no longer registered with AU.
//
#define WU_E_UNKNOWN_SERVICE _HRESULT_TYPEDEF_(0x80240042L)
//
// MessageId: WU_E_NO_UI_SUPPORT
//
// MessageText:
//
// There is no support for WUA UI.
//
#define WU_E_NO_UI_SUPPORT _HRESULT_TYPEDEF_(0x80240043L)
//
// MessageId: WU_E_PER_MACHINE_UPDATE_ACCESS_DENIED
//
// MessageText:
//
// Only administrators can perform this operation on per-machine updates.
//
#define WU_E_PER_MACHINE_UPDATE_ACCESS_DENIED _HRESULT_TYPEDEF_(0x80240044L)
//
// MessageId: WU_E_UNSUPPORTED_SEARCHSCOPE
//
// MessageText:
//
// A search was attempted with a scope that is not currently supported for this type of search.
//
#define WU_E_UNSUPPORTED_SEARCHSCOPE _HRESULT_TYPEDEF_(0x80240045L)
//
// MessageId: WU_E_BAD_FILE_URL
//
// MessageText:
//
// The URL does not point to a file.
//
#define WU_E_BAD_FILE_URL _HRESULT_TYPEDEF_(0x80240046L)
//
// MessageId: WU_E_NOTSUPPORTED
//
// MessageText:
//
// The operation requested is not supported.
//
#define WU_E_NOTSUPPORTED _HRESULT_TYPEDEF_(0x80240047L)
//
// MessageId: WU_E_INVALID_NOTIFICATION_INFO
//
// MessageText:
//
// The featured update notification info returned by the server is invalid.
//
#define WU_E_INVALID_NOTIFICATION_INFO _HRESULT_TYPEDEF_(0x80240048L)
//
// MessageId: WU_E_UNEXPECTED
//
// MessageText:
//
// An operation failed due to reasons not covered by another error code.
//
#define WU_E_UNEXPECTED _HRESULT_TYPEDEF_(0x80240FFFL)
///////////////////////////////////////////////////////////////////////////////
// Windows Installer minor errors
//
// The following errors are used to indicate that part of a search failed for
// MSI problems. Another part of the search may successfully return updates.
// All MSI minor codes should share the same error code range so that the caller
// tell that they are related to Windows Installer.
///////////////////////////////////////////////////////////////////////////////
//
// MessageId: WU_E_MSI_WRONG_VERSION
//
// MessageText:
//
// Search may have missed some updates because the Windows Installer is less than version 3.1.
//
#define WU_E_MSI_WRONG_VERSION _HRESULT_TYPEDEF_(0x80241001L)
//
// MessageId: WU_E_MSI_NOT_CONFIGURED
//
// MessageText:
//
// Search may have missed some updates because the Windows Installer is not configured.
//
#define WU_E_MSI_NOT_CONFIGURED _HRESULT_TYPEDEF_(0x80241002L)
//
// MessageId: WU_E_MSP_DISABLED
//
// MessageText:
//
// Search may have missed some updates because policy has disabled Windows Installer patching.
//
#define WU_E_MSP_DISABLED _HRESULT_TYPEDEF_(0x80241003L)
//
// MessageId: WU_E_MSI_WRONG_APP_CONTEXT
//
// MessageText:
//
// An update could not be applied because the application is installed per-user.
//
#define WU_E_MSI_WRONG_APP_CONTEXT _HRESULT_TYPEDEF_(0x80241004L)
//
// MessageId: WU_E_MSP_UNEXPECTED
//
// MessageText:
//
// Search may have missed some updates because there was a failure of the Windows Installer.
//
#define WU_E_MSP_UNEXPECTED _HRESULT_TYPEDEF_(0x80241FFFL)
///////////////////////////////////////////////////////////////////////////////
// Protocol Talker errors
//
// The following map to SOAPCLIENT_ERRORs from atlsoap.h. These errors
// are obtained from calling GetClientError() on the CClientWebService
// object.
///////////////////////////////////////////////////////////////////////////////
//
// MessageId: WU_E_PT_SOAPCLIENT_BASE
//
// MessageText:
//
// WU_E_PT_SOAPCLIENT_* error codes map to the SOAPCLIENT_ERROR enum of the ATL Server Library.
//
#define WU_E_PT_SOAPCLIENT_BASE _HRESULT_TYPEDEF_(0x80244000L)
//
// MessageId: WU_E_PT_SOAPCLIENT_INITIALIZE
//
// MessageText:
//
// Same as SOAPCLIENT_INITIALIZE_ERROR - initialization of the SOAP client failed, possibly because of an MSXML installation failure.
//
#define WU_E_PT_SOAPCLIENT_INITIALIZE _HRESULT_TYPEDEF_(0x80244001L)
//
// MessageId: WU_E_PT_SOAPCLIENT_OUTOFMEMORY
//
// MessageText:
//
// Same as SOAPCLIENT_OUTOFMEMORY - SOAP client failed because it ran out of memory.
//
#define WU_E_PT_SOAPCLIENT_OUTOFMEMORY _HRESULT_TYPEDEF_(0x80244002L)
//
// MessageId: WU_E_PT_SOAPCLIENT_GENERATE
//
// MessageText:
//
// Same as SOAPCLIENT_GENERATE_ERROR - SOAP client failed to generate the request.
//
#define WU_E_PT_SOAPCLIENT_GENERATE _HRESULT_TYPEDEF_(0x80244003L)
//
// MessageId: WU_E_PT_SOAPCLIENT_CONNECT
//
// MessageText:
//
// Same as SOAPCLIENT_CONNECT_ERROR - SOAP client failed to connect to the server.
//
#define WU_E_PT_SOAPCLIENT_CONNECT _HRESULT_TYPEDEF_(0x80244004L)
//
// MessageId: WU_E_PT_SOAPCLIENT_SEND
//
// MessageText:
//
// Same as SOAPCLIENT_SEND_ERROR - SOAP client failed to send a message for reasons of WU_E_WINHTTP_* error codes.
//
#define WU_E_PT_SOAPCLIENT_SEND _HRESULT_TYPEDEF_(0x80244005L)
//
// MessageId: WU_E_PT_SOAPCLIENT_SERVER
//
// MessageText:
//
// Same as SOAPCLIENT_SERVER_ERROR - SOAP client failed because there was a server error.
//
#define WU_E_PT_SOAPCLIENT_SERVER _HRESULT_TYPEDEF_(0x80244006L)
//
// MessageId: WU_E_PT_SOAPCLIENT_SOAPFAULT
//
// MessageText:
//
// Same as SOAPCLIENT_SOAPFAULT - SOAP client failed because there was a SOAP fault for reasons of WU_E_PT_SOAP_* error codes.
//
#define WU_E_PT_SOAPCLIENT_SOAPFAULT _HRESULT_TYPEDEF_(0x80244007L)
//
// MessageId: WU_E_PT_SOAPCLIENT_PARSEFAULT
//
// MessageText:
//
// Same as SOAPCLIENT_PARSEFAULT_ERROR - SOAP client failed to parse a SOAP fault.
//
#define WU_E_PT_SOAPCLIENT_PARSEFAULT _HRESULT_TYPEDEF_(0x80244008L)
//
// MessageId: WU_E_PT_SOAPCLIENT_READ
//
// MessageText:
//
// Same as SOAPCLIENT_READ_ERROR - SOAP client failed while reading the response from the server.
//
#define WU_E_PT_SOAPCLIENT_READ _HRESULT_TYPEDEF_(0x80244009L)
//
// MessageId: WU_E_PT_SOAPCLIENT_PARSE
//
// MessageText:
//
// Same as SOAPCLIENT_PARSE_ERROR - SOAP client failed to parse the response from the server.
//
#define WU_E_PT_SOAPCLIENT_PARSE _HRESULT_TYPEDEF_(0x8024400AL)
// The following map to SOAP_ERROR_CODEs from atlsoap.h. These errors
// are obtained from the m_fault.m_soapErrCode member on the
// CClientWebService object when GetClientError() returned
// SOAPCLIENT_SOAPFAULT.
//
// MessageId: WU_E_PT_SOAP_VERSION
//
// MessageText:
//
// Same as SOAP_E_VERSION_MISMATCH - SOAP client found an unrecognizable namespace for the SOAP envelope.
//
#define WU_E_PT_SOAP_VERSION _HRESULT_TYPEDEF_(0x8024400BL)
//
// MessageId: WU_E_PT_SOAP_MUST_UNDERSTAND
//
// MessageText:
//
// Same as SOAP_E_MUST_UNDERSTAND - SOAP client was unable to understand a header.
//
#define WU_E_PT_SOAP_MUST_UNDERSTAND _HRESULT_TYPEDEF_(0x8024400CL)
//
// MessageId: WU_E_PT_SOAP_CLIENT
//
// MessageText:
//
// Same as SOAP_E_CLIENT - SOAP client found the message was malformed; fix before resending.
//
#define WU_E_PT_SOAP_CLIENT _HRESULT_TYPEDEF_(0x8024400DL)
//
// MessageId: WU_E_PT_SOAP_SERVER
//
// MessageText:
//
// Same as SOAP_E_SERVER - The SOAP message could not be processed due to a server error; resend later.
//
#define WU_E_PT_SOAP_SERVER _HRESULT_TYPEDEF_(0x8024400EL)
//
// MessageId: WU_E_PT_WMI_ERROR
//
// MessageText:
//
// There was an unspecified Windows Management Instrumentation (WMI) error.
//
#define WU_E_PT_WMI_ERROR _HRESULT_TYPEDEF_(0x8024400FL)
//
// MessageId: WU_E_PT_EXCEEDED_MAX_SERVER_TRIPS
//
// MessageText:
//
// The number of round trips to the server exceeded the maximum limit.
//
#define WU_E_PT_EXCEEDED_MAX_SERVER_TRIPS _HRESULT_TYPEDEF_(0x80244010L)
//
// MessageId: WU_E_PT_SUS_SERVER_NOT_SET
//
// MessageText:
//
// WUServer policy value is missing in the registry.
//
#define WU_E_PT_SUS_SERVER_NOT_SET _HRESULT_TYPEDEF_(0x80244011L)
//
// MessageId: WU_E_PT_DOUBLE_INITIALIZATION
//
// MessageText:
//
// Initialization failed because the object was already initialized.
//
#define WU_E_PT_DOUBLE_INITIALIZATION _HRESULT_TYPEDEF_(0x80244012L)
//
// MessageId: WU_E_PT_INVALID_COMPUTER_NAME
//
// MessageText:
//
// The computer name could not be determined.
//
#define WU_E_PT_INVALID_COMPUTER_NAME _HRESULT_TYPEDEF_(0x80244013L)
//
// MessageId: WU_E_PT_REFRESH_CACHE_REQUIRED
//
// MessageText:
//
// The reply from the server indicates that the server was changed or the cookie was invalid; refresh the state of the internal cache and retry.
//
#define WU_E_PT_REFRESH_CACHE_REQUIRED _HRESULT_TYPEDEF_(0x80244015L)
//
// MessageId: WU_E_PT_HTTP_STATUS_BAD_REQUEST
//
// MessageText:
//
// Same as HTTP status 400 - the server could not process the request due to invalid syntax.
//
#define WU_E_PT_HTTP_STATUS_BAD_REQUEST _HRESULT_TYPEDEF_(0x80244016L)
//
// MessageId: WU_E_PT_HTTP_STATUS_DENIED
//
// MessageText:
//
// Same as HTTP status 401 - the requested resource requires user authentication.
//
#define WU_E_PT_HTTP_STATUS_DENIED _HRESULT_TYPEDEF_(0x80244017L)
//
// MessageId: WU_E_PT_HTTP_STATUS_FORBIDDEN
//
// MessageText:
//
// Same as HTTP status 403 - server understood the request, but declined to fulfill it.
//
#define WU_E_PT_HTTP_STATUS_FORBIDDEN _HRESULT_TYPEDEF_(0x80244018L)
//
// MessageId: WU_E_PT_HTTP_STATUS_NOT_FOUND
//
// MessageText:
//
// Same as HTTP status 404 - the server cannot find the requested URI (Uniform Resource Identifier).
//
//
#define WU_E_PT_HTTP_STATUS_NOT_FOUND _HRESULT_TYPEDEF_(0x80244019L)
//
// MessageId: WU_E_PT_HTTP_STATUS_BAD_METHOD
//
// MessageText:
//
// Same as HTTP status 405 - the HTTP method is not allowed.
//
#define WU_E_PT_HTTP_STATUS_BAD_METHOD _HRESULT_TYPEDEF_(0x8024401AL)
//
// MessageId: WU_E_PT_HTTP_STATUS_PROXY_AUTH_REQ
//
// MessageText:
//
// Same as HTTP status 407 - proxy authentication is required.
//
#define WU_E_PT_HTTP_STATUS_PROXY_AUTH_REQ _HRESULT_TYPEDEF_(0x8024401BL)
//
// MessageId: WU_E_PT_HTTP_STATUS_REQUEST_TIMEOUT
//
// MessageText:
//
// Same as HTTP status 408 - the server timed out waiting for the request.
//
#define WU_E_PT_HTTP_STATUS_REQUEST_TIMEOUT _HRESULT_TYPEDEF_(0x8024401CL)
//
// MessageId: WU_E_PT_HTTP_STATUS_CONFLICT
//
// MessageText:
//
// Same as HTTP status 409 - the request was not completed due to a conflict with the current state of the resource.
//
#define WU_E_PT_HTTP_STATUS_CONFLICT _HRESULT_TYPEDEF_(0x8024401DL)
//
// MessageId: WU_E_PT_HTTP_STATUS_GONE
//
// MessageText:
//
// Same as HTTP status 410 - requested resource is no longer available at the server.
//
#define WU_E_PT_HTTP_STATUS_GONE _HRESULT_TYPEDEF_(0x8024401EL)
//
// MessageId: WU_E_PT_HTTP_STATUS_SERVER_ERROR
//
// MessageText:
//
// Same as HTTP status 500 - an error internal to the server prevented fulfilling the request.
//
#define WU_E_PT_HTTP_STATUS_SERVER_ERROR _HRESULT_TYPEDEF_(0x8024401FL)
//
// MessageId: WU_E_PT_HTTP_STATUS_NOT_SUPPORTED
//
// MessageText:
//
// Same as HTTP status 500 - server does not support the functionality required to fulfill the request.
//
#define WU_E_PT_HTTP_STATUS_NOT_SUPPORTED _HRESULT_TYPEDEF_(0x80244020L)
//
// MessageId: WU_E_PT_HTTP_STATUS_BAD_GATEWAY
//
// MessageText:
//
// Same as HTTP status 502 - the server, while acting as a gateway or proxy, received an invalid response from the upstream server it accessed in attempting to fulfill the request.
//
#define WU_E_PT_HTTP_STATUS_BAD_GATEWAY _HRESULT_TYPEDEF_(0x80244021L)
//
// MessageId: WU_E_PT_HTTP_STATUS_SERVICE_UNAVAIL
//
// MessageText:
//
// Same as HTTP status 503 - the service is temporarily overloaded.
//
#define WU_E_PT_HTTP_STATUS_SERVICE_UNAVAIL _HRESULT_TYPEDEF_(0x80244022L)
//
// MessageId: WU_E_PT_HTTP_STATUS_GATEWAY_TIMEOUT
//
// MessageText:
//
// Same as HTTP status 503 - the request was timed out waiting for a gateway.
//
#define WU_E_PT_HTTP_STATUS_GATEWAY_TIMEOUT _HRESULT_TYPEDEF_(0x80244023L)
//
// MessageId: WU_E_PT_HTTP_STATUS_VERSION_NOT_SUP
//
// MessageText:
//
// Same as HTTP status 505 - the server does not support the HTTP protocol version used for the request.
//
#define WU_E_PT_HTTP_STATUS_VERSION_NOT_SUP _HRESULT_TYPEDEF_(0x80244024L)
//
// MessageId: WU_E_PT_FILE_LOCATIONS_CHANGED
//
// MessageText:
//
// Operation failed due to a changed file location; refresh internal state and resend.
//
#define WU_E_PT_FILE_LOCATIONS_CHANGED _HRESULT_TYPEDEF_(0x80244025L)
//
// MessageId: WU_E_PT_REGISTRATION_NOT_SUPPORTED
//
// MessageText:
//
// Operation failed because Windows Update Agent does not support registration with a non-WSUS server.
//
#define WU_E_PT_REGISTRATION_NOT_SUPPORTED _HRESULT_TYPEDEF_(0x80244026L)
//
// MessageId: WU_E_PT_NO_AUTH_PLUGINS_REQUESTED
//
// MessageText:
//
// The server returned an empty authentication information list.
//
#define WU_E_PT_NO_AUTH_PLUGINS_REQUESTED _HRESULT_TYPEDEF_(0x80244027L)
//
// MessageId: WU_E_PT_NO_AUTH_COOKIES_CREATED
//
// MessageText:
//
// Windows Update Agent was unable to create any valid authentication cookies.
//
#define WU_E_PT_NO_AUTH_COOKIES_CREATED _HRESULT_TYPEDEF_(0x80244028L)
//
// MessageId: WU_E_PT_INVALID_CONFIG_PROP
//
// MessageText:
//
// A configuration property value was wrong.
//
#define WU_E_PT_INVALID_CONFIG_PROP _HRESULT_TYPEDEF_(0x80244029L)
//
// MessageId: WU_E_PT_CONFIG_PROP_MISSING
//
// MessageText:
//
// A configuration property value was missing.
//
#define WU_E_PT_CONFIG_PROP_MISSING _HRESULT_TYPEDEF_(0x8024402AL)
//
// MessageId: WU_E_PT_HTTP_STATUS_NOT_MAPPED
//
// MessageText:
//
// The HTTP request could not be completed and the reason did not correspond to any of the WU_E_PT_HTTP_* error codes.
//
#define WU_E_PT_HTTP_STATUS_NOT_MAPPED _HRESULT_TYPEDEF_(0x8024402BL)
//
// MessageId: WU_E_PT_WINHTTP_NAME_NOT_RESOLVED
//
// MessageText:
//
// Same as ERROR_WINHTTP_NAME_NOT_RESOLVED - the proxy server or target server name cannot be resolved.
//
#define WU_E_PT_WINHTTP_NAME_NOT_RESOLVED _HRESULT_TYPEDEF_(0x8024402CL)
//
// MessageId: WU_E_PT_SAME_REDIR_ID
//
// MessageText:
//
// Windows Update Agent failed to download a redirector cabinet file with a new redirectorId value from the server during the recovery.
//
#define WU_E_PT_SAME_REDIR_ID _HRESULT_TYPEDEF_(0x8024502DL)
//
// MessageId: WU_E_PT_NO_MANAGED_RECOVER
//
// MessageText:
//
// A redirector recovery action did not complete because the server is managed.
//
#define WU_E_PT_NO_MANAGED_RECOVER _HRESULT_TYPEDEF_(0x8024502EL)
//
// MessageId: WU_E_PT_ECP_SUCCEEDED_WITH_ERRORS
//
// MessageText:
//
// External cab file processing completed with some errors.
//
#define WU_E_PT_ECP_SUCCEEDED_WITH_ERRORS _HRESULT_TYPEDEF_(0x8024402FL)
//
// MessageId: WU_E_PT_ECP_INIT_FAILED
//
// MessageText:
//
// The external cab processor initialization did not complete.
//
#define WU_E_PT_ECP_INIT_FAILED _HRESULT_TYPEDEF_(0x80244030L)
//
// MessageId: WU_E_PT_ECP_INVALID_FILE_FORMAT
//
// MessageText:
//
// The format of a metadata file was invalid.
//
#define WU_E_PT_ECP_INVALID_FILE_FORMAT _HRESULT_TYPEDEF_(0x80244031L)
//
// MessageId: WU_E_PT_ECP_INVALID_METADATA
//
// MessageText:
//
// External cab processor found invalid metadata.
//
#define WU_E_PT_ECP_INVALID_METADATA _HRESULT_TYPEDEF_(0x80244032L)
//
// MessageId: WU_E_PT_ECP_FAILURE_TO_EXTRACT_DIGEST
//
// MessageText:
//
// The file digest could not be extracted from an external cab file.
//
#define WU_E_PT_ECP_FAILURE_TO_EXTRACT_DIGEST _HRESULT_TYPEDEF_(0x80244033L)
//
// MessageId: WU_E_PT_ECP_FAILURE_TO_DECOMPRESS_CAB_FILE
//
// MessageText:
//
// An external cab file could not be decompressed.
//
#define WU_E_PT_ECP_FAILURE_TO_DECOMPRESS_CAB_FILE _HRESULT_TYPEDEF_(0x80244034L)
//
// MessageId: WU_E_PT_ECP_FILE_LOCATION_ERROR
//
// MessageText:
//
// External cab processor was unable to get file locations.
//
#define WU_E_PT_ECP_FILE_LOCATION_ERROR _HRESULT_TYPEDEF_(0x80244035L)
//
// MessageId: WU_E_PT_CATALOG_SYNC_REQUIRED
//
// MessageText:
//
// The server does not support category-specific search; Full catalog search has to be issued instead.
//
#define WU_E_PT_CATALOG_SYNC_REQUIRED _HRESULT_TYPEDEF_(0x80240436L)
//
// MessageId: WU_E_PT_UNEXPECTED
//
// MessageText:
//
// A communication error not covered by another WU_E_PT_* error code.
//
#define WU_E_PT_UNEXPECTED _HRESULT_TYPEDEF_(0x80244FFFL)
///////////////////////////////////////////////////////////////////////////////
// Redirector errors
//
// The following errors are generated by the components that download and
// parse the wuredir.cab
///////////////////////////////////////////////////////////////////////////////
//
// MessageId: WU_E_REDIRECTOR_LOAD_XML
//
// MessageText:
//
// The redirector XML document could not be loaded into the DOM class.
//
#define WU_E_REDIRECTOR_LOAD_XML _HRESULT_TYPEDEF_(0x80245001L)
//
// MessageId: WU_E_REDIRECTOR_S_FALSE
//
// MessageText:
//
// The redirector XML document is missing some required information.
//
#define WU_E_REDIRECTOR_S_FALSE _HRESULT_TYPEDEF_(0x80245002L)
//
// MessageId: WU_E_REDIRECTOR_ID_SMALLER
//
// MessageText:
//
// The redirectorId in the downloaded redirector cab is less than in the cached cab.
//
#define WU_E_REDIRECTOR_ID_SMALLER _HRESULT_TYPEDEF_(0x80245003L)
//
// MessageId: WU_E_REDIRECTOR_UNEXPECTED
//
// MessageText:
//
// The redirector failed for reasons not covered by another WU_E_REDIRECTOR_* error code.
//
#define WU_E_REDIRECTOR_UNEXPECTED _HRESULT_TYPEDEF_(0x80245FFFL)
///////////////////////////////////////////////////////////////////////////////
// driver util errors
//
// The device PnP enumerated device was pruned from the SystemSpec because
// one of the hardware or compatible IDs matched an installed printer driver.
// This is not considered a fatal error and the device is simply skipped.
///////////////////////////////////////////////////////////////////////////////
//
// MessageId: WU_E_DRV_PRUNED
//
// MessageText:
//
// A driver was skipped.
//
#define WU_E_DRV_PRUNED _HRESULT_TYPEDEF_(0x8024C001L)
//
// MessageId: WU_E_DRV_NOPROP_OR_LEGACY
//
// MessageText:
//
// A property for the driver could not be found. It may not conform with required specifications.
//
#define WU_E_DRV_NOPROP_OR_LEGACY _HRESULT_TYPEDEF_(0x8024C002L)
//
// MessageId: WU_E_DRV_REG_MISMATCH
//
// MessageText:
//
// The registry type read for the driver does not match the expected type.
//
#define WU_E_DRV_REG_MISMATCH _HRESULT_TYPEDEF_(0x8024C003L)
//
// MessageId: WU_E_DRV_NO_METADATA
//
// MessageText:
//
// The driver update is missing metadata.
//
#define WU_E_DRV_NO_METADATA _HRESULT_TYPEDEF_(0x8024C004L)
//
// MessageId: WU_E_DRV_MISSING_ATTRIBUTE
//
// MessageText:
//
// The driver update is missing a required attribute.
//
#define WU_E_DRV_MISSING_ATTRIBUTE _HRESULT_TYPEDEF_(0x8024C005L)
//
// MessageId: WU_E_DRV_SYNC_FAILED
//
// MessageText:
//
// Driver synchronization failed.
//
#define WU_E_DRV_SYNC_FAILED _HRESULT_TYPEDEF_(0x8024C006L)
//
// MessageId: WU_E_DRV_NO_PRINTER_CONTENT
//
// MessageText:
//
// Information required for the synchronization of applicable printers is missing.
//
#define WU_E_DRV_NO_PRINTER_CONTENT _HRESULT_TYPEDEF_(0x8024C007L)
//
// MessageId: WU_E_DRV_UNEXPECTED
//
// MessageText:
//
// A driver error not covered by another WU_E_DRV_* code.
//
#define WU_E_DRV_UNEXPECTED _HRESULT_TYPEDEF_(0x8024CFFFL)
//////////////////////////////////////////////////////////////////////////////
// data store errors
///////////////////////////////////////////////////////////////////////////////
//
// MessageId: WU_E_DS_SHUTDOWN
//
// MessageText:
//
// An operation failed because Windows Update Agent is shutting down.
//
#define WU_E_DS_SHUTDOWN _HRESULT_TYPEDEF_(0x80248000L)
//
// MessageId: WU_E_DS_INUSE
//
// MessageText:
//
// An operation failed because the data store was in use.
//
#define WU_E_DS_INUSE _HRESULT_TYPEDEF_(0x80248001L)
//
// MessageId: WU_E_DS_INVALID
//
// MessageText:
//
// The current and expected states of the data store do not match.
//
#define WU_E_DS_INVALID _HRESULT_TYPEDEF_(0x80248002L)
//
// MessageId: WU_E_DS_TABLEMISSING
//
// MessageText:
//
// The data store is missing a table.
//
#define WU_E_DS_TABLEMISSING _HRESULT_TYPEDEF_(0x80248003L)
//
// MessageId: WU_E_DS_TABLEINCORRECT
//
// MessageText:
//
// The data store contains a table with unexpected columns.
//
#define WU_E_DS_TABLEINCORRECT _HRESULT_TYPEDEF_(0x80248004L)
//
// MessageId: WU_E_DS_INVALIDTABLENAME
//
// MessageText:
//
// A table could not be opened because the table is not in the data store.
//
#define WU_E_DS_INVALIDTABLENAME _HRESULT_TYPEDEF_(0x80248005L)
//
// MessageId: WU_E_DS_BADVERSION
//
// MessageText:
//
// The current and expected versions of the data store do not match.
//
#define WU_E_DS_BADVERSION _HRESULT_TYPEDEF_(0x80248006L)
//
// MessageId: WU_E_DS_NODATA
//
// MessageText:
//
// The information requested is not in the data store.
//
#define WU_E_DS_NODATA _HRESULT_TYPEDEF_(0x80248007L)
//
// MessageId: WU_E_DS_MISSINGDATA
//
// MessageText:
//
// The data store is missing required information or has a NULL in a table column that requires a non-null value.
//
#define WU_E_DS_MISSINGDATA _HRESULT_TYPEDEF_(0x80248008L)
//
// MessageId: WU_E_DS_MISSINGREF
//
// MessageText:
//
// The data store is missing required information or has a reference to missing license terms, file, localized property or linked row.
//
#define WU_E_DS_MISSINGREF _HRESULT_TYPEDEF_(0x80248009L)
//
// MessageId: WU_E_DS_UNKNOWNHANDLER
//
// MessageText:
//
// The update was not processed because its update handler could not be recognized.
//
#define WU_E_DS_UNKNOWNHANDLER _HRESULT_TYPEDEF_(0x8024800AL)
//
// MessageId: WU_E_DS_CANTDELETE
//
// MessageText:
//
// The update was not deleted because it is still referenced by one or more services.
//
#define WU_E_DS_CANTDELETE _HRESULT_TYPEDEF_(0x8024800BL)
//
// MessageId: WU_E_DS_LOCKTIMEOUTEXPIRED
//
// MessageText:
//
// The data store section could not be locked within the allotted time.
//
#define WU_E_DS_LOCKTIMEOUTEXPIRED _HRESULT_TYPEDEF_(0x8024800CL)
//
// MessageId: WU_E_DS_NOCATEGORIES
//
// MessageText:
//
// The category was not added because it contains no parent categories and is not a top-level category itself.
//
#define WU_E_DS_NOCATEGORIES _HRESULT_TYPEDEF_(0x8024800DL)
//
// MessageId: WU_E_DS_ROWEXISTS
//
// MessageText:
//
// The row was not added because an existing row has the same primary key.
//
#define WU_E_DS_ROWEXISTS _HRESULT_TYPEDEF_(0x8024800EL)
//
// MessageId: WU_E_DS_STOREFILELOCKED
//
// MessageText:
//
// The data store could not be initialized because it was locked by another process.
//
#define WU_E_DS_STOREFILELOCKED _HRESULT_TYPEDEF_(0x8024800FL)
//
// MessageId: WU_E_DS_CANNOTREGISTER
//
// MessageText:
//
// The data store is not allowed to be registered with COM in the current process.
//
#define WU_E_DS_CANNOTREGISTER _HRESULT_TYPEDEF_(0x80248010L)
//
// MessageId: WU_E_DS_UNABLETOSTART
//
// MessageText:
//
// Could not create a data store object in another process.
//
#define WU_E_DS_UNABLETOSTART _HRESULT_TYPEDEF_(0x80248011L)
//
// MessageId: WU_E_DS_DUPLICATEUPDATEID
//
// MessageText:
//
// The server sent the same update to the client with two different revision IDs.
//
#define WU_E_DS_DUPLICATEUPDATEID _HRESULT_TYPEDEF_(0x80248013L)
//
// MessageId: WU_E_DS_UNKNOWNSERVICE
//
// MessageText:
//
// An operation did not complete because the service is not in the data store.
//
#define WU_E_DS_UNKNOWNSERVICE _HRESULT_TYPEDEF_(0x80248014L)
//
// MessageId: WU_E_DS_SERVICEEXPIRED
//
// MessageText:
//
// An operation did not complete because the registration of the service has expired.
//
#define WU_E_DS_SERVICEEXPIRED _HRESULT_TYPEDEF_(0x80248015L)
//
// MessageId: WU_E_DS_DECLINENOTALLOWED
//
// MessageText:
//
// A request to hide an update was declined because it is a mandatory update or because it was deployed with a deadline.
//
#define WU_E_DS_DECLINENOTALLOWED _HRESULT_TYPEDEF_(0x80248016L)
//
// MessageId: WU_E_DS_TABLESESSIONMISMATCH
//
// MessageText:
//
// A table was not closed because it is not associated with the session.
//
#define WU_E_DS_TABLESESSIONMISMATCH _HRESULT_TYPEDEF_(0x80248017L)
//
// MessageId: WU_E_DS_SESSIONLOCKMISMATCH
//
// MessageText:
//
// A table was not closed because it is not associated with the session.
//
#define WU_E_DS_SESSIONLOCKMISMATCH _HRESULT_TYPEDEF_(0x80248018L)
//
// MessageId: WU_E_DS_NEEDWINDOWSSERVICE
//
// MessageText:
//
// A request to remove the Windows Update service or to unregister it with Automatic Updates was declined because it is a built-in service and/or Automatic Updates cannot fall back to another service.
//
#define WU_E_DS_NEEDWINDOWSSERVICE _HRESULT_TYPEDEF_(0x80248019L)
//
// MessageId: WU_E_DS_INVALIDOPERATION
//
// MessageText:
//
// A request was declined because the operation is not allowed.
//
#define WU_E_DS_INVALIDOPERATION _HRESULT_TYPEDEF_(0x8024801AL)
//
// MessageId: WU_E_DS_SCHEMAMISMATCH
//
// MessageText:
//
// The schema of the current data store and the schema of a table in a backup XML document do not match.
//
#define WU_E_DS_SCHEMAMISMATCH _HRESULT_TYPEDEF_(0x8024801BL)
//
// MessageId: WU_E_DS_RESETREQUIRED
//
// MessageText:
//
// The data store requires a session reset; release the session and retry with a new session.
//
#define WU_E_DS_RESETREQUIRED _HRESULT_TYPEDEF_(0x8024801CL)
//
// MessageId: WU_E_DS_IMPERSONATED
//
// MessageText:
//
// A data store operation did not complete because it was requested with an impersonated identity.
//
#define WU_E_DS_IMPERSONATED _HRESULT_TYPEDEF_(0x8024801DL)
//
// MessageId: WU_E_DS_UNEXPECTED
//
// MessageText:
//
// A data store error not covered by another WU_E_DS_* code.
//
#define WU_E_DS_UNEXPECTED _HRESULT_TYPEDEF_(0x80248FFFL)
/////////////////////////////////////////////////////////////////////////////
//Inventory Errors
/////////////////////////////////////////////////////////////////////////////
//
// MessageId: WU_E_INVENTORY_PARSEFAILED
//
// MessageText:
//
// Parsing of the rule file failed.
//
#define WU_E_INVENTORY_PARSEFAILED _HRESULT_TYPEDEF_(0x80249001L)
//
// MessageId: WU_E_INVENTORY_GET_INVENTORY_TYPE_FAILED
//
// MessageText:
//
// Failed to get the requested inventory type from the server.
//
#define WU_E_INVENTORY_GET_INVENTORY_TYPE_FAILED _HRESULT_TYPEDEF_(0x80249002L)
//
// MessageId: WU_E_INVENTORY_RESULT_UPLOAD_FAILED
//
// MessageText:
//
// Failed to upload inventory result to the server.
//
#define WU_E_INVENTORY_RESULT_UPLOAD_FAILED _HRESULT_TYPEDEF_(0x80249003L)
//
// MessageId: WU_E_INVENTORY_UNEXPECTED
//
// MessageText:
//
// There was an inventory error not covered by another error code.
//
#define WU_E_INVENTORY_UNEXPECTED _HRESULT_TYPEDEF_(0x80249004L)
//
// MessageId: WU_E_INVENTORY_WMI_ERROR
//
// MessageText:
//
// A WMI error occurred when enumerating the instances for a particular class.
//
#define WU_E_INVENTORY_WMI_ERROR _HRESULT_TYPEDEF_(0x80249005L)
/////////////////////////////////////////////////////////////////////////////
//AU Errors
/////////////////////////////////////////////////////////////////////////////
//
// MessageId: WU_E_AU_NOSERVICE
//
// MessageText:
//
// Automatic Updates was unable to service incoming requests.
//
#define WU_E_AU_NOSERVICE _HRESULT_TYPEDEF_(0x8024A000L)
//
// MessageId: WU_E_AU_NONLEGACYSERVER
//
// MessageText:
//
// The old version of the Automatic Updates client has stopped because the WSUS server has been upgraded.
//
#define WU_E_AU_NONLEGACYSERVER _HRESULT_TYPEDEF_(0x8024A002L)
//
// MessageId: WU_E_AU_LEGACYCLIENTDISABLED
//
// MessageText:
//
// The old version of the Automatic Updates client was disabled.
//
#define WU_E_AU_LEGACYCLIENTDISABLED _HRESULT_TYPEDEF_(0x8024A003L)
//
// MessageId: WU_E_AU_PAUSED
//
// MessageText:
//
// Automatic Updates was unable to process incoming requests because it was paused.
//
#define WU_E_AU_PAUSED _HRESULT_TYPEDEF_(0x8024A004L)
//
// MessageId: WU_E_AU_NO_REGISTERED_SERVICE
//
// MessageText:
//
// No unmanaged service is registered with AU.
//
#define WU_E_AU_NO_REGISTERED_SERVICE _HRESULT_TYPEDEF_(0x8024A005L)
//
// MessageId: WU_E_AU_DETECT_SVCID_MISMATCH
//
// MessageText:
//
// The default service registered with AU changed during the search.
//
#define WU_E_AU_DETECT_SVCID_MISMATCH _HRESULT_TYPEDEF_(0x8024A006L)
//
// MessageId: WU_E_AU_UNEXPECTED
//
// MessageText:
//
// An Automatic Updates error not covered by another WU_E_AU * code.
//
#define WU_E_AU_UNEXPECTED _HRESULT_TYPEDEF_(0x8024AFFFL)
//////////////////////////////////////////////////////////////////////////////
// update handler errors
///////////////////////////////////////////////////////////////////////////////
//
// MessageId: WU_E_UH_REMOTEUNAVAILABLE
//
// MessageText:
//
// A request for a remote update handler could not be completed because no remote process is available.
//
#define WU_E_UH_REMOTEUNAVAILABLE _HRESULT_TYPEDEF_(0x80242000L)
//
// MessageId: WU_E_UH_LOCALONLY
//
// MessageText:
//
// A request for a remote update handler could not be completed because the handler is local only.
//
#define WU_E_UH_LOCALONLY _HRESULT_TYPEDEF_(0x80242001L)
//
// MessageId: WU_E_UH_UNKNOWNHANDLER
//
// MessageText:
//
// A request for an update handler could not be completed because the handler could not be recognized.
//
#define WU_E_UH_UNKNOWNHANDLER _HRESULT_TYPEDEF_(0x80242002L)
//
// MessageId: WU_E_UH_REMOTEALREADYACTIVE
//
// MessageText:
//
// A remote update handler could not be created because one already exists.
//
#define WU_E_UH_REMOTEALREADYACTIVE _HRESULT_TYPEDEF_(0x80242003L)
//
// MessageId: WU_E_UH_DOESNOTSUPPORTACTION
//
// MessageText:
//
// A request for the handler to install (uninstall) an update could not be completed because the update does not support install (uninstall).
//
#define WU_E_UH_DOESNOTSUPPORTACTION _HRESULT_TYPEDEF_(0x80242004L)
//
// MessageId: WU_E_UH_WRONGHANDLER
//
// MessageText:
//
// An operation did not complete because the wrong handler was specified.
//
#define WU_E_UH_WRONGHANDLER _HRESULT_TYPEDEF_(0x80242005L)
//
// MessageId: WU_E_UH_INVALIDMETADATA
//
// MessageText:
//
// A handler operation could not be completed because the update contains invalid metadata.
//
#define WU_E_UH_INVALIDMETADATA _HRESULT_TYPEDEF_(0x80242006L)
//
// MessageId: WU_E_UH_INSTALLERHUNG
//
// MessageText:
//
// An operation could not be completed because the installer exceeded the time limit.
//
#define WU_E_UH_INSTALLERHUNG _HRESULT_TYPEDEF_(0x80242007L)
//
// MessageId: WU_E_UH_OPERATIONCANCELLED
//
// MessageText:
//
// An operation being done by the update handler was cancelled.
//
#define WU_E_UH_OPERATIONCANCELLED _HRESULT_TYPEDEF_(0x80242008L)
//
// MessageId: WU_E_UH_BADHANDLERXML
//
// MessageText:
//
// An operation could not be completed because the handler-specific metadata is invalid.
//
#define WU_E_UH_BADHANDLERXML _HRESULT_TYPEDEF_(0x80242009L)
//
// MessageId: WU_E_UH_CANREQUIREINPUT
//
// MessageText:
//
// A request to the handler to install an update could not be completed because the update requires user input.
//
#define WU_E_UH_CANREQUIREINPUT _HRESULT_TYPEDEF_(0x8024200AL)
//
// MessageId: WU_E_UH_INSTALLERFAILURE
//
// MessageText:
//
// The installer failed to install (uninstall) one or more updates.
//
#define WU_E_UH_INSTALLERFAILURE _HRESULT_TYPEDEF_(0x8024200BL)
//
// MessageId: WU_E_UH_FALLBACKTOSELFCONTAINED
//
// MessageText:
//
// The update handler should download self-contained content rather than delta-compressed content for the update.
//
#define WU_E_UH_FALLBACKTOSELFCONTAINED _HRESULT_TYPEDEF_(0x8024200CL)
//
// MessageId: WU_E_UH_NEEDANOTHERDOWNLOAD
//
// MessageText:
//
// The update handler did not install the update because it needs to be downloaded again.
//
#define WU_E_UH_NEEDANOTHERDOWNLOAD _HRESULT_TYPEDEF_(0x8024200DL)
//
// MessageId: WU_E_UH_NOTIFYFAILURE
//
// MessageText:
//
// The update handler failed to send notification of the status of the install (uninstall) operation.
//
#define WU_E_UH_NOTIFYFAILURE _HRESULT_TYPEDEF_(0x8024200EL)
//
// MessageId: WU_E_UH_INCONSISTENT_FILE_NAMES
//
// MessageText:
//
// The file names contained in the update metadata and in the update package are inconsistent.
//
#define WU_E_UH_INCONSISTENT_FILE_NAMES _HRESULT_TYPEDEF_(0x8024200FL)
//
// MessageId: WU_E_UH_FALLBACKERROR
//
// MessageText:
//
// The update handler failed to fall back to the self-contained content.
//
#define WU_E_UH_FALLBACKERROR _HRESULT_TYPEDEF_(0x80242010L)
//
// MessageId: WU_E_UH_TOOMANYDOWNLOADREQUESTS
//
// MessageText:
//
// The update handler has exceeded the maximum number of download requests.
//
#define WU_E_UH_TOOMANYDOWNLOADREQUESTS _HRESULT_TYPEDEF_(0x80242011L)
//
// MessageId: WU_E_UH_UNEXPECTEDCBSRESPONSE
//
// MessageText:
//
// The update handler has received an unexpected response from CBS.
//
#define WU_E_UH_UNEXPECTEDCBSRESPONSE _HRESULT_TYPEDEF_(0x80242012L)
//
// MessageId: WU_E_UH_BADCBSPACKAGEID
//
// MessageText:
//
// The update metadata contains an invalid CBS package identifier.
//
#define WU_E_UH_BADCBSPACKAGEID _HRESULT_TYPEDEF_(0x80242013L)
//
// MessageId: WU_E_UH_POSTREBOOTSTILLPENDING
//
// MessageText:
//
// The post-reboot operation for the update is still in progress.
//
#define WU_E_UH_POSTREBOOTSTILLPENDING _HRESULT_TYPEDEF_(0x80242014L)
//
// MessageId: WU_E_UH_POSTREBOOTRESULTUNKNOWN
//
// MessageText:
//
// The result of the post-reboot operation for the update could not be determined.
//
#define WU_E_UH_POSTREBOOTRESULTUNKNOWN _HRESULT_TYPEDEF_(0x80242015L)
//
// MessageId: WU_E_UH_POSTREBOOTUNEXPECTEDSTATE
//
// MessageText:
//
// The state of the update after its post-reboot operation has completed is unexpected.
//
#define WU_E_UH_POSTREBOOTUNEXPECTEDSTATE _HRESULT_TYPEDEF_(0x80242016L)
//
// MessageId: WU_E_UH_NEW_SERVICING_STACK_REQUIRED
//
// MessageText:
//
// The OS servicing stack must be updated before this update is downloaded or installed.
//
#define WU_E_UH_NEW_SERVICING_STACK_REQUIRED _HRESULT_TYPEDEF_(0x80242017L)
//
// MessageId: WU_E_UH_CALLED_BACK_FAILURE
//
// MessageText:
//
// A callback installer called back with an error.
//
#define WU_E_UH_CALLED_BACK_FAILURE _HRESULT_TYPEDEF_(0x80242018L)
//
// MessageId: WU_E_UH_CUSTOMINSTALLER_INVALID_SIGNATURE
//
// MessageText:
//
// The custom installer signature did not match the signature required by the update.
//
#define WU_E_UH_CUSTOMINSTALLER_INVALID_SIGNATURE _HRESULT_TYPEDEF_(0x80242019L)
//
// MessageId: WU_E_UH_UNSUPPORTED_INSTALLCONTEXT
//
// MessageText:
//
// The installer does not support the installation configuration.
//
#define WU_E_UH_UNSUPPORTED_INSTALLCONTEXT _HRESULT_TYPEDEF_(0x8024201AL)
//
// MessageId: WU_E_UH_INVALID_TARGETSESSION
//
// MessageText:
//
// The targeted session for isntall is invalid.
//
#define WU_E_UH_INVALID_TARGETSESSION _HRESULT_TYPEDEF_(0x8024201BL)
//
// MessageId: WU_E_UH_UNEXPECTED
//
// MessageText:
//
// An update handler error not covered by another WU_E_UH_* code.
//
#define WU_E_UH_UNEXPECTED _HRESULT_TYPEDEF_(0x80242FFFL)
//////////////////////////////////////////////////////////////////////////////
// download manager errors
///////////////////////////////////////////////////////////////////////////////
//
// MessageId: WU_E_DM_URLNOTAVAILABLE
//
// MessageText:
//
// A download manager operation could not be completed because the requested file does not have a URL.
//
#define WU_E_DM_URLNOTAVAILABLE _HRESULT_TYPEDEF_(0x80246001L)
//
// MessageId: WU_E_DM_INCORRECTFILEHASH
//
// MessageText:
//
// A download manager operation could not be completed because the file digest was not recognized.
//
#define WU_E_DM_INCORRECTFILEHASH _HRESULT_TYPEDEF_(0x80246002L)
//
// MessageId: WU_E_DM_UNKNOWNALGORITHM
//
// MessageText:
//
// A download manager operation could not be completed because the file metadata requested an unrecognized hash algorithm.
//
#define WU_E_DM_UNKNOWNALGORITHM _HRESULT_TYPEDEF_(0x80246003L)
//
// MessageId: WU_E_DM_NEEDDOWNLOADREQUEST
//
// MessageText:
//
// An operation could not be completed because a download request is required from the download handler.
//
#define WU_E_DM_NEEDDOWNLOADREQUEST _HRESULT_TYPEDEF_(0x80246004L)
//
// MessageId: WU_E_DM_NONETWORK
//
// MessageText:
//
// A download manager operation could not be completed because the network connection was unavailable.
//
#define WU_E_DM_NONETWORK _HRESULT_TYPEDEF_(0x80246005L)
//
// MessageId: WU_E_DM_WRONGBITSVERSION
//
// MessageText:
//
// A download manager operation could not be completed because the version of Background Intelligent Transfer Service (BITS) is incompatible.
//
#define WU_E_DM_WRONGBITSVERSION _HRESULT_TYPEDEF_(0x80246006L)
//
// MessageId: WU_E_DM_NOTDOWNLOADED
//
// MessageText:
//
// The update has not been downloaded.
//
#define WU_E_DM_NOTDOWNLOADED _HRESULT_TYPEDEF_(0x80246007L)
//
// MessageId: WU_E_DM_FAILTOCONNECTTOBITS
//
// MessageText:
//
// A download manager operation failed because the download manager was unable to connect the Background Intelligent Transfer Service (BITS).
//
#define WU_E_DM_FAILTOCONNECTTOBITS _HRESULT_TYPEDEF_(0x80246008L)
//
// MessageId: WU_E_DM_BITSTRANSFERERROR
//
// MessageText:
//
// A download manager operation failed because there was an unspecified Background Intelligent Transfer Service (BITS) transfer error.
//
#define WU_E_DM_BITSTRANSFERERROR _HRESULT_TYPEDEF_(0x80246009L)
//
// MessageId: WU_E_DM_DOWNLOADLOCATIONCHANGED
//
// MessageText:
//
// A download must be restarted because the location of the source of the download has changed.
//
#define WU_E_DM_DOWNLOADLOCATIONCHANGED _HRESULT_TYPEDEF_(0x8024600AL)
//
// MessageId: WU_E_DM_CONTENTCHANGED
//
// MessageText:
//
// A download must be restarted because the update content changed in a new revision.
//
#define WU_E_DM_CONTENTCHANGED _HRESULT_TYPEDEF_(0x8024600BL)
//
// MessageId: WU_E_DM_UNEXPECTED
//
// MessageText:
//
// There was a download manager error not covered by another WU_E_DM_* error code.
//
#define WU_E_DM_UNEXPECTED _HRESULT_TYPEDEF_(0x80246FFFL)
//////////////////////////////////////////////////////////////////////////////
// Setup/SelfUpdate errors
///////////////////////////////////////////////////////////////////////////////
//
// MessageId: WU_E_SETUP_INVALID_INFDATA
//
// MessageText:
//
// Windows Update Agent could not be updated because an INF file contains invalid information.
//
#define WU_E_SETUP_INVALID_INFDATA _HRESULT_TYPEDEF_(0x8024D001L)
//
// MessageId: WU_E_SETUP_INVALID_IDENTDATA
//
// MessageText:
//
// Windows Update Agent could not be updated because the wuident.cab file contains invalid information.
//
#define WU_E_SETUP_INVALID_IDENTDATA _HRESULT_TYPEDEF_(0x8024D002L)
//
// MessageId: WU_E_SETUP_ALREADY_INITIALIZED
//
// MessageText:
//
// Windows Update Agent could not be updated because of an internal error that caused setup initialization to be performed twice.
//
#define WU_E_SETUP_ALREADY_INITIALIZED _HRESULT_TYPEDEF_(0x8024D003L)
//
// MessageId: WU_E_SETUP_NOT_INITIALIZED
//
// MessageText:
//
// Windows Update Agent could not be updated because setup initialization never completed successfully.
//
#define WU_E_SETUP_NOT_INITIALIZED _HRESULT_TYPEDEF_(0x8024D004L)
//
// MessageId: WU_E_SETUP_SOURCE_VERSION_MISMATCH
//
// MessageText:
//
// Windows Update Agent could not be updated because the versions specified in the INF do not match the actual source file versions.
//
#define WU_E_SETUP_SOURCE_VERSION_MISMATCH _HRESULT_TYPEDEF_(0x8024D005L)
//
// MessageId: WU_E_SETUP_TARGET_VERSION_GREATER
//
// MessageText:
//
// Windows Update Agent could not be updated because a WUA file on the target system is newer than the corresponding source file.
//
#define WU_E_SETUP_TARGET_VERSION_GREATER _HRESULT_TYPEDEF_(0x8024D006L)
//
// MessageId: WU_E_SETUP_REGISTRATION_FAILED
//
// MessageText:
//
// Windows Update Agent could not be updated because regsvr32.exe returned an error.
//
#define WU_E_SETUP_REGISTRATION_FAILED _HRESULT_TYPEDEF_(0x8024D007L)
//
// MessageId: WU_E_SELFUPDATE_SKIP_ON_FAILURE
//
// MessageText:
//
// An update to the Windows Update Agent was skipped because previous attempts to update have failed.
//
#define WU_E_SELFUPDATE_SKIP_ON_FAILURE _HRESULT_TYPEDEF_(0x8024D008L)
//
// MessageId: WU_E_SETUP_SKIP_UPDATE
//
// MessageText:
//
// An update to the Windows Update Agent was skipped due to a directive in the wuident.cab file.
//
#define WU_E_SETUP_SKIP_UPDATE _HRESULT_TYPEDEF_(0x8024D009L)
//
// MessageId: WU_E_SETUP_UNSUPPORTED_CONFIGURATION
//
// MessageText:
//
// Windows Update Agent could not be updated because the current system configuration is not supported.
//
#define WU_E_SETUP_UNSUPPORTED_CONFIGURATION _HRESULT_TYPEDEF_(0x8024D00AL)
//
// MessageId: WU_E_SETUP_BLOCKED_CONFIGURATION
//
// MessageText:
//
// Windows Update Agent could not be updated because the system is configured to block the update.
//
#define WU_E_SETUP_BLOCKED_CONFIGURATION _HRESULT_TYPEDEF_(0x8024D00BL)
//
// MessageId: WU_E_SETUP_REBOOT_TO_FIX
//
// MessageText:
//
// Windows Update Agent could not be updated because a restart of the system is required.
//
#define WU_E_SETUP_REBOOT_TO_FIX _HRESULT_TYPEDEF_(0x8024D00CL)
//
// MessageId: WU_E_SETUP_ALREADYRUNNING
//
// MessageText:
//
// Windows Update Agent setup is already running.
//
#define WU_E_SETUP_ALREADYRUNNING _HRESULT_TYPEDEF_(0x8024D00DL)
//
// MessageId: WU_E_SETUP_REBOOTREQUIRED
//
// MessageText:
//
// Windows Update Agent setup package requires a reboot to complete installation.
//
#define WU_E_SETUP_REBOOTREQUIRED _HRESULT_TYPEDEF_(0x8024D00EL)
//
// MessageId: WU_E_SETUP_HANDLER_EXEC_FAILURE
//
// MessageText:
//
// Windows Update Agent could not be updated because the setup handler failed during execution.
//
#define WU_E_SETUP_HANDLER_EXEC_FAILURE _HRESULT_TYPEDEF_(0x8024D00FL)
//
// MessageId: WU_E_SETUP_INVALID_REGISTRY_DATA
//
// MessageText:
//
// Windows Update Agent could not be updated because the registry contains invalid information.
//
#define WU_E_SETUP_INVALID_REGISTRY_DATA _HRESULT_TYPEDEF_(0x8024D010L)
//
// MessageId: WU_E_SELFUPDATE_REQUIRED
//
// MessageText:
//
// Windows Update Agent must be updated before search can continue.
//
#define WU_E_SELFUPDATE_REQUIRED _HRESULT_TYPEDEF_(0x8024D011L)
//
// MessageId: WU_E_SELFUPDATE_REQUIRED_ADMIN
//
// MessageText:
//
// Windows Update Agent must be updated before search can continue. An administrator is required to perform the operation.
//
#define WU_E_SELFUPDATE_REQUIRED_ADMIN _HRESULT_TYPEDEF_(0x8024D012L)
//
// MessageId: WU_E_SETUP_WRONG_SERVER_VERSION
//
// MessageText:
//
// Windows Update Agent could not be updated because the server does not contain update information for this version.
//
#define WU_E_SETUP_WRONG_SERVER_VERSION _HRESULT_TYPEDEF_(0x8024D013L)
//
// MessageId: WU_E_SETUP_UNEXPECTED
//
// MessageText:
//
// Windows Update Agent could not be updated because of an error not covered by another WU_E_SETUP_* error code.
//
#define WU_E_SETUP_UNEXPECTED _HRESULT_TYPEDEF_(0x8024DFFFL)
//////////////////////////////////////////////////////////////////////////////
// expression evaluator errors
///////////////////////////////////////////////////////////////////////////////
//
// MessageId: WU_E_EE_UNKNOWN_EXPRESSION
//
// MessageText:
//
// An expression evaluator operation could not be completed because an expression was unrecognized.
//
#define WU_E_EE_UNKNOWN_EXPRESSION _HRESULT_TYPEDEF_(0x8024E001L)
//
// MessageId: WU_E_EE_INVALID_EXPRESSION
//
// MessageText:
//
// An expression evaluator operation could not be completed because an expression was invalid.
//
#define WU_E_EE_INVALID_EXPRESSION _HRESULT_TYPEDEF_(0x8024E002L)
//
// MessageId: WU_E_EE_MISSING_METADATA
//
// MessageText:
//
// An expression evaluator operation could not be completed because an expression contains an incorrect number of metadata nodes.
//
#define WU_E_EE_MISSING_METADATA _HRESULT_TYPEDEF_(0x8024E003L)
//
// MessageId: WU_E_EE_INVALID_VERSION
//
// MessageText:
//
// An expression evaluator operation could not be completed because the version of the serialized expression data is invalid.
//
#define WU_E_EE_INVALID_VERSION _HRESULT_TYPEDEF_(0x8024E004L)
//
// MessageId: WU_E_EE_NOT_INITIALIZED
//
// MessageText:
//
// The expression evaluator could not be initialized.
//
#define WU_E_EE_NOT_INITIALIZED _HRESULT_TYPEDEF_(0x8024E005L)
//
// MessageId: WU_E_EE_INVALID_ATTRIBUTEDATA
//
// MessageText:
//
// An expression evaluator operation could not be completed because there was an invalid attribute.
//
#define WU_E_EE_INVALID_ATTRIBUTEDATA _HRESULT_TYPEDEF_(0x8024E006L)
//
// MessageId: WU_E_EE_CLUSTER_ERROR
//
// MessageText:
//
// An expression evaluator operation could not be completed because the cluster state of the computer could not be determined.
//
#define WU_E_EE_CLUSTER_ERROR _HRESULT_TYPEDEF_(0x8024E007L)
//
// MessageId: WU_E_EE_UNEXPECTED
//
// MessageText:
//
// There was an expression evaluator error not covered by another WU_E_EE_* error code.
//
#define WU_E_EE_UNEXPECTED _HRESULT_TYPEDEF_(0x8024EFFFL)
//////////////////////////////////////////////////////////////////////////////
// UI errors
///////////////////////////////////////////////////////////////////////////////
//
// MessageId: WU_E_INSTALLATION_RESULTS_UNKNOWN_VERSION
//
// MessageText:
//
// The results of download and installation could not be read from the registry due to an unrecognized data format version.
//
#define WU_E_INSTALLATION_RESULTS_UNKNOWN_VERSION _HRESULT_TYPEDEF_(0x80243001L)
//
// MessageId: WU_E_INSTALLATION_RESULTS_INVALID_DATA
//
// MessageText:
//
// The results of download and installation could not be read from the registry due to an invalid data format.
//
#define WU_E_INSTALLATION_RESULTS_INVALID_DATA _HRESULT_TYPEDEF_(0x80243002L)
//
// MessageId: WU_E_INSTALLATION_RESULTS_NOT_FOUND
//
// MessageText:
//
// The results of download and installation are not available; the operation may have failed to start.
//
#define WU_E_INSTALLATION_RESULTS_NOT_FOUND _HRESULT_TYPEDEF_(0x80243003L)
//
// MessageId: WU_E_TRAYICON_FAILURE
//
// MessageText:
//
// A failure occurred when trying to create an icon in the taskbar notification area.
//
#define WU_E_TRAYICON_FAILURE _HRESULT_TYPEDEF_(0x80243004L)
//
// MessageId: WU_E_NON_UI_MODE
//
// MessageText:
//
// Unable to show UI when in non-UI mode; WU client UI modules may not be installed.
//
#define WU_E_NON_UI_MODE _HRESULT_TYPEDEF_(0x80243FFDL)
//
// MessageId: WU_E_WUCLTUI_UNSUPPORTED_VERSION
//
// MessageText:
//
// Unsupported version of WU client UI exported functions.
//
#define WU_E_WUCLTUI_UNSUPPORTED_VERSION _HRESULT_TYPEDEF_(0x80243FFEL)
//
// MessageId: WU_E_AUCLIENT_UNEXPECTED
//
// MessageText:
//
// There was a user interface error not covered by another WU_E_AUCLIENT_* error code.
//
#define WU_E_AUCLIENT_UNEXPECTED _HRESULT_TYPEDEF_(0x80243FFFL)
//////////////////////////////////////////////////////////////////////////////
// reporter errors
///////////////////////////////////////////////////////////////////////////////
//
// MessageId: WU_E_REPORTER_EVENTCACHECORRUPT
//
// MessageText:
//
// The event cache file was defective.
//
#define WU_E_REPORTER_EVENTCACHECORRUPT _HRESULT_TYPEDEF_(0x8024F001L)
//
// MessageId: WU_E_REPORTER_EVENTNAMESPACEPARSEFAILED
//
// MessageText:
//
// The XML in the event namespace descriptor could not be parsed.
//
#define WU_E_REPORTER_EVENTNAMESPACEPARSEFAILED _HRESULT_TYPEDEF_(0x8024F002L)
//
// MessageId: WU_E_INVALID_EVENT
//
// MessageText:
//
// The XML in the event namespace descriptor could not be parsed.
//
#define WU_E_INVALID_EVENT _HRESULT_TYPEDEF_(0x8024F003L)
//
// MessageId: WU_E_SERVER_BUSY
//
// MessageText:
//
// The server rejected an event because the server was too busy.
//
#define WU_E_SERVER_BUSY _HRESULT_TYPEDEF_(0x8024F004L)
//
// MessageId: WU_E_CALLBACK_COOKIE_NOT_FOUND
//
// MessageText:
//
// The specified callback cookie is not found.
//
#define WU_E_CALLBACK_COOKIE_NOT_FOUND _HRESULT_TYPEDEF_(0x8024F005L)
//
// MessageId: WU_E_REPORTER_UNEXPECTED
//
// MessageText:
//
// There was a reporter error not covered by another error code.
//
#define WU_E_REPORTER_UNEXPECTED _HRESULT_TYPEDEF_(0x8024FFFFL)
//
// MessageId: WU_E_OL_INVALID_SCANFILE
//
// MessageText:
//
// An operation could not be completed because the scan package was invalid.
//
#define WU_E_OL_INVALID_SCANFILE _HRESULT_TYPEDEF_(0x80247001L)
//
// MessageId: WU_E_OL_NEWCLIENT_REQUIRED
//
// MessageText:
//
// An operation could not be completed because the scan package requires a greater version of the Windows Update Agent.
//
#define WU_E_OL_NEWCLIENT_REQUIRED _HRESULT_TYPEDEF_(0x80247002L)
//
// MessageId: WU_E_OL_UNEXPECTED
//
// MessageText:
//
// Search using the scan package failed.
//
#define WU_E_OL_UNEXPECTED _HRESULT_TYPEDEF_(0x80247FFFL)
#endif //_WUERROR_
================================================
FILE: launcher/CplTasks.xml
================================================
@"%ProgramFiles%\Legacy Update\LegacyUpdate.exe",-3
legacy update;legacyupdate;update;windows;microsoft;driver;security;software;
"%ProgramFiles%\Legacy Update\LegacyUpdate.exe"
================================================
FILE: launcher/InitRunOnce.c
================================================
#include
#include
#include "HResult.h"
#include "LoadImage.h"
#include "MsgBox.h"
#include "Registry.h"
#include "VersionInfo.h"
#include "resource.h"
#define HK_RUNCMD 1
typedef DWORD (__fastcall *_ThemeWaitForServiceReady)(DWORD timeout);
typedef DWORD (__fastcall *_ThemeWatchForStart)(void);
static const COLORREF WallpaperColorWinXP = RGB( 0, 78, 152); // #004e98
static const COLORREF WallpaperColorWin8 = RGB(32, 103, 178); // #2067b2
static const COLORREF WallpaperColorWin10 = RGB(24, 0, 82); // #180052
static const WCHAR RunOnceClassName[] = L"LegacyUpdateRunOnce";
static HANDLE g_cmdHandle;
static void StartThemes(void) {
// Ask UxInit.dll to ask the Themes service to start a session for this desktop. Themes doesn't automatically start a
// session for the SYSTEM desktop, so we need to ask it to. This matches what msoobe.exe does on first boot.
// Windows 7 moves this to UxInit.dll
HMODULE shsvcs = LoadLibrary(L"UxInit.dll");
if (!shsvcs) {
shsvcs = LoadLibrary(L"shsvcs.dll");
if (!shsvcs) {
return;
}
}
// Get functions by ordinals
_ThemeWaitForServiceReady $ThemeWaitForServiceReady = (_ThemeWaitForServiceReady)GetProcAddress(shsvcs, MAKEINTRESOURCEA(2));
_ThemeWatchForStart $ThemeWatchForStart = (_ThemeWatchForStart)GetProcAddress(shsvcs, MAKEINTRESOURCEA(1));
// 1. Wait up to 1000ms for Themes to start
if ($ThemeWaitForServiceReady) {
$ThemeWaitForServiceReady(1000);
}
// 2. Prompt Themes to start a session for the SYSTEM desktop
if ($ThemeWatchForStart) {
$ThemeWatchForStart();
}
FreeLibrary(shsvcs);
}
static BOOL RunCmd(LPPROCESS_INFORMATION processInfo) {
if (g_cmdHandle) {
return TRUE;
}
WCHAR cmd[MAX_PATH];
ExpandEnvironmentStrings(L"%SystemRoot%\\System32\\cmd.exe", cmd, ARRAYSIZE(cmd));
STARTUPINFO startupInfo = {0};
startupInfo.cb = sizeof(startupInfo);
if (!CreateProcess(NULL, cmd, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &startupInfo, processInfo)) {
MsgBox(NULL, L"Launching cmd.exe failed", NULL, MB_OK | MB_ICONERROR);
return FALSE;
}
CloseHandle(processInfo->hThread);
g_cmdHandle = processInfo->hProcess;
return TRUE;
}
static LRESULT CALLBACK RunOnceWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message) {
case WM_NCHITTEST:
// Don't accept any mouse input
return HTNOWHERE;
case WM_HOTKEY:
// Shift-F10 to run cmd
if (wParam == HK_RUNCMD) {
DWORD exitCode = 0;
if (!g_cmdHandle || (GetExitCodeProcess(g_cmdHandle, &exitCode) && exitCode != STILL_ACTIVE)) {
PROCESS_INFORMATION processInfo;
RunCmd(&processInfo);
}
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd, message, wParam, lParam);;
}
static void ResetSetupKey(void) {
HKEY key;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGPATH_SETUP, 0, KEY_ALL_ACCESS, &key) != ERROR_SUCCESS) {
return;
}
// Reset CmdLine to empty string
LPWSTR cmdLine = L"";
DWORD cmdLineLength = 0;
if (SUCCEEDED(GetRegistryString(key, NULL, L"CmdLine_LegacyUpdateBackup", 0, &cmdLine, &cmdLineLength))) {
RegDeleteValue(key, L"CmdLine_LegacyUpdateBackup");
}
RegSetValueEx(key, L"CmdLine", 0, REG_SZ, (const BYTE *)cmdLine, cmdLineLength * sizeof(WCHAR));
// Reset SetupType to 0
DWORD setupType = 0;
if (SUCCEEDED(GetRegistryDword(key, NULL, L"SetupType_LegacyUpdateBackup", 0, &setupType))) {
RegDeleteValue(key, L"SetupType_LegacyUpdateBackup");
}
RegSetValueEx(key, L"SetupType", 0, REG_DWORD, (const BYTE *)&setupType, sizeof(setupType));
// Reset SetupShutdownRequired (likely doesn't exist)
RegDeleteValue(key, L"SetupShutdownRequired");
RegCloseKey(key);
}
static BOOL IsSystemUser(void) {
static BOOL _isSystemUserInitialized = FALSE;
static BOOL _isSystemUser = FALSE;
if (!_isSystemUserInitialized) {
_isSystemUserInitialized = TRUE;
// NT AUTHORITY\SYSTEM (S-1-5-18)
SID systemSid = {0};
systemSid.Revision = SID_REVISION;
systemSid.SubAuthorityCount = 1;
systemSid.IdentifierAuthority.Value[5] = 5;
systemSid.SubAuthority[0] = 18;
PTOKEN_USER tokenInfo = NULL;
HANDLE token = NULL;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token)) {
goto end;
}
DWORD tokenInfoLen = 0;
GetTokenInformation(token, TokenUser, NULL, 0, &tokenInfoLen);
tokenInfo = (PTOKEN_USER)LocalAlloc(LPTR, tokenInfoLen);
if (!GetTokenInformation(token, TokenUser, tokenInfo, tokenInfoLen, &tokenInfoLen)) {
goto end;
}
_isSystemUser = EqualSid(tokenInfo->User.Sid, &systemSid);
end:
if (tokenInfo) {
LocalFree(tokenInfo);
}
if (token) {
CloseHandle(token);
}
}
return _isSystemUser;
}
static void CreateRunOnceWindow(void) {
// Create window
WNDCLASS wndClass = {0};
wndClass.style = CS_VREDRAW | CS_HREDRAW | CS_OWNDC | CS_NOCLOSE;
wndClass.lpfnWndProc = RunOnceWndProc;
wndClass.hInstance = GetModuleHandle(NULL);
wndClass.lpszClassName = RunOnceClassName;
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
if (!RegisterClass(&wndClass)) {
TRACE(L"RegisterClass failed: %d", GetLastError());
return;
}
HWND hwnd = CreateWindowEx(
WS_EX_TOOLWINDOW | WS_EX_NOACTIVATE,
wndClass.lpszClassName,
L"Legacy Update",
WS_POPUP,
0, 0, 0, 0,
NULL, NULL,
wndClass.hInstance,
NULL
);
if (!hwnd) {
TRACE(L"CreateWindow failed: %d", GetLastError());
return;
}
// Register hotkey
RegisterHotKey(hwnd, HK_RUNCMD, MOD_SHIFT, VK_F10);
// Set wallpaper on SYSTEM setup mode desktop
if (IsSystemUser()) {
// Check if the display is 8-bit color or lower
HDC dc = GetDC(NULL);
int bpp = GetDeviceCaps(dc, BITSPIXEL);
ReleaseDC(NULL, dc);
if (bpp >= 8) {
// Set the wallpaper color
COLORREF color = GetSysColor(COLOR_DESKTOP);
if (AtLeastWin10()) {
color = WallpaperColorWin10;
} else if (AtLeastWin8()) {
color = WallpaperColorWin8;
} else if ((IsWinXP2002() || IsWinXP2003()) && color == RGB(0, 0, 0)) {
// XP uses a black wallpaper in fast user switching mode. Override to the default blue.
color = WallpaperColorWinXP;
}
SetSysColors(1, (const INT[1]){COLOR_DESKTOP}, (const COLORREF[1]){color});
DWORD width = GetSystemMetrics(SM_CXSCREEN);
DWORD height = GetSystemMetrics(SM_CYSCREEN);
HBITMAP wallpaper = NULL;
if (IsWin7()) {
// 7: Bitmap in oobe dir
WCHAR bmpPath[MAX_PATH];
ExpandEnvironmentStrings(L"%SystemRoot%\\System32\\oobe\\background.bmp", bmpPath, ARRAYSIZE(bmpPath));
wallpaper = LoadImage(NULL, bmpPath, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
} else if (IsWinVista()) {
if (GetVersionInfo()->wProductType == VER_NT_WORKSTATION) {
// Vista: Resources in ooberesources.dll
WCHAR ooberesPath[MAX_PATH];
ExpandEnvironmentStrings(L"%SystemRoot%\\System32\\oobe\\ooberesources.dll", ooberesPath, ARRAYSIZE(ooberesPath));
HMODULE ooberes = LoadLibrary(ooberesPath);
if (ooberes) {
// Width logic is the same used by Vista msoobe.dll
LPWSTR resource = GetSystemMetrics(SM_CXSCREEN) < 1200 ? L"OOBE_BACKGROUND_0" : L"OOBE_BACKGROUND_LARGE_0";
wallpaper = LoadPNGResource(ooberes, resource, RT_RCDATA);
}
FreeLibrary(ooberes);
} else {
// Server 2008: Bitmap in oobe dir
WCHAR jpegPath[MAX_PATH];
ExpandEnvironmentStrings(L"%SystemRoot%\\System32\\oobe\\msoobe_server.jpg", jpegPath, ARRAYSIZE(jpegPath));
wallpaper = LoadJPEGFile(jpegPath);
}
}
if (wallpaper) {
// Write to disk
WCHAR tempPath[MAX_PATH];
ExpandEnvironmentStrings(L"%ProgramData%\\Legacy Update\\background.bmp", tempPath, ARRAYSIZE(tempPath));
if (GetFileAttributes(tempPath) != INVALID_FILE_ATTRIBUTES || ScaleAndWriteToBMP(wallpaper, width, height, tempPath)) {
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID)tempPath, SPIF_SENDWININICHANGE);
}
DeleteObject(wallpaper);
}
}
}
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);
}
static void FixUserWallpaper(void) {
// Work around bug in at least Windows 7 SP1 where the pre-logon wallpaper persists into the user session.
// We nudge it into doing the right thing by re-applying the wallpaper from the registry.
// This also occurs if there is no wallpaper set and the background is a solid color (i.e. on Server Core).
LPWSTR wallpaper = NULL;
DWORD length = 0;
if (SUCCEEDED(GetRegistryString(HKEY_CURRENT_USER, REGPATH_CPL_DESKTOP, L"Wallpaper", 0, &wallpaper, &length))) {
if (length > 0) {
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID)wallpaper, SPIF_SENDWININICHANGE);
}
} else {
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID)L"", SPIF_SENDWININICHANGE);
}
if (wallpaper) {
LocalFree(wallpaper);
}
}
void RunOnce(BOOL postInstall) {
// Allow breaking out by entering safe mode
if (GetSystemMetrics(SM_CLEANBOOT)) {
WCHAR message[4096];
LoadString(GetModuleHandle(NULL), IDS_RUNONCESAFEMODE, message, ARRAYSIZE(message));
MsgBox(NULL, message, NULL, MB_OK | MB_ICONWARNING);
ResetSetupKey();
PostQuitMessage(0);
return;
}
HWND firstUxWnd = 0;
if (postInstall) {
// Fix pre-logon wallpaper persisting into the user's desktop
FixUserWallpaper();
} else {
if (IsSystemUser()) {
// Start Themes on this desktop
StartThemes();
// Find and hide the FirstUxWnd window, if it exists (Windows 7+)
firstUxWnd = FindWindow(L"FirstUxWndClass", NULL);
if (firstUxWnd) {
ShowWindow(firstUxWnd, SW_HIDE);
}
}
// Set up our window
CreateRunOnceWindow();
}
// Trick winlogon into thinking the shell has started, so it doesn't appear to be stuck at "Welcome" (XP) or
// "Preparing your desktop..." (Vista+)
// https://social.msdn.microsoft.com/Forums/WINDOWS/en-US/ca253e22-1ef8-4582-8710-9cd9c89b15c3
LPWSTR eventName = AtLeastWinVista() ? L"ShellDesktopSwitchEvent" : L"msgina: ShellReadyEvent";
HANDLE eventHandle = OpenEvent(EVENT_MODIFY_STATE, 0, eventName);
if (eventHandle) {
SetEvent(eventHandle);
CloseHandle(eventHandle);
}
// Construct path to LegacyUpdateSetup.exe
LPWSTR setupPath;
GetOwnFileName(&setupPath);
wcsrchr(setupPath, L'\\')[1] = L'\0';
wcsncat(setupPath, L"LegacyUpdateSetup.exe", MAX_PATH - wcslen(setupPath) - 1);
// Execute and wait for completion
STARTUPINFO startupInfo = {0};
startupInfo.cb = sizeof(startupInfo);
LPWSTR cmdLine = (LPWSTR)LocalAlloc(LPTR, (lstrlen(setupPath) + 16) * sizeof(WCHAR));
wsprintf(cmdLine, L"\"%ls\" %ls", setupPath, postInstall ? L"/postinstall" : L"/runonce");
PROCESS_INFORMATION processInfo = {0};
if (!CreateProcess(setupPath, cmdLine, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &startupInfo, &processInfo)) {
LocalFree(setupPath);
LocalFree(cmdLine);
WCHAR title[4096];
LoadString(GetModuleHandle(NULL), IDS_RUNONCEFAILED, title, ARRAYSIZE(title));
LPWSTR message = GetMessageForHresult(HRESULT_FROM_WIN32(GetLastError()));
MsgBox(NULL, title, message, MB_OK | MB_ICONERROR);
if (message) {
LocalFree(message);
}
ResetSetupKey();
#ifdef _DEBUG
// Run cmd to inspect what happened
if (!RunCmd(&processInfo)) {
PostQuitMessage(0);
return;
}
#else
PostQuitMessage(0);
return;
#endif
}
LocalFree(setupPath);
LocalFree(cmdLine);
CloseHandle(processInfo.hThread);
// Wait for it to finish, while running a message loop
MSG msg = {0};
while (WaitForSingleObject(processInfo.hProcess, 100) == WAIT_TIMEOUT) {
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
DWORD exitCode = 0;
if (GetExitCodeProcess(processInfo.hProcess, &exitCode) && exitCode != ERROR_SUCCESS && exitCode != ERROR_SUCCESS_REBOOT_REQUIRED) {
ResetSetupKey();
#ifdef _DEBUG
TRACE(L"Setup exited with code: %d", exitCode);
// Run cmd to inspect what happened
if (RunCmd(&processInfo)) {
MSG msg = {0};
while (WaitForSingleObject(processInfo.hProcess, 100) == WAIT_TIMEOUT) {
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
#endif
}
CloseHandle(processInfo.hProcess);
// Don't let SYSTEM cmd keep running beyond runonce
if (g_cmdHandle) {
TerminateProcess(g_cmdHandle, 0);
CloseHandle(g_cmdHandle);
}
// Show FirstUxWnd again
if (firstUxWnd) {
ShowWindow(firstUxWnd, SW_SHOW);
}
PostQuitMessage(0);
}
================================================
FILE: launcher/LaunchLog.c
================================================
#include "MsgBox.h"
#include "ViewLog.h"
// Matches LogAction enum in ViewLog.h
static const LPCWSTR logActions[][4] = {
{L"system", L"sys", NULL},
{L"local", L"user", NULL},
{L"locallow", L"userlow", L"low", NULL},
{L"windowsupdate", L"wu", NULL},
};
void LaunchLog(int argc, LPWSTR *argv, int nCmdShow) {
LogAction action = LogActionSystem;
if (argc > 0) {
BOOL found = FALSE;
for (DWORD i = 0; i < ARRAYSIZE(logActions); i++) {
for (DWORD j = 0; logActions[i][j] != NULL; j++) {
if (wcscmp(argv[0], logActions[i][j]) == 0) {
action = (LogAction)i;
found = TRUE;
break;
}
}
if (found) {
break;
}
}
}
HRESULT hr = ViewLog(action, nCmdShow, FALSE);
if (!SUCCEEDED(hr)) {
LPWSTR message = GetMessageForHresult(hr);
MsgBox(NULL, message, NULL, MB_OK);
LocalFree(message);
}
PostQuitMessage(hr);
}
================================================
FILE: launcher/LaunchUpdateSite.c
================================================
#include "stdafx.h"
#include "main.h"
#include "resource.h"
#include
#include "Exec.h"
#include "HResult.h"
#include "MsgBox.h"
#include "RegisterServer.h"
#include "Registry.h"
#include "SelfElevate.h"
#include "User.h"
#include "VersionInfo.h"
#include "Wow64.h"
const LPWSTR UpdateSiteURLHttp = L"http://legacyupdate.net/windowsupdate/v6/";
const LPWSTR UpdateSiteURLHttps = L"https://legacyupdate.net/windowsupdate/v6/";
const LPWSTR UpdateSiteFirstRunFlag = L"?firstrun=true";
DEFINE_GUID(IID_ILegacyUpdateCtrl, 0xC33085BB, 0xC3E1, 0x4D27, 0xA2, 0x14, 0xAF, 0x01, 0x95, 0x3D, 0xF5, 0xE5);
DEFINE_GUID(CLSID_LegacyUpdateCtrl, 0xAD28E0DF, 0x5F5A, 0x40B5, 0x94, 0x32, 0x85, 0xEF, 0xD9, 0x7D, 0x1F, 0x9F);
static LPWSTR GetUpdateSiteURL(void) {
// Fallback: Use SSL only on Vista and up
BOOL useHTTPS = AtLeastWinVista();
// Get the Windows Update website URL set by Legacy Update setup
LPWSTR data = NULL;
DWORD size = 0;
HRESULT hr = GetRegistryString(HKEY_LOCAL_MACHINE, REGPATH_WU, L"URL", KEY_WOW64_64KEY, &data, &size);
if (SUCCEEDED(hr)) {
// Return based on the URL value
if (wcscmp(data, UpdateSiteURLHttps) == 0) {
useHTTPS = TRUE;
} else if (wcscmp(data, UpdateSiteURLHttp) == 0) {
useHTTPS = FALSE;
}
LocalFree(data);
}
return useHTTPS ? UpdateSiteURLHttps : UpdateSiteURLHttp;
}
HRESULT HandleIENotInstalled(void) {
// Handle case where the user has uninstalled Internet Explorer using Programs and Features.
if (AtLeastWin8() && !AtLeastWin10_1703()) {
// Windows 8 - 10 1607: Directly prompt to reinstall IE using Fondue.exe.
SYSTEM_INFO systemInfo = {0};
OurGetNativeSystemInfo(&systemInfo);
LPCTSTR archSuffix = systemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ? L"amd64" : L"x86";
WCHAR fondue[MAX_PATH];
ExpandEnvironmentStrings(L"%SystemRoot%\\System32\\fondue.exe", fondue, ARRAYSIZE(fondue));
WCHAR fondueArgs[256];
wsprintf(fondueArgs, L"/enable-feature:Internet-Explorer-Optional-%ls", archSuffix);
HRESULT hr = Exec(NULL, fondue, fondueArgs, NULL, SW_SHOWDEFAULT, FALSE, NULL);
if (SUCCEEDED(hr)) {
return S_OK;
}
}
// Tell the user what they need to do, then open the Optional Features dialog.
WCHAR message[4096];
LoadString(GetModuleHandle(NULL), IDS_IENOTINSTALLED, message, ARRAYSIZE(message));
MsgBox(NULL, message, NULL, MB_OK | MB_ICONEXCLAMATION);
if (AtLeastWin10_1703()) {
// Windows 10 1703+: IE is moved to a WindowsCapability, handled by the Settings app.
Exec(NULL, L"ms-settings:optionalfeatures", NULL, NULL, SW_SHOWDEFAULT, FALSE, NULL);
} else if (AtLeastWin7()) {
// Windows 7: Optional Features dialog
WCHAR optionalFeatures[MAX_PATH];
ExpandEnvironmentStrings(L"%SystemRoot%\\System32\\OptionalFeatures.exe", optionalFeatures, ARRAYSIZE(optionalFeatures));
Exec(NULL, optionalFeatures, NULL, NULL, SW_SHOWDEFAULT, FALSE, NULL);
}
return S_OK;
}
void LaunchUpdateSite(int argc, LPWSTR *argv, int nCmdShow) {
HRESULT hr = S_OK;
IWebBrowser2 *browser = NULL;
VARIANT url = {0};
VARIANT flags = {0};
VARIANT nullVariant = {0};
LPTSTR siteURL = NULL;
HMONITOR monitor = NULL;
// If this OS was upgraded, tell the user they need to re-run setup
DWORD lastOSVersion = 0;
if (!AtLeastWin10() && SUCCEEDED(GetRegistryDword(HKEY_LOCAL_MACHINE, REGPATH_LEGACYUPDATE_SETUP, L"LastOSVersion", KEY_WOW64_64KEY, &lastOSVersion))) {
// Allow Vista build 6002 -> 6003 (ESU)
if (lastOSVersion < GetVersion() && !(HIWORD(lastOSVersion) == 6002 && GetWinBuild() == 6003)) {
WCHAR message[4096];
LoadString(GetModuleHandle(NULL), IDS_OSUPGRADED, message, ARRAYSIZE(message));
MsgBox(NULL, message, NULL, MB_OK | MB_ICONEXCLAMATION);
goto end;
}
}
// If running on 2k/XP, make sure we're elevated. If not, show Run As prompt.
if (!AtLeastWinVista() && !IsUserAdmin()) {
LPWSTR args = (LPWSTR)LocalAlloc(LPTR, 512 * sizeof(WCHAR));
wsprintf(args, L"/launch %ls", argc > 0 ? argv[0] : L"");
hr = SelfElevate(args, NULL);
LocalFree(args);
// Access denied happens when the user clicks No/Cancel.
if (hr == HRESULT_FROM_WIN32(ERROR_CANCELLED)) {
hr = S_OK;
}
goto end;
}
// Can we instantiate our own ActiveX control? If not, try to register it.
hr = CoCreateInstance(&CLSID_LegacyUpdateCtrl, NULL, CLSCTX_INPROC_SERVER, &IID_ILegacyUpdateCtrl, (void **)&browser);
if (hr == REGDB_E_CLASSNOTREG || hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) || hr == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND)) {
TRACE(L"LegacyUpdateCtrl not registered");
hr = RegisterServer(0, TRUE, TRUE);
CHECK_HR_OR_GOTO_END(L"RegisterServer");
hr = CoCreateInstance(&CLSID_LegacyUpdateCtrl, NULL, CLSCTX_INPROC_SERVER, &IID_ILegacyUpdateCtrl, (void **)&browser);
CHECK_HR_OR_GOTO_END(L"Still failed to load LegacyUpdateCtrl");
IUnknown_Release(browser);
} else if (!SUCCEEDED(hr)) {
CHECK_HR_OR_GOTO_END(L"Create ILegacyUpdateCtrl");
}
// Spawn an IE window via the COM interface. This ensures the page opens in IE (ShellExecute uses
// default browser), and avoids hardcoding a path to iexplore.exe. Also conveniently allows testing
// on Windows 11 (iexplore.exe redirects to Edge, but COM still works). Same strategy as used by
// Wupdmgr.exe and Muweb.dll,LaunchMUSite.
hr = CoCreateInstance(&CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER, &IID_IWebBrowser2, (void **)&browser);
// An install of IE can be "broken" in two ways:
// - Class not registered: mshtml.dll unregistered, deleted, or uninstalled in Optional Features.
// - Path not found: iexplore.exe is not present.
if (hr == REGDB_E_CLASSNOTREG || hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) || hr == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND)) {
TRACE(L"IE not installed: %08x", hr);
hr = HandleIENotInstalled();
goto end;
} else if (!SUCCEEDED(hr)) {
CHECK_HR_OR_GOTO_END(L"Create IWebBrowser2");
}
// Get the URL we want to launch
siteURL = GetUpdateSiteURL();
// Is this a first run launch? Append first run flag if so.
if (argc > 0 && lstrcmpi(argv[0], L"/firstrun") == 0) {
WCHAR newSiteURL[256];
wsprintf(newSiteURL, L"%ls%ls", siteURL, UpdateSiteFirstRunFlag);
siteURL = newSiteURL;
}
VariantInit(&url);
url.vt = VT_BSTR;
url.bstrVal = SysAllocString(siteURL);
VariantInit(&flags);
flags.vt = VT_I4;
flags.lVal = 0;
VariantInit(&nullVariant);
hr = IWebBrowser2_Navigate2(browser, &url, &flags, &nullVariant, &nullVariant, &nullVariant);
CHECK_HR_OR_GOTO_END(L"Navigate2");
HWND ieHwnd = NULL;
hr = IWebBrowser2_get_HWND(browser, (SHANDLE_PTR *)&ieHwnd);
CHECK_HR_OR_GOTO_END(L"get_HWND");
// Pass through our nCmdShow flag
ShowWindow(ieHwnd, nCmdShow);
// Are we on a small display? If so, resize and maximise the window.
monitor = MonitorFromWindow(ieHwnd, MONITOR_DEFAULTTONEAREST);
MONITORINFO monitorInfo = {0};
monitorInfo.cbSize = sizeof(MONITORINFO);
if (GetMonitorInfo(monitor, &monitorInfo) > 0) {
LONG workWidth = monitorInfo.rcWork.right - monitorInfo.rcWork.left;
LONG workHeight = monitorInfo.rcWork.bottom - monitorInfo.rcWork.top;
LONG width = 0, height = 0;
IWebBrowser2_get_Width(browser, &width);
IWebBrowser2_get_Height(browser, &height);
if (width < 800) {
width = workWidth < 800 ? workWidth : 800;
IWebBrowser2_put_Width(browser, width);
}
if (height < 600) {
height = workHeight < 600 ? workHeight : 600;
IWebBrowser2_put_Height(browser, height);
}
LONG left = 0, top = 0;
IWebBrowser2_get_Left(browser, &left);
IWebBrowser2_get_Top(browser, &top);
if (left + width > workWidth) {
IWebBrowser2_put_Left(browser, 0);
}
if (top + height > workHeight) {
IWebBrowser2_put_Top(browser, 0);
}
// Maximize if below 1152x864, if not already overridden by user
if (workWidth <= 1152 && nCmdShow == SW_SHOWDEFAULT) {
ShowWindow(ieHwnd, SW_MAXIMIZE);
}
}
// IE window won't be fully initialized until we make it visible.
IWebBrowser2_put_Visible(browser, TRUE);
// Focus the window, since it seems to not always get focus as it should.
SetForegroundWindow(ieHwnd);
end:
if (!SUCCEEDED(hr)) {
LPWSTR message = GetMessageForHresult(hr);
MsgBox(NULL, message, NULL, MB_ICONEXCLAMATION);
LocalFree(message);
}
VariantClear(&url);
VariantClear(&flags);
VariantClear(&nullVariant);
if (browser) {
IWebBrowser2_Release(browser);
}
CoUninitialize();
PostQuitMessage(0);
}
================================================
FILE: launcher/Makefile
================================================
FILES = \
$(wildcard *.c) \
../shared/Exec.c \
../shared/HResult.c \
../shared/LegacyUpdate.c \
../shared/LoadImage.c \
../shared/Log.c \
../shared/Registry.c \
../shared/ViewLog.c \
../shared/Wow64.c
RCFILES = resource.rc
DEFFILES = ../LegacyUpdate/LegacyUpdate.def
BIN = obj/LegacyUpdate$(ARCH).exe
all:: all-archs
all-archs: all-32 all-64
include ../build/shared.mk
CFLAGS += \
-DLOG_NAME="\"Launcher\""
LDFLAGS += \
-Wl,--subsystem,windows \
-Lobj \
-lmsvcrt \
-lpsapi \
-lkernel32 \
-luser32 \
-lole32 \
-loleaut32 \
-ladvapi32 \
-lcomctl32 \
-lshell32 \
-lshlwapi \
-lversion \
-lgdi32 \
-lmsimg32
ifeq ($(ARCH),64)
LDFLAGS += -Wl,-ewWinMain
else
LDFLAGS += -Wl,-e_wWinMain
endif
test:
+$(MAKE) DEBUG=$(DEBUG)
./obj/LegacyUpdate.exe
.PHONY: all all-archs all-32 all-64 test
================================================
FILE: launcher/MsgBox.c
================================================
#include "stdafx.h"
#include "main.h"
#include "resource.h"
#undef _WIN32_WINNT
#define _WIN32_WINNT _WIN32_WINNT_VISTA
#include
typedef HRESULT (WINAPI *_TaskDialogIndirect)(const TASKDIALOGCONFIG *pTaskConfig, int *pnButton, int *pnRadioButton, BOOL *pfVerificationFlagChecked);
static BOOL _loadedTaskDialog = FALSE;
static _TaskDialogIndirect $TaskDialogIndirect;
int MsgBox(HWND hwnd, LPCTSTR instruction, LPCTSTR body, UINT type) {
if (!_loadedTaskDialog) {
_loadedTaskDialog = TRUE;
$TaskDialogIndirect = (_TaskDialogIndirect)GetProcAddress(LoadLibrary(L"comctl32.dll"), "TaskDialogIndirect");
}
// Play the sound matching the icon, because MB_USERICON doesn't play a sound
MessageBeep(type & 0x000000F0);
type = (type & ~0x000000F0) | MB_USERICON;
if (!$TaskDialogIndirect) {
LPWSTR finalBody = (LPWSTR)instruction;
if (body && lstrlen(body) > 0) {
size_t length = lstrlen(instruction) + lstrlen(body) + 3;
finalBody = (LPWSTR)LocalAlloc(LPTR, length * sizeof(TCHAR));
wsprintf(finalBody, L"%ls\n\n%ls", instruction, body);
}
MSGBOXPARAMS params = {0};
params.cbSize = sizeof(MSGBOXPARAMS);
params.hwndOwner = hwnd;
params.hInstance = GetModuleHandle(NULL);
params.lpszText = finalBody;
params.lpszCaption = L"Legacy Update";
params.dwStyle = type;
params.lpszIcon = MAKEINTRESOURCE(IDI_APPICON);
int result = MessageBoxIndirect(¶ms);
if (finalBody != body) {
LocalFree(finalBody);
}
return result;
}
TASKDIALOG_COMMON_BUTTON_FLAGS buttons = 0;
DWORD flags = TDF_POSITION_RELATIVE_TO_WINDOW;
switch (type & 0x0000000F) {
case MB_OK:
buttons = TDCBF_OK_BUTTON;
flags |= TDF_ALLOW_DIALOG_CANCELLATION;
break;
case MB_OKCANCEL:
buttons = TDCBF_OK_BUTTON | TDCBF_CANCEL_BUTTON;
flags |= TDF_ALLOW_DIALOG_CANCELLATION;
break;
case MB_YESNO:
buttons = TDCBF_YES_BUTTON | TDCBF_NO_BUTTON;
break;
default:
break;
}
TASKDIALOGCONFIG config = {0};
config.cbSize = sizeof(TASKDIALOGCONFIG);
config.hwndParent = hwnd;
config.hInstance = GetModuleHandle(NULL);
config.dwFlags = flags;
config.dwCommonButtons = buttons;
config.pszWindowTitle = L"Legacy Update";
config.pszMainInstruction = instruction;
config.pszContent = body;
config.pszMainIcon = MAKEINTRESOURCE(IDI_APPICON);
int button = 0;
$TaskDialogIndirect(&config, &button, NULL, NULL);
return button;
}
================================================
FILE: launcher/MsgBox.h
================================================
#pragma once
#include
int MsgBox(HWND hwnd, LPCTSTR instruction, LPCTSTR body, UINT type);
================================================
FILE: launcher/Options.c
================================================
#include
#include "Exec.h"
#include "VersionInfo.h"
#include "Wow64.h"
void LaunchOptions(int nCmdShow) {
#if !_WIN64
// Some issues arise from the working directory being SysWOW64 rather than System32. Notably,
// Windows Vista - 8.1 don't have wuauclt.exe in SysWOW64. Disable WOW64 redirection temporarily
// to work around this.
PVOID oldValue = NULL;
BOOL isRedirected = DisableWow64FsRedirection(&oldValue);
#endif
HRESULT hr = E_FAIL;
if (AtLeastWin10()) {
// Windows 10+: Open Settings app
hr = Exec(NULL, L"ms-settings:windowsupdate-options", NULL, NULL, SW_SHOWDEFAULT, FALSE, NULL);
} else if (AtLeastWinVista()) {
// Windows Vista, 7, 8: Open Windows Update control panel
WCHAR wuauclt[MAX_PATH];
ExpandEnvironmentStrings(L"%SystemRoot%\\System32\\wuauclt.exe", wuauclt, ARRAYSIZE(wuauclt));
hr = Exec(NULL, wuauclt, L"/ShowOptions", NULL, SW_SHOWDEFAULT, FALSE, NULL);
} else {
// Windows 2000, XP: Open Automatic Updates control panel
WCHAR wuaucpl[MAX_PATH];
ExpandEnvironmentStrings(L"%SystemRoot%\\System32\\wuaucpl.cpl", wuaucpl, ARRAYSIZE(wuaucpl));
hr = Exec(NULL, wuaucpl, NULL, NULL, SW_SHOWDEFAULT, FALSE, NULL);
}
#if !_WIN64
// Revert WOW64 redirection if we changed it
if (isRedirected) {
RevertWow64FsRedirection(oldValue);
}
#endif
PostQuitMessage(hr);
}
================================================
FILE: launcher/RegisterServer.c
================================================
#include
#include "Exec.h"
#include "HResult.h"
#include "LegacyUpdate.h"
#include "MsgBox.h"
#include "Registry.h"
#include "SelfElevate.h"
#include "User.h"
#include "VersionInfo.h"
#include "Wow64.h"
#include "resource.h"
static HRESULT RegisterDllInternal(LPWSTR path, BOOL state) {
HMODULE module = LoadLibrary(path);
if (!module) {
return HRESULT_FROM_WIN32(GetLastError());
}
HRESULT hr = S_OK;
FARPROC proc = GetProcAddress(module, state ? "DllRegisterServer" : "DllUnregisterServer");
if (!proc) {
hr = HRESULT_FROM_WIN32(GetLastError());
goto end;
}
hr = ((HRESULT (WINAPI *)(void))proc)();
end:
if (module) {
FreeLibrary(module);
}
return hr;
}
static HRESULT RegisterDllExternal(LPWSTR path, BOOL state) {
WCHAR regsvr32[MAX_PATH];
ExpandEnvironmentStrings(L"%SystemRoot%\\System32\\regsvr32.exe", regsvr32, ARRAYSIZE(regsvr32));
LPWSTR args = (LPWSTR)LocalAlloc(LPTR, (lstrlen(path) + 6) * sizeof(WCHAR));
wsprintf(args, L"/s %ls\"%ls\"", state ? L"" : L"/u ", path);
DWORD status = 0;
HRESULT hr = Exec(NULL, regsvr32, args, NULL, SW_HIDE, TRUE, &status);
if (!SUCCEEDED(hr)) {
hr = HRESULT_FROM_WIN32(GetLastError());
return hr;
}
if (status != 0) {
// Run again without /s, so the user can see the error
wsprintf(args, L"%ls\"%ls\"", state ? L"" : L"/u ", path);
hr = Exec(NULL, regsvr32, args, NULL, SW_SHOWDEFAULT, TRUE, &status);
}
return status == 0 ? S_OK : E_FAIL;
}
HRESULT RegisterServer(HWND hwnd, BOOL state, BOOL forLaunch) {
// Ensure elevation
HRESULT hr = S_OK;
LPWSTR installPath = NULL;
LPWSTR dllPath = NULL;
if (!IsUserAdmin()) {
LPWSTR args = (LPWSTR)LocalAlloc(LPTR, 512 * sizeof(WCHAR));
wsprintf(args, L"%ls %i", state ? L"/regserver" : L"/unregserver", hwnd);
DWORD code = 0;
hr = SelfElevate(args, &code);
if (!SUCCEEDED(hr)) {
// Ignore error on cancelling UAC dialog
if (hr == HRESULT_FROM_WIN32(ERROR_CANCELLED)) {
hr = S_OK;
}
goto end;
}
hr = HRESULT_FROM_WIN32(code);
goto end;
}
hr = GetInstallPath(&installPath);
CHECK_HR_OR_GOTO_END(L"GetInstallPath");
dllPath = (LPWSTR)LocalAlloc(LPTR, MAX_PATH * sizeof(WCHAR));
wsprintf(dllPath, L"%ls\\LegacyUpdate.dll", installPath);
#ifdef _DEBUG
// Warn if registration path differs, to help with debugging
LPWSTR currentPath = NULL;
hr = GetRegistryString(HKEY_CLASSES_ROOT, L"CLSID\\{AD28E0DF-5F5A-40B5-9432-85EFD97D1F9F}\\InprocServer32", NULL, KEY_WOW64_64KEY, ¤tPath, NULL);
if (SUCCEEDED(hr) && wcscmp(currentPath, dllPath) != 0) {
if (MsgBox(hwnd, L"DEBUG: Native dll currently registered at a different path. Override?", currentPath, MB_YESNO) != IDYES) {
hr = S_OK;
goto end;
}
}
#endif
hr = RegisterDllInternal(dllPath, state);
if (!SUCCEEDED(hr)) {
// Try external registration
if (SUCCEEDED(RegisterDllExternal(dllPath, state))) {
hr = S_OK;
} else {
goto end;
}
}
#if _WIN64
if (!SUCCEEDED(hr)) {
goto end;
}
wsprintf(dllPath, L"%ls\\LegacyUpdate32.dll", installPath);
#ifdef _DEBUG
// Warn if registration path differs, to help with debugging
hr = GetRegistryString(HKEY_CLASSES_ROOT, L"CLSID\\{AD28E0DF-5F5A-40B5-9432-85EFD97D1F9F}\\InprocServer32", NULL, KEY_WOW64_32KEY, ¤tPath, NULL);
if (SUCCEEDED(hr) && wcscmp(currentPath, dllPath) != 0) {
if (MsgBox(hwnd, L"DEBUG: 32-bit dll currently registered at a different path. Override?", currentPath, MB_YESNO) != IDYES) {
hr = S_OK;
goto end;
}
}
#endif
hr = RegisterDllExternal(dllPath, state);
#endif
end:
if (installPath) {
LocalFree(installPath);
}
if (dllPath) {
LocalFree(dllPath);
}
if (!forLaunch) {
if (!SUCCEEDED(hr)) {
WCHAR title[4096];
LoadString(GetModuleHandle(NULL), state ? IDS_REGISTERFAILED : IDS_UNREGISTERFAILED, title, ARRAYSIZE(title));
LPWSTR message = GetMessageForHresult(hr);
MsgBox(hwnd, title, message, MB_ICONERROR);
LocalFree(message);
}
PostQuitMessage(hr);
}
return hr;
}
================================================
FILE: launcher/RegisterServer.h
================================================
#pragma once
#include
HRESULT RegisterServer(HWND hwnd, BOOL state, BOOL forLaunch);
================================================
FILE: launcher/SelfElevate.c
================================================
#include "SelfElevate.h"
#include
#include "Exec.h"
#include "VersionInfo.h"
HRESULT SelfElevate(LPWSTR args, LPDWORD code) {
LPWSTR fileName = NULL;
GetOwnFileName(&fileName);
HRESULT hr = Exec(L"runas", fileName, args, NULL, SW_SHOWDEFAULT, TRUE, code);
CHECK_HR_OR_RETURN(L"Exec");
LocalFree(fileName);
return hr;
}
================================================
FILE: launcher/SelfElevate.h
================================================
#pragma once
#include
HRESULT SelfElevate(LPWSTR args, LPDWORD code);
================================================
FILE: launcher/main.c
================================================
#include "stdafx.h"
#include "main.h"
#include "resource.h"
#include
#include
#include
#include
#include "Log.h"
#include "MsgBox.h"
#include "RegisterServer.h"
#include "Startup.h"
HINSTANCE g_hInstance;
extern void LaunchUpdateSite(int argc, LPWSTR *argv, int nCmdShow);
extern void LaunchOptions(int nCmdShow);
extern void LaunchLog(int argc, LPWSTR *argv, int nCmdShow);
extern void RunOnce(BOOL postInstall);
typedef enum Action {
ActionLaunch,
ActionOptions,
ActionLog,
ActionRunOnce,
ActionRegServer,
ActionUnregServer
} Action;
static const LPWSTR actions[] = {
L"/launch",
L"/options",
L"/log",
L"/runonce",
L"/regserver",
L"/unregserver"
};
#ifndef __clang__
EXTERN_C __declspec(dllexport)
#endif
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow) {
g_hInstance = hInstance;
Startup();
OpenLog();
// nCmdShow seems to give us garbage values. Get it from the startup info struct.
STARTUPINFO startupInfo;
GetStartupInfo(&startupInfo);
nCmdShow = (startupInfo.dwFlags & STARTF_USESHOWWINDOW) ? startupInfo.wShowWindow : SW_SHOWDEFAULT;
// Init COM
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
CHECK_HR_OR_GOTO_END(L"CoInitializeEx");
// Init common controls
INITCOMMONCONTROLSEX initComctl = {0};
initComctl.dwSize = sizeof(initComctl);
initComctl.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&initComctl);
int argc;
LPWSTR *argv = CommandLineToArgvW(GetCommandLineW(), &argc);
LPWSTR actionFlag = L"/launch";
if (argc > 1) {
actionFlag = argv[1];
}
// All remaining args past the action
LPWSTR *flags = NULL;
int flagsCount = 0;
if (argc > 2) {
flags = &argv[2];
flagsCount = argc - 2;
}
Action action = -1;
for (DWORD i = 0; i < ARRAYSIZE(actions); i++) {
if (wcscmp(actionFlag, actions[i]) == 0) {
action = i;
break;
}
}
switch (action) {
case ActionLaunch:
LaunchUpdateSite(flagsCount, flags, nCmdShow);
break;
case ActionOptions:
LaunchOptions(nCmdShow);
break;
case ActionLog:
LaunchLog(flagsCount, flags, nCmdShow);
break;
case ActionRunOnce: {
BOOL postInstall = flagsCount > 0 ? wcscmp(flags[0], L"postinstall") == 0 : FALSE;
RunOnce(postInstall);
break;
}
case ActionRegServer:
case ActionUnregServer: {
BOOL state = action == ActionRegServer;
HWND hwnd = flagsCount > 0 ? (HWND)(intptr_t)wcstol(flags[0], NULL, 10) : 0;
RegisterServer(hwnd, state, FALSE);
break;
}
default: {
WCHAR title[4096], body[4096];
LoadString(GetModuleHandle(NULL), IDS_USAGE_TITLE, title, ARRAYSIZE(title));
LoadString(GetModuleHandle(NULL), IDS_USAGE_BODY, body, ARRAYSIZE(body));
MsgBox(NULL, title, body, MB_OK);
PostQuitMessage(1);
break;
}
}
MSG msg = {0};
while (GetMessage(&msg, NULL, 0, 0) == 1) {
TranslateMessage(&msg);
DispatchMessage(&msg);
switch (msg.message) {
case WM_QUIT:
case WM_DESTROY:
hr = msg.wParam;
break;
}
}
end:
CloseLog();
CoUninitialize();
ExitProcess(hr);
return hr;
}
================================================
FILE: launcher/main.h
================================================
EXTERN_C HINSTANCE g_hInstance;
================================================
FILE: launcher/manifest.xml
================================================
true/pm
PerMonitorV2,PerMonitor
================================================
FILE: launcher/resource.h
================================================
#define IDI_APPICON 100
#define IDR_CPLTASKS 202
#define IDS_LEGACYUPDATEOCX 1
#define IDS_LEGACYUPDATE 2
#define IDS_CHECKFORUPDATES 3
#define IDS_CHECKFORUPDATES_ALT 4
#define IDS_USAGE_TITLE 5
#define IDS_USAGE_BODY 6
#define IDS_IENOTINSTALLED 7
#define IDS_REGISTERFAILED 8
#define IDS_UNREGISTERFAILED 9
#define IDS_RUNONCEFAILED 10
#define IDS_RUNONCESAFEMODE 11
#define IDS_OSUPGRADED 12
#define ID_MANIFEST 1
================================================
FILE: launcher/resource.rc
================================================
#include "resource.h"
#include
#include "Version.h"
/////////////////////////////////////////////////////////////////////////////
// English (United States) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(65001)
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION VERSION
PRODUCTVERSION VERSION
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG | VS_FF_PRERELEASE
#else
FILEFLAGS 0
#endif
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE VFT2_UNKNOWN
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "Hashbang Productions"
VALUE "FileDescription", "Legacy Update"
VALUE "FileVersion", VERSION_STRING
VALUE "InternalName", "LegacyUpdate.exe"
VALUE "LegalCopyright", "© Hashbang Productions. All rights reserved."
VALUE "OriginalFilename", "LegacyUpdate.exe"
VALUE "ProductName", "Legacy Update"
VALUE "ProductVersion", VERSION_STRING
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x0409, 0x04b0
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_APPICON ICON "../LegacyUpdate/icon.ico"
/////////////////////////////////////////////////////////////////////////////
//
// XML
//
IDR_CPLTASKS XML "CplTasks.xml"
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE
BEGIN
// Shortcuts
IDS_LEGACYUPDATEOCX "Legacy Update"
IDS_LEGACYUPDATE "Legacy Update"
IDS_CHECKFORUPDATES "Check for updates"
IDS_CHECKFORUPDATES_ALT "Check for software and driver updates via Legacy Update."
// Usage
IDS_USAGE_TITLE "LegacyUpdate.exe usage"
IDS_USAGE_BODY ""
"LegacyUpdate.exe [/launch|/options|/log|/regserver|/unregserver]\n"
"\n"
"/launch\n"
" Launch Legacy Update website in Internet Explorer\n"
"\n"
"/options\n"
" Open the Windows Update Options control panel\n"
"\n"
"/log [system|local|locallow|windowsupdate]\n"
" Open the specified log file\n"
"\n"
"/regserver\n"
" Register ActiveX control\n"
"\n"
"/unregserver\n"
" Unregister ActiveX control\n"
"\n"
"If no parameters are provided, /launch is assumed."
// Launch
IDS_IENOTINSTALLED "Internet Explorer is not installed. Use Optional Features in Control Panel to install it before using Legacy Update."
IDS_OSUPGRADED "Windows has been upgraded since Legacy Update was installed. Run Legacy Update setup again to ensure all prerequisites are installed."
// RegisterServer
IDS_REGISTERFAILED "Failed to register Legacy Update ActiveX control"
IDS_UNREGISTERFAILED "Failed to unregister Legacy Update ActiveX control"
// RunOnce
IDS_RUNONCEFAILED "Continuing Legacy Update setup failed"
IDS_RUNONCESAFEMODE "Legacy Update setup was cancelled because the system is running in Safe Mode."
END
/////////////////////////////////////////////////////////////////////////////
//
// Manifest
//
ID_MANIFEST RT_MANIFEST "manifest.xml"
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////
================================================
FILE: launcher/stdafx.h
================================================
#pragma once
#ifndef STRICT
#define STRICT
#endif
#define WINVER _WIN32_WINNT_WIN2K
#define _WIN32_WINNT _WIN32_WINNT_WIN2K
// Use msvcrt stdio functions
#define __USE_MINGW_ANSI_STDIO 0
// Enable COM C interfaces
#define CINTERFACE
#define COBJMACROS
#define INITGUID
#include "resource.h"
#include
#include "Trace.h"
================================================
FILE: nsisplugin/CloseIEWindows.c
================================================
#include
#include
#include
#include
const LPWSTR LegacyUpdateSiteURLHttp = L"http://legacyupdate.net/";
const LPWSTR LegacyUpdateSiteURLHttps = L"https://legacyupdate.net/";
PLUGIN_METHOD(CloseIEWindows) {
PLUGIN_INIT();
// Find and close IE windows that might have the ActiveX control loaded
IShellWindows *windows;
HRESULT hr = CoCreateInstance(&CLSID_ShellWindows, NULL, CLSCTX_ALL, &IID_IShellWindows, (void **)&windows);
if (hr == REGDB_E_CLASSNOTREG) {
// Expected when on the SYSTEM desktop
goto end;
}
CHECK_HR_OR_GOTO_END(L"CoCreateInstance");
long count = 0;
hr = IShellWindows_get_Count(windows, &count);
CHECK_HR_OR_GOTO_END(L"get_Count");
VARIANT index = {0};
index.vt = VT_I4;
for (long i = 0; i <= count; i++) {
IDispatch *item = NULL;
index.lVal = i;
hr = IShellWindows_Item(windows, index, &item);
if (!SUCCEEDED(hr) || !item) {
continue;
}
IWebBrowser2 *browser = NULL;
hr = IDispatch_QueryInterface(item, &IID_IWebBrowser2, (void **)&browser);
IDispatch_Release(item);
if (!SUCCEEDED(hr)) {
continue;
}
BSTR location = NULL;
hr = IWebBrowser2_get_LocationURL(browser, &location);
if (!SUCCEEDED(hr)) {
IWebBrowser2_Release(browser);
continue;
}
if (wcsstr(location, LegacyUpdateSiteURLHttp) != NULL || wcsstr(location, LegacyUpdateSiteURLHttps) != NULL) {
hr = IWebBrowser2_Quit(browser);
if (!SUCCEEDED(hr)) {
TRACE(L"Quit failed: %08x", hr);
}
// Wait up to 10 seconds for the window to close
HWND hwnd = 0;
hr = IWebBrowser2_get_HWND(browser, (SHANDLE_PTR *)&hwnd);
if (SUCCEEDED(hr) && hwnd != 0) {
DWORD start = GetTickCount();
while (IsWindow(hwnd) && GetTickCount() - start < 10000) {
Sleep(100);
}
}
}
SysFreeString(location);
IWebBrowser2_Release(browser);
}
// Find and exit all dllhosts
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (snapshot == INVALID_HANDLE_VALUE) {
goto end;
}
PROCESSENTRY32W entry = {0};
entry.dwSize = sizeof(PROCESSENTRY32W);
if (Process32FirstW(snapshot, &entry)) {
do {
if (_wcsicmp(entry.szExeFile, L"dllhost.exe") != 0) {
continue;
}
// Loop over loaded modules to determine if ours is loaded
HANDLE process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_TERMINATE, FALSE, entry.th32ProcessID);
if (process) {
HANDLE module = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, entry.th32ProcessID);
if (module == INVALID_HANDLE_VALUE) {
CloseHandle(process);
continue;
}
MODULEENTRY32W moduleEntry = {0};
moduleEntry.dwSize = sizeof(MODULEENTRY32W);
if (Module32FirstW(module, &moduleEntry)) {
do {
LPWSTR dllName = wcsrchr(moduleEntry.szExePath, L'\\');
if (!dllName) {
continue;
}
dllName += 1;
if (_wcsicmp(dllName, L"LegacyUpdate.dll") == 0 || _wcsicmp(dllName, L"LegacyUpdate32.dll") == 0) {
TerminateProcess(process, 0);
// Wait up to 10 seconds for the dllhost to close
DWORD start = GetTickCount();
while (GetTickCount() - start < 10000) {
Sleep(100);
DWORD exitCode = 0;
if (GetExitCodeProcess(process, &exitCode) && exitCode != STILL_ACTIVE) {
break;
}
}
break;
}
} while (Module32NextW(module, &moduleEntry));
}
CloseHandle(module);
CloseHandle(process);
}
} while (Process32NextW(snapshot, &entry));
}
CloseHandle(snapshot);
end:
if (windows) {
IShellWindows_Release(windows);
}
pushint(hr);
}
================================================
FILE: nsisplugin/DialogInit.c
================================================
#include "stdafx.h"
#undef _WIN32_WINNT
#define _WIN32_WINNT _WIN32_WINNT_VISTA
#include
#include
#include
#include
#include
#include
#include "main.h"
#include "LoadImage.h"
#include "Registry.h"
#include "VersionInfo.h"
#ifndef WM_DWMCOMPOSITIONCHANGED
#define WM_DWMCOMPOSITIONCHANGED 0x031e
#endif
#define DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1 19
#define DWMWA_USE_IMMERSIVE_DARK_MODE 20
#define DWMWA_CAPTION_COLOR 35
#define DWMWA_SYSTEMBACKDROP_TYPE 38
#define DWMWA_COLOR_NONE 0xFFFFFFFE
#define DWMSBT_MAINWINDOW 2
#define IDI_BANNER_WORDMARK_LIGHT 1337
#define IDI_BANNER_WORDMARK_DARK 1338
#define IDI_BANNER_WORDMARK_GLOW 1339
typedef HRESULT (WINAPI *_DwmExtendFrameIntoClientArea)(HWND hWnd, const MARGINS *pMarInset);
typedef HRESULT (WINAPI *_DwmIsCompositionEnabled)(BOOL *pfEnabled);
typedef HRESULT (WINAPI *_DwmDefWindowProc)(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *plResult);
typedef HRESULT (WINAPI *_DwmSetWindowAttribute)(HWND hwnd, DWORD dwAttribute, LPCVOID pvAttribute, DWORD cbAttribute);
typedef HRESULT (WINAPI *_SetWindowThemeAttribute)(HWND hwnd, enum WINDOWTHEMEATTRIBUTETYPE eAttribute, PVOID pvAttribute, DWORD cbAttribute);
typedef BOOL (WINAPI *_IsThemeActive)(void);
typedef HTHEME (WINAPI *_OpenThemeData)(HWND hwnd, LPCWSTR pszClassList);
typedef HRESULT (WINAPI *_CloseThemeData)(HTHEME hTheme);
typedef HRESULT (WINAPI *_DrawThemeBackground)(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pRect, const RECT *pClipRect);
static _DwmExtendFrameIntoClientArea $DwmExtendFrameIntoClientArea;
static _DwmIsCompositionEnabled $DwmIsCompositionEnabled;
static _DwmDefWindowProc $DwmDefWindowProc;
static _DwmSetWindowAttribute $DwmSetWindowAttribute;
static _SetWindowThemeAttribute $SetWindowThemeAttribute;
static _IsThemeActive $IsThemeActive;
static _OpenThemeData $OpenThemeData;
static _CloseThemeData $CloseThemeData;
static _DrawThemeBackground $DrawThemeBackground;
static const WCHAR BackgroundClassName[] = L"LegacyUpdateBackground";
typedef enum Theme {
ThemeUnknown = -1,
ThemeClassic,
ThemeBasic,
ThemeAeroLight,
ThemeAeroDark
} Theme;
static HBITMAP g_bannerWordmark;
static HBITMAP g_bannerWordmarkGlow;
static HTHEME g_aeroTheme;
static Theme g_theme = ThemeUnknown;
static WNDPROC g_dialogOrigWndProc;
static WNDPROC g_bannerOrigWndProc;
static WNDPROC g_bottomOrigWndProc;
static HWND g_backgroundWindow;
static Theme GetTheme(void) {
BOOL enabled = FALSE;
if (!$DwmIsCompositionEnabled || !$IsThemeActive || !SUCCEEDED($DwmIsCompositionEnabled(&enabled))) {
return ThemeClassic;
}
if (enabled) {
DWORD light = 1;
if (AtLeastWin10_1809()) {
GetRegistryDword(HKEY_CURRENT_USER, REGPATH_WIN_PERSONALIZE, L"AppsUseLightTheme", 0, &light);
}
return light ? ThemeAeroLight : ThemeAeroDark;
}
return $IsThemeActive() ? ThemeBasic : ThemeClassic;
}
static void ConfigureWindow(void) {
HWND bannerWindow = GetDlgItem(g_hwndParent, 1046);
HWND bannerDivider = GetDlgItem(g_hwndParent, 1047);
HWND bottomDivider = GetDlgItem(g_hwndParent, 6900);
if (!bannerWindow || !bannerDivider || !bottomDivider) {
return;
}
Theme theme = GetTheme();
if (g_theme != theme) {
g_theme = theme;
MARGINS margins = {0};
if (theme >= ThemeAeroLight) {
// Set glass area
RECT rect = {0};
GetWindowRect(bannerWindow, &rect);
margins.cyTopHeight = rect.bottom - rect.top;
}
if ($DwmExtendFrameIntoClientArea) {
$DwmExtendFrameIntoClientArea(g_hwndParent, &margins);
}
ShowWindow(bannerDivider, theme >= ThemeBasic ? SW_HIDE : SW_SHOW);
ShowWindow(bottomDivider, theme >= ThemeBasic ? SW_HIDE : SW_SHOW);
if (g_theme >= ThemeBasic) {
DWORD wordmark = g_theme == ThemeAeroDark ? IDI_BANNER_WORDMARK_DARK : IDI_BANNER_WORDMARK_LIGHT;
g_bannerWordmark = LoadPNGResource(NULL, MAKEINTRESOURCE(wordmark), L"PNG");
if (g_theme >= ThemeAeroLight && AtMostWin7()) {
g_bannerWordmarkGlow = LoadPNGResource(NULL, MAKEINTRESOURCE(IDI_BANNER_WORDMARK_GLOW), L"PNG");
}
} else {
DeleteObject(g_bannerWordmark);
DeleteObject(g_bannerWordmarkGlow);
g_bannerWordmark = NULL;
g_bannerWordmarkGlow = NULL;
}
// Set dark mode state
if (AtLeastWin10_1809() && $DwmSetWindowAttribute) {
DWORD attr = AtLeastWin10_2004() ? DWMWA_USE_IMMERSIVE_DARK_MODE : DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1;
DWORD value = g_theme == ThemeAeroDark;
$DwmSetWindowAttribute(g_hwndParent, attr, &value, sizeof(value));
}
}
}
static LRESULT CALLBACK BannerWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
if (g_theme < ThemeBasic) {
return CallWindowProc(g_bannerOrigWndProc, hwnd, uMsg, wParam, lParam);
}
switch (uMsg) {
case WM_PAINT: {
PAINTSTRUCT ps = {0};
HDC hdc = BeginPaint(hwnd, &ps);
RECT rect = {0};
GetClientRect(hwnd, &rect);
// Draw base color for glass area
FillRect(hdc, &rect, GetStockObject(BLACK_BRUSH));
// Draw Aero Basic titlebar
if (g_theme == ThemeBasic && g_aeroTheme && $DrawThemeBackground) {
int state = GetActiveWindow() == g_hwndParent ? AW_S_TITLEBAR_ACTIVE : AW_S_TITLEBAR_INACTIVE;
$DrawThemeBackground(g_aeroTheme, hdc, AW_TITLEBAR, state, &rect, NULL);
}
float scale = (float)GetDeviceCaps(hdc, LOGPIXELSX) / 96.0f;
BLENDFUNCTION blendFunc = {0};
blendFunc.BlendOp = AC_SRC_OVER;
blendFunc.BlendFlags = 0;
blendFunc.SourceConstantAlpha = 0xFF;
blendFunc.AlphaFormat = AC_SRC_ALPHA;
// Draw wordmark with alpha blending
if (g_bannerWordmarkGlow) {
HDC hdcMem = CreateCompatibleDC(hdc);
HBITMAP hbmOld = (HBITMAP)SelectObject(hdcMem, g_bannerWordmarkGlow);
BITMAP bitmap = {0};
GetObject(g_bannerWordmarkGlow, sizeof(bitmap), &bitmap);
LONG width = bitmap.bmWidth * scale;
LONG height = bitmap.bmHeight * scale;
LONG x = (rect.right - rect.left - width) / 2;
LONG y = (rect.bottom - rect.top - height) / 2;
SetStretchBltMode(hdc, HALFTONE);
AlphaBlend(hdc,
x, y, width, height, hdcMem,
0, 0, bitmap.bmWidth, bitmap.bmHeight, blendFunc);
SelectObject(hdcMem, hbmOld);
DeleteDC(hdcMem);
}
if (g_bannerWordmark) {
HDC hdcMem = CreateCompatibleDC(hdc);
HBITMAP hbmOld = (HBITMAP)SelectObject(hdcMem, g_bannerWordmark);
BITMAP bitmap = {0};
GetObject(g_bannerWordmark, sizeof(bitmap), &bitmap);
LONG width = bitmap.bmWidth * scale;
LONG height = bitmap.bmHeight * scale;
LONG x = (rect.right - rect.left - width) / 2;
LONG y = ((rect.bottom - rect.top - height) / 2) - (1 * scale);
SetStretchBltMode(hdc, HALFTONE);
AlphaBlend(hdc,
x, y, width, height, hdcMem,
0, 0, bitmap.bmWidth, bitmap.bmHeight, blendFunc);
SelectObject(hdcMem, hbmOld);
DeleteDC(hdcMem);
}
EndPaint(hwnd, &ps);
return 0;
}
case WM_ERASEBKGND:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
case WM_NCHITTEST:
// Pass through to parent
return HTTRANSPARENT;
}
if (!g_bannerOrigWndProc) {
return 0;
}
return CallWindowProc(g_bannerOrigWndProc, hwnd, uMsg, wParam, lParam);
}
static LRESULT CALLBACK BottomWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_PAINT: {
// Draw command area background (grey with divider line)
if (g_theme < ThemeBasic || !g_aeroTheme || !$DrawThemeBackground) {
break;
}
PAINTSTRUCT ps = {0};
HDC hdc = BeginPaint(hwnd, &ps);
RECT rect = {0};
GetClientRect(hwnd, &rect);
$DrawThemeBackground(g_aeroTheme, hdc, AW_COMMANDAREA, 0, &rect, NULL);
EndPaint(hwnd, &ps);
return 0;
}
}
if (!g_bottomOrigWndProc) {
return 0;
}
return CallWindowProc(g_bottomOrigWndProc, hwnd, uMsg, wParam, lParam);
}
static LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
if (g_theme >= ThemeAeroLight && $DwmDefWindowProc) {
LRESULT lRet = 0;
if ($DwmDefWindowProc(hwnd, uMsg, wParam, lParam, &lRet)) {
return lRet;
}
}
switch (uMsg) {
case WM_THEMECHANGED:
case WM_DWMCOMPOSITIONCHANGED:
ConfigureWindow();
break;
case WM_ACTIVATE:
case WM_NCACTIVATE:
// Redraw banner on activation
if (g_theme == ThemeBasic) {
InvalidateRect(GetDlgItem(hwnd, 1046), NULL, FALSE);
}
break;
case WM_DESTROY:
if (g_backgroundWindow) {
DestroyWindow(g_backgroundWindow);
g_backgroundWindow = NULL;
}
break;
case WM_NCHITTEST: {
if (g_theme < ThemeBasic) {
break;
}
// Allow drag in the header area
HWND bannerWindow = GetDlgItem(hwnd, 1046);
if (!bannerWindow) {
break;
}
POINT hit = {GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)};
ScreenToClient(hwnd, &hit);
RECT rect = {0};
GetWindowRect(bannerWindow, &rect);
rect.right -= rect.left;
rect.bottom -= rect.top;
rect.left = 0;
rect.top = 0;
if (PtInRect(&rect, hit)) {
return HTCAPTION;
}
break;
}
}
if (!g_dialogOrigWndProc) {
return 0;
}
return CallWindowProc(g_dialogOrigWndProc, hwnd, uMsg, wParam, lParam);
}
static LRESULT CALLBACK BackgroundWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_PAINT: {
PAINTSTRUCT ps = {0};
HDC hdc = BeginPaint(hwnd, &ps);
RECT rect = {0};
GetClientRect(hwnd, &rect);
// Gradient
int height = rect.bottom - rect.top;
int width = rect.right - rect.left;
for (int i = 0; i < height; i++) {
float ratio = (float)(i - rect.top) / (float)(rect.bottom - rect.top);
COLORREF color = RGB(
(int)(0x00 * (1 - ratio) + 0x00 * ratio),
(int)(0x00 * (1 - ratio) + 0x00 * ratio),
(int)(0x80 * (1 - ratio) + 0x00 * ratio)
);
RECT lineRect = {rect.left, rect.top + i, rect.right, rect.top + i + 1};
HBRUSH brush = CreateSolidBrush(color);
FillRect(hdc, &lineRect, brush);
DeleteObject(brush);
}
HFONT font = CreateFont(-40, 0, 0, 0, FW_BOLD, TRUE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, FF_DONTCARE | FIXED_PITCH, L"Times New Roman");
HFONT oldFont = (HFONT)SelectObject(hdc, font);
static LPWSTR text = L"Legacy Update";
// Shadow
SetTextColor(hdc, RGB(0x00, 0x00, 0x00));
SetBkMode(hdc, TRANSPARENT);
TextOut(hdc, 10 + 4, 4 + 4, text, lstrlen(text));
// Text
SetTextColor(hdc, RGB(0xff, 0xff, 0xff));
TextOut(hdc, 10, 4, text, lstrlen(text));
SelectObject(hdc, oldFont);
DeleteObject(font);
EndPaint(hwnd, &ps);
return 0;
}
case WM_ERASEBKGND:
return 1;
case WM_ACTIVATE:
// If we become foreground, bring the main dialog to front
if (LOWORD(wParam) != WA_INACTIVE) {
SetForegroundWindow(g_hwndParent);
}
return 0;
case WM_CLOSE:
// Don't allow closing
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
static UINT_PTR NSISPluginCallback(enum NSPIM event) {
// Does nothing, but keeping a callback registered prevents NSIS from unloading the plugin
return 0;
}
PLUGIN_METHOD(DialogInit) {
PLUGIN_INIT();
if (g_dialogOrigWndProc) {
return;
}
extra->RegisterPluginCallback(g_hInstance, NSISPluginCallback);
// Get symbols
HMODULE dwmapi = LoadLibrary(L"dwmapi.dll");
if (dwmapi) {
$DwmExtendFrameIntoClientArea = (_DwmExtendFrameIntoClientArea)GetProcAddress(dwmapi, "DwmExtendFrameIntoClientArea");
$DwmIsCompositionEnabled = (_DwmIsCompositionEnabled)GetProcAddress(dwmapi, "DwmIsCompositionEnabled");
$DwmDefWindowProc = (_DwmDefWindowProc)GetProcAddress(dwmapi, "DwmDefWindowProc");
$DwmSetWindowAttribute = (_DwmSetWindowAttribute)GetProcAddress(dwmapi, "DwmSetWindowAttribute");
}
HMODULE uxtheme = LoadLibrary(L"uxtheme.dll");
if (uxtheme) {
$SetWindowThemeAttribute = (_SetWindowThemeAttribute)GetProcAddress(uxtheme, "SetWindowThemeAttribute");
$IsThemeActive = (_IsThemeActive)GetProcAddress(uxtheme, "IsThemeActive");
$OpenThemeData = (_OpenThemeData)GetProcAddress(uxtheme, "OpenThemeData");
$CloseThemeData = (_CloseThemeData)GetProcAddress(uxtheme, "CloseThemeData");
$DrawThemeBackground = (_DrawThemeBackground)GetProcAddress(uxtheme, "DrawThemeBackground");
}
// Get AeroWizard theme
if ($OpenThemeData) {
g_aeroTheme = $OpenThemeData(g_hwndParent, L"AeroWizard");
}
// Hide title caption/icon
if ($SetWindowThemeAttribute) {
WTA_OPTIONS options;
options.dwFlags = WTNCA_NODRAWCAPTION | WTNCA_NODRAWICON;
options.dwMask = WTNCA_NODRAWCAPTION | WTNCA_NODRAWICON;
$SetWindowThemeAttribute(g_hwndParent, WTA_NONCLIENT, &options, sizeof(options));
}
// Enable Acrylic blur
if (AtLeastWin11_21H1() && $DwmSetWindowAttribute) {
// I stole this undocumented 1029 attr from Microsoft Store's StoreInstaller.exe
BOOL modern = AtLeastWin11_22H2();
DWORD attr = modern ? DWMWA_SYSTEMBACKDROP_TYPE : 1029;
DWORD value = modern ? DWMSBT_MAINWINDOW : 1;
$DwmSetWindowAttribute(g_hwndParent, attr, &value, sizeof(value));
// Hide caption background
value = DWMWA_COLOR_NONE;
$DwmSetWindowAttribute(g_hwndParent, DWMWA_CAPTION_COLOR, &value, sizeof(value));
}
// Set up extended client frame
ConfigureWindow();
// Set up window procedures
HWND bannerWindow = GetDlgItem(g_hwndParent, 1046);
HWND bottomWindow = GetDlgItem(g_hwndParent, 6901);
g_dialogOrigWndProc = (WNDPROC)SetWindowLongPtr(g_hwndParent, GWLP_WNDPROC, (LONG_PTR)MainWndProc);
g_bannerOrigWndProc = (WNDPROC)SetWindowLongPtr(bannerWindow, GWLP_WNDPROC, (LONG_PTR)BannerWndProc);
g_bottomOrigWndProc = (WNDPROC)SetWindowLongPtr(bottomWindow, GWLP_WNDPROC, (LONG_PTR)BottomWndProc);
// Nothing in particular 👀
SYSTEMTIME date = {0};
GetLocalTime(&date);
if (date.wMonth == 4 && date.wDay == 1) {
WNDCLASS wndClass = {0};
wndClass.style = CS_VREDRAW | CS_HREDRAW | CS_OWNDC | CS_NOCLOSE;
wndClass.lpfnWndProc = BackgroundWndProc;
wndClass.hInstance = g_hInstance;
wndClass.lpszClassName = BackgroundClassName;
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
if (RegisterClass(&wndClass)) {
int width = GetSystemMetrics(SM_CXSCREEN);
int height = GetSystemMetrics(SM_CYSCREEN);
g_backgroundWindow = CreateWindowEx(
WS_EX_TOOLWINDOW,
wndClass.lpszClassName,
L"",
WS_POPUP,
0, 0, width, height,
NULL, NULL,
wndClass.hInstance,
NULL
);
if (g_backgroundWindow) {
ShowWindow(g_backgroundWindow, SW_SHOW);
}
}
}
}
================================================
FILE: nsisplugin/EnableMicrosoftUpdate.c
================================================
#include
#include
#include
#include "main.h"
static const LPWSTR MicrosoftUpdateServiceID = L"7971f918-a847-4430-9279-4a52d1efe18d";
PLUGIN_METHOD(EnableMicrosoftUpdate) {
PLUGIN_INIT();
IUpdateServiceManager2 *serviceManager = NULL;
IUpdateServiceRegistration *registration = NULL;
HRESULT hr = CoCreateInstance(&CLSID_UpdateServiceManager, NULL, CLSCTX_INPROC_SERVER, &IID_IUpdateServiceManager2, (void **)&serviceManager);
CHECK_HR_OR_GOTO_END(L"CoCreateInstance");
BSTR clientID = SysAllocString(L"Legacy Update");
hr = IUpdateServiceManager2_put_ClientApplicationID(serviceManager, clientID);
SysFreeString(clientID);
CHECK_HR_OR_GOTO_END(L"put_ClientApplicationID");
BSTR serviceID = SysAllocString(MicrosoftUpdateServiceID);
BSTR serviceCab = SysAllocString(L"");
hr = IUpdateServiceManager2_AddService2(serviceManager, serviceID, asfAllowPendingRegistration | asfAllowOnlineRegistration | asfRegisterServiceWithAU, serviceCab, ®istration);
SysFreeString(serviceID);
SysFreeString(serviceCab);
CHECK_HR_OR_GOTO_END(L"AddService2");
end:
if (registration) {
IUpdateServiceManager2_Release(registration);
}
if (serviceManager) {
IUpdateServiceManager2_Release(serviceManager);
}
pushint(hr);
}
================================================
FILE: nsisplugin/Exec.c
================================================
/*
Copyright (C) 2002 Robert Rainwater
Copyright (C) 2002-2023 Nullsoft and Contributors
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
#include
#include
#include
#include // nsis plugin
#include "main.h"
#if defined(_MSC_VER) && !defined(GetVersion)
#if _MSC_VER >= 1500
FORCEINLINE DWORD NoDepr_GetVersion(void) { __pragma(warning(push))__pragma(warning(disable:4996)) DWORD r = GetVersion(); __pragma(warning(pop)) return r; }
#define GetVersion NoDepr_GetVersion
#endif //~ _MSC_VER >= 1500
#endif //~ _MSC_VER
#define TAB_REPLACE _T(" ")
#define TAB_REPLACE_SIZE (sizeof(TAB_REPLACE) - sizeof(_T("")))
#define TAB_REPLACE_CCH (TAB_REPLACE_SIZE / sizeof(_T("")))
enum { MODE_IGNOREOUTPUT = 0, MODE_LINES = 1, MODE_STACK = 2 };
#define LOOPTIMEOUT 100
static HWND g_hwndList;
static void ExecScript(BOOL log);
static TCHAR *my_strstr(TCHAR *a, TCHAR *b);
static unsigned int my_atoi(TCHAR *s);
static int WINAPI AsExeWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow);
PLUGIN_METHOD(Exec) {
PLUGIN_INIT();
ExecScript(MODE_IGNOREOUTPUT);
}
PLUGIN_METHOD(ExecToLog) {
PLUGIN_INIT();
ExecScript(extra->exec_flags->status_update & 1 ? MODE_LINES : MODE_IGNOREOUTPUT);
}
PLUGIN_METHOD(ExecToStack) {
PLUGIN_INIT();
ExecScript(MODE_STACK);
}
static BOOL IsLeadSurrogateUTF16(unsigned short c) { return c >= 0xd800 && c <= 0xdbff; }
static BOOL IsTrailSurrogateUTF16(unsigned short c) { return c >= 0xdc00 && c <= 0xdfff; }
static PWSTR MyCharNext(PCWSTR p)
{
// Note: This is wrong for surrogate pair combining characters but CharNextW does
// not support surrogate pairs correctly so we have to manually handle the pairs.
if (!p[0]) return (PWSTR) p;
if (IsLeadSurrogateUTF16(p[0]) && IsTrailSurrogateUTF16(p[1])) return (PWSTR) p + 2; // Current is a surrogate pair, we incorrectly assume that it is not followed by combining characters.
if (IsLeadSurrogateUTF16(p[1]) && IsTrailSurrogateUTF16(p[2])) return (PWSTR) p + 1; // Next is a surrogate pair, we incorrectly assume that it is not a combining character for the current character.
return (CharNextW)(p);
}
#define CharNextW MyCharNext
static void TruncateStringUTF16LE(LPWSTR Buffer, SIZE_T Length, LPCWSTR Overflow, SIZE_T lenOver) {
if (Length) {
LPWSTR p = &Buffer[Length - 1];
UINT stripBaseCharIfCuttingCombining = TRUE;
// CharNextW is buggy on XP&2003 but we don't care enough to call GetStringTypeW (http://archives.miloush.net/michkap/archive/2005/01/30/363420.html)
if (stripBaseCharIfCuttingCombining && lenOver) {
WCHAR buf[] = { *p, Overflow[0], lenOver > 1 ? Overflow[1] : L' ', L'\0' };
for (;;) {
BOOL comb = CharNextW(buf) > buf + 1;
if (!comb || p < Buffer) break;
*((WORD*)((BYTE*)&buf[1])) = *((WORD*)((BYTE*)&buf[0]));
buf[0] = *p;
*p-- = L'\0';
}
}
if (IsLeadSurrogateUTF16(*p)) {
*p = L'\0'; // Avoid incomplete pair
}
}
}
static void TruncateStringMB(UINT Codepage, LPSTR Buffer, SIZE_T Length, unsigned short OverflowCh) {
if (Length) {
CHAR *p = &Buffer[Length - 1], buf[] = { *p, ' ', ' ', '\0' };
if (CharNextExA(Codepage, buf, 0) > buf + 1) { // Remove incomplete DBCS character?
*p = '\0';
}
}
}
static BOOL IsWOW64(void) {
#ifdef _WIN64
return FALSE;
#else
typedef BOOL (WINAPI*ISWOW64PROCESS)(HANDLE, BOOL*);
ISWOW64PROCESS pfIsWow64Process;
typedef BOOL (WINAPI*ISWOW64PROCESS2)(HANDLE, USHORT*, USHORT*);
ISWOW64PROCESS2 pfIsWow64Process2;
HANDLE hProcess = GetCurrentProcess();
HMODULE hK32 = GetModuleHandleA("KERNEL32");
UINT_PTR retval;
USHORT appmach, image_file_machine_unknown = 0;
CHAR funcnam[16]
#if defined(_MSC_VER) && (_MSC_VER-0 <= 1400)
= "IsWow64Process2"; // MOVSD * 4
#else
; lstrcpyA(funcnam, "IsWow64Process2");
#endif
pfIsWow64Process2 = (ISWOW64PROCESS2) GetProcAddress(hK32, funcnam);
if (pfIsWow64Process2 && pfIsWow64Process2(hProcess, &appmach, NULL)) {
retval = image_file_machine_unknown != appmach;
}
else {
BOOL wow64;
pfIsWow64Process = (ISWOW64PROCESS) GetProcAddress(hK32, (funcnam[14] = '\0', funcnam));
retval = (UINT_PTR) pfIsWow64Process;
if (pfIsWow64Process && (retval = pfIsWow64Process(hProcess, &wow64))) {
retval = wow64;
}
}
return (BOOL) (UINT) retval;
#endif
}
// Tim Kosse's LogMessage
#ifdef UNICODE
static void LogMessage(const TCHAR *pStr, BOOL bOEM) {
#else
static void LogMessage(TCHAR *pStr, BOOL bOEM) {
#endif
LVITEM item;
int nItemCount;
if (!g_hwndList) return;
//if (!*pStr) return;
#ifndef UNICODE
if (bOEM == TRUE) OemToCharBuff(pStr, pStr, lstrlen(pStr));
#endif
nItemCount=(int) SendMessage(g_hwndList, LVM_GETITEMCOUNT, 0, 0);
item.mask=LVIF_TEXT;
item.pszText=(TCHAR *)pStr;
item.cchTextMax=0;
item.iItem=nItemCount, item.iSubItem=0;
ListView_InsertItem(g_hwndList, &item);
ListView_EnsureVisible(g_hwndList, item.iItem, 0);
}
void ExecScript(int mode) {
TCHAR szRet[128];
TCHAR meDLLPath[MAX_PATH];
TCHAR *g_exec, *executor;
TCHAR *pExec;
int ignoreData = mode == MODE_IGNOREOUTPUT;
int logMode = mode == MODE_LINES, stackMode = mode == MODE_STACK;
unsigned int to, tabExpandLength = logMode ? TAB_REPLACE_CCH : 0, codepage;
BOOL bOEM, forceNarrowInput = FALSE;
*szRet = _T('\0');
if (!IsWOW64()) {
TCHAR* p;
int nComSpecSize;
nComSpecSize = GetModuleFileName(g_hInstance, meDLLPath, MAX_PATH) + 2; // 2 chars for quotes
g_exec = (TCHAR *)GlobalAlloc(GPTR, sizeof(TCHAR) * (g_stringsize+nComSpecSize+2)); // 1 for space, 1 for null
p = meDLLPath + nComSpecSize - 2; // point p at null char of meDLLPath
*g_exec = _T('"');
executor = g_exec + 1;
// Look for the last '\' in path.
do
{
if (*p == _T('\\'))
break;
p = CharPrev(meDLLPath, p);
}
while (p > meDLLPath);
if (p == meDLLPath)
{
// bad path
pushstring(_T("error"));
GlobalFree(g_exec);
return;
}
*p = 0;
GetTempFileName(meDLLPath, _T("ns"), 0, executor); // executor = new temp file name in module path.
*p = _T('\\');
if (CopyFile(meDLLPath, executor, FALSE)) // copy current DLL to temp file in module path.
{
HANDLE hFile, hMapping;
LPBYTE pMapView;
PIMAGE_NT_HEADERS pNTHeaders;
hFile = CreateFile(executor, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING,0, 0);
hMapping = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL);
pMapView = MapViewOfFile(hMapping, FILE_MAP_WRITE, 0, 0, 0);
if (pMapView)
{
pNTHeaders = (PIMAGE_NT_HEADERS)(pMapView + ((PIMAGE_DOS_HEADER)pMapView)->e_lfanew);
// Turning the copied DLL into a stripped down executable.
pNTHeaders->FileHeader.Characteristics = IMAGE_FILE_32BIT_MACHINE | IMAGE_FILE_LOCAL_SYMS_STRIPPED |
IMAGE_FILE_LINE_NUMS_STRIPPED | IMAGE_FILE_EXECUTABLE_IMAGE;
// Windows character-mode user interface (CUI) subsystem.
pNTHeaders->OptionalHeader.Subsystem = IMAGE_SUBSYSTEM_WINDOWS_CUI;
// g_hInst is assumed to be the very base of the DLL in memory.
// WinMain will have the address of the WinMain function in memory.
// Getting the difference gets you the relative location of the
// WinMain function.
pNTHeaders->OptionalHeader.AddressOfEntryPoint = (DWORD) ((DWORD_PTR)AsExeWinMain - (DWORD_PTR)g_hInstance);
UnmapViewOfFile(pMapView);
}
CloseHandle(hMapping);
CloseHandle(hFile);
}
lstrcat(g_exec, _T("\""));
// add space
pExec = g_exec + lstrlen(g_exec);
*pExec = _T(' ');
pExec++;
} else {
executor = NULL;
g_exec = (TCHAR *)GlobalAlloc(GPTR, sizeof(TCHAR) * (g_stringsize+1)); // 1 for NULL
pExec = g_exec;
}
to = 0; // default is no timeout
bOEM = FALSE; // default is no OEM->ANSI conversion
g_hwndList = NULL;
// g_hwndParent = the caller, usually NSIS installer.
if (g_hwndParent) // The window class name for dialog boxes is "#32770"
g_hwndList = FindWindowEx(FindWindowEx(g_hwndParent, NULL, _T("#32770"), NULL), NULL, _T("SysListView32"), NULL);
// g_exec is the complete command to run: It has the copy of this DLL turned
// into an executable right now.
params:
// Get the command I need to run from the NSIS stack.
popstring(pExec);
if (my_strstr(pExec, _T("/TIMEOUT=")) == pExec) {
TCHAR *szTimeout = pExec + 9;
to = my_atoi(szTimeout);
*pExec = 0;
goto params;
}
if (!lstrcmpi(pExec, _T("/OEM"))) {
bOEM = forceNarrowInput = TRUE;
*pExec = 0;
goto params;
}
if (!lstrcmpi(pExec, _T("/MBCS"))) {
forceNarrowInput = TRUE;
*pExec = 0;
goto params;
}
if (!pExec[0])
{
pushstring(_T("error"));
if (pExec-2 >= g_exec)
*(pExec-2) = _T('\0'); // skip space and quote
if (executor) DeleteFile(executor);
GlobalFree(g_exec);
return;
}
// Got all the params off the stack.
{
STARTUPINFO si = {0};
si.cb = sizeof(si);
SECURITY_ATTRIBUTES sa = {0};
sa.nLength = sizeof(sa);
SECURITY_DESCRIPTOR sd = {0};
PROCESS_INFORMATION pi;
const BOOL isNT = sizeof(void*) > 4 || (GetVersion() < 0x80000000);
HANDLE newstdout = 0, read_stdout = 0;
HANDLE newstdin = 0, read_stdin = 0;
int utfSource = sizeof(TCHAR) > 1 && !forceNarrowInput ? -1 : FALSE, utfOutput = sizeof(TCHAR) > 1;
DWORD cbRead, dwLastOutput;
DWORD dwExit = 0, waitResult = WAIT_TIMEOUT;
static BYTE bufSrc[NSIS_MAX_STRLEN];
BYTE *pSrc;
SIZE_T cbSrcTot = sizeof(bufSrc), cbSrc = 0, cbSrcFree;
TCHAR *bufOutput = 0, *pNewAlloc, *pD;
SIZE_T cchAlloc, cbAlloc, cchFree;
#ifndef _MSC_VER // Avoid GCC "may be used uninitialized in this function" warnings
pD = NULL;
cchAlloc = 0;
#endif
pi.hProcess = pi.hThread = NULL;
codepage = bOEM ? CP_OEMCP : CP_ACP;
if (!ignoreData) {
cbAlloc = stackMode ? (g_stringsize * sizeof(TCHAR)) : sizeof(bufSrc) * 4, cchAlloc = cbAlloc / sizeof(TCHAR);
pD = bufOutput = GlobalAlloc(GPTR, cbAlloc + sizeof(TCHAR)); // Include "hidden" space for a \0
if (!bufOutput) {
lstrcpy(szRet, _T("error"));
goto done;
}
*bufOutput = _T('\0');
}
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL;
if (isNT) {
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, TRUE, NULL, FALSE);
sa.lpSecurityDescriptor = &sd;
}
if (!CreatePipe(&read_stdout, &newstdout, &sa, 0)) {
lstrcpy(szRet, _T("error"));
goto done;
}
if (!CreatePipe(&read_stdin, &newstdin, &sa, 0)) {
lstrcpy(szRet, _T("error"));
goto done;
}
GetStartupInfo(&si); // Why?
si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
si.hStdInput = newstdin;
si.hStdOutput = newstdout;
si.hStdError = newstdout;
if (!CreateProcess(NULL, g_exec, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi)) {
lstrcpy(szRet, _T("error"));
goto done;
}
// Now I'm talking with an executable copy of myself.
dwLastOutput = GetTickCount();
for (;;) {
TCHAR bufCh[2];
waitForProcess:
waitResult = WaitForSingleObject(pi.hProcess, 0);
GetExitCodeProcess(pi.hProcess, &dwExit);
readMore:
PeekNamedPipe(read_stdout, 0, 0, 0, &cbRead, NULL);
if (!cbRead) {
if (waitResult == WAIT_OBJECT_0) {
break; // No data in the pipe and process ended, we are done
}
if (to && GetTickCount() > dwLastOutput+to) {
TerminateProcess(pi.hProcess, -1);
lstrcpy(szRet, _T("timeout"));
}
else {
Sleep(LOOPTIMEOUT);
}
continue;
}
dwLastOutput = GetTickCount();
ReadFile(read_stdout, bufSrc + cbSrc, (DWORD) (cbSrcFree = cbSrcTot - cbSrc), &cbRead, NULL);
cbSrcFree -= cbRead, cbSrc = cbSrcTot - cbSrcFree;
pSrc = bufSrc;
if (utfSource < 0 && cbSrc) { // Simple UTF-16LE detection
#ifdef UNICODE
utfSource = IsTextUnicode(pSrc, (UINT) (cbSrc & ~1), NULL) != FALSE;
#else
utfSource = (cbSrc >= 3 && pSrc[0] && !pSrc[1]) || (cbSrc > 4 && pSrc[2] && !pSrc[3]); // Lame latin-only test
utfSource |= (cbSrc > 3 && pSrc[0] == 0xFF && pSrc[1] == 0xFE && (pSrc[2] | pSrc[3])); // Lame BOM test
#endif
}
if (ignoreData) {
cbSrc = 0; // Overwrite the whole buffer every read
continue;
}
if (!cbRead) {
continue; // No new data, read more before trying to parse
}
parseLines:
cchFree = cchAlloc - (pD - bufOutput);
for (;;) {
DWORD cbSrcChar = 1, cchDstChar, i;
*pD = _T('\0'); // Terminate output buffer because we can unexpectedly run out of data
if (!cbSrc) {
goto readMore;
}
if (utfSource) { // UTF-16LE --> ?:
if (cbSrc < 2) {
goto readMore;
}
if (utfOutput) { // UTF-16LE --> UTF-16LE:
bufCh[0] = ((TCHAR*)pSrc)[0], cbSrcChar = sizeof(WCHAR), cchDstChar = 1; // We only care about certain ASCII characters so we don't bother dealing with surrogate pairs.
}
else { // UTF-16LE --> DBCS
// TODO: This is tricky because we need the complete base character (or surrogate pair) and all the trailing combining characters for a grapheme in the buffer before we can call WideCharToMultiByte.
utfOutput = FALSE; // For now we just treat it as DBCS
continue;
}
}
else { // DBCS --> ?:
if (utfOutput) { // DBCS --> UTF-16LE:
BOOL isMb = IsDBCSLeadByteEx(codepage, ((CHAR*)pSrc)[0]);
if (isMb && cbSrc < ++cbSrcChar) {
goto readMore;
}
cchDstChar = MultiByteToWideChar(codepage, 0, (CHAR*)pSrc, cbSrcChar, (WCHAR*) bufCh, 2);
}
else { // DBCS --> DBCS:
bufCh[0] = ((CHAR*)pSrc)[0], cchDstChar = 1; // Note: OEM codepage will be converted by LogMessage
}
}
if (bufCh[0] == _T('\t') && tabExpandLength) { // Expand tab to spaces?
if (cchFree < tabExpandLength) {
goto resizeOutputBuffer;
}
lstrcpy(pD, TAB_REPLACE);
pD += tabExpandLength, cchFree -= tabExpandLength;
}
else if (bufCh[0] == _T('\r') && logMode) {
// Eating it
}
else if (bufCh[0] == _T('\n') && logMode) {
LogMessage(bufOutput, bOEM); // Output has already been \0 terminated
*(pD = bufOutput) = _T('\0'), cchFree = cchAlloc;
}
else {
if (cchFree < cchDstChar) {
SIZE_T cchOrgOffset;
resizeOutputBuffer:
if (stackMode) {
ignoreData = TRUE; // Buffer was already maximum for the NSIS stack, we cannot handle more data
if (utfOutput)
TruncateStringUTF16LE((LPWSTR) bufOutput, pD - bufOutput, (LPCWSTR) bufCh, cchDstChar);
else
TruncateStringMB(codepage, (LPSTR) bufOutput, pD - bufOutput, bufCh[0]);
goto waitForProcess;
}
cchAlloc += 1024, cbAlloc = cchAlloc / sizeof(TCHAR);
pNewAlloc = GlobalReAlloc(bufOutput, cbAlloc + sizeof(TCHAR),GPTR|GMEM_MOVEABLE); // Include "hidden" space for a \0
if (!pNewAlloc) {
lstrcpy(szRet, _T("error"));
ignoreData = TRUE;
goto waitForProcess;
}
cchOrgOffset = pD - bufOutput;
*(pD = (bufOutput = pNewAlloc) + cchOrgOffset) = _T('\0');
goto parseLines;
}
for (i = 0; i < cchDstChar; ++i) {
*pD++ = bufCh[i], --cchFree;
}
}
pSrc += cbSrcChar, cbSrc -= cbSrcChar;
}
}
done:
if (stackMode) pushstring(bufOutput);
if (logMode && *bufOutput) LogMessage(bufOutput,bOEM); // Write remaining output
if (dwExit == STATUS_ILLEGAL_INSTRUCTION)
lstrcpy(szRet, _T("error"));
if (!szRet[0]) wsprintf(szRet,_T("%d"),dwExit);
pushstring(szRet);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(newstdout);
CloseHandle(read_stdout);
CloseHandle(newstdin);
CloseHandle(read_stdin);
if (pExec-2 >= g_exec)
*(pExec-2) = _T('\0'); // skip space and quote
if (executor)
DeleteFile(executor);
GlobalFree(g_exec);
if (bufOutput)
GlobalFree(bufOutput);
}
}
static TCHAR *my_strstr(TCHAR *a, TCHAR *b)
{
int l = lstrlen(b);
while (lstrlen(a) >= l)
{
TCHAR c = a[l];
a[l] = 0;
if (!lstrcmpi(a, b))
{
a[l] = c;
return a;
}
a[l] = c;
a = CharNext(a);
}
return NULL;
}
static unsigned int my_atoi(TCHAR *s) {
unsigned int v=0;
if (*s == _T('0') && (s[1] == _T('x') || s[1] == _T('X'))) {
s+=2;
for (;;) {
int c=*s++;
if (c >= _T('0') && c <= _T('9')) c-=_T('0');
else if (c >= _T('a') && c <= _T('f')) c-=_T('a')-10;
else if (c >= _T('A') && c <= _T('F')) c-=_T('A')-10;
else break;
v<<=4;
v+=c;
}
}
else if (*s == _T('0') && s[1] <= _T('7') && s[1] >= _T('0')) {
s++;
for (;;) {
int c=*s++;
if (c >= _T('0') && c <= _T('7')) c-=_T('0');
else break;
v<<=3;
v+=c;
}
}
else {
for (;;) {
int c=*s++ - _T('0');
if (c < 0 || c > 9) break;
v*=10;
v+=c;
}
}
return (int)v;
}
int WINAPI AsExeWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
DWORD Ret;
STARTUPINFO si = {0};
PROCESS_INFORMATION pi = {0};
TCHAR command_line[NSIS_MAX_STRLEN]; //BUGBUG
TCHAR seekchar=_T(' ');
TCHAR *cmdline;
si.cb = sizeof(si);
// Make child process use this app's standard files. Not needed because the handles
// we created when executing this process were inheritable.
//si.dwFlags = STARTF_USESTDHANDLES;
//si.hStdInput = GetStdHandle (STD_INPUT_HANDLE);
//si.hStdOutput = GetStdHandle (STD_OUTPUT_HANDLE);
//si.hStdError = GetStdHandle (STD_ERROR_HANDLE);
lstrcpyn(command_line, GetCommandLine(), 1024);
cmdline = command_line;
if (*cmdline == _T('\"')) seekchar = *cmdline++;
while (*cmdline && *cmdline != seekchar) cmdline=CharNext(cmdline);
cmdline=CharNext(cmdline);
// skip any spaces before the arguments
while (*cmdline && *cmdline == _T(' ')) cmdline++;
Ret = CreateProcess (NULL, cmdline,
NULL, NULL,
TRUE, 0,
NULL, NULL,
&si, &pi
);
if (Ret)
{
WaitForSingleObject(pi.hProcess, INFINITE);
GetExitCodeProcess(pi.hProcess, &Ret);
CloseHandle (pi.hProcess);
CloseHandle (pi.hThread);
ExitProcess(Ret);
}
else
{
ExitProcess(STATUS_ILLEGAL_INSTRUCTION);
}
return 0; // dummy
}
================================================
FILE: nsisplugin/IsActivated.c
================================================
#include
#include
#include "main.h"
#include "VersionInfo.h"
#include "Wow64.h"
#include "licdll.h"
#include
typedef HRESULT (WINAPI *_SLOpen)(HSLC *);
typedef HRESULT (WINAPI *_SLGetLicensingStatusInformation)(HSLC, const SLID *, DWORD, DWORD, UINT *, SL_LICENSING_STATUS **);
typedef HRESULT (WINAPI *_SLClose)(HSLC);
static _SLOpen $SLOpen;
static _SLClose $SLClose;
static _SLGetLicensingStatusInformation $SLGetLicensingStatusInformation;
static BOOL g_loadedLicenseStatus = FALSE;
static BOOL g_isActivated = TRUE;
PLUGIN_METHOD(IsActivated) {
PLUGIN_INIT();
// Activation is irrelevant prior to XP
if (g_loadedLicenseStatus || !AtLeastWinXP2002()) {
pushint(g_isActivated);
return;
}
g_loadedLicenseStatus = TRUE;
// Get the CPU architecture. We'll need this so that we activate the correct COM object on 64-bit versions
// of Windows XP and Windows Server 2003.
SYSTEM_INFO systemInfo = {0};
OurGetNativeSystemInfo(&systemInfo);
if (AtLeastWinVista()) {
// Vista+: Ask the Software Licensing Service
if (!$SLOpen) {
HMODULE slc = LoadLibrary(L"slc.dll");
if (slc) {
$SLOpen = (_SLOpen)GetProcAddress(slc, "SLOpen");
$SLClose = (_SLClose)GetProcAddress(slc, "SLClose");
$SLGetLicensingStatusInformation = (_SLGetLicensingStatusInformation)GetProcAddress(slc, "SLGetLicensingStatusInformation");
}
}
if (!$SLOpen || !$SLClose || !$SLGetLicensingStatusInformation) {
TRACE(L"Failed to load slc.dll");
pushint(1);
return;
}
HSLC slc = NULL;
SL_LICENSING_STATUS *status = NULL;
UINT count = 0;
HRESULT hr = $SLOpen(&slc);
if (!SUCCEEDED(hr)) {
goto end_slc;
}
hr = $SLGetLicensingStatusInformation(slc, &WINDOWS_SLID, 0, 0, &count, &status);
if (!SUCCEEDED(hr) || count == 0) {
goto end_slc;
}
// Iterate through all statuses until we find one in Licensed status.
g_isActivated = FALSE;
for (UINT i = 0; i < count; i++) {
if (status[i].eStatus == SL_LICENSING_STATUS_LICENSED) {
g_isActivated = TRUE;
break;
}
}
end_slc:
if (status) {
LocalFree(status);
}
if (slc) {
$SLClose(slc);
}
} else {
// XP: Use private API
ICOMLicenseAgent *agent;
HRESULT hr = E_FAIL;
// On XP and Server 2003 x64, we need to pass a different argument to CoCreateInstance.
if (systemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) {
hr = CoCreateInstance(&CLSID_COMLicenseAgent, NULL, CLSCTX_INPROC_SERVER | CLSCTX_ACTIVATE_64_BIT_SERVER, &IID_ICOMLicenseAgent, (void **)&agent);
} else {
hr = CoCreateInstance(&CLSID_COMLicenseAgent, NULL, CLSCTX_INPROC_SERVER, &IID_ICOMLicenseAgent, (void **)&agent);
}
if (!SUCCEEDED(hr)) {
TRACE(L"COMLicenseAgent load failed: %x", hr);
goto end_xp;
}
ULONG result = 0;
hr = ICOMLicenseAgent_Initialize(agent, 0xC475, 3, NULL, &result);
if (!SUCCEEDED(hr) || result != 0) {
TRACE(L"COMLicenseAgent init failed: %x", hr);
goto end_xp;
}
ULONG wpaLeft = 0, evalLeft = 0;
hr = ICOMLicenseAgent_GetExpirationInfo(agent, &wpaLeft, &evalLeft);
if (!SUCCEEDED(hr)) {
TRACE(L"COMLicenseAgent GetExpirationInfo failed: %x", hr);
goto end_xp;
}
g_isActivated = wpaLeft == MAXLONG;
end_xp:
if (agent) {
ICOMLicenseAgent_Release(agent);
}
}
pushint(g_isActivated);
}
================================================
FILE: nsisplugin/IsAdmin.c
================================================
#include
#include
#include "User.h"
PLUGIN_METHOD(IsAdmin) {
PLUGIN_INIT();
pushint(IsUserAdmin());
}
================================================
FILE: nsisplugin/IsMultiCPU.c
================================================
#include
#include
#include "User.h"
PLUGIN_METHOD(IsMultiCPU) {
PLUGIN_INIT();
SYSTEM_INFO systemInfo = {0};
GetSystemInfo(&systemInfo);
pushint(systemInfo.dwNumberOfProcessors > 1 ? 1 : 0);
}
================================================
FILE: nsisplugin/IsServerCore.c
================================================
#include
#include
#include "ProductInfo.h"
#include "Registry.h"
#include "VersionInfo.h"
PLUGIN_METHOD(IsServerCore) {
PLUGIN_INIT();
// Server Core introduced with Server 2008, skip on earlier versions.
if (!AtLeastWinVista()) {
pushint(0);
return;
}
// Server 2008 and 2008 R2 use GetProductInfo, 2012 and newer use the registry.
if (IsWinVista() || IsWin7()) {
DWORD productType = 0;
if (!GetVistaProductInfo(6, 0, 0, 0, &productType)) {
pushint(0);
return;
}
switch (productType) {
case PRODUCT_DATACENTER_SERVER_CORE:
case PRODUCT_STANDARD_SERVER_CORE:
case PRODUCT_ENTERPRISE_SERVER_CORE:
case PRODUCT_WEB_SERVER_CORE:
case PRODUCT_DATACENTER_SERVER_CORE_V:
case PRODUCT_STANDARD_SERVER_CORE_V:
case PRODUCT_ENTERPRISE_SERVER_CORE_V:
case PRODUCT_HYPERV:
case PRODUCT_STORAGE_EXPRESS_SERVER_CORE:
case PRODUCT_STORAGE_STANDARD_SERVER_CORE:
case PRODUCT_STORAGE_WORKGROUP_SERVER_CORE:
case PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE:
case PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE:
case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE:
case PRODUCT_CLUSTER_SERVER_V:
pushint(1);
return;
}
} else {
// Only need to test for full GUI, MinShell on 2012/2012 R2 does not have IE and is considered regular Core.
DWORD serverCore = 0;
DWORD serverGuiShell = 0;
GetRegistryDword(HKEY_LOCAL_MACHINE, REGPATH_WINNT_SERVERLEVELS, L"ServerCore", KEY_WOW64_64KEY, &serverCore);
GetRegistryDword(HKEY_LOCAL_MACHINE, REGPATH_WINNT_SERVERLEVELS, L"Server-Gui-Shell", KEY_WOW64_64KEY, &serverGuiShell);
pushint((serverCore && !serverGuiShell) ? 1 : 0);
return;
}
pushint(0);
}
================================================
FILE: nsisplugin/Makefile
================================================
FILES = \
$(wildcard *.c) \
../shared/HResult.c \
../shared/LegacyUpdate.c \
../shared/LoadImage.c \
../shared/Log.c \
../shared/ProductInfo.c \
../shared/Registry.c \
../shared/Wow64.c
RCFILES = resource.rc
BIN = obj/LegacyUpdateNSIS.dll
all:: internal-all
include ../build/shared.mk
CFLAGS += \
-DLOG_NAME="\"Setup\"" \
-mdll
LDFLAGS += \
-Wl,-e_DllMain \
-lpsapi \
-lkernel32 \
-luser32 \
-lole32 \
-loleaut32 \
-ladvapi32 \
-lgdi32 \
-lmsimg32 \
-lcrypt32
internal-all::
cp $(BIN) ../setup/x86-unicode/
test:
+$(MAKE) DEBUG=$(DEBUG)
cd ../setup && makensis test.nsi
cd ../setup && explorer.exe test.exe
.PHONY: all test
================================================
FILE: nsisplugin/MessageForHresult.c
================================================
#include
#include
#include "../shared/HResult.h"
PLUGIN_METHOD(MessageForHresult) {
PLUGIN_INIT();
HRESULT hr = popint();
if (hr == 0) {
pushstring(L"Unknown error");
return;
}
LPWSTR message = GetMessageForHresult(hr);
pushstring(message);
LocalFree(message);
}
================================================
FILE: nsisplugin/NeedsRootsUpdate.c
================================================
#include
#include
#include "Registry.h"
#include "VersionInfo.h"
#define ROOTS_UPDATE_THRESHOLD (30LL * 24LL * 60LL * 60LL * 10000000LL)
PLUGIN_METHOD(NeedsRootsUpdate) {
PLUGIN_INIT();
FILETIME currentTime = {0};
GetSystemTimeAsFileTime(¤tTime);
HKEY key = NULL;
HRESULT hr = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGPATH_LEGACYUPDATE_SETUP, 0, GetRegistryWow64Flag(KEY_READ | KEY_WOW64_64KEY), &key));
if (!SUCCEEDED(hr)) {
pushint(1);
return;
}
FILETIME lastUpdateTime = {0};
DWORD type = REG_QWORD;
DWORD size = sizeof(FILETIME);
hr = HRESULT_FROM_WIN32(RegQueryValueEx(key, L"LastRootsUpdateTime", NULL, &type, (LPBYTE)&lastUpdateTime, &size));
RegCloseKey(key);
if (!SUCCEEDED(hr) || type != REG_QWORD) {
pushint(1);
return;
}
ULONGLONG currentTime64 = 0, lastUpdateTime64 = 0;
memcpy(¤tTime64, ¤tTime, sizeof(currentTime64));
memcpy(&lastUpdateTime64, &lastUpdateTime, sizeof(lastUpdateTime64));
ULONGLONG difference = currentTime64 - lastUpdateTime64;
pushint(difference > ROOTS_UPDATE_THRESHOLD ? 1 : 0);
}
PLUGIN_METHOD(SetRootsUpdateTime) {
PLUGIN_INIT();
FILETIME currentTime = {0};
GetSystemTimeAsFileTime(¤tTime);
HKEY key = NULL;
HRESULT hr = HRESULT_FROM_WIN32(RegCreateKeyEx(HKEY_LOCAL_MACHINE, REGPATH_LEGACYUPDATE_SETUP, 0, NULL, 0, GetRegistryWow64Flag(KEY_WRITE | KEY_WOW64_64KEY), NULL, &key, NULL));
if (SUCCEEDED(hr)) {
RegSetValueEx(key, L"LastRootsUpdateTime", 0, REG_QWORD, (LPBYTE)¤tTime, sizeof(FILETIME));
RegCloseKey(key);
}
}
================================================
FILE: nsisplugin/RebootPage.c
================================================
#include
#include
#include
#include "main.h"
#include "resource.h"
#include "VersionInfo.h"
#define COUNTDOWN_ID 1234
#define COUNTDOWN_LENGTH 180
static HWND g_rebootHwnd;
static WPARAM g_rebootParam = 0;
static WNDPROC g_dialogOrigWndProc;
static DWORD g_timerStart = 0;
static DWORD g_timerInterval = 0;
static DWORD g_timerMultiplier = 0;
static UINT_PTR g_timer = 0;
static WCHAR g_timerPrefix[NSIS_MAX_STRLEN] = L"";
static INT_PTR CALLBACK RebootDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_TIMER:
if (wParam == COUNTDOWN_ID) {
DWORD elapsed = GetTickCount() - g_timerStart;
DWORD elapsedSecs = elapsed / 1000;
DWORD progress = min((elapsed * g_timerMultiplier) / 1000, COUNTDOWN_LENGTH * g_timerMultiplier);
SendDlgItemMessage(hwnd, IDC_PROGRESS, PBM_SETPOS, progress, 0);
DWORD remaining = max(COUNTDOWN_LENGTH - elapsedSecs, 0);
WCHAR timerDisplay[NSIS_MAX_STRLEN];
wsprintf(timerDisplay, L"%s%02d:%02d", g_timerPrefix, remaining / 60, remaining % 60);
SetDlgItemText(hwnd, IDC_TEXT1, timerDisplay);
if (elapsedSecs >= COUNTDOWN_LENGTH) {
KillTimer(hwnd, COUNTDOWN_ID);
g_timer = 0;
PostMessage(hwnd, WM_NOTIFY_OUTER_NEXT, 0, 0);
}
}
return TRUE;
case WM_CTLCOLORSTATIC:
case WM_CTLCOLOREDIT:
case WM_CTLCOLORDLG:
case WM_CTLCOLORBTN:
case WM_CTLCOLORLISTBOX:
return SendMessage(g_hwndParent, uMsg, wParam, lParam);
}
return FALSE;
}
static LRESULT CALLBACK RebootMainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
LRESULT result = CallWindowProc(g_dialogOrigWndProc, hwnd, uMsg, wParam, lParam);
switch (uMsg) {
case WM_NOTIFY_OUTER_NEXT:
g_rebootParam = wParam;
if (g_timer) {
KillTimer(g_rebootHwnd, COUNTDOWN_ID);
g_timer = 0;
}
DestroyWindow(g_rebootHwnd);
g_rebootHwnd = NULL;
break;
}
return result;
}
PLUGIN_METHOD(RebootPageCreate) {
PLUGIN_INIT();
WCHAR introText[NSIS_MAX_STRLEN], nextText[NSIS_MAX_STRLEN], cancelText[NSIS_MAX_STRLEN];
popstringn(introText, sizeof(introText) / sizeof(WCHAR));
popstringn(g_timerPrefix, sizeof(g_timerPrefix) / sizeof(WCHAR));
popstringn(nextText, sizeof(nextText) / sizeof(WCHAR));
popstringn(cancelText, sizeof(cancelText) / sizeof(WCHAR));
// Set up child dialog
RECT childRect;
HWND childHwnd = GetDlgItem(g_hwndParent, IDC_CHILDRECT);
GetWindowRect(childHwnd, &childRect);
MapWindowPoints(NULL, g_hwndParent, (LPPOINT)&childRect, 2);
g_rebootHwnd = CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_REBOOT), g_hwndParent, RebootDialogProc);
if (g_rebootHwnd == NULL) {
return;
}
SetWindowPos(g_rebootHwnd, 0,
childRect.left, childRect.top,
childRect.right - childRect.left,
childRect.bottom - childRect.top,
SWP_NOZORDER | SWP_NOACTIVATE);
// Icon
HICON hIcon = LoadImage(NULL, MAKEINTRESOURCE(IDI_WARNING), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR | LR_SHARED | LR_DEFAULTSIZE);
if (hIcon) {
SendDlgItemMessage(g_rebootHwnd, IDI_ICON2, STM_SETICON, (WPARAM)hIcon, 0);
}
// Intro text
SetDlgItemText(g_rebootHwnd, IDC_INTROTEXT, introText);
// Smoother animation for Aero progress bar
g_timerMultiplier = AtLeastWinVista() ? 10 : 1;
// Progress bar/timer
SendDlgItemMessage(g_rebootHwnd, IDC_PROGRESS, PBM_SETRANGE, 0, MAKELPARAM(0, COUNTDOWN_LENGTH * g_timerMultiplier));
SendDlgItemMessage(g_rebootHwnd, IDC_PROGRESS, PBM_SETPOS, 0, 0);
g_timerStart = GetTickCount();
g_timer = SetTimer(g_rebootHwnd, COUNTDOWN_ID, 1000 / g_timerMultiplier, NULL);
// Force initial timer callback to fire now
SendMessage(g_rebootHwnd, WM_TIMER, COUNTDOWN_ID, 0);
// Show window
g_dialogOrigWndProc = (WNDPROC)SetWindowLongPtr(g_hwndParent, GWLP_WNDPROC, (LONG_PTR)RebootMainWndProc);
SendMessage(g_hwndParent, WM_NOTIFY_CUSTOM_READY, (WPARAM)g_rebootHwnd, 0);
ShowWindow(g_rebootHwnd, SW_SHOWNA);
// Set Next button to Reboot
HWND nextButton = GetDlgItem(g_hwndParent, IDOK);
if (nextButton) {
SetWindowText(nextButton, nextText);
}
// Set Cancel button to Later
HWND cancelButton = GetDlgItem(g_hwndParent, IDCANCEL);
if (cancelButton) {
SetWindowText(cancelButton, cancelText);
EnableWindow(cancelButton, TRUE);
}
// Bring attention back if the user switched away
SetForegroundWindow(g_hwndParent);
BringWindowToTop(g_hwndParent);
SetFocus(nextButton);
MessageBeep(AtLeastWinVista() ? MB_ICONWARNING : MB_ICONINFORMATION);
// Flash taskbar button
FLASHWINFO fInfo = {0};
fInfo.cbSize = sizeof(fInfo);
fInfo.hwnd = g_rebootHwnd;
fInfo.dwFlags = FLASHW_ALL | FLASHW_TIMER;
fInfo.uCount = COUNTDOWN_LENGTH;
fInfo.dwTimeout = 0;
FlashWindowEx(&fInfo);
}
PLUGIN_METHOD(RebootPageShow) {
while (g_rebootHwnd) {
MSG msg;
GetMessage(&msg, NULL, 0, 0);
if (!IsDialogMessage(g_rebootHwnd, &msg) && !IsDialogMessage(g_hwndParent, &msg)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// Break out if timeout reached
if (msg.message == WM_NOTIFY_OUTER_NEXT) {
g_rebootParam = 1;
break;
}
}
pushint(g_rebootParam);
// Cleanup
if (g_timer) {
KillTimer(g_rebootHwnd, COUNTDOWN_ID);
g_timer = 0;
}
SetWindowLongPtr(g_hwndParent, GWLP_WNDPROC, (LONG_PTR)g_dialogOrigWndProc);
g_dialogOrigWndProc = NULL;
}
================================================
FILE: nsisplugin/TaskbarProgress.c
================================================
// Based on https://nsis.sourceforge.io/TaskbarProgress_plug-in - zlib licensed
// Cleaned up and refactored into C by Legacy Update
#undef _WIN32_WINNT
#define _WIN32_WINNT _WIN32_WINNT_WIN7
#include
#include
#include
#include
#include
#include "main.h"
#include "VersionInfo.h"
static extra_parameters *g_extra;
static ITaskbarList3 *g_taskbarList;
static UINT g_totalRange;
static WNDPROC g_progressOrigWndProc;
static WNDPROC g_dialogOrigWndProc;
LRESULT CALLBACK ProgressBarWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
if (!g_progressOrigWndProc) {
return 0;
}
switch (uMsg) {
case PBM_SETRANGE:
g_totalRange = LOWORD(lParam) + HIWORD(lParam);
break;
case PBM_SETRANGE32:
g_totalRange = wParam + lParam;
break;
case PBM_SETPOS:
if (g_taskbarList) {
ITaskbarList3_SetProgressValue(g_taskbarList, g_hwndParent, wParam, g_totalRange);
}
break;
case WM_DESTROY:
SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)g_progressOrigWndProc);
if (g_taskbarList) {
ITaskbarList3_SetProgressState(g_taskbarList, g_hwndParent, TBPF_NOPROGRESS);
ITaskbarList3_Release(g_taskbarList);
g_taskbarList = NULL;
}
g_progressOrigWndProc = NULL;
break;
}
return CallWindowProc(g_progressOrigWndProc, hwnd, uMsg, wParam, lParam);
}
static LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
if (!g_dialogOrigWndProc) {
return 0;
}
switch (uMsg) {
case WM_NOTIFY_OUTER_NEXT:
if (g_extra->exec_flags->abort) {
// Set the progress bar to error state (red)
HWND innerWindow = FindWindowEx(hwnd, NULL, L"#32770", NULL);
HWND progressBar = FindWindowEx(innerWindow, NULL, L"msctls_progress32", NULL);
if (progressBar) {
SendMessage(progressBar, PBM_SETSTATE, PBST_ERROR, 0);
}
if (g_taskbarList) {
ITaskbarList3_SetProgressState(g_taskbarList, g_hwndParent, TBPF_ERROR);
}
}
break;
case WM_DESTROY:
SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)g_dialogOrigWndProc);
g_dialogOrigWndProc = NULL;
break;
}
return CallWindowProc(g_dialogOrigWndProc, hwnd, uMsg, wParam, lParam);
}
static UINT_PTR NSISPluginCallback(enum NSPIM event) {
// Does nothing, but keeping a callback registered prevents NSIS from unloading the plugin
return 0;
}
PLUGIN_METHOD(InitTaskbarProgress) {
PLUGIN_INIT();
if (!AtLeastWin7()) {
return;
}
g_extra = extra;
extra->RegisterPluginCallback(g_hInstance, NSISPluginCallback);
if (g_dialogOrigWndProc) {
// Already initialised
return;
}
HWND innerWindow = FindWindowEx(g_hwndParent, NULL, L"#32770", NULL);
HWND progressBar = FindWindowEx(innerWindow, NULL, L"msctls_progress32", NULL);
PBRANGE range = {0};
HRESULT hr = E_FAIL;
if (!progressBar) {
goto end;
}
hr = CoCreateInstance(&CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, &IID_ITaskbarList3, (void **)&g_taskbarList);
CHECK_HR_OR_GOTO_END(L"CoCreateInstance");
hr = ITaskbarList3_HrInit(g_taskbarList);
if (hr == E_NOTIMPL) {
// Expected when on the SYSTEM desktop
goto end;
}
CHECK_HR_OR_GOTO_END(L"HrInit");
// Get the initial progress bar range
SendMessage(progressBar, PBM_GETRANGE, 0, (LPARAM)&range);
g_totalRange = range.iLow + range.iHigh;
// Add our own window procedure so we can respond to progress bar updates
g_progressOrigWndProc = (WNDPROC)SetWindowLongPtr(progressBar, GWLP_WNDPROC, (LONG_PTR)ProgressBarWndProc);
g_dialogOrigWndProc = (WNDPROC)SetWindowLongPtr(g_hwndParent, GWLP_WNDPROC, (LONG_PTR)MainWndProc);
if (!g_progressOrigWndProc || !g_dialogOrigWndProc) {
goto end;
}
return;
end:
if (g_taskbarList) {
ITaskbarList3_Release(g_taskbarList);
g_taskbarList = NULL;
}
g_progressOrigWndProc = NULL;
g_dialogOrigWndProc = NULL;
}
================================================
FILE: nsisplugin/UpdateRoots.c
================================================
#include
#include
#include
#include "HResult.h"
PLUGIN_METHOD(UpdateRoots) {
PLUGIN_INIT();
HRESULT hr = E_FAIL;
WCHAR stateStr[NSIS_MAX_STRLEN], store[NSIS_MAX_STRLEN], path[NSIS_MAX_STRLEN];
popstringn(stateStr, sizeof(stateStr) / sizeof(WCHAR));
popstringn(store, sizeof(store) / sizeof(WCHAR));
popstringn(path, sizeof(path) / sizeof(WCHAR));
if (lstrlen(stateStr) == 0 || lstrlen(store) == 0 || lstrlen(path) == 0) {
pushint(E_INVALIDARG);
return;
}
BOOL add = FALSE;
if (lstrcmpi(stateStr, L"/update") == 0) {
add = TRUE;
} else if (lstrcmpi(stateStr, L"/delete") == 0) {
add = FALSE;
} else {
pushint(E_INVALIDARG);
return;
}
HCERTSTORE srcStore = CertOpenStore(CERT_STORE_PROV_FILENAME_W, 0, 0, CERT_STORE_READONLY_FLAG, path);
HCERTSTORE dstStore = NULL;
if (!srcStore) {
TRACE(L"CertOpenStore for %ls failed: %08x", path, hr);
hr = HRESULT_FROM_WIN32(GetLastError());
goto end;
}
dstStore = CertOpenStore(CERT_STORE_PROV_SYSTEM_REGISTRY_W, 0, 0, CERT_SYSTEM_STORE_LOCAL_MACHINE, store);
if (!dstStore) {
hr = HRESULT_FROM_WIN32(GetLastError());
TRACE(L"CertOpenStore for %ls failed: %08x", store, hr);
goto end;
}
PCCERT_CONTEXT cert = NULL;
while ((cert = CertEnumCertificatesInStore(srcStore, cert)) != NULL) {
BOOL result = add
? CertAddCertificateContextToStore(dstStore, cert, CERT_STORE_ADD_REPLACE_EXISTING, NULL)
: CertDeleteCertificateFromStore(CertDuplicateCertificateContext(cert));
if (!result) {
TRACE(L"cert %ls in %ls failed: %d\n", add ? L"add" : L"delete", store, GetLastError());
hr = HRESULT_FROM_WIN32(GetLastError());
goto end;
}
}
hr = S_OK;
end:
if (srcStore) {
CertCloseStore(srcStore, 0);
}
if (dstStore) {
CertCloseStore(dstStore, 0);
}
pushint(hr);
}
================================================
FILE: nsisplugin/VerifyFileHash.c
================================================
#include
#include
#include "sha256.h"
static BOOL hexToBinary(const char *hex, uint8_t *binary, int binaryLength) {
if (lstrlenA(hex) != binaryLength * 2) {
return FALSE;
}
for (int i = 0; i < binaryLength; i++) {
char high = hex[i * 2];
char low = hex[i * 2 + 1];
if (high >= '0' && high <= '9') {
high -= '0';
} else if (high >= 'a' && high <= 'f') {
high -= 'a' - 10;
} else {
// Invalid character
return FALSE;
}
if (low >= '0' && low <= '9') {
low -= '0';
} else if (low >= 'a' && low <= 'f') {
low -= 'a' - 10;
} else {
// Invalid character
return FALSE;
}
binary[i] = (uint8_t)((high << 4) | low);
}
return TRUE;
}
static BOOL calculateFileSha256(const LPWSTR path, uint8_t hash[SIZE_OF_SHA_256_HASH]) {
HANDLE file = CreateFile(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (file == INVALID_HANDLE_VALUE) {
return FALSE;
}
struct Sha_256 sha256;
sha_256_init(&sha256, hash);
uint8_t buffer[8192];
DWORD bytesRead = 0;
while (ReadFile(file, buffer, sizeof(buffer), &bytesRead, NULL) && bytesRead > 0) {
sha_256_write(&sha256, buffer, bytesRead);
}
sha_256_close(&sha256);
CloseHandle(file);
return TRUE;
}
PLUGIN_METHOD(VerifyFileHash) {
PLUGIN_INIT();
WCHAR filename[MAX_PATH], expectedHashHex[256];
popstringn(filename, sizeof(filename) / sizeof(WCHAR));
popstringn(expectedHashHex, sizeof(expectedHashHex) / sizeof(WCHAR));
char expectedHashHexA[256];
WideCharToMultiByte(CP_ACP, 0, expectedHashHex, -1, expectedHashHexA, sizeof(expectedHashHexA), NULL, NULL);
uint8_t expectedHash[SIZE_OF_SHA_256_HASH], calculatedHash[SIZE_OF_SHA_256_HASH];
if (!hexToBinary(expectedHashHexA, expectedHash, SIZE_OF_SHA_256_HASH)) {
pushint(-1);
return;
}
if (!calculateFileSha256(filename, calculatedHash)) {
pushint(-1);
return;
}
WCHAR calculatedHashHex[SIZE_OF_SHA_256_HASH * 2 + 1];
for (int i = 0; i < SIZE_OF_SHA_256_HASH; i++) {
wsprintf(&calculatedHashHex[i * 2], L"%02x", calculatedHash[i]);
}
pushstring(calculatedHashHex);
for (int i = 0; i < SIZE_OF_SHA_256_HASH; i++) {
if (expectedHash[i] != calculatedHash[i]) {
pushint(0);
return;
}
}
pushint(1);
}
================================================
FILE: nsisplugin/WriteLog.c
================================================
#include "stdafx.h"
#include
#include
#include "Log.h"
static HWND g_hwndLogList = 0;
static WNDPROC g_pfnListViewProc = NULL;
static LRESULT CALLBACK LogListViewProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
if (msg == LVM_INSERTITEM) {
LVITEM *item = (LVITEM *)lParam;
if (item && (item->mask & LVIF_TEXT) && item->pszText) {
LogInternal(item->pszText);
}
}
return CallWindowProc(g_pfnListViewProc, hwnd, msg, wParam, lParam);
}
PLUGIN_METHOD(InitLog) {
PLUGIN_INIT();
OpenLog();
// Hook progress log to send items to the log file
if (!g_hwndLogList && g_hwndParent) {
HWND innerWindow = FindWindowEx(g_hwndParent, NULL, L"#32770", NULL);
HWND listView = FindWindowEx(innerWindow, NULL, L"SysListView32", NULL);
if (listView) {
g_hwndLogList = listView;
g_pfnListViewProc = (WNDPROC)SetWindowLong(g_hwndLogList, GWL_WNDPROC, (LONG_PTR)LogListViewProc);
}
}
}
PLUGIN_METHOD(WriteLog) {
PLUGIN_INIT();
WCHAR text[NSIS_MAX_STRLEN];
popstring(text);
LogInternal(text);
}
================================================
FILE: nsisplugin/main.c
================================================
#include
#include
#include "Startup.h"
#include "Log.h"
HINSTANCE g_hInstance;
HWND g_hwndParent;
EXTERN_C __declspec(dllexport)
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) {
switch (dwReason) {
case DLL_PROCESS_ATTACH:
g_hInstance = hInstance;
Startup();
OpenLog();
break;
case DLL_PROCESS_DETACH:
g_hInstance = NULL;
CloseLog();
break;
}
return TRUE;
}
#include
================================================
FILE: nsisplugin/main.h
================================================
#include
EXTERN_C HINSTANCE g_hInstance;
EXTERN_C HWND g_hwndParent;
================================================
FILE: nsisplugin/resource.h
================================================
#define IDC_CHILDRECT 1018
// Reboot
#define IDD_REBOOT 120
#define IDI_ICON2 103
#define IDC_INTROTEXT 1006
#define IDC_TEXT1 1021
#define IDC_PROGRESS 1004
================================================
FILE: nsisplugin/resource.rc
================================================
#include "resource.h"
#include
#include "Version.h"
#define INNER_WIDTH 317
#define INNER_HEIGHT 119
#define INNER_WIDTH_ALIGNED (INNER_WIDTH - 12)
/////////////////////////////////////////////////////////////////////////////
// English (United States) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(65001)
/////////////////////////////////////////////////////////////////////////////
//
// Dialogs
//
IDD_REBOOT DIALOGEX 0, 0, INNER_WIDTH, INNER_HEIGHT
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
// Icon
CONTROL "", IDI_ICON2, "STATIC", SS_ICON, 0, 0, 21, 20
// Intro text
LTEXT "Text\nText\nText", IDC_INTROTEXT, 27, 0, INNER_WIDTH - 28, 65
// Countdown text
LTEXT "", IDC_TEXT1, 0, 68, INNER_WIDTH, 16, SS_LEFTNOWORDWRAP | SS_NOPREFIX
// Progress
CONTROL "", IDC_PROGRESS, "msctls_progress32", WS_BORDER, 0, 84, INNER_WIDTH_ALIGNED, 10
END
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION VERSION
PRODUCTVERSION VERSION
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG | VS_FF_PRERELEASE
#else
FILEFLAGS 0
#endif
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_DLL
FILESUBTYPE VFT2_UNKNOWN
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "Hashbang Productions"
VALUE "FileDescription", "Legacy Update Setup Helper"
VALUE "FileVersion", VERSION_STRING
VALUE "InternalName", "LegacyUpdateNSIS.dll"
VALUE "LegalCopyright", "© Hashbang Productions. All rights reserved."
VALUE "OriginalFilename", "LegacyUpdateNSIS.dll"
VALUE "ProductName", "Legacy Update"
VALUE "ProductVersion", VERSION_STRING
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x0409, 0x04b0
END
END
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////
================================================
FILE: nsisplugin/sha256.c
================================================
// From https://github.com/amosnier/sha-2
// Licensed under 0BSD https://github.com/amosnier/sha-2/blob/565f650/LICENSE.md
#include "sha256.h"
#define TOTAL_LEN_LEN 8
/*
* Comments from pseudo-code at https://en.wikipedia.org/wiki/SHA-2 are reproduced here.
* When useful for clarification, portions of the pseudo-code are reproduced here too.
*/
/*
* @brief Rotate a 32-bit value by a number of bits to the right.
* @param value The value to be rotated.
* @param count The number of bits to rotate by.
* @return The rotated value.
*/
static inline uint32_t right_rot(uint32_t value, unsigned int count)
{
/*
* Defined behaviour in standard C for all count where 0 < count < 32, which is what we need here.
*/
return value >> count | value << (32 - count);
}
/*
* @brief Update a hash value under calculation with a new chunk of data.
* @param h Pointer to the first hash item, of a total of eight.
* @param p Pointer to the chunk data, which has a standard length.
*
* @note This is the SHA-256 work horse.
*/
static inline void consume_chunk(uint32_t *h, const uint8_t *p)
{
unsigned i, j;
uint32_t ah[8];
/* Initialize working variables to current hash value: */
for (i = 0; i < 8; i++)
ah[i] = h[i];
/*
* The w-array is really w[64], but since we only need 16 of them at a time, we save stack by
* calculating 16 at a time.
*
* This optimization was not there initially and the rest of the comments about w[64] are kept in their
* initial state.
*/
/*
* create a 64-entry message schedule array w[0..63] of 32-bit words (The initial values in w[0..63]
* don't matter, so many implementations zero them here) copy chunk into first 16 words w[0..15] of the
* message schedule array
*/
uint32_t w[16];
/* Compression function main loop: */
for (i = 0; i < 4; i++) {
for (j = 0; j < 16; j++) {
if (i == 0) {
w[j] =
(uint32_t)p[0] << 24 | (uint32_t)p[1] << 16 | (uint32_t)p[2] << 8 | (uint32_t)p[3];
p += 4;
} else {
/* Extend the first 16 words into the remaining 48 words w[16..63] of the
* message schedule array: */
const uint32_t s0 = right_rot(w[(j + 1) & 0xf], 7) ^ right_rot(w[(j + 1) & 0xf], 18) ^
(w[(j + 1) & 0xf] >> 3);
const uint32_t s1 = right_rot(w[(j + 14) & 0xf], 17) ^
right_rot(w[(j + 14) & 0xf], 19) ^ (w[(j + 14) & 0xf] >> 10);
w[j] = w[j] + s0 + w[(j + 9) & 0xf] + s1;
}
const uint32_t s1 = right_rot(ah[4], 6) ^ right_rot(ah[4], 11) ^ right_rot(ah[4], 25);
const uint32_t ch = (ah[4] & ah[5]) ^ (~ah[4] & ah[6]);
/*
* Initialize array of round constants:
* (first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311):
*/
static const uint32_t k[] = {
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4,
0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe,
0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f,
0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,
0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,
0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116,
0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7,
0xc67178f2};
const uint32_t temp1 = ah[7] + s1 + ch + k[i << 4 | j] + w[j];
const uint32_t s0 = right_rot(ah[0], 2) ^ right_rot(ah[0], 13) ^ right_rot(ah[0], 22);
const uint32_t maj = (ah[0] & ah[1]) ^ (ah[0] & ah[2]) ^ (ah[1] & ah[2]);
const uint32_t temp2 = s0 + maj;
ah[7] = ah[6];
ah[6] = ah[5];
ah[5] = ah[4];
ah[4] = ah[3] + temp1;
ah[3] = ah[2];
ah[2] = ah[1];
ah[1] = ah[0];
ah[0] = temp1 + temp2;
}
}
/* Add the compressed chunk to the current hash value: */
for (i = 0; i < 8; i++)
h[i] += ah[i];
}
/*
* Public functions. See header file for documentation.
*/
void sha_256_init(struct Sha_256 *sha_256, uint8_t hash[SIZE_OF_SHA_256_HASH])
{
sha_256->hash = hash;
sha_256->chunk_pos = sha_256->chunk;
sha_256->space_left = SIZE_OF_SHA_256_CHUNK;
sha_256->total_len = 0;
/*
* Initialize hash values (first 32 bits of the fractional parts of the square roots of the first 8 primes
* 2..19):
*/
sha_256->h[0] = 0x6a09e667;
sha_256->h[1] = 0xbb67ae85;
sha_256->h[2] = 0x3c6ef372;
sha_256->h[3] = 0xa54ff53a;
sha_256->h[4] = 0x510e527f;
sha_256->h[5] = 0x9b05688c;
sha_256->h[6] = 0x1f83d9ab;
sha_256->h[7] = 0x5be0cd19;
}
void sha_256_write(struct Sha_256 *sha_256, const void *data, size_t len)
{
sha_256->total_len += len;
/*
* The following cast is not necessary, and could even be considered as poor practice. However, it makes this
* file valid C++, which could be a good thing for some use cases.
*/
const uint8_t *p = (const uint8_t *)data;
while (len > 0) {
/*
* If the input chunks have sizes that are multiples of the calculation chunk size, no copies are
* necessary. We operate directly on the input data instead.
*/
if (sha_256->space_left == SIZE_OF_SHA_256_CHUNK && len >= SIZE_OF_SHA_256_CHUNK) {
consume_chunk(sha_256->h, p);
len -= SIZE_OF_SHA_256_CHUNK;
p += SIZE_OF_SHA_256_CHUNK;
continue;
}
/* General case, no particular optimization. */
const size_t consumed_len = len < sha_256->space_left ? len : sha_256->space_left;
memcpy(sha_256->chunk_pos, p, consumed_len);
sha_256->space_left -= consumed_len;
len -= consumed_len;
p += consumed_len;
if (sha_256->space_left == 0) {
consume_chunk(sha_256->h, sha_256->chunk);
sha_256->chunk_pos = sha_256->chunk;
sha_256->space_left = SIZE_OF_SHA_256_CHUNK;
} else {
sha_256->chunk_pos += consumed_len;
}
}
}
uint8_t *sha_256_close(struct Sha_256 *sha_256)
{
uint8_t *pos = sha_256->chunk_pos;
size_t space_left = sha_256->space_left;
uint32_t *const h = sha_256->h;
/*
* The current chunk cannot be full. Otherwise, it would already have been consumed. I.e. there is space left
* for at least one byte. The next step in the calculation is to add a single one-bit to the data.
*/
*pos++ = 0x80;
--space_left;
/*
* Now, the last step is to add the total data length at the end of the last chunk, and zero padding before
* that. But we do not necessarily have enough space left. If not, we pad the current chunk with zeroes, and add
* an extra chunk at the end.
*/
if (space_left < TOTAL_LEN_LEN) {
memset(pos, 0x00, space_left);
consume_chunk(h, sha_256->chunk);
pos = sha_256->chunk;
space_left = SIZE_OF_SHA_256_CHUNK;
}
const size_t left = space_left - TOTAL_LEN_LEN;
memset(pos, 0x00, left);
pos += left;
uint64_t len = sha_256->total_len;
pos[7] = (uint8_t)(len << 3);
len >>= 5;
int i;
for (i = 6; i >= 0; --i) {
pos[i] = (uint8_t)len;
len >>= 8;
}
consume_chunk(h, sha_256->chunk);
/* Produce the final hash value (big-endian): */
int j;
uint8_t *const hash = sha_256->hash;
for (i = 0, j = 0; i < 8; i++) {
hash[j++] = (uint8_t)(h[i] >> 24);
hash[j++] = (uint8_t)(h[i] >> 16);
hash[j++] = (uint8_t)(h[i] >> 8);
hash[j++] = (uint8_t)h[i];
}
return sha_256->hash;
}
void calc_sha_256(uint8_t hash[SIZE_OF_SHA_256_HASH], const void *input, size_t len)
{
struct Sha_256 sha_256;
sha_256_init(&sha_256, hash);
sha_256_write(&sha_256, input, len);
(void)sha_256_close(&sha_256);
}
================================================
FILE: nsisplugin/sha256.h
================================================
// From https://github.com/amosnier/sha-2
// Licensed under 0BSD https://github.com/amosnier/sha-2/blob/565f650/LICENSE.md
#ifndef SHA_256_H
#define SHA_256_H
#include
#include
#ifdef __cplusplus
extern "C" {
#endif
/*
* @brief Size of the SHA-256 sum. This times eight is 256 bits.
*/
#define SIZE_OF_SHA_256_HASH 32
/*
* @brief Size of the chunks used for the calculations.
*
* @note This should mostly be ignored by the user, although when using the streaming API, it has an impact for
* performance. Add chunks whose size is a multiple of this, and you will avoid a lot of superfluous copying in RAM!
*/
#define SIZE_OF_SHA_256_CHUNK 64
/*
* @brief The opaque SHA-256 type, that should be instantiated when using the streaming API.
*
* @note Although the details are exposed here, in order to make instantiation easy, you should refrain from directly
* accessing the fields, as they may change in the future.
*/
struct Sha_256 {
uint8_t *hash;
uint8_t chunk[SIZE_OF_SHA_256_CHUNK];
uint8_t *chunk_pos;
size_t space_left;
uint64_t total_len;
uint32_t h[8];
};
/*
* @brief The simple SHA-256 calculation function.
* @param hash Hash array, where the result is delivered.
* @param input Pointer to the data the hash shall be calculated on.
* @param len Length of the input data, in byte.
*
* @note If all of the data you are calculating the hash value on is available in a contiguous buffer in memory, this is
* the function you should use.
*
* @note If either of the passed pointers is NULL, the results are unpredictable.
*
* @note See note about maximum data length for sha_256_write, as it applies for this function's len argument too.
*/
void calc_sha_256(uint8_t hash[SIZE_OF_SHA_256_HASH], const void *input, size_t len);
/*
* @brief Initialize a SHA-256 streaming calculation.
* @param sha_256 A pointer to a SHA-256 structure.
* @param hash Hash array, where the result will be delivered.
*
* @note If all of the data you are calculating the hash value on is not available in a contiguous buffer in memory,
* this is where you should start. Instantiate a SHA-256 structure, for instance by simply declaring it locally, make
* your hash buffer available, and invoke this function. Once a SHA-256 hash has been calculated (see further below) a
* SHA-256 structure can be initialized again for the next calculation.
*
* @note If either of the passed pointers is NULL, the results are unpredictable.
*/
void sha_256_init(struct Sha_256 *sha_256, uint8_t hash[SIZE_OF_SHA_256_HASH]);
/*
* @brief Stream more input data for an on-going SHA-256 calculation.
* @param sha_256 A pointer to a previously initialized SHA-256 structure.
* @param data Pointer to the data to be added to the calculation.
* @param len Length of the data to add, in byte.
*
* @note This function may be invoked an arbitrary number of times between initialization and closing, but the maximum
* data length is limited by the SHA-256 algorithm: the total number of bits (i.e. the total number of bytes times
* eight) must be representable by a 64-bit unsigned integer. While that is not a practical limitation, the results are
* unpredictable if that limit is exceeded.
*
* @note This function may be invoked on empty data (zero length), although that obviously will not add any data.
*
* @note If either of the passed pointers is NULL, the results are unpredictable.
*/
void sha_256_write(struct Sha_256 *sha_256, const void *data, size_t len);
/*
* @brief Conclude a SHA-256 streaming calculation, making the hash value available.
* @param sha_256 A pointer to a previously initialized SHA-256 structure.
* @return Pointer to the hash array, where the result is delivered.
*
* @note After this function has been invoked, the result is available in the hash buffer that initially was provided. A
* pointer to the hash value is returned for convenience, but you should feel free to ignore it: it is simply a pointer
* to the first byte of your initially provided hash array.
*
* @note If the passed pointer is NULL, the results are unpredictable.
*
* @note Invoking this function for a calculation with no data (the writing function has never been invoked, or it only
* has been invoked with empty data) is legal. It will calculate the SHA-256 value of the empty string.
*/
uint8_t *sha_256_close(struct Sha_256 *sha_256);
#ifdef __cplusplus
}
#endif
#endif
================================================
FILE: nsisplugin/stdafx.h
================================================
#pragma once
#ifndef STRICT
#define STRICT
#endif
#define WINVER _WIN32_WINNT_NT4
#define _WIN32_WINNT _WIN32_WINNT_NT4
// Use msvcrt stdio functions
#define __USE_MINGW_ANSI_STDIO 0
// Enable COM C interfaces
#define CINTERFACE
#define COBJMACROS
#define INITGUID
#include "resource.h"
#include
#include "Trace.h"
EXTERN_C HWND g_hwndParent;
#define NSIS_MAX_STRLEN 8192
#define PLUGIN_METHOD(name) \
EXTERN_C __declspec(dllexport) \
void __cdecl name(HWND hwndParent, int string_size, TCHAR *variables, stack_t **stacktop, extra_parameters *extra)
#define PLUGIN_INIT() \
if (extra && extra->exec_flags && (extra->exec_flags->plugin_api_version != NSISPIAPIVER_CURR)) { \
return; \
} \
EXDLL_INIT(); \
g_hwndParent = hwndParent;
================================================
FILE: setup/ActiveX.inf
================================================
[Version]
Signature="$CHICAGO$"
AdvancedINF=2.0
[Setup Hooks]
setup=setup
[setup]
run="%EXTRACT_DIR%\setup.exe"
================================================
FILE: setup/ActiveXPage.nsh
================================================
Var Dialog
Var Dialog.Y
Function ActiveXPage
; Skip in runonce
${If} ${IsRunOnce}
${OrIf} ${IsPostInstall}
Abort
${EndIf}
; Skip if ActiveX install (user already opted for it)
${If} ${IsActiveX}
Abort
${EndIf}
; Skip if not required
${If} ${AtLeastWin7}
; TODO: Fix ordering of setup.nsi so we can do this
; ${OrIfNot} ${SectionIsSelected} ${LEGACYUPDATE}
Abort
${EndIf}
!insertmacro MUI_HEADER_TEXT "$(ActiveXPageTitle)" ""
nsDialogs::Create 1018
Pop $Dialog
${AeroWizardDialogControl} $Dialog
StrCpy $Dialog.Y 0
${NSD_CreateLabel} 0 $Dialog.Y -1u 24u "$(ActiveXPageText)"
Pop $0
${AeroWizardDialogControl} $0
IntOp $Dialog.Y $Dialog.Y + 60
${NSD_CreateIcon} 3u $Dialog.Y 4u 4u ""
Pop $0
${AeroWizardDialogControl} $0
${NSD_SetIconFromInstaller} $0 103
${NSD_CreateRadioButton} 30u $Dialog.Y -30u 10u "$(ActiveXPageYesTitle)"
Pop $0
${AeroWizardDialogControl} $0
${NSD_OnClick} $0 ActiveXPageSelectionChanged
SendMessage $0 ${BM_SETCHECK} ${BST_CHECKED} 0
${NSD_SetFocus} $0
${If} ${AtLeastWinVista}
StrCpy $0 "$(ActiveXPageYesTextVista)"
${Else}
StrCpy $0 "$(ActiveXPageYesText2KXP)"
${EndIf}
IntOp $Dialog.Y $Dialog.Y + 17
${NSD_CreateLabel} 41u $Dialog.Y -41u 24u "$0"
Pop $0
${AeroWizardDialogControl} $0
IntOp $Dialog.Y $Dialog.Y + 50
${NSD_CreateIcon} 3u $Dialog.Y 4u 4u ""
Pop $0
${AeroWizardDialogControl} $0
${If} ${AtLeastWinVista}
${NSD_SetIcon} $0 "$WINDIR\System32\wucltux.dll" $1
StrCpy $1 "$(ActiveXPageNoTitleVista)"
StrCpy $2 "$(ActiveXPageNoTextVista)"
${Else}
${NSD_SetIcon} $0 "res://$WINDIR\System32\wupdmgr.exe/#Icon/APPICON" $1
StrCpy $1 "$(ActiveXPageNoTitle2KXP)"
StrCpy $2 "$(ActiveXPageNoText2KXP)"
${EndIf}
${NSD_CreateRadioButton} 30u $Dialog.Y -30u 10u "$1"
Pop $0
${AeroWizardDialogControl} $0
${NSD_OnClick} $0 ActiveXPageSelectionChanged
IntOp $Dialog.Y $Dialog.Y + 17
${NSD_CreateLabel} 41u $Dialog.Y -41u 24u "$2"
Pop $0
${AeroWizardDialogControl} $0
nsDialogs::Show
Call AeroWizardOnShow
FunctionEnd
Function ActiveXPageSelectionChanged
Pop $0
${NSD_GetState} $0 $0
; TODO: Fix ordering of setup.nsi so we can do this
${If} $0 == ${BST_CHECKED}
; !insertmacro UnselectSection ${ACTIVEX}
${Else}
; !insertmacro SelectSection ${ACTIVEX}
${EndIf}
FunctionEnd
================================================
FILE: setup/AeroWizard.nsh
================================================
!macro SetFont font parent control
GetDlgItem $0 ${parent} ${control}
SendMessage $0 ${WM_SETFONT} ${font} 0
!macroend
!macro SetControlColor parent control color
GetDlgItem $0 ${parent} ${control}
SetCtlColors $0 ${color} SYSCLR:WINDOW
!macroend
!macro SetBackground parent control
!insertmacro SetControlColor ${parent} ${control} SYSCLR:WINDOWTEXT
!macroend
; These are PE resources because there's no benefit to LZMA compressing PNGs
PEAddResource "banner-wordmark-light.png" "PNG" "#1337"
PEAddResource "banner-wordmark-dark.png" "PNG" "#1338"
PEAddResource "banner-wordmark-glow.png" "PNG" "#1339"
Var /GLOBAL ChildHwnd
Var /GLOBAL AeroWizard.Font
!macro -AeroWizardOnShow
; Get the child window where the wizard page is
FindWindow $ChildHwnd "#32770" "" $HWNDPARENT
; Set font
${If} ${AtLeastWinVista}
; Aero wizard style
${If} ${AtLeastWin11}
; Semi-Fluent style
CreateFont $3 "Segoe UI Variable Display Semibold" 14 600
!insertmacro SetControlColor $HWNDPARENT 1037 SYSCLR:WINDOWTEXT
${Else}
; Aero style
CreateFont $3 "Segoe UI" 12 400
!insertmacro SetControlColor $HWNDPARENT 1037 0x003399
${EndIf}
CreateFont $AeroWizard.Font "Segoe UI" 8 400
!insertmacro SetFont $3 $HWNDPARENT 1037
!insertmacro SetFont $AeroWizard.Font $HWNDPARENT 1028
${For} $4 1 3
!insertmacro SetFont $AeroWizard.Font $HWNDPARENT $4
${Next}
${For} $4 1000 1043
!insertmacro SetFont $AeroWizard.Font $ChildHwnd $4
${Next}
${Else}
; Wizard97ish style
${If} ${FileExists} "$FONTS\framd.ttf"
CreateFont $2 "Franklin Gothic Medium" 13 400
!insertmacro SetControlColor $HWNDPARENT 1037 0x003399
${Else}
CreateFont $2 "Verdana" 12 800
!insertmacro SetControlColor $HWNDPARENT 1037 SYSCLR:WINDOWTEXT
${EndIf}
!insertmacro SetFont $2 $HWNDPARENT 1037
CreateFont $AeroWizard.Font "MS Shell Dlg 2" 8 400
${EndIf}
; Set white background
SetCtlColors $HWNDPARENT SYSCLR:WINDOWTEXT SYSCLR:WINDOW
SetCtlColors $ChildHwnd SYSCLR:WINDOWTEXT SYSCLR:WINDOW
!insertmacro SetBackground $ChildHwnd 103
${For} $4 1000 1043
!insertmacro SetBackground $ChildHwnd $4
${Next}
; Set up banner and glass
LegacyUpdateNSIS::DialogInit
; Activate taskbar progress bar plugin
LegacyUpdateNSIS::InitTaskbarProgress
!macroend
Function AeroWizardOnShow
!insertmacro -AeroWizardOnShow
FunctionEnd
!if ${NT4} == 0
Function un.AeroWizardOnShow
!insertmacro -AeroWizardOnShow
FunctionEnd
!endif
!macro -AeroWizardDialogControl hwnd
SendMessage ${hwnd} ${WM_SETFONT} $AeroWizard.Font 0
SetCtlColors ${hwnd} SYSCLR:WINDOWTEXT SYSCLR:WINDOW
!macroend
!define AeroWizardDialogControl '!insertmacro -AeroWizardDialogControl'
================================================
FILE: setup/Common.nsh
================================================
!addplugindir /x86-unicode x86-unicode
SetPluginUnload alwaysoff
!if ${DEBUG} == 0
!packhdr upx.tmp 'upx --lzma -9 upx.tmp'
!endif
!if ${SIGN} == 1
!finalize '../build/sign.sh "%1"'
!uninstfinalize '../build/sign.sh "%1"'
!endif
!macro -Trace msg
!if ${DEBUG} == 1
!insertmacro _LOGICLIB_TEMP
!ifdef __FUNCTION__
StrCpy $_LOGICLIB_TEMP "${__FUNCTION__}"
!else
StrCpy $_LOGICLIB_TEMP "${__SECTION__}"
!endif
MessageBox MB_OK `${__FILE__}(${__LINE__}): $_LOGICLIB_TEMP: ${msg}`
!endif
!macroend
!define TRACE '!insertmacro -Trace'
!define IsNativeIA64 '${IsNativeMachineArchitecture} ${IMAGE_FILE_MACHINE_IA64}'
; Avoid needing to use System.dll for this
!define /redef RunningX64 `"$PROGRAMFILES64" != "$PROGRAMFILES32"`
!macro _HasFlag _a _b _t _f
!insertmacro _LOGICLIB_TEMP
${GetParameters} $_LOGICLIB_TEMP
ClearErrors
${GetOptions} $_LOGICLIB_TEMP `${_b}` $_LOGICLIB_TEMP
IfErrors `${_f}` `${_t}`
!macroend
!define IsPassive `"" HasFlag "/passive"`
!define IsActiveX `"" HasFlag "/activex"`
!define IsRunOnce `"" HasFlag "/runonce"`
!define IsPostInstall `"" HasFlag "/postinstall"`
!define NoRestart `"" HasFlag "/norestart"`
!define IsHelp `"" HasFlag "/?"`
!if ${DEBUG} == 1
!define IsVerbose `1 == 1`
!define TestRunOnce `"" HasFlag "/testrunonce"`
!else
!define IsVerbose `"" HasFlag "/v"`
!endif
!macro -DetailPrint level text
LegacyUpdateNSIS::WriteLog "${text}"
!if ${level} == 0
${If} ${IsVerbose}
DetailPrint "${text}"
${EndIf}
!else
SetDetailsPrint both
DetailPrint "${text}"
SetDetailsPrint listonly
!endif
!macroend
!define VerbosePrint `!insertmacro -DetailPrint 0`
!define DetailPrint `!insertmacro -DetailPrint 1`
Var /GLOBAL SetupMutexHandle
Var /GLOBAL TermsrvUserModeChanged
Function CheckSetupMutex
!define SetupMutexName "Global\$(^Name)"
System::Call '${OpenMutex}(${SYNCHRONIZE}, 0, "${SetupMutexName}") .r0'
${If} $0 != 0
System::Call '${CloseHandle}($0)'
${VerbosePrint} "Setup is already running"
MessageBox MB_USERICON "$(MsgBoxSetupAlreadyRunning)" /SD IDOK
SetErrorLevel 1
Quit
${EndIf}
System::Call '${CreateMutex}(0, 1, "${SetupMutexName}") .r0'
StrCpy $SetupMutexHandle $0
FunctionEnd
Function InitChecks
SetShellVarContext all
${If} ${IsVerbose}
SetDetailsPrint both
${Else}
SetDetailsPrint listonly
${EndIf}
${If} ${RunningX64}
SetRegView 64
${EndIf}
!if ${NT4} == 1
${IfNot} ${IsWinNT4}
MessageBox MB_USERICON|MB_OKCANCEL "$(MsgBoxNeedsNT4)" /SD IDCANCEL \
IDCANCEL +2
ExecShell "" "${WEBSITE}"
SetErrorLevel ${ERROR_OLD_WIN_VERSION}
Quit
${EndIf}
!else
${IfNot} ${AtLeastWin2000}
MessageBox MB_USERICON|MB_OKCANCEL "$(MsgBoxOldWinVersion)" /SD IDCANCEL \
IDCANCEL +2
ExecShell "" "${WUR_WEBSITE}"
SetErrorLevel ${ERROR_OLD_WIN_VERSION}
Quit
${EndIf}
!endif
${If} ${IsHelp}
MessageBox MB_USERICON "$(MsgBoxUsage)"
Quit
${EndIf}
ClearErrors
LegacyUpdateNSIS::InitLog
${If} ${Errors}
MessageBox MB_USERICON "$(MsgBoxPluginFailed)" /SD IDOK
SetErrorLevel 1
Quit
${EndIf}
LegacyUpdateNSIS::IsAdmin
Pop $0
${If} $0 == 0
${VerbosePrint} "Not an admin"
MessageBox MB_USERICON "$(MsgBoxElevationRequired)" /SD IDOK
SetErrorLevel ${ERROR_ELEVATION_REQUIRED}
Quit
${EndIf}
Call CheckSetupMutex
${If} ${IsRunOnce}
${OrIf} ${IsPostInstall}
${VerbosePrint} "RunOnce logon"
Call OnRunOnceLogon
${ElseIfNot} ${AtLeastWin10}
GetWinVer $0 Build
ReadRegDword $1 HKLM "${REGPATH_CONTROL_WINDOWS}" "CSDVersion"
IntOp $1 $1 & 0xFF
${If} $1 != 0
${VerbosePrint} "Unexpected service pack: $1"
StrCpy $1 1
${EndIf}
!if ${NT4} == 1
${If} $0 != ${WINVER_BUILD_NT4}
!else
${If} $0 != ${WINVER_BUILD_2000}
${AndIf} $0 != ${WINVER_BUILD_XP2002}
${AndIf} $0 != ${WINVER_BUILD_XP2003}
${AndIf} $0 != ${WINVER_BUILD_VISTA}
${AndIf} $0 != ${WINVER_BUILD_VISTA_SP1}
${AndIf} $0 != ${WINVER_BUILD_VISTA_SP2}
${AndIf} $0 != ${WINVER_BUILD_VISTA_ESU}
${AndIf} $0 != ${WINVER_BUILD_7}
${AndIf} $0 != ${WINVER_BUILD_7_SP1}
${AndIf} $0 != ${WINVER_BUILD_8}
${AndIf} $0 != ${WINVER_BUILD_8.1}
!endif
${VerbosePrint} "Unexpected build: $0"
StrCpy $1 1
${EndIf}
${If} $1 == 1
MessageBox MB_USERICON|MB_OKCANCEL "$(MsgBoxBetaOS)" /SD IDOK \
IDOK +3
SetErrorLevel 1
Quit
${EndIf}
!if ${NT4} == 0
; Detect One-Core-API
ReadRegDword $0 HKLM "${REGPATH_HOTFIX}\OCAB" "Installed"
${If} $0 == 1
${VerbosePrint} "One-Core-API detected"
MessageBox MB_USERICON|MB_OKCANCEL "$(MsgBoxOneCoreAPI)" /SD IDOK \
IDOK +3
SetErrorLevel 1
Quit
${EndIf}
!endif
${EndIf}
!if ${NT4} == 0
; Detect NNN4NT5
ReadEnvStr $0 "_COMPAT_VER_NNN"
${If} $0 != ""
${VerbosePrint} "NNN4NT5 detected"
MessageBox MB_USERICON "$(MsgBoxNNN4NT5)" /SD IDOK
SetErrorLevel 1
Quit
${EndIf}
; Check for compatibility mode (GetVersionEx() and RtlGetNtVersionNumbers() disagreeing)
GetWinVer $0 Major
GetWinVer $1 Minor
GetWinVer $2 Build
System::Call '${RtlGetNtVersionNumbers}(.r3, .r4, .r5)'
IntOp $5 $5 & 0xFFFF
; Windows 2000 lacks RtlGetNtVersionNumbers(), but there is no compatibility mode anyway.
${If} "$3.$4.$5" != "0.0.0"
${AndIf} "$0.$1.$2" != "$3.$4.$5"
${VerbosePrint} "Compatibility mode detected. Fake: $0.$1.$2, Actual: $3.$4.$5"
MessageBox MB_USERICON "$(MsgBoxCompatMode)" /SD IDOK
SetErrorLevel 1
Quit
${EndIf}
!endif
; Check for a service pack or hotfix install in progress
StrCpy $1 0
System::Call '${OpenMutex}(${SYNCHRONIZE}, 0, "Global\ServicePackOrHotfix") .r0'
${If} $0 != 0
System::Call '${CloseHandle}($0)'
StrCpy $1 1
${Else}
; This mutex string is also used by Vista SP2 and 7 SP1, and yes, it has a typo
System::Call '${OpenMutex}(${SYNCHRONIZE}, 0, "Global\Microsoft® Windows® Vista Sevice Pack 1 Installer") .r0'
${If} $0 != 0
System::Call '${CloseHandle}($0)'
StrCpy $1 1
${EndIf}
${EndIf}
${If} $1 == 1
${VerbosePrint} "Found a service pack or hotfix installer running"
MessageBox MB_USERICON "$(MsgBoxInstallInProgress)" /SD IDOK
SetErrorLevel 1
Quit
${EndIf}
; Check for Terminal Services execute mode
${If} ${IsServerOS}
${AndIf} ${IsTerminalServer}
ReadRegDword $0 HKLM "${REGPATH_CONTROL_TERMSRV}" "TSAppCompat"
System::Call '${TermsrvAppInstallMode}() .r1'
${If} $0 == 1
${AndIf} $1 == 0
${IfNot} ${IsRunOnce}
${AndIfNot} ${IsPostInstall}
${VerbosePrint} "Terminal Server execute mode detected"
MessageBox MB_USERICON|MB_OKCANCEL "$(MsgBoxTermsrvAppInstallMode)" /SD IDOK \
IDOK +3
SetErrorLevel 1
Quit
${EndIf}
${VerbosePrint} "Setting Terminal Server install mode"
StrCpy $TermsrvUserModeChanged 1
System::Call '${SetTermsrvAppInstallMode}(1)'
${EndIf}
${EndIf}
FunctionEnd
Function RevertTermsrvUserMode
${If} $TermsrvUserModeChanged == 1
${VerbosePrint} "Reverting Terminal Server install mode"
System::Call '${SetTermsrvAppInstallMode}(0)'
${EndIf}
FunctionEnd
!macro InhibitSleep state
!if ${state} == 1
System::Call '${SetThreadExecutionState}(${ES_CONTINUOUS}|${ES_SYSTEM_REQUIRED})'
!else
System::Call '${SetThreadExecutionState}(${ES_CONTINUOUS})'
!endif
!macroend
!macro -DeleteWithErrorHandling file
ClearErrors
Delete "${file}"
IfErrors 0 +4
StrCpy $0 "${file}"
MessageBox MB_USERICON|MB_RETRYCANCEL "$(MsgBoxCopyFailed)" /SD IDCANCEL \
IDRETRY -4
Abort
!macroend
!define DeleteWithErrorHandling `!insertmacro -DeleteWithErrorHandling`
!macro -WriteRegWithBackup type root subkey name value
ClearErrors
ReadReg${type} $0 ${root} "${subkey}" "${name}"
${IfNot} ${Errors}
WriteReg${type} ${root} "${subkey}" "${name}_LegacyUpdateBackup" $0
${EndIf}
WriteReg${type} ${root} "${subkey}" "${name}" `${value}`
!macroend
!macro -DeleteRegWithBackup type root subkey name fallback
ClearErrors
ReadReg${type} $0 ${root} "${subkey}" "${name}_LegacyUpdateBackup"
${If} ${Errors}
!if "${fallback}" == "-"
DeleteRegValue ${root} "${subkey}" "${name}"
!else
WriteReg${type} ${root} "${subkey}" "${name}" `${fallback}`
!endif
${Else}
WriteReg${type} ${root} "${subkey}" "${name}" $0
DeleteRegValue ${root} "${subkey}" "${name}_LegacyUpdateBackup"
${EndIf}
!macroend
!define WriteRegWithBackup `!insertmacro -WriteRegWithBackup`
!define DeleteRegWithBackup `!insertmacro -DeleteRegWithBackup`
Function SetLastOSVersion
System::Call '${GetVersion}() .r0'
WriteRegDWORD HKLM "${REGPATH_LEGACYUPDATE_SETUP}" "LastOSVersion" "$0"
FunctionEnd
================================================
FILE: setup/Constants.nsh
================================================
; Product
!define NAME "Legacy Update"
!define DOMAIN "legacyupdate.net"
; NSIS target
!ifdef NSIS_UNICODE
!define NSIS_CHARSET "unicode"
!else
!define NSIS_CHARSET "ansi"
!endif
!define NSIS_TARGET "${NSIS_CPU}-${NSIS_CHARSET}"
; Version
!if ${NT4} == 1
!define DLLVersion_1 1
!define DLLVersion_2 11
!define DLLVersion_3 1
!define DLLVersion_4 0
!else
!getdllversion "..\LegacyUpdate\obj\LegacyUpdate32.dll" DLLVersion_
!endif
!define LONGVERSION "${DLLVersion_1}.${DLLVersion_2}.${DLLVersion_3}.${DLLVersion_4}"
!define VERSION "${LONGVERSION}"
!if ${DLLVersion_4} == 0
!define /redef VERSION "${DLLVersion_1}.${DLLVersion_2}.${DLLVersion_3}"
!endif
!if ${DLLVersion_3}.${DLLVersion_4} == 0.0
!define /redef VERSION "${DLLVersion_1}.${DLLVersion_2}"
!endif
; Main URLs
!define WEBSITE "http://legacyupdate.net/"
!define UPDATE_URL "http://legacyupdate.net/windowsupdate/v6/"
!define UPDATE_URL_HTTPS "https://legacyupdate.net/windowsupdate/v6/"
!define WSUS_SERVER "http://legacyupdate.net/v6"
!define WSUS_SERVER_HTTPS "https://legacyupdate.net/v6"
!define WUR_WEBSITE "http://windowsupdaterestored.com/"
!define TRUSTEDR "http://download.windowsupdate.com/msdownload/update/v3/static/trustedr/en"
; Control Panel entry
!define CPL_GUID "{FFBE8D44-E9CF-4DD8-9FD6-976802C94D9C}"
!define CPL_APPNAME "LegacyUpdate"
; IE elevation policy
!define ELEVATIONPOLICY_GUID "{3D800943-0434-49F2-89A1-472A259AD982}"
; Legacy Update keys
!define REGPATH_LEGACYUPDATE_SETUP "Software\Hashbang Productions\Legacy Update\Setup"
!define REGPATH_UNINSTSUBKEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}"
; Control Panel entry
!define REGPATH_CPLNAMESPACE "Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace\${CPL_GUID}"
!define REGPATH_HKCR_CPLCLSID "CLSID\${CPL_GUID}"
; System
!define REGPATH_HARDWARE_SYSTEM "Hardware\Description\System"
!define REGPATH_CONTROL "System\CurrentControlSet\Control"
!define REGPATH_CONTROL_HAL "${REGPATH_CONTROL}\HAL"
!define REGPATH_CONTROL_LANGUAGE "${REGPATH_CONTROL}\Nls\Language"
!define REGPATH_CONTROL_TERMSRV "${REGPATH_CONTROL}\Terminal Server"
!define REGPATH_CONTROL_WINDOWS "${REGPATH_CONTROL}\Windows"
; XP WPA
!define REGPATH_WPA "System\WPA"
!define REGPATH_POSREADY "${REGPATH_WPA}\POSReady"
; RunOnce
!define REGPATH_SETUP "System\Setup"
!define REGPATH_SETUP_STATUS "${REGPATH_SETUP}\Status"
!define REGPATH_RUNONCE "Software\Microsoft\Windows\CurrentVersion\RunOnce"
!define REGPATH_POLICIES_SYSTEM "Software\Microsoft\Windows\CurrentVersion\Policies\System"
!define REGPATH_SECURITYCENTER "Software\Microsoft\Security Center"
; Windows Update keys
!define REGPATH_WU "Software\Microsoft\Windows\CurrentVersion\WindowsUpdate"
!define REGPATH_WU_SERVICES "${REGPATH_WU}\Services"
; Windows Update policies
!define REGPATH_WUPOLICY "Software\Policies\Microsoft\Windows\WindowsUpdate"
!define REGPATH_WUAUPOLICY "${REGPATH_WUPOLICY}\AU"
; CBS keys
!define REGPATH_CBS "Software\Microsoft\Windows\CurrentVersion\Component Based Servicing"
!define REGPATH_CBS_REBOOTPENDING "${REGPATH_CBS}\RebootPending"
!define REGPATH_CBS_PACKAGESPENDING "${REGPATH_CBS}\PackagesPending"
!define REGPATH_CBS_REBOOTINPROGRESS "${REGPATH_CBS}\RebootInProgress"
; IE zone keys
!define REGPATH_INETSETTINGS "Software\Microsoft\Windows\CurrentVersion\Internet Settings"
!define REGPATH_INETSETTINGS_WINHTTP "${REGPATH_INETSETTINGS}\WinHttp"
!define REGPATH_ZONEDOMAINS "${REGPATH_INETSETTINGS}\ZoneMap\Domains"
!define REGPATH_ZONEESCDOMAINS "${REGPATH_INETSETTINGS}\ZoneMap\EscDomains"
; IE elevation policy keys
!define REGPATH_ELEVATIONPOLICY "Software\Microsoft\Internet Explorer\Low Rights\ElevationPolicy"
; SChannel protocol keys
!define REGPATH_SCHANNEL_PROTOCOLS "System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols"
!define REGPATH_DOTNET "Software\Microsoft\.NETFramework"
!define REGPATH_DOTNET_V2 "${REGPATH_DOTNET}\v2.0.50727"
!define REGPATH_DOTNET_V4 "${REGPATH_DOTNET}\v4.0.30319"
; Roots update keys
!define ROOTSUPDATE_GUID "{EF289A85-8E57-408d-BE47-73B55609861A}"
!define REGPATH_COMPONENTS "Software\Microsoft\Active Setup\Installed Components"
; Hotfix keys
!define REGPATH_HOTFIX "Software\Microsoft\Windows NT\CurrentVersion\HotFix"
================================================
FILE: setup/Download2KXP.nsh
================================================
!insertmacro NeedsSPHandler "W2KSP4" "Win2000" 3
!insertmacro NeedsSPHandler "XPSP1a" "WinXP2002" 0
!insertmacro NeedsSPHandler "XPSP2" "WinXP2002" 1
!insertmacro NeedsSPHandler "XPSP3" "WinXP2002" 2
!insertmacro NeedsSPHandler "XPESP3" "WinXP2002" 2
!insertmacro NeedsSPHandler "2003SP2" "WinXP2003" 1
!insertmacro NeedsFileVersionHandler "W2KUR1" "$WINDIR\system32\kernel32.dll" "5.00.2195.7006"
!insertmacro PatchHandler "W2KSP4" "Windows 2000 $(SP) 4" ${PATCH_FLAGS_SHORT} ""
!insertmacro PatchHandler "W2KUR1" "$(SectionW2KUR1)" ${PATCH_FLAGS_LONG} ""
!insertmacro PatchHandler "XPSP1a" "Windows XP $(SP) 1a" ${PATCH_FLAGS_SHORT} ""
!insertmacro PatchHandler "XPSP2" "Windows XP $(SP) 2" ${PATCH_FLAGS_LONG} ""
!insertmacro PatchHandler "XPSP3" "Windows XP $(SP) 3" ${PATCH_FLAGS_LONG} ""
!insertmacro PatchHandler "2003SP2" "Windows XP $(P64)/$(SRV) 2003 $(SP) 2" ${PATCH_FLAGS_LONG} ""
!insertmacro PatchHandler "XPESP3" "Windows XP $(EMB) $(SP) 3" ${PATCH_FLAGS_LONG} ""
Function FixW2KUR1
; Fix idling on multi-CPU systems when Update Rollup 1 is installed
WriteRegDWORD HKLM "${REGPATH_CONTROL_HAL}" "14140000FFFFFFFF" 0x10
FunctionEnd
================================================
FILE: setup/DownloadIE.nsh
================================================
!insertmacro NeedsFileVersionHandler "IE6" "$WINDIR\system32\mshtml.dll" "6.0.2600.0"
!macro DownloadIE ver title
${If} ${NeedsPatch} IE${ver}
StrCpy $Patch.Key "IE${ver}"
StrCpy $Patch.File "ie${ver}setup.cab"
StrCpy $Patch.Title "${title} $(Setup)"
Call -PatchHandler
${IfNot} ${FileExists} "$PLUGINSDIR\IE${ver}\ie${ver}setup.exe"
!insertmacro ExtractCab '${title} $(Setup)' "$Patch.File" "$PLUGINSDIR\IE${ver}"
${DetailPrint} "$(Downloading)${title}..."
!insertmacro ExecWithErrorHandling '${title}' '"$PLUGINSDIR\IE${ver}\ie${ver}setup.exe" /c:"ie${ver}wzd.exe /q /d /s:""#e"""'
${EndIf}
${EndIf}
!macroend
!macro InstallIE ver title
${If} ${NeedsPatch} IE${ver}
Call DownloadIE${ver}
${DetailPrint} "$(Installing)${title}..."
StrCpy $RunOnce.UseFallback 1
!insertmacro ExecWithErrorHandling '${title}' '"$PLUGINSDIR\IE${ver}\ie${ver}setup.exe" /c:"ie${ver}wzd.exe /q /r:n /s:""#e"""'
RMDir /r /REBOOTOK "$WINDIR\Windows Update Setup Files"
${EndIf}
!macroend
Function DownloadIE6
!insertmacro DownloadIE 6 "$(IE) 6 $(SP) 1"
FunctionEnd
Function InstallIE6
!insertmacro InstallIE 6 "$(IE) 6 $(SP) 1"
FunctionEnd
================================================
FILE: setup/DownloadNT4.nsh
================================================
!macro TODO thing
Function Install${thing}
DetailPrint "TODO: ${thing}"
FunctionEnd
!macroend
!include "NT4USB.nsh"
!insertmacro NeedsSPHandler "NT4SP6a" "WinNT4" 6
Function NeedsNT4SP6a-clt
${If} ${IsTerminalServer}
Push 0
${Else}
Call NeedsNT4SP6a
${EndIf}
FunctionEnd
Function NeedsNT4SP6a-wts
${If} ${IsTerminalServer}
Call NeedsNT4SP6a
${Else}
Push 0
${EndIf}
FunctionEnd
!insertmacro PatchHandler "NT4SP6a-clt" "Windows NT 4.0 $(SP) 6a" ${PATCH_FLAGS_NT4} ""
!insertmacro PatchHandler "NT4SP6a-wts" "Windows NT 4.0 $(WTS) $(SP) 6a" ${PATCH_FLAGS_NT4} ""
Function InstallNT4SP6a
${If} ${NeedsPatch} NT4SP6a
DetailPrint "$(Installing)Windows NT 4.0 $(SP) 6a..."
${If} ${IsTerminalServer}
Call InstallNT4SP6a-wts
${Else}
Call InstallNT4SP6a-clt
${EndIf}
${EndIf}
FunctionEnd
!insertmacro TODO "NT4Rollup"
; Workstation/Server
!insertmacro TODO "KB243649"
!insertmacro TODO "KB304158"
!insertmacro TODO "KB314147"
!insertmacro TODO "KB318138"
!insertmacro TODO "KB320206"
!insertmacro TODO "KB326830"
!insertmacro TODO "KB329115"
!insertmacro TODO "KB810833"
!insertmacro TODO "KB815021"
!insertmacro TODO "KB817606"
!insertmacro TODO "KB819696"
; Server-only
!insertmacro TODO "KB823182"
!insertmacro TODO "KB823803"
!insertmacro TODO "KB824105"
!insertmacro TODO "KB824141"
!insertmacro TODO "KB824146"
!insertmacro TODO "KB825119"
!insertmacro TODO "KB828035"
!insertmacro TODO "KB828741"
!insertmacro TODO "NT4KB835732"
!insertmacro TODO "KB839645"
!insertmacro TODO "KB841533"
!insertmacro TODO "KB841872"
!insertmacro TODO "KB870763"
!insertmacro TODO "KB873339"
!insertmacro TODO "KB873350"
!insertmacro TODO "KB885249"
!insertmacro TODO "KB885834"
!insertmacro TODO "KB885835"
!insertmacro TODO "KB885836"
!insertmacro TODO "KB891711"
; Runtimes
!insertmacro NeedsFileVersionHandler "MSI" "$WINDIR\system32\msiexec.exe" "3.1.4000.2435"
Function InstallMSI
${If} ${NeedsPatch} MSI
${DetailPrint} "$(Installing)$(MSI)..."
File "patches\redist\instmsiw.exe"
!insertmacro ExecWithErrorHandling '$(MSI)' '"$PLUGINSDIR\instmsiw.exe" /c:"msiinst.exe /delayrebootq"'
${EndIf}
FunctionEnd
!insertmacro TODO "NT4VCRT"
!insertmacro TODO "NT4VB6"
!insertmacro TODO "NT4MFCOLE"
!insertmacro TODO "NT4WMP64"
!insertmacro TODO "NT4DX5"
; Cleanup
Function CleanUpSPUninstall
DetailPrint "TODO: CleanUpSPUninstall"
FunctionEnd
================================================
FILE: setup/DownloadVista78.nsh
================================================
Function NeedsPackage
Pop $0
ClearErrors
FindFirst $R0 $R1 "$WINDIR\servicing\Packages\$0~31bf3856ad364e35~*"
FindClose $R0
${If} ${Errors}
Push 1
${Else}
Push 0
${EndIf}
FunctionEnd
!macro SPHandler kbid pkg title
Function Needs${kbid}
!if "${kbid}" == "VistaSP1"
; Special case: Server 2008 is already SP1, but doesn't have a VistaSP1 package we can detect.
${If} ${IsServerOS}
Push 0
Return
${EndIf}
!endif
Push ${pkg}
Call NeedsPackage
FunctionEnd
Function Download${kbid}
StrCpy $Patch.Key "${kbid}"
StrCpy $Patch.File "${kbid}.exe"
StrCpy $Patch.Title "${title}"
${If} ${NeedsPatch} ${kbid}
Call -PatchHandler
${EndIf}
FunctionEnd
Function Install${kbid}
${If} ${NeedsPatch} ${kbid}
Call Download${kbid}
!insertmacro InstallSP "${title}" "${kbid}.exe"
${EndIf}
FunctionEnd
!macroend
!macro MSUHandler kbid title
Function Needs${kbid}
Push Package_for_${kbid}
Call NeedsPackage
FunctionEnd
Function Download${kbid}
${If} ${NeedsPatch} ${kbid}
Call GetArch
Pop $0
ReadINIStr $1 $PLUGINSDIR\Patches.ini "${kbid}" $0
ReadINIStr $2 $PLUGINSDIR\Patches.ini "${kbid}" Prefix
ReadINIStr $3 $PLUGINSDIR\Patches.ini "${kbid}" "$0-sha256"
!insertmacro DownloadMSU "${kbid}" "${title}" "$2$1" "$3"
${EndIf}
FunctionEnd
Function Install${kbid}
${If} ${NeedsPatch} ${kbid}
Call Download${kbid}
!insertmacro InstallMSU "${kbid}" "${title}"
${EndIf}
FunctionEnd
!macroend
; Service Packs
!insertmacro SPHandler "VistaSP1" "VistaSP1-KB936330" "Windows Vista $(SP) 1"
!insertmacro SPHandler "VistaSP2" "VistaSP2-KB948465" "Windows Vista $(SP) 2"
!insertmacro SPHandler "Win7SP1" "Windows7SP1-KB976933" "Windows 7 $(SP) 1"
; Windows Vista post-SP2 update combination that fixes WU indefinitely checking for updates
!insertmacro MSUHandler "KB3205638" "$(SecUpd) for Windows Vista"
!insertmacro MSUHandler "KB4012583" "$(SecUpd) for Windows Vista"
!insertmacro MSUHandler "KB4015195" "$(SecUpd) for Windows Vista"
!insertmacro MSUHandler "KB4015380" "$(SecUpd) for Windows Vista"
; Internet Explorer 9 for Windows Vista
!insertmacro MSUHandler "KB971512" "$(Update) for Windows Vista"
!insertmacro MSUHandler "KB2117917" "$(PUS) for Windows Vista"
!insertmacro NeedsFileVersionHandler "IE9" "$WINDIR\system32\mshtml.dll" "9.0.8112.16421"
!insertmacro PatchHandler "IE9" "$(IE) 9 for Windows Vista" ${PATCH_FLAGS_OTHER} "/passive /norestart /update-no /closeprograms"
; Windows Vista Servicing Stack Update
!insertmacro MSUHandler "KB4493730" "2019-04 $(SSU) for Windows $(SRV) 2008"
; Hyper-V Update for Windows Server 2008
!insertmacro MSUHandler "KB950050" "Hyper-V $(Update) for Windows $(SRV) 2008"
; Only check/apply KB950050 if the Hyper-V role is present on 2008 SP1
; This update is integrated in SP2
Function NeedsHyperV2008Update
${If} ${IsWinVista}
${AndIf} ${IsServerOS}
${AndIf} ${AtMostServicePack} 1
; Get version of Hyper-V boot driver.
${GetFileVersion} "$WINDIR\system32\drivers\hvboot.sys" $0
${VersionCompare} $0 "6.0.6001.18016" $1
${If} $1 == 2 ; Less than
Push 1
${Else}
Push 0
${EndIf}
${Else}
Push 0
${EndIf}
FunctionEnd
; Windows 7 Convenience Rollup Update
!insertmacro MSUHandler "KB3020369" "2015-04 $(SSU) for Windows 7"
!insertmacro MSUHandler "KB3125574" "$(CRU) for Windows 7"
; Windows 7 Servicing Stack Update
!insertmacro MSUHandler "KB3138612" "2016-03 $(SSU) for Windows 7"
!insertmacro MSUHandler "KB4474419" "$(SHA2) for Windows 7"
!insertmacro MSUHandler "KB4490628" "2019-03 $(SSU) for Windows 7"
; Windows Home Server 2011 Update Rollup 4
!insertmacro MSUHandler "KB2757011" "$(SectionWHS2011U4)"
; Windows 8 Servicing Stack
!insertmacro MSUHandler "KB4598297" "2021-01 $(SSU) for Windows $(SRV) 2012"
; Windows 8.1 Servicing Stack
!insertmacro MSUHandler "KB3021910" "2015-04 $(SSU) for Windows 8.1"
; Weird prerequisite to Update 1 that fixes the main KB2919355 update failing to install
Function NeedsClearCompressionFlag
Call NeedsKB2919355
FunctionEnd
!insertmacro PatchHandler "ClearCompressionFlag" "Windows 8.1 $(Update) 1 $(PrepTool)" ${PATCH_FLAGS_OTHER} ""
; Windows 8.1 Update 1
!insertmacro MSUHandler "KB2919355" "Windows 8.1 $(Update) 1"
!insertmacro MSUHandler "KB2932046" "Windows 8.1 $(Update) 1"
!insertmacro MSUHandler "KB2959977" "Windows 8.1 $(Update) 1"
!insertmacro MSUHandler "KB2937592" "Windows 8.1 $(Update) 1"
!insertmacro MSUHandler "KB2934018" "Windows 8.1 $(Update) 1"
; Windows 8.1 Update 3
; TODO
; !insertmacro MSUHandler "KB2934018" "Windows 8.1 $(Update) 3"
Function NeedsVistaPostSP2
${If} ${NeedsPatch} KB3205638
${OrIf} ${NeedsPatch} KB4012583
${OrIf} ${NeedsPatch} KB4015195
${OrIf} ${NeedsPatch} KB4015380
Push 1
${Else}
Push 0
${EndIf}
FunctionEnd
Function NeedsVistaESU
Call NeedsKB4493730
FunctionEnd
Function NeedsWin7CRU
; Not released for Itanium. There are no superseding updates, but we assume the user might have
; already installed the rolled-up updates manually.
${If} ${NeedsPatch} KB2919355
${AndIf} ${NeedsPatch} Win7PostSP1
${AndIfNot} ${IsNativeIA64}
Push 1
${Else}
Push 0
${EndIf}
FunctionEnd
Function NeedsWin7PostSP1
${If} ${NeedsPatch} KB3138612
${OrIf} ${NeedsPatch} KB4474419
${OrIf} ${NeedsPatch} KB4490628
Push 1
${Else}
Push 0
${EndIf}
FunctionEnd
Function NeedsWin81Update1
${If} ${NeedsPatch} KB2919355
${OrIf} ${NeedsPatch} KB2932046
${OrIf} ${NeedsPatch} KB2937592
${OrIf} ${NeedsPatch} KB2934018
Push 1
${Else}
Push 0
${EndIf}
FunctionEnd
; TODO
; Function NeedsWin81Update3
; Call GetArch
; Pop $0
; ${If} $0 == "arm"
; ${AndIf} ${NeedsPatch} KB2934018
; Push 1
; ${Else}
; Push 0
; ${EndIf}
; FunctionEnd
================================================
FILE: setup/DownloadWUA.nsh
================================================
Function DetermineWUAVersion
; WUA refuses to install on 2000 Datacenter Server. Maybe we can hack around this in future.
${If} ${IsWin2000}
${AndIf} ${IsDatacenter}
StrCpy $0 ""
Return
${EndIf}
GetWinVer $1 Major
GetWinVer $2 Minor
GetWinVer $3 ServicePack
; Handle scenarios where the SP will be updated by the time we install WUA.
${If} "$1.$2" == "5.1"
${If} ${SectionIsSelected} ${XPSP3}
${OrIf} ${SectionIsSelected} ${XPESP3}
StrCpy $3 "3"
${EndIf}
${ElseIf} "$1.$2" == "5.2"
${If} ${SectionIsSelected} ${2003SP2}
StrCpy $3 "2"
${EndIf}
${EndIf}
StrCpy $1 "$1.$2.$3"
; Hardcoded special case for XP Home/Embedded SP3, because the WUA 7.6.7600.256 setup SFX is seriously broken on it,
; potentially causing an unbootable Windows install due to it entering an infinite loop of creating folders in the
; root of C:.
${If} $1 == "5.1.3"
${If} ${IsHomeEdition}
${OrIf} ${IsEmbedded}
StrCpy $1 "$1-home"
${EndIf}
${EndIf}
StrCpy $0 ""
ReadINIStr $2 $PLUGINSDIR\Patches.ini WUA $1
${If} $2 == ""
Return
${EndIf}
${GetFileVersion} "$SYSDIR\wuaueng.dll" $1
${VersionCompare} $1 $2 $3
${If} $3 == 2
Call GetArch
Pop $0
ReadINIStr $3 $PLUGINSDIR\Patches.ini WUA "$2-$0-sha256"
ReadINIStr $0 $PLUGINSDIR\Patches.ini WUA "$2-$0"
${If} $0 == ""
Return
${EndIf}
ReadINIStr $1 $PLUGINSDIR\Patches.ini WUA Prefix
StrCpy $0 "$1$0"
${EndIf}
FunctionEnd
Function NeedsWUA
Call DetermineWUAVersion
${If} $0 == ""
Push 0
${Else}
Push 1
${EndIf}
FunctionEnd
Function DownloadWUA
Call DetermineWUAVersion
${If} $0 != ""
!insertmacro Download "$(WUA)" "$0" "WindowsUpdateAgent.exe" "$3" 1
${EndIf}
FunctionEnd
Function InstallWUA
Call DetermineWUAVersion
${If} $0 != ""
Call DownloadWUA
!insertmacro Install "$(WUA)" "WindowsUpdateAgent.exe" "/quiet /norestart"
${EndIf}
FunctionEnd
================================================
FILE: setup/Makefile
================================================
DEBUG ?= 1
SIGN ?= 0
CI ?= 0
MAKENSIS = makensis
NSISFLAGS = -DDEBUG=$(DEBUG) -DSIGN=$(SIGN) -DCI=$(CI)
FILES = resource.c
RCFILES = resource.rc
BIN = obj/resource.dll
include ../build/shared.mk
CFLAGS += -mdll
LDFLAGS += -Wl,-e_DllMain
all:: internal-all nsisplugin setup activex
nt4: internal-all nsisplugin setup-nt4
nsisplugin:
ifeq ($(MAKELEVEL),0)
+$(MAKE) -C ../nsisplugin
endif
setup: internal-all nsisplugin
$(MAKENSIS) $(NSISFLAGS) -DNT4=0 setup.nsi
setup-nt4: internal-all nsisplugin
$(MAKENSIS) $(NSISFLAGS) -DNT4=1 setup-nt4.nsi
activex: setup
ifeq ($(SIGN),1)
cp LegacyUpdate-*.exe codebase/setup.exe
cd codebase && makecab.exe /f lucontrl.ddf
../build/sign.sh codebase/lucontrl.cab
rm codebase/setup.exe codebase/setup.rpt
endif
clean::
rm -rf obj
rm -f LegacyUpdate-*.exe codebase/{lucontrl.cab,setup.exe,setup.rpt}
ifeq ($(MAKELEVEL),0)
+$(MAKE) -C ../nsisplugin clean
endif
test:
+$(MAKE)
sudo.exe LegacyUpdate-*.exe
.PHONY: all internal-all nt4 nsisplugin setup setup-nt4 activex clean
================================================
FILE: setup/NT4USB.nsh
================================================
; TODO: Check whether machine will support the USB stack, via LegacyUpdateNSIS::IsMultiCPU
Function InstallNT4USB
Call InstallNT4USBStack
Call InstallNT4USBHID
Call InstallNT4USBEdgeport
Call InstallNT4USBMassStorage
Call InstallNT4USBImaging
SetOutPath "${RUNONCEDIR}"
FunctionEnd
Function InstallNT4USBStack
${DetailPrint} "$(Installing)Inside Out Networks USB Stack..."
; Files
SetOutPath "$PROGRAMFILES\Inside Out Networks\Inside Out Networks' USB Peripheral Drivers"
File "patches\nt4\usb\ReadMe.txt"
SetOutPath "$WINDIR"
File "patches\nt4\usb\ionlicense.txt"
SetOutPath "$WINDIR\system32"
; File "patches\nt4\usb\awusbcfg.exe"
File "patches\nt4\usb\UsbTray.exe"
File "patches\nt4\usb\ionusb.exe"
File "patches\nt4\usb\UsbShare.dll"
SetOutPath "$WINDIR\system32\drivers"
File "patches\nt4\usb\usbd.sys"
File "patches\nt4\usb\usbhub.sys"
File "patches\nt4\usb\vusbd.sys"
; Startup shortcut
CreateShortcut "$SMSTARTUP\USB Status Utility.lnk" "$WINDIR\system32\UsbTray.exe"
; Register services
SetOutPath "$PLUGINSDIR"
File "patches\nt4\usb\ionsvc.dll"
${DetailPrint} "$(Installing)USBD service..."
System::Call 'ionsvc::CreateUSBDSrvc(i 0, i 0, s "$WINDIR\system32\usbd.sys") i .r0'
${If} $0 != 0
SetErrorLevel 1
Abort
${EndIf}
${DetailPrint} "$(Installing)VUSBD service..."
System::Call 'ionsvc::CreateVUSBDSrvc(i 0, i 0, s "$WINDIR\system32\usbd.sys") i .r0'
${If} $0 != 0
SetErrorLevel 1
Abort
${EndIf}
${DetailPrint} "$(Installing)USBHUB service..."
System::Call 'ionsvc::CreateUSBHUBSrvc(i 0, i 0, s "$WINDIR\system32\usbd.sys") i .r0'
${If} $0 != 0
SetErrorLevel 1
Abort
${EndIf}
${DetailPrint} "$(Installing)IONUSB service..."
System::Call 'ionsvc::CreateIONUSBSrvc(i 0, i 0, s "$WINDIR\system32\ionusb.exe") i .r0'
${If} $0 != 0
SetErrorLevel 1
Abort
${EndIf}
FunctionEnd
; TODO: The rest of the files
; File "patches\nt4\usb\edgeport.exe"
; File "patches\nt4\usb\edgeser.sys"
; File "patches\nt4\usb\ionflash.exe"
; File "patches\nt4\usb\usbhid.sys"
; File "patches\nt4\usb\usbms.sys"
; File "patches\nt4\usb\UsbMsDll.dll"
; File "patches\nt4\usb\usbprint.sys"
; File "patches\nt4\usb\usbrm.sys"
; File "patches\nt4\usb\vcusbnt4.sys"
; File "patches\nt4\usb\vicam_32.dll"
Function InstallNT4USBHID
${DetailPrint} "$(Installing)Inside Out Networks USB HID Driver..."
FunctionEnd
Function InstallNT4USBMassStorage
${DetailPrint} "$(Installing)Inside Out Networks USB Mass Storage Driver..."
FunctionEnd
Function InstallNT4USBImaging
${DetailPrint} "$(Installing)Inside Out Networks USB Imaging Driver..."
FunctionEnd
Function InstallNT4USBEdgeport
${DetailPrint} "$(Installing)Inside Out Networks USB to Serial (Edgeport) Drivers..."
SetOutPath "$WINDIR\inf"
File "patches\nt4\usb\rp_mdm.inf"
FunctionEnd
================================================
FILE: setup/PatchInstall.nsh
================================================
Function GetArch
Var /GLOBAL Arch
${If} $Arch == ""
${If} ${IsNativeIA32}
StrCpy $Arch "x86"
${ElseIf} ${IsNativeAMD64}
StrCpy $Arch "x64"
${ElseIf} ${IsNativeIA64}
StrCpy $Arch "ia64"
${Else}
StrCpy $Arch ""
${EndIf}
${EndIf}
Push $Arch
FunctionEnd
!macro _NeedsPatch _a _b _t _f
!insertmacro _LOGICLIB_TEMP
Call Needs${_b}
Pop $_LOGICLIB_TEMP
StrCmp $_LOGICLIB_TEMP 1 `${_t}` `${_f}`
!macroend
!define NeedsPatch `"" NeedsPatch`
Var /GLOBAL Download.ID
Function DownloadRequest
; TODO: This is broken on XP for some reason
; Var /GLOBAL Download.UserAgent
; ${If} $Download.UserAgent == ""
; GetWinVer $R8 Major
; GetWinVer $R9 Minor
; StrCpy $Download.UserAgent "Mozilla/4.0 (${NAME} ${VERSION}; Windows NT $R8.$R9)"
; ${EndIf}
; /HEADER "User-Agent: $Download.UserAgent"
NSxfer::Request \
/TIMEOUTCONNECT 60000 \
/TIMEOUTRECONNECT 60000 \
/OPTCONNECTTIMEOUT 60000 \
/OPTRECEIVETIMEOUT 60000 \
/OPTSENDTIMEOUT 60000 \
/URL "$R0" \
/LOCAL "$R1" \
/INTERNETFLAGS ${INTERNET_FLAG_RELOAD}|${INTERNET_FLAG_NO_CACHE_WRITE}|${INTERNET_FLAG_KEEP_CONNECTION}|${INTERNET_FLAG_NO_COOKIES}|${INTERNET_FLAG_NO_UI} \
/SECURITYFLAGS ${SECURITY_FLAG_STRENGTH_STRONG} \
$R2 \
/END
Pop $Download.ID
FunctionEnd
!macro DownloadRequest url local extra
StrCpy $R0 "${url}"
StrCpy $R1 "${local}"
StrCpy $R2 "${extra}"
Call DownloadRequest
!macroend
Function DownloadWaitSilent
NSxfer::Wait /ID $Download.ID /MODE SILENT /END
NSxfer::Query /ID $Download.ID /ERRORCODE /ERRORTEXT /END
FunctionEnd
Function DownloadWait
NSxfer::Wait /ID $Download.ID /MODE PAGE \
/STATUSTEXT "$(DownloadStatusSingle)" "$(DownloadStatusMulti)" \
/ABORT "$(^Name)" "$(MsgBoxDownloadAbort)" \
/END
NSxfer::Query /ID $Download.ID /ERRORCODE /ERRORTEXT /END
FunctionEnd
Var /GLOBAL Download.Name
Var /GLOBAL Download.URL
Var /GLOBAL Download.Filename
Var /GLOBAL Download.Hash
Var /GLOBAL Download.Verbose
Function Download
${If} ${FileExists} "${RUNONCEDIR}\$Download.Filename"
StrCpy $0 "${RUNONCEDIR}\$Download.Filename"
Return
${EndIf}
${If} ${FileExists} "$EXEDIR\$Download.Filename"
CopyFiles /SILENT "$EXEDIR\$Download.Filename" "${RUNONCEDIR}\$Download.Filename"
${Else}
${If} $Download.Verbose == 1
${OrIf} ${IsVerbose}
${DetailPrint} "$(Downloading)$Download.Name..."
${EndIf}
${If} ${IsVerbose}
${VerbosePrint} "From: $Download.URL"
${VerbosePrint} "To: ${RUNONCEDIR}\$Download.Filename"
${EndIf}
!insertmacro DownloadRequest "$Download.URL" "${RUNONCEDIR}\$Download.Filename" ""
${If} $Download.Verbose == 1
${OrIf} ${IsVerbose}
Call DownloadWait
${Else}
Call DownloadWaitSilent
${EndIf}
Pop $1
Pop $0
${If} $1 < 200
${OrIf} $1 >= 300
${If} $1 == ${ERROR_INTERNET_NAME_NOT_RESOLVED}
StrCpy $2 "$Download.Name"
MessageBox MB_USERICON "$(MsgBoxDownloadDNSError)" /SD IDOK
${ElseIf} $1 != ${ERROR_INTERNET_OPERATION_CANCELLED}
StrCpy $2 "$Download.Name"
MessageBox MB_USERICON "$(MsgBoxDownloadFailed)" /SD IDOK
${EndIf}
Delete /REBOOTOK "${RUNONCEDIR}\$Download.Filename"
SetErrorLevel 1
Abort
${EndIf}
${EndIf}
StrCpy $0 "${RUNONCEDIR}\$Download.Filename"
; Verify downloaded file
${If} $Download.Hash != ""
${DetailPrint} "$(Verifying)$Download.Name..."
LegacyUpdateNSIS::VerifyFileHash "$0" "$Download.Hash"
Pop $R0
Pop $R1
${If} ${IsVerbose}
${OrIf} $R0 != 1
${DetailPrint} "Expected: $Download.Hash"
${DetailPrint} "Actual: $R1"
${EndIf}
${If} $R0 != 1
StrCpy $2 "$Download.Name"
MessageBox MB_USERICON "$(MsgBoxHashFailed)" /SD IDOK
Delete /REBOOTOK "$0"
SetErrorLevel 1
Abort
${EndIf}
${EndIf}
FunctionEnd
!macro Download name url filename hash verbose
StrCpy $Download.Name "${name}"
StrCpy $Download.URL "${url}"
StrCpy $Download.Filename "${filename}"
StrCpy $Download.Hash "${hash}"
StrCpy $Download.Verbose ${verbose}
Call Download
!macroend
Var /GLOBAL Exec.Command
Var /GLOBAL Exec.Patch
Var /GLOBAL Exec.Name
Function ExecWithErrorHandling
${VerbosePrint} "$(^Exec)$Exec.Command"
LegacyUpdateNSIS::ExecToLog `$Exec.Command`
Pop $R0
${VerbosePrint} "$(ExitCode)$R0"
${If} $R0 == ${ERROR_SUCCESS_REBOOT_REQUIRED}
${VerbosePrint} "$(RestartRequired)"
SetRebootFlag true
${ElseIf} $R0 == ${ERROR_INSTALL_USEREXIT}
SetErrorLevel ${ERROR_INSTALL_USEREXIT}
Abort
${ElseIf} $R0 == ${WU_S_ALREADY_INSTALLED}
${DetailPrint} "$(AlreadyInstalled)"
${ElseIf} $R0 == ${WU_E_NOT_APPLICABLE}
${DetailPrint} "$(NotApplicable)"
${ElseIf} $R0 != 0
StrCpy $0 $R0
LegacyUpdateNSIS::MessageForHresult $R0
Pop $1
${DetailPrint} "$1 ($0)"
StrCpy $2 "$Exec.Name"
MessageBox MB_USERICON "$(MsgBoxInstallFailed)" /SD IDOK
SetErrorLevel $R0
Abort
${EndIf}
FunctionEnd
!macro ExecWithErrorHandling name command
StrCpy $Exec.Command '${command}'
StrCpy $Exec.Name '${name}'
Call ExecWithErrorHandling
!macroend
!macro Install name filename args
${DetailPrint} "$(Installing)${name}..."
!insertmacro ExecWithErrorHandling '${name}' '"$0" ${args}'
!macroend
Function GetUpdateLanguage
Var /GLOBAL UpdateLanguage
${If} $UpdateLanguage == ""
ReadRegStr $UpdateLanguage HKLM "${REGPATH_HARDWARE_SYSTEM}" "Identifier"
${If} $UpdateLanguage == "NEC PC-98"
StrCpy $UpdateLanguage "NEC98"
${Else}
ReadRegStr $UpdateLanguage HKLM "${REGPATH_CONTROL_LANGUAGE}" "InstallLanguage"
ReadINIStr $UpdateLanguage $PLUGINSDIR\Patches.ini Language $UpdateLanguage
${EndIf}
${EndIf}
Push $UpdateLanguage
FunctionEnd
!macro NeedsSPHandler name os sp
Function Needs${name}
${If} ${Is${os}}
${AndIf} ${AtMostServicePack} ${sp}
Push 1
${Else}
Push 0
${EndIf}
FunctionEnd
!macroend
!macro NeedsFileVersionHandler name file version
Function Needs${name}
${DisableX64FSRedirection}
${GetFileVersion} "${file}" $0
${EnableX64FSRedirection}
${VersionCompare} $0 ${version} $1
${If} $1 == 2 ; Less than
Push 1
${Else}
Push 0
${EndIf}
FunctionEnd
!macroend
!if ${NT4} == 1
Var /GLOBAL SPCleanup
!endif
; TODO
; Function SkipSPUninstall
; !if ${NT4} == 1
; Push $SPCleanup
; !else
; Push 0
; !endif
; FunctionEnd
Var /GLOBAL Patch.Key
Var /GLOBAL Patch.File
Var /GLOBAL Patch.Title
Var /GLOBAL Patch.Params
!define PATCH_FLAGS_OTHER 0
!define PATCH_FLAGS_NT4 1
!define PATCH_FLAGS_SHORT 2
!define PATCH_FLAGS_LONG 3
!macro -PatchHandlerFlags params cleanup
!if ${DEBUG} == 1
; To make testing go faster
StrCpy $Patch.Params "${params} ${cleanup}"
!else
; LUNT will add a SkipSPUninstall setting. For now, we ignore the cleanup param.
StrCpy $Patch.Params "${params}"
!endif
!macroend
Function -PatchHandler
Call GetUpdateLanguage
Call GetArch
Pop $1
Pop $0
StrCpy $2 "$0-$1"
ClearErrors
ReadINIStr $0 $PLUGINSDIR\Patches.ini "$Patch.Key" "$2"
${If} ${Errors}
; Language neutral
StrCpy $2 "$1"
ClearErrors
ReadINIStr $0 $PLUGINSDIR\Patches.ini "$Patch.Key" "$2"
${If} ${Errors}
StrCpy $0 "$Patch.Title"
MessageBox MB_USERICON "$(MsgBoxPatchNotFound)" /SD IDOK
SetErrorLevel 1
Abort
${EndIf}
${EndIf}
ReadINIStr $1 $PLUGINSDIR\Patches.ini "$Patch.Key" Prefix
ReadINIStr $3 $PLUGINSDIR\Patches.ini "$Patch.Key" "$2-sha256"
!insertmacro Download "$Patch.Title" "$1$0" "$Patch.File" "$3" 1
FunctionEnd
Function InstallPatch
!insertmacro ExecWithErrorHandling "$Patch.Title" '"$0" $Patch.Params'
FunctionEnd
!macro PatchHandler kbid title type params
Function Download${kbid}
StrCpy $Patch.Key "${kbid}"
StrCpy $Patch.File "${kbid}.exe"
StrCpy $Patch.Title "${title}"
${If} ${NeedsPatch} ${kbid}
Call -PatchHandler
${EndIf}
FunctionEnd
Function Install${kbid}
${IfNot} ${NeedsPatch} ${kbid}
Return
${EndIf}
Call Download${kbid}
; TODO: Call SkipSPUninstall
!if ${type} == ${PATCH_FLAGS_OTHER}
StrCpy $Patch.Params ""
!endif
!if ${type} == ${PATCH_FLAGS_NT4}
!insertmacro -PatchHandlerFlags "-z" "-n -o"
!endif
!if ${type} == ${PATCH_FLAGS_SHORT}
!insertmacro -PatchHandlerFlags "-u -z" "-n -o"
!endif
!if ${type} == ${PATCH_FLAGS_LONG}
!insertmacro -PatchHandlerFlags "/passive /norestart" "/n /o"
!endif
StrCpy $Patch.Params "$Patch.Params ${params}"
Call InstallPatch
FunctionEnd
!macroend
!macro ExtractCab name filename path
${DetailPrint} "$(Extracting)$Exec.Name..."
${IfNot} ${IsVerbose}
SetDetailsPrint none
${EndIf}
CreateDirectory "$PLUGINSDIR\$Exec.Patch"
StrCpy $Exec.Name "${name}"
StrCpy $Exec.Command '"$WINDIR\system32\expand.exe" -F:* "${filename}" "${path}"'
Call ExecWithErrorHandling
${IfNot} ${IsVerbose}
SetDetailsPrint lastused
${EndIf}
!macroend
!macro InstallSP name filename
; SPInstall.exe /norestart seems to be broken. We let it do a delayed restart, then cancel it.
${DetailPrint} "$(Installing)${name}..."
!insertmacro ExecWithErrorHandling '${name}' '"$0" /unattend /nodialog /warnrestart:600'
; If we successfully abort a shutdown, we'll get exit code 0, so we know a reboot is required.
LegacyUpdateNSIS::Exec '"$WINDIR\system32\shutdown.exe" /a'
Pop $0
${If} $0 == 0
SetRebootFlag true
${EndIf}
!macroend
!macro DownloadMSU kbid name url sha256
!insertmacro Download '${name} (${kbid})' '${url}' '${kbid}.msu' '${sha256}' 1
!macroend
Function InstallMSU
!insertmacro ExtractCab '$Exec.Name' "$0" "$PLUGINSDIR\$Exec.Patch"
CreateDirectory "$PLUGINSDIR\$Exec.Patch\Temp"
; Set %ConfigSetRoot% to where the files are stored. Lenovo Windows 7 RTM images have been found to globally set this
; to C:\Windows\ConfigSetRoot, which doesn't exist. When Dism reads the unattend xml, it tries to look for the cab
; there, and fails.
System::Call '${SetEnvironmentVariable}("ConfigSetRoot", "$PLUGINSDIR\$Exec.Patch")'
${DetailPrint} "$(Installing)$Exec.Name..."
${DisableX64FSRedirection}
FindFirst $0 $1 "$PLUGINSDIR\$Exec.Patch\*.xml"
${Do}
${If} $1 == ""
FindClose $R0
${Break}
${EndIf}
; We prefer Dism, but need to fall back to Pkgmgr for Vista.
${If} ${IsWinVista}
StrCpy $Exec.Command '"$WINDIR\system32\pkgmgr.exe" \
/n:"$PLUGINSDIR\$Exec.Patch\$1" \
/s:"$PLUGINSDIR\$Exec.Patch\Temp" \
/quiet /norestart'
${Else}
StrCpy $Exec.Command '"$WINDIR\system32\dism.exe" \
/Online \
/Apply-Unattend:"$PLUGINSDIR\$Exec.Patch\$1" \
/ScratchDir:"$PLUGINSDIR\$Exec.Patch\Temp" \
/LogPath:"$TEMP\LegacyUpdate-Dism.log" \
/Quiet /NoRestart'
${EndIf}
Call ExecWithErrorHandling
FindNext $0 $1
${Loop}
${EnableX64FSRedirection}
FunctionEnd
!macro InstallMSU kbid name
StrCpy $Exec.Patch '${kbid}'
StrCpy $Exec.Name '${name} (${kbid})'
Call InstallMSU
!macroend
================================================
FILE: setup/Patches.ini
================================================
[Language]
0401=ARA
0403=CAT
0404=CHT
0804=CHS
0405=CSY
0406=DAN
0407=DEU
0408=ELL
0409=ENU
0c0a=ESN
0425=ETI
040b=FIN
040c=FRA
040d=HEB
040e=HUN
0410=ITA
0411=JPN
0412=KOR
0427=LTH
0426=LVI
0413=NLD
0414=NOR
0415=PLK
0416=PTB
0816=PTG
0418=ROM
0419=RUS
041a=HRV
041b=SKY
041d=SVE
041e=THA
041f=TRK
0424=SLV
042a=VIT
042d=EUQ
0c04=CHH
; Windows 2000
[W2KSP4]
Prefix=http://download.windowsupdate.com/msdownload/update/v3-19990518/cabpool/
ARA-x86=w2ksp4_ar_d2a46163d29f14829f230729e2c0821.exe
ARA-x86-sha256=61de2d20706d80de285fc241a4d82fe2d7849926b3f0f1b483b2065dbaf816f2
CHH-x86=w2ksp4_hk_89b5425007c388c1c146756557915ab.exe
CHH-x86-sha256=51df3e5cac2803d940af803cbd4aee523390646898f3f8af933a3b188db85b0e
CHS-x86=w2ksp4_cn_a6d8fab4fe598cf1d5c3cf257b11fc8.exe
CHS-x86-sha256=57550fe61f5ea1d151216ad7bc5f6267edc63887b28a93318b3e60a04071eb95
CHT-x86=w2ksp4_tw_baf16f1aaae8be095127f4a46dded69.exe
CHT-x86-sha256=a4cdaa96289d9243050aba1ee69c304daf05dbcb1a52a4a523437ed565fedac7
CSY-x86=w2ksp4_cs_d055279f80e684debdac3f4a230ab2c.exe
CSY-x86-sha256=f72a915d72160c413e6c52442bd90a097d7f09a0740a5054c7a771f146a769ee
DAN-x86=w2ksp4_da_e9afc8657e31b34730ea2cda85ece36.exe
DAN-x86-sha256=a91211b82257a457cb5993c704409ba6f74d1dad0bfcc552824a228ff7539dc6
DEU-x86=w2ksp4_de_00d4912b4703c77c46cf53a8a8f2027.exe
DEU-x86-sha256=b0648871eaf9025dfe263d4cd1a8afcc7c279d5663c8044e9c5d7d39261a40c7
ELL-x86=w2ksp4_el_55eeec8b3b303e61cb0ddab4d943cd1.exe
ELL-x86-sha256=01f9394865b8f67da536ff2ea326290107bcf61fc4e73c6d522000782e8cec16
ENU-x86=w2ksp4_en_7f12d2da3d7c5b6a62ec4fde9a4b1e6.exe
ENU-x86-sha256=167bb78d4adc957cc39fb4902517e1f32b1e62092353be5f8fb9ee647642de7e
ESN-x86=w2ksp4_es_51bae94c83adcf9f0ad3155bcf3ddfc.exe
ESN-x86-sha256=aa96ffdfbe5a3c19cc4f0c93b1bfaadaefe49ac108492407a4be26ca0bbee25d
FIN-x86=w2ksp4_fi_794e2bba5a5286287dccf7943055e46.exe
FIN-x86-sha256=3905fd7abb14b57e9eb2e302ccf61b8fd19f54522a0eb88e533c9f56bdec354f
FRA-x86=w2ksp4_fr_4556797dfc88fdd4be13d638bcfb655.exe
FRA-x86-sha256=ec9c1ad3c90076d420f1f5424e328cdb5f7c689226544b0587d24ab1f1664a3f
HEB-x86=w2ksp4_he_b8e8519d7ae067f49ce742b59e8bcce.exe
HEB-x86-sha256=6be441290aaea01232fb9a27c6f73f3324f5bfc03b9676a8cbade7873fe1cfd8
HUN-x86=w2ksp4_hu_1de3d254582472c714af315c85bf2b3.exe
HUN-x86-sha256=3e4436b8cfcc92da30ef19c260e54db6920d17e389a1bbf27ecb777427449a45
ITA-x86=w2ksp4_it_6395c3848397fa6cf05e0c3d1923205.exe
ITA-x86-sha256=4fcaefd8de48c335e399980f892fc362d6e52a572e4eac4a24cf9ef009820778
JPN-x86=w2ksp4_ja_beb10c6f96ac4bb93f6e192b419a50f.exe
JPN-x86-sha256=4cb8034dd6af83285d36d5b754b87bbfc3986ad1f7566909ef5580dec90c77b0
KOR-x86=w2ksp4_ko_8bd7a0eedfaf1fb30439abdad43c347.exe
KOR-x86-sha256=1ded8137c7c7beab2b54d4fe42f856ce865551157d31d926dab3d19aa31401b9
NLD-x86=w2ksp4_nl_07596ad911493b966a18b6626e4a1c4.exe
NLD-x86-sha256=538d93c8e511f5c2d5ff9e7099db7b051629429f87ad8830f6680fdd8a60dcad
NOR-x86=w2ksp4_no_64602c5f513d7244dd5790c6a11577e.exe
NOR-x86-sha256=070a646080f7ffeaefdde1deeeaa0cf4460f53e12dc60c9fe3ca95f282b843d5
PLK-x86=w2ksp4_pl_5248f4f8262d599079f5ee246cafc28.exe
PLK-x86-sha256=67a8e6dcb37394942128b4b0adefc357e00af50aa02204bd250d8ae6dc8a632f
PTB-x86=w2ksp4_br_a90a49821bf9b5e37810e4c453a5128.exe
PTB-x86-sha256=e0e2dc33012cde1ee31d2741548e87f05e6a703b2f408632bdfaa08fdc625870
PTG-x86=w2ksp4_pt_cdf5d5ecd163862ff6f641b0a4d4168.exe
PTG-x86-sha256=c9863c55a76d281c42970a98369947d8be9b114b0f413226ac832bf7b77df28b
RUS-x86=w2ksp4_ru_980742b1376cf5614a9e10705952dcd.exe
RUS-x86-sha256=bb643c5b0eb8ad7acac2c50118fe1559e257292554b8261a258b7a8ca122d499
SVE-x86=w2ksp4_sv_c46814adb550c5184297a290acd9d25.exe
SVE-x86-sha256=6d8df02f8505e48d70070450d61d1b8ce868ead8db95f29e7d5cedd56f99091c
TRK-x86=w2ksp4_tr_3d5c002a300e271049b18acdc569d83.exe
TRK-x86-sha256=ef6440e780bd8b37724d5dacdafb51333f7455e6346998682facd068a4c31a7d
NEC98-x86=w2ksp4_ja_7cf59dd6babe7afcf1d7489b40941a8.exe
NEC98-x86-sha256=ca03755cd266b885cfc964f7de5370a65c2726f3ff6165b3b11b25fd1f44b3b1
[W2KUR1]
Prefix=http://download.windowsupdate.com/msdownload/update/v3-19990518/cabpool/
ARA-x86=windows2000-kb891861-v2-x86-ara_73c7fa3d013476d3a2b8ff8569e3bc82f1ad1582.exe
ARA-x86-sha256=93b8e14e20a07b3cf781d5ccf2b1850a568f243116ce459cc1cf30bbddcb9ba4
CHH-x86=windows2000-kb891861-v2-x86-cht_4b7c5abb4e313f5cbd5f139ea7094145e2a80b5a.exe
CHH-x86-sha256=f76dc699682b8098d0756fa6da3b2b87ac967d8e573e3ef413697be91e51e8cc
CHS-x86=windows2000-kb891861-v2-x86-chs_fe99e12ef1944cc43ad2891797ac9a7698e194d9.exe
CHS-x86-sha256=2199076d04b3f229600ab5aeddeb64f699422cdcde904f68bb3b2f532f39030d
CHT-x86=windows2000-kb891861-v2-x86-cht_4b7c5abb4e313f5cbd5f139ea7094145e2a80b5a.exe
CHT-x86-sha256=f76dc699682b8098d0756fa6da3b2b87ac967d8e573e3ef413697be91e51e8cc
CSY-x86=windows2000-kb891861-v2-x86-csy_a18b67cb73d57b03d9ae276097e33ae870acc77d.exe
CSY-x86-sha256=026ce759801ee991f88672effc2185323ea75aee6857beb0e5618d580496d16c
DAN-x86=windows2000-kb891861-v2-x86-dan_0b5521ef897e7859fefd1ceace978ba06a67caf6.exe
DAN-x86-sha256=8bd53e11a8969431d53dea44ebebd4b49ec33ea21cb406009662e9f0154ef8aa
DEU-x86=windows2000-kb891861-v2-x86-deu_e2c13be516127d3b1de17a60b9fadfb11862b86b.exe
DEU-x86-sha256=dca1493c8fab3ef59a5650534991eb1d7375e06a6cc321e21955243058e9d05f
ELL-x86=windows2000-kb891861-v2-x86-ell_e04a73c2761a323c0b266f766c5cc3e6f9389b76.exe
ELL-x86-sha256=3694af2b5e8f87a0e12c27add4286cf21c352c9463084f780329ad42d01ec243
ENU-x86=windows2000-kb891861-v2-x86-enu_f118bd276f4211929719961a2e929b620c1a2234.exe
ENU-x86-sha256=55e09d2a5a8390338a7bc1321844f1c3e716898245d5f843c8554a16dbd097c9
ESN-x86=windows2000-kb891861-v2-x86-esn_b9f1a26cc909adca730ed20344cf712480c9877e.exe
ESN-x86-sha256=b6bc21196326433b8791481c23f089b07b13556e573d0b16b0f4320e90649d96
FIN-x86=windows2000-kb891861-v2-x86-fin_318d6b6a1ac04e9c9c033d53d7fcd47748e7f75f.exe
FIN-x86-sha256=5cc26e029b6b62cb2dcbfc5193dd8f69454a913ed2dc39493db7e7a759b0cd11
FRA-x86=windows2000-kb891861-v2-x86-fra_8d036d92d4895bf23b0e9b714937b5b211b1d592.exe
FRA-x86-sha256=fd7c3685cae1b695ce6b723335998990472090c2ecd89394d9a767a1fe21697d
HEB-x86=windows2000-kb891861-v2-x86-heb_3f08f4037db77733e5de5e1cb89e5bedebb4d249.exe
HEB-x86-sha256=71473829b8f27b9123298e9bb918afd2d8718805c7cacaddfb3c3a21c01413f3
HUN-x86=windows2000-kb891861-v2-x86-hun_d94efec685c682825592e04130ea1b0bf3c4e532.exe
HUN-x86-sha256=28ccc4c207d149f2f7fbcafaf44582e746f0e66ad7de74be410d4f312d71f3df
ITA-x86=windows2000-kb891861-v2-x86-ita_aaf013cd7a046d6069c0250e8e7f0bf8582c3e31.exe
ITA-x86-sha256=65d1246df2f4f3e21203948cfbf4491ded95abe6f8fcae32369ce30cfa8277af
JPN-x86=windows2000-kb891861-v2-x86-jpn_d5fa54ab3547a38fae6260e28227a6fb0ed4a827.exe
JPN-x86-sha256=e824af4aec05a2ef10481ae83d7d1330bdb2dae596bc99172f4d544e06363795
KOR-x86=windows2000-kb891861-v2-x86-kor_10db79be10624535fb3926781db5a02efb2b5503.exe
KOR-x86-sha256=d54987fbadd52df10f93f23a20715d4801171f647349b9754e12365bbb71e9aa
NLD-x86=windows2000-kb891861-v2-x86-nld_33cbe9c7dedc85d22f6fc281aefef77b9d26ce6f.exe
NLD-x86-sha256=d6743083b1fbc06dc0365874cdeb945790cc492f15c8a878469adb32277c202c
NOR-x86=windows2000-kb891861-v2-x86-nor_6dce467272a1cb3375bc74bec901a581d55661e6.exe
NOR-x86-sha256=5bbc0261a1844368ecea9d6074a38a67ce2cf3324015bcf135b2a2c5d22be8ed
PLK-x86=windows2000-kb891861-v2-x86-plk_1cded665d65ea7614b7b33989efb81a4b91cf674.exe
PLK-x86-sha256=93a0a1d8bf77cb13a7b301d2c1203f3eeb568cb904e2ec51e969e4f8809905bc
PTB-x86=windows2000-kb891861-v2-x86-ptb_d1a5c2bf1c9393f64748bab275339d09f767a1d9.exe
PTB-x86-sha256=9003a81fc261b0b7bb1ad99645ee956f5ce504c2a228c2b887a3e54e8f29e647
PTG-x86=windows2000-kb891861-v2-x86-ptg_ad4fd8ab12ee20236a44cf3e550ee55a3e8019ec.exe
PTG-x86-sha256=da071d194b93068a915120ad0b5e02f8977f0f4eb75d967102ff54ce850cf40f
RUS-x86=windows2000-kb891861-v2-x86-rus_2d2b365faf8fc71be99122fa89b8eea97ae40abd.exe
RUS-x86-sha256=d531f30ac747686856d51eaa2fee1e0373d40f165a8637a75600d7339d33eaa8
SVE-x86=windows2000-kb891861-v2-x86-sve_e694a39661f9a6531c1b9367ed6fc9458ae536fb.exe
SVE-x86-sha256=cf8f87e0f938f499f93f2fdc72280ebd1fc45c6a12f51e019cacc146aad9b259
TRK-x86=windows2000-kb891861-v2-x86-trk_31ee7902955f771a63b8bd6165fa41119624ac23.exe
TRK-x86-sha256=42590ad2ccebf909bd7cfd34bc6ff03a7dd768cea75a9bc7f1933865e7aea7d4
NEC98-x86=windows2000-kb891861-v2-nec98-jpn_ca1372faeb77c66ded958bd3dc8e3344e1cd4260.exe
NEC98-x86-sha256=09cea1fa3d33932eecfb50d3a4ae3fa19d1031d810fa881df87814bc7308ad8a
[IE6]
Prefix=http://download.windowsupdate.com/msdownload/update/v3-19990518/cabpool/
ARA-x86=ie6sp1-wucab-ara_b1720a72becd05142cb4ccbb23205c76b51d29e2.cab
ARA-x86-sha256=00d97a076490ba149036947a8b7bdcdf0f3da0c9beeb27964111c96665516805
CHH-x86=ie6sp1-wucab-cht_1899bffb8ebf36c0a58686f04cc1d721c419792d.cab
CHH-x86-sha256=e97b1998b6018275d7689a1a40f2a0480bb6977f3bda4f4aa16ee98e2471a511
CHS-x86=ie6sp1-wucab-chs_6d93ab8525d3b6f775faf692caaa4c8267c8a22b.cab
CHS-x86-sha256=ebe63b68deed463ce93a5cbf396b23fcb4a34db4e88c55cfdf6e67661db4bc69
CHT-x86=ie6sp1-wucab-cht_1899bffb8ebf36c0a58686f04cc1d721c419792d.cab
CHT-x86-sha256=e97b1998b6018275d7689a1a40f2a0480bb6977f3bda4f4aa16ee98e2471a511
CSY-x86=ie6sp1-wucab-csy_2789a030bba2128fc90e0475e2530c300ed5defc.cab
CSY-x86-sha256=62b6399918816a72ac05bf3e169f9b206d42e3d9e7c86b35b9a09db05b88eabd
DAN-x86=ie6sp1-wucab-dan_0c178b2634a97a4879c172797b21a59e567d18e6.cab
DAN-x86-sha256=4a9b5c4afc04f70fa1533191f8f38672ddf4c956d89a8cacc4fdf97b717b9aa3
DEU-x86=ie6sp1-wucab-deu_2a13ac14e403ad4a1c6877fe478067e81ac20da8.cab
DEU-x86-sha256=0a5775809900dd72ab8ab6ed9f95c8f2cd05e1de22fd00a2d125cb02371e0ed2
ELL-x86=ie6sp1-wucab-ell_15a4e43c8922f658eddd5d57d23c11e0fa55dce9.cab
ELL-x86-sha256=c5ecfd53d031f61ca77decb3651bddeda4460e0d2a3ab99ca0d0d76f3b2e5f64
ENU-x86=ie6sp1-wucab-enu_91192253c8d3cf7beff22e68ae1fdff9638bf546.cab
ENU-x86-sha256=57d10f32b9312f8160cc613f61abb10f950e20040a20053bcd91ee436e1fb342
ESN-x86=ie6sp1-wucab-esn_a9c53ad93bae78becf2b06f6d317ef7ef66a2abe.cab
ESN-x86-sha256=052e80ae42941a96e0ab11cffbf49ce44cef76c6f14ce2820db176d3c7179b22
FIN-x86=ie6sp1-wucab-fin_1a369fcc86e803128144e17246e16d0a27a8c35b.cab
FIN-x86-sha256=ab9773eebce72f1780c2f27f2a3aba83dcfce646c501dba804abd506d7cfdf49
FRA-x86=ie6sp1-wucab-fra_0bc4219b3119a127503cd93863cfedfb1e37bd55.cab
FRA-x86-sha256=4b9e4264be2725fd94e601ad9b76f9b628cd9283ace4854ac8ef9363759a0020
HEB-x86=ie6sp1-wucab-heb_70518dd1d09d702975b8e44a22c88e139f168975.cab
HEB-x86-sha256=6c6d21364d8b5b0b33374db9cb684a82b39cc30f6ada5d98f112b2e723651284
HUN-x86=ie6sp1-wucab-hun_1eeed3e7b3e6bd311c17c0d97f67ec12df8b4b85.cab
HUN-x86-sha256=3ec506555388ea9dd12ca6c07dbd41c1d0a07b11279c3f8a9077cdf14b3b5f6e
ITA-x86=ie6sp1-wucab-ita_2c6ab20b41114e53646ebb56ff6d269fd86fba36.cab
ITA-x86-sha256=efff03fe5c1ccef643358600014c5204498eb50a735295a298d3d1f3ea7622a4
JPN-x86=ie6sp1-wucab-jpn_b1e1e8b9dbbf440d8964ec375348674502ef0728.cab
JPN-x86-sha256=6122c7ad1aa555de13b0a1ac349799bcbecad687b9011acee482ab33192bc0cf
KOR-x86=ie6sp1-wucab-kor_f61474b056ae37c5e9670978c6d3b24f4800d7f5.cab
KOR-x86-sha256=5696ce7d9a3dfb25110f719d5aa0deef51ba48e7ee1ea43fdd8bec66ac10b70e
NLD-x86=ie6sp1-wucab-nld_3fd676fe34f93471f4db9a0a1f3ef5c3ed8e5f43.cab
NLD-x86-sha256=904d8d1301835b025bd65e477b5e84302f797dd7c16c3e88ae2e361cb970dd7b
NOR-x86=ie6sp1-wucab-nor_72a81d06462c5a66f9531f4f226b13463698dd24.cab
NOR-x86-sha256=c4900351cc950a8de85c028849b3291449682cdfdc81392f5b2db73010155492
PLK-x86=ie6sp1-wucab-plk_14889750985a9d29490886c2e901ef3bc69c4ff5.cab
PLK-x86-sha256=4154b875fdb879d68804e8c1048d59b7438ddb87f15b445154c1c32282d33892
PTB-x86=ie6sp1-wucab-ptb_448df44aea5d853e4954d48411b1953569df23c2.cab
PTB-x86-sha256=cfe4bae54599de1e334a3158e8e249d9200b6be3497d19a52d9bc8c8189c71d0
PTG-x86=ie6sp1-wucab-ptg_5892593c72f702ba6c7d88b47c2bd7c5707081fd.cab
PTG-x86-sha256=d6cd7ae8d40d9e8b6c171f3cdfb62148e83838ad8672c26a6d3d0e20e565ccab
RUS-x86=ie6sp1-wucab-rus_842c289d0887bbe2e4edea1ff3763addc8d77db5.cab
RUS-x86-sha256=f9b4c82b5cc91595d1e4241c414b7ca04c4e0ee4955e9f69b1ad4673c6634577
SVE-x86=ie6sp1-wucab-sve_db8dcfef073f2df327fc3706d9a141b6124cfed0.cab
SVE-x86-sha256=5ce56fb70e8cf61c0f0f532406433ed5372c87e3bb1867e3b519e83bb3902938
TRK-x86=ie6sp1-wucab-trk_64479241feb2f783f851b16791d5d1c684d94a66.cab
TRK-x86-sha256=f97f243cb541f6f9af013b3e6185c87c818e18810a773daa2d654b7c0a660e20
NEC98-x86=ie6sp1-wucab-jpn_b1e1e8b9dbbf440d8964ec375348674502ef0728.cab
NEC98-x86-sha256=6122c7ad1aa555de13b0a1ac349799bcbecad687b9011acee482ab33192bc0cf
; Windows XP 2002
[XPSP1a]
Prefix=http://download.windowsupdate.com/msdownload/update/v3-19990518/cabpool/
ARA-x86=xpsp1a_e31fa91a89a658f3d586aa1c9992b01af3e11fe0.exe
ARA-x86-sha256=d41b76b70a0552b4e418615945d18dce19d454b0f0beb98f19a2d18a2b8c00e4
CHH-x86=xpsp1a_c7c76e11bb0c1bbabefe5d4576851f3.exe
CHH-x86-sha256=9597aec1bcada2a50170f40f9b311e6ab194a9b098517d8943524cf93774b7d3
CHS-x86=xpsp1a_8bd1bde300df00e7bd6831ac37cb87e437e2b729.exe
CHS-x86-sha256=dd4eb6391214e2d1295fc39aa38b7f374a29c8463de344c651143a6025b254e8
CHT-x86=xpsp1a_98472ed83897ec104c8496fcd661e6f289ef5090.exe
CHT-x86-sha256=e2f24bcd9a1f328cd812287b677f75133ab4adf6f4d30d45a3b1700eeef42ecd
CSY-x86=xpsp1a_57f0caa259089b1477a162f220d08b1c4bc86010.exe
CSY-x86-sha256=ab2bf6c2dd0159dea96495a546fad42a29eee19a42b8af75e2296898fcca4d74
DAN-x86=xpsp1a_619cc6cf6a98f75d18f4d6eddb662ebfe4a44223.exe
DAN-x86-sha256=046b465b71464f132e15eb62b99a97aff6ac9264eaa987c7f1c69e141fe20892
DEU-x86=xpsp1a_cb7d182645ea1019741d9d94732c29251294acdc.exe
DEU-x86-sha256=2d291429f38b58f0ced45e31e2f9217b0416b961f97a1ebf00deb0e869caebec
ELL-x86=xpsp1a_47666b37340d6224eeb40f67ae16da3e457e64e0.exe
ELL-x86-sha256=79449a7703689b6e735d869a0c6bcbb7053ed681e8f9dcf58577de951f2d79a9
ENU-x86=xpsp1a_8441053935adbfc760b966e5e413d3415a753213.exe
ENU-x86-sha256=265bcb1f9bd3ee01dad3d1271a3d149a468d50413b0fc46e6f42f0f79038899e
ESN-x86=xpsp1a_e675d08b12d20ca372ba6d3b502074000981870f.exe
ESN-x86-sha256=2ed011aa23a09bcdb7d49280a0f33db018f32c580aef1ee0c3f182a910a0c7ca
FIN-x86=xpsp1a_8a254d89daeb22f4f4ccb9b0861e83cb5ea66196.exe
FIN-x86-sha256=3d7043ae996f25564a6ddef5c7fc32852b2d83b576f768b8942a687a3a2bb690
FRA-x86=xpsp1a_fe557a68aed45003151f647189767aeb2bed53a9.exe
FRA-x86-sha256=22bfb16e30ccea9dc14186173df595ba7d196e1091e5ab480c29780be4586d7a
HEB-x86=xpsp1a_499ee7440dba140909fe4d3a86fffd8ec4a1d473.exe
HEB-x86-sha256=f6ce365778bf7784cc3cd48875ea3eb16043884212ce4cfdb429ce198e9c55c1
HUN-x86=xpsp1a_9f24000eb4b69aaa975edeb578b4cd22f971318b.exe
HUN-x86-sha256=a37f9926429e8db1e70cfdde9cc9aafef2ca052577b02740a991f69bff24b15f
ITA-x86=xpsp1a_4f5aa5833bee00c3309fc03d6eafcc6e6f4e2eea.exe
ITA-x86-sha256=9f4d467b35777162a02782971e58e3ce82bb951877c68869f36ccd081bffac42
JPN-x86=xpsp1a_a03d9d2ad30a478ca4c2a51c1de26eaca021e4d1.exe
JPN-x86-sha256=09671231da2e8e2a711d2efb3e02a903f2520403fbee2022d3d86a9ee8afbcf8
KOR-x86=xpsp1a_e79e224ef297b77c0a23a9440f919c8d64e6554a.exe
KOR-x86-sha256=cc2af43b3b59912aaff3d8894f6566e57c3d4ef0826050ef89715786fd0d02ca
NLD-x86=xpsp1a_f1a0183ddc01376d27f374b69fa9364647b336b2.exe
NLD-x86-sha256=c7cded9cb347ef7230cdb2f31eded2b49e6502c298afb35de0edc9cae4826a6a
NOR-x86=xpsp1a_487a5bbfcf9164a0cda2bbe31f9d4aed6c5455a2.exe
NOR-x86-sha256=28eba2a1544172959aac062fbb31cd45c030707ccb73e485c4d98a0267a028f6
PLK-x86=xpsp1a_d2a89787c9ac8ed660684686930513663bc723ba.exe
PLK-x86-sha256=5f389bf3c8f17c95f35e0dca355038ce387b687d64cf9336c34072b7e9e8567e
PTB-x86=xpsp1a_87ec9b54ce8b93f7319b2158cbb0fa1de47d48df.exe
PTB-x86-sha256=e16a63d103757161c4ac25dba10c07d50da79601a2321a4c7071ef30c0e57137
PTG-x86=xpsp1a_625bc5ebcc1306c2632c1b1a60a6f8f30f230cb9.exe
PTG-x86-sha256=1efaaee387502f2c6398ecc4f2472acd8b6b07544b3051796cb8aa06aec26566
RUS-x86=xpsp1a_b5151f669462b3154faf93d48e10beae1b0339aa.exe
RUS-x86-sha256=30b74327cbd07ec74f89ee4a150deac5943e5885737f3a28f7cbfcc2423de824
SVE-x86=xpsp1a_8f11213e01d65c883a95b8871b6134e179e09941.exe
SVE-x86-sha256=d7798916c5c6187336fc8ab4e0e4a902d6c493102ada6e5cc60c84b857732207
TRK-x86=xpsp1a_a2bc3da0f0a3d366c78d4c51ea6aabbb2dd0d545.exe
TRK-x86-sha256=e06c6e90f4964cc2ec4d4436ab21f273dacdbcc9e8249890e037aba4b9ea2527
[XPSP2]
Prefix=http://download.windowsupdate.com/msdownload/update/v3-19990518/cabpool/
ARA-x86=xpsp2_a001b2b27b0f748ab89bd28fa45359f28f95ffb6.exe
ARA-x86-sha256=e0b06ae32ff73af4d69ed39da405c07b0e04d66a031244e48c5b3414ca781e92
CHH-x86=xpsp2_546c11a0a5a41e90ae5f021f234d9abad5a0a25a.exe
CHH-x86-sha256=8b4887a3f5de5017f2e61159fbe1f7b1e48feda6ed605134aa9ffe00c385fbf5
CHS-x86=xpsp2_554ee954bae0f65e88b706cf9b9fd733c02fa397.exe
CHS-x86-sha256=5e706191fb7cf002908a974639b4a0243031d55958332969b508503c1bbafde7
CHT-x86=xpsp2_66d8ba2cbf90737010a45e2b5969c9a779ab1d35.exe
CHT-x86-sha256=a9160f4017dc0e3a595909dae517675ddc7b35b29499826807b8c127f4e5a36c
CSY-x86=xpsp2_767f81c9d0154bfa21d19a49e0b27ede9f93190a.exe
CSY-x86-sha256=a2c0a886d946e016e70f809f576366c5b1fd267e30a67da0cabff9d6c1d4f709
DAN-x86=xpsp2_e60a2b567fda2ab2cf4629700cf65cd3f4d46b0d.exe
DAN-x86-sha256=4b98e4230b6201bfd699f739691420e719c176abba4f4070525583fe0082e00e
DEU-x86=xpsp2_ac8d3101744ff56f74a4de941dc04a7e567c8ba7.exe
DEU-x86-sha256=05561c851b83fe3631cc83ef1c793086bacd8ec773e69d73d74907839b0eb760
ELL-x86=xpsp2_fd86a331f91bc16185e88e6706db859cb27264d1.exe
ELL-x86-sha256=adfd2d30860e40380e8156a7bf793c229df1698abe6d7d02123e6ff685d65bfe
ENU-x86=xpsp2_33a8fef60d48ae1f2c4feea27111af5ceca3c4f6.exe
ENU-x86-sha256=8e4c617eb3b8c61f5d8011aa0e692829a5166bd73e9064e5d318f4579dcc8dfa
ESN-x86=xpsp2_8e7e8de62676d994a7412df190fcdce848f25cf0.exe
ESN-x86-sha256=2e6cf4d610b63b889cfc9aff5730ccf9fbbb4b3d74a6b99dd2eea31343647706
FIN-x86=xpsp2_2feacc1ad5a703d508e9aee4c2fca1e0b9ca9962.exe
FIN-x86-sha256=099a7960283c0c43bdee5037e782b8aefa37b9d00a30e47530063307987f217f
FRA-x86=xpsp2_da94a031147ebd6f8d02eadb7972801843a533bb.exe
FRA-x86-sha256=f6102b86d30e88573fe98e1ecddbf319430a57ab8c507255dc32e8632e341866
HEB-x86=xpsp2_76096ed9f2218ac7a14472cbf435f380ffc1c2f6.exe
HEB-x86-sha256=4b8cbbddce12131f404c2fe714fa0d68dd7f086a09fe136651a0ab577c004d6c
HUN-x86=xpsp2_bd03a3d2a28de2de9e58da3e5dec888ffae25aca.exe
HUN-x86-sha256=686699d2e8b970fa078e4fde690c6f214c112a8590f59eb3e4bbc59c8e35f522
ITA-x86=xpsp2_1334fdd285666bfd821eef8590914f188b1bcc0c.exe
ITA-x86-sha256=e68e3d6c2640bc227fffb99ef00d92d08e9f3e4292f6f6d4fc745679ff26dd7f
JPN-x86=xpsp2_d36c0a7046f2dbe29dfff33b6dbb6bb4574bbd7d.exe
JPN-x86-sha256=08d71b3c17b5654c32266b89c37cc0e7de443bcc790e38bbd0d9857c50f0ddb0
KOR-x86=xpsp2_4a6b32f007fe94a2a8b4542fc6778582ef4245e3.exe
KOR-x86-sha256=665731c61e24dcf79df2cc5b38b3bff773f136b89038d612e98f1ca147041201
NLD-x86=xpsp2_64551a535981fbcd9c2bac3f91df30c6b3610725.exe
NLD-x86-sha256=cd4680eec0a420884d2bed659d54e01d0603cfda1bf7c98b664301bdd01b3dc9
NOR-x86=xpsp2_ace2994463597f9cb7cb059e1dca2a87c12bf278.exe
NOR-x86-sha256=06aa6e675290005a6fdb7d632bba433ab3dae1b0880c56c2eae2b475f5c7142c
PLK-x86=xpsp2_8aefc12abade033f2f093786646206fbb70cbb5d.exe
PLK-x86-sha256=095a80b203226421787973f7a2700aefe551aec7a00f23bb2c1610d695a8c858
PTB-x86=xpsp2_bcbc1bbb2c493dd0a942d13695b18da0400188f8.exe
PTB-x86-sha256=1f1404dd95af19341c1e8dab480d25dccfa5d343836a2d85a6f4366df0b9145e
PTG-x86=xpsp2_db1f7c486f0eda249d77ae91c858a162cefb769b.exe
PTG-x86-sha256=338309ca7abc25cae6c6ec8ebd33e7e222a8d31c967079f592eb8950a9c05a3f
RUS-x86=xpsp2_72946fbe955201f2387430963d4372cda7cac392.exe
RUS-x86-sha256=eef47682b0d173df28148c9e8f9baf26fd849dea6247c3c0f44ec246b8dc39fc
SVE-x86=xpsp2_3ff578d759e77df91effefe34a42030b8ada1c24.exe
SVE-x86-sha256=e1f08d9f4c8f138a0ba3be6cbda4280fdaf5af7823062799672ea82cf4d741bb
TRK-x86=xpsp2_68cfeb8fda746b900f9c3ce313d7348c812fd30d.exe
TRK-x86-sha256=fdde64bb905ab4fd32df2ad2546881c489f427b5a7aa791d8a8a2f871dae1605
[XPSP3]
Prefix=http://download.windowsupdate.com/msdownload/update/software/
ARA-x86=dflt/2008/04/windowsxp-kb936929-sp3-x86-ara_4e82a87cea3b9643fd57b39393a88061614cdae6.exe
ARA-x86-sha256=83a9c1f65cc02f0597a283c7a0175ce30468d05f39236e3e5e68c1497894fc9a
CHH-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-chh_2663fb610f29e65a10be176740ea6757ca1f22d5.exe
CHH-x86-sha256=83c9155ffab220d5b4d56187966d9d2e52466b2c59ad009261e8c1526c22c233
CHS-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-chs_d7067e86abd4257454200d0c398d71c4ce6cd33e.exe
CHS-x86-sha256=39eeb121685e1566c655ae821bf6d2be97fdcc8a62ae2249602954b4f7bb5fd9
CHT-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-cht_8a0625e10b8c6cb88d9d1952f1a189fbd761b744.exe
CHT-x86-sha256=239396a476cad4d4b50e93b5cf0c7ede84dc88fe345b60e275cb8ae0106b0302
CSY-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-csy_7af606916b887dba9dd38ae282505ce2c2b81b08.exe
CSY-x86-sha256=0f2602a19ff6390be2286f2f205ce28c559341d4b8d493ed7d8d503de32506fd
DAN-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-dan_37e03a7d43ad65bc4b71f3947c76bd2fc0fe44d6.exe
DAN-x86-sha256=2e71b33fa6e9fbe2d3b711d8b11b2ab1d869be6d651d8e50336e814202123187
DEU-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-deu_f2dcd2211384a78df215c696a7fd1a7949dc794b.exe
DEU-x86-sha256=10e158040c04c5dd90aedb624ae144c8eff9c6badc5dcfd001e6a61d4e36ca91
ELL-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-ell_cec2ed1c3097e44e62dcb1f2a473a64a58e031fe.exe
ELL-x86-sha256=6e28a272ed069140968585d6ec41e38f38cab14ceebb96bed6c6512ba06a1bba
ENU-x86=dflt/2008/04/windowsxp-kb936929-sp3-x86-enu_c81472f7eeea2eca421e116cd4c03e2300ebfde4.exe
ENU-x86-sha256=62e524a552db9f6fd22d469010ea4d7e28ee06fa615a1c34362129f808916654
ESN-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-esn_e305becfc6fd5a8199368ceffc496397247ac60f.exe
ESN-x86-sha256=b18ef3ddc740952d36dd5f880ce3f1c2eb41fdad139eca05ba2c9c31053d84f1
FIN-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-fin_5654c021a03bfb10543a2c673bdfc42a853e347a.exe
FIN-x86-sha256=39a27e9796a5375f492384b3e71b5b33b9a381a64ed7ef67af9977aac0719923
FRA-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-fra_414b61bbc86e09579d8447baa23eb1b867f9ca93.exe
FRA-x86-sha256=7cc6321e200cc8517fe246723b98af880e863930b547617b44173ded65d19009
HEB-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-heb_eb8fc9ff0890279346661dde065c14b5c696e423.exe
HEB-x86-sha256=7e32f7a0c772548268a6e9e0efabf52de8fd8965a7c750f81e53694d5d0b0e1e
HUN-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-hun_77b70fe421baeebb115c2f378b8a1fc274db9867.exe
HUN-x86-sha256=1233e1d7877bd92f246c20dcb5c1e02855652c709bf9a87c41feecb6ae52caa8
ITA-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-ita_2162c1d419d1e462a7dc34294528b2daf593302c.exe
ITA-x86-sha256=99e69d414f2d026b5cc789911fb00184c401010284f91579c5de84c5e3a36202
JPN-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-jpn_e0fc34cfa52d270b3c79a68af8fa358244f7419e.exe
JPN-x86-sha256=4d59ff48494eb17ca9db5a577f5811d0753f19fd05e20e6f9d6f652928e9692b
KOR-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-kor_8ca7e862bfc2742ad9c4c58df0b0cd5ad4b700ae.exe
KOR-x86-sha256=6ed8c3caa648f65184cc6b201ec9fc657e8f587aa5c4db702d6d8882713cf173
NLD-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-nld_b2576b4d1972583a3b776fdf963b914341d34058.exe
NLD-x86-sha256=a2c87924ee51ad748273c07ecc001478b7e5df608d246241aa8a41faaf157d88
NOR-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-nor_67c9167275a2c3e3884a38c2ad7387556ad4713a.exe
NOR-x86-sha256=5eb734b6dc226d57b6802ef6bfc35404e463d7e4ad34125a7b2d9572e6384d55
PLK-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-plk_7cbe718131e9c71b322f1149e86bedba351ba11c.exe
PLK-x86-sha256=ea707282fc6ce7f6c7c58943713958df45e074fdd38b43490dfedc5a2556a3a0
PTB-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-ptb_02900ef11f5a982a93de5f927997ce92d5a81a86.exe
PTB-x86-sha256=51cd7320492a0b816e848ed934f80a1b2e501b88b964fee7eabf1b026fd15adc
PTG-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-ptg_bc5189c05e93cd0e5742712d84f0b5f5ffcbb7e4.exe
PTG-x86-sha256=070366f5bce1adc80cd3149a0d7990d9a374c75b8db52f13f44ed14e2cc3c77e
RUS-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-rus_850cda9f57033a17d046a56d422547ea80dcaf61.exe
RUS-x86-sha256=80840593225a95a44768416ff51df048792f9e3cfad2917ec1ad9683aad12ee4
SVE-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-sve_13c5ecca22e12224934a1faa1190ee34db3995ae.exe
SVE-x86-sha256=73e26e3c074362f66a9445904ae29ccc8d36ebb99ffbac991224de5e01361a18
TRK-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-trk_5aaf60501636af08c97ef1c18f1315f4ed6fbcdf.exe
TRK-x86-sha256=fd5c9acab3f143e5083d4ac53670f92376432fcc7c9163eb2ce3883310337f01
[XPESP3]
; Only seems to be available in English. Mirrored by us because the file was deleted by Microsoft.
x86=http://content.legacyupdate.net/download.microsoft.com/download/3/a/e/3aea3d4e-159d-4078-a5b4-5b1e4f5a4db4/WindowsXP-KB958255-ENU.exe
x86-sha256=b3f410a712f3382119f4bd5705ed914edb07632b1ed54798abfaa494bd60b1e5
; Windows XP 2003
[2003SP2]
Prefix=http://download.windowsupdate.com/msdownload/update/
CHH-x86=v3-19990518/cabpool/windowsserver2003-kb914961-sp2-x86-chh_2de4fb187533e226cd615bcda30b9a8a2836e197.exe
CHH-x86-sha256=ae6c95197b69b031b2a5547afc8dbc3fe82845efa68842f6530b7d1a64d0bd4c
CHS-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-chs_c3e7772c6ad063bac3cb6ca05ea6e1b39c5bb35d.exe
CHS-x86-sha256=569bc93961bedb5645a4c2c3d00bc81819b87e3754272462c4b6afb56f58cb08
CHT-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-cht_65a62b8ef051bf93d0ccd78900fe8d6709d37a92.exe
CHT-x86-sha256=4fdb0a2d6ac056accaa65da6272f11139a5dfff8741ef084e60260443f110629
CSY-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-csy_fa0c18ba0a265001778e9d2691086742fc4efeb6.exe
CSY-x86-sha256=0afb6655c1ef02509c1a7f731557d6f86b0a8304b2c4f532fb983242232b5a01
DEU-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-deu_f9a055504e882bb06ce2c7e83319000d905f7917.exe
DEU-x86-sha256=ece3cd4c96a2d50310c5ded40aca7b35cec149db05aac52cd0f6729a179ea32d
ENU-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-enu_51e1759a1fda6cd588660324abaed59dd3bbe86b.exe
ENU-x86-sha256=9b18b8094318fda577ce392fa634a5e825ca8feb1b72b051dce21116265f15ad
ESN-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-esn_38d7fba08bdebdaf567ae626042e860bf525306e.exe
ESN-x86-sha256=2e5fd9d16c086a99c90a8cdf038a2b0b2af579b78a422812ffd55d2516800616
FRA-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-fra_51f76d9ebb01806f905199f83a16715e8026c095.exe
FRA-x86-sha256=2cfc34d91dfd72a5e8d001a411b3f70ff4c91473134ae2c443a7ee84604f1684
HUN-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-hun_0ac4aaf8685d74132da6256439ed5f74337cb7f5.exe
HUN-x86-sha256=791ed73f214b83c361f34778714b6e22f9012bef7e5dc6b13bc65c7cb9fa620f
ITA-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-ita_75aa7220b0e226330a723cd27cb0f8b56e9b5f22.exe
ITA-x86-sha256=a81203ab2df3625e0ff46b1d04f800224d9392e68f58b506eecb9732ab5be3e1
JPN-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-jpn_af70b74d70df32c530352b75e42ce772e9bb68d2.exe
JPN-x86-sha256=9f42f6fb01eec164c0a51bd86563abff7d84b56da2eb0537fbd6228792a2b02d
KOR-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-kor_65bcd5be738a08046f0714a108a5fa334ef08fd0.exe
KOR-x86-sha256=b41827beda31671041857bfed9225ce04cbc83063516b42a405285aa9e694a7b
NLD-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-nld_12014e84ae5c8a41cd918a6e2c97586bdee030f7.exe
NLD-x86-sha256=d95527fbdb812a74809bd5cbe02db3a68d5d2395634f5012ada7a851a0d40001
PLK-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-plk_213469cc7ac58cfa82215f1e5ca6753675061b57.exe
PLK-x86-sha256=04ac0dbab6148009dd91b3d29929ed24e3d7173155495ab44ee4740d865d1abe
PTB-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-ptb_73a2c9a9a28f1203aba9f1852c64247467494652.exe
PTB-x86-sha256=1f4d3ef6574dc430af1be9168878d809cecca5c5328ec4b213d2949190e30777
PTG-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-ptg_d8b921ee4bb0e0d2831f249e99c64264ae9098db.exe
PTG-x86-sha256=4619329f32eb844e1a1fc36c5a6de493d81538f0efac0c4de0185e494456372d
RUS-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-rus_b53c66c6cec98327d1a25b77a252dc82d984f959.exe
RUS-x86-sha256=b9d36d52553d8f3294e810fc2d64cb69b6f8681169b92ddc033335ccb3ad0e80
SVE-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-sve_fba6d5c90dc7c15ae750c98cf407a0f148bbfee5.exe
SVE-x86-sha256=38f87207509abd109c3641c4bab0f35ca9c3319c7dbf299a617e7939ec31c02e
TRK-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-trk_428236b66433ce6b08c9d7a6aa6c523874a340ae.exe
TRK-x86-sha256=63f0e3f33d5e710e686bb257532d99ec191e8b9f353984faaf3ddaa069a338ca
ENU-x64=v3-19990518/cabpool/windowsserver2003.windowsxp-kb914961-sp2-x64-enu_7f8e909c52d23ac8b5dbfd73f1f12d3ee0fe794c.exe
ENU-x64-sha256=62c6f31edc47f5a00651a83b6fa6edc7b4245dcf693d9233b6d0a79e52a5a57a
JPN-x64=v3-19990518/cabpool/windowsserver2003.windowsxp-kb914961-sp2-x64-jpn_c725a8c4e03803b12a9ac8820e964dbc377a80dc.exe
JPN-x64-sha256=8c39dc9bbdd4a6bbb6830bb49a108d79f18de42b5489a0496d965c2611667148
DEU-ia64=v3-19990518/cabpool/windowsserver2003-kb914961-sp2-ia64-deu_f6857c1bb8fc03798541a78cdc1f5bb98b456333.exe
DEU-ia64-sha256=66a9dc02f7f9b214b6a1a9674f0ac6a6393d23102ee967014a4c8c1cc5fe6b08
ENU-ia64=v3-19990518/cabpool/windowsserver2003-kb914961-sp2-ia64-enu_8856af0aa0f198a8aad2de2c1ca68240d1d49bf3.exe
ENU-ia64-sha256=f701a8e0950c9b7454ebd5526409fdc39b9fd463cd5ae0ce281d2752194c2fa7
FRA-ia64=v3-19990518/cabpool/windowsserver2003-kb914961-sp2-ia64-fra_0289b81fe7ed5c1c36f87232f87b25cdb21d331d.exe
FRA-ia64-sha256=378209aaea67ea261631d2f1e4d51645870e10f845b050cc28a9d348864de774
JPN-ia64=v3-19990518/cabpool/windowsserver2003-kb914961-sp2-ia64-jpn_3216b1978fd418181ecbf77eef67398edb97a106.exe
JPN-ia64-sha256=fe87dbcaad083d2a0a28d836e385f6ac9602060d7cb7482cbcf3ed3f0eb45a73
; Windows Update Agent standalone installer
[WUA]
Prefix=http://download.windowsupdate.com/windowsupdate/redist/standalone/
; Pay no attention to the version numbers in the urls, they're all over the place. The keys have the
; actual versions of dlls that gets installed.
7.2.6001.788-x86=7.2.6001.788/WindowsUpdateAgent30-x86.exe
7.2.6001.788-x86-sha256=3dc3ab0add514e0f2780a7d40b310d373fb84087060e16dcf1004f9e2b84de7c
7.2.6001.788-x64=7.2.6001.788/WindowsUpdateAgent30-x64.exe
7.2.6001.788-x64-sha256=e61a0fb432780f1071b142bc24d83a5f081da12cd6c2bc8bd4ab6e5e2ecf653e
7.2.6001.788-ia64=7.2.6001.788/WindowsUpdateAgent30-ia64.exe
7.2.6001.788-ia64-sha256=7cc4c81f32b3a649cde35b768bdf4f9a89c595aa74c2c0878828c19119eebf3b
7.6.7600.243-x86=7.4.7600.243/WindowsUpdateAgent30-x86.exe
7.6.7600.243-x86-sha256=0c645755a01bebef694825362f7df308e7b4ee26dadca88474797f327a61a8d7
7.6.7600.256-x86=7.6.7600.320/WindowsUpdateAgent-7.6-x86.exe
7.6.7600.256-x86-sha256=9fc6856827123d0391a2c7451ccb1cbf93261442252dd87819ad5b8db72b0ec0
7.6.7600.256-x64=7.6.7600.320/WindowsUpdateAgent-7.6-x64.exe
7.6.7600.256-x64-sha256=d82a85e4874fbee6cb70479a5e146bb373a82cf8d898c95a600358b6e1933c24
7.6.7600.256-ia64=7.6.7600.320/WindowsUpdateAgent-7.6-ia64.exe
7.6.7600.256-ia64-sha256=c3645037ed96bf9ccb75d1ef40a8453382e03a06f2c44d97c97bb4e5ccf49097
; Win2k
5.0.0=7.2.6001.788
5.0.1=7.2.6001.788
5.0.2=7.2.6001.788
5.0.3=7.2.6001.788
5.0.4=7.2.6001.788
; XP
5.1.0=7.2.6001.788
5.1.1=7.2.6001.788
5.1.2=7.2.6001.788
5.1.3=7.6.7600.256
5.1.3-home=7.6.7600.243
; Server 03/XP x64
5.2.0=7.2.6001.788
5.2.1=7.2.6001.788
5.2.2=7.6.7600.256
; Vista/Server 08
6.0.0=7.6.7600.256
6.0.1=7.6.7600.256
6.0.2=7.6.7600.256
; Vista/Server 08
[VistaSP1]
Prefix=http://download.windowsupdate.com/msdownload/update/software/svpk/2008/04/
x86=windows6.0-kb936330-x86_b8a3fa8f819269e37d8acde799e7a9aea3dd4529.exe
x86-sha256=f2c460675e4a64665a685968a1e8123ce5cce4f1a419d13f9a819554305731ee
x64=windows6.0-kb936330-x64_12eed6cf0a842ce2a609c622b843afc289a8f4b9.exe
x64-sha256=4c441093f023e4a7d1c5df32734916a5bb430ccc141d489be15865dbbb921763
; No ia64 release for Vista SP1
[VistaSP2]
Prefix=http://download.windowsupdate.com/msdownload/update/software/svpk/2009/06/
x86=windows6.0-kb948465-x86_55f17352b4398ecb4f0cc20e3737631420ca1609.exe
x86-sha256=9fcbbef32ffae17bfe3859770ea49a0bd26970c29d1f0123d127fc5bfc63d563
x64=windows6.0-kb948465-x64_2eedca0bfa5ae8d1b0acf2117ddc4f15ac5183c9.exe
x64-sha256=bc8e2a4b663b41fdb4b154a2398c1c5e72ca6ac5651cb421152c344fb08a829e
ia64=windows6.0-kb948465-ia64_1a6cd9ade213bcc056cba3b810e86f0c09c16b51.exe
ia64-sha256=ae65b53de3235f4d767374865a00ebc4e960bb4e053abad9c4e088634a36edcd
[KB3205638]
Prefix=http://download.windowsupdate.com/d/msdownload/update/software/secu/2016/11/
x86=windows6.0-kb3205638-x86_e2211e9a6523061972decd158980301fc4c32a47.msu
x86-sha256=bba36504ae8c0178f06ac4d0a94de66c5fdbdb3a61d989e332453ec866b0b000
x64=windows6.0-kb3205638-x64_a52aaa009ee56ca941e21a6009c00bc4c88cbb7c.msu
x64-sha256=0e2a8b49a6eaf22863e68f77f0c69403d1a074f441b26ad9ecf03809bff6b451
ia64=windows6.0-kb3205638-ia64_d6bd55663080885c712c3afb9021c7336d0be83a.msu
ia64-sha256=406dc4e8a965f814906a0a34c403de14d6482c0dbf5b17f6e3f5e5f229119a80
[KB4012583]
Prefix=http://download.windowsupdate.com/c/msdownload/update/software/secu/2017/02/
x86=windows6.0-kb4012583-x86_1887cb5393b62cbd2dbb6a6ff6b136e809a2fbd0.msu
x86-sha256=e83118b4ab3e628ab773fd244e7b8d41ed467543dd53b1cf2c733a45f833e05a
x64=windows6.0-kb4012583-x64_f63c9a85aa877d86c886e432560fdcfad53b752d.msu
x64-sha256=6ef5b5ec6912ede5629622d4c05000df38cc0a566d1a1881b15e6a4d1ad534ad
ia64=windows6.0-kb4012583-ia64_ab1ab96d3a3d7fbd1bf5d1cee53bf0be958c6329.msu
ia64-sha256=4f87975fca9ce119b523bc930109c9e0c9f7e58d89f972cada19a7fde519da45
[KB4015195]
Prefix=http://download.windowsupdate.com/d/msdownload/update/software/secu/2017/03/
x86=windows6.0-kb4015195-x86_eb045e0144266b20b615f29fa581c4001ebb7852.msu
x86-sha256=8e55dec6bf11cfbbd37b64cd74611d46814f75cdc46b1bdf3f01784a0fa6aa32
x64=windows6.0-kb4015195-x64_2e310724d86b6a43c5ae8ec659685dd6cfb28ba4.msu
x64-sha256=b62531d6925f6cb0b2b3bc5593d3b81157d7103db988379763556c4af1d35594
ia64=windows6.0-kb4015195-ia64_0ae8f7c2ab5cf24123f6e279469674d823d20129.msu
ia64-sha256=64ed566d2238b37bf7fd296b2ddc278819774e578ab004fb80afd611a6b266b1
[KB4015380]
Prefix=http://download.windowsupdate.com/
x86=d/msdownload/update/software/secu/2017/03/windows6.0-kb4015380-x86_3f3548db24cf61d6f47d2365c298d739e6cb069a.msu
x86-sha256=f7f41d5645b2517619c3619ac4a42fb21118eea1047ad31e984b0b2de33ac517
x64=c/msdownload/update/software/secu/2017/03/windows6.0-kb4015380-x64_959aedbe0403d160be89f4dac057e2a0cd0c6d40.msu
x64-sha256=18367f7ce24e11ce8ef84b1839df929713d30354e16e893ba789e40e760acc8f
ia64=c/msdownload/update/software/secu/2017/03/windows6.0-kb4015380-ia64_2a825e5f1aca191bb5f627b494838660180da2d6.msu
ia64-sha256=5bc5c096336f3f2200dcc762301035690e9607a4b7c19ca3a01814a7b642cd8c
[KB4493730]
Prefix=http://download.windowsupdate.com/d/msdownload/update/software/secu/2019/04/
x86=windows6.0-kb4493730-x86_ab4368f19db796680ff445a7769886c4cdc009a0.msu
x86-sha256=601c6afc2da2bce6e6068aba2368c94a3902a4948365a24cde44022ef462e163
x64=windows6.0-kb4493730-x64_5cb91f4e9000383f061b80f88feffdf228c2443c.msu
x64-sha256=26bf790fadd11eca1433abd8edc78d2ddfa1fe85fe0d2f67cdffb5de0c069530
ia64=windows6.0-kb4493730-ia64_024e5a390f7eace6d2e9dcaa91f09976e4d147db.msu
ia64-sha256=e806326e885fa6d7b072ada47ca63e88d3b399b2137515fe202764e70f8215ec
; IE9 for Vista
[KB971512]
Prefix=http://download.windowsupdate.com/msdownload/update/software/updt/2009/10/
x86=windows6.0-kb971512-x86_370c3e41e1c161ddce29676e9273e4b8bb7ba3eb.msu
x86-sha256=ebfae656dc0936ed003ac0c2ea9b0b0dd1810558ff32c61a0952e92e6bf9c3d1
x64=windows6.0-kb971512-x64_0b329b985437c6c572529e5fd0042b9d54aeaa0c.msu
x64-sha256=05127e5cef082bad20cfdb9e87ebe89b6285dbc0ec43e7a6fb36a4b294ce0722
[KB2117917]
Prefix=http://download.windowsupdate.com/msdownload/update/software/updt/2011/02/
x86=windows6.0-kb2117917-x86_370435d9efa6643c44d6506666b1960d56cf673a.msu
x86-sha256=eaf649252e2d784f994236fc413356bd433798599b924a7c07645cb050a513fa
x64=windows6.0-kb2117917-x64_655a21758801e9648702791d7bf30f81b58884b3.msu
x64-sha256=f188b7ccb72fcd45a96bf8487e1d5e683bf7a7379e6491adb61398972ff9548c
[IE9]
Prefix=http://download.windowsupdate.com/msdownload/update/software/uprl/2011/
x86=05/wu-ie9-windowsvista-x86_90e3e90e964c2769a008cbf924eefdc42413dd52.exe
x86-sha256=de20f531dede818aa65c05194b1e7bfed163dd060dc5214c85629d2e8c760fe3
x64=03/wu-ie9-windowsvista-x64_f599c02e7e1ea8a4e1029f0e49418a8be8416367.exe
x64-sha256=e9c8ee3418f92b93a4f0759f527f4fd63215f6bc9fbbd1d86131d0ec49cce95d
; Hyper-V update for Server 08
[KB950050]
Prefix=http://download.windowsupdate.com/msdownload/update/software/updt/2008/06/
x86=windows6.0-kb950050-x86_ca9c19235f4789743d1d818c33726e0f2600238a.msu
x86-sha264=3ba4464725f19fb11b1a1d16f02f3e871d0bbb208cd4219acd2afa80e4a0cbda
x64=windows6.0-kb950050-x64_0440bab6c829c0cc052473e34d42e18d37745a91.msu
x64-sha256=a7a9c40dbbceec3981fb923b8d55600b0e0095980f482d67dca781603744f87c
; 7/Server 08 R2
[Win7SP1]
x86=http://download.windowsupdate.com/msdownload/update/software/svpk/2011/02/windows6.1-kb976932-x86_c3516bc5c9e69fee6d9ac4f981f5b95977a8a2fa.exe
x86-sha256=e5449839955a22fc4dd596291aff1433b998f9797e1c784232226aba1f8abd97
x64=http://download.windowsupdate.com/msdownload/update/software/svpk/2011/02/windows6.1-kb976932-x64_74865ef2562006e51d7f9333b4a8d45b7a749dab.exe
x64-sha256=f4d1d418d91b1619688a482680ee032ffd2b65e420c6d2eaecf8aa3762aa64c8
ia64=http://content.legacyupdate.net/download.microsoft.com/download/0/a/f/0afb5316-3062-494a-ab78-7fb0d4461357/windows6.1-KB976932-IA64.exe
ia64-sha256=12f82b736f6d29813ab7c93e10b6cbe308e7e9236428f624dc614447fe24f6be
[KB3020369]
Prefix=http://download.windowsupdate.com/d/msdownload/update/software/updt/2015/04/
x86=windows6.1-kb3020369-x86_82e168117c23f7c479a97ee96c82af788d07452e.msu
x86-sha256=9263e422baa496b59e7ae5be1d43790e9f0fccaad7e4c7336b4a3bd03b0855c9
x64=windows6.1-kb3020369-x64_5393066469758e619f21731fc31ff2d109595445.msu
x64-sha256=e9fbb6b43c6fb9c1dcc8864bb7a35f29e4002830f3acbb93e0e717ae653fe76a
; ia64 exists, but not used by us
[KB3125574]
Prefix=http://download.windowsupdate.com/d/msdownload/update/software/updt/2016/05/
x86=windows6.1-kb3125574-v4-x86_ba1ff5537312561795cc04db0b02fbb0a74b2cbd.msu
x86-sha256=930cc1c0f8838d731dbb89755b9de12b489ab35fdc2644c01605a6b6de3f497e
x64=windows6.1-kb3125574-v4-x64_2dafb1d203c8964239af3048b5dd4b1264cd93b9.msu
x64-sha256=7bb1796827448df30356b57ac5731bccbc1336789dc884630e8d356df2e1685b
[KB3138612]
Prefix=http://download.windowsupdate.com/d/msdownload/update/software/updt/2016/02/
x86=windows6.1-kb3138612-x86_6e90531daffc13bc4e92ecea890e501e807c621f.msu
x86-sha256=a70e00bd2c77122ad819e05009b6557ff4ed31567dc7b643ed848d095ef34df8
x64=windows6.1-kb3138612-x64_f7b1de8ea7cf8faf57b0138c4068d2e899e2b266.msu
x64-sha256=5309f9d9a49dd91ef38031b1e4518cf5d1bf8f7d35cf11814cd867912ba11870
ia64=windows6.1-kb3138612-ia64_4edd5410fb137382d77f468a14118fa6d1c03655.msu
ia64-sha256=38423da2dc1882990ff6d335c4720877f5bba777cf46d7ccc8c90fc1943d8e65
[KB4474419]
Prefix=http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/
x86=windows6.1-kb4474419-v3-x86_0f687d50402790f340087c576886501b3223bec6.msu
x86-sha256=8cf49fc7ac61e0b217859313a96337b149ab41b3307eb0d9529615142ea34c6c
x64=windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu
x64-sha256=99312df792b376f02e25607d2eb3355725c47d124d8da253193195515fe90213
ia64=windows6.1-kb4474419-v3-ia64_1436a990f64876332857baaafa7aeb9eadcb4fa4.msu
ia64-sha256=8162835bb6f51d63784ca66b1b013beb657e9289179d37b456f54334f28b3d0b
[KB4490628]
Prefix=http://download.windowsupdate.com/
x86=c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x86_3cdb3df55b9cd7ef7fcb24fc4e237ea287ad0992.msu
x86-sha256=b86849fda570f906012992a033f6342373c00a3b3ec0089780eabb084a9a0182
x64=c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu
x64-sha256=8075f6d889bcb27be6f52ed47081675e5bb8a5390f2f5bfe4ec27a2bb70cbf5e
ia64=d/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-ia64_4736acd98e0a4e02f29fcdef63feacc5ac7b702b.msu
ia64-sha256=3c343a9ed3a4e67bcc3aa7b784bfc2fce4fdd0c65f0050813b7e2de03fbe9c87
; Windows Home Server 2011
[KB2757011]
Prefix=http://download.windowsupdate.com/msdownload/update/software/uprl/2012/12/
x64=windows6.1-kb2757011-x64_4140355ab0b06df89668ec51432a820dff9af356.msu
x64-sha256=47548095dd7baa7ac977b07c025243b1050be9c13cc5d82c4a03cd53513f1b2d
; 8/Server 2012
[KB4598297]
Prefix=http://download.windowsupdate.com/d/msdownload/update/software/secu/2021/01/
x86=windows8-rt-kb4598297-x86_a517ea587c91af5f803b0973d40166c3e076fe5c.msu
x86-sha256=740c16a73778d3a936ffd5a9adcc9ba123f120f2a6b549b864f9edf1b6e04fe4
x64=windows8-rt-kb4598297-x64_60f5c45d1216ee6ff1ab88ca03b037ac519ad0da.msu
x64-sha256=ee75660e59543caec58e22b3c089119a6f4fcd8bf9d143bee88d4ac5873b6e5a
; 8.1/Server 2012 R2
[KB3021910]
Prefix=http://download.windowsupdate.com/
x86=c/msdownload/update/software/updt/2015/04/windows8.1-kb3021910-x86_7e70173bec00c3d4fe3b0b8cba17b095b4ed2d20.msu
x86-sha256=971d1b18cb26e578926591ee944f7183be7a6d7abfc2e255b930803666eebc20
x64=c/msdownload/update/software/updt/2015/04/windows8.1-kb3021910-x64_e291c0c339586e79c36ebfc0211678df91656c3d.msu
x64-sha256=feb03c1c3d5719ec2e7873c0b9b85bb9e9db44df88c75f9ddd5222942e4bf928
arm=d/msdownload/update/software/updt/2015/03/windows8.1-kb3021910-arm_72a8286480463b9328f742c7247d7c155a716cd0.msu
arm-sha256=7c2ffdc3029c0c6bc98726722cea34bc4968bc8c69440ad619db62a1d841c8c3
[ClearCompressionFlag]
Prefix=http://download.windowsupdate.com/
x86=c/msdownload/update/software/secu/2014/04/clearcompressionflag_220edca17ae47089fc4da060915e0df568eac4ff.exe
x86-sha256=fc540c0d8da69d08dbd26f71f817f4925b5725e04e76ee0d0fd89e42d1860a86
x64=d/msdownload/update/software/secu/2014/04/clearcompressionflag_3104315db9d84f6a2a56b9621e89ea66a8c27604.exe
x64-sha256=9b95973b198eb255c8e85eb72e0af96482f5ae7547d66aa1b70a7e41602f2548
arm=c/msdownload/update/software/secu/2014/04/clearcompressionflag_70c52df15023ad1fa579149f0435e6a2b078fc94.exe
arm-sha256=8c05fb101a01b54de6cc6e22441b528ea1b3cde211781a8e4258e2f776338841
[KB2919355]
Prefix=http://download.windowsupdate.com/
x86=c/msdownload/update/software/crup/2014/02/windows8.1-kb2919355-x86_de9df31e42fe034c9a763328326e5852c2b4963d.msu
x86-sha256=f8beca5b463a36e1fef45ad0dca6a0de7606930380514ac1852df5ca6e3f6c1d
x64=d/msdownload/update/software/crup/2014/02/windows8.1-kb2919355-x64_e6f4da4d33564419065a7370865faacf9b40ff72.msu
x64-sha256=b0c9ada530f5ee90bb962afa9ed26218c582362315e13b1ba97e59767cb7825d
arm=c/msdownload/update/software/crup/2014/02/windows8.1-kb2919355-arm_a6119d3e5ddd1a233a09dd79d91067de7b826f85.msu
arm-sha256=cf3e9dd5a521965a613ca5b931dea739ac9101e21dc20aa6d05374710083e426
[KB2932046]
Prefix=http://download.windowsupdate.com/
x86=c/msdownload/update/software/crup/2014/02/windows8.1-kb2932046-x86_bfd8ca4c683ccec26355afc1f2e677f3809cb3d6.msu
x86-sha256=a57c15c14f21d2a36a10a587efbd5229e5b10c58d5c39e809093582151cb061a
x64=d/msdownload/update/software/crup/2014/02/windows8.1-kb2932046-x64_6aee5fda6e2a6729d1fbae6eac08693acd70d985.msu
x64-sha256=46b5f5ac8592caa1fc9f9494f775c480dd35b8d1034bc443469df2ae7260cd2e
arm=c/msdownload/update/software/crup/2014/02/windows8.1-kb2932046-arm_fe6acf558880d127aef1a759a8c2539afc67b5fb.msu
arm-sha256=86d78135033944f169974e3523f12072bc34de82d68de924250d0917fb953254
[KB2959977]
Prefix=http://download.windowsupdate.com/
x86=d/msdownload/update/software/secu/2014/04/windows8.1-kb2959977-x86_5ccf761a356bb143b68887f99883d8c24946d2c2.msu
x86-sha256=c0da1c3845ba98f5ee5f1cba1312189422ce1c6bec95bc9c86270b2bf61751ee
x64=c/msdownload/update/software/secu/2014/04/windows8.1-kb2959977-x64_574ba2d60baa13645b764f55069b74b2de866975.msu
x64-sha256=3e6a8674cc5a206cae551426a6bfe254092b11e0501c162f3872fb32ffbc797b
arm=c/msdownload/update/software/secu/2014/04/windows8.1-kb2959977-arm_d37dfe20cdc496b4ed4338913d225fc1a9a91d36.msu
arm-sha256=734dc55f56798695d98d7ba13d774abb54e2326b7b51881fa6db78eadcc1fb4b
[KB2937592]
Prefix=http://download.windowsupdate.com/
x86=d/msdownload/update/software/crup/2014/02/windows8.1-kb2937592-x86_96a3416d480bd2b54803df26b8e76cd1d0008d43.msu
x86-sha256=af4622499f3a054c8eef2ced379b24f95af95eca1b8582c22935ed6ceddd1553
x64=c/msdownload/update/software/crup/2014/02/windows8.1-kb2937592-x64_4abc0a39c9e500c0fbe9c41282169c92315cafc2.msu
x64-sha256=094f92c5fea35c9067844f7acc160f3106214fc62a56068798759512183c18fd
arm=c/msdownload/update/software/crup/2014/02/windows8.1-kb2937592-arm_860c83a0cccc0519111f57a679ae9f9d071315e5.msu
arm-sha256=0abb841953f1abbd59d0d95f20a093d8ff454f2c8cdd781c87693f3b32fe9b66
[KB2934018]
Prefix=http://download.windowsupdate.com/
x86=d/msdownload/update/software/secu/2014/04/windows8.1-kb2934018-x86_8fb05387836b77abbf1755185ae743c9da417e9a.msu
x86-sha256=3976c63843b89bc3a167f26166c7ff7007edc2edf3ed671888b5480ee8c34179
x64=c/msdownload/update/software/secu/2014/04/windows8.1-kb2934018-x64_234a5fc4955f81541f5bfc0d447e4fc4934efc38.msu
x64-sha256=083cb134f59107531e241645530fed396f3cfdd8128ab33349fe138f20f2e19d
arm=c/msdownload/update/software/secu/2014/04/windows8.1-kb2934018-arm_28c62f5a4129ba24ab75936517c5066435702ae8.msu
arm-sha256=d87e2d6d5a9d544ff50d268df6421f92791416f095a8a09050b5a8a48d334d5d
[KB3097667]
arm=http://download.windowsupdate.com/d/msdownload/update/software/updt/2015/09/windows8.1-kb3033055-arm_1b0aeee420c6ad850de7cfac0c485d4bd7965f71.msu
arm-sha256=4e861185a4897c7950f02ab93069297fbd929460a3c4c735877cb1be8b4aa472
================================================
FILE: setup/PatchesNT4.ini
================================================
[Language]
0401=ARA
0403=CAT
0404=CHT
0804=CHS
0405=CSY
0406=DAN
0407=DEU
0408=ELL
0409=ENU
0c0a=ESN
0425=ETI
040b=FIN
040c=FRA
040d=HEB
040e=HUN
0410=ITA
0411=JPN
0412=KOR
0427=LTH
0426=LVI
0413=NLD
0414=NOR
0415=PLK
0416=PTB
0816=PTG
0418=ROM
0419=RUS
041a=HRV
041b=SKY
041d=SVE
041e=THA
041f=TRK
0424=SLV
042a=VIT
042d=EUQ
0c04=CHH
[IE6]
Prefix=http://download.windowsupdate.com/msdownload/update/v3-19990518/cabpool/
ARA-x86=ie6sp1-wucab-ara_b1720a72becd05142cb4ccbb23205c76b51d29e2.cab
CHH-x86=ie6sp1-wucab-cht_1899bffb8ebf36c0a58686f04cc1d721c419792d.cab
CHS-x86=ie6sp1-wucab-chs_6d93ab8525d3b6f775faf692caaa4c8267c8a22b.cab
CHT-x86=ie6sp1-wucab-cht_1899bffb8ebf36c0a58686f04cc1d721c419792d.cab
CSY-x86=ie6sp1-wucab-csy_2789a030bba2128fc90e0475e2530c300ed5defc.cab
DAN-x86=ie6sp1-wucab-dan_0c178b2634a97a4879c172797b21a59e567d18e6.cab
DEU-x86=ie6sp1-wucab-deu_2a13ac14e403ad4a1c6877fe478067e81ac20da8.cab
ELL-x86=ie6sp1-wucab-ell_15a4e43c8922f658eddd5d57d23c11e0fa55dce9.cab
ENU-x86=ie6sp1-wucab-enu_91192253c8d3cf7beff22e68ae1fdff9638bf546.cab
ESN-x86=ie6sp1-wucab-esn_a9c53ad93bae78becf2b06f6d317ef7ef66a2abe.cab
FIN-x86=ie6sp1-wucab-fin_1a369fcc86e803128144e17246e16d0a27a8c35b.cab
FRA-x86=ie6sp1-wucab-fra_0bc4219b3119a127503cd93863cfedfb1e37bd55.cab
HEB-x86=ie6sp1-wucab-heb_70518dd1d09d702975b8e44a22c88e139f168975.cab
HUN-x86=ie6sp1-wucab-hun_1eeed3e7b3e6bd311c17c0d97f67ec12df8b4b85.cab
ITA-x86=ie6sp1-wucab-ita_2c6ab20b41114e53646ebb56ff6d269fd86fba36.cab
JPN-x86=ie6sp1-wucab-jpn_b1e1e8b9dbbf440d8964ec375348674502ef0728.cab
KOR-x86=ie6sp1-wucab-kor_f61474b056ae37c5e9670978c6d3b24f4800d7f5.cab
NLD-x86=ie6sp1-wucab-nld_3fd676fe34f93471f4db9a0a1f3ef5c3ed8e5f43.cab
NOR-x86=ie6sp1-wucab-nor_72a81d06462c5a66f9531f4f226b13463698dd24.cab
PLK-x86=ie6sp1-wucab-plk_14889750985a9d29490886c2e901ef3bc69c4ff5.cab
PTB-x86=ie6sp1-wucab-ptb_448df44aea5d853e4954d48411b1953569df23c2.cab
PTG-x86=ie6sp1-wucab-ptg_5892593c72f702ba6c7d88b47c2bd7c5707081fd.cab
RUS-x86=ie6sp1-wucab-rus_842c289d0887bbe2e4edea1ff3763addc8d77db5.cab
SVE-x86=ie6sp1-wucab-sve_db8dcfef073f2df327fc3706d9a141b6124cfed0.cab
TRK-x86=ie6sp1-wucab-trk_64479241feb2f783f851b16791d5d1c684d94a66.cab
NEC98-x86=ie6sp1-wucab-jpn_b1e1e8b9dbbf440d8964ec375348674502ef0728.cab
================================================
FILE: setup/RebootPage.nsh
================================================
Function RebootPage
; Only show if reboot needed
${IfNot} ${RebootFlag}
Abort
${EndIf}
; Not needed in runonce
${If} ${IsRunOnce}
${OrIf} ${IsPostInstall}
Abort
${EndIf}
; If /norestart passed, skip creating the page
${If} ${NoRestart}
StrCpy $0 -1
${Else}
!insertmacro MUI_HEADER_TEXT "$(RebootPageTitle)" ""
LegacyUpdateNSIS::RebootPageCreate \
"$(RebootPageText)" \
"$(RebootPageTimer)" \
"$(RebootPageRestart)" \
"$(RebootPageLater)"
Call AeroWizardOnShow
LegacyUpdateNSIS::RebootPageShow
Pop $0
${EndIf}
${If} $0 == 0
${OrIf} $0 == 1
; Reboot
Call RebootIfRequired
${Else}
; Later
${MementoSectionSave}
Call PrepareRunOnce
SetErrorLevel ${ERROR_SUCCESS_REBOOT_REQUIRED}
Quit
${EndIf}
FunctionEnd
================================================
FILE: setup/RunOnce.nsh
================================================
Function IsAuditMode
; 2k/XP
ReadRegDword $0 HKLM "${REGPATH_SETUP}" "AuditInProgress"
${If} $0 == 1
Push 1
${Else}
; Vista+
ReadRegDword $0 HKLM "${REGPATH_SETUP_STATUS}" "AuditBoot"
${If} $0 > 0
Push 1
${Else}
Push 0
${EndIf}
${EndIf}
FunctionEnd
!macro _IsAuditMode _a _b _t _f
!insertmacro _LOGICLIB_TEMP
Call IsAuditMode
Pop $_LOGICLIB_TEMP
StrCmp $_LOGICLIB_TEMP 1 `${_t}` `${_f}`
!macroend
!define IsAuditMode `"" IsAuditMode ""`
!macro PromptReboot
!insertmacro InhibitSleep 0
SetErrorLevel ${ERROR_SUCCESS_REBOOT_REQUIRED}
${If} ${NoRestart}
; Prompt for reboot
${IfNot} ${Silent}
${AndIfNot} ${IsPassive}
System::Call '${RestartDialog}($HWNDPARENT, "", ${EWX_REBOOT})'
${EndIf}
Quit
${Else}
; Reboot immediately
System::Call '${GetUserName}(.r0, ${NSIS_MAX_STRLEN}) .r1'
${If} ${IsRunOnce}
${AndIf} $0 == "SYSTEM"
${AndIfNot} ${IsAuditMode}
; Running in setup mode. Winlogon will reboot for us.
Quit
${Else}
; Regular reboot.
Reboot
${EndIf}
${EndIf}
!macroend
Function CleanUpRunOnce
; The reboot has happened, so remove reboot flag if any
DeleteRegValue HKLM "${REGPATH_LEGACYUPDATE_SETUP}" "RebootPending"
; Restore setup keys
; Be careful here. Doing this wrong can cause SYSTEM_LICENSE_VIOLATION bootloops!
${DeleteRegWithBackup} Str HKLM "${REGPATH_SETUP}" "CmdLine" ""
${DeleteRegWithBackup} Dword HKLM "${REGPATH_SETUP}" "SetupType" ${SETUP_TYPE_NORMAL}
DeleteRegValue HKLM "${REGPATH_SETUP}" "SetupShutdownRequired"
${If} ${Abort}
Call CleanUpRunOnceFinal
${EndIf}
FunctionEnd
Function CleanUpRunOnceFinal
; Enable keys we disabled if needed
${If} ${IsWinXP2002}
${DeleteRegWithBackup} Dword HKLM "${REGPATH_SECURITYCENTER}" "FirstRunDisabled" "-"
${EndIf}
${If} ${AtLeastWin8}
${DeleteRegWithBackup} Dword HKLM "${REGPATH_POLICIES_SYSTEM}" "EnableFirstLogonAnimation" "-"
${EndIf}
; Delete runonce stuff
RMDir /r /REBOOTOK "${RUNONCEDIR}"
; Delete IE6 temp files
RMDir /r /REBOOTOK "$WINDIR\Windows Update Setup Files"
FunctionEnd
!if ${NT4} == 0
Function CopyLauncher
${If} ${IsNativeAMD64}
File /ONAME=LegacyUpdate.exe "..\launcher\obj\LegacyUpdate64.exe"
${Else}
File /ONAME=LegacyUpdate.exe "..\launcher\obj\LegacyUpdate32.exe"
${EndIf}
FunctionEnd
!endif
Var /GLOBAL RunOnce.UseFallback
Function PrepareRunOnce
${IfNot} ${RebootFlag}
Return
${EndIf}
; Set flag in case the user decides to restart later, so we can jump straight to the restart page
WriteRegDword HKLM "${REGPATH_LEGACYUPDATE_SETUP}" "RebootPending" 1
!if ${NT4} == 0
${IfNot} ${IsRunOnce}
; Copy to runonce path to ensure installer is accessible by the temp user
CreateDirectory "${RUNONCEDIR}"
SetOutPath "${RUNONCEDIR}"
CopyFiles /SILENT "$EXEPATH" "${RUNONCEDIR}\LegacyUpdateSetup.exe"
Call CopyLauncher
; Remove mark of the web to prevent "Open File - Security Warning" dialog
System::Call '${DeleteFile}("${RUNONCEDIR}\LegacyUpdateSetup.exe:Zone.Identifier")'
${EndIf}
!endif
!if ${NT4} == 1
StrCpy $1 "${RUNONCEDIR}\LegacyUpdateSetup.exe"
!else
StrCpy $1 "${RUNONCEDIR}\LegacyUpdate.exe"
!endif
${If} $RunOnce.UseFallback == 1
${OrIf} ${IsAuditMode}
WriteRegStr HKLM "${REGPATH_RUNONCE}" "LegacyUpdateRunOnce" '"$1" /runonce'
${Else}
; Somewhat documented in KB939857:
; https://web.archive.org/web/20090723061647/http://support.microsoft.com/kb/939857
; See also Wine winternl.h
${WriteRegWithBackup} Str HKLM "${REGPATH_SETUP}" "CmdLine" '"$1" /runonce'
${WriteRegWithBackup} Dword HKLM "${REGPATH_SETUP}" "SetupType" ${SETUP_TYPE_NOREBOOT}
WriteRegDword HKLM "${REGPATH_SETUP}" "SetupShutdownRequired" ${SETUP_SHUTDOWN_REBOOT}
${EndIf}
; Temporarily disable Security Center first run if needed
${If} ${IsWinXP2002}
${AndIfNot} ${AtLeastServicePack} 2
${VerbosePrint} "Disabling Security Center first run"
${WriteRegWithBackup} Dword HKLM "${REGPATH_SECURITYCENTER}" "FirstRunDisabled" 1
${EndIf}
; Temporarily disable logon animation if needed
${If} ${AtLeastWin8}
${VerbosePrint} "Disabling first logon animation"
${WriteRegWithBackup} Dword HKLM "${REGPATH_POLICIES_SYSTEM}" "EnableFirstLogonAnimation" 0
${EndIf}
FunctionEnd
!macro -RebootIfRequired
${If} ${RebootFlag}
${If} ${Silent}
${OrIf} ${IsRunOnce}
Call RebootIfRequired
${EndIf}
Return
${EndIf}
!macroend
!define RebootIfRequired `!insertmacro -RebootIfRequired`
Function RebootIfRequired
${MementoSectionSave}
${If} ${RebootFlag}
; Reboot now
Call PrepareRunOnce
!insertmacro PromptReboot
${Else}
; Restore setup keys
Call CleanUpRunOnce
${EndIf}
FunctionEnd
Function OnRunOnceLogon
; To be safe in case we crash, immediately restore setup keys. We'll set them again if needed.
Call CleanUpRunOnce
FunctionEnd
!macro SetMarquee state
Push $0
FindWindow $0 "#32770" "" $HWNDPARENT
FindWindow $0 "msctls_progress32" "" $0
!if ${state} == 1
${NSD_AddStyle} $0 ${PBS_MARQUEE}
SendMessage $0 ${PBM_SETMARQUEE} 1 100
!else
${NSD_RemoveStyle} $0 ${PBS_MARQUEE}
!endif
Pop $0
!macroend
!if ${NT4} == 0
Function PollCbsInstall
${IfNot} ${AtLeastWinVista}
Return
${EndIf}
ReadRegDword $0 HKLM "${REGPATH_CBS}" "ExecuteState"
${If} $0 == ${CBS_EXECUTE_STATE_NONE}
${OrIf} $0 == ${CBS_EXECUTE_STATE_NONE2}
Return
${EndIf}
${VerbosePrint} "Packages are still installing [$0]"
${DetailPrint} "$(StatusCbsInstalling)"
; Set marquee progress bar
!insertmacro SetMarquee 1
${While} 1 == 1
; Are we in a RebootInProgress phase?
ClearErrors
EnumRegKey $1 HKLM "${REGPATH_CBS_REBOOTINPROGRESS}" 0
${IfNot} ${Errors}
; Prepare runonce now and spin forever. TrustedInstaller will reboot on its own.
SetRebootFlag true
Call PrepareRunOnce
${VerbosePrint} "System will restart automatically"
${While} 1 == 1
Sleep 10000
${EndWhile}
${EndIf}
; Poll TrustedInstaller execution state
ReadRegDword $0 HKLM "${REGPATH_CBS}" "ExecuteState"
${If} $0 == ${CBS_EXECUTE_STATE_NONE}
${OrIf} $0 == ${CBS_EXECUTE_STATE_NONE2}
; Ignore under Vista RTM servicing stack. It can trick us by going to -1, then back to 0.
; This happens in the first 2 (of 3) reboots when installing SP1.
${IfNot} ${IsWinVista}
${OrIf} ${AtLeastServicePack} 1
${Break}
${EndIf}
${EndIf}
Sleep 1000
${EndWhile}
; Revert progress bar
!insertmacro SetMarquee 0
FunctionEnd
!endif
Function RebootIfCbsRebootPending
${IfNot} ${AtLeastWinVista}
Return
${EndIf}
StrCpy $1 0
ClearErrors
ReadRegDword $0 HKLM "${REGPATH_CBS}" "ExecuteState"
${IfNot} ${Errors}
${AndIf} $0 != ${CBS_EXECUTE_STATE_NONE}
${AndIf} $0 != ${CBS_EXECUTE_STATE_NONE2}
StrCpy $1 1
${EndIf}
ClearErrors
EnumRegKey $0 HKLM "${REGPATH_CBS_REBOOTPENDING}" 0
EnumRegKey $0 HKLM "${REGPATH_CBS_PACKAGESPENDING}" 0
${IfNot} ${Errors}
StrCpy $1 1
${EndIf}
${If} $1 == 1
${VerbosePrint} "Restarting to install previously pending packages"
SetRebootFlag true
${RebootIfRequired}
${EndIf}
FunctionEnd
Function OnRunOnceDone
${If} ${IsRunOnce}
${AndIfNot} ${Abort}
; Set up postinstall runonce
${If} ${IsAuditMode}
${VerbosePrint} "Running postinstall"
Exec '"${RUNONCEDIR}\LegacyUpdate.exe" /runonce postinstall'
${Else}
${VerbosePrint} "Preparing postinstall"
WriteRegStr HKLM "${REGPATH_RUNONCE}" "LegacyUpdatePostInstall" '"${RUNONCEDIR}\LegacyUpdate.exe" /runonce postinstall'
System::Call '${GetUserName}(.r0, ${NSIS_MAX_STRLEN}) .r1'
${If} $0 == "SYSTEM"
; Configure winlogon to proceed to the logon dialog
Call CleanUpRunOnce
${EndIf}
${EndIf}
${EndIf}
FunctionEnd
================================================
FILE: setup/Strings.nsh
================================================
!insertmacro MUI_LANGUAGE "English"
; Dialog
MiscButtonText "Back" "Next" "Cancel" "Close"
; Log
LangString ^ExecShell ${LANG_ENGLISH} "Execute: "
LangString ^Completed ${LANG_ENGLISH} "Done"
LangString Downloading ${LANG_ENGLISH} "Downloading "
LangString Verifying ${LANG_ENGLISH} "Verifying "
LangString Extracting ${LANG_ENGLISH} "Extracting "
LangString Installing ${LANG_ENGLISH} "Installing "
LangString ExitCode ${LANG_ENGLISH} "Exit code: "
LangString RestartRequired ${LANG_ENGLISH} "Success - restart required"
LangString AlreadyInstalled ${LANG_ENGLISH} "Installation skipped - already installed"
LangString NotApplicable ${LANG_ENGLISH} "Installation skipped - not applicable"
; Download
LangString DownloadStatusSingle ${LANG_ENGLISH} "{TIMEREMAINING} left - {RECVSIZE} of {FILESIZE} ({SPEED})"
LangString DownloadStatusMulti ${LANG_ENGLISH} "{TIMEREMAINING} left - {TOTALRECVSIZE} of {TOTALFILESIZE} ({SPEED})"
; Startup errors
LangString MsgBoxUsage ${LANG_ENGLISH} \
"Usage: setup.exe [/S] [/v] [/passive] [/norestart]$\r$\n\
$\r$\n\
/S$\tExecute Legacy Update setup silently.$\r$\n\
/v$\tDisplay verbose details during installation.$\r$\n\
/passive$\tInstall without user interaction.$\r$\n\
/norestart$\tDisable automatic restart during installation.$\r$\n\
$\r$\n\
If no flags are passed, Legacy Update will launch its full user interface.$\r$\n\
For more information on these flags, visit legacyupdate.net."
LangString MsgBoxElevationRequired ${LANG_ENGLISH} \
"Log on as an administrator to install Legacy Update."
LangString MsgBoxOldWinVersion ${LANG_ENGLISH} \
"Legacy Update requires Windows 2000 or later.$\r$\n\
$\r$\n\
You might be interested in Windows Update Restored instead.$\r$\n\
Would you like to go to ${WUR_WEBSITE} now?"
LangString MsgBoxNeedsNT4 ${LANG_ENGLISH} \
"Legacy Update NT is intended only for use on Windows NT 4.0.$\r$\n\
$\r$\n\
For other versions of Windows, use the regular version of Legacy Update.$\r$\n\
Would you like to go to ${WEBSITE} now?"
LangString MsgBoxBetaOS ${LANG_ENGLISH} \
"The current version of Windows is a beta build. Legacy Update may not work correctly on this version of Windows.$\r$\n\
$\r$\n\
Continue anyway?"
LangString MsgBoxOneCoreAPI ${LANG_ENGLISH} \
"One-Core-API has been detected on this system. Installation of updates will fail while One-Core-API is installed.$\r$\n\
$\r$\n\
It is recommended to uninstall One-Core-API, then install it again after you have installed all updates.$\r$\n\
$\r$\n\
Continue anyway?"
LangString MsgBoxNNN4NT5 ${LANG_ENGLISH} \
"A compatibility mode has been set on this program by NNN Changer for NT 5.x (NNN4NT5). Legacy Update will not work correctly in compatibility mode.$\r$\n\
$\r$\n\
Click the $\"Delete$\" button in NNN4NT5 to disable compatibility mode, then try again."
LangString MsgBoxCompatMode ${LANG_ENGLISH} \
"A compatibility mode has been set on this program. Legacy Update will not work correctly in compatibility mode.$\r$\n\
$\r$\n\
Disable it in the Properties dialog of this file and try again."
LangString MsgBoxSetupAlreadyRunning ${LANG_ENGLISH} \
"Legacy Update setup is already running."
LangString MsgBoxInstallInProgress ${LANG_ENGLISH} \
"An update is currently being installed. Please wait for that installation to finish before running Legacy Update setup again."
LangString MsgBoxTermsrvAppInstallMode ${LANG_ENGLISH} \
"Terminal Services is currently in Execute mode. To install Legacy Update, Terminal Services will be changed to Install mode."
LangString MsgBoxPluginFailed ${LANG_ENGLISH} \
"Setup failed to initialize.$\r$\n\
$\r$\n\
The file may be corrupt. Try downloading Legacy Update again."
; Install errors
LangString MsgBoxCopyFailed ${LANG_ENGLISH} \
'Unable to write to "$0".$\r$\n\
$\r$\n\
If Internet Explorer is open, close it and click Retry.'
FileErrorText $(MsgBoxCopyFailed) $(MsgBoxCopyFailed)
LangString MsgBoxDownloadAbort ${LANG_ENGLISH} \
"Cancelling will terminate Legacy Update setup."
LangString MsgBoxDownloadFailed ${LANG_ENGLISH} \
"$2 failed to download.$\r$\n\
$\r$\n\
$0 ($1)"
LangString MsgBoxDownloadDNSError ${LANG_ENGLISH} \
"$2 failed to download.$\r$\n\
$\r$\n\
Legacy Update requires an internet connection to download additional components from Microsoft. Check your internet connection and try again.$\r$\n\
$\r$\n\
$0 ($1)"
LangString MsgBoxHashFailed ${LANG_ENGLISH} \
"$2 failed to download.$\r$\n\
$\r$\n\
The downloaded file is corrupt. If this persists, a firewall or your internet service provider may be blocking the download."
LangString MsgBoxInstallFailed ${LANG_ENGLISH} \
"$2 failed to install.$\r$\n\
$\r$\n\
$1 ($0)"
LangString MsgBoxPatchNotFound ${LANG_ENGLISH} \
"$0 failed to install.$\r$\n\
$\r$\n\
The installed Windows language and/or architecture is not supported."
LangString MsgBoxMUFailed ${LANG_ENGLISH} \
"Failed to enable Microsoft Update.$\r$\n\
$\r$\n\
$1 ($0)"
; Warnings
LangString MsgBoxWES09NotSSE2Main ${LANG_ENGLISH} \
"Your processor does not support the Streaming SIMD Extensions 2 (SSE2) instruction set, which is required to install Windows Embedded 2009 updates released after May 2018.$\r$\n\
For more information, visit http://legacyupdate.net/help/sse2."
LangString MsgBoxWES09NotSSE2Block ${LANG_ENGLISH} \
"$(MsgBoxWES09NotSSE2Main)$\r$\n\
$\r$\n\
To protect your Windows installation from becoming damaged by incompatible updates, this option will be disabled."
LangString MsgBoxWES09NotSSE2Pre ${LANG_ENGLISH} \
"Your current operating system is Windows Embedded 2009, or updates from Windows Embedded 2009 have been enabled on this system by another tool.$\r$\n\
$\r$\n\
$(MsgBoxWES09NotSSE2Main)"
LangString MsgBoxActivateXP2002NotSP3 ${LANG_ENGLISH} \
"Windows XP must be updated to Service Pack 3 to activate over the internet. The Service Pack 3 update action will be enabled."
LangString MsgBoxActivateXP2003NotSP2 ${LANG_ENGLISH} \
"Windows XP Professional x64 Edition or Windows Server 2003 must be updated to Service Pack 2 to activate over the internet. The Service Pack 2 update action will be enabled."
LangString MsgBoxVistaSPInstall ${LANG_ENGLISH} \
"Your computer will restart several times to install Windows Vista Service Pack 2. Your screen may appear blank for an extended period of time. Do not turn off your computer during this process."
LangString MsgBoxWUA2000Datacenter ${LANG_ENGLISH} \
"Windows Update Agent is not supported on Windows 2000 Datacenter Server. The Legacy Update action will be disabled."
; Statuses
LangString StatusRestarting ${LANG_ENGLISH} "Restarting..."
LangString StatusRestartingWUAU ${LANG_ENGLISH} "Restarting Windows Update service..."
LangString StatusCheckingSSL ${LANG_ENGLISH} "Checking SSL connectivity..."
LangString StatusCbsInstalling ${LANG_ENGLISH} "Configuring updates..."
LangString StatusClosingIE ${LANG_ENGLISH} "Closing Internet Explorer windows..."
; Products
LangString DX ${LANG_ENGLISH} "DirectX"
LangString IE ${LANG_ENGLISH} "Internet Explorer"
LangString MSI ${LANG_ENGLISH} "Windows Installer"
LangString VB ${LANG_ENGLISH} "Visual Basic"
LangString VC ${LANG_ENGLISH} "Visual C/C++"
LangString WMP ${LANG_ENGLISH} "Windows Media Player"
LangString Runtime ${LANG_ENGLISH} "Runtime"
LangString Runtimes ${LANG_ENGLISH} "Runtimes"
; Editions
LangString PRO ${LANG_ENGLISH} "Professional"
LangString P64 ${LANG_ENGLISH} "Professional x64 Edition"
LangString EMB ${LANG_ENGLISH} "Embedded"
LangString SRV ${LANG_ENGLISH} "Server"
LangString WTS ${LANG_ENGLISH} "Terminal Server"
; Update types
LangString Setup ${LANG_ENGLISH} "Setup"
LangString Update ${LANG_ENGLISH} "Update"
LangString Updates ${LANG_ENGLISH} "Updates"
LangString Rollup ${LANG_ENGLISH} "Update Rollup"
LangString SP ${LANG_ENGLISH} "Service Pack"
LangString PostSP ${LANG_ENGLISH} "Post-Service Pack"
LangString SecUpd ${LANG_ENGLISH} "Security Update"
LangString SSU ${LANG_ENGLISH} "Servicing Stack Update"
LangString WUA ${LANG_ENGLISH} "Windows Update Agent"
LangString PrepTool ${LANG_ENGLISH} "Preparation Tool"
LangString PUS ${LANG_ENGLISH} "Platform Update Supplement"
LangString SRP ${LANG_ENGLISH} "Security Rollup Package"
LangString CRU ${LANG_ENGLISH} "Convenience Rollup Update"
LangString SHA2 ${LANG_ENGLISH} "SHA-2 Code Signing Support Update"
LangString CTL ${LANG_ENGLISH} "Certificate Trust List"
LangString Unofficial ${LANG_ENGLISH} "(Unofficial)"
LangString SectionWES09 ${LANG_ENGLISH} "Enable Windows Embedded 2009 updates"
LangString SectionWS2008HVU ${LANG_ENGLISH} "Hyper-V $(Update) for Windows Server 2008"
LangString SectionWHS2011U4 ${LANG_ENGLISH} "Windows Home Server 2011 $(Rollup) 4"
LangString SectionW2KUR1 ${LANG_ENGLISH} "Update Rollup 1 for Windows 2000 $(SP) 4"
LangString SectionSSU ${LANG_ENGLISH} "Windows Servicing Stack update"
LangString SectionWUA ${LANG_ENGLISH} "Windows Update Agent update"
LangString SectionRootCerts ${LANG_ENGLISH} "Root certificates store update"
LangString SectionEnableMU ${LANG_ENGLISH} "Enable Microsoft Update"
LangString SectionActivate ${LANG_ENGLISH} "Activate Windows"
LangString SectionESU ${LANG_ENGLISH} "Prepare for Extended Security Updates"
LangString SectionSupEULA ${LANG_ENGLISH} \
"By installing, you are agreeing to the Supplemental End User License Agreement for this update."
LangString SectionMSLT ${LANG_ENGLISH} \
"By installing, you are agreeing to the Microsoft Software License Terms for this update."
LangString SectionW2KSP4Desc ${LANG_ENGLISH} \
"Updates Windows 2000 to Service Pack 4 with Update Rollup 1, as required to install the Windows Update Agent.$\r$\n$(SectionSupEULA)"
LangString SectionIE6SP1Desc ${LANG_ENGLISH} \
"Updates Internet Explorer to 6.0 SP1, as required for Legacy Update.$\r$\n$(SectionSupEULA)"
LangString SectionXPSP3Desc ${LANG_ENGLISH} \
"Updates Windows XP to Service Pack 3. Required if you would like to activate Windows online.$\r$\n$(SectionSupEULA)"
LangString SectionXPESP3Desc ${LANG_ENGLISH} \
"Updates Windows XP Embedded to Service Pack 3. Required if you would like to activate Windows online.$\r$\n$(SectionSupEULA)"
LangString SectionWES09Desc ${LANG_ENGLISH} \
"Configures Windows to appear as Windows Embedded POSReady 2009 to Windows Update, enabling access to Windows XP security updates released between 2014 and 2019. Please note that Microsoft officially advises against doing this. This change can not be undone."
LangString Section2003SP2Desc ${LANG_ENGLISH} \
"Updates Windows XP Professional x64 Edition or Windows Server 2003 to Service Pack 2. Required if you would like to activate Windows online.$\r$\n$(SectionSupEULA)"
LangString SectionVistaSP2Desc ${LANG_ENGLISH} \
"Updates Windows Vista or Windows Server 2008 to Service Pack 2, as required to install the Windows Update Agent.$\r$\n$(SectionMSLT)"
LangString SectionVistaSSUDesc ${LANG_ENGLISH} \
"Installs additional updates required to resolve issues with the Windows Update Agent."
LangString SectionVistaESUDesc ${LANG_ENGLISH} \
"Installs additional updates that prepare the system to receive Extended Security Updates (ESU). This fixes Windows Update stalling at $\"Checking for updates$\", but may cause compatibility issues. Using ESU without a valid license is a violation of the Microsoft Software License Terms. This change can not be undone."
LangString SectionVistaIE9Desc ${LANG_ENGLISH} \
"Updates Internet Explorer to 9.0, improving website compatibility.$\r$\n$(SectionMSLT)"
LangString SectionWin7SP1Desc ${LANG_ENGLISH} \
"Updates Windows 7 or Windows Server 2008 R2 to Service Pack 1, as required to install the Windows Update Agent.$\r$\n$(SectionMSLT)"
LangString SectionWin7CRUDesc ${LANG_ENGLISH} \
"Installs all updates released for Windows 7 and Windows Server 2008 R2 up to March 2016.$\r$\nThis update installs telemetry features that may not be desirable."
LangString SectionWin7SSUDesc ${LANG_ENGLISH} \
"Updates Windows 7 or Windows Server 2008 R2 with additional updates required to resolve issues with the Windows Update Agent."
LangString SectionWin8SSUDesc ${LANG_ENGLISH} \
"Updates Windows 8 or Windows Server 2012 with additional updates required to resolve issues with the Windows Update Agent."
LangString SectionWin81U1Desc ${LANG_ENGLISH} \
"Updates Windows 8.1 to Update 1, as required to resolve issues with the Windows Update Agent. Also required to upgrade to Windows 10."
LangString SectionWin81SSUDesc ${LANG_ENGLISH} \
"Updates Windows 8.1 or Windows Server 2012 R2 with additional updates required to resolve issues with the Windows Update Agent."
LangString SectionWS2008HVUDesc ${LANG_ENGLISH} \
"Updates Windows Server 2008 to the released version of Hyper-V, as required to install Service Pack 2."
LangString SectionWHS2011U4Desc ${LANG_ENGLISH} \
"Updates Windows Home Server 2011 to Update Rollup 4 to resolve issues with the Windows Update Agent. Also fixes data corruption problems."
LangString SectionWUADesc ${LANG_ENGLISH} \
"Updates the Windows Update Agent to the latest version, as required for Legacy Update."
LangString SectionRootCertsDesc ${LANG_ENGLISH} \
"Updates the root certificate store to the latest from Microsoft, and enables additional modern security features. Root certificates are used to verify the security of encrypted (https) connections. This fixes connection issues with some websites."
LangString SectionEnableMUDesc ${LANG_ENGLISH} \
"Configures Windows Update to receive updates for Microsoft Office and other Microsoft software."
LangString SectionActivateDesc ${LANG_ENGLISH} \
"Your copy of Windows is not activated. If you update the root certificates store, Windows Product Activation can be completed over the internet. Legacy Update can start the activation wizard after installation so you can activate your copy of Windows."
LangString SectionActiveX2KXPDesc ${LANG_ENGLISH} \
"Installs the Legacy Update ActiveX control, enabling access to the full Windows Update interface via the legacyupdate.net website."
LangString SectionActiveXVista78Desc ${LANG_ENGLISH} \
"Installs the Legacy Update ActiveX control, enabling access to the classic Windows Update interface via the legacyupdate.net website. Not required if you want to use the built-in Windows Update Control Panel."
LangString SectionActiveXWin10Desc ${LANG_ENGLISH} \
"Installs the Legacy Update ActiveX control, enabling access to the classic Windows Update interface via the legacyupdate.net website."
; LangString SectionLegacyUpdateDesc ${LANG_ENGLISH} \
; "Installs Legacy Update, enabling access to Windows Update."
; LangString SectionWUServerDesc ${LANG_ENGLISH} \
; "Configures Windows Update to use the Legacy Update proxy server, resolving connection issues to the official Microsoft Windows Update service."
; NT 4.0
LangString MsgBoxNT4PostInstall ${LANG_ENGLISH} \
"Legacy Update is complete. Windows is up to date."
LangString SectionWDU ${LANG_ENGLISH} \
"Windows Desktop Update"
LangString SectionWDUYes ${LANG_ENGLISH} \
"Install Windows 98-style Explorer"
LangString SectionWDUNo ${LANG_ENGLISH} \
"Keep Windows 95-style Explorer"
LangString SectionNT4USB ${LANG_ENGLISH} \
"Inside Out Networks USB Peripheral Drivers"
LangString SectionSPCleanup ${LANG_ENGLISH} \
"Delete update uninstall data"
LangString SectionNT4WDUDesc ${LANG_ENGLISH} \
"Installs the updated Windows 98-style Explorer experience. This choice can not be changed later. Requires installing Internet Explorer 6."
LangString SectionNT4WDUYesDesc ${LANG_ENGLISH} \
"$(SectionNT4WDUDesc)"
LangString SectionNT4WDUNoDesc ${LANG_ENGLISH} \
"Keeps the Windows 95-style Explorer experience. This choice can not be changed later."
LangString SectionNT4SP6ADesc ${LANG_ENGLISH} \
"Updates Windows NT 4.0 to Service Pack 6a with 128-bit encryption support.$\r$\n$(SectionSupEULA)"
LangString SectionNT4RollupDesc ${LANG_ENGLISH} \
"Installs Windows NT 4.0 Service Pack 6a Security Rollup Package.$\r$\n$(SectionSupEULA)"
LangString SectionNT4PostSPDesc ${LANG_ENGLISH} \
"Installs Windows NT 4.0 updates released after the Security Rollup Package.$\r$\n$(SectionSupEULA)"
LangString SectionNT4MSIDesc ${LANG_ENGLISH} \
"Installs Windows Installer, required to install newer applications.$\r$\n$(SectionSupEULA)"
LangString SectionNT4VCRTDesc ${LANG_ENGLISH} \
"Installs updated versions of the Microsoft Visual C, Visual C++, and Visual Basic runtimes, required to run newer applications.$\r$\n$(SectionSupEULA)"
LangString SectionNT4IE6SP1Desc ${LANG_ENGLISH} \
"Installs Internet Explorer 6. Required for Windows Desktop Update.$\r$\n$(SectionSupEULA)"
LangString SectionNT4WMP64Desc ${LANG_ENGLISH} \
"Installs Windows Media Player 6.4.$\r$\n$(SectionSupEULA)"
LangString SectionNT4DX5Desc ${LANG_ENGLISH} \
"Installs DirectX 5. This is an unofficial patch. Microsoft officially supports only up to DirectX 3 on Windows NT 4.0.$\r$\n$(SectionSupEULA)"
LangString SectionNT4USBDesc ${LANG_ENGLISH} \
"Installs the Inside Out Networks USB Peripheral Drivers, enabling access to USB devices.$\r$\nBy installing, you are agreeing to the Inside Out Networks Edgeport for NT 4.0 License Agreement."
LangString SectionSPCleanupDesc ${LANG_ENGLISH} \
"Deletes backup files created during installation of updates. This frees up disk space, but you will not be able to uninstall updates."
; Components page
LangString ComponentsPageTitle ${LANG_ENGLISH} "Welcome to Legacy Update"
LangString ComponentsPageText ${LANG_ENGLISH} "Select what you would like Legacy Update to do. An internet connection is required to download additional components from Microsoft. Your computer will restart automatically if needed. Close all other programs before continuing."
; Install page
LangString InstFilesPageTitle ${LANG_ENGLISH} "Performing Actions"
; Uninstall confirm page
LangString UnConfirmPageTitle ${LANG_ENGLISH} "Uninstall Legacy Update"
LangString UnConfirmPageText ${LANG_ENGLISH} "Legacy Update will be uninstalled. Your Windows Update configuration will be reset to directly use Microsoft servers."
; ActiveX page
LangString ActiveXPageTitle ${LANG_ENGLISH} "How do you want to use Windows Update?"
LangString ActiveXPageText ${LANG_ENGLISH} "Legacy Update configures Windows Update to use the Legacy Update proxy server, resolving connection issues to the official Microsoft Windows Update service. You can choose between two options to access Windows Update."
LangString ActiveXPageYesTitle ${LANG_ENGLISH} "Use the Legacy Update website"
LangString ActiveXPageYesTextVista ${LANG_ENGLISH} "The Legacy Update website is a replacement for the original Windows Update website. If you select this, you can still use the Windows Update Control Panel."
LangString ActiveXPageYesText2KXP ${LANG_ENGLISH} "The Legacy Update website is a replacement for the original Windows Update website, allowing you to download optional updates and drivers."
LangString ActiveXPageNoTitleVista ${LANG_ENGLISH} "Use the Windows Update Control Panel"
LangString ActiveXPageNoTextVista ${LANG_ENGLISH} "Legacy Update is compatible with the built-in Windows Update Control Panel. Make sure to check for updates $\"managed by your system administrator$\" to use the Legacy Update proxy server"
LangString ActiveXPageNoTitle2KXP ${LANG_ENGLISH} "Use Automatic Updates"
LangString ActiveXPageNoText2KXP ${LANG_ENGLISH} "Use the built-in Automatic Updates feature to download and install updates. You will only be able to download critical updates."
; Reboot page
LangString RebootPageTitle ${LANG_ENGLISH} "Restarting Windows"
LangString RebootPageText ${LANG_ENGLISH} "Your computer will not be up to date until you restart it. Save any open files, and then restart the computer.$\r$\n\
$\r$\n\
Setup will resume after restarting. Your computer may restart several times to complete installation."
LangString RebootPageTimer ${LANG_ENGLISH} "Restarting in "
LangString RebootPageRestart ${LANG_ENGLISH} "Restart"
LangString RebootPageLater ${LANG_ENGLISH} "Later"
================================================
FILE: setup/UpdateRoots.nsh
================================================
!macro -SetSecureProtocolsBitmask root path key
ReadRegDword $0 ${root} "${path}" "${key}"
${VerbosePrint} "${root}\${path}"
${VerbosePrint} "Before: $0"
; If the value isn't yet set, ReadRegDword will return 0. This means TLSv1.1 and v1.2 will be the
; only enabled protocols. This is intentional behavior, because SSLv2 and SSLv3 are not secure,
; and TLSv1.0 is deprecated. The user can manually enable them in Internet Settings if needed.
; On XP, we'll also enable TLSv1.0, given TLSv1.1 and v1.2 are only offered through an optional
; POSReady 2009 update.
${If} $0 == 0
${AndIf} ${AtMostWinXP2003}
IntOp $0 $0 | ${WINHTTP_FLAG_SECURE_PROTOCOL_TLS1}
${EndIf}
IntOp $0 $0 | ${WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1}
IntOp $0 $0 | ${WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2}
${VerbosePrint} "After: $0"
WriteRegDword ${root} "${path}" "${key}" $0
!macroend
Function _ConfigureCrypto
; Enable SChannel TLSv1.1 and v1.2
WriteRegDword HKLM "${REGPATH_SCHANNEL_PROTOCOLS}\TLS 1.1\Client" "Enabled" 1
WriteRegDword HKLM "${REGPATH_SCHANNEL_PROTOCOLS}\TLS 1.1\Client" "DisabledByDefault" 0
WriteRegDword HKLM "${REGPATH_SCHANNEL_PROTOCOLS}\TLS 1.1\Server" "Enabled" 1
WriteRegDword HKLM "${REGPATH_SCHANNEL_PROTOCOLS}\TLS 1.1\Server" "DisabledByDefault" 0
WriteRegDword HKLM "${REGPATH_SCHANNEL_PROTOCOLS}\TLS 1.2\Client" "Enabled" 1
WriteRegDword HKLM "${REGPATH_SCHANNEL_PROTOCOLS}\TLS 1.2\Client" "DisabledByDefault" 0
WriteRegDword HKLM "${REGPATH_SCHANNEL_PROTOCOLS}\TLS 1.2\Server" "Enabled" 1
WriteRegDword HKLM "${REGPATH_SCHANNEL_PROTOCOLS}\TLS 1.2\Server" "DisabledByDefault" 0
; Enable IE TLSv1.1 and v1.2
!insertmacro -SetSecureProtocolsBitmask HKLM "${REGPATH_INETSETTINGS}" "SecureProtocols"
!insertmacro -SetSecureProtocolsBitmask HKCU "${REGPATH_INETSETTINGS}" "SecureProtocols"
; Enable WinHTTP TLSv1.1 and v1.2
!insertmacro -SetSecureProtocolsBitmask HKLM "${REGPATH_INETSETTINGS_WINHTTP}" "DefaultSecureProtocols"
!insertmacro -SetSecureProtocolsBitmask HKCU "${REGPATH_INETSETTINGS_WINHTTP}" "DefaultSecureProtocols"
; Enable .NET inheriting SChannel protocol config
; .NET 3 uses the same registry keys as .NET 2.
WriteRegDword HKLM "${REGPATH_DOTNET_V2}" "SystemDefaultTlsVersions" 1
WriteRegDword HKLM "${REGPATH_DOTNET_V4}" "SystemDefaultTlsVersions" 1
FunctionEnd
Function ConfigureCrypto
${VerbosePrint} "Configuring crypto (native)"
Call _ConfigureCrypto
; Repeat in the WOW64 registry if needed
${If} ${RunningX64}
${VerbosePrint} "Configuring crypto (WOW64)"
SetRegView 32
Call _ConfigureCrypto
SetRegView 64
${EndIf}
FunctionEnd
!macro _DownloadSST name
!insertmacro Download "$(CTL) (${name})" "${TRUSTEDR}/${name}.sst" "${name}.sst" "" 0
!macroend
Function DownloadRoots
${DetailPrint} "$(Downloading)$(CTL)..."
!insertmacro _DownloadSST authroots
!insertmacro _DownloadSST delroots
!insertmacro _DownloadSST roots
!insertmacro _DownloadSST updroots
!insertmacro _DownloadSST disallowedcert
FunctionEnd
!macro _InstallRoots state store file
LegacyUpdateNSIS::UpdateRoots ${state} ${store} "${file}"
Pop $0
${If} $0 != 0
LegacyUpdateNSIS::MessageForHresult $0
Pop $1
StrCpy $2 "$(CTL) (${file})"
MessageBox MB_USERICON "$(MsgBoxInstallFailed)" /SD IDOK
SetErrorLevel $0
Abort
${EndIf}
!macroend
Function UpdateRoots
${DetailPrint} "$(Installing)$(CTL)..."
!insertmacro _InstallRoots /update AuthRoot authroots.sst
!insertmacro _InstallRoots /update AuthRoot updroots.sst
!insertmacro _InstallRoots /update Root roots.sst
!insertmacro _InstallRoots /delete AuthRoot delroots.sst
!insertmacro _InstallRoots /update Disallowed disallowedcert.sst
WriteRegStr HKLM "${REGPATH_COMPONENTS}\${ROOTSUPDATE_GUID}" "" "RootsUpdate"
WriteRegDword HKLM "${REGPATH_COMPONENTS}\${ROOTSUPDATE_GUID}" "IsInstalled" 1
WriteRegStr HKLM "${REGPATH_COMPONENTS}\${ROOTSUPDATE_GUID}" "Version" "1337,0,2195,0"
WriteRegStr HKLM "${REGPATH_COMPONENTS}\${ROOTSUPDATE_GUID}" "Locale" "*"
WriteRegStr HKLM "${REGPATH_COMPONENTS}\${ROOTSUPDATE_GUID}" "ComponentID" "Windows Roots Update"
LegacyUpdateNSIS::SetRootsUpdateTime
FunctionEnd
================================================
FILE: setup/Win32.nsh
================================================
; advapi32
!define GetUserName 'advapi32::GetUserName(t, *i) i'
; cbscore
!define CBS_EXECUTE_STATE_NONE -1 ; Officially -1 in cbscore.dll, but underflows in the registry.
!define CBS_EXECUTE_STATE_NONE2 0xffffffff ; We can get one or the other depending on the OS.
; kernel32
!define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
!define ES_CONTINUOUS 0x80000000
!define ES_SYSTEM_REQUIRED 0x00000001
!define GetVersion 'kernel32::GetVersion() i'
!define GetVersionEx 'kernel32::GetVersionEx(pr) i'
!define IsProcessorFeaturePresent 'kernel32::IsProcessorFeaturePresent(i) i'
!define SetThreadExecutionState 'kernel32::SetThreadExecutionState(i) i'
!define OpenEvent 'kernel32::OpenEvent(i, i, t) i'
!define OpenMutex 'kernel32::OpenMutex(i, i, t) i'
!define CreateMutex 'kernel32::CreateMutex(i, i, t) i'
!define SetEvent 'kernel32::SetEvent(i) i'
!define CloseHandle 'kernel32::CloseHandle(i) i'
!define DeleteFile 'kernel32::DeleteFile(t) i'
!define TermsrvAppInstallMode 'kernel32::TermsrvAppInstallMode() i'
!define SetTermsrvAppInstallMode 'kernel32::SetTermsrvAppInstallMode(i) i'
!define SetEnvironmentVariable 'kernel32::SetEnvironmentVariable(t, t) i'
; ntdll
!define RtlGetNtVersionNumbers 'ntdll::RtlGetNtVersionNumbers(*i, *i, *i)'
; shell32
!define RestartDialog 'shell32::RestartDialog(p, t, i) i'
; user32
!define EWX_REBOOT 0x02
!define PBS_SMOOTH 0x02
!define PBS_MARQUEE 0x08
!define GetSystemMetrics 'user32::GetSystemMetrics(i) i'
; winhttp
!define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1 0x00000080
!define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 0x00000200
!define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2 0x00000800
; wininet
!define INTERNET_FLAG_RELOAD 0x80000000
!define INTERNET_FLAG_NO_CACHE_WRITE 0x04000000
!define INTERNET_FLAG_KEEP_CONNECTION 0x00400000
!define INTERNET_FLAG_NO_COOKIES 0x00080000
!define INTERNET_FLAG_NO_UI 0x00000200
!define SECURITY_FLAG_STRENGTH_STRONG 0x20000000
!define ERROR_INTERNET_NAME_NOT_RESOLVED 12007
!define ERROR_INTERNET_OPERATION_CANCELLED 12017
; winlogon
!define SETUP_TYPE_NORMAL 0
!define SETUP_TYPE_NOREBOOT 2
!define SETUP_SHUTDOWN_REBOOT 1
; wuapi
!define WU_S_ALREADY_INSTALLED 2359302 ; 0x00240006
!define WU_E_NOT_APPLICABLE -2145124329 ; 0x80240017
!define WU_MU_SERVICE_ID "7971f918-a847-4430-9279-4a52d1efe18d"
================================================
FILE: setup/WinVer.nsh
================================================
; NSIS WinVer.nsh rewritten to work more like what I expect.
!include LogicLib.nsh
!include Util.nsh
; Defines
!define OSVERSIONINFOW_SIZE 276
!define OSVERSIONINFOEXW_SIZE 284
!define WINVER_NT4 0x0400 ; 4.0.1381
!define WINVER_2000 0x0500 ; 5.0.2195
!define WINVER_XP 0x0501 ; 5.1.2600
!define WINVER_XP2002 0x0501 ; 5.1.2600
!define WINVER_XP2003 0x0502 ; 5.2.3790
!define WINVER_VISTA 0x0600 ; 6.0.6000
!define WINVER_7 0x0601 ; 6.1.7600
!define WINVER_8 0x0602 ; 6.2.9200
!define WINVER_8.1 0x0603 ; 6.3.9600
!define WINVER_10TP 0x0604 ; 6.4.9841-9883
!define WINVER_10 0x0A00 ; 10.0.10240
!define WINVER_SERVER_2000 ${WINVER_2000}
!define WINVER_SERVER_2003 ${WINVER_XP2003}
!define WINVER_SERVER_2003R2 ${WINVER_XP2003}
!define WINVER_SERVER_2008 ${WINVER_VISTA}
!define WINVER_SERVER_2008R2 ${WINVER_7}
!define WINVER_SERVER_2012 ${WINVER_8}
!define WINVER_SERVER_2012R2 ${WINVER_8.1}
!define WINVER_SERVER_2016 ${WINVER_10}
!define WINVER_BUILD_NT4 1381
!define WINVER_BUILD_2000 2195
!define WINVER_BUILD_XP2002 2600
!define WINVER_BUILD_XP2003 3790
!define WINVER_BUILD_VISTA 6000
!define WINVER_BUILD_VISTA_SP1 6001
!define WINVER_BUILD_VISTA_SP2 6002
!define WINVER_BUILD_VISTA_ESU 6003
!define WINVER_BUILD_7 7600
!define WINVER_BUILD_7_SP1 7601
!define WINVER_BUILD_8 9200
!define WINVER_BUILD_8.1 9600
!define WINVER_BUILD_10 10240
!define WINVER_BUILD_11 22000
!define /ifndef VER_NT_WORKSTATION 1
!define VER_SUITE_BACKOFFICE 0x00000004 ; Microsoft BackOffice
!define VER_SUITE_BLADE 0x00000400 ; Windows Server 2003, Web Edition
!define VER_SUITE_COMPUTE_SERVER 0x00004000 ; Windows Server 2003, Compute Cluster Edition
!define VER_SUITE_DATACENTER 0x00000080 ; Windows Server Datacenter
!define VER_SUITE_ENTERPRISE 0x00000002 ; Windows Server Enterprise
!define VER_SUITE_EMBEDDEDNT 0x00000040 ; Windows Embedded
!define VER_SUITE_PERSONAL 0x00000200 ; Windows Home Edition
!define VER_SUITE_SINGLEUSERTS 0x00000100 ; Single-user Remote Desktop
!define VER_SUITE_SMALLBUSINESS 0x00000001 ; Small Business Server
!define VER_SUITE_SMALLBUSINESS_RESTRICTED 0x00000020 ; Small Business Server (restrictive client license)
!define VER_SUITE_STORAGE_SERVER 0x00002000 ; Windows Storage Server 2003
!define VER_SUITE_TERMINAL 0x00000010 ; Terminal Services (always true since XP)
!define VER_SUITE_WH_SERVER 0x00008000 ; Windows Home Server
!define VER_SUITE_MULTIUSERTS 0x00020000 ; Multi-user Remote Desktop
!define SM_CLEANBOOT 67
; Init
!macro __WinVer_Init
!ifndef __WINVER_VARS_DECLARED
!define __WINVER_VARS_DECLARED
Var /GLOBAL __WINVEROS
Var /GLOBAL __WINVERBUILD
Var /GLOBAL __WINVERSP
!endif
StrCmp $__WINVEROS "" _winver_noveryet
Return
_winver_noveryet:
GetWinVer $__WINVEROS NTDDIMajMin
GetWinVer $__WINVERBUILD Build
GetWinVer $__WINVERSP ServicePack
!macroend
!macro __WinVer_InitEx
!ifndef __WINVER_VARS_DECLARED_EX
!define __WINVER_VARS_DECLARED_EX
Var /GLOBAL __WINVERSUITE
Var /GLOBAL __WINVERPROD
!endif
StrCmp $__WINVERSUITE "" _winver_noveryet_ex
Return
_winver_noveryet_ex:
Push $0
Push $1
Push $2
System::Alloc ${OSVERSIONINFOEXW_SIZE}
Pop $0
System::Call '*$0(i ${OSVERSIONINFOEXW_SIZE})'
System::Call '${GetVersionEx}(.r0)'
System::Call '*$0(i, i, i, i, i, &t128, h, h, h .r1, b .r2, b)'
System::Free $0
StrCpy $__WINVERSUITE $1
StrCpy $__WINVERPROD $2
Pop $2
Pop $1
Pop $0
!macroend
; Tests
!macro __WinVer_TestOS op num _t _f
${CallArtificialFunction} __WinVer_Init
!insertmacro _${op} $__WINVEROS ${num} `${_t}` `${_f}`
!macroend
!macro __WinVer_TestBuild op num _t _f
${CallArtificialFunction} __WinVer_Init
!insertmacro _${op} $__WINVERBUILD ${num} `${_t}` `${_f}`
!macroend
!macro __WinVer_TestSP op num _t _f
${CallArtificialFunction} __WinVer_Init
!insertmacro _${op} $__WINVERSP ${num} `${_t}` `${_f}`
!macroend
!macro __WinVer_TestSuite _a num _t _f
!insertmacro _LOGICLIB_TEMP
${CallArtificialFunction} __WinVer_InitEx
IntOp $_LOGICLIB_TEMP $__WINVERSUITE & ${num}
!insertmacro _= $_LOGICLIB_TEMP ${num} `${_t}` `${_f}`
!macroend
!macro __WinVer_TestProduct op num _t _f
${CallArtificialFunction} __WinVer_InitEx
!insertmacro _${op} $__WINVERPROD ${num} `${_t}` `${_f}`
!macroend
!macro __WinVer_TestSystemMetric op metric _t _f
!insertmacro _LOGICLIB_TEMP
${CallArtificialFunction} __WinVer_Init
System::Call '${GetSystemMetrics}(${metric}) .s'
Pop $_LOGICLIB_TEMP
!insertmacro _${op} $_LOGICLIB_TEMP 0 `${_t}` `${_f}`
!macroend
!macro __WinVer_TestXPWPAEdition _a key _t _f
!insertmacro _LOGICLIB_TEMP
ReadRegDword $_LOGICLIB_TEMP HKLM "${REGPATH_WPA}\${key}" "Installed"
!insertmacro _= $_LOGICLIB_TEMP 1 `${_t}` `${_f}`
!macroend
; Defines
; TODO: This is apparently insufficient prior to NT4 SP6?
!define IsClientOS `= _WinVer_TestProduct ${VER_NT_WORKSTATION}`
!define IsServerOS `!= _WinVer_TestProduct ${VER_NT_WORKSTATION}`
!define IsHomeEdition `"" _WinVer_TestSuite ${VER_SUITE_PERSONAL}`
!define IsEmbedded `"" _WinVer_TestSuite ${VER_SUITE_EMBEDDEDNT}`
!define IsDatacenter `"" _WinVer_TestSuite ${VER_SUITE_DATACENTER}`
!define IsTerminalServer `"" _WinVer_TestSuite ${VER_SUITE_TERMINAL}`
!define IsHomeServer `"" _WinVer_TestSuite ${VER_SUITE_WH_SERVER}`
!define IsSafeMode `!= _WinVer_TestSystemMetric ${SM_CLEANBOOT}`
!define IsServicePack `= _WinVer_TestSP`
!define AtLeastServicePack `>= _WinVer_TestSP`
!define AtMostServicePack `<= _WinVer_TestSP`
!macro __WinVer_DefineClient os
!define IsWin${os} `= _WinVer_TestOS ${WINVER_${os}}`
!define AtLeastWin${os} `>= _WinVer_TestOS ${WINVER_${os}}`
!define AtMostWin${os} `<= _WinVer_TestOS ${WINVER_${os}}`
!macroend
!macro __WinVer_DefineServer os
!define IsWin${os} `= _WinVer_TestOS ${WINVER_SERVER_${os}}`
!define AtLeastWin${os} `>= _WinVer_TestOS ${WINVER_SERVER_${os}}`
!define AtMostWin${os} `<= _WinVer_TestOS ${WINVER_SERVER_${os}}`
!macroend
!macro __WinVer_DefineBuild os
!define IsWin${os} `= _WinVer_TestBuild ${WINVER_BUILD_${os}}`
!define AtLeastWin${os} `>= _WinVer_TestBuild ${WINVER_BUILD_${os}}`
!define AtMostWin${os} `<= _WinVer_TestBuild ${WINVER_BUILD_${os}}`
!macroend
!macro __WinVer_DefineXPWPAEdition key
!define IsWinXP${key} `= _WinVer_TestXPWPAEdition ${key}`
!macroend
!insertmacro __WinVer_DefineClient NT4
!insertmacro __WinVer_DefineClient 2000
!insertmacro __WinVer_DefineClient XP2002
!insertmacro __WinVer_DefineClient XP2003
!insertmacro __WinVer_DefineClient Vista
!insertmacro __WinVer_DefineClient 7
!insertmacro __WinVer_DefineClient 8
!insertmacro __WinVer_DefineClient 8.1
!insertmacro __WinVer_DefineClient 10
!insertmacro __WinVer_DefineServer 2003
!insertmacro __WinVer_DefineServer 2003R2
!insertmacro __WinVer_DefineServer 2008
!insertmacro __WinVer_DefineServer 2008R2
!insertmacro __WinVer_DefineServer 2012
!insertmacro __WinVer_DefineServer 2012R2
!insertmacro __WinVer_DefineServer 2016
!insertmacro __WinVer_DefineBuild 11
!insertmacro __WinVer_DefineXPWPAEdition MediaCenter
!insertmacro __WinVer_DefineXPWPAEdition TabletPC
!insertmacro __WinVer_DefineXPWPAEdition WES
!insertmacro __WinVer_DefineXPWPAEdition POSReady
================================================
FILE: setup/codebase/lucontrl.ddf
================================================
.Set CabinetNameTemplate=lucontrl.cab
.Set CompressionType=MSZIP
.Set CompressionLevel=7
.Set InfFileName=lucontrl_layout.inf
.Set MaxDiskSize=CDROM
.Set ReservePerCabinetSize=6144
.Set InfCabinetLineFormat=*cab#*=Application Source Media,*cabfile*,0
.Set Compress=on
.Set CompressionMemory=21
.Set DiskDirectoryTemplate=
.Set Cabinet=ON
.Set MaxCabinetSize=999999999
.Set InfDiskHeader=
.Set InfDiskLineFormat=
.Set InfCabinetHeader=[SourceDisksNames]
.Set InfFileHeader=
.Set InfFileHeader1=[SourceDisksFiles]
.Set InfFileLineFormat=*file*=*cab#*,,*size*,*csum*
setup.inf
setup.exe
================================================
FILE: setup/codebase/setup.inf
================================================
[Version]
Signature="$CHICAGO$"
AdvancedINF=2.0
[Setup Hooks]
setup=setup
[setup]
run="%EXTRACT_DIR%\setup.exe" /activex
================================================
FILE: setup/codebase/test.html
================================================
================================================
FILE: setup/patches/.gitignore
================================================
# Only commit redists
**/*
!.gitignore
!redist
!redist/**/*
================================================
FILE: setup/resource.c
================================================
void DllMain() {}
================================================
FILE: setup/resource.h
================================================
// Root dialog
#define IDD_INST 105
#define IDC_BACK 3
#define IDC_CHILDRECT 1018
#define IDC_VERSTR 1028
// Common
#define IDC_INTROTEXT 1006
#define IDC_EDIT1 1000
// License
#define IDD_LICENSE 102
#define IDC_LICENSEAGREE 1034
#define IDC_LICENSEDISAGREE 1035
// License - radio buttons
#define IDD_LICENSE_FSRB 108
// License - checkbox
#define IDD_LICENSE_FSCB 109
// Directory
#define IDD_DIR 103
#define IDC_DIR 1019
#define IDC_BROWSE 1001
#define IDC_CHECK1 1008
#define IDC_SELDIRTEXT 1020
#define IDC_SPACEREQUIRED 1023
#define IDC_SPACEAVAILABLE 1024
// Components
#define IDD_SELCOM 104
#define IDC_TREE1 1032
#define IDC_COMBO1 1017
#define IDC_TEXT1 1021
#define IDC_TEXT2 1022
// Install files
#define IDD_INSTFILES 106
#define IDC_LIST1 1016
#define IDC_PROGRESS 1004
#define IDC_SHOWDETAILS 1027
// Uninstall
#define IDD_UNINST 107
#define IDC_UNINSTFROM 1029
// Verifying
#define IDD_VERIFY 111
#define IDI_ICON2 103
#define IDC_STR 1030
================================================
FILE: setup/resource.rc
================================================
#include "resource.h"
#include
#include
#define OUTER_WIDTH 363
#define OUTER_HEIGHT 246
#define INNER_LEFT 25
#define INNER_WIDTH 325
#define INNER_HEIGHT 131
#define INNER_WIDTH_ALIGNED INNER_WIDTH - 12
/////////////////////////////////////////////////////////////////////////////
// English (United States) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(65001)
/////////////////////////////////////////////////////////////////////////////
//
// Dialogs
//
IDD_INST DIALOGEX 0, 0, OUTER_WIDTH, OUTER_HEIGHT
STYLE DS_SHELLFONT | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_WINDOWEDGE | WS_EX_APPWINDOW
CAPTION "Template"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
// Bottom divider
LTEXT "", 6900, 0, OUTER_HEIGHT - 26, OUTER_WIDTH + 2, 1, SS_ETCHEDHORZ | WS_CHILD | WS_GROUP
// Bottom background
LTEXT "", 6901, 0, OUTER_HEIGHT - 25, OUTER_WIDTH, 25, WS_CHILD | WS_GROUP
// Buttons
PUSHBUTTON "Back", IDABORT, OUTER_WIDTH - 148, OUTER_HEIGHT - 20, 45, 14, BS_PUSHBUTTON | WS_GROUP | WS_TABSTOP
PUSHBUTTON "Next", IDOK, OUTER_WIDTH - 102, OUTER_HEIGHT - 20, 45, 14, BS_PUSHBUTTON | WS_TABSTOP
PUSHBUTTON "Cancel", IDCANCEL, OUTER_WIDTH - 52, OUTER_HEIGHT - 20, 45, 14, BS_PUSHBUTTON | WS_TABSTOP
// Branding
LTEXT "Branding", IDC_VERSTR, INNER_LEFT, OUTER_HEIGHT - 17, OUTER_WIDTH - 183, 11, WS_DISABLED
// Inner content
LTEXT "", IDC_CHILDRECT, INNER_LEFT, 75, INNER_WIDTH, INNER_HEIGHT, SS_BLACKRECT | WS_GROUP | NOT WS_VISIBLE
// Title
LTEXT "Title", 1037, INNER_LEFT, 52, INNER_WIDTH, 36, 0
// Top divider
LTEXT "", 1047, 0, 40, OUTER_WIDTH + 2, 1, SS_ETCHEDHORZ | WS_CHILD | WS_GROUP
// Banner
LTEXT "", 1046, 0, 0, OUTER_WIDTH, 40, SS_BITMAP | WS_CHILD
END
IDD_LICENSE DIALOGEX 0, 0, INNER_WIDTH, INNER_HEIGHT
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CAPTION
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
// Unused
CONTROL "", IDC_EDIT1, "RichEdit20W", ES_MULTILINE | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 0, 0, 0, 0
END
IDD_DIR DIALOGEX 0, 0, INNER_WIDTH, INNER_HEIGHT
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
// Unused
EDITTEXT IDC_DIR, 0, 0, 0, 0, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
PUSHBUTTON "", IDC_BROWSE, 0, 0, 0, 0, BS_PUSHBUTTON | WS_TABSTOP
END
IDD_SELCOM DIALOGEX 0, 0, INNER_WIDTH, INNER_HEIGHT
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
// Intro text
LTEXT "Text\nText\nText", IDC_INTROTEXT, 0, 0, INNER_WIDTH, 31, 0
// Selection
CONTROL "", IDC_TREE1, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_DISABLEDRAGDROP | WS_BORDER | WS_TABSTOP, 0, 32, INNER_WIDTH_ALIGNED, 60
// Description
LTEXT "", 1043, 0, 99, INNER_WIDTH, 32, 0
// Unused
COMBOBOX IDC_COMBO1, 0, 0, 0, 0, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | NOT WS_VISIBLE
END
IDD_INSTFILES DIALOGEX 0, 0, INNER_WIDTH, INNER_HEIGHT
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
// Show details
PUSHBUTTON "", IDC_SHOWDETAILS, 0, 33, 60, 14, BS_PUSHBUTTON
// Progress
CONTROL "", IDC_PROGRESS, "msctls_progress32", WS_BORDER, 0, 16, INNER_WIDTH_ALIGNED, 10
// Intro text
LTEXT "", IDC_INTROTEXT, 0, 0, INNER_WIDTH, 16, SS_LEFTNOWORDWRAP | SS_NOPREFIX
// Details list
CONTROL "", IDC_LIST1, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP | NOT WS_VISIBLE, 0, 33, INNER_WIDTH_ALIGNED, INNER_HEIGHT - 34
END
IDD_UNINST DIALOGEX 0, 0, INNER_WIDTH, INNER_HEIGHT
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
// Uninstall path label
LTEXT "", IDC_UNINSTFROM, 0, 42, 65, 8, 0
// Uninstall path
EDITTEXT IDC_EDIT1, 70, 40, INNER_WIDTH_ALIGNED - 79, 12, ES_AUTOHSCROLL | ES_READONLY | WS_BORDER | WS_TABSTOP
// Intro text
LTEXT "", IDC_INTROTEXT, 0, 0, INNER_WIDTH, 30, 0
END
IDD_LICENSE_FSRB DIALOGEX 0, 0, INNER_WIDTH, INNER_HEIGHT
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CAPTION
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
// Unused
CONTROL "", IDC_EDIT1, "RichEdit20W", ES_MULTILINE | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 0, 0, 0, 0
PUSHBUTTON "", IDC_LICENSEAGREE, 0, 0, 0, 0, BS_AUTORADIOBUTTON | WS_TABSTOP
PUSHBUTTON "", IDC_LICENSEDISAGREE, 0, 0, 0, 0, BS_AUTORADIOBUTTON | WS_TABSTOP
END
IDD_LICENSE_FSCB DIALOGEX 0, 0, INNER_WIDTH, INNER_HEIGHT
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CAPTION
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
// Unused
CONTROL "", IDC_EDIT1, "RichEdit20W", ES_MULTILINE | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 0, 0, 0, 0
PUSHBUTTON "", IDC_LICENSEAGREE, 0, 0, 0, 0, BS_AUTOCHECKBOX | WS_TABSTOP
END
IDD_VERIFY DIALOGEX 0, 0, 167, 43
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
// Status
CTEXT "", IDC_STR, 40, 26, 120, 10, 0
// Icon
ICON IDI_ICON2, -1, 10, 11, 21, 20, 0
// Loading text
CTEXT "Please wait while Setup is loading...", 76, 40, 10, 120, 16, 0
END
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////
================================================
FILE: setup/setup-nt4.nsi
================================================
!include Constants.nsh
Name "${NAME}"
Caption "${NAME}"
BrandingText "${NAME} ${VERSION} - ${DOMAIN}"
OutFile "LegacyUpdateNT-${VERSION}.exe"
InstallDir "$PROGRAMFILES32\Legacy Update"
InstallDirRegKey HKLM "${REGPATH_LEGACYUPDATE_SETUP}" "InstallLocation"
Unicode true
RequestExecutionLevel admin
AutoCloseWindow true
ManifestSupportedOS all
ManifestDPIAware true
AllowSkipFiles off
SetCompressor /SOLID lzma
VIAddVersionKey /LANG=1033 "ProductName" "${NAME}"
VIAddVersionKey /LANG=1033 "ProductVersion" "${LONGVERSION}"
VIAddVersionKey /LANG=1033 "CompanyName" "Hashbang Productions"
VIAddVersionKey /LANG=1033 "LegalCopyright" "${U+00A9} Hashbang Productions. All rights reserved."
VIAddVersionKey /LANG=1033 "FileDescription" "${NAME}"
VIAddVersionKey /LANG=1033 "FileVersion" "${LONGVERSION}"
VIProductVersion ${LONGVERSION}
VIFileVersion ${LONGVERSION}
ReserveFile "${NSIS_TARGET}\System.dll"
ReserveFile "${NSIS_TARGET}\NSxfer.dll"
ReserveFile "${NSIS_TARGET}\LegacyUpdateNSIS.dll"
ReserveFile "banner-wordmark-nt4.bmp"
ReserveFile "banner-wordmark-nt4-low.bmp"
ReserveFile "PatchesNT4.ini"
!define RUNONCEDIR "$COMMONPROGRAMDATA\Legacy Update"
!define MUI_UI "obj\resource.dll"
!define MUI_UI_HEADERIMAGE "obj\resource.dll"
!define MUI_COMPONENTSPAGE_CHECKBITMAP "${NSISDIR}\Contrib\Graphics\Checks\classic.bmp"
!define MUI_CUSTOMFUNCTION_ABORT CleanUp
!define MUI_ICON "..\LegacyUpdate\icon.ico"
!define MUI_UNICON "..\LegacyUpdate\icon.ico"
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "banner-wordmark-nt4.bmp"
!define MUI_HEADERIMAGE_UNBITMAP "banner-wordmark-nt4.bmp"
!define MUI_TEXT_ABORT_TITLE "Installation Failed"
!define MEMENTO_REGISTRY_ROOT HKLM
!define MEMENTO_REGISTRY_KEY "${REGPATH_LEGACYUPDATE_SETUP}"
!include FileFunc.nsh
!include Integration.nsh
!include LogicLib.nsh
!include Memento.nsh
!include MUI2.nsh
!include nsDialogs.nsh
!include Sections.nsh
!include Win\COM.nsh
!include Win\WinError.nsh
!include Win\WinNT.nsh
!include WinCore.nsh
!include WinMessages.nsh
!include WinVer.nsh
!include WordFunc.nsh
!include x64.nsh
!include Win32.nsh
!include Common.nsh
!include PatchInstall.nsh
!include RunOnce.nsh
!include AeroWizard.nsh
!include DownloadIE.nsh
!include DownloadNT4.nsh
!include UpdateRoots.nsh
!insertmacro GetParameters
!insertmacro GetOptions
!define MUI_PAGE_HEADER_TEXT "$(ComponentsPageTitle)"
!define MUI_COMPONENTSPAGE_TEXT_TOP "$(ComponentsPageText)"
!define MUI_PAGE_CUSTOMFUNCTION_PRE ComponentsPageCheck
!define MUI_PAGE_CUSTOMFUNCTION_SHOW OnShow
!define MUI_PAGE_FUNCTION_GUIINIT OnShow
!insertmacro MUI_PAGE_COMPONENTS
!define MUI_PAGE_HEADER_TEXT "$(InstFilesPageTitle)"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW OnShow
!insertmacro MUI_PAGE_INSTFILES
!include Strings.nsh
Function OnShow
Call AeroWizardOnShow
FunctionEnd
Section -BeforeInstall
!insertmacro InhibitSleep 1
SectionEnd
Section -PreDownload
${IfNot} ${IsRunOnce}
${AndIfNot} ${IsPostInstall}
Call PreDownload
${EndIf}
SectionEnd
Section - PREREQS_START
SectionEnd
SectionGroup /e "$(SectionWDU)" NT4WDU
${MementoSection} "$(SectionWDUYes)" NT4WDUYes
; No-op; used during IE5.5 install
${MementoSectionEnd}
${MementoSection} "$(SectionWDUNo)" NT4WDUNo
; No-op; used during IE5.5 install
${MementoSectionEnd}
SectionGroupEnd
SectionGroup /e "Windows NT 4.0 $(Updates)" NT4Updates
Section "Windows NT 4.0 $(SP) 6a" NT4SP6A
SectionIn Ro
Call InstallNT4SP6A ; SP6I386
Call RebootIfRequired
SectionEnd
Section "Windows NT 4.0 $(SRP)" NT4ROLLUP
SectionIn Ro
Call InstallNT4Rollup ; Q299444
SectionEnd
Section "Windows NT 4.0 $(PostSP) 6a $(Updates)" NT4POSTSP
SectionIn Ro
; Workstation/Server
Call InstallKB243649
Call InstallKB304158
Call InstallKB314147
Call InstallKB318138
Call InstallKB320206
Call InstallKB326830
Call InstallKB329115
Call InstallKB810833
Call InstallKB815021
Call InstallKB817606
Call InstallKB819696
; Server-only
Call InstallKB823182
Call InstallKB823803
Call InstallKB824105
Call InstallKB824141
Call InstallKB824146
Call InstallKB825119
Call InstallKB828035
Call InstallKB828741
Call InstallNT4KB835732
Call InstallKB839645
Call InstallKB841533
Call InstallKB841872
Call InstallKB870763
Call InstallKB873339
Call InstallKB873350
Call InstallKB885249
Call InstallKB885834
Call InstallKB885835
Call InstallKB885836
Call InstallKB891711
Call RebootIfRequired
SectionEnd
SectionGroupEnd
SectionGroup /e "$(Runtimes)" NT4Runtimes
${MementoSection} "$(MSI)" NT4MSI
Call InstallMSI
${MementoSectionEnd}
${MementoSection} "Microsoft $(VC) and $(VB) $(Runtimes)" NT4VCRT
Call InstallNT4VCRT
Call InstallNT4VB6
Call InstallNT4MFCOLE
${MementoSectionEnd}
${MementoSection} "$(IE) 6.0 $(SP) 1" NT4IE6SP1
Call InstallIE6
Call RebootIfRequired
${MementoSectionEnd}
${MementoSection} "$(WMP) 6.4" NT4WMP64
Call InstallNT4WMP64
${MementoSectionEnd}
${MementoSection} "$(DX) 5 $(Unofficial)" NT4DX5
Call InstallNT4DX5
${MementoSectionEnd}
SectionGroupEnd
${MementoSection} "$(SectionRootCerts)" ROOTCERTS
Call ConfigureCrypto
${IfNot} ${IsPostInstall}
Call UpdateRoots
${EndIf}
${MementoSectionEnd}
${MementoSection} "$(SectionNT4USB)" NT4USB
Call InstallNT4USB
${MementoSectionEnd}
${MementoUnselectedSection} "$(SectionSPCleanup)" SPCLEANUP
Call CleanUpSPUninstall
${MementoSectionEnd}
Section - PREREQS_END
SectionEnd
${MementoSectionDone}
!macro DESCRIPTION_STRING section
!insertmacro MUI_DESCRIPTION_TEXT ${${section}} "$(Section${section}Desc)"
!macroend
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro DESCRIPTION_STRING NT4WDU
!insertmacro DESCRIPTION_STRING NT4WDUYes
!insertmacro DESCRIPTION_STRING NT4WDUNo
!insertmacro DESCRIPTION_STRING NT4SP6A
!insertmacro DESCRIPTION_STRING NT4ROLLUP
!insertmacro DESCRIPTION_STRING NT4POSTSP
!insertmacro DESCRIPTION_STRING NT4MSI
!insertmacro DESCRIPTION_STRING NT4VCRT
!insertmacro DESCRIPTION_STRING NT4IE6SP1
!insertmacro DESCRIPTION_STRING NT4WMP64
!insertmacro DESCRIPTION_STRING NT4DX5
!insertmacro DESCRIPTION_STRING ROOTCERTS
!insertmacro DESCRIPTION_STRING SPCLEANUP
!insertmacro MUI_FUNCTION_DESCRIPTION_END
Function .onInit
Call InitChecks
${MementoSectionRestore}
SetOutPath $PLUGINSDIR
File Patches.ini
SetOutPath "${RUNONCEDIR}"
FunctionEnd
Function ComponentsPageCheck
; Skip the page if we're being launched with /runonce, /postinstall, or /passive
${If} ${IsRunOnce}
${OrIf} ${IsPostInstall}
${OrIf} ${IsPassive}
Abort
${EndIf}
FunctionEnd
Function PreDownload
${If} ${SectionIsSelected} ${SPCLEANUP}
StrCpy $SPCleanup 1
${EndIf}
${If} ${SectionIsSelected} ${NT4IE6SP1}
Call DownloadIE6
${EndIf}
${If} ${SectionIsSelected} ${ROOTCERTS}
Call DownloadRoots
${EndIf}
FunctionEnd
Function PostInstall
MessageBox MB_OK|MB_USERICON \
"$(MsgBoxNT4PostInstall)" \
/SD IDOK
FunctionEnd
Function CleanUp
; Called only after all tasks have completed
Call CleanUpRunOnce
!insertmacro InhibitSleep 0
${If} ${IsRunOnce}
Call OnRunOnceDone
${Else}
${If} ${IsPostInstall}
${OrIfNot} ${RebootFlag}
Call CleanUpRunOnceFinal
${EndIf}
${EndIf}
FunctionEnd
Function .onInstSuccess
${MementoSectionSave}
; Reboot now if we need to. Nothing further in this function will be run if we do need to reboot.
Call RebootIfRequired
; If we're done, launch the update site
Call PostInstall
Call CleanUp
FunctionEnd
Function .onInstFailed
${MementoSectionSave}
Call CleanUp
FunctionEnd
Function .onSelChange
; Nothing for now
FunctionEnd
================================================
FILE: setup/setup.nsi
================================================
!include Constants.nsh
Name "${NAME}"
Caption "${NAME}"
BrandingText "${NAME} ${VERSION} - ${DOMAIN}"
OutFile "LegacyUpdate-${VERSION}.exe"
InstallDir "$PROGRAMFILES64\Legacy Update"
InstallDirRegKey HKLM "${REGPATH_LEGACYUPDATE_SETUP}" "InstallLocation"
Unicode true
RequestExecutionLevel admin
AutoCloseWindow true
ManifestSupportedOS all
ManifestDPIAware true
AllowSkipFiles off
!if ${DEBUG} == 1
SetCompress off
!else
SetCompressor /SOLID lzma
!endif
VIAddVersionKey /LANG=1033 "ProductName" "${NAME}"
VIAddVersionKey /LANG=1033 "ProductVersion" "${LONGVERSION}"
VIAddVersionKey /LANG=1033 "CompanyName" "Hashbang Productions"
VIAddVersionKey /LANG=1033 "LegalCopyright" "${U+00A9} Hashbang Productions. All rights reserved."
VIAddVersionKey /LANG=1033 "FileDescription" "${NAME}"
VIAddVersionKey /LANG=1033 "FileVersion" "${LONGVERSION}"
VIProductVersion ${LONGVERSION}
VIFileVersion ${LONGVERSION}
ReserveFile "${NSIS_TARGET}\System.dll"
ReserveFile "${NSIS_TARGET}\NSxfer.dll"
ReserveFile "${NSIS_TARGET}\LegacyUpdateNSIS.dll"
ReserveFile "banner-wordmark-classic.bmp"
ReserveFile "Patches.ini"
ReserveFile "..\LegacyUpdate\obj\LegacyUpdate32.dll"
ReserveFile "..\LegacyUpdate\obj\LegacyUpdate64.dll"
ReserveFile "..\launcher\obj\LegacyUpdate32.exe"
ReserveFile "..\launcher\obj\LegacyUpdate64.exe"
Var /GLOBAL UninstallInstalled
!define RUNONCEDIR "$COMMONPROGRAMDATA\Legacy Update"
!define MUI_UI "obj\resource.dll"
!define MUI_UI_HEADERIMAGE "obj\resource.dll"
!define MUI_CUSTOMFUNCTION_UNGUIINIT un.OnShow
!define MUI_CUSTOMFUNCTION_ABORT CleanUp
!define MUI_ICON "..\LegacyUpdate\icon.ico"
!define MUI_UNICON "..\LegacyUpdate\icon_small.ico"
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "banner-wordmark-classic.bmp"
!define MUI_HEADERIMAGE_UNBITMAP "banner-wordmark-classic.bmp"
!define MUI_TEXT_ABORT_TITLE "Installation Failed"
!define MEMENTO_REGISTRY_ROOT HKLM
!define MEMENTO_REGISTRY_KEY "${REGPATH_LEGACYUPDATE_SETUP}"
!include FileFunc.nsh
!include Integration.nsh
!include LogicLib.nsh
!include Memento.nsh
!include MUI2.nsh
!include nsDialogs.nsh
!include Sections.nsh
!include Win\COM.nsh
!include Win\WinError.nsh
!include Win\WinNT.nsh
!include WinCore.nsh
!include WinMessages.nsh
!include WinVer.nsh
!include WordFunc.nsh
!include x64.nsh
!include Win32.nsh
!include Common.nsh
!include PatchInstall.nsh
!include RunOnce.nsh
!include AeroWizard.nsh
!include Download2KXP.nsh
!include DownloadIE.nsh
!include DownloadVista78.nsh
!include UpdateRoots.nsh
; !include ActiveXPage.nsh
!include RebootPage.nsh
!insertmacro GetParameters
!insertmacro GetOptions
!define MUI_PAGE_HEADER_TEXT "$(ComponentsPageTitle)"
!define MUI_COMPONENTSPAGE_TEXT_TOP "$(ComponentsPageText)"
!define MUI_PAGE_CUSTOMFUNCTION_PRE ComponentsPageCheck
!define MUI_PAGE_CUSTOMFUNCTION_SHOW OnShow
!define MUI_PAGE_FUNCTION_GUIINIT OnShow
!define MUI_CUSTOMFUNCTION_ONMOUSEOVERSECTION OnMouseOverSection
!insertmacro MUI_PAGE_COMPONENTS
; Page custom ActiveXPage
!define MUI_PAGE_HEADER_TEXT "$(InstFilesPageTitle)"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW OnShow
!insertmacro MUI_PAGE_INSTFILES
Page custom RebootPage
!define MUI_PAGE_HEADER_TEXT "$(UnConfirmPageTitle)"
!define MUI_UNCONFIRMPAGE_TEXT_TOP "$(UnConfirmPageText)"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW un.OnShow
!insertmacro MUI_UNPAGE_CONFIRM
!define MUI_PAGE_HEADER_TEXT "$(InstFilesPageTitle)"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW un.OnShow
!insertmacro MUI_UNPAGE_INSTFILES
!include Strings.nsh
!macro RestartWUAUService
${DetailPrint} "$(StatusRestartingWUAU)"
LegacyUpdateNSIS::Exec '"$WINDIR\system32\net.exe" stop wuauserv'
!macroend
Function OnShow
Call AeroWizardOnShow
FunctionEnd
Function un.OnShow
Call un.AeroWizardOnShow
FunctionEnd
Function MakeUninstallEntry
${IfNot} $UninstallInstalled == 1
StrCpy $UninstallInstalled 1
SetOutPath $INSTDIR
WriteUninstaller "$INSTDIR\Uninstall.exe"
; Add uninstall entry
WriteRegStr HKLM "${REGPATH_UNINSTSUBKEY}" "DisplayName" "${NAME}"
WriteRegStr HKLM "${REGPATH_UNINSTSUBKEY}" "DisplayIcon" '"$INSTDIR\LegacyUpdate.exe",-100'
WriteRegStr HKLM "${REGPATH_UNINSTSUBKEY}" "DisplayVersion" "${VERSION}"
WriteRegStr HKLM "${REGPATH_UNINSTSUBKEY}" "Publisher" "${NAME}"
WriteRegStr HKLM "${REGPATH_UNINSTSUBKEY}" "URLInfoAbout" "${WEBSITE}"
WriteRegStr HKLM "${REGPATH_UNINSTSUBKEY}" "InstallLocation" "$INSTDIR"
WriteRegStr HKLM "${REGPATH_UNINSTSUBKEY}" "UninstallString" '"$INSTDIR\Uninstall.exe"'
WriteRegStr HKLM "${REGPATH_UNINSTSUBKEY}" "QuietUninstallString" '"$INSTDIR\Uninstall.exe" /S'
WriteRegDword HKLM "${REGPATH_UNINSTSUBKEY}" "NoModify" 1
WriteRegDword HKLM "${REGPATH_UNINSTSUBKEY}" "NoRepair" 1
${MakeARPInstallDate} $0
WriteRegStr HKLM "${REGPATH_UNINSTSUBKEY}" "InstallDate" $0
${EndIf}
FunctionEnd
Section -BeforeInstall PREREQS_START
!insertmacro InhibitSleep 1
${IfNot} ${IsRunOnce}
${AndIfNot} ${IsPostInstall}
; Download files
Call PreDownload
; If a reboot is pending, do it now
ReadRegDword $0 HKLM "${REGPATH_LEGACYUPDATE_SETUP}" "RebootPending"
${If} $0 == 1
SetRebootFlag true
${RebootIfRequired}
${EndIf}
${IfNot} ${AtLeastWin10}
Call RebootIfCbsRebootPending
${EndIf}
!if ${DEBUG} == 1
${If} ${TestRunOnce}
SetRebootFlag true
${RebootIfRequired}
${EndIf}
!endif
${Else}
; Wait for packages to install if needed
Call PollCbsInstall
${EndIf}
SectionEnd
; Win2k prerequisities
Section "$(IE) 6.0 $(SP) 1" IE6SP1
SectionIn Ro
${RebootIfRequired}
Call InstallIE6
${RebootIfRequired}
SectionEnd
Section "Windows 2000 $(SP) 4" W2KSP4
SectionIn Ro
${RebootIfRequired}
Call InstallW2KSP4
Call InstallW2KUR1
Call FixW2KUR1
${RebootIfRequired}
SectionEnd
; XP 2002 prerequisities
${MementoSection} "Windows XP $(SP) 3" XPSP3
${RebootIfRequired}
${If} ${IsWinXPMediaCenter}
${OrIf} ${IsWinXPTabletPC}
Call InstallXPSP2
${Else}
Call InstallXPSP1a
${EndIf}
${RebootIfRequired}
Call InstallXPSP3
${RebootIfRequired}
${MementoSectionEnd}
${MementoSection} "Windows XP $(EMB) $(SP) 3" XPESP3
${RebootIfRequired}
Call InstallXPESP3
${RebootIfRequired}
${MementoSectionEnd}
${MementoUnselectedSection} "$(SectionWES09)" WES09
${RebootIfRequired}
WriteRegDword HKLM "${REGPATH_POSREADY}" "Installed" 1
; KB2686509 is known to fail due to an edition check when the Embedded version of the update is installed on XP. It
; isn't actually a security fix - it just runs a one-time check and writes a log of bad registry keys. In my opinion,
; this update is pointless, so fake it as installed so it doesn't get offered.
; https://legacyupdate.net/help/kb2686509
WriteRegStr HKLM "${REGPATH_HOTFIX}\KB2686509" "" "http://legacyupdate.net/help/kb2686509"
WriteRegDword HKLM "${REGPATH_HOTFIX}\KB2686509" "Installed" 1
${MementoSectionEnd}
; XP 2003 prerequisities
${MementoSection} "Windows XP/$(SRV) 2003 $(SP) 2" 2003SP2
${RebootIfRequired}
Call Install2003SP2
${RebootIfRequired}
${MementoSectionEnd}
; Vista prerequisities
Section "$(SectionWS2008HVU)" WS2008HVU
SectionIn Ro
${If} ${NeedsPatch} HyperV2008Update
Call InstallKB950050
${RebootIfRequired}
${EndIf}
SectionEnd
Section "Windows Vista $(SP) 2" VISTASP2
SectionIn Ro
${RebootIfRequired}
Call InstallVistaSP1
${RebootIfRequired}
Call InstallVistaSP2
${RebootIfRequired}
SectionEnd
Section "Windows Vista $(PostSP) 2 Updates" VISTASSU
SectionIn Ro
${RebootIfRequired}
Call InstallKB3205638
Call InstallKB4012583
Call InstallKB4015195
Call InstallKB4015380
${RebootIfRequired}
SectionEnd
${MementoUnselectedSection} "$(SectionESU)" VISTAESU
${RebootIfRequired}
Call InstallKB4493730
${RebootIfRequired}
${MementoSectionEnd}
${MementoSection} "$(IE) 9" VISTAIE9
${RebootIfRequired}
Call InstallKB971512
Call InstallKB2117917
${RebootIfRequired}
Call InstallIE9
${RebootIfRequired}
${MementoSectionEnd}
; 7 prerequisities
Section "Windows 7 $(SP) 1" WIN7SP1
SectionIn Ro
Call InstallWin7SP1
${RebootIfRequired}
SectionEnd
${MementoUnselectedSection} "Windows 7 $(CRU)" WIN7CRU
${RebootIfRequired}
Call InstallKB3020369
Call InstallKB3125574
${RebootIfRequired}
${MementoSectionEnd}
Section "$(SectionSSU)" WIN7SSU
SectionIn Ro
${RebootIfRequired}
Call InstallKB3138612
Call InstallKB4474419
Call InstallKB4490628
${RebootIfRequired}
SectionEnd
; Windows Home Server 2011 is based on Server 2008 R2, but has its own separate "rollup" updates
Section "$(SectionWHS2011U4)" WHS2011U4
SectionIn Ro
${RebootIfRequired}
Call InstallKB2757011
${RebootIfRequired}
SectionEnd
; 8 prerequisities
Section "$(SectionSSU)" WIN8SSU
SectionIn Ro
${RebootIfRequired}
Call InstallKB4598297
${RebootIfRequired}
SectionEnd
; 8.1 prerequisities
Section "Windows 8.1 $(Update) 1" WIN81U1
SectionIn Ro
${RebootIfRequired}
Call InstallKB3021910
Call InstallClearCompressionFlag
Call InstallKB2919355
Call InstallKB2932046
Call InstallKB2959977
Call InstallKB2937592
Call InstallKB2934018
${RebootIfRequired}
SectionEnd
Section "$(SectionSSU)" WIN81SSU
SectionIn Ro
${RebootIfRequired}
Call InstallKB3021910
${RebootIfRequired}
SectionEnd
; Shared prerequisites
!include DownloadWUA.nsh
Section "$(SectionWUA)" WUA
SectionIn Ro
${RebootIfRequired}
Call InstallWUA
SectionEnd
${MementoSection} "$(SectionRootCerts)" ROOTCERTS
${RebootIfRequired}
Call ConfigureCrypto
${IfNot} ${IsPostInstall}
Call UpdateRoots
${EndIf}
${MementoSectionEnd}
${MementoSection} "$(SectionEnableMU)" ENABLEMU
${RebootIfRequired}
LegacyUpdateNSIS::EnableMicrosoftUpdate
Pop $0
${If} $0 != 0
LegacyUpdateNSIS::MessageForHresult $0
Pop $1
${DetailPrint} "$1 ($0)"
MessageBox MB_USERICON "$(MsgBoxMUFailed)" /SD IDOK
${EndIf}
!insertmacro RestartWUAUService
${MementoSectionEnd}
${MementoSection} "$(SectionActivate)" ACTIVATE
; No-op; we'll launch the activation wizard in post-install.
${MementoSectionEnd}
Section - PREREQS_END
SectionEnd
; Main installation
${MementoSection} "$(^Name)" LEGACYUPDATE
${RebootIfRequired}
; WUSERVER section
Call MakeUninstallEntry
${If} ${AtMostWinVista}
; Check if SChannel is going to work with modern TLS
${If} ${AtLeastWinVista}
${DetailPrint} "$(StatusCheckingSSL)"
!insertmacro DownloadRequest "${WSUS_SERVER_HTTPS}/ClientWebService/ping.bin" NONE \
`/TIMEOUTCONNECT 0 /TIMEOUTRECONNECT 0`
Pop $0
Call DownloadWaitSilent
Pop $1
Pop $0
${VerbosePrint} "Ping result: $0 ($1)"
${Else}
StrCpy $1 0
${EndIf}
${If} $1 >= 200
${AndIf} $1 < 300
; HTTPS will work
${WriteRegWithBackup} Str HKLM "${REGPATH_WUPOLICY}" "WUServer" "${WSUS_SERVER_HTTPS}"
${WriteRegWithBackup} Str HKLM "${REGPATH_WUPOLICY}" "WUStatusServer" "${WSUS_SERVER_HTTPS}"
${WriteRegWithBackup} Str HKLM "${REGPATH_WU}" "URL" "${UPDATE_URL_HTTPS}"
${Else}
; Probably not supported; use HTTP
${WriteRegWithBackup} Str HKLM "${REGPATH_WUPOLICY}" "WUServer" "${WSUS_SERVER}"
${WriteRegWithBackup} Str HKLM "${REGPATH_WUPOLICY}" "WUStatusServer" "${WSUS_SERVER}"
${WriteRegWithBackup} Str HKLM "${REGPATH_WU}" "URL" "${UPDATE_URL}"
${EndIf}
${WriteRegWithBackup} Dword HKLM "${REGPATH_WUAUPOLICY}" "UseWUServer" 1
; Restart service
!insertmacro RestartWUAUService
${EndIf}
; Server Core does not have IE, do not install ActiveX control
${If} ${AtLeastWinVista}
${AndIf} ${IsServerOS}
LegacyUpdateNSIS::IsServerCore
Pop $0
${Else}
StrCpy $0 0
${EndIf}
${If} $0 != 1
; ACTIVEX section
SetOutPath $INSTDIR
; Call MakeUninstallEntry
; Add Control Panel entry
; Category 5: XP Performance and Maintenance, Vista System and Maintenance, 7+ System and Security
; Category 10: XP SP2 Security Center, Vista Security, 7+ System and Security
WriteRegStr HKCR "${REGPATH_HKCR_CPLCLSID}" "" "${NAME}"
WriteRegStr HKCR "${REGPATH_HKCR_CPLCLSID}" "LocalizedString" '@"$OUTDIR\LegacyUpdate.exe",-2'
WriteRegStr HKCR "${REGPATH_HKCR_CPLCLSID}\DefaultIcon" "" '"$OUTDIR\LegacyUpdate.exe",-100'
WriteRegStr HKCR "${REGPATH_HKCR_CPLCLSID}\Shell\Open\Command" "" '"$OUTDIR\LegacyUpdate.exe"'
WriteRegDword HKCR "${REGPATH_HKCR_CPLCLSID}\ShellFolder" "Attributes" 0
WriteRegDword HKCR "${REGPATH_HKCR_CPLCLSID}" "{305CA226-D286-468e-B848-2B2E8E697B74} 2" 5
WriteRegStr HKCR "${REGPATH_HKCR_CPLCLSID}" "System.ApplicationName" "${CPL_APPNAME}"
WriteRegStr HKCR "${REGPATH_HKCR_CPLCLSID}" "System.ControlPanelCategory" "5,10"
WriteRegStr HKCR "${REGPATH_HKCR_CPLCLSID}" "System.Software.TasksFileUrl" '"$OUTDIR\LegacyUpdate.exe",-202'
${If} ${IsWin2000}
; Doesn't seem to support @ syntax with an exe?
WriteRegStr HKCR "${REGPATH_HKCR_CPLCLSID}" "InfoTip" 'Check for software and driver updates via Legacy Update.'
${Else}
WriteRegStr HKCR "${REGPATH_HKCR_CPLCLSID}" "InfoTip" '@"$OUTDIR\LegacyUpdate.exe",-4'
${EndIf}
WriteRegStr HKLM "${REGPATH_CPLNAMESPACE}" "" "${NAME}"
; Install DLLs
${DetailPrint} "$(StatusClosingIE)"
LegacyUpdateNSIS::CloseIEWindows
; NOTE: Here we specifically check for amd64, because the DLL is amd64.
; We still install to native Program Files on IA64, but with x86 binaries.
File /ONAME=LegacyUpdate.dll "..\LegacyUpdate\obj\LegacyUpdate32.dll"
${If} ${IsNativeAMD64}
${If} ${FileExists} "LegacyUpdate32.dll"
${DeleteWithErrorHandling} "$OUTDIR\LegacyUpdate32.dll"
${EndIf}
Rename "LegacyUpdate.dll" "LegacyUpdate32.dll"
File /ONAME=LegacyUpdate.dll "..\LegacyUpdate\obj\LegacyUpdate64.dll"
${EndIf}
Call CopyLauncher
; Register DLLs
ExecWait '"$OUTDIR\LegacyUpdate.exe" /regserver $HWNDPARENT' $0
${If} $0 != 0
Abort
${EndIf}
; Create shortcut
${If} ${IsWin2000}
; Doesn't seem to support @ syntax with an exe?
StrCpy $0 "Check for software and driver updates via Legacy Update."
${Else}
StrCpy $0 '@"$OUTDIR\LegacyUpdate.exe",-4'
${EndIf}
CreateShortcut "$COMMONSTARTMENU\${NAME}.lnk" \
'"$OUTDIR\LegacyUpdate.exe"' '' \
"$OUTDIR\LegacyUpdate.exe" 0 \
SW_SHOWNORMAL "" \
"$0"
; Hide WU shortcuts
${If} ${AtMostWinXP2003}
${If} ${FileExists} "$COMMONSTARTMENU\Windows Update.lnk"
CreateDirectory "$OUTDIR\Backup"
Rename "$COMMONSTARTMENU\Windows Update.lnk" "$OUTDIR\Backup\Windows Update.lnk"
${EndIf}
${If} ${FileExists} "$COMMONSTARTMENU\Microsoft Update.lnk"
CreateDirectory "$OUTDIR\Backup"
Rename "$COMMONSTARTMENU\Microsoft Update.lnk" "$OUTDIR\Backup\Microsoft Update.lnk"
${EndIf}
${EndIf}
; Add to trusted sites
WriteRegDword HKLM "${REGPATH_ZONEDOMAINS}\${DOMAIN}" "http" 2
WriteRegDword HKLM "${REGPATH_ZONEDOMAINS}\${DOMAIN}" "https" 2
WriteRegDword HKLM "${REGPATH_ZONEESCDOMAINS}\${DOMAIN}" "http" 2
WriteRegDword HKLM "${REGPATH_ZONEESCDOMAINS}\${DOMAIN}" "https" 2
WriteRegDword HKCU "${REGPATH_ZONEDOMAINS}\${DOMAIN}" "http" 2
WriteRegDword HKCU "${REGPATH_ZONEDOMAINS}\${DOMAIN}" "https" 2
WriteRegDword HKCU "${REGPATH_ZONEESCDOMAINS}\${DOMAIN}" "http" 2
WriteRegDword HKCU "${REGPATH_ZONEESCDOMAINS}\${DOMAIN}" "https" 2
; Add low rights elevation policy
WriteRegDword HKLM "${REGPATH_ELEVATIONPOLICY}\${ELEVATIONPOLICY_GUID}" "Policy" 3
WriteRegStr HKLM "${REGPATH_ELEVATIONPOLICY}\${ELEVATIONPOLICY_GUID}" "AppPath" "$OUTDIR"
WriteRegStr HKLM "${REGPATH_ELEVATIONPOLICY}\${ELEVATIONPOLICY_GUID}" "AppName" "LegacyUpdate.exe"
${If} ${RunningX64}
SetRegView 32
WriteRegDword HKLM "${REGPATH_ELEVATIONPOLICY}\${ELEVATIONPOLICY_GUID}" "Policy" 3
WriteRegStr HKLM "${REGPATH_ELEVATIONPOLICY}\${ELEVATIONPOLICY_GUID}" "AppPath" "$OUTDIR"
WriteRegStr HKLM "${REGPATH_ELEVATIONPOLICY}\${ELEVATIONPOLICY_GUID}" "AppName" "LegacyUpdate.exe"
SetRegView 64
${EndIf}
; Delete LegacyUpdate.dll in System32 from 1.0 installer
${If} ${FileExists} $WINDIR\System32\LegacyUpdate.dll
${DeleteWithErrorHandling} $WINDIR\System32\LegacyUpdate.dll
${EndIf}
; Delete LegacyUpdate.inf from 1.0 installer
${If} ${FileExists} $WINDIR\inf\LegacyUpdate.inf
Delete $WINDIR\inf\LegacyUpdate.inf
${EndIf}
; If 32-bit Legacy Update exists, move it to 64-bit Program Files
${If} ${RunningX64}
${AndIf} ${FileExists} "$PROGRAMFILES32\Legacy Update\Backup"
CreateDirectory "$PROGRAMFILES64\Legacy Update"
Rename "$PROGRAMFILES32\Legacy Update\Backup" "$PROGRAMFILES64\Legacy Update\Backup"
RMDir /r "$PROGRAMFILES32\Legacy Update"
${EndIf}
${EndIf}
${MementoSectionEnd}
${MementoSectionDone}
; Uninstaller
Section "-un.Legacy Update Server" un.WUSERVER
; Clear WSUS server
${If} ${AtMostWinVista}
ReadRegStr $0 HKLM "${REGPATH_WUPOLICY}" "WUServer"
${VerbosePrint} "WUServer: $0"
${If} $0 == "${WSUS_SERVER}"
${OrIf} $0 == "${WSUS_SERVER_HTTPS}"
${DeleteRegWithBackup} Str HKLM "${REGPATH_WUPOLICY}" "WUServer" "-"
${DeleteRegWithBackup} Dword HKLM "${REGPATH_WUAUPOLICY}" "UseWUServer" "-"
${EndIf}
ReadRegStr $0 HKLM "${REGPATH_WUPOLICY}" "WUStatusServer"
${VerbosePrint} "WUStatusServer: $0"
${If} $0 == "${WSUS_SERVER}"
${OrIf} $0 == "${WSUS_SERVER_HTTPS}"
${DeleteRegWithBackup} Str HKLM "${REGPATH_WUPOLICY}" "WUStatusServer" "-"
${DeleteRegWithBackup} Dword HKLM "${REGPATH_WUAUPOLICY}" "UseWUServer" "-"
${EndIf}
ReadRegStr $0 HKLM "${REGPATH_WU}" "URL"
${VerbosePrint} "URL: $0"
${If} $0 == "${UPDATE_URL}"
${OrIf} $0 == "${UPDATE_URL_HTTPS}"
${DeleteRegWithBackup} Str HKLM "${REGPATH_WU}" "URL" "-"
${EndIf}
${EndIf}
SectionEnd
Section "-un.Legacy Update website" un.ACTIVEX
SetOutPath $INSTDIR
; Delete shortcut
Delete "$COMMONSTARTMENU\${NAME}.lnk"
; Delete Control Panel entry
DeleteRegKey HKLM "${REGPATH_CPLNAMESPACE}"
DeleteRegKey HKCR "${REGPATH_HKCR_CPLCLSID}"
; Restore shortcuts
${If} ${FileExists} "$OUTDIR\Backup\Windows Update.lnk"
Rename "$OUTDIR\Backup\Windows Update.lnk" "$COMMONSTARTMENU\Windows Update.lnk"
${EndIf}
${If} ${FileExists} "$OUTDIR\Backup\Microsoft Update.lnk"
Rename "$OUTDIR\Backup\Microsoft Update.lnk" "$COMMONSTARTMENU\Microsoft Update.lnk"
${EndIf}
; Close IE
${DetailPrint} "$(StatusClosingIE)"
LegacyUpdateNSIS::CloseIEWindows
; Unregister DLLs
${If} ${FileExists} "$INSTDIR\LegacyUpdate.exe"
ExecWait '"$OUTDIR\LegacyUpdate.exe" /unregserver $HWNDPARENT' $0
${If} $0 != 0
Abort
${EndIf}
${EndIf}
; Delete files
${DeleteWithErrorHandling} "$OUTDIR\LegacyUpdate.exe"
${DeleteWithErrorHandling} "$OUTDIR\LegacyUpdate.dll"
${DeleteWithErrorHandling} "$OUTDIR\LegacyUpdate32.dll"
; Remove from trusted sites
DeleteRegKey HKLM "${REGPATH_ZONEDOMAINS}\${DOMAIN}"
DeleteRegKey HKCU "${REGPATH_ZONEDOMAINS}\${DOMAIN}"
DeleteRegKey HKLM "${REGPATH_ZONEESCDOMAINS}\${DOMAIN}"
DeleteRegKey HKCU "${REGPATH_ZONEESCDOMAINS}\${DOMAIN}"
; Remove IE elevation policy
DeleteRegKey HKLM "${REGPATH_ELEVATIONPOLICY}\${ELEVATIONPOLICY_GUID}"
${If} ${RunningX64}
SetRegView 32
DeleteRegKey HKLM "${REGPATH_ELEVATIONPOLICY}\${ELEVATIONPOLICY_GUID}"
SetRegView 64
${EndIf}
; Restart service
!insertmacro RestartWUAUService
SectionEnd
Section -Uninstall
SetOutPath $INSTDIR
; Delete folders
RMDir /r "$OUTDIR"
RMDir /r /REBOOTOK "${RUNONCEDIR}"
; Delete uninstall entry
DeleteRegKey HKLM "${REGPATH_UNINSTSUBKEY}"
SectionEnd
!macro DESCRIPTION_STRING section
!insertmacro MUI_DESCRIPTION_TEXT ${${section}} "$(Section${section}Desc)"
!macroend
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro DESCRIPTION_STRING W2KSP4
!insertmacro DESCRIPTION_STRING IE6SP1
!insertmacro DESCRIPTION_STRING XPSP3
!insertmacro DESCRIPTION_STRING XPESP3
!insertmacro DESCRIPTION_STRING WES09
!insertmacro DESCRIPTION_STRING 2003SP2
!insertmacro DESCRIPTION_STRING VISTASP2
!insertmacro DESCRIPTION_STRING VISTASSU
!insertmacro DESCRIPTION_STRING VISTAESU
!insertmacro DESCRIPTION_STRING VISTAIE9
!insertmacro DESCRIPTION_STRING WIN7SP1
!insertmacro DESCRIPTION_STRING WIN7CRU
!insertmacro DESCRIPTION_STRING WIN7SSU
!insertmacro DESCRIPTION_STRING WIN8SSU
!insertmacro DESCRIPTION_STRING WIN81U1
!insertmacro DESCRIPTION_STRING WIN81SSU
!insertmacro DESCRIPTION_STRING WS2008HVU
!insertmacro DESCRIPTION_STRING WHS2011U4
!insertmacro DESCRIPTION_STRING WUA
!insertmacro DESCRIPTION_STRING ROOTCERTS
!insertmacro DESCRIPTION_STRING ENABLEMU
!insertmacro DESCRIPTION_STRING ACTIVATE
; !insertmacro DESCRIPTION_STRING LEGACYUPDATE
; !insertmacro DESCRIPTION_STRING WUSERVER
!insertmacro MUI_FUNCTION_DESCRIPTION_END
Function OnMouseOverSection
${If} $0 == ${LEGACYUPDATE}
${If} ${AtMostWinXP2003}
StrCpy $0 "$(SectionActiveX2KXPDesc)"
${ElseIf} ${AtMostWin8.1}
StrCpy $0 "$(SectionActiveXVista78Desc)"
${Else}
StrCpy $0 "$(SectionActiveXWin10Desc)"
${EndIf}
SendMessage $mui.ComponentsPage.DescriptionText ${WM_SETTEXT} 0 "STR:"
EnableWindow $mui.ComponentsPage.DescriptionText 1
SendMessage $mui.ComponentsPage.DescriptionText ${WM_SETTEXT} 0 "STR:$0"
${EndIf}
FunctionEnd
Function .onInit
Call InitChecks
${MementoSectionRestore}
SetOutPath $PLUGINSDIR
File Patches.ini
SetOutPath "${RUNONCEDIR}"
${If} ${IsWin2000}
; Determine whether Win2k prereqs need to be installed
${IfNot} ${NeedsPatch} W2KSP4
${AndIfNot} ${NeedsPatch} W2KUR1
!insertmacro RemoveSection ${W2KSP4}
${EndIf}
${IfNot} ${NeedsPatch} IE6
!insertmacro RemoveSection ${IE6SP1}
${EndIf}
; Handle 2000 Datacenter Server
${If} ${IsDatacenter}
!insertmacro UnselectSection ${LEGACYUPDATE}
${EndIf}
${Else}
!insertmacro RemoveSection ${W2KSP4}
!insertmacro RemoveSection ${IE6SP1}
${EndIf}
${If} ${IsWinXP2002}
${If} ${IsEmbedded}
; Determine whether XP Embedded prereqs need to be installed
; Windows XP Embedded (version 2001), including FLP and WEPOS, has a different service pack
!insertmacro RemoveSection ${XPSP3}
${IfNot} ${NeedsPatch} XPESP3
!insertmacro RemoveSection ${XPESP3}
${EndIf}
${Else}
; Determine whether XP prereqs need to be installed
!insertmacro RemoveSection ${XPESP3}
${IfNot} ${NeedsPatch} XPSP3
!insertmacro RemoveSection ${XPSP3}
${EndIf}
${EndIf}
${If} ${IsWinXPPOSReady}
!insertmacro RemoveSection ${WES09}
${EndIf}
${Else}
!insertmacro RemoveSection ${XPSP3}
!insertmacro RemoveSection ${XPESP3}
!insertmacro RemoveSection ${WES09}
${EndIf}
${If} ${IsWinXP2003}
; Determine whether 2003 prereqs need to be installed
${IfNot} ${NeedsPatch} 2003SP2
!insertmacro RemoveSection ${2003SP2}
${EndIf}
${Else}
!insertmacro RemoveSection ${2003SP2}
${EndIf}
${If} ${IsWinVista}
; Determine whether Vista prereqs need to be installed
${IfNot} ${NeedsPatch} HyperV2008Update
!insertmacro RemoveSection ${WS2008HVU}
${EndIf}
${IfNot} ${NeedsPatch} VistaSP2
!insertmacro RemoveSection ${VISTASP2}
${EndIf}
${IfNot} ${NeedsPatch} VistaPostSP2
!insertmacro RemoveSection ${VISTASSU}
${EndIf}
${IfNot} ${NeedsPatch} VistaESU
!insertmacro RemoveSection ${VISTAESU}
${EndIf}
${IfNot} ${NeedsPatch} IE9
!insertmacro RemoveSection ${VISTAIE9}
${ElseIf} ${IsServerOS}
LegacyUpdateNSIS::IsServerCore
Pop $0
${If} $0 == 1
!insertmacro RemoveSection ${VISTAIE9}
${EndIf}
${EndIf}
${Else}
!insertmacro RemoveSection ${WS2008HVU}
!insertmacro RemoveSection ${VISTASP2}
!insertmacro RemoveSection ${VISTASSU}
!insertmacro RemoveSection ${VISTAESU}
!insertmacro RemoveSection ${VISTAIE9}
${EndIf}
${If} ${IsWin7}
; Determine whether 7 prereqs need to be installed
${IfNot} ${NeedsPatch} Win7SP1
!insertmacro RemoveSection ${WIN7SP1}
${EndIf}
${IfNot} ${IsHomeServer}
${OrIfNot} ${NeedsPatch} KB2757011
!insertmacro RemoveSection ${WHS2011U4}
${EndIf}
${IfNot} ${NeedsPatch} Win7CRU
!insertmacro RemoveSection ${WIN7CRU}
${EndIf}
${IfNot} ${NeedsPatch} Win7PostSP1
!insertmacro RemoveSection ${WIN7SSU}
${EndIf}
${Else}
!insertmacro RemoveSection ${WIN7SP1}
!insertmacro RemoveSection ${WHS2011U4}
!insertmacro RemoveSection ${WIN7CRU}
!insertmacro RemoveSection ${WIN7SSU}
${EndIf}
${If} ${IsWin8}
; Determine whether 8 prereqs need to be installed
${IfNot} ${NeedsPatch} KB4598297
!insertmacro RemoveSection ${WIN8SSU}
${EndIf}
${Else}
!insertmacro RemoveSection ${WIN8SSU}
${EndIf}
${If} ${IsWin8.1}
; Determine whether 8.1 prereqs need to be installed
${IfNot} ${NeedsPatch} Win81Update1
!insertmacro RemoveSection ${WIN81U1}
${EndIf}
${IfNot} ${NeedsPatch} KB3021910
!insertmacro RemoveSection ${WIN81SSU}
${EndIf}
${Else}
!insertmacro RemoveSection ${WIN81U1}
!insertmacro RemoveSection ${WIN81SSU}
${EndIf}
${IfNot} ${NeedsPatch} WUA
!insertmacro RemoveSection ${WUA}
${EndIf}
${If} ${AtLeastWinXP2002}
${AndIf} ${AtMostWin8.1}
; Check if the OS needs activation
LegacyUpdateNSIS::IsActivated
Pop $0
${If} $0 == 1
!insertmacro RemoveSection ${ACTIVATE}
${EndIf}
${Else}
!insertmacro RemoveSection ${ACTIVATE}
${EndIf}
${If} ${AtLeastWin7}
${AndIf} ${AtMostWin8.1}
ClearErrors
EnumRegKey $0 HKLM "${REGPATH_WU_SERVICES}\${WU_MU_SERVICE_ID}" 0
${IfNot} ${Errors}
!insertmacro RemoveSection ${ENABLEMU}
${EndIf}
${Else}
!insertmacro RemoveSection ${ENABLEMU}
${EndIf}
; Server Core does not have activation wizard
${If} ${AtLeastWinVista}
${AndIf} ${IsServerOS}
LegacyUpdateNSIS::IsServerCore
Pop $0
${If} $0 == 1
!insertmacro RemoveSection ${ACTIVATE}
${EndIf}
${EndIf}
; ${IfNot} ${AtMostWinVista}
; !insertmacro RemoveSection ${LEGACYUPDATE}
; ${EndIf}
; Try not to be too intrusive on Windows 10 and newer, which are (for now) fine
${If} ${AtLeastWin10}
!insertmacro RemoveSection ${ROOTCERTS}
${Else}
LegacyUpdateNSIS::NeedsRootsUpdate
Pop $0
${If} $0 == 0
!insertmacro RemoveSection ${ROOTCERTS}
${EndIf}
${EndIf}
FunctionEnd
Function ComponentsPageCheck
; Skip the page if we're being launched with /runonce, /postinstall, or /passive
${If} ${IsRunOnce}
${OrIf} ${IsPostInstall}
${OrIf} ${IsPassive}
Abort
${EndIf}
; Skip if installer was invoked by IE, and all prerequisites are installed
${If} ${IsActiveX}
${AndIf} ${SectionIsSelected} ${LEGACYUPDATE}
StrCpy $1 0
${For} $0 ${PREREQS_START} ${PREREQS_END}
${If} ${SectionIsSelected} $0
${AndIf} $0 != ${PREREQS_START}
${AndIf} $0 != ${PREREQS_END}
${AndIf} $0 != ${LEGACYUPDATE}
${AndIf} $0 != ${ROOTCERTS}
StrCpy $1 1
${Break}
${EndIf}
${Next}
${If} $1 == 0
Abort
${EndIf}
${EndIf}
; Skip if reboot pending
ReadRegDword $0 HKLM "${REGPATH_LEGACYUPDATE_SETUP}" "RebootPending"
${If} $0 == 1
Abort
${EndIf}
; Handle 2000 Datacenter Server
${If} ${IsWin2000}
${AndIf} ${IsDatacenter}
!insertmacro UnselectSection ${LEGACYUPDATE}
${EndIf}
; Handle WES09 already enabled on non-SSE2
${If} ${IsWinXP2002}
${If} ${IsWinXPWES}
${OrIf} ${IsWinXPPOSReady}
; Check for SSE2
System::Call '${IsProcessorFeaturePresent}(${PF_XMMI64_INSTRUCTIONS_AVAILABLE}) .r0'
${If} $0 == 0
MessageBox MB_USERICON "$(MsgBoxWES09NotSSE2Pre)" /SD IDOK
${EndIf}
${EndIf}
${EndIf}
FunctionEnd
Function PreDownload
; Win2k
${If} ${IsWin2000}
Call DownloadW2KSP4
Call DownloadW2KUR1
Call DownloadIE6
${EndIf}
; XP 2002
${If} ${IsWinXP2002}
${AndIf} ${SectionIsSelected} ${XPSP3}
${If} ${IsWinXPMediaCenter}
${OrIf} ${IsWinXPTabletPC}
Call DownloadXPSP2
${Else}
Call DownloadXPSP1a
${EndIf}
Call DownloadXPSP3
${EndIf}
${If} ${IsWinXP2002}
${AndIf} ${SectionIsSelected} ${XPESP3}
Call DownloadXPESP3
${EndIf}
; XP 2003
${If} ${IsWinXP2003}
${AndIf} ${SectionIsSelected} ${2003SP2}
Call Download2003SP2
${EndIf}
; Vista
${If} ${IsWinVista}
${If} ${NeedsPatch} HyperV2008Update
Call DownloadKB950050
${EndIf}
Call DownloadVistaSP1
Call DownloadVistaSP2
Call DownloadKB3205638
Call DownloadKB4012583
Call DownloadKB4015195
Call DownloadKB4015380
${If} ${SectionIsSelected} ${VISTAESU}
Call DownloadKB4493730
${EndIf}
${If} ${SectionIsSelected} ${VISTAIE9}
Call DownloadKB971512
Call DownloadKB2117917
Call DownloadIE9
${EndIf}
${EndIf}
; 7
${If} ${IsWin7}
${If} ${IsHomeServer}
Call DownloadKB2757011
${Else}
Call DownloadWin7SP1
${EndIf}
${If} ${SectionIsSelected} ${WIN7CRU}
Call DownloadKB3020369
Call DownloadKB3125574
${EndIf}
Call DownloadKB3138612
Call DownloadKB4474419
Call DownloadKB4490628
${EndIf}
; 8
${If} ${IsWin8}
Call DownloadKB4598297
${EndIf}
; 8.1
${If} ${IsWin8.1}
Call DownloadKB3021910
Call DownloadClearCompressionFlag
Call DownloadKB2919355
Call DownloadKB2932046
Call DownloadKB2959977
Call DownloadKB2937592
Call DownloadKB2934018
Call DownloadKB3021910
${EndIf}
; General
Call DownloadWUA
${If} ${AtMostWin8.1}
${AndIf} ${SectionIsSelected} ${ROOTCERTS}
Call DownloadRoots
${EndIf}
FunctionEnd
Function PostInstall
; Handle first run flag if needed
${If} ${FileExists} "$INSTDIR\LegacyUpdate.exe"
${AndIfNot} ${IsRunOnce}
ClearErrors
ReadRegDword $0 HKLM "${REGPATH_LEGACYUPDATE_SETUP}" "ActiveXInstalled"
${If} ${Errors}
StrCpy $0 "/firstrun"
${Else}
StrCpy $0 ""
${EndIf}
WriteRegDword HKLM "${REGPATH_LEGACYUPDATE_SETUP}" "ActiveXInstalled" 1
${EndIf}
${IfNot} ${Silent}
${AndIfNot} ${IsRunOnce}
${If} ${FileExists} "$INSTDIR\LegacyUpdate.exe"
Exec '"$INSTDIR\LegacyUpdate.exe" /launch $0'
${ElseIf} ${AtLeastWin10}
ExecShell "" "ms-settings:windowsupdate"
${ElseIf} ${AtLeastWinVista}
Exec '"$WINDIR\system32\wuauclt.exe" /ShowWUAutoScan'
${EndIf}
; Launch activation wizard if requested by the user
${If} ${SectionIsSelected} ${ACTIVATE}
${DisableX64FSRedirection}
${If} ${AtLeastWinVista}
Exec '"$WINDIR\system32\slui.exe"'
${Else}
Exec '"$WINDIR\system32\oobe\msoobe.exe" /a'
${EndIf}
${EnableX64FSRedirection}
${EndIf}
${EndIf}
FunctionEnd
Function CleanUp
; Called only after all tasks have completed
Call CleanUpRunOnce
Call RevertTermsrvUserMode
!insertmacro InhibitSleep 0
${If} ${IsRunOnce}
Call OnRunOnceDone
${Else}
${If} ${IsPostInstall}
${OrIfNot} ${RebootFlag}
Call CleanUpRunOnceFinal
${EndIf}
${EndIf}
FunctionEnd
Function .onInstSuccess
${MementoSectionSave}
Call SetLastOSVersion
; Reboot now if we need to. Nothing further in this function will be run if we do need to reboot.
${RebootIfRequired}
; If we're done, launch the update site
Call PostInstall
Call CleanUp
FunctionEnd
Function .onInstFailed
${MementoSectionSave}
Call CleanUp
FunctionEnd
Function .onSelChange
${If} ${SectionIsSelected} ${WES09}
; Check for SSE2
System::Call '${IsProcessorFeaturePresent}(${PF_XMMI64_INSTRUCTIONS_AVAILABLE}) .r0'
${If} $0 == 0
MessageBox MB_USERICON "$(MsgBoxWES09NotSSE2Block)" /SD IDOK
!insertmacro UnselectSection ${WES09}
${EndIf}
${ElseIf} ${SectionIsSelected} ${ACTIVATE}
; Make sure the service pack prerequisite is selected
${If} ${IsWinXP2002}
${AndIfNot} ${AtLeastServicePack} 3
${AndIfNot} ${SectionIsSelected} ${XPSP3}
MessageBox MB_USERICON "$(MsgBoxActivateXP2002NotSP3)" /SD IDOK
!insertmacro SelectSection ${XPSP3}
${ElseIf} ${IsWinXP2003}
${AndIfNot} ${AtLeastServicePack} 2
${AndIfNot} ${SectionIsSelected} ${2003SP2}
MessageBox MB_USERICON "$(MsgBoxActivateXP2003NotSP2)" /SD IDOK
!insertmacro SelectSection ${2003SP2}
${EndIf}
${ElseIf} ${SectionIsSelected} ${LEGACYUPDATE}
; Handle 2000 Datacenter Server
${If} ${IsWin2000}
${AndIf} ${IsDatacenter}
MessageBox MB_USERICON "$(MsgBoxWUA2000Datacenter)" /SD IDOK
!insertmacro UnselectSection ${LEGACYUPDATE}
${EndIf}
${EndIf}
FunctionEnd
Function un.onInit
SetShellVarContext all
SetAutoClose true
${If} ${IsVerbose}
SetDetailsPrint both
${Else}
SetDetailsPrint listonly
${EndIf}
${If} ${RunningX64}
SetRegView 64
${EndIf}
FunctionEnd
================================================
FILE: setup/stdafx.h
================================================
================================================
FILE: shared/Exec.c
================================================
#include "stdafx.h"
#include "Exec.h"
HRESULT Exec(LPCWSTR verb, LPCWSTR file, LPCWSTR params, LPCWSTR workingDir, int show, BOOL wait, LPDWORD exitCode) {
SHELLEXECUTEINFO execInfo = {0};
execInfo.cbSize = sizeof(execInfo);
execInfo.lpVerb = verb;
execInfo.lpFile = file;
execInfo.lpParameters = params;
execInfo.lpDirectory = workingDir;
execInfo.nShow = show;
return ExecEx(&execInfo, wait, exitCode);
}
HRESULT ExecEx(LPSHELLEXECUTEINFO execInfo, BOOL wait, LPDWORD exitCode) {
if (wait) {
execInfo->fMask |= SEE_MASK_NOCLOSEPROCESS;
}
if (!ShellExecuteEx(execInfo)) {
return HRESULT_FROM_WIN32(GetLastError());
}
HRESULT hr = S_OK;
if (wait) {
if (execInfo->hProcess == NULL) {
TRACE(L"ShellExecuteEx() didn't return a handle: %u", GetLastError());
hr = E_FAIL;
}
WaitForSingleObject(execInfo->hProcess, INFINITE);
if (exitCode != NULL && GetExitCodeProcess(execInfo->hProcess, exitCode) == 0) {
hr = HRESULT_FROM_WIN32(GetLastError());
TRACE(L"GetExitCodeProcess() failed: %p\n", hr);
}
CloseHandle(execInfo->hProcess);
} else if (exitCode != NULL) {
*exitCode = 0;
}
return hr;
}
================================================
FILE: shared/Exec.h
================================================
#pragma once
#include
#include
EXTERN_C HRESULT Exec(LPCWSTR verb, LPCWSTR file, LPCWSTR params, LPCWSTR workingDir, int show, BOOL wait, LPDWORD exitCode);
EXTERN_C HRESULT ExecEx(LPSHELLEXECUTEINFO execInfo, BOOL wait, LPDWORD exitCode);
================================================
FILE: shared/HResult.c
================================================
#include "stdafx.h"
#include
#include "HResult.h"
#include "LegacyUpdate.h"
#include "VersionInfo.h"
static BOOL g_loadedHModule;
static HMODULE g_messagesHModule;
EXTERN_C LPWSTR GetMessageForHresult(HRESULT hr) {
LPWSTR message = NULL;
if (HRESULT_FACILITY(hr) == FACILITY_WINDOWSUPDATE) {
if (!g_loadedHModule) {
g_loadedHModule = TRUE;
// Load messages table from main dll
LPWSTR installPath = NULL;
if (GetInstallPath(&installPath)) {
WCHAR path[MAX_PATH];
wsprintf(path, L"%ls\\LegacyUpdate.dll", installPath);
g_messagesHModule = LoadLibrary(path);
LocalFree(installPath);
}
if (!g_messagesHModule) {
// Try the current module
g_messagesHModule = OWN_MODULE;
}
}
FormatMessage(FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS, g_messagesHModule, hr, LANG_NEUTRAL, (LPWSTR)&message, 0, NULL);
}
if (message == NULL && !FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, hr, LANG_NEUTRAL, (LPWSTR)&message, 0, NULL)) {
message = (LPWSTR)LocalAlloc(LPTR, 17 * sizeof(WCHAR));
wsprintf(message, L"Error 0x%08X", hr);
return message;
}
// Truncate trailing \r\n if any
int len = lstrlen(message);
if (len >= 2 && message[len - 2] == '\r' && message[len - 1] == '\n') {
message[len - 2] = 0;
}
// Remove title part in braces
if (len > 1 && message[0] == '{') {
LPWSTR closeBrace = wcsstr(message, L"}\r\n");
if (closeBrace) {
message = closeBrace + 3;
}
}
return message;
}
================================================
FILE: shared/HResult.h
================================================
#pragma once
#include
EXTERN_C LPWSTR GetMessageForHresult(HRESULT hr);
================================================
FILE: shared/LegacyUpdate.c
================================================
#include "stdafx.h"
#include
#include "Registry.h"
static LPWSTR _installPath;
EXTERN_C HRESULT GetInstallPath(LPWSTR *path) {
*path = (LPWSTR)LocalAlloc(LPTR, MAX_PATH * sizeof(WCHAR));
HRESULT hr = S_OK;
if (!_installPath) {
DWORD size = 0;
hr = GetRegistryString(HKEY_LOCAL_MACHINE, REGPATH_LEGACYUPDATE_UNINSTALL, L"InstallLocation", KEY_WOW64_64KEY, &_installPath, &size);
if (SUCCEEDED(hr)) {
lstrcpy(*path, _installPath);
return S_OK;
}
// Do our best to guess where it should be
LPWSTR programFiles = NULL;
hr = GetRegistryString(HKEY_LOCAL_MACHINE, REGPATH_WIN, L"ProgramFilesDir", KEY_WOW64_64KEY, &programFiles, &size);
if (SUCCEEDED(hr)) {
_installPath = (LPWSTR)LocalAlloc(LPTR, MAX_PATH * sizeof(WCHAR));
wsprintf(_installPath, L"%ls\\Legacy Update", programFiles);
LocalFree(programFiles);
}
}
lstrcpy(*path, _installPath);
return hr;
}
================================================
FILE: shared/LegacyUpdate.h
================================================
#pragma once
#include
EXTERN_C HRESULT GetInstallPath(LPWSTR *path);
================================================
FILE: shared/LoadImage.c
================================================
#include
#include
#include
// Adapted from https://faithlife.codes/blog/2008/09/displaying_a_splash_screen_with_c_part_i/
// 1. Get resource as an IStream
// 2. Use Windows Imaging Component to load the PNG
// 3. Convert the WIC bitmap to an HBITMAP
// Why does loading a PNG need to be so difficult?
typedef HRESULT (WINAPI *_WICConvertBitmapSource)(REFWICPixelFormatGUID dstFormat, IWICBitmapSource *pISrc, IWICBitmapSource **ppIDst);
typedef HRESULT (WINAPI *_SHCreateStreamOnFileEx)(LPCWSTR pszFile, DWORD grfMode, DWORD dwAttributes, BOOL fCreate, IStream *pstmTemplate, IStream **ppstm);
static _WICConvertBitmapSource $WICConvertBitmapSource;
static _SHCreateStreamOnFileEx $SHCreateStreamOnFileEx;
static HGLOBAL GetRawResource(HINSTANCE hInstance, LPCWSTR name, LPCWSTR type) {
HRSRC resource = FindResource(hInstance, name, type);
if (!resource) {
TRACE(L"FindResource failed: %d", GetLastError());
return NULL;
}
DWORD resourceSize = SizeofResource(hInstance, resource);
HGLOBAL imageHandle = LoadResource(hInstance, resource);
if (!imageHandle) {
TRACE(L"LoadResource failed: %d", GetLastError());
return NULL;
}
LPVOID sourceResourceData = LockResource(imageHandle);
if (!sourceResourceData) {
TRACE(L"LockResource failed: %d", GetLastError());
return NULL;
}
HGLOBAL resourceDataHandle = GlobalAlloc(GMEM_MOVEABLE, resourceSize);
if (!resourceDataHandle) {
TRACE(L"GlobalAlloc failed: %d", GetLastError());
return NULL;
}
LPVOID resourceData = GlobalLock(resourceDataHandle);
if (!resourceData) {
TRACE(L"GlobalLock failed: %d", GetLastError());
GlobalFree(resourceDataHandle);
return NULL;
}
CopyMemory(resourceData, sourceResourceData, resourceSize);
GlobalUnlock(resourceDataHandle);
return resourceDataHandle;
}
static IStream *GetResourceStream(HINSTANCE hInstance, LPCWSTR name, LPCWSTR type) {
IStream *stream = NULL;
HGLOBAL resource = GetRawResource(hInstance, name, type);
if (!resource) {
TRACE(L"GetResource failed: %d", GetLastError());
return NULL;
}
if (SUCCEEDED(CreateStreamOnHGlobal(resource, TRUE, &stream))) {
return stream;
}
GlobalFree(resource);
return NULL;
}
static IWICBitmapSource *GetWICBitmap(IStream *imageStream, REFCLSID rclsid) {
IWICBitmapSource *bitmap = NULL;
IWICBitmapDecoder *decoder = NULL;
UINT frameCount = 0;
IWICBitmapFrameDecode *frame = NULL;
if (!SUCCEEDED(CoCreateInstance(rclsid, NULL, CLSCTX_INPROC_SERVER, &IID_IWICBitmapDecoder, (LPVOID *)&decoder))) {
return NULL;
}
if (!SUCCEEDED(IWICBitmapDecoder_Initialize(decoder, imageStream, WICDecodeMetadataCacheOnLoad))) {
goto end;
}
if (!SUCCEEDED(IWICBitmapDecoder_GetFrameCount(decoder, &frameCount)) || frameCount != 1) {
goto end;
}
if (!SUCCEEDED(IWICBitmapDecoder_GetFrame(decoder, 0, &frame))) {
goto end;
}
$WICConvertBitmapSource(&GUID_WICPixelFormat32bppPBGRA, (IWICBitmapSource *)frame, &bitmap);
IWICBitmapFrameDecode_Release(frame);
end:
IWICBitmapDecoder_Release(decoder);
return bitmap;
}
static HBITMAP GetHBitmapForWICBitmap(IWICBitmapSource *bitmap) {
HBITMAP hBitmap = NULL;
UINT width = 0, height = 0;
if (!SUCCEEDED(IWICBitmapSource_GetSize(bitmap, &width, &height)) || width == 0 || height == 0) {
return NULL;
}
BITMAPINFO bminfo = {0};
ZeroMemory(&bminfo, sizeof(bminfo));
bminfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bminfo.bmiHeader.biWidth = width;
bminfo.bmiHeader.biHeight = -(LONG)height;
bminfo.bmiHeader.biPlanes = 1;
bminfo.bmiHeader.biBitCount = 32;
bminfo.bmiHeader.biCompression = BI_RGB;
void *imageBits = NULL;
HDC screenDC = GetDC(NULL);
hBitmap = CreateDIBSection(screenDC, &bminfo, DIB_RGB_COLORS, &imageBits, NULL, 0);
ReleaseDC(NULL, screenDC);
if (!hBitmap) {
return NULL;
}
UINT stride = width * 4;
UINT imageSize = stride * height;
if (!SUCCEEDED(IWICBitmapSource_CopyPixels(bitmap, NULL, stride, imageSize, (BYTE*)imageBits))) {
DeleteObject(hBitmap);
return NULL;
}
return hBitmap;
}
HBITMAP LoadPNGResource(HINSTANCE hInstance, LPCWSTR resourceName, LPCWSTR resourceType) {
if (!$WICConvertBitmapSource) {
HMODULE windowscodecs = LoadLibrary(L"windowscodecs.dll");
if (windowscodecs) {
$WICConvertBitmapSource = (_WICConvertBitmapSource)GetProcAddress(windowscodecs, "WICConvertBitmapSource");
}
if (!$WICConvertBitmapSource) {
return NULL;
}
}
IStream *imageStream = GetResourceStream(hInstance, resourceName, resourceType);
if (!imageStream) {
TRACE(L"GetResourceStream failed: %d", GetLastError());
return NULL;
}
IWICBitmapSource *bitmap = GetWICBitmap(imageStream, &CLSID_WICPngDecoder);
if (!bitmap) {
TRACE(L"GetWICBitmap failed: %d", GetLastError());
IStream_Release(imageStream);
return NULL;
}
HBITMAP result = GetHBitmapForWICBitmap(bitmap);
IWICBitmapSource_Release(bitmap);
IStream_Release(imageStream);
return result;
}
HBITMAP LoadJPEGFile(LPCWSTR filePath) {
if (!$WICConvertBitmapSource) {
HMODULE windowscodecs = LoadLibrary(L"windowscodecs.dll");
if (windowscodecs) {
$WICConvertBitmapSource = (_WICConvertBitmapSource)GetProcAddress(windowscodecs, "WICConvertBitmapSource");
}
if (!$WICConvertBitmapSource) {
return NULL;
}
}
if (!$SHCreateStreamOnFileEx) {
HMODULE shlwapi = LoadLibrary(L"shlwapi.dll");
if (shlwapi) {
$SHCreateStreamOnFileEx = (_SHCreateStreamOnFileEx)GetProcAddress(shlwapi, "SHCreateStreamOnFileEx");
}
if (!$SHCreateStreamOnFileEx) {
return NULL;
}
}
IStream *imageStream = NULL;
HRESULT hr = $SHCreateStreamOnFileEx(filePath, STGM_READ, FILE_ATTRIBUTE_NORMAL, FALSE, NULL, &imageStream);
if (!SUCCEEDED(hr)) {
TRACE(L"SHCreateStreamOnFileEx failed: 0x%08x", hr);
return NULL;
}
IWICBitmapSource *bitmap = GetWICBitmap(imageStream, &CLSID_WICJpegDecoder);
if (!bitmap) {
TRACE(L"GetWICBitmap failed: %d", GetLastError());
IStream_Release(imageStream);
return NULL;
}
HBITMAP result = GetHBitmapForWICBitmap(bitmap);
IWICBitmapSource_Release(bitmap);
IStream_Release(imageStream);
return result;
}
BOOL ScaleAndWriteToBMP(HBITMAP hBitmap, DWORD width, DWORD height, LPCWSTR outputPath) {
BOOL result = FALSE;
if (!hBitmap) {
TRACE(L"Null bitmap");
return FALSE;
}
HDC hdc = GetDC(NULL);
HDC hdcMem = CreateCompatibleDC(hdc);
HDC hdcMemScaled = NULL;
HGLOBAL handle = NULL;
HANDLE file = INVALID_HANDLE_VALUE;
HBITMAP oldBitmap = NULL;
HBITMAP oldScaledBitmap = NULL;
HBITMAP scaledBitmap = CreateCompatibleBitmap(hdc, width, height);
if (!scaledBitmap) {
TRACE(L"CreateCompatibleBitmap failed: %d", GetLastError());
goto end;
}
BITMAP bmp = {0};
if (!GetObject(hBitmap, sizeof(BITMAP), &bmp)) {
TRACE(L"GetObject failed: %d", GetLastError());
goto end;
}
hdcMemScaled = CreateCompatibleDC(hdc);
SetStretchBltMode(hdcMemScaled, HALFTONE);
oldBitmap = SelectObject(hdcMem, hBitmap);
oldScaledBitmap = SelectObject(hdcMemScaled, scaledBitmap);
if (!StretchBlt(hdcMemScaled,
0, 0, width, height, hdcMem,
0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY)) {
TRACE(L"StretchBlt failed: %d", GetLastError());
goto end;
}
BITMAPINFOHEADER bmih = {0};
bmih.biSize = sizeof(BITMAPINFOHEADER);
bmih.biWidth = width;
bmih.biHeight = height;
bmih.biPlanes = 1;
bmih.biBitCount = bmp.bmBitsPixel;
bmih.biCompression = BI_RGB;
bmih.biSizeImage = ((width * bmp.bmBitsPixel + 31) / 32) * 4 * height;
BITMAPFILEHEADER bmfh = {0};
bmfh.bfType = 0x4D42;
bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bmfh.bfSize = bmfh.bfOffBits + bmih.biSizeImage;
handle = GlobalAlloc(GMEM_MOVEABLE, bmih.biSizeImage);
if (!handle) {
TRACE(L"GlobalAlloc failed: %d", GetLastError());
goto end;
}
BYTE *bitmapData = (BYTE *)GlobalLock(handle);
if (!bitmapData) {
TRACE(L"GlobalLock failed: %d", GetLastError());
goto end;
}
if (!GetDIBits(hdcMemScaled, scaledBitmap, 0, height, bitmapData, (BITMAPINFO *)&bmih, DIB_RGB_COLORS)) {
TRACE(L"GetDIBits failed: %d", GetLastError());
goto end;
}
file = CreateFile(outputPath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (file == INVALID_HANDLE_VALUE) {
TRACE(L"CreateFile failed: %d", GetLastError());
goto end;
}
DWORD written = 0;
if (!WriteFile(file, &bmfh, sizeof(BITMAPFILEHEADER), &written, NULL) ||
!WriteFile(file, &bmih, sizeof(BITMAPINFOHEADER), &written, NULL) ||
!WriteFile(file, bitmapData, bmih.biSizeImage, &written, NULL)) {
TRACE(L"WriteFile failed: %d", GetLastError());
goto end;
}
result = TRUE;
end:
if (hdcMem && oldBitmap) {
SelectObject(hdcMem, oldBitmap);
}
if (hdcMemScaled && oldScaledBitmap) {
SelectObject(hdcMemScaled, oldScaledBitmap);
}
if (file != INVALID_HANDLE_VALUE) {
CloseHandle(file);
}
if (scaledBitmap) {
DeleteObject(scaledBitmap);
}
if (handle) {
GlobalUnlock(handle);
GlobalFree(handle);
}
if (hdc) {
ReleaseDC(NULL, hdc);
}
if (hdcMem) {
DeleteDC(hdcMem);
}
if (hdcMemScaled) {
DeleteDC(hdcMemScaled);
}
return result;
}
================================================
FILE: shared/LoadImage.h
================================================
#pragma once
#include
HBITMAP LoadPNGResource(HINSTANCE hInstance, LPCWSTR resourceName, LPCWSTR resourceType);
HBITMAP LoadJPEGFile(LPCWSTR filePath);
BOOL ScaleAndWriteToBMP(HBITMAP hBitmap, DWORD width, DWORD height, LPCWSTR outputPath);
================================================
FILE: shared/Log.c
================================================
#include "stdafx.h"
#include "Log.h"
#include "Version.h"
#include "VersionInfo.h"
#include "User.h"
#include "Wow64.h"
static const struct {
DWORD arch;
LPCWSTR name;
} archNames[] = {
{PROCESSOR_ARCHITECTURE_INTEL, L"x86"},
{PROCESSOR_ARCHITECTURE_ARM, L"ARM"},
{PROCESSOR_ARCHITECTURE_IA64, L"IA64"},
{PROCESSOR_ARCHITECTURE_AMD64, L"x64"},
{PROCESSOR_ARCHITECTURE_ARM64, L"ARM64"}
};
static const struct {
DWORD rid;
LPCWSTR name;
} integrityLevels[] = {
{SECURITY_MANDATORY_UNTRUSTED_RID, L"untrusted"},
{SECURITY_MANDATORY_LOW_RID, L"low"},
{SECURITY_MANDATORY_MEDIUM_RID, L"medium"},
{SECURITY_MANDATORY_HIGH_RID, L"high"},
{SECURITY_MANDATORY_SYSTEM_RID, L"system"},
{SECURITY_MANDATORY_PROTECTED_PROCESS_RID, L"protected process"},
{MAXDWORD, L"n/a"}
};
static BOOL g_logInitialized = FALSE;
static HANDLE g_hLogFile = INVALID_HANDLE_VALUE;
void LogInternal(LPCWSTR text) {
if (g_hLogFile == INVALID_HANDLE_VALUE || text == NULL || wcslen(text) > LOG_LINE_MAXLEN) {
return;
}
SYSTEMTIME time;
GetLocalTime(&time);
WCHAR line[LOG_LINE_MAXLEN + 39];
int length = wsprintf(line, L"%04d-%02d-%02d %02d:%02d:%02d\t%ls[%d]\t%ls\r\n",
time.wYear, time.wMonth, time.wDay,
time.wHour, time.wMinute, time.wSecond,
L"" LOG_NAME, GetCurrentProcessId(),
text);
DWORD written = 0;
WriteFile(g_hLogFile, line, length * sizeof(WCHAR), &written, NULL);
FlushFileBuffers(g_hLogFile);
}
static void WriteLogBanner() {
// Divider
WCHAR divider[41];
for (size_t i = 0; i < ARRAYSIZE(divider) - 1; i++) {
divider[i] = L'=';
}
divider[ARRAYSIZE(divider) - 1] = L'\0';
LogInternal(divider);
// App version
LogInternal(L"Legacy Update " VERSION_STRING);
// OS info
LPCWSTR archName = L"?";
SYSTEM_INFO sysInfo;
OurGetNativeSystemInfo(&sysInfo);
for (size_t i = 0; i < ARRAYSIZE(archNames); i++) {
if (sysInfo.wProcessorArchitecture == archNames[i].arch) {
archName = archNames[i].name;
break;
}
}
OSVERSIONINFOEX *versionInfo = GetVersionInfo();
LPCWSTR productType = versionInfo->wProductType == VER_NT_WORKSTATION ? L"Workstation" : L"Server";
LOG(L"OS: %d.%d.%d%ls%ls %ls (%ls, Suite: %05x)",
versionInfo->dwMajorVersion,
versionInfo->dwMinorVersion,
versionInfo->dwBuildNumber,
versionInfo->szCSDVersion == NULL || lstrlen(versionInfo->szCSDVersion) == 0 ? L"" : L" ",
versionInfo->szCSDVersion,
archName,
productType,
versionInfo->wSuiteMask);
// Launch info
LOG(L"Command line: %ls", GetCommandLine());
// Integrity
DWORD integrity = GetTokenIntegrity();
LPCWSTR integrityName = L"?";
for (size_t i = 0; i < ARRAYSIZE(integrityLevels); i++) {
if (integrity <= integrityLevels[i].rid) {
integrityName = integrityLevels[i].name;
break;
}
}
LOG(L"%ls, %ls integrity", IsUserAdmin() ? L"Admin" : L"Non-admin", integrityName);
}
HRESULT OpenLog() {
if (g_logInitialized) {
return S_OK;
}
g_logInitialized = TRUE;
// Get system log path
WCHAR logPath[MAX_PATH];
GetWindowsDirectory(logPath, ARRAYSIZE(logPath));
lstrcat(logPath, AtLeastWinVista() ? L"\\Logs\\LegacyUpdate.log" : L"\\Temp\\LegacyUpdate.log");
SECURITY_ATTRIBUTES sa = {0};
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = FALSE;
// Try to open in the preferred location
g_hLogFile = CreateFile(logPath, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, &sa, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (g_hLogFile == INVALID_HANDLE_VALUE) {
// Access denied? Use user temp instead
GetTempPath(ARRAYSIZE(logPath), logPath);
lstrcat(logPath, L"LegacyUpdate.log");
g_hLogFile = CreateFile(logPath, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, &sa, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
}
HRESULT hr = HRESULT_FROM_WIN32(GetLastError());
if (hr == HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS)) {
// Continue previous log file
SetFilePointer(g_hLogFile, 0, NULL, FILE_END);
} else {
CHECK_HR_OR_RETURN(L"OpenLog");
// Write UTF-16LE BOM to make Notepad happy
DWORD bom = 0xFEFF;
DWORD written = 0;
WriteFile(g_hLogFile, &bom, sizeof(WCHAR), &written, NULL);
}
WriteLogBanner();
return S_OK;
}
void CloseLog(void) {
if (g_hLogFile != INVALID_HANDLE_VALUE) {
CloseHandle(g_hLogFile);
g_hLogFile = INVALID_HANDLE_VALUE;
}
}
================================================
FILE: shared/Log.h
================================================
#pragma once
#include
// Same as NSIS_MAX_STRLEN
#define LOG_LINE_MAXLEN 4096
EXTERN_C HRESULT OpenLog();
EXTERN_C void CloseLog(void);
EXTERN_C void LogInternal(LPCWSTR text);
#define LOG(...) { \
LPWSTR _logMsg = (LPWSTR)LocalAlloc(LPTR, LOG_LINE_MAXLEN * sizeof(WCHAR)); \
wsprintf(_logMsg, __VA_ARGS__); \
LogInternal(_logMsg); \
LocalFree(_logMsg); \
}
================================================
FILE: shared/ProductInfo.c
================================================
#include
typedef BOOL (WINAPI *_GetProductInfo)(DWORD, DWORD, DWORD, DWORD, PDWORD);
static BOOL productInfoLoaded = FALSE;
static _GetProductInfo $GetProductInfo;
BOOL GetVistaProductInfo(DWORD dwOSMajorVersion, DWORD dwOSMinorVersion, DWORD dwSpMajorVersion, DWORD dwSpMinorVersion, PDWORD pdwReturnedProductType) {
if (!productInfoLoaded) {
productInfoLoaded = TRUE;
$GetProductInfo = (_GetProductInfo)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "GetProductInfo");
}
if ($GetProductInfo) {
return $GetProductInfo(dwOSMajorVersion, dwOSMinorVersion, dwSpMajorVersion, dwSpMinorVersion, pdwReturnedProductType);
}
*pdwReturnedProductType = PRODUCT_UNDEFINED;
return FALSE;
}
================================================
FILE: shared/ProductInfo.h
================================================
#pragma once
#include
BOOL GetVistaProductInfo(DWORD dwOSMajorVersion, DWORD dwOSMinorVersion, DWORD dwSpMajorVersion, DWORD dwSpMinorVersion, PDWORD pdwReturnedProductType);
================================================
FILE: shared/Registry.c
================================================
#include "stdafx.h"
#include "Registry.h"
#include "VersionInfo.h"
#include
LPVOID DELETE_KEY = (LPVOID)INT_MIN;
LPVOID DELETE_VALUE = (LPVOID)(INT_MIN + 1);
HRESULT GetRegistryString(HKEY key, LPCWSTR subkeyPath, LPCWSTR valueName, REGSAM options, LPWSTR *data, LPDWORD size) {
if (data == NULL) {
return E_POINTER;
}
HKEY subkey = NULL;
HRESULT hr = HRESULT_FROM_WIN32(RegOpenKeyEx(key, subkeyPath, 0, GetRegistryWow64Flag(KEY_READ | options), &subkey));
if (!SUCCEEDED(hr)) {
goto end;
}
if (data) {
DWORD length = 0;
hr = HRESULT_FROM_WIN32(RegQueryValueEx(subkey, valueName, NULL, NULL, NULL, &length));
if (!SUCCEEDED(hr)) {
goto end;
}
LPWSTR buffer = (LPWSTR)LocalAlloc(LPTR, length + sizeof(WCHAR));
if (!buffer) {
hr = E_OUTOFMEMORY;
goto end;
}
hr = HRESULT_FROM_WIN32(RegQueryValueEx(subkey, valueName, NULL, NULL, (BYTE *)buffer, &length));
if (!SUCCEEDED(hr)) {
LocalFree(buffer);
goto end;
}
DWORD ourSize = length / sizeof(WCHAR);
buffer[ourSize] = L'\0';
*data = buffer;
if (size) {
*size = ourSize;
}
}
end:
if (subkey) {
RegCloseKey(subkey);
}
if (!SUCCEEDED(hr)) {
*data = NULL;
if (size) {
*size = 0;
}
}
return hr;
}
HRESULT GetRegistryDword(HKEY key, LPCWSTR subkeyPath, LPCWSTR valueName, REGSAM options, LPDWORD data) {
HKEY subkey = NULL;
HRESULT hr = HRESULT_FROM_WIN32(RegOpenKeyEx(key, subkeyPath, 0, GetRegistryWow64Flag(KEY_READ | options), &subkey));
if (!SUCCEEDED(hr)) {
goto end;
}
if (data) {
DWORD length = sizeof(DWORD);
hr = HRESULT_FROM_WIN32(RegQueryValueEx(subkey, valueName, NULL, NULL, (LPBYTE)data, &length));
}
end:
if (subkey) {
RegCloseKey(subkey);
}
return hr;
}
HRESULT SetRegistryEntries(RegistryEntry entries[]) {
for (DWORD i = 0; entries[i].hKey != NULL; i++) {
RegistryEntry entry = entries[i];
LPWSTR expandedSubKey = NULL, expandedData = NULL;
if (entry.lpSubKey) {
DWORD length = ExpandEnvironmentStrings((LPCWSTR)entry.lpSubKey, NULL, 0);
expandedSubKey = (LPWSTR)LocalAlloc(LPTR, length * sizeof(WCHAR));
ExpandEnvironmentStrings((LPCWSTR)entry.lpSubKey, expandedSubKey, length);
entry.lpSubKey = expandedSubKey;
}
HRESULT hr;
if (entry.uData.lpData == DELETE_KEY) {
#if WINVER < _WIN32_WINNT_WIN2K
hr = E_NOTIMPL;
#else
hr = HRESULT_FROM_WIN32(SHDeleteKey(entry.hKey, entry.lpSubKey));
#endif
if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) {
hr = S_OK;
}
if (!SUCCEEDED(hr)) {
TRACE(L"Delete %ls failed: %08x", entry.lpSubKey, hr);
if (expandedSubKey) {
LocalFree(expandedSubKey);
}
}
} else {
HKEY key;
hr = HRESULT_FROM_WIN32(RegCreateKeyEx(entry.hKey, entry.lpSubKey, 0, NULL, 0, GetRegistryWow64Flag(KEY_WRITE | entry.samDesired), NULL, &key, NULL));
if (!SUCCEEDED(hr)) {
TRACE(L"Create %ls failed: %08x", entry.lpSubKey, hr);
if (expandedSubKey) {
LocalFree(expandedSubKey);
}
return hr;
}
if (entry.uData.lpData == DELETE_VALUE) {
hr = HRESULT_FROM_WIN32(RegDeleteValue(key, entry.lpValueName));
if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) {
hr = S_OK;
}
} else if (entry.uData.lpData != NULL) {
if (entry.dwType == REG_SZ) {
if (entry.uData.lpData) {
DWORD length = ExpandEnvironmentStrings((LPCWSTR)entry.uData.lpData, NULL, 0);
expandedData = (LPWSTR)LocalAlloc(LPTR, length * sizeof(WCHAR));
ExpandEnvironmentStrings((LPCWSTR)entry.uData.lpData, expandedData, length);
entry.uData.lpData = expandedData;
entry.dataSize = (DWORD)(lstrlen((LPCWSTR)entry.uData.lpData) + 1) * sizeof(WCHAR);
} else {
entry.dataSize = 0;
}
hr = HRESULT_FROM_WIN32(RegSetValueEx(key, entry.lpValueName, 0, entry.dwType, (const BYTE *)entry.uData.lpData, entry.dataSize));
} else if (entry.dwType == REG_DWORD) {
hr = HRESULT_FROM_WIN32(RegSetValueEx(key, entry.lpValueName, 0, entry.dwType, (const BYTE *)&entry.uData.dwData, sizeof(entry.uData.dwData)));
}
}
if (!SUCCEEDED(hr)) {
TRACE(L"Set %ls -> %ls failed: %08x", entry.lpSubKey, entry.lpValueName, hr);
}
if (expandedSubKey) {
LocalFree(expandedSubKey);
}
if (expandedData) {
LocalFree(expandedData);
}
RegCloseKey(key);
}
if (!SUCCEEDED(hr)) {
return hr;
}
}
return S_OK;
}
================================================
FILE: shared/Registry.h
================================================
#pragma once
#include
#define REGPATH_SETUP L"System\\Setup"
#define REGPATH_CPL_DESKTOP L"Control Panel\\Desktop"
#define REGPATH_WIN L"Software\\Microsoft\\Windows\\CurrentVersion"
#define REGPATH_WIN_PERSONALIZE REGPATH_WIN L"\\Themes\\Personalize"
#define REGPATH_WINNT L"Software\\Microsoft\\Windows NT\\CurrentVersion"
#define REGPATH_WINNT_SERVERLEVELS REGPATH_WINNT L"\\Server\\ServerLevels"
#define REGPATH_WU L"Software\\Microsoft\\Windows\\CurrentVersion\\WindowsUpdate"
#define REGPATH_WU_REBOOTREQUIRED REGPATH_WU L"\\Auto Update\\RebootRequired"
#define REGPATH_POLICIES_WINDOWS L"Software\\Policies\\Microsoft\\Windows"
#define REGPATH_POLICIES_EXPLORER REGPATH_POLICIES_WINDOWS L"\\Explorer"
#define REGPATH_POLICIES_WU REGPATH_POLICIES_WINDOWS L"\\WindowsUpdate"
#define REGPATH_POLICIES_WU_AU REGPATH_POLICIES_WU L"\\AU"
#define REGPATH_LEGACYUPDATE L"Software\\Hashbang Productions\\Legacy Update"
#define REGPATH_LEGACYUPDATE_SETUP REGPATH_LEGACYUPDATE L"\\Setup"
#define REGPATH_LEGACYUPDATE_UNINSTALL REGPATH_WIN L"\\Uninstall\\Legacy Update"
// Filter out WOW64 keys that are not supported on Windows 2000
#ifdef _WIN64
#define GetRegistryWow64Flag(options) (options)
#else
#define GetRegistryWow64Flag(options) ((options) & ~(AtLeastWinXP2002() ? 0 : KEY_WOW64_64KEY | KEY_WOW64_32KEY))
#endif
EXTERN_C LPVOID DELETE_KEY;
EXTERN_C LPVOID DELETE_VALUE;
typedef struct {
HKEY hKey;
LPCTSTR lpSubKey;
LPCWSTR lpValueName;
DWORD dwType;
union {
LPVOID lpData;
DWORD dwData;
} uData;
DWORD dataSize;
REGSAM samDesired;
} RegistryEntry;
EXTERN_C HRESULT GetRegistryString(HKEY key, LPCWSTR subkeyPath, LPCWSTR valueName, REGSAM options, LPWSTR *data, LPDWORD size);
EXTERN_C HRESULT GetRegistryDword(HKEY key, LPCWSTR subkeyPath, LPCWSTR valueName, REGSAM options, LPDWORD data);
EXTERN_C HRESULT SetRegistryEntries(RegistryEntry entries[]);
================================================
FILE: shared/Startup.h
================================================
#pragma once
#include
typedef void (WINAPI *_SetDefaultDllDirectories)(DWORD DirectoryFlags);
typedef BOOL (WINAPI *_SetDllDirectoryW)(LPWSTR);
static inline void HardenDllSearchPaths(void) {
// Try our best to secure DLL search paths to just system32
WCHAR windir[MAX_PATH];
WCHAR sysdir[MAX_PATH];
GetWindowsDirectory(windir, ARRAYSIZE(windir));
GetSystemDirectory(sysdir, ARRAYSIZE(sysdir));
// Reset %windir% and %SystemRoot%
SetEnvironmentVariable(L"WINDIR", windir);
SetEnvironmentVariable(L"SystemRoot", windir);
// Reset %PATH% to just system32
WCHAR path[MAX_PATH];
wsprintf(path, L"%ls;%ls", sysdir, windir);
SetEnvironmentVariable(L"PATH", path);
wcscat(sysdir, L"\\kernel32.dll");
HMODULE kernel32 = GetModuleHandle(windir);
if (!kernel32) {
return;
}
// Windows Vista SP2+/7 SP1+ with KB2533623
_SetDefaultDllDirectories $SetDefaultDllDirectories = (_SetDefaultDllDirectories)GetProcAddress(kernel32, "SetDefaultDllDirectories");
if ($SetDefaultDllDirectories) {
$SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32);
return;
}
// Windows XP SP1+
_SetDllDirectoryW $SetDllDirectoryW = (_SetDllDirectoryW)GetProcAddress(kernel32, "SetDllDirectoryW");
if ($SetDllDirectoryW) {
$SetDllDirectoryW(L"");
return;
}
}
static inline void Startup(void) {
HardenDllSearchPaths();
}
================================================
FILE: shared/Trace.h
================================================
#pragma once
#include "Log.h"
#ifdef _DEBUG
// Yeah, sue me lol
#define TRACE(...) { \
LPWSTR __traceMsg = (LPWSTR)LocalAlloc(LPTR, 4096 * sizeof(WCHAR)); \
wsprintf(__traceMsg, L"%hs(%d): %hs: ", __FILE__, __LINE__, __func__); \
wsprintf(__traceMsg + wcslen(__traceMsg), __VA_ARGS__); \
MessageBox(NULL, __traceMsg, L"Debug", MB_OK); \
LocalFree(__traceMsg); \
LOG(__VA_ARGS__); \
}
#else
#define TRACE(...) LOG(__VA_ARGS__)
#endif
#define CHECK_HR_OR_RETURN(thing) \
if (!SUCCEEDED(hr)) { \
TRACE(thing L" failed: %08x", hr); \
return hr; \
}
#define CHECK_HR_OR_GOTO_END(thing) \
if (!SUCCEEDED(hr)) { \
TRACE(thing L" failed: %08x", hr); \
goto end; \
}
================================================
FILE: shared/User.h
================================================
#pragma once
#include
static inline BOOL IsUserAdmin(void) {
SID_IDENTIFIER_AUTHORITY authority = SECURITY_NT_AUTHORITY;
PSID adminsSid = NULL;
BOOL result = FALSE;
if (!AllocateAndInitializeSid(&authority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &adminsSid)) {
return FALSE;
}
if (!CheckTokenMembership(NULL, adminsSid, &result)) {
result = FALSE;
}
FreeSid(adminsSid);
return result;
}
static inline BOOL IsElevated(void) {
HANDLE hToken = NULL;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) {
return FALSE;
}
TOKEN_ELEVATION elevation;
DWORD size = sizeof(elevation);
if (!GetTokenInformation(hToken, TokenElevation, &elevation, sizeof(elevation), &size)) {
return FALSE;
}
BOOL result = elevation.TokenIsElevated;
CloseHandle(hToken);
return result;
}
static inline DWORD GetTokenIntegrity(void) {
#if WINVER < _WIN32_WINNT_WIN2K
return MAXDWORD;
#else
HANDLE hToken = NULL;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) {
return MAXDWORD;
}
BYTE buffer[sizeof(TOKEN_MANDATORY_LABEL) + SECURITY_MAX_SID_SIZE];
DWORD size = sizeof(buffer);
if (!GetTokenInformation(hToken, TokenIntegrityLevel, buffer, size, &size)) {
CloseHandle(hToken);
return MAXDWORD;
}
CloseHandle(hToken);
TOKEN_MANDATORY_LABEL *tokenLabel = (TOKEN_MANDATORY_LABEL *)buffer;
return *GetSidSubAuthority(tokenLabel->Label.Sid, *GetSidSubAuthorityCount(tokenLabel->Label.Sid) - 1);
#endif
}
================================================
FILE: shared/Version.h
================================================
#pragma once
#define VERSION 1,13,0,0
#define VERSION_STRING "1.13"
================================================
FILE: shared/VersionInfo.h
================================================
#pragma once
#include
#include "stdafx.h"
// Windows 11 Copper (22H2). "WIN10" typo is from the original sdkddkvers.h
#ifndef NTDDI_WIN10_CU
#define NTDDI_WIN10_CU 0x0A00000D
#endif
#define BUILD_WIN10_1507 10240
#define BUILD_WIN10_1511 10586
#define BUILD_WIN10_1607 14393
#define BUILD_WIN10_1703 15063
#define BUILD_WIN10_1709 16299
#define BUILD_WIN10_1803 17134
#define BUILD_WIN10_1809 17763
#define BUILD_WIN10_1903 18362
#define BUILD_WIN10_1909 18363
#define BUILD_WIN10_2004 19041
#define BUILD_WIN10_20H2 19042
#define BUILD_WIN10_21H1 19043
#define BUILD_WIN10_21H2 19044
#define BUILD_WIN10_22H2 19045
#define BUILD_WIN11_21H1 22000
#define BUILD_WIN11_22H2 22621
#define BUILD_WIN11_23H2 22631
#define BUILD_WIN11_24H2 26100
// Undocumented IsOS() flags
#define OS_STARTER 38 // Starter Edition
#define OS_STORAGESERVER 40 // Windows Storage Server 2003
#define OS_COMPUTECLUSTER 41 // Windows Compute Cluster 2003
#define OS_SERVERR2 42 // Windows Server 2003 R2 (in combination with edition)
#define OS_EMBPOS 43 // Windows Embedded for Point of Service
#define OS_HOMESERVER 43 // Windows Home Server (2007)
#define OS_WINFLP 44 // Windows Fundamentals for Legacy PCs
#define OS_EMBSTD2009 45 // Windows Embedded Standard 2009
#define OS_EMBPOS2009 46 // Windows Embedded POSReady 2009
EXTERN_C IMAGE_DOS_HEADER __ImageBase;
#define OWN_MODULE ((HMODULE)&__ImageBase)
static OSVERSIONINFOEX _versionInfo;
static ALWAYS_INLINE OSVERSIONINFOEX *GetVersionInfo(void) {
if (_versionInfo.dwOSVersionInfoSize == 0) {
ZeroMemory(&_versionInfo, sizeof(OSVERSIONINFOEX));
_versionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
GetVersionEx((LPOSVERSIONINFO)&_versionInfo);
}
return &_versionInfo;
}
static ALWAYS_INLINE WORD GetWinVer(void) {
return __builtin_bswap16(LOWORD(GetVersion()));
}
static ALWAYS_INLINE WORD GetWinBuild(void) {
return HIWORD(GetVersion());
}
#define _IS_OS_MACRO(name, ver) \
static ALWAYS_INLINE BOOL IsWin ## name(void) { \
return GetWinVer() == ver; \
} \
static ALWAYS_INLINE BOOL AtLeastWin ## name(void) { \
return GetWinVer() >= ver; \
} \
static ALWAYS_INLINE BOOL AtMostWin ## name(void) { \
return GetWinVer() <= ver; \
}
_IS_OS_MACRO(NT4, 0x0400)
_IS_OS_MACRO(2000, 0x0500)
_IS_OS_MACRO(XP2002, 0x0501)
_IS_OS_MACRO(XP2003, 0x0502)
_IS_OS_MACRO(Vista, 0x0600)
_IS_OS_MACRO(7, 0x0601)
_IS_OS_MACRO(8, 0x0602)
_IS_OS_MACRO(8_1, 0x0603)
_IS_OS_MACRO(10, 0x0A00)
#undef _IS_OS_MACRO
#define _IS_BUILD_MACRO(ver) \
static ALWAYS_INLINE BOOL IsWin ## ver(void) { \
return GetWinBuild() == BUILD_WIN ## ver; \
} \
static ALWAYS_INLINE BOOL AtLeastWin ## ver(void) { \
return GetWinBuild() >= BUILD_WIN ## ver; \
} \
static ALWAYS_INLINE BOOL AtMostWin ## ver(void) { \
return GetWinBuild() <= BUILD_WIN ## ver; \
}
_IS_BUILD_MACRO(10_1507)
_IS_BUILD_MACRO(10_1511)
_IS_BUILD_MACRO(10_1607)
_IS_BUILD_MACRO(10_1703)
_IS_BUILD_MACRO(10_1709)
_IS_BUILD_MACRO(10_1803)
_IS_BUILD_MACRO(10_1809)
_IS_BUILD_MACRO(10_1903)
_IS_BUILD_MACRO(10_1909)
_IS_BUILD_MACRO(10_2004)
_IS_BUILD_MACRO(10_20H2)
_IS_BUILD_MACRO(10_21H1)
_IS_BUILD_MACRO(10_21H2)
_IS_BUILD_MACRO(10_22H2)
_IS_BUILD_MACRO(11_21H1)
_IS_BUILD_MACRO(11_22H2)
_IS_BUILD_MACRO(11_23H2)
_IS_BUILD_MACRO(11_24H2)
#undef _IS_BUILD_MACRO
static ALWAYS_INLINE HRESULT GetOwnFileName(LPWSTR *filename) {
*filename = (LPWSTR)LocalAlloc(LPTR, MAX_PATH * sizeof(WCHAR));
if (GetModuleFileName(OWN_MODULE, *filename, MAX_PATH) == 0) {
HRESULT hr = HRESULT_FROM_WIN32(GetLastError());
LocalFree(*filename);
*filename = NULL;
return hr;
}
return S_OK;
}
================================================
FILE: shared/ViewLog.c
================================================
#include "ViewLog.h"
HRESULT ViewLog(LogAction log, int nCmdShow, BOOL showErrors) {
if (log < 0 || log > LogActionWindowsUpdate) {
return E_INVALIDARG;
}
WCHAR workDir[MAX_PATH];
switch (log) {
case LogActionSystem: {
LPCWSTR logsPath = AtLeastWinVista() ? L"%SystemRoot%\\Logs" : L"%SystemRoot%\\Temp";
ExpandEnvironmentStrings(logsPath, workDir, ARRAYSIZE(workDir));
break;
}
case LogActionLocal: {
GetTempPath(ARRAYSIZE(workDir), workDir);
break;
}
case LogActionLocalLow: {
if (!AtLeastWinVista()) {
return HRESULT_FROM_WIN32(ERROR_OLD_WIN_VERSION);
}
if (AtLeastWin7()) {
// AppData\Low\Temp
typedef HRESULT (*_SHGetKnownFolderPath)(const KNOWNFOLDERID *rfid, DWORD dwFlags, HANDLE hToken, PWSTR *ppszPath);
_SHGetKnownFolderPath $SHGetKnownFolderPath = (_SHGetKnownFolderPath)GetProcAddress(GetModuleHandle(L"shell32.dll"), "SHGetKnownFolderPath");
if ($SHGetKnownFolderPath == NULL) {
return HRESULT_FROM_WIN32(ERROR_OLD_WIN_VERSION);
}
LPWSTR localLow;
HRESULT hr = $SHGetKnownFolderPath(&FOLDERID_LocalAppDataLow, CSIDL_FLAG_CREATE, NULL, &localLow);
CHECK_HR_OR_RETURN(L"SHGetKnownFolderPath");
wsprintf(workDir, L"%ls\\Temp", localLow);
LocalFree(localLow);
} else {
// AppData\Local\Temp\Low
WCHAR localTemp[MAX_PATH];
GetTempPath(ARRAYSIZE(localTemp), localTemp);
wsprintf(workDir, L"%ls\\Low", localTemp);
}
break;
}
case LogActionWindowsUpdate: {
HRESULT hr = SHGetFolderPath(0, CSIDL_WINDOWS, NULL, 0, workDir);
CHECK_HR_OR_RETURN(L"SHGetFolderPath");
if (AtLeastWin10()) {
// Windows 10 moves WU/USO logs to ETW. The ETW logs can be converted back to a plain-text .log using a cmdlet.
WCHAR powershell[MAX_PATH];
ExpandEnvironmentStrings(L"%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe", powershell, ARRAYSIZE(powershell));
DWORD code = 0;
hr = Exec(NULL, powershell, L"-NoProfile -Command Get-WindowsUpdateLog", workDir, nCmdShow, TRUE, &code);
CHECK_HR_OR_RETURN(L"Exec");
if (code != 0) {
return E_FAIL;
}
// On success, the log is written to Desktop\WindowsUpdate.log.
hr = SHGetFolderPath(0, CSIDL_DESKTOP, NULL, 0, workDir);
CHECK_HR_OR_RETURN(L"SHGetFolderPath");
}
break;
}
}
LPCWSTR logFileName = log == LogActionWindowsUpdate ? L"WindowsUpdate.log" : L"LegacyUpdate.log";
WCHAR finalPath[MAX_PATH];
wsprintf(finalPath, L"%ls\\%ls", workDir, logFileName);
SHELLEXECUTEINFO execInfo = {0};
execInfo.cbSize = sizeof(execInfo);
execInfo.lpVerb = L"open";
execInfo.lpFile = finalPath;
execInfo.nShow = nCmdShow;
execInfo.fMask = showErrors ? 0 : SEE_MASK_FLAG_NO_UI;
HRESULT hr = ExecEx(&execInfo, FALSE, NULL);
return hr;
}
================================================
FILE: shared/ViewLog.h
================================================
#pragma once
#include "stdafx.h"
#include
#include
#include
#include "Exec.h"
#include "HResult.h"
#include "VersionInfo.h"
typedef enum LogAction {
LogActionSystem,
LogActionLocal,
LogActionLocalLow,
LogActionWindowsUpdate
} LogAction;
HRESULT ViewLog(LogAction log, int nCmdShow, BOOL showErrors);
================================================
FILE: shared/WMI.c
================================================
#include "stdafx.h"
#include "WMI.h"
#include
#ifdef CINTERFACE
#define our_CLSID_WbemLocator &CLSID_WbemLocator
#define our_IID_IWbemLocator &IID_IWbemLocator
#else
#define our_CLSID_WbemLocator CLSID_WbemLocator
#define our_IID_IWbemLocator IID_IWbemLocator
#define IWbemLocator_ConnectServer(obj, ...) obj->ConnectServer(__VA_ARGS__)
#define IWbemServices_ExecQuery(obj, ...) obj->ExecQuery(__VA_ARGS__)
#define IEnumWbemClassObject_Next(obj, ...) obj->Next(__VA_ARGS__)
#define IWbemClassObject_Get(obj, ...) obj->Get(__VA_ARGS__)
#define IWbemClassObject_Release(obj) obj->Release()
#define IEnumWbemClassObject_Release(obj) obj->Release()
#define IWbemServices_Release(obj) obj->Release()
#define IWbemLocator_Release(obj) obj->Release()
#endif
HRESULT QueryWMIProperty(LPCWSTR query, LPCWSTR property, LPVARIANT value) {
IWbemLocator *locator = NULL;
IWbemServices *services = NULL;
IEnumWbemClassObject *enumerator = NULL;
IWbemClassObject *object = NULL;
BSTR server, wql, queryBstr, propBstr;
ULONG uReturn = 0;
HRESULT hr = CoCreateInstance(our_CLSID_WbemLocator, NULL, CLSCTX_INPROC_SERVER, our_IID_IWbemLocator, (void **)&locator);
CHECK_HR_OR_GOTO_END(L"CoCreateInstance");
server = SysAllocString(L"ROOT\\CIMV2");
hr = IWbemLocator_ConnectServer(locator, server, NULL, NULL, NULL, 0, NULL, NULL, &services);
SysFreeString(server);
CHECK_HR_OR_GOTO_END(L"ConnectServer");
hr = CoSetProxyBlanket((IUnknown *)services, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE);
CHECK_HR_OR_GOTO_END(L"CoSetProxyBlanket");
wql = SysAllocString(L"WQL");
queryBstr = SysAllocString(query);
hr = IWbemServices_ExecQuery(services, wql, queryBstr, WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &enumerator);
SysFreeString(wql);
SysFreeString(queryBstr);
CHECK_HR_OR_GOTO_END(L"ExecQuery");
uReturn = 0;
hr = IEnumWbemClassObject_Next(enumerator, (LONG)WBEM_INFINITE, 1, &object, &uReturn);
CHECK_HR_OR_GOTO_END(L"Next");
propBstr = SysAllocString(property);
hr = IWbemClassObject_Get(object, propBstr, 0, value, NULL, NULL);
SysFreeString(propBstr);
CHECK_HR_OR_GOTO_END(L"Get");
end:
if (object) {
IWbemClassObject_Release(object);
}
if (enumerator) {
IEnumWbemClassObject_Release(enumerator);
}
if (services) {
IWbemServices_Release(services);
}
if (locator) {
IWbemLocator_Release(locator);
}
return hr;
}
================================================
FILE: shared/WMI.h
================================================
#pragma once
#include
#include
EXTERN_C HRESULT QueryWMIProperty(LPCWSTR query, LPCWSTR property, LPVARIANT value);
================================================
FILE: shared/Wow64.c
================================================
#include "stdafx.h"
#include "Wow64.h"
#if !_WIN64
typedef void (WINAPI *_GetNativeSystemInfo)(LPSYSTEM_INFO lpSystemInfo);
typedef BOOL (WINAPI *_Wow64DisableWow64FsRedirection)(PVOID *OldValue);
typedef BOOL (WINAPI *_Wow64RevertWow64FsRedirection)(PVOID OldValue);
static BOOL _loadedWow64;
static _GetNativeSystemInfo $GetNativeSystemInfo = NULL;
static _Wow64DisableWow64FsRedirection $Wow64DisableWow64FsRedirection;
static _Wow64RevertWow64FsRedirection $Wow64RevertWow64FsRedirection;
static void LoadWow64Symbols(void) {
if (!_loadedWow64) {
_loadedWow64 = TRUE;
HMODULE kernel32 = GetModuleHandle(L"kernel32.dll");
$GetNativeSystemInfo = (_GetNativeSystemInfo)GetProcAddress(kernel32, "GetNativeSystemInfo");
$Wow64DisableWow64FsRedirection = (_Wow64DisableWow64FsRedirection)GetProcAddress(kernel32, "Wow64DisableWow64FsRedirection");
$Wow64RevertWow64FsRedirection = (_Wow64RevertWow64FsRedirection)GetProcAddress(kernel32, "Wow64RevertWow64FsRedirection");
}
}
void OurGetNativeSystemInfo(LPSYSTEM_INFO lpSystemInfo) {
LoadWow64Symbols();
if ($GetNativeSystemInfo) {
$GetNativeSystemInfo(lpSystemInfo);
return;
}
GetSystemInfo(lpSystemInfo);
}
BOOL DisableWow64FsRedirection(PVOID *OldValue) {
LoadWow64Symbols();
if ($Wow64DisableWow64FsRedirection) {
return $Wow64DisableWow64FsRedirection(OldValue);
}
return TRUE;
}
BOOL RevertWow64FsRedirection(PVOID OldValue) {
LoadWow64Symbols();
if ($Wow64RevertWow64FsRedirection) {
return $Wow64RevertWow64FsRedirection(OldValue);
}
return TRUE;
}
#endif
================================================
FILE: shared/Wow64.h
================================================
#pragma once
#include
#if _WIN64
#define OurGetNativeSystemInfo(lpSystemInfo) GetNativeSystemInfo(lpSystemInfo)
#define DisableWow64FsRedirection(OldValue) TRUE
#define RevertWow64FsRedirection(OldValue) TRUE
#else
EXTERN_C void OurGetNativeSystemInfo(LPSYSTEM_INFO lpSystemInfo);
EXTERN_C BOOL DisableWow64FsRedirection(PVOID *OldValue);
EXTERN_C BOOL RevertWow64FsRedirection(PVOID OldValue);
#endif
================================================
FILE: shared/stdafx.h
================================================
#define ALWAYS_INLINE inline __attribute__((__always_inline__))