[
  {
    "path": ".editorconfig",
    "content": "# http://editorconfig.org\nroot = true\n\n[*]\nindent_style = tab\ntab_width = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true"
  },
  {
    "path": ".gitattributes",
    "content": "*         text=auto eol=lf\n*.sln     eol=crlf\n*.vcxproj eol=crlf\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "github: kirb\nko_fi: adamdemasi\npatreon: adamdemasi\ncustom: [\"https://paypal.me/HashbangProductions\"]\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/01-bug_report.yml",
    "content": "name: \"Bug Report\"\ndescription: \"Report something that isn’t working as expected\"\nlabels: [\"Bug\", \"Needs triage\"]\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        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.\n  - type: markdown\n    attributes:\n      value: |\n        ---\n        ### Describe the issue\n  - type: textarea\n    id: actual\n    attributes:\n      label: \"What is happening?\"\n      description: \"Describe the issue you’re experiencing. If you have screenshots or log files, please paste them here.\"\n    validations:\n      required: true\n  - type: textarea\n    id: expected\n    attributes:\n      label: \"What should have happened?\"\n      description: \"What did you expect to happen instead?\"\n    validations:\n      required: true\n  - type: textarea\n    id: steps\n    attributes:\n      label: \"Steps to reproduce the issue\"\n      description: \"Write the step-by-step instructions that lead to the bug happening.\"\n      placeholder: |\n        1. …\n        2. …\n        3. …\n    validations:\n      required: true\n  - type: markdown\n    attributes:\n      value: |\n        ---\n        ### Provide as many of these details as possible\n  - type: dropdown\n    id: os\n    attributes:\n      label: \"Operating System\"\n      options:\n        - Not applicable\n        - Windows NT 4.0\n        - Windows 2000\n        - Windows XP\n        - Windows Server 2003\n        - Windows Vista/Windows Server 2008\n        - Windows 7/Windows Server 2008 R2\n        - Windows 8/Windows Server 2012\n        - Windows 8.1/Windows Server 2012 R2\n        - Windows 10\n        - Windows 11\n    validations:\n      required: true\n  - type: dropdown\n    id: sp\n    attributes:\n      label: \"Service Pack\"\n      options:\n        - Not applicable\n        - Don’t know\n        - RTM\n        - SP1\n        - SP2\n        - SP3\n        - SP4\n        - SP5\n        - SP6\n    validations:\n      required: true\n  - type: dropdown\n    id: arch\n    attributes:\n      label: \"Architecture\"\n      description: \"Which architecture edition of Windows are you using?\"\n      options:\n        - Not applicable\n        - Don’t know\n        - 32-bit (x86)\n        - 64-bit (x64)\n        - Itanium (ia64)\n    validations:\n      required: true\n  - type: dropdown\n    id: vm\n    attributes:\n      label: \"Virtual Machine\"\n      description: \"Are you running Windows in a virtual machine or emulator?\"\n      options:\n        - Not applicable\n        - \"No\"\n        - Yes, 86Box\n        - Yes, Hyper-V\n        - Yes, Parallels\n        - Yes, QEMU/KVM\n        - Yes, UTM\n        - Yes, VirtualBox\n        - Yes, Virtual PC\n        - Yes, VMware\n        - Yes, something else\n    validations:\n      required: true\n  - type: dropdown\n    id: hardware\n    attributes:\n      label: \"Hardware\"\n      description: \"Select the option that best describes the hardware you are using.\"\n      options:\n        - Not applicable\n        - Don’t know\n        - 386\n        - 486\n        - Intel Pentium\n        - AMD K5/K6\n        - Cyrix 5x86/6x86\n        - Intel P6 (Pentium Pro/II/III)\n        - AMD K7 (e.g. Athlon XP)\n        - Cyrix III\n        - Intel Pentium 4\n        - Intel Pentium M\n        - AMD K8 (e.g. Athlon 64)\n        - Intel Pentium D\n        - Intel Core\n        - Intel Core 2\n        - AMD K10 (e.g. Phenom)\n        - Intel Core i\n        - AMD Bulldozer\n        - AMD Ryzen/Threadripper\n        - Other (please describe below)\n    validations:\n      required: true\n  - type: dropdown\n    id: software\n    attributes:\n      label: \"Software Installed\"\n      description: \"Select all other Microsoft software installed on your system. If any others are installed that aren’t listed here, please describe them below.\"\n      multiple: true\n      options:\n        - Not applicable\n        - Office XP (2002)\n        - Office 2003\n        - Office 2007\n        - Office 2010\n        - Office 2013 or later\n        - Visual Studio .NET 2002\n        - Visual Studio .NET 2003\n        - Visual Studio 2005\n        - Visual Studio 2008\n        - Visual Studio 2010\n        - Visual Studio 2012 or later\n        - SQL Server 2000\n        - SQL Server 2005\n        - SQL Server 2008\n        - SQL Server 2012 or later\n        - Exchange Server 2000\n        - Exchange Server 2003\n        - Exchange Server 2007\n        - Exchange Server 2010 or later\n  - type: markdown\n    attributes:\n      value: |\n        ---\n        ### Any other details that might be relevant?\n  - type: textarea\n    id: notes\n    attributes:\n      label: \"Other details\"\n      description: \"You can list hardware specifications here if you know them.\"\n    validations:\n      required: true\n  - type: markdown\n    attributes:\n      value: |\n        ---\n        ### Before you submit…\n        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!\n  - type: checkboxes\n    id: terms\n    attributes:\n      label: Confirmation\n      options:\n        - label: \"I have checked that this issue hasn’t already been reported\"\n          required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/02-update_issue.yml",
    "content": "name: \"Update Issue\"\ndescription: \"Report a problem with an update\"\nlabels: [\"Needs triage\"]\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        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.\n  - type: input\n    id: update\n    attributes:\n      label: \"Update\"\n      description: \"Provide the name or KB number of the update(s) you’re reporting an issue with.\"\n    validations:\n      required: true\n  - type: markdown\n    attributes:\n      value: |\n        ---\n        ### Describe the issue\n        If applicable, please include the error code from Windows Update:\n        * From the Legacy Update website: Click “Update History”, then click ![Error and question mark icon](https://legacyupdate.net/windowsupdate/v6/shared/images/status_failed.gif) next to the failed update.\n        * From the Windows Update control panel: Click “View update history”, then double-click the failed update.\n  - type: textarea\n    id: actual\n    attributes:\n      label: \"What is happening?\"\n      description: \"Describe the issue you’re experiencing. If you have screenshots or log files, please paste them here.\"\n    validations:\n      required: true\n  - type: textarea\n    id: expected\n    attributes:\n      label: \"What should have happened?\"\n      description: \"What did you expect to happen instead?\"\n    validations:\n      required: true\n  - type: textarea\n    id: steps\n    attributes:\n      label: \"Steps to reproduce the issue\"\n      description: \"Write the step-by-step instructions that lead to the bug happening.\"\n      placeholder: |\n        1. …\n        2. …\n        3. …\n    validations:\n      required: true\n  - type: markdown\n    attributes:\n      value: |\n        ---\n        ### Provide as many of these details as possible\n  - type: dropdown\n    id: os\n    attributes:\n      label: \"Operating System\"\n      options:\n        - Not applicable\n        - Windows NT 4.0\n        - Windows 2000\n        - Windows XP\n        - Windows Server 2003\n        - Windows Vista/Windows Server 2008\n        - Windows 7/Windows Server 2008 R2\n        - Windows 8/Windows Server 2012\n        - Windows 8.1/Windows Server 2012 R2\n        - Windows 10\n        - Windows 11\n    validations:\n      required: true\n  - type: dropdown\n    id: sp\n    attributes:\n      label: \"Service Pack\"\n      options:\n        - Not applicable\n        - Don’t know\n        - RTM\n        - SP1\n        - SP2\n        - SP3\n        - SP4\n        - SP5\n        - SP6\n    validations:\n      required: true\n  - type: dropdown\n    id: arch\n    attributes:\n      label: \"Architecture\"\n      description: \"Which architecture edition of Windows are you using?\"\n      options:\n        - Not applicable\n        - Don’t know\n        - 32-bit (x86)\n        - 64-bit (x64)\n        - Itanium (ia64)\n    validations:\n      required: true\n  - type: dropdown\n    id: vm\n    attributes:\n      label: \"Virtual Machine\"\n      description: \"Are you running Windows in a virtual machine or emulator?\"\n      options:\n        - Not applicable\n        - \"No\"\n        - Yes, 86Box\n        - Yes, Hyper-V\n        - Yes, Parallels\n        - Yes, QEMU/KVM\n        - Yes, UTM\n        - Yes, VirtualBox\n        - Yes, Virtual PC\n        - Yes, VMware\n        - Yes, something else\n    validations:\n      required: true\n  - type: dropdown\n    id: hardware\n    attributes:\n      label: \"Hardware\"\n      description: \"Select the option that best describes the hardware you are using.\"\n      options:\n        - Not applicable\n        - Don’t know\n        - 386\n        - 486\n        - Intel Pentium\n        - AMD K5/K6\n        - Cyrix 5x86/6x86\n        - Intel P6 (Pentium Pro/II/III)\n        - AMD K7 (e.g. Athlon XP)\n        - Cyrix III\n        - Intel Pentium 4\n        - Intel Pentium M\n        - AMD K8 (e.g. Athlon 64)\n        - Intel Pentium D\n        - Intel Core\n        - Intel Core 2\n        - AMD K10 (e.g. Phenom)\n        - Intel Core i\n        - AMD Bulldozer\n        - AMD Ryzen/Threadripper\n        - Other (please describe below)\n    validations:\n      required: true\n  - type: dropdown\n    id: software\n    attributes:\n      label: \"Software\"\n      description: \"Select the software this issue is relevant to. If it isn’t listed here, please describe below.\"\n      options:\n        - Not applicable\n        - Office XP (2002)\n        - Office 2003\n        - Office 2007\n        - Office 2010\n        - Office 2013 or later\n        - Visual Studio .NET 2002\n        - Visual Studio .NET 2003\n        - Visual Studio 2005\n        - Visual Studio 2008\n        - Visual Studio 2010\n        - Visual Studio 2012 or later\n        - SQL Server 2000\n        - SQL Server 2005\n        - SQL Server 2008\n        - SQL Server 2012 or later\n        - Exchange Server 2000\n        - Exchange Server 2003\n        - Exchange Server 2007\n        - Exchange Server 2010 or later\n        - Other\n    validations:\n      required: true\n  - type: dropdown\n    id: software-arch\n    attributes:\n      label: \"Software Architecture\"\n      description: \"Which architecture edition of the software are you using?\"\n      options:\n        - Not applicable\n        - Don’t know\n        - 32-bit (x86)\n        - 64-bit (x64)\n        - Itanium (ia64)\n    validations:\n      required: true\n  - type: markdown\n    attributes:\n      value: |\n        ---\n        ### Any other details that might be relevant?\n  - type: textarea\n    id: notes\n    attributes:\n      label: \"Other details\"\n      description: \"You can list hardware specifications here if you know them.\"\n    validations:\n      required: true\n  - type: markdown\n    attributes:\n      value: |\n        ---\n        ### Before you submit…\n        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!\n  - type: checkboxes\n    id: terms\n    attributes:\n      label: Confirmation\n      options:\n        - label: \"I have checked that this issue hasn’t already been reported\"\n          required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/03-download_center_issue.yml",
    "content": "name: \"Download Center Issue\"\ndescription: \"Report a problem with the Microsoft Download Center Archive\"\nlabels: [\"Component: Download Center\", \"Needs triage\"]\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        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.\n  - type: input\n    id: url\n    attributes:\n      label: \"URL\"\n      description: \"Paste the link to the download page you’re reporting an issue with.\"\n    validations:\n      required: true\n  - type: dropdown\n    id: type\n    attributes:\n      label: \"Type of Issue\"\n      options:\n        - File missing (not shown on the page)\n        - File deleted (404 Not Found)\n        - File corrupted (error when downloading)\n        - Incorrect metadata\n        - Other\n    validations:\n      required: true\n  - type: textarea\n    id: notes\n    attributes:\n      label: \"Details\"\n      description: \"Include more information about the issue.\"\n    validations:\n      required: true\n  - type: markdown\n    attributes:\n      value: |\n        ---\n        ### Before you submit…\n        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!\n  - type: checkboxes\n    id: terms\n    attributes:\n      label: Confirmation\n      options:\n        - label: \"I have checked that this issue hasn’t already been reported\"\n          required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/04-feature_suggestion.yml",
    "content": "name: \"Feature Suggestion\"\ndescription: \"Suggest a feature to be added to Legacy Update\"\nlabels: [\"Enhancement\", \"Needs triage\"]\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        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.\n  - type: dropdown\n    id: component\n    attributes:\n      label: \"Component\"\n      description: \"Which part of Legacy Update does this apply to?\"\n      options:\n        - ActiveX control\n        - Download Center Archive\n        - Update server (WSUS)\n        - Update website\n        - Setup\n        - Other\n    validations:\n      required: true\n  - type: textarea\n    id: notes\n    attributes:\n      label: \"Details\"\n      description: \"Describe the feature you would like to see. How will it work? Does it fix an issue?\"\n    validations:\n      required: true\n  - type: markdown\n    attributes:\n      value: |\n        ---\n        ### Before you submit…\n        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!\n  - type: checkboxes\n    id: terms\n    attributes:\n      label: Confirmation\n      options:\n        - label: \"I have checked that this issue hasn’t already been reported\"\n          required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\ncontact_links:\n  - name: Legacy Update Help\n    url: https://legacyupdate.net/help/\n    about: Many common issues are already answered on our website.\n  - name: Get help on GitHub Discussions\n    url: https://github.com/orgs/LegacyUpdate/discussions\n    about: If this isn’t a bug with Legacy Update, you can post in our community discussion forum.\n  - name: Get help on Discord\n    url: https://legacyupdate.net/discord\n    about: If you prefer Discord, you can create a support thread in our Discord community.\n"
  },
  {
    "path": ".github/workflows/build-nt4.yml",
    "content": "name: Build Legacy Update NT\n\non:\n  push:\n    branches: []\n  pull_request:\n    branches: []\n  workflow_dispatch:\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n    - name: Checkout\n      uses: actions/checkout@v6\n\n    - name: Set up\n      run: |\n        sudo apt-get update -q\n        sudo apt-get install -qy curl make mingw-w64-x86-64-dev nsis p7zip-full upx-ucl unzip\n\n    - name: MinGW toolchain cache\n      id: mingw-cache\n      uses: actions/cache@v5\n      with:\n        path: |\n          /opt/gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0-i686\n          /opt/gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0-x86_64\n        key: gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0\n\n    - name: Install MinGW toolchain\n      if: steps.mingw-cache.outputs.cache-hit != 'true'\n      run: |\n        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\n        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\n        sudo tar -xf /tmp/mingw32.tar.xz -C /opt\n        sudo tar -xf /tmp/mingw64.tar.xz -C /opt\n        rm /tmp/mingw{32,64}.tar.xz\n\n    - name: NSIS cache\n      id: nsis-cache\n      uses: actions/cache@v5\n      with:\n        path: /opt/nsis-3.11\n        key: nsis-3.11\n\n    - name: Install custom NSIS package\n      if: steps.nsis-cache.outputs.cache-hit != 'true'\n      run: |\n        curl -fsSL https://linuxfromscratch.org/~renodr/nsis-3.11-lfsci-2.tar.xz -o /tmp/nsis-3.11.tar.xz\n        sudo tar -xf /tmp/nsis-3.11.tar.xz -C /opt\n        rm /tmp/nsis-3.11.tar.xz\n\n    - name: Patches cache\n      id: patches-cache\n      uses: actions/cache@v4\n      with:\n        path: setup/patches/\n        key: nt4-patches-${{hashFiles('setup/patches/**')}}\n\n    - name: Download patches\n      if: steps.patches-cache.outputs.cache-hit != 'true'\n      run: |\n        ./build/get-nt4-patches.sh\n\n    - name: Build\n      id: build\n      run: |\n        export PATH=/opt/gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0-i686/bin:$PATH\n        export PATH=/opt/gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0-x86_64/bin:$PATH\n        export PATH=/opt/nsis-3.11/bin:$PATH\n        make -j$(nproc) CI=1 DEBUG=0 nt4\n\n    - name: Upload Build Artifact\n      uses: actions/upload-artifact@v7\n      with:\n        path: |\n          setup/LegacyUpdateNT-*.exe\n"
  },
  {
    "path": ".github/workflows/build.yml",
    "content": "name: Build Legacy Update\n\non:\n  push:\n    branches: []\n  pull_request:\n    branches: []\n  workflow_dispatch:\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n    - name: Checkout\n      uses: actions/checkout@v6\n\n    - name: Set up\n      run: |\n        sudo apt-get update -q\n        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\n\n    - name: MinGW toolchain cache\n      id: mingw-cache\n      uses: actions/cache@v5\n      with:\n        path: |\n          /opt/gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0-i686\n          /opt/gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0-x86_64\n        key: gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0\n\n    - name: Install MinGW toolchain\n      if: steps.mingw-cache.outputs.cache-hit != 'true'\n      run: |\n        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\n        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\n        sudo tar -xf /tmp/mingw32.tar.xz -C /opt\n        sudo tar -xf /tmp/mingw64.tar.xz -C /opt\n        rm /tmp/mingw{32,64}.tar.xz\n\n    - name: NSIS cache\n      id: nsis-cache\n      uses: actions/cache@v5\n      with:\n        path: /opt/nsis-3.11\n        key: nsis-3.11\n\n    - name: Install custom NSIS package\n      if: steps.nsis-cache.outputs.cache-hit != 'true'\n      run: |\n        curl -fsSL https://linuxfromscratch.org/~renodr/nsis-3.11-lfsci-2.tar.xz -o /tmp/nsis-3.11.tar.xz\n        sudo tar -xf /tmp/nsis-3.11.tar.xz -C /opt\n        rm /tmp/nsis-3.11.tar.xz\n\n    - name: Build\n      id: build\n      run: |\n        export PATH=/opt/gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0-i686/bin:$PATH\n        export PATH=/opt/gcc-15.2-20260228-binutils-2.46.0-mingw-v13.0.0-x86_64/bin:$PATH\n        export PATH=/opt/nsis-3.11/bin:$PATH\n        make -j$(nproc) CI=1 DEBUG=0\n\n    - name: Upload Build Artifact\n      uses: actions/upload-artifact@v7\n      with:\n        path: |\n          setup/LegacyUpdate-*.exe\n"
  },
  {
    "path": ".gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore\n\n# User-specific files\n*.rsuser\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n*.userprefs\n\n# Build results\nDebug/\nDebug-VC08/\nDebug-VC17/\nRelease/\n*.exe\n*.dll\n!setup/x86-unicode/*.dll\nsetup/x86-unicode/LegacyUpdateNSIS.dll\nobj/\n*_layout.inf\n\n# Visual Studio 2015/2017 cache/options directory\n.vs/\n\n# Visual Studio 2017 auto generated files\nGenerated\\ Files/\n\n# Files built by Visual Studio\n*_i.c\n*_p.c\n*_i.h\n*idl.h\n*.i\n*.ilk\n*.meta\n*.obj\n*.iobj\n*.pch\n*.pdb\n*.ipdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*_wpftmp.csproj\n*.log\n*.tlog\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opendb\n*.opensdf\n*.sdf\n*.cachefile\n*.VC.db\n*.VC.VC.opendb\n\n# NuGet Packages\n*.nupkg\n# NuGet Symbol Packages\n*.snupkg\n# The packages folder can be ignored because of Package Restore\n**/[Pp]ackages/*\n# except build/, which is used as an MSBuild target.\n!**/[Pp]ackages/build/\n# Uncomment if necessary however generally it will be regenerated when needed\n#!**/[Pp]ackages/repositories.config\n# NuGet v3's project.json files produces more ignorable files\n*.nuget.props\n*.nuget.targets\n\n# Visual Studio cache files\n# files ending in .cache can be ignored\n*.[Cc]ache\n# but keep track of directories ending in .cache\n!?*.[Cc]ache/\n\n# Others\nClientBin/\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.jfm\n*.pfx\n*.publishsettings\norleans.codegen.cs\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\nServiceFabricBackup/\n*.rptproj.bak\n\n# Windows Installer files from build outputs\n*.cab\n*.msi\n*.msix\n*.msm\n*.msp\n"
  },
  {
    "path": ".idea/.idea.LegacyUpdate/.idea/.gitignore",
    "content": "# Default ignored files\n/shelf/\n/workspace.xml\n# Rider ignored files\n/.idea.LegacyUpdate.iml\n/modules.xml\n/contentModel.xml\n/projectSettingsUpdater.xml\n# Editor-based HTTP Client requests\n/httpRequests/\n# Datasource local storage ignored files\n/dataSources/\n/dataSources.local.xml\n"
  },
  {
    "path": ".idea/.idea.LegacyUpdate/.idea/discord.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"DiscordProjectSettings\">\n    <option name=\"show\" value=\"PROJECT\" />\n    <option name=\"description\" value=\"\" />\n  </component>\n</project>"
  },
  {
    "path": ".idea/.idea.LegacyUpdate/.idea/indexLayout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"UserContentModel\">\n    <attachedFolders>\n      <Path>.</Path>\n    </attachedFolders>\n    <explicitIncludes />\n    <explicitExcludes />\n  </component>\n</project>"
  },
  {
    "path": ".idea/.idea.LegacyUpdate/.idea/vcs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping directory=\"\" vcs=\"Git\" />\n  </component>\n</project>"
  },
  {
    "path": ".vscode/c_cpp_properties.json",
    "content": "{\n    \"configurations\": [\n        {\n            \"name\": \"MinGW\",\n            \"includePath\": [\n                \"${workspaceFolder}/include\",\n                \"${workspaceFolder}/shared\"\n            ],\n            \"compilerPath\": \"/usr/bin/i686-w64-mingw32-g++\",\n            \"cStandard\": \"c17\",\n            \"cppStandard\": \"c++11\",\n            \"intelliSenseMode\": \"windows-gcc-x86\",\n            \"compilerArgs\": [\n                \"-mwindows\",\n                \"-municode\",\n                \"-fPIE\",\n                \"-fno-unwind-tables\",\n                \"-fno-asynchronous-unwind-tables\",\n                \"-fno-exceptions\",\n                \"-Wall\",\n                \"-Wextra\",\n                \"-Wpedantic\",\n                \"-Wno-unused-parameter\",\n                \"-Wno-unused-variable\",\n                \"-Wno-unknown-pragmas\",\n                \"-Wno-cast-function-type\",\n                \"-Wno-missing-field-initializers\",\n                \"-Iobj\",\n                \"-include stdafx.h\"\n            ],\n            \"defines\": [\n                \"UNICODE\",\n                \"_UNICODE\"\n            ]\n        }\n    ],\n    \"version\": 4\n}\n"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n\t\"files.associations\": {\n\t\t\"*.rc\": \"cpp\",\n\t\t\"*.idl\": \"cpp\"\n\t}\n}\n"
  },
  {
    "path": "LICENSE.md",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "LegacyUpdate/ClassFactory.cpp",
    "content": "#include \"ClassFactory.h\"\n#include \"LegacyUpdate_i.h\"\n#include \"LegacyUpdateCtrl.h\"\n#include \"ElevationHelper.h\"\n#include \"ProgressBarControl.h\"\n#include \"dllmain.h\"\n#include <new>\n\nSTDMETHODIMP CClassFactory::Create(IUnknown *pUnkOuter, REFIID riid, void **ppv) {\n\tif (pUnkOuter != NULL) {\n\t\treturn CLASS_E_NOAGGREGATION;\n\t}\n\n\tCClassFactory *pThis = (CClassFactory *)CoTaskMemAlloc(sizeof(CClassFactory));\n\tif (pThis == NULL) {\n\t\treturn E_OUTOFMEMORY;\n\t}\n\n\tnew(pThis) CClassFactory();\n\tHRESULT hr = pThis->QueryInterface(riid, ppv);\n\tCHECK_HR_OR_RETURN(L\"QueryInterface\");\n\tpThis->Release();\n\treturn hr;\n}\n\nCClassFactory::~CClassFactory(void) {\n}\n\nSTDMETHODIMP CClassFactory::QueryInterface(REFIID riid, void **ppvObject) {\n\tif (ppvObject == NULL) {\n\t\treturn E_POINTER;\n\t}\n\n\t*ppvObject = NULL;\n\n\tif (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IClassFactory)) {\n\t\t*ppvObject = this;\n\t\tAddRef();\n\t\treturn S_OK;\n\t}\n\n\treturn E_NOINTERFACE;\n}\n\nSTDMETHODIMP_(ULONG) CClassFactory::AddRef(void) {\n\treturn InterlockedIncrement(&m_refCount);\n}\n\nSTDMETHODIMP_(ULONG) CClassFactory::Release(void) {\n\tULONG count = InterlockedDecrement(&m_refCount);\n\tif (count == 0) {\n\t\tthis->~CClassFactory();\n\t\tCoTaskMemFree(this);\n\t}\n\treturn count;\n}\n\nSTDMETHODIMP CClassFactory::CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppvObject) {\n\treturn createFunc(pUnkOuter, riid, ppvObject);\n}\n\nSTDMETHODIMP CClassFactory::LockServer(BOOL fLock) {\n\tif (fLock) {\n\t\tInterlockedIncrement(&g_serverLocks);\n\t} else {\n\t\tInterlockedDecrement(&g_serverLocks);\n\t}\n\treturn S_OK;\n}\n"
  },
  {
    "path": "LegacyUpdate/ClassFactory.h",
    "content": "#pragma once\n\n#include \"com.h\"\n\nSTDMETHODIMP CreateClassFactory(IUnknown *pUnkOuter, REFIID riid, void **ppv);\n\nclass DECLSPEC_NOVTABLE CClassFactory : public IClassFactory {\npublic:\n\tCClassFactory() :\n\t\tm_refCount(1),\n\t\tcreateFunc(NULL),\n\t\tclsid(NULL) {}\n\n\tvirtual ~CClassFactory();\n\n\tstatic STDMETHODIMP Create(IUnknown *pUnkOuter, REFIID riid, void **ppv);\n\nprivate:\n\tLONG m_refCount;\n\npublic:\n\tSTDMETHODIMP (*createFunc)(IUnknown *pUnkOuter, REFIID riid, void **ppv);\n\tconst GUID *clsid;\n\n\t// IUnknown\n\tSTDMETHODIMP QueryInterface(REFIID riid, void **ppvObject);\n\tSTDMETHODIMP_(ULONG) AddRef();\n\tSTDMETHODIMP_(ULONG) Release();\n\n\t// IClassFactory\n\tSTDMETHODIMP CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppvObject);\n\tSTDMETHODIMP LockServer(BOOL fLock);\n};\n"
  },
  {
    "path": "LegacyUpdate/Compat.cpp",
    "content": "#include \"Compat.h\"\n#include <windows.h>\n#include <shellscalingapi.h>\n#include \"resource.h\"\n#include \"ProductInfo.h\"\n\ntypedef BOOL (WINAPI *_SetProcessDpiAwarenessContext)(DPI_AWARENESS_CONTEXT);\ntypedef HRESULT (WINAPI *_SetProcessDpiAwareness)(PROCESS_DPI_AWARENESS);\ntypedef void (WINAPI *_SetProcessDPIAware)();\n\ntypedef HANDLE (WINAPI *_CreateActCtxW)(const ACTCTX *);\ntypedef BOOL (WINAPI *_ActivateActCtx)(HANDLE, ULONG_PTR *);\ntypedef BOOL (WINAPI *_DeactivateActCtx)(DWORD, ULONG_PTR);\ntypedef void (WINAPI *_ReleaseActCtx)(HANDLE);\ntypedef BOOL (WINAPI *_GetCurrentActCtx)(HANDLE *);\n\nstatic BOOL actCtxLoaded = FALSE;\nstatic _CreateActCtxW $CreateActCtx;\nstatic _ActivateActCtx $ActivateActCtx;\nstatic _DeactivateActCtx $DeactivateActCtx;\nstatic _ReleaseActCtx $ReleaseActCtx;\nstatic _GetCurrentActCtx $GetCurrentActCtx;\n\nstatic BOOL comctlLoaded = FALSE;\nstatic HMODULE hComctl32 = NULL;\n\nvoid BecomeDPIAware(void) {\n\t// Make the process DPI-aware... hopefully\n\t// Windows 10 1703+ per-monitor v2\n\t_SetProcessDpiAwarenessContext $SetProcessDpiAwarenessContext = (_SetProcessDpiAwarenessContext)GetProcAddress(LoadLibrary(L\"user32.dll\"), \"SetProcessDpiAwarenessContext\");\n\tif ($SetProcessDpiAwarenessContext) {\n\t\t$SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);\n\t\treturn;\n\t}\n\n\t// Windows 8.1 - 10 1607 per-monitor v1\n\t_SetProcessDpiAwareness $SetProcessDpiAwareness = (_SetProcessDpiAwareness)GetProcAddress(LoadLibrary(L\"shcore.dll\"), \"SetProcessDpiAwareness\");\n\tif ($SetProcessDpiAwareness) {\n\t\t$SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);\n\t\treturn;\n\t}\n\n\t// Windows Vista - 8\n\t_SetProcessDPIAware $SetProcessDPIAware = (_SetProcessDPIAware)GetProcAddress(LoadLibrary(L\"user32.dll\"), \"SetProcessDPIAware\");\n\tif ($SetProcessDPIAware) {\n\t\t$SetProcessDPIAware();\n\t}\n}\n\n// Handling for SxS contexts (mainly for comctl 6.0)\nvoid IsolationAwareStart(ULONG_PTR *cookie) {\n\t*cookie = 0;\n\n\tif (!actCtxLoaded) {\n\t\tactCtxLoaded = TRUE;\n\t\tHMODULE kernel32 = GetModuleHandle(L\"kernel32.dll\");\n\t\t$CreateActCtx = (_CreateActCtxW)GetProcAddress(kernel32, \"CreateActCtxW\");\n\t\t$ActivateActCtx = (_ActivateActCtx)GetProcAddress(kernel32, \"ActivateActCtx\");\n\t\t$DeactivateActCtx = (_DeactivateActCtx)GetProcAddress(kernel32, \"DeactivateActCtx\");\n\t\t$ReleaseActCtx = (_ReleaseActCtx)GetProcAddress(kernel32, \"ReleaseActCtx\");\n\t\t$GetCurrentActCtx = (_GetCurrentActCtx)GetProcAddress(kernel32, \"GetCurrentActCtx\");\n\t}\n\n\tif (!$CreateActCtx || !$ActivateActCtx || !$ReleaseActCtx) {\n\t\treturn;\n\t}\n\n\t// Borrowing the manifest from shell32.dll\n\tWCHAR shell32[MAX_PATH];\n\tGetModuleFileName(GetModuleHandle(L\"shell32.dll\"), shell32, ARRAYSIZE(shell32));\n\n\tACTCTX actCtx = {0};\n\tactCtx.cbSize = sizeof(actCtx);\n\tactCtx.dwFlags = ACTCTX_FLAG_RESOURCE_NAME_VALID;\n\tactCtx.lpSource = shell32;\n\tactCtx.lpResourceName = MAKEINTRESOURCE(124);\n\n\tHANDLE hActCtx = $CreateActCtx(&actCtx);\n\tif (hActCtx != INVALID_HANDLE_VALUE) {\n\t\tif (!$ActivateActCtx(hActCtx, cookie)) {\n\t\t\t$ReleaseActCtx(hActCtx);\n\t\t\thActCtx = INVALID_HANDLE_VALUE;\n\t\t}\n\t}\n}\n\nvoid IsolationAwareEnd(ULONG_PTR *cookie) {\n\tif (!$DeactivateActCtx || !$GetCurrentActCtx) {\n\t\treturn;\n\t}\n\n\tif (*cookie != 0) {\n\t\tHANDLE hActCtx = INVALID_HANDLE_VALUE;\n\t\tif ($GetCurrentActCtx(&hActCtx) && hActCtx != INVALID_HANDLE_VALUE) {\n\t\t\t$DeactivateActCtx(0, *cookie);\n\t\t\t$ReleaseActCtx(hActCtx);\n\t\t}\n\t\t*cookie = 0;\n\t}\n}\n"
  },
  {
    "path": "LegacyUpdate/Compat.h",
    "content": "#pragma once\n\nvoid BecomeDPIAware();\nvoid IsolationAwareStart(ULONG_PTR *cookie);\nvoid IsolationAwareEnd(ULONG_PTR *cookie);\n"
  },
  {
    "path": "LegacyUpdate/ElevationHelper.cpp",
    "content": "// ElevationHelper.cpp : Implementation of CElevationHelper\n\n#include \"ElevationHelper.h\"\n#include \"Compat.h\"\n#include \"HResult.h\"\n#include \"LegacyUpdate.h\"\n#include \"NGen.h\"\n#include \"Registry.h\"\n#include \"Utils.h\"\n#include \"VersionInfo.h\"\n#include <strsafe.h>\n#include <new>\n#include \"IUpdateInstaller4.h\"\n\nconst WCHAR *permittedProgIDs[] = {\n\tL\"Microsoft.Update.\"\n};\n\nDEFINE_UUIDOF(CElevationHelper, CLSID_ElevationHelper);\n\nBOOL ProgIDIsPermitted(PWSTR progID) {\n\tif (progID == NULL) {\n\t\treturn FALSE;\n\t}\n\n\tfor (DWORD i = 0; i < ARRAYSIZE(permittedProgIDs); i++) {\n\t\tif (wcsncmp(progID, permittedProgIDs[i], wcslen(permittedProgIDs[i])) == 0) {\n\t\t\treturn TRUE;\n\t\t}\n\t}\n\n\treturn FALSE;\n}\n\nSTDMETHODIMP CoCreateInstanceAsAdmin(HWND hwnd, REFCLSID rclsid, REFIID riid, void **ppv) {\n\tWCHAR clsidString[39];\n\tStringFromGUID2(rclsid, clsidString, ARRAYSIZE(clsidString));\n\n\tWCHAR monikerName[67];\n\twsprintf(monikerName, L\"Elevation:Administrator!new:%ls\", clsidString);\n\n\tBIND_OPTS3 bindOpts;\n\tZeroMemory(&bindOpts, sizeof(bindOpts));\n\tbindOpts.cbStruct = sizeof(bindOpts);\n\tbindOpts.hwnd = hwnd;\n\tbindOpts.dwClassContext = CLSCTX_LOCAL_SERVER;\n\treturn CoGetObject(monikerName, (BIND_OPTS *)&bindOpts, riid, ppv);\n}\n\nSTDMETHODIMP CElevationHelper::Create(IUnknown *pUnkOuter, REFIID riid, void **ppv) {\n\tif (pUnkOuter != NULL) {\n\t\treturn CLASS_E_NOAGGREGATION;\n\t}\n\n\tCElevationHelper *pThis = (CElevationHelper *)CoTaskMemAlloc(sizeof(CElevationHelper));\n\tif (pThis == NULL) {\n\t\treturn E_OUTOFMEMORY;\n\t}\n\n\tnew(pThis) CElevationHelper();\n\t// TODO: Only do this if we're in dllhost\n\tBecomeDPIAware();\n\tHRESULT hr = pThis->QueryInterface(riid, ppv);\n\tCHECK_HR_OR_RETURN(L\"QueryInterface\");\n\tpThis->Release();\n\treturn hr;\n}\n\nCElevationHelper::~CElevationHelper(void) {\n}\n\nSTDMETHODIMP CElevationHelper::UpdateRegistry(BOOL bRegister) {\n\tif (bRegister) {\n\t\tRegistryEntry entries[] = {\n\t\t\t{HKEY_CLASSES_ROOT, L\"LegacyUpdate.ElevationHelper\", NULL, REG_SZ, (LPVOID)L\"Legacy Update Elevation Helper\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"LegacyUpdate.ElevationHelper\\\\CurVer\", NULL, REG_SZ, (LPVOID)L\"LegacyUpdate.ElevationHelper.1\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"LegacyUpdate.ElevationHelper.1\", NULL, REG_SZ, (LPVOID)L\"Legacy Update Elevation Helper\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"LegacyUpdate.ElevationHelper.1\\\\CLSID\", NULL, REG_SZ, (LPVOID)L\"%CLSID%\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\", NULL, REG_SZ, (LPVOID)L\"Legacy Update Elevation Helper\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\", L\"AppID\", REG_SZ, (LPVOID)L\"%APPID%\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\", L\"LocalizedString\", REG_SZ, (LPVOID)L\"@%MODULE%,-1\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\ProgID\", NULL, REG_SZ, (LPVOID)L\"LegacyUpdate.ElevationHelper.1\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\VersionIndependentProgID\", NULL, REG_SZ, (LPVOID)L\"LegacyUpdate.ElevationHelper\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\InprocServer32\", NULL, REG_SZ, (LPVOID)L\"%MODULE%\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\InprocServer32\", L\"ThreadingModel\", REG_SZ, (LPVOID)L\"Apartment\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\TypeLib\", NULL, REG_SZ, (LPVOID)L\"%LIBID%\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\Version\", NULL, REG_SZ, (LPVOID)L\"1.0\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\Elevation\", L\"Enabled\", REG_DWORD, (LPVOID)1},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\Elevation\", L\"IconReference\", REG_SZ, (LPVOID)L\"@%INSTALLPATH%\\\\LegacyUpdate.exe,-100\"},\n\t\t\t{}\n\t\t};\n\t\treturn SetRegistryEntries(entries);\n\t} else {\n\t\tRegistryEntry entries[] = {\n\t\t\t{HKEY_CLASSES_ROOT, L\"LegacyUpdate.ElevationHelper\", NULL, 0, DELETE_KEY},\n\t\t\t{HKEY_CLASSES_ROOT, L\"LegacyUpdate.ElevationHelper.1\", NULL, 0, DELETE_KEY},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\", NULL, 0, DELETE_KEY},\n\t\t\t{}\n\t\t};\n\t\treturn SetRegistryEntries(entries);\n\t}\n}\n\n#pragma mark - IUnknown\n\nSTDMETHODIMP CElevationHelper::QueryInterface(REFIID riid, void **ppvObject) {\n\tif (ppvObject == NULL) {\n\t\treturn E_POINTER;\n\t}\n\n\t*ppvObject = NULL;\n\n\treturn IDispatchImpl<IElevationHelper, &LIBID_LegacyUpdateLib>::QueryInterface(riid, ppvObject);\n}\n\nSTDMETHODIMP_(ULONG) CElevationHelper::AddRef(void) {\n\treturn InterlockedIncrement(&m_refCount);\n}\n\nSTDMETHODIMP_(ULONG) CElevationHelper::Release(void) {\n\tULONG count = InterlockedDecrement(&m_refCount);\n\tif (count == 0) {\n\t\tthis->~CElevationHelper();\n\t\tCoTaskMemFree(this);\n\t}\n\treturn count;\n}\n\n#pragma mark - IElevationHelper\n\nSTDMETHODIMP CElevationHelper::CreateObject(BSTR progID, IDispatch **retval) {\n\tif (progID == NULL || retval == NULL) {\n\t\treturn E_INVALIDARG;\n\t}\n\n\t*retval = NULL;\n\tHRESULT hr = S_OK;\n\tCComPtr<IDispatch> object;\n\tCLSID clsid;\n\n\tif (!ProgIDIsPermitted(progID)) {\n\t\treturn E_ACCESSDENIED;\n\t}\n\n\thr = CLSIDFromProgID(progID, &clsid);\n\tCHECK_HR_OR_RETURN(L\"CLSIDFromProgID\");\n\n\thr = object.CoCreateInstance(clsid, IID_IDispatch, NULL, CLSCTX_INPROC_SERVER);\n\tCHECK_HR_OR_RETURN(L\"CoCreateInstance\");\n\n\t*retval = object.Detach();\n\treturn hr;\n}\n\nSTDMETHODIMP CElevationHelper::SetBrowserHwnd(IUpdateInstaller *installer, HWND hwnd) {\n\tif (installer == NULL) {\n\t\treturn E_INVALIDARG;\n\t}\n\n\tCComPtr<IUpdateInstaller> updateInstaller;\n\tHRESULT hr = installer->QueryInterface(IID_IUpdateInstaller, (void **)&updateInstaller);\n\tCHECK_HR_OR_RETURN(L\"QueryInterface IID_IUpdateInstaller\");\n\n\thr = updateInstaller->put_ParentHwnd(hwnd);\n\tCHECK_HR_OR_RETURN(L\"put_ParentHwnd\");\n\n\treturn S_OK;\n}\n\nSTDMETHODIMP CElevationHelper::Reboot(void) {\n\t// Calling Commit() is recommended on Windows 10, to ensure feature updates are properly prepared prior to the reboot.\n\t// If IUpdateInstaller4 doesn't exist, we can skip this.\n\tCComPtr<IUpdateInstaller4> installer;\n\tHRESULT hr = installer.CoCreateInstance(CLSID_UpdateInstaller, NULL, CLSCTX_INPROC_SERVER);\n\tif (SUCCEEDED(hr) && hr != REGDB_E_CLASSNOTREG) {\n\t\thr = installer->Commit(0);\n\t\tCHECK_HR_OR_GOTO_END(L\"Commit\");\n\t}\n\nend:\n\treturn ::Reboot();\n}\n\nSTDMETHODIMP CElevationHelper::BeforeUpdate(void) {\n\treturn PauseResumeNGenQueue(FALSE);\n}\n\nSTDMETHODIMP CElevationHelper::AfterUpdate(void) {\n\treturn PauseResumeNGenQueue(TRUE);\n}\n"
  },
  {
    "path": "LegacyUpdate/ElevationHelper.h",
    "content": "#pragma once\n\n// ElevationHelper.h : Declaration of the CElevationHelper class.\n\n#include \"resource.h\"\n#include \"com.h\"\n#include \"LegacyUpdate_i.h\"\n\nBOOL ProgIDIsPermitted(PWSTR progID);\nSTDMETHODIMP CoCreateInstanceAsAdmin(HWND hwnd, REFCLSID rclsid, REFIID riid, void **ppv);\n\nclass DECLSPEC_NOVTABLE CElevationHelper :\n\tpublic IDispatchImpl<IElevationHelper, &LIBID_LegacyUpdateLib> {\npublic:\n\tCElevationHelper() :\n\t\tm_refCount(1) {}\n\n\tvirtual ~CElevationHelper();\n\n\tstatic STDMETHODIMP Create(IUnknown *pUnkOuter, REFIID riid, void **ppv);\n\tstatic STDMETHODIMP UpdateRegistry(BOOL bRegister);\n\nprivate:\n\tLONG m_refCount;\n\npublic:\n\t// IUnknown\n\tSTDMETHODIMP QueryInterface(REFIID riid, void **ppvObject);\n\tSTDMETHODIMP_(ULONG) AddRef();\n\tSTDMETHODIMP_(ULONG) Release();\n\n\t// IElevationHelper\n\tSTDMETHODIMP CreateObject(BSTR progID, IDispatch **retval);\n\tSTDMETHODIMP SetBrowserHwnd(IUpdateInstaller *installer, HWND hwnd);\n\tSTDMETHODIMP Reboot();\n\tSTDMETHODIMP BeforeUpdate();\n\tSTDMETHODIMP AfterUpdate();\n};\n"
  },
  {
    "path": "LegacyUpdate/IUpdateInstaller4.h",
    "content": "#pragma once\n#include <wuapi.h>\n\n// Copied from wuapi.h in Windows SDK 10.0.19041.0\n\n#ifndef __IUpdateInstaller3_FWD_DEFINED__\n#define __IUpdateInstaller3_FWD_DEFINED__\ntypedef interface IUpdateInstaller3 IUpdateInstaller3;\n\n#endif \t/* __IUpdateInstaller3_FWD_DEFINED__ */\n\n#ifndef __IUpdateInstaller4_FWD_DEFINED__\n#define __IUpdateInstaller4_FWD_DEFINED__\ntypedef interface IUpdateInstaller4 IUpdateInstaller4;\n\n#endif \t/* __IUpdateInstaller4_FWD_DEFINED__ */\n\n// {16d11c35-099a-48d0-8338-5fae64047f8e}\nDEFINE_GUID(IID_IUpdateInstaller3,0x16d11c35,0x099a,0x48d0,0x83,0x38,0x5f,0xae,0x64,0x04,0x7f,0x8e);\n\n// {EF8208EA-2304-492D-9109-23813B0958E1}\nDEFINE_GUID(IID_IUpdateInstaller4, 0xef8208ea, 0x2304, 0x492d, 0x91, 0x9, 0x23, 0x81, 0x3b, 0x9, 0x58, 0xe1);\n\n#ifndef __IUpdateInstaller3_INTERFACE_DEFINED__\n#define __IUpdateInstaller3_INTERFACE_DEFINED__\n\n/* interface IUpdateInstaller3 */\n/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */ \n\n\nEXTERN_C const IID IID_IUpdateInstaller3;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"16d11c35-099a-48d0-8338-5fae64047f8e\")\n    IUpdateInstaller3 : public IUpdateInstaller2\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AttemptCloseAppsIfNecessary( \n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n        \n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_AttemptCloseAppsIfNecessary( \n            /* [in] */ VARIANT_BOOL value) = 0;\n        \n    };\n    \n    \n#else \t/* C style interface */\n\n    typedef struct IUpdateInstaller3Vtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */ \n            _COM_Outptr_  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            __RPC__in IUpdateInstaller3 * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            __RPC__in IUpdateInstaller3 * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n        \n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( \n            IUpdateInstaller3 * This,\n            /* [annotation][in] */ \n            _In_  DISPID dispIdMember,\n            /* [annotation][in] */ \n            _In_  REFIID riid,\n            /* [annotation][in] */ \n            _In_  LCID lcid,\n            /* [annotation][in] */ \n            _In_  WORD wFlags,\n            /* [annotation][out][in] */ \n            _In_  DISPPARAMS *pDispParams,\n            /* [annotation][out] */ \n            _Out_opt_  VARIANT *pVarResult,\n            /* [annotation][out] */ \n            _Out_opt_  EXCEPINFO *pExcepInfo,\n            /* [annotation][out] */ \n            _Out_opt_  UINT *puArgErr);\n        \n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n        \n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [in] */ __RPC__in BSTR value);\n        \n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsForced )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n        \n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsForced )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [in] */ VARIANT_BOOL value);\n        \n        /* [helpstring][restricted][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ParentHwnd )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt HWND *retval);\n        \n        /* [helpstring][restricted][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ParentHwnd )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [unique][in] */ __RPC__in_opt HWND value);\n        \n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ParentWindow )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [unique][in] */ __RPC__in_opt IUnknown *value);\n        \n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ParentWindow )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);\n        \n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Updates )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);\n        \n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Updates )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [in] */ __RPC__in_opt IUpdateCollection *value);\n        \n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginInstall )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [in] */ __RPC__in_opt IUnknown *onProgressChanged,\n            /* [in] */ __RPC__in_opt IUnknown *onCompleted,\n            /* [in] */ VARIANT state,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationJob **retval);\n        \n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginUninstall )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [in] */ __RPC__in_opt IUnknown *onProgressChanged,\n            /* [in] */ __RPC__in_opt IUnknown *onCompleted,\n            /* [in] */ VARIANT state,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationJob **retval);\n        \n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndInstall )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [in] */ __RPC__in_opt IInstallationJob *value,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);\n        \n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndUninstall )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [in] */ __RPC__in_opt IInstallationJob *value,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);\n        \n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Install )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);\n        \n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RunWizard )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [defaultvalue][unique][in] */ __RPC__in_opt BSTR dialogTitle,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);\n        \n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBusy )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n        \n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Uninstall )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);\n        \n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AllowSourcePrompts )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n        \n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_AllowSourcePrompts )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [in] */ VARIANT_BOOL value);\n        \n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequiredBeforeInstallation )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n        \n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ForceQuiet )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n        \n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ForceQuiet )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [in] */ VARIANT_BOOL value);\n        \n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AttemptCloseAppsIfNecessary )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n        \n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_AttemptCloseAppsIfNecessary )( \n            __RPC__in IUpdateInstaller3 * This,\n            /* [in] */ VARIANT_BOOL value);\n        \n        END_INTERFACE\n    } IUpdateInstaller3Vtbl;\n\n    interface IUpdateInstaller3\n    {\n        CONST_VTBL struct IUpdateInstaller3Vtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define IUpdateInstaller3_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define IUpdateInstaller3_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define IUpdateInstaller3_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define IUpdateInstaller3_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) \n\n#define IUpdateInstaller3_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) \n\n#define IUpdateInstaller3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) \n\n#define IUpdateInstaller3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) \n\n\n#define IUpdateInstaller3_get_ClientApplicationID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ClientApplicationID(This,retval) ) \n\n#define IUpdateInstaller3_put_ClientApplicationID(This,value)\t\\\n    ( (This)->lpVtbl -> put_ClientApplicationID(This,value) ) \n\n#define IUpdateInstaller3_get_IsForced(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsForced(This,retval) ) \n\n#define IUpdateInstaller3_put_IsForced(This,value)\t\\\n    ( (This)->lpVtbl -> put_IsForced(This,value) ) \n\n#define IUpdateInstaller3_get_ParentHwnd(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ParentHwnd(This,retval) ) \n\n#define IUpdateInstaller3_put_ParentHwnd(This,value)\t\\\n    ( (This)->lpVtbl -> put_ParentHwnd(This,value) ) \n\n#define IUpdateInstaller3_put_ParentWindow(This,value)\t\\\n    ( (This)->lpVtbl -> put_ParentWindow(This,value) ) \n\n#define IUpdateInstaller3_get_ParentWindow(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ParentWindow(This,retval) ) \n\n#define IUpdateInstaller3_get_Updates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Updates(This,retval) ) \n\n#define IUpdateInstaller3_put_Updates(This,value)\t\\\n    ( (This)->lpVtbl -> put_Updates(This,value) ) \n\n#define IUpdateInstaller3_BeginInstall(This,onProgressChanged,onCompleted,state,retval)\t\\\n    ( (This)->lpVtbl -> BeginInstall(This,onProgressChanged,onCompleted,state,retval) ) \n\n#define IUpdateInstaller3_BeginUninstall(This,onProgressChanged,onCompleted,state,retval)\t\\\n    ( (This)->lpVtbl -> BeginUninstall(This,onProgressChanged,onCompleted,state,retval) ) \n\n#define IUpdateInstaller3_EndInstall(This,value,retval)\t\\\n    ( (This)->lpVtbl -> EndInstall(This,value,retval) ) \n\n#define IUpdateInstaller3_EndUninstall(This,value,retval)\t\\\n    ( (This)->lpVtbl -> EndUninstall(This,value,retval) ) \n\n#define IUpdateInstaller3_Install(This,retval)\t\\\n    ( (This)->lpVtbl -> Install(This,retval) ) \n\n#define IUpdateInstaller3_RunWizard(This,dialogTitle,retval)\t\\\n    ( (This)->lpVtbl -> RunWizard(This,dialogTitle,retval) ) \n\n#define IUpdateInstaller3_get_IsBusy(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsBusy(This,retval) ) \n\n#define IUpdateInstaller3_Uninstall(This,retval)\t\\\n    ( (This)->lpVtbl -> Uninstall(This,retval) ) \n\n#define IUpdateInstaller3_get_AllowSourcePrompts(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AllowSourcePrompts(This,retval) ) \n\n#define IUpdateInstaller3_put_AllowSourcePrompts(This,value)\t\\\n    ( (This)->lpVtbl -> put_AllowSourcePrompts(This,value) ) \n\n#define IUpdateInstaller3_get_RebootRequiredBeforeInstallation(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RebootRequiredBeforeInstallation(This,retval) ) \n\n\n#define IUpdateInstaller3_get_ForceQuiet(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ForceQuiet(This,retval) ) \n\n#define IUpdateInstaller3_put_ForceQuiet(This,value)\t\\\n    ( (This)->lpVtbl -> put_ForceQuiet(This,value) ) \n\n\n#define IUpdateInstaller3_get_AttemptCloseAppsIfNecessary(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AttemptCloseAppsIfNecessary(This,retval) ) \n\n#define IUpdateInstaller3_put_AttemptCloseAppsIfNecessary(This,value)\t\\\n    ( (This)->lpVtbl -> put_AttemptCloseAppsIfNecessary(This,value) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateInstaller3_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateInstaller4_INTERFACE_DEFINED__\n#define __IUpdateInstaller4_INTERFACE_DEFINED__\n\n/* interface IUpdateInstaller4 */\n/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */ \n\n\nEXTERN_C const IID IID_IUpdateInstaller4;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"EF8208EA-2304-492D-9109-23813B0958E1\")\n    IUpdateInstaller4 : public IUpdateInstaller3\n    {\n    public:\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Commit( \n            /* [in] */ DWORD dwFlags) = 0;\n        \n    };\n    \n    \n#else \t/* C style interface */\n\n    typedef struct IUpdateInstaller4Vtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */ \n            _COM_Outptr_  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            __RPC__in IUpdateInstaller4 * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            __RPC__in IUpdateInstaller4 * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n        \n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( \n            IUpdateInstaller4 * This,\n            /* [annotation][in] */ \n            _In_  DISPID dispIdMember,\n            /* [annotation][in] */ \n            _In_  REFIID riid,\n            /* [annotation][in] */ \n            _In_  LCID lcid,\n            /* [annotation][in] */ \n            _In_  WORD wFlags,\n            /* [annotation][out][in] */ \n            _In_  DISPPARAMS *pDispParams,\n            /* [annotation][out] */ \n            _Out_opt_  VARIANT *pVarResult,\n            /* [annotation][out] */ \n            _Out_opt_  EXCEPINFO *pExcepInfo,\n            /* [annotation][out] */ \n            _Out_opt_  UINT *puArgErr);\n        \n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n        \n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [in] */ __RPC__in BSTR value);\n        \n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsForced )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n        \n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsForced )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [in] */ VARIANT_BOOL value);\n        \n        /* [helpstring][restricted][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ParentHwnd )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt HWND *retval);\n        \n        /* [helpstring][restricted][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ParentHwnd )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [unique][in] */ __RPC__in_opt HWND value);\n        \n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ParentWindow )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [unique][in] */ __RPC__in_opt IUnknown *value);\n        \n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ParentWindow )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);\n        \n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Updates )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);\n        \n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Updates )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [in] */ __RPC__in_opt IUpdateCollection *value);\n        \n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginInstall )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [in] */ __RPC__in_opt IUnknown *onProgressChanged,\n            /* [in] */ __RPC__in_opt IUnknown *onCompleted,\n            /* [in] */ VARIANT state,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationJob **retval);\n        \n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginUninstall )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [in] */ __RPC__in_opt IUnknown *onProgressChanged,\n            /* [in] */ __RPC__in_opt IUnknown *onCompleted,\n            /* [in] */ VARIANT state,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationJob **retval);\n        \n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndInstall )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [in] */ __RPC__in_opt IInstallationJob *value,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);\n        \n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndUninstall )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [in] */ __RPC__in_opt IInstallationJob *value,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);\n        \n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Install )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);\n        \n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RunWizard )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [defaultvalue][unique][in] */ __RPC__in_opt BSTR dialogTitle,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);\n        \n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBusy )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n        \n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Uninstall )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);\n        \n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AllowSourcePrompts )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n        \n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_AllowSourcePrompts )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [in] */ VARIANT_BOOL value);\n        \n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequiredBeforeInstallation )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n        \n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ForceQuiet )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n        \n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ForceQuiet )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [in] */ VARIANT_BOOL value);\n        \n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AttemptCloseAppsIfNecessary )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n        \n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_AttemptCloseAppsIfNecessary )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [in] */ VARIANT_BOOL value);\n        \n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Commit )( \n            __RPC__in IUpdateInstaller4 * This,\n            /* [in] */ DWORD dwFlags);\n        \n        END_INTERFACE\n    } IUpdateInstaller4Vtbl;\n\n    interface IUpdateInstaller4\n    {\n        CONST_VTBL struct IUpdateInstaller4Vtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define IUpdateInstaller4_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define IUpdateInstaller4_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define IUpdateInstaller4_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define IUpdateInstaller4_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) \n\n#define IUpdateInstaller4_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) \n\n#define IUpdateInstaller4_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) \n\n#define IUpdateInstaller4_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) \n\n\n#define IUpdateInstaller4_get_ClientApplicationID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ClientApplicationID(This,retval) ) \n\n#define IUpdateInstaller4_put_ClientApplicationID(This,value)\t\\\n    ( (This)->lpVtbl -> put_ClientApplicationID(This,value) ) \n\n#define IUpdateInstaller4_get_IsForced(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsForced(This,retval) ) \n\n#define IUpdateInstaller4_put_IsForced(This,value)\t\\\n    ( (This)->lpVtbl -> put_IsForced(This,value) ) \n\n#define IUpdateInstaller4_get_ParentHwnd(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ParentHwnd(This,retval) ) \n\n#define IUpdateInstaller4_put_ParentHwnd(This,value)\t\\\n    ( (This)->lpVtbl -> put_ParentHwnd(This,value) ) \n\n#define IUpdateInstaller4_put_ParentWindow(This,value)\t\\\n    ( (This)->lpVtbl -> put_ParentWindow(This,value) ) \n\n#define IUpdateInstaller4_get_ParentWindow(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ParentWindow(This,retval) ) \n\n#define IUpdateInstaller4_get_Updates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Updates(This,retval) ) \n\n#define IUpdateInstaller4_put_Updates(This,value)\t\\\n    ( (This)->lpVtbl -> put_Updates(This,value) ) \n\n#define IUpdateInstaller4_BeginInstall(This,onProgressChanged,onCompleted,state,retval)\t\\\n    ( (This)->lpVtbl -> BeginInstall(This,onProgressChanged,onCompleted,state,retval) ) \n\n#define IUpdateInstaller4_BeginUninstall(This,onProgressChanged,onCompleted,state,retval)\t\\\n    ( (This)->lpVtbl -> BeginUninstall(This,onProgressChanged,onCompleted,state,retval) ) \n\n#define IUpdateInstaller4_EndInstall(This,value,retval)\t\\\n    ( (This)->lpVtbl -> EndInstall(This,value,retval) ) \n\n#define IUpdateInstaller4_EndUninstall(This,value,retval)\t\\\n    ( (This)->lpVtbl -> EndUninstall(This,value,retval) ) \n\n#define IUpdateInstaller4_Install(This,retval)\t\\\n    ( (This)->lpVtbl -> Install(This,retval) ) \n\n#define IUpdateInstaller4_RunWizard(This,dialogTitle,retval)\t\\\n    ( (This)->lpVtbl -> RunWizard(This,dialogTitle,retval) ) \n\n#define IUpdateInstaller4_get_IsBusy(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsBusy(This,retval) ) \n\n#define IUpdateInstaller4_Uninstall(This,retval)\t\\\n    ( (This)->lpVtbl -> Uninstall(This,retval) ) \n\n#define IUpdateInstaller4_get_AllowSourcePrompts(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AllowSourcePrompts(This,retval) ) \n\n#define IUpdateInstaller4_put_AllowSourcePrompts(This,value)\t\\\n    ( (This)->lpVtbl -> put_AllowSourcePrompts(This,value) ) \n\n#define IUpdateInstaller4_get_RebootRequiredBeforeInstallation(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RebootRequiredBeforeInstallation(This,retval) ) \n\n\n#define IUpdateInstaller4_get_ForceQuiet(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ForceQuiet(This,retval) ) \n\n#define IUpdateInstaller4_put_ForceQuiet(This,value)\t\\\n    ( (This)->lpVtbl -> put_ForceQuiet(This,value) ) \n\n\n#define IUpdateInstaller4_get_AttemptCloseAppsIfNecessary(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AttemptCloseAppsIfNecessary(This,retval) ) \n\n#define IUpdateInstaller4_put_AttemptCloseAppsIfNecessary(This,value)\t\\\n    ( (This)->lpVtbl -> put_AttemptCloseAppsIfNecessary(This,value) ) \n\n\n#define IUpdateInstaller4_Commit(This,dwFlags)\t\\\n    ( (This)->lpVtbl -> Commit(This,dwFlags) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateInstaller4_INTERFACE_DEFINED__ */\n"
  },
  {
    "path": "LegacyUpdate/LaunchUpdateSite.cpp",
    "content": "#include \"Exec.h\"\n#include \"HResult.h\"\n#include \"Utils.h\"\n#include <comdef.h>\n\n// Function signature required by Rundll32.exe.\nEXTERN_C __declspec(dllexport)\nvoid CALLBACK LaunchUpdateSite(HWND hwnd, HINSTANCE hInstance, LPSTR lpszCmdLine, int nCmdShow) {\n\tHRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);\n\tif (!SUCCEEDED(hr)) {\n\t\tgoto end;\n\t}\n\n\t// This just calls LegacyUpdate.exe now for backwards compatibility.\n\thr = StartLauncher(L\"/launch\", TRUE);\n\nend:\n\tif (!SUCCEEDED(hr)) {\n\t\tLPWSTR message = GetMessageForHresult(hr);\n\t\tMessageBox(NULL, message, L\"Legacy Update\", MB_OK | MB_ICONERROR);\n\t\tLocalFree(message);\n\t}\n\n\tCoUninitialize();\n}\n"
  },
  {
    "path": "LegacyUpdate/LegacyUpdate.def",
    "content": "; LegacyUpdate.def : Declares the module parameters.\n\nEXPORTS\n\t; Registration\n\tDllCanUnloadNow      PRIVATE\n\tDllGetClassObject    PRIVATE\n\tDllRegisterServer    PRIVATE\n\tDllUnregisterServer  PRIVATE\n\n\t; Rundll32\n\tLaunchUpdateSite     PRIVATE\n\n\t; Internal use\n\tGetMessageForHresult\n"
  },
  {
    "path": "LegacyUpdate/LegacyUpdate.idl",
    "content": "// LegacyUpdate.idl : IDL source for LegacyUpdate\n//\n\n// This file will be processed by the MIDL tool to\n// produce the type library (LegacyUpdate.tlb) and marshalling code.\n\n#include <olectl.h>\n#include <idispids.h>\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"wuapi.idl\";\n\ntypedef enum OSVersionField {\n\te_majorVer = 0,\n\te_minorVer = 1,\n\te_buildNumber = 2,\n\te_platform = 3,\n\te_SPMajor = 4,\n\te_SPMinor = 5,\n\te_productSuite = 6,\n\te_productType = 7,\n\te_systemMetric = 8,\n\te_SPVersionString = 9,\n\te_controlVersionString = 10,\n\te_VistaProductType = 11,\n\te_productName = 12,\n\te_displayVersion = 13,\n\te_maxOSVersionFieldValue = 13\n} OSVersionField;\n\ntypedef enum UserType {\n\te_nonAdmin = 0,\n\te_admin = 2,\n\te_elevated = 3\n} UserType;\n\ntypedef enum ViewLogType {\n\te_legacyUpdate = 0,\n\te_legacyUpdateLocal = 1,\n\te_legacyUpdateLocalLow = 2,\n\te_windowsUpdate = 3,\n} ViewLogType;\n\n[\n\tobject,\n\tuuid(C33085BB-C3E1-4D27-A214-AF01953DF5E5),\n\tdual,\n\tnonextensible,\n\thelpstring(\"ILegacyUpdateCtrl Interface\"),\n\tpointer_default(unique)\n]\ninterface ILegacyUpdateCtrl : IDispatch {\n\t[id(1)]  HRESULT CheckControl([out, retval] VARIANT_BOOL *retval);\n\t[id(2)]  HRESULT MessageForHresult(LONG inHresult, [out, retval] BSTR *retval);\n\t[id(3)]  HRESULT GetOSVersionInfo(OSVersionField osField, LONG systemMetric, [out, retval] VARIANT *retval);\n\t[id(14)] HRESULT RequestElevation(void);\n\t[id(4)]  HRESULT CreateObject(BSTR progID, [out, retval] IDispatch **retval);\n\t[id(15)] HRESULT SetBrowserHwnd(IUpdateInstaller *installer);\n\t[id(5)]  HRESULT GetUserType([out, retval] UserType *retval);\n\t[id(8)]  HRESULT RebootIfRequired(void);\n\t[id(18)] HRESULT ViewLog(ViewLogType logType);\n\t[id(9)]  HRESULT ViewWindowsUpdateLog(void);\n\t[id(13)] HRESULT OpenWindowsUpdateSettings(void);\n\t[id(16)] HRESULT BeforeUpdate(void);\n\t[id(17)] HRESULT AfterUpdate(void);\n\n\t[id(6),  propget] HRESULT IsRebootRequired([out, retval] VARIANT_BOOL *retval);\n\t[id(7),  propget] HRESULT IsWindowsUpdateDisabled([out, retval] VARIANT_BOOL *retval);\n\t[id(10), propget] HRESULT IsUsingWsusServer([out, retval] VARIANT_BOOL *retval);\n\t[id(11), propget] HRESULT WsusServerUrl([out, retval] BSTR *retval);\n\t[id(12), propget] HRESULT WsusStatusServerUrl([out, retval] BSTR *retval);\n};\n\n[\n\tobject,\n\tuuid(4524BFBF-70BD-4EAC-AD33-6BADA4FB0638),\n\tdual,\n\tnonextensible,\n\tpointer_default(unique)\n]\ninterface IProgressBarControl : IDispatch\n{\n\t[id(1), propget] HRESULT Value([out, retval] SHORT *retval);\n\t[id(1), propput] HRESULT Value([in] SHORT newVal);\n};\n\n[\n\tobject,\n\tuuid(3236E684-0E4B-4780-9F31-F1983F5AB78D),\n\tdual,\n\tnonextensible,\n\tpointer_default(unique),\n\toleautomation\n]\ninterface IElevationHelper : IDispatch\n{\n\t[id(1)] HRESULT CreateObject(BSTR progID, [out, retval] IDispatch **retval);\n\t[id(5)] HRESULT SetBrowserHwnd(IUpdateInstaller *installer, HWND hwnd);\n\t[id(2)] HRESULT Reboot(void);\n\t[id(3)] HRESULT BeforeUpdate(void);\n\t[id(4)] HRESULT AfterUpdate(void);\n};\n\n[\n\tuuid(05D22F33-C7C3-4C90-BDD9-CEDC86EA8FBE),\n\tversion(1.0),\n\thelpstring(\"Legacy Update Control\")\n]\nlibrary LegacyUpdateLib {\n\timportlib(\"stdole2.tlb\");\n\n\t[\n\t\tuuid(AD28E0DF-5F5A-40B5-9432-85EFD97D1F9F),\n\t\tcontrol,\n\t\thelpstring(\"LegacyUpdateCtrl Class\")\n\t]\n\tcoclass LegacyUpdateCtrl {\n\t\t[default] interface ILegacyUpdateCtrl;\n\t};\n\n\t[\n\t\tuuid(7B875A2F-2DFB-4D38-91F5-5C0BFB74C377),\n\t\tcontrol,\n\t\thelpstring(\"ProgressBarControl Class\")\n\t]\n\tcoclass ProgressBarControl\n\t{\n\t\t[default] interface IProgressBarControl;\n\t};\n\n\t[\n\t\tuuid(84F517AD-6438-478F-BEA8-F0B808DC257F),\n\t\thelpstring(\"ElevationHelper Class\")\n\t]\n\tcoclass ElevationHelper\n\t{\n\t\t[default] interface IElevationHelper;\n\t};\n};\n"
  },
  {
    "path": "LegacyUpdate/LegacyUpdate.rc",
    "content": "#include \"resource.h\"\n#include <windows.h>\n#include \"Version.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n// English (United States) resources\n\n#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\nLANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\n#pragma code_page(65001)\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Version\n//\n\nVS_VERSION_INFO VERSIONINFO\n FILEVERSION VERSION\n PRODUCTVERSION VERSION\n FILEFLAGSMASK VS_FFI_FILEFLAGSMASK\n#ifdef _DEBUG\n FILEFLAGS VS_FF_DEBUG | VS_FF_PRERELEASE\n#else\n FILEFLAGS 0\n#endif\n FILEOS VOS_NT_WINDOWS32\n FILETYPE VFT_APP\n FILESUBTYPE VFT2_UNKNOWN\nBEGIN\n\tBLOCK \"StringFileInfo\"\n\tBEGIN\n\t\tBLOCK \"040904b0\"\n\t\tBEGIN\n\t\t\tVALUE \"CompanyName\", \"Hashbang Productions\"\n\t\t\tVALUE \"FileDescription\", \"Legacy Update\"\n\t\t\tVALUE \"FileVersion\", VERSION_STRING\n\t\t\tVALUE \"InternalName\", \"LegacyUpdate.dll\"\n\t\t\tVALUE \"LegalCopyright\", \"© Hashbang Productions. All rights reserved.\"\n\t\t\tVALUE \"OriginalFilename\", \"LegacyUpdate.dll\"\n\t\t\tVALUE \"ProductName\", \"Legacy Update\"\n\t\t\tVALUE \"ProductVersion\", VERSION_STRING\n\t\tEND\n\tEND\n\tBLOCK \"VarFileInfo\"\n\tBEGIN\n\t\tVALUE \"Translation\", 0x0409, 0x04b0\n\tEND\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// String Table\n//\n\nSTRINGTABLE\nBEGIN\n\tIDS_LEGACYUPDATE        \"Legacy Update\"\nEND\n\n#endif    // English (United States) resources\n/////////////////////////////////////////////////////////////////////////////\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Type Library\n//\n\nID_TYPELIB              TYPELIB                 \"LegacyUpdate.tlb\"\n\n#include \"wuerror.rc\"\n"
  },
  {
    "path": "LegacyUpdate/LegacyUpdate.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <VCProjectVersion>17.0</VCProjectVersion>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <ProjectGuid>{e9142706-8e21-4ece-80f8-d3f7b95c6f27}</ProjectGuid>\r\n    <RootNamespace>LegacyUpdate</RootNamespace>\r\n    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"Shared\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "LegacyUpdate/LegacyUpdate.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"Source Files\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"Header Files\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"Resource Files\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "LegacyUpdate/LegacyUpdateCtrl.cpp",
    "content": "// LegacyUpdateCtrl.cpp : Implementation of the CLegacyUpdateCtrl ActiveX Control class.\n\n#include \"LegacyUpdateCtrl.h\"\n#include \"Compat.h\"\n#include \"ElevationHelper.h\"\n#include \"Exec.h\"\n#include \"HResult.h\"\n#include \"LegacyUpdate.h\"\n#include \"ProductInfo.h\"\n#include \"ProductName.h\"\n#include \"Registry.h\"\n#include \"User.h\"\n#include \"Utils.h\"\n#include \"Version.h\"\n#include \"VersionInfo.h\"\n#include \"ViewLog.h\"\n#include <new>\n#include <oleidl.h>\n#include <shlobj.h>\n#include <wuapi.h>\n\nconst WCHAR *permittedHosts[] = {\n\tL\"legacyupdate.net\",\n\tL\"test.legacyupdate.net\"\n};\n\n#define LEGACYUPDATECTRL_MISCSTATUS (OLEMISC_RECOMPOSEONRESIZE | OLEMISC_CANTLINKINSIDE | OLEMISC_INSIDEOUT | OLEMISC_ACTIVATEWHENVISIBLE | OLEMISC_SETCLIENTSITEFIRST)\n\nDEFINE_UUIDOF(CLegacyUpdateCtrl, CLSID_LegacyUpdateCtrl);\n\nSTDMETHODIMP CLegacyUpdateCtrl::Create(IUnknown *pUnkOuter, REFIID riid, void **ppv) {\n\tif (pUnkOuter != NULL) {\n\t\treturn CLASS_E_NOAGGREGATION;\n\t}\n\n\tCLegacyUpdateCtrl *pThis = (CLegacyUpdateCtrl *)CoTaskMemAlloc(sizeof(CLegacyUpdateCtrl));\n\tif (pThis == NULL) {\n\t\treturn E_OUTOFMEMORY;\n\t}\n\n\tnew(pThis) CLegacyUpdateCtrl();\n\tHRESULT hr = pThis->QueryInterface(riid, ppv);\n\tpThis->Release();\n\n\treturn hr;\n}\n\nCLegacyUpdateCtrl::~CLegacyUpdateCtrl(void) {\n\tif (m_clientSite) {\n\t\tm_clientSite->Release();\n\t\tm_clientSite = NULL;\n\t}\n\tif (m_adviseSink) {\n\t\tm_adviseSink->Release();\n\t\tm_adviseSink = NULL;\n\t}\n\tif (m_elevatedHelper) {\n\t\tm_elevatedHelper->Release();\n\t\tm_elevatedHelper = NULL;\n\t}\n\tif (m_nonElevatedHelper) {\n\t\tm_nonElevatedHelper->Release();\n\t\tm_nonElevatedHelper = NULL;\n\t}\n}\n\nSTDMETHODIMP CLegacyUpdateCtrl::UpdateRegistry(BOOL bRegister) {\n\tif (bRegister) {\n\t\tRegistryEntry entries[] = {\n\t\t\t{HKEY_CLASSES_ROOT, L\"LegacyUpdate.Control\", NULL, REG_SZ, (LPVOID)L\"Legacy Update Control\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"LegacyUpdate.Control\\\\CurVer\", NULL, REG_SZ, (LPVOID)L\"LegacyUpdate.Control.1\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"LegacyUpdate.Control.1\", NULL, REG_SZ, (LPVOID)L\"Legacy Update Control\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"LegacyUpdate.Control.1\\\\CLSID\", NULL, REG_SZ, (LPVOID)L\"%CLSID%\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\", NULL, REG_SZ, (LPVOID)L\"Legacy Update Control\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\", L\"AppID\", REG_SZ, (LPVOID)L\"%APPID%\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\ProgID\", NULL, REG_SZ, (LPVOID)L\"LegacyUpdate.Control.1\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\VersionIndependentProgID\", NULL, REG_SZ, (LPVOID)L\"LegacyUpdate.Control\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\Programmable\", NULL, REG_SZ, NULL},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\InprocServer32\", NULL, REG_SZ, (LPVOID)L\"%MODULE%\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\InprocServer32\", L\"ThreadingModel\", REG_SZ, (LPVOID)L\"Apartment\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\Control\", NULL, REG_SZ, NULL},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\TypeLib\", NULL, REG_SZ, (LPVOID)L\"%LIBID%\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\Version\", NULL, REG_SZ, (LPVOID)L\"1.0\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\MiscStatus\", NULL, REG_DWORD, (LPVOID)LEGACYUPDATECTRL_MISCSTATUS},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\Implemented Categories\\\\{7DD95801-9882-11CF-9FA9-00AA006C42C4}\", NULL, REG_SZ, NULL},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\Implemented Categories\\\\{7DD95802-9882-11CF-9FA9-00AA006C42C4}\", NULL, REG_SZ, NULL},\n\t\t\t{}\n\t\t};\n\t\treturn SetRegistryEntries(entries);\n\t} else {\n\t\tRegistryEntry entries[] = {\n\t\t\t{HKEY_CLASSES_ROOT, L\"LegacyUpdate.Control\", NULL, 0, DELETE_KEY},\n\t\t\t{HKEY_CLASSES_ROOT, L\"LegacyUpdate.Control.1\", NULL, 0, DELETE_KEY},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\", NULL, 0, DELETE_KEY},\n\t\t\t{}\n\t\t};\n\t\treturn SetRegistryEntries(entries);\n\t}\n}\n\n#pragma mark - IUnknown\n\nSTDMETHODIMP CLegacyUpdateCtrl::QueryInterface(REFIID riid, void **ppvObject) {\n\tif (ppvObject == NULL) {\n\t\treturn E_POINTER;\n\t}\n\n\t*ppvObject = NULL;\n\n\tif (IsEqualIID(riid, IID_IOleObject)) {\n\t\t*ppvObject = &m_IOleObject;\n\t\tAddRef();\n\t\treturn S_OK;\n\t}\n\n\treturn IDispatchImpl<ILegacyUpdateCtrl, &LIBID_LegacyUpdateLib>::QueryInterface(riid, ppvObject);\n}\n\nSTDMETHODIMP_(ULONG) CLegacyUpdateCtrl::AddRef(void) {\n\treturn InterlockedIncrement(&m_refCount);\n}\n\nSTDMETHODIMP_(ULONG) CLegacyUpdateCtrl::Release(void) {\n\tULONG count = InterlockedDecrement(&m_refCount);\n\tif (count == 0) {\n\t\tthis->~CLegacyUpdateCtrl();\n\t\tCoTaskMemFree(this);\n\t}\n\treturn count;\n}\n\n#pragma mark - ILegacyUpdateCtrl\n\nSTDMETHODIMP CLegacyUpdateCtrl::GetHTMLDocument(IHTMLDocument2 **retval) {\n\tif (m_clientSite == NULL) {\n\t\treturn E_ACCESSDENIED;\n\t}\n\n\tCComPtr<IOleContainer> container;\n\tHRESULT hr = m_clientSite->GetContainer(&container);\n\tCHECK_HR_OR_RETURN(L\"GetContainer\");\n\n\thr = container->QueryInterface(IID_IHTMLDocument2, (void **)retval);\n\tCHECK_HR_OR_RETURN(L\"QueryInterface IID_IHTMLDocument2\");\n\treturn hr;\n}\n\nSTDMETHODIMP CLegacyUpdateCtrl::IsPermitted(void) {\n\tCComPtr<IHTMLDocument2> document;\n\tCComPtr<IHTMLLocation> location;\n\tBSTR host = NULL;\n\tHRESULT hr = GetHTMLDocument(&document);\n\tif (!SUCCEEDED(hr)) {\n#ifdef _DEBUG\n\t\t// Allow debugging outside of IE (e.g. via PowerShell)\n\t\tTRACE(L\"GetHTMLDocument() failed - allowing anyway due to debug build\");\n\t\treturn S_OK;\n#else\n\t\tgoto end;\n#endif\n\t}\n\n\thr = document->get_location(&location);\n\tCHECK_HR_OR_GOTO_END(L\"get_location\");\n\tif (location == NULL) {\n\t\thr = E_ACCESSDENIED;\n\t\tgoto end;\n\t}\n\n\thr = location->get_host(&host);\n\tCHECK_HR_OR_GOTO_END(L\"get_host\");\n\n\tfor (DWORD i = 0; i < ARRAYSIZE(permittedHosts); i++) {\n\t\tif (wcscmp(host, permittedHosts[i]) == 0) {\n\t\t\tSysFreeString(host);\n\t\t\treturn S_OK;\n\t\t}\n\t}\n\nend:\n\tif (host) {\n\t\tSysFreeString(host);\n\t}\n\treturn hr;\n}\n\nSTDMETHODIMP CLegacyUpdateCtrl::GetIEWindowHWND(HWND *retval) {\n\t*retval = NULL;\n\n\tif (m_clientSite == NULL) {\n\t\treturn E_FAIL;\n\t}\n\n\tCComPtr<IOleWindow> oleWindow;\n\tHRESULT hr = m_clientSite->QueryInterface(IID_IOleWindow, (void **)&oleWindow);\n\tCHECK_HR_OR_RETURN(L\"QueryInterface\");\n\n\thr = oleWindow->GetWindow(retval);\n\tCHECK_HR_OR_RETURN(L\"GetWindow\");\n\treturn hr;\n}\n\nSTDMETHODIMP CLegacyUpdateCtrl::GetElevatedHelper(IElevationHelper **retval) {\n\tIElevationHelper *elevatedHelper = m_elevatedHelper ? m_elevatedHelper : m_nonElevatedHelper;\n\tif (elevatedHelper == NULL) {\n\t\t// Use the helper directly, without elevation. It's the responsibility of the caller to ensure it\n\t\t// is already running as admin on 2k/XP, or that it has requested elevation on Vista+.\n\t\tHRESULT hr = CoCreateInstance(CLSID_ElevationHelper, NULL, CLSCTX_INPROC_SERVER, IID_IElevationHelper, (void **)&elevatedHelper);\n\t\tCHECK_HR_OR_RETURN(L\"CoCreateInstance\");\n\t\tif (elevatedHelper == NULL) {\n\t\t\treturn E_POINTER;\n\t\t}\n\n\t\tm_nonElevatedHelper = elevatedHelper;\n\t}\n\n\t*retval = elevatedHelper;\n\treturn S_OK;\n}\n\n#define DoIsPermittedCheck(void) { \\\n\t\tHRESULT hr = IsPermitted(); \\\n\t\tif (!SUCCEEDED(hr)) { \\\n\t\t\treturn hr; \\\n\t\t} \\\n\t}\n\nSTDMETHODIMP CLegacyUpdateCtrl::CheckControl(VARIANT_BOOL *retval) {\n\tif (retval == NULL) {\n\t\treturn E_POINTER;\n\t}\n\n\tDoIsPermittedCheck();\n\t*retval = VARIANT_TRUE;\n\treturn S_OK;\n}\n\nSTDMETHODIMP CLegacyUpdateCtrl::MessageForHresult(LONG inHresult, BSTR *retval) {\n\tDoIsPermittedCheck();\n\tLPWSTR message = GetMessageForHresult(inHresult);\n\t*retval = SysAllocString(message);\n\tLocalFree(message);\n\treturn S_OK;\n}\n\nSTDMETHODIMP CLegacyUpdateCtrl::GetOSVersionInfo(OSVersionField osField, LONG systemMetric, VARIANT *retval) {\n\tDoIsPermittedCheck();\n\n\tVariantInit(retval);\n\tOSVERSIONINFOEX *versionInfo = GetVersionInfo();\n\n\tswitch (osField) {\n\tcase e_majorVer:\n\t\tretval->vt = VT_UI4;\n\t\tretval->ulVal = versionInfo->dwMajorVersion;\n\t\tbreak;\n\n\tcase e_minorVer:\n\t\tretval->vt = VT_UI4;\n\t\tretval->ulVal = versionInfo->dwMinorVersion;\n\t\tbreak;\n\n\tcase e_buildNumber:\n\t\tretval->vt = VT_UI4;\n\t\tretval->ulVal = versionInfo->dwBuildNumber;\n\t\tbreak;\n\n\tcase e_platform:\n\t\tretval->vt = VT_UI4;\n\t\tretval->ulVal = versionInfo->dwPlatformId;\n\t\tbreak;\n\n\tcase e_SPMajor:\n\t\tretval->vt = VT_I4;\n\t\tretval->lVal = versionInfo->wServicePackMajor;\n\t\tbreak;\n\n\tcase e_SPMinor:\n\t\tretval->vt = VT_I4;\n\t\tretval->lVal = versionInfo->wServicePackMinor;\n\t\tbreak;\n\n\tcase e_productSuite:\n\t\tretval->vt = VT_I4;\n\t\tretval->lVal = versionInfo->wSuiteMask;\n\t\tbreak;\n\n\tcase e_productType:\n\t\tretval->vt = VT_I4;\n\t\tretval->lVal = versionInfo->wProductType;\n\t\tbreak;\n\n\tcase e_systemMetric:\n\t\tretval->vt = VT_I4;\n\t\tretval->lVal = GetSystemMetrics(systemMetric);\n\t\tbreak;\n\n\tcase e_SPVersionString: {\n\t\tLPWSTR data = NULL;\n\t\tDWORD size = 0;\n\t\tHRESULT hr = GetRegistryString(HKEY_LOCAL_MACHINE, REGPATH_WINNT, L\"BuildLab\", KEY_WOW64_64KEY, &data, &size);\n\t\tretval->vt = VT_BSTR;\n\t\tretval->bstrVal = SUCCEEDED(hr)\n\t\t\t? SysAllocStringLen(data, size - 1)\n\t\t\t// BuildLab doesn't exist on Windows 2000.\n\t\t\t: SysAllocString(versionInfo->szCSDVersion);\n\t\tif (data) {\n\t\t\tLocalFree(data);\n\t\t}\n\t\tbreak;\n\t}\n\n\tcase e_controlVersionString:\n\t\tretval->vt = VT_BSTR;\n\t\tretval->bstrVal = SysAllocString(L\"\" VERSION_STRING);\n\t\tbreak;\n\n\tcase e_VistaProductType: {\n\t\tDWORD productType = 0;\n\t\tGetVistaProductInfo(versionInfo->dwMajorVersion, versionInfo->dwMinorVersion, versionInfo->wServicePackMajor, versionInfo->wServicePackMinor, &productType);\n\t\tretval->vt = VT_UI4;\n\t\tretval->ulVal = productType;\n\t\tbreak;\n\t}\n\n\tcase e_productName:\n\t\treturn GetOSProductName(retval);\n\n\tcase e_displayVersion: {\n\t\tLPWSTR data = NULL;\n\t\tDWORD size = 0;\n\t\tHRESULT hr = GetRegistryString(HKEY_LOCAL_MACHINE, REGPATH_WINNT, L\"DisplayVersion\", KEY_WOW64_64KEY, &data, &size);\n\t\tif (SUCCEEDED(hr)) {\n\t\t\tretval->vt = VT_BSTR;\n\t\t\tretval->bstrVal = SysAllocStringLen(data, size - 1);\n\t\t\tLocalFree(data);\n\t\t}\n\t\tbreak;\n\t}\n\t}\n\n\treturn S_OK;\n}\n\nSTDMETHODIMP CLegacyUpdateCtrl::RequestElevation(void) {\n\tDoIsPermittedCheck();\n\n\tif (m_elevatedHelper != NULL || !AtLeastWinVista()) {\n\t\treturn S_OK;\n\t}\n\n\t// https://learn.microsoft.com/en-us/windows/win32/com/the-com-elevation-moniker\n\tHWND hwnd;\n\tGetIEWindowHWND(&hwnd);\n\tHRESULT hr = CoCreateInstanceAsAdmin(hwnd, CLSID_ElevationHelper, IID_IElevationHelper, (void**)&m_elevatedHelper);\n\tCHECK_HR_OR_RETURN(L\"CoCreateInstanceAsAdmin\");\n\treturn hr;\n}\n\nSTDMETHODIMP CLegacyUpdateCtrl::CreateObject(BSTR progID, IDispatch **retval) {\n\tDoIsPermittedCheck();\n\n\tif (progID == NULL) {\n\t\treturn E_INVALIDARG;\n\t}\n\n\tif (!ProgIDIsPermitted(progID)) {\n\t\treturn E_ACCESSDENIED;\n\t}\n\n\tIElevationHelper *elevatedHelper;\n\tHRESULT hr = GetElevatedHelper(&elevatedHelper);\n\tCHECK_HR_OR_RETURN(L\"GetElevatedHelper\");\n\n\treturn elevatedHelper->CreateObject(progID, retval);\n}\n\nSTDMETHODIMP CLegacyUpdateCtrl::SetBrowserHwnd(IUpdateInstaller *installer) {\n\tDoIsPermittedCheck();\n\n\tif (installer == NULL) {\n\t\treturn E_INVALIDARG;\n\t}\n\n\tIElevationHelper *elevatedHelper;\n\tHRESULT hr = GetElevatedHelper(&elevatedHelper);\n\tCHECK_HR_OR_RETURN(L\"GetElevatedHelper\");\n\n\tHWND hwnd;\n\thr = GetIEWindowHWND(&hwnd);\n\tCHECK_HR_OR_RETURN(L\"GetIEWindowHWND\");\n\n\treturn elevatedHelper->SetBrowserHwnd(installer, hwnd);\n}\n\nSTDMETHODIMP CLegacyUpdateCtrl::GetUserType(UserType *retval) {\n\tDoIsPermittedCheck();\n\n\tif (IsUserAdmin()) {\n\t\t// Entire process is elevated.\n\t\t*retval = e_admin;\n\t} else if (m_elevatedHelper != NULL) {\n\t\t// Our control has successfully received elevation.\n\t\t*retval = e_elevated;\n\t} else {\n\t\t// The control has no admin rights (although it may not have requested them yet).\n\t\t*retval = e_nonAdmin;\n\t}\n\n\treturn S_OK;\n}\n\nSTDMETHODIMP CLegacyUpdateCtrl::get_IsRebootRequired(VARIANT_BOOL *retval) {\n\tDoIsPermittedCheck();\n\n\t// Ask WU itself whether a reboot is required\n\tCComPtr<ISystemInformation> systemInfo;\n\tif (SUCCEEDED(systemInfo.CoCreateInstance(CLSID_SystemInformation, NULL, CLSCTX_INPROC_SERVER))) {\n\t\tif (SUCCEEDED(systemInfo->get_RebootRequired(retval)) && *retval == VARIANT_TRUE) {\n\t\t\treturn S_OK;\n\t\t}\n\t}\n\n\t// Check reboot flag in registry\n\tHKEY subkey = NULL;\n\tHRESULT hr = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGPATH_WU_REBOOTREQUIRED, 0, GetRegistryWow64Flag(KEY_READ | KEY_WOW64_64KEY), &subkey));\n\tif (SUCCEEDED(hr)) {\n\t\tRegCloseKey(subkey);\n\t\t*retval = VARIANT_TRUE;\n\t\treturn S_OK;\n\t}\n\n\t*retval = VARIANT_FALSE;\n\treturn S_OK;\n}\n\nSTDMETHODIMP CLegacyUpdateCtrl::get_IsWindowsUpdateDisabled(VARIANT_BOOL *retval) {\n\tDoIsPermittedCheck();\n\n\t// Future note: These are in HKCU on NT; HKLM on 9x.\n\t// Remove links and access to Windows Update\n\tDWORD value = 0;\n\tHRESULT hr = GetRegistryDword(HKEY_CURRENT_USER, REGPATH_POLICIES_EXPLORER, L\"NoWindowsUpdate\", KEY_WOW64_64KEY, &value);\n\tif (SUCCEEDED(hr) && value == 1) {\n\t\t*retval = VARIANT_TRUE;\n\t\treturn S_OK;\n\t}\n\n\t// Remove access to use all Windows Update features\n\thr = GetRegistryDword(HKEY_CURRENT_USER, REGPATH_POLICIES_WU, L\"DisableWindowsUpdateAccess\", KEY_WOW64_64KEY, &value);\n\tif (SUCCEEDED(hr) && value == 1) {\n\t\t*retval = VARIANT_TRUE;\n\t\treturn S_OK;\n\t}\n\n\t*retval = VARIANT_FALSE;\n\treturn S_OK;\n}\n\nSTDMETHODIMP CLegacyUpdateCtrl::RebootIfRequired(void) {\n\tDoIsPermittedCheck();\n\n\tVARIANT_BOOL isRebootRequired = VARIANT_FALSE;\n\tHRESULT hr = get_IsRebootRequired(&isRebootRequired);\n\tif (SUCCEEDED(hr) && isRebootRequired == VARIANT_TRUE) {\n\t\tIElevationHelper *elevatedHelper;\n\t\thr = GetElevatedHelper(&elevatedHelper);\n\t\tCHECK_HR_OR_RETURN(L\"GetElevatedHelper\");\n\n\t\thr = elevatedHelper->Reboot();\n\t\tCHECK_HR_OR_RETURN(L\"Reboot\");\n\t}\n\n\treturn hr;\n}\n\nstatic LPCWSTR logTypeParams[] = {\n\tL\"/log system\",\n\tL\"/log local\",\n\tL\"/log locallow\",\n\tL\"/log windowsupdate\"\n};\n\nSTDMETHODIMP CLegacyUpdateCtrl::ViewLog(ViewLogType logType) {\n\tDoIsPermittedCheck();\n\n\tif (logType < 0 || logType >= ARRAYSIZE(logTypeParams)) {\n\t\treturn E_INVALIDARG;\n\t}\n\n\tHRESULT hr = StartLauncher(logTypeParams[logType], FALSE);\n\tif (!SUCCEEDED(hr)) {\n\t\t// Try directly\n\t\thr = ::ViewLog((LogAction)logType, SW_SHOWDEFAULT, TRUE);\n\t}\n\n\tCHECK_HR_OR_RETURN(L\"ViewLog\");\n\treturn hr;\n}\n\nSTDMETHODIMP CLegacyUpdateCtrl::ViewWindowsUpdateLog(void) {\n\treturn ViewLog(e_windowsUpdate);\n}\n\nSTDMETHODIMP CLegacyUpdateCtrl::OpenWindowsUpdateSettings(void) {\n\tDoIsPermittedCheck();\n\n\tHRESULT hr = StartLauncher(L\"/options\", FALSE);\n\tif (!SUCCEEDED(hr)) {\n\t\tTRACE(L\"OpenWindowsUpdateSettings() failed, falling back: %08x\", hr);\n\n\t\t// Might happen if the site isn't trusted, and the user rejected the IE medium integrity prompt.\n\t\t// Use the basic Automatic Updates dialog directly from COM.\n\t\tCComPtr<IAutomaticUpdates> automaticUpdates;\n\t\thr = automaticUpdates.CoCreateInstance(CLSID_AutomaticUpdates, NULL, CLSCTX_INPROC_SERVER);\n\t\tCHECK_HR_OR_RETURN(L\"CoCreateInstance CLSID_AutomaticUpdates\");\n\n\t\thr = automaticUpdates->ShowSettingsDialog();\n\t\tCHECK_HR_OR_RETURN(L\"ShowSettingsDialog\");\n\t}\n\n\treturn hr;\n}\n\nSTDMETHODIMP CLegacyUpdateCtrl::get_IsUsingWsusServer(VARIANT_BOOL *retval) {\n\tDoIsPermittedCheck();\n\n\tDWORD useWUServer = 0;\n\tHRESULT hr = GetRegistryDword(HKEY_LOCAL_MACHINE, REGPATH_POLICIES_WU_AU, L\"UseWUServer\", KEY_WOW64_64KEY, &useWUServer);\n\t*retval = SUCCEEDED(hr) && useWUServer == 1 ? VARIANT_TRUE : VARIANT_FALSE;\n\treturn S_OK;\n}\n\nSTDMETHODIMP CLegacyUpdateCtrl::get_WsusServerUrl(BSTR *retval) {\n\tDoIsPermittedCheck();\n\n\tLPWSTR data = NULL;\n\tDWORD size = 0;\n\tHRESULT hr = GetRegistryString(HKEY_LOCAL_MACHINE, REGPATH_POLICIES_WU, L\"WUServer\", KEY_WOW64_64KEY, &data, &size);\n\t*retval = SUCCEEDED(hr) ? SysAllocStringLen(data, size - 1) : NULL;\n\tif (data) {\n\t\tLocalFree(data);\n\t}\n\treturn S_OK;\n}\n\nSTDMETHODIMP CLegacyUpdateCtrl::get_WsusStatusServerUrl(BSTR *retval) {\n\tDoIsPermittedCheck();\n\n\tLPWSTR data = NULL;\n\tDWORD size = 0;\n\tHRESULT hr = GetRegistryString(HKEY_LOCAL_MACHINE, REGPATH_POLICIES_WU, L\"WUStatusServer\", KEY_WOW64_64KEY, &data, &size);\n\t*retval = SUCCEEDED(hr) ? SysAllocStringLen(data, size - 1) : NULL;\n\tif (data) {\n\t\tLocalFree(data);\n\t}\n\treturn S_OK;\n}\n\nSTDMETHODIMP CLegacyUpdateCtrl::BeforeUpdate(void) {\n\tDoIsPermittedCheck();\n\n\tIElevationHelper *elevatedHelper;\n\tHRESULT hr = GetElevatedHelper(&elevatedHelper);\n\tCHECK_HR_OR_RETURN(L\"GetElevatedHelper\");\n\n\treturn elevatedHelper->BeforeUpdate();\n}\n\nSTDMETHODIMP CLegacyUpdateCtrl::AfterUpdate(void) {\n\tDoIsPermittedCheck();\n\n\tIElevationHelper *elevatedHelper;\n\tHRESULT hr = GetElevatedHelper(&elevatedHelper);\n\tCHECK_HR_OR_RETURN(L\"GetElevatedHelper\");\n\n\treturn elevatedHelper->AfterUpdate();\n}\n"
  },
  {
    "path": "LegacyUpdate/LegacyUpdateCtrl.h",
    "content": "#pragma once\n\n// LegacyUpdateCtrl.h : Declaration of the CLegacyUpdateCtrl ActiveX Control class.\n\n// CLegacyUpdateCtrl : See LegacyUpdateCtrl.cpp for implementation.\n\n#include <mshtml.h>\n#include <wuapi.h>\n#include \"resource.h\"\n#include \"com.h\"\n#include \"LegacyUpdate_i.h\"\n\nclass CLegacyUpdateCtrl;\n\nclass DECLSPEC_NOVTABLE CLegacyUpdateCtrl_IOleObject :\n\tpublic IOleObjectImpl<CLegacyUpdateCtrl> {\npublic:\n\tCLegacyUpdateCtrl_IOleObject(CLegacyUpdateCtrl *pParent) :\n\t\tIOleObjectImpl<CLegacyUpdateCtrl>(pParent) {}\n};\n\nclass DECLSPEC_NOVTABLE CLegacyUpdateCtrl :\n\tpublic IDispatchImpl<ILegacyUpdateCtrl, &LIBID_LegacyUpdateLib> {\npublic:\n\tCLegacyUpdateCtrl() :\n\t\tm_IOleObject(this),\n\t\tm_refCount(1),\n\t\tm_clientSite(NULL),\n\t\tm_adviseSink(NULL),\n\t\tm_elevatedHelper(NULL),\n\t\tm_nonElevatedHelper(NULL) {}\n\n\tvirtual ~CLegacyUpdateCtrl();\n\n\tstatic STDMETHODIMP Create(IUnknown *pUnkOuter, REFIID riid, void **ppv);\n\tstatic STDMETHODIMP UpdateRegistry(BOOL bRegister);\n\nprivate:\n\tCLegacyUpdateCtrl_IOleObject m_IOleObject;\n\tLONG m_refCount;\n\npublic:\n\t// IUnknown\n\tSTDMETHODIMP QueryInterface(REFIID riid, void **ppvObject);\n\tSTDMETHODIMP_(ULONG) AddRef();\n\tSTDMETHODIMP_(ULONG) Release();\n\n\tIOleClientSite *m_clientSite;\n\tIAdviseSink *m_adviseSink;\n\nprivate:\n\tIElevationHelper *m_elevatedHelper;\n\tIElevationHelper *m_nonElevatedHelper;\n\n\tSTDMETHODIMP GetHTMLDocument(IHTMLDocument2 **retval);\n\tSTDMETHODIMP IsPermitted();\n\tSTDMETHODIMP GetIEWindowHWND(HWND *retval);\n\tSTDMETHODIMP GetElevatedHelper(IElevationHelper **retval);\n\npublic:\n\t// ILegacyUpdateCtrl\n\tSTDMETHODIMP CheckControl(VARIANT_BOOL *retval);\n\tSTDMETHODIMP MessageForHresult(LONG inHresult, BSTR *retval);\n\tSTDMETHODIMP GetOSVersionInfo(OSVersionField osField, LONG systemMetric, VARIANT *retval);\n\tSTDMETHODIMP RequestElevation();\n\tSTDMETHODIMP CreateObject(BSTR progID, IDispatch **retval);\n\tSTDMETHODIMP SetBrowserHwnd(IUpdateInstaller *installer);\n\tSTDMETHODIMP GetUserType(UserType *retval);\n\tSTDMETHODIMP get_IsRebootRequired(VARIANT_BOOL *retval);\n\tSTDMETHODIMP get_IsWindowsUpdateDisabled(VARIANT_BOOL *retval);\n\tSTDMETHODIMP RebootIfRequired();\n\tSTDMETHODIMP ViewLog(ViewLogType logType);\n\tSTDMETHODIMP ViewWindowsUpdateLog();\n\tSTDMETHODIMP OpenWindowsUpdateSettings();\n\tSTDMETHODIMP get_IsUsingWsusServer(VARIANT_BOOL *retval);\n\tSTDMETHODIMP get_WsusServerUrl(BSTR *retval);\n\tSTDMETHODIMP get_WsusStatusServerUrl(BSTR *retval);\n\tSTDMETHODIMP BeforeUpdate();\n\tSTDMETHODIMP AfterUpdate();\n};\n"
  },
  {
    "path": "LegacyUpdate/Makefile",
    "content": "FILES    = \\\n\t$(wildcard *.cpp) \\\n\tdlldatax.c \\\n\t../shared/Exec.c \\\n\t../shared/HResult.c \\\n\t../shared/LegacyUpdate.c \\\n\t../shared/Log.c \\\n\t../shared/ProductInfo.c \\\n\t../shared/Registry.c \\\n\t../shared/ViewLog.c \\\n\t../shared/WMI.c \\\n\t../shared/Wow64.c \\\n\t$(OBJDIR)/LegacyUpdate_i.c\n\nRCFILES  = LegacyUpdate.rc\nMCFILES  = wuerror.mc\nIDLFILES = LegacyUpdate.idl\n\nBIN      = obj/LegacyUpdate$(ARCH).dll\nDEF      = LegacyUpdate.def\n\nC_LANG   = c++\nCXX_LANG = c++\n\nall:: all-archs\n\nall-archs: all-32 all-64\n\ninclude ../build/shared.mk\n\nCFLAGS  += \\\n\t-DLOG_NAME=\"\\\"Control\\\"\"\n\nLDFLAGS += \\\n\t-shared \\\n\t-lkernel32 \\\n\t-luser32 \\\n\t-lgdi32 \\\n\t-lole32 \\\n\t-loleaut32 \\\n\t-ladvapi32 \\\n\t-lshell32 \\\n\t-lcomctl32 \\\n\t-lpsapi \\\n\t-lwbemuuid \\\n\t-luuid \\\n\t-lshlwapi \\\n\t-lrpcrt4 \\\n\t-lrpcns4\n\nifeq ($(ARCH),64)\n\tLDFLAGS += -Wl,-eDllMain\nelse\n\tLDFLAGS += -Wl,-e_DllMain\nendif\n\n$(OBJ): $(OBJDIR)/LegacyUpdate_i.h\n\n$(OBJDIR)/dlldatax.o: dlldatax.c $(DLLDATA) $(IDL_P)\n\t$(CC) -x c $< $(filter-out -Wpedantic, $(CFLAGS)) -c -o $@\n\n.PHONY: all all-archs all-32 all-64\n"
  },
  {
    "path": "LegacyUpdate/NGen.cpp",
    "content": "#include \"NGen.h\"\n#include \"Exec.h\"\n#include \"VersionInfo.h\"\n#include \"Wow64.h\"\n#include <shlwapi.h>\n\nSTDMETHODIMP PauseResumeNGenQueue(BOOL state) {\n\t// Only necessary prior to Windows 8\n\tif (AtLeastWin8()) {\n\t\treturn S_OK;\n\t}\n\n\t// If resuming but the system is already shutting down, ignore because it will process on boot\n\tif (state && GetSystemMetrics(SM_SHUTTINGDOWN)) {\n\t\treturn S_OK;\n\t}\n\n\t// Pause and resume .NET Framework global assembly cache (GAC) and NGen queue\n\tstatic LPCWSTR versions[] = {\n\t\tL\"v4.0.30319\",\n\t\tL\"v2.0.50727\"\n\t};\n\n\tSYSTEM_INFO systemInfo;\n\tOurGetNativeSystemInfo(&systemInfo);\n\tBOOL hasFramework64 = systemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 || systemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64;\n\n\tHRESULT hr = S_OK;\n\n\tfor (DWORD i = 0; i < ARRAYSIZE(versions); i++) {\n\t\tfor (int j = 0; j < 2; j++) {\n\t\t\tif (j == 1 && !hasFramework64) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tWCHAR path[MAX_PATH], expandedPath[MAX_PATH];\n\t\t\twsprintf(path, L\"%%SystemRoot%%\\\\Microsoft.NET\\\\Framework%ls\\\\%ls\\\\ngen.exe\", j == 1 ? L\"64\": L\"\", versions[i]);\n\t\t\tExpandEnvironmentStrings(path, expandedPath, ARRAYSIZE(expandedPath));\n\n\t\t\tif (PathFileExists(expandedPath)) {\n\t\t\t\tSHELLEXECUTEINFO execInfo = {0};\n\t\t\t\texecInfo.cbSize = sizeof(execInfo);\n\t\t\t\texecInfo.fMask = SEE_MASK_FLAG_NO_UI;\n\t\t\t\texecInfo.lpFile = expandedPath;\n\t\t\t\texecInfo.lpParameters = state ? L\"queue pause\" : L\"queue continue\";\n\t\t\t\texecInfo.nShow = SW_HIDE;\n\t\t\t\thr = ExecEx(&execInfo, TRUE, NULL);\n\n\t\t\t\tif (SUCCEEDED(hr)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn hr;\n}\n"
  },
  {
    "path": "LegacyUpdate/NGen.h",
    "content": "#pragma once\n\nSTDMETHODIMP PauseResumeNGenQueue(BOOL state);\n"
  },
  {
    "path": "LegacyUpdate/ProductName.cpp",
    "content": "#include <comdef.h>\n#include <shlwapi.h>\n#include \"Registry.h\"\n#include \"VersionInfo.h\"\n#include \"WMI.h\"\n#include \"Wow64.h\"\n\ntypedef WINBOOL (__stdcall *_IsOS)(DWORD dwOS);\n\nstatic VARIANT _productName;\n\ntypedef struct {\n\tLPCWSTR library;\n\tUINT stringID;\n} WinNT5BrandString;\n\ntypedef struct {\n\tDWORD version;\n\tDWORD osFlag;\n\tWORD archFlag;\n\tUINT stringIDs[3];\n} WinNT5Variant;\n\n#define STR_WINXP             1\n#define STR_SRV03             2\n#define STR_IA64              3\n#define STR_EMBEDDED          4\n#define STR_HOME              5\n#define STR_PRO               6\n#define STR_STANDARD          7\n#define STR_ENTERPRISE        8\n#define STR_DATACENTER        9\n#define STR_BLADE            10\n#define STR_SBS              11\n\n#define STR_TABLETPC2005     12\n\n#define STR_WIN              13\n\n#define STR_TABLETPC         14\n#define STR_MEDIACENTER      15\n#define STR_STARTER          16\n#define STR_EMBPOS           17\n#define STR_WINFLP           18\n#define STR_EMBSTD2009       19\n#define STR_EMBPOS2009       20\n\n#define STR_PROIA64          21\n#define STR_STANDARDIA64     22\n#define STR_ENTERPRISEIA64   23\n#define STR_DATACENTERIA64   24\n#define STR_PROX64           25\n#define STR_STANDARDX64      26\n#define STR_ENTERPRISEX64    27\n#define STR_DATACENTERX64    28\n\n#define STR_SRV03R2          29\n\n#define STR_APPLIANCE        30\n\n#define STR_STORAGESERVER_1  31\n#define STR_STORAGESERVER_2  32\n#define STR_UDSSERVER_2      33\n\n#define STR_COMPUTECLUSTER_1 34\n#define STR_COMPUTECLUSTER_2 35\n#define STR_COMPUTECLUSTER_3 36\n\n#define STR_HOMESERVER_1     37\n#define STR_HOMESERVER_2     38\n\nstatic const WinNT5BrandString nt5BrandStrings[] = {\n\t// Skip index 0\n\t{},\n\n\t// Base editions\n\t{L\"sysdm.cpl\",      180}, // \"Microsoft Windows XP\"\n\t{L\"sysdm.cpl\",      181}, // \"Microsoft Windows Server 2003\"\n\t{L\"sysdm.cpl\",      188}, // \"64-Bit Edition\"\n\t{L\"sysdm.cpl\",      189}, // \"Embedded\"\n\t{L\"sysdm.cpl\",      190}, // \"Home Edition\"\n\t{L\"sysdm.cpl\",      191}, // \"Professional\"\n\t{L\"sysdm.cpl\",      192}, // \"Standard Edition\"\n\t{L\"sysdm.cpl\",      193}, // \"Enterprise Edition\"\n\t{L\"sysdm.cpl\",      194}, // \"Datacenter Edition\"\n\t{L\"sysdm.cpl\",      196}, // \"Web Edition\"\n\t{L\"sysdm.cpl\",      197}, // \"for Small Business Server\"\n\n\t// Post-SP1\n\t{L\"xpsp2res.dll\", 13813}, // \"Tablet PC Edition 2005\"\n\n\t// Post-SP2\n\t{L\"xpsp3res.dll\",  2000}, // \"Microsoft Windows\"\n\n\t// XP\n\t{L\"winbrand.dll\",  2000}, // \"Tablet PC Edition\"\n\t{L\"winbrand.dll\",  2001}, // \"Media Center Edition\"\n\t{L\"winbrand.dll\",  2002}, // \"Starter Edition\"\n\t{L\"winbrand.dll\",  2003}, // \"Embedded for Point of Service\"\n\t{L\"winbrand.dll\",  2004}, // \"Fundamentals for Legacy PCs\"\n\t{L\"winbrand.dll\",  2005}, // \"Windows Embedded Standard\"\n\t{L\"winbrand.dll\",  2006}, // \"Embedded POSReady 2009\"\n\n\t// Server 2003\n\t{L\"ws03res.dll\",   4600}, // \"Microsoft(R) Windows(R) XP 64-Bit Edition for Itanium-based Systems\"\n\t{L\"ws03res.dll\",   4601}, // \"Microsoft(R) Windows(R) Server 2003, Standard Edition for 64-Bit Itanium-based Systems\"\n\t{L\"ws03res.dll\",   4602}, // \"Microsoft(R) Windows(R) Server 2003, Enterprise Edition for 64-Bit Itanium-based Systems\"\n\t{L\"ws03res.dll\",   4603}, // \"Microsoft(R) Windows(R) Server 2003, Datacenter Edition for 64-Bit Itanium-based Systems\"\n\t{L\"ws03res.dll\",  13812}, // \"Professional x64 Edition\"\n\t{L\"ws03res.dll\",  13814}, // \"Standard x64 Edition\"\n\t{L\"ws03res.dll\",  13815}, // \"Enterprise x64 Edition\"\n\t{L\"ws03res.dll\",  13816}, // \"Datacenter x64 Edition\"\n\n\t// R2\n\t{L\"r2brand.dll\",   1101}, // \"Microsoft Windows Server 2003 R2\"\n\n\t// Appliance Server\n\t{L\"winbrand.dll\",  2002}, // \"Appliance Server\"\n\n\t// Storage Server\n\t{L\"wssbrand.dll\",  1101}, // \"Microsoft\"\n\t{L\"wssbrand.dll\",  1102}, // \"Windows Storage Server 2003 R2\"\n\t{L\"wssbrand.dll\",  1104}, // \"Windows UDS Server 2003\"\n\n\t// Compute Cluster\n\t{L\"hpcbrand.dll\",  1101}, // \"Microsoft\"\n\t{L\"hpcbrand.dll\",  1102}, // \"Windows Server 2003\"\n\t{L\"hpcbrand.dll\",  1103}, // \"Compute Cluster Edition\"\n\n\t// Home Server\n\t{L\"whsbrand.dll\",  1101}, // \"Microsoft\"\n\t{L\"whsbrand.dll\",  1102}  // \"Windows Home Server\"\n};\n\nstatic const WinNT5Variant nt5Variants[] = {\n\t// XP\n\t// \"XP Reloaded\" editions - also identifies as OS_PROFESSIONAL\n\t{MAXDWORD, OS_TABLETPC,       MAXWORD,                      {STR_WINXP, STR_TABLETPC}},      // \"Microsoft Windows XP Tablet PC Edition\"\n\t{MAXDWORD, OS_MEDIACENTER,    MAXWORD,                      {STR_WINXP, STR_MEDIACENTER}},   // \"Microsoft Windows XP Media Center Edition\"\n\t{MAXDWORD, OS_STARTER,        MAXWORD,                      {STR_WINXP, STR_STARTER}},       // \"Microsoft Windows XP Starter Edition\"\n\t// Embedded editions - also identifies as OS_EMBEDDED and OS_PROFESSIONAL\n\t{0x0501,   OS_EMBPOS,         MAXWORD,                      {STR_WIN,   STR_EMBPOS}},        // \"Microsoft Windows Embedded for Point of Service\"\n\t{MAXDWORD, OS_WINFLP,         MAXWORD,                      {STR_WIN,   STR_WINFLP}},        // \"Microsoft Windows Fundamentals for Legacy PCs\"\n\t{MAXDWORD, OS_EMBSTD2009,     MAXWORD,                      {STR_WIN,   STR_EMBSTD2009}},    // \"Microsoft Windows Embedded Standard\"\n\t{MAXDWORD, OS_EMBPOS2009,     MAXWORD,                      {STR_WIN,   STR_EMBPOS2009}},    // \"Microsoft Windows Embedded POSReady 2009\"\n\t{MAXDWORD, OS_EMBEDDED,       MAXWORD,                      {STR_WINXP, STR_EMBEDDED}},      // \"Microsoft Windows XP Embedded\"\n\t// Base editions\n\t{MAXDWORD, OS_HOME,           MAXWORD,                      {STR_WINXP, STR_HOME}},          // \"Microsoft Windows XP Home Edition\"\n\t{MAXDWORD, OS_PROFESSIONAL,   PROCESSOR_ARCHITECTURE_AMD64, {STR_WINXP, STR_PROX64}},        // \"Microsoft Windows XP Professional x64 Edition\"\n\t{MAXDWORD, OS_PROFESSIONAL,   PROCESSOR_ARCHITECTURE_IA64,  {STR_WINXP, STR_PRO, STR_IA64}}, // \"Microsoft Windows XP Professional 64-Bit Edition\"\n\t{MAXDWORD, OS_PROFESSIONAL,   MAXWORD,                      {STR_WINXP, STR_PRO}},           // \"Microsoft Windows XP Professional\"\n\n\t// Server 2003\n\t// Neutral\n\t{MAXDWORD, OS_APPLIANCE,      MAXWORD,                      {STR_SRV03, STR_APPLIANCE}},     // \"Microsoft Windows Server 2003, Appliance Server\"\n\t{MAXDWORD, OS_STORAGESERVER,  MAXWORD,                      {STR_STORAGESERVER_1, STR_STORAGESERVER_2}}, // \"Microsoft Windows Storage Server 2003 R2\"\n\t{MAXDWORD, OS_COMPUTECLUSTER, MAXWORD,                      {STR_COMPUTECLUSTER_1, STR_COMPUTECLUSTER_2, STR_COMPUTECLUSTER_3}}, // \"Microsoft Windows Server 2003 Compute Cluster Edition\"\n\t{0x0502,   OS_HOMESERVER,     MAXWORD,                      {STR_HOMESERVER_1, STR_HOMESERVER_2}}, // \"Microsoft Windows Home Server\"\n\t// Base editions\n\t{MAXDWORD, OS_SMALLBUSINESSSERVER, MAXWORD,                 {STR_SRV03, STR_SBS}},           // \"Microsoft Windows Server 2003 for Small Business Server\"\n\t// Itanium\n\t{MAXDWORD, OS_SERVER,         PROCESSOR_ARCHITECTURE_IA64,  {STR_STANDARDIA64}},             // \"Microsoft(R) Windows(R) Server 2003, Standard Edition for 64-Bit Itanium-based Systems\"\n\t{MAXDWORD, OS_ADVSERVER,      PROCESSOR_ARCHITECTURE_IA64,  {STR_ENTERPRISEIA64}},           // \"Microsoft(R) Windows(R) Server 2003, Enterprise Edition for 64-Bit Itanium-based Systems\"\n\t{MAXDWORD, OS_DATACENTER,     PROCESSOR_ARCHITECTURE_IA64,  {STR_DATACENTERIA64}},           // \"Microsoft(R) Windows(R) Server 2003, Datacenter Edition for 64-Bit Itanium-based Systems\"\n\t// x64\n\t{MAXDWORD, OS_SERVER,         PROCESSOR_ARCHITECTURE_AMD64, {STR_SRV03, STR_STANDARDX64}},   // \"Microsoft Windows Server 2003, Standard x64 Edition\"\n\t{MAXDWORD, OS_ADVSERVER,      PROCESSOR_ARCHITECTURE_AMD64, {STR_SRV03, STR_ENTERPRISEX64}}, // \"Microsoft Windows Server 2003, Enterprise x64 Edition\"\n\t{MAXDWORD, OS_DATACENTER,     PROCESSOR_ARCHITECTURE_AMD64, {STR_SRV03, STR_DATACENTERX64}}, // \"Microsoft Windows Server 2003, Datacenter x64 Edition\"\n\t// x86\n\t{MAXDWORD, OS_SERVER,         MAXWORD,                      {STR_SRV03, STR_STANDARD}},      // \"Microsoft Windows Server 2003, Standard Edition\"\n\t{MAXDWORD, OS_ADVSERVER,      MAXWORD,                      {STR_SRV03, STR_ENTERPRISE}},    // \"Microsoft Windows Server 2003, Enterprise Edition\"\n\t{MAXDWORD, OS_WEBSERVER,      MAXWORD,                      {STR_SRV03, STR_BLADE}},         // \"Microsoft Windows Server 2003, Web Edition\"\n\t{MAXDWORD, OS_DATACENTER,     MAXWORD,                      {STR_SRV03, STR_DATACENTER}},    // \"Microsoft Windows Server 2003, Datacenter Edition\"\n\n\t// Fallbacks\n\t{0x0501,   MAXDWORD,          MAXWORD,                      {STR_WINXP}},                    // \"Microsoft Windows XP\"\n\t{0x0502,   MAXDWORD,          MAXWORD,                      {STR_SRV03}},                    // \"Microsoft Windows Server 2003\"\n};\n\nHRESULT GetOSProductName(LPVARIANT productName) {\n\tif (_productName.vt == VT_EMPTY) {\n\t\tVariantInit(&_productName);\n\n\t\t// Handle the absolute disaster of Windows XP/Server 2003 edition branding\n\t\tWORD winver = GetWinVer();\n\t\tif (HIBYTE(winver) == 5 && LOBYTE(winver) != 0) {\n\t\t\t_IsOS $IsOS = (_IsOS)GetProcAddress(LoadLibrary(L\"shlwapi.dll\"), MAKEINTRESOURCEA(437));\n\t\t\tif (!$IsOS) {\n\t\t\t\treturn E_FAIL;\n\t\t\t}\n\n\t\t\tSYSTEM_INFO systemInfo;\n\t\t\tOurGetNativeSystemInfo(&systemInfo);\n\n\t\t\tWinNT5Variant variant = {};\n\t\t\tfor (DWORD i = 0; i < ARRAYSIZE(nt5Variants); i++) {\n\t\t\t\tWinNT5Variant thisVariant = nt5Variants[i];\n\t\t\t\tif ((thisVariant.version == MAXDWORD || thisVariant.version == winver) &&\n\t\t\t\t\t(thisVariant.archFlag == MAXWORD || thisVariant.archFlag == systemInfo.wProcessorArchitecture) &&\n\t\t\t\t\t(thisVariant.osFlag == MAXDWORD || $IsOS(thisVariant.osFlag))) {\n\t\t\t\t\tvariant = thisVariant;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (variant.version != 0) {\n\t\t\t\tWCHAR brandStr[1024];\n\t\t\t\tZeroMemory(brandStr, ARRAYSIZE(brandStr));\n\n\t\t\t\tfor (DWORD i = 0; variant.stringIDs[i] != 0; i++) {\n\t\t\t\t\tUINT id = variant.stringIDs[i];\n\n\t\t\t\t\t// If Server 2003 R2, override to R2 string\n\t\t\t\t\tif (id == STR_SRV03 && $IsOS(OS_SERVERR2)) {\n\t\t\t\t\t\tid = STR_SRV03R2;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If XP Tablet PC SP2, override to 2005 string\n\t\t\t\t\tif (id == STR_TABLETPC && GetVersionInfo()->wServicePackMajor >= 2) {\n\t\t\t\t\t\tid = STR_TABLETPC2005;\n\t\t\t\t\t}\n\n\t\t\t\t\tWinNT5BrandString brandString = nt5BrandStrings[id];\n\t\t\t\t\tWCHAR str[340];\n\t\t\t\t\tHMODULE dll = LoadLibraryEx(brandString.library, NULL, LOAD_LIBRARY_AS_DATAFILE);\n\t\t\t\t\tif (dll) {\n\t\t\t\t\t\tLoadString(dll, brandString.stringID, str, ARRAYSIZE(str));\n\t\t\t\t\t\tFreeLibrary(dll);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If Server 2003 (except SBS), add comma\n\t\t\t\t\tif (i == 1) {\n\t\t\t\t\t\tUINT lastID = variant.stringIDs[i - 1];\n\t\t\t\t\t\tif (lastID == STR_SRV03 && !$IsOS(OS_SMALLBUSINESSSERVER)) {\n\t\t\t\t\t\t\twcscat(brandStr, L\",\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (i > 0) {\n\t\t\t\t\t\twcscat(brandStr, L\" \");\n\t\t\t\t\t}\n\n\t\t\t\t\twcscat(brandStr, str);\n\t\t\t\t}\n\n\t\t\t\tif (wcslen(brandStr) > 0) {\n\t\t\t\t\t_productName.vt = VT_BSTR;\n\t\t\t\t\t_productName.bstrVal = SysAllocString(brandStr);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (_productName.vt == VT_EMPTY) {\n\t\t\t// Get from WMI\n\t\t\tHRESULT hr = QueryWMIProperty(L\"SELECT Caption FROM Win32_OperatingSystem\", L\"Caption\", &_productName);\n\t\t\tCHECK_HR_OR_RETURN(L\"QueryWMIProperty\");\n\t\t}\n\n\t\tif (_productName.vt == VT_EMPTY) {\n\t\t\t// Get from registry\n\t\t\tLPWSTR data = NULL;\n\t\t\tDWORD size = 0;\n\t\t\tHRESULT hr = GetRegistryString(HKEY_LOCAL_MACHINE, REGPATH_WINNT, L\"ProductName\", KEY_WOW64_64KEY, &data, &size);\n\t\t\tCHECK_HR_OR_RETURN(L\"GetRegistryString\");\n\n\t\t\t_productName.vt = VT_BSTR;\n\t\t\t_productName.bstrVal = SysAllocStringLen(data, size - 1);\n\t\t\tLocalFree(data);\n\t\t}\n\t}\n\n\tVariantCopy(productName, &_productName);\n\treturn S_OK;\n}\n"
  },
  {
    "path": "LegacyUpdate/ProductName.h",
    "content": "#pragma once\n\nHRESULT GetOSProductName(LPVARIANT productName);\n"
  },
  {
    "path": "LegacyUpdate/ProgressBarControl.cpp",
    "content": "// ProgressBarControl.cpp : Implementation of CProgressBarControl\n\n#include \"ProgressBarControl.h\"\n#include <commctrl.h>\n#include <new>\n#include \"Compat.h\"\n#include \"Registry.h\"\n#include \"resource.h\"\n#include \"VersionInfo.h\"\n\n#define PROGRESSBARCONTROL_MISCSTATUS (OLEMISC_RECOMPOSEONRESIZE | OLEMISC_CANTLINKINSIDE | OLEMISC_INSIDEOUT | OLEMISC_ACTIVATEWHENVISIBLE | OLEMISC_SETCLIENTSITEFIRST | OLEMISC_NOUIACTIVATE)\n\nDEFINE_UUIDOF(CProgressBarControl, CLSID_ProgressBarControl);\n\nSTDMETHODIMP CProgressBarControl::Create(IUnknown *pUnkOuter, REFIID riid, void **ppv) {\n\tif (pUnkOuter != NULL) {\n\t\treturn CLASS_E_NOAGGREGATION;\n\t}\n\n\tCProgressBarControl *pThis = (CProgressBarControl *)CoTaskMemAlloc(sizeof(CProgressBarControl));\n\tif (pThis == NULL) {\n\t\treturn E_OUTOFMEMORY;\n\t}\n\n\tnew(pThis) CProgressBarControl();\n\tHRESULT hr = pThis->QueryInterface(riid, ppv);\n\tCHECK_HR_OR_RETURN(L\"QueryInterface\");\n\tpThis->Release();\n\n\treturn hr;\n}\n\nCProgressBarControl::~CProgressBarControl(void) {\n\tDestroyControlWindow();\n\tif (m_clientSite) {\n\t\tm_clientSite->Release();\n\t\tm_clientSite = NULL;\n\t}\n\tif (m_adviseSink) {\n\t\tm_adviseSink->Release();\n\t\tm_adviseSink = NULL;\n\t}\n}\n\nSTDMETHODIMP CProgressBarControl::UpdateRegistry(BOOL bRegister) {\n\tif (bRegister) {\n\t\tRegistryEntry entries[] = {\n\t\t\t{HKEY_CLASSES_ROOT, L\"LegacyUpdate.ProgressBar\", NULL, REG_SZ, (LPVOID)L\"Legacy Update Progress Bar Control\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"LegacyUpdate.ProgressBar\\\\CurVer\", NULL, REG_SZ, (LPVOID)L\"LegacyUpdate.ProgressBar.1\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"LegacyUpdate.ProgressBar.1\", NULL, REG_SZ, (LPVOID)L\"Legacy Update Progress Bar Control\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"LegacyUpdate.ProgressBar.1\\\\CLSID\", NULL, REG_SZ, (LPVOID)L\"%CLSID%\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\", NULL, REG_SZ, (LPVOID)L\"Legacy Update Progress Bar Control\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\", L\"AppID\", REG_SZ, (LPVOID)L\"%APPID%\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\ProgID\", NULL, REG_SZ, (LPVOID)L\"LegacyUpdate.ProgressBar.1\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\VersionIndependentProgID\", NULL, REG_SZ, (LPVOID)L\"LegacyUpdate.ProgressBar\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\Programmable\", NULL, REG_SZ, NULL},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\InprocServer32\", NULL, REG_SZ, (LPVOID)L\"%MODULE%\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\InprocServer32\", L\"ThreadingModel\", REG_SZ, (LPVOID)L\"Apartment\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\Control\", NULL, REG_SZ, NULL},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\TypeLib\", NULL, REG_SZ, (LPVOID)L\"%LIBID%\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\Version\", NULL, REG_SZ, (LPVOID)L\"1.0\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\MiscStatus\", NULL, REG_DWORD, (LPVOID)PROGRESSBARCONTROL_MISCSTATUS},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\Implemented Categories\\\\{7DD95801-9882-11CF-9FA9-00AA006C42C4}\", NULL, REG_SZ, NULL},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\\\\Implemented Categories\\\\{7DD95802-9882-11CF-9FA9-00AA006C42C4}\", NULL, REG_SZ, NULL},\n\t\t\t{}\n\t\t};\n\t\treturn SetRegistryEntries(entries);\n\t} else {\n\t\tRegistryEntry entries[] = {\n\t\t\t{HKEY_CLASSES_ROOT, L\"LegacyUpdate.ProgressBar\", NULL, 0, DELETE_KEY},\n\t\t\t{HKEY_CLASSES_ROOT, L\"LegacyUpdate.ProgressBar.1\", NULL, 0, DELETE_KEY},\n\t\t\t{HKEY_CLASSES_ROOT, L\"CLSID\\\\%CLSID%\", NULL, 0, DELETE_KEY},\n\t\t\t{}\n\t\t};\n\t\treturn SetRegistryEntries(entries);\n\t}\n}\n\n#pragma mark - IUnknown\n\nSTDMETHODIMP CProgressBarControl::QueryInterface(REFIID riid, void **ppvObject) {\n\tif (ppvObject == NULL) {\n\t\treturn E_POINTER;\n\t}\n\n\t*ppvObject = NULL;\n\n\tif (IsEqualIID(riid, IID_IOleObject)) {\n\t\t*ppvObject = (IOleObject *)&m_IOleObject;\n\t\tAddRef();\n\t\treturn S_OK;\n\t} else if (IsEqualIID(riid, IID_IViewObject) || IsEqualIID(riid, IID_IViewObject2) || IsEqualIID(riid, IID_IViewObjectEx)) {\n\t\t*ppvObject = (IViewObjectEx *)&m_IViewObjectEx;\n\t\tAddRef();\n\t\treturn S_OK;\n\t} else if (IsEqualIID(riid, IID_IOleInPlaceObject) || IsEqualIID(riid, IID_IOleWindow) || IsEqualIID(riid, IID_IOleInPlaceObjectWindowless)) {\n\t\t*ppvObject = (IOleInPlaceObject *)&m_IOleInPlaceObject;\n\t\tAddRef();\n\t\treturn S_OK;\n\t} else if (IsEqualIID(riid, IID_IOleInPlaceActiveObject)) {\n\t\t*ppvObject = (IOleInPlaceActiveObject *)&m_IOleInPlaceActiveObject;\n\t\tAddRef();\n\t\treturn S_OK;\n\t} else if (IsEqualIID(riid, IID_IQuickActivate)) {\n\t\t*ppvObject = (IQuickActivate *)&m_IQuickActivateImpl;\n\t\tAddRef();\n\t\treturn S_OK;\n\t}\n\n\treturn IDispatchImpl<IProgressBarControl, &LIBID_LegacyUpdateLib>::QueryInterface(riid, ppvObject);\n}\n\nSTDMETHODIMP_(ULONG) CProgressBarControl::AddRef(void) {\n\treturn InterlockedIncrement(&m_refCount);\n}\n\nSTDMETHODIMP_(ULONG) CProgressBarControl::Release(void) {\n\tULONG count = InterlockedDecrement(&m_refCount);\n\tif (count == 0) {\n\t\tthis->~CProgressBarControl();\n\t\tCoTaskMemFree(this);\n\t}\n\treturn count;\n}\n\n#pragma mark - IOleObject\n\nSTDMETHODIMP CProgressBarControl_IOleObject::GetExtent(DWORD dwDrawAspect, SIZEL *psizel) {\n\tif (psizel == NULL) {\n\t\treturn E_POINTER;\n\t}\n\n\tif (dwDrawAspect != DVASPECT_CONTENT) {\n\t\treturn DV_E_DVASPECT;\n\t}\n\n\t// Convert to HIMETRIC\n\tHDC hdc = GetDC(NULL);\n\tint ppiX = GetDeviceCaps(hdc, LOGPIXELSX);\n\tint ppiY = GetDeviceCaps(hdc, LOGPIXELSY);\n\tReleaseDC(NULL, hdc);\n\n\tpsizel->cx = MAP_PIX_TO_LOGHIM(m_pParent->m_width, ppiX);\n\tpsizel->cy = MAP_PIX_TO_LOGHIM(m_pParent->m_height, ppiY);\n\treturn S_OK;\n}\n\nSTDMETHODIMP CProgressBarControl_IOleObject::SetExtent(DWORD dwDrawAspect, SIZEL *psizel) {\n\tif (psizel == NULL) {\n\t\treturn E_POINTER;\n\t}\n\n\tif (dwDrawAspect != DVASPECT_CONTENT) {\n\t\treturn DV_E_DVASPECT;\n\t}\n\n\t// Convert from HIMETRIC\n\tHDC hdc = GetDC(NULL);\n\tint ppiX = GetDeviceCaps(hdc, LOGPIXELSX);\n\tint ppiY = GetDeviceCaps(hdc, LOGPIXELSY);\n\tReleaseDC(NULL, hdc);\n\n\tm_pParent->m_width = MAP_LOGHIM_TO_PIX(psizel->cx, ppiX);\n\tm_pParent->m_height = MAP_LOGHIM_TO_PIX(psizel->cy, ppiY);\n\n\tif (m_pParent->m_innerHwnd) {\n\t\tSetWindowPos(\n\t\t\tm_pParent->m_innerHwnd, NULL,\n\t\t\t0, 0,\n\t\t\tm_pParent->m_width, m_pParent->m_height,\n\t\t\tSWP_NOZORDER | SWP_NOACTIVATE\n\t\t);\n\t}\n\n\treturn S_OK;\n}\n\nSTDMETHODIMP CProgressBarControl_IOleObject::DoVerb(LONG iVerb, LPMSG lpmsg, IOleClientSite *pActiveSite, LONG lindex, HWND hwndParent, LPCRECT lprcPosRect) {\n\tswitch (iVerb) {\n\tcase OLEIVERB_INPLACEACTIVATE:\n\tcase OLEIVERB_UIACTIVATE:\n\tcase OLEIVERB_SHOW:\n\t\tif (hwndParent && lprcPosRect) {\n\t\t\tHRESULT hr = m_pParent->CreateControlWindow(hwndParent, lprcPosRect);\n\t\t\tCHECK_HR_OR_RETURN(L\"CreateControlWindow\");\n\t\t}\n\t\treturn S_OK;\n\n\tcase OLEIVERB_HIDE:\n\t\treturn S_OK;\n\n\tdefault:\n\t\treturn OLEOBJ_S_INVALIDVERB;\n\t}\n}\n\nSTDMETHODIMP CProgressBarControl_IOleObject::GetMiscStatus(DWORD dwAspect, DWORD *pdwStatus) {\n\tif (pdwStatus == NULL) {\n\t\treturn E_POINTER;\n\t}\n\n\tif (dwAspect == DVASPECT_CONTENT) {\n\t\t*pdwStatus = PROGRESSBARCONTROL_MISCSTATUS;\n\t\treturn S_OK;\n\t}\n\n\t*pdwStatus = 0;\n\treturn S_OK;\n}\n\nSTDMETHODIMP CProgressBarControl_IOleObject::Close(DWORD dwSaveOption) {\n\tm_pParent->DestroyControlWindow();\n\treturn IOleObjectImpl<CProgressBarControl>::Close(dwSaveOption);\n}\n\nSTDMETHODIMP CProgressBarControl::CreateControlWindow(HWND hParent, const RECT *pRect) {\n\tm_width = pRect->right - pRect->left;\n\tm_height = pRect->bottom - pRect->top;\n\n\tif (m_innerHwnd) {\n\t\tif (m_hwnd == hParent) {\n\t\t\t// Just update the position\n\t\t\tSetWindowPos(\n\t\t\t\tm_innerHwnd, NULL,\n\t\t\t\tpRect->left, pRect->top,\n\t\t\t\tm_width, m_height,\n\t\t\t\tSWP_NOZORDER | SWP_NOACTIVATE\n\t\t\t);\n\t\t\treturn S_OK;\n\t\t} else {\n\t\t\t// Parent changed, start over\n\t\t\tDestroyControlWindow();\n\t\t}\n\t}\n\n\tm_hwnd = hParent;\n\n\t// Bind to our manifest to ensure we get visual styles and marquee\n\tULONG_PTR cookie;\n\tIsolationAwareStart(&cookie);\n\n\t// Load and init comctl (hopefully 6.0)\n\tLoadLibrary(L\"comctl32.dll\");\n\n\tINITCOMMONCONTROLSEX initComctl = {0};\n\tinitComctl.dwSize = sizeof(initComctl);\n\tinitComctl.dwICC = ICC_PROGRESS_CLASS;\n\tInitCommonControlsEx(&initComctl);\n\n\t// Create progress bar window\n\tm_innerHwnd = CreateWindowEx(\n\t\tWS_EX_CLIENTEDGE,\n\t\tPROGRESS_CLASS,\n\t\tNULL,\n\t\tWS_CHILD | WS_VISIBLE,\n\t\t0, 0,\n\t\tm_width, m_height,\n\t\tm_hwnd,\n\t\tNULL,\n\t\tOWN_MODULE,\n\t\tNULL\n\t);\n\tIsolationAwareEnd(&cookie);\n\tif (!m_innerHwnd) {\n\t\treturn E_FAIL;\n\t}\n\n\treturn put_Value(-1);\n}\n\nSTDMETHODIMP CProgressBarControl::DestroyControlWindow(void) {\n\tif (m_innerHwnd) {\n\t\tDestroyWindow(m_innerHwnd);\n\t\tm_innerHwnd = NULL;\n\t}\n\n\tm_hwnd = NULL;\n\n\treturn S_OK;\n}\n\n#pragma mark - IViewObjectEx\n\nSTDMETHODIMP 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) {\n\tif (lprcBounds == NULL || hdcDraw == NULL) {\n\t\treturn E_POINTER;\n\t}\n\n\tswitch (dwDrawAspect) {\n\tcase DVASPECT_CONTENT:\n\tcase DVASPECT_OPAQUE:\n\tcase DVASPECT_TRANSPARENT:\n\t\tbreak;\n\n\tdefault:\n\t\treturn DV_E_DVASPECT;\n\t}\n\n\tif (m_innerHwnd) {\n\t\t// Set size\n\t\tLONG width = lprcBounds->right - lprcBounds->left;\n\t\tLONG height = lprcBounds->bottom - lprcBounds->top;\n\t\tSetWindowPos(\n\t\t\tm_innerHwnd, NULL,\n\t\t\tlprcBounds->left, lprcBounds->top,\n\t\t\twidth, height,\n\t\t\tSWP_NOZORDER | SWP_NOACTIVATE\n\t\t);\n\t}\n\n\treturn S_OK;\n}\n\n#pragma mark - IOleInPlaceObject\n\nSTDMETHODIMP CProgressBarControl_IOleInPlaceObject::SetObjectRects(LPCRECT lprcPosRect, LPCRECT lprcClipRect) {\n\tif (lprcPosRect == NULL) {\n\t\treturn E_POINTER;\n\t}\n\n\tm_pParent->m_width = lprcPosRect->right - lprcPosRect->left;\n\tm_pParent->m_height = lprcPosRect->bottom - lprcPosRect->top;\n\treturn S_OK;\n}\n\n#pragma mark - IOleInPlaceActiveObject\n\nSTDMETHODIMP CProgressBarControl_IOleInPlaceActiveObject::ResizeBorder(LPCRECT prcBorder, IOleInPlaceUIWindow *pUIWindow, BOOL fFrameWindow) {\n\tif (prcBorder && m_pParent->m_innerHwnd) {\n\t\tLONG width = prcBorder->right - prcBorder->left;\n\t\tLONG height = prcBorder->bottom - prcBorder->top;\n\n\t\tm_pParent->m_width = width;\n\t\tm_pParent->m_height = height;\n\n\t\tSetWindowPos(\n\t\t\tm_pParent->m_innerHwnd, NULL,\n\t\t\tprcBorder->left, prcBorder->top,\n\t\t\twidth, height,\n\t\t\tSWP_NOZORDER | SWP_NOACTIVATE\n\t\t);\n\t}\n\n\treturn S_OK;\n}\n\n#pragma mark - Helper methods\n\nSTDMETHODIMP CProgressBarControl::InvalidateContainer(void) {\n\tif (m_adviseSink) {\n\t\tm_adviseSink->OnViewChange(DVASPECT_CONTENT, -1);\n\t}\n\n\tif (m_clientSite) {\n\t\tCComPtr<IOleInPlaceSiteWindowless> inPlaceSiteWindowless;\n\t\tm_clientSite->QueryInterface(IID_IOleInPlaceSiteWindowless, (void**)&inPlaceSiteWindowless);\n\t\tif (inPlaceSiteWindowless) {\n\t\t\tinPlaceSiteWindowless->InvalidateRect(NULL, TRUE);\n\t\t} else {\n\t\t\tCComPtr<IOleInPlaceSite> inPlaceSite;\n\t\t\tm_clientSite->QueryInterface(IID_IOleInPlaceSite, (void**)&inPlaceSite);\n\t\t\tif (inPlaceSite) {\n\t\t\t\tHWND containerHwnd;\n\t\t\t\tif (SUCCEEDED(inPlaceSite->GetWindow(&containerHwnd)) && containerHwnd) {\n\t\t\t\t\tInvalidateRect(containerHwnd, NULL, TRUE);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn S_OK;\n}\n\n#pragma mark - IProgressBarControl\n\nSTDMETHODIMP CProgressBarControl::get_Value(SHORT *pValue) {\n\tif (pValue == NULL) {\n\t\treturn E_POINTER;\n\t}\n\n\tif (m_innerHwnd == NULL) {\n\t\t*pValue = 0;\n\t\treturn S_OK;\n\t}\n\n\tif (GetWindowLongPtr(m_innerHwnd, GWL_STYLE) & PBS_MARQUEE) {\n\t\t// Marquee - no value\n\t\t*pValue = -1;\n\t} else {\n\t\t// Normal - return PBM_GETPOS\n\t\t*pValue = (SHORT)SendMessage(m_innerHwnd, PBM_GETPOS, 0, 0);\n\t}\n\n\treturn S_OK;\n}\n\nSTDMETHODIMP CProgressBarControl::put_Value(SHORT value) {\n\tif (m_innerHwnd == NULL) {\n\t\treturn E_FAIL;\n\t}\n\n\tULONG_PTR cookie;\n\tIsolationAwareStart(&cookie);\n\n\tif (value == -1) {\n\t\t// Marquee style\n\t\tSetWindowLongPtr(m_innerHwnd, GWL_STYLE, GetWindowLongPtr(m_innerHwnd, GWL_STYLE) | PBS_MARQUEE);\n\t\tSendMessage(m_innerHwnd, PBM_SETMARQUEE, TRUE, 100);\n\t} else {\n\t\t// Normal style\n\t\tSHORT oldValue = -1;\n\t\tget_Value(&oldValue);\n\t\tif (oldValue == -1) {\n\t\t\tSendMessage(m_innerHwnd, PBM_SETMARQUEE, FALSE, 0);\n\t\t\tSetWindowLongPtr(m_innerHwnd, GWL_STYLE, GetWindowLongPtr(m_innerHwnd, GWL_STYLE) & ~PBS_MARQUEE);\n\t\t\tSendMessage(m_innerHwnd, PBM_SETRANGE, 0, MAKELPARAM(0, 100));\n\t\t}\n\n\t\tSendMessage(m_innerHwnd, PBM_SETPOS, value, 0);\n\t}\n\n\tIsolationAwareEnd(&cookie);\n\tInvalidateContainer();\n\n\treturn S_OK;\n}\n"
  },
  {
    "path": "LegacyUpdate/ProgressBarControl.h",
    "content": "#pragma once\n\n// ProgressBarControl.h : Declaration of the CProgressBarControl class.\n\n#include \"resource.h\"\n#include \"com.h\"\n#include \"LegacyUpdate_i.h\"\n\nclass CProgressBarControl;\n\nclass DECLSPEC_NOVTABLE CProgressBarControl_IOleObject :\n\tpublic IOleObjectImpl<CProgressBarControl> {\npublic:\n\tCProgressBarControl_IOleObject(CProgressBarControl *pParent) :\n\t\tIOleObjectImpl<CProgressBarControl>(pParent) {}\n\n\tSTDMETHODIMP GetExtent(DWORD dwDrawAspect, SIZEL *psizel);\n\tSTDMETHODIMP SetExtent(DWORD dwDrawAspect, SIZEL *psizel);\n\tSTDMETHODIMP DoVerb(LONG iVerb, LPMSG lpmsg, IOleClientSite *pActiveSite, LONG lindex, HWND hwndParent, LPCRECT lprcPosRect);\n\tSTDMETHODIMP GetMiscStatus(DWORD dwAspect, DWORD *pdwStatus);\n\tSTDMETHODIMP Close(DWORD dwSaveOption);\n};\n\nclass DECLSPEC_NOVTABLE CProgressBarControl_IViewObjectEx :\n\tpublic IViewObjectExImpl<CProgressBarControl> {\npublic:\n\tCProgressBarControl_IViewObjectEx(CProgressBarControl *pParent) :\n\t\tIViewObjectExImpl<CProgressBarControl>(pParent) {}\n};\n\nclass DECLSPEC_NOVTABLE CProgressBarControl_IOleInPlaceObject :\n\tpublic IOleInPlaceObjectImpl<CProgressBarControl> {\npublic:\n\tCProgressBarControl_IOleInPlaceObject(CProgressBarControl *pParent) :\n\t\tIOleInPlaceObjectImpl<CProgressBarControl>(pParent) {}\n\n\tSTDMETHODIMP SetObjectRects(LPCRECT lprcPosRect, LPCRECT lprcClipRect);\n};\n\nclass DECLSPEC_NOVTABLE CProgressBarControl_IOleInPlaceActiveObject :\n\tpublic IOleInPlaceActiveObjectImpl<CProgressBarControl> {\npublic:\n\tCProgressBarControl_IOleInPlaceActiveObject(CProgressBarControl *pParent) :\n\t\tIOleInPlaceActiveObjectImpl<CProgressBarControl>(pParent) {}\n\n\t// IOleInPlaceActiveObject\n\tSTDMETHODIMP ResizeBorder(LPCRECT prcBorder, IOleInPlaceUIWindow *pUIWindow, BOOL fFrameWindow);\n};\n\nclass DECLSPEC_NOVTABLE CProgressBarControl_IQuickActivateImpl :\n\tpublic IQuickActivateImpl<CProgressBarControl> {\npublic:\n\tCProgressBarControl_IQuickActivateImpl(CProgressBarControl *pParent) :\n\t\tIQuickActivateImpl<CProgressBarControl>(pParent) {}\n};\n\nclass DECLSPEC_NOVTABLE CProgressBarControl :\n\tpublic IDispatchImpl<IProgressBarControl, &LIBID_LegacyUpdateLib> {\npublic:\n\tCProgressBarControl() :\n\t\tm_IOleObject(this),\n\t\tm_IViewObjectEx(this),\n\t\tm_IOleInPlaceObject(this),\n\t\tm_IOleInPlaceActiveObject(this),\n\t\tm_IQuickActivateImpl(this),\n\t\tm_refCount(1),\n\t\tm_hwnd(NULL),\n\t\tm_innerHwnd(NULL),\n\t\tm_width(0),\n\t\tm_height(0),\n\t\tm_clientSite(NULL),\n\t\tm_adviseSink(NULL) {\n\t}\n\n\tvirtual ~CProgressBarControl();\n\n\tstatic STDMETHODIMP Create(IUnknown *pUnkOuter, REFIID riid, void **ppv);\n\tstatic STDMETHODIMP UpdateRegistry(BOOL bRegister);\n\npublic:\n\tCProgressBarControl_IOleObject m_IOleObject;\n\tCProgressBarControl_IViewObjectEx m_IViewObjectEx;\n\tCProgressBarControl_IOleInPlaceObject m_IOleInPlaceObject;\n\tCProgressBarControl_IOleInPlaceActiveObject m_IOleInPlaceActiveObject;\n\tCProgressBarControl_IQuickActivateImpl m_IQuickActivateImpl;\n\nprivate:\n\tLONG m_refCount;\n\npublic:\n\tHWND m_hwnd;\n\tHWND m_innerHwnd;\n\tLONG m_width;\n\tLONG m_height;\n\tIOleClientSite *m_clientSite;\n\tIAdviseSink *m_adviseSink;\n\n\t// IUnknown\n\tSTDMETHODIMP QueryInterface(REFIID riid, void **ppvObject);\n\tSTDMETHODIMP_(ULONG) AddRef();\n\tSTDMETHODIMP_(ULONG) Release();\n\n\t// IProgressBarControl\n\tSTDMETHODIMP get_Value(SHORT *pValue);\n\tSTDMETHODIMP put_Value(SHORT value);\n\n\t// Helpers\n\tSTDMETHODIMP CreateControlWindow(HWND hParent, const RECT *pRect);\n\tSTDMETHODIMP DestroyControlWindow();\n\tSTDMETHODIMP 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);\n\tSTDMETHODIMP InvalidateContainer();\n};\n"
  },
  {
    "path": "LegacyUpdate/ProgressBarControl.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>ATL test page for object ProgressBarControl</title>\n\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=8\">\n\t<meta http-equiv=\"MSThemeCompatible\" content=\"yes\">\n</head>\n<body>\n\t<div style=\"border: 1px solid #555; width: 200px; height: 150px; margin: 100px; overflow: scroll;\">\n\t\t<div style=\"height: 50px;\"></div>\n\t\t<object id=\"ProgressBarControl\" classid=\"CLSID:7b875a2f-2dfb-4d38-91f5-5c0bfb74c377\" width=\"208\" height=\"14\"></object>\n\t\t<div style=\"padding-top: 200px;\"></div>\n\t\t.\n\t</div>\n\n\t<div id=\"Value\">-1</div>\n\n\t<button onclick=\"marquee()\">Marquee</button>\n\t<button onclick=\"normal()\">Normal</button>\n\t<button onclick=\"zero()\">Zero</button>\n\t<button onclick=\"stop()\">Stop</button>\n\n\t<script>\n\t\tvar timer = -1;\n\t\tvar value = -1;\n\n\t\tfunction stop() {\n\t\t\tif (timer !== -1) {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\ttimer = -1;\n\t\t\t}\n\t\t}\n\n\t\tfunction update(marquee) {\n\t\t\tif (marquee) {\n\t\t\t\tvalue = -1;\n\t\t\t} else {\n\t\t\t\tvalue = value === 100 ? 0 : value + 1;\n\t\t\t}\n\n\t\t\tProgressBarControl.Value = value;\n\t\t\tValue.innerText = value;\n\n\t\t\tif (marquee) {\n\t\t\t\tstop();\n\t\t\t} else {\n\t\t\t\ttimer = setTimeout(update, 100, false);\n\t\t\t}\n\t\t}\n\n\t\tfunction marquee() {\n\t\t\tstop();\n\t\t\tupdate(true);\n\t\t}\n\n\t\tfunction normal() {\n\t\t\tstop();\n\t\t\tupdate(false);\n\t\t}\n\n\t\tfunction zero() {\n\t\t\tstop();\n\t\t\tvalue = 100;\n\t\t\tupdate(false);\n\t\t}\n\t</script>\n</body>\n</html>\n"
  },
  {
    "path": "LegacyUpdate/Utils.cpp",
    "content": "#include \"Utils.h\"\n#include <shlwapi.h>\n#include <winreg.h>\n#include \"Exec.h\"\n#include \"LegacyUpdate.h\"\n#include \"ViewLog.h\"\n\n#ifndef SHUTDOWN_RESTART\n#define SHUTDOWN_RESTART 0x00000004\n#endif\n\n#ifndef SHUTDOWN_INSTALL_UPDATES\n#define SHUTDOWN_INSTALL_UPDATES 0x00000040\n#endif\n\ntypedef DWORD (WINAPI *_InitiateShutdownW)(LPWSTR lpMachineName, LPWSTR lpMessage, DWORD dwGracePeriod, DWORD dwShutdownFlags, DWORD dwReason);\n\nHRESULT StartLauncher(LPCWSTR params, BOOL wait) {\n\tLPWSTR path = NULL;\n\tHRESULT hr = GetInstallPath(&path);\n\tCHECK_HR_OR_RETURN(L\"GetInstallPath\");\n\n\tPathAppend(path, L\"LegacyUpdate.exe\");\n\n\tDWORD code = 0;\n\thr = Exec(NULL, path, params, NULL, SW_SHOWDEFAULT, wait, &code);\n\tCHECK_HR_OR_GOTO_END(L\"Exec\");\n\thr = HRESULT_FROM_WIN32(code);\n\nend:\n\tLocalFree(path);\n\treturn hr;\n}\n\nHRESULT Reboot(void) {\n\tHRESULT hr = E_FAIL;\n\n\tHANDLE token = NULL;\n\tTOKEN_PRIVILEGES privileges;\n\tLUID shutdownLuid;\n\t_InitiateShutdownW $InitiateShutdownW = (_InitiateShutdownW)GetProcAddress(GetModuleHandle(L\"advapi32.dll\"), \"InitiateShutdownW\");\n\n\t// Make sure we have permission to shut down\n\tif (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &token)) {\n\t\thr = HRESULT_FROM_WIN32(GetLastError());\n\t\tCHECK_HR_OR_GOTO_END(L\"OpenProcessToken\");\n\t}\n\n\tif (!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &shutdownLuid)) {\n\t\thr = HRESULT_FROM_WIN32(GetLastError());\n\t\tCHECK_HR_OR_GOTO_END(L\"LookupPrivilegeValue\");\n\t}\n\n\t// Ask the system nicely to give us shutdown privilege\n\tprivileges.PrivilegeCount = 1;\n\tprivileges.Privileges[0].Luid = shutdownLuid;\n\tprivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;\n\n\tif (!AdjustTokenPrivileges(token, FALSE, &privileges, 0, NULL, NULL)) {\n\t\thr = HRESULT_FROM_WIN32(GetLastError());\n\t\tCHECK_HR_OR_GOTO_END(L\"AdjustTokenPrivileges\");\n\t}\n\n\t// Reboot with reason \"Operating System: Security fix (Unplanned)\", ensuring to install updates.\n\t// Try InitiateShutdown first (Vista+)\n\tif ($InitiateShutdownW) {\n\t\thr = HRESULT_FROM_WIN32($InitiateShutdownW(NULL, NULL, 0, SHUTDOWN_RESTART | SHUTDOWN_INSTALL_UPDATES, SHTDN_REASON_MAJOR_OPERATINGSYSTEM | SHTDN_REASON_MINOR_SECURITYFIX));\n\t}\n\n\t// Try InitiateSystemShutdownEx (2k/XP)\n\tif (!SUCCEEDED(hr)) {\n\t\tTRACE(L\"InitiateShutdown failed: %08x\", hr);\n\n\t\tif (InitiateSystemShutdownEx(NULL, NULL, 0, FALSE, TRUE, SHTDN_REASON_MAJOR_OPERATINGSYSTEM | SHTDN_REASON_MINOR_SECURITYFIX) == 0) {\n\t\t\thr = HRESULT_FROM_WIN32(GetLastError());\n\t\t\tCHECK_HR_OR_GOTO_END(L\"InitiateSystemShutdownEx\");\n\t\t}\n\t}\n\n\t// Last-ditch attempt ExitWindowsEx (only guaranteed to work for the current logged in user)\n\tif (!SUCCEEDED(hr) && !ExitWindowsEx(EWX_REBOOT | EWX_FORCEIFHUNG, SHTDN_REASON_MAJOR_OPERATINGSYSTEM | SHTDN_REASON_MINOR_SECURITYFIX)) {\n\t\thr = HRESULT_FROM_WIN32(GetLastError());\n\t\tCHECK_HR_OR_GOTO_END(L\"ExitWindowsEx\");\n\t}\n\nend:\n\tif (token) {\n\t\tCloseHandle(token);\n\t}\n\n\treturn hr;\n}\n\nvoid operator delete(void *ptr) {\n\tfree(ptr);\n}\n"
  },
  {
    "path": "LegacyUpdate/Utils.h",
    "content": "#pragma once\n\nHRESULT StartLauncher(LPCWSTR params, BOOL wait);\nHRESULT Reboot();\n"
  },
  {
    "path": "LegacyUpdate/dlldatax.c",
    "content": "// wrapper for dlldata.c\n\n#include <windows.h>\n#include <ole2.h>\n\n#define REGISTER_PROXY_DLL\n#define USE_STUBLESS_PROXY\n#define PROXY_DELEGATION\n#define ENTRY_PREFIX Prx\n\n#include <rpcproxy.h>\n\n#include \"LegacyUpdate_i.h\"\n#include \"LegacyUpdate_dlldata.c\"\n#include \"LegacyUpdate_p.c\"\n"
  },
  {
    "path": "LegacyUpdate/dlldatax.h",
    "content": "#pragma once\n\nEXTERN_C BOOL WINAPI PrxDllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved);\nEXTERN_C STDAPI PrxDllCanUnloadNow(void);\nEXTERN_C STDAPI PrxDllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv);\nEXTERN_C STDAPI PrxDllRegisterServer(void);\nEXTERN_C STDAPI PrxDllUnregisterServer(void);\n"
  },
  {
    "path": "LegacyUpdate/dllmain.cpp",
    "content": "// dllmain.cpp : Implementation of DLL Exports.\n\n#include \"LegacyUpdate_i.h\"\n#include \"dllmain.h\"\n#include \"dlldatax.h\"\n#include \"ClassFactory.h\"\n#include \"ElevationHelper.h\"\n#include \"ElevationHelper.h\"\n#include \"LegacyUpdate.h\"\n#include \"LegacyUpdateCtrl.h\"\n#include \"ProgressBarControl.h\"\n#include \"Registry.h\"\n#include \"VersionInfo.h\"\n#include <strsafe.h>\n#include <shlwapi.h>\n\nstatic LPCWSTR APPID_LegacyUpdateLib = L\"{D0A82CD0-B6F0-4101-83ED-DA47D0D04830}\";\n\nHINSTANCE g_hInstance = NULL;\nLONG g_serverLocks = 0;\n\ntypedef struct ClassEntry {\n\tconst GUID *clsid;\n\tSTDMETHODIMP (*createFunc)(IUnknown *pUnkOuter, REFIID riid, void **ppv);\n\tSTDMETHODIMP (*updateRegistryFunc)(BOOL bRegister);\n} ClassEntry;\n\nstatic ClassEntry g_classEntries[] = {\n\t{&CLSID_LegacyUpdateCtrl,   &CLegacyUpdateCtrl::Create,   &CLegacyUpdateCtrl::UpdateRegistry},\n\t{&CLSID_ElevationHelper,    &CElevationHelper::Create,    &CElevationHelper::UpdateRegistry},\n\t{&CLSID_ProgressBarControl, &CProgressBarControl::Create, &CProgressBarControl::UpdateRegistry}\n};\n\n// DLL Entry Point\nBOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) {\n\tif (!PrxDllMain(hInstance, dwReason, lpReserved)) {\n\t\treturn FALSE;\n\t}\n\n\tswitch (dwReason) {\n\tcase DLL_PROCESS_ATTACH:\n\t\tg_hInstance = hInstance;\n\t\tDisableThreadLibraryCalls(hInstance);\n\t\tOpenLog();\n\t\tbreak;\n\n\tcase DLL_PROCESS_DETACH:\n\t\tg_hInstance = NULL;\n\t\tCloseLog();\n\t\tbreak;\n\t}\n\n\treturn TRUE;\n}\n\n// Used to determine whether the DLL can be unloaded by OLE\nSTDAPI DllCanUnloadNow(void) {\n\tHRESULT hr = PrxDllCanUnloadNow();\n\tif (hr != S_OK) {\n\t\treturn hr;\n\t}\n\n\treturn g_serverLocks == 0 ? S_OK : S_FALSE;\n}\n\n// Returns a class factory to create an object of the requested type\nSTDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) {\n\tif (PrxDllGetClassObject(rclsid, riid, ppv) == S_OK) {\n\t\treturn S_OK;\n\t}\n\n\tif (ppv == NULL) {\n\t\treturn E_POINTER;\n\t}\n\n\t*ppv = NULL;\n\n\tfor (DWORD i = 0; i < ARRAYSIZE(g_classEntries); i++) {\n\t\tif (IsEqualCLSID(rclsid, *g_classEntries[i].clsid)) {\n\t\t\tCClassFactory *pFactory;\n\t\t\tHRESULT hr = CClassFactory::Create(NULL, riid, (void **)&pFactory);\n\t\t\tif (pFactory == NULL) {\n\t\t\t\treturn E_OUTOFMEMORY;\n\t\t\t}\n\n\t\t\tpFactory->createFunc = g_classEntries[i].createFunc;\n\t\t\tpFactory->clsid = g_classEntries[i].clsid;\n\n\t\t\t*ppv = pFactory;\n\t\t\treturn hr;\n\t\t}\n\t}\n\n\treturn CLASS_E_CLASSNOTAVAILABLE;\n}\n\n// Shared register/unregister method\nSTDAPI UpdateRegistration(BOOL state) {\n\tHRESULT hr = OleInitialize(NULL);\n\tBOOL oleInitialized = SUCCEEDED(hr);\n\tif (hr != RPC_E_CHANGED_MODE && hr != CO_E_ALREADYINITIALIZED) {\n\t\tCHECK_HR_OR_RETURN(L\"OleInitialize\");\n\t}\n\n\tLPWSTR installPath = NULL, filename = NULL, libid = NULL;\n\thr = GetInstallPath(&installPath);\n\tCHECK_HR_OR_GOTO_END(L\"GetInstallPath\");\n\n\thr = GetOwnFileName(&filename);\n\tCHECK_HR_OR_GOTO_END(L\"GetOwnFileName\");\n\n\t// Register type library\n\tif (state) {\n\t\tCComPtr<ITypeLib> typeLib;\n\t\thr = LoadTypeLib(filename, &typeLib);\n\t\tCHECK_HR_OR_GOTO_END(L\"LoadTypeLib\");\n\n\t\thr = RegisterTypeLib(typeLib, filename, NULL);\n\t\tCHECK_HR_OR_GOTO_END(L\"RegisterTypeLib\");\n\t} else {\n\t\tCComPtr<ITypeLib> typeLib;\n\t\thr = LoadRegTypeLib(LIBID_LegacyUpdateLib, 1, 0, LOCALE_NEUTRAL, &typeLib);\n\t\tif (hr != TYPE_E_LIBNOTREGISTERED) {\n\t\t\tCHECK_HR_OR_GOTO_END(L\"LoadRegTypeLib\");\n\n\t\t\tTLIBATTR *attrs;\n\t\t\thr = typeLib->GetLibAttr(&attrs);\n\t\t\tCHECK_HR_OR_GOTO_END(L\"GetLibAttr\");\n\n\t\t\thr = UnRegisterTypeLib(attrs->guid, attrs->wMajorVerNum, attrs->wMinorVerNum, attrs->lcid, attrs->syskind);\n\t\t\ttypeLib->ReleaseTLibAttr(attrs);\n\t\t\tCHECK_HR_OR_GOTO_END(L\"UnRegisterTypeLib\");\n\t\t}\n\t}\n\n\t// Set vars used for expansions\n\thr = StringFromCLSID(LIBID_LegacyUpdateLib, &libid);\n\tCHECK_HR_OR_GOTO_END(L\"StringFromCLSID\");\n\n\tSetEnvironmentVariable(L\"APPID\", APPID_LegacyUpdateLib);\n\tSetEnvironmentVariable(L\"LIBID\", libid);\n\tSetEnvironmentVariable(L\"MODULE\", filename);\n\tSetEnvironmentVariable(L\"INSTALLPATH\", installPath);\n\n\tCoTaskMemFree(libid);\n\n\t// Main\n\tif (state) {\n\t\tRegistryEntry entries[] = {\n\t\t\t{HKEY_CLASSES_ROOT, L\"AppID\\\\%APPID%\", NULL, REG_SZ, (LPVOID)L\"Legacy Update Control\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"AppID\\\\%APPID%\", L\"DllSurrogate\", REG_SZ, (LPVOID)L\"\"},\n\t\t\t{HKEY_CLASSES_ROOT, L\"AppID\\\\LegacyUpdate.dll\", L\"AppID\", REG_SZ, (LPVOID)L\"%APPID%\"},\n\t\t\t{}\n\t\t};\n\t\thr = SetRegistryEntries(entries);\n\t} else {\n\t\tRegistryEntry entries[] = {\n\t\t\t{HKEY_CLASSES_ROOT, L\"AppID\\\\%APPID%\", NULL, 0, DELETE_KEY},\n\t\t\t{HKEY_CLASSES_ROOT, L\"AppID\\\\LegacyUpdate.dll\", NULL, 0, DELETE_KEY},\n\t\t\t{}\n\t\t};\n\t\thr = SetRegistryEntries(entries);\n\t}\n\n\tCHECK_HR_OR_GOTO_END(L\"SetRegistryEntries main\");\n\n\t// Register classes\n\tfor (DWORD i = 0; i < ARRAYSIZE(g_classEntries); i++) {\n\t\tClassEntry entry = g_classEntries[i];\n\t\tLPWSTR clsidStr;\n\t\thr = StringFromCLSID(*entry.clsid, &clsidStr);\n\t\tCHECK_HR_OR_GOTO_END(L\"StringFromCLSID\");\n\n\t\tSetEnvironmentVariable(L\"CLSID\", clsidStr);\n\t\tCoTaskMemFree(clsidStr);\n\n\t\thr = entry.updateRegistryFunc(state);\n\t\tCHECK_HR_OR_GOTO_END(L\"SetRegistryEntries class\");\n\t}\n\n\t// Register proxy\n\thr = state ? PrxDllRegisterServer() : PrxDllUnregisterServer();\n\tCHECK_HR_OR_GOTO_END(L\"Proxy registration\");\n\nend:\n\t// Clean up environment\n\tstatic LPCWSTR envVars[] = {L\"APPID\", L\"LIBID\", L\"MODULE\", L\"INSTALLPATH\", L\"CLSID\"};\n\tfor (DWORD i = 0; i < ARRAYSIZE(envVars); i++) {\n\t\tSetEnvironmentVariable(envVars[i], NULL);\n\t}\n\n\tif (installPath) {\n\t\tLocalFree(installPath);\n\t}\n\tif (filename) {\n\t\tLocalFree(filename);\n\t}\n\n\tif (oleInitialized) {\n\t\tOleUninitialize();\n\t}\n\treturn hr;\n}\n\n// DllRegisterServer - Adds entries to the system registry\nSTDAPI DllRegisterServer(void) {\n\tLOG(L\"DllRegisterServer\");\n\treturn UpdateRegistration(TRUE);\n}\n\n// DllUnregisterServer - Removes entries from the system registry\nSTDAPI DllUnregisterServer(void) {\n\tLOG(L\"DllUnregisterServer\");\n\treturn UpdateRegistration(FALSE);\n}\n\n// DllInstall - Adds/Removes entries to the system registry per machine only.\nSTDAPI DllInstall(BOOL bInstall, LPCWSTR pszCmdLine) {\n\tLOG(L\"DllInstall(%d)\", bInstall);\n\treturn HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED);\n}\n"
  },
  {
    "path": "LegacyUpdate/dllmain.h",
    "content": "#pragma once\n\n// dllmain.h : Declaration of module class.\n\nextern HINSTANCE g_hInstance;\nextern LONG g_serverLocks;\n"
  },
  {
    "path": "LegacyUpdate/resource.h",
    "content": "#define IDS_LEGACYUPDATE                1\n\n#define ID_TYPELIB                      1\n"
  },
  {
    "path": "LegacyUpdate/stdafx.h",
    "content": "#pragma once\n\n// stdafx.h : include file for standard system include files,\n// or project specific include files that are used frequently,\n// but are changed infrequently\n\n#define STRICT\n\n#define WINVER       _WIN32_WINNT_WIN2K\n#define _WIN32_WINNT _WIN32_WINNT_WIN2K\n\n// Use msvcrt stdio functions\n#define __USE_MINGW_ANSI_STDIO 0\n\n#include \"resource.h\"\n#include \"Trace.h\"\n#include <windows.h>\n"
  },
  {
    "path": "LegacyUpdate/wuapi.idl",
    "content": "import \"oaidl.idl\";\n\n// Just types we need from wuapi.idl\n\n[\n\thelpstring(\"IUpdateInstaller Interface\"),\n\tobject,\n\toleautomation,\n\tdual,\n\tnonextensible,\n\tuuid(7b929c68-ccdc-4226-96b1-8724600b54c2),\n\tpointer_default(unique),\n]\ninterface IUpdateInstaller : IDispatch {\n\t[id(0x60020003), propget, restricted]\n\tHRESULT ParentHwnd([out, retval] HWND *retval);\n\n\t[id(0x60020003), propput, restricted]\n\tHRESULT ParentHwnd([in, unique] HWND value);\n};\n\n[\n\tuuid(B596CC9F-56E5-419E-A622-E01BB457431E),\n\tversion(2.0),\n\thelpstring(\"WUAPI 2.0 Type Library\")\n]\nlibrary WUApiLib\n{\n\timportlib(\"stdole2.tlb\");\n\n\t[\n\t\thelpstring(\"UpdateInstaller Class\"),\n\t\tuuid(D2E0FE7F-D23E-48E1-93C0-6FA8CC346474)\n\t]\n\tcoclass UpdateInstaller\n\t{\n\t\t[default] interface IUpdateInstaller2;\n\t};\n};\n"
  },
  {
    "path": "LegacyUpdate/wuerror.mc",
    "content": ";// Reverse engineered from wuerror.h from Windows SDK 10.0.26100.0\n\n;/***************************************************************************\n;*                                                                          *\n;*   wuerror.mc --  error code definitions for Windows Update.              *\n;*                                                                          *\n;*   Copyright (c) Microsoft Corporation. All rights reserved.              *\n;*                                                                          *\n;***************************************************************************/\n;#ifndef _WUERROR_\n;#define _WUERROR_\n\nMessageIdTypedef = DWORD\nOutputBase    = 16\n\nFacilityNames = (\n\tWindowsUpdate = 0x024\n)\n\nSeverityNames = (\n\tSuccess    = 0x0\n\tError      = 0x2\n)\n\nLanguageNames = (\n\tEnglish    = 0x0409:MSG0409\n)\n\n;///////////////////////////////////////////////////////////////////////////////\n;// Windows Update Success Codes\n;///////////////////////////////////////////////////////////////////////////////\nMessageId    = 0x0001\nFacility     = WindowsUpdate\nSeverity     = Success\nSymbolicName = WU_S_SERVICE_STOP\nLanguage     = English\nWindows Update Agent was stopped successfully.\n.\n\nMessageId    = 0x0002\nFacility     = WindowsUpdate\nSeverity     = Success\nSymbolicName = WU_S_SELFUPDATE\nLanguage     = English\nWindows Update Agent updated itself.\n.\n\nMessageId    = 0x0003\nFacility     = WindowsUpdate\nSeverity     = Success\nSymbolicName = WU_S_UPDATE_ERROR\nLanguage     = English\nOperation completed successfully but there were errors applying the updates.\n.\n\nMessageId    = 0x0004\nFacility     = WindowsUpdate\nSeverity     = Success\nSymbolicName = WU_S_MARKED_FOR_DISCONNECT\nLanguage     = English\nA callback was marked to be disconnected later because the request to disconnect the operation came while a callback was executing.\n.\n\nMessageId    = 0x0005\nFacility     = WindowsUpdate\nSeverity     = Success\nSymbolicName = WU_S_REBOOT_REQUIRED\nLanguage     = English\nThe system must be restarted to complete installation of the update.\n.\n\nMessageId    = 0x0006\nFacility     = WindowsUpdate\nSeverity     = Success\nSymbolicName = WU_S_ALREADY_INSTALLED\nLanguage     = English\nThe update to be installed is already installed on the system.\n.\n\nMessageId    = 0x0007\nFacility     = WindowsUpdate\nSeverity     = Success\nSymbolicName = WU_S_ALREADY_UNINSTALLED\nLanguage     = English\nThe update to be removed is not installed on the system.\n.\n\nMessageId    = 0x0008\nFacility     = WindowsUpdate\nSeverity     = Success\nSymbolicName = WU_S_ALREADY_DOWNLOADED\nLanguage     = English\nThe update to be downloaded has already been downloaded.\n.\n\nMessageId    = 0x0009\nFacility     = WindowsUpdate\nSeverity     = Success\nSymbolicName = WU_S_SOME_UPDATES_SKIPPED_ON_BATTERY\nLanguage     = English\nThe operation completed successfully, but some updates were skipped because the system is running on batteries.\n.\n\nMessageId    = 0x000A\nFacility     = WindowsUpdate\nSeverity     = Success\nSymbolicName = WU_S_ALREADY_REVERTED\nLanguage     = English\nThe update to be reverted is not present on the system.\n.\n\nMessageId    = 0x0010\nFacility     = WindowsUpdate\nSeverity     = Success\nSymbolicName = WU_S_SEARCH_CRITERIA_NOT_SUPPORTED\nLanguage     = English\nThe operation is skipped because the update service does not support the requested search criteria.\n.\n\nMessageId    = 0x2015\nFacility     = WindowsUpdate\nSeverity     = Success\nSymbolicName = WU_S_UH_INSTALLSTILLPENDING\nLanguage     = English\nThe installation operation for the update is still in progress.\n.\n\nMessageId    = 0x2016\nFacility     = WindowsUpdate\nSeverity     = Success\nSymbolicName = WU_S_UH_DOWNLOAD_SIZE_CALCULATED\nLanguage     = English\nThe actual download size has been calculated by the handler.\n.\n\nMessageId    = 0x5001\nFacility     = WindowsUpdate\nSeverity     = Success\nSymbolicName = WU_S_SIH_NOOP\nLanguage     = English\nNo operation was required by the server-initiated healing server response.\n.\n\nMessageId    = 0x6001\nFacility     = WindowsUpdate\nSeverity     = Success\nSymbolicName = WU_S_DM_ALREADYDOWNLOADING\nLanguage     = English\nThe update to be downloaded is already being downloaded.\n.\n\nMessageId    = 0x7101\nFacility     = WindowsUpdate\nSeverity     = Success\nSymbolicName = WU_S_METADATA_SKIPPED_BY_ENFORCEMENTMODE\nLanguage     = English\nMetadata verification was skipped by enforcement mode.\n.\n\nMessageId    = 0x7102\nFacility     = WindowsUpdate\nSeverity     = Success\nSymbolicName = WU_S_METADATA_IGNORED_SIGNATURE_VERIFICATION\nLanguage     = English\nA server configuration refresh resulted in metadata signature verification to be ignored.\n.\n\nMessageId    = 0x8001\nFacility     = WindowsUpdate\nSeverity     = Success\nSymbolicName = WU_S_SEARCH_LOAD_SHEDDING\nLanguage     = English\nSearch operation completed successfully but one or more services were shedding load.\n.\n\nMessageId    = 0x8002\nFacility     = WindowsUpdate\nSeverity     = Success\nSymbolicName = WU_S_AAD_DEVICE_TICKET_NOT_NEEDED\nLanguage     = English\nThere was no need to retrieve an AAD device ticket.\n.\n\n;///////////////////////////////////////////////////////////////////////////////\n;// Windows Update Error Codes\n;///////////////////////////////////////////////////////////////////////////////\nMessageId    = 0x0001\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_NO_SERVICE\nLanguage     = English\nWindows Update Agent was unable to provide the service.\n.\n\nMessageId    = 0x0002\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_MAX_CAPACITY_REACHED\nLanguage     = English\nThe maximum capacity of the service was exceeded.\n.\n\nMessageId    = 0x0003\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UNKNOWN_ID\nLanguage     = English\nAn ID cannot be found.\n.\n\nMessageId    = 0x0004\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_NOT_INITIALIZED\nLanguage     = English\nThe object could not be initialized.\n.\n\nMessageId    = 0x0005\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_RANGEOVERLAP\nLanguage     = English\nThe update handler requested a byte range overlapping a previously requested range.\n.\n\nMessageId    = 0x0006\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_TOOMANYRANGES\nLanguage     = English\nThe requested number of byte ranges exceeds the maximum number (2^31 - 1).\n.\n\nMessageId    = 0x0007\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INVALIDINDEX\nLanguage     = English\nThe index to a collection was invalid.\n.\n\nMessageId    = 0x0008\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_ITEMNOTFOUND\nLanguage     = English\nThe key for the item queried could not be found.\n.\n\nMessageId    = 0x0009\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_OPERATIONINPROGRESS\nLanguage     = English\nAnother conflicting operation was in progress. Some operations such as installation cannot be performed twice simultaneously.\n.\n\nMessageId    = 0x000A\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_COULDNOTCANCEL\nLanguage     = English\nCancellation of the operation was not allowed.\n.\n\nMessageId    = 0x000B\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_CALL_CANCELLED\nLanguage     = English\nOperation was cancelled.\n.\n\nMessageId    = 0x000C\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_NOOP\nLanguage     = English\nNo operation was required.\n.\n\nMessageId    = 0x000D\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_XML_MISSINGDATA\nLanguage     = English\nWindows Update Agent could not find required information in the update's XML data.\n.\n\nMessageId    = 0x000E\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_XML_INVALID\nLanguage     = English\nWindows Update Agent found invalid information in the update's XML data.\n.\n\nMessageId    = 0x000F\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_CYCLE_DETECTED\nLanguage     = English\nCircular update relationships were detected in the metadata.\n.\n\nMessageId    = 0x0010\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_TOO_DEEP_RELATION\nLanguage     = English\nUpdate relationships too deep to evaluate were evaluated.\n.\n\nMessageId    = 0x0011\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INVALID_RELATIONSHIP\nLanguage     = English\nAn invalid update relationship was detected.\n.\n\nMessageId    = 0x0012\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_REG_VALUE_INVALID\nLanguage     = English\nAn invalid registry value was read.\n.\n\nMessageId    = 0x0013\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DUPLICATE_ITEM\nLanguage     = English\nOperation tried to add a duplicate item to a list.\n.\n\nMessageId    = 0x0014\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INVALID_INSTALL_REQUESTED\nLanguage     = English\nUpdates requested for install are not installable by caller.\n.\n\nMessageId    = 0x0016\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INSTALL_NOT_ALLOWED\nLanguage     = English\nOperation tried to install while another installation was in progress or the system was pending a mandatory restart.\n.\n\nMessageId    = 0x0017\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_NOT_APPLICABLE\nLanguage     = English\nOperation was not performed because there are no applicable updates.\n.\n\nMessageId    = 0x0018\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_NO_USERTOKEN\nLanguage     = English\nOperation failed because a required user token is missing.\n.\n\nMessageId    = 0x0019\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_EXCLUSIVE_INSTALL_CONFLICT\nLanguage     = English\nAn exclusive update cannot be installed with other updates at the same time.\n.\n\nMessageId    = 0x001A\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_POLICY_NOT_SET\nLanguage     = English\nA policy value was not set.\n.\n\nMessageId    = 0x001B\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SELFUPDATE_IN_PROGRESS\nLanguage     = English\nThe operation could not be performed because the Windows Update Agent is self-updating.\n.\n\nMessageId    = 0x001D\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INVALID_UPDATE\nLanguage     = English\nAn update contains invalid metadata.\n.\n\nMessageId    = 0x001E\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SERVICE_STOP\nLanguage     = English\nOperation did not complete because the service or system was being shut down.\n.\n\nMessageId    = 0x001F\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_NO_CONNECTION\nLanguage     = English\nOperation did not complete because the network connection was unavailable.\n.\n\nMessageId    = 0x0020\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_NO_INTERACTIVE_USER\nLanguage     = English\nOperation did not complete because there is no logged-on interactive user.\n.\n\nMessageId    = 0x0021\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_TIME_OUT\nLanguage     = English\nOperation did not complete because it timed out.\n.\n\nMessageId    = 0x0022\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_ALL_UPDATES_FAILED\nLanguage     = English\nOperation failed for all the updates.\n.\n\nMessageId    = 0x0023\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_EULAS_DECLINED\nLanguage     = English\nThe license terms for all updates were declined.\n.\n\nMessageId    = 0x0024\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_NO_UPDATE\nLanguage     = English\nThere are no updates.\n.\n\nMessageId    = 0x0025\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_USER_ACCESS_DISABLED\nLanguage     = English\nGroup Policy settings prevented access to Windows Update.\n.\n\nMessageId    = 0x0026\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INVALID_UPDATE_TYPE\nLanguage     = English\nThe type of update is invalid.\n.\n\nMessageId    = 0x0027\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_URL_TOO_LONG\nLanguage     = English\nThe URL exceeded the maximum length.\n.\n\nMessageId    = 0x0028\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UNINSTALL_NOT_ALLOWED\nLanguage     = English\nThe update could not be uninstalled because the request did not originate from a WSUS server.\n.\n\nMessageId    = 0x0029\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INVALID_PRODUCT_LICENSE\nLanguage     = English\nSearch may have missed some updates before there is an unlicensed application on the system.\n.\n\nMessageId    = 0x002A\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_MISSING_HANDLER\nLanguage     = English\nA component required to detect applicable updates was missing.\n.\n\nMessageId    = 0x002B\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_LEGACYSERVER\nLanguage     = English\nAn operation did not complete because it requires a newer version of server.\n.\n\nMessageId    = 0x002C\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_BIN_SOURCE_ABSENT\nLanguage     = English\nA delta-compressed update could not be installed because it required the source.\n.\n\nMessageId    = 0x002D\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SOURCE_ABSENT\nLanguage     = English\nA full-file update could not be installed because it required the source.\n.\n\nMessageId    = 0x002E\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_WU_DISABLED\nLanguage     = English\nAccess to an unmanaged server is not allowed.\n.\n\nMessageId    = 0x002F\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_CALL_CANCELLED_BY_POLICY\nLanguage     = English\nOperation did not complete because the DisableWindowsUpdateAccess policy was set.\n.\n\nMessageId    = 0x0030\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INVALID_PROXY_SERVER\nLanguage     = English\nThe format of the proxy list was invalid.\n.\n\nMessageId    = 0x0031\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INVALID_FILE\nLanguage     = English\nThe file is in the wrong format.\n.\n\nMessageId    = 0x0032\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INVALID_CRITERIA\nLanguage     = English\nThe search criteria string was invalid.\n.\n\nMessageId    = 0x0033\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_EULA_UNAVAILABLE\nLanguage     = English\nLicense terms could not be downloaded.\n.\n\nMessageId    = 0x0034\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DOWNLOAD_FAILED\nLanguage     = English\nUpdate failed to download.\n.\n\nMessageId    = 0x0035\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UPDATE_NOT_PROCESSED\nLanguage     = English\nThe update was not processed.\n.\n\nMessageId    = 0x0036\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INVALID_OPERATION\nLanguage     = English\nThe object's current state did not allow the operation.\n.\n\nMessageId    = 0x0037\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_NOT_SUPPORTED\nLanguage     = English\nThe functionality for the operation is not supported.\n.\n\nMessageId    = 0x0038\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_WINHTTP_INVALID_FILE\nLanguage     = English\nThe downloaded file has an unexpected content type.\n.\n\nMessageId    = 0x0039\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_TOO_MANY_RESYNC\nLanguage     = English\nAgent is asked by server to resync too many times.\n.\n\nMessageId    = 0x0040\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_NO_SERVER_CORE_SUPPORT\nLanguage     = English\nWUA API method does not run on Server Core installation.\n.\n\nMessageId    = 0x0041\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SYSPREP_IN_PROGRESS\nLanguage     = English\nService is not available while sysprep is running.\n.\n\nMessageId    = 0x0042\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UNKNOWN_SERVICE\nLanguage     = English\nThe update service is no longer registered with AU.\n.\n\nMessageId    = 0x0043\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_NO_UI_SUPPORT\nLanguage     = English\nThere is no support for WUA UI.\n.\n\nMessageId    = 0x0044\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PER_MACHINE_UPDATE_ACCESS_DENIED\nLanguage     = English\nOnly administrators can perform this operation on per-machine updates.\n.\n\nMessageId    = 0x0045\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UNSUPPORTED_SEARCHSCOPE\nLanguage     = English\nA search was attempted with a scope that is not currently supported for this type of search.\n.\n\nMessageId    = 0x0046\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_BAD_FILE_URL\nLanguage     = English\nThe URL does not point to a file.\n.\n\nMessageId    = 0x0047\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_REVERT_NOT_ALLOWED\nLanguage     = English\nThe update could not be reverted.\n.\n\nMessageId    = 0x0048\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INVALID_NOTIFICATION_INFO\nLanguage     = English\nThe featured update notification info returned by the server is invalid.\n.\n\nMessageId    = 0x0049\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_OUTOFRANGE\nLanguage     = English\nThe data is out of range.\n.\n\nMessageId    = 0x004A\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SETUP_IN_PROGRESS\nLanguage     = English\nWindows Update agent operations are not available while OS setup is running.\n.\n\nMessageId    = 0x004B\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_ORPHANED_DOWNLOAD_JOB\nLanguage     = English\nAn orphaned downloadjob was found with no active callers.\n.\n\nMessageId    = 0x004C\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_LOW_BATTERY\nLanguage     = English\nAn update could not be installed because the system battery power level is too low.\n.\n\nMessageId    = 0x004D\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INFRASTRUCTUREFILE_INVALID_FORMAT\nLanguage     = English\nThe downloaded infrastructure file is incorrectly formatted.\n.\n\nMessageId    = 0x004E\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INFRASTRUCTUREFILE_REQUIRES_SSL\nLanguage     = English\nThe infrastructure file must be downloaded using strong SSL.\n.\n\nMessageId    = 0x004F\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_IDLESHUTDOWN_OPCOUNT_DISCOVERY\nLanguage     = English\nA discovery call contributed to a non-zero operation count at idle timer shutdown.\n.\n\nMessageId    = 0x0050\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_IDLESHUTDOWN_OPCOUNT_SEARCH\nLanguage     = English\nA search call contributed to a non-zero operation count at idle timer shutdown.\n.\n\nMessageId    = 0x0051\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_IDLESHUTDOWN_OPCOUNT_DOWNLOAD\nLanguage     = English\nA download call contributed to a non-zero operation count at idle timer shutdown.\n.\n\nMessageId    = 0x0052\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_IDLESHUTDOWN_OPCOUNT_INSTALL\nLanguage     = English\nAn install call contributed to a non-zero operation count at idle timer shutdown.\n.\n\nMessageId    = 0x0053\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_IDLESHUTDOWN_OPCOUNT_OTHER\nLanguage     = English\nAn unspecified call contributed to a non-zero operation count at idle timer shutdown.\n.\n\nMessageId    = 0x0054\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INTERACTIVE_CALL_CANCELLED\nLanguage     = English\nAn interactive user cancelled this operation, which was started from the Windows Update Agent UI.\n.\n\nMessageId    = 0x0055\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_AU_CALL_CANCELLED\nLanguage     = English\nAutomatic Updates cancelled this operation because it applies to an update that is no longer applicable to this computer.\n.\n\nMessageId    = 0x0056\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SYSTEM_UNSUPPORTED\nLanguage     = English\nThis version or edition of the operating system doesn't support the needed functionality.\n.\n\nMessageId    = 0x0057\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_NO_SUCH_HANDLER_PLUGIN\nLanguage     = English\nThe requested update download or install handler, or update applicability expression evaluator, is not provided by this Agent plugin.\n.\n\nMessageId    = 0x0058\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INVALID_SERIALIZATION_VERSION\nLanguage     = English\nThe requested serialization version is not supported.\n.\n\nMessageId    = 0x0059\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_NETWORK_COST_EXCEEDS_POLICY\nLanguage     = English\nThe current network cost does not meet the conditions set by the network cost policy.\n.\n\nMessageId    = 0x005A\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_CALL_CANCELLED_BY_HIDE\nLanguage     = English\nThe call is cancelled because it applies to an update that is hidden (no longer applicable to this computer).\n.\n\nMessageId    = 0x005B\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_CALL_CANCELLED_BY_INVALID\nLanguage     = English\nThe call is cancelled because it applies to an update that is invalid (no longer applicable to this computer).\n.\n\nMessageId    = 0x005C\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INVALID_VOLUMEID\nLanguage     = English\nThe specified volume id is invalid.\n.\n\nMessageId    = 0x005D\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UNRECOGNIZED_VOLUMEID\nLanguage     = English\nThe specified volume id is unrecognized by the system.\n.\n\nMessageId    = 0x005E\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_EXTENDEDERROR_NOTSET\nLanguage     = English\nThe installation extended error code is not specified.\n.\n\nMessageId    = 0x005F\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_EXTENDEDERROR_FAILED\nLanguage     = English\nThe installation extended error code is set to general fail.\n.\n\nMessageId    = 0x0060\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_IDLESHUTDOWN_OPCOUNT_SERVICEREGISTRATION\nLanguage     = English\nA service registration call contributed to a non-zero operation count at idle timer shutdown.\n.\n\nMessageId    = 0x0061\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_FILETRUST_SHA2SIGNATURE_MISSING\nLanguage     = English\nSignature validation of the file fails to find valid SHA2+ signature on MS signed payload.\n.\n\nMessageId    = 0x0062\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UPDATE_NOT_APPROVED\nLanguage     = English\nThe update is not in the servicing approval list.\n.\n\nMessageId    = 0x0063\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_CALL_CANCELLED_BY_INTERACTIVE_SEARCH\nLanguage     = English\nThe search call was cancelled by another interactive search against the same service.\n.\n\nMessageId    = 0x0064\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INSTALL_JOB_RESUME_NOT_ALLOWED\nLanguage     = English\nResume of install job not allowed due to another installation in progress.\n.\n\nMessageId    = 0x0065\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INSTALL_JOB_NOT_SUSPENDED\nLanguage     = English\nResume of install job not allowed because job is not suspended.\n.\n\nMessageId    = 0x0066\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INSTALL_USERCONTEXT_ACCESSDENIED\nLanguage     = English\nUser context passed to installation from caller with insufficient privileges.\n.\n\nMessageId    = 0x0067\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_STANDBY_ACTIVITY_NOT_ALLOWED\nLanguage     = English\nOperation is not allowed because the device is in DC (Direct Current) and DS (Disconnected Standby).\n.\n\nMessageId    = 0x0068\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_COULD_NOT_EVALUATE_PROPERTY\nLanguage     = English\nThe property could not be evaluated.\n.\n\nMessageId    = 0x0FFF\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UNEXPECTED\nLanguage     = English\nAn operation failed due to reasons not covered by another error code.\n.\n\n;///////////////////////////////////////////////////////////////////////////////\n;// Windows Installer minor errors\n;//\n;// The following errors are used to indicate that part of a search failed for\n;// MSI problems. Another part of the search may successfully return updates.\n;// All MSI minor codes should share the same error code range so that the caller\n;// tell that they are related to Windows Installer.\n;///////////////////////////////////////////////////////////////////////////////\nMessageId    = 0x1001\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_MSI_WRONG_VERSION\nLanguage     = English\nSearch may have missed some updates because the Windows Installer is less than version 3.1.\n.\n\nMessageId    = 0x1002\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_MSI_NOT_CONFIGURED\nLanguage     = English\nSearch may have missed some updates because the Windows Installer is not configured.\n.\n\nMessageId    = 0x1003\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_MSP_DISABLED\nLanguage     = English\nSearch may have missed some updates because policy has disabled Windows Installer patching.\n.\n\nMessageId    = 0x1004\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_MSI_WRONG_APP_CONTEXT\nLanguage     = English\nAn update could not be applied because the application is installed per-user.\n.\n\nMessageId    = 0x1005\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_MSI_NOT_PRESENT\nLanguage     = English\nSearch may have missed some updates because the Windows Installer is less than version 3.1.\n.\n\nMessageId    = 0x1FFF\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_MSP_UNEXPECTED\nLanguage     = English\nSearch may have missed some updates because there was a failure of the Windows Installer.\n.\n\n;///////////////////////////////////////////////////////////////////////////////\n;// Protocol Talker errors\n;//\n;// The following map to SOAPCLIENT_ERRORs from atlsoap.h. These errors\n;// are obtained from calling GetClientError() on the CClientWebService\n;// object.\n;///////////////////////////////////////////////////////////////////////////////\nMessageId    = 0x4000\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_SOAPCLIENT_BASE\nLanguage     = English\nWU_E_PT_SOAPCLIENT_* error codes map to the SOAPCLIENT_ERROR enum of the ATL Server Library.\n.\n\nMessageId    = 0x4001\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_SOAPCLIENT_INITIALIZE\nLanguage     = English\nSOAPCLIENT_INITIALIZE_ERROR - initialization of the SOAP client failed, possibly because of an MSXML installation failure.\n.\n\nMessageId    = 0x4002\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_SOAPCLIENT_OUTOFMEMORY\nLanguage     = English\nSOAPCLIENT_OUTOFMEMORY - SOAP client failed because it ran out of memory.\n.\n\nMessageId    = 0x4003\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_SOAPCLIENT_GENERATE\nLanguage     = English\nSOAPCLIENT_GENERATE_ERROR - SOAP client failed to generate the request.\n.\n\nMessageId    = 0x4004\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_SOAPCLIENT_CONNECT\nLanguage     = English\nSOAPCLIENT_CONNECT_ERROR - SOAP client failed to connect to the server.\n.\n\nMessageId    = 0x4005\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_SOAPCLIENT_SEND\nLanguage     = English\nSOAPCLIENT_SEND_ERROR - SOAP client failed to send a message for reasons of WU_E_WINHTTP_* error codes.\n.\n\nMessageId    = 0x4006\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_SOAPCLIENT_SERVER\nLanguage     = English\nSOAPCLIENT_SERVER_ERROR - SOAP client failed because there was a server error.\n.\n\nMessageId    = 0x4007\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_SOAPCLIENT_SOAPFAULT\nLanguage     = English\nSOAPCLIENT_SOAPFAULT - SOAP client failed because there was a SOAP fault for reasons of WU_E_PT_SOAP_* error codes.\n.\n\nMessageId    = 0x4008\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_SOAPCLIENT_PARSEFAULT\nLanguage     = English\nSOAPCLIENT_PARSEFAULT_ERROR - SOAP client failed to parse a SOAP fault.\n.\n\nMessageId    = 0x4009\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_SOAPCLIENT_READ\nLanguage     = English\nSOAPCLIENT_READ_ERROR - SOAP client failed while reading the response from the server.\n.\n\nMessageId    = 0x400A\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_SOAPCLIENT_PARSE\nLanguage     = English\nSOAPCLIENT_PARSE_ERROR - SOAP client failed to parse the response from the server.\n.\n\n;// The following map to SOAP_ERROR_CODEs from atlsoap.h. These errors\n;// are obtained from the m_fault.m_soapErrCode member on the\n;// CClientWebService object when GetClientError() returned\n;// SOAPCLIENT_SOAPFAULT.\nMessageId    = 0x400B\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_SOAP_VERSION\nLanguage     = English\nSOAP_E_VERSION_MISMATCH - SOAP client found an unrecognizable namespace for the SOAP envelope.\n.\n\nMessageId    = 0x400C\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_SOAP_MUST_UNDERSTAND\nLanguage     = English\nSOAP_E_MUST_UNDERSTAND - SOAP client was unable to understand a header.\n.\n\nMessageId    = 0x400D\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_SOAP_CLIENT\nLanguage     = English\nSOAP_E_CLIENT - SOAP client found the message was malformed; fix before resending.\n.\n\nMessageId    = 0x400E\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_SOAP_SERVER\nLanguage     = English\nSOAP_E_SERVER - The SOAP message could not be processed due to a server error; resend later.\n.\n\nMessageId    = 0x400F\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_WMI_ERROR\nLanguage     = English\nThere was an unspecified Windows Management Instrumentation (WMI) error.\n.\n\nMessageId    = 0x4010\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_EXCEEDED_MAX_SERVER_TRIPS\nLanguage     = English\nThe number of round trips to the server exceeded the maximum limit.\n.\n\nMessageId    = 0x4011\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_SUS_SERVER_NOT_SET\nLanguage     = English\nWUServer policy value is missing in the registry.\n.\n\nMessageId    = 0x4012\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_DOUBLE_INITIALIZATION\nLanguage     = English\nInitialization failed because the object was already initialized.\n.\n\nMessageId    = 0x4013\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_INVALID_COMPUTER_NAME\nLanguage     = English\nThe computer name could not be determined.\n.\n\nMessageId    = 0x4015\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_REFRESH_CACHE_REQUIRED\nLanguage     = English\nThe reply from the server indicates that the server was changed or the cookie was invalid; refresh the state of the internal cache and retry.\n.\n\nMessageId    = 0x4016\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_HTTP_STATUS_BAD_REQUEST\nLanguage     = English\nHTTP status 400 - the server could not process the request due to invalid syntax.\n.\n\nMessageId    = 0x4017\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_HTTP_STATUS_DENIED\nLanguage     = English\nHTTP status 401 - the requested resource requires user authentication.\n.\n\nMessageId    = 0x4018\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_HTTP_STATUS_FORBIDDEN\nLanguage     = English\nHTTP status 403 - server understood the request, but declined to fulfill it.\n.\n\nMessageId    = 0x4019\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_HTTP_STATUS_NOT_FOUND\nLanguage     = English\nHTTP status 404 - the server cannot find the requested URI (Uniform Resource Identifier).\n.\n\nMessageId    = 0x401A\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_HTTP_STATUS_BAD_METHOD\nLanguage     = English\nHTTP status 405 - the HTTP method is not allowed.\n.\n\nMessageId    = 0x401B\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_HTTP_STATUS_PROXY_AUTH_REQ\nLanguage     = English\nHTTP status 407 - proxy authentication is required.\n.\n\nMessageId    = 0x401C\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_HTTP_STATUS_REQUEST_TIMEOUT\nLanguage     = English\nHTTP status 408 - the server timed out waiting for the request.\n.\n\nMessageId    = 0x401D\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_HTTP_STATUS_CONFLICT\nLanguage     = English\nHTTP status 409 - the request was not completed due to a conflict with the current state of the resource.\n.\n\nMessageId    = 0x401E\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_HTTP_STATUS_GONE\nLanguage     = English\nHTTP status 410 - requested resource is no longer available at the server.\n.\n\nMessageId    = 0x401F\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_HTTP_STATUS_SERVER_ERROR\nLanguage     = English\nHTTP status 500 - an error internal to the server prevented fulfilling the request.\n.\n\nMessageId    = 0x4020\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_HTTP_STATUS_NOT_SUPPORTED\nLanguage     = English\nHTTP status 501 - server does not support the functionality required to fulfill the request.\n.\n\nMessageId    = 0x4021\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_HTTP_STATUS_BAD_GATEWAY\nLanguage     = English\nHTTP 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.\n.\n\nMessageId    = 0x4022\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_HTTP_STATUS_SERVICE_UNAVAIL\nLanguage     = English\nHTTP status 503 - the service is temporarily overloaded.\n.\n\nMessageId    = 0x4023\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_HTTP_STATUS_GATEWAY_TIMEOUT\nLanguage     = English\nHTTP status 504 - the request was timed out waiting for a gateway.\n.\n\nMessageId    = 0x4024\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_HTTP_STATUS_VERSION_NOT_SUP\nLanguage     = English\nHTTP status 505 - the server does not support the HTTP protocol version used for the request.\n.\n\nMessageId    = 0x4025\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_FILE_LOCATIONS_CHANGED\nLanguage     = English\nOperation failed due to a changed file location; refresh internal state and resend.\n.\n\nMessageId    = 0x4026\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_REGISTRATION_NOT_SUPPORTED\nLanguage     = English\nOperation failed because Windows Update Agent does not support registration with a non-WSUS server.\n.\n\nMessageId    = 0x4027\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_NO_AUTH_PLUGINS_REQUESTED\nLanguage     = English\nThe server returned an empty authentication information list.\n.\n\nMessageId    = 0x4028\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_NO_AUTH_COOKIES_CREATED\nLanguage     = English\nWindows Update Agent was unable to create any valid authentication cookies.\n.\n\nMessageId    = 0x4029\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_INVALID_CONFIG_PROP\nLanguage     = English\nA configuration property value was wrong.\n.\n\nMessageId    = 0x402A\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_CONFIG_PROP_MISSING\nLanguage     = English\nA configuration property value was missing.\n.\n\nMessageId    = 0x402B\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_HTTP_STATUS_NOT_MAPPED\nLanguage     = English\nThe HTTP request could not be completed and the reason did not correspond to any of the WU_E_PT_HTTP_* error codes.\n.\n\nMessageId    = 0x402C\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_WINHTTP_NAME_NOT_RESOLVED\nLanguage     = English\nERROR_WINHTTP_NAME_NOT_RESOLVED - the proxy server or target server name cannot be resolved.\n.\n\nMessageId    = 0x402D\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_LOAD_SHEDDING\nLanguage     = English\nThe server is shedding load.\n.\n\nMessageId    = 0x402E\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_CLIENT_ENFORCED_LOAD_SHEDDING\nLanguage     = English\nWindows Update Agent is enforcing honoring the service load shedding interval.\n.\n\nMessageId    = 0x502D\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_SAME_REDIR_ID\nLanguage     = English\nWindows Update Agent failed to download a redirector cabinet file with a new redirectorId value from the server during the recovery.\n.\n\nMessageId    = 0x502E\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_NO_MANAGED_RECOVER\nLanguage     = English\nA redirector recovery action did not complete because the server is managed.\n.\n\nMessageId    = 0x402F\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_ECP_SUCCEEDED_WITH_ERRORS\nLanguage     = English\nExternal cab file processing completed with some errors.\n.\n\nMessageId    = 0x4030\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_ECP_INIT_FAILED\nLanguage     = English\nThe external cab processor initialization did not complete.\n.\n\nMessageId    = 0x4031\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_ECP_INVALID_FILE_FORMAT\nLanguage     = English\nThe format of a metadata file was invalid.\n.\n\nMessageId    = 0x4032\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_ECP_INVALID_METADATA\nLanguage     = English\nExternal cab processor found invalid metadata.\n.\n\nMessageId    = 0x4033\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_ECP_FAILURE_TO_EXTRACT_DIGEST\nLanguage     = English\nThe file digest could not be extracted from an external cab file.\n.\n\nMessageId    = 0x4034\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_ECP_FAILURE_TO_DECOMPRESS_CAB_FILE\nLanguage     = English\nAn external cab file could not be decompressed.\n.\n\nMessageId    = 0x4035\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_ECP_FILE_LOCATION_ERROR\nLanguage     = English\nExternal cab processor was unable to get file locations.\n.\n\nMessageId    = 0x0436\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_CATALOG_SYNC_REQUIRED\nLanguage     = English\nThe server does not support category-specific search; Full catalog search has to be issued instead.\n.\n\nMessageId    = 0x0437\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_SECURITY_VERIFICATION_FAILURE\nLanguage     = English\nThere was a problem authorizing with the service.\n.\n\nMessageId    = 0x0438\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_ENDPOINT_UNREACHABLE\nLanguage     = English\nThere is no route or network connectivity to the endpoint.\n.\n\nMessageId    = 0x0439\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_INVALID_FORMAT\nLanguage     = English\nThe data received does not meet the data contract expectations.\n.\n\nMessageId    = 0x043A\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_INVALID_URL\nLanguage     = English\nThe url is invalid.\n.\n\nMessageId    = 0x043B\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_NWS_NOT_LOADED\nLanguage     = English\nUnable to load NWS runtime.\n.\n\nMessageId    = 0x043C\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_PROXY_AUTH_SCHEME_NOT_SUPPORTED\nLanguage     = English\nThe proxy auth scheme is not supported.\n.\n\nMessageId    = 0x043D\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SERVICEPROP_NOTAVAIL\nLanguage     = English\nThe requested service property is not available.\n.\n\nMessageId    = 0x043E\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_ENDPOINT_REFRESH_REQUIRED\nLanguage     = English\nThe endpoint provider plugin requires online refresh.\n.\n\nMessageId    = 0x043F\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_ENDPOINTURL_NOTAVAIL\nLanguage     = English\nA URL for the requested service endpoint is not available.\n.\n\nMessageId    = 0x0440\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_ENDPOINT_DISCONNECTED\nLanguage     = English\nThe connection to the service endpoint died.\n.\n\nMessageId    = 0x0441\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_INVALID_OPERATION\nLanguage     = English\nThe operation is invalid because protocol talker is in an inappropriate state.\n.\n\n;// Same as WS_E_OBJECT_FAULTED\nMessageId    = 0x0442\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_OBJECT_FAULTED\nLanguage     = English\nThe object is in a faulted state due to a previous error.\n.\n\n;// Same as WS_E_NUMERIC_OVERFLOW\nMessageId    = 0x0443\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_NUMERIC_OVERFLOW\nLanguage     = English\nThe operation would lead to numeric overflow.\n.\n\n;// Same as WS_E_OPERATION_ABORTED\nMessageId    = 0x0444\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_OPERATION_ABORTED\nLanguage     = English\nThe operation was aborted.\n.\n\n;// Same as WS_E_OPERATION_ABANDONED\nMessageId    = 0x0445\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_OPERATION_ABANDONED\nLanguage     = English\nThe operation was abandoned.\n.\n\n;// Same as WS_E_QUOTA_EXCEEDED\nMessageId    = 0x0446\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_QUOTA_EXCEEDED\nLanguage     = English\nA quota was exceeded.\n.\n\n;// Same as WS_E_NO_TRANSLATION_AVAILABLE\nMessageId    = 0x0447\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_NO_TRANSLATION_AVAILABLE\nLanguage     = English\nThe information was not available in the specified language.\n.\n\n;// Same as WS_E_ADDRESS_IN_USE\nMessageId    = 0x0448\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_ADDRESS_IN_USE\nLanguage     = English\nThe address is already being used.\n.\n\n;// Same as WS_E_ADDRESS_NOT_AVAILABLE\nMessageId    = 0x0449\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_ADDRESS_NOT_AVAILABLE\nLanguage     = English\nThe address is not valid for this context.\n.\n\n;// Same as WS_E_OTHER\nMessageId    = 0x044A\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_OTHER\nLanguage     = English\nUnrecognized error occurred in the Windows Web Services framework.\n.\n\n;// Same as WS_E_SECURITY_SYSTEM_FAILURE\nMessageId    = 0x044B\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_SECURITY_SYSTEM_FAILURE\nLanguage     = English\nA security operation failed in the Windows Web Services framework.\n.\n\nMessageId    = 0x4100\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_DATA_BOUNDARY_RESTRICTED\nLanguage     = English\nThe client is data boundary restricted and needs to talk to a restricted endpoint.\n.\n\nMessageId    = 0x4101\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_GENERAL_AAD_CLIENT_ERROR\nLanguage     = English\nThe client hit an error in retrieving AAD device ticket.\n.\n\nMessageId    = 0x4FFF\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_PT_UNEXPECTED\nLanguage     = English\nA communication error not covered by another WU_E_PT_* error code.\n.\n\n;///////////////////////////////////////////////////////////////////////////////\n;// Redirector errors\n;//\n;// The following errors are generated by the components that download and\n;// parse the wuredir.cab\n;///////////////////////////////////////////////////////////////////////////////\nMessageId    = 0x5001\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_REDIRECTOR_LOAD_XML\nLanguage     = English\nThe redirector XML document could not be loaded into the DOM class.\n.\n\nMessageId    = 0x5002\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_REDIRECTOR_S_FALSE\nLanguage     = English\nThe redirector XML document is missing some required information.\n.\n\nMessageId    = 0x5003\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_REDIRECTOR_ID_SMALLER\nLanguage     = English\nThe redirectorId in the downloaded redirector cab is less than in the cached cab.\n.\n\nMessageId    = 0x5004\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_REDIRECTOR_UNKNOWN_SERVICE\nLanguage     = English\nThe service ID is not supported in the service environment.\n.\n\nMessageId    = 0x5005\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_REDIRECTOR_UNSUPPORTED_CONTENTTYPE\nLanguage     = English\nThe response from the redirector server had an unsupported content type.\n.\n\nMessageId    = 0x5006\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_REDIRECTOR_INVALID_RESPONSE\nLanguage     = English\nThe response from the redirector server had an error status or was invalid.\n.\n\nMessageId    = 0x5008\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_REDIRECTOR_ATTRPROVIDER_EXCEEDED_MAX_NAMEVALUE\nLanguage     = English\nThe maximum number of name value pairs was exceeded by the attribute provider.\n.\n\nMessageId    = 0x5009\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_REDIRECTOR_ATTRPROVIDER_INVALID_NAME\nLanguage     = English\nThe name received from the attribute provider was invalid.\n.\n\nMessageId    = 0x500A\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_REDIRECTOR_ATTRPROVIDER_INVALID_VALUE\nLanguage     = English\nThe value received from the attribute provider was invalid.\n.\n\nMessageId    = 0x500B\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_REDIRECTOR_SLS_GENERIC_ERROR\nLanguage     = English\nThere was an error in connecting to or parsing the response from the Service Locator Service redirector server.\n.\n\nMessageId    = 0x500C\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_REDIRECTOR_CONNECT_POLICY\nLanguage     = English\nConnections to the redirector server are disallowed by managed policy.\n.\n\nMessageId    = 0x500D\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_REDIRECTOR_ONLINE_DISALLOWED\nLanguage     = English\nThe redirector would go online but is disallowed by caller configuration.\n.\n\nMessageId    = 0x50FF\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_REDIRECTOR_UNEXPECTED\nLanguage     = English\nThe redirector failed for reasons not covered by another WU_E_REDIRECTOR_* error code.\n.\n\n;///////////////////////////////////////////////////////////////////////////////\n;// SIH errors\n;//\n;// The following errors are generated by the components that are involved with\n;// service-initiated healing.\n;///////////////////////////////////////////////////////////////////////////////\nMessageId    = 0x5101\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SIH_VERIFY_DOWNLOAD_ENGINE\nLanguage     = English\nVerification of the servicing engine package failed.\n.\n\nMessageId    = 0x5102\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SIH_VERIFY_DOWNLOAD_PAYLOAD\nLanguage     = English\nVerification of a servicing package failed.\n.\n\nMessageId    = 0x5103\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SIH_VERIFY_STAGE_ENGINE\nLanguage     = English\nVerification of the staged engine failed.\n.\n\nMessageId    = 0x5104\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SIH_VERIFY_STAGE_PAYLOAD\nLanguage     = English\nVerification of a staged payload failed.\n.\n\nMessageId    = 0x5105\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SIH_ACTION_NOT_FOUND\nLanguage     = English\nAn internal error occurred where the servicing action was not found.\n.\n\nMessageId    = 0x5106\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SIH_SLS_PARSE\nLanguage     = English\nThere was a parse error in the service environment response.\n.\n\nMessageId    = 0x5107\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SIH_INVALIDHASH\nLanguage     = English\nA downloaded file failed an integrity check.\n.\n\nMessageId    = 0x5108\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SIH_NO_ENGINE\nLanguage     = English\nNo engine was provided by the server-initiated healing server response.\n.\n\nMessageId    = 0x5109\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SIH_POST_REBOOT_INSTALL_FAILED\nLanguage     = English\nPost-reboot install failed.\n.\n\nMessageId    = 0x510A\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SIH_POST_REBOOT_NO_CACHED_SLS_RESPONSE\nLanguage     = English\nThere were pending reboot actions, but cached SLS response was not found post-reboot.\n.\n\nMessageId    = 0x510B\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SIH_PARSE\nLanguage     = English\nParsing command line arguments failed.\n.\n\nMessageId    = 0x510C\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SIH_SECURITY\nLanguage     = English\nSecurity check failed.\n.\n\nMessageId    = 0x510D\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SIH_PPL\nLanguage     = English\nPPL check failed.\n.\n\nMessageId    = 0x510E\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SIH_POLICY\nLanguage     = English\nExecution was disabled by policy.\n.\n\nMessageId    = 0x510F\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SIH_STDEXCEPTION\nLanguage     = English\nA standard exception was caught.\n.\n\nMessageId    = 0x5110\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SIH_NONSTDEXCEPTION\nLanguage     = English\nA non-standard exception was caught.\n.\n\nMessageId    = 0x5111\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SIH_ENGINE_EXCEPTION\nLanguage     = English\nThe server-initiated healing engine encountered an exception not covered by another WU_E_SIH_* error code.\n.\n\nMessageId    = 0x5112\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SIH_BLOCKED_FOR_PLATFORM\nLanguage     = English\nYou are running SIH Client with cmd not supported on your platform.\n.\n\nMessageId    = 0x5113\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SIH_ANOTHER_INSTANCE_RUNNING\nLanguage     = English\nAnother SIH Client is already running.\n.\n\nMessageId    = 0x5114\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SIH_DNSRESILIENCY_OFF\nLanguage     = English\nDisable DNS resiliency feature per service configuration.\n.\n\nMessageId    = 0x51FF\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SIH_UNEXPECTED\nLanguage     = English\nThere was a failure for reasons not covered by another WU_E_SIH_* error code.\n.\n\n;///////////////////////////////////////////////////////////////////////////////\n;// driver util errors\n;//\n;// The device PnP enumerated device was pruned from the SystemSpec because\n;// one of the hardware or compatible IDs matched an installed printer driver.\n;// This is not considered a fatal error and the device is simply skipped.\n;///////////////////////////////////////////////////////////////////////////////\nMessageId    = 0xC001\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DRV_PRUNED\nLanguage     = English\nA driver was skipped.\n.\n\nMessageId    = 0xC002\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DRV_NOPROP_OR_LEGACY\nLanguage     = English\nA property for the driver could not be found. It may not conform with required specifications.\n.\n\nMessageId    = 0xC003\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DRV_REG_MISMATCH\nLanguage     = English\nThe registry type read for the driver does not match the expected type.\n.\n\nMessageId    = 0xC004\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DRV_NO_METADATA\nLanguage     = English\nThe driver update is missing metadata.\n.\n\nMessageId    = 0xC005\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DRV_MISSING_ATTRIBUTE\nLanguage     = English\nThe driver update is missing a required attribute.\n.\n\nMessageId    = 0xC006\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DRV_SYNC_FAILED\nLanguage     = English\nDriver synchronization failed.\n.\n\nMessageId    = 0xC007\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DRV_NO_PRINTER_CONTENT\nLanguage     = English\nInformation required for the synchronization of applicable printers is missing.\n.\n\nMessageId    = 0xC008\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DRV_DEVICE_PROBLEM\nLanguage     = English\nAfter installing a driver update, the updated device has reported a problem.\n.\n\n;// MessageId 0xCE00 through 0xCEFF are reserved for post-install driver problem codes\n;// (see uhdriver.cpp)\nMessageId    = 0xCFFF\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DRV_UNEXPECTED\nLanguage     = English\nA driver error not covered by another WU_E_DRV_* code.\n.\n\n;//////////////////////////////////////////////////////////////////////////////\n;// data store errors\n;///////////////////////////////////////////////////////////////////////////////\nMessageId    = 0x8000\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_SHUTDOWN\nLanguage     = English\nAn operation failed because Windows Update Agent is shutting down.\n.\n\nMessageId    = 0x8001\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_INUSE\nLanguage     = English\nAn operation failed because the data store was in use.\n.\n\nMessageId    = 0x8002\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_INVALID\nLanguage     = English\nThe current and expected states of the data store do not match.\n.\n\nMessageId    = 0x8003\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_TABLEMISSING\nLanguage     = English\nThe data store is missing a table.\n.\n\nMessageId    = 0x8004\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_TABLEINCORRECT\nLanguage     = English\nThe data store contains a table with unexpected columns.\n.\n\nMessageId    = 0x8005\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_INVALIDTABLENAME\nLanguage     = English\nA table could not be opened because the table is not in the data store.\n.\n\nMessageId    = 0x8006\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_BADVERSION\nLanguage     = English\nThe current and expected versions of the data store do not match.\n.\n\nMessageId    = 0x8007\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_NODATA\nLanguage     = English\nThe information requested is not in the data store.\n.\n\nMessageId    = 0x8008\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_MISSINGDATA\nLanguage     = English\nThe data store is missing required information or has a NULL in a table column that requires a non-null value.\n.\n\nMessageId    = 0x8009\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_MISSINGREF\nLanguage     = English\nThe data store is missing required information or has a reference to missing license terms, file, localized property or linked row.\n.\n\nMessageId    = 0x800A\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_UNKNOWNHANDLER\nLanguage     = English\nThe update was not processed because its update handler could not be recognized.\n.\n\nMessageId    = 0x800B\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_CANTDELETE\nLanguage     = English\nThe update was not deleted because it is still referenced by one or more services.\n.\n\nMessageId    = 0x800C\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_LOCKTIMEOUTEXPIRED\nLanguage     = English\nThe data store section could not be locked within the allotted time.\n.\n\nMessageId    = 0x800D\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_NOCATEGORIES\nLanguage     = English\nThe category was not added because it contains no parent categories and is not a top-level category itself.\n.\n\nMessageId    = 0x800E\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_ROWEXISTS\nLanguage     = English\nThe row was not added because an existing row has the same primary key.\n.\n\nMessageId    = 0x800F\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_STOREFILELOCKED\nLanguage     = English\nThe data store could not be initialized because it was locked by another process.\n.\n\nMessageId    = 0x8010\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_CANNOTREGISTER\nLanguage     = English\nThe data store is not allowed to be registered with COM in the current process.\n.\n\nMessageId    = 0x8011\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_UNABLETOSTART\nLanguage     = English\nCould not create a data store object in another process.\n.\n\nMessageId    = 0x8013\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_DUPLICATEUPDATEID\nLanguage     = English\nThe server sent the same update to the client with two different revision IDs.\n.\n\nMessageId    = 0x8014\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_UNKNOWNSERVICE\nLanguage     = English\nAn operation did not complete because the service is not in the data store.\n.\n\nMessageId    = 0x8015\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_SERVICEEXPIRED\nLanguage     = English\nAn operation did not complete because the registration of the service has expired.\n.\n\nMessageId    = 0x8016\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_DECLINENOTALLOWED\nLanguage     = English\nA request to hide an update was declined because it is a mandatory update or because it was deployed with a deadline.\n.\n\nMessageId    = 0x8017\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_TABLESESSIONMISMATCH\nLanguage     = English\nA table was not closed because it is not associated with the session.\n.\n\nMessageId    = 0x8018\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_SESSIONLOCKMISMATCH\nLanguage     = English\nA table was not closed because it is not associated with the session.\n.\n\nMessageId    = 0x8019\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_NEEDWINDOWSSERVICE\nLanguage     = English\nA 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.\n.\n\nMessageId    = 0x801A\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_INVALIDOPERATION\nLanguage     = English\nA request was declined because the operation is not allowed.\n.\n\nMessageId    = 0x801B\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_SCHEMAMISMATCH\nLanguage     = English\nThe schema of the current data store and the schema of a table in a backup XML document do not match.\n.\n\nMessageId    = 0x801C\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_RESETREQUIRED\nLanguage     = English\nThe data store requires a session reset; release the session and retry with a new session.\n.\n\nMessageId    = 0x801D\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_IMPERSONATED\nLanguage     = English\nA data store operation did not complete because it was requested with an impersonated identity.\n.\n\nMessageId    = 0x801E\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_DATANOTAVAILABLE\nLanguage     = English\nAn operation against update metadata did not complete because the data was never received from server.\n.\n\nMessageId    = 0x801F\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_DATANOTLOADED\nLanguage     = English\nAn operation against update metadata did not complete because the data was available but not loaded from datastore.\n.\n\nMessageId    = 0x8020\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_NODATA_NOSUCHREVISION\nLanguage     = English\nA data store operation did not complete because no such update revision is known.\n.\n\nMessageId    = 0x8021\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_NODATA_NOSUCHUPDATE\nLanguage     = English\nA data store operation did not complete because no such update is known.\n.\n\nMessageId    = 0x8022\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_NODATA_EULA\nLanguage     = English\nA data store operation did not complete because an update's EULA information is missing.\n.\n\nMessageId    = 0x8023\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_NODATA_SERVICE\nLanguage     = English\nA data store operation did not complete because a service's information is missing.\n.\n\nMessageId    = 0x8024\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_NODATA_COOKIE\nLanguage     = English\nA data store operation did not complete because a service's synchronization information is missing.\n.\n\nMessageId    = 0x8025\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_NODATA_TIMER\nLanguage     = English\nA data store operation did not complete because a timer's information is missing.\n.\n\nMessageId    = 0x8026\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_NODATA_CCR\nLanguage     = English\nA data store operation did not complete because a download's information is missing.\n.\n\nMessageId    = 0x8027\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_NODATA_FILE\nLanguage     = English\nA data store operation did not complete because a file's information is missing.\n.\n\nMessageId    = 0x8028\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_NODATA_DOWNLOADJOB\nLanguage     = English\nA data store operation did not complete because a download job's information is missing.\n.\n\nMessageId    = 0x8029\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_NODATA_TMI\nLanguage     = English\nA data store operation did not complete because a service's timestamp information is missing.\n.\n\nMessageId    = 0x8FFF\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DS_UNEXPECTED\nLanguage     = English\nA data store error not covered by another WU_E_DS_* code.\n.\n\n;/////////////////////////////////////////////////////////////////////////////\n;//Inventory Errors\n;/////////////////////////////////////////////////////////////////////////////\nMessageId    = 0x9001\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INVENTORY_PARSEFAILED\nLanguage     = English\nParsing of the rule file failed.\n.\n\nMessageId    = 0x9002\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INVENTORY_GET_INVENTORY_TYPE_FAILED\nLanguage     = English\nFailed to get the requested inventory type from the server.\n.\n\nMessageId    = 0x9003\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INVENTORY_RESULT_UPLOAD_FAILED\nLanguage     = English\nFailed to upload inventory result to the server.\n.\n\nMessageId    = 0x9004\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INVENTORY_UNEXPECTED\nLanguage     = English\nThere was an inventory error not covered by another error code.\n.\n\nMessageId    = 0x9005\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INVENTORY_WMI_ERROR\nLanguage     = English\nA WMI error occurred when enumerating the instances for a particular class.\n.\n\n;/////////////////////////////////////////////////////////////////////////////\n;//AU Errors\n;/////////////////////////////////////////////////////////////////////////////\nMessageId    = 0xA000\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_AU_NOSERVICE\nLanguage     = English\nAutomatic Updates was unable to service incoming requests.\n.\n\nMessageId    = 0xA002\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_AU_NONLEGACYSERVER\nLanguage     = English\nThe old version of the Automatic Updates client has stopped because the WSUS server has been upgraded.\n.\n\nMessageId    = 0xA003\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_AU_LEGACYCLIENTDISABLED\nLanguage     = English\nThe old version of the Automatic Updates client was disabled.\n.\n\nMessageId    = 0xA004\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_AU_PAUSED\nLanguage     = English\nAutomatic Updates was unable to process incoming requests because it was paused.\n.\n\nMessageId    = 0xA005\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_AU_NO_REGISTERED_SERVICE\nLanguage     = English\nNo unmanaged service is registered with AU.\n.\n\nMessageId    = 0xA006\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_AU_DETECT_SVCID_MISMATCH\nLanguage     = English\nThe default service registered with AU changed during the search.\n.\n\nMessageId    = 0xA007\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_REBOOT_IN_PROGRESS\nLanguage     = English\nA reboot is in progress.\n.\n\nMessageId    = 0xA008\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_AU_OOBE_IN_PROGRESS\nLanguage     = English\nAutomatic Updates can't process incoming requests while Windows Welcome is running.\n.\n\nMessageId    = 0xAFFF\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_AU_UNEXPECTED\nLanguage     = English\nAn Automatic Updates error not covered by another WU_E_AU * code.\n.\n\n;//////////////////////////////////////////////////////////////////////////////\n;// update handler errors\n;///////////////////////////////////////////////////////////////////////////////\nMessageId    = 0x2000\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_REMOTEUNAVAILABLE\nLanguage     = English\nA request for a remote update handler could not be completed because no remote process is available.\n.\n\nMessageId    = 0x2001\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_LOCALONLY\nLanguage     = English\nA request for a remote update handler could not be completed because the handler is local only.\n.\n\nMessageId    = 0x2002\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_UNKNOWNHANDLER\nLanguage     = English\nA request for an update handler could not be completed because the handler could not be recognized.\n.\n\nMessageId    = 0x2003\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_REMOTEALREADYACTIVE\nLanguage     = English\nA remote update handler could not be created because one already exists.\n.\n\nMessageId    = 0x2004\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_DOESNOTSUPPORTACTION\nLanguage     = English\nA request for the handler to install (uninstall) an update could not be completed because the update does not support install (uninstall).\n.\n\nMessageId    = 0x2005\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_WRONGHANDLER\nLanguage     = English\nAn operation did not complete because the wrong handler was specified.\n.\n\nMessageId    = 0x2006\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_INVALIDMETADATA\nLanguage     = English\nA handler operation could not be completed because the update contains invalid metadata.\n.\n\nMessageId    = 0x2007\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_INSTALLERHUNG\nLanguage     = English\nAn operation could not be completed because the installer exceeded the time limit.\n.\n\nMessageId    = 0x2008\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_OPERATIONCANCELLED\nLanguage     = English\nAn operation being done by the update handler was cancelled.\n.\n\nMessageId    = 0x2009\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_BADHANDLERXML\nLanguage     = English\nAn operation could not be completed because the handler-specific metadata is invalid.\n.\n\nMessageId    = 0x200A\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_CANREQUIREINPUT\nLanguage     = English\nA request to the handler to install an update could not be completed because the update requires user input.\n.\n\nMessageId    = 0x200B\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_INSTALLERFAILURE\nLanguage     = English\nThe installer failed to install (uninstall) one or more updates.\n.\n\nMessageId    = 0x200C\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_FALLBACKTOSELFCONTAINED\nLanguage     = English\nThe update handler should download self-contained content rather than delta-compressed content for the update.\n.\n\nMessageId    = 0x200D\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_NEEDANOTHERDOWNLOAD\nLanguage     = English\nThe update handler did not install the update because it needs to be downloaded again.\n.\n\nMessageId    = 0x200E\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_NOTIFYFAILURE\nLanguage     = English\nThe update handler failed to send notification of the status of the install (uninstall) operation.\n.\n\nMessageId    = 0x200F\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_INCONSISTENT_FILE_NAMES\nLanguage     = English\nThe file names contained in the update metadata and in the update package are inconsistent.\n.\n\nMessageId    = 0x2010\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_FALLBACKERROR\nLanguage     = English\nThe update handler failed to fall back to the self-contained content.\n.\n\nMessageId    = 0x2011\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_TOOMANYDOWNLOADREQUESTS\nLanguage     = English\nThe update handler has exceeded the maximum number of download requests.\n.\n\nMessageId    = 0x2012\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_UNEXPECTEDCBSRESPONSE\nLanguage     = English\nThe update handler has received an unexpected response from CBS.\n.\n\nMessageId    = 0x2013\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_BADCBSPACKAGEID\nLanguage     = English\nThe update metadata contains an invalid CBS package identifier.\n.\n\nMessageId    = 0x2014\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_POSTREBOOTSTILLPENDING\nLanguage     = English\nThe post-reboot operation for the update is still in progress.\n.\n\nMessageId    = 0x2015\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_POSTREBOOTRESULTUNKNOWN\nLanguage     = English\nThe result of the post-reboot operation for the update could not be determined.\n.\n\nMessageId    = 0x2016\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_POSTREBOOTUNEXPECTEDSTATE\nLanguage     = English\nThe state of the update after its post-reboot operation has completed is unexpected.\n.\n\nMessageId    = 0x2017\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_NEW_SERVICING_STACK_REQUIRED\nLanguage     = English\nThe OS servicing stack must be updated before this update is downloaded or installed.\n.\n\nMessageId    = 0x2018\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_CALLED_BACK_FAILURE\nLanguage     = English\nA callback installer called back with an error.\n.\n\nMessageId    = 0x2019\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_CUSTOMINSTALLER_INVALID_SIGNATURE\nLanguage     = English\nThe custom installer signature did not match the signature required by the update.\n.\n\nMessageId    = 0x201A\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_UNSUPPORTED_INSTALLCONTEXT\nLanguage     = English\nThe installer does not support the installation configuration.\n.\n\nMessageId    = 0x201B\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_INVALID_TARGETSESSION\nLanguage     = English\nThe targeted session for install is invalid.\n.\n\nMessageId    = 0x201C\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_DECRYPTFAILURE\nLanguage     = English\nThe handler failed to decrypt the update files.\n.\n\nMessageId    = 0x201D\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_HANDLER_DISABLEDUNTILREBOOT\nLanguage     = English\nThe update handler is disabled until the system reboots.\n.\n\nMessageId    = 0x201E\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_APPX_NOT_PRESENT\nLanguage     = English\nThe AppX infrastructure is not present on the system.\n.\n\nMessageId    = 0x201F\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_NOTREADYTOCOMMIT\nLanguage     = English\nThe update cannot be committed because it has not been previously installed or staged.\n.\n\nMessageId    = 0x2020\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_APPX_INVALID_PACKAGE_VOLUME\nLanguage     = English\nThe specified volume is not a valid AppX package volume.\n.\n\nMessageId    = 0x2021\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_APPX_DEFAULT_PACKAGE_VOLUME_UNAVAILABLE\nLanguage     = English\nThe configured default storage volume is unavailable.\n.\n\nMessageId    = 0x2022\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_APPX_INSTALLED_PACKAGE_VOLUME_UNAVAILABLE\nLanguage     = English\nThe volume on which the application is installed is unavailable.\n.\n\nMessageId    = 0x2023\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_APPX_PACKAGE_FAMILY_NOT_FOUND\nLanguage     = English\nThe specified package family is not present on the system.\n.\n\nMessageId    = 0x2024\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_APPX_SYSTEM_VOLUME_NOT_FOUND\nLanguage     = English\nUnable to find a package volume marked as system.\n.\n\nMessageId    = 0x2025\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_UA_SESSION_INFO_VERSION_NOT_SUPPORTED\nLanguage     = English\nUA does not support the version of OptionalSessionInfo.\n.\n\nMessageId    = 0x2026\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_RESERVICING_REQUIRED_BASELINE\nLanguage     = English\nThis operation cannot be completed. You must install the baseline update(s) before you can install this update.\n.\n\nMessageId    = 0x2FFF\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UH_UNEXPECTED\nLanguage     = English\nAn update handler error not covered by another WU_E_UH_* code.\n.\n\n;//////////////////////////////////////////////////////////////////////////////\n;// download manager errors\n;///////////////////////////////////////////////////////////////////////////////\nMessageId    = 0x6001\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_URLNOTAVAILABLE\nLanguage     = English\nA download manager operation could not be completed because the requested file does not have a URL.\n.\n\nMessageId    = 0x6002\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_INCORRECTFILEHASH\nLanguage     = English\nA download manager operation could not be completed because the file digest was not recognized.\n.\n\nMessageId    = 0x6003\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_UNKNOWNALGORITHM\nLanguage     = English\nA download manager operation could not be completed because the file metadata requested an unrecognized hash algorithm.\n.\n\nMessageId    = 0x6004\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_NEEDDOWNLOADREQUEST\nLanguage     = English\nAn operation could not be completed because a download request is required from the download handler.\n.\n\nMessageId    = 0x6005\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_NONETWORK\nLanguage     = English\nA download manager operation could not be completed because the network connection was unavailable.\n.\n\nMessageId    = 0x6006\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_WRONGBITSVERSION\nLanguage     = English\nA download manager operation could not be completed because the version of Background Intelligent Transfer Service (BITS) is incompatible.\n.\n\nMessageId    = 0x6007\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_NOTDOWNLOADED\nLanguage     = English\nThe update has not been downloaded.\n.\n\nMessageId    = 0x6008\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_FAILTOCONNECTTOBITS\nLanguage     = English\nA download manager operation failed because the download manager was unable to connect the Background Intelligent Transfer Service (BITS).\n.\n\nMessageId    = 0x6009\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_BITSTRANSFERERROR\nLanguage     = English\nA download manager operation failed because there was an unspecified Background Intelligent Transfer Service (BITS) transfer error.\n.\n\nMessageId    = 0x600A\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_DOWNLOADLOCATIONCHANGED\nLanguage     = English\nA download must be restarted because the location of the source of the download has changed.\n.\n\nMessageId    = 0x600B\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_CONTENTCHANGED\nLanguage     = English\nA download must be restarted because the update content changed in a new revision.\n.\n\nMessageId    = 0x600C\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_DOWNLOADLIMITEDBYUPDATESIZE\nLanguage     = English\nA download failed because the current network limits downloads by update size for the update service.\n.\n\nMessageId    = 0x600E\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_UNAUTHORIZED\nLanguage     = English\nThe download failed because the client was denied authorization to download the content.\n.\n\nMessageId    = 0x600F\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_BG_ERROR_TOKEN_REQUIRED\nLanguage     = English\nThe download failed because the user token associated with the BITS job no longer exists.\n.\n\nMessageId    = 0x6010\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_DOWNLOADSANDBOXNOTFOUND\nLanguage     = English\nThe sandbox directory for the downloaded update was not found.\n.\n\nMessageId    = 0x6011\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_DOWNLOADFILEPATHUNKNOWN\nLanguage     = English\nThe downloaded update has an unknown file path.\n.\n\nMessageId    = 0x6012\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_DOWNLOADFILEMISSING\nLanguage     = English\nOne or more of the files for the downloaded update is missing.\n.\n\nMessageId    = 0x6013\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_UPDATEREMOVED\nLanguage     = English\nAn attempt was made to access a downloaded update that has already been removed.\n.\n\nMessageId    = 0x6014\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_READRANGEFAILED\nLanguage     = English\nWindows Update couldn't find a needed portion of a downloaded update's file.\n.\n\nMessageId    = 0x6016\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_UNAUTHORIZED_NO_USER\nLanguage     = English\nThe download failed because the client was denied authorization to download the content due to no user logged on.\n.\n\nMessageId    = 0x6017\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_UNAUTHORIZED_LOCAL_USER\nLanguage     = English\nThe download failed because the local user was denied authorization to download the content.\n.\n\nMessageId    = 0x6018\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_UNAUTHORIZED_DOMAIN_USER\nLanguage     = English\nThe download failed because the domain user was denied authorization to download the content.\n.\n\nMessageId    = 0x6019\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_UNAUTHORIZED_MSA_USER\nLanguage     = English\nThe download failed because the MSA account associated with the user was denied authorization to download the content.\n.\n\nMessageId    = 0x601A\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_FALLINGBACKTOBITS\nLanguage     = English\nThe download will be continued by falling back to BITS to download the content.\n.\n\nMessageId    = 0x601B\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_DOWNLOAD_VOLUME_CONFLICT\nLanguage     = English\nAnother caller has requested download to a different volume.\n.\n\nMessageId    = 0x601C\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_SANDBOX_HASH_MISMATCH\nLanguage     = English\nThe hash of the update's sandbox does not match the expected value.\n.\n\nMessageId    = 0x601D\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_HARDRESERVEID_CONFLICT\nLanguage     = English\nThe hard reserve id specified conflicts with an id from another caller.\n.\n\nMessageId    = 0x601E\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_DOSVC_REQUIRED\nLanguage     = English\nThe update has to be downloaded via DO.\n.\n\nMessageId    = 0x601F\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_DOWNLOADTYPE_CONFLICT\nLanguage     = English\nWindows 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.\n.\n\nMessageId    = 0x6FFF\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_DM_UNEXPECTED\nLanguage     = English\nThere was a download manager error not covered by another WU_E_DM_* error code.\n.\n\n;//////////////////////////////////////////////////////////////////////////////\n;// Setup/SelfUpdate errors\n;///////////////////////////////////////////////////////////////////////////////\nMessageId    = 0xD001\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SETUP_INVALID_INFDATA\nLanguage     = English\nWindows Update Agent could not be updated because an INF file contains invalid information.\n.\n\nMessageId    = 0xD002\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SETUP_INVALID_IDENTDATA\nLanguage     = English\nWindows Update Agent could not be updated because the wuident.cab file contains invalid information.\n.\n\nMessageId    = 0xD003\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SETUP_ALREADY_INITIALIZED\nLanguage     = English\nWindows Update Agent could not be updated because of an internal error that caused setup initialization to be performed twice.\n.\n\nMessageId    = 0xD004\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SETUP_NOT_INITIALIZED\nLanguage     = English\nWindows Update Agent could not be updated because setup initialization never completed successfully.\n.\n\nMessageId    = 0xD005\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SETUP_SOURCE_VERSION_MISMATCH\nLanguage     = English\nWindows Update Agent could not be updated because the versions specified in the INF do not match the actual source file versions.\n.\n\nMessageId    = 0xD006\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SETUP_TARGET_VERSION_GREATER\nLanguage     = English\nWindows Update Agent could not be updated because a WUA file on the target system is newer than the corresponding source file.\n.\n\nMessageId    = 0xD007\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SETUP_REGISTRATION_FAILED\nLanguage     = English\nWindows Update Agent could not be updated because regsvr32.exe returned an error.\n.\n\nMessageId    = 0xD008\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SELFUPDATE_SKIP_ON_FAILURE\nLanguage     = English\nAn update to the Windows Update Agent was skipped because previous attempts to update have failed.\n.\n\nMessageId    = 0xD009\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SETUP_SKIP_UPDATE\nLanguage     = English\nAn update to the Windows Update Agent was skipped due to a directive in the wuident.cab file.\n.\n\nMessageId    = 0xD00A\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SETUP_UNSUPPORTED_CONFIGURATION\nLanguage     = English\nWindows Update Agent could not be updated because the current system configuration is not supported.\n.\n\nMessageId    = 0xD00B\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SETUP_BLOCKED_CONFIGURATION\nLanguage     = English\nWindows Update Agent could not be updated because the system is configured to block the update.\n.\n\nMessageId    = 0xD00C\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SETUP_REBOOT_TO_FIX\nLanguage     = English\nWindows Update Agent could not be updated because a restart of the system is required.\n.\n\nMessageId    = 0xD00D\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SETUP_ALREADYRUNNING\nLanguage     = English\nWindows Update Agent setup is already running.\n.\n\nMessageId    = 0xD00E\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SETUP_REBOOTREQUIRED\nLanguage     = English\nWindows Update Agent setup package requires a reboot to complete installation.\n.\n\nMessageId    = 0xD00F\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SETUP_HANDLER_EXEC_FAILURE\nLanguage     = English\nWindows Update Agent could not be updated because the setup handler failed during execution.\n.\n\nMessageId    = 0xD010\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SETUP_INVALID_REGISTRY_DATA\nLanguage     = English\nWindows Update Agent could not be updated because the registry contains invalid information.\n.\n\nMessageId    = 0xD011\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SELFUPDATE_REQUIRED\nLanguage     = English\nWindows Update Agent must be updated before search can continue.\n.\n\nMessageId    = 0xD012\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SELFUPDATE_REQUIRED_ADMIN\nLanguage     = English\nWindows Update Agent must be updated before search can continue.  An administrator is required to perform the operation.\n.\n\nMessageId    = 0xD013\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SETUP_WRONG_SERVER_VERSION\nLanguage     = English\nWindows Update Agent could not be updated because the server does not contain update information for this version.\n.\n\nMessageId    = 0xD014\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SETUP_DEFERRABLE_REBOOT_PENDING\nLanguage     = English\nWindows Update Agent is successfully updated, but a reboot is required to complete the setup.\n.\n\nMessageId    = 0xD015\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SETUP_NON_DEFERRABLE_REBOOT_PENDING\nLanguage     = English\nWindows Update Agent is successfully updated, but a reboot is required to complete the setup.\n.\n\nMessageId    = 0xD016\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SETUP_FAIL\nLanguage     = English\nWindows Update Agent could not be updated because of an unknown error.\n.\n\nMessageId    = 0xDFFF\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SETUP_UNEXPECTED\nLanguage     = English\nWindows Update Agent could not be updated because of an error not covered by another WU_E_SETUP_* error code.\n.\n\n;//////////////////////////////////////////////////////////////////////////////\n;// expression evaluator errors\n;///////////////////////////////////////////////////////////////////////////////\nMessageId    = 0xE001\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_EE_UNKNOWN_EXPRESSION\nLanguage     = English\nAn expression evaluator operation could not be completed because an expression was unrecognized.\n.\n\nMessageId    = 0xE002\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_EE_INVALID_EXPRESSION\nLanguage     = English\nAn expression evaluator operation could not be completed because an expression was invalid.\n.\n\nMessageId    = 0xE003\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_EE_MISSING_METADATA\nLanguage     = English\nAn expression evaluator operation could not be completed because an expression contains an incorrect number of metadata nodes.\n.\n\nMessageId    = 0xE004\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_EE_INVALID_VERSION\nLanguage     = English\nAn expression evaluator operation could not be completed because the version of the serialized expression data is invalid.\n.\n\nMessageId    = 0xE005\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_EE_NOT_INITIALIZED\nLanguage     = English\nThe expression evaluator could not be initialized.\n.\n\nMessageId    = 0xE006\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_EE_INVALID_ATTRIBUTEDATA\nLanguage     = English\nAn expression evaluator operation could not be completed because there was an invalid attribute.\n.\n\nMessageId    = 0xE007\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_EE_CLUSTER_ERROR\nLanguage     = English\nAn expression evaluator operation could not be completed because the cluster state of the computer could not be determined.\n.\n\nMessageId    = 0xEFFF\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_EE_UNEXPECTED\nLanguage     = English\nThere was an expression evaluator error not covered by another WU_E_EE_* error code.\n.\n\n;//////////////////////////////////////////////////////////////////////////////\n;// UI errors\n;///////////////////////////////////////////////////////////////////////////////\nMessageId    = 0x3001\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INSTALLATION_RESULTS_UNKNOWN_VERSION\nLanguage     = English\nThe results of download and installation could not be read from the registry due to an unrecognized data format version.\n.\n\nMessageId    = 0x3002\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INSTALLATION_RESULTS_INVALID_DATA\nLanguage     = English\nThe results of download and installation could not be read from the registry due to an invalid data format.\n.\n\nMessageId    = 0x3003\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INSTALLATION_RESULTS_NOT_FOUND\nLanguage     = English\nThe results of download and installation are not available; the operation may have failed to start.\n.\n\nMessageId    = 0x3004\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_TRAYICON_FAILURE\nLanguage     = English\nA failure occurred when trying to create an icon in the taskbar notification area.\n.\n\nMessageId    = 0x3FFD\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_NON_UI_MODE\nLanguage     = English\nUnable to show UI when in non-UI mode; WU client UI modules may not be installed.\n.\n\nMessageId    = 0x3FFE\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_WUCLTUI_UNSUPPORTED_VERSION\nLanguage     = English\nUnsupported version of WU client UI exported functions.\n.\n\nMessageId    = 0x3FFF\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_AUCLIENT_UNEXPECTED\nLanguage     = English\nThere was a user interface error not covered by another WU_E_AUCLIENT_* error code.\n.\n\n;//////////////////////////////////////////////////////////////////////////////\n;// reporter errors\n;///////////////////////////////////////////////////////////////////////////////\nMessageId    = 0xF001\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_REPORTER_EVENTCACHECORRUPT\nLanguage     = English\nThe event cache file was defective.\n.\n\nMessageId    = 0xF002\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_REPORTER_EVENTNAMESPACEPARSEFAILED\nLanguage     = English\nThe XML in the event namespace descriptor could not be parsed.\n.\n\nMessageId    = 0xF003\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INVALID_EVENT\nLanguage     = English\nThe XML in the event namespace descriptor could not be parsed.\n.\n\nMessageId    = 0xF004\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SERVER_BUSY\nLanguage     = English\nThe server rejected an event because the server was too busy.\n.\n\nMessageId    = 0xF005\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_CALLBACK_COOKIE_NOT_FOUND\nLanguage     = English\nThe specified callback cookie is not found.\n.\n\nMessageId    = 0xFFFF\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_REPORTER_UNEXPECTED\nLanguage     = English\nThere was a reporter error not covered by another error code.\n.\n\nMessageId    = 0x7001\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_OL_INVALID_SCANFILE\nLanguage     = English\nAn operation could not be completed because the scan package was invalid.\n.\n\nMessageId    = 0x7002\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_OL_NEWCLIENT_REQUIRED\nLanguage     = English\nAn operation could not be completed because the scan package requires a greater version of the Windows Update Agent.\n.\n\nMessageId    = 0x7003\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INVALID_EVENT_PAYLOAD\nLanguage     = English\nAn invalid event payload was specified.\n.\n\nMessageId    = 0x7004\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_INVALID_EVENT_PAYLOADSIZE\nLanguage     = English\nThe size of the event payload submitted is invalid.\n.\n\nMessageId    = 0x7005\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SERVICE_NOT_REGISTERED\nLanguage     = English\nThe service is not registered.\n.\n\nMessageId    = 0x7FFF\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_OL_UNEXPECTED\nLanguage     = English\nSearch using the scan package failed.\n.\n\n;//////////////////////////////////////////////////////////////////////////////\n;// WU Metadata Integrity related errors - 0x71FE\n;///////////////////////////////////////////////////////////////////////////////\n;///////\n;// Metadata General errors 0x7100 - 0x711F\n;///////\nMessageId    = 0x7100\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_NOOP\nLanguage     = English\nNo operation was required by update metadata verification.\n.\n\nMessageId    = 0x7101\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_CONFIG_INVALID_BINARY_ENCODING\nLanguage     = English\nThe binary encoding of metadata config data was invalid.\n.\n\nMessageId    = 0x7102\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_FETCH_CONFIG\nLanguage     = English\nUnable to fetch required configuration for metadata signature verification.\n.\n\nMessageId    = 0x7104\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_INVALID_PARAMETER\nLanguage     = English\nA metadata verification operation failed due to an invalid parameter.\n.\n\nMessageId    = 0x7105\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_UNEXPECTED\nLanguage     = English\nA metadata verification operation failed due to reasons not covered by another error code.\n.\n\nMessageId    = 0x7106\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_NO_VERIFICATION_DATA\nLanguage     = English\nNone of the update metadata had verification data, which may be disabled on the update server.\n.\n\nMessageId    = 0x7107\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_BAD_FRAGMENTSIGNING_CONFIG\nLanguage     = English\nThe fragment signing configuration used for verifying update metadata signatures was bad.\n.\n\nMessageId    = 0x7108\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_FAILURE_PROCESSING_FRAGMENTSIGNING_CONFIG\nLanguage     = English\nThere was an unexpected operational failure while parsing fragment signing configuration.\n.\n\n;///////\n;// Metadata XML errors 0x7120 - 0x713F\n;///////\nMessageId    = 0x7120\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_XML_MISSING\nLanguage     = English\nRequired xml data was missing from configuration.\n.\n\nMessageId    = 0x7121\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_XML_FRAGMENTSIGNING_MISSING\nLanguage     = English\nRequired fragmentsigning data was missing from xml configuration.\n.\n\nMessageId    = 0x7122\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_XML_MODE_MISSING\nLanguage     = English\nRequired mode data was missing from xml configuration.\n.\n\nMessageId    = 0x7123\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_XML_MODE_INVALID\nLanguage     = English\nAn invalid metadata enforcement mode was detected.\n.\n\nMessageId    = 0x7124\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_XML_VALIDITY_INVALID\nLanguage     = English\nAn invalid timestamp validity window configuration was detected.\n.\n\nMessageId    = 0x7125\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_XML_LEAFCERT_MISSING\nLanguage     = English\nRequired leaf certificate data was missing from xml configuration.\n.\n\nMessageId    = 0x7126\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_XML_INTERMEDIATECERT_MISSING\nLanguage     = English\nRequired intermediate certificate data was missing from xml configuration.\n.\n\nMessageId    = 0x7127\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_XML_LEAFCERT_ID_MISSING\nLanguage     = English\nRequired leaf certificate id attribute was missing from xml configuration.\n.\n\nMessageId    = 0x7128\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_XML_BASE64CERDATA_MISSING\nLanguage     = English\nRequired certificate base64CerData attribute was missing from xml configuration.\n.\n\n;///////\n;// Metadata Signature/Hash-related errors 0x7140 - 0x714F\n;///////\nMessageId    = 0x7140\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_BAD_SIGNATURE\nLanguage     = English\nThe metadata for an update was found to have a bad or invalid digital signature.\n.\n\nMessageId    = 0x7141\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_UNSUPPORTED_HASH_ALG\nLanguage     = English\nAn unsupported hash algorithm for metadata verification was specified.\n.\n\nMessageId    = 0x7142\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_SIGNATURE_VERIFY_FAILED\nLanguage     = English\nAn error occurred during an update's metadata signature verification.\n.\n\n;///////\n;// Metadata Certificate Chain trust related errors 0x7150 - 0x715F\n;///////\nMessageId    = 0x7150\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATATRUST_CERTIFICATECHAIN_VERIFICATION\nLanguage     = English\nAn failure occurred while verifying trust for metadata signing certificate chains.\n.\n\nMessageId    = 0x7151\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATATRUST_UNTRUSTED_CERTIFICATECHAIN\nLanguage     = English\nA metadata signing certificate had an untrusted certificate chain.\n.\n\n;///////\n;// Metadata Timestamp Token/Signature errors 0x7160 - 0x717F\n;///////\nMessageId    = 0x7160\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_MISSING\nLanguage     = English\nAn expected metadata timestamp token was missing.\n.\n\nMessageId    = 0x7161\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_VERIFICATION_FAILED\nLanguage     = English\nA metadata Timestamp token failed verification.\n.\n\nMessageId    = 0x7162\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_UNTRUSTED\nLanguage     = English\nA metadata timestamp token signer certificate chain was untrusted.\n.\n\nMessageId    = 0x7163\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_VALIDITY_WINDOW\nLanguage     = English\nA metadata signature timestamp token was no longer within the validity window.\n.\n\nMessageId    = 0x7164\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_SIGNATURE\nLanguage     = English\nA metadata timestamp token failed signature validation\n.\n\nMessageId    = 0x7165\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_CERTCHAIN\nLanguage     = English\nA metadata timestamp token certificate failed certificate chain verification.\n.\n\nMessageId    = 0x7166\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_REFRESHONLINE\nLanguage     = English\nA failure occurred when refreshing a missing timestamp token from the network.\n.\n\nMessageId    = 0x7167\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_ALL_BAD\nLanguage     = English\nAll update metadata verification timestamp tokens from the timestamp token cache are invalid.\n.\n\nMessageId    = 0x7168\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_NODATA\nLanguage     = English\nNo update metadata verification timestamp tokens exist in the timestamp token cache.\n.\n\nMessageId    = 0x7169\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_CACHELOOKUP\nLanguage     = English\nAn error occurred during cache lookup of update metadata verification timestamp token.\n.\n\nMessageId    = 0x717E\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_VALIDITYWINDOW_UNEXPECTED\nLanguage     = English\nAn metadata timestamp token validity window failed unexpectedly due to reasons not covered by another error code.\n.\n\nMessageId    = 0x717F\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_TIMESTAMP_TOKEN_UNEXPECTED\nLanguage     = English\nAn metadata timestamp token verification operation failed due to reasons not covered by another error code.\n.\n\n;///////\n;// Metadata Certificate-Related errors 0x7180 - 0x719F\n;///////\nMessageId    = 0x7180\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_CERT_MISSING\nLanguage     = English\nAn expected metadata signing certificate was missing.\n.\n\nMessageId    = 0x7181\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_LEAFCERT_BAD_TRANSPORT_ENCODING\nLanguage     = English\nThe transport encoding of a metadata signing leaf certificate was malformed.\n.\n\nMessageId    = 0x7182\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_INTCERT_BAD_TRANSPORT_ENCODING\nLanguage     = English\nThe transport encoding of a metadata signing intermediate certificate was malformed.\n.\n\nMessageId    = 0x7183\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_METADATA_CERT_UNTRUSTED\nLanguage     = English\nA metadata certificate chain was untrusted.\n.\n\n;//////////////////////////////////////////////////////////////////////////////\n;// WU Task related errors\n;///////////////////////////////////////////////////////////////////////////////\nMessageId    = 0xB001\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_WUTASK_INPROGRESS\nLanguage     = English\nThe task is currently in progress.\n.\n\nMessageId    = 0xB002\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_WUTASK_STATUS_DISABLED\nLanguage     = English\nThe operation cannot be completed since the task status is currently disabled.\n.\n\nMessageId    = 0xB003\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_WUTASK_NOT_STARTED\nLanguage     = English\nThe operation cannot be completed since the task is not yet started.\n.\n\nMessageId    = 0xB004\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_WUTASK_RETRY\nLanguage     = English\nThe task was stopped and needs to be run again to complete.\n.\n\nMessageId    = 0xB005\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_WUTASK_CANCELINSTALL_DISALLOWED\nLanguage     = English\nCannot cancel a non-scheduled install.\n.\n\n;//////////////////////////////////////////////////////////////////////////////\n;// Hardware Capability related errors\n;////\nMessageId    = 0xB101\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UNKNOWN_HARDWARECAPABILITY\nLanguage     = English\nHardware capability meta data was not found after a sync with the service.\n.\n\nMessageId    = 0xB102\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_BAD_XML_HARDWARECAPABILITY\nLanguage     = English\nHardware capability meta data was malformed and/or failed to parse.\n.\n\nMessageId    = 0xB103\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_WMI_NOT_SUPPORTED\nLanguage     = English\nUnable to complete action due to WMI dependency, which isn't supported on this platform.\n.\n\nMessageId    = 0xB104\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_UPDATE_MERGE_NOT_ALLOWED\nLanguage     = English\nMerging of the update is not allowed\n.\n\nMessageId    = 0xB105\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SKIPPED_UPDATE_INSTALLATION\nLanguage     = English\nInstalling merged updates only. So skipping non mergeable updates.\n.\n\n;//////////////////////////////////////////////////////////////////////////////\n;// SLS related errors - 0xB201\n;////\n;///////\n;// SLS General errors 0xB201 - 0xB2FF\n;///////\nMessageId    = 0xB201\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_SLS_INVALID_REVISION\nLanguage     = English\nSLS response returned invalid revision number.\n.\n\n;//////////////////////////////////////////////////////////////////////////////\n;// trust related errors - 0xB301\n;////\n;///////\n;// trust General errors 0xB301 - 0xB3FF\n;///////\nMessageId    = 0xB301\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_FILETRUST_DUALSIGNATURE_RSA\nLanguage     = English\nFile signature validation fails to find valid RSA signature on infrastructure payload.\n.\n\nMessageId    = 0xB302\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_FILETRUST_DUALSIGNATURE_ECC\nLanguage     = English\nFile signature validation fails to find valid ECC signature on infrastructure payload.\n.\n\nMessageId    = 0xB303\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_TRUST_SUBJECT_NOT_TRUSTED\nLanguage     = English\nThe subject is not trusted by WU for the specified action.\n.\n\nMessageId    = 0xB304\nFacility     = WindowsUpdate\nSeverity     = Error\nSymbolicName = WU_E_TRUST_PROVIDER_UNKNOWN\nLanguage     = English\nUnknown trust provider for WU.\n.\n\n;#endif //_WUERROR_\n"
  },
  {
    "path": "LegacyUpdate/wuguid.cpp",
    "content": "#include <windows.h>\n#include <initguid.h>\n#include <com.h>\n\nDEFINE_GUID(CLSID_UpdateInstaller,   0xd2e0fe7f, 0xd23e, 0x48e1, 0x93, 0xc0, 0x6f, 0xa8, 0xcc, 0x34, 0x64, 0x74);\nDEFINE_GUID(IID_IUpdateInstaller,    0x7b929c68, 0xccdc, 0x4226, 0x96, 0xb1, 0x87, 0x24, 0x60, 0x0b, 0x54, 0xc2);\nDEFINE_GUID(IID_IUpdateInstaller4,   0xef8208ea, 0x2304, 0x492d, 0x91, 0x09, 0x23, 0x81, 0x3b, 0x09, 0x58, 0xe1);\n\nDEFINE_GUID(CLSID_AutomaticUpdates,  0xbfe18e9c, 0x6d87, 0x4450, 0xb3, 0x7c, 0xe0, 0x2f, 0x0b, 0x37, 0x38, 0x03);\nDEFINE_GUID(IID_IAutomaticUpdates,   0x673425bf, 0xc082, 0x4c7c, 0xbd, 0xfd, 0x56, 0x9e, 0xd4, 0x53, 0x17, 0xc5);\n\nDEFINE_GUID(CLSID_SystemInformation, 0xc01b9ba0, 0xbea7, 0x41ba, 0xb6, 0x04, 0xd0, 0xa3, 0x6f, 0x46, 0x91, 0x33);\nDEFINE_GUID(IID_ISystemInformation,  0xada74191, 0x3b75, 0x4b40, 0x9b, 0xd8, 0x7f, 0x29, 0x30, 0x7b, 0xb7, 0xa5);\n\ninterface ISystemInformation;\ninterface IAutomaticUpdates;\ninterface IUpdateInstaller4;\n\nEXTERN_C const GUID IID_ISystemInformation;\nEXTERN_C const GUID IID_IAutomaticUpdates;\nEXTERN_C const GUID IID_IUpdateInstaller4;\n\nDEFINE_UUIDOF(ISystemInformation, IID_ISystemInformation);\nDEFINE_UUIDOF(IAutomaticUpdates,  IID_IAutomaticUpdates);\nDEFINE_UUIDOF(IUpdateInstaller4,  IID_IUpdateInstaller4);\n"
  },
  {
    "path": "LegacyUpdate.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.14.36408.4 d17.14\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"LegacyUpdate\", \"LegacyUpdate\\LegacyUpdate.vcxproj\", \"{E9142706-8E21-4ECE-80F8-D3F7B95C6F27}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tDebug|x86 = Debug|x86\r\n\t\tRelease|x64 = Release|x64\r\n\t\tRelease|x86 = Release|x86\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{E9142706-8E21-4ECE-80F8-D3F7B95C6F27}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{E9142706-8E21-4ECE-80F8-D3F7B95C6F27}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{E9142706-8E21-4ECE-80F8-D3F7B95C6F27}.Debug|x86.ActiveCfg = Debug|Win32\r\n\t\t{E9142706-8E21-4ECE-80F8-D3F7B95C6F27}.Debug|x86.Build.0 = Debug|Win32\r\n\t\t{E9142706-8E21-4ECE-80F8-D3F7B95C6F27}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{E9142706-8E21-4ECE-80F8-D3F7B95C6F27}.Release|x64.Build.0 = Release|x64\r\n\t\t{E9142706-8E21-4ECE-80F8-D3F7B95C6F27}.Release|x86.ActiveCfg = Release|Win32\r\n\t\t{E9142706-8E21-4ECE-80F8-D3F7B95C6F27}.Release|x86.Build.0 = Release|Win32\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {64E0615D-0D1F-45F1-9634-2EE6D534187B}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "Makefile",
    "content": "export CI ?= 0\nexport SIGN ?= 0\nexport DEBUG ?= 1\n\nall: setup\n\nactivex:\n\t+$(MAKE) -C LegacyUpdate\n\nlauncher:\n\t+$(MAKE) -C launcher\n\nnsisplugin:\n\t+$(MAKE) -C nsisplugin\n\nsetup: activex launcher nsisplugin\n\t+$(MAKE) -C setup\n\nsetup-nt4: nsisplugin\n\t+$(MAKE) -C setup nt4\n\nnt4: setup-nt4\n\nclean:\n\t+$(MAKE) -C LegacyUpdate clean\n\t+$(MAKE) -C launcher clean\n\t+$(MAKE) -C nsisplugin clean\n\t+$(MAKE) -C setup clean\n\nclean-nt4:\n\t+$(MAKE) -C nsisplugin clean\n\t+$(MAKE) -C setup clean\n\n.PHONY: all activex launcher nsisplugin setup nt4 clean clean-nt4\n"
  },
  {
    "path": "README.md",
    "content": "# [<img src=\"https://legacyupdate.net/socialbanner.png\" alt=\"Legacy Update\">](http://legacyupdate.net/)\n\n[![wakatime](https://wakatime.com/badge/user/b9fcf8ba-3fce-41a4-a480-d3fe6074a1ad/project/c9516ff1-10b9-41da-82fb-b86b24b0acc8.svg)](https://wakatime.com/badge/user/b9fcf8ba-3fce-41a4-a480-d3fe6074a1ad/project/c9516ff1-10b9-41da-82fb-b86b24b0acc8)\n[![Build](https://github.com/LegacyUpdate/LegacyUpdate/actions/workflows/build.yml/badge.svg)](https://github.com/LegacyUpdate/LegacyUpdate/actions/workflows/build.yml)\n\nSince 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.\n\nLegacy 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.\n\nWindows 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.\n\nLegacy 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)).\n\nJust 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.\n\n> *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!*\n\n## Download\n\nDownload the latest version from the [Releases](https://github.com/LegacyUpdate/LegacyUpdate/releases) page of this repo, or from [**legacyupdate.net**](https://legacyupdate.net/).\n\nYou 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/).\n\n## The ActiveX Control\n\nThis 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.\n\nThis 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.\n\n### Building\n\nThe 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.\n\nYou will need to install:\n\n* [MinGW-w64](https://www.mingw-w64.org/) for i686 and x86_64\n* [NSIS](https://nsis.sourceforge.io/)\n* [UPX](https://upx.github.io/)\n* [Wine](https://www.winehq.org/) development tools\n\nRun 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.\n\n```bash\nsudo apt install libwine-dev make mingw-w64-i686-dev mingw-w64-x86-64-dev nsis upx-ucl\n```\n\nIf 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.\n\n### Testing\n\nA barebones Visual Studio project is included to help with debugging.\n\nFor 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.\n\nTo configure the debugger:\n\n1. Right-click LegacyUpdate in the Solution Explorer &rarr; Properties\n2. In the Debugging tab, set the Command field to:\n    * For system IE install: `$(ProgramW6432)\\Internet Explorer\\iexplore.exe`\n    * For Utilu IE6 RTM: `$(ProgramW6432)\\Utilu IE Collection\\IE600\\iexplore.exe`\n    * For Utilu IE6 SP2: `$(ProgramW6432)\\Utilu IE Collection\\IE600XPSP2\\iexplore.exe`\n    * For Utilu IE7: `$(ProgramW6432)\\Utilu IE Collection\\IE700\\iexplore.exe`\n    * For PowerShell: `$(SystemRoot)\\System32\\WindowsPowerShell\\v1.0\\powershell.exe` (or SysWOW64 to test the 32-bit build on 64-bit Windows)\n3. If using IE, set the Command Arguments field to `http://legacyupdate.net/windowsupdate/v6/`, or any other URL you want to use for debugging\n\nYou can directly test the ActiveX control using PowerShell:\n\n```powershell\nPS> $lu = New-Object -ComObject LegacyUpdate.Control\nPS> $lu.CheckControl()\nTrue\n```\n\nIf set up correctly, `CheckControl()` should return `True`. This is only supported in debug builds - release builds throw `E_ACCESSDENIED`.\n\n## Setup and Launcher\n\nLegacy 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.\n\nAs 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”.\n\nBoth are compiled using MinGW-w64 and are written in C to keep things simple.\n\n## Website source code\n\nI 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.\n\nI’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.\n\n## Disclaimer\n\nThe 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.\n\nThis 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.\n\n## Credits\n\nLegacy Update was started and is primarily developed by [Adam Demasi (@kirb)](https://kirb.me/), with contributions from:\n\n* [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/)!\n* [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)!\n* [@stdin82](https://github.com/stdin82): Helped us find some patches on the Windows Update server, and other general help on the issue tracker.\n* The [Windows Update Restored](https://windowsupdaterestored.com/) team: [@CaptainTER06](https://github.com/CaptainTER06), [@TheOneGoofAli](https://github.com/TheOneGoofAli), [et al.](https://windowsupdaterestored.com/)\n\nLegacy 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/).\n\nWe make use of some portions of the Windows SDK, [MinGW-w64](https://www.mingw-w64.org/), and [NSIS](https://nsis.sourceforge.io/).\n\n## License\n\nLicensed under the Apache License, version 2.0. Refer to [LICENSE.md](https://github.com/LegacyUpdate/LegacyUpdate/blob/main/LICENSE.md).\n\nThe 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).\n"
  },
  {
    "path": "build/fix-nsis.sh",
    "content": "#!/bin/bash\n# Fixes NSIS binaries so they run on Pentium/486. Debian's build of NSIS is compiled with MinGW,\n# but they lack any -mcpu flag, so the binaries receive a default of i686. To fix this, we'll\n# download the official Windows build of NSIS and extract its binaries. We only handle stubs though,\n# because we provide our own plugin builds in this repo.\n\nset -e\n\nif [[ $UID != 0 ]]; then\n\techo \"This script needs to be run as root (sorry)\" >&2\n\texit 1\nfi\n\nif [[ ! -d /usr/share/nsis/Stubs ]]; then\n\techo \"NSIS not installed, or Stubs directory is broken\" >&2\n\texit 1\nfi\n\nif [[ -d /usr/share/nsis/Stubs_old ]]; then\n\techo \"NSIS stubs are already fixed\" >&2\n\texit 0\nfi\n\napt-get install -qy curl p7zip-full\n\nmkdir /tmp/nsis\ncd /tmp/nsis\n\ncurl -fSL https://prdownloads.sourceforge.net/nsis/NSIS%203/3.11/nsis-3.11-setup.exe -o nsis.exe\n7z x nsis.exe\n\nmv /usr/share/nsis/Stubs{,_old}\ncp -ra Stubs /usr/share/nsis/Stubs\n\nrm -rf /tmp/nsis\n"
  },
  {
    "path": "build/get-nt4-patches.sh",
    "content": "#!/bin/bash\n# Get dependencies for NT4 build\n\nset -e\n\ncd \"$(dirname \"$0\")\"/..\n\nfor i in usb; do\n\techo \"Downloading $i...\"\n\tcurl -fL https://content.legacyupdate.net/legacyupdate/patches/nt4/$i.zip -o /tmp/$i.zip\n\tmkdir -p setup/patches/nt4/$i\n\tunzip -o /tmp/$i.zip -d setup/patches/nt4/$i\n\trm /tmp/$i.zip\ndone\n"
  },
  {
    "path": "build/getvc.cmd",
    "content": "@REM @echo off\nsetlocal enabledelayedexpansion\n\nset ProgramFiles32=%ProgramFiles%\nif \"%ProgramFiles(x86)%\" neq \"\" set ProgramFiles32=%ProgramFiles(x86)%\n\n:: Find Visual Studio installation\nif exist \"%ProgramFiles32%\\Microsoft Visual Studio\\Installer\\vswhere.exe\" (\n\t:: Get modern Visual Studio install path\n\tfor /f \"usebackq tokens=*\" %%i in (`\"%ProgramFiles32%\\Microsoft Visual Studio\\Installer\\vswhere.exe\" -latest -property installationPath`) do set VSPath=%%i\n\tset \"vcvarsall=!VSPath!\\VC\\Auxiliary\\Build\\vcvarsall.bat\"\n\tif \"%errorlevel%\" neq \"0\" exit /b %errorlevel%\n) else if exist \"%VS100COMNTOOLS%\\..\\..\\VC\\vcvarsall.bat\" (\n\t:: Visual Studio 2010\n\tset \"vcvarsall=%VS100COMNTOOLS%\\..\\..\\VC\\vcvarsall.bat\"\n\tif \"%errorlevel%\" neq \"0\" exit /b %errorlevel%\n) else (\n\techo Visual Studio not found. Refer to README.md. >&2\n\texit /b 1\n)\n\nendlocal & set \"vcvarsall=%vcvarsall%\"\ncall \"%vcvarsall%\" %* >nul\n"
  },
  {
    "path": "build/shared.mk",
    "content": "_COMMA = ,\n\nCLANG  ?= 0\nARCH   ?= 32\n\nifeq ($(ARCH),64)\nTAG     = x86_64\nelse\nTAG     = i686\nendif\n\nPREFIX  = $(TAG)-w64-mingw32-\n\nEXT     = $(if $(findstring .exe,$(BIN)),exe,dll)\n\nifeq ($(DEF),)\nDEF     = $(patsubst %.$(EXT),%.def,$(BIN))\nEMITDEF = 1\nendif\n\nSTATIC  = $(patsubst %.$(EXT),%.a,$(BIN))\n\nOBJDIR  = obj/$(TAG)\n\nOBJ     = $(foreach file,$(FILES),$(OBJDIR)/$(notdir $(basename $(file)).o))\nDEFDLL  = $(foreach file,$(DEFFILES),$(OBJDIR)/lib$(notdir $(basename $(file)).a))\nRES     = $(foreach file,$(RCFILES),$(OBJDIR)/$(notdir $(basename $(file)).res))\nMSG     = $(foreach file,$(MCFILES),$(OBJDIR)/$(notdir $(basename $(file)).bin))\n\nIDL     = $(foreach file,$(IDLFILES),$(OBJDIR)/$(notdir $(basename $(file))_i.c))\nIDL_H   = $(foreach file,$(IDLFILES),$(OBJDIR)/$(notdir $(basename $(file))_i.h))\nIDL_P   = $(foreach file,$(IDLFILES),$(OBJDIR)/$(notdir $(basename $(file))_p.c))\nDLLDATA = $(foreach file,$(IDLFILES),$(OBJDIR)/$(notdir $(basename $(file))_dlldata.c))\nTLB     = $(foreach file,$(IDLFILES),$(OBJDIR)/$(notdir $(basename $(file)).tlb))\n\nifeq ($(CLANG),1)\n\tCC    = $(PREFIX)clang++\nelse\n\tCC    = $(PREFIX)gcc\nendif\n\nRC      = $(PREFIX)windres\nMC      = $(PREFIX)windmc\nWIDL    = $(PREFIX)widl\nDLLTOOL = $(PREFIX)dlltool\n\nC_LANG   ?= c\nCXX_LANG ?= c++\n\noverride DEBUG := $(or $(DEBUG),1)\n\nCFLAGS   += \\\n\t-municode \\\n\t-DUNICODE \\\n\t-D_UNICODE \\\n\t-DWIN32_LEAN_AND_MEAN \\\n\t$(if $(filter 1,$(DEBUG)),-D_DEBUG -g,-DNDEBUG -Os -s) \\\n\t-fPIE \\\n\t-ffunction-sections \\\n\t-fdata-sections \\\n\t-fno-unwind-tables \\\n\t-fno-asynchronous-unwind-tables \\\n\t-fno-exceptions \\\n\t$(if $(EMITDEF),-flto,) \\\n\t-Wall \\\n\t-Wextra \\\n\t-Wpedantic \\\n\t-Wno-unused-parameter \\\n\t-Wno-unused-variable \\\n\t-Wno-unknown-pragmas \\\n\t-Wno-cast-function-type \\\n\t-Wno-missing-field-initializers \\\n\t-I../include \\\n\t-I../shared \\\n\t-I$(OBJDIR) \\\n\t-include stdafx.h\n\nifeq ($(CLANG),1)\n\tCFLAGS += \\\n\t\t-Wno-dollar-in-identifier-extension \\\n\t\t-Wno-missing-braces \\\n\t\t-Wno-duplicate-decl-specifier\nendif\n\nCXXFLAGS += \\\n\t$(CFLAGS) \\\n\t-std=c++11 \\\n\t-fno-rtti\n\nLDFLAGS  += \\\n\t-nodefaultlibs \\\n\t-nostartfiles \\\n\t-nostdlib \\\n\t-Wl,--gc-sections \\\n\t-Wl,--no-seh \\\n\t-Wl,--nxcompat \\\n\t-Wl,--enable-auto-image-base \\\n\t-Wl,--enable-stdcall-fixup \\\n\t-Wl,--out-implib,$(STATIC) \\\n\t$(if $(EMITDEF),-Wl$(_COMMA)--output-def$(_COMMA)$(DEF),$(DEF)) \\\n\t$(if $(filter 1,$(DEBUG)),,-Wl$(_COMMA)--strip-all) \\\n\t-lmsvcrt\n\nifeq ($(CLANG),1)\n\tLDFLAGS += \\\n\t\t-static\nelse\n\tLDFLAGS += \\\n\t\t-lgcc\nendif\n\nRCFLAGS  += \\\n\t-O coff \\\n\t-I$(OBJDIR) \\\n\t-I../shared\n\nMCFLAGS  +=\n\nIDLFLAGS += \\\n\t-m$(ARCH) \\\n\t--win$(ARCH) \\\n\t-Oicf \\\n\t-Ishared \\\n\t-I/usr/include/wine/wine/windows \\\n\t-L/usr/lib/x86_64-linux-gnu/wine/x86_64-windows\n\nifeq ($(ARCH),64)\n\tRCFLAGS += -F pe-x86-64\nelse\n\tCFLAGS  += -march=i486\n\tRCFLAGS += -F pe-i386\nendif\n\nall::\n\nall-32:\n\t+$(MAKE) internal-all ARCH=32\n\nall-64:\n\t+$(MAKE) internal-all ARCH=64\n\ninternal-all:: $(BIN)\nifeq ($(SIGN),1)\n\t../build/sign.sh $(BIN)\nendif\n\n$(BIN): $(OBJ) $(RES)\n\t$(CC) $^ $(CFLAGS) $(LDFLAGS) -o $@\n\n$(DEF): ;\n\n$(OBJDIR):\n\tmkdir -p $@\n\n$(OBJDIR)/lib%.a: ../LegacyUpdate/%.def\n\t$(DLLTOOL) -d $< -l $@ -D $(notdir $(basename $<).dll)\n\n$(OBJDIR)/%.o: %.c\n\t$(CC) -x $(C_LANG) $< $(CFLAGS) -c -o $@\n\n$(OBJDIR)/%.o: %.cpp\n\t$(CC) -x $(CXX_LANG) $< $(CXXFLAGS) -c -o $@\n\n$(OBJDIR)/%.o: ../shared/%.c\n\t$(CC) -x $(C_LANG) $< $(CFLAGS) -c -o $@\n\n$(OBJDIR)/%.o: ../shared/%.cpp\n\t$(CC) -x $(CXX_LANG) $< $(CXXFLAGS) -c -o $@\n\n$(OBJDIR)/%.o: $(OBJDIR)/%.c\n\t$(CC) -x $(C_LANG) $< $(CFLAGS) -c -o $@\n\n$(OBJDIR)/%.o: $(OBJDIR)/%.c\n\t$(CC) -x $(C_LANG) $< $(CFLAGS) -c -o $@\n\n$(OBJDIR)/%.res: %.rc\n\t$(RC) $< $(RCFLAGS) -o $@\n\n$(OBJDIR)/%.bin: %.mc\n\t$(MC) $< $(MCFLAGS) -h $(dir $@) -r $(dir $@)\n\n$(OBJDIR)/%.tlb: %.idl | $(OBJDIR)\n\t$(WIDL) $(IDLFLAGS) -t -o $@ $<\n\n$(OBJDIR)/%_i.h: %.idl | $(OBJDIR)\n\t$(WIDL) $(IDLFLAGS) -h -o $@ $<\n\n$(OBJDIR)/%_i.c: %.idl | $(OBJDIR)\n\t$(WIDL) $(IDLFLAGS) -u -o $@ $<\n\n$(OBJDIR)/%_p.c: %.idl | $(OBJDIR)\n\t$(WIDL) $(IDLFLAGS) -p -o $@ $<\n\n$(OBJDIR)/%_dlldata.c: %.idl | $(OBJDIR)\n\t$(WIDL) $(IDLFLAGS) --dlldata-only -o $@ $(notdir $(basename $<))\n\n$(OBJ): stdafx.h $(IDL_H)\n\n$(OBJ) $(RES) $(MSG): | $(OBJDIR)\n\n$(RES): $(MSG) $(TLB)\n\nclean::\n\trm -rf obj\n\n.PHONY: all all-32 all-64 internal-all clean\n"
  },
  {
    "path": "build/sign.cmd",
    "content": "@echo off\nsetlocal enabledelayedexpansion\n\n:: Find Visual Studio installation\ncall %~dp0getvc.cmd x64\n\n:: Sign\nsigntool sign /n \"Hashbang Productions\" /tr http://time.certum.pl/ /fd SHA1 /td SHA256 /v %*\nsigntool sign /n \"Hashbang Productions\" /tr http://time.certum.pl/ /fd SHA256 /td SHA256 /as /v %*\nif \"%errorlevel%\" neq \"0\" exit /b %errorlevel%\n"
  },
  {
    "path": "build/sign.sh",
    "content": "#!/bin/bash\nargs=(\"$(wslpath -w \"$(dirname \"$0\")/sign.cmd\")\")\nfor arg in \"$@\"; do\n\tcase \"$arg\" in\n\t\t*/*) args+=(\"$(wslpath -w \"$arg\")\") ;;\n\t\t*)   args+=(\"$arg\") ;;\n\tesac\ndone\nexec cmd.exe /c \"${args[@]}\"\n"
  },
  {
    "path": "include/com/ComClass.h",
    "content": "#pragma once\n\n#include <combaseapi.h>\n#include <oleauto.h>\n#include <ocidl.h>\n\ntemplate<typename TImpl, typename TInterface>\nclass ComClass : public TInterface {\nprotected:\n\tTImpl *m_pParent;\n\npublic:\n\tComClass(TImpl *pParent) : m_pParent(pParent) {}\n\n\t// IUnknown delegation\n\tSTDMETHODIMP QueryInterface(REFIID riid, void **ppvObject) {\n\t\treturn m_pParent->QueryInterface(riid, ppvObject);\n\t}\n\n\tSTDMETHODIMP_(ULONG) AddRef(void) {\n\t\treturn m_pParent->AddRef();\n\t}\n\n\tSTDMETHODIMP_(ULONG) Release(void) {\n\t\treturn m_pParent->Release();\n\t}\n};\n"
  },
  {
    "path": "include/com/ComPtr.h",
    "content": "#pragma once\n\n#ifdef __cplusplus\n\ntemplate<class TInterface>\nclass CComPtr {\npublic:\n\tTInterface *pointer;\n\n\tvoid *operator new(size_t) = delete;\n\tvoid *operator new[](size_t) = delete;\n\n\tvoid operator delete(void *ptr) = delete;\n\tvoid operator delete[](void *ptr) = delete;\n\n\tCComPtr(void) {\n\t\tthis->pointer = NULL;\n\t}\n\n\tCComPtr(TInterface *ptr) {\n\t\tthis->pointer = ptr;\n\t\tif (this->pointer != NULL) {\n\t\t\tthis->pointer->AddRef();\n\t\t}\n\t}\n\n\tCComPtr(CComPtr<TInterface> &other) : CComPtr(other.pointer) {}\n\n\tCComPtr(CComPtr<TInterface> &&other) {\n\t\tother.Swap(*this);\n\t}\n\n\t~CComPtr(void) {\n\t\tTInterface *pointer = this->pointer;\n\t\tif (pointer != NULL) {\n\t\t\tthis->pointer = NULL;\n\t\t\tpointer->Release();\n\t\t}\n\t}\n\n\toperator TInterface *(void) {\n\t\treturn this->pointer;\n\t}\n\n\toperator TInterface *() const {\n\t\treturn this->pointer;\n\t}\n\n\tTInterface &operator *(void) {\n\t\treturn *this->pointer;\n\t}\n\n\tTInterface &operator *() const {\n\t\treturn *this->pointer;\n\t}\n\n\tTInterface **operator &(void) {\n\t\treturn &this->pointer;\n\t}\n\n\tTInterface **operator &() const {\n\t\treturn &this->pointer;\n\t}\n\n\tTInterface *operator ->(void) {\n\t\treturn this->pointer;\n\t}\n\n\tTInterface *operator ->() const {\n\t\treturn this->pointer;\n\t}\n\n\tTInterface *operator =(TInterface *other) {\n\t\tif (this->pointer != other) {\n\t\t\tTInterface *oldPtr = this->pointer;\n\t\t\tthis->pointer = other;\n\t\t\tif (this->pointer != NULL) {\n\t\t\t\tthis->pointer->AddRef();\n\t\t\t}\n\t\t\tif (oldPtr != NULL) {\n\t\t\t\toldPtr->Release();\n\t\t\t}\n\t\t}\n\t\treturn this->pointer;\n\t}\n\n\tTInterface *operator =(const CComPtr<TInterface> &other) {\n\t\tif (this->pointer != other.pointer) {\n\t\t\tTInterface *oldPtr = this->pointer;\n\t\t\tthis->pointer = other.pointer;\n\t\t\tif (this->pointer != NULL) {\n\t\t\t\tthis->pointer->AddRef();\n\t\t\t}\n\t\t\tif (oldPtr != NULL) {\n\t\t\t\toldPtr->Release();\n\t\t\t}\n\t\t}\n\t\treturn this->pointer;\n\t}\n\n\tbool operator !() const {\n\t\treturn this->pointer == NULL;\n\t}\n\n\tbool operator <(TInterface *other) const {\n\t\treturn this->pointer < other;\n\t}\n\n\tbool operator ==(TInterface *other) const {\n\t\treturn this->pointer == other;\n\t}\n\n\tbool operator ==(const CComPtr &other) const {\n\t\treturn this->pointer == other;\n\t}\n\n\tvoid Release(void) {\n\t\tthis->~CComPtr();\n\t}\n\n\tTInterface *Detach(void) {\n\t\tTInterface *ptr = this->pointer;\n\t\tthis->pointer = NULL;\n\t\treturn ptr;\n\t}\n\n\tvoid Swap(CComPtr &other) {\n\t\tTInterface *ptr = this->pointer;\n\t\tthis->pointer = other.pointer;\n\t\tother.pointer = ptr;\n\t}\n\n\tHRESULT CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter = NULL, DWORD dwClsContext = CLSCTX_ALL) {\n\t\treturn ::CoCreateInstance(rclsid, pUnkOuter, dwClsContext, __uuidof(TInterface), (void **)&this->pointer);\n\t}\n\n\tHRESULT CoCreateInstance(REFCLSID rclsid, REFIID riid, LPUNKNOWN pUnkOuter = NULL, DWORD dwClsContext = CLSCTX_ALL) {\n\t\treturn ::CoCreateInstance(rclsid, pUnkOuter, dwClsContext, riid, (void **)&this->pointer);\n\t}\n};\n\n#endif\n"
  },
  {
    "path": "include/com/IDispatchImpl.h",
    "content": "#pragma once\n\n#include <combaseapi.h>\n#include <cguid.h>\n#include <oleauto.h>\n#include <ocidl.h>\n#include \"ComPtr.h\"\n\ntemplate<class TImpl, const GUID *plibid = NULL>\nclass IDispatchImpl : public TImpl\n{\nprivate:\n\tCComPtr<ITypeInfo> m_pTypeInfo;\n\npublic:\n\t// IUnknown\n\tSTDMETHODIMP QueryInterface(REFIID riid, void **ppvObject) {\n\t\tif (ppvObject == NULL) {\n\t\t\treturn E_POINTER;\n\t\t}\n\n\t\t*ppvObject = NULL;\n\n\t\tif (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IDispatch) || IsEqualIID(riid, __uuidof(TImpl))) {\n\t\t\t*ppvObject = (TImpl *)this;\n\t\t\tthis->AddRef();\n\t\t\treturn S_OK;\n\t\t}\n\n\t\treturn E_NOINTERFACE;\n\t}\n\n\t// IDispatch\n\tSTDMETHODIMP GetTypeInfoCount(UINT *pctinfo) {\n\t\tif (pctinfo == NULL) {\n\t\t\treturn E_POINTER;\n\t\t}\n\t\t*pctinfo = 1;\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) {\n\t\tif (ppTInfo == NULL) {\n\t\t\treturn E_POINTER;\n\t\t}\n\n\t\t*ppTInfo = NULL;\n\n\t\tif (iTInfo != 0) {\n\t\t\treturn DISP_E_BADINDEX;\n\t\t}\n\n\t\tif (m_pTypeInfo == NULL) {\n\t\t\tif (plibid == NULL) {\n\t\t\t\treturn E_NOTIMPL;\n\t\t\t}\n\n\t\t\tCComPtr<ITypeLib> pTypeLib;\n\t\t\tHRESULT hr = LoadRegTypeLib(*plibid, 1, 0, LOCALE_NEUTRAL, &pTypeLib);\n\t\t\tCHECK_HR_OR_RETURN(L\"LoadRegTypeLib\");\n\n\t\t\thr = pTypeLib->GetTypeInfoOfGuid(__uuidof(TImpl), &m_pTypeInfo);\n\t\t\tCHECK_HR_OR_RETURN(L\"GetTypeInfoOfGuid\");\n\t\t}\n\n\t\t*ppTInfo = m_pTypeInfo;\n\t\tm_pTypeInfo->AddRef();\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) {\n\t\tif (rgszNames == NULL || rgDispId == NULL) {\n\t\t\treturn E_POINTER;\n\t\t}\n\n\t\tif (!IsEqualIID(riid, IID_NULL)) {\n\t\t\treturn DISP_E_UNKNOWNINTERFACE;\n\t\t}\n\n\t\tCComPtr<ITypeInfo> pTypeInfo;\n\t\tHRESULT hr = GetTypeInfo(0, lcid, &pTypeInfo);\n\t\tCHECK_HR_OR_RETURN(L\"GetTypeInfo\");\n\n\t\treturn pTypeInfo->GetIDsOfNames(rgszNames, cNames, rgDispId);\n\t}\n\n\tSTDMETHODIMP Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) {\n\t\tif (!IsEqualIID(riid, IID_NULL)) {\n\t\t\treturn DISP_E_UNKNOWNINTERFACE;\n\t\t}\n\n\t\tCComPtr<ITypeInfo> pTypeInfo;\n\t\tHRESULT hr = GetTypeInfo(0, lcid, &pTypeInfo);\n\t\tCHECK_HR_OR_RETURN(L\"GetTypeInfo\");\n\n\t\treturn pTypeInfo->Invoke(this, dispIdMember, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);\n\t}\n};\n"
  },
  {
    "path": "include/com/IOleInPlaceActiveObjectImpl.h",
    "content": "#pragma once\n\n#include <combaseapi.h>\n#include <oleauto.h>\n#include <ocidl.h>\n#include \"ComClass.h\"\n\ntemplate<typename TImpl>\nclass IOleInPlaceActiveObjectImpl : public ComClass<TImpl, IOleInPlaceActiveObject> {\npublic:\n\tIOleInPlaceActiveObjectImpl(TImpl *pParent) : ComClass<TImpl, IOleInPlaceActiveObject>(pParent) {}\n\n\t// IOleWindow\n\tSTDMETHODIMP GetWindow(HWND *phwnd) {\n\t\tif (phwnd == NULL) {\n\t\t\treturn E_POINTER;\n\t\t}\n\t\t*phwnd = this->m_pParent->m_innerHwnd;\n\t\treturn *phwnd == NULL ? E_FAIL : S_OK;\n\t}\n\n\tSTDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode) {\n\t\treturn E_NOTIMPL;\n\t}\n\n\t// IOleInPlaceActiveObject\n\tSTDMETHODIMP TranslateAccelerator(LPMSG lpmsg) {\n\t\treturn S_FALSE;\n\t}\n\n\tSTDMETHODIMP OnFrameWindowActivate(WINBOOL fActivate) {\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP OnDocWindowActivate(WINBOOL fActivate) {\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP ResizeBorder(LPCRECT prcBorder, IOleInPlaceUIWindow *pUIWindow, WINBOOL fFrameWindow) {\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP EnableModeless(WINBOOL fEnable) {\n\t\treturn S_OK;\n\t}\n};\n"
  },
  {
    "path": "include/com/IOleInPlaceObjectImpl.h",
    "content": "#pragma once\n\n#include <combaseapi.h>\n#include <oleauto.h>\n#include <ocidl.h>\n#include \"ComClass.h\"\n\ntemplate<typename TImpl>\nclass IOleInPlaceObjectImpl : public ComClass<TImpl, IOleInPlaceObject> {\npublic:\n\tIOleInPlaceObjectImpl(TImpl *pParent) : ComClass<TImpl, IOleInPlaceObject>(pParent) {}\n\n\t// IOleWindow\n\tSTDMETHODIMP GetWindow(HWND *phwnd) {\n\t\tif (phwnd == NULL) {\n\t\t\treturn E_POINTER;\n\t\t}\n\t\t*phwnd = this->m_pParent->m_innerHwnd;\n\t\treturn *phwnd == NULL ? E_FAIL : S_OK;\n\t}\n\n\tSTDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode) {\n\t\treturn E_NOTIMPL;\n\t}\n\n\t// IOleInPlaceObject\n\tSTDMETHODIMP InPlaceDeactivate(void) {\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP UIDeactivate(void) {\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP SetObjectRects(LPCRECT lprcPosRect, LPCRECT lprcClipRect) {\n\t\tif (lprcPosRect == NULL) {\n\t\t\treturn E_POINTER;\n\t\t}\n\n\t\tif (this->m_pParent->m_innerHwnd) {\n\t\t\tSetWindowPos(\n\t\t\t\tthis->m_pParent->m_innerHwnd, NULL,\n\t\t\t\tlprcPosRect->left, lprcPosRect->top,\n\t\t\t\tlprcPosRect->right - lprcPosRect->left,\n\t\t\t\tlprcPosRect->bottom - lprcPosRect->top,\n\t\t\t\tSWP_NOZORDER | SWP_SHOWWINDOW\n\t\t\t);\n\t\t}\n\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP ReactivateAndUndo(void) {\n\t\treturn E_NOTIMPL;\n\t}\n};\n"
  },
  {
    "path": "include/com/IOleObjectImpl.h",
    "content": "#pragma once\n\n#include <combaseapi.h>\n#include <oleauto.h>\n#include <ocidl.h>\n#include \"ComClass.h\"\n\ntemplate<typename TImpl>\nclass IOleObjectImpl : public ComClass<TImpl, IOleObject> {\npublic:\n\tIOleObjectImpl(TImpl *pParent) : ComClass<TImpl, IOleObject>(pParent) {}\n\n\t// IOleObject\n\tSTDMETHODIMP SetClientSite(IOleClientSite *pClientSite) {\n\t\tif (this->m_pParent->m_clientSite) {\n\t\t\tthis->m_pParent->m_clientSite->Release();\n\t\t}\n\t\tthis->m_pParent->m_clientSite = pClientSite;\n\t\tif (this->m_pParent->m_clientSite) {\n\t\t\tthis->m_pParent->m_clientSite->AddRef();\n\t\t}\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP GetClientSite(IOleClientSite **ppClientSite) {\n\t\tif (ppClientSite == NULL) {\n\t\t\treturn E_POINTER;\n\t\t}\n\n\t\tif (this->m_pParent->m_clientSite == NULL) {\n\t\t\t*ppClientSite = NULL;\n\t\t\treturn E_FAIL;\n\t\t}\n\n\t\tthis->m_pParent->m_clientSite->AddRef();\n\t\t*ppClientSite = this->m_pParent->m_clientSite;\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP SetHostNames(LPCOLESTR szContainerApp, LPCOLESTR szContainerObj) {\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP Close(DWORD dwSaveOption) {\n\t\tif (this->m_pParent->m_clientSite) {\n\t\t\tthis->m_pParent->m_clientSite->Release();\n\t\t\tthis->m_pParent->m_clientSite = NULL;\n\t\t}\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP SetMoniker(DWORD dwWhichMoniker, IMoniker *pmk) {\n\t\treturn E_NOTIMPL;\n\t}\n\n\tSTDMETHODIMP GetMoniker(DWORD dwAssign, DWORD dwWhichMoniker, IMoniker **ppmk) {\n\t\treturn E_NOTIMPL;\n\t}\n\n\tSTDMETHODIMP InitFromData(IDataObject *pDataObject, BOOL fCreation, DWORD dwReserved) {\n\t\treturn E_NOTIMPL;\n\t}\n\n\tSTDMETHODIMP GetClipboardData(DWORD dwReserved, IDataObject **ppDataObject) {\n\t\treturn E_NOTIMPL;\n\t}\n\n\tSTDMETHODIMP DoVerb(LONG iVerb, LPMSG lpmsg, IOleClientSite *pActiveSite, LONG lindex, HWND hwndParent, LPCRECT lprcPosRect) {\n\t\tswitch (iVerb) {\n\t\tcase OLEIVERB_INPLACEACTIVATE:\n\t\tcase OLEIVERB_UIACTIVATE:\n\t\tcase OLEIVERB_SHOW:\n\t\t\treturn S_OK;\n\n\t\tdefault:\n\t\t\treturn OLEOBJ_S_INVALIDVERB;\n\t\t}\n\t}\n\n\tSTDMETHODIMP EnumVerbs(IEnumOLEVERB **ppEnumOleVerb) {\n\t\tif (ppEnumOleVerb == NULL) {\n\t\t\treturn E_POINTER;\n\t\t}\n\t\treturn OleRegEnumVerbs(__uuidof(TImpl), ppEnumOleVerb);\n\t}\n\n\tSTDMETHODIMP Update(void) {\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP IsUpToDate(void) {\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP GetUserClassID(CLSID *pClsid) {\n\t\tif (pClsid == NULL) {\n\t\t\treturn E_POINTER;\n\t\t}\n\t\t*pClsid = __uuidof(TImpl);\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP GetUserType(DWORD dwFormOfType, LPOLESTR *pszUserType) {\n\t\tif (pszUserType == NULL) {\n\t\t\treturn E_POINTER;\n\t\t}\n\t\treturn OleRegGetUserType(__uuidof(TImpl), dwFormOfType, pszUserType);\n\t}\n\n\tSTDMETHODIMP SetExtent(DWORD dwDrawAspect, SIZEL *psizel) {\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP GetExtent(DWORD dwDrawAspect, SIZEL *psizel) {\n\t\tif (psizel == NULL) {\n\t\t\treturn E_POINTER;\n\t\t}\n\t\tpsizel->cx = 0;\n\t\tpsizel->cy = 0;\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP Advise(IAdviseSink *pAdvSink, DWORD *pdwConnection) {\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP Unadvise(DWORD dwConnection) {\n\t\treturn E_NOTIMPL;\n\t}\n\n\tSTDMETHODIMP EnumAdvise(IEnumSTATDATA **ppenumAdvise) {\n\t\treturn E_NOTIMPL;\n\t}\n\n\tSTDMETHODIMP GetMiscStatus(DWORD dwAspect, DWORD *pdwStatus) {\n\t\treturn OleRegGetMiscStatus(__uuidof(TImpl), dwAspect, pdwStatus);\n\t}\n\n\tSTDMETHODIMP SetColorScheme(LOGPALETTE *pLogpal) {\n\t\treturn E_NOTIMPL;\n\t}\n};\n"
  },
  {
    "path": "include/com/IQuickActivateImpl.h",
    "content": "#pragma once\n\n#include <combaseapi.h>\n#include <oleauto.h>\n#include <ocidl.h>\n#include \"ComClass.h\"\n\ntemplate<typename TImpl>\nclass IQuickActivateImpl : public ComClass<TImpl, IQuickActivate> {\npublic:\n\tIQuickActivateImpl(TImpl *pParent) : ComClass<TImpl, IQuickActivate>(pParent) {}\n\n\t// IQuickActivate\n\tSTDMETHODIMP QuickActivate(QACONTAINER *pQaContainer, QACONTROL *pQaControl) {\n\t\tCComPtr<IOleObject> oleObject;\n\t\tCComPtr<IViewObjectEx> viewObject;\n\t\tthis->m_pParent->QueryInterface(IID_IOleObject, (void **)&oleObject);\n\t\tthis->m_pParent->QueryInterface(IID_IViewObjectEx, (void **)&viewObject);\n\t\tif (!oleObject || !viewObject) {\n\t\t\treturn E_NOINTERFACE;\n\t\t}\n\n\t\toleObject->SetClientSite(pQaContainer->pClientSite);\n\n\t\tif (pQaContainer->pAdviseSink) {\n\t\t\tviewObject->SetAdvise(DVASPECT_CONTENT, 0, pQaContainer->pAdviseSink);\n\t\t}\n\n\t\toleObject->GetMiscStatus(DVASPECT_CONTENT, &pQaControl->dwMiscStatus);\n\t\tviewObject->GetViewStatus(&pQaControl->dwViewStatus);\n\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP SetContentExtent(LPSIZEL pSizel) {\n\t\tCComPtr<IOleObject> oleObject;\n\t\tthis->m_pParent->QueryInterface(IID_IOleObject, (void **)&oleObject);\n\t\tif (!oleObject) {\n\t\t\treturn E_NOINTERFACE;\n\t\t}\n\n\t\treturn oleObject->SetExtent(DVASPECT_CONTENT, pSizel);\n\t}\n\n\tSTDMETHODIMP GetContentExtent(LPSIZEL pSizel) {\n\t\tCComPtr<IOleObject> oleObject;\n\t\tthis->m_pParent->QueryInterface(IID_IOleObject, (void **)&oleObject);\n\t\tif (!oleObject) {\n\t\t\treturn E_NOINTERFACE;\n\t\t}\n\n\t\treturn oleObject->GetExtent(DVASPECT_CONTENT, pSizel);\n\t}\n};\n"
  },
  {
    "path": "include/com/IUnknownImpl.h",
    "content": "#pragma once\n\n#include <combaseapi.h>\n#include <oleauto.h>\n#include <ocidl.h>\n#include \"ComClass.h\"\n\nclass IUnknownImpl {\nprivate:\n\tLONG m_refCount;\n\nprotected:\n\tIUnknownImpl() : m_refCount(1) {}\n\n\tvirtual ~IUnknownImpl(void) {\n\t\tif (m_refCount != 0) {\n\t\t\tDebugBreak();\n\t\t}\n\t}\n\npublic:\n\t// IUnknown\n\tSTDMETHODIMP QueryInterface(REFIID riid, void **ppvObject) {\n\t\tif (ppvObject == NULL) {\n\t\t\treturn E_POINTER;\n\t\t}\n\n\t\t*ppvObject = NULL;\n\n\t\tif (IsEqualIID(riid, IID_IUnknown)) {\n\t\t\t*ppvObject = (IUnknown *)this;\n\t\t}\n\n\t\tif (*ppvObject != NULL) {\n\t\t\tthis->AddRef();\n\t\t\treturn S_OK;\n\t\t}\n\n\t\treturn E_NOINTERFACE;\n\t}\n\n\tSTDMETHODIMP_(ULONG) AddRef(void) {\n\t\treturn InterlockedIncrement(&m_refCount);\n\t}\n\n\tSTDMETHODIMP_(ULONG) Release(void) {\n\t\tULONG count = InterlockedDecrement(&m_refCount);\n\t\tif (count == 0) {\n\t\t\tdelete this;\n\t\t}\n\t\treturn count;\n\t}\n};\n"
  },
  {
    "path": "include/com/IViewObjectExImpl.h",
    "content": "#pragma once\n\n#include <combaseapi.h>\n#include <oleauto.h>\n#include <ocidl.h>\n#include \"ComClass.h\"\n\ntemplate<typename TImpl>\nclass IViewObjectExImpl : public ComClass<TImpl, IViewObjectEx> {\npublic:\n\tIViewObjectExImpl(TImpl *pParent) : ComClass<TImpl, IViewObjectEx>(pParent) {}\n\n\t// IViewObject\n\tSTDMETHODIMP 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) {\n\t\treturn this->m_pParent->OnDraw(dwDrawAspect, lindex, pvAspect, ptd, hdcTargetDev, hdcDraw, lprcBounds, lprcWBounds, pfnContinue, dwContinue);\n\t}\n\n\tSTDMETHODIMP GetColorSet(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hicTargetDev, LOGPALETTE **ppColorSet) {\n\t\tif (ppColorSet == NULL) {\n\t\t\treturn E_POINTER;\n\t\t}\n\t\t*ppColorSet = NULL;\n\t\treturn S_FALSE;\n\t}\n\n\tSTDMETHODIMP Freeze(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DWORD *pdwFreeze) {\n\t\treturn E_NOTIMPL;\n\t}\n\n\tSTDMETHODIMP Unfreeze(DWORD dwFreeze) {\n\t\treturn E_NOTIMPL;\n\t}\n\n\tSTDMETHODIMP SetAdvise(DWORD aspects, DWORD advf, IAdviseSink *pAdvSink) {\n\t\tif (this->m_pParent->m_adviseSink) {\n\t\t\tthis->m_pParent->m_adviseSink->Release();\n\t\t}\n\t\tthis->m_pParent->m_adviseSink = pAdvSink;\n\t\tif (this->m_pParent->m_adviseSink) {\n\t\t\tthis->m_pParent->m_adviseSink->AddRef();\n\t\t}\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP GetAdvise(DWORD *pAspects, DWORD *pAdvf, IAdviseSink **ppAdvSink) {\n\t\tif (pAspects) {\n\t\t\t*pAspects = DVASPECT_CONTENT;\n\t\t}\n\t\tif (pAdvf) {\n\t\t\t*pAdvf = 0;\n\t\t}\n\t\tif (ppAdvSink) {\n\t\t\t*ppAdvSink = this->m_pParent->m_adviseSink;\n\t\t}\n\t\treturn S_OK;\n\t}\n\n\t// IViewObject2\n\tSTDMETHODIMP GetExtent(DWORD dwAspect, LONG lindex, DVTARGETDEVICE *ptd, LPSIZEL lpsizel) {\n\t\tif (lpsizel == NULL) {\n\t\t\treturn E_POINTER;\n\t\t}\n\n\t\tif (dwAspect != DVASPECT_CONTENT) {\n\t\t\treturn DV_E_DVASPECT;\n\t\t}\n\n\t\tif (!this->m_pParent->m_innerHwnd) {\n\t\t\tlpsizel->cx = 0;\n\t\t\tlpsizel->cy = 0;\n\t\t\treturn E_FAIL;\n\t\t}\n\n\t\tRECT rect;\n\t\tGetClientRect(this->m_pParent->m_innerHwnd, &rect);\n\n\t\t// Convert to HIMETRIC\n\t\tHDC hdc = GetDC(NULL);\n\t\tint ppiX = GetDeviceCaps(hdc, LOGPIXELSX);\n\t\tint ppiY = GetDeviceCaps(hdc, LOGPIXELSY);\n\t\tReleaseDC(NULL, hdc);\n\n\t\tlpsizel->cx = MAP_PIX_TO_LOGHIM(rect.right - rect.left, ppiX);\n\t\tlpsizel->cy = MAP_PIX_TO_LOGHIM(rect.bottom - rect.top, ppiY);\n\t\treturn S_OK;\n\t}\n\n\t// IViewObjectEx\n\tSTDMETHODIMP GetRect(DWORD dwAspect, LPRECTL pRect) {\n\t\tif (pRect == NULL) {\n\t\t\treturn E_POINTER;\n\t\t}\n\n\t\tif (dwAspect != DVASPECT_CONTENT) {\n\t\t\treturn DV_E_DVASPECT;\n\t\t}\n\n\t\tif (!this->m_pParent->m_innerHwnd) {\n\t\t\treturn E_FAIL;\n\t\t}\n\n\t\tRECT rect;\n\t\tGetClientRect(this->m_pParent->m_innerHwnd, &rect);\n\t\tpRect->left = rect.left;\n\t\tpRect->top = rect.top;\n\t\tpRect->right = rect.right;\n\t\tpRect->bottom = rect.bottom;\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP GetViewStatus(DWORD *pdwStatus) {\n\t\tif (pdwStatus == NULL) {\n\t\t\treturn E_POINTER;\n\t\t}\n\t\t*pdwStatus = VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE;\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP QueryHitPoint(DWORD dwAspect, LPCRECT pRectBounds, POINT ptlLoc, LONG lCloseHint, DWORD *pHitResult) {\n\t\tif (pRectBounds == NULL || pHitResult == NULL) {\n\t\t\treturn E_POINTER;\n\t\t}\n\t\t*pHitResult = PtInRect(pRectBounds, *(POINT *)&ptlLoc) ? HITRESULT_HIT : HITRESULT_OUTSIDE;\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP QueryHitRect(DWORD dwAspect, LPCRECT pRectBounds, LPCRECT pRectLoc, LONG lCloseHint, DWORD *pHitResult) {\n\t\tif (pRectBounds == NULL || pRectLoc == NULL || pHitResult == NULL) {\n\t\t\treturn E_POINTER;\n\t\t}\n\t\t*pHitResult = IntersectRect((LPRECT)pHitResult, pRectBounds, pRectLoc) ? HITRESULT_HIT : HITRESULT_OUTSIDE;\n\t\treturn S_OK;\n\t}\n\n\tSTDMETHODIMP GetNaturalExtent(DWORD dwAspect, LONG lindex, DVTARGETDEVICE *ptd, HDC hicTargetDev, DVEXTENTINFO *pExtentInfo, LPSIZEL pSizel) {\n\t\treturn GetExtent(dwAspect, lindex, ptd, pSizel);\n\t}\n};\n"
  },
  {
    "path": "include/com/helpers.h",
    "content": "#pragma once\n\n#include <combaseapi.h>\n#include <oleauto.h>\n#include <ocidl.h>\n\n#define DEFINE_UUIDOF(cls, uuid) \\\n\ttemplate<> const GUID &__mingw_uuidof<cls>(void) { \\\n\t\treturn uuid; \\\n\t}\n\n#define HIMETRIC_PER_INCH 2540\n#define MAP_PIX_TO_LOGHIM(x, ppli) MulDiv(HIMETRIC_PER_INCH, (x), (ppli))\n#define MAP_LOGHIM_TO_PIX(x, ppli) MulDiv((ppli), (x), HIMETRIC_PER_INCH)\n"
  },
  {
    "path": "include/com.h",
    "content": "#pragma once\n\n#include <com/helpers.h>\n#include <com/ComPtr.h>\n#include <com/ComClass.h>\n#include <com/IDispatchImpl.h>\n#include <com/IOleInPlaceActiveObjectImpl.h>\n#include <com/IOleInPlaceObjectImpl.h>\n#include <com/IOleObjectImpl.h>\n#include <com/IQuickActivateImpl.h>\n#include <com/IUnknownImpl.h>\n#include <com/IViewObjectExImpl.h>\n"
  },
  {
    "path": "include/licdll.h",
    "content": "/*** Autogenerated by WIDL 8.5 from licdll.idl - Do not edit ***/\n\n#ifdef _WIN32\n#ifndef __REQUIRED_RPCNDR_H_VERSION__\n#define __REQUIRED_RPCNDR_H_VERSION__ 475\n#endif\n#include <rpc.h>\n#include <rpcndr.h>\n#endif\n\n#ifndef COM_NO_WINDOWS_H\n#include <windows.h>\n#include <ole2.h>\n#endif\n\n#ifndef __licdll_h__\n#define __licdll_h__\n\n#ifndef __WIDL_INLINE\n#if defined(__cplusplus) || defined(_MSC_VER)\n#define __WIDL_INLINE inline\n#elif defined(__GNUC__)\n#define __WIDL_INLINE __inline__\n#endif\n#endif\n\n/* Forward declarations */\n\n#ifndef __COMLicenseAgent_FWD_DEFINED__\n#define __COMLicenseAgent_FWD_DEFINED__\n#ifdef __cplusplus\ntypedef class COMLicenseAgent COMLicenseAgent;\n#else\ntypedef struct COMLicenseAgent COMLicenseAgent;\n#endif /* defined __cplusplus */\n#endif /* defined __COMLicenseAgent_FWD_DEFINED__ */\n\n#ifndef __ICOMLicenseAgent_FWD_DEFINED__\n#define __ICOMLicenseAgent_FWD_DEFINED__\ntypedef interface ICOMLicenseAgent ICOMLicenseAgent;\n#ifdef __cplusplus\ninterface ICOMLicenseAgent;\n#endif /* __cplusplus */\n#endif\n\n#ifndef __ICOMLicenseAgent2_FWD_DEFINED__\n#define __ICOMLicenseAgent2_FWD_DEFINED__\ntypedef interface ICOMLicenseAgent2 ICOMLicenseAgent2;\n#ifdef __cplusplus\ninterface ICOMLicenseAgent2;\n#endif /* __cplusplus */\n#endif\n\n/* Headers for imported files */\n\n#include <oaidl.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef __LICDLLLib_LIBRARY_DEFINED__\n#define __LICDLLLib_LIBRARY_DEFINED__\n\nDEFINE_GUID(LIBID_LICDLLLib, 0xc7879482, 0xf798, 0x4a74, 0xaf,0x43, 0xe8,0x87,0xfb,0xdc,0xed,0x40);\n\n#ifndef __ICOMLicenseAgent_FWD_DEFINED__\n#define __ICOMLicenseAgent_FWD_DEFINED__\ntypedef interface ICOMLicenseAgent ICOMLicenseAgent;\n#ifdef __cplusplus\ninterface ICOMLicenseAgent;\n#endif /* __cplusplus */\n#endif\n\n#ifndef __ICOMLicenseAgent2_FWD_DEFINED__\n#define __ICOMLicenseAgent2_FWD_DEFINED__\ntypedef interface ICOMLicenseAgent2 ICOMLicenseAgent2;\n#ifdef __cplusplus\ninterface ICOMLicenseAgent2;\n#endif /* __cplusplus */\n#endif\n\n/*****************************************************************************\n * COMLicenseAgent coclass\n */\n\nDEFINE_GUID(CLSID_COMLicenseAgent, 0xacadf079, 0xcbcd, 0x4032, 0x83,0xf2, 0xfa,0x47,0xc4,0xdb,0x09,0x6f);\n\n#ifdef __cplusplus\nclass DECLSPEC_UUID(\"acadf079-cbcd-4032-83f2-fa47c4db096f\") COMLicenseAgent;\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(COMLicenseAgent, 0xacadf079, 0xcbcd, 0x4032, 0x83,0xf2, 0xfa,0x47,0xc4,0xdb,0x09,0x6f)\n#endif\n#endif\n\n/*****************************************************************************\n * ICOMLicenseAgent interface\n */\n#ifndef __ICOMLicenseAgent_INTERFACE_DEFINED__\n#define __ICOMLicenseAgent_INTERFACE_DEFINED__\n\nDEFINE_GUID(IID_ICOMLicenseAgent, 0xb8cbad79, 0x3f1f, 0x481a, 0xbb,0x0c, 0xe7,0xbb,0xd7,0x7b,0xdd,0xd1);\n#if defined(__cplusplus) && !defined(CINTERFACE)\nMIDL_INTERFACE(\"b8cbad79-3f1f-481a-bb0c-e7bbd77bddd1\")\nICOMLicenseAgent : public IDispatch\n{\n    virtual HRESULT STDMETHODCALLTYPE Initialize(\n        ULONG dwBPC,\n        ULONG dwMode,\n        BSTR bstrLicSource,\n        ULONG *pdwRetCode) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetFirstName(\n        BSTR *pbstrVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetFirstName(\n        BSTR bstrNewVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetLastName(\n        BSTR *pbstrVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetLastName(\n        BSTR bstrNewVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetOrgName(\n        BSTR *pbstrVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetOrgName(\n        BSTR bstrNewVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetEmail(\n        BSTR *pbstrVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetEmail(\n        BSTR bstrNewVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetPhone(\n        BSTR *pbstrVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetPhone(\n        BSTR bstrNewVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetAddress1(\n        BSTR *pbstrVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetAddress1(\n        BSTR bstrNewVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetCity(\n        BSTR *pbstrVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetCity(\n        BSTR bstrNewVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetState(\n        BSTR *pbstrVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetState(\n        BSTR bstrNewVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetCountryCode(\n        BSTR *pbstrVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetCountryCode(\n        BSTR bstrNewVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetCountryDesc(\n        BSTR *pbstrVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetCountryDesc(\n        BSTR bstrNewVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetZip(\n        BSTR *pbstrVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetZip(\n        BSTR bstrNewVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetIsoLanguage(\n        ULONG *pdwVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetIsoLanguage(\n        ULONG dwNewVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetMSUpdate(\n        BSTR *pbstrVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetMSUpdate(\n        BSTR bstrNewVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetMSOffer(\n        BSTR *pbstrVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetMSOffer(\n        BSTR bstrNewVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetOtherOffer(\n        BSTR *pbstrVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetOtherOffer(\n        BSTR bstrNewVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetAddress2(\n        BSTR *pbstrVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetAddress2(\n        BSTR bstrNewVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE AsyncProcessHandshakeRequest(\n        LONG bReviseCustInfo) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE AsyncProcessNewLicenseRequest(\n        ) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE AsyncProcessReissueLicenseRequest(\n        ) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE AsyncProcessReviseCustInfoRequest(\n        ) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetAsyncProcessReturnCode(\n        ULONG *pdwRetCode) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE AsyncProcessDroppedLicenseRequest(\n        ) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GenerateInstallationId(\n        BSTR *pbstrVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE DepositConfirmationId(\n        BSTR bstrVal,\n        ULONG *pdwRetCode) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetExpirationInfo(\n        ULONG *pdwWPALeft,\n        ULONG *pdwEvalLeft) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE AsyncProcessRegistrationRequest(\n        ) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE ProcessHandshakeRequest(\n        LONG bReviseCustInfo) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE ProcessNewLicenseRequest(\n        ) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE ProcessDroppedLicenseRequest(\n        ) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE ProcessReissueLicenseRequest(\n        ) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE ProcessReviseCustInfoRequest(\n        ) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE EnsureInternetConnection(\n        ) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetProductKey(\n        LPWSTR pszNewProductKey) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetProductID(\n        BSTR *pbstrVal) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE VerifyCheckDigits(\n        BSTR bstrCIDIID,\n        LONG *pbValue) = 0;\n\n};\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(ICOMLicenseAgent, 0xb8cbad79, 0x3f1f, 0x481a, 0xbb,0x0c, 0xe7,0xbb,0xd7,0x7b,0xdd,0xd1)\n#endif\n#else\ntypedef struct ICOMLicenseAgentVtbl {\n    BEGIN_INTERFACE\n\n    /*** IUnknown methods ***/\n    HRESULT (STDMETHODCALLTYPE *QueryInterface)(\n        ICOMLicenseAgent *This,\n        REFIID riid,\n        void **ppvObject);\n\n    ULONG (STDMETHODCALLTYPE *AddRef)(\n        ICOMLicenseAgent *This);\n\n    ULONG (STDMETHODCALLTYPE *Release)(\n        ICOMLicenseAgent *This);\n\n    /*** IDispatch methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(\n        ICOMLicenseAgent *This,\n        UINT *pctinfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(\n        ICOMLicenseAgent *This,\n        UINT iTInfo,\n        LCID lcid,\n        ITypeInfo **ppTInfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(\n        ICOMLicenseAgent *This,\n        REFIID riid,\n        LPOLESTR *rgszNames,\n        UINT cNames,\n        LCID lcid,\n        DISPID *rgDispId);\n\n    HRESULT (STDMETHODCALLTYPE *Invoke)(\n        ICOMLicenseAgent *This,\n        DISPID dispIdMember,\n        REFIID riid,\n        LCID lcid,\n        WORD wFlags,\n        DISPPARAMS *pDispParams,\n        VARIANT *pVarResult,\n        EXCEPINFO *pExcepInfo,\n        UINT *puArgErr);\n\n    /*** ICOMLicenseAgent methods ***/\n    HRESULT (STDMETHODCALLTYPE *Initialize)(\n        ICOMLicenseAgent *This,\n        ULONG dwBPC,\n        ULONG dwMode,\n        BSTR bstrLicSource,\n        ULONG *pdwRetCode);\n\n    HRESULT (STDMETHODCALLTYPE *GetFirstName)(\n        ICOMLicenseAgent *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetFirstName)(\n        ICOMLicenseAgent *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetLastName)(\n        ICOMLicenseAgent *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetLastName)(\n        ICOMLicenseAgent *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetOrgName)(\n        ICOMLicenseAgent *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetOrgName)(\n        ICOMLicenseAgent *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetEmail)(\n        ICOMLicenseAgent *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetEmail)(\n        ICOMLicenseAgent *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetPhone)(\n        ICOMLicenseAgent *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetPhone)(\n        ICOMLicenseAgent *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetAddress1)(\n        ICOMLicenseAgent *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetAddress1)(\n        ICOMLicenseAgent *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetCity)(\n        ICOMLicenseAgent *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetCity)(\n        ICOMLicenseAgent *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetState)(\n        ICOMLicenseAgent *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetState)(\n        ICOMLicenseAgent *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetCountryCode)(\n        ICOMLicenseAgent *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetCountryCode)(\n        ICOMLicenseAgent *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetCountryDesc)(\n        ICOMLicenseAgent *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetCountryDesc)(\n        ICOMLicenseAgent *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetZip)(\n        ICOMLicenseAgent *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetZip)(\n        ICOMLicenseAgent *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetIsoLanguage)(\n        ICOMLicenseAgent *This,\n        ULONG *pdwVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetIsoLanguage)(\n        ICOMLicenseAgent *This,\n        ULONG dwNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetMSUpdate)(\n        ICOMLicenseAgent *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetMSUpdate)(\n        ICOMLicenseAgent *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetMSOffer)(\n        ICOMLicenseAgent *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetMSOffer)(\n        ICOMLicenseAgent *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetOtherOffer)(\n        ICOMLicenseAgent *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetOtherOffer)(\n        ICOMLicenseAgent *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetAddress2)(\n        ICOMLicenseAgent *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetAddress2)(\n        ICOMLicenseAgent *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *AsyncProcessHandshakeRequest)(\n        ICOMLicenseAgent *This,\n        LONG bReviseCustInfo);\n\n    HRESULT (STDMETHODCALLTYPE *AsyncProcessNewLicenseRequest)(\n        ICOMLicenseAgent *This);\n\n    HRESULT (STDMETHODCALLTYPE *AsyncProcessReissueLicenseRequest)(\n        ICOMLicenseAgent *This);\n\n    HRESULT (STDMETHODCALLTYPE *AsyncProcessReviseCustInfoRequest)(\n        ICOMLicenseAgent *This);\n\n    HRESULT (STDMETHODCALLTYPE *GetAsyncProcessReturnCode)(\n        ICOMLicenseAgent *This,\n        ULONG *pdwRetCode);\n\n    HRESULT (STDMETHODCALLTYPE *AsyncProcessDroppedLicenseRequest)(\n        ICOMLicenseAgent *This);\n\n    HRESULT (STDMETHODCALLTYPE *GenerateInstallationId)(\n        ICOMLicenseAgent *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *DepositConfirmationId)(\n        ICOMLicenseAgent *This,\n        BSTR bstrVal,\n        ULONG *pdwRetCode);\n\n    HRESULT (STDMETHODCALLTYPE *GetExpirationInfo)(\n        ICOMLicenseAgent *This,\n        ULONG *pdwWPALeft,\n        ULONG *pdwEvalLeft);\n\n    HRESULT (STDMETHODCALLTYPE *AsyncProcessRegistrationRequest)(\n        ICOMLicenseAgent *This);\n\n    HRESULT (STDMETHODCALLTYPE *ProcessHandshakeRequest)(\n        ICOMLicenseAgent *This,\n        LONG bReviseCustInfo);\n\n    HRESULT (STDMETHODCALLTYPE *ProcessNewLicenseRequest)(\n        ICOMLicenseAgent *This);\n\n    HRESULT (STDMETHODCALLTYPE *ProcessDroppedLicenseRequest)(\n        ICOMLicenseAgent *This);\n\n    HRESULT (STDMETHODCALLTYPE *ProcessReissueLicenseRequest)(\n        ICOMLicenseAgent *This);\n\n    HRESULT (STDMETHODCALLTYPE *ProcessReviseCustInfoRequest)(\n        ICOMLicenseAgent *This);\n\n    HRESULT (STDMETHODCALLTYPE *EnsureInternetConnection)(\n        ICOMLicenseAgent *This);\n\n    HRESULT (STDMETHODCALLTYPE *SetProductKey)(\n        ICOMLicenseAgent *This,\n        LPWSTR pszNewProductKey);\n\n    HRESULT (STDMETHODCALLTYPE *GetProductID)(\n        ICOMLicenseAgent *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *VerifyCheckDigits)(\n        ICOMLicenseAgent *This,\n        BSTR bstrCIDIID,\n        LONG *pbValue);\n\n    END_INTERFACE\n} ICOMLicenseAgentVtbl;\n\ninterface ICOMLicenseAgent {\n    CONST_VTBL ICOMLicenseAgentVtbl* lpVtbl;\n};\n\n#ifdef COBJMACROS\n#ifndef WIDL_C_INLINE_WRAPPERS\n/*** IUnknown methods ***/\n#define ICOMLicenseAgent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)\n#define ICOMLicenseAgent_AddRef(This) (This)->lpVtbl->AddRef(This)\n#define ICOMLicenseAgent_Release(This) (This)->lpVtbl->Release(This)\n/*** IDispatch methods ***/\n#define ICOMLicenseAgent_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)\n#define ICOMLicenseAgent_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)\n#define ICOMLicenseAgent_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\n#define ICOMLicenseAgent_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\n/*** ICOMLicenseAgent methods ***/\n#define ICOMLicenseAgent_Initialize(This,dwBPC,dwMode,bstrLicSource,pdwRetCode) (This)->lpVtbl->Initialize(This,dwBPC,dwMode,bstrLicSource,pdwRetCode)\n#define ICOMLicenseAgent_GetFirstName(This,pbstrVal) (This)->lpVtbl->GetFirstName(This,pbstrVal)\n#define ICOMLicenseAgent_SetFirstName(This,bstrNewVal) (This)->lpVtbl->SetFirstName(This,bstrNewVal)\n#define ICOMLicenseAgent_GetLastName(This,pbstrVal) (This)->lpVtbl->GetLastName(This,pbstrVal)\n#define ICOMLicenseAgent_SetLastName(This,bstrNewVal) (This)->lpVtbl->SetLastName(This,bstrNewVal)\n#define ICOMLicenseAgent_GetOrgName(This,pbstrVal) (This)->lpVtbl->GetOrgName(This,pbstrVal)\n#define ICOMLicenseAgent_SetOrgName(This,bstrNewVal) (This)->lpVtbl->SetOrgName(This,bstrNewVal)\n#define ICOMLicenseAgent_GetEmail(This,pbstrVal) (This)->lpVtbl->GetEmail(This,pbstrVal)\n#define ICOMLicenseAgent_SetEmail(This,bstrNewVal) (This)->lpVtbl->SetEmail(This,bstrNewVal)\n#define ICOMLicenseAgent_GetPhone(This,pbstrVal) (This)->lpVtbl->GetPhone(This,pbstrVal)\n#define ICOMLicenseAgent_SetPhone(This,bstrNewVal) (This)->lpVtbl->SetPhone(This,bstrNewVal)\n#define ICOMLicenseAgent_GetAddress1(This,pbstrVal) (This)->lpVtbl->GetAddress1(This,pbstrVal)\n#define ICOMLicenseAgent_SetAddress1(This,bstrNewVal) (This)->lpVtbl->SetAddress1(This,bstrNewVal)\n#define ICOMLicenseAgent_GetCity(This,pbstrVal) (This)->lpVtbl->GetCity(This,pbstrVal)\n#define ICOMLicenseAgent_SetCity(This,bstrNewVal) (This)->lpVtbl->SetCity(This,bstrNewVal)\n#define ICOMLicenseAgent_GetState(This,pbstrVal) (This)->lpVtbl->GetState(This,pbstrVal)\n#define ICOMLicenseAgent_SetState(This,bstrNewVal) (This)->lpVtbl->SetState(This,bstrNewVal)\n#define ICOMLicenseAgent_GetCountryCode(This,pbstrVal) (This)->lpVtbl->GetCountryCode(This,pbstrVal)\n#define ICOMLicenseAgent_SetCountryCode(This,bstrNewVal) (This)->lpVtbl->SetCountryCode(This,bstrNewVal)\n#define ICOMLicenseAgent_GetCountryDesc(This,pbstrVal) (This)->lpVtbl->GetCountryDesc(This,pbstrVal)\n#define ICOMLicenseAgent_SetCountryDesc(This,bstrNewVal) (This)->lpVtbl->SetCountryDesc(This,bstrNewVal)\n#define ICOMLicenseAgent_GetZip(This,pbstrVal) (This)->lpVtbl->GetZip(This,pbstrVal)\n#define ICOMLicenseAgent_SetZip(This,bstrNewVal) (This)->lpVtbl->SetZip(This,bstrNewVal)\n#define ICOMLicenseAgent_GetIsoLanguage(This,pdwVal) (This)->lpVtbl->GetIsoLanguage(This,pdwVal)\n#define ICOMLicenseAgent_SetIsoLanguage(This,dwNewVal) (This)->lpVtbl->SetIsoLanguage(This,dwNewVal)\n#define ICOMLicenseAgent_GetMSUpdate(This,pbstrVal) (This)->lpVtbl->GetMSUpdate(This,pbstrVal)\n#define ICOMLicenseAgent_SetMSUpdate(This,bstrNewVal) (This)->lpVtbl->SetMSUpdate(This,bstrNewVal)\n#define ICOMLicenseAgent_GetMSOffer(This,pbstrVal) (This)->lpVtbl->GetMSOffer(This,pbstrVal)\n#define ICOMLicenseAgent_SetMSOffer(This,bstrNewVal) (This)->lpVtbl->SetMSOffer(This,bstrNewVal)\n#define ICOMLicenseAgent_GetOtherOffer(This,pbstrVal) (This)->lpVtbl->GetOtherOffer(This,pbstrVal)\n#define ICOMLicenseAgent_SetOtherOffer(This,bstrNewVal) (This)->lpVtbl->SetOtherOffer(This,bstrNewVal)\n#define ICOMLicenseAgent_GetAddress2(This,pbstrVal) (This)->lpVtbl->GetAddress2(This,pbstrVal)\n#define ICOMLicenseAgent_SetAddress2(This,bstrNewVal) (This)->lpVtbl->SetAddress2(This,bstrNewVal)\n#define ICOMLicenseAgent_AsyncProcessHandshakeRequest(This,bReviseCustInfo) (This)->lpVtbl->AsyncProcessHandshakeRequest(This,bReviseCustInfo)\n#define ICOMLicenseAgent_AsyncProcessNewLicenseRequest(This) (This)->lpVtbl->AsyncProcessNewLicenseRequest(This)\n#define ICOMLicenseAgent_AsyncProcessReissueLicenseRequest(This) (This)->lpVtbl->AsyncProcessReissueLicenseRequest(This)\n#define ICOMLicenseAgent_AsyncProcessReviseCustInfoRequest(This) (This)->lpVtbl->AsyncProcessReviseCustInfoRequest(This)\n#define ICOMLicenseAgent_GetAsyncProcessReturnCode(This,pdwRetCode) (This)->lpVtbl->GetAsyncProcessReturnCode(This,pdwRetCode)\n#define ICOMLicenseAgent_AsyncProcessDroppedLicenseRequest(This) (This)->lpVtbl->AsyncProcessDroppedLicenseRequest(This)\n#define ICOMLicenseAgent_GenerateInstallationId(This,pbstrVal) (This)->lpVtbl->GenerateInstallationId(This,pbstrVal)\n#define ICOMLicenseAgent_DepositConfirmationId(This,bstrVal,pdwRetCode) (This)->lpVtbl->DepositConfirmationId(This,bstrVal,pdwRetCode)\n#define ICOMLicenseAgent_GetExpirationInfo(This,pdwWPALeft,pdwEvalLeft) (This)->lpVtbl->GetExpirationInfo(This,pdwWPALeft,pdwEvalLeft)\n#define ICOMLicenseAgent_AsyncProcessRegistrationRequest(This) (This)->lpVtbl->AsyncProcessRegistrationRequest(This)\n#define ICOMLicenseAgent_ProcessHandshakeRequest(This,bReviseCustInfo) (This)->lpVtbl->ProcessHandshakeRequest(This,bReviseCustInfo)\n#define ICOMLicenseAgent_ProcessNewLicenseRequest(This) (This)->lpVtbl->ProcessNewLicenseRequest(This)\n#define ICOMLicenseAgent_ProcessDroppedLicenseRequest(This) (This)->lpVtbl->ProcessDroppedLicenseRequest(This)\n#define ICOMLicenseAgent_ProcessReissueLicenseRequest(This) (This)->lpVtbl->ProcessReissueLicenseRequest(This)\n#define ICOMLicenseAgent_ProcessReviseCustInfoRequest(This) (This)->lpVtbl->ProcessReviseCustInfoRequest(This)\n#define ICOMLicenseAgent_EnsureInternetConnection(This) (This)->lpVtbl->EnsureInternetConnection(This)\n#define ICOMLicenseAgent_SetProductKey(This,pszNewProductKey) (This)->lpVtbl->SetProductKey(This,pszNewProductKey)\n#define ICOMLicenseAgent_GetProductID(This,pbstrVal) (This)->lpVtbl->GetProductID(This,pbstrVal)\n#define ICOMLicenseAgent_VerifyCheckDigits(This,bstrCIDIID,pbValue) (This)->lpVtbl->VerifyCheckDigits(This,bstrCIDIID,pbValue)\n#else\n/*** IUnknown methods ***/\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_QueryInterface(ICOMLicenseAgent* This,REFIID riid,void **ppvObject) {\n    return This->lpVtbl->QueryInterface(This,riid,ppvObject);\n}\nstatic __WIDL_INLINE ULONG ICOMLicenseAgent_AddRef(ICOMLicenseAgent* This) {\n    return This->lpVtbl->AddRef(This);\n}\nstatic __WIDL_INLINE ULONG ICOMLicenseAgent_Release(ICOMLicenseAgent* This) {\n    return This->lpVtbl->Release(This);\n}\n/*** IDispatch methods ***/\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetTypeInfoCount(ICOMLicenseAgent* This,UINT *pctinfo) {\n    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetTypeInfo(ICOMLicenseAgent* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {\n    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetIDsOfNames(ICOMLicenseAgent* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {\n    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_Invoke(ICOMLicenseAgent* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {\n    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);\n}\n/*** ICOMLicenseAgent methods ***/\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_Initialize(ICOMLicenseAgent* This,ULONG dwBPC,ULONG dwMode,BSTR bstrLicSource,ULONG *pdwRetCode) {\n    return This->lpVtbl->Initialize(This,dwBPC,dwMode,bstrLicSource,pdwRetCode);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetFirstName(ICOMLicenseAgent* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetFirstName(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_SetFirstName(ICOMLicenseAgent* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetFirstName(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetLastName(ICOMLicenseAgent* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetLastName(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_SetLastName(ICOMLicenseAgent* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetLastName(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetOrgName(ICOMLicenseAgent* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetOrgName(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_SetOrgName(ICOMLicenseAgent* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetOrgName(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetEmail(ICOMLicenseAgent* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetEmail(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_SetEmail(ICOMLicenseAgent* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetEmail(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetPhone(ICOMLicenseAgent* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetPhone(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_SetPhone(ICOMLicenseAgent* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetPhone(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetAddress1(ICOMLicenseAgent* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetAddress1(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_SetAddress1(ICOMLicenseAgent* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetAddress1(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetCity(ICOMLicenseAgent* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetCity(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_SetCity(ICOMLicenseAgent* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetCity(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetState(ICOMLicenseAgent* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetState(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_SetState(ICOMLicenseAgent* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetState(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetCountryCode(ICOMLicenseAgent* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetCountryCode(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_SetCountryCode(ICOMLicenseAgent* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetCountryCode(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetCountryDesc(ICOMLicenseAgent* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetCountryDesc(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_SetCountryDesc(ICOMLicenseAgent* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetCountryDesc(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetZip(ICOMLicenseAgent* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetZip(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_SetZip(ICOMLicenseAgent* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetZip(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetIsoLanguage(ICOMLicenseAgent* This,ULONG *pdwVal) {\n    return This->lpVtbl->GetIsoLanguage(This,pdwVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_SetIsoLanguage(ICOMLicenseAgent* This,ULONG dwNewVal) {\n    return This->lpVtbl->SetIsoLanguage(This,dwNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetMSUpdate(ICOMLicenseAgent* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetMSUpdate(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_SetMSUpdate(ICOMLicenseAgent* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetMSUpdate(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetMSOffer(ICOMLicenseAgent* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetMSOffer(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_SetMSOffer(ICOMLicenseAgent* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetMSOffer(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetOtherOffer(ICOMLicenseAgent* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetOtherOffer(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_SetOtherOffer(ICOMLicenseAgent* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetOtherOffer(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetAddress2(ICOMLicenseAgent* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetAddress2(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_SetAddress2(ICOMLicenseAgent* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetAddress2(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_AsyncProcessHandshakeRequest(ICOMLicenseAgent* This,LONG bReviseCustInfo) {\n    return This->lpVtbl->AsyncProcessHandshakeRequest(This,bReviseCustInfo);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_AsyncProcessNewLicenseRequest(ICOMLicenseAgent* This) {\n    return This->lpVtbl->AsyncProcessNewLicenseRequest(This);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_AsyncProcessReissueLicenseRequest(ICOMLicenseAgent* This) {\n    return This->lpVtbl->AsyncProcessReissueLicenseRequest(This);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_AsyncProcessReviseCustInfoRequest(ICOMLicenseAgent* This) {\n    return This->lpVtbl->AsyncProcessReviseCustInfoRequest(This);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetAsyncProcessReturnCode(ICOMLicenseAgent* This,ULONG *pdwRetCode) {\n    return This->lpVtbl->GetAsyncProcessReturnCode(This,pdwRetCode);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_AsyncProcessDroppedLicenseRequest(ICOMLicenseAgent* This) {\n    return This->lpVtbl->AsyncProcessDroppedLicenseRequest(This);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GenerateInstallationId(ICOMLicenseAgent* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GenerateInstallationId(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_DepositConfirmationId(ICOMLicenseAgent* This,BSTR bstrVal,ULONG *pdwRetCode) {\n    return This->lpVtbl->DepositConfirmationId(This,bstrVal,pdwRetCode);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetExpirationInfo(ICOMLicenseAgent* This,ULONG *pdwWPALeft,ULONG *pdwEvalLeft) {\n    return This->lpVtbl->GetExpirationInfo(This,pdwWPALeft,pdwEvalLeft);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_AsyncProcessRegistrationRequest(ICOMLicenseAgent* This) {\n    return This->lpVtbl->AsyncProcessRegistrationRequest(This);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_ProcessHandshakeRequest(ICOMLicenseAgent* This,LONG bReviseCustInfo) {\n    return This->lpVtbl->ProcessHandshakeRequest(This,bReviseCustInfo);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_ProcessNewLicenseRequest(ICOMLicenseAgent* This) {\n    return This->lpVtbl->ProcessNewLicenseRequest(This);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_ProcessDroppedLicenseRequest(ICOMLicenseAgent* This) {\n    return This->lpVtbl->ProcessDroppedLicenseRequest(This);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_ProcessReissueLicenseRequest(ICOMLicenseAgent* This) {\n    return This->lpVtbl->ProcessReissueLicenseRequest(This);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_ProcessReviseCustInfoRequest(ICOMLicenseAgent* This) {\n    return This->lpVtbl->ProcessReviseCustInfoRequest(This);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_EnsureInternetConnection(ICOMLicenseAgent* This) {\n    return This->lpVtbl->EnsureInternetConnection(This);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_SetProductKey(ICOMLicenseAgent* This,LPWSTR pszNewProductKey) {\n    return This->lpVtbl->SetProductKey(This,pszNewProductKey);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_GetProductID(ICOMLicenseAgent* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetProductID(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent_VerifyCheckDigits(ICOMLicenseAgent* This,BSTR bstrCIDIID,LONG *pbValue) {\n    return This->lpVtbl->VerifyCheckDigits(This,bstrCIDIID,pbValue);\n}\n#endif\n#endif\n\n#endif\n\n\n#endif  /* __ICOMLicenseAgent_INTERFACE_DEFINED__ */\n\n/*****************************************************************************\n * ICOMLicenseAgent2 interface\n */\n#ifndef __ICOMLicenseAgent2_INTERFACE_DEFINED__\n#define __ICOMLicenseAgent2_INTERFACE_DEFINED__\n\nDEFINE_GUID(IID_ICOMLicenseAgent2, 0x6a07c5a3, 0x9c67, 0x4bb6, 0xb0,0x20, 0xec,0xbe,0x7f,0xdf,0xd3,0x26);\n#if defined(__cplusplus) && !defined(CINTERFACE)\nMIDL_INTERFACE(\"6a07c5a3-9c67-4bb6-b020-ecbe7fdfd326\")\nICOMLicenseAgent2 : public ICOMLicenseAgent\n{\n    virtual HRESULT STDMETHODCALLTYPE SetReminders(\n        LONG bValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetReminders(\n        LONG *pbValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetKeyType(\n        ULONG *pdwKeyType) = 0;\n\n};\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(ICOMLicenseAgent2, 0x6a07c5a3, 0x9c67, 0x4bb6, 0xb0,0x20, 0xec,0xbe,0x7f,0xdf,0xd3,0x26)\n#endif\n#else\ntypedef struct ICOMLicenseAgent2Vtbl {\n    BEGIN_INTERFACE\n\n    /*** IUnknown methods ***/\n    HRESULT (STDMETHODCALLTYPE *QueryInterface)(\n        ICOMLicenseAgent2 *This,\n        REFIID riid,\n        void **ppvObject);\n\n    ULONG (STDMETHODCALLTYPE *AddRef)(\n        ICOMLicenseAgent2 *This);\n\n    ULONG (STDMETHODCALLTYPE *Release)(\n        ICOMLicenseAgent2 *This);\n\n    /*** IDispatch methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(\n        ICOMLicenseAgent2 *This,\n        UINT *pctinfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(\n        ICOMLicenseAgent2 *This,\n        UINT iTInfo,\n        LCID lcid,\n        ITypeInfo **ppTInfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(\n        ICOMLicenseAgent2 *This,\n        REFIID riid,\n        LPOLESTR *rgszNames,\n        UINT cNames,\n        LCID lcid,\n        DISPID *rgDispId);\n\n    HRESULT (STDMETHODCALLTYPE *Invoke)(\n        ICOMLicenseAgent2 *This,\n        DISPID dispIdMember,\n        REFIID riid,\n        LCID lcid,\n        WORD wFlags,\n        DISPPARAMS *pDispParams,\n        VARIANT *pVarResult,\n        EXCEPINFO *pExcepInfo,\n        UINT *puArgErr);\n\n    /*** ICOMLicenseAgent methods ***/\n    HRESULT (STDMETHODCALLTYPE *Initialize)(\n        ICOMLicenseAgent2 *This,\n        ULONG dwBPC,\n        ULONG dwMode,\n        BSTR bstrLicSource,\n        ULONG *pdwRetCode);\n\n    HRESULT (STDMETHODCALLTYPE *GetFirstName)(\n        ICOMLicenseAgent2 *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetFirstName)(\n        ICOMLicenseAgent2 *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetLastName)(\n        ICOMLicenseAgent2 *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetLastName)(\n        ICOMLicenseAgent2 *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetOrgName)(\n        ICOMLicenseAgent2 *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetOrgName)(\n        ICOMLicenseAgent2 *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetEmail)(\n        ICOMLicenseAgent2 *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetEmail)(\n        ICOMLicenseAgent2 *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetPhone)(\n        ICOMLicenseAgent2 *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetPhone)(\n        ICOMLicenseAgent2 *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetAddress1)(\n        ICOMLicenseAgent2 *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetAddress1)(\n        ICOMLicenseAgent2 *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetCity)(\n        ICOMLicenseAgent2 *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetCity)(\n        ICOMLicenseAgent2 *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetState)(\n        ICOMLicenseAgent2 *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetState)(\n        ICOMLicenseAgent2 *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetCountryCode)(\n        ICOMLicenseAgent2 *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetCountryCode)(\n        ICOMLicenseAgent2 *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetCountryDesc)(\n        ICOMLicenseAgent2 *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetCountryDesc)(\n        ICOMLicenseAgent2 *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetZip)(\n        ICOMLicenseAgent2 *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetZip)(\n        ICOMLicenseAgent2 *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetIsoLanguage)(\n        ICOMLicenseAgent2 *This,\n        ULONG *pdwVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetIsoLanguage)(\n        ICOMLicenseAgent2 *This,\n        ULONG dwNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetMSUpdate)(\n        ICOMLicenseAgent2 *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetMSUpdate)(\n        ICOMLicenseAgent2 *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetMSOffer)(\n        ICOMLicenseAgent2 *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetMSOffer)(\n        ICOMLicenseAgent2 *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetOtherOffer)(\n        ICOMLicenseAgent2 *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetOtherOffer)(\n        ICOMLicenseAgent2 *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *GetAddress2)(\n        ICOMLicenseAgent2 *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *SetAddress2)(\n        ICOMLicenseAgent2 *This,\n        BSTR bstrNewVal);\n\n    HRESULT (STDMETHODCALLTYPE *AsyncProcessHandshakeRequest)(\n        ICOMLicenseAgent2 *This,\n        LONG bReviseCustInfo);\n\n    HRESULT (STDMETHODCALLTYPE *AsyncProcessNewLicenseRequest)(\n        ICOMLicenseAgent2 *This);\n\n    HRESULT (STDMETHODCALLTYPE *AsyncProcessReissueLicenseRequest)(\n        ICOMLicenseAgent2 *This);\n\n    HRESULT (STDMETHODCALLTYPE *AsyncProcessReviseCustInfoRequest)(\n        ICOMLicenseAgent2 *This);\n\n    HRESULT (STDMETHODCALLTYPE *GetAsyncProcessReturnCode)(\n        ICOMLicenseAgent2 *This,\n        ULONG *pdwRetCode);\n\n    HRESULT (STDMETHODCALLTYPE *AsyncProcessDroppedLicenseRequest)(\n        ICOMLicenseAgent2 *This);\n\n    HRESULT (STDMETHODCALLTYPE *GenerateInstallationId)(\n        ICOMLicenseAgent2 *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *DepositConfirmationId)(\n        ICOMLicenseAgent2 *This,\n        BSTR bstrVal,\n        ULONG *pdwRetCode);\n\n    HRESULT (STDMETHODCALLTYPE *GetExpirationInfo)(\n        ICOMLicenseAgent2 *This,\n        ULONG *pdwWPALeft,\n        ULONG *pdwEvalLeft);\n\n    HRESULT (STDMETHODCALLTYPE *AsyncProcessRegistrationRequest)(\n        ICOMLicenseAgent2 *This);\n\n    HRESULT (STDMETHODCALLTYPE *ProcessHandshakeRequest)(\n        ICOMLicenseAgent2 *This,\n        LONG bReviseCustInfo);\n\n    HRESULT (STDMETHODCALLTYPE *ProcessNewLicenseRequest)(\n        ICOMLicenseAgent2 *This);\n\n    HRESULT (STDMETHODCALLTYPE *ProcessDroppedLicenseRequest)(\n        ICOMLicenseAgent2 *This);\n\n    HRESULT (STDMETHODCALLTYPE *ProcessReissueLicenseRequest)(\n        ICOMLicenseAgent2 *This);\n\n    HRESULT (STDMETHODCALLTYPE *ProcessReviseCustInfoRequest)(\n        ICOMLicenseAgent2 *This);\n\n    HRESULT (STDMETHODCALLTYPE *EnsureInternetConnection)(\n        ICOMLicenseAgent2 *This);\n\n    HRESULT (STDMETHODCALLTYPE *SetProductKey)(\n        ICOMLicenseAgent2 *This,\n        LPWSTR pszNewProductKey);\n\n    HRESULT (STDMETHODCALLTYPE *GetProductID)(\n        ICOMLicenseAgent2 *This,\n        BSTR *pbstrVal);\n\n    HRESULT (STDMETHODCALLTYPE *VerifyCheckDigits)(\n        ICOMLicenseAgent2 *This,\n        BSTR bstrCIDIID,\n        LONG *pbValue);\n\n    /*** ICOMLicenseAgent2 methods ***/\n    HRESULT (STDMETHODCALLTYPE *SetReminders)(\n        ICOMLicenseAgent2 *This,\n        LONG bValue);\n\n    HRESULT (STDMETHODCALLTYPE *GetReminders)(\n        ICOMLicenseAgent2 *This,\n        LONG *pbValue);\n\n    HRESULT (STDMETHODCALLTYPE *GetKeyType)(\n        ICOMLicenseAgent2 *This,\n        ULONG *pdwKeyType);\n\n    END_INTERFACE\n} ICOMLicenseAgent2Vtbl;\n\ninterface ICOMLicenseAgent2 {\n    CONST_VTBL ICOMLicenseAgent2Vtbl* lpVtbl;\n};\n\n#ifdef COBJMACROS\n#ifndef WIDL_C_INLINE_WRAPPERS\n/*** IUnknown methods ***/\n#define ICOMLicenseAgent2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)\n#define ICOMLicenseAgent2_AddRef(This) (This)->lpVtbl->AddRef(This)\n#define ICOMLicenseAgent2_Release(This) (This)->lpVtbl->Release(This)\n/*** IDispatch methods ***/\n#define ICOMLicenseAgent2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)\n#define ICOMLicenseAgent2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)\n#define ICOMLicenseAgent2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\n#define ICOMLicenseAgent2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\n/*** ICOMLicenseAgent methods ***/\n#define ICOMLicenseAgent2_Initialize(This,dwBPC,dwMode,bstrLicSource,pdwRetCode) (This)->lpVtbl->Initialize(This,dwBPC,dwMode,bstrLicSource,pdwRetCode)\n#define ICOMLicenseAgent2_GetFirstName(This,pbstrVal) (This)->lpVtbl->GetFirstName(This,pbstrVal)\n#define ICOMLicenseAgent2_SetFirstName(This,bstrNewVal) (This)->lpVtbl->SetFirstName(This,bstrNewVal)\n#define ICOMLicenseAgent2_GetLastName(This,pbstrVal) (This)->lpVtbl->GetLastName(This,pbstrVal)\n#define ICOMLicenseAgent2_SetLastName(This,bstrNewVal) (This)->lpVtbl->SetLastName(This,bstrNewVal)\n#define ICOMLicenseAgent2_GetOrgName(This,pbstrVal) (This)->lpVtbl->GetOrgName(This,pbstrVal)\n#define ICOMLicenseAgent2_SetOrgName(This,bstrNewVal) (This)->lpVtbl->SetOrgName(This,bstrNewVal)\n#define ICOMLicenseAgent2_GetEmail(This,pbstrVal) (This)->lpVtbl->GetEmail(This,pbstrVal)\n#define ICOMLicenseAgent2_SetEmail(This,bstrNewVal) (This)->lpVtbl->SetEmail(This,bstrNewVal)\n#define ICOMLicenseAgent2_GetPhone(This,pbstrVal) (This)->lpVtbl->GetPhone(This,pbstrVal)\n#define ICOMLicenseAgent2_SetPhone(This,bstrNewVal) (This)->lpVtbl->SetPhone(This,bstrNewVal)\n#define ICOMLicenseAgent2_GetAddress1(This,pbstrVal) (This)->lpVtbl->GetAddress1(This,pbstrVal)\n#define ICOMLicenseAgent2_SetAddress1(This,bstrNewVal) (This)->lpVtbl->SetAddress1(This,bstrNewVal)\n#define ICOMLicenseAgent2_GetCity(This,pbstrVal) (This)->lpVtbl->GetCity(This,pbstrVal)\n#define ICOMLicenseAgent2_SetCity(This,bstrNewVal) (This)->lpVtbl->SetCity(This,bstrNewVal)\n#define ICOMLicenseAgent2_GetState(This,pbstrVal) (This)->lpVtbl->GetState(This,pbstrVal)\n#define ICOMLicenseAgent2_SetState(This,bstrNewVal) (This)->lpVtbl->SetState(This,bstrNewVal)\n#define ICOMLicenseAgent2_GetCountryCode(This,pbstrVal) (This)->lpVtbl->GetCountryCode(This,pbstrVal)\n#define ICOMLicenseAgent2_SetCountryCode(This,bstrNewVal) (This)->lpVtbl->SetCountryCode(This,bstrNewVal)\n#define ICOMLicenseAgent2_GetCountryDesc(This,pbstrVal) (This)->lpVtbl->GetCountryDesc(This,pbstrVal)\n#define ICOMLicenseAgent2_SetCountryDesc(This,bstrNewVal) (This)->lpVtbl->SetCountryDesc(This,bstrNewVal)\n#define ICOMLicenseAgent2_GetZip(This,pbstrVal) (This)->lpVtbl->GetZip(This,pbstrVal)\n#define ICOMLicenseAgent2_SetZip(This,bstrNewVal) (This)->lpVtbl->SetZip(This,bstrNewVal)\n#define ICOMLicenseAgent2_GetIsoLanguage(This,pdwVal) (This)->lpVtbl->GetIsoLanguage(This,pdwVal)\n#define ICOMLicenseAgent2_SetIsoLanguage(This,dwNewVal) (This)->lpVtbl->SetIsoLanguage(This,dwNewVal)\n#define ICOMLicenseAgent2_GetMSUpdate(This,pbstrVal) (This)->lpVtbl->GetMSUpdate(This,pbstrVal)\n#define ICOMLicenseAgent2_SetMSUpdate(This,bstrNewVal) (This)->lpVtbl->SetMSUpdate(This,bstrNewVal)\n#define ICOMLicenseAgent2_GetMSOffer(This,pbstrVal) (This)->lpVtbl->GetMSOffer(This,pbstrVal)\n#define ICOMLicenseAgent2_SetMSOffer(This,bstrNewVal) (This)->lpVtbl->SetMSOffer(This,bstrNewVal)\n#define ICOMLicenseAgent2_GetOtherOffer(This,pbstrVal) (This)->lpVtbl->GetOtherOffer(This,pbstrVal)\n#define ICOMLicenseAgent2_SetOtherOffer(This,bstrNewVal) (This)->lpVtbl->SetOtherOffer(This,bstrNewVal)\n#define ICOMLicenseAgent2_GetAddress2(This,pbstrVal) (This)->lpVtbl->GetAddress2(This,pbstrVal)\n#define ICOMLicenseAgent2_SetAddress2(This,bstrNewVal) (This)->lpVtbl->SetAddress2(This,bstrNewVal)\n#define ICOMLicenseAgent2_AsyncProcessHandshakeRequest(This,bReviseCustInfo) (This)->lpVtbl->AsyncProcessHandshakeRequest(This,bReviseCustInfo)\n#define ICOMLicenseAgent2_AsyncProcessNewLicenseRequest(This) (This)->lpVtbl->AsyncProcessNewLicenseRequest(This)\n#define ICOMLicenseAgent2_AsyncProcessReissueLicenseRequest(This) (This)->lpVtbl->AsyncProcessReissueLicenseRequest(This)\n#define ICOMLicenseAgent2_AsyncProcessReviseCustInfoRequest(This) (This)->lpVtbl->AsyncProcessReviseCustInfoRequest(This)\n#define ICOMLicenseAgent2_GetAsyncProcessReturnCode(This,pdwRetCode) (This)->lpVtbl->GetAsyncProcessReturnCode(This,pdwRetCode)\n#define ICOMLicenseAgent2_AsyncProcessDroppedLicenseRequest(This) (This)->lpVtbl->AsyncProcessDroppedLicenseRequest(This)\n#define ICOMLicenseAgent2_GenerateInstallationId(This,pbstrVal) (This)->lpVtbl->GenerateInstallationId(This,pbstrVal)\n#define ICOMLicenseAgent2_DepositConfirmationId(This,bstrVal,pdwRetCode) (This)->lpVtbl->DepositConfirmationId(This,bstrVal,pdwRetCode)\n#define ICOMLicenseAgent2_GetExpirationInfo(This,pdwWPALeft,pdwEvalLeft) (This)->lpVtbl->GetExpirationInfo(This,pdwWPALeft,pdwEvalLeft)\n#define ICOMLicenseAgent2_AsyncProcessRegistrationRequest(This) (This)->lpVtbl->AsyncProcessRegistrationRequest(This)\n#define ICOMLicenseAgent2_ProcessHandshakeRequest(This,bReviseCustInfo) (This)->lpVtbl->ProcessHandshakeRequest(This,bReviseCustInfo)\n#define ICOMLicenseAgent2_ProcessNewLicenseRequest(This) (This)->lpVtbl->ProcessNewLicenseRequest(This)\n#define ICOMLicenseAgent2_ProcessDroppedLicenseRequest(This) (This)->lpVtbl->ProcessDroppedLicenseRequest(This)\n#define ICOMLicenseAgent2_ProcessReissueLicenseRequest(This) (This)->lpVtbl->ProcessReissueLicenseRequest(This)\n#define ICOMLicenseAgent2_ProcessReviseCustInfoRequest(This) (This)->lpVtbl->ProcessReviseCustInfoRequest(This)\n#define ICOMLicenseAgent2_EnsureInternetConnection(This) (This)->lpVtbl->EnsureInternetConnection(This)\n#define ICOMLicenseAgent2_SetProductKey(This,pszNewProductKey) (This)->lpVtbl->SetProductKey(This,pszNewProductKey)\n#define ICOMLicenseAgent2_GetProductID(This,pbstrVal) (This)->lpVtbl->GetProductID(This,pbstrVal)\n#define ICOMLicenseAgent2_VerifyCheckDigits(This,bstrCIDIID,pbValue) (This)->lpVtbl->VerifyCheckDigits(This,bstrCIDIID,pbValue)\n/*** ICOMLicenseAgent2 methods ***/\n#define ICOMLicenseAgent2_SetReminders(This,bValue) (This)->lpVtbl->SetReminders(This,bValue)\n#define ICOMLicenseAgent2_GetReminders(This,pbValue) (This)->lpVtbl->GetReminders(This,pbValue)\n#define ICOMLicenseAgent2_GetKeyType(This,pdwKeyType) (This)->lpVtbl->GetKeyType(This,pdwKeyType)\n#else\n/*** IUnknown methods ***/\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_QueryInterface(ICOMLicenseAgent2* This,REFIID riid,void **ppvObject) {\n    return This->lpVtbl->QueryInterface(This,riid,ppvObject);\n}\nstatic __WIDL_INLINE ULONG ICOMLicenseAgent2_AddRef(ICOMLicenseAgent2* This) {\n    return This->lpVtbl->AddRef(This);\n}\nstatic __WIDL_INLINE ULONG ICOMLicenseAgent2_Release(ICOMLicenseAgent2* This) {\n    return This->lpVtbl->Release(This);\n}\n/*** IDispatch methods ***/\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetTypeInfoCount(ICOMLicenseAgent2* This,UINT *pctinfo) {\n    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetTypeInfo(ICOMLicenseAgent2* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {\n    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetIDsOfNames(ICOMLicenseAgent2* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {\n    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_Invoke(ICOMLicenseAgent2* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {\n    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);\n}\n/*** ICOMLicenseAgent methods ***/\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_Initialize(ICOMLicenseAgent2* This,ULONG dwBPC,ULONG dwMode,BSTR bstrLicSource,ULONG *pdwRetCode) {\n    return This->lpVtbl->Initialize(This,dwBPC,dwMode,bstrLicSource,pdwRetCode);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetFirstName(ICOMLicenseAgent2* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetFirstName(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetFirstName(ICOMLicenseAgent2* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetFirstName(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetLastName(ICOMLicenseAgent2* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetLastName(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetLastName(ICOMLicenseAgent2* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetLastName(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetOrgName(ICOMLicenseAgent2* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetOrgName(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetOrgName(ICOMLicenseAgent2* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetOrgName(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetEmail(ICOMLicenseAgent2* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetEmail(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetEmail(ICOMLicenseAgent2* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetEmail(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetPhone(ICOMLicenseAgent2* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetPhone(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetPhone(ICOMLicenseAgent2* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetPhone(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetAddress1(ICOMLicenseAgent2* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetAddress1(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetAddress1(ICOMLicenseAgent2* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetAddress1(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetCity(ICOMLicenseAgent2* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetCity(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetCity(ICOMLicenseAgent2* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetCity(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetState(ICOMLicenseAgent2* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetState(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetState(ICOMLicenseAgent2* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetState(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetCountryCode(ICOMLicenseAgent2* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetCountryCode(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetCountryCode(ICOMLicenseAgent2* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetCountryCode(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetCountryDesc(ICOMLicenseAgent2* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetCountryDesc(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetCountryDesc(ICOMLicenseAgent2* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetCountryDesc(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetZip(ICOMLicenseAgent2* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetZip(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetZip(ICOMLicenseAgent2* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetZip(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetIsoLanguage(ICOMLicenseAgent2* This,ULONG *pdwVal) {\n    return This->lpVtbl->GetIsoLanguage(This,pdwVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetIsoLanguage(ICOMLicenseAgent2* This,ULONG dwNewVal) {\n    return This->lpVtbl->SetIsoLanguage(This,dwNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetMSUpdate(ICOMLicenseAgent2* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetMSUpdate(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetMSUpdate(ICOMLicenseAgent2* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetMSUpdate(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetMSOffer(ICOMLicenseAgent2* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetMSOffer(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetMSOffer(ICOMLicenseAgent2* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetMSOffer(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetOtherOffer(ICOMLicenseAgent2* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetOtherOffer(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetOtherOffer(ICOMLicenseAgent2* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetOtherOffer(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetAddress2(ICOMLicenseAgent2* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetAddress2(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetAddress2(ICOMLicenseAgent2* This,BSTR bstrNewVal) {\n    return This->lpVtbl->SetAddress2(This,bstrNewVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_AsyncProcessHandshakeRequest(ICOMLicenseAgent2* This,LONG bReviseCustInfo) {\n    return This->lpVtbl->AsyncProcessHandshakeRequest(This,bReviseCustInfo);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_AsyncProcessNewLicenseRequest(ICOMLicenseAgent2* This) {\n    return This->lpVtbl->AsyncProcessNewLicenseRequest(This);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_AsyncProcessReissueLicenseRequest(ICOMLicenseAgent2* This) {\n    return This->lpVtbl->AsyncProcessReissueLicenseRequest(This);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_AsyncProcessReviseCustInfoRequest(ICOMLicenseAgent2* This) {\n    return This->lpVtbl->AsyncProcessReviseCustInfoRequest(This);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetAsyncProcessReturnCode(ICOMLicenseAgent2* This,ULONG *pdwRetCode) {\n    return This->lpVtbl->GetAsyncProcessReturnCode(This,pdwRetCode);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_AsyncProcessDroppedLicenseRequest(ICOMLicenseAgent2* This) {\n    return This->lpVtbl->AsyncProcessDroppedLicenseRequest(This);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GenerateInstallationId(ICOMLicenseAgent2* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GenerateInstallationId(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_DepositConfirmationId(ICOMLicenseAgent2* This,BSTR bstrVal,ULONG *pdwRetCode) {\n    return This->lpVtbl->DepositConfirmationId(This,bstrVal,pdwRetCode);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetExpirationInfo(ICOMLicenseAgent2* This,ULONG *pdwWPALeft,ULONG *pdwEvalLeft) {\n    return This->lpVtbl->GetExpirationInfo(This,pdwWPALeft,pdwEvalLeft);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_AsyncProcessRegistrationRequest(ICOMLicenseAgent2* This) {\n    return This->lpVtbl->AsyncProcessRegistrationRequest(This);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_ProcessHandshakeRequest(ICOMLicenseAgent2* This,LONG bReviseCustInfo) {\n    return This->lpVtbl->ProcessHandshakeRequest(This,bReviseCustInfo);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_ProcessNewLicenseRequest(ICOMLicenseAgent2* This) {\n    return This->lpVtbl->ProcessNewLicenseRequest(This);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_ProcessDroppedLicenseRequest(ICOMLicenseAgent2* This) {\n    return This->lpVtbl->ProcessDroppedLicenseRequest(This);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_ProcessReissueLicenseRequest(ICOMLicenseAgent2* This) {\n    return This->lpVtbl->ProcessReissueLicenseRequest(This);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_ProcessReviseCustInfoRequest(ICOMLicenseAgent2* This) {\n    return This->lpVtbl->ProcessReviseCustInfoRequest(This);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_EnsureInternetConnection(ICOMLicenseAgent2* This) {\n    return This->lpVtbl->EnsureInternetConnection(This);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetProductKey(ICOMLicenseAgent2* This,LPWSTR pszNewProductKey) {\n    return This->lpVtbl->SetProductKey(This,pszNewProductKey);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetProductID(ICOMLicenseAgent2* This,BSTR *pbstrVal) {\n    return This->lpVtbl->GetProductID(This,pbstrVal);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_VerifyCheckDigits(ICOMLicenseAgent2* This,BSTR bstrCIDIID,LONG *pbValue) {\n    return This->lpVtbl->VerifyCheckDigits(This,bstrCIDIID,pbValue);\n}\n/*** ICOMLicenseAgent2 methods ***/\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_SetReminders(ICOMLicenseAgent2* This,LONG bValue) {\n    return This->lpVtbl->SetReminders(This,bValue);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetReminders(ICOMLicenseAgent2* This,LONG *pbValue) {\n    return This->lpVtbl->GetReminders(This,pbValue);\n}\nstatic __WIDL_INLINE HRESULT ICOMLicenseAgent2_GetKeyType(ICOMLicenseAgent2* This,ULONG *pdwKeyType) {\n    return This->lpVtbl->GetKeyType(This,pdwKeyType);\n}\n#endif\n#endif\n\n#endif\n\n\n#endif  /* __ICOMLicenseAgent2_INTERFACE_DEFINED__ */\n\n#endif /* __LICDLLLib_LIBRARY_DEFINED__ */\n/* Begin additional prototypes for all interfaces */\n\nULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);\nunsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);\nunsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);\nvoid            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);\n\n/* End additional prototypes */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __licdll_h__ */\n"
  },
  {
    "path": "include/licdll.idl",
    "content": "\nimport \"oaidl.idl\";\n\n// Generated .IDL file (by the OLE/COM Object Viewer)\n//\n// typelib filename: licdll.dll\n\n[\n  uuid(C7879482-F798-4A74-AF43-E887FBDCED40),\n  version(1.0),\n  helpstring(\"licdll 1.0 Type Library\")\n]\nlibrary LICDLLLib\n{\n\t// TLib :     // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}\n\timportlib(\"stdole2.tlb\");\n\n\t// Forward declare all types defined in this typelib\n\tinterface ICOMLicenseAgent;\n\tinterface ICOMLicenseAgent2;\n\n\t[\n\t  uuid(ACADF079-CBCD-4032-83F2-FA47C4DB096F),\n\t  helpstring(\"COMLicenseAgent Class\")\n\t]\n\tcoclass COMLicenseAgent {\n\t\t[default] interface ICOMLicenseAgent;\n\t\tinterface ICOMLicenseAgent2;\n\t};\n\n\t[\n\t  odl,\n\t  uuid(B8CBAD79-3F1F-481A-BB0C-E7BBD77BDDD1),\n\t  helpstring(\"ICOMLicenseAgent Interface\"),\n\t  dual,\n\t  oleautomation\n\t]\n\tinterface ICOMLicenseAgent : IDispatch {\n\t\t[id(0x00000001), helpstring(\"method Initialize\")]\n\t\tHRESULT Initialize(\n\t\t\t\t\t\t[in] unsigned long dwBPC,\n\t\t\t\t\t\t[in] unsigned long dwMode,\n\t\t\t\t\t\t[in] BSTR bstrLicSource,\n\t\t\t\t\t\t[out, retval] unsigned long* pdwRetCode);\n\t\t[id(0x00000003), helpstring(\"method GetFirstName\")]\n\t\tHRESULT GetFirstName([out, retval] BSTR* pbstrVal);\n\t\t[id(0x00000004), helpstring(\"method SetFirstName\")]\n\t\tHRESULT SetFirstName([in] BSTR bstrNewVal);\n\t\t[id(0x00000005), helpstring(\"method GetLastName\")]\n\t\tHRESULT GetLastName([out, retval] BSTR* pbstrVal);\n\t\t[id(0x00000006), helpstring(\"method SetLastName\")]\n\t\tHRESULT SetLastName([in] BSTR bstrNewVal);\n\t\t[id(0x00000007), helpstring(\"method GetOrgName\")]\n\t\tHRESULT GetOrgName([out, retval] BSTR* pbstrVal);\n\t\t[id(0x00000008), helpstring(\"method SetOrgName\")]\n\t\tHRESULT SetOrgName([in] BSTR bstrNewVal);\n\t\t[id(0x00000009), helpstring(\"method GetEmail\")]\n\t\tHRESULT GetEmail([out, retval] BSTR* pbstrVal);\n\t\t[id(0x0000000a), helpstring(\"method SetEmail\")]\n\t\tHRESULT SetEmail([in] BSTR bstrNewVal);\n\t\t[id(0x0000000b), helpstring(\"method GetPhone\")]\n\t\tHRESULT GetPhone([out, retval] BSTR* pbstrVal);\n\t\t[id(0x0000000c), helpstring(\"method SetPhone\")]\n\t\tHRESULT SetPhone([in] BSTR bstrNewVal);\n\t\t[id(0x0000000d), helpstring(\"method GetAddress1\")]\n\t\tHRESULT GetAddress1([out, retval] BSTR* pbstrVal);\n\t\t[id(0x0000000e), helpstring(\"method SetAddress1\")]\n\t\tHRESULT SetAddress1([in] BSTR bstrNewVal);\n\t\t[id(0x0000000f), helpstring(\"method GetCity\")]\n\t\tHRESULT GetCity([out, retval] BSTR* pbstrVal);\n\t\t[id(0x00000010), helpstring(\"method SetCity\")]\n\t\tHRESULT SetCity([in] BSTR bstrNewVal);\n\t\t[id(0x00000011), helpstring(\"method GetState\")]\n\t\tHRESULT GetState([out, retval] BSTR* pbstrVal);\n\t\t[id(0x00000012), helpstring(\"method SetState\")]\n\t\tHRESULT SetState([in] BSTR bstrNewVal);\n\t\t[id(0x00000013), helpstring(\"method GetCountryCode\")]\n\t\tHRESULT GetCountryCode([out, retval] BSTR* pbstrVal);\n\t\t[id(0x00000014), helpstring(\"method SetCountryCode\")]\n\t\tHRESULT SetCountryCode([in] BSTR bstrNewVal);\n\t\t[id(0x00000015), helpstring(\"method GetCountryDesc\")]\n\t\tHRESULT GetCountryDesc([out, retval] BSTR* pbstrVal);\n\t\t[id(0x00000016), helpstring(\"method SetCountryDesc\")]\n\t\tHRESULT SetCountryDesc([in] BSTR bstrNewVal);\n\t\t[id(0x00000017), helpstring(\"method GetZip\")]\n\t\tHRESULT GetZip([out, retval] BSTR* pbstrVal);\n\t\t[id(0x00000018), helpstring(\"method SetZip\")]\n\t\tHRESULT SetZip([in] BSTR bstrNewVal);\n\t\t[id(0x00000019), helpstring(\"method GetIsoLanguage\")]\n\t\tHRESULT GetIsoLanguage([out, retval] unsigned long* pdwVal);\n\t\t[id(0x0000001a), helpstring(\"method SetIsoLanguage\")]\n\t\tHRESULT SetIsoLanguage([in] unsigned long dwNewVal);\n\t\t[id(0x00000020), helpstring(\"method GetMSUpdate\")]\n\t\tHRESULT GetMSUpdate([out, retval] BSTR* pbstrVal);\n\t\t[id(0x00000021), helpstring(\"method SetMSUpdate\")]\n\t\tHRESULT SetMSUpdate([in] BSTR bstrNewVal);\n\t\t[id(0x00000022), helpstring(\"method GetMSOffer\")]\n\t\tHRESULT GetMSOffer([out, retval] BSTR* pbstrVal);\n\t\t[id(0x00000023), helpstring(\"method SetMSOffer\")]\n\t\tHRESULT SetMSOffer([in] BSTR bstrNewVal);\n\t\t[id(0x00000024), helpstring(\"method GetOtherOffer\")]\n\t\tHRESULT GetOtherOffer([out, retval] BSTR* pbstrVal);\n\t\t[id(0x00000025), helpstring(\"method SetOtherOffer\")]\n\t\tHRESULT SetOtherOffer([in] BSTR bstrNewVal);\n\t\t[id(0x00000026), helpstring(\"method GetAddress2\")]\n\t\tHRESULT GetAddress2([out, retval] BSTR* pbstrVal);\n\t\t[id(0x00000027), helpstring(\"method SetAddress2\")]\n\t\tHRESULT SetAddress2([in] BSTR bstrNewVal);\n\t\t[id(0x00000052), helpstring(\"method AsyncProcessHandshakeRequest\")]\n\t\tHRESULT AsyncProcessHandshakeRequest([in] long bReviseCustInfo);\n\t\t[id(0x00000053), helpstring(\"method AsyncProcessNewLicenseRequest\")]\n\t\tHRESULT AsyncProcessNewLicenseRequest();\n\t\t[id(0x00000054), helpstring(\"method AsyncProcessReissueLicenseRequest\")]\n\t\tHRESULT AsyncProcessReissueLicenseRequest();\n\t\t[id(0x00000056), helpstring(\"method AsyncProcessReviseCustInfoRequest\")]\n\t\tHRESULT AsyncProcessReviseCustInfoRequest();\n\t\t[id(0x0000005a), helpstring(\"method GetAsyncProcessReturnCode\")]\n\t\tHRESULT GetAsyncProcessReturnCode([out, retval] unsigned long* pdwRetCode);\n\t\t[id(0x0000005d), helpstring(\"method AsyncProcessDroppedLicenseRequest\")]\n\t\tHRESULT AsyncProcessDroppedLicenseRequest();\n\t\t[id(0x00000064), helpstring(\"method GenerateInstallationId\")]\n\t\tHRESULT GenerateInstallationId([out, retval] BSTR* pbstrVal);\n\t\t[id(0x00000065), helpstring(\"method DepositConfirmationId\")]\n\t\tHRESULT DepositConfirmationId(\n\t\t\t\t\t\t[in] BSTR bstrVal,\n\t\t\t\t\t\t[out, retval] unsigned long* pdwRetCode);\n\t\t[id(0x00000066), helpstring(\"method GetExpirationInfo\")]\n\t\tHRESULT GetExpirationInfo(\n\t\t\t\t\t\t[out] unsigned long* pdwWPALeft,\n\t\t\t\t\t\t[out, retval] unsigned long* pdwEvalLeft);\n\t\t[id(0x00000067), helpstring(\"method AsyncProcessRegistrationRequest\")]\n\t\tHRESULT AsyncProcessRegistrationRequest();\n\t\t[id(0x00000068), helpstring(\"method ProcessHandshakeRequest\")]\n\t\tHRESULT ProcessHandshakeRequest([in] long bReviseCustInfo);\n\t\t[id(0x00000069), helpstring(\"method ProcessNewLicenseRequest\")]\n\t\tHRESULT ProcessNewLicenseRequest();\n\t\t[id(0x0000006a), helpstring(\"method ProcessDroppedLicenseRequest\")]\n\t\tHRESULT ProcessDroppedLicenseRequest();\n\t\t[id(0x0000006b), helpstring(\"method ProcessReissueLicenseRequest\")]\n\t\tHRESULT ProcessReissueLicenseRequest();\n\t\t[id(0x0000006d), helpstring(\"method ProcessReviseCustInfoRequest\")]\n\t\tHRESULT ProcessReviseCustInfoRequest();\n\t\t[id(0x0000006e), helpstring(\"method EnsureInternetConnection\")]\n\t\tHRESULT EnsureInternetConnection();\n\t\t[id(0x0000006f), helpstring(\"method SetProductKey\")]\n\t\tHRESULT SetProductKey([in] LPWSTR pszNewProductKey);\n\t\t[id(0x00000070), helpstring(\"method GetProductID\")]\n\t\tHRESULT GetProductID([out, retval] BSTR* pbstrVal);\n\t\t[id(0x00000071), helpstring(\"method VerifyCheckDigits\")]\n\t\tHRESULT VerifyCheckDigits(\n\t\t\t\t\t\tBSTR bstrCIDIID,\n\t\t\t\t\t\t[out, retval] long* pbValue);\n\t};\n\n\t[\n\t  odl,\n\t  uuid(6A07C5A3-9C67-4BB6-B020-ECBE7FDFD326),\n\t  helpstring(\"ICOMLicenseAgent Interface 2\"),\n\t  dual,\n\t  oleautomation\n\t]\n\tinterface ICOMLicenseAgent2 : ICOMLicenseAgent {\n\t\t[id(0x00000072), helpstring(\"method SetReminders\")]\n\t\tHRESULT SetReminders(long bValue);\n\t\t[id(0x00000073), helpstring(\"method GetReminders\")]\n\t\tHRESULT GetReminders(long* pbValue);\n\t\t[id(0x00000074), helpstring(\"method GetKeyType\")]\n\t\tHRESULT GetKeyType([out, retval] unsigned long* pdwKeyType);\n\t};\n};\n"
  },
  {
    "path": "include/nsis/api.h",
    "content": "/*\n * apih\n * \n * This file is a part of NSIS.\n * \n * Copyright (C) 1999-2023 Nullsoft and Contributors\n * \n * Licensed under the zlib/libpng license (the \"License\");\n * you may not use this file except in compliance with the License.\n * \n * Licence details can be found in the file COPYING.\n * \n * This software is provided 'as-is', without any express or implied\n * warranty.\n */\n\n#ifndef _NSIS_EXEHEAD_API_H_\n#define _NSIS_EXEHEAD_API_H_\n\n// Starting with NSIS 2.42, you can check the version of the plugin API in exec_flags->plugin_api_version\n// The format is 0xXXXXYYYY where X is the major version and Y is the minor version (MAKELONG(y,x))\n// When doing version checks, always remember to use >=, ex: if (pX->exec_flags->plugin_api_version >= NSISPIAPIVER_1_0) {}\n\n#define NSISPIAPIVER_1_0 0x00010000\n#define NSISPIAPIVER_CURR NSISPIAPIVER_1_0\n\n// NSIS Plug-In Callback Messages\nenum NSPIM \n{\n  NSPIM_UNLOAD,    // This is the last message a plugin gets, do final cleanup\n  NSPIM_GUIUNLOAD, // Called after .onGUIEnd\n};\n\n// Prototype for callbacks registered with extra_parameters->RegisterPluginCallback()\n// Return NULL for unknown messages\n// Should always be __cdecl for future expansion possibilities\ntypedef UINT_PTR (*NSISPLUGINCALLBACK)(enum NSPIM);\n\n// extra_parameters data structure containing other interesting stuff\n// besides the stack, variables and HWND passed on to plug-ins.\ntypedef struct\n{\n  int autoclose;          // SetAutoClose\n  int all_user_var;       // SetShellVarContext: User context = 0, Machine context = 1\n  int exec_error;         // IfErrors/ClearErrors/SetErrors\n  int abort;              // IfAbort\n  int exec_reboot;        // IfRebootFlag/SetRebootFlag (NSIS_SUPPORT_REBOOT)\n  int reboot_called;      // NSIS_SUPPORT_REBOOT\n  int XXX_cur_insttype;   // Deprecated\n  int plugin_api_version; // Plug-in ABI. See NSISPIAPIVER_CURR (Note: used to be XXX_insttype_changed)\n  int silent;             // IfSilent/SetSilent (NSIS_CONFIG_SILENT_SUPPORT)\n  int instdir_error;      // GetInstDirError\n  int rtl;                // IfRtlLanguage: 1 if $LANGUAGE is a RTL language\n  int errlvl;             // SetErrorLevel\n  int alter_reg_view;     // SetRegView: Default View = 0, Alternative View = (sizeof(void*) > 4 ? KEY_WOW64_32KEY : KEY_WOW64_64KEY)\n  int status_update;      // SetDetailsPrint\n} exec_flags_t;\n\n#ifndef NSISCALL\n#  define NSISCALL __stdcall\n#endif\n#if !defined(_WIN32) && !defined(LPTSTR)\n#  define LPTSTR TCHAR*\n#endif\n\ntypedef struct {\n  exec_flags_t *exec_flags;\n  int (NSISCALL *ExecuteCodeSegment)(int, HWND);\n  void (NSISCALL *validate_filename)(LPTSTR);\n  int (NSISCALL *RegisterPluginCallback)(HMODULE, NSISPLUGINCALLBACK); // returns 0 on success, 1 if already registered and < 0 on errors\n} extra_parameters;\n\n// Definitions for page showing plug-ins\n// See Ui.c to understand better how they're used\n\n// sent to the outer window to tell it to go to the next inner window\n#define WM_NOTIFY_OUTER_NEXT (WM_USER+0x8)\n\n// custom pages should send this message to let NSIS know they're ready\n#define WM_NOTIFY_CUSTOM_READY (WM_USER+0xd)\n\n// sent as wParam with WM_NOTIFY_OUTER_NEXT when user cancels - heed its warning\n#define NOTIFY_BYE_BYE 'x'\n\n#endif /* _NSIS_EXEHEAD_API_H_ */\n"
  },
  {
    "path": "include/nsis/nsis_tchar.h",
    "content": "/*\n * nsis_tchar.h\n * \n * This file is a part of NSIS.\n * \n * Copyright (C) 1999-2023 Nullsoft and Contributors\n * \n * This software is provided 'as-is', without any express or implied\n * warranty.\n *\n * For Unicode support by Jim Park -- 08/30/2007\n */\n\n// Jim Park: Only those we use are listed here.\n\n#pragma once\n\n#ifdef _UNICODE\n\n#ifndef _T\n#define __T(x)   L ## x\n#define _T(x)    __T(x)\n#define _TEXT(x) __T(x)\n#endif\n\n#ifndef _TCHAR_DEFINED\n#define _TCHAR_DEFINED\n#if !defined(_NATIVE_WCHAR_T_DEFINED) && !defined(_WCHAR_T_DEFINED)\ntypedef unsigned short TCHAR;\n#else\ntypedef wchar_t TCHAR;\n#endif\n#endif\n\n\n// program\n#define _tenviron   _wenviron\n#define __targv     __wargv\n\n// printfs\n#define _ftprintf   fwprintf\n#define _sntprintf  _snwprintf\n#if (defined(_MSC_VER) && (_MSC_VER<=1310||_MSC_FULL_VER<=140040310)) || defined(__MINGW32__)\n#\tdefine _stprintf   swprintf\n#else\n#\tdefine _stprintf   _swprintf\n#endif\n#define _tprintf    wprintf\n#define _vftprintf  vfwprintf\n#define _vsntprintf _vsnwprintf\n#if defined(_MSC_VER) && (_MSC_VER<=1310)\n#\tdefine _vstprintf  vswprintf\n#else\n#\tdefine _vstprintf  _vswprintf\n#endif\n\n// scanfs\n#define _tscanf     wscanf\n#define _stscanf    swscanf\n\n// string manipulations\n#define _tcscat     wcscat\n#define _tcschr     wcschr\n#define _tcsclen    wcslen\n#define _tcscpy     wcscpy\n#define _tcsdup     _wcsdup\n#define _tcslen     wcslen\n#define _tcsnccpy   wcsncpy\n#define _tcsncpy    wcsncpy\n#define _tcsrchr    wcsrchr\n#define _tcsstr     wcsstr\n#define _tcstok     wcstok\n\n// string comparisons\n#define _tcscmp     wcscmp\n#define _tcsicmp    _wcsicmp\n#define _tcsncicmp  _wcsnicmp\n#define _tcsncmp    wcsncmp\n#define _tcsnicmp   _wcsnicmp\n\n// upper / lower\n#define _tcslwr     _wcslwr\n#define _tcsupr     _wcsupr\n#define _totlower   towlower\n#define _totupper   towupper\n\n// conversions to numbers\n#define _tcstoi64   _wcstoi64\n#define _tcstol     wcstol\n#define _tcstoul    wcstoul\n#define _tstof      _wtof\n#define _tstoi      _wtoi\n#define _tstoi64    _wtoi64\n#define _ttoi       _wtoi\n#define _ttoi64     _wtoi64\n#define _ttol       _wtol\n\n// conversion from numbers to strings\n#define _itot       _itow\n#define _ltot       _ltow\n#define _i64tot     _i64tow\n#define _ui64tot    _ui64tow\n\n// file manipulations\n#define _tfopen     _wfopen\n#define _topen      _wopen\n#define _tremove    _wremove\n#define _tunlink    _wunlink\n\n// reading and writing to i/o\n#define _fgettc     fgetwc\n#define _fgetts     fgetws\n#define _fputts     fputws\n#define _gettchar   getwchar\n\n// directory\n#define _tchdir     _wchdir\n\n// environment\n#define _tgetenv    _wgetenv\n#define _tsystem    _wsystem\n\n// time\n#define _tcsftime   wcsftime\n\n#else // ANSI\n\n#ifndef _T\n#define _T(x)    x\n#define _TEXT(x) x\n#endif\n\n#ifndef _TCHAR_DEFINED\n#define _TCHAR_DEFINED\ntypedef char TCHAR;\n#endif\n\n// program\n#define _tenviron   environ\n#define __targv     __argv\n\n// printfs\n#define _ftprintf   fprintf\n#define _sntprintf  _snprintf\n#define _stprintf   sprintf\n#define _tprintf    printf\n#define _vftprintf  vfprintf\n#define _vsntprintf _vsnprintf\n#define _vstprintf  vsprintf\n\n// scanfs\n#define _tscanf     scanf\n#define _stscanf    sscanf\n\n// string manipulations\n#define _tcscat     strcat\n#define _tcschr     strchr\n#define _tcsclen    strlen\n#define _tcscnlen   strnlen\n#define _tcscpy     strcpy\n#define _tcsdup     _strdup\n#define _tcslen     strlen\n#define _tcsnccpy   strncpy\n#define _tcsrchr    strrchr\n#define _tcsstr     strstr\n#define _tcstok     strtok\n\n// string comparisons\n#define _tcscmp     strcmp\n#define _tcsicmp    _stricmp\n#define _tcsncmp    strncmp\n#define _tcsncicmp  _strnicmp\n#define _tcsnicmp   _strnicmp\n\n// upper / lower\n#define _tcslwr     _strlwr\n#define _tcsupr     _strupr\n\n#define _totupper   toupper\n#define _totlower   tolower\n\n// conversions to numbers\n#define _tcstol     strtol\n#define _tcstoul    strtoul\n#define _tstof      atof\n#define _tstoi      atoi\n#define _tstoi64    _atoi64\n#define _tstoi64    _atoi64\n#define _ttoi       atoi\n#define _ttoi64     _atoi64\n#define _ttol       atol\n\n// conversion from numbers to strings\n#define _i64tot     _i64toa\n#define _itot       _itoa\n#define _ltot       _ltoa\n#define _ui64tot    _ui64toa\n\n// file manipulations\n#define _tfopen     fopen\n#define _topen      _open\n#define _tremove    remove\n#define _tunlink    _unlink\n\n// reading and writing to i/o\n#define _fgettc     fgetc\n#define _fgetts     fgets\n#define _fputts     fputs\n#define _gettchar   getchar\n\n// directory\n#define _tchdir     _chdir\n\n// environment\n#define _tgetenv    getenv\n#define _tsystem    system\n\n// time\n#define _tcsftime   strftime\n\n#endif\n\n// is functions (the same in Unicode / ANSI)\n#define _istgraph   isgraph\n#define _istascii   __isascii\n\n#define __TFILE__ _T(__FILE__)\n#define __TDATE__ _T(__DATE__)\n#define __TTIME__ _T(__TIME__)\n"
  },
  {
    "path": "include/nsis/pluginapi.c",
    "content": "#include <windows.h>\n#include \"pluginapi.h\"\n\n#ifndef COUNTOF\n#define COUNTOF(a) (sizeof(a)/sizeof(a[0]))\n#endif\n\n// minimal tchar.h emulation\n#ifndef _T\n#  define _T TEXT\n#endif\n#if !defined(TCHAR) && !defined(_TCHAR_DEFINED)\n#  ifdef UNICODE\n#    define TCHAR WCHAR\n#  else\n#    define TCHAR char\n#  endif\n#endif\n\n#define isvalidnsisvarindex(varnum) ( ((unsigned int)(varnum)) < (__INST_LAST) )\n\nunsigned int g_stringsize;\nstack_t **g_stacktop;\nLPTSTR g_variables;\n\n// utility functions (not required but often useful)\n\nint NSISCALL popstring(LPTSTR str)\n{\n  stack_t *th;\n  if (!g_stacktop || !*g_stacktop) return 1;\n  th=(*g_stacktop);\n  if (str) lstrcpy(str,th->text);\n  *g_stacktop = th->next;\n  GlobalFree((HGLOBAL)th);\n  return 0;\n}\n\nint NSISCALL popstringn(LPTSTR str, int maxlen)\n{\n  stack_t *th;\n  if (!g_stacktop || !*g_stacktop) return 1;\n  th=(*g_stacktop);\n  if (str) lstrcpyn(str,th->text,maxlen?maxlen:(int)g_stringsize);\n  *g_stacktop = th->next;\n  GlobalFree((HGLOBAL)th);\n  return 0;\n}\n\nvoid NSISCALL pushstring(LPCTSTR str)\n{\n  stack_t *th;\n  if (!g_stacktop) return;\n  th=(stack_t*)GlobalAlloc(GPTR,(sizeof(stack_t)+(g_stringsize)*sizeof(*str)));\n  lstrcpyn(th->text,str,g_stringsize);\n  th->next=*g_stacktop;\n  *g_stacktop=th;\n}\n\nLPTSTR NSISCALL getuservariable(const int varnum)\n{\n  if (!isvalidnsisvarindex(varnum)) return NULL;\n  return g_variables+varnum*g_stringsize;\n}\n\nvoid NSISCALL setuservariable(const int varnum, LPCTSTR var)\n{\n  if (var && isvalidnsisvarindex(varnum))\n    lstrcpy(g_variables + varnum*g_stringsize, var);\n}\n\n#ifdef UNICODE\nint NSISCALL PopStringA(LPSTR ansiStr)\n{\n   LPWSTR wideStr = (LPWSTR) GlobalAlloc(GPTR, g_stringsize*sizeof(WCHAR));\n   int rval = popstring(wideStr);\n   WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);\n   GlobalFree((HGLOBAL)wideStr);\n   return rval;\n}\n\nint NSISCALL PopStringNA(LPSTR ansiStr, int maxlen)\n{\n   int realLen = maxlen ? maxlen : (int)g_stringsize;\n   LPWSTR wideStr = (LPWSTR) GlobalAlloc(GPTR, realLen*sizeof(WCHAR));\n   int rval = popstringn(wideStr, realLen);\n   WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, realLen, NULL, NULL);\n   GlobalFree((HGLOBAL)wideStr);\n   return rval;\n}\n\nvoid NSISCALL PushStringA(LPCSTR ansiStr)\n{\n   LPWSTR wideStr = (LPWSTR) GlobalAlloc(GPTR, g_stringsize*sizeof(WCHAR));\n   MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);\n   pushstring(wideStr);\n   GlobalFree((HGLOBAL)wideStr);\n   return;\n}\n\nvoid NSISCALL GetUserVariableW(const int varnum, LPWSTR wideStr)\n{\n   lstrcpyW(wideStr, getuservariable(varnum));\n}\n\nvoid NSISCALL GetUserVariableA(const int varnum, LPSTR ansiStr)\n{\n   LPWSTR wideStr = getuservariable(varnum);\n   WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);\n}\n\nvoid NSISCALL SetUserVariableA(const int varnum, LPCSTR ansiStr)\n{\n   if (ansiStr && isvalidnsisvarindex(varnum))\n   {\n      LPWSTR wideStr = g_variables + varnum * g_stringsize;\n      MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);\n   }\n}\n\n#else\n// ANSI defs\nint NSISCALL PopStringW(LPWSTR wideStr)\n{\n   LPSTR ansiStr = (LPSTR) GlobalAlloc(GPTR, g_stringsize);\n   int rval = popstring(ansiStr);\n   MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);\n   GlobalFree((HGLOBAL)ansiStr);\n   return rval;\n}\n\nint NSISCALL PopStringNW(LPWSTR wideStr, int maxlen)\n{\n   int realLen = maxlen ? maxlen : g_stringsize;\n   LPSTR ansiStr = (LPSTR) GlobalAlloc(GPTR, realLen);\n   int rval = popstringn(ansiStr, realLen);\n   MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, realLen);\n   GlobalFree((HGLOBAL)ansiStr);\n   return rval;\n}\n\nvoid NSISCALL PushStringW(LPWSTR wideStr)\n{\n   LPSTR ansiStr = (LPSTR) GlobalAlloc(GPTR, g_stringsize);\n   WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);\n   pushstring(ansiStr);\n   GlobalFree((HGLOBAL)ansiStr);\n}\n\nvoid NSISCALL GetUserVariableW(const int varnum, LPWSTR wideStr)\n{\n   LPSTR ansiStr = getuservariable(varnum);\n   MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);\n}\n\nvoid NSISCALL GetUserVariableA(const int varnum, LPSTR ansiStr)\n{\n   lstrcpyA(ansiStr, getuservariable(varnum));\n}\n\nvoid NSISCALL SetUserVariableW(const int varnum, LPCWSTR wideStr)\n{\n   if (wideStr && isvalidnsisvarindex(varnum))\n   {\n      LPSTR ansiStr = g_variables + varnum * g_stringsize;\n      WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);\n   }\n}\n#endif\n\n// playing with integers\n\nINT_PTR NSISCALL nsishelper_str_to_ptr(LPCTSTR s)\n{\n  INT_PTR v=0;\n  if (*s == _T('0') && (s[1] == _T('x') || s[1] == _T('X')))\n  {\n    s++;\n    for (;;)\n    {\n      int c=*(++s);\n      if (c >= _T('0') && c <= _T('9')) c-=_T('0');\n      else if (c >= _T('a') && c <= _T('f')) c-=_T('a')-10;\n      else if (c >= _T('A') && c <= _T('F')) c-=_T('A')-10;\n      else break;\n      v<<=4;\n      v+=c;\n    }\n  }\n  else if (*s == _T('0') && s[1] <= _T('7') && s[1] >= _T('0'))\n  {\n    for (;;)\n    {\n      int c=*(++s);\n      if (c >= _T('0') && c <= _T('7')) c-=_T('0');\n      else break;\n      v<<=3;\n      v+=c;\n    }\n  }\n  else\n  {\n    int sign=0;\n    if (*s == _T('-')) sign++; else s--;\n    for (;;)\n    {\n      int c=*(++s) - _T('0');\n      if (c < 0 || c > 9) break;\n      v*=10;\n      v+=c;\n    }\n    if (sign) v = -v;\n  }\n\n  return v;\n}\n\nunsigned int NSISCALL myatou(LPCTSTR s)\n{\n  unsigned int v=0;\n\n  for (;;)\n  {\n    unsigned int c=*s++;\n    if (c >= _T('0') && c <= _T('9')) c-=_T('0');\n    else break;\n    v*=10;\n    v+=c;\n  }\n  return v;\n}\n\nint NSISCALL myatoi_or(LPCTSTR s)\n{\n  int v=0;\n  if (*s == _T('0') && (s[1] == _T('x') || s[1] == _T('X')))\n  {\n    s++;\n    for (;;)\n    {\n      int c=*(++s);\n      if (c >= _T('0') && c <= _T('9')) c-=_T('0');\n      else if (c >= _T('a') && c <= _T('f')) c-=_T('a')-10;\n      else if (c >= _T('A') && c <= _T('F')) c-=_T('A')-10;\n      else break;\n      v<<=4;\n      v+=c;\n    }\n  }\n  else if (*s == _T('0') && s[1] <= _T('7') && s[1] >= _T('0'))\n  {\n    for (;;)\n    {\n      int c=*(++s);\n      if (c >= _T('0') && c <= _T('7')) c-=_T('0');\n      else break;\n      v<<=3;\n      v+=c;\n    }\n  }\n  else\n  {\n    int sign=0;\n    if (*s == _T('-')) sign++; else s--;\n    for (;;)\n    {\n      int c=*(++s) - _T('0');\n      if (c < 0 || c > 9) break;\n      v*=10;\n      v+=c;\n    }\n    if (sign) v = -v;\n  }\n\n  // Support for simple ORed expressions\n  if (*s == _T('|'))\n  {\n      v |= myatoi_or(s+1);\n  }\n\n  return v;\n}\n\nINT_PTR NSISCALL popintptr(void)\n{\n  TCHAR buf[128];\n  if (popstringn(buf,COUNTOF(buf)))\n    return 0;\n  return nsishelper_str_to_ptr(buf);\n}\n\nint NSISCALL popint_or(void)\n{\n  TCHAR buf[128];\n  if (popstringn(buf,COUNTOF(buf)))\n    return 0;\n  return myatoi_or(buf);\n}\n\nvoid NSISCALL pushintptr(INT_PTR value)\n{\n  TCHAR buffer[30];\n  wsprintf(buffer, sizeof(void*) > 4 ? _T(\"%Id\") : _T(\"%d\"), value);\n  pushstring(buffer);\n}\n"
  },
  {
    "path": "include/nsis/pluginapi.h",
    "content": "#ifndef ___NSIS_PLUGIN__H___\n#define ___NSIS_PLUGIN__H___\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include \"api.h\"\n#include \"nsis_tchar.h\" // BUGBUG: Why cannot our plugins use the compilers tchar.h?\n\n#ifndef NSISCALL\n#  define NSISCALL WINAPI\n#endif\n\n#define EXDLL_INIT()           {  \\\n        g_stringsize=string_size; \\\n        g_stacktop=stacktop;      \\\n        g_variables=variables; }\n\ntypedef struct _stack_t {\n  struct _stack_t *next;\n#ifdef UNICODE\n  WCHAR text[1]; // this should be the length of g_stringsize when allocating\n#else\n  char text[1];\n#endif\n} stack_t;\n\nenum\n{\nINST_0,         // $0\nINST_1,         // $1\nINST_2,         // $2\nINST_3,         // $3\nINST_4,         // $4\nINST_5,         // $5\nINST_6,         // $6\nINST_7,         // $7\nINST_8,         // $8\nINST_9,         // $9\nINST_R0,        // $R0\nINST_R1,        // $R1\nINST_R2,        // $R2\nINST_R3,        // $R3\nINST_R4,        // $R4\nINST_R5,        // $R5\nINST_R6,        // $R6\nINST_R7,        // $R7\nINST_R8,        // $R8\nINST_R9,        // $R9\nINST_CMDLINE,   // $CMDLINE\nINST_INSTDIR,   // $INSTDIR\nINST_OUTDIR,    // $OUTDIR\nINST_EXEDIR,    // $EXEDIR\nINST_LANG,      // $LANGUAGE\n__INST_LAST\n};\n\nextern unsigned int g_stringsize;\nextern stack_t **g_stacktop;\nextern LPTSTR g_variables;\n\nvoid NSISCALL pushstring(LPCTSTR str);\nvoid NSISCALL pushintptr(INT_PTR value);\n#define pushint(v) pushintptr((INT_PTR)(v))\nint NSISCALL popstring(LPTSTR str); // 0 on success, 1 on empty stack\nint NSISCALL popstringn(LPTSTR str, int maxlen); // with length limit, pass 0 for g_stringsize\nINT_PTR NSISCALL popintptr(void);\n#define popint() ( (int) popintptr() )\nint NSISCALL popint_or(void); // with support for or'ing (2|4|8)\nINT_PTR NSISCALL nsishelper_str_to_ptr(LPCTSTR s);\n#define myatoi(s) ( (int) nsishelper_str_to_ptr(s) ) // converts a string to an integer\nunsigned int NSISCALL myatou(LPCTSTR s); // converts a string to an unsigned integer, decimal only\nint NSISCALL myatoi_or(LPCTSTR s); // with support for or'ing (2|4|8)\nLPTSTR NSISCALL getuservariable(const int varnum);\nvoid NSISCALL setuservariable(const int varnum, LPCTSTR var);\n\n#ifdef UNICODE\n#define PopStringW(x) popstring(x)\n#define PushStringW(x) pushstring(x)\n#define SetUserVariableW(x,y) setuservariable(x,y)\n\nint  NSISCALL PopStringA(LPSTR ansiStr);\nvoid NSISCALL PushStringA(LPCSTR ansiStr);\nvoid NSISCALL GetUserVariableW(const int varnum, LPWSTR wideStr);\nvoid NSISCALL GetUserVariableA(const int varnum, LPSTR ansiStr);\nvoid NSISCALL SetUserVariableA(const int varnum, LPCSTR ansiStr);\n\n#else\n// ANSI defs\n\n#define PopStringA(x) popstring(x)\n#define PushStringA(x) pushstring(x)\n#define SetUserVariableA(x,y) setuservariable(x,y)\n\nint  NSISCALL PopStringW(LPWSTR wideStr);\nvoid NSISCALL PushStringW(LPWSTR wideStr);\nvoid NSISCALL GetUserVariableW(const int varnum, LPWSTR wideStr);\nvoid NSISCALL GetUserVariableA(const int varnum, LPSTR ansiStr);\nvoid NSISCALL SetUserVariableW(const int varnum, LPCWSTR wideStr);\n\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif//!___NSIS_PLUGIN__H___\n"
  },
  {
    "path": "include/slpublic.h",
    "content": "#pragma once\n\n#include <windows.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef GUID SLID;\ntypedef PVOID HSLC;\n\nDEFINE_GUID(WINDOWS_SLID, 0x55c92734, 0xd682, 0x4d71, 0x98, 0x3e, 0xd6, 0xec, 0x3f, 0x16, 0x05, 0x9f);\n\ntypedef enum _tagSLLICENSINGSTATUS {\n\tSL_LICENSING_STATUS_UNLICENSED,\n\tSL_LICENSING_STATUS_LICENSED,\n\tSL_LICENSING_STATUS_IN_GRACE_PERIOD,\n\tSL_LICENSING_STATUS_NOTIFICATION,\n\tSL_LICENSING_STATUS_LAST\n} SLLICENSINGSTATUS;\n\ntypedef struct _tagSL_LICENSING_STATUS {\n\tSLID SkuId;\n\tSLLICENSINGSTATUS eStatus;\n\tDWORD dwGraceTime;\n\tDWORD dwTotalGraceDays;\n\tHRESULT hrReason;\n\tUINT64 qwValidityExpiration;\n} SL_LICENSING_STATUS;\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "include/wuapi.h",
    "content": "\n\n/* this ALWAYS GENERATED file contains the definitions for the interfaces */\n\n\n /* File created by MIDL compiler version 7.00.0555 */\n/* Compiler settings for wuapi.idl:\n    Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555\n    protocol : dce , ms_ext, c_ext, robust\n    error checks: allocation ref bounds_check enum stub_data\n    VC __declspec() decoration level:\n         __declspec(uuid()), __declspec(selectany), __declspec(novtable)\n         DECLSPEC_UUID(), MIDL_INTERFACE()\n*/\n/* @@MIDL_FILE_HEADING(  ) */\n\n#pragma warning( disable: 4049 )  /* more than 64k source lines */\n\n\n/* verify that the <rpcndr.h> version is high enough to compile this file*/\n#ifndef __REQUIRED_RPCNDR_H_VERSION__\n#define __REQUIRED_RPCNDR_H_VERSION__ 475\n#endif\n\n/* verify that the <rpcsal.h> version is high enough to compile this file*/\n#ifndef __REQUIRED_RPCSAL_H_VERSION__\n#define __REQUIRED_RPCSAL_H_VERSION__ 100\n#endif\n\n#include \"rpc.h\"\n#include \"rpcndr.h\"\n\n#ifndef __RPCNDR_H_VERSION__\n#error this stub requires an updated version of <rpcndr.h>\n#endif // __RPCNDR_H_VERSION__\n\n#ifndef COM_NO_WINDOWS_H\n#include \"windows.h\"\n#include \"ole2.h\"\n#endif /*COM_NO_WINDOWS_H*/\n\n#ifndef __wuapi_h__\n#define __wuapi_h__\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n#pragma once\n#endif\n\n/* Forward Declarations */\n\n#ifndef __IUpdateLockdown_FWD_DEFINED__\n#define __IUpdateLockdown_FWD_DEFINED__\ntypedef interface IUpdateLockdown IUpdateLockdown;\n#endif \t/* __IUpdateLockdown_FWD_DEFINED__ */\n\n\n#ifndef __IStringCollection_FWD_DEFINED__\n#define __IStringCollection_FWD_DEFINED__\ntypedef interface IStringCollection IStringCollection;\n#endif \t/* __IStringCollection_FWD_DEFINED__ */\n\n\n#ifndef __IWebProxy_FWD_DEFINED__\n#define __IWebProxy_FWD_DEFINED__\ntypedef interface IWebProxy IWebProxy;\n#endif \t/* __IWebProxy_FWD_DEFINED__ */\n\n\n#ifndef __ISystemInformation_FWD_DEFINED__\n#define __ISystemInformation_FWD_DEFINED__\ntypedef interface ISystemInformation ISystemInformation;\n#endif \t/* __ISystemInformation_FWD_DEFINED__ */\n\n\n#ifndef __IWindowsUpdateAgentInfo_FWD_DEFINED__\n#define __IWindowsUpdateAgentInfo_FWD_DEFINED__\ntypedef interface IWindowsUpdateAgentInfo IWindowsUpdateAgentInfo;\n#endif \t/* __IWindowsUpdateAgentInfo_FWD_DEFINED__ */\n\n\n#ifndef __IAutomaticUpdatesResults_FWD_DEFINED__\n#define __IAutomaticUpdatesResults_FWD_DEFINED__\ntypedef interface IAutomaticUpdatesResults IAutomaticUpdatesResults;\n#endif \t/* __IAutomaticUpdatesResults_FWD_DEFINED__ */\n\n\n#ifndef __IAutomaticUpdatesSettings_FWD_DEFINED__\n#define __IAutomaticUpdatesSettings_FWD_DEFINED__\ntypedef interface IAutomaticUpdatesSettings IAutomaticUpdatesSettings;\n#endif \t/* __IAutomaticUpdatesSettings_FWD_DEFINED__ */\n\n\n#ifndef __IAutomaticUpdatesSettings2_FWD_DEFINED__\n#define __IAutomaticUpdatesSettings2_FWD_DEFINED__\ntypedef interface IAutomaticUpdatesSettings2 IAutomaticUpdatesSettings2;\n#endif \t/* __IAutomaticUpdatesSettings2_FWD_DEFINED__ */\n\n\n#ifndef __IAutomaticUpdatesSettings3_FWD_DEFINED__\n#define __IAutomaticUpdatesSettings3_FWD_DEFINED__\ntypedef interface IAutomaticUpdatesSettings3 IAutomaticUpdatesSettings3;\n#endif \t/* __IAutomaticUpdatesSettings3_FWD_DEFINED__ */\n\n\n#ifndef __IAutomaticUpdates_FWD_DEFINED__\n#define __IAutomaticUpdates_FWD_DEFINED__\ntypedef interface IAutomaticUpdates IAutomaticUpdates;\n#endif \t/* __IAutomaticUpdates_FWD_DEFINED__ */\n\n\n#ifndef __IAutomaticUpdates2_FWD_DEFINED__\n#define __IAutomaticUpdates2_FWD_DEFINED__\ntypedef interface IAutomaticUpdates2 IAutomaticUpdates2;\n#endif \t/* __IAutomaticUpdates2_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateIdentity_FWD_DEFINED__\n#define __IUpdateIdentity_FWD_DEFINED__\ntypedef interface IUpdateIdentity IUpdateIdentity;\n#endif \t/* __IUpdateIdentity_FWD_DEFINED__ */\n\n\n#ifndef __IImageInformation_FWD_DEFINED__\n#define __IImageInformation_FWD_DEFINED__\ntypedef interface IImageInformation IImageInformation;\n#endif \t/* __IImageInformation_FWD_DEFINED__ */\n\n\n#ifndef __ICategory_FWD_DEFINED__\n#define __ICategory_FWD_DEFINED__\ntypedef interface ICategory ICategory;\n#endif \t/* __ICategory_FWD_DEFINED__ */\n\n\n#ifndef __ICategoryCollection_FWD_DEFINED__\n#define __ICategoryCollection_FWD_DEFINED__\ntypedef interface ICategoryCollection ICategoryCollection;\n#endif \t/* __ICategoryCollection_FWD_DEFINED__ */\n\n\n#ifndef __IInstallationBehavior_FWD_DEFINED__\n#define __IInstallationBehavior_FWD_DEFINED__\ntypedef interface IInstallationBehavior IInstallationBehavior;\n#endif \t/* __IInstallationBehavior_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateDownloadContent_FWD_DEFINED__\n#define __IUpdateDownloadContent_FWD_DEFINED__\ntypedef interface IUpdateDownloadContent IUpdateDownloadContent;\n#endif \t/* __IUpdateDownloadContent_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateDownloadContent2_FWD_DEFINED__\n#define __IUpdateDownloadContent2_FWD_DEFINED__\ntypedef interface IUpdateDownloadContent2 IUpdateDownloadContent2;\n#endif \t/* __IUpdateDownloadContent2_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateDownloadContentCollection_FWD_DEFINED__\n#define __IUpdateDownloadContentCollection_FWD_DEFINED__\ntypedef interface IUpdateDownloadContentCollection IUpdateDownloadContentCollection;\n#endif \t/* __IUpdateDownloadContentCollection_FWD_DEFINED__ */\n\n\n#ifndef __IUpdate_FWD_DEFINED__\n#define __IUpdate_FWD_DEFINED__\ntypedef interface IUpdate IUpdate;\n#endif \t/* __IUpdate_FWD_DEFINED__ */\n\n\n#ifndef __IWindowsDriverUpdate_FWD_DEFINED__\n#define __IWindowsDriverUpdate_FWD_DEFINED__\ntypedef interface IWindowsDriverUpdate IWindowsDriverUpdate;\n#endif \t/* __IWindowsDriverUpdate_FWD_DEFINED__ */\n\n\n#ifndef __IUpdate2_FWD_DEFINED__\n#define __IUpdate2_FWD_DEFINED__\ntypedef interface IUpdate2 IUpdate2;\n#endif \t/* __IUpdate2_FWD_DEFINED__ */\n\n\n#ifndef __IUpdate3_FWD_DEFINED__\n#define __IUpdate3_FWD_DEFINED__\ntypedef interface IUpdate3 IUpdate3;\n#endif \t/* __IUpdate3_FWD_DEFINED__ */\n\n\n#ifndef __IUpdate4_FWD_DEFINED__\n#define __IUpdate4_FWD_DEFINED__\ntypedef interface IUpdate4 IUpdate4;\n#endif \t/* __IUpdate4_FWD_DEFINED__ */\n\n\n#ifndef __IUpdate5_FWD_DEFINED__\n#define __IUpdate5_FWD_DEFINED__\ntypedef interface IUpdate5 IUpdate5;\n#endif \t/* __IUpdate5_FWD_DEFINED__ */\n\n\n#ifndef __IWindowsDriverUpdate2_FWD_DEFINED__\n#define __IWindowsDriverUpdate2_FWD_DEFINED__\ntypedef interface IWindowsDriverUpdate2 IWindowsDriverUpdate2;\n#endif \t/* __IWindowsDriverUpdate2_FWD_DEFINED__ */\n\n\n#ifndef __IWindowsDriverUpdate3_FWD_DEFINED__\n#define __IWindowsDriverUpdate3_FWD_DEFINED__\ntypedef interface IWindowsDriverUpdate3 IWindowsDriverUpdate3;\n#endif \t/* __IWindowsDriverUpdate3_FWD_DEFINED__ */\n\n\n#ifndef __IWindowsDriverUpdateEntry_FWD_DEFINED__\n#define __IWindowsDriverUpdateEntry_FWD_DEFINED__\ntypedef interface IWindowsDriverUpdateEntry IWindowsDriverUpdateEntry;\n#endif \t/* __IWindowsDriverUpdateEntry_FWD_DEFINED__ */\n\n\n#ifndef __IWindowsDriverUpdateEntryCollection_FWD_DEFINED__\n#define __IWindowsDriverUpdateEntryCollection_FWD_DEFINED__\ntypedef interface IWindowsDriverUpdateEntryCollection IWindowsDriverUpdateEntryCollection;\n#endif \t/* __IWindowsDriverUpdateEntryCollection_FWD_DEFINED__ */\n\n\n#ifndef __IWindowsDriverUpdate4_FWD_DEFINED__\n#define __IWindowsDriverUpdate4_FWD_DEFINED__\ntypedef interface IWindowsDriverUpdate4 IWindowsDriverUpdate4;\n#endif \t/* __IWindowsDriverUpdate4_FWD_DEFINED__ */\n\n\n#ifndef __IWindowsDriverUpdate5_FWD_DEFINED__\n#define __IWindowsDriverUpdate5_FWD_DEFINED__\ntypedef interface IWindowsDriverUpdate5 IWindowsDriverUpdate5;\n#endif \t/* __IWindowsDriverUpdate5_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateCollection_FWD_DEFINED__\n#define __IUpdateCollection_FWD_DEFINED__\ntypedef interface IUpdateCollection IUpdateCollection;\n#endif \t/* __IUpdateCollection_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateException_FWD_DEFINED__\n#define __IUpdateException_FWD_DEFINED__\ntypedef interface IUpdateException IUpdateException;\n#endif \t/* __IUpdateException_FWD_DEFINED__ */\n\n\n#ifndef __IInvalidProductLicenseException_FWD_DEFINED__\n#define __IInvalidProductLicenseException_FWD_DEFINED__\ntypedef interface IInvalidProductLicenseException IInvalidProductLicenseException;\n#endif \t/* __IInvalidProductLicenseException_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateExceptionCollection_FWD_DEFINED__\n#define __IUpdateExceptionCollection_FWD_DEFINED__\ntypedef interface IUpdateExceptionCollection IUpdateExceptionCollection;\n#endif \t/* __IUpdateExceptionCollection_FWD_DEFINED__ */\n\n\n#ifndef __ISearchResult_FWD_DEFINED__\n#define __ISearchResult_FWD_DEFINED__\ntypedef interface ISearchResult ISearchResult;\n#endif \t/* __ISearchResult_FWD_DEFINED__ */\n\n\n#ifndef __ISearchJob_FWD_DEFINED__\n#define __ISearchJob_FWD_DEFINED__\ntypedef interface ISearchJob ISearchJob;\n#endif \t/* __ISearchJob_FWD_DEFINED__ */\n\n\n#ifndef __ISearchCompletedCallbackArgs_FWD_DEFINED__\n#define __ISearchCompletedCallbackArgs_FWD_DEFINED__\ntypedef interface ISearchCompletedCallbackArgs ISearchCompletedCallbackArgs;\n#endif \t/* __ISearchCompletedCallbackArgs_FWD_DEFINED__ */\n\n\n#ifndef __ISearchCompletedCallback_FWD_DEFINED__\n#define __ISearchCompletedCallback_FWD_DEFINED__\ntypedef interface ISearchCompletedCallback ISearchCompletedCallback;\n#endif \t/* __ISearchCompletedCallback_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateHistoryEntry_FWD_DEFINED__\n#define __IUpdateHistoryEntry_FWD_DEFINED__\ntypedef interface IUpdateHistoryEntry IUpdateHistoryEntry;\n#endif \t/* __IUpdateHistoryEntry_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateHistoryEntry2_FWD_DEFINED__\n#define __IUpdateHistoryEntry2_FWD_DEFINED__\ntypedef interface IUpdateHistoryEntry2 IUpdateHistoryEntry2;\n#endif \t/* __IUpdateHistoryEntry2_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateHistoryEntryCollection_FWD_DEFINED__\n#define __IUpdateHistoryEntryCollection_FWD_DEFINED__\ntypedef interface IUpdateHistoryEntryCollection IUpdateHistoryEntryCollection;\n#endif \t/* __IUpdateHistoryEntryCollection_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateSearcher_FWD_DEFINED__\n#define __IUpdateSearcher_FWD_DEFINED__\ntypedef interface IUpdateSearcher IUpdateSearcher;\n#endif \t/* __IUpdateSearcher_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateSearcher2_FWD_DEFINED__\n#define __IUpdateSearcher2_FWD_DEFINED__\ntypedef interface IUpdateSearcher2 IUpdateSearcher2;\n#endif \t/* __IUpdateSearcher2_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateSearcher3_FWD_DEFINED__\n#define __IUpdateSearcher3_FWD_DEFINED__\ntypedef interface IUpdateSearcher3 IUpdateSearcher3;\n#endif \t/* __IUpdateSearcher3_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateDownloadResult_FWD_DEFINED__\n#define __IUpdateDownloadResult_FWD_DEFINED__\ntypedef interface IUpdateDownloadResult IUpdateDownloadResult;\n#endif \t/* __IUpdateDownloadResult_FWD_DEFINED__ */\n\n\n#ifndef __IDownloadResult_FWD_DEFINED__\n#define __IDownloadResult_FWD_DEFINED__\ntypedef interface IDownloadResult IDownloadResult;\n#endif \t/* __IDownloadResult_FWD_DEFINED__ */\n\n\n#ifndef __IDownloadProgress_FWD_DEFINED__\n#define __IDownloadProgress_FWD_DEFINED__\ntypedef interface IDownloadProgress IDownloadProgress;\n#endif \t/* __IDownloadProgress_FWD_DEFINED__ */\n\n\n#ifndef __IDownloadJob_FWD_DEFINED__\n#define __IDownloadJob_FWD_DEFINED__\ntypedef interface IDownloadJob IDownloadJob;\n#endif \t/* __IDownloadJob_FWD_DEFINED__ */\n\n\n#ifndef __IDownloadCompletedCallbackArgs_FWD_DEFINED__\n#define __IDownloadCompletedCallbackArgs_FWD_DEFINED__\ntypedef interface IDownloadCompletedCallbackArgs IDownloadCompletedCallbackArgs;\n#endif \t/* __IDownloadCompletedCallbackArgs_FWD_DEFINED__ */\n\n\n#ifndef __IDownloadCompletedCallback_FWD_DEFINED__\n#define __IDownloadCompletedCallback_FWD_DEFINED__\ntypedef interface IDownloadCompletedCallback IDownloadCompletedCallback;\n#endif \t/* __IDownloadCompletedCallback_FWD_DEFINED__ */\n\n\n#ifndef __IDownloadProgressChangedCallbackArgs_FWD_DEFINED__\n#define __IDownloadProgressChangedCallbackArgs_FWD_DEFINED__\ntypedef interface IDownloadProgressChangedCallbackArgs IDownloadProgressChangedCallbackArgs;\n#endif \t/* __IDownloadProgressChangedCallbackArgs_FWD_DEFINED__ */\n\n\n#ifndef __IDownloadProgressChangedCallback_FWD_DEFINED__\n#define __IDownloadProgressChangedCallback_FWD_DEFINED__\ntypedef interface IDownloadProgressChangedCallback IDownloadProgressChangedCallback;\n#endif \t/* __IDownloadProgressChangedCallback_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateDownloader_FWD_DEFINED__\n#define __IUpdateDownloader_FWD_DEFINED__\ntypedef interface IUpdateDownloader IUpdateDownloader;\n#endif \t/* __IUpdateDownloader_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateInstallationResult_FWD_DEFINED__\n#define __IUpdateInstallationResult_FWD_DEFINED__\ntypedef interface IUpdateInstallationResult IUpdateInstallationResult;\n#endif \t/* __IUpdateInstallationResult_FWD_DEFINED__ */\n\n\n#ifndef __IInstallationResult_FWD_DEFINED__\n#define __IInstallationResult_FWD_DEFINED__\ntypedef interface IInstallationResult IInstallationResult;\n#endif \t/* __IInstallationResult_FWD_DEFINED__ */\n\n\n#ifndef __IInstallationProgress_FWD_DEFINED__\n#define __IInstallationProgress_FWD_DEFINED__\ntypedef interface IInstallationProgress IInstallationProgress;\n#endif \t/* __IInstallationProgress_FWD_DEFINED__ */\n\n\n#ifndef __IInstallationJob_FWD_DEFINED__\n#define __IInstallationJob_FWD_DEFINED__\ntypedef interface IInstallationJob IInstallationJob;\n#endif \t/* __IInstallationJob_FWD_DEFINED__ */\n\n\n#ifndef __IInstallationCompletedCallbackArgs_FWD_DEFINED__\n#define __IInstallationCompletedCallbackArgs_FWD_DEFINED__\ntypedef interface IInstallationCompletedCallbackArgs IInstallationCompletedCallbackArgs;\n#endif \t/* __IInstallationCompletedCallbackArgs_FWD_DEFINED__ */\n\n\n#ifndef __IInstallationCompletedCallback_FWD_DEFINED__\n#define __IInstallationCompletedCallback_FWD_DEFINED__\ntypedef interface IInstallationCompletedCallback IInstallationCompletedCallback;\n#endif \t/* __IInstallationCompletedCallback_FWD_DEFINED__ */\n\n\n#ifndef __IInstallationProgressChangedCallbackArgs_FWD_DEFINED__\n#define __IInstallationProgressChangedCallbackArgs_FWD_DEFINED__\ntypedef interface IInstallationProgressChangedCallbackArgs IInstallationProgressChangedCallbackArgs;\n#endif \t/* __IInstallationProgressChangedCallbackArgs_FWD_DEFINED__ */\n\n\n#ifndef __IInstallationProgressChangedCallback_FWD_DEFINED__\n#define __IInstallationProgressChangedCallback_FWD_DEFINED__\ntypedef interface IInstallationProgressChangedCallback IInstallationProgressChangedCallback;\n#endif \t/* __IInstallationProgressChangedCallback_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateInstaller_FWD_DEFINED__\n#define __IUpdateInstaller_FWD_DEFINED__\ntypedef interface IUpdateInstaller IUpdateInstaller;\n#endif \t/* __IUpdateInstaller_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateInstaller2_FWD_DEFINED__\n#define __IUpdateInstaller2_FWD_DEFINED__\ntypedef interface IUpdateInstaller2 IUpdateInstaller2;\n#endif \t/* __IUpdateInstaller2_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateSession_FWD_DEFINED__\n#define __IUpdateSession_FWD_DEFINED__\ntypedef interface IUpdateSession IUpdateSession;\n#endif \t/* __IUpdateSession_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateSession2_FWD_DEFINED__\n#define __IUpdateSession2_FWD_DEFINED__\ntypedef interface IUpdateSession2 IUpdateSession2;\n#endif \t/* __IUpdateSession2_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateSession3_FWD_DEFINED__\n#define __IUpdateSession3_FWD_DEFINED__\ntypedef interface IUpdateSession3 IUpdateSession3;\n#endif \t/* __IUpdateSession3_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateService_FWD_DEFINED__\n#define __IUpdateService_FWD_DEFINED__\ntypedef interface IUpdateService IUpdateService;\n#endif \t/* __IUpdateService_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateService2_FWD_DEFINED__\n#define __IUpdateService2_FWD_DEFINED__\ntypedef interface IUpdateService2 IUpdateService2;\n#endif \t/* __IUpdateService2_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateServiceCollection_FWD_DEFINED__\n#define __IUpdateServiceCollection_FWD_DEFINED__\ntypedef interface IUpdateServiceCollection IUpdateServiceCollection;\n#endif \t/* __IUpdateServiceCollection_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateServiceRegistration_FWD_DEFINED__\n#define __IUpdateServiceRegistration_FWD_DEFINED__\ntypedef interface IUpdateServiceRegistration IUpdateServiceRegistration;\n#endif \t/* __IUpdateServiceRegistration_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateServiceManager_FWD_DEFINED__\n#define __IUpdateServiceManager_FWD_DEFINED__\ntypedef interface IUpdateServiceManager IUpdateServiceManager;\n#endif \t/* __IUpdateServiceManager_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateServiceManager2_FWD_DEFINED__\n#define __IUpdateServiceManager2_FWD_DEFINED__\ntypedef interface IUpdateServiceManager2 IUpdateServiceManager2;\n#endif \t/* __IUpdateServiceManager2_FWD_DEFINED__ */\n\n\n#ifndef __IInstallationAgent_FWD_DEFINED__\n#define __IInstallationAgent_FWD_DEFINED__\ntypedef interface IInstallationAgent IInstallationAgent;\n#endif \t/* __IInstallationAgent_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateLockdown_FWD_DEFINED__\n#define __IUpdateLockdown_FWD_DEFINED__\ntypedef interface IUpdateLockdown IUpdateLockdown;\n#endif \t/* __IUpdateLockdown_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateException_FWD_DEFINED__\n#define __IUpdateException_FWD_DEFINED__\ntypedef interface IUpdateException IUpdateException;\n#endif \t/* __IUpdateException_FWD_DEFINED__ */\n\n\n#ifndef __IInvalidProductLicenseException_FWD_DEFINED__\n#define __IInvalidProductLicenseException_FWD_DEFINED__\ntypedef interface IInvalidProductLicenseException IInvalidProductLicenseException;\n#endif \t/* __IInvalidProductLicenseException_FWD_DEFINED__ */\n\n\n#ifndef __IAutomaticUpdatesSettings_FWD_DEFINED__\n#define __IAutomaticUpdatesSettings_FWD_DEFINED__\ntypedef interface IAutomaticUpdatesSettings IAutomaticUpdatesSettings;\n#endif \t/* __IAutomaticUpdatesSettings_FWD_DEFINED__ */\n\n\n#ifndef __IAutomaticUpdatesSettings2_FWD_DEFINED__\n#define __IAutomaticUpdatesSettings2_FWD_DEFINED__\ntypedef interface IAutomaticUpdatesSettings2 IAutomaticUpdatesSettings2;\n#endif \t/* __IAutomaticUpdatesSettings2_FWD_DEFINED__ */\n\n\n#ifndef __IAutomaticUpdatesSettings3_FWD_DEFINED__\n#define __IAutomaticUpdatesSettings3_FWD_DEFINED__\ntypedef interface IAutomaticUpdatesSettings3 IAutomaticUpdatesSettings3;\n#endif \t/* __IAutomaticUpdatesSettings3_FWD_DEFINED__ */\n\n\n#ifndef __IUpdate_FWD_DEFINED__\n#define __IUpdate_FWD_DEFINED__\ntypedef interface IUpdate IUpdate;\n#endif \t/* __IUpdate_FWD_DEFINED__ */\n\n\n#ifndef __IUpdate2_FWD_DEFINED__\n#define __IUpdate2_FWD_DEFINED__\ntypedef interface IUpdate2 IUpdate2;\n#endif \t/* __IUpdate2_FWD_DEFINED__ */\n\n\n#ifndef __IUpdate3_FWD_DEFINED__\n#define __IUpdate3_FWD_DEFINED__\ntypedef interface IUpdate3 IUpdate3;\n#endif \t/* __IUpdate3_FWD_DEFINED__ */\n\n\n#ifndef __IWindowsDriverUpdateEntry_FWD_DEFINED__\n#define __IWindowsDriverUpdateEntry_FWD_DEFINED__\ntypedef interface IWindowsDriverUpdateEntry IWindowsDriverUpdateEntry;\n#endif \t/* __IWindowsDriverUpdateEntry_FWD_DEFINED__ */\n\n\n#ifndef __IWindowsDriverUpdateEntryCollection_FWD_DEFINED__\n#define __IWindowsDriverUpdateEntryCollection_FWD_DEFINED__\ntypedef interface IWindowsDriverUpdateEntryCollection IWindowsDriverUpdateEntryCollection;\n#endif \t/* __IWindowsDriverUpdateEntryCollection_FWD_DEFINED__ */\n\n\n#ifndef __IUpdate4_FWD_DEFINED__\n#define __IUpdate4_FWD_DEFINED__\ntypedef interface IUpdate4 IUpdate4;\n#endif \t/* __IUpdate4_FWD_DEFINED__ */\n\n\n#ifndef __IUpdate5_FWD_DEFINED__\n#define __IUpdate5_FWD_DEFINED__\ntypedef interface IUpdate5 IUpdate5;\n#endif \t/* __IUpdate5_FWD_DEFINED__ */\n\n\n#ifndef __IWindowsDriverUpdate_FWD_DEFINED__\n#define __IWindowsDriverUpdate_FWD_DEFINED__\ntypedef interface IWindowsDriverUpdate IWindowsDriverUpdate;\n#endif \t/* __IWindowsDriverUpdate_FWD_DEFINED__ */\n\n\n#ifndef __IWindowsDriverUpdate2_FWD_DEFINED__\n#define __IWindowsDriverUpdate2_FWD_DEFINED__\ntypedef interface IWindowsDriverUpdate2 IWindowsDriverUpdate2;\n#endif \t/* __IWindowsDriverUpdate2_FWD_DEFINED__ */\n\n\n#ifndef __IWindowsDriverUpdate3_FWD_DEFINED__\n#define __IWindowsDriverUpdate3_FWD_DEFINED__\ntypedef interface IWindowsDriverUpdate3 IWindowsDriverUpdate3;\n#endif \t/* __IWindowsDriverUpdate3_FWD_DEFINED__ */\n\n\n#ifndef __IWindowsDriverUpdate4_FWD_DEFINED__\n#define __IWindowsDriverUpdate4_FWD_DEFINED__\ntypedef interface IWindowsDriverUpdate4 IWindowsDriverUpdate4;\n#endif \t/* __IWindowsDriverUpdate4_FWD_DEFINED__ */\n\n\n#ifndef __IWindowsDriverUpdate5_FWD_DEFINED__\n#define __IWindowsDriverUpdate5_FWD_DEFINED__\ntypedef interface IWindowsDriverUpdate5 IWindowsDriverUpdate5;\n#endif \t/* __IWindowsDriverUpdate5_FWD_DEFINED__ */\n\n\n#ifndef __ISearchCompletedCallback_FWD_DEFINED__\n#define __ISearchCompletedCallback_FWD_DEFINED__\ntypedef interface ISearchCompletedCallback ISearchCompletedCallback;\n#endif \t/* __ISearchCompletedCallback_FWD_DEFINED__ */\n\n\n#ifndef __IDownloadCompletedCallback_FWD_DEFINED__\n#define __IDownloadCompletedCallback_FWD_DEFINED__\ntypedef interface IDownloadCompletedCallback IDownloadCompletedCallback;\n#endif \t/* __IDownloadCompletedCallback_FWD_DEFINED__ */\n\n\n#ifndef __IDownloadProgressChangedCallback_FWD_DEFINED__\n#define __IDownloadProgressChangedCallback_FWD_DEFINED__\ntypedef interface IDownloadProgressChangedCallback IDownloadProgressChangedCallback;\n#endif \t/* __IDownloadProgressChangedCallback_FWD_DEFINED__ */\n\n\n#ifndef __IInstallationCompletedCallback_FWD_DEFINED__\n#define __IInstallationCompletedCallback_FWD_DEFINED__\ntypedef interface IInstallationCompletedCallback IInstallationCompletedCallback;\n#endif \t/* __IInstallationCompletedCallback_FWD_DEFINED__ */\n\n\n#ifndef __IInstallationProgressChangedCallback_FWD_DEFINED__\n#define __IInstallationProgressChangedCallback_FWD_DEFINED__\ntypedef interface IInstallationProgressChangedCallback IInstallationProgressChangedCallback;\n#endif \t/* __IInstallationProgressChangedCallback_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateHistoryEntry_FWD_DEFINED__\n#define __IUpdateHistoryEntry_FWD_DEFINED__\ntypedef interface IUpdateHistoryEntry IUpdateHistoryEntry;\n#endif \t/* __IUpdateHistoryEntry_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateHistoryEntry2_FWD_DEFINED__\n#define __IUpdateHistoryEntry2_FWD_DEFINED__\ntypedef interface IUpdateHistoryEntry2 IUpdateHistoryEntry2;\n#endif \t/* __IUpdateHistoryEntry2_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateDownloadContent_FWD_DEFINED__\n#define __IUpdateDownloadContent_FWD_DEFINED__\ntypedef interface IUpdateDownloadContent IUpdateDownloadContent;\n#endif \t/* __IUpdateDownloadContent_FWD_DEFINED__ */\n\n\n#ifndef __IUpdateDownloadContent2_FWD_DEFINED__\n#define __IUpdateDownloadContent2_FWD_DEFINED__\ntypedef interface IUpdateDownloadContent2 IUpdateDownloadContent2;\n#endif \t/* __IUpdateDownloadContent2_FWD_DEFINED__ */\n\n\n#ifndef __StringCollection_FWD_DEFINED__\n#define __StringCollection_FWD_DEFINED__\n\n#ifdef __cplusplus\ntypedef class StringCollection StringCollection;\n#else\ntypedef struct StringCollection StringCollection;\n#endif /* __cplusplus */\n\n#endif \t/* __StringCollection_FWD_DEFINED__ */\n\n\n#ifndef __UpdateSearcher_FWD_DEFINED__\n#define __UpdateSearcher_FWD_DEFINED__\n\n#ifdef __cplusplus\ntypedef class UpdateSearcher UpdateSearcher;\n#else\ntypedef struct UpdateSearcher UpdateSearcher;\n#endif /* __cplusplus */\n\n#endif \t/* __UpdateSearcher_FWD_DEFINED__ */\n\n\n#ifndef __WebProxy_FWD_DEFINED__\n#define __WebProxy_FWD_DEFINED__\n\n#ifdef __cplusplus\ntypedef class WebProxy WebProxy;\n#else\ntypedef struct WebProxy WebProxy;\n#endif /* __cplusplus */\n\n#endif \t/* __WebProxy_FWD_DEFINED__ */\n\n\n#ifndef __SystemInformation_FWD_DEFINED__\n#define __SystemInformation_FWD_DEFINED__\n\n#ifdef __cplusplus\ntypedef class SystemInformation SystemInformation;\n#else\ntypedef struct SystemInformation SystemInformation;\n#endif /* __cplusplus */\n\n#endif \t/* __SystemInformation_FWD_DEFINED__ */\n\n\n#ifndef __WindowsUpdateAgentInfo_FWD_DEFINED__\n#define __WindowsUpdateAgentInfo_FWD_DEFINED__\n\n#ifdef __cplusplus\ntypedef class WindowsUpdateAgentInfo WindowsUpdateAgentInfo;\n#else\ntypedef struct WindowsUpdateAgentInfo WindowsUpdateAgentInfo;\n#endif /* __cplusplus */\n\n#endif \t/* __WindowsUpdateAgentInfo_FWD_DEFINED__ */\n\n\n#ifndef __AutomaticUpdates_FWD_DEFINED__\n#define __AutomaticUpdates_FWD_DEFINED__\n\n#ifdef __cplusplus\ntypedef class AutomaticUpdates AutomaticUpdates;\n#else\ntypedef struct AutomaticUpdates AutomaticUpdates;\n#endif /* __cplusplus */\n\n#endif \t/* __AutomaticUpdates_FWD_DEFINED__ */\n\n\n#ifndef __UpdateCollection_FWD_DEFINED__\n#define __UpdateCollection_FWD_DEFINED__\n\n#ifdef __cplusplus\ntypedef class UpdateCollection UpdateCollection;\n#else\ntypedef struct UpdateCollection UpdateCollection;\n#endif /* __cplusplus */\n\n#endif \t/* __UpdateCollection_FWD_DEFINED__ */\n\n\n#ifndef __UpdateDownloader_FWD_DEFINED__\n#define __UpdateDownloader_FWD_DEFINED__\n\n#ifdef __cplusplus\ntypedef class UpdateDownloader UpdateDownloader;\n#else\ntypedef struct UpdateDownloader UpdateDownloader;\n#endif /* __cplusplus */\n\n#endif \t/* __UpdateDownloader_FWD_DEFINED__ */\n\n\n#ifndef __UpdateInstaller_FWD_DEFINED__\n#define __UpdateInstaller_FWD_DEFINED__\n\n#ifdef __cplusplus\ntypedef class UpdateInstaller UpdateInstaller;\n#else\ntypedef struct UpdateInstaller UpdateInstaller;\n#endif /* __cplusplus */\n\n#endif \t/* __UpdateInstaller_FWD_DEFINED__ */\n\n\n#ifndef __UpdateSession_FWD_DEFINED__\n#define __UpdateSession_FWD_DEFINED__\n\n#ifdef __cplusplus\ntypedef class UpdateSession UpdateSession;\n#else\ntypedef struct UpdateSession UpdateSession;\n#endif /* __cplusplus */\n\n#endif \t/* __UpdateSession_FWD_DEFINED__ */\n\n\n#ifndef __UpdateServiceManager_FWD_DEFINED__\n#define __UpdateServiceManager_FWD_DEFINED__\n\n#ifdef __cplusplus\ntypedef class UpdateServiceManager UpdateServiceManager;\n#else\ntypedef struct UpdateServiceManager UpdateServiceManager;\n#endif /* __cplusplus */\n\n#endif \t/* __UpdateServiceManager_FWD_DEFINED__ */\n\n\n#ifndef __InstallationAgent_FWD_DEFINED__\n#define __InstallationAgent_FWD_DEFINED__\n\n#ifdef __cplusplus\ntypedef class InstallationAgent InstallationAgent;\n#else\ntypedef struct InstallationAgent InstallationAgent;\n#endif /* __cplusplus */\n\n#endif \t/* __InstallationAgent_FWD_DEFINED__ */\n\n\n/* header files for imported files */\n#include \"oaidl.h\"\n\n#ifdef __cplusplus\nextern \"C\"{\n#endif\n\n\n/* interface __MIDL_itf_wuapi_0000_0000 */\n/* [local] */\n\n//=--------------------------------------------------------------------------=\n// wuapi.h\n//=--------------------------------------------------------------------------=\n// (C) Copyright 2003-2004 Microsoft Corporation.  All Rights Reserved.\n//\n// THIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF\n// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A\n// PARTICULAR PURPOSE.\n//=--------------------------------------------------------------------------=\n\n#pragma comment(lib, \"wuguid.lib\")\n\n//--------------------------------------------------------------------------\n// Windows Update Services Client Interfaces.\n// --------------------------------------------------------------------------------\n// GUIDS\n// --------------------------------------------------------------------------------\n// {B596CC9F-56E5-419E-A622-E01BB457431E}\nDEFINE_GUID(LIBID_WUApiLib,0xB596CC9F,0x56E5,0x419E,0xA6,0x22,0xE0,0x1B,0xB4,0x57,0x43,0x1E);\n\n// {A976C28D-75A1-42AA-94AE-8AF8B872089A}\nDEFINE_GUID(IID_IUpdateLockdown,0xa976c28d,0x75a1,0x42aa,0x94,0xae,0x8a,0xf8,0xb8,0x72,0x08,0x9a);\n\n// {EFF90582-2DDC-480F-A06D-60F3FBC362C3}\nDEFINE_GUID(IID_IStringCollection,0xeff90582,0x2ddc,0x480f,0xa0,0x6d,0x60,0xf3,0xfb,0xc3,0x62,0xc3);\n\n// {174C81FE-AECD-4DAE-B8A0-2C6318DD86A8}\nDEFINE_GUID(IID_IWebProxy,0x174c81fe,0xaecd,0x4dae,0xb8,0xa0,0x2c,0x63,0x18,0xdd,0x86,0xa8);\n\n// {ADE87BF7-7B56-4275-8FAB-B9B0E591844B}\nDEFINE_GUID(IID_ISystemInformation,0xade87bf7,0x7b56,0x4275,0x8f,0xab,0xb9,0xb0,0xe5,0x91,0x84,0x4b);\n\n// {85713FA1-7796-4FA2-BE3B-E2D6124DD373}\nDEFINE_GUID(IID_IWindowsUpdateAgentInfo,0x85713FA1,0x7796,0x4FA2,0xBE,0x3B,0xE2,0xD6,0x12,0x4D,0xD3,0x73);\n\n// {E7A4D634-7942-4DD9-A111-82228BA33901}\nDEFINE_GUID(IID_IAutomaticUpdatesResults,0xe7a4d634,0x7942,0x4DD9,0xA1,0x11,0x82,0x22,0x8b,0xa3,0x39,0x1);\n\n// {2EE48F22-AF3C-405F-8970-F71BE12EE9A2}\nDEFINE_GUID(IID_IAutomaticUpdatesSettings,0x2ee48f22,0xaf3c,0x405f,0x89,0x70,0xf7,0x1b,0xe1,0x2e,0xe9,0xa2);\n\n// {6ABC136A-C3CA-4384-8171-CB2B1E59B8DC}\nDEFINE_GUID(IID_IAutomaticUpdatesSettings2,0x6abc136a,0xc3ca,0x4384,0x81,0x71,0xcb,0x2b,0x1e,0x59,0xb8,0xdc);\n\n// {B587F5C3-F57E-485F-BBF5-0D181C5CD0DC}\nDEFINE_GUID(IID_IAutomaticUpdatesSettings3,0xb587f5c3,0xf57e,0x485f,0xbb,0xf5,0x0d,0x18,0x1c,0x5c,0xd0,0xdc);\n\n// {673425BF-C082-4C7C-BDFD-569464B8E0CE}\nDEFINE_GUID(IID_IAutomaticUpdates,0x673425bf,0xc082,0x4c7c,0xbd,0xfd,0x56,0x94,0x64,0xb8,0xe0,0xce);\n\n// {4A2F5C31-CFD9-410E-B7FB-29A653973A0F}\nDEFINE_GUID(IID_IAutomaticUpdates2,0x4A2f5C31,0xCFD9,0x410E,0xB7,0xFB,0x29,0xA6,0x53,0x97,0x3A,0xF);\n\n// {46297823-9940-4C09-AED9-CD3EA6D05968}\nDEFINE_GUID(IID_IUpdateIdentity,0x46297823,0x9940,0x4c09,0xae,0xd9,0xcd,0x3e,0xa6,0xd0,0x59,0x68);\n\n// {7C907864-346C-4AEB-8F3F-57DA289F969F}\nDEFINE_GUID(IID_IImageInformation,0x7c907864,0x346c,0x4aeb,0x8f,0x3f,0x57,0xda,0x28,0x9f,0x96,0x9f);\n\n// {81DDC1B8-9D35-47A6-B471-5B80F519223B}\nDEFINE_GUID(IID_ICategory,0x81ddc1b8,0x9d35,0x47a6,0xb4,0x71,0x5b,0x80,0xf5,0x19,0x22,0x3b);\n\n// {3A56BFB8-576C-43F7-9335-FE4838FD7E37}\nDEFINE_GUID(IID_ICategoryCollection,0x3a56bfb8,0x576c,0x43f7,0x93,0x35,0xfe,0x48,0x38,0xfd,0x7e,0x37);\n\n// {D9A59339-E245-4DBD-9686-4D5763E39624}\nDEFINE_GUID(IID_IInstallationBehavior,0xd9a59339,0xe245,0x4dbd,0x96,0x86,0x4d,0x57,0x63,0xe3,0x96,0x24);\n\n// {54A2CB2D-9A0C-48B6-8A50-9ABB69EE2D02}\nDEFINE_GUID(IID_IUpdateDownloadContent,0x54a2cb2d,0x9a0c,0x48b6,0x8a,0x50,0x9a,0xbb,0x69,0xee,0x2d,0x02);\n\n// {C97AD11B-F257-420B-9D9F-377F733F6F68}\nDEFINE_GUID(IID_IUpdateDownloadContent2,0xc97ad11b,0xf257,0x420b,0x9d,0x9f,0x37,0x7f,0x73,0x3f,0x6f,0x68);\n\n// {BC5513C8-B3B8-4BF7-A4D4-361C0D8C88BA}\nDEFINE_GUID(IID_IUpdateDownloadContentCollection,0xbc5513c8,0xb3b8,0x4bf7,0xa4,0xd4,0x36,0x1c,0x0d,0x8c,0x88,0xba);\n\n// {6A92B07A-D821-4682-B423-5C805022CC4D}\nDEFINE_GUID(IID_IUpdate,0x6a92b07a,0xd821,0x4682,0xb4,0x23,0x5c,0x80,0x50,0x22,0xcc,0x4d);\n\n// {144fe9b0-d23d-4a8b-8634-fb4457533b7a}\nDEFINE_GUID(IID_IUpdate2,0x144fe9b0,0xd23d,0x4a8b,0x86,0x34,0xfb,0x44,0x57,0x53,0x3b,0x7a);\n\n// {112EDA6B-95B3-476F-9D90-AEE82C6B8181}\nDEFINE_GUID(IID_IUpdate3,0x112EDA6B,0x95B3,0x476F,0x9D,0x90,0xAE,0xE8,0x2C,0x6B,0x81,0x81);\n\n// {27E94B0D-5139-49A2-9A61-93522DC54652}\nDEFINE_GUID(IID_IUpdate4,0x27e94b0d,0x5139,0x49a2,0x9a, 0x61, 0x93, 0x52, 0x2d, 0xc5, 0x46, 0x52);\n\n// {C1C2F21A-D2F4-4902-B5C6-8A081C19A890}\nDEFINE_GUID(IID_IUpdate5,0xc1c2f21a,0xd2f4,0x4902,0xb5, 0xc6, 0x8a, 0x08, 0x1c, 0x19, 0xa8, 0x90);\n\n// {B383CD1A-5CE9-4504-9F63-764B1236F191}\nDEFINE_GUID(IID_IWindowsDriverUpdate,0xb383cd1a,0x5ce9,0x4504,0x9f,0x63,0x76,0x4b,0x12,0x36,0xf1,0x91);\n\n// {615c4269-7a48-43bd-96b7-bf6ca27d6c3e}\nDEFINE_GUID(IID_IWindowsDriverUpdate2,0x615c4269,0x7a48,0x43bd,0x96,0xb7,0xbf,0x6c,0xa2,0x7d,0x6c,0x3e);\n\n// {49EBD502-4A96-41BD-9E3E-4C5057F4250C}\nDEFINE_GUID(IID_IWindowsDriverUpdate3,0x49EBD502,0x4A96,0x41BD,0x9E,0x3E,0x4C,0x50,0x57,0xF4,0x25,0x0C);\n\n// {004C6A2B-0C19-4c69-9F5C-A269B2560DB9}\nDEFINE_GUID(IID_IWindowsDriverUpdate4,0x004C6A2B,0x0C19,0x4c69,0x9F,0x5C,0xA2,0x69,0xB2,0x56,0x0D,0xB9);\n\n// {70CF5C82-8642-42bb-9DBC-0CFD263C6C4F}\nDEFINE_GUID(IID_IWindowsDriverUpdate5,0x70CF5C82,0x8642,0x42bb,0x9d,0xbc,0x0c,0xfd,0x26,0x3c,0x6c,0x4f);\n\n// {0D521700-A372-4bef-828B-3D00C10ADEBD}\nDEFINE_GUID(IID_IWindowsDriverUpdateEntryCollection,0x0D521700,0xA372,0x4bef,0x82,0x8B,0x3D,0x00,0xC1,0x0A,0xDE,0xBD);\n\n// {ED8BFE40-A60B-42ea-9652-817DFCFA23EC}\nDEFINE_GUID(IID_IWindowsDriverUpdateEntry,0xED8BFE40,0xA60B,0x42ea,0x96,0x52,0x81,0x7D,0xFC,0xFA,0x23,0xEC);\n\n// {07F7438C-7709-4CA5-B518-91279288134E}\nDEFINE_GUID(IID_IUpdateCollection,0x07f7438c,0x7709,0x4ca5,0xb5,0x18,0x91,0x27,0x92,0x88,0x13,0x4e);\n\n// {A376DD5E-09D4-427F-AF7C-FED5B6E1C1D6}\nDEFINE_GUID(IID_IUpdateException,0xa376dd5e,0x09d4,0x427f,0xaf,0x7c,0xfe,0xd5,0xb6,0xe1,0xc1,0xd6);\n\n// {A37D00F5-7BB0-4953-B414-F9E98326F2E8}\nDEFINE_GUID(IID_IInvalidProductLicenseException,0xa37d00f5,0x7bb0,0x4953,0xb4,0x14,0xf9,0xe9,0x83,0x26,0xf2,0xe8);\n\n// {A37D00F5-7BB0-4953-B414-F9E98326F2E8}\nDEFINE_GUID(IID_IUpdateExceptionCollection,0x503626a3,0x8e14,0x4729,0x93,0x55,0x0f,0xe6,0x64,0xbd,0x23,0x21);\n\n// {D40CFF62-E08C-4498-941A-01E25F0FD33C}\nDEFINE_GUID(IID_ISearchResult,0xd40cff62,0xe08c,0x4498,0x94,0x1a,0x01,0xe2,0x5f,0x0f,0xd3,0x3c);\n\n// {7366EA16-7A1A-4EA2-B042-973D3E9CD99B}\nDEFINE_GUID(IID_ISearchJob,0x7366ea16,0x7a1a,0x4ea2,0xb0,0x42,0x97,0x3d,0x3e,0x9c,0xd9,0x9b);\n\n// {A700A634-2850-4C47-938A-9E4B6E5AF9A6}\nDEFINE_GUID(IID_ISearchCompletedCallbackArgs,0xa700a634,0x2850,0x4c47,0x93,0x8a,0x9e,0x4b,0x6e,0x5a,0xf9,0xa6);\n\n// {88AEE058-D4B0-4725-A2F1-814A67AE964C}\nDEFINE_GUID(IID_ISearchCompletedCallback,0x88aee058,0xd4b0,0x4725,0xa2,0xf1,0x81,0x4a,0x67,0xae,0x96,0x4c);\n\n// {BE56A644-AF0E-4E0E-A311-C1D8E695CBFF}\nDEFINE_GUID(IID_IUpdateHistoryEntry,0xbe56a644,0xaf0e,0x4e0e,0xa3,0x11,0xc1,0xd8,0xe6,0x95,0xcb,0xff);\n\n// {C2BFB780-4539-4132-AB8C-0A8772013AB6}\nDEFINE_GUID(IID_IUpdateHistoryEntry2,0xc2bfb780,0x4539,0x4132,0xab,0x8c,0x0a,0x87,0x72,0x01,0x3a,0xb6);\n\n// {A7F04F3C-A290-435B-AADF-A116C3357A5C}\nDEFINE_GUID(IID_IUpdateHistoryEntryCollection,0xa7f04f3c,0xa290,0x435b,0xaa,0xdf,0xa1,0x16,0xc3,0x35,0x7a,0x5c);\n\n// {8F45ABF1-F9AE-4B95-A933-F0F66E5056EA}\nDEFINE_GUID(IID_IUpdateSearcher,0x8f45abf1,0xf9ae,0x4b95,0xa9,0x33,0xf0,0xf6,0x6e,0x50,0x56,0xea);\n\n// {4CBDCB2D-1589-4BEB-BD1C-3E582FF0ADD0}\nDEFINE_GUID(IID_IUpdateSearcher2,0x4cbdcb2d,0x1589,0x4beb,0xbd,0x1c,0x3e,0x58,0x2f,0xf0,0xad,0xd0);\n\n// {04C6895D-EAF2-4034-97F3-311DE9BE413A}\nDEFINE_GUID(IID_IUpdateSearcher3,0x4c6895d,0xeaf2,0x4034,0x97,0xf3,0x31,0x1d,0xe9,0xbe,0x41,0x3a);\n\n// {BF99AF76-B575-42AD-8AA4-33CBB5477AF1}\nDEFINE_GUID(IID_IUpdateDownloadResult,0xbf99af76,0xb575,0x42ad,0x8a,0xa4,0x33,0xcb,0xb5,0x47,0x7a,0xf1);\n\n// {DAA4FDD0-4727-4DBE-A1E7-745DCA317144}\nDEFINE_GUID(IID_IDownloadResult,0xdaa4fdd0,0x4727,0x4dbe,0xa1,0xe7,0x74,0x5d,0xca,0x31,0x71,0x44);\n\n// {D31A5BAC-F719-4178-9DBB-5E2CB47FD18A}\nDEFINE_GUID(IID_IDownloadProgress,0xd31a5bac,0xf719,0x4178,0x9d,0xbb,0x5e,0x2c,0xb4,0x7f,0xd1,0x8a);\n\n// {C574DE85-7358-43F6-AAE8-8697E62D8BA7}\nDEFINE_GUID(IID_IDownloadJob,0xc574de85,0x7358,0x43f6,0xaa,0xe8,0x86,0x97,0xe6,0x2d,0x8b,0xa7);\n\n// {FA565B23-498C-47A0-979D-E7D5B1813360}\nDEFINE_GUID(IID_IDownloadCompletedCallbackArgs,0xfa565b23,0x498c,0x47a0,0x97,0x9d,0xe7,0xd5,0xb1,0x81,0x33,0x60);\n\n// {77254866-9F5B-4C8E-B9E2-C77A8530D64B}\nDEFINE_GUID(IID_IDownloadCompletedCallback,0x77254866,0x9f5b,0x4c8e,0xb9,0xe2,0xc7,0x7a,0x85,0x30,0xd6,0x4b);\n\n// {324FF2C6-4981-4B04-9412-57481745AB24}\nDEFINE_GUID(IID_IDownloadProgressChangedCallbackArgs,0x324ff2c6,0x4981,0x4b04,0x94,0x12,0x57,0x48,0x17,0x45,0xab,0x24);\n\n// {8C3F1CDD-6173-4591-AEBD-A56A53CA77C1}\nDEFINE_GUID(IID_IDownloadProgressChangedCallback,0x8c3f1cdd,0x6173,0x4591,0xae,0xbd,0xa5,0x6a,0x53,0xca,0x77,0xc1);\n\n// {68F1C6F9-7ECC-4666-A464-247FE12496C3}\nDEFINE_GUID(IID_IUpdateDownloader,0x68f1c6f9,0x7ecc,0x4666,0xa4,0x64,0x24,0x7f,0xe1,0x24,0x96,0xc3);\n\n// {D940F0F8-3CBB-4FD0-993F-471E7F2328AD}\nDEFINE_GUID(IID_IUpdateInstallationResult,0xd940f0f8,0x3cbb,0x4fd0,0x99,0x3f,0x47,0x1e,0x7f,0x23,0x28,0xad);\n\n// {A43C56D6-7451-48D4-AF96-B6CD2D0D9B7A}\nDEFINE_GUID(IID_IInstallationResult,0xa43c56d6,0x7451,0x48d4,0xaf,0x96,0xb6,0xcd,0x2d,0x0d,0x9b,0x7a);\n\n// {345C8244-43A3-4E32-A368-65F073B76F36}\nDEFINE_GUID(IID_IInstallationProgress,0x345c8244,0x43a3,0x4e32,0xa3,0x68,0x65,0xf0,0x73,0xb7,0x6f,0x36);\n\n// {5C209F0B-BAD5-432A-9556-4699BED2638A}\nDEFINE_GUID(IID_IInstallationJob,0x5c209f0b,0xbad5,0x432a,0x95,0x56,0x46,0x99,0xbe,0xd2,0x63,0x8a);\n\n// {250E2106-8EFB-4705-9653-EF13C581B6A1}\nDEFINE_GUID(IID_IInstallationCompletedCallbackArgs,0x250e2106,0x8efb,0x4705,0x96,0x53,0xef,0x13,0xc5,0x81,0xb6,0xa1);\n\n// {45F4F6F3-D602-4F98-9A8A-3EFA152AD2D3}\nDEFINE_GUID(IID_IInstallationCompletedCallback,0x45f4f6f3,0xd602,0x4f98,0x9a,0x8a,0x3e,0xfa,0x15,0x2a,0xd2,0xd3);\n\n// {E4F14E1E-689D-4218-A0B9-BC189C484A01}\nDEFINE_GUID(IID_IInstallationProgressChangedCallbackArgs,0xe4f14e1e,0x689d,0x4218,0xa0,0xb9,0xbc,0x18,0x9c,0x48,0x4a,0x01);\n\n// {E01402D5-F8DA-43BA-A012-38894BD048F1}\nDEFINE_GUID(IID_IInstallationProgressChangedCallback,0xe01402d5,0xf8da,0x43ba,0xa0,0x12,0x38,0x89,0x4b,0xd0,0x48,0xf1);\n\n// {7B929C68-CCDC-4226-96B1-8724600B54C2}\nDEFINE_GUID(IID_IUpdateInstaller,0x7b929c68,0xccdc,0x4226,0x96,0xb1,0x87,0x24,0x60,0x0b,0x54,0xc2);\n\n// {3442d4fe-224d-4cee-98cf-30e0c4d229e6}\nDEFINE_GUID(IID_IUpdateInstaller2,0x3442d4fe,0x224d,0x4cee,0x98,0xcf,0x30,0xe0,0xc4,0xd2,0x29,0xe6);\n\n// {816858A4-260D-4260-933A-2585F1ABC76B}\nDEFINE_GUID(IID_IUpdateSession,0x816858a4,0x260d,0x4260,0x93,0x3a,0x25,0x85,0xf1,0xab,0xc7,0x6b);\n\n// {91CAF7B0-EB23-49ED-9937-C52D817F46F7}\nDEFINE_GUID(IID_IUpdateSession2,0x91caf7b0,0xeb23,0x49ed,0x99,0x37,0xc5,0x2d,0x81,0x7f,0x46,0xf7);\n\n// {918EFD1E-B5D8-4c90-8540-AEB9BDC56F9D}\nDEFINE_GUID(IID_IUpdateSession3,0x918efd1e,0xb5d8,0x4c90,0x85,0x40,0xae,0xb9,0xbd,0xc5,0x6f,0x9d);\n\n// {76B3B17E-AED6-4DA5-85F0-83587F81ABE3}\nDEFINE_GUID(IID_IUpdateService,0x76b3b17e,0xaed6,0x4da5,0x85,0xf0,0x83,0x58,0x7f,0x81,0xab,0xe3);\n\n// {1518B460-6518-4172-940F-C75883B24CEB}\nDEFINE_GUID(IID_IUpdateService2,0x1518b460,0x6518,0x4172,0x94,0x0f,0xc7,0x58,0x83,0xb2,0x4c,0xeb);\n\n// {9B0353AA-0E52-44FF-B8B0-1F7FA0437F88}\nDEFINE_GUID(IID_IUpdateServiceCollection,0x9b0353aa,0x0e52,0x44ff,0xb8,0xb0,0x1f,0x7f,0xa0,0x43,0x7f,0x88);\n\n// {DDE02280-12B3-4E0B-937B-6747F6ACB286}\nDEFINE_GUID(IID_IUpdateServiceRegistration,0xdde02280,0x12b3,0x4e0b,0x93,0x7b,0x67,0x47,0xf6,0xac,0xb2,0x86);\n\n// {23857E3C-02BA-44A3-9423-B1C900805F37}\nDEFINE_GUID(IID_IUpdateServiceManager,0x23857E3C,0x02BA,0x44A3,0x94,0x23,0xB1,0xC9,0x00,0x80,0x5F,0x37);\n\n// {0BB8531D-7E8D-424F-986C-A0B8F60A3E7B}\nDEFINE_GUID(IID_IUpdateServiceManager2,0x0BB8531D,0x7E8D,0x424F,0x98,0x6C,0xA0,0xB8,0xF6,0x0A,0x3E,0x7B);\n\n// {925CBC18-A2EA-4648-BF1C-EC8BADCFE20A}\nDEFINE_GUID(IID_IInstallationAgent,0x925CBC18,0xA2EA,0x4648,0xBF,0x1C,0xEC,0x8B,0xAD,0xCF,0xE2,0x0A);\n\n// {72C97D74-7C3B-40AE-B77D-ABDB22EBA6FB}\nDEFINE_GUID(CLSID_StringCollection,0x72C97D74,0x7C3B,0x40AE,0xB7,0x7D,0xAB,0xDB,0x22,0xEB,0xA6,0xFB);\n\n// {B699E5E8-67FF-4177-88B0-3684A3388BFB}\nDEFINE_GUID(CLSID_UpdateSearcher,0xB699E5E8,0x67FF,0x4177,0x88,0xB0,0x36,0x84,0xA3,0x38,0x8B,0xFB);\n\n// {650503cf-9108-4ddc-a2ce-6c2341e1c582}\nDEFINE_GUID(CLSID_WebProxy,0x650503cf,0x9108,0x4ddc,0xa2,0xce,0x6c,0x23,0x41,0xe1,0xc5,0x82);\n\n// {C01B9BA0-BEA7-41BA-B604-D0A36F469133}\nDEFINE_GUID(CLSID_SystemInformation,0xC01B9BA0,0xBEA7,0x41BA,0xB6,0x04,0xD0,0xA3,0x6F,0x46,0x91,0x33);\n\n// {C2E88C2F-6F5B-4AAA-894B-55C847AD3A2D}\nDEFINE_GUID(CLSID_WindowsUpdateAgentInfo,0xC2E88C2F,0x6F5B,0x4AAA,0x89,0x4B,0x55,0xC8,0x47,0xAD,0x3A,0x2D);\n\n// {BFE18E9C-6D87-4450-B37C-E02F0B373803}\nDEFINE_GUID(CLSID_AutomaticUpdates,0xBFE18E9C,0x6D87,0x4450,0xB3,0x7C,0xE0,0x2F,0x0B,0x37,0x38,0x03);\n\n// {13639463-00DB-4646-803D-528026140D88}\nDEFINE_GUID(CLSID_UpdateCollection,0x13639463,0x00DB,0x4646,0x80,0x3D,0x52,0x80,0x26,0x14,0x0D,0x88);\n\n// {5BAF654A-5A07-4264-A255-9FF54C7151E7}\nDEFINE_GUID(CLSID_UpdateDownloader,0x5BAF654A,0x5A07,0x4264,0xA2,0x55,0x9F,0xF5,0x4C,0x71,0x51,0xE7);\n\n// {D2E0FE7F-D23E-48E1-93C0-6FA8CC346474}\nDEFINE_GUID(CLSID_UpdateInstaller,0xD2E0FE7F,0xD23E,0x48E1,0x93,0xC0,0x6F,0xA8,0xCC,0x34,0x64,0x74);\n\n// {4CB43D7F-7EEE-4906-8698-60DA1C38F2FE}\nDEFINE_GUID(CLSID_UpdateSession,0x4CB43D7F,0x7EEE,0x4906,0x86,0x98,0x60,0xDA,0x1C,0x38,0xF2,0xFE);\n\n// {F8D253D9-89A4-4DAA-87B6-1168369F0B21}\nDEFINE_GUID(CLSID_UpdateServiceManager,0xF8D253D9,0x89A4,0x4DAA,0x87,0xB6,0x11,0x68,0x36,0x9F,0x0B,0x21);\n\n// {317E92FC-1679-46FD-A0B5-F08914DD8623}\nDEFINE_GUID(CLSID_InstallationAgent,0x317E92FC,0x1679,0x46FD,0xA0,0xB5,0xF0,0x89,0x14,0xDD,0x86,0x23);\n\ntypedef /* [v1_enum][helpstring][public] */\nenum tagAutomaticUpdatesNotificationLevel\n    {\taunlNotConfigured\t= 0,\n\taunlDisabled\t= 1,\n\taunlNotifyBeforeDownload\t= 2,\n\taunlNotifyBeforeInstallation\t= 3,\n\taunlScheduledInstallation\t= 4\n    } \tAutomaticUpdatesNotificationLevel;\n\ntypedef /* [v1_enum][helpstring][public] */\nenum tagAutomaticUpdatesScheduledInstallationDay\n    {\tausidEveryDay\t= 0,\n\tausidEverySunday\t= 1,\n\tausidEveryMonday\t= 2,\n\tausidEveryTuesday\t= 3,\n\tausidEveryWednesday\t= 4,\n\tausidEveryThursday\t= 5,\n\tausidEveryFriday\t= 6,\n\tausidEverySaturday\t= 7\n    } \tAutomaticUpdatesScheduledInstallationDay;\n\ntypedef /* [v1_enum][helpstring][public] */\nenum tagDownloadPhase\n    {\tdphInitializing\t= 1,\n\tdphDownloading\t= 2,\n\tdphVerifying\t= 3\n    } \tDownloadPhase;\n\ntypedef /* [v1_enum][helpstring][public] */\nenum tagDownloadPriority\n    {\tdpLow\t= 1,\n\tdpNormal\t= 2,\n\tdpHigh\t= 3\n    } \tDownloadPriority;\n\ntypedef /* [v1_enum][helpstring][public] */\nenum tagAutoSelectionMode\n    {\tasLetWindowsUpdateDecide\t= 0,\n\tasAutoSelectIfDownloaded\t= 1,\n\tasNeverAutoSelect\t= 2,\n\tasAlwaysAutoSelect\t= 3\n    } \tAutoSelectionMode;\n\ntypedef /* [v1_enum][helpstring][public] */\nenum tagAutoDownloadMode\n    {\tadLetWindowsUpdateDecide\t= 0,\n\tadNeverAutoDownload\t= 1,\n\tadAlwaysAutoDownload\t= 2\n    } \tAutoDownloadMode;\n\ntypedef /* [v1_enum][helpstring][public] */\nenum tagInstallationImpact\n    {\tiiNormal\t= 0,\n\tiiMinor\t= 1,\n\tiiRequiresExclusiveHandling\t= 2\n    } \tInstallationImpact;\n\ntypedef /* [v1_enum][helpstring][public] */\nenum tagInstallationRebootBehavior\n    {\tirbNeverReboots\t= 0,\n\tirbAlwaysRequiresReboot\t= 1,\n\tirbCanRequestReboot\t= 2\n    } \tInstallationRebootBehavior;\n\ntypedef /* [v1_enum][helpstring][public] */\nenum tagOperationResultCode\n    {\torcNotStarted\t= 0,\n\torcInProgress\t= 1,\n\torcSucceeded\t= 2,\n\torcSucceededWithErrors\t= 3,\n\torcFailed\t= 4,\n\torcAborted\t= 5\n    } \tOperationResultCode;\n\ntypedef /* [v1_enum][helpstring][public] */\nenum tagServerSelection\n    {\tssDefault\t= 0,\n\tssManagedServer\t= 1,\n\tssWindowsUpdate\t= 2,\n\tssOthers\t= 3\n    } \tServerSelection;\n\ntypedef /* [v1_enum][helpstring][public] */\nenum tagUpdateType\n    {\tutSoftware\t= 1,\n\tutDriver\t= 2\n    } \tUpdateType;\n\ntypedef /* [v1_enum][helpstring][public] */\nenum tagUpdateOperation\n    {\tuoInstallation\t= 1,\n\tuoUninstallation\t= 2\n    } \tUpdateOperation;\n\ntypedef /* [v1_enum][helpstring][public] */\nenum tagDeploymentAction\n    {\tdaNone\t= 0,\n\tdaInstallation\t= 1,\n\tdaUninstallation\t= 2,\n\tdaDetection\t= 3\n    } \tDeploymentAction;\n\ntypedef /* [v1_enum][helpstring][public] */\nenum tagUpdateExceptionContext\n    {\tuecGeneral\t= 1,\n\tuecWindowsDriver\t= 2,\n\tuecWindowsInstaller\t= 3\n    } \tUpdateExceptionContext;\n\ntypedef /* [v1_enum][helpstring][public] */\nenum tagAutomaticUpdatesUserType\n    {\tauutCurrentUser\t= 1,\n\tauutLocalAdministrator\t= 2\n    } \tAutomaticUpdatesUserType;\n\ntypedef /* [v1_enum][helpstring][public] */\nenum tagAutomaticUpdatesPermissionType\n    {\tauptSetNotificationLevel\t= 1,\n\tauptDisableAutomaticUpdates\t= 2,\n\tauptSetIncludeRecommendedUpdates\t= 3,\n\tauptSetFeaturedUpdatesEnabled\t= 4,\n\tauptSetNonAdministratorsElevated\t= 5\n    } \tAutomaticUpdatesPermissionType;\n\ntypedef /* [v1_enum][helpstring][public] */\nenum tagUpdateServiceRegistrationState\n    {\tusrsNotRegistered\t= 1,\n\tusrsRegistrationPending\t= 2,\n\tusrsRegistered\t= 3\n    } \tUpdateServiceRegistrationState;\n\ntypedef /* [v1_enum][helpstring][public] */\nenum tagSearchScope\n    {\tsearchScopeDefault\t= 0,\n\tsearchScopeMachineOnly\t= 1,\n\tsearchScopeCurrentUserOnly\t= 2,\n\tsearchScopeMachineAndCurrentUser\t= 3,\n\tsearchScopeMachineAndAllUsers\t= 4,\n\tsearchScopeAllUsers\t= 5\n    } \tSearchScope;\n\n#define\tUPDATE_LOCKDOWN_WEBSITE_ACCESS\t( 0x1 )\n\n\n\n\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_wuapi_0000_0000_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_wuapi_0000_0000_v0_0_s_ifspec;\n\n#ifndef __IUpdateLockdown_INTERFACE_DEFINED__\n#define __IUpdateLockdown_INTERFACE_DEFINED__\n\n/* interface IUpdateLockdown */\n/* [unique][uuid][nonextensible][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateLockdown;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"a976c28d-75a1-42aa-94ae-8af8b872089a\")\n    IUpdateLockdown : public IUnknown\n    {\n    public:\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE LockDown(\n            /* [in] */ LONG flags) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateLockdownVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateLockdown * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateLockdown * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateLockdown * This);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *LockDown )(\n            __RPC__in IUpdateLockdown * This,\n            /* [in] */ LONG flags);\n\n        END_INTERFACE\n    } IUpdateLockdownVtbl;\n\n    interface IUpdateLockdown\n    {\n        CONST_VTBL struct IUpdateLockdownVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateLockdown_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateLockdown_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateLockdown_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateLockdown_LockDown(This,flags)\t\\\n    ( (This)->lpVtbl -> LockDown(This,flags) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateLockdown_INTERFACE_DEFINED__ */\n\n\n#ifndef __IStringCollection_INTERFACE_DEFINED__\n#define __IStringCollection_INTERFACE_DEFINED__\n\n/* interface IStringCollection */\n/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IStringCollection;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"eff90582-2ddc-480f-a06d-60f3fbc362c3\")\n    IStringCollection : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Item(\n            /* [in] */ LONG index,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Item(\n            /* [in] */ LONG index,\n            /* [in] */ __RPC__in BSTR value) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get__NewEnum(\n            /* [retval][out] */ __RPC__deref_out_opt IUnknown **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Count(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ReadOnly(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Add(\n            /* [in] */ __RPC__in BSTR value,\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Clear( void) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Copy(\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Insert(\n            /* [in] */ LONG index,\n            /* [in] */ __RPC__in BSTR value) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RemoveAt(\n            /* [in] */ LONG index) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IStringCollectionVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IStringCollection * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IStringCollection * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IStringCollection * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IStringCollection * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IStringCollection * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IStringCollection * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IStringCollection * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(\n            __RPC__in IStringCollection * This,\n            /* [in] */ LONG index,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Item )(\n            __RPC__in IStringCollection * This,\n            /* [in] */ LONG index,\n            /* [in] */ __RPC__in BSTR value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(\n            __RPC__in IStringCollection * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(\n            __RPC__in IStringCollection * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReadOnly )(\n            __RPC__in IStringCollection * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Add )(\n            __RPC__in IStringCollection * This,\n            /* [in] */ __RPC__in BSTR value,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Clear )(\n            __RPC__in IStringCollection * This);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Copy )(\n            __RPC__in IStringCollection * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Insert )(\n            __RPC__in IStringCollection * This,\n            /* [in] */ LONG index,\n            /* [in] */ __RPC__in BSTR value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RemoveAt )(\n            __RPC__in IStringCollection * This,\n            /* [in] */ LONG index);\n\n        END_INTERFACE\n    } IStringCollectionVtbl;\n\n    interface IStringCollection\n    {\n        CONST_VTBL struct IStringCollectionVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IStringCollection_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IStringCollection_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IStringCollection_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IStringCollection_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IStringCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IStringCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IStringCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IStringCollection_get_Item(This,index,retval)\t\\\n    ( (This)->lpVtbl -> get_Item(This,index,retval) )\n\n#define IStringCollection_put_Item(This,index,value)\t\\\n    ( (This)->lpVtbl -> put_Item(This,index,value) )\n\n#define IStringCollection_get__NewEnum(This,retval)\t\\\n    ( (This)->lpVtbl -> get__NewEnum(This,retval) )\n\n#define IStringCollection_get_Count(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Count(This,retval) )\n\n#define IStringCollection_get_ReadOnly(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ReadOnly(This,retval) )\n\n#define IStringCollection_Add(This,value,retval)\t\\\n    ( (This)->lpVtbl -> Add(This,value,retval) )\n\n#define IStringCollection_Clear(This)\t\\\n    ( (This)->lpVtbl -> Clear(This) )\n\n#define IStringCollection_Copy(This,retval)\t\\\n    ( (This)->lpVtbl -> Copy(This,retval) )\n\n#define IStringCollection_Insert(This,index,value)\t\\\n    ( (This)->lpVtbl -> Insert(This,index,value) )\n\n#define IStringCollection_RemoveAt(This,index)\t\\\n    ( (This)->lpVtbl -> RemoveAt(This,index) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IStringCollection_INTERFACE_DEFINED__ */\n\n\n#ifndef __IWebProxy_INTERFACE_DEFINED__\n#define __IWebProxy_INTERFACE_DEFINED__\n\n/* interface IWebProxy */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IWebProxy;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"174c81fe-aecd-4dae-b8a0-2c6318dd86a8\")\n    IWebProxy : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Address(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Address(\n            /* [in] */ __RPC__in BSTR value) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_BypassList(\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_BypassList(\n            /* [in] */ __RPC__in_opt IStringCollection *value) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_BypassProxyOnLocal(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_BypassProxyOnLocal(\n            /* [in] */ VARIANT_BOOL value) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ReadOnly(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UserName(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_UserName(\n            /* [in] */ __RPC__in BSTR value) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetPassword(\n            /* [in] */ __RPC__in BSTR value) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE PromptForCredentials(\n            /* [unique][in] */ __RPC__in_opt IUnknown *parentWindow,\n            /* [in] */ __RPC__in BSTR title) = 0;\n\n        virtual /* [helpstring][restricted][id] */ HRESULT STDMETHODCALLTYPE PromptForCredentialsFromHwnd(\n            /* [unique][in] */ __RPC__in_opt HWND parentWindow,\n            /* [in] */ __RPC__in BSTR title) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AutoDetect(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_AutoDetect(\n            /* [in] */ VARIANT_BOOL value) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IWebProxyVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IWebProxy * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IWebProxy * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IWebProxy * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IWebProxy * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IWebProxy * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IWebProxy * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IWebProxy * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Address )(\n            __RPC__in IWebProxy * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Address )(\n            __RPC__in IWebProxy * This,\n            /* [in] */ __RPC__in BSTR value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BypassList )(\n            __RPC__in IWebProxy * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_BypassList )(\n            __RPC__in IWebProxy * This,\n            /* [in] */ __RPC__in_opt IStringCollection *value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BypassProxyOnLocal )(\n            __RPC__in IWebProxy * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_BypassProxyOnLocal )(\n            __RPC__in IWebProxy * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReadOnly )(\n            __RPC__in IWebProxy * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UserName )(\n            __RPC__in IWebProxy * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_UserName )(\n            __RPC__in IWebProxy * This,\n            /* [in] */ __RPC__in BSTR value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetPassword )(\n            __RPC__in IWebProxy * This,\n            /* [in] */ __RPC__in BSTR value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *PromptForCredentials )(\n            __RPC__in IWebProxy * This,\n            /* [unique][in] */ __RPC__in_opt IUnknown *parentWindow,\n            /* [in] */ __RPC__in BSTR title);\n\n        /* [helpstring][restricted][id] */ HRESULT ( STDMETHODCALLTYPE *PromptForCredentialsFromHwnd )(\n            __RPC__in IWebProxy * This,\n            /* [unique][in] */ __RPC__in_opt HWND parentWindow,\n            /* [in] */ __RPC__in BSTR title);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoDetect )(\n            __RPC__in IWebProxy * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_AutoDetect )(\n            __RPC__in IWebProxy * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        END_INTERFACE\n    } IWebProxyVtbl;\n\n    interface IWebProxy\n    {\n        CONST_VTBL struct IWebProxyVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IWebProxy_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IWebProxy_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IWebProxy_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IWebProxy_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IWebProxy_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IWebProxy_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IWebProxy_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IWebProxy_get_Address(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Address(This,retval) )\n\n#define IWebProxy_put_Address(This,value)\t\\\n    ( (This)->lpVtbl -> put_Address(This,value) )\n\n#define IWebProxy_get_BypassList(This,retval)\t\\\n    ( (This)->lpVtbl -> get_BypassList(This,retval) )\n\n#define IWebProxy_put_BypassList(This,value)\t\\\n    ( (This)->lpVtbl -> put_BypassList(This,value) )\n\n#define IWebProxy_get_BypassProxyOnLocal(This,retval)\t\\\n    ( (This)->lpVtbl -> get_BypassProxyOnLocal(This,retval) )\n\n#define IWebProxy_put_BypassProxyOnLocal(This,value)\t\\\n    ( (This)->lpVtbl -> put_BypassProxyOnLocal(This,value) )\n\n#define IWebProxy_get_ReadOnly(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ReadOnly(This,retval) )\n\n#define IWebProxy_get_UserName(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UserName(This,retval) )\n\n#define IWebProxy_put_UserName(This,value)\t\\\n    ( (This)->lpVtbl -> put_UserName(This,value) )\n\n#define IWebProxy_SetPassword(This,value)\t\\\n    ( (This)->lpVtbl -> SetPassword(This,value) )\n\n#define IWebProxy_PromptForCredentials(This,parentWindow,title)\t\\\n    ( (This)->lpVtbl -> PromptForCredentials(This,parentWindow,title) )\n\n#define IWebProxy_PromptForCredentialsFromHwnd(This,parentWindow,title)\t\\\n    ( (This)->lpVtbl -> PromptForCredentialsFromHwnd(This,parentWindow,title) )\n\n#define IWebProxy_get_AutoDetect(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AutoDetect(This,retval) )\n\n#define IWebProxy_put_AutoDetect(This,value)\t\\\n    ( (This)->lpVtbl -> put_AutoDetect(This,value) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IWebProxy_INTERFACE_DEFINED__ */\n\n\n#ifndef __ISystemInformation_INTERFACE_DEFINED__\n#define __ISystemInformation_INTERFACE_DEFINED__\n\n/* interface ISystemInformation */\n/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_ISystemInformation;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"ade87bf7-7b56-4275-8fab-b9b0e591844b\")\n    ISystemInformation : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_OemHardwareSupportLink(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RebootRequired(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct ISystemInformationVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in ISystemInformation * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in ISystemInformation * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in ISystemInformation * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in ISystemInformation * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in ISystemInformation * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in ISystemInformation * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            ISystemInformation * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_OemHardwareSupportLink )(\n            __RPC__in ISystemInformation * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(\n            __RPC__in ISystemInformation * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        END_INTERFACE\n    } ISystemInformationVtbl;\n\n    interface ISystemInformation\n    {\n        CONST_VTBL struct ISystemInformationVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define ISystemInformation_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define ISystemInformation_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define ISystemInformation_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define ISystemInformation_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define ISystemInformation_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define ISystemInformation_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define ISystemInformation_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define ISystemInformation_get_OemHardwareSupportLink(This,retval)\t\\\n    ( (This)->lpVtbl -> get_OemHardwareSupportLink(This,retval) )\n\n#define ISystemInformation_get_RebootRequired(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RebootRequired(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ISystemInformation_INTERFACE_DEFINED__ */\n\n\n#ifndef __IWindowsUpdateAgentInfo_INTERFACE_DEFINED__\n#define __IWindowsUpdateAgentInfo_INTERFACE_DEFINED__\n\n/* interface IWindowsUpdateAgentInfo */\n/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IWindowsUpdateAgentInfo;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"85713fa1-7796-4fa2-be3b-e2d6124dd373\")\n    IWindowsUpdateAgentInfo : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetInfo(\n            /* [in] */ VARIANT varInfoIdentifier,\n            /* [retval][out] */ __RPC__out VARIANT *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IWindowsUpdateAgentInfoVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IWindowsUpdateAgentInfo * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IWindowsUpdateAgentInfo * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IWindowsUpdateAgentInfo * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IWindowsUpdateAgentInfo * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IWindowsUpdateAgentInfo * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IWindowsUpdateAgentInfo * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IWindowsUpdateAgentInfo * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetInfo )(\n            __RPC__in IWindowsUpdateAgentInfo * This,\n            /* [in] */ VARIANT varInfoIdentifier,\n            /* [retval][out] */ __RPC__out VARIANT *retval);\n\n        END_INTERFACE\n    } IWindowsUpdateAgentInfoVtbl;\n\n    interface IWindowsUpdateAgentInfo\n    {\n        CONST_VTBL struct IWindowsUpdateAgentInfoVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IWindowsUpdateAgentInfo_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IWindowsUpdateAgentInfo_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IWindowsUpdateAgentInfo_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IWindowsUpdateAgentInfo_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IWindowsUpdateAgentInfo_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IWindowsUpdateAgentInfo_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IWindowsUpdateAgentInfo_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IWindowsUpdateAgentInfo_GetInfo(This,varInfoIdentifier,retval)\t\\\n    ( (This)->lpVtbl -> GetInfo(This,varInfoIdentifier,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IWindowsUpdateAgentInfo_INTERFACE_DEFINED__ */\n\n\n#ifndef __IAutomaticUpdatesResults_INTERFACE_DEFINED__\n#define __IAutomaticUpdatesResults_INTERFACE_DEFINED__\n\n/* interface IAutomaticUpdatesResults */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IAutomaticUpdatesResults;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"E7A4D634-7942-4DD9-A111-82228BA33901\")\n    IAutomaticUpdatesResults : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_LastSearchSuccessDate(\n            /* [retval][out] */ __RPC__out VARIANT *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_LastInstallationSuccessDate(\n            /* [retval][out] */ __RPC__out VARIANT *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IAutomaticUpdatesResultsVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IAutomaticUpdatesResults * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IAutomaticUpdatesResults * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IAutomaticUpdatesResults * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IAutomaticUpdatesResults * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IAutomaticUpdatesResults * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IAutomaticUpdatesResults * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IAutomaticUpdatesResults * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastSearchSuccessDate )(\n            __RPC__in IAutomaticUpdatesResults * This,\n            /* [retval][out] */ __RPC__out VARIANT *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastInstallationSuccessDate )(\n            __RPC__in IAutomaticUpdatesResults * This,\n            /* [retval][out] */ __RPC__out VARIANT *retval);\n\n        END_INTERFACE\n    } IAutomaticUpdatesResultsVtbl;\n\n    interface IAutomaticUpdatesResults\n    {\n        CONST_VTBL struct IAutomaticUpdatesResultsVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IAutomaticUpdatesResults_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IAutomaticUpdatesResults_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IAutomaticUpdatesResults_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IAutomaticUpdatesResults_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IAutomaticUpdatesResults_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IAutomaticUpdatesResults_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IAutomaticUpdatesResults_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IAutomaticUpdatesResults_get_LastSearchSuccessDate(This,retval)\t\\\n    ( (This)->lpVtbl -> get_LastSearchSuccessDate(This,retval) )\n\n#define IAutomaticUpdatesResults_get_LastInstallationSuccessDate(This,retval)\t\\\n    ( (This)->lpVtbl -> get_LastInstallationSuccessDate(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IAutomaticUpdatesResults_INTERFACE_DEFINED__ */\n\n\n#ifndef __IAutomaticUpdatesSettings_INTERFACE_DEFINED__\n#define __IAutomaticUpdatesSettings_INTERFACE_DEFINED__\n\n/* interface IAutomaticUpdatesSettings */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IAutomaticUpdatesSettings;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"2ee48f22-af3c-405f-8970-f71be12ee9a2\")\n    IAutomaticUpdatesSettings : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_NotificationLevel(\n            /* [retval][out] */ __RPC__out AutomaticUpdatesNotificationLevel *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_NotificationLevel(\n            /* [in] */ AutomaticUpdatesNotificationLevel value) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ReadOnly(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Required(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ScheduledInstallationDay(\n            /* [retval][out] */ __RPC__out AutomaticUpdatesScheduledInstallationDay *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ScheduledInstallationDay(\n            /* [in] */ AutomaticUpdatesScheduledInstallationDay value) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ScheduledInstallationTime(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ScheduledInstallationTime(\n            /* [in] */ LONG value) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Refresh( void) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Save( void) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IAutomaticUpdatesSettingsVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IAutomaticUpdatesSettings * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IAutomaticUpdatesSettings * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IAutomaticUpdatesSettings * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IAutomaticUpdatesSettings * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IAutomaticUpdatesSettings * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IAutomaticUpdatesSettings * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IAutomaticUpdatesSettings * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_NotificationLevel )(\n            __RPC__in IAutomaticUpdatesSettings * This,\n            /* [retval][out] */ __RPC__out AutomaticUpdatesNotificationLevel *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_NotificationLevel )(\n            __RPC__in IAutomaticUpdatesSettings * This,\n            /* [in] */ AutomaticUpdatesNotificationLevel value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReadOnly )(\n            __RPC__in IAutomaticUpdatesSettings * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Required )(\n            __RPC__in IAutomaticUpdatesSettings * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ScheduledInstallationDay )(\n            __RPC__in IAutomaticUpdatesSettings * This,\n            /* [retval][out] */ __RPC__out AutomaticUpdatesScheduledInstallationDay *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ScheduledInstallationDay )(\n            __RPC__in IAutomaticUpdatesSettings * This,\n            /* [in] */ AutomaticUpdatesScheduledInstallationDay value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ScheduledInstallationTime )(\n            __RPC__in IAutomaticUpdatesSettings * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ScheduledInstallationTime )(\n            __RPC__in IAutomaticUpdatesSettings * This,\n            /* [in] */ LONG value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Refresh )(\n            __RPC__in IAutomaticUpdatesSettings * This);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Save )(\n            __RPC__in IAutomaticUpdatesSettings * This);\n\n        END_INTERFACE\n    } IAutomaticUpdatesSettingsVtbl;\n\n    interface IAutomaticUpdatesSettings\n    {\n        CONST_VTBL struct IAutomaticUpdatesSettingsVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IAutomaticUpdatesSettings_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IAutomaticUpdatesSettings_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IAutomaticUpdatesSettings_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IAutomaticUpdatesSettings_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IAutomaticUpdatesSettings_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IAutomaticUpdatesSettings_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IAutomaticUpdatesSettings_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IAutomaticUpdatesSettings_get_NotificationLevel(This,retval)\t\\\n    ( (This)->lpVtbl -> get_NotificationLevel(This,retval) )\n\n#define IAutomaticUpdatesSettings_put_NotificationLevel(This,value)\t\\\n    ( (This)->lpVtbl -> put_NotificationLevel(This,value) )\n\n#define IAutomaticUpdatesSettings_get_ReadOnly(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ReadOnly(This,retval) )\n\n#define IAutomaticUpdatesSettings_get_Required(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Required(This,retval) )\n\n#define IAutomaticUpdatesSettings_get_ScheduledInstallationDay(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ScheduledInstallationDay(This,retval) )\n\n#define IAutomaticUpdatesSettings_put_ScheduledInstallationDay(This,value)\t\\\n    ( (This)->lpVtbl -> put_ScheduledInstallationDay(This,value) )\n\n#define IAutomaticUpdatesSettings_get_ScheduledInstallationTime(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ScheduledInstallationTime(This,retval) )\n\n#define IAutomaticUpdatesSettings_put_ScheduledInstallationTime(This,value)\t\\\n    ( (This)->lpVtbl -> put_ScheduledInstallationTime(This,value) )\n\n#define IAutomaticUpdatesSettings_Refresh(This)\t\\\n    ( (This)->lpVtbl -> Refresh(This) )\n\n#define IAutomaticUpdatesSettings_Save(This)\t\\\n    ( (This)->lpVtbl -> Save(This) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IAutomaticUpdatesSettings_INTERFACE_DEFINED__ */\n\n\n#ifndef __IAutomaticUpdatesSettings2_INTERFACE_DEFINED__\n#define __IAutomaticUpdatesSettings2_INTERFACE_DEFINED__\n\n/* interface IAutomaticUpdatesSettings2 */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IAutomaticUpdatesSettings2;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"6abc136a-c3ca-4384-8171-cb2b1e59b8dc\")\n    IAutomaticUpdatesSettings2 : public IAutomaticUpdatesSettings\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IncludeRecommendedUpdates(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_IncludeRecommendedUpdates(\n            /* [in] */ VARIANT_BOOL value) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CheckPermission(\n            /* [in] */ AutomaticUpdatesUserType userType,\n            /* [in] */ AutomaticUpdatesPermissionType permissionType,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *userHasPermission) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IAutomaticUpdatesSettings2Vtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IAutomaticUpdatesSettings2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IAutomaticUpdatesSettings2 * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IAutomaticUpdatesSettings2 * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IAutomaticUpdatesSettings2 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IAutomaticUpdatesSettings2 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IAutomaticUpdatesSettings2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IAutomaticUpdatesSettings2 * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_NotificationLevel )(\n            __RPC__in IAutomaticUpdatesSettings2 * This,\n            /* [retval][out] */ __RPC__out AutomaticUpdatesNotificationLevel *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_NotificationLevel )(\n            __RPC__in IAutomaticUpdatesSettings2 * This,\n            /* [in] */ AutomaticUpdatesNotificationLevel value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReadOnly )(\n            __RPC__in IAutomaticUpdatesSettings2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Required )(\n            __RPC__in IAutomaticUpdatesSettings2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ScheduledInstallationDay )(\n            __RPC__in IAutomaticUpdatesSettings2 * This,\n            /* [retval][out] */ __RPC__out AutomaticUpdatesScheduledInstallationDay *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ScheduledInstallationDay )(\n            __RPC__in IAutomaticUpdatesSettings2 * This,\n            /* [in] */ AutomaticUpdatesScheduledInstallationDay value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ScheduledInstallationTime )(\n            __RPC__in IAutomaticUpdatesSettings2 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ScheduledInstallationTime )(\n            __RPC__in IAutomaticUpdatesSettings2 * This,\n            /* [in] */ LONG value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Refresh )(\n            __RPC__in IAutomaticUpdatesSettings2 * This);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Save )(\n            __RPC__in IAutomaticUpdatesSettings2 * This);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IncludeRecommendedUpdates )(\n            __RPC__in IAutomaticUpdatesSettings2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IncludeRecommendedUpdates )(\n            __RPC__in IAutomaticUpdatesSettings2 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CheckPermission )(\n            __RPC__in IAutomaticUpdatesSettings2 * This,\n            /* [in] */ AutomaticUpdatesUserType userType,\n            /* [in] */ AutomaticUpdatesPermissionType permissionType,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *userHasPermission);\n\n        END_INTERFACE\n    } IAutomaticUpdatesSettings2Vtbl;\n\n    interface IAutomaticUpdatesSettings2\n    {\n        CONST_VTBL struct IAutomaticUpdatesSettings2Vtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IAutomaticUpdatesSettings2_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IAutomaticUpdatesSettings2_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IAutomaticUpdatesSettings2_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IAutomaticUpdatesSettings2_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IAutomaticUpdatesSettings2_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IAutomaticUpdatesSettings2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IAutomaticUpdatesSettings2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IAutomaticUpdatesSettings2_get_NotificationLevel(This,retval)\t\\\n    ( (This)->lpVtbl -> get_NotificationLevel(This,retval) )\n\n#define IAutomaticUpdatesSettings2_put_NotificationLevel(This,value)\t\\\n    ( (This)->lpVtbl -> put_NotificationLevel(This,value) )\n\n#define IAutomaticUpdatesSettings2_get_ReadOnly(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ReadOnly(This,retval) )\n\n#define IAutomaticUpdatesSettings2_get_Required(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Required(This,retval) )\n\n#define IAutomaticUpdatesSettings2_get_ScheduledInstallationDay(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ScheduledInstallationDay(This,retval) )\n\n#define IAutomaticUpdatesSettings2_put_ScheduledInstallationDay(This,value)\t\\\n    ( (This)->lpVtbl -> put_ScheduledInstallationDay(This,value) )\n\n#define IAutomaticUpdatesSettings2_get_ScheduledInstallationTime(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ScheduledInstallationTime(This,retval) )\n\n#define IAutomaticUpdatesSettings2_put_ScheduledInstallationTime(This,value)\t\\\n    ( (This)->lpVtbl -> put_ScheduledInstallationTime(This,value) )\n\n#define IAutomaticUpdatesSettings2_Refresh(This)\t\\\n    ( (This)->lpVtbl -> Refresh(This) )\n\n#define IAutomaticUpdatesSettings2_Save(This)\t\\\n    ( (This)->lpVtbl -> Save(This) )\n\n\n#define IAutomaticUpdatesSettings2_get_IncludeRecommendedUpdates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IncludeRecommendedUpdates(This,retval) )\n\n#define IAutomaticUpdatesSettings2_put_IncludeRecommendedUpdates(This,value)\t\\\n    ( (This)->lpVtbl -> put_IncludeRecommendedUpdates(This,value) )\n\n#define IAutomaticUpdatesSettings2_CheckPermission(This,userType,permissionType,userHasPermission)\t\\\n    ( (This)->lpVtbl -> CheckPermission(This,userType,permissionType,userHasPermission) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IAutomaticUpdatesSettings2_INTERFACE_DEFINED__ */\n\n\n#ifndef __IAutomaticUpdatesSettings3_INTERFACE_DEFINED__\n#define __IAutomaticUpdatesSettings3_INTERFACE_DEFINED__\n\n/* interface IAutomaticUpdatesSettings3 */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IAutomaticUpdatesSettings3;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"b587f5c3-f57e-485f-bbf5-0d181c5cd0dc\")\n    IAutomaticUpdatesSettings3 : public IAutomaticUpdatesSettings2\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_NonAdministratorsElevated(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_NonAdministratorsElevated(\n            /* [in] */ VARIANT_BOOL value) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_FeaturedUpdatesEnabled(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_FeaturedUpdatesEnabled(\n            /* [in] */ VARIANT_BOOL value) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IAutomaticUpdatesSettings3Vtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IAutomaticUpdatesSettings3 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IAutomaticUpdatesSettings3 * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IAutomaticUpdatesSettings3 * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IAutomaticUpdatesSettings3 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IAutomaticUpdatesSettings3 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IAutomaticUpdatesSettings3 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IAutomaticUpdatesSettings3 * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_NotificationLevel )(\n            __RPC__in IAutomaticUpdatesSettings3 * This,\n            /* [retval][out] */ __RPC__out AutomaticUpdatesNotificationLevel *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_NotificationLevel )(\n            __RPC__in IAutomaticUpdatesSettings3 * This,\n            /* [in] */ AutomaticUpdatesNotificationLevel value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReadOnly )(\n            __RPC__in IAutomaticUpdatesSettings3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Required )(\n            __RPC__in IAutomaticUpdatesSettings3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ScheduledInstallationDay )(\n            __RPC__in IAutomaticUpdatesSettings3 * This,\n            /* [retval][out] */ __RPC__out AutomaticUpdatesScheduledInstallationDay *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ScheduledInstallationDay )(\n            __RPC__in IAutomaticUpdatesSettings3 * This,\n            /* [in] */ AutomaticUpdatesScheduledInstallationDay value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ScheduledInstallationTime )(\n            __RPC__in IAutomaticUpdatesSettings3 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ScheduledInstallationTime )(\n            __RPC__in IAutomaticUpdatesSettings3 * This,\n            /* [in] */ LONG value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Refresh )(\n            __RPC__in IAutomaticUpdatesSettings3 * This);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Save )(\n            __RPC__in IAutomaticUpdatesSettings3 * This);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IncludeRecommendedUpdates )(\n            __RPC__in IAutomaticUpdatesSettings3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IncludeRecommendedUpdates )(\n            __RPC__in IAutomaticUpdatesSettings3 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CheckPermission )(\n            __RPC__in IAutomaticUpdatesSettings3 * This,\n            /* [in] */ AutomaticUpdatesUserType userType,\n            /* [in] */ AutomaticUpdatesPermissionType permissionType,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *userHasPermission);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_NonAdministratorsElevated )(\n            __RPC__in IAutomaticUpdatesSettings3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_NonAdministratorsElevated )(\n            __RPC__in IAutomaticUpdatesSettings3 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_FeaturedUpdatesEnabled )(\n            __RPC__in IAutomaticUpdatesSettings3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_FeaturedUpdatesEnabled )(\n            __RPC__in IAutomaticUpdatesSettings3 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        END_INTERFACE\n    } IAutomaticUpdatesSettings3Vtbl;\n\n    interface IAutomaticUpdatesSettings3\n    {\n        CONST_VTBL struct IAutomaticUpdatesSettings3Vtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IAutomaticUpdatesSettings3_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IAutomaticUpdatesSettings3_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IAutomaticUpdatesSettings3_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IAutomaticUpdatesSettings3_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IAutomaticUpdatesSettings3_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IAutomaticUpdatesSettings3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IAutomaticUpdatesSettings3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IAutomaticUpdatesSettings3_get_NotificationLevel(This,retval)\t\\\n    ( (This)->lpVtbl -> get_NotificationLevel(This,retval) )\n\n#define IAutomaticUpdatesSettings3_put_NotificationLevel(This,value)\t\\\n    ( (This)->lpVtbl -> put_NotificationLevel(This,value) )\n\n#define IAutomaticUpdatesSettings3_get_ReadOnly(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ReadOnly(This,retval) )\n\n#define IAutomaticUpdatesSettings3_get_Required(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Required(This,retval) )\n\n#define IAutomaticUpdatesSettings3_get_ScheduledInstallationDay(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ScheduledInstallationDay(This,retval) )\n\n#define IAutomaticUpdatesSettings3_put_ScheduledInstallationDay(This,value)\t\\\n    ( (This)->lpVtbl -> put_ScheduledInstallationDay(This,value) )\n\n#define IAutomaticUpdatesSettings3_get_ScheduledInstallationTime(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ScheduledInstallationTime(This,retval) )\n\n#define IAutomaticUpdatesSettings3_put_ScheduledInstallationTime(This,value)\t\\\n    ( (This)->lpVtbl -> put_ScheduledInstallationTime(This,value) )\n\n#define IAutomaticUpdatesSettings3_Refresh(This)\t\\\n    ( (This)->lpVtbl -> Refresh(This) )\n\n#define IAutomaticUpdatesSettings3_Save(This)\t\\\n    ( (This)->lpVtbl -> Save(This) )\n\n\n#define IAutomaticUpdatesSettings3_get_IncludeRecommendedUpdates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IncludeRecommendedUpdates(This,retval) )\n\n#define IAutomaticUpdatesSettings3_put_IncludeRecommendedUpdates(This,value)\t\\\n    ( (This)->lpVtbl -> put_IncludeRecommendedUpdates(This,value) )\n\n#define IAutomaticUpdatesSettings3_CheckPermission(This,userType,permissionType,userHasPermission)\t\\\n    ( (This)->lpVtbl -> CheckPermission(This,userType,permissionType,userHasPermission) )\n\n\n#define IAutomaticUpdatesSettings3_get_NonAdministratorsElevated(This,retval)\t\\\n    ( (This)->lpVtbl -> get_NonAdministratorsElevated(This,retval) )\n\n#define IAutomaticUpdatesSettings3_put_NonAdministratorsElevated(This,value)\t\\\n    ( (This)->lpVtbl -> put_NonAdministratorsElevated(This,value) )\n\n#define IAutomaticUpdatesSettings3_get_FeaturedUpdatesEnabled(This,retval)\t\\\n    ( (This)->lpVtbl -> get_FeaturedUpdatesEnabled(This,retval) )\n\n#define IAutomaticUpdatesSettings3_put_FeaturedUpdatesEnabled(This,value)\t\\\n    ( (This)->lpVtbl -> put_FeaturedUpdatesEnabled(This,value) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IAutomaticUpdatesSettings3_INTERFACE_DEFINED__ */\n\n\n#ifndef __IAutomaticUpdates_INTERFACE_DEFINED__\n#define __IAutomaticUpdates_INTERFACE_DEFINED__\n\n/* interface IAutomaticUpdates */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IAutomaticUpdates;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"673425bf-c082-4c7c-bdfd-569464b8e0ce\")\n    IAutomaticUpdates : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE DetectNow( void) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Pause( void) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Resume( void) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE ShowSettingsDialog( void) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Settings(\n            /* [retval][out] */ __RPC__deref_out_opt IAutomaticUpdatesSettings **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ServiceEnabled(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EnableService( void) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IAutomaticUpdatesVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IAutomaticUpdates * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IAutomaticUpdates * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IAutomaticUpdates * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IAutomaticUpdates * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IAutomaticUpdates * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IAutomaticUpdates * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IAutomaticUpdates * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *DetectNow )(\n            __RPC__in IAutomaticUpdates * This);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Pause )(\n            __RPC__in IAutomaticUpdates * This);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Resume )(\n            __RPC__in IAutomaticUpdates * This);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *ShowSettingsDialog )(\n            __RPC__in IAutomaticUpdates * This);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )(\n            __RPC__in IAutomaticUpdates * This,\n            /* [retval][out] */ __RPC__deref_out_opt IAutomaticUpdatesSettings **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceEnabled )(\n            __RPC__in IAutomaticUpdates * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EnableService )(\n            __RPC__in IAutomaticUpdates * This);\n\n        END_INTERFACE\n    } IAutomaticUpdatesVtbl;\n\n    interface IAutomaticUpdates\n    {\n        CONST_VTBL struct IAutomaticUpdatesVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IAutomaticUpdates_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IAutomaticUpdates_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IAutomaticUpdates_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IAutomaticUpdates_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IAutomaticUpdates_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IAutomaticUpdates_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IAutomaticUpdates_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IAutomaticUpdates_DetectNow(This)\t\\\n    ( (This)->lpVtbl -> DetectNow(This) )\n\n#define IAutomaticUpdates_Pause(This)\t\\\n    ( (This)->lpVtbl -> Pause(This) )\n\n#define IAutomaticUpdates_Resume(This)\t\\\n    ( (This)->lpVtbl -> Resume(This) )\n\n#define IAutomaticUpdates_ShowSettingsDialog(This)\t\\\n    ( (This)->lpVtbl -> ShowSettingsDialog(This) )\n\n#define IAutomaticUpdates_get_Settings(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Settings(This,retval) )\n\n#define IAutomaticUpdates_get_ServiceEnabled(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ServiceEnabled(This,retval) )\n\n#define IAutomaticUpdates_EnableService(This)\t\\\n    ( (This)->lpVtbl -> EnableService(This) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IAutomaticUpdates_INTERFACE_DEFINED__ */\n\n\n#ifndef __IAutomaticUpdates2_INTERFACE_DEFINED__\n#define __IAutomaticUpdates2_INTERFACE_DEFINED__\n\n/* interface IAutomaticUpdates2 */\n/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IAutomaticUpdates2;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"4A2F5C31-CFD9-410E-B7FB-29A653973A0F\")\n    IAutomaticUpdates2 : public IAutomaticUpdates\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Results(\n            /* [retval][out] */ __RPC__deref_out_opt IAutomaticUpdatesResults **retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IAutomaticUpdates2Vtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IAutomaticUpdates2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IAutomaticUpdates2 * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IAutomaticUpdates2 * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IAutomaticUpdates2 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IAutomaticUpdates2 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IAutomaticUpdates2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IAutomaticUpdates2 * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *DetectNow )(\n            __RPC__in IAutomaticUpdates2 * This);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Pause )(\n            __RPC__in IAutomaticUpdates2 * This);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Resume )(\n            __RPC__in IAutomaticUpdates2 * This);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *ShowSettingsDialog )(\n            __RPC__in IAutomaticUpdates2 * This);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )(\n            __RPC__in IAutomaticUpdates2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IAutomaticUpdatesSettings **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceEnabled )(\n            __RPC__in IAutomaticUpdates2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EnableService )(\n            __RPC__in IAutomaticUpdates2 * This);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Results )(\n            __RPC__in IAutomaticUpdates2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IAutomaticUpdatesResults **retval);\n\n        END_INTERFACE\n    } IAutomaticUpdates2Vtbl;\n\n    interface IAutomaticUpdates2\n    {\n        CONST_VTBL struct IAutomaticUpdates2Vtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IAutomaticUpdates2_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IAutomaticUpdates2_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IAutomaticUpdates2_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IAutomaticUpdates2_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IAutomaticUpdates2_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IAutomaticUpdates2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IAutomaticUpdates2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IAutomaticUpdates2_DetectNow(This)\t\\\n    ( (This)->lpVtbl -> DetectNow(This) )\n\n#define IAutomaticUpdates2_Pause(This)\t\\\n    ( (This)->lpVtbl -> Pause(This) )\n\n#define IAutomaticUpdates2_Resume(This)\t\\\n    ( (This)->lpVtbl -> Resume(This) )\n\n#define IAutomaticUpdates2_ShowSettingsDialog(This)\t\\\n    ( (This)->lpVtbl -> ShowSettingsDialog(This) )\n\n#define IAutomaticUpdates2_get_Settings(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Settings(This,retval) )\n\n#define IAutomaticUpdates2_get_ServiceEnabled(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ServiceEnabled(This,retval) )\n\n#define IAutomaticUpdates2_EnableService(This)\t\\\n    ( (This)->lpVtbl -> EnableService(This) )\n\n\n#define IAutomaticUpdates2_get_Results(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Results(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IAutomaticUpdates2_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateIdentity_INTERFACE_DEFINED__\n#define __IUpdateIdentity_INTERFACE_DEFINED__\n\n/* interface IUpdateIdentity */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateIdentity;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"46297823-9940-4c09-aed9-cd3ea6d05968\")\n    IUpdateIdentity : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RevisionNumber(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UpdateID(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateIdentityVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateIdentity * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateIdentity * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateIdentity * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateIdentity * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateIdentity * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateIdentity * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateIdentity * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RevisionNumber )(\n            __RPC__in IUpdateIdentity * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UpdateID )(\n            __RPC__in IUpdateIdentity * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        END_INTERFACE\n    } IUpdateIdentityVtbl;\n\n    interface IUpdateIdentity\n    {\n        CONST_VTBL struct IUpdateIdentityVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateIdentity_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateIdentity_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateIdentity_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateIdentity_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateIdentity_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateIdentity_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateIdentity_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateIdentity_get_RevisionNumber(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RevisionNumber(This,retval) )\n\n#define IUpdateIdentity_get_UpdateID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UpdateID(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateIdentity_INTERFACE_DEFINED__ */\n\n\n#ifndef __IImageInformation_INTERFACE_DEFINED__\n#define __IImageInformation_INTERFACE_DEFINED__\n\n/* interface IImageInformation */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IImageInformation;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"7c907864-346c-4aeb-8f3f-57da289f969f\")\n    IImageInformation : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AltText(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Height(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Source(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Width(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IImageInformationVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IImageInformation * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IImageInformation * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IImageInformation * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IImageInformation * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IImageInformation * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IImageInformation * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IImageInformation * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AltText )(\n            __RPC__in IImageInformation * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Height )(\n            __RPC__in IImageInformation * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Source )(\n            __RPC__in IImageInformation * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Width )(\n            __RPC__in IImageInformation * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        END_INTERFACE\n    } IImageInformationVtbl;\n\n    interface IImageInformation\n    {\n        CONST_VTBL struct IImageInformationVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IImageInformation_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IImageInformation_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IImageInformation_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IImageInformation_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IImageInformation_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IImageInformation_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IImageInformation_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IImageInformation_get_AltText(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AltText(This,retval) )\n\n#define IImageInformation_get_Height(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Height(This,retval) )\n\n#define IImageInformation_get_Source(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Source(This,retval) )\n\n#define IImageInformation_get_Width(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Width(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IImageInformation_INTERFACE_DEFINED__ */\n\n\n#ifndef __ICategory_INTERFACE_DEFINED__\n#define __ICategory_INTERFACE_DEFINED__\n\n/* interface ICategory */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_ICategory;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"81ddc1b8-9d35-47a6-b471-5b80f519223b\")\n    ICategory : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Name(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CategoryID(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Children(\n            /* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Description(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Image(\n            /* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Order(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Parent(\n            /* [retval][out] */ __RPC__deref_out_opt ICategory **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Type(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Updates(\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct ICategoryVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in ICategory * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in ICategory * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in ICategory * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in ICategory * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in ICategory * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in ICategory * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            ICategory * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Name )(\n            __RPC__in ICategory * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CategoryID )(\n            __RPC__in ICategory * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Children )(\n            __RPC__in ICategory * This,\n            /* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(\n            __RPC__in ICategory * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(\n            __RPC__in ICategory * This,\n            /* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Order )(\n            __RPC__in ICategory * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Parent )(\n            __RPC__in ICategory * This,\n            /* [retval][out] */ __RPC__deref_out_opt ICategory **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(\n            __RPC__in ICategory * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Updates )(\n            __RPC__in ICategory * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);\n\n        END_INTERFACE\n    } ICategoryVtbl;\n\n    interface ICategory\n    {\n        CONST_VTBL struct ICategoryVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define ICategory_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define ICategory_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define ICategory_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define ICategory_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define ICategory_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define ICategory_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define ICategory_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define ICategory_get_Name(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Name(This,retval) )\n\n#define ICategory_get_CategoryID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CategoryID(This,retval) )\n\n#define ICategory_get_Children(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Children(This,retval) )\n\n#define ICategory_get_Description(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Description(This,retval) )\n\n#define ICategory_get_Image(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Image(This,retval) )\n\n#define ICategory_get_Order(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Order(This,retval) )\n\n#define ICategory_get_Parent(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Parent(This,retval) )\n\n#define ICategory_get_Type(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Type(This,retval) )\n\n#define ICategory_get_Updates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Updates(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ICategory_INTERFACE_DEFINED__ */\n\n\n#ifndef __ICategoryCollection_INTERFACE_DEFINED__\n#define __ICategoryCollection_INTERFACE_DEFINED__\n\n/* interface ICategoryCollection */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_ICategoryCollection;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"3a56bfb8-576c-43f7-9335-fe4838fd7e37\")\n    ICategoryCollection : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Item(\n            /* [in] */ LONG index,\n            /* [retval][out] */ __RPC__deref_out_opt ICategory **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get__NewEnum(\n            /* [retval][out] */ __RPC__deref_out_opt IUnknown **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Count(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct ICategoryCollectionVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in ICategoryCollection * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in ICategoryCollection * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in ICategoryCollection * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in ICategoryCollection * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in ICategoryCollection * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in ICategoryCollection * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            ICategoryCollection * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(\n            __RPC__in ICategoryCollection * This,\n            /* [in] */ LONG index,\n            /* [retval][out] */ __RPC__deref_out_opt ICategory **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(\n            __RPC__in ICategoryCollection * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(\n            __RPC__in ICategoryCollection * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        END_INTERFACE\n    } ICategoryCollectionVtbl;\n\n    interface ICategoryCollection\n    {\n        CONST_VTBL struct ICategoryCollectionVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define ICategoryCollection_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define ICategoryCollection_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define ICategoryCollection_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define ICategoryCollection_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define ICategoryCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define ICategoryCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define ICategoryCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define ICategoryCollection_get_Item(This,index,retval)\t\\\n    ( (This)->lpVtbl -> get_Item(This,index,retval) )\n\n#define ICategoryCollection_get__NewEnum(This,retval)\t\\\n    ( (This)->lpVtbl -> get__NewEnum(This,retval) )\n\n#define ICategoryCollection_get_Count(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Count(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ICategoryCollection_INTERFACE_DEFINED__ */\n\n\n#ifndef __IInstallationBehavior_INTERFACE_DEFINED__\n#define __IInstallationBehavior_INTERFACE_DEFINED__\n\n/* interface IInstallationBehavior */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IInstallationBehavior;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"d9a59339-e245-4dbd-9686-4d5763e39624\")\n    IInstallationBehavior : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CanRequestUserInput(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Impact(\n            /* [retval][out] */ __RPC__out InstallationImpact *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RebootBehavior(\n            /* [retval][out] */ __RPC__out InstallationRebootBehavior *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RequiresNetworkConnectivity(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IInstallationBehaviorVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IInstallationBehavior * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IInstallationBehavior * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IInstallationBehavior * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IInstallationBehavior * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IInstallationBehavior * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IInstallationBehavior * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IInstallationBehavior * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequestUserInput )(\n            __RPC__in IInstallationBehavior * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Impact )(\n            __RPC__in IInstallationBehavior * This,\n            /* [retval][out] */ __RPC__out InstallationImpact *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootBehavior )(\n            __RPC__in IInstallationBehavior * This,\n            /* [retval][out] */ __RPC__out InstallationRebootBehavior *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RequiresNetworkConnectivity )(\n            __RPC__in IInstallationBehavior * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        END_INTERFACE\n    } IInstallationBehaviorVtbl;\n\n    interface IInstallationBehavior\n    {\n        CONST_VTBL struct IInstallationBehaviorVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IInstallationBehavior_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IInstallationBehavior_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IInstallationBehavior_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IInstallationBehavior_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IInstallationBehavior_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IInstallationBehavior_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IInstallationBehavior_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IInstallationBehavior_get_CanRequestUserInput(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CanRequestUserInput(This,retval) )\n\n#define IInstallationBehavior_get_Impact(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Impact(This,retval) )\n\n#define IInstallationBehavior_get_RebootBehavior(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RebootBehavior(This,retval) )\n\n#define IInstallationBehavior_get_RequiresNetworkConnectivity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RequiresNetworkConnectivity(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IInstallationBehavior_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateDownloadContent_INTERFACE_DEFINED__\n#define __IUpdateDownloadContent_INTERFACE_DEFINED__\n\n/* interface IUpdateDownloadContent */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateDownloadContent;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"54a2cb2d-9a0c-48b6-8a50-9abb69ee2d02\")\n    IUpdateDownloadContent : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DownloadUrl(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateDownloadContentVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateDownloadContent * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateDownloadContent * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateDownloadContent * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateDownloadContent * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateDownloadContent * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateDownloadContent * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateDownloadContent * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadUrl )(\n            __RPC__in IUpdateDownloadContent * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        END_INTERFACE\n    } IUpdateDownloadContentVtbl;\n\n    interface IUpdateDownloadContent\n    {\n        CONST_VTBL struct IUpdateDownloadContentVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateDownloadContent_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateDownloadContent_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateDownloadContent_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateDownloadContent_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateDownloadContent_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateDownloadContent_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateDownloadContent_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateDownloadContent_get_DownloadUrl(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadUrl(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateDownloadContent_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateDownloadContent2_INTERFACE_DEFINED__\n#define __IUpdateDownloadContent2_INTERFACE_DEFINED__\n\n/* interface IUpdateDownloadContent2 */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateDownloadContent2;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"c97ad11b-f257-420b-9d9f-377f733f6f68\")\n    IUpdateDownloadContent2 : public IUpdateDownloadContent\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsDeltaCompressedContent(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateDownloadContent2Vtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateDownloadContent2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateDownloadContent2 * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateDownloadContent2 * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateDownloadContent2 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateDownloadContent2 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateDownloadContent2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateDownloadContent2 * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadUrl )(\n            __RPC__in IUpdateDownloadContent2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDeltaCompressedContent )(\n            __RPC__in IUpdateDownloadContent2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        END_INTERFACE\n    } IUpdateDownloadContent2Vtbl;\n\n    interface IUpdateDownloadContent2\n    {\n        CONST_VTBL struct IUpdateDownloadContent2Vtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateDownloadContent2_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateDownloadContent2_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateDownloadContent2_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateDownloadContent2_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateDownloadContent2_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateDownloadContent2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateDownloadContent2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateDownloadContent2_get_DownloadUrl(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadUrl(This,retval) )\n\n\n#define IUpdateDownloadContent2_get_IsDeltaCompressedContent(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsDeltaCompressedContent(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateDownloadContent2_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateDownloadContentCollection_INTERFACE_DEFINED__\n#define __IUpdateDownloadContentCollection_INTERFACE_DEFINED__\n\n/* interface IUpdateDownloadContentCollection */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateDownloadContentCollection;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"bc5513c8-b3b8-4bf7-a4d4-361c0d8c88ba\")\n    IUpdateDownloadContentCollection : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Item(\n            /* [in] */ LONG index,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContent **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get__NewEnum(\n            /* [retval][out] */ __RPC__deref_out_opt IUnknown **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Count(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateDownloadContentCollectionVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateDownloadContentCollection * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateDownloadContentCollection * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateDownloadContentCollection * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateDownloadContentCollection * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateDownloadContentCollection * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateDownloadContentCollection * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateDownloadContentCollection * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(\n            __RPC__in IUpdateDownloadContentCollection * This,\n            /* [in] */ LONG index,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContent **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(\n            __RPC__in IUpdateDownloadContentCollection * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(\n            __RPC__in IUpdateDownloadContentCollection * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        END_INTERFACE\n    } IUpdateDownloadContentCollectionVtbl;\n\n    interface IUpdateDownloadContentCollection\n    {\n        CONST_VTBL struct IUpdateDownloadContentCollectionVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateDownloadContentCollection_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateDownloadContentCollection_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateDownloadContentCollection_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateDownloadContentCollection_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateDownloadContentCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateDownloadContentCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateDownloadContentCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateDownloadContentCollection_get_Item(This,index,retval)\t\\\n    ( (This)->lpVtbl -> get_Item(This,index,retval) )\n\n#define IUpdateDownloadContentCollection_get__NewEnum(This,retval)\t\\\n    ( (This)->lpVtbl -> get__NewEnum(This,retval) )\n\n#define IUpdateDownloadContentCollection_get_Count(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Count(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateDownloadContentCollection_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdate_INTERFACE_DEFINED__\n#define __IUpdate_INTERFACE_DEFINED__\n\n/* interface IUpdate */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdate;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"6a92b07a-d821-4682-b423-5c805022cc4d\")\n    IUpdate : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Title(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AutoSelectOnWebSites(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_BundledUpdates(\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CanRequireSource(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Categories(\n            /* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Deadline(\n            /* [retval][out] */ __RPC__out VARIANT *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DeltaCompressedContentAvailable(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DeltaCompressedContentPreferred(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Description(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_EulaAccepted(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_EulaText(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_HandlerID(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Identity(\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Image(\n            /* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_InstallationBehavior(\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsBeta(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsDownloaded(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsHidden(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_IsHidden(\n            /* [in] */ VARIANT_BOOL value) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsInstalled(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsMandatory(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsUninstallable(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Languages(\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_LastDeploymentChangeTime(\n            /* [retval][out] */ __RPC__out DATE *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_MaxDownloadSize(\n            /* [retval][out] */ __RPC__out DECIMAL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_MinDownloadSize(\n            /* [retval][out] */ __RPC__out DECIMAL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_MoreInfoUrls(\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_MsrcSeverity(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RecommendedCpuSpeed(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RecommendedHardDiskSpace(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RecommendedMemory(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ReleaseNotes(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_SecurityBulletinIDs(\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_SupersededUpdateIDs(\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_SupportUrl(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Type(\n            /* [retval][out] */ __RPC__out UpdateType *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UninstallationNotes(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UninstallationBehavior(\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UninstallationSteps(\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_KBArticleIDs(\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE AcceptEula( void) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DeploymentAction(\n            /* [retval][out] */ __RPC__out DeploymentAction *retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CopyFromCache(\n            /* [ref][in] */ __RPC__in BSTR path,\n            /* [in] */ VARIANT_BOOL toExtractCabFiles) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DownloadPriority(\n            /* [retval][out] */ __RPC__out DownloadPriority *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DownloadContents(\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdate * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdate * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdate * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdate * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdate * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdate * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdate * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelectOnWebSites )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BundledUpdates )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequireSource )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Deadline )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentAvailable )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentPreferred )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaAccepted )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaText )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HandlerID )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Identity )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_InstallationBehavior )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBeta )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDownloaded )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsHidden )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsHidden )(\n            __RPC__in IUpdate * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsInstalled )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsMandatory )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsUninstallable )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Languages )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastDeploymentChangeTime )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MaxDownloadSize )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MinDownloadSize )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MoreInfoUrls )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MsrcSeverity )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedCpuSpeed )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedHardDiskSpace )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedMemory )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReleaseNotes )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SecurityBulletinIDs )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupersededUpdateIDs )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__out UpdateType *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationBehavior )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_KBArticleIDs )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AcceptEula )(\n            __RPC__in IUpdate * This);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeploymentAction )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__out DeploymentAction *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyFromCache )(\n            __RPC__in IUpdate * This,\n            /* [ref][in] */ __RPC__in BSTR path,\n            /* [in] */ VARIANT_BOOL toExtractCabFiles);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadPriority )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__out DownloadPriority *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadContents )(\n            __RPC__in IUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval);\n\n        END_INTERFACE\n    } IUpdateVtbl;\n\n    interface IUpdate\n    {\n        CONST_VTBL struct IUpdateVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdate_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdate_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdate_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdate_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdate_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdate_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdate_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdate_get_Title(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Title(This,retval) )\n\n#define IUpdate_get_AutoSelectOnWebSites(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AutoSelectOnWebSites(This,retval) )\n\n#define IUpdate_get_BundledUpdates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_BundledUpdates(This,retval) )\n\n#define IUpdate_get_CanRequireSource(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CanRequireSource(This,retval) )\n\n#define IUpdate_get_Categories(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Categories(This,retval) )\n\n#define IUpdate_get_Deadline(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Deadline(This,retval) )\n\n#define IUpdate_get_DeltaCompressedContentAvailable(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeltaCompressedContentAvailable(This,retval) )\n\n#define IUpdate_get_DeltaCompressedContentPreferred(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeltaCompressedContentPreferred(This,retval) )\n\n#define IUpdate_get_Description(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Description(This,retval) )\n\n#define IUpdate_get_EulaAccepted(This,retval)\t\\\n    ( (This)->lpVtbl -> get_EulaAccepted(This,retval) )\n\n#define IUpdate_get_EulaText(This,retval)\t\\\n    ( (This)->lpVtbl -> get_EulaText(This,retval) )\n\n#define IUpdate_get_HandlerID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_HandlerID(This,retval) )\n\n#define IUpdate_get_Identity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Identity(This,retval) )\n\n#define IUpdate_get_Image(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Image(This,retval) )\n\n#define IUpdate_get_InstallationBehavior(This,retval)\t\\\n    ( (This)->lpVtbl -> get_InstallationBehavior(This,retval) )\n\n#define IUpdate_get_IsBeta(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsBeta(This,retval) )\n\n#define IUpdate_get_IsDownloaded(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsDownloaded(This,retval) )\n\n#define IUpdate_get_IsHidden(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsHidden(This,retval) )\n\n#define IUpdate_put_IsHidden(This,value)\t\\\n    ( (This)->lpVtbl -> put_IsHidden(This,value) )\n\n#define IUpdate_get_IsInstalled(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsInstalled(This,retval) )\n\n#define IUpdate_get_IsMandatory(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsMandatory(This,retval) )\n\n#define IUpdate_get_IsUninstallable(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsUninstallable(This,retval) )\n\n#define IUpdate_get_Languages(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Languages(This,retval) )\n\n#define IUpdate_get_LastDeploymentChangeTime(This,retval)\t\\\n    ( (This)->lpVtbl -> get_LastDeploymentChangeTime(This,retval) )\n\n#define IUpdate_get_MaxDownloadSize(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MaxDownloadSize(This,retval) )\n\n#define IUpdate_get_MinDownloadSize(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MinDownloadSize(This,retval) )\n\n#define IUpdate_get_MoreInfoUrls(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MoreInfoUrls(This,retval) )\n\n#define IUpdate_get_MsrcSeverity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MsrcSeverity(This,retval) )\n\n#define IUpdate_get_RecommendedCpuSpeed(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedCpuSpeed(This,retval) )\n\n#define IUpdate_get_RecommendedHardDiskSpace(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedHardDiskSpace(This,retval) )\n\n#define IUpdate_get_RecommendedMemory(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedMemory(This,retval) )\n\n#define IUpdate_get_ReleaseNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ReleaseNotes(This,retval) )\n\n#define IUpdate_get_SecurityBulletinIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SecurityBulletinIDs(This,retval) )\n\n#define IUpdate_get_SupersededUpdateIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupersededUpdateIDs(This,retval) )\n\n#define IUpdate_get_SupportUrl(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupportUrl(This,retval) )\n\n#define IUpdate_get_Type(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Type(This,retval) )\n\n#define IUpdate_get_UninstallationNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )\n\n#define IUpdate_get_UninstallationBehavior(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationBehavior(This,retval) )\n\n#define IUpdate_get_UninstallationSteps(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )\n\n#define IUpdate_get_KBArticleIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_KBArticleIDs(This,retval) )\n\n#define IUpdate_AcceptEula(This)\t\\\n    ( (This)->lpVtbl -> AcceptEula(This) )\n\n#define IUpdate_get_DeploymentAction(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeploymentAction(This,retval) )\n\n#define IUpdate_CopyFromCache(This,path,toExtractCabFiles)\t\\\n    ( (This)->lpVtbl -> CopyFromCache(This,path,toExtractCabFiles) )\n\n#define IUpdate_get_DownloadPriority(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadPriority(This,retval) )\n\n#define IUpdate_get_DownloadContents(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadContents(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdate_INTERFACE_DEFINED__ */\n\n\n#ifndef __IWindowsDriverUpdate_INTERFACE_DEFINED__\n#define __IWindowsDriverUpdate_INTERFACE_DEFINED__\n\n/* interface IWindowsDriverUpdate */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IWindowsDriverUpdate;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"b383cd1a-5ce9-4504-9f63-764b1236f191\")\n    IWindowsDriverUpdate : public IUpdate\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverClass(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverHardwareID(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverManufacturer(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverModel(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverProvider(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverVerDate(\n            /* [retval][out] */ __RPC__out DATE *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DeviceProblemNumber(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DeviceStatus(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IWindowsDriverUpdateVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IWindowsDriverUpdate * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IWindowsDriverUpdate * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IWindowsDriverUpdate * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelectOnWebSites )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BundledUpdates )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequireSource )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Deadline )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentAvailable )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentPreferred )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaAccepted )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaText )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HandlerID )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Identity )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_InstallationBehavior )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBeta )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDownloaded )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsHidden )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsHidden )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsInstalled )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsMandatory )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsUninstallable )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Languages )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastDeploymentChangeTime )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MaxDownloadSize )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MinDownloadSize )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MoreInfoUrls )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MsrcSeverity )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedCpuSpeed )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedHardDiskSpace )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedMemory )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReleaseNotes )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SecurityBulletinIDs )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupersededUpdateIDs )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out UpdateType *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationBehavior )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_KBArticleIDs )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AcceptEula )(\n            __RPC__in IWindowsDriverUpdate * This);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeploymentAction )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out DeploymentAction *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyFromCache )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [ref][in] */ __RPC__in BSTR path,\n            /* [in] */ VARIANT_BOOL toExtractCabFiles);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadPriority )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out DownloadPriority *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadContents )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverClass )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverHardwareID )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverManufacturer )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverModel )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverProvider )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverVerDate )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceProblemNumber )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceStatus )(\n            __RPC__in IWindowsDriverUpdate * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        END_INTERFACE\n    } IWindowsDriverUpdateVtbl;\n\n    interface IWindowsDriverUpdate\n    {\n        CONST_VTBL struct IWindowsDriverUpdateVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IWindowsDriverUpdate_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IWindowsDriverUpdate_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IWindowsDriverUpdate_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IWindowsDriverUpdate_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IWindowsDriverUpdate_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IWindowsDriverUpdate_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IWindowsDriverUpdate_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IWindowsDriverUpdate_get_Title(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Title(This,retval) )\n\n#define IWindowsDriverUpdate_get_AutoSelectOnWebSites(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AutoSelectOnWebSites(This,retval) )\n\n#define IWindowsDriverUpdate_get_BundledUpdates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_BundledUpdates(This,retval) )\n\n#define IWindowsDriverUpdate_get_CanRequireSource(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CanRequireSource(This,retval) )\n\n#define IWindowsDriverUpdate_get_Categories(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Categories(This,retval) )\n\n#define IWindowsDriverUpdate_get_Deadline(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Deadline(This,retval) )\n\n#define IWindowsDriverUpdate_get_DeltaCompressedContentAvailable(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeltaCompressedContentAvailable(This,retval) )\n\n#define IWindowsDriverUpdate_get_DeltaCompressedContentPreferred(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeltaCompressedContentPreferred(This,retval) )\n\n#define IWindowsDriverUpdate_get_Description(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Description(This,retval) )\n\n#define IWindowsDriverUpdate_get_EulaAccepted(This,retval)\t\\\n    ( (This)->lpVtbl -> get_EulaAccepted(This,retval) )\n\n#define IWindowsDriverUpdate_get_EulaText(This,retval)\t\\\n    ( (This)->lpVtbl -> get_EulaText(This,retval) )\n\n#define IWindowsDriverUpdate_get_HandlerID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_HandlerID(This,retval) )\n\n#define IWindowsDriverUpdate_get_Identity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Identity(This,retval) )\n\n#define IWindowsDriverUpdate_get_Image(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Image(This,retval) )\n\n#define IWindowsDriverUpdate_get_InstallationBehavior(This,retval)\t\\\n    ( (This)->lpVtbl -> get_InstallationBehavior(This,retval) )\n\n#define IWindowsDriverUpdate_get_IsBeta(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsBeta(This,retval) )\n\n#define IWindowsDriverUpdate_get_IsDownloaded(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsDownloaded(This,retval) )\n\n#define IWindowsDriverUpdate_get_IsHidden(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsHidden(This,retval) )\n\n#define IWindowsDriverUpdate_put_IsHidden(This,value)\t\\\n    ( (This)->lpVtbl -> put_IsHidden(This,value) )\n\n#define IWindowsDriverUpdate_get_IsInstalled(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsInstalled(This,retval) )\n\n#define IWindowsDriverUpdate_get_IsMandatory(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsMandatory(This,retval) )\n\n#define IWindowsDriverUpdate_get_IsUninstallable(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsUninstallable(This,retval) )\n\n#define IWindowsDriverUpdate_get_Languages(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Languages(This,retval) )\n\n#define IWindowsDriverUpdate_get_LastDeploymentChangeTime(This,retval)\t\\\n    ( (This)->lpVtbl -> get_LastDeploymentChangeTime(This,retval) )\n\n#define IWindowsDriverUpdate_get_MaxDownloadSize(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MaxDownloadSize(This,retval) )\n\n#define IWindowsDriverUpdate_get_MinDownloadSize(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MinDownloadSize(This,retval) )\n\n#define IWindowsDriverUpdate_get_MoreInfoUrls(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MoreInfoUrls(This,retval) )\n\n#define IWindowsDriverUpdate_get_MsrcSeverity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MsrcSeverity(This,retval) )\n\n#define IWindowsDriverUpdate_get_RecommendedCpuSpeed(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedCpuSpeed(This,retval) )\n\n#define IWindowsDriverUpdate_get_RecommendedHardDiskSpace(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedHardDiskSpace(This,retval) )\n\n#define IWindowsDriverUpdate_get_RecommendedMemory(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedMemory(This,retval) )\n\n#define IWindowsDriverUpdate_get_ReleaseNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ReleaseNotes(This,retval) )\n\n#define IWindowsDriverUpdate_get_SecurityBulletinIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SecurityBulletinIDs(This,retval) )\n\n#define IWindowsDriverUpdate_get_SupersededUpdateIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupersededUpdateIDs(This,retval) )\n\n#define IWindowsDriverUpdate_get_SupportUrl(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupportUrl(This,retval) )\n\n#define IWindowsDriverUpdate_get_Type(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Type(This,retval) )\n\n#define IWindowsDriverUpdate_get_UninstallationNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )\n\n#define IWindowsDriverUpdate_get_UninstallationBehavior(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationBehavior(This,retval) )\n\n#define IWindowsDriverUpdate_get_UninstallationSteps(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )\n\n#define IWindowsDriverUpdate_get_KBArticleIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_KBArticleIDs(This,retval) )\n\n#define IWindowsDriverUpdate_AcceptEula(This)\t\\\n    ( (This)->lpVtbl -> AcceptEula(This) )\n\n#define IWindowsDriverUpdate_get_DeploymentAction(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeploymentAction(This,retval) )\n\n#define IWindowsDriverUpdate_CopyFromCache(This,path,toExtractCabFiles)\t\\\n    ( (This)->lpVtbl -> CopyFromCache(This,path,toExtractCabFiles) )\n\n#define IWindowsDriverUpdate_get_DownloadPriority(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadPriority(This,retval) )\n\n#define IWindowsDriverUpdate_get_DownloadContents(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadContents(This,retval) )\n\n\n#define IWindowsDriverUpdate_get_DriverClass(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverClass(This,retval) )\n\n#define IWindowsDriverUpdate_get_DriverHardwareID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverHardwareID(This,retval) )\n\n#define IWindowsDriverUpdate_get_DriverManufacturer(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverManufacturer(This,retval) )\n\n#define IWindowsDriverUpdate_get_DriverModel(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverModel(This,retval) )\n\n#define IWindowsDriverUpdate_get_DriverProvider(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverProvider(This,retval) )\n\n#define IWindowsDriverUpdate_get_DriverVerDate(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverVerDate(This,retval) )\n\n#define IWindowsDriverUpdate_get_DeviceProblemNumber(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeviceProblemNumber(This,retval) )\n\n#define IWindowsDriverUpdate_get_DeviceStatus(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeviceStatus(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IWindowsDriverUpdate_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdate2_INTERFACE_DEFINED__\n#define __IUpdate2_INTERFACE_DEFINED__\n\n/* interface IUpdate2 */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdate2;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"144fe9b0-d23d-4a8b-8634-fb4457533b7a\")\n    IUpdate2 : public IUpdate\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RebootRequired(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsPresent(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CveIDs(\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CopyToCache(\n            /* [in] */ __RPC__in_opt IStringCollection *pFiles) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdate2Vtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdate2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdate2 * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdate2 * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdate2 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdate2 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdate2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdate2 * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelectOnWebSites )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BundledUpdates )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequireSource )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Deadline )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentAvailable )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentPreferred )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaAccepted )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaText )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HandlerID )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Identity )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_InstallationBehavior )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBeta )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDownloaded )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsHidden )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsHidden )(\n            __RPC__in IUpdate2 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsInstalled )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsMandatory )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsUninstallable )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Languages )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastDeploymentChangeTime )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MaxDownloadSize )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MinDownloadSize )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MoreInfoUrls )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MsrcSeverity )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedCpuSpeed )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedHardDiskSpace )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedMemory )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReleaseNotes )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SecurityBulletinIDs )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupersededUpdateIDs )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out UpdateType *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationBehavior )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_KBArticleIDs )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AcceptEula )(\n            __RPC__in IUpdate2 * This);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeploymentAction )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out DeploymentAction *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyFromCache )(\n            __RPC__in IUpdate2 * This,\n            /* [ref][in] */ __RPC__in BSTR path,\n            /* [in] */ VARIANT_BOOL toExtractCabFiles);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadPriority )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out DownloadPriority *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadContents )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsPresent )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CveIDs )(\n            __RPC__in IUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyToCache )(\n            __RPC__in IUpdate2 * This,\n            /* [in] */ __RPC__in_opt IStringCollection *pFiles);\n\n        END_INTERFACE\n    } IUpdate2Vtbl;\n\n    interface IUpdate2\n    {\n        CONST_VTBL struct IUpdate2Vtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdate2_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdate2_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdate2_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdate2_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdate2_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdate2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdate2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdate2_get_Title(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Title(This,retval) )\n\n#define IUpdate2_get_AutoSelectOnWebSites(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AutoSelectOnWebSites(This,retval) )\n\n#define IUpdate2_get_BundledUpdates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_BundledUpdates(This,retval) )\n\n#define IUpdate2_get_CanRequireSource(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CanRequireSource(This,retval) )\n\n#define IUpdate2_get_Categories(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Categories(This,retval) )\n\n#define IUpdate2_get_Deadline(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Deadline(This,retval) )\n\n#define IUpdate2_get_DeltaCompressedContentAvailable(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeltaCompressedContentAvailable(This,retval) )\n\n#define IUpdate2_get_DeltaCompressedContentPreferred(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeltaCompressedContentPreferred(This,retval) )\n\n#define IUpdate2_get_Description(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Description(This,retval) )\n\n#define IUpdate2_get_EulaAccepted(This,retval)\t\\\n    ( (This)->lpVtbl -> get_EulaAccepted(This,retval) )\n\n#define IUpdate2_get_EulaText(This,retval)\t\\\n    ( (This)->lpVtbl -> get_EulaText(This,retval) )\n\n#define IUpdate2_get_HandlerID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_HandlerID(This,retval) )\n\n#define IUpdate2_get_Identity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Identity(This,retval) )\n\n#define IUpdate2_get_Image(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Image(This,retval) )\n\n#define IUpdate2_get_InstallationBehavior(This,retval)\t\\\n    ( (This)->lpVtbl -> get_InstallationBehavior(This,retval) )\n\n#define IUpdate2_get_IsBeta(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsBeta(This,retval) )\n\n#define IUpdate2_get_IsDownloaded(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsDownloaded(This,retval) )\n\n#define IUpdate2_get_IsHidden(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsHidden(This,retval) )\n\n#define IUpdate2_put_IsHidden(This,value)\t\\\n    ( (This)->lpVtbl -> put_IsHidden(This,value) )\n\n#define IUpdate2_get_IsInstalled(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsInstalled(This,retval) )\n\n#define IUpdate2_get_IsMandatory(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsMandatory(This,retval) )\n\n#define IUpdate2_get_IsUninstallable(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsUninstallable(This,retval) )\n\n#define IUpdate2_get_Languages(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Languages(This,retval) )\n\n#define IUpdate2_get_LastDeploymentChangeTime(This,retval)\t\\\n    ( (This)->lpVtbl -> get_LastDeploymentChangeTime(This,retval) )\n\n#define IUpdate2_get_MaxDownloadSize(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MaxDownloadSize(This,retval) )\n\n#define IUpdate2_get_MinDownloadSize(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MinDownloadSize(This,retval) )\n\n#define IUpdate2_get_MoreInfoUrls(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MoreInfoUrls(This,retval) )\n\n#define IUpdate2_get_MsrcSeverity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MsrcSeverity(This,retval) )\n\n#define IUpdate2_get_RecommendedCpuSpeed(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedCpuSpeed(This,retval) )\n\n#define IUpdate2_get_RecommendedHardDiskSpace(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedHardDiskSpace(This,retval) )\n\n#define IUpdate2_get_RecommendedMemory(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedMemory(This,retval) )\n\n#define IUpdate2_get_ReleaseNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ReleaseNotes(This,retval) )\n\n#define IUpdate2_get_SecurityBulletinIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SecurityBulletinIDs(This,retval) )\n\n#define IUpdate2_get_SupersededUpdateIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupersededUpdateIDs(This,retval) )\n\n#define IUpdate2_get_SupportUrl(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupportUrl(This,retval) )\n\n#define IUpdate2_get_Type(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Type(This,retval) )\n\n#define IUpdate2_get_UninstallationNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )\n\n#define IUpdate2_get_UninstallationBehavior(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationBehavior(This,retval) )\n\n#define IUpdate2_get_UninstallationSteps(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )\n\n#define IUpdate2_get_KBArticleIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_KBArticleIDs(This,retval) )\n\n#define IUpdate2_AcceptEula(This)\t\\\n    ( (This)->lpVtbl -> AcceptEula(This) )\n\n#define IUpdate2_get_DeploymentAction(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeploymentAction(This,retval) )\n\n#define IUpdate2_CopyFromCache(This,path,toExtractCabFiles)\t\\\n    ( (This)->lpVtbl -> CopyFromCache(This,path,toExtractCabFiles) )\n\n#define IUpdate2_get_DownloadPriority(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadPriority(This,retval) )\n\n#define IUpdate2_get_DownloadContents(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadContents(This,retval) )\n\n\n#define IUpdate2_get_RebootRequired(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RebootRequired(This,retval) )\n\n#define IUpdate2_get_IsPresent(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsPresent(This,retval) )\n\n#define IUpdate2_get_CveIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CveIDs(This,retval) )\n\n#define IUpdate2_CopyToCache(This,pFiles)\t\\\n    ( (This)->lpVtbl -> CopyToCache(This,pFiles) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdate2_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdate3_INTERFACE_DEFINED__\n#define __IUpdate3_INTERFACE_DEFINED__\n\n/* interface IUpdate3 */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdate3;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"112EDA6B-95B3-476F-9D90-AEE82C6B8181\")\n    IUpdate3 : public IUpdate2\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_BrowseOnly(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdate3Vtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdate3 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdate3 * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdate3 * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdate3 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdate3 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdate3 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdate3 * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelectOnWebSites )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BundledUpdates )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequireSource )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Deadline )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentAvailable )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentPreferred )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaAccepted )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaText )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HandlerID )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Identity )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_InstallationBehavior )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBeta )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDownloaded )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsHidden )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsHidden )(\n            __RPC__in IUpdate3 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsInstalled )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsMandatory )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsUninstallable )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Languages )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastDeploymentChangeTime )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MaxDownloadSize )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MinDownloadSize )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MoreInfoUrls )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MsrcSeverity )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedCpuSpeed )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedHardDiskSpace )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedMemory )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReleaseNotes )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SecurityBulletinIDs )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupersededUpdateIDs )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out UpdateType *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationBehavior )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_KBArticleIDs )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AcceptEula )(\n            __RPC__in IUpdate3 * This);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeploymentAction )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out DeploymentAction *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyFromCache )(\n            __RPC__in IUpdate3 * This,\n            /* [ref][in] */ __RPC__in BSTR path,\n            /* [in] */ VARIANT_BOOL toExtractCabFiles);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadPriority )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out DownloadPriority *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadContents )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsPresent )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CveIDs )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyToCache )(\n            __RPC__in IUpdate3 * This,\n            /* [in] */ __RPC__in_opt IStringCollection *pFiles);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BrowseOnly )(\n            __RPC__in IUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        END_INTERFACE\n    } IUpdate3Vtbl;\n\n    interface IUpdate3\n    {\n        CONST_VTBL struct IUpdate3Vtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdate3_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdate3_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdate3_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdate3_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdate3_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdate3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdate3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdate3_get_Title(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Title(This,retval) )\n\n#define IUpdate3_get_AutoSelectOnWebSites(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AutoSelectOnWebSites(This,retval) )\n\n#define IUpdate3_get_BundledUpdates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_BundledUpdates(This,retval) )\n\n#define IUpdate3_get_CanRequireSource(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CanRequireSource(This,retval) )\n\n#define IUpdate3_get_Categories(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Categories(This,retval) )\n\n#define IUpdate3_get_Deadline(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Deadline(This,retval) )\n\n#define IUpdate3_get_DeltaCompressedContentAvailable(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeltaCompressedContentAvailable(This,retval) )\n\n#define IUpdate3_get_DeltaCompressedContentPreferred(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeltaCompressedContentPreferred(This,retval) )\n\n#define IUpdate3_get_Description(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Description(This,retval) )\n\n#define IUpdate3_get_EulaAccepted(This,retval)\t\\\n    ( (This)->lpVtbl -> get_EulaAccepted(This,retval) )\n\n#define IUpdate3_get_EulaText(This,retval)\t\\\n    ( (This)->lpVtbl -> get_EulaText(This,retval) )\n\n#define IUpdate3_get_HandlerID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_HandlerID(This,retval) )\n\n#define IUpdate3_get_Identity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Identity(This,retval) )\n\n#define IUpdate3_get_Image(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Image(This,retval) )\n\n#define IUpdate3_get_InstallationBehavior(This,retval)\t\\\n    ( (This)->lpVtbl -> get_InstallationBehavior(This,retval) )\n\n#define IUpdate3_get_IsBeta(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsBeta(This,retval) )\n\n#define IUpdate3_get_IsDownloaded(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsDownloaded(This,retval) )\n\n#define IUpdate3_get_IsHidden(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsHidden(This,retval) )\n\n#define IUpdate3_put_IsHidden(This,value)\t\\\n    ( (This)->lpVtbl -> put_IsHidden(This,value) )\n\n#define IUpdate3_get_IsInstalled(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsInstalled(This,retval) )\n\n#define IUpdate3_get_IsMandatory(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsMandatory(This,retval) )\n\n#define IUpdate3_get_IsUninstallable(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsUninstallable(This,retval) )\n\n#define IUpdate3_get_Languages(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Languages(This,retval) )\n\n#define IUpdate3_get_LastDeploymentChangeTime(This,retval)\t\\\n    ( (This)->lpVtbl -> get_LastDeploymentChangeTime(This,retval) )\n\n#define IUpdate3_get_MaxDownloadSize(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MaxDownloadSize(This,retval) )\n\n#define IUpdate3_get_MinDownloadSize(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MinDownloadSize(This,retval) )\n\n#define IUpdate3_get_MoreInfoUrls(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MoreInfoUrls(This,retval) )\n\n#define IUpdate3_get_MsrcSeverity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MsrcSeverity(This,retval) )\n\n#define IUpdate3_get_RecommendedCpuSpeed(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedCpuSpeed(This,retval) )\n\n#define IUpdate3_get_RecommendedHardDiskSpace(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedHardDiskSpace(This,retval) )\n\n#define IUpdate3_get_RecommendedMemory(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedMemory(This,retval) )\n\n#define IUpdate3_get_ReleaseNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ReleaseNotes(This,retval) )\n\n#define IUpdate3_get_SecurityBulletinIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SecurityBulletinIDs(This,retval) )\n\n#define IUpdate3_get_SupersededUpdateIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupersededUpdateIDs(This,retval) )\n\n#define IUpdate3_get_SupportUrl(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupportUrl(This,retval) )\n\n#define IUpdate3_get_Type(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Type(This,retval) )\n\n#define IUpdate3_get_UninstallationNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )\n\n#define IUpdate3_get_UninstallationBehavior(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationBehavior(This,retval) )\n\n#define IUpdate3_get_UninstallationSteps(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )\n\n#define IUpdate3_get_KBArticleIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_KBArticleIDs(This,retval) )\n\n#define IUpdate3_AcceptEula(This)\t\\\n    ( (This)->lpVtbl -> AcceptEula(This) )\n\n#define IUpdate3_get_DeploymentAction(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeploymentAction(This,retval) )\n\n#define IUpdate3_CopyFromCache(This,path,toExtractCabFiles)\t\\\n    ( (This)->lpVtbl -> CopyFromCache(This,path,toExtractCabFiles) )\n\n#define IUpdate3_get_DownloadPriority(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadPriority(This,retval) )\n\n#define IUpdate3_get_DownloadContents(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadContents(This,retval) )\n\n\n#define IUpdate3_get_RebootRequired(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RebootRequired(This,retval) )\n\n#define IUpdate3_get_IsPresent(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsPresent(This,retval) )\n\n#define IUpdate3_get_CveIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CveIDs(This,retval) )\n\n#define IUpdate3_CopyToCache(This,pFiles)\t\\\n    ( (This)->lpVtbl -> CopyToCache(This,pFiles) )\n\n\n#define IUpdate3_get_BrowseOnly(This,retval)\t\\\n    ( (This)->lpVtbl -> get_BrowseOnly(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdate3_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdate4_INTERFACE_DEFINED__\n#define __IUpdate4_INTERFACE_DEFINED__\n\n/* interface IUpdate4 */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdate4;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"27e94b0d-5139-49a2-9a61-93522dc54652\")\n    IUpdate4 : public IUpdate3\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_PerUser(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdate4Vtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdate4 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdate4 * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdate4 * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdate4 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdate4 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdate4 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdate4 * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelectOnWebSites )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BundledUpdates )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequireSource )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Deadline )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentAvailable )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentPreferred )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaAccepted )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaText )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HandlerID )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Identity )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_InstallationBehavior )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBeta )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDownloaded )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsHidden )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsHidden )(\n            __RPC__in IUpdate4 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsInstalled )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsMandatory )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsUninstallable )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Languages )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastDeploymentChangeTime )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MaxDownloadSize )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MinDownloadSize )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MoreInfoUrls )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MsrcSeverity )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedCpuSpeed )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedHardDiskSpace )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedMemory )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReleaseNotes )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SecurityBulletinIDs )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupersededUpdateIDs )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out UpdateType *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationBehavior )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_KBArticleIDs )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AcceptEula )(\n            __RPC__in IUpdate4 * This);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeploymentAction )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out DeploymentAction *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyFromCache )(\n            __RPC__in IUpdate4 * This,\n            /* [ref][in] */ __RPC__in BSTR path,\n            /* [in] */ VARIANT_BOOL toExtractCabFiles);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadPriority )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out DownloadPriority *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadContents )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsPresent )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CveIDs )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyToCache )(\n            __RPC__in IUpdate4 * This,\n            /* [in] */ __RPC__in_opt IStringCollection *pFiles);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BrowseOnly )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_PerUser )(\n            __RPC__in IUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        END_INTERFACE\n    } IUpdate4Vtbl;\n\n    interface IUpdate4\n    {\n        CONST_VTBL struct IUpdate4Vtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdate4_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdate4_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdate4_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdate4_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdate4_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdate4_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdate4_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdate4_get_Title(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Title(This,retval) )\n\n#define IUpdate4_get_AutoSelectOnWebSites(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AutoSelectOnWebSites(This,retval) )\n\n#define IUpdate4_get_BundledUpdates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_BundledUpdates(This,retval) )\n\n#define IUpdate4_get_CanRequireSource(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CanRequireSource(This,retval) )\n\n#define IUpdate4_get_Categories(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Categories(This,retval) )\n\n#define IUpdate4_get_Deadline(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Deadline(This,retval) )\n\n#define IUpdate4_get_DeltaCompressedContentAvailable(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeltaCompressedContentAvailable(This,retval) )\n\n#define IUpdate4_get_DeltaCompressedContentPreferred(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeltaCompressedContentPreferred(This,retval) )\n\n#define IUpdate4_get_Description(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Description(This,retval) )\n\n#define IUpdate4_get_EulaAccepted(This,retval)\t\\\n    ( (This)->lpVtbl -> get_EulaAccepted(This,retval) )\n\n#define IUpdate4_get_EulaText(This,retval)\t\\\n    ( (This)->lpVtbl -> get_EulaText(This,retval) )\n\n#define IUpdate4_get_HandlerID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_HandlerID(This,retval) )\n\n#define IUpdate4_get_Identity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Identity(This,retval) )\n\n#define IUpdate4_get_Image(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Image(This,retval) )\n\n#define IUpdate4_get_InstallationBehavior(This,retval)\t\\\n    ( (This)->lpVtbl -> get_InstallationBehavior(This,retval) )\n\n#define IUpdate4_get_IsBeta(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsBeta(This,retval) )\n\n#define IUpdate4_get_IsDownloaded(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsDownloaded(This,retval) )\n\n#define IUpdate4_get_IsHidden(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsHidden(This,retval) )\n\n#define IUpdate4_put_IsHidden(This,value)\t\\\n    ( (This)->lpVtbl -> put_IsHidden(This,value) )\n\n#define IUpdate4_get_IsInstalled(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsInstalled(This,retval) )\n\n#define IUpdate4_get_IsMandatory(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsMandatory(This,retval) )\n\n#define IUpdate4_get_IsUninstallable(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsUninstallable(This,retval) )\n\n#define IUpdate4_get_Languages(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Languages(This,retval) )\n\n#define IUpdate4_get_LastDeploymentChangeTime(This,retval)\t\\\n    ( (This)->lpVtbl -> get_LastDeploymentChangeTime(This,retval) )\n\n#define IUpdate4_get_MaxDownloadSize(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MaxDownloadSize(This,retval) )\n\n#define IUpdate4_get_MinDownloadSize(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MinDownloadSize(This,retval) )\n\n#define IUpdate4_get_MoreInfoUrls(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MoreInfoUrls(This,retval) )\n\n#define IUpdate4_get_MsrcSeverity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MsrcSeverity(This,retval) )\n\n#define IUpdate4_get_RecommendedCpuSpeed(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedCpuSpeed(This,retval) )\n\n#define IUpdate4_get_RecommendedHardDiskSpace(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedHardDiskSpace(This,retval) )\n\n#define IUpdate4_get_RecommendedMemory(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedMemory(This,retval) )\n\n#define IUpdate4_get_ReleaseNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ReleaseNotes(This,retval) )\n\n#define IUpdate4_get_SecurityBulletinIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SecurityBulletinIDs(This,retval) )\n\n#define IUpdate4_get_SupersededUpdateIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupersededUpdateIDs(This,retval) )\n\n#define IUpdate4_get_SupportUrl(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupportUrl(This,retval) )\n\n#define IUpdate4_get_Type(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Type(This,retval) )\n\n#define IUpdate4_get_UninstallationNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )\n\n#define IUpdate4_get_UninstallationBehavior(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationBehavior(This,retval) )\n\n#define IUpdate4_get_UninstallationSteps(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )\n\n#define IUpdate4_get_KBArticleIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_KBArticleIDs(This,retval) )\n\n#define IUpdate4_AcceptEula(This)\t\\\n    ( (This)->lpVtbl -> AcceptEula(This) )\n\n#define IUpdate4_get_DeploymentAction(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeploymentAction(This,retval) )\n\n#define IUpdate4_CopyFromCache(This,path,toExtractCabFiles)\t\\\n    ( (This)->lpVtbl -> CopyFromCache(This,path,toExtractCabFiles) )\n\n#define IUpdate4_get_DownloadPriority(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadPriority(This,retval) )\n\n#define IUpdate4_get_DownloadContents(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadContents(This,retval) )\n\n\n#define IUpdate4_get_RebootRequired(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RebootRequired(This,retval) )\n\n#define IUpdate4_get_IsPresent(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsPresent(This,retval) )\n\n#define IUpdate4_get_CveIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CveIDs(This,retval) )\n\n#define IUpdate4_CopyToCache(This,pFiles)\t\\\n    ( (This)->lpVtbl -> CopyToCache(This,pFiles) )\n\n\n#define IUpdate4_get_BrowseOnly(This,retval)\t\\\n    ( (This)->lpVtbl -> get_BrowseOnly(This,retval) )\n\n\n#define IUpdate4_get_PerUser(This,retval)\t\\\n    ( (This)->lpVtbl -> get_PerUser(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdate4_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdate5_INTERFACE_DEFINED__\n#define __IUpdate5_INTERFACE_DEFINED__\n\n/* interface IUpdate5 */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdate5;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"C1C2F21A-D2F4-4902-B5C6-8A081C19A890\")\n    IUpdate5 : public IUpdate4\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AutoSelection(\n            /* [retval][out] */ __RPC__out AutoSelectionMode *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AutoDownload(\n            /* [retval][out] */ __RPC__out AutoDownloadMode *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdate5Vtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdate5 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdate5 * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdate5 * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdate5 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdate5 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdate5 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdate5 * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelectOnWebSites )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BundledUpdates )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequireSource )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Deadline )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentAvailable )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentPreferred )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaAccepted )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaText )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HandlerID )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Identity )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_InstallationBehavior )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBeta )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDownloaded )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsHidden )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsHidden )(\n            __RPC__in IUpdate5 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsInstalled )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsMandatory )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsUninstallable )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Languages )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastDeploymentChangeTime )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MaxDownloadSize )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MinDownloadSize )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MoreInfoUrls )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MsrcSeverity )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedCpuSpeed )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedHardDiskSpace )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedMemory )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReleaseNotes )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SecurityBulletinIDs )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupersededUpdateIDs )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out UpdateType *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationBehavior )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_KBArticleIDs )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AcceptEula )(\n            __RPC__in IUpdate5 * This);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeploymentAction )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out DeploymentAction *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyFromCache )(\n            __RPC__in IUpdate5 * This,\n            /* [ref][in] */ __RPC__in BSTR path,\n            /* [in] */ VARIANT_BOOL toExtractCabFiles);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadPriority )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out DownloadPriority *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadContents )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsPresent )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CveIDs )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyToCache )(\n            __RPC__in IUpdate5 * This,\n            /* [in] */ __RPC__in_opt IStringCollection *pFiles);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BrowseOnly )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_PerUser )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelection )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out AutoSelectionMode *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoDownload )(\n            __RPC__in IUpdate5 * This,\n            /* [retval][out] */ __RPC__out AutoDownloadMode *retval);\n\n        END_INTERFACE\n    } IUpdate5Vtbl;\n\n    interface IUpdate5\n    {\n        CONST_VTBL struct IUpdate5Vtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdate5_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdate5_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdate5_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdate5_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdate5_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdate5_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdate5_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdate5_get_Title(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Title(This,retval) )\n\n#define IUpdate5_get_AutoSelectOnWebSites(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AutoSelectOnWebSites(This,retval) )\n\n#define IUpdate5_get_BundledUpdates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_BundledUpdates(This,retval) )\n\n#define IUpdate5_get_CanRequireSource(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CanRequireSource(This,retval) )\n\n#define IUpdate5_get_Categories(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Categories(This,retval) )\n\n#define IUpdate5_get_Deadline(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Deadline(This,retval) )\n\n#define IUpdate5_get_DeltaCompressedContentAvailable(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeltaCompressedContentAvailable(This,retval) )\n\n#define IUpdate5_get_DeltaCompressedContentPreferred(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeltaCompressedContentPreferred(This,retval) )\n\n#define IUpdate5_get_Description(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Description(This,retval) )\n\n#define IUpdate5_get_EulaAccepted(This,retval)\t\\\n    ( (This)->lpVtbl -> get_EulaAccepted(This,retval) )\n\n#define IUpdate5_get_EulaText(This,retval)\t\\\n    ( (This)->lpVtbl -> get_EulaText(This,retval) )\n\n#define IUpdate5_get_HandlerID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_HandlerID(This,retval) )\n\n#define IUpdate5_get_Identity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Identity(This,retval) )\n\n#define IUpdate5_get_Image(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Image(This,retval) )\n\n#define IUpdate5_get_InstallationBehavior(This,retval)\t\\\n    ( (This)->lpVtbl -> get_InstallationBehavior(This,retval) )\n\n#define IUpdate5_get_IsBeta(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsBeta(This,retval) )\n\n#define IUpdate5_get_IsDownloaded(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsDownloaded(This,retval) )\n\n#define IUpdate5_get_IsHidden(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsHidden(This,retval) )\n\n#define IUpdate5_put_IsHidden(This,value)\t\\\n    ( (This)->lpVtbl -> put_IsHidden(This,value) )\n\n#define IUpdate5_get_IsInstalled(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsInstalled(This,retval) )\n\n#define IUpdate5_get_IsMandatory(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsMandatory(This,retval) )\n\n#define IUpdate5_get_IsUninstallable(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsUninstallable(This,retval) )\n\n#define IUpdate5_get_Languages(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Languages(This,retval) )\n\n#define IUpdate5_get_LastDeploymentChangeTime(This,retval)\t\\\n    ( (This)->lpVtbl -> get_LastDeploymentChangeTime(This,retval) )\n\n#define IUpdate5_get_MaxDownloadSize(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MaxDownloadSize(This,retval) )\n\n#define IUpdate5_get_MinDownloadSize(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MinDownloadSize(This,retval) )\n\n#define IUpdate5_get_MoreInfoUrls(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MoreInfoUrls(This,retval) )\n\n#define IUpdate5_get_MsrcSeverity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MsrcSeverity(This,retval) )\n\n#define IUpdate5_get_RecommendedCpuSpeed(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedCpuSpeed(This,retval) )\n\n#define IUpdate5_get_RecommendedHardDiskSpace(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedHardDiskSpace(This,retval) )\n\n#define IUpdate5_get_RecommendedMemory(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedMemory(This,retval) )\n\n#define IUpdate5_get_ReleaseNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ReleaseNotes(This,retval) )\n\n#define IUpdate5_get_SecurityBulletinIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SecurityBulletinIDs(This,retval) )\n\n#define IUpdate5_get_SupersededUpdateIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupersededUpdateIDs(This,retval) )\n\n#define IUpdate5_get_SupportUrl(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupportUrl(This,retval) )\n\n#define IUpdate5_get_Type(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Type(This,retval) )\n\n#define IUpdate5_get_UninstallationNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )\n\n#define IUpdate5_get_UninstallationBehavior(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationBehavior(This,retval) )\n\n#define IUpdate5_get_UninstallationSteps(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )\n\n#define IUpdate5_get_KBArticleIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_KBArticleIDs(This,retval) )\n\n#define IUpdate5_AcceptEula(This)\t\\\n    ( (This)->lpVtbl -> AcceptEula(This) )\n\n#define IUpdate5_get_DeploymentAction(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeploymentAction(This,retval) )\n\n#define IUpdate5_CopyFromCache(This,path,toExtractCabFiles)\t\\\n    ( (This)->lpVtbl -> CopyFromCache(This,path,toExtractCabFiles) )\n\n#define IUpdate5_get_DownloadPriority(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadPriority(This,retval) )\n\n#define IUpdate5_get_DownloadContents(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadContents(This,retval) )\n\n\n#define IUpdate5_get_RebootRequired(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RebootRequired(This,retval) )\n\n#define IUpdate5_get_IsPresent(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsPresent(This,retval) )\n\n#define IUpdate5_get_CveIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CveIDs(This,retval) )\n\n#define IUpdate5_CopyToCache(This,pFiles)\t\\\n    ( (This)->lpVtbl -> CopyToCache(This,pFiles) )\n\n\n#define IUpdate5_get_BrowseOnly(This,retval)\t\\\n    ( (This)->lpVtbl -> get_BrowseOnly(This,retval) )\n\n\n#define IUpdate5_get_PerUser(This,retval)\t\\\n    ( (This)->lpVtbl -> get_PerUser(This,retval) )\n\n\n#define IUpdate5_get_AutoSelection(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AutoSelection(This,retval) )\n\n#define IUpdate5_get_AutoDownload(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AutoDownload(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdate5_INTERFACE_DEFINED__ */\n\n\n#ifndef __IWindowsDriverUpdate2_INTERFACE_DEFINED__\n#define __IWindowsDriverUpdate2_INTERFACE_DEFINED__\n\n/* interface IWindowsDriverUpdate2 */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IWindowsDriverUpdate2;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"615c4269-7a48-43bd-96b7-bf6ca27d6c3e\")\n    IWindowsDriverUpdate2 : public IWindowsDriverUpdate\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RebootRequired(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsPresent(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CveIDs(\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CopyToCache(\n            /* [in] */ __RPC__in_opt IStringCollection *pFiles) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IWindowsDriverUpdate2Vtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IWindowsDriverUpdate2 * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IWindowsDriverUpdate2 * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IWindowsDriverUpdate2 * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelectOnWebSites )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BundledUpdates )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequireSource )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Deadline )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentAvailable )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentPreferred )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaAccepted )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaText )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HandlerID )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Identity )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_InstallationBehavior )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBeta )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDownloaded )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsHidden )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsHidden )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsInstalled )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsMandatory )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsUninstallable )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Languages )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastDeploymentChangeTime )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MaxDownloadSize )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MinDownloadSize )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MoreInfoUrls )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MsrcSeverity )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedCpuSpeed )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedHardDiskSpace )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedMemory )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReleaseNotes )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SecurityBulletinIDs )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupersededUpdateIDs )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out UpdateType *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationBehavior )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_KBArticleIDs )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AcceptEula )(\n            __RPC__in IWindowsDriverUpdate2 * This);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeploymentAction )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out DeploymentAction *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyFromCache )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [ref][in] */ __RPC__in BSTR path,\n            /* [in] */ VARIANT_BOOL toExtractCabFiles);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadPriority )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out DownloadPriority *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadContents )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverClass )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverHardwareID )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverManufacturer )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverModel )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverProvider )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverVerDate )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceProblemNumber )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceStatus )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsPresent )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CveIDs )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyToCache )(\n            __RPC__in IWindowsDriverUpdate2 * This,\n            /* [in] */ __RPC__in_opt IStringCollection *pFiles);\n\n        END_INTERFACE\n    } IWindowsDriverUpdate2Vtbl;\n\n    interface IWindowsDriverUpdate2\n    {\n        CONST_VTBL struct IWindowsDriverUpdate2Vtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IWindowsDriverUpdate2_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IWindowsDriverUpdate2_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IWindowsDriverUpdate2_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IWindowsDriverUpdate2_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IWindowsDriverUpdate2_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IWindowsDriverUpdate2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IWindowsDriverUpdate2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IWindowsDriverUpdate2_get_Title(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Title(This,retval) )\n\n#define IWindowsDriverUpdate2_get_AutoSelectOnWebSites(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AutoSelectOnWebSites(This,retval) )\n\n#define IWindowsDriverUpdate2_get_BundledUpdates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_BundledUpdates(This,retval) )\n\n#define IWindowsDriverUpdate2_get_CanRequireSource(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CanRequireSource(This,retval) )\n\n#define IWindowsDriverUpdate2_get_Categories(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Categories(This,retval) )\n\n#define IWindowsDriverUpdate2_get_Deadline(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Deadline(This,retval) )\n\n#define IWindowsDriverUpdate2_get_DeltaCompressedContentAvailable(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeltaCompressedContentAvailable(This,retval) )\n\n#define IWindowsDriverUpdate2_get_DeltaCompressedContentPreferred(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeltaCompressedContentPreferred(This,retval) )\n\n#define IWindowsDriverUpdate2_get_Description(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Description(This,retval) )\n\n#define IWindowsDriverUpdate2_get_EulaAccepted(This,retval)\t\\\n    ( (This)->lpVtbl -> get_EulaAccepted(This,retval) )\n\n#define IWindowsDriverUpdate2_get_EulaText(This,retval)\t\\\n    ( (This)->lpVtbl -> get_EulaText(This,retval) )\n\n#define IWindowsDriverUpdate2_get_HandlerID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_HandlerID(This,retval) )\n\n#define IWindowsDriverUpdate2_get_Identity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Identity(This,retval) )\n\n#define IWindowsDriverUpdate2_get_Image(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Image(This,retval) )\n\n#define IWindowsDriverUpdate2_get_InstallationBehavior(This,retval)\t\\\n    ( (This)->lpVtbl -> get_InstallationBehavior(This,retval) )\n\n#define IWindowsDriverUpdate2_get_IsBeta(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsBeta(This,retval) )\n\n#define IWindowsDriverUpdate2_get_IsDownloaded(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsDownloaded(This,retval) )\n\n#define IWindowsDriverUpdate2_get_IsHidden(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsHidden(This,retval) )\n\n#define IWindowsDriverUpdate2_put_IsHidden(This,value)\t\\\n    ( (This)->lpVtbl -> put_IsHidden(This,value) )\n\n#define IWindowsDriverUpdate2_get_IsInstalled(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsInstalled(This,retval) )\n\n#define IWindowsDriverUpdate2_get_IsMandatory(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsMandatory(This,retval) )\n\n#define IWindowsDriverUpdate2_get_IsUninstallable(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsUninstallable(This,retval) )\n\n#define IWindowsDriverUpdate2_get_Languages(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Languages(This,retval) )\n\n#define IWindowsDriverUpdate2_get_LastDeploymentChangeTime(This,retval)\t\\\n    ( (This)->lpVtbl -> get_LastDeploymentChangeTime(This,retval) )\n\n#define IWindowsDriverUpdate2_get_MaxDownloadSize(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MaxDownloadSize(This,retval) )\n\n#define IWindowsDriverUpdate2_get_MinDownloadSize(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MinDownloadSize(This,retval) )\n\n#define IWindowsDriverUpdate2_get_MoreInfoUrls(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MoreInfoUrls(This,retval) )\n\n#define IWindowsDriverUpdate2_get_MsrcSeverity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MsrcSeverity(This,retval) )\n\n#define IWindowsDriverUpdate2_get_RecommendedCpuSpeed(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedCpuSpeed(This,retval) )\n\n#define IWindowsDriverUpdate2_get_RecommendedHardDiskSpace(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedHardDiskSpace(This,retval) )\n\n#define IWindowsDriverUpdate2_get_RecommendedMemory(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedMemory(This,retval) )\n\n#define IWindowsDriverUpdate2_get_ReleaseNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ReleaseNotes(This,retval) )\n\n#define IWindowsDriverUpdate2_get_SecurityBulletinIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SecurityBulletinIDs(This,retval) )\n\n#define IWindowsDriverUpdate2_get_SupersededUpdateIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupersededUpdateIDs(This,retval) )\n\n#define IWindowsDriverUpdate2_get_SupportUrl(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupportUrl(This,retval) )\n\n#define IWindowsDriverUpdate2_get_Type(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Type(This,retval) )\n\n#define IWindowsDriverUpdate2_get_UninstallationNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )\n\n#define IWindowsDriverUpdate2_get_UninstallationBehavior(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationBehavior(This,retval) )\n\n#define IWindowsDriverUpdate2_get_UninstallationSteps(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )\n\n#define IWindowsDriverUpdate2_get_KBArticleIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_KBArticleIDs(This,retval) )\n\n#define IWindowsDriverUpdate2_AcceptEula(This)\t\\\n    ( (This)->lpVtbl -> AcceptEula(This) )\n\n#define IWindowsDriverUpdate2_get_DeploymentAction(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeploymentAction(This,retval) )\n\n#define IWindowsDriverUpdate2_CopyFromCache(This,path,toExtractCabFiles)\t\\\n    ( (This)->lpVtbl -> CopyFromCache(This,path,toExtractCabFiles) )\n\n#define IWindowsDriverUpdate2_get_DownloadPriority(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadPriority(This,retval) )\n\n#define IWindowsDriverUpdate2_get_DownloadContents(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadContents(This,retval) )\n\n\n#define IWindowsDriverUpdate2_get_DriverClass(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverClass(This,retval) )\n\n#define IWindowsDriverUpdate2_get_DriverHardwareID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverHardwareID(This,retval) )\n\n#define IWindowsDriverUpdate2_get_DriverManufacturer(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverManufacturer(This,retval) )\n\n#define IWindowsDriverUpdate2_get_DriverModel(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverModel(This,retval) )\n\n#define IWindowsDriverUpdate2_get_DriverProvider(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverProvider(This,retval) )\n\n#define IWindowsDriverUpdate2_get_DriverVerDate(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverVerDate(This,retval) )\n\n#define IWindowsDriverUpdate2_get_DeviceProblemNumber(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeviceProblemNumber(This,retval) )\n\n#define IWindowsDriverUpdate2_get_DeviceStatus(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeviceStatus(This,retval) )\n\n\n#define IWindowsDriverUpdate2_get_RebootRequired(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RebootRequired(This,retval) )\n\n#define IWindowsDriverUpdate2_get_IsPresent(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsPresent(This,retval) )\n\n#define IWindowsDriverUpdate2_get_CveIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CveIDs(This,retval) )\n\n#define IWindowsDriverUpdate2_CopyToCache(This,pFiles)\t\\\n    ( (This)->lpVtbl -> CopyToCache(This,pFiles) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IWindowsDriverUpdate2_INTERFACE_DEFINED__ */\n\n\n#ifndef __IWindowsDriverUpdate3_INTERFACE_DEFINED__\n#define __IWindowsDriverUpdate3_INTERFACE_DEFINED__\n\n/* interface IWindowsDriverUpdate3 */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IWindowsDriverUpdate3;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"49EBD502-4A96-41BD-9E3E-4C5057F4250C\")\n    IWindowsDriverUpdate3 : public IWindowsDriverUpdate2\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_BrowseOnly(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IWindowsDriverUpdate3Vtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IWindowsDriverUpdate3 * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IWindowsDriverUpdate3 * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IWindowsDriverUpdate3 * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelectOnWebSites )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BundledUpdates )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequireSource )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Deadline )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentAvailable )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentPreferred )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaAccepted )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaText )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HandlerID )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Identity )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_InstallationBehavior )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBeta )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDownloaded )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsHidden )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsHidden )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsInstalled )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsMandatory )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsUninstallable )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Languages )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastDeploymentChangeTime )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MaxDownloadSize )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MinDownloadSize )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MoreInfoUrls )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MsrcSeverity )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedCpuSpeed )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedHardDiskSpace )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedMemory )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReleaseNotes )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SecurityBulletinIDs )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupersededUpdateIDs )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out UpdateType *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationBehavior )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_KBArticleIDs )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AcceptEula )(\n            __RPC__in IWindowsDriverUpdate3 * This);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeploymentAction )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out DeploymentAction *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyFromCache )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [ref][in] */ __RPC__in BSTR path,\n            /* [in] */ VARIANT_BOOL toExtractCabFiles);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadPriority )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out DownloadPriority *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadContents )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverClass )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverHardwareID )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverManufacturer )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverModel )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverProvider )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverVerDate )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceProblemNumber )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceStatus )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsPresent )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CveIDs )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyToCache )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [in] */ __RPC__in_opt IStringCollection *pFiles);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BrowseOnly )(\n            __RPC__in IWindowsDriverUpdate3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        END_INTERFACE\n    } IWindowsDriverUpdate3Vtbl;\n\n    interface IWindowsDriverUpdate3\n    {\n        CONST_VTBL struct IWindowsDriverUpdate3Vtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IWindowsDriverUpdate3_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IWindowsDriverUpdate3_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IWindowsDriverUpdate3_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IWindowsDriverUpdate3_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IWindowsDriverUpdate3_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IWindowsDriverUpdate3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IWindowsDriverUpdate3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IWindowsDriverUpdate3_get_Title(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Title(This,retval) )\n\n#define IWindowsDriverUpdate3_get_AutoSelectOnWebSites(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AutoSelectOnWebSites(This,retval) )\n\n#define IWindowsDriverUpdate3_get_BundledUpdates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_BundledUpdates(This,retval) )\n\n#define IWindowsDriverUpdate3_get_CanRequireSource(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CanRequireSource(This,retval) )\n\n#define IWindowsDriverUpdate3_get_Categories(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Categories(This,retval) )\n\n#define IWindowsDriverUpdate3_get_Deadline(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Deadline(This,retval) )\n\n#define IWindowsDriverUpdate3_get_DeltaCompressedContentAvailable(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeltaCompressedContentAvailable(This,retval) )\n\n#define IWindowsDriverUpdate3_get_DeltaCompressedContentPreferred(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeltaCompressedContentPreferred(This,retval) )\n\n#define IWindowsDriverUpdate3_get_Description(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Description(This,retval) )\n\n#define IWindowsDriverUpdate3_get_EulaAccepted(This,retval)\t\\\n    ( (This)->lpVtbl -> get_EulaAccepted(This,retval) )\n\n#define IWindowsDriverUpdate3_get_EulaText(This,retval)\t\\\n    ( (This)->lpVtbl -> get_EulaText(This,retval) )\n\n#define IWindowsDriverUpdate3_get_HandlerID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_HandlerID(This,retval) )\n\n#define IWindowsDriverUpdate3_get_Identity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Identity(This,retval) )\n\n#define IWindowsDriverUpdate3_get_Image(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Image(This,retval) )\n\n#define IWindowsDriverUpdate3_get_InstallationBehavior(This,retval)\t\\\n    ( (This)->lpVtbl -> get_InstallationBehavior(This,retval) )\n\n#define IWindowsDriverUpdate3_get_IsBeta(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsBeta(This,retval) )\n\n#define IWindowsDriverUpdate3_get_IsDownloaded(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsDownloaded(This,retval) )\n\n#define IWindowsDriverUpdate3_get_IsHidden(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsHidden(This,retval) )\n\n#define IWindowsDriverUpdate3_put_IsHidden(This,value)\t\\\n    ( (This)->lpVtbl -> put_IsHidden(This,value) )\n\n#define IWindowsDriverUpdate3_get_IsInstalled(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsInstalled(This,retval) )\n\n#define IWindowsDriverUpdate3_get_IsMandatory(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsMandatory(This,retval) )\n\n#define IWindowsDriverUpdate3_get_IsUninstallable(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsUninstallable(This,retval) )\n\n#define IWindowsDriverUpdate3_get_Languages(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Languages(This,retval) )\n\n#define IWindowsDriverUpdate3_get_LastDeploymentChangeTime(This,retval)\t\\\n    ( (This)->lpVtbl -> get_LastDeploymentChangeTime(This,retval) )\n\n#define IWindowsDriverUpdate3_get_MaxDownloadSize(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MaxDownloadSize(This,retval) )\n\n#define IWindowsDriverUpdate3_get_MinDownloadSize(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MinDownloadSize(This,retval) )\n\n#define IWindowsDriverUpdate3_get_MoreInfoUrls(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MoreInfoUrls(This,retval) )\n\n#define IWindowsDriverUpdate3_get_MsrcSeverity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MsrcSeverity(This,retval) )\n\n#define IWindowsDriverUpdate3_get_RecommendedCpuSpeed(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedCpuSpeed(This,retval) )\n\n#define IWindowsDriverUpdate3_get_RecommendedHardDiskSpace(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedHardDiskSpace(This,retval) )\n\n#define IWindowsDriverUpdate3_get_RecommendedMemory(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedMemory(This,retval) )\n\n#define IWindowsDriverUpdate3_get_ReleaseNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ReleaseNotes(This,retval) )\n\n#define IWindowsDriverUpdate3_get_SecurityBulletinIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SecurityBulletinIDs(This,retval) )\n\n#define IWindowsDriverUpdate3_get_SupersededUpdateIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupersededUpdateIDs(This,retval) )\n\n#define IWindowsDriverUpdate3_get_SupportUrl(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupportUrl(This,retval) )\n\n#define IWindowsDriverUpdate3_get_Type(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Type(This,retval) )\n\n#define IWindowsDriverUpdate3_get_UninstallationNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )\n\n#define IWindowsDriverUpdate3_get_UninstallationBehavior(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationBehavior(This,retval) )\n\n#define IWindowsDriverUpdate3_get_UninstallationSteps(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )\n\n#define IWindowsDriverUpdate3_get_KBArticleIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_KBArticleIDs(This,retval) )\n\n#define IWindowsDriverUpdate3_AcceptEula(This)\t\\\n    ( (This)->lpVtbl -> AcceptEula(This) )\n\n#define IWindowsDriverUpdate3_get_DeploymentAction(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeploymentAction(This,retval) )\n\n#define IWindowsDriverUpdate3_CopyFromCache(This,path,toExtractCabFiles)\t\\\n    ( (This)->lpVtbl -> CopyFromCache(This,path,toExtractCabFiles) )\n\n#define IWindowsDriverUpdate3_get_DownloadPriority(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadPriority(This,retval) )\n\n#define IWindowsDriverUpdate3_get_DownloadContents(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadContents(This,retval) )\n\n\n#define IWindowsDriverUpdate3_get_DriverClass(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverClass(This,retval) )\n\n#define IWindowsDriverUpdate3_get_DriverHardwareID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverHardwareID(This,retval) )\n\n#define IWindowsDriverUpdate3_get_DriverManufacturer(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverManufacturer(This,retval) )\n\n#define IWindowsDriverUpdate3_get_DriverModel(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverModel(This,retval) )\n\n#define IWindowsDriverUpdate3_get_DriverProvider(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverProvider(This,retval) )\n\n#define IWindowsDriverUpdate3_get_DriverVerDate(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverVerDate(This,retval) )\n\n#define IWindowsDriverUpdate3_get_DeviceProblemNumber(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeviceProblemNumber(This,retval) )\n\n#define IWindowsDriverUpdate3_get_DeviceStatus(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeviceStatus(This,retval) )\n\n\n#define IWindowsDriverUpdate3_get_RebootRequired(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RebootRequired(This,retval) )\n\n#define IWindowsDriverUpdate3_get_IsPresent(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsPresent(This,retval) )\n\n#define IWindowsDriverUpdate3_get_CveIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CveIDs(This,retval) )\n\n#define IWindowsDriverUpdate3_CopyToCache(This,pFiles)\t\\\n    ( (This)->lpVtbl -> CopyToCache(This,pFiles) )\n\n\n#define IWindowsDriverUpdate3_get_BrowseOnly(This,retval)\t\\\n    ( (This)->lpVtbl -> get_BrowseOnly(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IWindowsDriverUpdate3_INTERFACE_DEFINED__ */\n\n\n#ifndef __IWindowsDriverUpdateEntry_INTERFACE_DEFINED__\n#define __IWindowsDriverUpdateEntry_INTERFACE_DEFINED__\n\n/* interface IWindowsDriverUpdateEntry */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IWindowsDriverUpdateEntry;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"ED8BFE40-A60B-42ea-9652-817DFCFA23EC\")\n    IWindowsDriverUpdateEntry : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverClass(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverHardwareID(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverManufacturer(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverModel(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverProvider(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DriverVerDate(\n            /* [retval][out] */ __RPC__out DATE *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DeviceProblemNumber(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DeviceStatus(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IWindowsDriverUpdateEntryVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IWindowsDriverUpdateEntry * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IWindowsDriverUpdateEntry * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IWindowsDriverUpdateEntry * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IWindowsDriverUpdateEntry * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IWindowsDriverUpdateEntry * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IWindowsDriverUpdateEntry * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IWindowsDriverUpdateEntry * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverClass )(\n            __RPC__in IWindowsDriverUpdateEntry * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverHardwareID )(\n            __RPC__in IWindowsDriverUpdateEntry * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverManufacturer )(\n            __RPC__in IWindowsDriverUpdateEntry * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverModel )(\n            __RPC__in IWindowsDriverUpdateEntry * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverProvider )(\n            __RPC__in IWindowsDriverUpdateEntry * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverVerDate )(\n            __RPC__in IWindowsDriverUpdateEntry * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceProblemNumber )(\n            __RPC__in IWindowsDriverUpdateEntry * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceStatus )(\n            __RPC__in IWindowsDriverUpdateEntry * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        END_INTERFACE\n    } IWindowsDriverUpdateEntryVtbl;\n\n    interface IWindowsDriverUpdateEntry\n    {\n        CONST_VTBL struct IWindowsDriverUpdateEntryVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IWindowsDriverUpdateEntry_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IWindowsDriverUpdateEntry_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IWindowsDriverUpdateEntry_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IWindowsDriverUpdateEntry_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IWindowsDriverUpdateEntry_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IWindowsDriverUpdateEntry_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IWindowsDriverUpdateEntry_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IWindowsDriverUpdateEntry_get_DriverClass(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverClass(This,retval) )\n\n#define IWindowsDriverUpdateEntry_get_DriverHardwareID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverHardwareID(This,retval) )\n\n#define IWindowsDriverUpdateEntry_get_DriverManufacturer(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverManufacturer(This,retval) )\n\n#define IWindowsDriverUpdateEntry_get_DriverModel(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverModel(This,retval) )\n\n#define IWindowsDriverUpdateEntry_get_DriverProvider(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverProvider(This,retval) )\n\n#define IWindowsDriverUpdateEntry_get_DriverVerDate(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverVerDate(This,retval) )\n\n#define IWindowsDriverUpdateEntry_get_DeviceProblemNumber(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeviceProblemNumber(This,retval) )\n\n#define IWindowsDriverUpdateEntry_get_DeviceStatus(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeviceStatus(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IWindowsDriverUpdateEntry_INTERFACE_DEFINED__ */\n\n\n#ifndef __IWindowsDriverUpdateEntryCollection_INTERFACE_DEFINED__\n#define __IWindowsDriverUpdateEntryCollection_INTERFACE_DEFINED__\n\n/* interface IWindowsDriverUpdateEntryCollection */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IWindowsDriverUpdateEntryCollection;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"0D521700-A372-4bef-828B-3D00C10ADEBD\")\n    IWindowsDriverUpdateEntryCollection : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Item(\n            /* [in] */ LONG index,\n            /* [retval][out] */ __RPC__deref_out_opt IWindowsDriverUpdateEntry **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get__NewEnum(\n            /* [retval][out] */ __RPC__deref_out_opt IUnknown **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Count(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IWindowsDriverUpdateEntryCollectionVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IWindowsDriverUpdateEntryCollection * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IWindowsDriverUpdateEntryCollection * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IWindowsDriverUpdateEntryCollection * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IWindowsDriverUpdateEntryCollection * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IWindowsDriverUpdateEntryCollection * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IWindowsDriverUpdateEntryCollection * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IWindowsDriverUpdateEntryCollection * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(\n            __RPC__in IWindowsDriverUpdateEntryCollection * This,\n            /* [in] */ LONG index,\n            /* [retval][out] */ __RPC__deref_out_opt IWindowsDriverUpdateEntry **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(\n            __RPC__in IWindowsDriverUpdateEntryCollection * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(\n            __RPC__in IWindowsDriverUpdateEntryCollection * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        END_INTERFACE\n    } IWindowsDriverUpdateEntryCollectionVtbl;\n\n    interface IWindowsDriverUpdateEntryCollection\n    {\n        CONST_VTBL struct IWindowsDriverUpdateEntryCollectionVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IWindowsDriverUpdateEntryCollection_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IWindowsDriverUpdateEntryCollection_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IWindowsDriverUpdateEntryCollection_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IWindowsDriverUpdateEntryCollection_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IWindowsDriverUpdateEntryCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IWindowsDriverUpdateEntryCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IWindowsDriverUpdateEntryCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IWindowsDriverUpdateEntryCollection_get_Item(This,index,retval)\t\\\n    ( (This)->lpVtbl -> get_Item(This,index,retval) )\n\n#define IWindowsDriverUpdateEntryCollection_get__NewEnum(This,retval)\t\\\n    ( (This)->lpVtbl -> get__NewEnum(This,retval) )\n\n#define IWindowsDriverUpdateEntryCollection_get_Count(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Count(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IWindowsDriverUpdateEntryCollection_INTERFACE_DEFINED__ */\n\n\n#ifndef __IWindowsDriverUpdate4_INTERFACE_DEFINED__\n#define __IWindowsDriverUpdate4_INTERFACE_DEFINED__\n\n/* interface IWindowsDriverUpdate4 */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IWindowsDriverUpdate4;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"004C6A2B-0C19-4c69-9F5C-A269B2560DB9\")\n    IWindowsDriverUpdate4 : public IWindowsDriverUpdate3\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_WindowsDriverUpdateEntries(\n            /* [retval][out] */ __RPC__deref_out_opt IWindowsDriverUpdateEntryCollection **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_PerUser(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IWindowsDriverUpdate4Vtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IWindowsDriverUpdate4 * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IWindowsDriverUpdate4 * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IWindowsDriverUpdate4 * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelectOnWebSites )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BundledUpdates )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequireSource )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Deadline )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentAvailable )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentPreferred )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaAccepted )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaText )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HandlerID )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Identity )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_InstallationBehavior )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBeta )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDownloaded )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsHidden )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsHidden )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsInstalled )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsMandatory )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsUninstallable )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Languages )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastDeploymentChangeTime )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MaxDownloadSize )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MinDownloadSize )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MoreInfoUrls )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MsrcSeverity )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedCpuSpeed )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedHardDiskSpace )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedMemory )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReleaseNotes )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SecurityBulletinIDs )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupersededUpdateIDs )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out UpdateType *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationBehavior )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_KBArticleIDs )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AcceptEula )(\n            __RPC__in IWindowsDriverUpdate4 * This);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeploymentAction )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out DeploymentAction *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyFromCache )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [ref][in] */ __RPC__in BSTR path,\n            /* [in] */ VARIANT_BOOL toExtractCabFiles);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadPriority )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out DownloadPriority *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadContents )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverClass )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverHardwareID )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverManufacturer )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverModel )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverProvider )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverVerDate )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceProblemNumber )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceStatus )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsPresent )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CveIDs )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyToCache )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [in] */ __RPC__in_opt IStringCollection *pFiles);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BrowseOnly )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_WindowsDriverUpdateEntries )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IWindowsDriverUpdateEntryCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_PerUser )(\n            __RPC__in IWindowsDriverUpdate4 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        END_INTERFACE\n    } IWindowsDriverUpdate4Vtbl;\n\n    interface IWindowsDriverUpdate4\n    {\n        CONST_VTBL struct IWindowsDriverUpdate4Vtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IWindowsDriverUpdate4_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IWindowsDriverUpdate4_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IWindowsDriverUpdate4_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IWindowsDriverUpdate4_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IWindowsDriverUpdate4_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IWindowsDriverUpdate4_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IWindowsDriverUpdate4_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IWindowsDriverUpdate4_get_Title(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Title(This,retval) )\n\n#define IWindowsDriverUpdate4_get_AutoSelectOnWebSites(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AutoSelectOnWebSites(This,retval) )\n\n#define IWindowsDriverUpdate4_get_BundledUpdates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_BundledUpdates(This,retval) )\n\n#define IWindowsDriverUpdate4_get_CanRequireSource(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CanRequireSource(This,retval) )\n\n#define IWindowsDriverUpdate4_get_Categories(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Categories(This,retval) )\n\n#define IWindowsDriverUpdate4_get_Deadline(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Deadline(This,retval) )\n\n#define IWindowsDriverUpdate4_get_DeltaCompressedContentAvailable(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeltaCompressedContentAvailable(This,retval) )\n\n#define IWindowsDriverUpdate4_get_DeltaCompressedContentPreferred(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeltaCompressedContentPreferred(This,retval) )\n\n#define IWindowsDriverUpdate4_get_Description(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Description(This,retval) )\n\n#define IWindowsDriverUpdate4_get_EulaAccepted(This,retval)\t\\\n    ( (This)->lpVtbl -> get_EulaAccepted(This,retval) )\n\n#define IWindowsDriverUpdate4_get_EulaText(This,retval)\t\\\n    ( (This)->lpVtbl -> get_EulaText(This,retval) )\n\n#define IWindowsDriverUpdate4_get_HandlerID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_HandlerID(This,retval) )\n\n#define IWindowsDriverUpdate4_get_Identity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Identity(This,retval) )\n\n#define IWindowsDriverUpdate4_get_Image(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Image(This,retval) )\n\n#define IWindowsDriverUpdate4_get_InstallationBehavior(This,retval)\t\\\n    ( (This)->lpVtbl -> get_InstallationBehavior(This,retval) )\n\n#define IWindowsDriverUpdate4_get_IsBeta(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsBeta(This,retval) )\n\n#define IWindowsDriverUpdate4_get_IsDownloaded(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsDownloaded(This,retval) )\n\n#define IWindowsDriverUpdate4_get_IsHidden(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsHidden(This,retval) )\n\n#define IWindowsDriverUpdate4_put_IsHidden(This,value)\t\\\n    ( (This)->lpVtbl -> put_IsHidden(This,value) )\n\n#define IWindowsDriverUpdate4_get_IsInstalled(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsInstalled(This,retval) )\n\n#define IWindowsDriverUpdate4_get_IsMandatory(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsMandatory(This,retval) )\n\n#define IWindowsDriverUpdate4_get_IsUninstallable(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsUninstallable(This,retval) )\n\n#define IWindowsDriverUpdate4_get_Languages(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Languages(This,retval) )\n\n#define IWindowsDriverUpdate4_get_LastDeploymentChangeTime(This,retval)\t\\\n    ( (This)->lpVtbl -> get_LastDeploymentChangeTime(This,retval) )\n\n#define IWindowsDriverUpdate4_get_MaxDownloadSize(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MaxDownloadSize(This,retval) )\n\n#define IWindowsDriverUpdate4_get_MinDownloadSize(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MinDownloadSize(This,retval) )\n\n#define IWindowsDriverUpdate4_get_MoreInfoUrls(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MoreInfoUrls(This,retval) )\n\n#define IWindowsDriverUpdate4_get_MsrcSeverity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MsrcSeverity(This,retval) )\n\n#define IWindowsDriverUpdate4_get_RecommendedCpuSpeed(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedCpuSpeed(This,retval) )\n\n#define IWindowsDriverUpdate4_get_RecommendedHardDiskSpace(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedHardDiskSpace(This,retval) )\n\n#define IWindowsDriverUpdate4_get_RecommendedMemory(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedMemory(This,retval) )\n\n#define IWindowsDriverUpdate4_get_ReleaseNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ReleaseNotes(This,retval) )\n\n#define IWindowsDriverUpdate4_get_SecurityBulletinIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SecurityBulletinIDs(This,retval) )\n\n#define IWindowsDriverUpdate4_get_SupersededUpdateIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupersededUpdateIDs(This,retval) )\n\n#define IWindowsDriverUpdate4_get_SupportUrl(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupportUrl(This,retval) )\n\n#define IWindowsDriverUpdate4_get_Type(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Type(This,retval) )\n\n#define IWindowsDriverUpdate4_get_UninstallationNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )\n\n#define IWindowsDriverUpdate4_get_UninstallationBehavior(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationBehavior(This,retval) )\n\n#define IWindowsDriverUpdate4_get_UninstallationSteps(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )\n\n#define IWindowsDriverUpdate4_get_KBArticleIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_KBArticleIDs(This,retval) )\n\n#define IWindowsDriverUpdate4_AcceptEula(This)\t\\\n    ( (This)->lpVtbl -> AcceptEula(This) )\n\n#define IWindowsDriverUpdate4_get_DeploymentAction(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeploymentAction(This,retval) )\n\n#define IWindowsDriverUpdate4_CopyFromCache(This,path,toExtractCabFiles)\t\\\n    ( (This)->lpVtbl -> CopyFromCache(This,path,toExtractCabFiles) )\n\n#define IWindowsDriverUpdate4_get_DownloadPriority(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadPriority(This,retval) )\n\n#define IWindowsDriverUpdate4_get_DownloadContents(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadContents(This,retval) )\n\n\n#define IWindowsDriverUpdate4_get_DriverClass(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverClass(This,retval) )\n\n#define IWindowsDriverUpdate4_get_DriverHardwareID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverHardwareID(This,retval) )\n\n#define IWindowsDriverUpdate4_get_DriverManufacturer(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverManufacturer(This,retval) )\n\n#define IWindowsDriverUpdate4_get_DriverModel(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverModel(This,retval) )\n\n#define IWindowsDriverUpdate4_get_DriverProvider(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverProvider(This,retval) )\n\n#define IWindowsDriverUpdate4_get_DriverVerDate(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverVerDate(This,retval) )\n\n#define IWindowsDriverUpdate4_get_DeviceProblemNumber(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeviceProblemNumber(This,retval) )\n\n#define IWindowsDriverUpdate4_get_DeviceStatus(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeviceStatus(This,retval) )\n\n\n#define IWindowsDriverUpdate4_get_RebootRequired(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RebootRequired(This,retval) )\n\n#define IWindowsDriverUpdate4_get_IsPresent(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsPresent(This,retval) )\n\n#define IWindowsDriverUpdate4_get_CveIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CveIDs(This,retval) )\n\n#define IWindowsDriverUpdate4_CopyToCache(This,pFiles)\t\\\n    ( (This)->lpVtbl -> CopyToCache(This,pFiles) )\n\n\n#define IWindowsDriverUpdate4_get_BrowseOnly(This,retval)\t\\\n    ( (This)->lpVtbl -> get_BrowseOnly(This,retval) )\n\n\n#define IWindowsDriverUpdate4_get_WindowsDriverUpdateEntries(This,retval)\t\\\n    ( (This)->lpVtbl -> get_WindowsDriverUpdateEntries(This,retval) )\n\n#define IWindowsDriverUpdate4_get_PerUser(This,retval)\t\\\n    ( (This)->lpVtbl -> get_PerUser(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IWindowsDriverUpdate4_INTERFACE_DEFINED__ */\n\n\n#ifndef __IWindowsDriverUpdate5_INTERFACE_DEFINED__\n#define __IWindowsDriverUpdate5_INTERFACE_DEFINED__\n\n/* interface IWindowsDriverUpdate5 */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IWindowsDriverUpdate5;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"70CF5C82-8642-42bb-9DBC-0CFD263C6C4F\")\n    IWindowsDriverUpdate5 : public IWindowsDriverUpdate4\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AutoSelection(\n            /* [retval][out] */ __RPC__out AutoSelectionMode *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AutoDownload(\n            /* [retval][out] */ __RPC__out AutoDownloadMode *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IWindowsDriverUpdate5Vtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IWindowsDriverUpdate5 * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IWindowsDriverUpdate5 * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IWindowsDriverUpdate5 * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelectOnWebSites )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BundledUpdates )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRequireSource )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Deadline )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentAvailable )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeltaCompressedContentPreferred )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaAccepted )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EulaText )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HandlerID )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Identity )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Image )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IImageInformation **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_InstallationBehavior )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBeta )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDownloaded )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsHidden )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsHidden )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsInstalled )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsMandatory )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsUninstallable )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Languages )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LastDeploymentChangeTime )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MaxDownloadSize )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MinDownloadSize )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MoreInfoUrls )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MsrcSeverity )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedCpuSpeed )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedHardDiskSpace )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RecommendedMemory )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReleaseNotes )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SecurityBulletinIDs )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupersededUpdateIDs )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out UpdateType *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationBehavior )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationBehavior **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_KBArticleIDs )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AcceptEula )(\n            __RPC__in IWindowsDriverUpdate5 * This);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeploymentAction )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out DeploymentAction *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyFromCache )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [ref][in] */ __RPC__in BSTR path,\n            /* [in] */ VARIANT_BOOL toExtractCabFiles);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadPriority )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out DownloadPriority *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadContents )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadContentCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverClass )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverHardwareID )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverManufacturer )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverModel )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverProvider )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DriverVerDate )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceProblemNumber )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeviceStatus )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsPresent )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CveIDs )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CopyToCache )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [in] */ __RPC__in_opt IStringCollection *pFiles);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_BrowseOnly )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_WindowsDriverUpdateEntries )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IWindowsDriverUpdateEntryCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_PerUser )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoSelection )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out AutoSelectionMode *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AutoDownload )(\n            __RPC__in IWindowsDriverUpdate5 * This,\n            /* [retval][out] */ __RPC__out AutoDownloadMode *retval);\n\n        END_INTERFACE\n    } IWindowsDriverUpdate5Vtbl;\n\n    interface IWindowsDriverUpdate5\n    {\n        CONST_VTBL struct IWindowsDriverUpdate5Vtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IWindowsDriverUpdate5_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IWindowsDriverUpdate5_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IWindowsDriverUpdate5_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IWindowsDriverUpdate5_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IWindowsDriverUpdate5_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IWindowsDriverUpdate5_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IWindowsDriverUpdate5_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IWindowsDriverUpdate5_get_Title(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Title(This,retval) )\n\n#define IWindowsDriverUpdate5_get_AutoSelectOnWebSites(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AutoSelectOnWebSites(This,retval) )\n\n#define IWindowsDriverUpdate5_get_BundledUpdates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_BundledUpdates(This,retval) )\n\n#define IWindowsDriverUpdate5_get_CanRequireSource(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CanRequireSource(This,retval) )\n\n#define IWindowsDriverUpdate5_get_Categories(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Categories(This,retval) )\n\n#define IWindowsDriverUpdate5_get_Deadline(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Deadline(This,retval) )\n\n#define IWindowsDriverUpdate5_get_DeltaCompressedContentAvailable(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeltaCompressedContentAvailable(This,retval) )\n\n#define IWindowsDriverUpdate5_get_DeltaCompressedContentPreferred(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeltaCompressedContentPreferred(This,retval) )\n\n#define IWindowsDriverUpdate5_get_Description(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Description(This,retval) )\n\n#define IWindowsDriverUpdate5_get_EulaAccepted(This,retval)\t\\\n    ( (This)->lpVtbl -> get_EulaAccepted(This,retval) )\n\n#define IWindowsDriverUpdate5_get_EulaText(This,retval)\t\\\n    ( (This)->lpVtbl -> get_EulaText(This,retval) )\n\n#define IWindowsDriverUpdate5_get_HandlerID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_HandlerID(This,retval) )\n\n#define IWindowsDriverUpdate5_get_Identity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Identity(This,retval) )\n\n#define IWindowsDriverUpdate5_get_Image(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Image(This,retval) )\n\n#define IWindowsDriverUpdate5_get_InstallationBehavior(This,retval)\t\\\n    ( (This)->lpVtbl -> get_InstallationBehavior(This,retval) )\n\n#define IWindowsDriverUpdate5_get_IsBeta(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsBeta(This,retval) )\n\n#define IWindowsDriverUpdate5_get_IsDownloaded(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsDownloaded(This,retval) )\n\n#define IWindowsDriverUpdate5_get_IsHidden(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsHidden(This,retval) )\n\n#define IWindowsDriverUpdate5_put_IsHidden(This,value)\t\\\n    ( (This)->lpVtbl -> put_IsHidden(This,value) )\n\n#define IWindowsDriverUpdate5_get_IsInstalled(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsInstalled(This,retval) )\n\n#define IWindowsDriverUpdate5_get_IsMandatory(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsMandatory(This,retval) )\n\n#define IWindowsDriverUpdate5_get_IsUninstallable(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsUninstallable(This,retval) )\n\n#define IWindowsDriverUpdate5_get_Languages(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Languages(This,retval) )\n\n#define IWindowsDriverUpdate5_get_LastDeploymentChangeTime(This,retval)\t\\\n    ( (This)->lpVtbl -> get_LastDeploymentChangeTime(This,retval) )\n\n#define IWindowsDriverUpdate5_get_MaxDownloadSize(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MaxDownloadSize(This,retval) )\n\n#define IWindowsDriverUpdate5_get_MinDownloadSize(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MinDownloadSize(This,retval) )\n\n#define IWindowsDriverUpdate5_get_MoreInfoUrls(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MoreInfoUrls(This,retval) )\n\n#define IWindowsDriverUpdate5_get_MsrcSeverity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_MsrcSeverity(This,retval) )\n\n#define IWindowsDriverUpdate5_get_RecommendedCpuSpeed(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedCpuSpeed(This,retval) )\n\n#define IWindowsDriverUpdate5_get_RecommendedHardDiskSpace(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedHardDiskSpace(This,retval) )\n\n#define IWindowsDriverUpdate5_get_RecommendedMemory(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RecommendedMemory(This,retval) )\n\n#define IWindowsDriverUpdate5_get_ReleaseNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ReleaseNotes(This,retval) )\n\n#define IWindowsDriverUpdate5_get_SecurityBulletinIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SecurityBulletinIDs(This,retval) )\n\n#define IWindowsDriverUpdate5_get_SupersededUpdateIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupersededUpdateIDs(This,retval) )\n\n#define IWindowsDriverUpdate5_get_SupportUrl(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupportUrl(This,retval) )\n\n#define IWindowsDriverUpdate5_get_Type(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Type(This,retval) )\n\n#define IWindowsDriverUpdate5_get_UninstallationNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )\n\n#define IWindowsDriverUpdate5_get_UninstallationBehavior(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationBehavior(This,retval) )\n\n#define IWindowsDriverUpdate5_get_UninstallationSteps(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )\n\n#define IWindowsDriverUpdate5_get_KBArticleIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_KBArticleIDs(This,retval) )\n\n#define IWindowsDriverUpdate5_AcceptEula(This)\t\\\n    ( (This)->lpVtbl -> AcceptEula(This) )\n\n#define IWindowsDriverUpdate5_get_DeploymentAction(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeploymentAction(This,retval) )\n\n#define IWindowsDriverUpdate5_CopyFromCache(This,path,toExtractCabFiles)\t\\\n    ( (This)->lpVtbl -> CopyFromCache(This,path,toExtractCabFiles) )\n\n#define IWindowsDriverUpdate5_get_DownloadPriority(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadPriority(This,retval) )\n\n#define IWindowsDriverUpdate5_get_DownloadContents(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DownloadContents(This,retval) )\n\n\n#define IWindowsDriverUpdate5_get_DriverClass(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverClass(This,retval) )\n\n#define IWindowsDriverUpdate5_get_DriverHardwareID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverHardwareID(This,retval) )\n\n#define IWindowsDriverUpdate5_get_DriverManufacturer(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverManufacturer(This,retval) )\n\n#define IWindowsDriverUpdate5_get_DriverModel(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverModel(This,retval) )\n\n#define IWindowsDriverUpdate5_get_DriverProvider(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverProvider(This,retval) )\n\n#define IWindowsDriverUpdate5_get_DriverVerDate(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DriverVerDate(This,retval) )\n\n#define IWindowsDriverUpdate5_get_DeviceProblemNumber(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeviceProblemNumber(This,retval) )\n\n#define IWindowsDriverUpdate5_get_DeviceStatus(This,retval)\t\\\n    ( (This)->lpVtbl -> get_DeviceStatus(This,retval) )\n\n\n#define IWindowsDriverUpdate5_get_RebootRequired(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RebootRequired(This,retval) )\n\n#define IWindowsDriverUpdate5_get_IsPresent(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsPresent(This,retval) )\n\n#define IWindowsDriverUpdate5_get_CveIDs(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CveIDs(This,retval) )\n\n#define IWindowsDriverUpdate5_CopyToCache(This,pFiles)\t\\\n    ( (This)->lpVtbl -> CopyToCache(This,pFiles) )\n\n\n#define IWindowsDriverUpdate5_get_BrowseOnly(This,retval)\t\\\n    ( (This)->lpVtbl -> get_BrowseOnly(This,retval) )\n\n\n#define IWindowsDriverUpdate5_get_WindowsDriverUpdateEntries(This,retval)\t\\\n    ( (This)->lpVtbl -> get_WindowsDriverUpdateEntries(This,retval) )\n\n#define IWindowsDriverUpdate5_get_PerUser(This,retval)\t\\\n    ( (This)->lpVtbl -> get_PerUser(This,retval) )\n\n\n#define IWindowsDriverUpdate5_get_AutoSelection(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AutoSelection(This,retval) )\n\n#define IWindowsDriverUpdate5_get_AutoDownload(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AutoDownload(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IWindowsDriverUpdate5_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateCollection_INTERFACE_DEFINED__\n#define __IUpdateCollection_INTERFACE_DEFINED__\n\n/* interface IUpdateCollection */\n/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateCollection;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"07f7438c-7709-4ca5-b518-91279288134e\")\n    IUpdateCollection : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Item(\n            /* [in] */ LONG index,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdate **retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Item(\n            /* [in] */ LONG index,\n            /* [in] */ __RPC__in_opt IUpdate *value) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get__NewEnum(\n            /* [retval][out] */ __RPC__deref_out_opt IUnknown **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Count(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ReadOnly(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Add(\n            /* [in] */ __RPC__in_opt IUpdate *value,\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Clear( void) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Copy(\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Insert(\n            /* [in] */ LONG index,\n            /* [in] */ __RPC__in_opt IUpdate *value) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RemoveAt(\n            /* [in] */ LONG index) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateCollectionVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateCollection * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateCollection * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateCollection * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateCollection * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateCollection * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateCollection * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateCollection * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(\n            __RPC__in IUpdateCollection * This,\n            /* [in] */ LONG index,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdate **retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Item )(\n            __RPC__in IUpdateCollection * This,\n            /* [in] */ LONG index,\n            /* [in] */ __RPC__in_opt IUpdate *value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(\n            __RPC__in IUpdateCollection * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(\n            __RPC__in IUpdateCollection * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReadOnly )(\n            __RPC__in IUpdateCollection * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Add )(\n            __RPC__in IUpdateCollection * This,\n            /* [in] */ __RPC__in_opt IUpdate *value,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Clear )(\n            __RPC__in IUpdateCollection * This);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Copy )(\n            __RPC__in IUpdateCollection * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Insert )(\n            __RPC__in IUpdateCollection * This,\n            /* [in] */ LONG index,\n            /* [in] */ __RPC__in_opt IUpdate *value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RemoveAt )(\n            __RPC__in IUpdateCollection * This,\n            /* [in] */ LONG index);\n\n        END_INTERFACE\n    } IUpdateCollectionVtbl;\n\n    interface IUpdateCollection\n    {\n        CONST_VTBL struct IUpdateCollectionVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateCollection_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateCollection_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateCollection_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateCollection_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateCollection_get_Item(This,index,retval)\t\\\n    ( (This)->lpVtbl -> get_Item(This,index,retval) )\n\n#define IUpdateCollection_put_Item(This,index,value)\t\\\n    ( (This)->lpVtbl -> put_Item(This,index,value) )\n\n#define IUpdateCollection_get__NewEnum(This,retval)\t\\\n    ( (This)->lpVtbl -> get__NewEnum(This,retval) )\n\n#define IUpdateCollection_get_Count(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Count(This,retval) )\n\n#define IUpdateCollection_get_ReadOnly(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ReadOnly(This,retval) )\n\n#define IUpdateCollection_Add(This,value,retval)\t\\\n    ( (This)->lpVtbl -> Add(This,value,retval) )\n\n#define IUpdateCollection_Clear(This)\t\\\n    ( (This)->lpVtbl -> Clear(This) )\n\n#define IUpdateCollection_Copy(This,retval)\t\\\n    ( (This)->lpVtbl -> Copy(This,retval) )\n\n#define IUpdateCollection_Insert(This,index,value)\t\\\n    ( (This)->lpVtbl -> Insert(This,index,value) )\n\n#define IUpdateCollection_RemoveAt(This,index)\t\\\n    ( (This)->lpVtbl -> RemoveAt(This,index) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateCollection_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateException_INTERFACE_DEFINED__\n#define __IUpdateException_INTERFACE_DEFINED__\n\n/* interface IUpdateException */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateException;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"a376dd5e-09d4-427f-af7c-fed5b6e1c1d6\")\n    IUpdateException : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Message(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_HResult(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Context(\n            /* [retval][out] */ __RPC__out UpdateExceptionContext *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateExceptionVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateException * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateException * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateException * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateException * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateException * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateException * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateException * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Message )(\n            __RPC__in IUpdateException * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HResult )(\n            __RPC__in IUpdateException * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Context )(\n            __RPC__in IUpdateException * This,\n            /* [retval][out] */ __RPC__out UpdateExceptionContext *retval);\n\n        END_INTERFACE\n    } IUpdateExceptionVtbl;\n\n    interface IUpdateException\n    {\n        CONST_VTBL struct IUpdateExceptionVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateException_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateException_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateException_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateException_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateException_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateException_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateException_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateException_get_Message(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Message(This,retval) )\n\n#define IUpdateException_get_HResult(This,retval)\t\\\n    ( (This)->lpVtbl -> get_HResult(This,retval) )\n\n#define IUpdateException_get_Context(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Context(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateException_INTERFACE_DEFINED__ */\n\n\n#ifndef __IInvalidProductLicenseException_INTERFACE_DEFINED__\n#define __IInvalidProductLicenseException_INTERFACE_DEFINED__\n\n/* interface IInvalidProductLicenseException */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IInvalidProductLicenseException;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"a37d00f5-7bb0-4953-b414-f9e98326f2e8\")\n    IInvalidProductLicenseException : public IUpdateException\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Product(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IInvalidProductLicenseExceptionVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IInvalidProductLicenseException * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IInvalidProductLicenseException * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IInvalidProductLicenseException * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IInvalidProductLicenseException * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IInvalidProductLicenseException * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IInvalidProductLicenseException * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IInvalidProductLicenseException * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Message )(\n            __RPC__in IInvalidProductLicenseException * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HResult )(\n            __RPC__in IInvalidProductLicenseException * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Context )(\n            __RPC__in IInvalidProductLicenseException * This,\n            /* [retval][out] */ __RPC__out UpdateExceptionContext *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Product )(\n            __RPC__in IInvalidProductLicenseException * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        END_INTERFACE\n    } IInvalidProductLicenseExceptionVtbl;\n\n    interface IInvalidProductLicenseException\n    {\n        CONST_VTBL struct IInvalidProductLicenseExceptionVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IInvalidProductLicenseException_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IInvalidProductLicenseException_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IInvalidProductLicenseException_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IInvalidProductLicenseException_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IInvalidProductLicenseException_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IInvalidProductLicenseException_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IInvalidProductLicenseException_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IInvalidProductLicenseException_get_Message(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Message(This,retval) )\n\n#define IInvalidProductLicenseException_get_HResult(This,retval)\t\\\n    ( (This)->lpVtbl -> get_HResult(This,retval) )\n\n#define IInvalidProductLicenseException_get_Context(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Context(This,retval) )\n\n\n#define IInvalidProductLicenseException_get_Product(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Product(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IInvalidProductLicenseException_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateExceptionCollection_INTERFACE_DEFINED__\n#define __IUpdateExceptionCollection_INTERFACE_DEFINED__\n\n/* interface IUpdateExceptionCollection */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateExceptionCollection;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"503626a3-8e14-4729-9355-0fe664bd2321\")\n    IUpdateExceptionCollection : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Item(\n            /* [in] */ LONG index,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateException **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get__NewEnum(\n            /* [retval][out] */ __RPC__deref_out_opt IUnknown **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Count(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateExceptionCollectionVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateExceptionCollection * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateExceptionCollection * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateExceptionCollection * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateExceptionCollection * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateExceptionCollection * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateExceptionCollection * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateExceptionCollection * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(\n            __RPC__in IUpdateExceptionCollection * This,\n            /* [in] */ LONG index,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateException **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(\n            __RPC__in IUpdateExceptionCollection * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(\n            __RPC__in IUpdateExceptionCollection * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        END_INTERFACE\n    } IUpdateExceptionCollectionVtbl;\n\n    interface IUpdateExceptionCollection\n    {\n        CONST_VTBL struct IUpdateExceptionCollectionVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateExceptionCollection_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateExceptionCollection_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateExceptionCollection_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateExceptionCollection_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateExceptionCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateExceptionCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateExceptionCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateExceptionCollection_get_Item(This,index,retval)\t\\\n    ( (This)->lpVtbl -> get_Item(This,index,retval) )\n\n#define IUpdateExceptionCollection_get__NewEnum(This,retval)\t\\\n    ( (This)->lpVtbl -> get__NewEnum(This,retval) )\n\n#define IUpdateExceptionCollection_get_Count(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Count(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateExceptionCollection_INTERFACE_DEFINED__ */\n\n\n#ifndef __ISearchResult_INTERFACE_DEFINED__\n#define __ISearchResult_INTERFACE_DEFINED__\n\n/* interface ISearchResult */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_ISearchResult;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"d40cff62-e08c-4498-941a-01e25f0fd33c\")\n    ISearchResult : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ResultCode(\n            /* [retval][out] */ __RPC__out OperationResultCode *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RootCategories(\n            /* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Updates(\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Warnings(\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateExceptionCollection **retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct ISearchResultVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in ISearchResult * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in ISearchResult * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in ISearchResult * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in ISearchResult * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in ISearchResult * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in ISearchResult * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            ISearchResult * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ResultCode )(\n            __RPC__in ISearchResult * This,\n            /* [retval][out] */ __RPC__out OperationResultCode *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RootCategories )(\n            __RPC__in ISearchResult * This,\n            /* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Updates )(\n            __RPC__in ISearchResult * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Warnings )(\n            __RPC__in ISearchResult * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateExceptionCollection **retval);\n\n        END_INTERFACE\n    } ISearchResultVtbl;\n\n    interface ISearchResult\n    {\n        CONST_VTBL struct ISearchResultVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define ISearchResult_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define ISearchResult_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define ISearchResult_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define ISearchResult_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define ISearchResult_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define ISearchResult_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define ISearchResult_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define ISearchResult_get_ResultCode(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ResultCode(This,retval) )\n\n#define ISearchResult_get_RootCategories(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RootCategories(This,retval) )\n\n#define ISearchResult_get_Updates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Updates(This,retval) )\n\n#define ISearchResult_get_Warnings(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Warnings(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ISearchResult_INTERFACE_DEFINED__ */\n\n\n#ifndef __ISearchJob_INTERFACE_DEFINED__\n#define __ISearchJob_INTERFACE_DEFINED__\n\n/* interface ISearchJob */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_ISearchJob;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"7366ea16-7a1a-4ea2-b042-973d3e9cd99b\")\n    ISearchJob : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AsyncState(\n            /* [retval][out] */ __RPC__out VARIANT *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsCompleted(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CleanUp( void) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RequestAbort( void) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct ISearchJobVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in ISearchJob * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in ISearchJob * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in ISearchJob * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in ISearchJob * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in ISearchJob * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in ISearchJob * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            ISearchJob * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AsyncState )(\n            __RPC__in ISearchJob * This,\n            /* [retval][out] */ __RPC__out VARIANT *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsCompleted )(\n            __RPC__in ISearchJob * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CleanUp )(\n            __RPC__in ISearchJob * This);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RequestAbort )(\n            __RPC__in ISearchJob * This);\n\n        END_INTERFACE\n    } ISearchJobVtbl;\n\n    interface ISearchJob\n    {\n        CONST_VTBL struct ISearchJobVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define ISearchJob_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define ISearchJob_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define ISearchJob_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define ISearchJob_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define ISearchJob_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define ISearchJob_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define ISearchJob_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define ISearchJob_get_AsyncState(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AsyncState(This,retval) )\n\n#define ISearchJob_get_IsCompleted(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsCompleted(This,retval) )\n\n#define ISearchJob_CleanUp(This)\t\\\n    ( (This)->lpVtbl -> CleanUp(This) )\n\n#define ISearchJob_RequestAbort(This)\t\\\n    ( (This)->lpVtbl -> RequestAbort(This) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ISearchJob_INTERFACE_DEFINED__ */\n\n\n#ifndef __ISearchCompletedCallbackArgs_INTERFACE_DEFINED__\n#define __ISearchCompletedCallbackArgs_INTERFACE_DEFINED__\n\n/* interface ISearchCompletedCallbackArgs */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_ISearchCompletedCallbackArgs;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"a700a634-2850-4c47-938a-9e4b6e5af9a6\")\n    ISearchCompletedCallbackArgs : public IDispatch\n    {\n    public:\n    };\n\n#else \t/* C style interface */\n\n    typedef struct ISearchCompletedCallbackArgsVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in ISearchCompletedCallbackArgs * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in ISearchCompletedCallbackArgs * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in ISearchCompletedCallbackArgs * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in ISearchCompletedCallbackArgs * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in ISearchCompletedCallbackArgs * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in ISearchCompletedCallbackArgs * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            ISearchCompletedCallbackArgs * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        END_INTERFACE\n    } ISearchCompletedCallbackArgsVtbl;\n\n    interface ISearchCompletedCallbackArgs\n    {\n        CONST_VTBL struct ISearchCompletedCallbackArgsVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define ISearchCompletedCallbackArgs_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define ISearchCompletedCallbackArgs_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define ISearchCompletedCallbackArgs_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define ISearchCompletedCallbackArgs_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define ISearchCompletedCallbackArgs_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define ISearchCompletedCallbackArgs_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define ISearchCompletedCallbackArgs_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ISearchCompletedCallbackArgs_INTERFACE_DEFINED__ */\n\n\n#ifndef __ISearchCompletedCallback_INTERFACE_DEFINED__\n#define __ISearchCompletedCallback_INTERFACE_DEFINED__\n\n/* interface ISearchCompletedCallback */\n/* [unique][uuid][nonextensible][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_ISearchCompletedCallback;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"88aee058-d4b0-4725-a2f1-814a67ae964c\")\n    ISearchCompletedCallback : public IUnknown\n    {\n    public:\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Invoke(\n            /* [in] */ __RPC__in_opt ISearchJob *searchJob,\n            /* [in] */ __RPC__in_opt ISearchCompletedCallbackArgs *callbackArgs) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct ISearchCompletedCallbackVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in ISearchCompletedCallback * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in ISearchCompletedCallback * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in ISearchCompletedCallback * This);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            __RPC__in ISearchCompletedCallback * This,\n            /* [in] */ __RPC__in_opt ISearchJob *searchJob,\n            /* [in] */ __RPC__in_opt ISearchCompletedCallbackArgs *callbackArgs);\n\n        END_INTERFACE\n    } ISearchCompletedCallbackVtbl;\n\n    interface ISearchCompletedCallback\n    {\n        CONST_VTBL struct ISearchCompletedCallbackVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define ISearchCompletedCallback_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define ISearchCompletedCallback_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define ISearchCompletedCallback_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define ISearchCompletedCallback_Invoke(This,searchJob,callbackArgs)\t\\\n    ( (This)->lpVtbl -> Invoke(This,searchJob,callbackArgs) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ISearchCompletedCallback_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateHistoryEntry_INTERFACE_DEFINED__\n#define __IUpdateHistoryEntry_INTERFACE_DEFINED__\n\n/* interface IUpdateHistoryEntry */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateHistoryEntry;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"be56a644-af0e-4e0e-a311-c1d8e695cbff\")\n    IUpdateHistoryEntry : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Operation(\n            /* [retval][out] */ __RPC__out UpdateOperation *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ResultCode(\n            /* [retval][out] */ __RPC__out OperationResultCode *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_HResult(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Date(\n            /* [retval][out] */ __RPC__out DATE *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UpdateIdentity(\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Title(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Description(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UnmappedResultCode(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ClientApplicationID(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ServerSelection(\n            /* [retval][out] */ __RPC__out ServerSelection *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ServiceID(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UninstallationSteps(\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UninstallationNotes(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_SupportUrl(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateHistoryEntryVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateHistoryEntry * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateHistoryEntry * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateHistoryEntry * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateHistoryEntry * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateHistoryEntry * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateHistoryEntry * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateHistoryEntry * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Operation )(\n            __RPC__in IUpdateHistoryEntry * This,\n            /* [retval][out] */ __RPC__out UpdateOperation *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ResultCode )(\n            __RPC__in IUpdateHistoryEntry * This,\n            /* [retval][out] */ __RPC__out OperationResultCode *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HResult )(\n            __RPC__in IUpdateHistoryEntry * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Date )(\n            __RPC__in IUpdateHistoryEntry * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UpdateIdentity )(\n            __RPC__in IUpdateHistoryEntry * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(\n            __RPC__in IUpdateHistoryEntry * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(\n            __RPC__in IUpdateHistoryEntry * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UnmappedResultCode )(\n            __RPC__in IUpdateHistoryEntry * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(\n            __RPC__in IUpdateHistoryEntry * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServerSelection )(\n            __RPC__in IUpdateHistoryEntry * This,\n            /* [retval][out] */ __RPC__out ServerSelection *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceID )(\n            __RPC__in IUpdateHistoryEntry * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(\n            __RPC__in IUpdateHistoryEntry * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(\n            __RPC__in IUpdateHistoryEntry * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(\n            __RPC__in IUpdateHistoryEntry * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        END_INTERFACE\n    } IUpdateHistoryEntryVtbl;\n\n    interface IUpdateHistoryEntry\n    {\n        CONST_VTBL struct IUpdateHistoryEntryVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateHistoryEntry_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateHistoryEntry_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateHistoryEntry_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateHistoryEntry_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateHistoryEntry_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateHistoryEntry_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateHistoryEntry_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateHistoryEntry_get_Operation(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Operation(This,retval) )\n\n#define IUpdateHistoryEntry_get_ResultCode(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ResultCode(This,retval) )\n\n#define IUpdateHistoryEntry_get_HResult(This,retval)\t\\\n    ( (This)->lpVtbl -> get_HResult(This,retval) )\n\n#define IUpdateHistoryEntry_get_Date(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Date(This,retval) )\n\n#define IUpdateHistoryEntry_get_UpdateIdentity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UpdateIdentity(This,retval) )\n\n#define IUpdateHistoryEntry_get_Title(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Title(This,retval) )\n\n#define IUpdateHistoryEntry_get_Description(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Description(This,retval) )\n\n#define IUpdateHistoryEntry_get_UnmappedResultCode(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UnmappedResultCode(This,retval) )\n\n#define IUpdateHistoryEntry_get_ClientApplicationID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )\n\n#define IUpdateHistoryEntry_get_ServerSelection(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ServerSelection(This,retval) )\n\n#define IUpdateHistoryEntry_get_ServiceID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ServiceID(This,retval) )\n\n#define IUpdateHistoryEntry_get_UninstallationSteps(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )\n\n#define IUpdateHistoryEntry_get_UninstallationNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )\n\n#define IUpdateHistoryEntry_get_SupportUrl(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupportUrl(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateHistoryEntry_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateHistoryEntry2_INTERFACE_DEFINED__\n#define __IUpdateHistoryEntry2_INTERFACE_DEFINED__\n\n/* interface IUpdateHistoryEntry2 */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateHistoryEntry2;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"c2bfb780-4539-4132-ab8c-0a8772013ab6\")\n    IUpdateHistoryEntry2 : public IUpdateHistoryEntry\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Categories(\n            /* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateHistoryEntry2Vtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateHistoryEntry2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateHistoryEntry2 * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateHistoryEntry2 * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateHistoryEntry2 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateHistoryEntry2 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateHistoryEntry2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateHistoryEntry2 * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Operation )(\n            __RPC__in IUpdateHistoryEntry2 * This,\n            /* [retval][out] */ __RPC__out UpdateOperation *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ResultCode )(\n            __RPC__in IUpdateHistoryEntry2 * This,\n            /* [retval][out] */ __RPC__out OperationResultCode *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HResult )(\n            __RPC__in IUpdateHistoryEntry2 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Date )(\n            __RPC__in IUpdateHistoryEntry2 * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UpdateIdentity )(\n            __RPC__in IUpdateHistoryEntry2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateIdentity **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(\n            __RPC__in IUpdateHistoryEntry2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(\n            __RPC__in IUpdateHistoryEntry2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UnmappedResultCode )(\n            __RPC__in IUpdateHistoryEntry2 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(\n            __RPC__in IUpdateHistoryEntry2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServerSelection )(\n            __RPC__in IUpdateHistoryEntry2 * This,\n            /* [retval][out] */ __RPC__out ServerSelection *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceID )(\n            __RPC__in IUpdateHistoryEntry2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationSteps )(\n            __RPC__in IUpdateHistoryEntry2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UninstallationNotes )(\n            __RPC__in IUpdateHistoryEntry2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SupportUrl )(\n            __RPC__in IUpdateHistoryEntry2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Categories )(\n            __RPC__in IUpdateHistoryEntry2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt ICategoryCollection **retval);\n\n        END_INTERFACE\n    } IUpdateHistoryEntry2Vtbl;\n\n    interface IUpdateHistoryEntry2\n    {\n        CONST_VTBL struct IUpdateHistoryEntry2Vtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateHistoryEntry2_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateHistoryEntry2_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateHistoryEntry2_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateHistoryEntry2_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateHistoryEntry2_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateHistoryEntry2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateHistoryEntry2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateHistoryEntry2_get_Operation(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Operation(This,retval) )\n\n#define IUpdateHistoryEntry2_get_ResultCode(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ResultCode(This,retval) )\n\n#define IUpdateHistoryEntry2_get_HResult(This,retval)\t\\\n    ( (This)->lpVtbl -> get_HResult(This,retval) )\n\n#define IUpdateHistoryEntry2_get_Date(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Date(This,retval) )\n\n#define IUpdateHistoryEntry2_get_UpdateIdentity(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UpdateIdentity(This,retval) )\n\n#define IUpdateHistoryEntry2_get_Title(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Title(This,retval) )\n\n#define IUpdateHistoryEntry2_get_Description(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Description(This,retval) )\n\n#define IUpdateHistoryEntry2_get_UnmappedResultCode(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UnmappedResultCode(This,retval) )\n\n#define IUpdateHistoryEntry2_get_ClientApplicationID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )\n\n#define IUpdateHistoryEntry2_get_ServerSelection(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ServerSelection(This,retval) )\n\n#define IUpdateHistoryEntry2_get_ServiceID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ServiceID(This,retval) )\n\n#define IUpdateHistoryEntry2_get_UninstallationSteps(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationSteps(This,retval) )\n\n#define IUpdateHistoryEntry2_get_UninstallationNotes(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UninstallationNotes(This,retval) )\n\n#define IUpdateHistoryEntry2_get_SupportUrl(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SupportUrl(This,retval) )\n\n\n#define IUpdateHistoryEntry2_get_Categories(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Categories(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateHistoryEntry2_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateHistoryEntryCollection_INTERFACE_DEFINED__\n#define __IUpdateHistoryEntryCollection_INTERFACE_DEFINED__\n\n/* interface IUpdateHistoryEntryCollection */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateHistoryEntryCollection;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"a7f04f3c-a290-435b-aadf-a116c3357a5c\")\n    IUpdateHistoryEntryCollection : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Item(\n            /* [in] */ LONG index,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateHistoryEntry **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get__NewEnum(\n            /* [retval][out] */ __RPC__deref_out_opt IUnknown **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Count(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateHistoryEntryCollectionVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateHistoryEntryCollection * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateHistoryEntryCollection * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateHistoryEntryCollection * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateHistoryEntryCollection * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateHistoryEntryCollection * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateHistoryEntryCollection * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateHistoryEntryCollection * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(\n            __RPC__in IUpdateHistoryEntryCollection * This,\n            /* [in] */ LONG index,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateHistoryEntry **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(\n            __RPC__in IUpdateHistoryEntryCollection * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(\n            __RPC__in IUpdateHistoryEntryCollection * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        END_INTERFACE\n    } IUpdateHistoryEntryCollectionVtbl;\n\n    interface IUpdateHistoryEntryCollection\n    {\n        CONST_VTBL struct IUpdateHistoryEntryCollectionVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateHistoryEntryCollection_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateHistoryEntryCollection_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateHistoryEntryCollection_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateHistoryEntryCollection_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateHistoryEntryCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateHistoryEntryCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateHistoryEntryCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateHistoryEntryCollection_get_Item(This,index,retval)\t\\\n    ( (This)->lpVtbl -> get_Item(This,index,retval) )\n\n#define IUpdateHistoryEntryCollection_get__NewEnum(This,retval)\t\\\n    ( (This)->lpVtbl -> get__NewEnum(This,retval) )\n\n#define IUpdateHistoryEntryCollection_get_Count(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Count(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateHistoryEntryCollection_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateSearcher_INTERFACE_DEFINED__\n#define __IUpdateSearcher_INTERFACE_DEFINED__\n\n/* interface IUpdateSearcher */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateSearcher;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"8f45abf1-f9ae-4b95-a933-f0f66e5056ea\")\n    IUpdateSearcher : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CanAutomaticallyUpgradeService(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_CanAutomaticallyUpgradeService(\n            /* [in] */ VARIANT_BOOL value) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ClientApplicationID(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ClientApplicationID(\n            /* [in] */ __RPC__in BSTR value) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IncludePotentiallySupersededUpdates(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_IncludePotentiallySupersededUpdates(\n            /* [in] */ VARIANT_BOOL value) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ServerSelection(\n            /* [retval][out] */ __RPC__out ServerSelection *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ServerSelection(\n            /* [in] */ ServerSelection value) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE BeginSearch(\n            /* [in] */ __RPC__in BSTR criteria,\n            /* [in] */ __RPC__in_opt IUnknown *onCompleted,\n            /* [in] */ VARIANT state,\n            /* [retval][out] */ __RPC__deref_out_opt ISearchJob **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EndSearch(\n            /* [in] */ __RPC__in_opt ISearchJob *searchJob,\n            /* [retval][out] */ __RPC__deref_out_opt ISearchResult **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EscapeString(\n            /* [in] */ __RPC__in BSTR unescaped,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE QueryHistory(\n            /* [in] */ LONG startIndex,\n            /* [in] */ LONG count,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateHistoryEntryCollection **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Search(\n            /* [in] */ __RPC__in BSTR criteria,\n            /* [retval][out] */ __RPC__deref_out_opt ISearchResult **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Online(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Online(\n            /* [in] */ VARIANT_BOOL value) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetTotalHistoryCount(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ServiceID(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ServiceID(\n            /* [in] */ __RPC__in BSTR value) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateSearcherVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateSearcher * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateSearcher * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateSearcher * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateSearcher * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateSearcher * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateSearcher * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateSearcher * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanAutomaticallyUpgradeService )(\n            __RPC__in IUpdateSearcher * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_CanAutomaticallyUpgradeService )(\n            __RPC__in IUpdateSearcher * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(\n            __RPC__in IUpdateSearcher * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(\n            __RPC__in IUpdateSearcher * This,\n            /* [in] */ __RPC__in BSTR value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IncludePotentiallySupersededUpdates )(\n            __RPC__in IUpdateSearcher * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IncludePotentiallySupersededUpdates )(\n            __RPC__in IUpdateSearcher * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServerSelection )(\n            __RPC__in IUpdateSearcher * This,\n            /* [retval][out] */ __RPC__out ServerSelection *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ServerSelection )(\n            __RPC__in IUpdateSearcher * This,\n            /* [in] */ ServerSelection value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginSearch )(\n            __RPC__in IUpdateSearcher * This,\n            /* [in] */ __RPC__in BSTR criteria,\n            /* [in] */ __RPC__in_opt IUnknown *onCompleted,\n            /* [in] */ VARIANT state,\n            /* [retval][out] */ __RPC__deref_out_opt ISearchJob **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndSearch )(\n            __RPC__in IUpdateSearcher * This,\n            /* [in] */ __RPC__in_opt ISearchJob *searchJob,\n            /* [retval][out] */ __RPC__deref_out_opt ISearchResult **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EscapeString )(\n            __RPC__in IUpdateSearcher * This,\n            /* [in] */ __RPC__in BSTR unescaped,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *QueryHistory )(\n            __RPC__in IUpdateSearcher * This,\n            /* [in] */ LONG startIndex,\n            /* [in] */ LONG count,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateHistoryEntryCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Search )(\n            __RPC__in IUpdateSearcher * This,\n            /* [in] */ __RPC__in BSTR criteria,\n            /* [retval][out] */ __RPC__deref_out_opt ISearchResult **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Online )(\n            __RPC__in IUpdateSearcher * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Online )(\n            __RPC__in IUpdateSearcher * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetTotalHistoryCount )(\n            __RPC__in IUpdateSearcher * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceID )(\n            __RPC__in IUpdateSearcher * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ServiceID )(\n            __RPC__in IUpdateSearcher * This,\n            /* [in] */ __RPC__in BSTR value);\n\n        END_INTERFACE\n    } IUpdateSearcherVtbl;\n\n    interface IUpdateSearcher\n    {\n        CONST_VTBL struct IUpdateSearcherVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateSearcher_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateSearcher_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateSearcher_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateSearcher_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateSearcher_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateSearcher_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateSearcher_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateSearcher_get_CanAutomaticallyUpgradeService(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CanAutomaticallyUpgradeService(This,retval) )\n\n#define IUpdateSearcher_put_CanAutomaticallyUpgradeService(This,value)\t\\\n    ( (This)->lpVtbl -> put_CanAutomaticallyUpgradeService(This,value) )\n\n#define IUpdateSearcher_get_ClientApplicationID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )\n\n#define IUpdateSearcher_put_ClientApplicationID(This,value)\t\\\n    ( (This)->lpVtbl -> put_ClientApplicationID(This,value) )\n\n#define IUpdateSearcher_get_IncludePotentiallySupersededUpdates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IncludePotentiallySupersededUpdates(This,retval) )\n\n#define IUpdateSearcher_put_IncludePotentiallySupersededUpdates(This,value)\t\\\n    ( (This)->lpVtbl -> put_IncludePotentiallySupersededUpdates(This,value) )\n\n#define IUpdateSearcher_get_ServerSelection(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ServerSelection(This,retval) )\n\n#define IUpdateSearcher_put_ServerSelection(This,value)\t\\\n    ( (This)->lpVtbl -> put_ServerSelection(This,value) )\n\n#define IUpdateSearcher_BeginSearch(This,criteria,onCompleted,state,retval)\t\\\n    ( (This)->lpVtbl -> BeginSearch(This,criteria,onCompleted,state,retval) )\n\n#define IUpdateSearcher_EndSearch(This,searchJob,retval)\t\\\n    ( (This)->lpVtbl -> EndSearch(This,searchJob,retval) )\n\n#define IUpdateSearcher_EscapeString(This,unescaped,retval)\t\\\n    ( (This)->lpVtbl -> EscapeString(This,unescaped,retval) )\n\n#define IUpdateSearcher_QueryHistory(This,startIndex,count,retval)\t\\\n    ( (This)->lpVtbl -> QueryHistory(This,startIndex,count,retval) )\n\n#define IUpdateSearcher_Search(This,criteria,retval)\t\\\n    ( (This)->lpVtbl -> Search(This,criteria,retval) )\n\n#define IUpdateSearcher_get_Online(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Online(This,retval) )\n\n#define IUpdateSearcher_put_Online(This,value)\t\\\n    ( (This)->lpVtbl -> put_Online(This,value) )\n\n#define IUpdateSearcher_GetTotalHistoryCount(This,retval)\t\\\n    ( (This)->lpVtbl -> GetTotalHistoryCount(This,retval) )\n\n#define IUpdateSearcher_get_ServiceID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ServiceID(This,retval) )\n\n#define IUpdateSearcher_put_ServiceID(This,value)\t\\\n    ( (This)->lpVtbl -> put_ServiceID(This,value) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateSearcher_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateSearcher2_INTERFACE_DEFINED__\n#define __IUpdateSearcher2_INTERFACE_DEFINED__\n\n/* interface IUpdateSearcher2 */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateSearcher2;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"4cbdcb2d-1589-4beb-bd1c-3e582ff0add0\")\n    IUpdateSearcher2 : public IUpdateSearcher\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IgnoreDownloadPriority(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_IgnoreDownloadPriority(\n            /* [in] */ VARIANT_BOOL value) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateSearcher2Vtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateSearcher2 * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateSearcher2 * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateSearcher2 * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanAutomaticallyUpgradeService )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_CanAutomaticallyUpgradeService )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [in] */ __RPC__in BSTR value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IncludePotentiallySupersededUpdates )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IncludePotentiallySupersededUpdates )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServerSelection )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [retval][out] */ __RPC__out ServerSelection *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ServerSelection )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [in] */ ServerSelection value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginSearch )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [in] */ __RPC__in BSTR criteria,\n            /* [in] */ __RPC__in_opt IUnknown *onCompleted,\n            /* [in] */ VARIANT state,\n            /* [retval][out] */ __RPC__deref_out_opt ISearchJob **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndSearch )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [in] */ __RPC__in_opt ISearchJob *searchJob,\n            /* [retval][out] */ __RPC__deref_out_opt ISearchResult **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EscapeString )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [in] */ __RPC__in BSTR unescaped,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *QueryHistory )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [in] */ LONG startIndex,\n            /* [in] */ LONG count,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateHistoryEntryCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Search )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [in] */ __RPC__in BSTR criteria,\n            /* [retval][out] */ __RPC__deref_out_opt ISearchResult **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Online )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Online )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetTotalHistoryCount )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceID )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ServiceID )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [in] */ __RPC__in BSTR value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IgnoreDownloadPriority )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IgnoreDownloadPriority )(\n            __RPC__in IUpdateSearcher2 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        END_INTERFACE\n    } IUpdateSearcher2Vtbl;\n\n    interface IUpdateSearcher2\n    {\n        CONST_VTBL struct IUpdateSearcher2Vtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateSearcher2_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateSearcher2_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateSearcher2_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateSearcher2_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateSearcher2_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateSearcher2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateSearcher2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateSearcher2_get_CanAutomaticallyUpgradeService(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CanAutomaticallyUpgradeService(This,retval) )\n\n#define IUpdateSearcher2_put_CanAutomaticallyUpgradeService(This,value)\t\\\n    ( (This)->lpVtbl -> put_CanAutomaticallyUpgradeService(This,value) )\n\n#define IUpdateSearcher2_get_ClientApplicationID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )\n\n#define IUpdateSearcher2_put_ClientApplicationID(This,value)\t\\\n    ( (This)->lpVtbl -> put_ClientApplicationID(This,value) )\n\n#define IUpdateSearcher2_get_IncludePotentiallySupersededUpdates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IncludePotentiallySupersededUpdates(This,retval) )\n\n#define IUpdateSearcher2_put_IncludePotentiallySupersededUpdates(This,value)\t\\\n    ( (This)->lpVtbl -> put_IncludePotentiallySupersededUpdates(This,value) )\n\n#define IUpdateSearcher2_get_ServerSelection(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ServerSelection(This,retval) )\n\n#define IUpdateSearcher2_put_ServerSelection(This,value)\t\\\n    ( (This)->lpVtbl -> put_ServerSelection(This,value) )\n\n#define IUpdateSearcher2_BeginSearch(This,criteria,onCompleted,state,retval)\t\\\n    ( (This)->lpVtbl -> BeginSearch(This,criteria,onCompleted,state,retval) )\n\n#define IUpdateSearcher2_EndSearch(This,searchJob,retval)\t\\\n    ( (This)->lpVtbl -> EndSearch(This,searchJob,retval) )\n\n#define IUpdateSearcher2_EscapeString(This,unescaped,retval)\t\\\n    ( (This)->lpVtbl -> EscapeString(This,unescaped,retval) )\n\n#define IUpdateSearcher2_QueryHistory(This,startIndex,count,retval)\t\\\n    ( (This)->lpVtbl -> QueryHistory(This,startIndex,count,retval) )\n\n#define IUpdateSearcher2_Search(This,criteria,retval)\t\\\n    ( (This)->lpVtbl -> Search(This,criteria,retval) )\n\n#define IUpdateSearcher2_get_Online(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Online(This,retval) )\n\n#define IUpdateSearcher2_put_Online(This,value)\t\\\n    ( (This)->lpVtbl -> put_Online(This,value) )\n\n#define IUpdateSearcher2_GetTotalHistoryCount(This,retval)\t\\\n    ( (This)->lpVtbl -> GetTotalHistoryCount(This,retval) )\n\n#define IUpdateSearcher2_get_ServiceID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ServiceID(This,retval) )\n\n#define IUpdateSearcher2_put_ServiceID(This,value)\t\\\n    ( (This)->lpVtbl -> put_ServiceID(This,value) )\n\n\n#define IUpdateSearcher2_get_IgnoreDownloadPriority(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IgnoreDownloadPriority(This,retval) )\n\n#define IUpdateSearcher2_put_IgnoreDownloadPriority(This,value)\t\\\n    ( (This)->lpVtbl -> put_IgnoreDownloadPriority(This,value) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateSearcher2_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateSearcher3_INTERFACE_DEFINED__\n#define __IUpdateSearcher3_INTERFACE_DEFINED__\n\n/* interface IUpdateSearcher3 */\n/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateSearcher3;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"04C6895D-EAF2-4034-97F3-311DE9BE413A\")\n    IUpdateSearcher3 : public IUpdateSearcher2\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_SearchScope(\n            /* [retval][out] */ __RPC__out SearchScope *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_SearchScope(\n            /* [in] */ SearchScope value) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateSearcher3Vtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateSearcher3 * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateSearcher3 * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateSearcher3 * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanAutomaticallyUpgradeService )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_CanAutomaticallyUpgradeService )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [in] */ __RPC__in BSTR value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IncludePotentiallySupersededUpdates )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IncludePotentiallySupersededUpdates )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServerSelection )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [retval][out] */ __RPC__out ServerSelection *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ServerSelection )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [in] */ ServerSelection value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginSearch )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [in] */ __RPC__in BSTR criteria,\n            /* [in] */ __RPC__in_opt IUnknown *onCompleted,\n            /* [in] */ VARIANT state,\n            /* [retval][out] */ __RPC__deref_out_opt ISearchJob **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndSearch )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [in] */ __RPC__in_opt ISearchJob *searchJob,\n            /* [retval][out] */ __RPC__deref_out_opt ISearchResult **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EscapeString )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [in] */ __RPC__in BSTR unescaped,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *QueryHistory )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [in] */ LONG startIndex,\n            /* [in] */ LONG count,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateHistoryEntryCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Search )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [in] */ __RPC__in BSTR criteria,\n            /* [retval][out] */ __RPC__deref_out_opt ISearchResult **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Online )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Online )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetTotalHistoryCount )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceID )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ServiceID )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [in] */ __RPC__in BSTR value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IgnoreDownloadPriority )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IgnoreDownloadPriority )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SearchScope )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [retval][out] */ __RPC__out SearchScope *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_SearchScope )(\n            __RPC__in IUpdateSearcher3 * This,\n            /* [in] */ SearchScope value);\n\n        END_INTERFACE\n    } IUpdateSearcher3Vtbl;\n\n    interface IUpdateSearcher3\n    {\n        CONST_VTBL struct IUpdateSearcher3Vtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateSearcher3_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateSearcher3_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateSearcher3_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateSearcher3_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateSearcher3_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateSearcher3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateSearcher3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateSearcher3_get_CanAutomaticallyUpgradeService(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CanAutomaticallyUpgradeService(This,retval) )\n\n#define IUpdateSearcher3_put_CanAutomaticallyUpgradeService(This,value)\t\\\n    ( (This)->lpVtbl -> put_CanAutomaticallyUpgradeService(This,value) )\n\n#define IUpdateSearcher3_get_ClientApplicationID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )\n\n#define IUpdateSearcher3_put_ClientApplicationID(This,value)\t\\\n    ( (This)->lpVtbl -> put_ClientApplicationID(This,value) )\n\n#define IUpdateSearcher3_get_IncludePotentiallySupersededUpdates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IncludePotentiallySupersededUpdates(This,retval) )\n\n#define IUpdateSearcher3_put_IncludePotentiallySupersededUpdates(This,value)\t\\\n    ( (This)->lpVtbl -> put_IncludePotentiallySupersededUpdates(This,value) )\n\n#define IUpdateSearcher3_get_ServerSelection(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ServerSelection(This,retval) )\n\n#define IUpdateSearcher3_put_ServerSelection(This,value)\t\\\n    ( (This)->lpVtbl -> put_ServerSelection(This,value) )\n\n#define IUpdateSearcher3_BeginSearch(This,criteria,onCompleted,state,retval)\t\\\n    ( (This)->lpVtbl -> BeginSearch(This,criteria,onCompleted,state,retval) )\n\n#define IUpdateSearcher3_EndSearch(This,searchJob,retval)\t\\\n    ( (This)->lpVtbl -> EndSearch(This,searchJob,retval) )\n\n#define IUpdateSearcher3_EscapeString(This,unescaped,retval)\t\\\n    ( (This)->lpVtbl -> EscapeString(This,unescaped,retval) )\n\n#define IUpdateSearcher3_QueryHistory(This,startIndex,count,retval)\t\\\n    ( (This)->lpVtbl -> QueryHistory(This,startIndex,count,retval) )\n\n#define IUpdateSearcher3_Search(This,criteria,retval)\t\\\n    ( (This)->lpVtbl -> Search(This,criteria,retval) )\n\n#define IUpdateSearcher3_get_Online(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Online(This,retval) )\n\n#define IUpdateSearcher3_put_Online(This,value)\t\\\n    ( (This)->lpVtbl -> put_Online(This,value) )\n\n#define IUpdateSearcher3_GetTotalHistoryCount(This,retval)\t\\\n    ( (This)->lpVtbl -> GetTotalHistoryCount(This,retval) )\n\n#define IUpdateSearcher3_get_ServiceID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ServiceID(This,retval) )\n\n#define IUpdateSearcher3_put_ServiceID(This,value)\t\\\n    ( (This)->lpVtbl -> put_ServiceID(This,value) )\n\n\n#define IUpdateSearcher3_get_IgnoreDownloadPriority(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IgnoreDownloadPriority(This,retval) )\n\n#define IUpdateSearcher3_put_IgnoreDownloadPriority(This,value)\t\\\n    ( (This)->lpVtbl -> put_IgnoreDownloadPriority(This,value) )\n\n\n#define IUpdateSearcher3_get_SearchScope(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SearchScope(This,retval) )\n\n#define IUpdateSearcher3_put_SearchScope(This,value)\t\\\n    ( (This)->lpVtbl -> put_SearchScope(This,value) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateSearcher3_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateDownloadResult_INTERFACE_DEFINED__\n#define __IUpdateDownloadResult_INTERFACE_DEFINED__\n\n/* interface IUpdateDownloadResult */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateDownloadResult;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"bf99af76-b575-42ad-8aa4-33cbb5477af1\")\n    IUpdateDownloadResult : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_HResult(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ResultCode(\n            /* [retval][out] */ __RPC__out OperationResultCode *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateDownloadResultVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateDownloadResult * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateDownloadResult * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateDownloadResult * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateDownloadResult * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateDownloadResult * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateDownloadResult * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateDownloadResult * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HResult )(\n            __RPC__in IUpdateDownloadResult * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ResultCode )(\n            __RPC__in IUpdateDownloadResult * This,\n            /* [retval][out] */ __RPC__out OperationResultCode *retval);\n\n        END_INTERFACE\n    } IUpdateDownloadResultVtbl;\n\n    interface IUpdateDownloadResult\n    {\n        CONST_VTBL struct IUpdateDownloadResultVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateDownloadResult_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateDownloadResult_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateDownloadResult_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateDownloadResult_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateDownloadResult_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateDownloadResult_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateDownloadResult_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateDownloadResult_get_HResult(This,retval)\t\\\n    ( (This)->lpVtbl -> get_HResult(This,retval) )\n\n#define IUpdateDownloadResult_get_ResultCode(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ResultCode(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateDownloadResult_INTERFACE_DEFINED__ */\n\n\n#ifndef __IDownloadResult_INTERFACE_DEFINED__\n#define __IDownloadResult_INTERFACE_DEFINED__\n\n/* interface IDownloadResult */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IDownloadResult;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"daa4fdd0-4727-4dbe-a1e7-745dca317144\")\n    IDownloadResult : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_HResult(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ResultCode(\n            /* [retval][out] */ __RPC__out OperationResultCode *retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetUpdateResult(\n            /* [in] */ LONG updateIndex,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadResult **retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IDownloadResultVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IDownloadResult * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IDownloadResult * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IDownloadResult * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IDownloadResult * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IDownloadResult * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IDownloadResult * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IDownloadResult * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HResult )(\n            __RPC__in IDownloadResult * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ResultCode )(\n            __RPC__in IDownloadResult * This,\n            /* [retval][out] */ __RPC__out OperationResultCode *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetUpdateResult )(\n            __RPC__in IDownloadResult * This,\n            /* [in] */ LONG updateIndex,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadResult **retval);\n\n        END_INTERFACE\n    } IDownloadResultVtbl;\n\n    interface IDownloadResult\n    {\n        CONST_VTBL struct IDownloadResultVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IDownloadResult_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IDownloadResult_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IDownloadResult_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IDownloadResult_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IDownloadResult_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IDownloadResult_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IDownloadResult_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IDownloadResult_get_HResult(This,retval)\t\\\n    ( (This)->lpVtbl -> get_HResult(This,retval) )\n\n#define IDownloadResult_get_ResultCode(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ResultCode(This,retval) )\n\n#define IDownloadResult_GetUpdateResult(This,updateIndex,retval)\t\\\n    ( (This)->lpVtbl -> GetUpdateResult(This,updateIndex,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IDownloadResult_INTERFACE_DEFINED__ */\n\n\n#ifndef __IDownloadProgress_INTERFACE_DEFINED__\n#define __IDownloadProgress_INTERFACE_DEFINED__\n\n/* interface IDownloadProgress */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IDownloadProgress;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"d31a5bac-f719-4178-9dbb-5e2cb47fd18a\")\n    IDownloadProgress : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CurrentUpdateBytesDownloaded(\n            /* [retval][out] */ __RPC__out DECIMAL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CurrentUpdateBytesToDownload(\n            /* [retval][out] */ __RPC__out DECIMAL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CurrentUpdateIndex(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_PercentComplete(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_TotalBytesDownloaded(\n            /* [retval][out] */ __RPC__out DECIMAL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_TotalBytesToDownload(\n            /* [retval][out] */ __RPC__out DECIMAL *retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetUpdateResult(\n            /* [in] */ LONG updateIndex,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadResult **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CurrentUpdateDownloadPhase(\n            /* [retval][out] */ __RPC__out DownloadPhase *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CurrentUpdatePercentComplete(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IDownloadProgressVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IDownloadProgress * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IDownloadProgress * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IDownloadProgress * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IDownloadProgress * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IDownloadProgress * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IDownloadProgress * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IDownloadProgress * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CurrentUpdateBytesDownloaded )(\n            __RPC__in IDownloadProgress * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CurrentUpdateBytesToDownload )(\n            __RPC__in IDownloadProgress * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CurrentUpdateIndex )(\n            __RPC__in IDownloadProgress * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_PercentComplete )(\n            __RPC__in IDownloadProgress * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_TotalBytesDownloaded )(\n            __RPC__in IDownloadProgress * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_TotalBytesToDownload )(\n            __RPC__in IDownloadProgress * This,\n            /* [retval][out] */ __RPC__out DECIMAL *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetUpdateResult )(\n            __RPC__in IDownloadProgress * This,\n            /* [in] */ LONG updateIndex,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateDownloadResult **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CurrentUpdateDownloadPhase )(\n            __RPC__in IDownloadProgress * This,\n            /* [retval][out] */ __RPC__out DownloadPhase *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CurrentUpdatePercentComplete )(\n            __RPC__in IDownloadProgress * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        END_INTERFACE\n    } IDownloadProgressVtbl;\n\n    interface IDownloadProgress\n    {\n        CONST_VTBL struct IDownloadProgressVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IDownloadProgress_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IDownloadProgress_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IDownloadProgress_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IDownloadProgress_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IDownloadProgress_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IDownloadProgress_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IDownloadProgress_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IDownloadProgress_get_CurrentUpdateBytesDownloaded(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CurrentUpdateBytesDownloaded(This,retval) )\n\n#define IDownloadProgress_get_CurrentUpdateBytesToDownload(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CurrentUpdateBytesToDownload(This,retval) )\n\n#define IDownloadProgress_get_CurrentUpdateIndex(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CurrentUpdateIndex(This,retval) )\n\n#define IDownloadProgress_get_PercentComplete(This,retval)\t\\\n    ( (This)->lpVtbl -> get_PercentComplete(This,retval) )\n\n#define IDownloadProgress_get_TotalBytesDownloaded(This,retval)\t\\\n    ( (This)->lpVtbl -> get_TotalBytesDownloaded(This,retval) )\n\n#define IDownloadProgress_get_TotalBytesToDownload(This,retval)\t\\\n    ( (This)->lpVtbl -> get_TotalBytesToDownload(This,retval) )\n\n#define IDownloadProgress_GetUpdateResult(This,updateIndex,retval)\t\\\n    ( (This)->lpVtbl -> GetUpdateResult(This,updateIndex,retval) )\n\n#define IDownloadProgress_get_CurrentUpdateDownloadPhase(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CurrentUpdateDownloadPhase(This,retval) )\n\n#define IDownloadProgress_get_CurrentUpdatePercentComplete(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CurrentUpdatePercentComplete(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IDownloadProgress_INTERFACE_DEFINED__ */\n\n\n#ifndef __IDownloadJob_INTERFACE_DEFINED__\n#define __IDownloadJob_INTERFACE_DEFINED__\n\n/* interface IDownloadJob */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IDownloadJob;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"c574de85-7358-43f6-aae8-8697e62d8ba7\")\n    IDownloadJob : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AsyncState(\n            /* [retval][out] */ __RPC__out VARIANT *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsCompleted(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Updates(\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CleanUp( void) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetProgress(\n            /* [retval][out] */ __RPC__deref_out_opt IDownloadProgress **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RequestAbort( void) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IDownloadJobVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IDownloadJob * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IDownloadJob * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IDownloadJob * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IDownloadJob * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IDownloadJob * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IDownloadJob * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IDownloadJob * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AsyncState )(\n            __RPC__in IDownloadJob * This,\n            /* [retval][out] */ __RPC__out VARIANT *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsCompleted )(\n            __RPC__in IDownloadJob * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Updates )(\n            __RPC__in IDownloadJob * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CleanUp )(\n            __RPC__in IDownloadJob * This);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetProgress )(\n            __RPC__in IDownloadJob * This,\n            /* [retval][out] */ __RPC__deref_out_opt IDownloadProgress **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RequestAbort )(\n            __RPC__in IDownloadJob * This);\n\n        END_INTERFACE\n    } IDownloadJobVtbl;\n\n    interface IDownloadJob\n    {\n        CONST_VTBL struct IDownloadJobVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IDownloadJob_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IDownloadJob_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IDownloadJob_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IDownloadJob_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IDownloadJob_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IDownloadJob_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IDownloadJob_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IDownloadJob_get_AsyncState(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AsyncState(This,retval) )\n\n#define IDownloadJob_get_IsCompleted(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsCompleted(This,retval) )\n\n#define IDownloadJob_get_Updates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Updates(This,retval) )\n\n#define IDownloadJob_CleanUp(This)\t\\\n    ( (This)->lpVtbl -> CleanUp(This) )\n\n#define IDownloadJob_GetProgress(This,retval)\t\\\n    ( (This)->lpVtbl -> GetProgress(This,retval) )\n\n#define IDownloadJob_RequestAbort(This)\t\\\n    ( (This)->lpVtbl -> RequestAbort(This) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IDownloadJob_INTERFACE_DEFINED__ */\n\n\n#ifndef __IDownloadCompletedCallbackArgs_INTERFACE_DEFINED__\n#define __IDownloadCompletedCallbackArgs_INTERFACE_DEFINED__\n\n/* interface IDownloadCompletedCallbackArgs */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IDownloadCompletedCallbackArgs;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"fa565b23-498c-47a0-979d-e7d5b1813360\")\n    IDownloadCompletedCallbackArgs : public IDispatch\n    {\n    public:\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IDownloadCompletedCallbackArgsVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IDownloadCompletedCallbackArgs * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IDownloadCompletedCallbackArgs * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IDownloadCompletedCallbackArgs * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IDownloadCompletedCallbackArgs * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IDownloadCompletedCallbackArgs * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IDownloadCompletedCallbackArgs * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IDownloadCompletedCallbackArgs * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        END_INTERFACE\n    } IDownloadCompletedCallbackArgsVtbl;\n\n    interface IDownloadCompletedCallbackArgs\n    {\n        CONST_VTBL struct IDownloadCompletedCallbackArgsVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IDownloadCompletedCallbackArgs_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IDownloadCompletedCallbackArgs_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IDownloadCompletedCallbackArgs_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IDownloadCompletedCallbackArgs_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IDownloadCompletedCallbackArgs_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IDownloadCompletedCallbackArgs_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IDownloadCompletedCallbackArgs_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IDownloadCompletedCallbackArgs_INTERFACE_DEFINED__ */\n\n\n#ifndef __IDownloadCompletedCallback_INTERFACE_DEFINED__\n#define __IDownloadCompletedCallback_INTERFACE_DEFINED__\n\n/* interface IDownloadCompletedCallback */\n/* [unique][uuid][nonextensible][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IDownloadCompletedCallback;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"77254866-9f5b-4c8e-b9e2-c77a8530d64b\")\n    IDownloadCompletedCallback : public IUnknown\n    {\n    public:\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Invoke(\n            /* [in] */ __RPC__in_opt IDownloadJob *downloadJob,\n            /* [in] */ __RPC__in_opt IDownloadCompletedCallbackArgs *callbackArgs) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IDownloadCompletedCallbackVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IDownloadCompletedCallback * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IDownloadCompletedCallback * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IDownloadCompletedCallback * This);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            __RPC__in IDownloadCompletedCallback * This,\n            /* [in] */ __RPC__in_opt IDownloadJob *downloadJob,\n            /* [in] */ __RPC__in_opt IDownloadCompletedCallbackArgs *callbackArgs);\n\n        END_INTERFACE\n    } IDownloadCompletedCallbackVtbl;\n\n    interface IDownloadCompletedCallback\n    {\n        CONST_VTBL struct IDownloadCompletedCallbackVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IDownloadCompletedCallback_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IDownloadCompletedCallback_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IDownloadCompletedCallback_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IDownloadCompletedCallback_Invoke(This,downloadJob,callbackArgs)\t\\\n    ( (This)->lpVtbl -> Invoke(This,downloadJob,callbackArgs) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IDownloadCompletedCallback_INTERFACE_DEFINED__ */\n\n\n#ifndef __IDownloadProgressChangedCallbackArgs_INTERFACE_DEFINED__\n#define __IDownloadProgressChangedCallbackArgs_INTERFACE_DEFINED__\n\n/* interface IDownloadProgressChangedCallbackArgs */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IDownloadProgressChangedCallbackArgs;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"324ff2c6-4981-4b04-9412-57481745ab24\")\n    IDownloadProgressChangedCallbackArgs : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Progress(\n            /* [retval][out] */ __RPC__deref_out_opt IDownloadProgress **retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IDownloadProgressChangedCallbackArgsVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IDownloadProgressChangedCallbackArgs * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IDownloadProgressChangedCallbackArgs * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IDownloadProgressChangedCallbackArgs * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IDownloadProgressChangedCallbackArgs * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IDownloadProgressChangedCallbackArgs * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IDownloadProgressChangedCallbackArgs * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IDownloadProgressChangedCallbackArgs * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Progress )(\n            __RPC__in IDownloadProgressChangedCallbackArgs * This,\n            /* [retval][out] */ __RPC__deref_out_opt IDownloadProgress **retval);\n\n        END_INTERFACE\n    } IDownloadProgressChangedCallbackArgsVtbl;\n\n    interface IDownloadProgressChangedCallbackArgs\n    {\n        CONST_VTBL struct IDownloadProgressChangedCallbackArgsVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IDownloadProgressChangedCallbackArgs_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IDownloadProgressChangedCallbackArgs_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IDownloadProgressChangedCallbackArgs_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IDownloadProgressChangedCallbackArgs_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IDownloadProgressChangedCallbackArgs_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IDownloadProgressChangedCallbackArgs_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IDownloadProgressChangedCallbackArgs_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IDownloadProgressChangedCallbackArgs_get_Progress(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Progress(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IDownloadProgressChangedCallbackArgs_INTERFACE_DEFINED__ */\n\n\n#ifndef __IDownloadProgressChangedCallback_INTERFACE_DEFINED__\n#define __IDownloadProgressChangedCallback_INTERFACE_DEFINED__\n\n/* interface IDownloadProgressChangedCallback */\n/* [unique][uuid][nonextensible][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IDownloadProgressChangedCallback;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"8c3f1cdd-6173-4591-aebd-a56a53ca77c1\")\n    IDownloadProgressChangedCallback : public IUnknown\n    {\n    public:\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Invoke(\n            /* [in] */ __RPC__in_opt IDownloadJob *downloadJob,\n            /* [in] */ __RPC__in_opt IDownloadProgressChangedCallbackArgs *callbackArgs) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IDownloadProgressChangedCallbackVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IDownloadProgressChangedCallback * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IDownloadProgressChangedCallback * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IDownloadProgressChangedCallback * This);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            __RPC__in IDownloadProgressChangedCallback * This,\n            /* [in] */ __RPC__in_opt IDownloadJob *downloadJob,\n            /* [in] */ __RPC__in_opt IDownloadProgressChangedCallbackArgs *callbackArgs);\n\n        END_INTERFACE\n    } IDownloadProgressChangedCallbackVtbl;\n\n    interface IDownloadProgressChangedCallback\n    {\n        CONST_VTBL struct IDownloadProgressChangedCallbackVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IDownloadProgressChangedCallback_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IDownloadProgressChangedCallback_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IDownloadProgressChangedCallback_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IDownloadProgressChangedCallback_Invoke(This,downloadJob,callbackArgs)\t\\\n    ( (This)->lpVtbl -> Invoke(This,downloadJob,callbackArgs) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IDownloadProgressChangedCallback_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateDownloader_INTERFACE_DEFINED__\n#define __IUpdateDownloader_INTERFACE_DEFINED__\n\n/* interface IUpdateDownloader */\n/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateDownloader;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"68f1c6f9-7ecc-4666-a464-247fe12496c3\")\n    IUpdateDownloader : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ClientApplicationID(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ClientApplicationID(\n            /* [in] */ __RPC__in BSTR value) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsForced(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_IsForced(\n            /* [in] */ VARIANT_BOOL value) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Priority(\n            /* [retval][out] */ __RPC__out DownloadPriority *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Priority(\n            /* [in] */ DownloadPriority value) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Updates(\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Updates(\n            /* [in] */ __RPC__in_opt IUpdateCollection *value) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE BeginDownload(\n            /* [in] */ __RPC__in_opt IUnknown *onProgressChanged,\n            /* [in] */ __RPC__in_opt IUnknown *onCompleted,\n            /* [in] */ VARIANT state,\n            /* [retval][out] */ __RPC__deref_out_opt IDownloadJob **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Download(\n            /* [retval][out] */ __RPC__deref_out_opt IDownloadResult **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EndDownload(\n            /* [in] */ __RPC__in_opt IDownloadJob *value,\n            /* [retval][out] */ __RPC__deref_out_opt IDownloadResult **retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateDownloaderVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateDownloader * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateDownloader * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateDownloader * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateDownloader * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateDownloader * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateDownloader * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateDownloader * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(\n            __RPC__in IUpdateDownloader * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(\n            __RPC__in IUpdateDownloader * This,\n            /* [in] */ __RPC__in BSTR value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsForced )(\n            __RPC__in IUpdateDownloader * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsForced )(\n            __RPC__in IUpdateDownloader * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Priority )(\n            __RPC__in IUpdateDownloader * This,\n            /* [retval][out] */ __RPC__out DownloadPriority *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Priority )(\n            __RPC__in IUpdateDownloader * This,\n            /* [in] */ DownloadPriority value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Updates )(\n            __RPC__in IUpdateDownloader * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Updates )(\n            __RPC__in IUpdateDownloader * This,\n            /* [in] */ __RPC__in_opt IUpdateCollection *value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginDownload )(\n            __RPC__in IUpdateDownloader * This,\n            /* [in] */ __RPC__in_opt IUnknown *onProgressChanged,\n            /* [in] */ __RPC__in_opt IUnknown *onCompleted,\n            /* [in] */ VARIANT state,\n            /* [retval][out] */ __RPC__deref_out_opt IDownloadJob **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Download )(\n            __RPC__in IUpdateDownloader * This,\n            /* [retval][out] */ __RPC__deref_out_opt IDownloadResult **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndDownload )(\n            __RPC__in IUpdateDownloader * This,\n            /* [in] */ __RPC__in_opt IDownloadJob *value,\n            /* [retval][out] */ __RPC__deref_out_opt IDownloadResult **retval);\n\n        END_INTERFACE\n    } IUpdateDownloaderVtbl;\n\n    interface IUpdateDownloader\n    {\n        CONST_VTBL struct IUpdateDownloaderVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateDownloader_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateDownloader_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateDownloader_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateDownloader_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateDownloader_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateDownloader_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateDownloader_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateDownloader_get_ClientApplicationID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )\n\n#define IUpdateDownloader_put_ClientApplicationID(This,value)\t\\\n    ( (This)->lpVtbl -> put_ClientApplicationID(This,value) )\n\n#define IUpdateDownloader_get_IsForced(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsForced(This,retval) )\n\n#define IUpdateDownloader_put_IsForced(This,value)\t\\\n    ( (This)->lpVtbl -> put_IsForced(This,value) )\n\n#define IUpdateDownloader_get_Priority(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Priority(This,retval) )\n\n#define IUpdateDownloader_put_Priority(This,value)\t\\\n    ( (This)->lpVtbl -> put_Priority(This,value) )\n\n#define IUpdateDownloader_get_Updates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Updates(This,retval) )\n\n#define IUpdateDownloader_put_Updates(This,value)\t\\\n    ( (This)->lpVtbl -> put_Updates(This,value) )\n\n#define IUpdateDownloader_BeginDownload(This,onProgressChanged,onCompleted,state,retval)\t\\\n    ( (This)->lpVtbl -> BeginDownload(This,onProgressChanged,onCompleted,state,retval) )\n\n#define IUpdateDownloader_Download(This,retval)\t\\\n    ( (This)->lpVtbl -> Download(This,retval) )\n\n#define IUpdateDownloader_EndDownload(This,value,retval)\t\\\n    ( (This)->lpVtbl -> EndDownload(This,value,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateDownloader_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateInstallationResult_INTERFACE_DEFINED__\n#define __IUpdateInstallationResult_INTERFACE_DEFINED__\n\n/* interface IUpdateInstallationResult */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateInstallationResult;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"d940f0f8-3cbb-4fd0-993f-471e7f2328ad\")\n    IUpdateInstallationResult : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_HResult(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RebootRequired(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ResultCode(\n            /* [retval][out] */ __RPC__out OperationResultCode *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateInstallationResultVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateInstallationResult * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateInstallationResult * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateInstallationResult * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateInstallationResult * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateInstallationResult * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateInstallationResult * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateInstallationResult * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HResult )(\n            __RPC__in IUpdateInstallationResult * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(\n            __RPC__in IUpdateInstallationResult * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ResultCode )(\n            __RPC__in IUpdateInstallationResult * This,\n            /* [retval][out] */ __RPC__out OperationResultCode *retval);\n\n        END_INTERFACE\n    } IUpdateInstallationResultVtbl;\n\n    interface IUpdateInstallationResult\n    {\n        CONST_VTBL struct IUpdateInstallationResultVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateInstallationResult_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateInstallationResult_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateInstallationResult_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateInstallationResult_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateInstallationResult_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateInstallationResult_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateInstallationResult_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateInstallationResult_get_HResult(This,retval)\t\\\n    ( (This)->lpVtbl -> get_HResult(This,retval) )\n\n#define IUpdateInstallationResult_get_RebootRequired(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RebootRequired(This,retval) )\n\n#define IUpdateInstallationResult_get_ResultCode(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ResultCode(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateInstallationResult_INTERFACE_DEFINED__ */\n\n\n#ifndef __IInstallationResult_INTERFACE_DEFINED__\n#define __IInstallationResult_INTERFACE_DEFINED__\n\n/* interface IInstallationResult */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IInstallationResult;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"a43c56d6-7451-48d4-af96-b6cd2d0d9b7a\")\n    IInstallationResult : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_HResult(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RebootRequired(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ResultCode(\n            /* [retval][out] */ __RPC__out OperationResultCode *retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetUpdateResult(\n            /* [in] */ LONG updateIndex,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateInstallationResult **retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IInstallationResultVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IInstallationResult * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IInstallationResult * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IInstallationResult * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IInstallationResult * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IInstallationResult * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IInstallationResult * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IInstallationResult * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HResult )(\n            __RPC__in IInstallationResult * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequired )(\n            __RPC__in IInstallationResult * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ResultCode )(\n            __RPC__in IInstallationResult * This,\n            /* [retval][out] */ __RPC__out OperationResultCode *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetUpdateResult )(\n            __RPC__in IInstallationResult * This,\n            /* [in] */ LONG updateIndex,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateInstallationResult **retval);\n\n        END_INTERFACE\n    } IInstallationResultVtbl;\n\n    interface IInstallationResult\n    {\n        CONST_VTBL struct IInstallationResultVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IInstallationResult_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IInstallationResult_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IInstallationResult_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IInstallationResult_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IInstallationResult_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IInstallationResult_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IInstallationResult_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IInstallationResult_get_HResult(This,retval)\t\\\n    ( (This)->lpVtbl -> get_HResult(This,retval) )\n\n#define IInstallationResult_get_RebootRequired(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RebootRequired(This,retval) )\n\n#define IInstallationResult_get_ResultCode(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ResultCode(This,retval) )\n\n#define IInstallationResult_GetUpdateResult(This,updateIndex,retval)\t\\\n    ( (This)->lpVtbl -> GetUpdateResult(This,updateIndex,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IInstallationResult_INTERFACE_DEFINED__ */\n\n\n#ifndef __IInstallationProgress_INTERFACE_DEFINED__\n#define __IInstallationProgress_INTERFACE_DEFINED__\n\n/* interface IInstallationProgress */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IInstallationProgress;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"345c8244-43a3-4e32-a368-65f073b76f36\")\n    IInstallationProgress : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CurrentUpdateIndex(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CurrentUpdatePercentComplete(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_PercentComplete(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetUpdateResult(\n            /* [in] */ LONG updateIndex,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateInstallationResult **retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IInstallationProgressVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IInstallationProgress * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IInstallationProgress * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IInstallationProgress * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IInstallationProgress * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IInstallationProgress * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IInstallationProgress * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IInstallationProgress * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CurrentUpdateIndex )(\n            __RPC__in IInstallationProgress * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CurrentUpdatePercentComplete )(\n            __RPC__in IInstallationProgress * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_PercentComplete )(\n            __RPC__in IInstallationProgress * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetUpdateResult )(\n            __RPC__in IInstallationProgress * This,\n            /* [in] */ LONG updateIndex,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateInstallationResult **retval);\n\n        END_INTERFACE\n    } IInstallationProgressVtbl;\n\n    interface IInstallationProgress\n    {\n        CONST_VTBL struct IInstallationProgressVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IInstallationProgress_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IInstallationProgress_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IInstallationProgress_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IInstallationProgress_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IInstallationProgress_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IInstallationProgress_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IInstallationProgress_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IInstallationProgress_get_CurrentUpdateIndex(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CurrentUpdateIndex(This,retval) )\n\n#define IInstallationProgress_get_CurrentUpdatePercentComplete(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CurrentUpdatePercentComplete(This,retval) )\n\n#define IInstallationProgress_get_PercentComplete(This,retval)\t\\\n    ( (This)->lpVtbl -> get_PercentComplete(This,retval) )\n\n#define IInstallationProgress_GetUpdateResult(This,updateIndex,retval)\t\\\n    ( (This)->lpVtbl -> GetUpdateResult(This,updateIndex,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IInstallationProgress_INTERFACE_DEFINED__ */\n\n\n#ifndef __IInstallationJob_INTERFACE_DEFINED__\n#define __IInstallationJob_INTERFACE_DEFINED__\n\n/* interface IInstallationJob */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IInstallationJob;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"5c209f0b-bad5-432a-9556-4699bed2638a\")\n    IInstallationJob : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AsyncState(\n            /* [retval][out] */ __RPC__out VARIANT *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsCompleted(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Updates(\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CleanUp( void) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetProgress(\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationProgress **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RequestAbort( void) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IInstallationJobVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IInstallationJob * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IInstallationJob * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IInstallationJob * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IInstallationJob * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IInstallationJob * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IInstallationJob * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IInstallationJob * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AsyncState )(\n            __RPC__in IInstallationJob * This,\n            /* [retval][out] */ __RPC__out VARIANT *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsCompleted )(\n            __RPC__in IInstallationJob * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Updates )(\n            __RPC__in IInstallationJob * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CleanUp )(\n            __RPC__in IInstallationJob * This);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetProgress )(\n            __RPC__in IInstallationJob * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationProgress **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RequestAbort )(\n            __RPC__in IInstallationJob * This);\n\n        END_INTERFACE\n    } IInstallationJobVtbl;\n\n    interface IInstallationJob\n    {\n        CONST_VTBL struct IInstallationJobVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IInstallationJob_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IInstallationJob_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IInstallationJob_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IInstallationJob_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IInstallationJob_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IInstallationJob_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IInstallationJob_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IInstallationJob_get_AsyncState(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AsyncState(This,retval) )\n\n#define IInstallationJob_get_IsCompleted(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsCompleted(This,retval) )\n\n#define IInstallationJob_get_Updates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Updates(This,retval) )\n\n#define IInstallationJob_CleanUp(This)\t\\\n    ( (This)->lpVtbl -> CleanUp(This) )\n\n#define IInstallationJob_GetProgress(This,retval)\t\\\n    ( (This)->lpVtbl -> GetProgress(This,retval) )\n\n#define IInstallationJob_RequestAbort(This)\t\\\n    ( (This)->lpVtbl -> RequestAbort(This) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IInstallationJob_INTERFACE_DEFINED__ */\n\n\n#ifndef __IInstallationCompletedCallbackArgs_INTERFACE_DEFINED__\n#define __IInstallationCompletedCallbackArgs_INTERFACE_DEFINED__\n\n/* interface IInstallationCompletedCallbackArgs */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IInstallationCompletedCallbackArgs;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"250e2106-8efb-4705-9653-ef13c581b6a1\")\n    IInstallationCompletedCallbackArgs : public IDispatch\n    {\n    public:\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IInstallationCompletedCallbackArgsVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IInstallationCompletedCallbackArgs * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IInstallationCompletedCallbackArgs * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IInstallationCompletedCallbackArgs * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IInstallationCompletedCallbackArgs * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IInstallationCompletedCallbackArgs * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IInstallationCompletedCallbackArgs * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IInstallationCompletedCallbackArgs * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        END_INTERFACE\n    } IInstallationCompletedCallbackArgsVtbl;\n\n    interface IInstallationCompletedCallbackArgs\n    {\n        CONST_VTBL struct IInstallationCompletedCallbackArgsVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IInstallationCompletedCallbackArgs_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IInstallationCompletedCallbackArgs_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IInstallationCompletedCallbackArgs_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IInstallationCompletedCallbackArgs_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IInstallationCompletedCallbackArgs_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IInstallationCompletedCallbackArgs_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IInstallationCompletedCallbackArgs_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IInstallationCompletedCallbackArgs_INTERFACE_DEFINED__ */\n\n\n#ifndef __IInstallationCompletedCallback_INTERFACE_DEFINED__\n#define __IInstallationCompletedCallback_INTERFACE_DEFINED__\n\n/* interface IInstallationCompletedCallback */\n/* [unique][uuid][nonextensible][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IInstallationCompletedCallback;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"45f4f6f3-d602-4f98-9a8a-3efa152ad2d3\")\n    IInstallationCompletedCallback : public IUnknown\n    {\n    public:\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Invoke(\n            /* [in] */ __RPC__in_opt IInstallationJob *installationJob,\n            /* [in] */ __RPC__in_opt IInstallationCompletedCallbackArgs *callbackArgs) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IInstallationCompletedCallbackVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IInstallationCompletedCallback * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IInstallationCompletedCallback * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IInstallationCompletedCallback * This);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            __RPC__in IInstallationCompletedCallback * This,\n            /* [in] */ __RPC__in_opt IInstallationJob *installationJob,\n            /* [in] */ __RPC__in_opt IInstallationCompletedCallbackArgs *callbackArgs);\n\n        END_INTERFACE\n    } IInstallationCompletedCallbackVtbl;\n\n    interface IInstallationCompletedCallback\n    {\n        CONST_VTBL struct IInstallationCompletedCallbackVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IInstallationCompletedCallback_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IInstallationCompletedCallback_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IInstallationCompletedCallback_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IInstallationCompletedCallback_Invoke(This,installationJob,callbackArgs)\t\\\n    ( (This)->lpVtbl -> Invoke(This,installationJob,callbackArgs) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IInstallationCompletedCallback_INTERFACE_DEFINED__ */\n\n\n#ifndef __IInstallationProgressChangedCallbackArgs_INTERFACE_DEFINED__\n#define __IInstallationProgressChangedCallbackArgs_INTERFACE_DEFINED__\n\n/* interface IInstallationProgressChangedCallbackArgs */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IInstallationProgressChangedCallbackArgs;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"e4f14e1e-689d-4218-a0b9-bc189c484a01\")\n    IInstallationProgressChangedCallbackArgs : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Progress(\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationProgress **retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IInstallationProgressChangedCallbackArgsVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IInstallationProgressChangedCallbackArgs * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IInstallationProgressChangedCallbackArgs * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IInstallationProgressChangedCallbackArgs * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IInstallationProgressChangedCallbackArgs * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IInstallationProgressChangedCallbackArgs * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IInstallationProgressChangedCallbackArgs * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IInstallationProgressChangedCallbackArgs * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Progress )(\n            __RPC__in IInstallationProgressChangedCallbackArgs * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationProgress **retval);\n\n        END_INTERFACE\n    } IInstallationProgressChangedCallbackArgsVtbl;\n\n    interface IInstallationProgressChangedCallbackArgs\n    {\n        CONST_VTBL struct IInstallationProgressChangedCallbackArgsVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IInstallationProgressChangedCallbackArgs_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IInstallationProgressChangedCallbackArgs_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IInstallationProgressChangedCallbackArgs_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IInstallationProgressChangedCallbackArgs_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IInstallationProgressChangedCallbackArgs_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IInstallationProgressChangedCallbackArgs_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IInstallationProgressChangedCallbackArgs_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IInstallationProgressChangedCallbackArgs_get_Progress(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Progress(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IInstallationProgressChangedCallbackArgs_INTERFACE_DEFINED__ */\n\n\n#ifndef __IInstallationProgressChangedCallback_INTERFACE_DEFINED__\n#define __IInstallationProgressChangedCallback_INTERFACE_DEFINED__\n\n/* interface IInstallationProgressChangedCallback */\n/* [unique][uuid][nonextensible][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IInstallationProgressChangedCallback;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"e01402d5-f8da-43ba-a012-38894bd048f1\")\n    IInstallationProgressChangedCallback : public IUnknown\n    {\n    public:\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Invoke(\n            /* [in] */ __RPC__in_opt IInstallationJob *installationJob,\n            /* [in] */ __RPC__in_opt IInstallationProgressChangedCallbackArgs *callbackArgs) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IInstallationProgressChangedCallbackVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IInstallationProgressChangedCallback * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IInstallationProgressChangedCallback * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IInstallationProgressChangedCallback * This);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            __RPC__in IInstallationProgressChangedCallback * This,\n            /* [in] */ __RPC__in_opt IInstallationJob *installationJob,\n            /* [in] */ __RPC__in_opt IInstallationProgressChangedCallbackArgs *callbackArgs);\n\n        END_INTERFACE\n    } IInstallationProgressChangedCallbackVtbl;\n\n    interface IInstallationProgressChangedCallback\n    {\n        CONST_VTBL struct IInstallationProgressChangedCallbackVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IInstallationProgressChangedCallback_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IInstallationProgressChangedCallback_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IInstallationProgressChangedCallback_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IInstallationProgressChangedCallback_Invoke(This,installationJob,callbackArgs)\t\\\n    ( (This)->lpVtbl -> Invoke(This,installationJob,callbackArgs) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IInstallationProgressChangedCallback_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateInstaller_INTERFACE_DEFINED__\n#define __IUpdateInstaller_INTERFACE_DEFINED__\n\n/* interface IUpdateInstaller */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateInstaller;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"7b929c68-ccdc-4226-96b1-8724600b54c2\")\n    IUpdateInstaller : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ClientApplicationID(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ClientApplicationID(\n            /* [in] */ __RPC__in BSTR value) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsForced(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_IsForced(\n            /* [in] */ VARIANT_BOOL value) = 0;\n\n        virtual /* [helpstring][restricted][propget][id] */ HRESULT STDMETHODCALLTYPE get_ParentHwnd(\n            /* [retval][out] */ __RPC__deref_out_opt HWND *retval) = 0;\n\n        virtual /* [helpstring][restricted][propput][id] */ HRESULT STDMETHODCALLTYPE put_ParentHwnd(\n            /* [unique][in] */ __RPC__in_opt HWND value) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ParentWindow(\n            /* [unique][in] */ __RPC__in_opt IUnknown *value) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ParentWindow(\n            /* [retval][out] */ __RPC__deref_out_opt IUnknown **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Updates(\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Updates(\n            /* [in] */ __RPC__in_opt IUpdateCollection *value) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE BeginInstall(\n            /* [in] */ __RPC__in_opt IUnknown *onProgressChanged,\n            /* [in] */ __RPC__in_opt IUnknown *onCompleted,\n            /* [in] */ VARIANT state,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationJob **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE BeginUninstall(\n            /* [in] */ __RPC__in_opt IUnknown *onProgressChanged,\n            /* [in] */ __RPC__in_opt IUnknown *onCompleted,\n            /* [in] */ VARIANT state,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationJob **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EndInstall(\n            /* [in] */ __RPC__in_opt IInstallationJob *value,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EndUninstall(\n            /* [in] */ __RPC__in_opt IInstallationJob *value,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Install(\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RunWizard(\n            /* [defaultvalue][unique][in] */ __RPC__in_opt BSTR dialogTitle,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsBusy(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Uninstall(\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AllowSourcePrompts(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_AllowSourcePrompts(\n            /* [in] */ VARIANT_BOOL value) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RebootRequiredBeforeInstallation(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateInstallerVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateInstaller * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateInstaller * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateInstaller * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateInstaller * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateInstaller * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateInstaller * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateInstaller * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(\n            __RPC__in IUpdateInstaller * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(\n            __RPC__in IUpdateInstaller * This,\n            /* [in] */ __RPC__in BSTR value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsForced )(\n            __RPC__in IUpdateInstaller * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsForced )(\n            __RPC__in IUpdateInstaller * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][restricted][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ParentHwnd )(\n            __RPC__in IUpdateInstaller * This,\n            /* [retval][out] */ __RPC__deref_out_opt HWND *retval);\n\n        /* [helpstring][restricted][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ParentHwnd )(\n            __RPC__in IUpdateInstaller * This,\n            /* [unique][in] */ __RPC__in_opt HWND value);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ParentWindow )(\n            __RPC__in IUpdateInstaller * This,\n            /* [unique][in] */ __RPC__in_opt IUnknown *value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ParentWindow )(\n            __RPC__in IUpdateInstaller * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Updates )(\n            __RPC__in IUpdateInstaller * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Updates )(\n            __RPC__in IUpdateInstaller * This,\n            /* [in] */ __RPC__in_opt IUpdateCollection *value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginInstall )(\n            __RPC__in IUpdateInstaller * This,\n            /* [in] */ __RPC__in_opt IUnknown *onProgressChanged,\n            /* [in] */ __RPC__in_opt IUnknown *onCompleted,\n            /* [in] */ VARIANT state,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationJob **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginUninstall )(\n            __RPC__in IUpdateInstaller * This,\n            /* [in] */ __RPC__in_opt IUnknown *onProgressChanged,\n            /* [in] */ __RPC__in_opt IUnknown *onCompleted,\n            /* [in] */ VARIANT state,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationJob **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndInstall )(\n            __RPC__in IUpdateInstaller * This,\n            /* [in] */ __RPC__in_opt IInstallationJob *value,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndUninstall )(\n            __RPC__in IUpdateInstaller * This,\n            /* [in] */ __RPC__in_opt IInstallationJob *value,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Install )(\n            __RPC__in IUpdateInstaller * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RunWizard )(\n            __RPC__in IUpdateInstaller * This,\n            /* [defaultvalue][unique][in] */ __RPC__in_opt BSTR dialogTitle,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBusy )(\n            __RPC__in IUpdateInstaller * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Uninstall )(\n            __RPC__in IUpdateInstaller * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AllowSourcePrompts )(\n            __RPC__in IUpdateInstaller * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_AllowSourcePrompts )(\n            __RPC__in IUpdateInstaller * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequiredBeforeInstallation )(\n            __RPC__in IUpdateInstaller * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        END_INTERFACE\n    } IUpdateInstallerVtbl;\n\n    interface IUpdateInstaller\n    {\n        CONST_VTBL struct IUpdateInstallerVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateInstaller_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateInstaller_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateInstaller_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateInstaller_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateInstaller_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateInstaller_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateInstaller_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateInstaller_get_ClientApplicationID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )\n\n#define IUpdateInstaller_put_ClientApplicationID(This,value)\t\\\n    ( (This)->lpVtbl -> put_ClientApplicationID(This,value) )\n\n#define IUpdateInstaller_get_IsForced(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsForced(This,retval) )\n\n#define IUpdateInstaller_put_IsForced(This,value)\t\\\n    ( (This)->lpVtbl -> put_IsForced(This,value) )\n\n#define IUpdateInstaller_get_ParentHwnd(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ParentHwnd(This,retval) )\n\n#define IUpdateInstaller_put_ParentHwnd(This,value)\t\\\n    ( (This)->lpVtbl -> put_ParentHwnd(This,value) )\n\n#define IUpdateInstaller_put_ParentWindow(This,value)\t\\\n    ( (This)->lpVtbl -> put_ParentWindow(This,value) )\n\n#define IUpdateInstaller_get_ParentWindow(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ParentWindow(This,retval) )\n\n#define IUpdateInstaller_get_Updates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Updates(This,retval) )\n\n#define IUpdateInstaller_put_Updates(This,value)\t\\\n    ( (This)->lpVtbl -> put_Updates(This,value) )\n\n#define IUpdateInstaller_BeginInstall(This,onProgressChanged,onCompleted,state,retval)\t\\\n    ( (This)->lpVtbl -> BeginInstall(This,onProgressChanged,onCompleted,state,retval) )\n\n#define IUpdateInstaller_BeginUninstall(This,onProgressChanged,onCompleted,state,retval)\t\\\n    ( (This)->lpVtbl -> BeginUninstall(This,onProgressChanged,onCompleted,state,retval) )\n\n#define IUpdateInstaller_EndInstall(This,value,retval)\t\\\n    ( (This)->lpVtbl -> EndInstall(This,value,retval) )\n\n#define IUpdateInstaller_EndUninstall(This,value,retval)\t\\\n    ( (This)->lpVtbl -> EndUninstall(This,value,retval) )\n\n#define IUpdateInstaller_Install(This,retval)\t\\\n    ( (This)->lpVtbl -> Install(This,retval) )\n\n#define IUpdateInstaller_RunWizard(This,dialogTitle,retval)\t\\\n    ( (This)->lpVtbl -> RunWizard(This,dialogTitle,retval) )\n\n#define IUpdateInstaller_get_IsBusy(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsBusy(This,retval) )\n\n#define IUpdateInstaller_Uninstall(This,retval)\t\\\n    ( (This)->lpVtbl -> Uninstall(This,retval) )\n\n#define IUpdateInstaller_get_AllowSourcePrompts(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AllowSourcePrompts(This,retval) )\n\n#define IUpdateInstaller_put_AllowSourcePrompts(This,value)\t\\\n    ( (This)->lpVtbl -> put_AllowSourcePrompts(This,value) )\n\n#define IUpdateInstaller_get_RebootRequiredBeforeInstallation(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RebootRequiredBeforeInstallation(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateInstaller_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateInstaller2_INTERFACE_DEFINED__\n#define __IUpdateInstaller2_INTERFACE_DEFINED__\n\n/* interface IUpdateInstaller2 */\n/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateInstaller2;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"3442d4fe-224d-4cee-98cf-30e0c4d229e6\")\n    IUpdateInstaller2 : public IUpdateInstaller\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ForceQuiet(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ForceQuiet(\n            /* [in] */ VARIANT_BOOL value) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateInstaller2Vtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateInstaller2 * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateInstaller2 * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateInstaller2 * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [in] */ __RPC__in BSTR value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsForced )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IsForced )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][restricted][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ParentHwnd )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt HWND *retval);\n\n        /* [helpstring][restricted][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ParentHwnd )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [unique][in] */ __RPC__in_opt HWND value);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ParentWindow )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [unique][in] */ __RPC__in_opt IUnknown *value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ParentWindow )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Updates )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateCollection **retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Updates )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [in] */ __RPC__in_opt IUpdateCollection *value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginInstall )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [in] */ __RPC__in_opt IUnknown *onProgressChanged,\n            /* [in] */ __RPC__in_opt IUnknown *onCompleted,\n            /* [in] */ VARIANT state,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationJob **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *BeginUninstall )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [in] */ __RPC__in_opt IUnknown *onProgressChanged,\n            /* [in] */ __RPC__in_opt IUnknown *onCompleted,\n            /* [in] */ VARIANT state,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationJob **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndInstall )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [in] */ __RPC__in_opt IInstallationJob *value,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EndUninstall )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [in] */ __RPC__in_opt IInstallationJob *value,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Install )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RunWizard )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [defaultvalue][unique][in] */ __RPC__in_opt BSTR dialogTitle,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsBusy )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Uninstall )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IInstallationResult **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AllowSourcePrompts )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_AllowSourcePrompts )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RebootRequiredBeforeInstallation )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ForceQuiet )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ForceQuiet )(\n            __RPC__in IUpdateInstaller2 * This,\n            /* [in] */ VARIANT_BOOL value);\n\n        END_INTERFACE\n    } IUpdateInstaller2Vtbl;\n\n    interface IUpdateInstaller2\n    {\n        CONST_VTBL struct IUpdateInstaller2Vtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateInstaller2_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateInstaller2_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateInstaller2_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateInstaller2_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateInstaller2_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateInstaller2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateInstaller2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateInstaller2_get_ClientApplicationID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )\n\n#define IUpdateInstaller2_put_ClientApplicationID(This,value)\t\\\n    ( (This)->lpVtbl -> put_ClientApplicationID(This,value) )\n\n#define IUpdateInstaller2_get_IsForced(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsForced(This,retval) )\n\n#define IUpdateInstaller2_put_IsForced(This,value)\t\\\n    ( (This)->lpVtbl -> put_IsForced(This,value) )\n\n#define IUpdateInstaller2_get_ParentHwnd(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ParentHwnd(This,retval) )\n\n#define IUpdateInstaller2_put_ParentHwnd(This,value)\t\\\n    ( (This)->lpVtbl -> put_ParentHwnd(This,value) )\n\n#define IUpdateInstaller2_put_ParentWindow(This,value)\t\\\n    ( (This)->lpVtbl -> put_ParentWindow(This,value) )\n\n#define IUpdateInstaller2_get_ParentWindow(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ParentWindow(This,retval) )\n\n#define IUpdateInstaller2_get_Updates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Updates(This,retval) )\n\n#define IUpdateInstaller2_put_Updates(This,value)\t\\\n    ( (This)->lpVtbl -> put_Updates(This,value) )\n\n#define IUpdateInstaller2_BeginInstall(This,onProgressChanged,onCompleted,state,retval)\t\\\n    ( (This)->lpVtbl -> BeginInstall(This,onProgressChanged,onCompleted,state,retval) )\n\n#define IUpdateInstaller2_BeginUninstall(This,onProgressChanged,onCompleted,state,retval)\t\\\n    ( (This)->lpVtbl -> BeginUninstall(This,onProgressChanged,onCompleted,state,retval) )\n\n#define IUpdateInstaller2_EndInstall(This,value,retval)\t\\\n    ( (This)->lpVtbl -> EndInstall(This,value,retval) )\n\n#define IUpdateInstaller2_EndUninstall(This,value,retval)\t\\\n    ( (This)->lpVtbl -> EndUninstall(This,value,retval) )\n\n#define IUpdateInstaller2_Install(This,retval)\t\\\n    ( (This)->lpVtbl -> Install(This,retval) )\n\n#define IUpdateInstaller2_RunWizard(This,dialogTitle,retval)\t\\\n    ( (This)->lpVtbl -> RunWizard(This,dialogTitle,retval) )\n\n#define IUpdateInstaller2_get_IsBusy(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsBusy(This,retval) )\n\n#define IUpdateInstaller2_Uninstall(This,retval)\t\\\n    ( (This)->lpVtbl -> Uninstall(This,retval) )\n\n#define IUpdateInstaller2_get_AllowSourcePrompts(This,retval)\t\\\n    ( (This)->lpVtbl -> get_AllowSourcePrompts(This,retval) )\n\n#define IUpdateInstaller2_put_AllowSourcePrompts(This,value)\t\\\n    ( (This)->lpVtbl -> put_AllowSourcePrompts(This,value) )\n\n#define IUpdateInstaller2_get_RebootRequiredBeforeInstallation(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RebootRequiredBeforeInstallation(This,retval) )\n\n\n#define IUpdateInstaller2_get_ForceQuiet(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ForceQuiet(This,retval) )\n\n#define IUpdateInstaller2_put_ForceQuiet(This,value)\t\\\n    ( (This)->lpVtbl -> put_ForceQuiet(This,value) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateInstaller2_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateSession_INTERFACE_DEFINED__\n#define __IUpdateSession_INTERFACE_DEFINED__\n\n/* interface IUpdateSession */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateSession;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"816858a4-260d-4260-933a-2585f1abc76b\")\n    IUpdateSession : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ClientApplicationID(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ClientApplicationID(\n            /* [in] */ __RPC__in BSTR value) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ReadOnly(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_WebProxy(\n            /* [retval][out] */ __RPC__deref_out_opt IWebProxy **retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_WebProxy(\n            /* [unique][in] */ __RPC__in_opt IWebProxy *value) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CreateUpdateSearcher(\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateSearcher **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CreateUpdateDownloader(\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateDownloader **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CreateUpdateInstaller(\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateInstaller **retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateSessionVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateSession * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateSession * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateSession * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateSession * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateSession * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateSession * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateSession * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(\n            __RPC__in IUpdateSession * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(\n            __RPC__in IUpdateSession * This,\n            /* [in] */ __RPC__in BSTR value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReadOnly )(\n            __RPC__in IUpdateSession * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_WebProxy )(\n            __RPC__in IUpdateSession * This,\n            /* [retval][out] */ __RPC__deref_out_opt IWebProxy **retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_WebProxy )(\n            __RPC__in IUpdateSession * This,\n            /* [unique][in] */ __RPC__in_opt IWebProxy *value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CreateUpdateSearcher )(\n            __RPC__in IUpdateSession * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateSearcher **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CreateUpdateDownloader )(\n            __RPC__in IUpdateSession * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateDownloader **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CreateUpdateInstaller )(\n            __RPC__in IUpdateSession * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateInstaller **retval);\n\n        END_INTERFACE\n    } IUpdateSessionVtbl;\n\n    interface IUpdateSession\n    {\n        CONST_VTBL struct IUpdateSessionVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateSession_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateSession_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateSession_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateSession_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateSession_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateSession_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateSession_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateSession_get_ClientApplicationID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )\n\n#define IUpdateSession_put_ClientApplicationID(This,value)\t\\\n    ( (This)->lpVtbl -> put_ClientApplicationID(This,value) )\n\n#define IUpdateSession_get_ReadOnly(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ReadOnly(This,retval) )\n\n#define IUpdateSession_get_WebProxy(This,retval)\t\\\n    ( (This)->lpVtbl -> get_WebProxy(This,retval) )\n\n#define IUpdateSession_put_WebProxy(This,value)\t\\\n    ( (This)->lpVtbl -> put_WebProxy(This,value) )\n\n#define IUpdateSession_CreateUpdateSearcher(This,retval)\t\\\n    ( (This)->lpVtbl -> CreateUpdateSearcher(This,retval) )\n\n#define IUpdateSession_CreateUpdateDownloader(This,retval)\t\\\n    ( (This)->lpVtbl -> CreateUpdateDownloader(This,retval) )\n\n#define IUpdateSession_CreateUpdateInstaller(This,retval)\t\\\n    ( (This)->lpVtbl -> CreateUpdateInstaller(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateSession_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateSession2_INTERFACE_DEFINED__\n#define __IUpdateSession2_INTERFACE_DEFINED__\n\n/* interface IUpdateSession2 */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateSession2;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"91caf7b0-eb23-49ed-9937-c52d817f46f7\")\n    IUpdateSession2 : public IUpdateSession\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UserLocale(\n            /* [retval][out] */ __RPC__out LCID *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_UserLocale(\n            /* [in] */ LCID lcid) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateSession2Vtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateSession2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateSession2 * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateSession2 * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateSession2 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateSession2 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateSession2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateSession2 * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(\n            __RPC__in IUpdateSession2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(\n            __RPC__in IUpdateSession2 * This,\n            /* [in] */ __RPC__in BSTR value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReadOnly )(\n            __RPC__in IUpdateSession2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_WebProxy )(\n            __RPC__in IUpdateSession2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IWebProxy **retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_WebProxy )(\n            __RPC__in IUpdateSession2 * This,\n            /* [unique][in] */ __RPC__in_opt IWebProxy *value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CreateUpdateSearcher )(\n            __RPC__in IUpdateSession2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateSearcher **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CreateUpdateDownloader )(\n            __RPC__in IUpdateSession2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateDownloader **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CreateUpdateInstaller )(\n            __RPC__in IUpdateSession2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateInstaller **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UserLocale )(\n            __RPC__in IUpdateSession2 * This,\n            /* [retval][out] */ __RPC__out LCID *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_UserLocale )(\n            __RPC__in IUpdateSession2 * This,\n            /* [in] */ LCID lcid);\n\n        END_INTERFACE\n    } IUpdateSession2Vtbl;\n\n    interface IUpdateSession2\n    {\n        CONST_VTBL struct IUpdateSession2Vtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateSession2_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateSession2_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateSession2_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateSession2_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateSession2_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateSession2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateSession2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateSession2_get_ClientApplicationID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )\n\n#define IUpdateSession2_put_ClientApplicationID(This,value)\t\\\n    ( (This)->lpVtbl -> put_ClientApplicationID(This,value) )\n\n#define IUpdateSession2_get_ReadOnly(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ReadOnly(This,retval) )\n\n#define IUpdateSession2_get_WebProxy(This,retval)\t\\\n    ( (This)->lpVtbl -> get_WebProxy(This,retval) )\n\n#define IUpdateSession2_put_WebProxy(This,value)\t\\\n    ( (This)->lpVtbl -> put_WebProxy(This,value) )\n\n#define IUpdateSession2_CreateUpdateSearcher(This,retval)\t\\\n    ( (This)->lpVtbl -> CreateUpdateSearcher(This,retval) )\n\n#define IUpdateSession2_CreateUpdateDownloader(This,retval)\t\\\n    ( (This)->lpVtbl -> CreateUpdateDownloader(This,retval) )\n\n#define IUpdateSession2_CreateUpdateInstaller(This,retval)\t\\\n    ( (This)->lpVtbl -> CreateUpdateInstaller(This,retval) )\n\n\n#define IUpdateSession2_get_UserLocale(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UserLocale(This,retval) )\n\n#define IUpdateSession2_put_UserLocale(This,lcid)\t\\\n    ( (This)->lpVtbl -> put_UserLocale(This,lcid) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateSession2_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateSession3_INTERFACE_DEFINED__\n#define __IUpdateSession3_INTERFACE_DEFINED__\n\n/* interface IUpdateSession3 */\n/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateSession3;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"918EFD1E-B5D8-4c90-8540-AEB9BDC56F9D\")\n    IUpdateSession3 : public IUpdateSession2\n    {\n    public:\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CreateUpdateServiceManager(\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateServiceManager2 **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE QueryHistory(\n            /* [in] */ __RPC__in BSTR criteria,\n            /* [in] */ LONG startIndex,\n            /* [in] */ LONG count,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateHistoryEntryCollection **retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateSession3Vtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateSession3 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateSession3 * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateSession3 * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateSession3 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateSession3 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateSession3 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateSession3 * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(\n            __RPC__in IUpdateSession3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(\n            __RPC__in IUpdateSession3 * This,\n            /* [in] */ __RPC__in BSTR value);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReadOnly )(\n            __RPC__in IUpdateSession3 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_WebProxy )(\n            __RPC__in IUpdateSession3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IWebProxy **retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_WebProxy )(\n            __RPC__in IUpdateSession3 * This,\n            /* [unique][in] */ __RPC__in_opt IWebProxy *value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CreateUpdateSearcher )(\n            __RPC__in IUpdateSession3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateSearcher **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CreateUpdateDownloader )(\n            __RPC__in IUpdateSession3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateDownloader **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CreateUpdateInstaller )(\n            __RPC__in IUpdateSession3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateInstaller **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UserLocale )(\n            __RPC__in IUpdateSession3 * This,\n            /* [retval][out] */ __RPC__out LCID *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_UserLocale )(\n            __RPC__in IUpdateSession3 * This,\n            /* [in] */ LCID lcid);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CreateUpdateServiceManager )(\n            __RPC__in IUpdateSession3 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateServiceManager2 **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *QueryHistory )(\n            __RPC__in IUpdateSession3 * This,\n            /* [in] */ __RPC__in BSTR criteria,\n            /* [in] */ LONG startIndex,\n            /* [in] */ LONG count,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateHistoryEntryCollection **retval);\n\n        END_INTERFACE\n    } IUpdateSession3Vtbl;\n\n    interface IUpdateSession3\n    {\n        CONST_VTBL struct IUpdateSession3Vtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateSession3_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateSession3_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateSession3_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateSession3_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateSession3_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateSession3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateSession3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateSession3_get_ClientApplicationID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )\n\n#define IUpdateSession3_put_ClientApplicationID(This,value)\t\\\n    ( (This)->lpVtbl -> put_ClientApplicationID(This,value) )\n\n#define IUpdateSession3_get_ReadOnly(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ReadOnly(This,retval) )\n\n#define IUpdateSession3_get_WebProxy(This,retval)\t\\\n    ( (This)->lpVtbl -> get_WebProxy(This,retval) )\n\n#define IUpdateSession3_put_WebProxy(This,value)\t\\\n    ( (This)->lpVtbl -> put_WebProxy(This,value) )\n\n#define IUpdateSession3_CreateUpdateSearcher(This,retval)\t\\\n    ( (This)->lpVtbl -> CreateUpdateSearcher(This,retval) )\n\n#define IUpdateSession3_CreateUpdateDownloader(This,retval)\t\\\n    ( (This)->lpVtbl -> CreateUpdateDownloader(This,retval) )\n\n#define IUpdateSession3_CreateUpdateInstaller(This,retval)\t\\\n    ( (This)->lpVtbl -> CreateUpdateInstaller(This,retval) )\n\n\n#define IUpdateSession3_get_UserLocale(This,retval)\t\\\n    ( (This)->lpVtbl -> get_UserLocale(This,retval) )\n\n#define IUpdateSession3_put_UserLocale(This,lcid)\t\\\n    ( (This)->lpVtbl -> put_UserLocale(This,lcid) )\n\n\n#define IUpdateSession3_CreateUpdateServiceManager(This,retval)\t\\\n    ( (This)->lpVtbl -> CreateUpdateServiceManager(This,retval) )\n\n#define IUpdateSession3_QueryHistory(This,criteria,startIndex,count,retval)\t\\\n    ( (This)->lpVtbl -> QueryHistory(This,criteria,startIndex,count,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateSession3_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateService_INTERFACE_DEFINED__\n#define __IUpdateService_INTERFACE_DEFINED__\n\n/* interface IUpdateService */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateService;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"76b3b17e-aed6-4da5-85f0-83587f81abe3\")\n    IUpdateService : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Name(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ContentValidationCert(\n            /* [retval][out] */ __RPC__out VARIANT *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ExpirationDate(\n            /* [retval][out] */ __RPC__out DATE *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsManaged(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsRegisteredWithAU(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IssueDate(\n            /* [retval][out] */ __RPC__out DATE *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_OffersWindowsUpdates(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RedirectUrls(\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ServiceID(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsScanPackageService(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CanRegisterWithAU(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ServiceUrl(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_SetupPrefix(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateServiceVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateService * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateService * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateService * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateService * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateService * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateService * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateService * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Name )(\n            __RPC__in IUpdateService * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ContentValidationCert )(\n            __RPC__in IUpdateService * This,\n            /* [retval][out] */ __RPC__out VARIANT *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ExpirationDate )(\n            __RPC__in IUpdateService * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsManaged )(\n            __RPC__in IUpdateService * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsRegisteredWithAU )(\n            __RPC__in IUpdateService * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IssueDate )(\n            __RPC__in IUpdateService * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_OffersWindowsUpdates )(\n            __RPC__in IUpdateService * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RedirectUrls )(\n            __RPC__in IUpdateService * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceID )(\n            __RPC__in IUpdateService * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsScanPackageService )(\n            __RPC__in IUpdateService * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRegisterWithAU )(\n            __RPC__in IUpdateService * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceUrl )(\n            __RPC__in IUpdateService * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SetupPrefix )(\n            __RPC__in IUpdateService * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        END_INTERFACE\n    } IUpdateServiceVtbl;\n\n    interface IUpdateService\n    {\n        CONST_VTBL struct IUpdateServiceVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateService_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateService_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateService_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateService_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateService_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateService_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateService_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateService_get_Name(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Name(This,retval) )\n\n#define IUpdateService_get_ContentValidationCert(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ContentValidationCert(This,retval) )\n\n#define IUpdateService_get_ExpirationDate(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ExpirationDate(This,retval) )\n\n#define IUpdateService_get_IsManaged(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsManaged(This,retval) )\n\n#define IUpdateService_get_IsRegisteredWithAU(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsRegisteredWithAU(This,retval) )\n\n#define IUpdateService_get_IssueDate(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IssueDate(This,retval) )\n\n#define IUpdateService_get_OffersWindowsUpdates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_OffersWindowsUpdates(This,retval) )\n\n#define IUpdateService_get_RedirectUrls(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RedirectUrls(This,retval) )\n\n#define IUpdateService_get_ServiceID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ServiceID(This,retval) )\n\n#define IUpdateService_get_IsScanPackageService(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsScanPackageService(This,retval) )\n\n#define IUpdateService_get_CanRegisterWithAU(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CanRegisterWithAU(This,retval) )\n\n#define IUpdateService_get_ServiceUrl(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ServiceUrl(This,retval) )\n\n#define IUpdateService_get_SetupPrefix(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SetupPrefix(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateService_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateService2_INTERFACE_DEFINED__\n#define __IUpdateService2_INTERFACE_DEFINED__\n\n/* interface IUpdateService2 */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateService2;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"1518b460-6518-4172-940f-c75883b24ceb\")\n    IUpdateService2 : public IUpdateService\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsDefaultAUService(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateService2Vtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateService2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateService2 * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateService2 * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateService2 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateService2 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateService2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateService2 * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Name )(\n            __RPC__in IUpdateService2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ContentValidationCert )(\n            __RPC__in IUpdateService2 * This,\n            /* [retval][out] */ __RPC__out VARIANT *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ExpirationDate )(\n            __RPC__in IUpdateService2 * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsManaged )(\n            __RPC__in IUpdateService2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsRegisteredWithAU )(\n            __RPC__in IUpdateService2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IssueDate )(\n            __RPC__in IUpdateService2 * This,\n            /* [retval][out] */ __RPC__out DATE *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_OffersWindowsUpdates )(\n            __RPC__in IUpdateService2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RedirectUrls )(\n            __RPC__in IUpdateService2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IStringCollection **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceID )(\n            __RPC__in IUpdateService2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsScanPackageService )(\n            __RPC__in IUpdateService2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CanRegisterWithAU )(\n            __RPC__in IUpdateService2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceUrl )(\n            __RPC__in IUpdateService2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SetupPrefix )(\n            __RPC__in IUpdateService2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultAUService )(\n            __RPC__in IUpdateService2 * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        END_INTERFACE\n    } IUpdateService2Vtbl;\n\n    interface IUpdateService2\n    {\n        CONST_VTBL struct IUpdateService2Vtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateService2_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateService2_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateService2_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateService2_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateService2_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateService2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateService2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateService2_get_Name(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Name(This,retval) )\n\n#define IUpdateService2_get_ContentValidationCert(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ContentValidationCert(This,retval) )\n\n#define IUpdateService2_get_ExpirationDate(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ExpirationDate(This,retval) )\n\n#define IUpdateService2_get_IsManaged(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsManaged(This,retval) )\n\n#define IUpdateService2_get_IsRegisteredWithAU(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsRegisteredWithAU(This,retval) )\n\n#define IUpdateService2_get_IssueDate(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IssueDate(This,retval) )\n\n#define IUpdateService2_get_OffersWindowsUpdates(This,retval)\t\\\n    ( (This)->lpVtbl -> get_OffersWindowsUpdates(This,retval) )\n\n#define IUpdateService2_get_RedirectUrls(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RedirectUrls(This,retval) )\n\n#define IUpdateService2_get_ServiceID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ServiceID(This,retval) )\n\n#define IUpdateService2_get_IsScanPackageService(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsScanPackageService(This,retval) )\n\n#define IUpdateService2_get_CanRegisterWithAU(This,retval)\t\\\n    ( (This)->lpVtbl -> get_CanRegisterWithAU(This,retval) )\n\n#define IUpdateService2_get_ServiceUrl(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ServiceUrl(This,retval) )\n\n#define IUpdateService2_get_SetupPrefix(This,retval)\t\\\n    ( (This)->lpVtbl -> get_SetupPrefix(This,retval) )\n\n\n#define IUpdateService2_get_IsDefaultAUService(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsDefaultAUService(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateService2_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateServiceCollection_INTERFACE_DEFINED__\n#define __IUpdateServiceCollection_INTERFACE_DEFINED__\n\n/* interface IUpdateServiceCollection */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateServiceCollection;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"9b0353aa-0e52-44ff-b8b0-1f7fa0437f88\")\n    IUpdateServiceCollection : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Item(\n            /* [in] */ LONG index,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateService **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get__NewEnum(\n            /* [retval][out] */ __RPC__deref_out_opt IUnknown **retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Count(\n            /* [retval][out] */ __RPC__out LONG *retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateServiceCollectionVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateServiceCollection * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateServiceCollection * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateServiceCollection * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateServiceCollection * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateServiceCollection * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateServiceCollection * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateServiceCollection * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(\n            __RPC__in IUpdateServiceCollection * This,\n            /* [in] */ LONG index,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateService **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(\n            __RPC__in IUpdateServiceCollection * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUnknown **retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(\n            __RPC__in IUpdateServiceCollection * This,\n            /* [retval][out] */ __RPC__out LONG *retval);\n\n        END_INTERFACE\n    } IUpdateServiceCollectionVtbl;\n\n    interface IUpdateServiceCollection\n    {\n        CONST_VTBL struct IUpdateServiceCollectionVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateServiceCollection_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateServiceCollection_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateServiceCollection_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateServiceCollection_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateServiceCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateServiceCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateServiceCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateServiceCollection_get_Item(This,index,retval)\t\\\n    ( (This)->lpVtbl -> get_Item(This,index,retval) )\n\n#define IUpdateServiceCollection_get__NewEnum(This,retval)\t\\\n    ( (This)->lpVtbl -> get__NewEnum(This,retval) )\n\n#define IUpdateServiceCollection_get_Count(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Count(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateServiceCollection_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateServiceRegistration_INTERFACE_DEFINED__\n#define __IUpdateServiceRegistration_INTERFACE_DEFINED__\n\n/* interface IUpdateServiceRegistration */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateServiceRegistration;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"dde02280-12b3-4e0b-937b-6747f6acb286\")\n    IUpdateServiceRegistration : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RegistrationState(\n            /* [retval][out] */ __RPC__out UpdateServiceRegistrationState *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ServiceID(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_IsPendingRegistrationWithAU(\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval) = 0;\n\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Service(\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateService2 **retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateServiceRegistrationVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateServiceRegistration * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateServiceRegistration * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateServiceRegistration * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateServiceRegistration * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateServiceRegistration * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateServiceRegistration * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateServiceRegistration * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RegistrationState )(\n            __RPC__in IUpdateServiceRegistration * This,\n            /* [retval][out] */ __RPC__out UpdateServiceRegistrationState *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ServiceID )(\n            __RPC__in IUpdateServiceRegistration * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IsPendingRegistrationWithAU )(\n            __RPC__in IUpdateServiceRegistration * This,\n            /* [retval][out] */ __RPC__out VARIANT_BOOL *retval);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Service )(\n            __RPC__in IUpdateServiceRegistration * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateService2 **retval);\n\n        END_INTERFACE\n    } IUpdateServiceRegistrationVtbl;\n\n    interface IUpdateServiceRegistration\n    {\n        CONST_VTBL struct IUpdateServiceRegistrationVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateServiceRegistration_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateServiceRegistration_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateServiceRegistration_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateServiceRegistration_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateServiceRegistration_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateServiceRegistration_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateServiceRegistration_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateServiceRegistration_get_RegistrationState(This,retval)\t\\\n    ( (This)->lpVtbl -> get_RegistrationState(This,retval) )\n\n#define IUpdateServiceRegistration_get_ServiceID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ServiceID(This,retval) )\n\n#define IUpdateServiceRegistration_get_IsPendingRegistrationWithAU(This,retval)\t\\\n    ( (This)->lpVtbl -> get_IsPendingRegistrationWithAU(This,retval) )\n\n#define IUpdateServiceRegistration_get_Service(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Service(This,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateServiceRegistration_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateServiceManager_INTERFACE_DEFINED__\n#define __IUpdateServiceManager_INTERFACE_DEFINED__\n\n/* interface IUpdateServiceManager */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateServiceManager;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"23857e3c-02ba-44a3-9423-b1c900805f37\")\n    IUpdateServiceManager : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Services(\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateServiceCollection **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE AddService(\n            /* [in] */ __RPC__in BSTR serviceID,\n            /* [in] */ __RPC__in BSTR authorizationCabPath,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateService **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RegisterServiceWithAU(\n            /* [in] */ __RPC__in BSTR serviceID) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RemoveService(\n            /* [in] */ __RPC__in BSTR serviceID) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE UnregisterServiceWithAU(\n            /* [in] */ __RPC__in BSTR serviceID) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE AddScanPackageService(\n            /* [in] */ __RPC__in BSTR serviceName,\n            /* [in] */ __RPC__in BSTR scanFileLocation,\n            /* [defaultvalue][in] */ LONG flags,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateService **ppService) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetOption(\n            /* [in] */ __RPC__in BSTR optionName,\n            /* [in] */ VARIANT optionValue) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateServiceManagerVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateServiceManager * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateServiceManager * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateServiceManager * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateServiceManager * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateServiceManager * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateServiceManager * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateServiceManager * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Services )(\n            __RPC__in IUpdateServiceManager * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateServiceCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AddService )(\n            __RPC__in IUpdateServiceManager * This,\n            /* [in] */ __RPC__in BSTR serviceID,\n            /* [in] */ __RPC__in BSTR authorizationCabPath,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateService **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RegisterServiceWithAU )(\n            __RPC__in IUpdateServiceManager * This,\n            /* [in] */ __RPC__in BSTR serviceID);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RemoveService )(\n            __RPC__in IUpdateServiceManager * This,\n            /* [in] */ __RPC__in BSTR serviceID);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *UnregisterServiceWithAU )(\n            __RPC__in IUpdateServiceManager * This,\n            /* [in] */ __RPC__in BSTR serviceID);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AddScanPackageService )(\n            __RPC__in IUpdateServiceManager * This,\n            /* [in] */ __RPC__in BSTR serviceName,\n            /* [in] */ __RPC__in BSTR scanFileLocation,\n            /* [defaultvalue][in] */ LONG flags,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateService **ppService);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetOption )(\n            __RPC__in IUpdateServiceManager * This,\n            /* [in] */ __RPC__in BSTR optionName,\n            /* [in] */ VARIANT optionValue);\n\n        END_INTERFACE\n    } IUpdateServiceManagerVtbl;\n\n    interface IUpdateServiceManager\n    {\n        CONST_VTBL struct IUpdateServiceManagerVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateServiceManager_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateServiceManager_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateServiceManager_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateServiceManager_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateServiceManager_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateServiceManager_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateServiceManager_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateServiceManager_get_Services(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Services(This,retval) )\n\n#define IUpdateServiceManager_AddService(This,serviceID,authorizationCabPath,retval)\t\\\n    ( (This)->lpVtbl -> AddService(This,serviceID,authorizationCabPath,retval) )\n\n#define IUpdateServiceManager_RegisterServiceWithAU(This,serviceID)\t\\\n    ( (This)->lpVtbl -> RegisterServiceWithAU(This,serviceID) )\n\n#define IUpdateServiceManager_RemoveService(This,serviceID)\t\\\n    ( (This)->lpVtbl -> RemoveService(This,serviceID) )\n\n#define IUpdateServiceManager_UnregisterServiceWithAU(This,serviceID)\t\\\n    ( (This)->lpVtbl -> UnregisterServiceWithAU(This,serviceID) )\n\n#define IUpdateServiceManager_AddScanPackageService(This,serviceName,scanFileLocation,flags,ppService)\t\\\n    ( (This)->lpVtbl -> AddScanPackageService(This,serviceName,scanFileLocation,flags,ppService) )\n\n#define IUpdateServiceManager_SetOption(This,optionName,optionValue)\t\\\n    ( (This)->lpVtbl -> SetOption(This,optionName,optionValue) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateServiceManager_INTERFACE_DEFINED__ */\n\n\n#ifndef __IUpdateServiceManager2_INTERFACE_DEFINED__\n#define __IUpdateServiceManager2_INTERFACE_DEFINED__\n\n/* interface IUpdateServiceManager2 */\n/* [hidden][unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IUpdateServiceManager2;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"0bb8531d-7e8d-424f-986c-a0b8f60a3e7b\")\n    IUpdateServiceManager2 : public IUpdateServiceManager\n    {\n    public:\n        virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ClientApplicationID(\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval) = 0;\n\n        virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ClientApplicationID(\n            /* [in] */ __RPC__in BSTR value) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE QueryServiceRegistration(\n            /* [in] */ __RPC__in BSTR serviceID,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateServiceRegistration **retval) = 0;\n\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE AddService2(\n            /* [in] */ __RPC__in BSTR serviceID,\n            /* [in] */ LONG flags,\n            /* [in] */ __RPC__in BSTR authorizationCabPath,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateServiceRegistration **retval) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IUpdateServiceManager2Vtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IUpdateServiceManager2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IUpdateServiceManager2 * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IUpdateServiceManager2 * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IUpdateServiceManager2 * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IUpdateServiceManager2 * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IUpdateServiceManager2 * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IUpdateServiceManager2 * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Services )(\n            __RPC__in IUpdateServiceManager2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateServiceCollection **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AddService )(\n            __RPC__in IUpdateServiceManager2 * This,\n            /* [in] */ __RPC__in BSTR serviceID,\n            /* [in] */ __RPC__in BSTR authorizationCabPath,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateService **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RegisterServiceWithAU )(\n            __RPC__in IUpdateServiceManager2 * This,\n            /* [in] */ __RPC__in BSTR serviceID);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RemoveService )(\n            __RPC__in IUpdateServiceManager2 * This,\n            /* [in] */ __RPC__in BSTR serviceID);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *UnregisterServiceWithAU )(\n            __RPC__in IUpdateServiceManager2 * This,\n            /* [in] */ __RPC__in BSTR serviceID);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AddScanPackageService )(\n            __RPC__in IUpdateServiceManager2 * This,\n            /* [in] */ __RPC__in BSTR serviceName,\n            /* [in] */ __RPC__in BSTR scanFileLocation,\n            /* [defaultvalue][in] */ LONG flags,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateService **ppService);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetOption )(\n            __RPC__in IUpdateServiceManager2 * This,\n            /* [in] */ __RPC__in BSTR optionName,\n            /* [in] */ VARIANT optionValue);\n\n        /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClientApplicationID )(\n            __RPC__in IUpdateServiceManager2 * This,\n            /* [retval][out] */ __RPC__deref_out_opt BSTR *retval);\n\n        /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClientApplicationID )(\n            __RPC__in IUpdateServiceManager2 * This,\n            /* [in] */ __RPC__in BSTR value);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *QueryServiceRegistration )(\n            __RPC__in IUpdateServiceManager2 * This,\n            /* [in] */ __RPC__in BSTR serviceID,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateServiceRegistration **retval);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *AddService2 )(\n            __RPC__in IUpdateServiceManager2 * This,\n            /* [in] */ __RPC__in BSTR serviceID,\n            /* [in] */ LONG flags,\n            /* [in] */ __RPC__in BSTR authorizationCabPath,\n            /* [retval][out] */ __RPC__deref_out_opt IUpdateServiceRegistration **retval);\n\n        END_INTERFACE\n    } IUpdateServiceManager2Vtbl;\n\n    interface IUpdateServiceManager2\n    {\n        CONST_VTBL struct IUpdateServiceManager2Vtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IUpdateServiceManager2_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IUpdateServiceManager2_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IUpdateServiceManager2_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IUpdateServiceManager2_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IUpdateServiceManager2_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IUpdateServiceManager2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IUpdateServiceManager2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IUpdateServiceManager2_get_Services(This,retval)\t\\\n    ( (This)->lpVtbl -> get_Services(This,retval) )\n\n#define IUpdateServiceManager2_AddService(This,serviceID,authorizationCabPath,retval)\t\\\n    ( (This)->lpVtbl -> AddService(This,serviceID,authorizationCabPath,retval) )\n\n#define IUpdateServiceManager2_RegisterServiceWithAU(This,serviceID)\t\\\n    ( (This)->lpVtbl -> RegisterServiceWithAU(This,serviceID) )\n\n#define IUpdateServiceManager2_RemoveService(This,serviceID)\t\\\n    ( (This)->lpVtbl -> RemoveService(This,serviceID) )\n\n#define IUpdateServiceManager2_UnregisterServiceWithAU(This,serviceID)\t\\\n    ( (This)->lpVtbl -> UnregisterServiceWithAU(This,serviceID) )\n\n#define IUpdateServiceManager2_AddScanPackageService(This,serviceName,scanFileLocation,flags,ppService)\t\\\n    ( (This)->lpVtbl -> AddScanPackageService(This,serviceName,scanFileLocation,flags,ppService) )\n\n#define IUpdateServiceManager2_SetOption(This,optionName,optionValue)\t\\\n    ( (This)->lpVtbl -> SetOption(This,optionName,optionValue) )\n\n\n#define IUpdateServiceManager2_get_ClientApplicationID(This,retval)\t\\\n    ( (This)->lpVtbl -> get_ClientApplicationID(This,retval) )\n\n#define IUpdateServiceManager2_put_ClientApplicationID(This,value)\t\\\n    ( (This)->lpVtbl -> put_ClientApplicationID(This,value) )\n\n#define IUpdateServiceManager2_QueryServiceRegistration(This,serviceID,retval)\t\\\n    ( (This)->lpVtbl -> QueryServiceRegistration(This,serviceID,retval) )\n\n#define IUpdateServiceManager2_AddService2(This,serviceID,flags,authorizationCabPath,retval)\t\\\n    ( (This)->lpVtbl -> AddService2(This,serviceID,flags,authorizationCabPath,retval) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IUpdateServiceManager2_INTERFACE_DEFINED__ */\n\n\n#ifndef __IInstallationAgent_INTERFACE_DEFINED__\n#define __IInstallationAgent_INTERFACE_DEFINED__\n\n/* interface IInstallationAgent */\n/* [unique][uuid][nonextensible][dual][oleautomation][object][helpstring] */\n\n\nEXTERN_C const IID IID_IInstallationAgent;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n    MIDL_INTERFACE(\"925cbc18-a2ea-4648-bf1c-ec8badcfe20a\")\n    IInstallationAgent : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RecordInstallationResult(\n            /* [in] */ __RPC__in BSTR installationResultCookie,\n            /* [in] */ LONG hresult,\n            /* [in] */ __RPC__in_opt IStringCollection *extendedReportingData) = 0;\n\n    };\n\n#else \t/* C style interface */\n\n    typedef struct IInstallationAgentVtbl\n    {\n        BEGIN_INTERFACE\n\n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(\n            __RPC__in IInstallationAgent * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [annotation][iid_is][out] */\n            __RPC__deref_out  void **ppvObject);\n\n        ULONG ( STDMETHODCALLTYPE *AddRef )(\n            __RPC__in IInstallationAgent * This);\n\n        ULONG ( STDMETHODCALLTYPE *Release )(\n            __RPC__in IInstallationAgent * This);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(\n            __RPC__in IInstallationAgent * This,\n            /* [out] */ __RPC__out UINT *pctinfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(\n            __RPC__in IInstallationAgent * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);\n\n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(\n            __RPC__in IInstallationAgent * This,\n            /* [in] */ __RPC__in REFIID riid,\n            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,\n            /* [range][in] */ __RPC__in_range(0,16384) UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);\n\n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(\n            IInstallationAgent * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n\n        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RecordInstallationResult )(\n            __RPC__in IInstallationAgent * This,\n            /* [in] */ __RPC__in BSTR installationResultCookie,\n            /* [in] */ LONG hresult,\n            /* [in] */ __RPC__in_opt IStringCollection *extendedReportingData);\n\n        END_INTERFACE\n    } IInstallationAgentVtbl;\n\n    interface IInstallationAgent\n    {\n        CONST_VTBL struct IInstallationAgentVtbl *lpVtbl;\n    };\n\n\n\n#ifdef COBJMACROS\n\n\n#define IInstallationAgent_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )\n\n#define IInstallationAgent_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) )\n\n#define IInstallationAgent_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) )\n\n\n#define IInstallationAgent_GetTypeInfoCount(This,pctinfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )\n\n#define IInstallationAgent_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )\n\n#define IInstallationAgent_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )\n\n#define IInstallationAgent_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )\n\n\n#define IInstallationAgent_RecordInstallationResult(This,installationResultCookie,hresult,extendedReportingData)\t\\\n    ( (This)->lpVtbl -> RecordInstallationResult(This,installationResultCookie,hresult,extendedReportingData) )\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __IInstallationAgent_INTERFACE_DEFINED__ */\n\n\n\n#ifndef __WUApiLib_LIBRARY_DEFINED__\n#define __WUApiLib_LIBRARY_DEFINED__\n\n/* library WUApiLib */\n/* [helpstring][version][uuid] */\n\ntypedef /* [v1_enum][helpstring][public] */\nenum tagUpdateLockdownOption\n    {\tuloForWebsiteAccess\t= 0x1\n    } \tUpdateLockdownOption;\n\ntypedef /* [v1_enum][helpstring][public] */\nenum tagAddServiceFlag\n    {\tasfAllowPendingRegistration\t= 0x1,\n\tasfAllowOnlineRegistration\t= 0x2,\n\tasfRegisterServiceWithAU\t= 0x4\n    } \tAddServiceFlag;\n\ntypedef /* [v1_enum][helpstring][public] */\nenum tagUpdateServiceOption\n    {\tusoNonVolatileService\t= 0x1\n    } \tUpdateServiceOption;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nEXTERN_C const IID LIBID_WUApiLib;\n\nEXTERN_C const CLSID CLSID_StringCollection;\n\n#ifdef __cplusplus\n\nclass DECLSPEC_UUID(\"72C97D74-7C3B-40AE-B77D-ABDB22EBA6FB\")\nStringCollection;\n#endif\n\nEXTERN_C const CLSID CLSID_UpdateSearcher;\n\n#ifdef __cplusplus\n\nclass DECLSPEC_UUID(\"B699E5E8-67FF-4177-88B0-3684A3388BFB\")\nUpdateSearcher;\n#endif\n\nEXTERN_C const CLSID CLSID_WebProxy;\n\n#ifdef __cplusplus\n\nclass DECLSPEC_UUID(\"650503cf-9108-4ddc-a2ce-6c2341e1c582\")\nWebProxy;\n#endif\n\nEXTERN_C const CLSID CLSID_SystemInformation;\n\n#ifdef __cplusplus\n\nclass DECLSPEC_UUID(\"C01B9BA0-BEA7-41BA-B604-D0A36F469133\")\nSystemInformation;\n#endif\n\nEXTERN_C const CLSID CLSID_WindowsUpdateAgentInfo;\n\n#ifdef __cplusplus\n\nclass DECLSPEC_UUID(\"C2E88C2F-6F5B-4AAA-894B-55C847AD3A2D\")\nWindowsUpdateAgentInfo;\n#endif\n\nEXTERN_C const CLSID CLSID_AutomaticUpdates;\n\n#ifdef __cplusplus\n\nclass DECLSPEC_UUID(\"BFE18E9C-6D87-4450-B37C-E02F0B373803\")\nAutomaticUpdates;\n#endif\n\nEXTERN_C const CLSID CLSID_UpdateCollection;\n\n#ifdef __cplusplus\n\nclass DECLSPEC_UUID(\"13639463-00DB-4646-803D-528026140D88\")\nUpdateCollection;\n#endif\n\nEXTERN_C const CLSID CLSID_UpdateDownloader;\n\n#ifdef __cplusplus\n\nclass DECLSPEC_UUID(\"5BAF654A-5A07-4264-A255-9FF54C7151E7\")\nUpdateDownloader;\n#endif\n\nEXTERN_C const CLSID CLSID_UpdateInstaller;\n\n#ifdef __cplusplus\n\nclass DECLSPEC_UUID(\"D2E0FE7F-D23E-48E1-93C0-6FA8CC346474\")\nUpdateInstaller;\n#endif\n\nEXTERN_C const CLSID CLSID_UpdateSession;\n\n#ifdef __cplusplus\n\nclass DECLSPEC_UUID(\"4CB43D7F-7EEE-4906-8698-60DA1C38F2FE\")\nUpdateSession;\n#endif\n\nEXTERN_C const CLSID CLSID_UpdateServiceManager;\n\n#ifdef __cplusplus\n\nclass DECLSPEC_UUID(\"F8D253D9-89A4-4DAA-87B6-1168369F0B21\")\nUpdateServiceManager;\n#endif\n\nEXTERN_C const CLSID CLSID_InstallationAgent;\n\n#ifdef __cplusplus\n\nclass DECLSPEC_UUID(\"317E92FC-1679-46FD-A0B5-F08914DD8623\")\nInstallationAgent;\n#endif\n#endif /* __WUApiLib_LIBRARY_DEFINED__ */\n\n/* Additional Prototypes for ALL interfaces */\n\nunsigned long             __RPC_USER  BSTR_UserSize(     __RPC__in unsigned long *, unsigned long            , __RPC__in BSTR * );\nunsigned char * __RPC_USER  BSTR_UserMarshal(  __RPC__in unsigned long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in BSTR * );\nunsigned char * __RPC_USER  BSTR_UserUnmarshal(__RPC__in unsigned long *, __RPC__in_xcount(0) unsigned char *, __RPC__out BSTR * );\nvoid                      __RPC_USER  BSTR_UserFree(     __RPC__in unsigned long *, __RPC__in BSTR * );\n\nunsigned long             __RPC_USER  HWND_UserSize(     __RPC__in unsigned long *, unsigned long            , __RPC__in HWND * );\nunsigned char * __RPC_USER  HWND_UserMarshal(  __RPC__in unsigned long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in HWND * );\nunsigned char * __RPC_USER  HWND_UserUnmarshal(__RPC__in unsigned long *, __RPC__in_xcount(0) unsigned char *, __RPC__out HWND * );\nvoid                      __RPC_USER  HWND_UserFree(     __RPC__in unsigned long *, __RPC__in HWND * );\n\nunsigned long             __RPC_USER  VARIANT_UserSize(     __RPC__in unsigned long *, unsigned long            , __RPC__in VARIANT * );\nunsigned char * __RPC_USER  VARIANT_UserMarshal(  __RPC__in unsigned long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in VARIANT * );\nunsigned char * __RPC_USER  VARIANT_UserUnmarshal(__RPC__in unsigned long *, __RPC__in_xcount(0) unsigned char *, __RPC__out VARIANT * );\nvoid                      __RPC_USER  VARIANT_UserFree(     __RPC__in unsigned long *, __RPC__in VARIANT * );\n\n/* end of Additional Prototypes */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n\n\n\n"
  },
  {
    "path": "include/wuerror.h",
    "content": "/***************************************************************************\n*                                                                          *\n*   wuerror.mc --  error code definitions for Windows Update.              *\n*                                                                          *\n*   Copyright (c) Microsoft Corporation. All rights reserved.              *\n*                                                                          *\n***************************************************************************/\n#ifndef _WUERROR_\n#define _WUERROR_\n\n#if defined (_MSC_VER) && (_MSC_VER >= 1020) && !defined(__midl)\n#pragma once\n#endif\n\n#ifdef RC_INVOKED\n#define _HRESULT_TYPEDEF_(_sc) _sc\n#else // RC_INVOKED\n#define _HRESULT_TYPEDEF_(_sc) ((HRESULT)_sc)\n#endif // RC_INVOKED\n\n\n///////////////////////////////////////////////////////////////////////////////\n// Windows Update Success Codes\n///////////////////////////////////////////////////////////////////////////////\n//\n//  Values are 32 bit values laid out as follows:\n//\n//   3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1\n//   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\n//  +---+-+-+-----------------------+-------------------------------+\n//  |Sev|C|R|     Facility          |               Code            |\n//  +---+-+-+-----------------------+-------------------------------+\n//\n//  where\n//\n//      Sev - is the severity code\n//\n//          00 - Success\n//          01 - Informational\n//          10 - Warning\n//          11 - Error\n//\n//      C - is the Customer code flag\n//\n//      R - is a reserved bit\n//\n//      Facility - is the facility code\n//\n//      Code - is the facility's status code\n//\n//\n// Define the facility codes\n//\n\n\n//\n// Define the severity codes\n//\n\n\n//\n// MessageId: WU_S_SERVICE_STOP\n//\n// MessageText:\n//\n// Windows Update Agent was stopped successfully.\n//\n#define WU_S_SERVICE_STOP                _HRESULT_TYPEDEF_(0x00240001L)\n\n//\n// MessageId: WU_S_SELFUPDATE\n//\n// MessageText:\n//\n// Windows Update Agent updated itself.\n//\n#define WU_S_SELFUPDATE                  _HRESULT_TYPEDEF_(0x00240002L)\n\n//\n// MessageId: WU_S_UPDATE_ERROR\n//\n// MessageText:\n//\n// Operation completed successfully but there were errors applying the updates.\n//\n#define WU_S_UPDATE_ERROR                _HRESULT_TYPEDEF_(0x00240003L)\n\n//\n// MessageId: WU_S_MARKED_FOR_DISCONNECT\n//\n// MessageText:\n//\n// A callback was marked to be disconnected later because the request to disconnect the operation came while a callback was executing.\n//\n#define WU_S_MARKED_FOR_DISCONNECT       _HRESULT_TYPEDEF_(0x00240004L)\n\n//\n// MessageId: WU_S_REBOOT_REQUIRED\n//\n// MessageText:\n//\n// The system must be restarted to complete installation of the update.\n//\n#define WU_S_REBOOT_REQUIRED             _HRESULT_TYPEDEF_(0x00240005L)\n\n//\n// MessageId: WU_S_ALREADY_INSTALLED\n//\n// MessageText:\n//\n// The update to be installed is already installed on the system.\n//\n#define WU_S_ALREADY_INSTALLED           _HRESULT_TYPEDEF_(0x00240006L)\n\n//\n// MessageId: WU_S_ALREADY_UNINSTALLED\n//\n// MessageText:\n//\n// The update to be removed is not installed on the system.\n//\n#define WU_S_ALREADY_UNINSTALLED         _HRESULT_TYPEDEF_(0x00240007L)\n\n//\n// MessageId: WU_S_ALREADY_DOWNLOADED\n//\n// MessageText:\n//\n// The update to be downloaded has already been downloaded.\n//\n#define WU_S_ALREADY_DOWNLOADED          _HRESULT_TYPEDEF_(0x00240008L)\n\n//\n// MessageId: WU_S_UH_INSTALLSTILLPENDING\n//\n// MessageText:\n//\n// The installation operation for the update is still in progress.\n//\n#define WU_S_UH_INSTALLSTILLPENDING      _HRESULT_TYPEDEF_(0x00242015L)\n\n///////////////////////////////////////////////////////////////////////////////\n// Windows Update Error Codes\n///////////////////////////////////////////////////////////////////////////////\n//\n// MessageId: WU_E_NO_SERVICE\n//\n// MessageText:\n//\n// Windows Update Agent was unable to provide the service.\n//\n#define WU_E_NO_SERVICE                  _HRESULT_TYPEDEF_(0x80240001L)\n\n//\n// MessageId: WU_E_MAX_CAPACITY_REACHED\n//\n// MessageText:\n//\n// The maximum capacity of the service was exceeded.\n//\n#define WU_E_MAX_CAPACITY_REACHED        _HRESULT_TYPEDEF_(0x80240002L)\n\n//\n// MessageId: WU_E_UNKNOWN_ID\n//\n// MessageText:\n//\n// An ID cannot be found.\n//\n#define WU_E_UNKNOWN_ID                  _HRESULT_TYPEDEF_(0x80240003L)\n\n//\n// MessageId: WU_E_NOT_INITIALIZED\n//\n// MessageText:\n//\n// The object could not be initialized.\n//\n#define WU_E_NOT_INITIALIZED             _HRESULT_TYPEDEF_(0x80240004L)\n\n//\n// MessageId: WU_E_RANGEOVERLAP\n//\n// MessageText:\n//\n// The update handler requested a byte range overlapping a previously requested range.\n//\n#define WU_E_RANGEOVERLAP                _HRESULT_TYPEDEF_(0x80240005L)\n\n//\n// MessageId: WU_E_TOOMANYRANGES\n//\n// MessageText:\n//\n// The requested number of byte ranges exceeds the maximum number (2^31 - 1).\n//\n#define WU_E_TOOMANYRANGES               _HRESULT_TYPEDEF_(0x80240006L)\n\n//\n// MessageId: WU_E_INVALIDINDEX\n//\n// MessageText:\n//\n// The index to a collection was invalid.\n//\n#define WU_E_INVALIDINDEX                _HRESULT_TYPEDEF_(0x80240007L)\n\n//\n// MessageId: WU_E_ITEMNOTFOUND\n//\n// MessageText:\n//\n// The key for the item queried could not be found.\n//\n#define WU_E_ITEMNOTFOUND                _HRESULT_TYPEDEF_(0x80240008L)\n\n//\n// MessageId: WU_E_OPERATIONINPROGRESS\n//\n// MessageText:\n//\n// Another conflicting operation was in progress. Some operations such as installation cannot be performed twice simultaneously.\n//\n#define WU_E_OPERATIONINPROGRESS         _HRESULT_TYPEDEF_(0x80240009L)\n\n//\n// MessageId: WU_E_COULDNOTCANCEL\n//\n// MessageText:\n//\n// Cancellation of the operation was not allowed.\n//\n#define WU_E_COULDNOTCANCEL              _HRESULT_TYPEDEF_(0x8024000AL)\n\n//\n// MessageId: WU_E_CALL_CANCELLED\n//\n// MessageText:\n//\n// Operation was cancelled.\n//\n#define WU_E_CALL_CANCELLED              _HRESULT_TYPEDEF_(0x8024000BL)\n\n//\n// MessageId: WU_E_NOOP\n//\n// MessageText:\n//\n// No operation was required.\n//\n#define WU_E_NOOP                        _HRESULT_TYPEDEF_(0x8024000CL)\n\n//\n// MessageId: WU_E_XML_MISSINGDATA\n//\n// MessageText:\n//\n// Windows Update Agent could not find required information in the update's XML data.\n//\n#define WU_E_XML_MISSINGDATA             _HRESULT_TYPEDEF_(0x8024000DL)\n\n//\n// MessageId: WU_E_XML_INVALID\n//\n// MessageText:\n//\n// Windows Update Agent found invalid information in the update's XML data.\n//\n#define WU_E_XML_INVALID                 _HRESULT_TYPEDEF_(0x8024000EL)\n\n//\n// MessageId: WU_E_CYCLE_DETECTED\n//\n// MessageText:\n//\n// Circular update relationships were detected in the metadata.\n//\n#define WU_E_CYCLE_DETECTED              _HRESULT_TYPEDEF_(0x8024000FL)\n\n//\n// MessageId: WU_E_TOO_DEEP_RELATION\n//\n// MessageText:\n//\n// Update relationships too deep to evaluate were evaluated.\n//\n#define WU_E_TOO_DEEP_RELATION           _HRESULT_TYPEDEF_(0x80240010L)\n\n//\n// MessageId: WU_E_INVALID_RELATIONSHIP\n//\n// MessageText:\n//\n// An invalid update relationship was detected.\n//\n#define WU_E_INVALID_RELATIONSHIP        _HRESULT_TYPEDEF_(0x80240011L)\n\n//\n// MessageId: WU_E_REG_VALUE_INVALID\n//\n// MessageText:\n//\n// An invalid registry value was read.\n//\n#define WU_E_REG_VALUE_INVALID           _HRESULT_TYPEDEF_(0x80240012L)\n\n//\n// MessageId: WU_E_DUPLICATE_ITEM\n//\n// MessageText:\n//\n// Operation tried to add a duplicate item to a list.\n//\n#define WU_E_DUPLICATE_ITEM              _HRESULT_TYPEDEF_(0x80240013L)\n\n//\n// MessageId: WU_E_INVALID_INSTALL_REQUESTED\n//\n// MessageText:\n//\n// Updates requested for install are not installable by caller.\n//\n#define WU_E_INVALID_INSTALL_REQUESTED   _HRESULT_TYPEDEF_(0x80240014L)\n\n//\n// MessageId: WU_E_INSTALL_NOT_ALLOWED\n//\n// MessageText:\n//\n// Operation tried to install while another installation was in progress or the system was pending a mandatory restart.\n//\n#define WU_E_INSTALL_NOT_ALLOWED         _HRESULT_TYPEDEF_(0x80240016L)\n\n//\n// MessageId: WU_E_NOT_APPLICABLE\n//\n// MessageText:\n//\n// Operation was not performed because there are no applicable updates.\n//\n#define WU_E_NOT_APPLICABLE              _HRESULT_TYPEDEF_(0x80240017L)\n\n//\n// MessageId: WU_E_NO_USERTOKEN\n//\n// MessageText:\n//\n// Operation failed because a required user token is missing.\n//\n#define WU_E_NO_USERTOKEN                _HRESULT_TYPEDEF_(0x80240018L)\n\n//\n// MessageId: WU_E_EXCLUSIVE_INSTALL_CONFLICT\n//\n// MessageText:\n//\n// An exclusive update cannot be installed with other updates at the same time.\n//\n#define WU_E_EXCLUSIVE_INSTALL_CONFLICT  _HRESULT_TYPEDEF_(0x80240019L)\n\n//\n// MessageId: WU_E_POLICY_NOT_SET\n//\n// MessageText:\n//\n// A policy value was not set.\n//\n#define WU_E_POLICY_NOT_SET              _HRESULT_TYPEDEF_(0x8024001AL)\n\n//\n// MessageId: WU_E_SELFUPDATE_IN_PROGRESS\n//\n// MessageText:\n//\n// The operation could not be performed because the Windows Update Agent is self-updating.\n//\n#define WU_E_SELFUPDATE_IN_PROGRESS      _HRESULT_TYPEDEF_(0x8024001BL)\n\n//\n// MessageId: WU_E_INVALID_UPDATE\n//\n// MessageText:\n//\n// An update contains invalid metadata.\n//\n#define WU_E_INVALID_UPDATE              _HRESULT_TYPEDEF_(0x8024001DL)\n\n//\n// MessageId: WU_E_SERVICE_STOP\n//\n// MessageText:\n//\n// Operation did not complete because the service or system was being shut down.\n//\n#define WU_E_SERVICE_STOP                _HRESULT_TYPEDEF_(0x8024001EL)\n\n//\n// MessageId: WU_E_NO_CONNECTION\n//\n// MessageText:\n//\n// Operation did not complete because the network connection was unavailable.\n//\n#define WU_E_NO_CONNECTION               _HRESULT_TYPEDEF_(0x8024001FL)\n\n//\n// MessageId: WU_E_NO_INTERACTIVE_USER\n//\n// MessageText:\n//\n// Operation did not complete because there is no logged-on interactive user.\n//\n#define WU_E_NO_INTERACTIVE_USER         _HRESULT_TYPEDEF_(0x80240020L)\n\n//\n// MessageId: WU_E_TIME_OUT\n//\n// MessageText:\n//\n// Operation did not complete because it timed out.\n//\n#define WU_E_TIME_OUT                    _HRESULT_TYPEDEF_(0x80240021L)\n\n//\n// MessageId: WU_E_ALL_UPDATES_FAILED\n//\n// MessageText:\n//\n// Operation failed for all the updates.\n//\n#define WU_E_ALL_UPDATES_FAILED          _HRESULT_TYPEDEF_(0x80240022L)\n\n//\n// MessageId: WU_E_EULAS_DECLINED\n//\n// MessageText:\n//\n// The license terms for all updates were declined.\n//\n#define WU_E_EULAS_DECLINED              _HRESULT_TYPEDEF_(0x80240023L)\n\n//\n// MessageId: WU_E_NO_UPDATE\n//\n// MessageText:\n//\n// There are no updates.\n//\n#define WU_E_NO_UPDATE                   _HRESULT_TYPEDEF_(0x80240024L)\n\n//\n// MessageId: WU_E_USER_ACCESS_DISABLED\n//\n// MessageText:\n//\n// Group Policy settings prevented access to Windows Update.\n//\n#define WU_E_USER_ACCESS_DISABLED        _HRESULT_TYPEDEF_(0x80240025L)\n\n//\n// MessageId: WU_E_INVALID_UPDATE_TYPE\n//\n// MessageText:\n//\n// The type of update is invalid.\n//\n#define WU_E_INVALID_UPDATE_TYPE         _HRESULT_TYPEDEF_(0x80240026L)\n\n//\n// MessageId: WU_E_URL_TOO_LONG\n//\n// MessageText:\n//\n// The URL exceeded the maximum length.\n//\n#define WU_E_URL_TOO_LONG                _HRESULT_TYPEDEF_(0x80240027L)\n\n//\n// MessageId: WU_E_UNINSTALL_NOT_ALLOWED\n//\n// MessageText:\n//\n// The update could not be uninstalled because the request did not originate from a WSUS server.\n//\n#define WU_E_UNINSTALL_NOT_ALLOWED       _HRESULT_TYPEDEF_(0x80240028L)\n\n//\n// MessageId: WU_E_INVALID_PRODUCT_LICENSE\n//\n// MessageText:\n//\n// Search may have missed some updates before there is an unlicensed application on the system.\n//\n#define WU_E_INVALID_PRODUCT_LICENSE     _HRESULT_TYPEDEF_(0x80240029L)\n\n//\n// MessageId: WU_E_MISSING_HANDLER\n//\n// MessageText:\n//\n// A component required to detect applicable updates was missing.\n//\n#define WU_E_MISSING_HANDLER             _HRESULT_TYPEDEF_(0x8024002AL)\n\n//\n// MessageId: WU_E_LEGACYSERVER\n//\n// MessageText:\n//\n// An operation did not complete because it requires a newer version of server.\n//\n#define WU_E_LEGACYSERVER                _HRESULT_TYPEDEF_(0x8024002BL)\n\n//\n// MessageId: WU_E_BIN_SOURCE_ABSENT\n//\n// MessageText:\n//\n// A delta-compressed update could not be installed because it required the source.\n//\n#define WU_E_BIN_SOURCE_ABSENT           _HRESULT_TYPEDEF_(0x8024002CL)\n\n//\n// MessageId: WU_E_SOURCE_ABSENT\n//\n// MessageText:\n//\n// A full-file update could not be installed because it required the source.\n//\n#define WU_E_SOURCE_ABSENT               _HRESULT_TYPEDEF_(0x8024002DL)\n\n//\n// MessageId: WU_E_WU_DISABLED\n//\n// MessageText:\n//\n// Access to an unmanaged server is not allowed.\n//\n#define WU_E_WU_DISABLED                 _HRESULT_TYPEDEF_(0x8024002EL)\n\n//\n// MessageId: WU_E_CALL_CANCELLED_BY_POLICY\n//\n// MessageText:\n//\n// Operation did not complete because the DisableWindowsUpdateAccess policy was set.\n//\n#define WU_E_CALL_CANCELLED_BY_POLICY    _HRESULT_TYPEDEF_(0x8024002FL)\n\n//\n// MessageId: WU_E_INVALID_PROXY_SERVER\n//\n// MessageText:\n//\n// The format of the proxy list was invalid.\n//\n#define WU_E_INVALID_PROXY_SERVER        _HRESULT_TYPEDEF_(0x80240030L)\n\n//\n// MessageId: WU_E_INVALID_FILE\n//\n// MessageText:\n//\n// The file is in the wrong format.\n//\n#define WU_E_INVALID_FILE                _HRESULT_TYPEDEF_(0x80240031L)\n\n//\n// MessageId: WU_E_INVALID_CRITERIA\n//\n// MessageText:\n//\n// The search criteria string was invalid.\n//\n#define WU_E_INVALID_CRITERIA            _HRESULT_TYPEDEF_(0x80240032L)\n\n//\n// MessageId: WU_E_EULA_UNAVAILABLE\n//\n// MessageText:\n//\n// License terms could not be downloaded.\n//\n#define WU_E_EULA_UNAVAILABLE            _HRESULT_TYPEDEF_(0x80240033L)\n\n//\n// MessageId: WU_E_DOWNLOAD_FAILED\n//\n// MessageText:\n//\n// Update failed to download.\n//\n#define WU_E_DOWNLOAD_FAILED             _HRESULT_TYPEDEF_(0x80240034L)\n\n//\n// MessageId: WU_E_UPDATE_NOT_PROCESSED\n//\n// MessageText:\n//\n// The update was not processed.\n//\n#define WU_E_UPDATE_NOT_PROCESSED        _HRESULT_TYPEDEF_(0x80240035L)\n\n//\n// MessageId: WU_E_INVALID_OPERATION\n//\n// MessageText:\n//\n// The object's current state did not allow the operation.\n//\n#define WU_E_INVALID_OPERATION           _HRESULT_TYPEDEF_(0x80240036L)\n\n//\n// MessageId: WU_E_NOT_SUPPORTED\n//\n// MessageText:\n//\n// The functionality for the operation is not supported.\n//\n#define WU_E_NOT_SUPPORTED               _HRESULT_TYPEDEF_(0x80240037L)\n\n//\n// MessageId: WU_E_WINHTTP_INVALID_FILE\n//\n// MessageText:\n//\n// The downloaded file has an unexpected content type.\n//\n#define WU_E_WINHTTP_INVALID_FILE        _HRESULT_TYPEDEF_(0x80240038L)\n\n//\n// MessageId: WU_E_TOO_MANY_RESYNC\n//\n// MessageText:\n//\n// Agent is asked by server to resync too many times.\n//\n#define WU_E_TOO_MANY_RESYNC             _HRESULT_TYPEDEF_(0x80240039L)\n\n//\n// MessageId: WU_E_NO_SERVER_CORE_SUPPORT\n//\n// MessageText:\n//\n// WUA API method does not run on Server Core installation.\n//\n#define WU_E_NO_SERVER_CORE_SUPPORT      _HRESULT_TYPEDEF_(0x80240040L)\n\n//\n// MessageId: WU_E_SYSPREP_IN_PROGRESS\n//\n// MessageText:\n//\n// Service is not available while sysprep is running.\n//\n#define WU_E_SYSPREP_IN_PROGRESS         _HRESULT_TYPEDEF_(0x80240041L)\n\n//\n// MessageId: WU_E_UNKNOWN_SERVICE\n//\n// MessageText:\n//\n// The update service is no longer registered with AU.\n//\n#define WU_E_UNKNOWN_SERVICE             _HRESULT_TYPEDEF_(0x80240042L)\n\n//\n// MessageId: WU_E_NO_UI_SUPPORT\n//\n// MessageText:\n//\n// There is no support for WUA UI.\n//\n#define WU_E_NO_UI_SUPPORT               _HRESULT_TYPEDEF_(0x80240043L)\n\n//\n// MessageId: WU_E_PER_MACHINE_UPDATE_ACCESS_DENIED\n//\n// MessageText:\n//\n// Only administrators can perform this operation on per-machine updates.\n//\n#define WU_E_PER_MACHINE_UPDATE_ACCESS_DENIED _HRESULT_TYPEDEF_(0x80240044L)\n\n//\n// MessageId: WU_E_UNSUPPORTED_SEARCHSCOPE\n//\n// MessageText:\n//\n// A search was attempted with a scope that is not currently supported for this type of search.\n//\n#define WU_E_UNSUPPORTED_SEARCHSCOPE     _HRESULT_TYPEDEF_(0x80240045L)\n\n//\n// MessageId: WU_E_BAD_FILE_URL\n//\n// MessageText:\n//\n// The URL does not point to a file.\n//\n#define WU_E_BAD_FILE_URL                _HRESULT_TYPEDEF_(0x80240046L)\n\n//\n// MessageId: WU_E_NOTSUPPORTED\n//\n// MessageText:\n//\n// The operation requested is not supported.\n//\n#define WU_E_NOTSUPPORTED                _HRESULT_TYPEDEF_(0x80240047L)\n\n//\n// MessageId: WU_E_INVALID_NOTIFICATION_INFO\n//\n// MessageText:\n//\n// The featured update notification info returned by the server is invalid.\n//\n#define WU_E_INVALID_NOTIFICATION_INFO   _HRESULT_TYPEDEF_(0x80240048L)\n\n//\n// MessageId: WU_E_UNEXPECTED\n//\n// MessageText:\n//\n// An operation failed due to reasons not covered by another error code.\n//\n#define WU_E_UNEXPECTED                  _HRESULT_TYPEDEF_(0x80240FFFL)\n\n///////////////////////////////////////////////////////////////////////////////\n// Windows Installer minor errors\n//\n// The following errors are used to indicate that part of a search failed for\n// MSI problems. Another part of the search may successfully return updates.\n// All MSI minor codes should share the same error code range so that the caller\n// tell that they are related to Windows Installer.\n///////////////////////////////////////////////////////////////////////////////\n//\n// MessageId: WU_E_MSI_WRONG_VERSION\n//\n// MessageText:\n//\n// Search may have missed some updates because the Windows Installer is less than version 3.1.\n//\n#define WU_E_MSI_WRONG_VERSION           _HRESULT_TYPEDEF_(0x80241001L)\n\n//\n// MessageId: WU_E_MSI_NOT_CONFIGURED\n//\n// MessageText:\n//\n// Search may have missed some updates because the Windows Installer is not configured.\n//\n#define WU_E_MSI_NOT_CONFIGURED          _HRESULT_TYPEDEF_(0x80241002L)\n\n//\n// MessageId: WU_E_MSP_DISABLED\n//\n// MessageText:\n//\n// Search may have missed some updates because policy has disabled Windows Installer patching.\n//\n#define WU_E_MSP_DISABLED                _HRESULT_TYPEDEF_(0x80241003L)\n\n//\n// MessageId: WU_E_MSI_WRONG_APP_CONTEXT\n//\n// MessageText:\n//\n// An update could not be applied because the application is installed per-user.\n//\n#define WU_E_MSI_WRONG_APP_CONTEXT       _HRESULT_TYPEDEF_(0x80241004L)\n\n//\n// MessageId: WU_E_MSP_UNEXPECTED\n//\n// MessageText:\n//\n// Search may have missed some updates because there was a failure of the Windows Installer.\n//\n#define WU_E_MSP_UNEXPECTED              _HRESULT_TYPEDEF_(0x80241FFFL)\n\n///////////////////////////////////////////////////////////////////////////////\n// Protocol Talker errors\n//\n// The following map to SOAPCLIENT_ERRORs from atlsoap.h. These errors\n// are obtained from calling GetClientError() on the CClientWebService\n// object.\n///////////////////////////////////////////////////////////////////////////////\n//\n// MessageId: WU_E_PT_SOAPCLIENT_BASE\n//\n// MessageText:\n//\n// WU_E_PT_SOAPCLIENT_* error codes map to the SOAPCLIENT_ERROR enum of the ATL Server Library.\n//\n#define WU_E_PT_SOAPCLIENT_BASE          _HRESULT_TYPEDEF_(0x80244000L)\n\n//\n// MessageId: WU_E_PT_SOAPCLIENT_INITIALIZE\n//\n// MessageText:\n//\n// Same as SOAPCLIENT_INITIALIZE_ERROR - initialization of the SOAP client failed, possibly because of an MSXML installation failure.\n//\n#define WU_E_PT_SOAPCLIENT_INITIALIZE    _HRESULT_TYPEDEF_(0x80244001L)\n\n//\n// MessageId: WU_E_PT_SOAPCLIENT_OUTOFMEMORY\n//\n// MessageText:\n//\n// Same as SOAPCLIENT_OUTOFMEMORY - SOAP client failed because it ran out of memory.\n//\n#define WU_E_PT_SOAPCLIENT_OUTOFMEMORY   _HRESULT_TYPEDEF_(0x80244002L)\n\n//\n// MessageId: WU_E_PT_SOAPCLIENT_GENERATE\n//\n// MessageText:\n//\n// Same as SOAPCLIENT_GENERATE_ERROR - SOAP client failed to generate the request.\n//\n#define WU_E_PT_SOAPCLIENT_GENERATE      _HRESULT_TYPEDEF_(0x80244003L)\n\n//\n// MessageId: WU_E_PT_SOAPCLIENT_CONNECT\n//\n// MessageText:\n//\n// Same as SOAPCLIENT_CONNECT_ERROR - SOAP client failed to connect to the server.\n//\n#define WU_E_PT_SOAPCLIENT_CONNECT       _HRESULT_TYPEDEF_(0x80244004L)\n\n//\n// MessageId: WU_E_PT_SOAPCLIENT_SEND\n//\n// MessageText:\n//\n// Same as SOAPCLIENT_SEND_ERROR - SOAP client failed to send a message for reasons of WU_E_WINHTTP_* error codes.\n//\n#define WU_E_PT_SOAPCLIENT_SEND          _HRESULT_TYPEDEF_(0x80244005L)\n\n//\n// MessageId: WU_E_PT_SOAPCLIENT_SERVER\n//\n// MessageText:\n//\n// Same as SOAPCLIENT_SERVER_ERROR - SOAP client failed because there was a server error.\n//\n#define WU_E_PT_SOAPCLIENT_SERVER        _HRESULT_TYPEDEF_(0x80244006L)\n\n//\n// MessageId: WU_E_PT_SOAPCLIENT_SOAPFAULT\n//\n// MessageText:\n//\n// Same as SOAPCLIENT_SOAPFAULT - SOAP client failed because there was a SOAP fault for reasons of WU_E_PT_SOAP_* error codes.\n//\n#define WU_E_PT_SOAPCLIENT_SOAPFAULT     _HRESULT_TYPEDEF_(0x80244007L)\n\n//\n// MessageId: WU_E_PT_SOAPCLIENT_PARSEFAULT\n//\n// MessageText:\n//\n// Same as SOAPCLIENT_PARSEFAULT_ERROR - SOAP client failed to parse a SOAP fault.\n//\n#define WU_E_PT_SOAPCLIENT_PARSEFAULT    _HRESULT_TYPEDEF_(0x80244008L)\n\n//\n// MessageId: WU_E_PT_SOAPCLIENT_READ\n//\n// MessageText:\n//\n// Same as SOAPCLIENT_READ_ERROR - SOAP client failed while reading the response from the server.\n//\n#define WU_E_PT_SOAPCLIENT_READ          _HRESULT_TYPEDEF_(0x80244009L)\n\n//\n// MessageId: WU_E_PT_SOAPCLIENT_PARSE\n//\n// MessageText:\n//\n// Same as SOAPCLIENT_PARSE_ERROR - SOAP client failed to parse the response from the server.\n//\n#define WU_E_PT_SOAPCLIENT_PARSE         _HRESULT_TYPEDEF_(0x8024400AL)\n\n// The following map to SOAP_ERROR_CODEs from atlsoap.h. These errors\n// are obtained from the m_fault.m_soapErrCode member on the\n// CClientWebService object when GetClientError() returned\n// SOAPCLIENT_SOAPFAULT.\n//\n// MessageId: WU_E_PT_SOAP_VERSION\n//\n// MessageText:\n//\n// Same as SOAP_E_VERSION_MISMATCH - SOAP client found an unrecognizable namespace for the SOAP envelope.\n//\n#define WU_E_PT_SOAP_VERSION             _HRESULT_TYPEDEF_(0x8024400BL)\n\n//\n// MessageId: WU_E_PT_SOAP_MUST_UNDERSTAND\n//\n// MessageText:\n//\n// Same as SOAP_E_MUST_UNDERSTAND - SOAP client was unable to understand a header.\n//\n#define WU_E_PT_SOAP_MUST_UNDERSTAND     _HRESULT_TYPEDEF_(0x8024400CL)\n\n//\n// MessageId: WU_E_PT_SOAP_CLIENT\n//\n// MessageText:\n//\n// Same as SOAP_E_CLIENT - SOAP client found the message was malformed; fix before resending.\n//\n#define WU_E_PT_SOAP_CLIENT              _HRESULT_TYPEDEF_(0x8024400DL)\n\n//\n// MessageId: WU_E_PT_SOAP_SERVER\n//\n// MessageText:\n//\n// Same as SOAP_E_SERVER - The SOAP message could not be processed due to a server error; resend later.\n//\n#define WU_E_PT_SOAP_SERVER              _HRESULT_TYPEDEF_(0x8024400EL)\n\n//\n// MessageId: WU_E_PT_WMI_ERROR\n//\n// MessageText:\n//\n// There was an unspecified Windows Management Instrumentation (WMI) error.\n//\n#define WU_E_PT_WMI_ERROR                _HRESULT_TYPEDEF_(0x8024400FL)\n\n//\n// MessageId: WU_E_PT_EXCEEDED_MAX_SERVER_TRIPS\n//\n// MessageText:\n//\n// The number of round trips to the server exceeded the maximum limit.\n//\n#define WU_E_PT_EXCEEDED_MAX_SERVER_TRIPS _HRESULT_TYPEDEF_(0x80244010L)\n\n//\n// MessageId: WU_E_PT_SUS_SERVER_NOT_SET\n//\n// MessageText:\n//\n// WUServer policy value is missing in the registry.\n//\n#define WU_E_PT_SUS_SERVER_NOT_SET       _HRESULT_TYPEDEF_(0x80244011L)\n\n//\n// MessageId: WU_E_PT_DOUBLE_INITIALIZATION\n//\n// MessageText:\n//\n// Initialization failed because the object was already initialized.\n//\n#define WU_E_PT_DOUBLE_INITIALIZATION    _HRESULT_TYPEDEF_(0x80244012L)\n\n//\n// MessageId: WU_E_PT_INVALID_COMPUTER_NAME\n//\n// MessageText:\n//\n// The computer name could not be determined.\n//\n#define WU_E_PT_INVALID_COMPUTER_NAME    _HRESULT_TYPEDEF_(0x80244013L)\n\n//\n// MessageId: WU_E_PT_REFRESH_CACHE_REQUIRED\n//\n// MessageText:\n//\n// 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.\n//\n#define WU_E_PT_REFRESH_CACHE_REQUIRED   _HRESULT_TYPEDEF_(0x80244015L)\n\n//\n// MessageId: WU_E_PT_HTTP_STATUS_BAD_REQUEST\n//\n// MessageText:\n//\n// Same as HTTP status 400 - the server could not process the request due to invalid syntax.\n//\n#define WU_E_PT_HTTP_STATUS_BAD_REQUEST  _HRESULT_TYPEDEF_(0x80244016L)\n\n//\n// MessageId: WU_E_PT_HTTP_STATUS_DENIED\n//\n// MessageText:\n//\n// Same as HTTP status 401 - the requested resource requires user authentication.\n//\n#define WU_E_PT_HTTP_STATUS_DENIED       _HRESULT_TYPEDEF_(0x80244017L)\n\n//\n// MessageId: WU_E_PT_HTTP_STATUS_FORBIDDEN\n//\n// MessageText:\n//\n// Same as HTTP status 403 - server understood the request, but declined to fulfill it.\n//\n#define WU_E_PT_HTTP_STATUS_FORBIDDEN    _HRESULT_TYPEDEF_(0x80244018L)\n\n//\n// MessageId: WU_E_PT_HTTP_STATUS_NOT_FOUND\n//\n// MessageText:\n//\n// Same as HTTP status 404 - the server cannot find the requested URI (Uniform Resource Identifier).\n//\n//\n#define WU_E_PT_HTTP_STATUS_NOT_FOUND    _HRESULT_TYPEDEF_(0x80244019L)\n\n//\n// MessageId: WU_E_PT_HTTP_STATUS_BAD_METHOD\n//\n// MessageText:\n//\n// Same as HTTP status 405 - the HTTP method is not allowed.\n//\n#define WU_E_PT_HTTP_STATUS_BAD_METHOD   _HRESULT_TYPEDEF_(0x8024401AL)\n\n//\n// MessageId: WU_E_PT_HTTP_STATUS_PROXY_AUTH_REQ\n//\n// MessageText:\n//\n// Same as HTTP status 407 - proxy authentication is required.\n//\n#define WU_E_PT_HTTP_STATUS_PROXY_AUTH_REQ _HRESULT_TYPEDEF_(0x8024401BL)\n\n//\n// MessageId: WU_E_PT_HTTP_STATUS_REQUEST_TIMEOUT\n//\n// MessageText:\n//\n// Same as HTTP status 408 - the server timed out waiting for the request.\n//\n#define WU_E_PT_HTTP_STATUS_REQUEST_TIMEOUT _HRESULT_TYPEDEF_(0x8024401CL)\n\n//\n// MessageId: WU_E_PT_HTTP_STATUS_CONFLICT\n//\n// MessageText:\n//\n// Same as HTTP status 409 - the request was not completed due to a conflict with the current state of the resource.\n//\n#define WU_E_PT_HTTP_STATUS_CONFLICT     _HRESULT_TYPEDEF_(0x8024401DL)\n\n//\n// MessageId: WU_E_PT_HTTP_STATUS_GONE\n//\n// MessageText:\n//\n// Same as HTTP status 410 - requested resource is no longer available at the server.\n//\n#define WU_E_PT_HTTP_STATUS_GONE         _HRESULT_TYPEDEF_(0x8024401EL)\n\n//\n// MessageId: WU_E_PT_HTTP_STATUS_SERVER_ERROR\n//\n// MessageText:\n//\n// Same as HTTP status 500 - an error internal to the server prevented fulfilling the request.\n//\n#define WU_E_PT_HTTP_STATUS_SERVER_ERROR _HRESULT_TYPEDEF_(0x8024401FL)\n\n//\n// MessageId: WU_E_PT_HTTP_STATUS_NOT_SUPPORTED\n//\n// MessageText:\n//\n// Same as HTTP status 500 - server does not support the functionality required to fulfill the request.\n//\n#define WU_E_PT_HTTP_STATUS_NOT_SUPPORTED _HRESULT_TYPEDEF_(0x80244020L)\n\n//\n// MessageId: WU_E_PT_HTTP_STATUS_BAD_GATEWAY\n//\n// MessageText:\n//\n// 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.\n//\n#define WU_E_PT_HTTP_STATUS_BAD_GATEWAY  _HRESULT_TYPEDEF_(0x80244021L)\n\n//\n// MessageId: WU_E_PT_HTTP_STATUS_SERVICE_UNAVAIL\n//\n// MessageText:\n//\n// Same as HTTP status 503 - the service is temporarily overloaded.\n//\n#define WU_E_PT_HTTP_STATUS_SERVICE_UNAVAIL _HRESULT_TYPEDEF_(0x80244022L)\n\n//\n// MessageId: WU_E_PT_HTTP_STATUS_GATEWAY_TIMEOUT\n//\n// MessageText:\n//\n// Same as HTTP status 503 - the request was timed out waiting for a gateway.\n//\n#define WU_E_PT_HTTP_STATUS_GATEWAY_TIMEOUT _HRESULT_TYPEDEF_(0x80244023L)\n\n//\n// MessageId: WU_E_PT_HTTP_STATUS_VERSION_NOT_SUP\n//\n// MessageText:\n//\n// Same as HTTP status 505 - the server does not support the HTTP protocol version used for the request.\n//\n#define WU_E_PT_HTTP_STATUS_VERSION_NOT_SUP _HRESULT_TYPEDEF_(0x80244024L)\n\n//\n// MessageId: WU_E_PT_FILE_LOCATIONS_CHANGED\n//\n// MessageText:\n//\n// Operation failed due to a changed file location; refresh internal state and resend.\n//\n#define WU_E_PT_FILE_LOCATIONS_CHANGED   _HRESULT_TYPEDEF_(0x80244025L)\n\n//\n// MessageId: WU_E_PT_REGISTRATION_NOT_SUPPORTED\n//\n// MessageText:\n//\n// Operation failed because Windows Update Agent does not support registration with a non-WSUS server.\n//\n#define WU_E_PT_REGISTRATION_NOT_SUPPORTED _HRESULT_TYPEDEF_(0x80244026L)\n\n//\n// MessageId: WU_E_PT_NO_AUTH_PLUGINS_REQUESTED\n//\n// MessageText:\n//\n// The server returned an empty authentication information list.\n//\n#define WU_E_PT_NO_AUTH_PLUGINS_REQUESTED _HRESULT_TYPEDEF_(0x80244027L)\n\n//\n// MessageId: WU_E_PT_NO_AUTH_COOKIES_CREATED\n//\n// MessageText:\n//\n// Windows Update Agent was unable to create any valid authentication cookies.\n//\n#define WU_E_PT_NO_AUTH_COOKIES_CREATED  _HRESULT_TYPEDEF_(0x80244028L)\n\n//\n// MessageId: WU_E_PT_INVALID_CONFIG_PROP\n//\n// MessageText:\n//\n// A configuration property value was wrong.\n//\n#define WU_E_PT_INVALID_CONFIG_PROP      _HRESULT_TYPEDEF_(0x80244029L)\n\n//\n// MessageId: WU_E_PT_CONFIG_PROP_MISSING\n//\n// MessageText:\n//\n// A configuration property value was missing.\n//\n#define WU_E_PT_CONFIG_PROP_MISSING      _HRESULT_TYPEDEF_(0x8024402AL)\n\n//\n// MessageId: WU_E_PT_HTTP_STATUS_NOT_MAPPED\n//\n// MessageText:\n//\n// The HTTP request could not be completed and the reason did not correspond to any of the WU_E_PT_HTTP_* error codes.\n//\n#define WU_E_PT_HTTP_STATUS_NOT_MAPPED   _HRESULT_TYPEDEF_(0x8024402BL)\n\n//\n// MessageId: WU_E_PT_WINHTTP_NAME_NOT_RESOLVED\n//\n// MessageText:\n//\n// Same as ERROR_WINHTTP_NAME_NOT_RESOLVED - the proxy server or target server name cannot be resolved.\n//\n#define WU_E_PT_WINHTTP_NAME_NOT_RESOLVED _HRESULT_TYPEDEF_(0x8024402CL)\n\n//\n// MessageId: WU_E_PT_SAME_REDIR_ID\n//\n// MessageText:\n//\n// Windows Update Agent failed to download a redirector cabinet file with a new redirectorId value from the server during the recovery.\n//\n#define WU_E_PT_SAME_REDIR_ID            _HRESULT_TYPEDEF_(0x8024502DL)\n\n//\n// MessageId: WU_E_PT_NO_MANAGED_RECOVER\n//\n// MessageText:\n//\n// A redirector recovery action did not complete because the server is managed.\n//\n#define WU_E_PT_NO_MANAGED_RECOVER       _HRESULT_TYPEDEF_(0x8024502EL)\n\n//\n// MessageId: WU_E_PT_ECP_SUCCEEDED_WITH_ERRORS\n//\n// MessageText:\n//\n// External cab file processing completed with some errors.\n//\n#define WU_E_PT_ECP_SUCCEEDED_WITH_ERRORS _HRESULT_TYPEDEF_(0x8024402FL)\n\n//\n// MessageId: WU_E_PT_ECP_INIT_FAILED\n//\n// MessageText:\n//\n// The external cab processor initialization did not complete.\n//\n#define WU_E_PT_ECP_INIT_FAILED          _HRESULT_TYPEDEF_(0x80244030L)\n\n//\n// MessageId: WU_E_PT_ECP_INVALID_FILE_FORMAT\n//\n// MessageText:\n//\n// The format of a metadata file was invalid.\n//\n#define WU_E_PT_ECP_INVALID_FILE_FORMAT  _HRESULT_TYPEDEF_(0x80244031L)\n\n//\n// MessageId: WU_E_PT_ECP_INVALID_METADATA\n//\n// MessageText:\n//\n// External cab processor found invalid metadata.\n//\n#define WU_E_PT_ECP_INVALID_METADATA     _HRESULT_TYPEDEF_(0x80244032L)\n\n//\n// MessageId: WU_E_PT_ECP_FAILURE_TO_EXTRACT_DIGEST\n//\n// MessageText:\n//\n// The file digest could not be extracted from an external cab file.\n//\n#define WU_E_PT_ECP_FAILURE_TO_EXTRACT_DIGEST _HRESULT_TYPEDEF_(0x80244033L)\n\n//\n// MessageId: WU_E_PT_ECP_FAILURE_TO_DECOMPRESS_CAB_FILE\n//\n// MessageText:\n//\n// An external cab file could not be decompressed.\n//\n#define WU_E_PT_ECP_FAILURE_TO_DECOMPRESS_CAB_FILE _HRESULT_TYPEDEF_(0x80244034L)\n\n//\n// MessageId: WU_E_PT_ECP_FILE_LOCATION_ERROR\n//\n// MessageText:\n//\n// External cab processor was unable to get file locations.\n//\n#define WU_E_PT_ECP_FILE_LOCATION_ERROR  _HRESULT_TYPEDEF_(0x80244035L)\n\n//\n// MessageId: WU_E_PT_CATALOG_SYNC_REQUIRED\n//\n// MessageText:\n//\n// The server does not support category-specific search; Full catalog search has to be issued instead.\n//\n#define WU_E_PT_CATALOG_SYNC_REQUIRED    _HRESULT_TYPEDEF_(0x80240436L)\n\n//\n// MessageId: WU_E_PT_UNEXPECTED\n//\n// MessageText:\n//\n// A communication error not covered by another WU_E_PT_* error code.\n//\n#define WU_E_PT_UNEXPECTED               _HRESULT_TYPEDEF_(0x80244FFFL)\n\n///////////////////////////////////////////////////////////////////////////////\n// Redirector errors\n//\n// The following errors are generated by the components that download and\n// parse the wuredir.cab\n///////////////////////////////////////////////////////////////////////////////\n//\n// MessageId: WU_E_REDIRECTOR_LOAD_XML\n//\n// MessageText:\n//\n// The redirector XML document could not be loaded into the DOM class.\n//\n#define WU_E_REDIRECTOR_LOAD_XML         _HRESULT_TYPEDEF_(0x80245001L)\n\n//\n// MessageId: WU_E_REDIRECTOR_S_FALSE\n//\n// MessageText:\n//\n// The redirector XML document is missing some required information.\n//\n#define WU_E_REDIRECTOR_S_FALSE          _HRESULT_TYPEDEF_(0x80245002L)\n\n//\n// MessageId: WU_E_REDIRECTOR_ID_SMALLER\n//\n// MessageText:\n//\n// The redirectorId in the downloaded redirector cab is less than in the cached cab.\n//\n#define WU_E_REDIRECTOR_ID_SMALLER       _HRESULT_TYPEDEF_(0x80245003L)\n\n//\n// MessageId: WU_E_REDIRECTOR_UNEXPECTED\n//\n// MessageText:\n//\n// The redirector failed for reasons not covered by another WU_E_REDIRECTOR_* error code.\n//\n#define WU_E_REDIRECTOR_UNEXPECTED       _HRESULT_TYPEDEF_(0x80245FFFL)\n\n///////////////////////////////////////////////////////////////////////////////\n// driver util errors\n//\n// The device PnP enumerated device was pruned from the SystemSpec because\n// one of the hardware or compatible IDs matched an installed printer driver.\n// This is not considered a fatal error and the device is simply skipped.\n///////////////////////////////////////////////////////////////////////////////\n//\n// MessageId: WU_E_DRV_PRUNED\n//\n// MessageText:\n//\n// A driver was skipped.\n//\n#define WU_E_DRV_PRUNED                  _HRESULT_TYPEDEF_(0x8024C001L)\n\n//\n// MessageId: WU_E_DRV_NOPROP_OR_LEGACY\n//\n// MessageText:\n//\n// A property for the driver could not be found. It may not conform with required specifications.\n//\n#define WU_E_DRV_NOPROP_OR_LEGACY        _HRESULT_TYPEDEF_(0x8024C002L)\n\n//\n// MessageId: WU_E_DRV_REG_MISMATCH\n//\n// MessageText:\n//\n// The registry type read for the driver does not match the expected type.\n//\n#define WU_E_DRV_REG_MISMATCH            _HRESULT_TYPEDEF_(0x8024C003L)\n\n//\n// MessageId: WU_E_DRV_NO_METADATA\n//\n// MessageText:\n//\n// The driver update is missing metadata.\n//\n#define WU_E_DRV_NO_METADATA             _HRESULT_TYPEDEF_(0x8024C004L)\n\n//\n// MessageId: WU_E_DRV_MISSING_ATTRIBUTE\n//\n// MessageText:\n//\n// The driver update is missing a required attribute.\n//\n#define WU_E_DRV_MISSING_ATTRIBUTE       _HRESULT_TYPEDEF_(0x8024C005L)\n\n//\n// MessageId: WU_E_DRV_SYNC_FAILED\n//\n// MessageText:\n//\n// Driver synchronization failed.\n//\n#define WU_E_DRV_SYNC_FAILED             _HRESULT_TYPEDEF_(0x8024C006L)\n\n//\n// MessageId: WU_E_DRV_NO_PRINTER_CONTENT\n//\n// MessageText:\n//\n// Information required for the synchronization of applicable printers is missing.\n//\n#define WU_E_DRV_NO_PRINTER_CONTENT      _HRESULT_TYPEDEF_(0x8024C007L)\n\n//\n// MessageId: WU_E_DRV_UNEXPECTED\n//\n// MessageText:\n//\n// A driver error not covered by another WU_E_DRV_* code.\n//\n#define WU_E_DRV_UNEXPECTED              _HRESULT_TYPEDEF_(0x8024CFFFL)\n\n//////////////////////////////////////////////////////////////////////////////\n// data store errors\n///////////////////////////////////////////////////////////////////////////////\n//\n// MessageId: WU_E_DS_SHUTDOWN\n//\n// MessageText:\n//\n// An operation failed because Windows Update Agent is shutting down.\n//\n#define WU_E_DS_SHUTDOWN                 _HRESULT_TYPEDEF_(0x80248000L)\n\n//\n// MessageId: WU_E_DS_INUSE\n//\n// MessageText:\n//\n// An operation failed because the data store was in use.\n//\n#define WU_E_DS_INUSE                    _HRESULT_TYPEDEF_(0x80248001L)\n\n//\n// MessageId: WU_E_DS_INVALID\n//\n// MessageText:\n//\n// The current and expected states of the data store do not match.\n//\n#define WU_E_DS_INVALID                  _HRESULT_TYPEDEF_(0x80248002L)\n\n//\n// MessageId: WU_E_DS_TABLEMISSING\n//\n// MessageText:\n//\n// The data store is missing a table.\n//\n#define WU_E_DS_TABLEMISSING             _HRESULT_TYPEDEF_(0x80248003L)\n\n//\n// MessageId: WU_E_DS_TABLEINCORRECT\n//\n// MessageText:\n//\n// The data store contains a table with unexpected columns.\n//\n#define WU_E_DS_TABLEINCORRECT           _HRESULT_TYPEDEF_(0x80248004L)\n\n//\n// MessageId: WU_E_DS_INVALIDTABLENAME\n//\n// MessageText:\n//\n// A table could not be opened because the table is not in the data store.\n//\n#define WU_E_DS_INVALIDTABLENAME         _HRESULT_TYPEDEF_(0x80248005L)\n\n//\n// MessageId: WU_E_DS_BADVERSION\n//\n// MessageText:\n//\n// The current and expected versions of the data store do not match.\n//\n#define WU_E_DS_BADVERSION               _HRESULT_TYPEDEF_(0x80248006L)\n\n//\n// MessageId: WU_E_DS_NODATA\n//\n// MessageText:\n//\n// The information requested is not in the data store.\n//\n#define WU_E_DS_NODATA                   _HRESULT_TYPEDEF_(0x80248007L)\n\n//\n// MessageId: WU_E_DS_MISSINGDATA\n//\n// MessageText:\n//\n// The data store is missing required information or has a NULL in a table column that requires a non-null value.\n//\n#define WU_E_DS_MISSINGDATA              _HRESULT_TYPEDEF_(0x80248008L)\n\n//\n// MessageId: WU_E_DS_MISSINGREF\n//\n// MessageText:\n//\n// The data store is missing required information or has a reference to missing license terms, file, localized property or linked row.\n//\n#define WU_E_DS_MISSINGREF               _HRESULT_TYPEDEF_(0x80248009L)\n\n//\n// MessageId: WU_E_DS_UNKNOWNHANDLER\n//\n// MessageText:\n//\n// The update was not processed because its update handler could not be recognized.\n//\n#define WU_E_DS_UNKNOWNHANDLER           _HRESULT_TYPEDEF_(0x8024800AL)\n\n//\n// MessageId: WU_E_DS_CANTDELETE\n//\n// MessageText:\n//\n// The update was not deleted because it is still referenced by one or more services.\n//\n#define WU_E_DS_CANTDELETE               _HRESULT_TYPEDEF_(0x8024800BL)\n\n//\n// MessageId: WU_E_DS_LOCKTIMEOUTEXPIRED\n//\n// MessageText:\n//\n// The data store section could not be locked within the allotted time.\n//\n#define WU_E_DS_LOCKTIMEOUTEXPIRED       _HRESULT_TYPEDEF_(0x8024800CL)\n\n//\n// MessageId: WU_E_DS_NOCATEGORIES\n//\n// MessageText:\n//\n// The category was not added because it contains no parent categories and is not a top-level category itself.\n//\n#define WU_E_DS_NOCATEGORIES             _HRESULT_TYPEDEF_(0x8024800DL)\n\n//\n// MessageId: WU_E_DS_ROWEXISTS\n//\n// MessageText:\n//\n// The row was not added because an existing row has the same primary key.\n//\n#define WU_E_DS_ROWEXISTS                _HRESULT_TYPEDEF_(0x8024800EL)\n\n//\n// MessageId: WU_E_DS_STOREFILELOCKED\n//\n// MessageText:\n//\n// The data store could not be initialized because it was locked by another process.\n//\n#define WU_E_DS_STOREFILELOCKED          _HRESULT_TYPEDEF_(0x8024800FL)\n\n//\n// MessageId: WU_E_DS_CANNOTREGISTER\n//\n// MessageText:\n//\n// The data store is not allowed to be registered with COM in the current process.\n//\n#define WU_E_DS_CANNOTREGISTER           _HRESULT_TYPEDEF_(0x80248010L)\n\n//\n// MessageId: WU_E_DS_UNABLETOSTART\n//\n// MessageText:\n//\n// Could not create a data store object in another process.\n//\n#define WU_E_DS_UNABLETOSTART            _HRESULT_TYPEDEF_(0x80248011L)\n\n//\n// MessageId: WU_E_DS_DUPLICATEUPDATEID\n//\n// MessageText:\n//\n// The server sent the same update to the client with two different revision IDs.\n//\n#define WU_E_DS_DUPLICATEUPDATEID        _HRESULT_TYPEDEF_(0x80248013L)\n\n//\n// MessageId: WU_E_DS_UNKNOWNSERVICE\n//\n// MessageText:\n//\n// An operation did not complete because the service is not in the data store.\n//\n#define WU_E_DS_UNKNOWNSERVICE           _HRESULT_TYPEDEF_(0x80248014L)\n\n//\n// MessageId: WU_E_DS_SERVICEEXPIRED\n//\n// MessageText:\n//\n// An operation did not complete because the registration of the service has expired.\n//\n#define WU_E_DS_SERVICEEXPIRED           _HRESULT_TYPEDEF_(0x80248015L)\n\n//\n// MessageId: WU_E_DS_DECLINENOTALLOWED\n//\n// MessageText:\n//\n// A request to hide an update was declined because it is a mandatory update or because it was deployed with a deadline.\n//\n#define WU_E_DS_DECLINENOTALLOWED        _HRESULT_TYPEDEF_(0x80248016L)\n\n//\n// MessageId: WU_E_DS_TABLESESSIONMISMATCH\n//\n// MessageText:\n//\n// A table was not closed because it is not associated with the session.\n//\n#define WU_E_DS_TABLESESSIONMISMATCH     _HRESULT_TYPEDEF_(0x80248017L)\n\n//\n// MessageId: WU_E_DS_SESSIONLOCKMISMATCH\n//\n// MessageText:\n//\n// A table was not closed because it is not associated with the session.\n//\n#define WU_E_DS_SESSIONLOCKMISMATCH      _HRESULT_TYPEDEF_(0x80248018L)\n\n//\n// MessageId: WU_E_DS_NEEDWINDOWSSERVICE\n//\n// MessageText:\n//\n// 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.\n//\n#define WU_E_DS_NEEDWINDOWSSERVICE       _HRESULT_TYPEDEF_(0x80248019L)\n\n//\n// MessageId: WU_E_DS_INVALIDOPERATION\n//\n// MessageText:\n//\n// A request was declined because the operation is not allowed.\n//\n#define WU_E_DS_INVALIDOPERATION         _HRESULT_TYPEDEF_(0x8024801AL)\n\n//\n// MessageId: WU_E_DS_SCHEMAMISMATCH\n//\n// MessageText:\n//\n// The schema of the current data store and the schema of a table in a backup XML document do not match.\n//\n#define WU_E_DS_SCHEMAMISMATCH           _HRESULT_TYPEDEF_(0x8024801BL)\n\n//\n// MessageId: WU_E_DS_RESETREQUIRED\n//\n// MessageText:\n//\n// The data store requires a session reset; release the session and retry with a new session.\n//\n#define WU_E_DS_RESETREQUIRED            _HRESULT_TYPEDEF_(0x8024801CL)\n\n//\n// MessageId: WU_E_DS_IMPERSONATED\n//\n// MessageText:\n//\n// A data store operation did not complete because it was requested with an impersonated identity.\n//\n#define WU_E_DS_IMPERSONATED             _HRESULT_TYPEDEF_(0x8024801DL)\n\n//\n// MessageId: WU_E_DS_UNEXPECTED\n//\n// MessageText:\n//\n// A data store error not covered by another WU_E_DS_* code.\n//\n#define WU_E_DS_UNEXPECTED               _HRESULT_TYPEDEF_(0x80248FFFL)\n\n/////////////////////////////////////////////////////////////////////////////\n//Inventory Errors\n/////////////////////////////////////////////////////////////////////////////\n//\n// MessageId: WU_E_INVENTORY_PARSEFAILED\n//\n// MessageText:\n//\n// Parsing of the rule file failed.\n//\n#define WU_E_INVENTORY_PARSEFAILED       _HRESULT_TYPEDEF_(0x80249001L)\n\n//\n// MessageId: WU_E_INVENTORY_GET_INVENTORY_TYPE_FAILED\n//\n// MessageText:\n//\n// Failed to get the requested inventory type from the server.\n//\n#define WU_E_INVENTORY_GET_INVENTORY_TYPE_FAILED _HRESULT_TYPEDEF_(0x80249002L)\n\n//\n// MessageId: WU_E_INVENTORY_RESULT_UPLOAD_FAILED\n//\n// MessageText:\n//\n// Failed to upload inventory result to the server.\n//\n#define WU_E_INVENTORY_RESULT_UPLOAD_FAILED _HRESULT_TYPEDEF_(0x80249003L)\n\n//\n// MessageId: WU_E_INVENTORY_UNEXPECTED\n//\n// MessageText:\n//\n// There was an inventory error not covered by another error code.\n//\n#define WU_E_INVENTORY_UNEXPECTED        _HRESULT_TYPEDEF_(0x80249004L)\n\n//\n// MessageId: WU_E_INVENTORY_WMI_ERROR\n//\n// MessageText:\n//\n// A WMI error occurred when enumerating the instances for a particular class.\n//\n#define WU_E_INVENTORY_WMI_ERROR         _HRESULT_TYPEDEF_(0x80249005L)\n\n/////////////////////////////////////////////////////////////////////////////\n//AU Errors\n/////////////////////////////////////////////////////////////////////////////\n//\n// MessageId: WU_E_AU_NOSERVICE\n//\n// MessageText:\n//\n// Automatic Updates was unable to service incoming requests.\n//\n#define WU_E_AU_NOSERVICE                _HRESULT_TYPEDEF_(0x8024A000L)\n\n//\n// MessageId: WU_E_AU_NONLEGACYSERVER\n//\n// MessageText:\n//\n// The old version of the Automatic Updates client has stopped because the WSUS server has been upgraded.\n//\n#define WU_E_AU_NONLEGACYSERVER          _HRESULT_TYPEDEF_(0x8024A002L)\n\n//\n// MessageId: WU_E_AU_LEGACYCLIENTDISABLED\n//\n// MessageText:\n//\n// The old version of the Automatic Updates client was disabled.\n//\n#define WU_E_AU_LEGACYCLIENTDISABLED     _HRESULT_TYPEDEF_(0x8024A003L)\n\n//\n// MessageId: WU_E_AU_PAUSED\n//\n// MessageText:\n//\n// Automatic Updates was unable to process incoming requests because it was paused.\n//\n#define WU_E_AU_PAUSED                   _HRESULT_TYPEDEF_(0x8024A004L)\n\n//\n// MessageId: WU_E_AU_NO_REGISTERED_SERVICE\n//\n// MessageText:\n//\n// No unmanaged service is registered with AU.\n//\n#define WU_E_AU_NO_REGISTERED_SERVICE    _HRESULT_TYPEDEF_(0x8024A005L)\n\n//\n// MessageId: WU_E_AU_DETECT_SVCID_MISMATCH\n//\n// MessageText:\n//\n// The default service registered with AU changed during the search.\n//\n#define WU_E_AU_DETECT_SVCID_MISMATCH    _HRESULT_TYPEDEF_(0x8024A006L)\n\n//\n// MessageId: WU_E_AU_UNEXPECTED\n//\n// MessageText:\n//\n// An Automatic Updates error not covered by another WU_E_AU * code.\n//\n#define WU_E_AU_UNEXPECTED               _HRESULT_TYPEDEF_(0x8024AFFFL)\n\n//////////////////////////////////////////////////////////////////////////////\n// update handler errors\n///////////////////////////////////////////////////////////////////////////////\n//\n// MessageId: WU_E_UH_REMOTEUNAVAILABLE\n//\n// MessageText:\n//\n// A request for a remote update handler could not be completed because no remote process is available.\n//\n#define WU_E_UH_REMOTEUNAVAILABLE        _HRESULT_TYPEDEF_(0x80242000L)\n\n//\n// MessageId: WU_E_UH_LOCALONLY\n//\n// MessageText:\n//\n// A request for a remote update handler could not be completed because the handler is local only.\n//\n#define WU_E_UH_LOCALONLY                _HRESULT_TYPEDEF_(0x80242001L)\n\n//\n// MessageId: WU_E_UH_UNKNOWNHANDLER\n//\n// MessageText:\n//\n// A request for an update handler could not be completed because the handler could not be recognized.\n//\n#define WU_E_UH_UNKNOWNHANDLER           _HRESULT_TYPEDEF_(0x80242002L)\n\n//\n// MessageId: WU_E_UH_REMOTEALREADYACTIVE\n//\n// MessageText:\n//\n// A remote update handler could not be created because one already exists.\n//\n#define WU_E_UH_REMOTEALREADYACTIVE      _HRESULT_TYPEDEF_(0x80242003L)\n\n//\n// MessageId: WU_E_UH_DOESNOTSUPPORTACTION\n//\n// MessageText:\n//\n// A request for the handler to install (uninstall) an update could not be completed because the update does not support install (uninstall).\n//\n#define WU_E_UH_DOESNOTSUPPORTACTION     _HRESULT_TYPEDEF_(0x80242004L)\n\n//\n// MessageId: WU_E_UH_WRONGHANDLER\n//\n// MessageText:\n//\n// An operation did not complete because the wrong handler was specified.\n//\n#define WU_E_UH_WRONGHANDLER             _HRESULT_TYPEDEF_(0x80242005L)\n\n//\n// MessageId: WU_E_UH_INVALIDMETADATA\n//\n// MessageText:\n//\n// A handler operation could not be completed because the update contains invalid metadata.\n//\n#define WU_E_UH_INVALIDMETADATA          _HRESULT_TYPEDEF_(0x80242006L)\n\n//\n// MessageId: WU_E_UH_INSTALLERHUNG\n//\n// MessageText:\n//\n// An operation could not be completed because the installer exceeded the time limit.\n//\n#define WU_E_UH_INSTALLERHUNG            _HRESULT_TYPEDEF_(0x80242007L)\n\n//\n// MessageId: WU_E_UH_OPERATIONCANCELLED\n//\n// MessageText:\n//\n// An operation being done by the update handler was cancelled.\n//\n#define WU_E_UH_OPERATIONCANCELLED       _HRESULT_TYPEDEF_(0x80242008L)\n\n//\n// MessageId: WU_E_UH_BADHANDLERXML\n//\n// MessageText:\n//\n// An operation could not be completed because the handler-specific metadata is invalid.\n//\n#define WU_E_UH_BADHANDLERXML            _HRESULT_TYPEDEF_(0x80242009L)\n\n//\n// MessageId: WU_E_UH_CANREQUIREINPUT\n//\n// MessageText:\n//\n// A request to the handler to install an update could not be completed because the update requires user input.\n//\n#define WU_E_UH_CANREQUIREINPUT          _HRESULT_TYPEDEF_(0x8024200AL)\n\n//\n// MessageId: WU_E_UH_INSTALLERFAILURE\n//\n// MessageText:\n//\n// The installer failed to install (uninstall) one or more updates.\n//\n#define WU_E_UH_INSTALLERFAILURE         _HRESULT_TYPEDEF_(0x8024200BL)\n\n//\n// MessageId: WU_E_UH_FALLBACKTOSELFCONTAINED\n//\n// MessageText:\n//\n// The update handler should download self-contained content rather than delta-compressed content for the update.\n//\n#define WU_E_UH_FALLBACKTOSELFCONTAINED  _HRESULT_TYPEDEF_(0x8024200CL)\n\n//\n// MessageId: WU_E_UH_NEEDANOTHERDOWNLOAD\n//\n// MessageText:\n//\n// The update handler did not install the update because it needs to be downloaded again.\n//\n#define WU_E_UH_NEEDANOTHERDOWNLOAD      _HRESULT_TYPEDEF_(0x8024200DL)\n\n//\n// MessageId: WU_E_UH_NOTIFYFAILURE\n//\n// MessageText:\n//\n// The update handler failed to send notification of the status of the install (uninstall) operation.\n//\n#define WU_E_UH_NOTIFYFAILURE            _HRESULT_TYPEDEF_(0x8024200EL)\n\n//\n// MessageId: WU_E_UH_INCONSISTENT_FILE_NAMES\n//\n// MessageText:\n//\n// The file names contained in the update metadata and in the update package are inconsistent.\n//\n#define WU_E_UH_INCONSISTENT_FILE_NAMES  _HRESULT_TYPEDEF_(0x8024200FL)\n\n//\n// MessageId: WU_E_UH_FALLBACKERROR\n//\n// MessageText:\n//\n// The update handler failed to fall back to the self-contained content.\n//\n#define WU_E_UH_FALLBACKERROR            _HRESULT_TYPEDEF_(0x80242010L)\n\n//\n// MessageId: WU_E_UH_TOOMANYDOWNLOADREQUESTS\n//\n// MessageText:\n//\n// The update handler has exceeded the maximum number of download requests.\n//\n#define WU_E_UH_TOOMANYDOWNLOADREQUESTS  _HRESULT_TYPEDEF_(0x80242011L)\n\n//\n// MessageId: WU_E_UH_UNEXPECTEDCBSRESPONSE\n//\n// MessageText:\n//\n// The update handler has received an unexpected response from CBS.\n//\n#define WU_E_UH_UNEXPECTEDCBSRESPONSE    _HRESULT_TYPEDEF_(0x80242012L)\n\n//\n// MessageId: WU_E_UH_BADCBSPACKAGEID\n//\n// MessageText:\n//\n// The update metadata contains an invalid CBS package identifier.\n//\n#define WU_E_UH_BADCBSPACKAGEID          _HRESULT_TYPEDEF_(0x80242013L)\n\n//\n// MessageId: WU_E_UH_POSTREBOOTSTILLPENDING\n//\n// MessageText:\n//\n// The post-reboot operation for the update is still in progress.\n//\n#define WU_E_UH_POSTREBOOTSTILLPENDING   _HRESULT_TYPEDEF_(0x80242014L)\n\n//\n// MessageId: WU_E_UH_POSTREBOOTRESULTUNKNOWN\n//\n// MessageText:\n//\n// The result of the post-reboot operation for the update could not be determined.\n//\n#define WU_E_UH_POSTREBOOTRESULTUNKNOWN  _HRESULT_TYPEDEF_(0x80242015L)\n\n//\n// MessageId: WU_E_UH_POSTREBOOTUNEXPECTEDSTATE\n//\n// MessageText:\n//\n// The state of the update after its post-reboot operation has completed is unexpected.\n//\n#define WU_E_UH_POSTREBOOTUNEXPECTEDSTATE _HRESULT_TYPEDEF_(0x80242016L)\n\n//\n// MessageId: WU_E_UH_NEW_SERVICING_STACK_REQUIRED\n//\n// MessageText:\n//\n// The OS servicing stack must be updated before this update is downloaded or installed.\n//\n#define WU_E_UH_NEW_SERVICING_STACK_REQUIRED _HRESULT_TYPEDEF_(0x80242017L)\n\n//\n// MessageId: WU_E_UH_CALLED_BACK_FAILURE\n//\n// MessageText:\n//\n// A callback installer called back with an error.\n//\n#define WU_E_UH_CALLED_BACK_FAILURE      _HRESULT_TYPEDEF_(0x80242018L)\n\n//\n// MessageId: WU_E_UH_CUSTOMINSTALLER_INVALID_SIGNATURE\n//\n// MessageText:\n//\n// The custom installer signature did not match the signature required by the update.\n//\n#define WU_E_UH_CUSTOMINSTALLER_INVALID_SIGNATURE _HRESULT_TYPEDEF_(0x80242019L)\n\n//\n// MessageId: WU_E_UH_UNSUPPORTED_INSTALLCONTEXT\n//\n// MessageText:\n//\n// The installer does not support the installation configuration.\n//\n#define WU_E_UH_UNSUPPORTED_INSTALLCONTEXT _HRESULT_TYPEDEF_(0x8024201AL)\n\n//\n// MessageId: WU_E_UH_INVALID_TARGETSESSION\n//\n// MessageText:\n//\n// The targeted session for isntall is invalid.\n//\n#define WU_E_UH_INVALID_TARGETSESSION    _HRESULT_TYPEDEF_(0x8024201BL)\n\n//\n// MessageId: WU_E_UH_UNEXPECTED\n//\n// MessageText:\n//\n// An update handler error not covered by another WU_E_UH_* code.\n//\n#define WU_E_UH_UNEXPECTED               _HRESULT_TYPEDEF_(0x80242FFFL)\n\n//////////////////////////////////////////////////////////////////////////////\n// download manager errors\n///////////////////////////////////////////////////////////////////////////////\n//\n// MessageId: WU_E_DM_URLNOTAVAILABLE\n//\n// MessageText:\n//\n// A download manager operation could not be completed because the requested file does not have a URL.\n//\n#define WU_E_DM_URLNOTAVAILABLE          _HRESULT_TYPEDEF_(0x80246001L)\n\n//\n// MessageId: WU_E_DM_INCORRECTFILEHASH\n//\n// MessageText:\n//\n// A download manager operation could not be completed because the file digest was not recognized.\n//\n#define WU_E_DM_INCORRECTFILEHASH        _HRESULT_TYPEDEF_(0x80246002L)\n\n//\n// MessageId: WU_E_DM_UNKNOWNALGORITHM\n//\n// MessageText:\n//\n// A download manager operation could not be completed because the file metadata requested an unrecognized hash algorithm.\n//\n#define WU_E_DM_UNKNOWNALGORITHM         _HRESULT_TYPEDEF_(0x80246003L)\n\n//\n// MessageId: WU_E_DM_NEEDDOWNLOADREQUEST\n//\n// MessageText:\n//\n// An operation could not be completed because a download request is required from the download handler.\n//\n#define WU_E_DM_NEEDDOWNLOADREQUEST      _HRESULT_TYPEDEF_(0x80246004L)\n\n//\n// MessageId: WU_E_DM_NONETWORK\n//\n// MessageText:\n//\n// A download manager operation could not be completed because the network connection was unavailable.\n//\n#define WU_E_DM_NONETWORK                _HRESULT_TYPEDEF_(0x80246005L)\n\n//\n// MessageId: WU_E_DM_WRONGBITSVERSION\n//\n// MessageText:\n//\n// A download manager operation could not be completed because the version of Background Intelligent Transfer Service (BITS) is incompatible.\n//\n#define WU_E_DM_WRONGBITSVERSION         _HRESULT_TYPEDEF_(0x80246006L)\n\n//\n// MessageId: WU_E_DM_NOTDOWNLOADED\n//\n// MessageText:\n//\n// The update has not been downloaded.\n//\n#define WU_E_DM_NOTDOWNLOADED            _HRESULT_TYPEDEF_(0x80246007L)\n\n//\n// MessageId: WU_E_DM_FAILTOCONNECTTOBITS\n//\n// MessageText:\n//\n// A download manager operation failed because the download manager was unable to connect the Background Intelligent Transfer Service (BITS).\n//\n#define WU_E_DM_FAILTOCONNECTTOBITS      _HRESULT_TYPEDEF_(0x80246008L)\n\n//\n// MessageId: WU_E_DM_BITSTRANSFERERROR\n//\n// MessageText:\n//\n// A download manager operation failed because there was an unspecified Background Intelligent Transfer Service (BITS) transfer error.\n//\n#define WU_E_DM_BITSTRANSFERERROR        _HRESULT_TYPEDEF_(0x80246009L)\n\n//\n// MessageId: WU_E_DM_DOWNLOADLOCATIONCHANGED\n//\n// MessageText:\n//\n// A download must be restarted because the location of the source of the download has changed.\n//\n#define WU_E_DM_DOWNLOADLOCATIONCHANGED  _HRESULT_TYPEDEF_(0x8024600AL)\n\n//\n// MessageId: WU_E_DM_CONTENTCHANGED\n//\n// MessageText:\n//\n// A download must be restarted because the update content changed in a new revision.\n//\n#define WU_E_DM_CONTENTCHANGED           _HRESULT_TYPEDEF_(0x8024600BL)\n\n//\n// MessageId: WU_E_DM_UNEXPECTED\n//\n// MessageText:\n//\n// There was a download manager error not covered by another WU_E_DM_* error code.\n//\n#define WU_E_DM_UNEXPECTED               _HRESULT_TYPEDEF_(0x80246FFFL)\n\n//////////////////////////////////////////////////////////////////////////////\n// Setup/SelfUpdate errors\n///////////////////////////////////////////////////////////////////////////////\n//\n// MessageId: WU_E_SETUP_INVALID_INFDATA\n//\n// MessageText:\n//\n// Windows Update Agent could not be updated because an INF file contains invalid information.\n//\n#define WU_E_SETUP_INVALID_INFDATA       _HRESULT_TYPEDEF_(0x8024D001L)\n\n//\n// MessageId: WU_E_SETUP_INVALID_IDENTDATA\n//\n// MessageText:\n//\n// Windows Update Agent could not be updated because the wuident.cab file contains invalid information.\n//\n#define WU_E_SETUP_INVALID_IDENTDATA     _HRESULT_TYPEDEF_(0x8024D002L)\n\n//\n// MessageId: WU_E_SETUP_ALREADY_INITIALIZED\n//\n// MessageText:\n//\n// Windows Update Agent could not be updated because of an internal error that caused setup initialization to be performed twice.\n//\n#define WU_E_SETUP_ALREADY_INITIALIZED   _HRESULT_TYPEDEF_(0x8024D003L)\n\n//\n// MessageId: WU_E_SETUP_NOT_INITIALIZED\n//\n// MessageText:\n//\n// Windows Update Agent could not be updated because setup initialization never completed successfully.\n//\n#define WU_E_SETUP_NOT_INITIALIZED       _HRESULT_TYPEDEF_(0x8024D004L)\n\n//\n// MessageId: WU_E_SETUP_SOURCE_VERSION_MISMATCH\n//\n// MessageText:\n//\n// Windows Update Agent could not be updated because the versions specified in the INF do not match the actual source file versions.\n//\n#define WU_E_SETUP_SOURCE_VERSION_MISMATCH _HRESULT_TYPEDEF_(0x8024D005L)\n\n//\n// MessageId: WU_E_SETUP_TARGET_VERSION_GREATER\n//\n// MessageText:\n//\n// Windows Update Agent could not be updated because a WUA file on the target system is newer than the corresponding source file.\n//\n#define WU_E_SETUP_TARGET_VERSION_GREATER _HRESULT_TYPEDEF_(0x8024D006L)\n\n//\n// MessageId: WU_E_SETUP_REGISTRATION_FAILED\n//\n// MessageText:\n//\n// Windows Update Agent could not be updated because regsvr32.exe returned an error.\n//\n#define WU_E_SETUP_REGISTRATION_FAILED   _HRESULT_TYPEDEF_(0x8024D007L)\n\n//\n// MessageId: WU_E_SELFUPDATE_SKIP_ON_FAILURE\n//\n// MessageText:\n//\n// An update to the Windows Update Agent was skipped because previous attempts to update have failed.\n//\n#define WU_E_SELFUPDATE_SKIP_ON_FAILURE  _HRESULT_TYPEDEF_(0x8024D008L)\n\n//\n// MessageId: WU_E_SETUP_SKIP_UPDATE\n//\n// MessageText:\n//\n// An update to the Windows Update Agent was skipped due to a directive in the wuident.cab file.\n//\n#define WU_E_SETUP_SKIP_UPDATE           _HRESULT_TYPEDEF_(0x8024D009L)\n\n//\n// MessageId: WU_E_SETUP_UNSUPPORTED_CONFIGURATION\n//\n// MessageText:\n//\n// Windows Update Agent could not be updated because the current system configuration is not supported.\n//\n#define WU_E_SETUP_UNSUPPORTED_CONFIGURATION _HRESULT_TYPEDEF_(0x8024D00AL)\n\n//\n// MessageId: WU_E_SETUP_BLOCKED_CONFIGURATION\n//\n// MessageText:\n//\n// Windows Update Agent could not be updated because the system is configured to block the update.\n//\n#define WU_E_SETUP_BLOCKED_CONFIGURATION _HRESULT_TYPEDEF_(0x8024D00BL)\n\n//\n// MessageId: WU_E_SETUP_REBOOT_TO_FIX\n//\n// MessageText:\n//\n// Windows Update Agent could not be updated because a restart of the system is required.\n//\n#define WU_E_SETUP_REBOOT_TO_FIX         _HRESULT_TYPEDEF_(0x8024D00CL)\n\n//\n// MessageId: WU_E_SETUP_ALREADYRUNNING\n//\n// MessageText:\n//\n// Windows Update Agent setup is already running.\n//\n#define WU_E_SETUP_ALREADYRUNNING        _HRESULT_TYPEDEF_(0x8024D00DL)\n\n//\n// MessageId: WU_E_SETUP_REBOOTREQUIRED\n//\n// MessageText:\n//\n// Windows Update Agent setup package requires a reboot to complete installation.\n//\n#define WU_E_SETUP_REBOOTREQUIRED        _HRESULT_TYPEDEF_(0x8024D00EL)\n\n//\n// MessageId: WU_E_SETUP_HANDLER_EXEC_FAILURE\n//\n// MessageText:\n//\n// Windows Update Agent could not be updated because the setup handler failed during execution.\n//\n#define WU_E_SETUP_HANDLER_EXEC_FAILURE  _HRESULT_TYPEDEF_(0x8024D00FL)\n\n//\n// MessageId: WU_E_SETUP_INVALID_REGISTRY_DATA\n//\n// MessageText:\n//\n// Windows Update Agent could not be updated because the registry contains invalid information.\n//\n#define WU_E_SETUP_INVALID_REGISTRY_DATA _HRESULT_TYPEDEF_(0x8024D010L)\n\n//\n// MessageId: WU_E_SELFUPDATE_REQUIRED\n//\n// MessageText:\n//\n// Windows Update Agent must be updated before search can continue.\n//\n#define WU_E_SELFUPDATE_REQUIRED         _HRESULT_TYPEDEF_(0x8024D011L)\n\n//\n// MessageId: WU_E_SELFUPDATE_REQUIRED_ADMIN\n//\n// MessageText:\n//\n// Windows Update Agent must be updated before search can continue.  An administrator is required to perform the operation.\n//\n#define WU_E_SELFUPDATE_REQUIRED_ADMIN   _HRESULT_TYPEDEF_(0x8024D012L)\n\n//\n// MessageId: WU_E_SETUP_WRONG_SERVER_VERSION\n//\n// MessageText:\n//\n// Windows Update Agent could not be updated because the server does not contain update information for this version.\n//\n#define WU_E_SETUP_WRONG_SERVER_VERSION  _HRESULT_TYPEDEF_(0x8024D013L)\n\n//\n// MessageId: WU_E_SETUP_UNEXPECTED\n//\n// MessageText:\n//\n// Windows Update Agent could not be updated because of an error not covered by another WU_E_SETUP_* error code.\n//\n#define WU_E_SETUP_UNEXPECTED            _HRESULT_TYPEDEF_(0x8024DFFFL)\n\n//////////////////////////////////////////////////////////////////////////////\n// expression evaluator errors\n///////////////////////////////////////////////////////////////////////////////\n//\n// MessageId: WU_E_EE_UNKNOWN_EXPRESSION\n//\n// MessageText:\n//\n// An expression evaluator operation could not be completed because an expression was unrecognized.\n//\n#define WU_E_EE_UNKNOWN_EXPRESSION       _HRESULT_TYPEDEF_(0x8024E001L)\n\n//\n// MessageId: WU_E_EE_INVALID_EXPRESSION\n//\n// MessageText:\n//\n// An expression evaluator operation could not be completed because an expression was invalid.\n//\n#define WU_E_EE_INVALID_EXPRESSION       _HRESULT_TYPEDEF_(0x8024E002L)\n\n//\n// MessageId: WU_E_EE_MISSING_METADATA\n//\n// MessageText:\n//\n// An expression evaluator operation could not be completed because an expression contains an incorrect number of metadata nodes.\n//\n#define WU_E_EE_MISSING_METADATA         _HRESULT_TYPEDEF_(0x8024E003L)\n\n//\n// MessageId: WU_E_EE_INVALID_VERSION\n//\n// MessageText:\n//\n// An expression evaluator operation could not be completed because the version of the serialized expression data is invalid.\n//\n#define WU_E_EE_INVALID_VERSION          _HRESULT_TYPEDEF_(0x8024E004L)\n\n//\n// MessageId: WU_E_EE_NOT_INITIALIZED\n//\n// MessageText:\n//\n// The expression evaluator could not be initialized.\n//\n#define WU_E_EE_NOT_INITIALIZED          _HRESULT_TYPEDEF_(0x8024E005L)\n\n//\n// MessageId: WU_E_EE_INVALID_ATTRIBUTEDATA\n//\n// MessageText:\n//\n// An expression evaluator operation could not be completed because there was an invalid attribute.\n//\n#define WU_E_EE_INVALID_ATTRIBUTEDATA    _HRESULT_TYPEDEF_(0x8024E006L)\n\n//\n// MessageId: WU_E_EE_CLUSTER_ERROR\n//\n// MessageText:\n//\n// An expression evaluator operation could not be completed because the cluster state of the computer could not be determined.\n//\n#define WU_E_EE_CLUSTER_ERROR            _HRESULT_TYPEDEF_(0x8024E007L)\n\n//\n// MessageId: WU_E_EE_UNEXPECTED\n//\n// MessageText:\n//\n// There was an expression evaluator error not covered by another WU_E_EE_* error code.\n//\n#define WU_E_EE_UNEXPECTED               _HRESULT_TYPEDEF_(0x8024EFFFL)\n\n//////////////////////////////////////////////////////////////////////////////\n// UI errors\n///////////////////////////////////////////////////////////////////////////////\n//\n// MessageId: WU_E_INSTALLATION_RESULTS_UNKNOWN_VERSION\n//\n// MessageText:\n//\n// The results of download and installation could not be read from the registry due to an unrecognized data format version.\n//\n#define WU_E_INSTALLATION_RESULTS_UNKNOWN_VERSION _HRESULT_TYPEDEF_(0x80243001L)\n\n//\n// MessageId: WU_E_INSTALLATION_RESULTS_INVALID_DATA\n//\n// MessageText:\n//\n// The results of download and installation could not be read from the registry due to an invalid data format.\n//\n#define WU_E_INSTALLATION_RESULTS_INVALID_DATA _HRESULT_TYPEDEF_(0x80243002L)\n\n//\n// MessageId: WU_E_INSTALLATION_RESULTS_NOT_FOUND\n//\n// MessageText:\n//\n// The results of download and installation are not available; the operation may have failed to start.\n//\n#define WU_E_INSTALLATION_RESULTS_NOT_FOUND _HRESULT_TYPEDEF_(0x80243003L)\n\n//\n// MessageId: WU_E_TRAYICON_FAILURE\n//\n// MessageText:\n//\n// A failure occurred when trying to create an icon in the taskbar notification area.\n//\n#define WU_E_TRAYICON_FAILURE            _HRESULT_TYPEDEF_(0x80243004L)\n\n//\n// MessageId: WU_E_NON_UI_MODE\n//\n// MessageText:\n//\n// Unable to show UI when in non-UI mode; WU client UI modules may not be installed.\n//\n#define WU_E_NON_UI_MODE                 _HRESULT_TYPEDEF_(0x80243FFDL)\n\n//\n// MessageId: WU_E_WUCLTUI_UNSUPPORTED_VERSION\n//\n// MessageText:\n//\n// Unsupported version of WU client UI exported functions.\n//\n#define WU_E_WUCLTUI_UNSUPPORTED_VERSION _HRESULT_TYPEDEF_(0x80243FFEL)\n\n//\n// MessageId: WU_E_AUCLIENT_UNEXPECTED\n//\n// MessageText:\n//\n// There was a user interface error not covered by another WU_E_AUCLIENT_* error code.\n//\n#define WU_E_AUCLIENT_UNEXPECTED         _HRESULT_TYPEDEF_(0x80243FFFL)\n\n//////////////////////////////////////////////////////////////////////////////\n// reporter errors\n///////////////////////////////////////////////////////////////////////////////\n//\n// MessageId: WU_E_REPORTER_EVENTCACHECORRUPT\n//\n// MessageText:\n//\n// The event cache file was defective.\n//\n#define WU_E_REPORTER_EVENTCACHECORRUPT  _HRESULT_TYPEDEF_(0x8024F001L)\n\n//\n// MessageId: WU_E_REPORTER_EVENTNAMESPACEPARSEFAILED\n//\n// MessageText:\n//\n// The XML in the event namespace descriptor could not be parsed.\n//\n#define WU_E_REPORTER_EVENTNAMESPACEPARSEFAILED _HRESULT_TYPEDEF_(0x8024F002L)\n\n//\n// MessageId: WU_E_INVALID_EVENT\n//\n// MessageText:\n//\n// The XML in the event namespace descriptor could not be parsed.\n//\n#define WU_E_INVALID_EVENT               _HRESULT_TYPEDEF_(0x8024F003L)\n\n//\n// MessageId: WU_E_SERVER_BUSY\n//\n// MessageText:\n//\n// The server rejected an event because the server was too busy.\n//\n#define WU_E_SERVER_BUSY                 _HRESULT_TYPEDEF_(0x8024F004L)\n\n//\n// MessageId: WU_E_CALLBACK_COOKIE_NOT_FOUND\n//\n// MessageText:\n//\n// The specified callback cookie is not found.\n//\n#define WU_E_CALLBACK_COOKIE_NOT_FOUND   _HRESULT_TYPEDEF_(0x8024F005L)\n\n//\n// MessageId: WU_E_REPORTER_UNEXPECTED\n//\n// MessageText:\n//\n// There was a reporter error not covered by another error code.\n//\n#define WU_E_REPORTER_UNEXPECTED         _HRESULT_TYPEDEF_(0x8024FFFFL)\n\n//\n// MessageId: WU_E_OL_INVALID_SCANFILE\n//\n// MessageText:\n//\n// An operation could not be completed because the scan package was invalid.\n//\n#define WU_E_OL_INVALID_SCANFILE         _HRESULT_TYPEDEF_(0x80247001L)\n\n//\n// MessageId: WU_E_OL_NEWCLIENT_REQUIRED\n//\n// MessageText:\n//\n// An operation could not be completed because the scan package requires a greater version of the Windows Update Agent.\n//\n#define WU_E_OL_NEWCLIENT_REQUIRED       _HRESULT_TYPEDEF_(0x80247002L)\n\n//\n// MessageId: WU_E_OL_UNEXPECTED\n//\n// MessageText:\n//\n// Search using the scan package failed.\n//\n#define WU_E_OL_UNEXPECTED               _HRESULT_TYPEDEF_(0x80247FFFL)\n\n#endif //_WUERROR_\n"
  },
  {
    "path": "launcher/CplTasks.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<applications xmlns=\"http://schemas.microsoft.com/windows/cpltasks/v1\" xmlns:sh=\"http://schemas.microsoft.com/windows/tasks/v1\">\n\t<application id=\"{FFBE8D44-E9CF-4DD8-9FD6-976802C94D9C}\">\n\t\t<sh:task id=\"{9943E8C8-748D-47CE-AE10-9FA4A80ED28B}\" needsElevation=\"true\">\n\t\t\t<sh:name>@&quot;%ProgramFiles%\\Legacy Update\\LegacyUpdate.exe&quot;,-3</sh:name>\n\t\t\t<sh:keywords>legacy update;legacyupdate;update;windows;microsoft;driver;security;software;</sh:keywords>\n\t\t\t<sh:command>&quot;%ProgramFiles%\\Legacy Update\\LegacyUpdate.exe&quot;</sh:command>\n\t\t</sh:task>\n\n\t\t<category id=\"5\">\n\t\t\t<sh:task idref=\"{9943E8C8-748D-47CE-AE10-9FA4A80ED28B}\" />\n\t\t</category>\n\n\t\t<category id=\"10\">\n\t\t\t<sh:task idref=\"{9943E8C8-748D-47CE-AE10-9FA4A80ED28B}\" />\n\t\t</category>\n\t</application>\n</applications>\n"
  },
  {
    "path": "launcher/InitRunOnce.c",
    "content": "#include <windows.h>\n#include <commctrl.h>\n#include \"HResult.h\"\n#include \"LoadImage.h\"\n#include \"MsgBox.h\"\n#include \"Registry.h\"\n#include \"VersionInfo.h\"\n#include \"resource.h\"\n\n#define HK_RUNCMD 1\n\ntypedef DWORD (__fastcall *_ThemeWaitForServiceReady)(DWORD timeout);\ntypedef DWORD (__fastcall *_ThemeWatchForStart)(void);\n\nstatic const COLORREF WallpaperColorWinXP = RGB( 0,  78, 152); // #004e98\nstatic const COLORREF WallpaperColorWin8  = RGB(32, 103, 178); // #2067b2\nstatic const COLORREF WallpaperColorWin10 = RGB(24,   0,  82); // #180052\n\nstatic const WCHAR RunOnceClassName[] = L\"LegacyUpdateRunOnce\";\n\nstatic HANDLE g_cmdHandle;\n\nstatic void StartThemes(void) {\n\t// Ask UxInit.dll to ask the Themes service to start a session for this desktop. Themes doesn't automatically start a\n\t// session for the SYSTEM desktop, so we need to ask it to. This matches what msoobe.exe does on first boot.\n\n\t// Windows 7 moves this to UxInit.dll\n\tHMODULE shsvcs = LoadLibrary(L\"UxInit.dll\");\n\tif (!shsvcs) {\n\t\tshsvcs = LoadLibrary(L\"shsvcs.dll\");\n\t\tif (!shsvcs) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Get functions by ordinals\n\t_ThemeWaitForServiceReady $ThemeWaitForServiceReady = (_ThemeWaitForServiceReady)GetProcAddress(shsvcs, MAKEINTRESOURCEA(2));\n\t_ThemeWatchForStart $ThemeWatchForStart = (_ThemeWatchForStart)GetProcAddress(shsvcs, MAKEINTRESOURCEA(1));\n\n\t// 1. Wait up to 1000ms for Themes to start\n\tif ($ThemeWaitForServiceReady) {\n\t\t$ThemeWaitForServiceReady(1000);\n\t}\n\n\t// 2. Prompt Themes to start a session for the SYSTEM desktop\n\tif ($ThemeWatchForStart) {\n\t\t$ThemeWatchForStart();\n\t}\n\n\tFreeLibrary(shsvcs);\n}\n\nstatic BOOL RunCmd(LPPROCESS_INFORMATION processInfo) {\n\tif (g_cmdHandle) {\n\t\treturn TRUE;\n\t}\n\n\tWCHAR cmd[MAX_PATH];\n\tExpandEnvironmentStrings(L\"%SystemRoot%\\\\System32\\\\cmd.exe\", cmd, ARRAYSIZE(cmd));\n\n\tSTARTUPINFO startupInfo = {0};\n\tstartupInfo.cb = sizeof(startupInfo);\n\n\tif (!CreateProcess(NULL, cmd, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &startupInfo, processInfo)) {\n\t\tMsgBox(NULL, L\"Launching cmd.exe failed\", NULL, MB_OK | MB_ICONERROR);\n\t\treturn FALSE;\n\t}\n\n\tCloseHandle(processInfo->hThread);\n\tg_cmdHandle = processInfo->hProcess;\n\treturn TRUE;\n}\n\nstatic LRESULT CALLBACK RunOnceWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {\n\tswitch (message) {\n\tcase WM_NCHITTEST:\n\t\t// Don't accept any mouse input\n\t\treturn HTNOWHERE;\n\n\tcase WM_HOTKEY:\n\t\t// Shift-F10 to run cmd\n\t\tif (wParam == HK_RUNCMD) {\n\t\t\tDWORD exitCode = 0;\n\t\t\tif (!g_cmdHandle || (GetExitCodeProcess(g_cmdHandle, &exitCode) && exitCode != STILL_ACTIVE)) {\n\t\t\t\tPROCESS_INFORMATION processInfo;\n\t\t\t\tRunCmd(&processInfo);\n\t\t\t}\n\t\t}\n\t\tbreak;\n\n\tcase WM_DESTROY:\n\t\tPostQuitMessage(0);\n\t\tbreak;\n\t}\n\n\treturn DefWindowProc(hwnd, message, wParam, lParam);;\n}\n\nstatic void ResetSetupKey(void) {\n\tHKEY key;\n\tif (RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGPATH_SETUP, 0, KEY_ALL_ACCESS, &key) != ERROR_SUCCESS) {\n\t\treturn;\n\t}\n\n\t// Reset CmdLine to empty string\n\tLPWSTR cmdLine = L\"\";\n\tDWORD cmdLineLength = 0;\n\tif (SUCCEEDED(GetRegistryString(key, NULL, L\"CmdLine_LegacyUpdateBackup\", 0, &cmdLine, &cmdLineLength))) {\n\t\tRegDeleteValue(key, L\"CmdLine_LegacyUpdateBackup\");\n\t}\n\tRegSetValueEx(key, L\"CmdLine\", 0, REG_SZ, (const BYTE *)cmdLine, cmdLineLength * sizeof(WCHAR));\n\n\t// Reset SetupType to 0\n\tDWORD setupType = 0;\n\tif (SUCCEEDED(GetRegistryDword(key, NULL, L\"SetupType_LegacyUpdateBackup\", 0, &setupType))) {\n\t\tRegDeleteValue(key, L\"SetupType_LegacyUpdateBackup\");\n\t}\n\tRegSetValueEx(key, L\"SetupType\", 0, REG_DWORD, (const BYTE *)&setupType, sizeof(setupType));\n\n\t// Reset SetupShutdownRequired (likely doesn't exist)\n\tRegDeleteValue(key, L\"SetupShutdownRequired\");\n\n\tRegCloseKey(key);\n}\n\nstatic BOOL IsSystemUser(void) {\n\tstatic BOOL _isSystemUserInitialized = FALSE;\n\tstatic BOOL _isSystemUser = FALSE;\n\n\tif (!_isSystemUserInitialized) {\n\t\t_isSystemUserInitialized = TRUE;\n\n\t\t// NT AUTHORITY\\SYSTEM (S-1-5-18)\n\t\tSID systemSid = {0};\n\t\tsystemSid.Revision = SID_REVISION;\n\t\tsystemSid.SubAuthorityCount = 1;\n\t\tsystemSid.IdentifierAuthority.Value[5] = 5;\n\t\tsystemSid.SubAuthority[0] = 18;\n\n\t\tPTOKEN_USER tokenInfo = NULL;\n\t\tHANDLE token = NULL;\n\t\tif (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token)) {\n\t\t\tgoto end;\n\t\t}\n\n\t\tDWORD tokenInfoLen = 0;\n\t\tGetTokenInformation(token, TokenUser, NULL, 0, &tokenInfoLen);\n\t\ttokenInfo = (PTOKEN_USER)LocalAlloc(LPTR, tokenInfoLen);\n\t\tif (!GetTokenInformation(token, TokenUser, tokenInfo, tokenInfoLen, &tokenInfoLen)) {\n\t\t\tgoto end;\n\t\t}\n\n\t\t_isSystemUser = EqualSid(tokenInfo->User.Sid, &systemSid);\n\nend:\n\t\tif (tokenInfo) {\n\t\t\tLocalFree(tokenInfo);\n\t\t}\n\t\tif (token) {\n\t\t\tCloseHandle(token);\n\t\t}\n\t}\n\n\treturn _isSystemUser;\n}\n\nstatic void CreateRunOnceWindow(void) {\n\t// Create window\n\tWNDCLASS wndClass = {0};\n\twndClass.style = CS_VREDRAW | CS_HREDRAW | CS_OWNDC | CS_NOCLOSE;\n\twndClass.lpfnWndProc = RunOnceWndProc;\n\twndClass.hInstance = GetModuleHandle(NULL);\n\twndClass.lpszClassName = RunOnceClassName;\n\twndClass.hCursor = LoadCursor(NULL, IDC_ARROW);\n\n\tif (!RegisterClass(&wndClass)) {\n\t\tTRACE(L\"RegisterClass failed: %d\", GetLastError());\n\t\treturn;\n\t}\n\n\tHWND hwnd = CreateWindowEx(\n\t\tWS_EX_TOOLWINDOW | WS_EX_NOACTIVATE,\n\t\twndClass.lpszClassName,\n\t\tL\"Legacy Update\",\n\t\tWS_POPUP,\n\t\t0, 0, 0, 0,\n\t\tNULL, NULL,\n\t\twndClass.hInstance,\n\t\tNULL\n\t);\n\tif (!hwnd) {\n\t\tTRACE(L\"CreateWindow failed: %d\", GetLastError());\n\t\treturn;\n\t}\n\n\t// Register hotkey\n\tRegisterHotKey(hwnd, HK_RUNCMD, MOD_SHIFT, VK_F10);\n\n\t// Set wallpaper on SYSTEM setup mode desktop\n\tif (IsSystemUser()) {\n\t\t// Check if the display is 8-bit color or lower\n\t\tHDC dc = GetDC(NULL);\n\t\tint bpp = GetDeviceCaps(dc, BITSPIXEL);\n\t\tReleaseDC(NULL, dc);\n\t\tif (bpp >= 8) {\n\t\t\t// Set the wallpaper color\n\t\t\tCOLORREF color = GetSysColor(COLOR_DESKTOP);\n\t\t\tif (AtLeastWin10()) {\n\t\t\t\tcolor = WallpaperColorWin10;\n\t\t\t} else if (AtLeastWin8()) {\n\t\t\t\tcolor = WallpaperColorWin8;\n\t\t\t} else if ((IsWinXP2002() || IsWinXP2003()) && color == RGB(0, 0, 0)) {\n\t\t\t\t// XP uses a black wallpaper in fast user switching mode. Override to the default blue.\n\t\t\t\tcolor = WallpaperColorWinXP;\n\t\t\t}\n\t\t\tSetSysColors(1, (const INT[1]){COLOR_DESKTOP}, (const COLORREF[1]){color});\n\n\t\t\tDWORD width = GetSystemMetrics(SM_CXSCREEN);\n\t\t\tDWORD height = GetSystemMetrics(SM_CYSCREEN);\n\t\t\tHBITMAP wallpaper = NULL;\n\n\t\t\tif (IsWin7()) {\n\t\t\t\t// 7: Bitmap in oobe dir\n\t\t\t\tWCHAR bmpPath[MAX_PATH];\n\t\t\t\tExpandEnvironmentStrings(L\"%SystemRoot%\\\\System32\\\\oobe\\\\background.bmp\", bmpPath, ARRAYSIZE(bmpPath));\n\t\t\t\twallpaper = LoadImage(NULL, bmpPath, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);\n\t\t\t} else if (IsWinVista()) {\n\t\t\t\tif (GetVersionInfo()->wProductType == VER_NT_WORKSTATION) {\n\t\t\t\t\t// Vista: Resources in ooberesources.dll\n\t\t\t\t\tWCHAR ooberesPath[MAX_PATH];\n\t\t\t\t\tExpandEnvironmentStrings(L\"%SystemRoot%\\\\System32\\\\oobe\\\\ooberesources.dll\", ooberesPath, ARRAYSIZE(ooberesPath));\n\t\t\t\t\tHMODULE ooberes = LoadLibrary(ooberesPath);\n\t\t\t\t\tif (ooberes) {\n\t\t\t\t\t\t// Width logic is the same used by Vista msoobe.dll\n\t\t\t\t\t\tLPWSTR resource = GetSystemMetrics(SM_CXSCREEN) < 1200 ? L\"OOBE_BACKGROUND_0\" : L\"OOBE_BACKGROUND_LARGE_0\";\n\t\t\t\t\t\twallpaper = LoadPNGResource(ooberes, resource, RT_RCDATA);\n\t\t\t\t\t}\n\t\t\t\t\tFreeLibrary(ooberes);\n\t\t\t\t} else {\n\t\t\t\t\t// Server 2008: Bitmap in oobe dir\n\t\t\t\t\tWCHAR jpegPath[MAX_PATH];\n\t\t\t\t\tExpandEnvironmentStrings(L\"%SystemRoot%\\\\System32\\\\oobe\\\\msoobe_server.jpg\", jpegPath, ARRAYSIZE(jpegPath));\n\t\t\t\t\twallpaper = LoadJPEGFile(jpegPath);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (wallpaper) {\n\t\t\t\t// Write to disk\n\t\t\t\tWCHAR tempPath[MAX_PATH];\n\t\t\t\tExpandEnvironmentStrings(L\"%ProgramData%\\\\Legacy Update\\\\background.bmp\", tempPath, ARRAYSIZE(tempPath));\n\t\t\t\tif (GetFileAttributes(tempPath) != INVALID_FILE_ATTRIBUTES || ScaleAndWriteToBMP(wallpaper, width, height, tempPath)) {\n\t\t\t\t\tSystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID)tempPath, SPIF_SENDWININICHANGE);\n\t\t\t\t}\n\n\t\t\t\tDeleteObject(wallpaper);\n\t\t\t}\n\t\t}\n\t}\n\n\tShowWindow(hwnd, SW_SHOW);\n\tUpdateWindow(hwnd);\n}\n\nstatic void FixUserWallpaper(void) {\n\t// Work around bug in at least Windows 7 SP1 where the pre-logon wallpaper persists into the user session.\n\t// We nudge it into doing the right thing by re-applying the wallpaper from the registry.\n\t// This also occurs if there is no wallpaper set and the background is a solid color (i.e. on Server Core).\n\tLPWSTR wallpaper = NULL;\n\tDWORD length = 0;\n\tif (SUCCEEDED(GetRegistryString(HKEY_CURRENT_USER, REGPATH_CPL_DESKTOP, L\"Wallpaper\", 0, &wallpaper, &length))) {\n\t\tif (length > 0) {\n\t\t\tSystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID)wallpaper, SPIF_SENDWININICHANGE);\n\t\t}\n\t} else {\n\t\tSystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID)L\"\", SPIF_SENDWININICHANGE);\n\t}\n\tif (wallpaper) {\n\t\tLocalFree(wallpaper);\n\t}\n}\n\nvoid RunOnce(BOOL postInstall) {\n\t// Allow breaking out by entering safe mode\n\tif (GetSystemMetrics(SM_CLEANBOOT)) {\n\t\tWCHAR message[4096];\n\t\tLoadString(GetModuleHandle(NULL), IDS_RUNONCESAFEMODE, message, ARRAYSIZE(message));\n\t\tMsgBox(NULL, message, NULL, MB_OK | MB_ICONWARNING);\n\t\tResetSetupKey();\n\t\tPostQuitMessage(0);\n\t\treturn;\n\t}\n\n\tHWND firstUxWnd = 0;\n\tif (postInstall) {\n\t\t// Fix pre-logon wallpaper persisting into the user's desktop\n\t\tFixUserWallpaper();\n\t} else {\n\t\tif (IsSystemUser()) {\n\t\t\t// Start Themes on this desktop\n\t\t\tStartThemes();\n\n\t\t\t// Find and hide the FirstUxWnd window, if it exists (Windows 7+)\n\t\t\tfirstUxWnd = FindWindow(L\"FirstUxWndClass\", NULL);\n\t\t\tif (firstUxWnd) {\n\t\t\t\tShowWindow(firstUxWnd, SW_HIDE);\n\t\t\t}\n\t\t}\n\n\t\t// Set up our window\n\t\tCreateRunOnceWindow();\n\t}\n\n\t// Trick winlogon into thinking the shell has started, so it doesn't appear to be stuck at \"Welcome\" (XP) or\n\t// \"Preparing your desktop...\" (Vista+)\n\t// https://social.msdn.microsoft.com/Forums/WINDOWS/en-US/ca253e22-1ef8-4582-8710-9cd9c89b15c3\n\tLPWSTR eventName = AtLeastWinVista() ? L\"ShellDesktopSwitchEvent\" : L\"msgina: ShellReadyEvent\";\n\tHANDLE eventHandle = OpenEvent(EVENT_MODIFY_STATE, 0, eventName);\n\tif (eventHandle) {\n\t\tSetEvent(eventHandle);\n\t\tCloseHandle(eventHandle);\n\t}\n\n\t// Construct path to LegacyUpdateSetup.exe\n\tLPWSTR setupPath;\n\tGetOwnFileName(&setupPath);\n\twcsrchr(setupPath, L'\\\\')[1] = L'\\0';\n\twcsncat(setupPath, L\"LegacyUpdateSetup.exe\", MAX_PATH - wcslen(setupPath) - 1);\n\n\t// Execute and wait for completion\n\tSTARTUPINFO startupInfo = {0};\n\tstartupInfo.cb = sizeof(startupInfo);\n\n\tLPWSTR cmdLine = (LPWSTR)LocalAlloc(LPTR, (lstrlen(setupPath) + 16) * sizeof(WCHAR));\n\twsprintf(cmdLine, L\"\\\"%ls\\\" %ls\", setupPath, postInstall ? L\"/postinstall\" : L\"/runonce\");\n\tPROCESS_INFORMATION processInfo = {0};\n\tif (!CreateProcess(setupPath, cmdLine, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &startupInfo, &processInfo)) {\n\t\tLocalFree(setupPath);\n\t\tLocalFree(cmdLine);\n\n\t\tWCHAR title[4096];\n\t\tLoadString(GetModuleHandle(NULL), IDS_RUNONCEFAILED, title, ARRAYSIZE(title));\n\t\tLPWSTR message = GetMessageForHresult(HRESULT_FROM_WIN32(GetLastError()));\n\t\tMsgBox(NULL, title, message, MB_OK | MB_ICONERROR);\n\t\tif (message) {\n\t\t\tLocalFree(message);\n\t\t}\n\n\t\tResetSetupKey();\n\n#ifdef _DEBUG\n\t\t// Run cmd to inspect what happened\n\t\tif (!RunCmd(&processInfo)) {\n\t\t\tPostQuitMessage(0);\n\t\t\treturn;\n\t\t}\n#else\n\t\tPostQuitMessage(0);\n\t\treturn;\n#endif\n\t}\n\n\tLocalFree(setupPath);\n\tLocalFree(cmdLine);\n\n\tCloseHandle(processInfo.hThread);\n\n\t// Wait for it to finish, while running a message loop\n\tMSG msg = {0};\n\twhile (WaitForSingleObject(processInfo.hProcess, 100) == WAIT_TIMEOUT) {\n\t\twhile (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {\n\t\t\tTranslateMessage(&msg);\n\t\t\tDispatchMessage(&msg);\n\t\t}\n\t}\n\n\tDWORD exitCode = 0;\n\tif (GetExitCodeProcess(processInfo.hProcess, &exitCode) && exitCode != ERROR_SUCCESS && exitCode != ERROR_SUCCESS_REBOOT_REQUIRED) {\n\t\tResetSetupKey();\n\n#ifdef _DEBUG\n\t\tTRACE(L\"Setup exited with code: %d\", exitCode);\n\n\t\t// Run cmd to inspect what happened\n\t\tif (RunCmd(&processInfo)) {\n\t\t\tMSG msg = {0};\n\t\t\twhile (WaitForSingleObject(processInfo.hProcess, 100) == WAIT_TIMEOUT) {\n\t\t\t\twhile (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {\n\t\t\t\t\tTranslateMessage(&msg);\n\t\t\t\t\tDispatchMessage(&msg);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n#endif\n\t}\n\n\tCloseHandle(processInfo.hProcess);\n\n\t// Don't let SYSTEM cmd keep running beyond runonce\n\tif (g_cmdHandle) {\n\t\tTerminateProcess(g_cmdHandle, 0);\n\t\tCloseHandle(g_cmdHandle);\n\t}\n\n\t// Show FirstUxWnd again\n\tif (firstUxWnd) {\n\t\tShowWindow(firstUxWnd, SW_SHOW);\n\t}\n\n\tPostQuitMessage(0);\n}\n"
  },
  {
    "path": "launcher/LaunchLog.c",
    "content": "#include \"MsgBox.h\"\n#include \"ViewLog.h\"\n\n// Matches LogAction enum in ViewLog.h\nstatic const LPCWSTR logActions[][4] = {\n\t{L\"system\", L\"sys\", NULL},\n\t{L\"local\", L\"user\", NULL},\n\t{L\"locallow\", L\"userlow\", L\"low\", NULL},\n\t{L\"windowsupdate\", L\"wu\", NULL},\n};\n\nvoid LaunchLog(int argc, LPWSTR *argv, int nCmdShow) {\n\tLogAction action = LogActionSystem;\n\n\tif (argc > 0) {\n\t\tBOOL found = FALSE;\n\t\tfor (DWORD i = 0; i < ARRAYSIZE(logActions); i++) {\n\t\t\tfor (DWORD j = 0; logActions[i][j] != NULL; j++) {\n\t\t\t\tif (wcscmp(argv[0], logActions[i][j]) == 0) {\n\t\t\t\t\taction = (LogAction)i;\n\t\t\t\t\tfound = TRUE;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (found) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tHRESULT hr = ViewLog(action, nCmdShow, FALSE);\n\tif (!SUCCEEDED(hr)) {\n\t\tLPWSTR message = GetMessageForHresult(hr);\n\t\tMsgBox(NULL, message, NULL, MB_OK);\n\t\tLocalFree(message);\n\t}\n\n\tPostQuitMessage(hr);\n}\n"
  },
  {
    "path": "launcher/LaunchUpdateSite.c",
    "content": "#include \"stdafx.h\"\n#include \"main.h\"\n#include \"resource.h\"\n#include <exdisp.h>\n#include \"Exec.h\"\n#include \"HResult.h\"\n#include \"MsgBox.h\"\n#include \"RegisterServer.h\"\n#include \"Registry.h\"\n#include \"SelfElevate.h\"\n#include \"User.h\"\n#include \"VersionInfo.h\"\n#include \"Wow64.h\"\n\nconst LPWSTR UpdateSiteURLHttp      = L\"http://legacyupdate.net/windowsupdate/v6/\";\nconst LPWSTR UpdateSiteURLHttps     = L\"https://legacyupdate.net/windowsupdate/v6/\";\nconst LPWSTR UpdateSiteFirstRunFlag = L\"?firstrun=true\";\n\nDEFINE_GUID(IID_ILegacyUpdateCtrl,  0xC33085BB, 0xC3E1, 0x4D27, 0xA2, 0x14, 0xAF, 0x01, 0x95, 0x3D, 0xF5, 0xE5);\nDEFINE_GUID(CLSID_LegacyUpdateCtrl, 0xAD28E0DF, 0x5F5A, 0x40B5, 0x94, 0x32, 0x85, 0xEF, 0xD9, 0x7D, 0x1F, 0x9F);\n\nstatic LPWSTR GetUpdateSiteURL(void) {\n\t// Fallback: Use SSL only on Vista and up\n\tBOOL useHTTPS = AtLeastWinVista();\n\n\t// Get the Windows Update website URL set by Legacy Update setup\n\tLPWSTR data = NULL;\n\tDWORD size = 0;\n\tHRESULT hr = GetRegistryString(HKEY_LOCAL_MACHINE, REGPATH_WU, L\"URL\", KEY_WOW64_64KEY, &data, &size);\n\tif (SUCCEEDED(hr)) {\n\t\t// Return based on the URL value\n\t\tif (wcscmp(data, UpdateSiteURLHttps) == 0) {\n\t\t\tuseHTTPS = TRUE;\n\t\t} else if (wcscmp(data, UpdateSiteURLHttp) == 0) {\n\t\t\tuseHTTPS = FALSE;\n\t\t}\n\t\tLocalFree(data);\n\t}\n\n\treturn useHTTPS ? UpdateSiteURLHttps : UpdateSiteURLHttp;\n}\n\nHRESULT HandleIENotInstalled(void) {\n\t// Handle case where the user has uninstalled Internet Explorer using Programs and Features.\n\tif (AtLeastWin8() && !AtLeastWin10_1703()) {\n\t\t// Windows 8 - 10 1607: Directly prompt to reinstall IE using Fondue.exe.\n\t\tSYSTEM_INFO systemInfo = {0};\n\t\tOurGetNativeSystemInfo(&systemInfo);\n\t\tLPCTSTR archSuffix = systemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ? L\"amd64\" : L\"x86\";\n\n\t\tWCHAR fondue[MAX_PATH];\n\t\tExpandEnvironmentStrings(L\"%SystemRoot%\\\\System32\\\\fondue.exe\", fondue, ARRAYSIZE(fondue));\n\n\t\tWCHAR fondueArgs[256];\n\t\twsprintf(fondueArgs, L\"/enable-feature:Internet-Explorer-Optional-%ls\", archSuffix);\n\n\t\tHRESULT hr = Exec(NULL, fondue, fondueArgs, NULL, SW_SHOWDEFAULT, FALSE, NULL);\n\t\tif (SUCCEEDED(hr)) {\n\t\t\treturn S_OK;\n\t\t}\n\t}\n\n\t// Tell the user what they need to do, then open the Optional Features dialog.\n\tWCHAR message[4096];\n\tLoadString(GetModuleHandle(NULL), IDS_IENOTINSTALLED, message, ARRAYSIZE(message));\n\tMsgBox(NULL, message, NULL, MB_OK | MB_ICONEXCLAMATION);\n\n\tif (AtLeastWin10_1703()) {\n\t\t// Windows 10 1703+: IE is moved to a WindowsCapability, handled by the Settings app.\n\t\tExec(NULL, L\"ms-settings:optionalfeatures\", NULL, NULL, SW_SHOWDEFAULT, FALSE, NULL);\n\t} else if (AtLeastWin7()) {\n\t\t// Windows 7: Optional Features dialog\n\t\tWCHAR optionalFeatures[MAX_PATH];\n\t\tExpandEnvironmentStrings(L\"%SystemRoot%\\\\System32\\\\OptionalFeatures.exe\", optionalFeatures, ARRAYSIZE(optionalFeatures));\n\t\tExec(NULL, optionalFeatures, NULL, NULL, SW_SHOWDEFAULT, FALSE, NULL);\n\t}\n\n\treturn S_OK;\n}\n\nvoid LaunchUpdateSite(int argc, LPWSTR *argv, int nCmdShow) {\n\tHRESULT hr = S_OK;\n\tIWebBrowser2 *browser = NULL;\n\tVARIANT url = {0};\n\tVARIANT flags = {0};\n\tVARIANT nullVariant = {0};\n\tLPTSTR siteURL = NULL;\n\tHMONITOR monitor = NULL;\n\n\t// If this OS was upgraded, tell the user they need to re-run setup\n\tDWORD lastOSVersion = 0;\n\tif (!AtLeastWin10() && SUCCEEDED(GetRegistryDword(HKEY_LOCAL_MACHINE, REGPATH_LEGACYUPDATE_SETUP, L\"LastOSVersion\", KEY_WOW64_64KEY, &lastOSVersion))) {\n\t\t// Allow Vista build 6002 -> 6003 (ESU)\n\t\tif (lastOSVersion < GetVersion() && !(HIWORD(lastOSVersion) == 6002 && GetWinBuild() == 6003)) {\n\t\t\tWCHAR message[4096];\n\t\t\tLoadString(GetModuleHandle(NULL), IDS_OSUPGRADED, message, ARRAYSIZE(message));\n\t\t\tMsgBox(NULL, message, NULL, MB_OK | MB_ICONEXCLAMATION);\n\t\t\tgoto end;\n\t\t}\n\t}\n\n\t// If running on 2k/XP, make sure we're elevated. If not, show Run As prompt.\n\tif (!AtLeastWinVista() && !IsUserAdmin()) {\n\t\tLPWSTR args = (LPWSTR)LocalAlloc(LPTR, 512 * sizeof(WCHAR));\n\t\twsprintf(args, L\"/launch %ls\", argc > 0 ? argv[0] : L\"\");\n\t\thr = SelfElevate(args, NULL);\n\t\tLocalFree(args);\n\n\t\t// Access denied happens when the user clicks No/Cancel.\n\t\tif (hr == HRESULT_FROM_WIN32(ERROR_CANCELLED)) {\n\t\t\thr = S_OK;\n\t\t}\n\n\t\tgoto end;\n\t}\n\n\t// Can we instantiate our own ActiveX control? If not, try to register it.\n\thr = CoCreateInstance(&CLSID_LegacyUpdateCtrl, NULL, CLSCTX_INPROC_SERVER, &IID_ILegacyUpdateCtrl, (void **)&browser);\n\tif (hr == REGDB_E_CLASSNOTREG || hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) || hr == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND)) {\n\t\tTRACE(L\"LegacyUpdateCtrl not registered\");\n\t\thr = RegisterServer(0, TRUE, TRUE);\n\t\tCHECK_HR_OR_GOTO_END(L\"RegisterServer\");\n\n\t\thr = CoCreateInstance(&CLSID_LegacyUpdateCtrl, NULL, CLSCTX_INPROC_SERVER, &IID_ILegacyUpdateCtrl, (void **)&browser);\n\t\tCHECK_HR_OR_GOTO_END(L\"Still failed to load LegacyUpdateCtrl\");\n\n\t\tIUnknown_Release(browser);\n\t} else if (!SUCCEEDED(hr)) {\n\t\tCHECK_HR_OR_GOTO_END(L\"Create ILegacyUpdateCtrl\");\n\t}\n\n\t// Spawn an IE window via the COM interface. This ensures the page opens in IE (ShellExecute uses\n\t// default browser), and avoids hardcoding a path to iexplore.exe. Also conveniently allows testing\n\t// on Windows 11 (iexplore.exe redirects to Edge, but COM still works). Same strategy as used by\n\t// Wupdmgr.exe and Muweb.dll,LaunchMUSite.\n\thr = CoCreateInstance(&CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER, &IID_IWebBrowser2, (void **)&browser);\n\n\t// An install of IE can be \"broken\" in two ways:\n\t//  - Class not registered: mshtml.dll unregistered, deleted, or uninstalled in Optional Features.\n\t//  - Path not found: iexplore.exe is not present.\n\tif (hr == REGDB_E_CLASSNOTREG || hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) || hr == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND)) {\n\t\tTRACE(L\"IE not installed: %08x\", hr);\n\t\thr = HandleIENotInstalled();\n\t\tgoto end;\n\t} else if (!SUCCEEDED(hr)) {\n\t\tCHECK_HR_OR_GOTO_END(L\"Create IWebBrowser2\");\n\t}\n\n\t// Get the URL we want to launch\n\tsiteURL = GetUpdateSiteURL();\n\n\t// Is this a first run launch? Append first run flag if so.\n\tif (argc > 0 && lstrcmpi(argv[0], L\"/firstrun\") == 0) {\n\t\tWCHAR newSiteURL[256];\n\t\twsprintf(newSiteURL, L\"%ls%ls\", siteURL, UpdateSiteFirstRunFlag);\n\t\tsiteURL = newSiteURL;\n\t}\n\n\tVariantInit(&url);\n\turl.vt = VT_BSTR;\n\turl.bstrVal = SysAllocString(siteURL);\n\n\tVariantInit(&flags);\n\tflags.vt = VT_I4;\n\tflags.lVal = 0;\n\n\tVariantInit(&nullVariant);\n\n\thr = IWebBrowser2_Navigate2(browser, &url, &flags, &nullVariant, &nullVariant, &nullVariant);\n\tCHECK_HR_OR_GOTO_END(L\"Navigate2\");\n\n\tHWND ieHwnd = NULL;\n\thr = IWebBrowser2_get_HWND(browser, (SHANDLE_PTR *)&ieHwnd);\n\tCHECK_HR_OR_GOTO_END(L\"get_HWND\");\n\n\t// Pass through our nCmdShow flag\n\tShowWindow(ieHwnd, nCmdShow);\n\n\t// Are we on a small display? If so, resize and maximise the window.\n\tmonitor = MonitorFromWindow(ieHwnd, MONITOR_DEFAULTTONEAREST);\n\tMONITORINFO monitorInfo = {0};\n\tmonitorInfo.cbSize = sizeof(MONITORINFO);\n\n\tif (GetMonitorInfo(monitor, &monitorInfo) > 0) {\n\t\tLONG workWidth = monitorInfo.rcWork.right - monitorInfo.rcWork.left;\n\t\tLONG workHeight = monitorInfo.rcWork.bottom - monitorInfo.rcWork.top;\n\n\t\tLONG width = 0, height = 0;\n\t\tIWebBrowser2_get_Width(browser, &width);\n\t\tIWebBrowser2_get_Height(browser, &height);\n\n\t\tif (width < 800) {\n\t\t\twidth = workWidth < 800 ? workWidth : 800;\n\t\t\tIWebBrowser2_put_Width(browser, width);\n\t\t}\n\t\tif (height < 600) {\n\t\t\theight = workHeight < 600 ? workHeight : 600;\n\t\t\tIWebBrowser2_put_Height(browser, height);\n\t\t}\n\n\t\tLONG left = 0, top = 0;\n\t\tIWebBrowser2_get_Left(browser, &left);\n\t\tIWebBrowser2_get_Top(browser, &top);\n\n\t\tif (left + width > workWidth) {\n\t\t\tIWebBrowser2_put_Left(browser, 0);\n\t\t}\n\t\tif (top + height > workHeight) {\n\t\t\tIWebBrowser2_put_Top(browser, 0);\n\t\t}\n\n\t\t// Maximize if below 1152x864, if not already overridden by user\n\t\tif (workWidth <= 1152 && nCmdShow == SW_SHOWDEFAULT) {\n\t\t\tShowWindow(ieHwnd, SW_MAXIMIZE);\n\t\t}\n\t}\n\n\t// IE window won't be fully initialized until we make it visible.\n\tIWebBrowser2_put_Visible(browser, TRUE);\n\n\t// Focus the window, since it seems to not always get focus as it should.\n\tSetForegroundWindow(ieHwnd);\n\nend:\n\tif (!SUCCEEDED(hr)) {\n\t\tLPWSTR message = GetMessageForHresult(hr);\n\t\tMsgBox(NULL, message, NULL, MB_ICONEXCLAMATION);\n\t\tLocalFree(message);\n\t}\n\n\tVariantClear(&url);\n\tVariantClear(&flags);\n\tVariantClear(&nullVariant);\n\n\tif (browser) {\n\t\tIWebBrowser2_Release(browser);\n\t}\n\n\tCoUninitialize();\n\tPostQuitMessage(0);\n}\n"
  },
  {
    "path": "launcher/Makefile",
    "content": "FILES    = \\\n\t$(wildcard *.c) \\\n\t../shared/Exec.c \\\n\t../shared/HResult.c \\\n\t../shared/LegacyUpdate.c \\\n\t../shared/LoadImage.c \\\n\t../shared/Log.c \\\n\t../shared/Registry.c \\\n\t../shared/ViewLog.c \\\n\t../shared/Wow64.c\nRCFILES  = resource.rc\nDEFFILES = ../LegacyUpdate/LegacyUpdate.def\n\nBIN      = obj/LegacyUpdate$(ARCH).exe\n\nall:: all-archs\n\nall-archs: all-32 all-64\n\ninclude ../build/shared.mk\n\nCFLAGS  += \\\n\t-DLOG_NAME=\"\\\"Launcher\\\"\"\n\nLDFLAGS += \\\n\t-Wl,--subsystem,windows \\\n\t-Lobj \\\n\t-lmsvcrt \\\n\t-lpsapi \\\n\t-lkernel32 \\\n\t-luser32 \\\n\t-lole32 \\\n\t-loleaut32 \\\n\t-ladvapi32 \\\n\t-lcomctl32 \\\n\t-lshell32 \\\n\t-lshlwapi \\\n\t-lversion \\\n\t-lgdi32 \\\n\t-lmsimg32\n\nifeq ($(ARCH),64)\n\tLDFLAGS += -Wl,-ewWinMain\nelse\n\tLDFLAGS += -Wl,-e_wWinMain\nendif\n\ntest:\n\t+$(MAKE) DEBUG=$(DEBUG)\n\t./obj/LegacyUpdate.exe\n\n.PHONY: all all-archs all-32 all-64 test\n"
  },
  {
    "path": "launcher/MsgBox.c",
    "content": "#include \"stdafx.h\"\n#include \"main.h\"\n#include \"resource.h\"\n\n#undef _WIN32_WINNT\n#define _WIN32_WINNT _WIN32_WINNT_VISTA\n#include <commctrl.h>\n\ntypedef HRESULT (WINAPI *_TaskDialogIndirect)(const TASKDIALOGCONFIG *pTaskConfig, int *pnButton, int *pnRadioButton, BOOL *pfVerificationFlagChecked);\n\nstatic BOOL _loadedTaskDialog = FALSE;\nstatic _TaskDialogIndirect $TaskDialogIndirect;\n\nint MsgBox(HWND hwnd, LPCTSTR instruction, LPCTSTR body, UINT type) {\n\tif (!_loadedTaskDialog) {\n\t\t_loadedTaskDialog = TRUE;\n\t\t$TaskDialogIndirect = (_TaskDialogIndirect)GetProcAddress(LoadLibrary(L\"comctl32.dll\"), \"TaskDialogIndirect\");\n\t}\n\n\t// Play the sound matching the icon, because MB_USERICON doesn't play a sound\n\tMessageBeep(type & 0x000000F0);\n\ttype = (type & ~0x000000F0) | MB_USERICON;\n\n\tif (!$TaskDialogIndirect) {\n\t\tLPWSTR finalBody = (LPWSTR)instruction;\n\t\tif (body && lstrlen(body) > 0) {\n\t\t\tsize_t length = lstrlen(instruction) + lstrlen(body) + 3;\n\t\t\tfinalBody = (LPWSTR)LocalAlloc(LPTR, length * sizeof(TCHAR));\n\t\t\twsprintf(finalBody, L\"%ls\\n\\n%ls\", instruction, body);\n\t\t}\n\n\t\tMSGBOXPARAMS params = {0};\n\t\tparams.cbSize = sizeof(MSGBOXPARAMS);\n\t\tparams.hwndOwner = hwnd;\n\t\tparams.hInstance = GetModuleHandle(NULL);\n\t\tparams.lpszText = finalBody;\n\t\tparams.lpszCaption = L\"Legacy Update\";\n\t\tparams.dwStyle = type;\n\t\tparams.lpszIcon = MAKEINTRESOURCE(IDI_APPICON);\n\t\tint result = MessageBoxIndirect(&params);\n\n\t\tif (finalBody != body) {\n\t\t\tLocalFree(finalBody);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tTASKDIALOG_COMMON_BUTTON_FLAGS buttons = 0;\n\tDWORD flags = TDF_POSITION_RELATIVE_TO_WINDOW;\n\n\tswitch (type & 0x0000000F) {\n\tcase MB_OK:\n\t\tbuttons = TDCBF_OK_BUTTON;\n\t\tflags |= TDF_ALLOW_DIALOG_CANCELLATION;\n\t\tbreak;\n\tcase MB_OKCANCEL:\n\t\tbuttons = TDCBF_OK_BUTTON | TDCBF_CANCEL_BUTTON;\n\t\tflags |= TDF_ALLOW_DIALOG_CANCELLATION;\n\t\tbreak;\n\tcase MB_YESNO:\n\t\tbuttons = TDCBF_YES_BUTTON | TDCBF_NO_BUTTON;\n\t\tbreak;\n\tdefault:\n\t\tbreak;\n\t}\n\n\tTASKDIALOGCONFIG config = {0};\n\tconfig.cbSize = sizeof(TASKDIALOGCONFIG);\n\tconfig.hwndParent = hwnd;\n\tconfig.hInstance = GetModuleHandle(NULL);\n\tconfig.dwFlags = flags;\n\tconfig.dwCommonButtons = buttons;\n\tconfig.pszWindowTitle = L\"Legacy Update\";\n\tconfig.pszMainInstruction = instruction;\n\tconfig.pszContent = body;\n\tconfig.pszMainIcon = MAKEINTRESOURCE(IDI_APPICON);\n\n\tint button = 0;\n\t$TaskDialogIndirect(&config, &button, NULL, NULL);\n\treturn button;\n}\n"
  },
  {
    "path": "launcher/MsgBox.h",
    "content": "#pragma once\n\n#include <windows.h>\n\nint MsgBox(HWND hwnd, LPCTSTR instruction, LPCTSTR body, UINT type);\n"
  },
  {
    "path": "launcher/Options.c",
    "content": "#include <windows.h>\n#include \"Exec.h\"\n#include \"VersionInfo.h\"\n#include \"Wow64.h\"\n\nvoid LaunchOptions(int nCmdShow) {\n#if !_WIN64\n\t// Some issues arise from the working directory being SysWOW64 rather than System32. Notably,\n\t// Windows Vista - 8.1 don't have wuauclt.exe in SysWOW64. Disable WOW64 redirection temporarily\n\t// to work around this.\n\tPVOID oldValue = NULL;\n\tBOOL isRedirected = DisableWow64FsRedirection(&oldValue);\n#endif\n\n\tHRESULT hr = E_FAIL;\n\n\tif (AtLeastWin10()) {\n\t\t// Windows 10+: Open Settings app\n\t\thr = Exec(NULL, L\"ms-settings:windowsupdate-options\", NULL, NULL, SW_SHOWDEFAULT, FALSE, NULL);\n\t} else if (AtLeastWinVista()) {\n\t\t// Windows Vista, 7, 8: Open Windows Update control panel\n\t\tWCHAR wuauclt[MAX_PATH];\n\t\tExpandEnvironmentStrings(L\"%SystemRoot%\\\\System32\\\\wuauclt.exe\", wuauclt, ARRAYSIZE(wuauclt));\n\t\thr = Exec(NULL, wuauclt, L\"/ShowOptions\", NULL, SW_SHOWDEFAULT, FALSE, NULL);\n\t} else {\n\t\t// Windows 2000, XP: Open Automatic Updates control panel\n\t\tWCHAR wuaucpl[MAX_PATH];\n\t\tExpandEnvironmentStrings(L\"%SystemRoot%\\\\System32\\\\wuaucpl.cpl\", wuaucpl, ARRAYSIZE(wuaucpl));\n\t\thr = Exec(NULL, wuaucpl, NULL, NULL, SW_SHOWDEFAULT, FALSE, NULL);\n\t}\n\n#if !_WIN64\n\t// Revert WOW64 redirection if we changed it\n\tif (isRedirected) {\n\t\tRevertWow64FsRedirection(oldValue);\n\t}\n#endif\n\n\tPostQuitMessage(hr);\n}\n"
  },
  {
    "path": "launcher/RegisterServer.c",
    "content": "#include <windows.h>\n#include \"Exec.h\"\n#include \"HResult.h\"\n#include \"LegacyUpdate.h\"\n#include \"MsgBox.h\"\n#include \"Registry.h\"\n#include \"SelfElevate.h\"\n#include \"User.h\"\n#include \"VersionInfo.h\"\n#include \"Wow64.h\"\n#include \"resource.h\"\n\nstatic HRESULT RegisterDllInternal(LPWSTR path, BOOL state) {\n\tHMODULE module = LoadLibrary(path);\n\tif (!module) {\n\t\treturn HRESULT_FROM_WIN32(GetLastError());\n\t}\n\n\tHRESULT hr = S_OK;\n\tFARPROC proc = GetProcAddress(module, state ? \"DllRegisterServer\" : \"DllUnregisterServer\");\n\tif (!proc) {\n\t\thr = HRESULT_FROM_WIN32(GetLastError());\n\t\tgoto end;\n\t}\n\n\thr = ((HRESULT (WINAPI *)(void))proc)();\n\nend:\n\tif (module) {\n\t\tFreeLibrary(module);\n\t}\n\n\treturn hr;\n}\n\nstatic HRESULT RegisterDllExternal(LPWSTR path, BOOL state) {\n\tWCHAR regsvr32[MAX_PATH];\n\tExpandEnvironmentStrings(L\"%SystemRoot%\\\\System32\\\\regsvr32.exe\", regsvr32, ARRAYSIZE(regsvr32));\n\n\tLPWSTR args = (LPWSTR)LocalAlloc(LPTR, (lstrlen(path) + 6) * sizeof(WCHAR));\n\twsprintf(args, L\"/s %ls\\\"%ls\\\"\", state ? L\"\" : L\"/u \", path);\n\n\tDWORD status = 0;\n\tHRESULT hr = Exec(NULL, regsvr32, args, NULL, SW_HIDE, TRUE, &status);\n\tif (!SUCCEEDED(hr)) {\n\t\thr = HRESULT_FROM_WIN32(GetLastError());\n\t\treturn hr;\n\t}\n\n\tif (status != 0) {\n\t\t// Run again without /s, so the user can see the error\n\t\twsprintf(args, L\"%ls\\\"%ls\\\"\", state ? L\"\" : L\"/u \", path);\n\t\thr = Exec(NULL, regsvr32, args, NULL, SW_SHOWDEFAULT, TRUE, &status);\n\t}\n\n\treturn status == 0 ? S_OK : E_FAIL;\n}\n\nHRESULT RegisterServer(HWND hwnd, BOOL state, BOOL forLaunch) {\n\t// Ensure elevation\n\tHRESULT hr = S_OK;\n\tLPWSTR installPath = NULL;\n\tLPWSTR dllPath = NULL;\n\n\tif (!IsUserAdmin()) {\n\t\tLPWSTR args = (LPWSTR)LocalAlloc(LPTR, 512 * sizeof(WCHAR));\n\t\twsprintf(args, L\"%ls %i\", state ? L\"/regserver\" : L\"/unregserver\", hwnd);\n\n\t\tDWORD code = 0;\n\t\thr = SelfElevate(args, &code);\n\t\tif (!SUCCEEDED(hr)) {\n\t\t\t// Ignore error on cancelling UAC dialog\n\t\t\tif (hr == HRESULT_FROM_WIN32(ERROR_CANCELLED)) {\n\t\t\t\thr = S_OK;\n\t\t\t}\n\t\t\tgoto end;\n\t\t}\n\n\t\thr = HRESULT_FROM_WIN32(code);\n\t\tgoto end;\n\t}\n\n\thr = GetInstallPath(&installPath);\n\tCHECK_HR_OR_GOTO_END(L\"GetInstallPath\");\n\n\tdllPath = (LPWSTR)LocalAlloc(LPTR, MAX_PATH * sizeof(WCHAR));\n\twsprintf(dllPath, L\"%ls\\\\LegacyUpdate.dll\", installPath);\n\n#ifdef _DEBUG\n\t// Warn if registration path differs, to help with debugging\n\tLPWSTR currentPath = NULL;\n\thr = GetRegistryString(HKEY_CLASSES_ROOT, L\"CLSID\\\\{AD28E0DF-5F5A-40B5-9432-85EFD97D1F9F}\\\\InprocServer32\", NULL, KEY_WOW64_64KEY, &currentPath, NULL);\n\tif (SUCCEEDED(hr) && wcscmp(currentPath, dllPath) != 0) {\n\t\tif (MsgBox(hwnd, L\"DEBUG: Native dll currently registered at a different path. Override?\", currentPath, MB_YESNO) != IDYES) {\n\t\t\thr = S_OK;\n\t\t\tgoto end;\n\t\t}\n\t}\n#endif\n\n\thr = RegisterDllInternal(dllPath, state);\n\tif (!SUCCEEDED(hr)) {\n\t\t// Try external registration\n\t\tif (SUCCEEDED(RegisterDllExternal(dllPath, state))) {\n\t\t\thr = S_OK;\n\t\t} else {\n\t\t\tgoto end;\n\t\t}\n\t}\n\n#if _WIN64\n\tif (!SUCCEEDED(hr)) {\n\t\tgoto end;\n\t}\n\n\twsprintf(dllPath, L\"%ls\\\\LegacyUpdate32.dll\", installPath);\n\n#ifdef _DEBUG\n\t// Warn if registration path differs, to help with debugging\n\thr = GetRegistryString(HKEY_CLASSES_ROOT, L\"CLSID\\\\{AD28E0DF-5F5A-40B5-9432-85EFD97D1F9F}\\\\InprocServer32\", NULL, KEY_WOW64_32KEY, &currentPath, NULL);\n\tif (SUCCEEDED(hr) && wcscmp(currentPath, dllPath) != 0) {\n\t\tif (MsgBox(hwnd, L\"DEBUG: 32-bit dll currently registered at a different path. Override?\", currentPath, MB_YESNO) != IDYES) {\n\t\t\thr = S_OK;\n\t\t\tgoto end;\n\t\t}\n\t}\n#endif\n\n\thr = RegisterDllExternal(dllPath, state);\n#endif\n\nend:\n\tif (installPath) {\n\t\tLocalFree(installPath);\n\t}\n\n\tif (dllPath) {\n\t\tLocalFree(dllPath);\n\t}\n\n\tif (!forLaunch) {\n\t\tif (!SUCCEEDED(hr)) {\n\t\t\tWCHAR title[4096];\n\t\t\tLoadString(GetModuleHandle(NULL), state ? IDS_REGISTERFAILED : IDS_UNREGISTERFAILED, title, ARRAYSIZE(title));\n\t\t\tLPWSTR message = GetMessageForHresult(hr);\n\t\t\tMsgBox(hwnd, title, message, MB_ICONERROR);\n\t\t\tLocalFree(message);\n\t\t}\n\n\t\tPostQuitMessage(hr);\n\t}\n\n\treturn hr;\n}\n"
  },
  {
    "path": "launcher/RegisterServer.h",
    "content": "#pragma once\n\n#include <windows.h>\n\nHRESULT RegisterServer(HWND hwnd, BOOL state, BOOL forLaunch);\n"
  },
  {
    "path": "launcher/SelfElevate.c",
    "content": "#include \"SelfElevate.h\"\n#include <windows.h>\n#include \"Exec.h\"\n#include \"VersionInfo.h\"\n\nHRESULT SelfElevate(LPWSTR args, LPDWORD code) {\n\tLPWSTR fileName = NULL;\n\tGetOwnFileName(&fileName);\n\tHRESULT hr = Exec(L\"runas\", fileName, args, NULL, SW_SHOWDEFAULT, TRUE, code);\n\tCHECK_HR_OR_RETURN(L\"Exec\");\n\tLocalFree(fileName);\n\treturn hr;\n}\n"
  },
  {
    "path": "launcher/SelfElevate.h",
    "content": "#pragma once\n\n#include <windows.h>\n\nHRESULT SelfElevate(LPWSTR args, LPDWORD code);\n"
  },
  {
    "path": "launcher/main.c",
    "content": "#include \"stdafx.h\"\n#include \"main.h\"\n#include \"resource.h\"\n#include <windows.h>\n#include <combaseapi.h>\n#include <commctrl.h>\n#include <shellapi.h>\n#include \"Log.h\"\n#include \"MsgBox.h\"\n#include \"RegisterServer.h\"\n#include \"Startup.h\"\n\nHINSTANCE g_hInstance;\n\nextern void LaunchUpdateSite(int argc, LPWSTR *argv, int nCmdShow);\nextern void LaunchOptions(int nCmdShow);\nextern void LaunchLog(int argc, LPWSTR *argv, int nCmdShow);\nextern void RunOnce(BOOL postInstall);\n\ntypedef enum Action {\n\tActionLaunch,\n\tActionOptions,\n\tActionLog,\n\tActionRunOnce,\n\tActionRegServer,\n\tActionUnregServer\n} Action;\n\nstatic const LPWSTR actions[] = {\n\tL\"/launch\",\n\tL\"/options\",\n\tL\"/log\",\n\tL\"/runonce\",\n\tL\"/regserver\",\n\tL\"/unregserver\"\n};\n\n#ifndef __clang__\nEXTERN_C __declspec(dllexport)\n#endif\nint WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow) {\n\tg_hInstance = hInstance;\n\tStartup();\n\tOpenLog();\n\n\t// nCmdShow seems to give us garbage values. Get it from the startup info struct.\n\tSTARTUPINFO startupInfo;\n\tGetStartupInfo(&startupInfo);\n\tnCmdShow = (startupInfo.dwFlags & STARTF_USESHOWWINDOW) ? startupInfo.wShowWindow : SW_SHOWDEFAULT;\n\n\t// Init COM\n\tHRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);\n\tCHECK_HR_OR_GOTO_END(L\"CoInitializeEx\");\n\n\t// Init common controls\n\tINITCOMMONCONTROLSEX initComctl = {0};\n\tinitComctl.dwSize = sizeof(initComctl);\n\tinitComctl.dwICC = ICC_WIN95_CLASSES;\n\tInitCommonControlsEx(&initComctl);\n\n\tint argc;\n\tLPWSTR *argv = CommandLineToArgvW(GetCommandLineW(), &argc);\n\n\tLPWSTR actionFlag = L\"/launch\";\n\tif (argc > 1) {\n\t\tactionFlag = argv[1];\n\t}\n\n\t// All remaining args past the action\n\tLPWSTR *flags = NULL;\n\tint flagsCount = 0;\n\tif (argc > 2) {\n\t\tflags = &argv[2];\n\t\tflagsCount = argc - 2;\n\t}\n\n\tAction action = -1;\n\n\tfor (DWORD i = 0; i < ARRAYSIZE(actions); i++) {\n\t\tif (wcscmp(actionFlag, actions[i]) == 0) {\n\t\t\taction = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tswitch (action) {\n\tcase ActionLaunch:\n\t\tLaunchUpdateSite(flagsCount, flags, nCmdShow);\n\t\tbreak;\n\n\tcase ActionOptions:\n\t\tLaunchOptions(nCmdShow);\n\t\tbreak;\n\n\tcase ActionLog:\n\t\tLaunchLog(flagsCount, flags, nCmdShow);\n\t\tbreak;\n\n\tcase ActionRunOnce: {\n\t\tBOOL postInstall = flagsCount > 0 ? wcscmp(flags[0], L\"postinstall\") == 0 : FALSE;\n\t\tRunOnce(postInstall);\n\t\tbreak;\n\t}\n\n\tcase ActionRegServer:\n\tcase ActionUnregServer: {\n\t\tBOOL state = action == ActionRegServer;\n\t\tHWND hwnd = flagsCount > 0 ? (HWND)(intptr_t)wcstol(flags[0], NULL, 10) : 0;\n\t\tRegisterServer(hwnd, state, FALSE);\n\t\tbreak;\n\t}\n\n\tdefault: {\n\t\tWCHAR title[4096], body[4096];\n\t\tLoadString(GetModuleHandle(NULL), IDS_USAGE_TITLE, title, ARRAYSIZE(title));\n\t\tLoadString(GetModuleHandle(NULL), IDS_USAGE_BODY, body, ARRAYSIZE(body));\n\t\tMsgBox(NULL, title, body, MB_OK);\n\t\tPostQuitMessage(1);\n\t\tbreak;\n\t}\n\t}\n\n\tMSG msg = {0};\n\twhile (GetMessage(&msg, NULL, 0, 0) == 1) {\n\t\tTranslateMessage(&msg);\n\t\tDispatchMessage(&msg);\n\n\t\tswitch (msg.message) {\n\t\tcase WM_QUIT:\n\t\tcase WM_DESTROY:\n\t\t\thr = msg.wParam;\n\t\t\tbreak;\n\t\t}\n\t}\n\nend:\n\tCloseLog();\n\tCoUninitialize();\n\tExitProcess(hr);\n\treturn hr;\n}\n"
  },
  {
    "path": "launcher/main.h",
    "content": "EXTERN_C HINSTANCE g_hInstance;\n"
  },
  {
    "path": "launcher/manifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n\t<dependency>\n\t\t<dependentAssembly>\n\t\t\t<assemblyIdentity type=\"Win32\" name=\"Microsoft.Windows.Common-Controls\" version=\"6.0.0.0\" processorArchitecture=\"*\" publicKeyToken=\"6595b64144ccf1df\" language=\"*\"/>\n\t\t</dependentAssembly>\n\t</dependency>\n\t<compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n\t\t<application>\n\t\t\t<supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\"/> <!-- Windows Vista -->\n\t\t\t<supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\"/> <!-- Windows 7 -->\n\t\t\t<supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\"/> <!-- Windows 8 -->\n\t\t\t<supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\"/> <!-- Windows 8.1 -->\n\t\t\t<supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\"/> <!-- Windows 10 -->\n\t\t</application>\n\t</compatibility>\n\t<trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n\t\t<security>\n\t\t\t<requestedPrivileges>\n\t\t\t\t<requestedExecutionLevel level=\"asInvoker\" uiAccess=\"false\"/>\n\t\t\t</requestedPrivileges>\n\t\t</security>\n\t</trustInfo>\n\t<application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n\t\t<windowsSettings>\n\t\t\t<dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware>\n\t\t\t<dpiAwareness xmlns=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">PerMonitorV2,PerMonitor</dpiAwareness>\n\t\t</windowsSettings>\n\t</application>\n</assembly>\n"
  },
  {
    "path": "launcher/resource.h",
    "content": "#define IDI_APPICON                     100\n\n#define IDR_CPLTASKS                    202\n\n#define IDS_LEGACYUPDATEOCX             1\n#define IDS_LEGACYUPDATE                2\n#define IDS_CHECKFORUPDATES             3\n#define IDS_CHECKFORUPDATES_ALT         4\n#define IDS_USAGE_TITLE                 5\n#define IDS_USAGE_BODY                  6\n#define IDS_IENOTINSTALLED              7\n#define IDS_REGISTERFAILED              8\n#define IDS_UNREGISTERFAILED            9\n#define IDS_RUNONCEFAILED              10\n#define IDS_RUNONCESAFEMODE            11\n#define IDS_OSUPGRADED                 12\n\n#define ID_MANIFEST                     1\n"
  },
  {
    "path": "launcher/resource.rc",
    "content": "#include \"resource.h\"\n#include <windows.h>\n#include \"Version.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n// English (United States) resources\n\n#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\nLANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\n#pragma code_page(65001)\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Version\n//\n\nVS_VERSION_INFO VERSIONINFO\n FILEVERSION VERSION\n PRODUCTVERSION VERSION\n FILEFLAGSMASK VS_FFI_FILEFLAGSMASK\n#ifdef _DEBUG\n FILEFLAGS VS_FF_DEBUG | VS_FF_PRERELEASE\n#else\n FILEFLAGS 0\n#endif\n FILEOS VOS_NT_WINDOWS32\n FILETYPE VFT_APP\n FILESUBTYPE VFT2_UNKNOWN\nBEGIN\n\tBLOCK \"StringFileInfo\"\n\tBEGIN\n\t\tBLOCK \"040904b0\"\n\t\tBEGIN\n\t\t\tVALUE \"CompanyName\", \"Hashbang Productions\"\n\t\t\tVALUE \"FileDescription\", \"Legacy Update\"\n\t\t\tVALUE \"FileVersion\", VERSION_STRING\n\t\t\tVALUE \"InternalName\", \"LegacyUpdate.exe\"\n\t\t\tVALUE \"LegalCopyright\", \"© Hashbang Productions. All rights reserved.\"\n\t\t\tVALUE \"OriginalFilename\", \"LegacyUpdate.exe\"\n\t\t\tVALUE \"ProductName\", \"Legacy Update\"\n\t\t\tVALUE \"ProductVersion\", VERSION_STRING\n\t\tEND\n\tEND\n\tBLOCK \"VarFileInfo\"\n\tBEGIN\n\t\tVALUE \"Translation\", 0x0409, 0x04b0\n\tEND\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Icon\n//\n\n// Icon with lowest ID value placed first to ensure application icon\n// remains consistent on all systems.\nIDI_APPICON             ICON                    \"../LegacyUpdate/icon.ico\"\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// XML\n//\n\nIDR_CPLTASKS            XML                     \"CplTasks.xml\"\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// String Table\n//\n\nSTRINGTABLE\nBEGIN\n\t// Shortcuts\n\tIDS_LEGACYUPDATEOCX     \"Legacy Update\"\n\tIDS_LEGACYUPDATE        \"Legacy Update\"\n\tIDS_CHECKFORUPDATES     \"Check for updates\"\n\tIDS_CHECKFORUPDATES_ALT \"Check for software and driver updates via Legacy Update.\"\n\n\t// Usage\n\tIDS_USAGE_TITLE         \"LegacyUpdate.exe usage\"\n\tIDS_USAGE_BODY          \"\"\n\t\t\"LegacyUpdate.exe [/launch|/options|/log|/regserver|/unregserver]\\n\"\n\t\t\"\\n\"\n\t\t\"/launch\\n\"\n\t\t\"    Launch Legacy Update website in Internet Explorer\\n\"\n\t\t\"\\n\"\n\t\t\"/options\\n\"\n\t\t\"    Open the Windows Update Options control panel\\n\"\n\t\t\"\\n\"\n\t\t\"/log [system|local|locallow|windowsupdate]\\n\"\n\t\t\"    Open the specified log file\\n\"\n\t\t\"\\n\"\n\t\t\"/regserver\\n\"\n\t\t\"    Register ActiveX control\\n\"\n\t\t\"\\n\"\n\t\t\"/unregserver\\n\"\n\t\t\"    Unregister ActiveX control\\n\"\n\t\t\"\\n\"\n\t\t\"If no parameters are provided, /launch is assumed.\"\n\n\t// Launch\n\tIDS_IENOTINSTALLED      \"Internet Explorer is not installed. Use Optional Features in Control Panel to install it before using Legacy Update.\"\n\tIDS_OSUPGRADED          \"Windows has been upgraded since Legacy Update was installed. Run Legacy Update setup again to ensure all prerequisites are installed.\"\n\n\t// RegisterServer\n\tIDS_REGISTERFAILED      \"Failed to register Legacy Update ActiveX control\"\n\tIDS_UNREGISTERFAILED    \"Failed to unregister Legacy Update ActiveX control\"\n\n\t// RunOnce\n\tIDS_RUNONCEFAILED       \"Continuing Legacy Update setup failed\"\n\tIDS_RUNONCESAFEMODE     \"Legacy Update setup was cancelled because the system is running in Safe Mode.\"\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Manifest\n//\n\nID_MANIFEST             RT_MANIFEST             \"manifest.xml\"\n\n#endif    // English (United States) resources\n/////////////////////////////////////////////////////////////////////////////\n"
  },
  {
    "path": "launcher/stdafx.h",
    "content": "#pragma once\n\n#ifndef STRICT\n#define STRICT\n#endif\n\n#define WINVER       _WIN32_WINNT_WIN2K\n#define _WIN32_WINNT _WIN32_WINNT_WIN2K\n\n// Use msvcrt stdio functions\n#define __USE_MINGW_ANSI_STDIO 0\n\n// Enable COM C interfaces\n#define CINTERFACE\n#define COBJMACROS\n#define INITGUID\n\n#include \"resource.h\"\n#include <windows.h>\n#include \"Trace.h\"\n"
  },
  {
    "path": "nsisplugin/CloseIEWindows.c",
    "content": "#include <windows.h>\n#include <nsis/pluginapi.h>\n#include <exdisp.h>\n#include <tlhelp32.h>\n\nconst LPWSTR LegacyUpdateSiteURLHttp  = L\"http://legacyupdate.net/\";\nconst LPWSTR LegacyUpdateSiteURLHttps = L\"https://legacyupdate.net/\";\n\nPLUGIN_METHOD(CloseIEWindows) {\n\tPLUGIN_INIT();\n\n\t// Find and close IE windows that might have the ActiveX control loaded\n\tIShellWindows *windows;\n\tHRESULT hr = CoCreateInstance(&CLSID_ShellWindows, NULL, CLSCTX_ALL, &IID_IShellWindows, (void **)&windows);\n\tif (hr == REGDB_E_CLASSNOTREG) {\n\t\t// Expected when on the SYSTEM desktop\n\t\tgoto end;\n\t}\n\tCHECK_HR_OR_GOTO_END(L\"CoCreateInstance\");\n\n\tlong count = 0;\n\thr = IShellWindows_get_Count(windows, &count);\n\tCHECK_HR_OR_GOTO_END(L\"get_Count\");\n\n\tVARIANT index = {0};\n\tindex.vt = VT_I4;\n\n\tfor (long i = 0; i <= count; i++) {\n\t\tIDispatch *item = NULL;\n\t\tindex.lVal = i;\n\n\t\thr = IShellWindows_Item(windows, index, &item);\n\t\tif (!SUCCEEDED(hr) || !item) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tIWebBrowser2 *browser = NULL;\n\t\thr = IDispatch_QueryInterface(item, &IID_IWebBrowser2, (void **)&browser);\n\t\tIDispatch_Release(item);\n\t\tif (!SUCCEEDED(hr)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tBSTR location = NULL;\n\t\thr = IWebBrowser2_get_LocationURL(browser, &location);\n\t\tif (!SUCCEEDED(hr)) {\n\t\t\tIWebBrowser2_Release(browser);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (wcsstr(location, LegacyUpdateSiteURLHttp) != NULL || wcsstr(location, LegacyUpdateSiteURLHttps) != NULL) {\n\t\t\thr = IWebBrowser2_Quit(browser);\n\t\t\tif (!SUCCEEDED(hr)) {\n\t\t\t\tTRACE(L\"Quit failed: %08x\", hr);\n\t\t\t}\n\n\t\t\t// Wait up to 10 seconds for the window to close\n\t\t\tHWND hwnd = 0;\n\t\t\thr = IWebBrowser2_get_HWND(browser, (SHANDLE_PTR *)&hwnd);\n\t\t\tif (SUCCEEDED(hr) && hwnd != 0) {\n\t\t\t\tDWORD start = GetTickCount();\n\t\t\t\twhile (IsWindow(hwnd) && GetTickCount() - start < 10000) {\n\t\t\t\t\tSleep(100);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tSysFreeString(location);\n\t\tIWebBrowser2_Release(browser);\n\t}\n\n\t// Find and exit all dllhosts\n\tHANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);\n\tif (snapshot == INVALID_HANDLE_VALUE) {\n\t\tgoto end;\n\t}\n\n\tPROCESSENTRY32W entry = {0};\n\tentry.dwSize = sizeof(PROCESSENTRY32W);\n\n\tif (Process32FirstW(snapshot, &entry)) {\n\t\tdo {\n\t\t\tif (_wcsicmp(entry.szExeFile, L\"dllhost.exe\") != 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Loop over loaded modules to determine if ours is loaded\n\t\t\tHANDLE process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_TERMINATE, FALSE, entry.th32ProcessID);\n\t\t\tif (process) {\n\t\t\t\tHANDLE module = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, entry.th32ProcessID);\n\t\t\t\tif (module == INVALID_HANDLE_VALUE) {\n\t\t\t\t\tCloseHandle(process);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tMODULEENTRY32W moduleEntry = {0};\n\t\t\t\tmoduleEntry.dwSize = sizeof(MODULEENTRY32W);\n\n\t\t\t\tif (Module32FirstW(module, &moduleEntry)) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tLPWSTR dllName = wcsrchr(moduleEntry.szExePath, L'\\\\');\n\t\t\t\t\t\tif (!dllName) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdllName += 1;\n\t\t\t\t\t\tif (_wcsicmp(dllName, L\"LegacyUpdate.dll\") == 0 || _wcsicmp(dllName, L\"LegacyUpdate32.dll\") == 0) {\n\t\t\t\t\t\t\tTerminateProcess(process, 0);\n\n\t\t\t\t\t\t\t// Wait up to 10 seconds for the dllhost to close\n\t\t\t\t\t\t\tDWORD start = GetTickCount();\n\t\t\t\t\t\t\twhile (GetTickCount() - start < 10000) {\n\t\t\t\t\t\t\t\tSleep(100);\n\n\t\t\t\t\t\t\t\tDWORD exitCode = 0;\n\t\t\t\t\t\t\t\tif (GetExitCodeProcess(process, &exitCode) && exitCode != STILL_ACTIVE) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t} while (Module32NextW(module, &moduleEntry));\n\t\t\t\t}\n\n\t\t\t\tCloseHandle(module);\n\t\t\t\tCloseHandle(process);\n\t\t\t}\n\t\t} while (Process32NextW(snapshot, &entry));\n\t}\n\n\tCloseHandle(snapshot);\n\nend:\n\tif (windows) {\n\t\tIShellWindows_Release(windows);\n\t}\n\n\tpushint(hr);\n}\n"
  },
  {
    "path": "nsisplugin/DialogInit.c",
    "content": "#include \"stdafx.h\"\n\n#undef _WIN32_WINNT\n#define _WIN32_WINNT _WIN32_WINNT_VISTA\n\n#include <windows.h>\n#include <nsis/pluginapi.h>\n#include <shlwapi.h>\n#include <uxtheme.h>\n#include <vsstyle.h>\n#include <windowsx.h>\n#include \"main.h\"\n#include \"LoadImage.h\"\n#include \"Registry.h\"\n#include \"VersionInfo.h\"\n\n#ifndef WM_DWMCOMPOSITIONCHANGED\n#define WM_DWMCOMPOSITIONCHANGED 0x031e\n#endif\n\n#define DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1 19\n#define DWMWA_USE_IMMERSIVE_DARK_MODE 20\n#define DWMWA_CAPTION_COLOR       35\n#define DWMWA_SYSTEMBACKDROP_TYPE 38\n#define DWMWA_COLOR_NONE          0xFFFFFFFE\n#define DWMSBT_MAINWINDOW         2\n\n#define IDI_BANNER_WORDMARK_LIGHT 1337\n#define IDI_BANNER_WORDMARK_DARK  1338\n#define IDI_BANNER_WORDMARK_GLOW  1339\n\ntypedef HRESULT (WINAPI *_DwmExtendFrameIntoClientArea)(HWND hWnd, const MARGINS *pMarInset);\ntypedef HRESULT (WINAPI *_DwmIsCompositionEnabled)(BOOL *pfEnabled);\ntypedef HRESULT (WINAPI *_DwmDefWindowProc)(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *plResult);\ntypedef HRESULT (WINAPI *_DwmSetWindowAttribute)(HWND hwnd, DWORD dwAttribute, LPCVOID pvAttribute, DWORD cbAttribute);\ntypedef HRESULT (WINAPI *_SetWindowThemeAttribute)(HWND hwnd, enum WINDOWTHEMEATTRIBUTETYPE eAttribute, PVOID pvAttribute, DWORD cbAttribute);\ntypedef BOOL (WINAPI *_IsThemeActive)(void);\ntypedef HTHEME (WINAPI *_OpenThemeData)(HWND hwnd, LPCWSTR pszClassList);\ntypedef HRESULT (WINAPI *_CloseThemeData)(HTHEME hTheme);\ntypedef HRESULT (WINAPI *_DrawThemeBackground)(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pRect, const RECT *pClipRect);\n\nstatic _DwmExtendFrameIntoClientArea $DwmExtendFrameIntoClientArea;\nstatic _DwmIsCompositionEnabled $DwmIsCompositionEnabled;\nstatic _DwmDefWindowProc $DwmDefWindowProc;\nstatic _DwmSetWindowAttribute $DwmSetWindowAttribute;\nstatic _SetWindowThemeAttribute $SetWindowThemeAttribute;\nstatic _IsThemeActive $IsThemeActive;\nstatic _OpenThemeData $OpenThemeData;\nstatic _CloseThemeData $CloseThemeData;\nstatic _DrawThemeBackground $DrawThemeBackground;\n\nstatic const WCHAR BackgroundClassName[] = L\"LegacyUpdateBackground\";\n\ntypedef enum Theme {\n\tThemeUnknown = -1,\n\tThemeClassic,\n\tThemeBasic,\n\tThemeAeroLight,\n\tThemeAeroDark\n} Theme;\n\nstatic HBITMAP g_bannerWordmark;\nstatic HBITMAP g_bannerWordmarkGlow;\nstatic HTHEME g_aeroTheme;\nstatic Theme g_theme = ThemeUnknown;\n\nstatic WNDPROC g_dialogOrigWndProc;\nstatic WNDPROC g_bannerOrigWndProc;\nstatic WNDPROC g_bottomOrigWndProc;\n\nstatic HWND g_backgroundWindow;\n\nstatic Theme GetTheme(void) {\n\tBOOL enabled = FALSE;\n\tif (!$DwmIsCompositionEnabled || !$IsThemeActive || !SUCCEEDED($DwmIsCompositionEnabled(&enabled))) {\n\t\treturn ThemeClassic;\n\t}\n\n\tif (enabled) {\n\t\tDWORD light = 1;\n\t\tif (AtLeastWin10_1809()) {\n\t\t\tGetRegistryDword(HKEY_CURRENT_USER, REGPATH_WIN_PERSONALIZE, L\"AppsUseLightTheme\", 0, &light);\n\t\t}\n\t\treturn light ? ThemeAeroLight : ThemeAeroDark;\n\t}\n\n\treturn $IsThemeActive() ? ThemeBasic : ThemeClassic;\n}\n\nstatic void ConfigureWindow(void) {\n\tHWND bannerWindow = GetDlgItem(g_hwndParent, 1046);\n\tHWND bannerDivider = GetDlgItem(g_hwndParent, 1047);\n\tHWND bottomDivider = GetDlgItem(g_hwndParent, 6900);\n\tif (!bannerWindow || !bannerDivider || !bottomDivider) {\n\t\treturn;\n\t}\n\n\tTheme theme = GetTheme();\n\tif (g_theme != theme) {\n\t\tg_theme = theme;\n\t\tMARGINS margins = {0};\n\n\t\tif (theme >= ThemeAeroLight) {\n\t\t\t// Set glass area\n\t\t\tRECT rect = {0};\n\t\t\tGetWindowRect(bannerWindow, &rect);\n\t\t\tmargins.cyTopHeight = rect.bottom - rect.top;\n\t\t}\n\n\t\tif ($DwmExtendFrameIntoClientArea) {\n\t\t\t$DwmExtendFrameIntoClientArea(g_hwndParent, &margins);\n\t\t}\n\n\t\tShowWindow(bannerDivider, theme >= ThemeBasic ? SW_HIDE : SW_SHOW);\n\t\tShowWindow(bottomDivider, theme >= ThemeBasic ? SW_HIDE : SW_SHOW);\n\n\t\tif (g_theme >= ThemeBasic) {\n\t\t\tDWORD wordmark = g_theme == ThemeAeroDark ? IDI_BANNER_WORDMARK_DARK : IDI_BANNER_WORDMARK_LIGHT;\n\t\t\tg_bannerWordmark = LoadPNGResource(NULL, MAKEINTRESOURCE(wordmark), L\"PNG\");\n\t\t\tif (g_theme >= ThemeAeroLight && AtMostWin7()) {\n\t\t\t\tg_bannerWordmarkGlow = LoadPNGResource(NULL, MAKEINTRESOURCE(IDI_BANNER_WORDMARK_GLOW), L\"PNG\");\n\t\t\t}\n\t\t} else {\n\t\t\tDeleteObject(g_bannerWordmark);\n\t\t\tDeleteObject(g_bannerWordmarkGlow);\n\t\t\tg_bannerWordmark = NULL;\n\t\t\tg_bannerWordmarkGlow = NULL;\n\t\t}\n\n\t\t// Set dark mode state\n\t\tif (AtLeastWin10_1809() && $DwmSetWindowAttribute) {\n\t\t\tDWORD attr = AtLeastWin10_2004() ? DWMWA_USE_IMMERSIVE_DARK_MODE : DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1;\n\t\t\tDWORD value = g_theme == ThemeAeroDark;\n\t\t\t$DwmSetWindowAttribute(g_hwndParent, attr, &value, sizeof(value));\n\t\t}\n\t}\n}\n\nstatic LRESULT CALLBACK BannerWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {\n\tif (g_theme < ThemeBasic) {\n\t\treturn CallWindowProc(g_bannerOrigWndProc, hwnd, uMsg, wParam, lParam);\n\t}\n\n\tswitch (uMsg) {\n\tcase WM_PAINT: {\n\t\tPAINTSTRUCT ps = {0};\n\t\tHDC hdc = BeginPaint(hwnd, &ps);\n\t\tRECT rect = {0};\n\t\tGetClientRect(hwnd, &rect);\n\n\t\t// Draw base color for glass area\n\t\tFillRect(hdc, &rect, GetStockObject(BLACK_BRUSH));\n\n\t\t// Draw Aero Basic titlebar\n\t\tif (g_theme == ThemeBasic && g_aeroTheme && $DrawThemeBackground) {\n\t\t\tint state = GetActiveWindow() == g_hwndParent ? AW_S_TITLEBAR_ACTIVE : AW_S_TITLEBAR_INACTIVE;\n\t\t\t$DrawThemeBackground(g_aeroTheme, hdc, AW_TITLEBAR, state, &rect, NULL);\n\t\t}\n\n\t\tfloat scale = (float)GetDeviceCaps(hdc, LOGPIXELSX) / 96.0f;\n\n\t\tBLENDFUNCTION blendFunc = {0};\n\t\tblendFunc.BlendOp = AC_SRC_OVER;\n\t\tblendFunc.BlendFlags = 0;\n\t\tblendFunc.SourceConstantAlpha = 0xFF;\n\t\tblendFunc.AlphaFormat = AC_SRC_ALPHA;\n\n\t\t// Draw wordmark with alpha blending\n\t\tif (g_bannerWordmarkGlow) {\n\t\t\tHDC hdcMem = CreateCompatibleDC(hdc);\n\t\t\tHBITMAP hbmOld = (HBITMAP)SelectObject(hdcMem, g_bannerWordmarkGlow);\n\n\t\t\tBITMAP bitmap = {0};\n\t\t\tGetObject(g_bannerWordmarkGlow, sizeof(bitmap), &bitmap);\n\n\t\t\tLONG width = bitmap.bmWidth * scale;\n\t\t\tLONG height = bitmap.bmHeight * scale;\n\t\t\tLONG x = (rect.right - rect.left - width) / 2;\n\t\t\tLONG y = (rect.bottom - rect.top - height) / 2;\n\n\t\t\tSetStretchBltMode(hdc, HALFTONE);\n\t\t\tAlphaBlend(hdc,\n\t\t\t\tx, y, width, height, hdcMem,\n\t\t\t\t0, 0, bitmap.bmWidth, bitmap.bmHeight, blendFunc);\n\n\t\t\tSelectObject(hdcMem, hbmOld);\n\t\t\tDeleteDC(hdcMem);\n\t\t}\n\n\t\tif (g_bannerWordmark) {\n\t\t\tHDC hdcMem = CreateCompatibleDC(hdc);\n\t\t\tHBITMAP hbmOld = (HBITMAP)SelectObject(hdcMem, g_bannerWordmark);\n\n\t\t\tBITMAP bitmap = {0};\n\t\t\tGetObject(g_bannerWordmark, sizeof(bitmap), &bitmap);\n\n\t\t\tLONG width = bitmap.bmWidth * scale;\n\t\t\tLONG height = bitmap.bmHeight * scale;\n\t\t\tLONG x = (rect.right - rect.left - width) / 2;\n\t\t\tLONG y = ((rect.bottom - rect.top - height) / 2) - (1 * scale);\n\n\t\t\tSetStretchBltMode(hdc, HALFTONE);\n\t\t\tAlphaBlend(hdc,\n\t\t\t\tx, y, width, height, hdcMem,\n\t\t\t\t0, 0, bitmap.bmWidth, bitmap.bmHeight, blendFunc);\n\n\t\t\tSelectObject(hdcMem, hbmOld);\n\t\t\tDeleteDC(hdcMem);\n\t\t}\n\n\t\tEndPaint(hwnd, &ps);\n\t\treturn 0;\n\t}\n\n\tcase WM_ERASEBKGND:\n\t\treturn DefWindowProc(hwnd, uMsg, wParam, lParam);\n\n\tcase WM_NCHITTEST:\n\t\t// Pass through to parent\n\t\treturn HTTRANSPARENT;\n\t}\n\n\tif (!g_bannerOrigWndProc) {\n\t\treturn 0;\n\t}\n\n\treturn CallWindowProc(g_bannerOrigWndProc, hwnd, uMsg, wParam, lParam);\n}\n\nstatic LRESULT CALLBACK BottomWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {\n\tswitch (uMsg) {\n\tcase WM_PAINT: {\n\t\t// Draw command area background (grey with divider line)\n\t\tif (g_theme < ThemeBasic || !g_aeroTheme || !$DrawThemeBackground) {\n\t\t\tbreak;\n\t\t}\n\n\t\tPAINTSTRUCT ps = {0};\n\t\tHDC hdc = BeginPaint(hwnd, &ps);\n\n\t\tRECT rect = {0};\n\t\tGetClientRect(hwnd, &rect);\n\t\t$DrawThemeBackground(g_aeroTheme, hdc, AW_COMMANDAREA, 0, &rect, NULL);\n\n\t\tEndPaint(hwnd, &ps);\n\t\treturn 0;\n\t}\n\t}\n\n\tif (!g_bottomOrigWndProc) {\n\t\treturn 0;\n\t}\n\n\treturn CallWindowProc(g_bottomOrigWndProc, hwnd, uMsg, wParam, lParam);\n}\n\nstatic LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {\n\tif (g_theme >= ThemeAeroLight && $DwmDefWindowProc) {\n\t\tLRESULT lRet = 0;\n\t\tif ($DwmDefWindowProc(hwnd, uMsg, wParam, lParam, &lRet)) {\n\t\t\treturn lRet;\n\t\t}\n\t}\n\n\tswitch (uMsg) {\n\tcase WM_THEMECHANGED:\n\tcase WM_DWMCOMPOSITIONCHANGED:\n\t\tConfigureWindow();\n\t\tbreak;\n\n\tcase WM_ACTIVATE:\n\tcase WM_NCACTIVATE:\n\t\t// Redraw banner on activation\n\t\tif (g_theme == ThemeBasic) {\n\t\t\tInvalidateRect(GetDlgItem(hwnd, 1046), NULL, FALSE);\n\t\t}\n\t\tbreak;\n\n\tcase WM_DESTROY:\n\t\tif (g_backgroundWindow) {\n\t\t\tDestroyWindow(g_backgroundWindow);\n\t\t\tg_backgroundWindow = NULL;\n\t\t}\n\t\tbreak;\n\n\tcase WM_NCHITTEST: {\n\t\tif (g_theme < ThemeBasic) {\n\t\t\tbreak;\n\t\t}\n\n\t\t// Allow drag in the header area\n\t\tHWND bannerWindow = GetDlgItem(hwnd, 1046);\n\t\tif (!bannerWindow) {\n\t\t\tbreak;\n\t\t}\n\n\t\tPOINT hit = {GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)};\n\t\tScreenToClient(hwnd, &hit);\n\n\t\tRECT rect = {0};\n\t\tGetWindowRect(bannerWindow, &rect);\n\t\trect.right -= rect.left;\n\t\trect.bottom -= rect.top;\n\t\trect.left = 0;\n\t\trect.top = 0;\n\n\t\tif (PtInRect(&rect, hit)) {\n\t\t\treturn HTCAPTION;\n\t\t}\n\t\tbreak;\n\t}\n\t}\n\n\tif (!g_dialogOrigWndProc) {\n\t\treturn 0;\n\t}\n\n\treturn CallWindowProc(g_dialogOrigWndProc, hwnd, uMsg, wParam, lParam);\n}\n\nstatic LRESULT CALLBACK BackgroundWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {\n\tswitch (uMsg) {\n\tcase WM_PAINT: {\n\t\tPAINTSTRUCT ps = {0};\n\t\tHDC hdc = BeginPaint(hwnd, &ps);\n\t\tRECT rect = {0};\n\t\tGetClientRect(hwnd, &rect);\n\n\t\t// Gradient\n\t\tint height = rect.bottom - rect.top;\n\t\tint width = rect.right - rect.left;\n\n\t\tfor (int i = 0; i < height; i++) {\n\t\t\tfloat ratio = (float)(i - rect.top) / (float)(rect.bottom - rect.top);\n\t\t\tCOLORREF color = RGB(\n\t\t\t\t(int)(0x00 * (1 - ratio) + 0x00 * ratio),\n\t\t\t\t(int)(0x00 * (1 - ratio) + 0x00 * ratio),\n\t\t\t\t(int)(0x80 * (1 - ratio) + 0x00 * ratio)\n\t\t\t);\n\n\t\t\tRECT lineRect = {rect.left, rect.top + i, rect.right, rect.top + i + 1};\n\t\t\tHBRUSH brush = CreateSolidBrush(color);\n\t\t\tFillRect(hdc, &lineRect, brush);\n\t\t\tDeleteObject(brush);\n\t\t}\n\n\t\tHFONT 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\");\n\t\tHFONT oldFont = (HFONT)SelectObject(hdc, font);\n\n\t\tstatic LPWSTR text = L\"Legacy Update\";\n\n\t\t// Shadow\n\t\tSetTextColor(hdc, RGB(0x00, 0x00, 0x00));\n\t\tSetBkMode(hdc, TRANSPARENT);\n\t\tTextOut(hdc, 10 + 4, 4 + 4, text, lstrlen(text));\n\n\t\t// Text\n\t\tSetTextColor(hdc, RGB(0xff, 0xff, 0xff));\n\t\tTextOut(hdc, 10, 4, text, lstrlen(text));\n\t\tSelectObject(hdc, oldFont);\n\t\tDeleteObject(font);\n\n\t\tEndPaint(hwnd, &ps);\n\t\treturn 0;\n\t}\n\n\tcase WM_ERASEBKGND:\n\t\treturn 1;\n\n\tcase WM_ACTIVATE:\n\t\t// If we become foreground, bring the main dialog to front\n\t\tif (LOWORD(wParam) != WA_INACTIVE) {\n\t\t\tSetForegroundWindow(g_hwndParent);\n\t\t}\n\t\treturn 0;\n\n\tcase WM_CLOSE:\n\t\t// Don't allow closing\n\t\treturn 0;\n\t}\n\n\treturn DefWindowProc(hwnd, uMsg, wParam, lParam);\n}\n\nstatic UINT_PTR NSISPluginCallback(enum NSPIM event) {\n\t// Does nothing, but keeping a callback registered prevents NSIS from unloading the plugin\n\treturn 0;\n}\n\nPLUGIN_METHOD(DialogInit) {\n\tPLUGIN_INIT();\n\n\tif (g_dialogOrigWndProc) {\n\t\treturn;\n\t}\n\n\textra->RegisterPluginCallback(g_hInstance, NSISPluginCallback);\n\n\t// Get symbols\n\tHMODULE dwmapi = LoadLibrary(L\"dwmapi.dll\");\n\tif (dwmapi) {\n\t\t$DwmExtendFrameIntoClientArea = (_DwmExtendFrameIntoClientArea)GetProcAddress(dwmapi, \"DwmExtendFrameIntoClientArea\");\n\t\t$DwmIsCompositionEnabled = (_DwmIsCompositionEnabled)GetProcAddress(dwmapi, \"DwmIsCompositionEnabled\");\n\t\t$DwmDefWindowProc = (_DwmDefWindowProc)GetProcAddress(dwmapi, \"DwmDefWindowProc\");\n\t\t$DwmSetWindowAttribute = (_DwmSetWindowAttribute)GetProcAddress(dwmapi, \"DwmSetWindowAttribute\");\n\t}\n\n\tHMODULE uxtheme = LoadLibrary(L\"uxtheme.dll\");\n\tif (uxtheme) {\n\t\t$SetWindowThemeAttribute = (_SetWindowThemeAttribute)GetProcAddress(uxtheme, \"SetWindowThemeAttribute\");\n\t\t$IsThemeActive = (_IsThemeActive)GetProcAddress(uxtheme, \"IsThemeActive\");\n\t\t$OpenThemeData = (_OpenThemeData)GetProcAddress(uxtheme, \"OpenThemeData\");\n\t\t$CloseThemeData = (_CloseThemeData)GetProcAddress(uxtheme, \"CloseThemeData\");\n\t\t$DrawThemeBackground = (_DrawThemeBackground)GetProcAddress(uxtheme, \"DrawThemeBackground\");\n\t}\n\n\t// Get AeroWizard theme\n\tif ($OpenThemeData) {\n\t\tg_aeroTheme = $OpenThemeData(g_hwndParent, L\"AeroWizard\");\n\t}\n\n\t// Hide title caption/icon\n\tif ($SetWindowThemeAttribute) {\n\t\tWTA_OPTIONS options;\n\t\toptions.dwFlags = WTNCA_NODRAWCAPTION | WTNCA_NODRAWICON;\n\t\toptions.dwMask = WTNCA_NODRAWCAPTION | WTNCA_NODRAWICON;\n\t\t$SetWindowThemeAttribute(g_hwndParent, WTA_NONCLIENT, &options, sizeof(options));\n\t}\n\n\t// Enable Acrylic blur\n\tif (AtLeastWin11_21H1() && $DwmSetWindowAttribute) {\n\t\t// I stole this undocumented 1029 attr from Microsoft Store's StoreInstaller.exe\n\t\tBOOL modern = AtLeastWin11_22H2();\n\t\tDWORD attr = modern ? DWMWA_SYSTEMBACKDROP_TYPE : 1029;\n\t\tDWORD value = modern ? DWMSBT_MAINWINDOW : 1;\n\t\t$DwmSetWindowAttribute(g_hwndParent, attr, &value, sizeof(value));\n\n\t\t// Hide caption background\n\t\tvalue = DWMWA_COLOR_NONE;\n\t\t$DwmSetWindowAttribute(g_hwndParent, DWMWA_CAPTION_COLOR, &value, sizeof(value));\n\t}\n\n\t// Set up extended client frame\n\tConfigureWindow();\n\n\t// Set up window procedures\n\tHWND bannerWindow = GetDlgItem(g_hwndParent, 1046);\n\tHWND bottomWindow = GetDlgItem(g_hwndParent, 6901);\n\tg_dialogOrigWndProc = (WNDPROC)SetWindowLongPtr(g_hwndParent, GWLP_WNDPROC, (LONG_PTR)MainWndProc);\n\tg_bannerOrigWndProc = (WNDPROC)SetWindowLongPtr(bannerWindow, GWLP_WNDPROC, (LONG_PTR)BannerWndProc);\n\tg_bottomOrigWndProc = (WNDPROC)SetWindowLongPtr(bottomWindow, GWLP_WNDPROC, (LONG_PTR)BottomWndProc);\n\n\t// Nothing in particular 👀\n\tSYSTEMTIME date = {0};\n\tGetLocalTime(&date);\n\tif (date.wMonth == 4 && date.wDay == 1) {\n\t\tWNDCLASS wndClass = {0};\n\t\twndClass.style = CS_VREDRAW | CS_HREDRAW | CS_OWNDC | CS_NOCLOSE;\n\t\twndClass.lpfnWndProc = BackgroundWndProc;\n\t\twndClass.hInstance = g_hInstance;\n\t\twndClass.lpszClassName = BackgroundClassName;\n\t\twndClass.hCursor = LoadCursor(NULL, IDC_ARROW);\n\n\t\tif (RegisterClass(&wndClass)) {\n\t\t\tint width = GetSystemMetrics(SM_CXSCREEN);\n\t\t\tint height = GetSystemMetrics(SM_CYSCREEN);\n\n\t\t\tg_backgroundWindow = CreateWindowEx(\n\t\t\t\tWS_EX_TOOLWINDOW,\n\t\t\t\twndClass.lpszClassName,\n\t\t\t\tL\"\",\n\t\t\t\tWS_POPUP,\n\t\t\t\t0, 0, width, height,\n\t\t\t\tNULL, NULL,\n\t\t\t\twndClass.hInstance,\n\t\t\t\tNULL\n\t\t\t);\n\n\t\t\tif (g_backgroundWindow) {\n\t\t\t\tShowWindow(g_backgroundWindow, SW_SHOW);\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "nsisplugin/EnableMicrosoftUpdate.c",
    "content": "#include <windows.h>\n#include <nsis/pluginapi.h>\n#include <wuapi.h>\n#include \"main.h\"\n\nstatic const LPWSTR MicrosoftUpdateServiceID = L\"7971f918-a847-4430-9279-4a52d1efe18d\";\n\nPLUGIN_METHOD(EnableMicrosoftUpdate) {\n\tPLUGIN_INIT();\n\n\tIUpdateServiceManager2 *serviceManager = NULL;\n\tIUpdateServiceRegistration *registration = NULL;\n\n\tHRESULT hr = CoCreateInstance(&CLSID_UpdateServiceManager, NULL, CLSCTX_INPROC_SERVER, &IID_IUpdateServiceManager2, (void **)&serviceManager);\n\tCHECK_HR_OR_GOTO_END(L\"CoCreateInstance\");\n\n\tBSTR clientID = SysAllocString(L\"Legacy Update\");\n\thr = IUpdateServiceManager2_put_ClientApplicationID(serviceManager, clientID);\n\tSysFreeString(clientID);\n\tCHECK_HR_OR_GOTO_END(L\"put_ClientApplicationID\");\n\n\tBSTR serviceID = SysAllocString(MicrosoftUpdateServiceID);\n\tBSTR serviceCab = SysAllocString(L\"\");\n\thr = IUpdateServiceManager2_AddService2(serviceManager, serviceID, asfAllowPendingRegistration | asfAllowOnlineRegistration | asfRegisterServiceWithAU, serviceCab, &registration);\n\tSysFreeString(serviceID);\n\tSysFreeString(serviceCab);\n\tCHECK_HR_OR_GOTO_END(L\"AddService2\");\n\nend:\n\tif (registration) {\n\t\tIUpdateServiceManager2_Release(registration);\n\t}\n\n\tif (serviceManager) {\n\t\tIUpdateServiceManager2_Release(serviceManager);\n\t}\n\n\tpushint(hr);\n}\n"
  },
  {
    "path": "nsisplugin/Exec.c",
    "content": "/*\nCopyright (C) 2002 Robert Rainwater <rrainwater@yahoo.com>\nCopyright (C) 2002-2023 Nullsoft and Contributors\n\nThis software is provided 'as-is', without any express or implied\nwarranty.  In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n  1. The origin of this software must not be misrepresented; you must not\n   claim that you wrote the original software. If you use this software\n   in a product, an acknowledgment in the product documentation would be\n   appreciated but is not required.\n  2. Altered source versions must be plainly marked as such, and must not be\n   misrepresented as being the original software.\n  3. This notice may not be removed or altered from any source distribution.\n\n*/\n#include <windows.h>\n#include <commctrl.h>\n#include <winnt.h>\n#include <nsis/pluginapi.h> // nsis plugin\n#include \"main.h\"\n\n#if defined(_MSC_VER) && !defined(GetVersion)\n#if _MSC_VER >= 1500\nFORCEINLINE DWORD NoDepr_GetVersion(void) { __pragma(warning(push))__pragma(warning(disable:4996)) DWORD r = GetVersion(); __pragma(warning(pop)) return r; }\n#define GetVersion NoDepr_GetVersion\n#endif //~ _MSC_VER >= 1500\n#endif //~ _MSC_VER\n\n#define TAB_REPLACE _T(\"        \")\n#define TAB_REPLACE_SIZE (sizeof(TAB_REPLACE) - sizeof(_T(\"\")))\n#define TAB_REPLACE_CCH (TAB_REPLACE_SIZE / sizeof(_T(\"\")))\nenum { MODE_IGNOREOUTPUT = 0, MODE_LINES = 1, MODE_STACK = 2 };\n\n#define LOOPTIMEOUT  100\nstatic HWND g_hwndList;\n\nstatic void ExecScript(BOOL log);\nstatic TCHAR *my_strstr(TCHAR *a, TCHAR *b);\nstatic unsigned int my_atoi(TCHAR *s);\nstatic int WINAPI AsExeWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow);\n\nPLUGIN_METHOD(Exec) {\n  PLUGIN_INIT();\n  ExecScript(MODE_IGNOREOUTPUT);\n}\n\nPLUGIN_METHOD(ExecToLog) {\n  PLUGIN_INIT();\n  ExecScript(extra->exec_flags->status_update & 1 ? MODE_LINES : MODE_IGNOREOUTPUT);\n}\n\nPLUGIN_METHOD(ExecToStack) {\n  PLUGIN_INIT();\n  ExecScript(MODE_STACK);\n}\n\nstatic BOOL IsLeadSurrogateUTF16(unsigned short c) { return c >= 0xd800 && c <= 0xdbff; }\nstatic BOOL IsTrailSurrogateUTF16(unsigned short c) { return c >= 0xdc00 && c <= 0xdfff; }\n\nstatic PWSTR MyCharNext(PCWSTR p)\n{\n  // Note: This is wrong for surrogate pair combining characters but CharNextW does\n  // not support surrogate pairs correctly so we have to manually handle the pairs.\n  if (!p[0]) return (PWSTR) p;\n  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.\n  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.\n  return (CharNextW)(p);\n}\n#define CharNextW MyCharNext\n\nstatic void TruncateStringUTF16LE(LPWSTR Buffer, SIZE_T Length, LPCWSTR Overflow, SIZE_T lenOver) {\n  if (Length) {\n    LPWSTR p = &Buffer[Length - 1];\n    UINT stripBaseCharIfCuttingCombining = TRUE;\n\n    // 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)\n    if (stripBaseCharIfCuttingCombining && lenOver) {\n      WCHAR buf[] = { *p, Overflow[0], lenOver > 1 ? Overflow[1] : L' ', L'\\0' };\n      for (;;) {\n        BOOL comb = CharNextW(buf) > buf + 1;\n        if (!comb || p < Buffer) break;\n        *((WORD*)((BYTE*)&buf[1])) = *((WORD*)((BYTE*)&buf[0]));\n        buf[0] = *p;\n        *p-- = L'\\0';\n      }\n    }\n\n    if (IsLeadSurrogateUTF16(*p)) {\n      *p = L'\\0'; // Avoid incomplete pair\n    }\n  }\n}\n\nstatic void TruncateStringMB(UINT Codepage, LPSTR Buffer, SIZE_T Length, unsigned short OverflowCh) {\n  if (Length) {\n    CHAR *p = &Buffer[Length - 1], buf[] = { *p, ' ', ' ', '\\0' };\n\n    if (CharNextExA(Codepage, buf, 0) > buf + 1) { // Remove incomplete DBCS character?\n      *p = '\\0';\n    }\n  }\n}\n\nstatic BOOL IsWOW64(void) {\n#ifdef _WIN64\n  return FALSE;\n#else\n  typedef BOOL (WINAPI*ISWOW64PROCESS)(HANDLE, BOOL*);\n  ISWOW64PROCESS pfIsWow64Process;\n  typedef BOOL (WINAPI*ISWOW64PROCESS2)(HANDLE, USHORT*, USHORT*);\n  ISWOW64PROCESS2 pfIsWow64Process2;\n  HANDLE hProcess = GetCurrentProcess();\n  HMODULE hK32 = GetModuleHandleA(\"KERNEL32\");\n  UINT_PTR retval;\n  USHORT appmach, image_file_machine_unknown = 0;\n  CHAR funcnam[16]\n#if defined(_MSC_VER) && (_MSC_VER-0 <= 1400)\n    = \"IsWow64Process2\"; // MOVSD * 4\n#else\n    ; lstrcpyA(funcnam, \"IsWow64Process2\");\n#endif\n  pfIsWow64Process2 = (ISWOW64PROCESS2) GetProcAddress(hK32, funcnam);\n  if (pfIsWow64Process2 && pfIsWow64Process2(hProcess, &appmach, NULL)) {\n    retval = image_file_machine_unknown != appmach;\n  }\n  else {\n    BOOL wow64;\n    pfIsWow64Process = (ISWOW64PROCESS) GetProcAddress(hK32, (funcnam[14] = '\\0', funcnam));\n    retval = (UINT_PTR) pfIsWow64Process;\n    if (pfIsWow64Process && (retval = pfIsWow64Process(hProcess, &wow64))) {\n      retval = wow64;\n    }\n  }\n  return (BOOL) (UINT) retval;\n#endif\n}\n\n// Tim Kosse's LogMessage\n#ifdef UNICODE\nstatic void LogMessage(const TCHAR *pStr, BOOL bOEM) {\n#else\nstatic void LogMessage(TCHAR *pStr, BOOL bOEM) {\n#endif\n  LVITEM item;\n  int nItemCount;\n  if (!g_hwndList) return;\n  //if (!*pStr) return;\n#ifndef UNICODE\n  if (bOEM == TRUE) OemToCharBuff(pStr, pStr, lstrlen(pStr));\n#endif\n  nItemCount=(int) SendMessage(g_hwndList, LVM_GETITEMCOUNT, 0, 0);\n  item.mask=LVIF_TEXT;\n  item.pszText=(TCHAR *)pStr;\n  item.cchTextMax=0;\n  item.iItem=nItemCount, item.iSubItem=0;\n  ListView_InsertItem(g_hwndList, &item);\n  ListView_EnsureVisible(g_hwndList, item.iItem, 0);\n}\n\n\nvoid ExecScript(int mode) {\n  TCHAR szRet[128];\n  TCHAR meDLLPath[MAX_PATH];\n  TCHAR *g_exec, *executor;\n  TCHAR *pExec;\n  int ignoreData = mode == MODE_IGNOREOUTPUT;\n  int logMode = mode == MODE_LINES, stackMode = mode == MODE_STACK;\n  unsigned int to, tabExpandLength = logMode ? TAB_REPLACE_CCH : 0, codepage;\n  BOOL bOEM, forceNarrowInput = FALSE;\n\n  *szRet = _T('\\0');\n\n  if (!IsWOW64()) {\n    TCHAR* p;\n    int nComSpecSize;\n\n    nComSpecSize = GetModuleFileName(g_hInstance, meDLLPath, MAX_PATH) + 2; // 2 chars for quotes\n    g_exec = (TCHAR *)GlobalAlloc(GPTR, sizeof(TCHAR) * (g_stringsize+nComSpecSize+2)); // 1 for space, 1 for null\n    p = meDLLPath + nComSpecSize - 2; // point p at null char of meDLLPath\n    *g_exec = _T('\"');\n    executor = g_exec + 1;\n\n    // Look for the last '\\' in path.\n    do\n    {\n      if (*p == _T('\\\\'))\n        break;\n      p = CharPrev(meDLLPath, p);\n    }\n    while (p > meDLLPath);\n    if (p == meDLLPath)\n    {\n      // bad path\n      pushstring(_T(\"error\"));\n      GlobalFree(g_exec);\n      return;\n    }\n\n    *p = 0;\n    GetTempFileName(meDLLPath, _T(\"ns\"), 0, executor);  // executor = new temp file name in module path.\n    *p = _T('\\\\');\n    if (CopyFile(meDLLPath, executor, FALSE))  // copy current DLL to temp file in module path.\n    {\n      HANDLE hFile, hMapping;\n      LPBYTE pMapView;\n      PIMAGE_NT_HEADERS pNTHeaders;\n      hFile = CreateFile(executor, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING,0, 0);\n      hMapping = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL);\n      pMapView = MapViewOfFile(hMapping, FILE_MAP_WRITE, 0, 0, 0);\n      if (pMapView)\n      {\n        pNTHeaders = (PIMAGE_NT_HEADERS)(pMapView + ((PIMAGE_DOS_HEADER)pMapView)->e_lfanew);\n        // Turning the copied DLL into a stripped down executable.\n        pNTHeaders->FileHeader.Characteristics = IMAGE_FILE_32BIT_MACHINE | IMAGE_FILE_LOCAL_SYMS_STRIPPED |\n          IMAGE_FILE_LINE_NUMS_STRIPPED | IMAGE_FILE_EXECUTABLE_IMAGE;\n        // Windows character-mode user interface (CUI) subsystem.\n        pNTHeaders->OptionalHeader.Subsystem = IMAGE_SUBSYSTEM_WINDOWS_CUI;\n        // g_hInst is assumed to be the very base of the DLL in memory.\n        // WinMain will have the address of the WinMain function in memory.\n        // Getting the difference gets you the relative location of the\n        // WinMain function.\n        pNTHeaders->OptionalHeader.AddressOfEntryPoint = (DWORD) ((DWORD_PTR)AsExeWinMain - (DWORD_PTR)g_hInstance);\n        UnmapViewOfFile(pMapView);\n      }\n      CloseHandle(hMapping);\n      CloseHandle(hFile);\n    }\n\n    lstrcat(g_exec, _T(\"\\\"\"));\n\n    // add space\n    pExec = g_exec + lstrlen(g_exec);\n    *pExec = _T(' ');\n    pExec++;\n  } else {\n    executor = NULL;\n    g_exec = (TCHAR *)GlobalAlloc(GPTR, sizeof(TCHAR) * (g_stringsize+1)); // 1 for NULL\n    pExec = g_exec;\n  }\n\n  to = 0; // default is no timeout\n  bOEM = FALSE; // default is no OEM->ANSI conversion\n\n  g_hwndList = NULL;\n\n  // g_hwndParent = the caller, usually NSIS installer.\n  if (g_hwndParent) // The window class name for dialog boxes is \"#32770\"\n    g_hwndList = FindWindowEx(FindWindowEx(g_hwndParent, NULL, _T(\"#32770\"), NULL), NULL, _T(\"SysListView32\"), NULL);\n\n  // g_exec is the complete command to run: It has the copy of this DLL turned\n  // into an executable right now.\n\nparams:\n  // Get the command I need to run from the NSIS stack.\n  popstring(pExec);\n  if (my_strstr(pExec, _T(\"/TIMEOUT=\")) == pExec) {\n    TCHAR *szTimeout = pExec + 9;\n    to = my_atoi(szTimeout);\n    *pExec = 0;\n    goto params;\n  }\n  if (!lstrcmpi(pExec, _T(\"/OEM\"))) {\n    bOEM = forceNarrowInput = TRUE;\n    *pExec = 0;\n    goto params;\n  }\n  if (!lstrcmpi(pExec, _T(\"/MBCS\"))) {\n    forceNarrowInput = TRUE;\n    *pExec = 0;\n    goto params;\n  }\n\n  if (!pExec[0])\n  {\n    pushstring(_T(\"error\"));\n    if (pExec-2 >= g_exec)\n      *(pExec-2) = _T('\\0'); // skip space and quote\n    if (executor) DeleteFile(executor);\n    GlobalFree(g_exec);\n    return;\n  }\n\n  // Got all the params off the stack.\n\n  {\n    STARTUPINFO si = {0};\n    si.cb = sizeof(si);\n    SECURITY_ATTRIBUTES sa = {0};\n    sa.nLength = sizeof(sa);\n    SECURITY_DESCRIPTOR sd = {0};\n    PROCESS_INFORMATION pi;\n    const BOOL isNT = sizeof(void*) > 4 || (GetVersion() < 0x80000000);\n    HANDLE newstdout = 0, read_stdout = 0;\n    HANDLE newstdin = 0, read_stdin = 0;\n    int utfSource = sizeof(TCHAR) > 1 && !forceNarrowInput ? -1 : FALSE, utfOutput = sizeof(TCHAR) > 1;\n    DWORD cbRead, dwLastOutput;\n    DWORD dwExit = 0, waitResult = WAIT_TIMEOUT;\n    static BYTE bufSrc[NSIS_MAX_STRLEN];\n    BYTE *pSrc;\n    SIZE_T cbSrcTot = sizeof(bufSrc), cbSrc = 0, cbSrcFree;\n    TCHAR *bufOutput = 0, *pNewAlloc, *pD;\n    SIZE_T cchAlloc, cbAlloc, cchFree;\n#ifndef _MSC_VER // Avoid GCC \"may be used uninitialized in this function\" warnings\n    pD = NULL;\n    cchAlloc = 0;\n#endif\n\n    pi.hProcess = pi.hThread = NULL;\n    codepage = bOEM ? CP_OEMCP : CP_ACP;\n\n    if (!ignoreData) {\n      cbAlloc = stackMode ? (g_stringsize * sizeof(TCHAR)) : sizeof(bufSrc) * 4, cchAlloc = cbAlloc / sizeof(TCHAR);\n      pD = bufOutput = GlobalAlloc(GPTR, cbAlloc + sizeof(TCHAR)); // Include \"hidden\" space for a \\0\n      if (!bufOutput) {\n        lstrcpy(szRet, _T(\"error\"));\n        goto done;\n      }\n      *bufOutput = _T('\\0');\n    }\n\n    sa.bInheritHandle = TRUE;\n    sa.lpSecurityDescriptor = NULL;\n    if (isNT) {\n      InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);\n      SetSecurityDescriptorDacl(&sd, TRUE, NULL, FALSE);\n      sa.lpSecurityDescriptor = &sd;\n    }\n\n    if (!CreatePipe(&read_stdout, &newstdout, &sa, 0)) {\n      lstrcpy(szRet, _T(\"error\"));\n      goto done;\n    }\n    if (!CreatePipe(&read_stdin, &newstdin, &sa, 0)) {\n      lstrcpy(szRet, _T(\"error\"));\n      goto done;\n    }\n\n    GetStartupInfo(&si); // Why?\n    si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;\n    si.wShowWindow = SW_HIDE;\n    si.hStdInput = newstdin;\n    si.hStdOutput = newstdout;\n    si.hStdError = newstdout;\n    if (!CreateProcess(NULL, g_exec, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi)) {\n      lstrcpy(szRet, _T(\"error\"));\n      goto done;\n    }\n\n    // Now I'm talking with an executable copy of myself.\n    dwLastOutput = GetTickCount();\n    for (;;) {\n      TCHAR bufCh[2];\nwaitForProcess:\n      waitResult = WaitForSingleObject(pi.hProcess, 0);\n      GetExitCodeProcess(pi.hProcess, &dwExit);\nreadMore:\n      PeekNamedPipe(read_stdout, 0, 0, 0, &cbRead, NULL);\n      if (!cbRead) {\n        if (waitResult == WAIT_OBJECT_0) {\n          break; // No data in the pipe and process ended, we are done\n        }\n        if (to && GetTickCount() > dwLastOutput+to) {\n          TerminateProcess(pi.hProcess, -1);\n          lstrcpy(szRet, _T(\"timeout\"));\n        }\n        else {\n          Sleep(LOOPTIMEOUT);\n        }\n        continue;\n      }\n\n      dwLastOutput = GetTickCount();\n      ReadFile(read_stdout, bufSrc + cbSrc, (DWORD) (cbSrcFree = cbSrcTot - cbSrc), &cbRead, NULL);\n      cbSrcFree -= cbRead, cbSrc = cbSrcTot - cbSrcFree;\n      pSrc = bufSrc;\n\n      if (utfSource < 0 && cbSrc) { // Simple UTF-16LE detection\n#ifdef UNICODE\n        utfSource = IsTextUnicode(pSrc, (UINT) (cbSrc & ~1), NULL) != FALSE;\n#else\n        utfSource = (cbSrc >= 3 && pSrc[0] && !pSrc[1]) || (cbSrc > 4 && pSrc[2] && !pSrc[3]); // Lame latin-only test\n        utfSource |= (cbSrc > 3 && pSrc[0] == 0xFF && pSrc[1] == 0xFE && (pSrc[2] | pSrc[3])); // Lame BOM test\n#endif\n      }\n\n      if (ignoreData) {\n        cbSrc = 0; // Overwrite the whole buffer every read\n        continue;\n      }\n\n      if (!cbRead) {\n        continue; // No new data, read more before trying to parse\n      }\n\nparseLines:\n      cchFree = cchAlloc - (pD - bufOutput);\n      for (;;) {\n        DWORD cbSrcChar = 1, cchDstChar, i;\n        *pD = _T('\\0'); // Terminate output buffer because we can unexpectedly run out of data\n        if (!cbSrc) {\n          goto readMore;\n        }\n\n        if (utfSource) { // UTF-16LE --> ?:\n          if (cbSrc < 2) {\n            goto readMore;\n          }\n          if (utfOutput) { // UTF-16LE --> UTF-16LE:\n            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.\n          }\n          else { // UTF-16LE --> DBCS\n            // 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.\n            utfOutput = FALSE; // For now we just treat it as DBCS\n            continue;\n          }\n        }\n        else { // DBCS --> ?:\n          if (utfOutput) { // DBCS --> UTF-16LE:\n            BOOL isMb = IsDBCSLeadByteEx(codepage, ((CHAR*)pSrc)[0]);\n            if (isMb && cbSrc < ++cbSrcChar) {\n              goto readMore;\n            }\n            cchDstChar = MultiByteToWideChar(codepage, 0, (CHAR*)pSrc, cbSrcChar, (WCHAR*) bufCh, 2);\n          }\n          else { // DBCS --> DBCS:\n            bufCh[0] = ((CHAR*)pSrc)[0], cchDstChar = 1; // Note: OEM codepage will be converted by LogMessage\n          }\n        }\n\n        if (bufCh[0] == _T('\\t') && tabExpandLength) { // Expand tab to spaces?\n          if (cchFree < tabExpandLength) {\n            goto resizeOutputBuffer;\n          }\n          lstrcpy(pD, TAB_REPLACE);\n          pD += tabExpandLength, cchFree -= tabExpandLength;\n        }\n        else if (bufCh[0] == _T('\\r') && logMode) {\n          // Eating it\n        }\n        else if (bufCh[0] == _T('\\n') && logMode) {\n          LogMessage(bufOutput, bOEM); // Output has already been \\0 terminated\n          *(pD = bufOutput) = _T('\\0'), cchFree = cchAlloc;\n        }\n        else {\n          if (cchFree < cchDstChar) {\n            SIZE_T cchOrgOffset;\nresizeOutputBuffer:\n            if (stackMode) {\n              ignoreData = TRUE; // Buffer was already maximum for the NSIS stack, we cannot handle more data\n              if (utfOutput)\n                TruncateStringUTF16LE((LPWSTR) bufOutput, pD - bufOutput, (LPCWSTR) bufCh, cchDstChar);\n              else\n                TruncateStringMB(codepage, (LPSTR) bufOutput, pD - bufOutput, bufCh[0]);\n              goto waitForProcess;\n            }\n            cchAlloc += 1024, cbAlloc = cchAlloc / sizeof(TCHAR);\n            pNewAlloc = GlobalReAlloc(bufOutput, cbAlloc + sizeof(TCHAR),GPTR|GMEM_MOVEABLE); // Include \"hidden\" space for a \\0\n            if (!pNewAlloc) {\n              lstrcpy(szRet, _T(\"error\"));\n              ignoreData = TRUE;\n              goto waitForProcess;\n            }\n            cchOrgOffset = pD - bufOutput;\n            *(pD = (bufOutput = pNewAlloc) + cchOrgOffset) = _T('\\0');\n            goto parseLines;\n          }\n          for (i = 0; i < cchDstChar; ++i) {\n            *pD++ = bufCh[i], --cchFree;\n          }\n        }\n        pSrc += cbSrcChar, cbSrc -= cbSrcChar;\n      }\n    }\n\ndone:\n    if (stackMode) pushstring(bufOutput);\n    if (logMode && *bufOutput) LogMessage(bufOutput,bOEM); // Write remaining output\n    if (dwExit == STATUS_ILLEGAL_INSTRUCTION)\n      lstrcpy(szRet, _T(\"error\"));\n    if (!szRet[0]) wsprintf(szRet,_T(\"%d\"),dwExit);\n    pushstring(szRet);\n    CloseHandle(pi.hThread);\n    CloseHandle(pi.hProcess);\n    CloseHandle(newstdout);\n    CloseHandle(read_stdout);\n    CloseHandle(newstdin);\n    CloseHandle(read_stdin);\n    if (pExec-2 >= g_exec)\n      *(pExec-2) = _T('\\0'); // skip space and quote\n    if (executor)\n      DeleteFile(executor);\n    GlobalFree(g_exec);\n    if (bufOutput)\n      GlobalFree(bufOutput);\n  }\n}\n\nstatic TCHAR *my_strstr(TCHAR *a, TCHAR *b)\n{\n  int l = lstrlen(b);\n  while (lstrlen(a) >= l)\n  {\n    TCHAR c = a[l];\n    a[l] = 0;\n    if (!lstrcmpi(a, b))\n    {\n      a[l] = c;\n      return a;\n    }\n    a[l] = c;\n    a = CharNext(a);\n  }\n  return NULL;\n}\n\nstatic unsigned int my_atoi(TCHAR *s) {\n  unsigned int v=0;\n  if (*s == _T('0') && (s[1] == _T('x') || s[1] == _T('X'))) {\n    s+=2;\n    for (;;) {\n      int c=*s++;\n      if (c >= _T('0') && c <= _T('9')) c-=_T('0');\n      else if (c >= _T('a') && c <= _T('f')) c-=_T('a')-10;\n      else if (c >= _T('A') && c <= _T('F')) c-=_T('A')-10;\n      else break;\n      v<<=4;\n      v+=c;\n    }\n  }\n  else if (*s == _T('0') && s[1] <= _T('7') && s[1] >= _T('0')) {\n    s++;\n    for (;;) {\n      int c=*s++;\n      if (c >= _T('0') && c <= _T('7')) c-=_T('0');\n      else break;\n      v<<=3;\n      v+=c;\n    }\n  }\n  else {\n    for (;;) {\n      int c=*s++ - _T('0');\n      if (c < 0 || c > 9) break;\n      v*=10;\n      v+=c;\n    }\n  }\n  return (int)v;\n}\n\nint WINAPI AsExeWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)\n{\n  DWORD               Ret;\n  STARTUPINFO         si   = {0};\n  PROCESS_INFORMATION pi   = {0};\n  TCHAR command_line[NSIS_MAX_STRLEN]; //BUGBUG\n  TCHAR seekchar=_T(' ');\n  TCHAR *cmdline;\n\n  si.cb = sizeof(si);\n  // Make child process use this app's standard files. Not needed because the handles\n  // we created when executing this process were inheritable.\n  //si.dwFlags    = STARTF_USESTDHANDLES;\n  //si.hStdInput  = GetStdHandle (STD_INPUT_HANDLE);\n  //si.hStdOutput = GetStdHandle (STD_OUTPUT_HANDLE);\n  //si.hStdError  = GetStdHandle (STD_ERROR_HANDLE);\n  lstrcpyn(command_line, GetCommandLine(), 1024);\n\n  cmdline = command_line;\n  if (*cmdline == _T('\\\"')) seekchar = *cmdline++;\n\n  while (*cmdline && *cmdline != seekchar) cmdline=CharNext(cmdline);\n  cmdline=CharNext(cmdline);\n  // skip any spaces before the arguments\n  while (*cmdline && *cmdline == _T(' ')) cmdline++;\n\n  Ret = CreateProcess (NULL, cmdline,\n    NULL, NULL,\n    TRUE, 0,\n    NULL, NULL,\n    &si, &pi\n    );\n\n  if (Ret)\n  {\n    WaitForSingleObject(pi.hProcess, INFINITE);\n    GetExitCodeProcess(pi.hProcess, &Ret);\n    CloseHandle (pi.hProcess);\n    CloseHandle (pi.hThread);\n    ExitProcess(Ret);\n  }\n  else\n  {\n    ExitProcess(STATUS_ILLEGAL_INSTRUCTION);\n  }\n\n  return 0; // dummy\n}\n"
  },
  {
    "path": "nsisplugin/IsActivated.c",
    "content": "#include <windows.h>\n#include <nsis/pluginapi.h>\n#include \"main.h\"\n#include \"VersionInfo.h\"\n#include \"Wow64.h\"\n#include \"licdll.h\"\n#include <slpublic.h>\n\ntypedef HRESULT (WINAPI *_SLOpen)(HSLC *);\ntypedef HRESULT (WINAPI *_SLGetLicensingStatusInformation)(HSLC, const SLID *, DWORD, DWORD, UINT *, SL_LICENSING_STATUS **);\ntypedef HRESULT (WINAPI *_SLClose)(HSLC);\n\nstatic _SLOpen $SLOpen;\nstatic _SLClose $SLClose;\nstatic _SLGetLicensingStatusInformation $SLGetLicensingStatusInformation;\n\nstatic BOOL g_loadedLicenseStatus = FALSE;\nstatic BOOL g_isActivated = TRUE;\n\nPLUGIN_METHOD(IsActivated) {\n\tPLUGIN_INIT();\n\n\t// Activation is irrelevant prior to XP\n\tif (g_loadedLicenseStatus || !AtLeastWinXP2002()) {\n\t\tpushint(g_isActivated);\n\t\treturn;\n\t}\n\n\tg_loadedLicenseStatus = TRUE;\n\n\t// Get the CPU architecture. We'll need this so that we activate the correct COM object on 64-bit versions\n\t// of Windows XP and Windows Server 2003.\n\tSYSTEM_INFO systemInfo = {0};\n\tOurGetNativeSystemInfo(&systemInfo);\n\n\tif (AtLeastWinVista()) {\n\t\t// Vista+: Ask the Software Licensing Service\n\t\tif (!$SLOpen) {\n\t\t\tHMODULE slc = LoadLibrary(L\"slc.dll\");\n\t\t\tif (slc) {\n\t\t\t\t$SLOpen = (_SLOpen)GetProcAddress(slc, \"SLOpen\");\n\t\t\t\t$SLClose = (_SLClose)GetProcAddress(slc, \"SLClose\");\n\t\t\t\t$SLGetLicensingStatusInformation = (_SLGetLicensingStatusInformation)GetProcAddress(slc, \"SLGetLicensingStatusInformation\");\n\t\t\t}\n\t\t}\n\n\t\tif (!$SLOpen || !$SLClose || !$SLGetLicensingStatusInformation) {\n\t\t\tTRACE(L\"Failed to load slc.dll\");\n\t\t\tpushint(1);\n\t\t\treturn;\n\t\t}\n\n\t\tHSLC slc = NULL;\n\t\tSL_LICENSING_STATUS *status = NULL;\n\t\tUINT count = 0;\n\t\tHRESULT hr = $SLOpen(&slc);\n\t\tif (!SUCCEEDED(hr)) {\n\t\t\tgoto end_slc;\n\t\t}\n\n\t\thr = $SLGetLicensingStatusInformation(slc, &WINDOWS_SLID, 0, 0, &count, &status);\n\t\tif (!SUCCEEDED(hr) || count == 0) {\n\t\t\tgoto end_slc;\n\t\t}\n\n\t\t// Iterate through all statuses until we find one in Licensed status.\n\t\tg_isActivated = FALSE;\n\t\tfor (UINT i = 0; i < count; i++) {\n\t\t\tif (status[i].eStatus == SL_LICENSING_STATUS_LICENSED) {\n\t\t\t\tg_isActivated = TRUE;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\nend_slc:\n\t\tif (status) {\n\t\t\tLocalFree(status);\n\t\t}\n\t\tif (slc) {\n\t\t\t$SLClose(slc);\n\t\t}\n\t} else {\n\t\t// XP: Use private API\n\t\tICOMLicenseAgent *agent;\n\t\tHRESULT hr = E_FAIL;\n\n\t\t// On XP and Server 2003 x64, we need to pass a different argument to CoCreateInstance.\n\t\tif (systemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) {\n\t\t\thr = CoCreateInstance(&CLSID_COMLicenseAgent, NULL, CLSCTX_INPROC_SERVER | CLSCTX_ACTIVATE_64_BIT_SERVER, &IID_ICOMLicenseAgent, (void **)&agent);\n\t\t} else {\n\t\t\thr = CoCreateInstance(&CLSID_COMLicenseAgent, NULL, CLSCTX_INPROC_SERVER, &IID_ICOMLicenseAgent, (void **)&agent);\n\t\t}\n\n\t\tif (!SUCCEEDED(hr)) {\n\t\t\tTRACE(L\"COMLicenseAgent load failed: %x\", hr);\n\t\t\tgoto end_xp;\n\t\t}\n\n\t\tULONG result = 0;\n\t\thr = ICOMLicenseAgent_Initialize(agent, 0xC475, 3, NULL, &result);\n\t\tif (!SUCCEEDED(hr) || result != 0) {\n\t\t\tTRACE(L\"COMLicenseAgent init failed: %x\", hr);\n\t\t\tgoto end_xp;\n\t\t}\n\n\t\tULONG wpaLeft = 0, evalLeft = 0;\n\t\thr = ICOMLicenseAgent_GetExpirationInfo(agent, &wpaLeft, &evalLeft);\n\t\tif (!SUCCEEDED(hr)) {\n\t\t\tTRACE(L\"COMLicenseAgent GetExpirationInfo failed: %x\", hr);\n\t\t\tgoto end_xp;\n\t\t}\n\n\t\tg_isActivated = wpaLeft == MAXLONG;\n\nend_xp:\n\t\tif (agent) {\n\t\t\tICOMLicenseAgent_Release(agent);\n\t\t}\n\t}\n\n\tpushint(g_isActivated);\n}\n"
  },
  {
    "path": "nsisplugin/IsAdmin.c",
    "content": "#include <windows.h>\n#include <nsis/pluginapi.h>\n#include \"User.h\"\n\nPLUGIN_METHOD(IsAdmin) {\n\tPLUGIN_INIT();\n\n\tpushint(IsUserAdmin());\n}\n"
  },
  {
    "path": "nsisplugin/IsMultiCPU.c",
    "content": "#include <windows.h>\n#include <nsis/pluginapi.h>\n#include \"User.h\"\n\nPLUGIN_METHOD(IsMultiCPU) {\n\tPLUGIN_INIT();\n\n\tSYSTEM_INFO systemInfo = {0};\n\tGetSystemInfo(&systemInfo);\n\tpushint(systemInfo.dwNumberOfProcessors > 1 ? 1 : 0);\n}\n"
  },
  {
    "path": "nsisplugin/IsServerCore.c",
    "content": "#include <windows.h>\n#include <nsis/pluginapi.h>\n#include \"ProductInfo.h\"\n#include \"Registry.h\"\n#include \"VersionInfo.h\"\n\nPLUGIN_METHOD(IsServerCore) {\n\tPLUGIN_INIT();\n\n\t// Server Core introduced with Server 2008, skip on earlier versions.\n\tif (!AtLeastWinVista()) {\n\t\tpushint(0);\n\t\treturn;\n\t}\n\n\t// Server 2008 and 2008 R2 use GetProductInfo, 2012 and newer use the registry.\n\tif (IsWinVista() || IsWin7()) {\n\t\tDWORD productType = 0;\n\t\tif (!GetVistaProductInfo(6, 0, 0, 0, &productType)) {\n\t\t\tpushint(0);\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (productType) {\n\t\tcase PRODUCT_DATACENTER_SERVER_CORE:\n\t\tcase PRODUCT_STANDARD_SERVER_CORE:\n\t\tcase PRODUCT_ENTERPRISE_SERVER_CORE:\n\t\tcase PRODUCT_WEB_SERVER_CORE:\n\t\tcase PRODUCT_DATACENTER_SERVER_CORE_V:\n\t\tcase PRODUCT_STANDARD_SERVER_CORE_V:\n\t\tcase PRODUCT_ENTERPRISE_SERVER_CORE_V:\n\t\tcase PRODUCT_HYPERV:\n\t\tcase PRODUCT_STORAGE_EXPRESS_SERVER_CORE:\n\t\tcase PRODUCT_STORAGE_STANDARD_SERVER_CORE:\n\t\tcase PRODUCT_STORAGE_WORKGROUP_SERVER_CORE:\n\t\tcase PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE:\n\t\tcase PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE:\n\t\tcase PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE:\n\t\tcase PRODUCT_CLUSTER_SERVER_V:\n\t\t\tpushint(1);\n\t\t\treturn;\n\t\t}\n\t} else {\n\t\t// Only need to test for full GUI, MinShell on 2012/2012 R2 does not have IE and is considered regular Core.\n\t\tDWORD serverCore = 0;\n\t\tDWORD serverGuiShell = 0;\n\t\tGetRegistryDword(HKEY_LOCAL_MACHINE, REGPATH_WINNT_SERVERLEVELS, L\"ServerCore\", KEY_WOW64_64KEY, &serverCore);\n\t\tGetRegistryDword(HKEY_LOCAL_MACHINE, REGPATH_WINNT_SERVERLEVELS, L\"Server-Gui-Shell\", KEY_WOW64_64KEY, &serverGuiShell);\n\t\tpushint((serverCore && !serverGuiShell) ? 1 : 0);\n\t\treturn;\n\t}\n\n\tpushint(0);\n}\n"
  },
  {
    "path": "nsisplugin/Makefile",
    "content": "FILES    = \\\n\t$(wildcard *.c) \\\n\t../shared/HResult.c \\\n\t../shared/LegacyUpdate.c \\\n\t../shared/LoadImage.c \\\n\t../shared/Log.c \\\n\t../shared/ProductInfo.c \\\n\t../shared/Registry.c \\\n\t../shared/Wow64.c\nRCFILES  = resource.rc\n\nBIN      = obj/LegacyUpdateNSIS.dll\n\nall:: internal-all\n\ninclude ../build/shared.mk\n\nCFLAGS  += \\\n\t-DLOG_NAME=\"\\\"Setup\\\"\" \\\n\t-mdll\n\nLDFLAGS += \\\n\t-Wl,-e_DllMain \\\n\t-lpsapi \\\n\t-lkernel32 \\\n\t-luser32 \\\n\t-lole32 \\\n\t-loleaut32 \\\n\t-ladvapi32 \\\n\t-lgdi32 \\\n\t-lmsimg32 \\\n\t-lcrypt32\n\ninternal-all::\n\tcp $(BIN) ../setup/x86-unicode/\n\ntest:\n\t+$(MAKE) DEBUG=$(DEBUG)\n\tcd ../setup && makensis test.nsi\n\tcd ../setup && explorer.exe test.exe\n\n.PHONY: all test\n"
  },
  {
    "path": "nsisplugin/MessageForHresult.c",
    "content": "#include <windows.h>\n#include <nsis/pluginapi.h>\n#include \"../shared/HResult.h\"\n\nPLUGIN_METHOD(MessageForHresult) {\n\tPLUGIN_INIT();\n\n\tHRESULT hr = popint();\n\tif (hr == 0) {\n\t\tpushstring(L\"Unknown error\");\n\t\treturn;\n\t}\n\n\tLPWSTR message = GetMessageForHresult(hr);\n\tpushstring(message);\n\tLocalFree(message);\n}\n"
  },
  {
    "path": "nsisplugin/NeedsRootsUpdate.c",
    "content": "#include <windows.h>\n#include <nsis/pluginapi.h>\n#include \"Registry.h\"\n#include \"VersionInfo.h\"\n\n#define ROOTS_UPDATE_THRESHOLD (30LL * 24LL * 60LL * 60LL * 10000000LL)\n\nPLUGIN_METHOD(NeedsRootsUpdate) {\n\tPLUGIN_INIT();\n\n\tFILETIME currentTime = {0};\n\tGetSystemTimeAsFileTime(&currentTime);\n\n\tHKEY key = NULL;\n\tHRESULT hr = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGPATH_LEGACYUPDATE_SETUP, 0, GetRegistryWow64Flag(KEY_READ | KEY_WOW64_64KEY), &key));\n\tif (!SUCCEEDED(hr)) {\n\t\tpushint(1);\n\t\treturn;\n\t}\n\n\tFILETIME lastUpdateTime = {0};\n\tDWORD type = REG_QWORD;\n\tDWORD size = sizeof(FILETIME);\n\thr = HRESULT_FROM_WIN32(RegQueryValueEx(key, L\"LastRootsUpdateTime\", NULL, &type, (LPBYTE)&lastUpdateTime, &size));\n\tRegCloseKey(key);\n\n\tif (!SUCCEEDED(hr) || type != REG_QWORD) {\n\t\tpushint(1);\n\t\treturn;\n\t}\n\n\tULONGLONG currentTime64 = 0, lastUpdateTime64 = 0;\n\tmemcpy(&currentTime64, &currentTime, sizeof(currentTime64));\n\tmemcpy(&lastUpdateTime64, &lastUpdateTime, sizeof(lastUpdateTime64));\n\n\tULONGLONG difference = currentTime64 - lastUpdateTime64;\n\tpushint(difference > ROOTS_UPDATE_THRESHOLD ? 1 : 0);\n}\n\nPLUGIN_METHOD(SetRootsUpdateTime) {\n\tPLUGIN_INIT();\n\n\tFILETIME currentTime = {0};\n\tGetSystemTimeAsFileTime(&currentTime);\n\n\tHKEY key = NULL;\n\tHRESULT hr = HRESULT_FROM_WIN32(RegCreateKeyEx(HKEY_LOCAL_MACHINE, REGPATH_LEGACYUPDATE_SETUP, 0, NULL, 0, GetRegistryWow64Flag(KEY_WRITE | KEY_WOW64_64KEY), NULL, &key, NULL));\n\tif (SUCCEEDED(hr)) {\n\t\tRegSetValueEx(key, L\"LastRootsUpdateTime\", 0, REG_QWORD, (LPBYTE)&currentTime, sizeof(FILETIME));\n\t\tRegCloseKey(key);\n\t}\n}\n"
  },
  {
    "path": "nsisplugin/RebootPage.c",
    "content": "#include <windows.h>\n#include <commctrl.h>\n#include <nsis/pluginapi.h>\n#include \"main.h\"\n#include \"resource.h\"\n#include \"VersionInfo.h\"\n\n#define COUNTDOWN_ID     1234\n#define COUNTDOWN_LENGTH 180\n\nstatic HWND g_rebootHwnd;\nstatic WPARAM g_rebootParam = 0;\n\nstatic WNDPROC g_dialogOrigWndProc;\n\nstatic DWORD g_timerStart = 0;\nstatic DWORD g_timerInterval = 0;\nstatic DWORD g_timerMultiplier = 0;\nstatic UINT_PTR g_timer = 0;\nstatic WCHAR g_timerPrefix[NSIS_MAX_STRLEN] = L\"\";\n\nstatic INT_PTR CALLBACK RebootDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {\n\tswitch (uMsg) {\n\tcase WM_TIMER:\n\t\tif (wParam == COUNTDOWN_ID) {\n\t\t\tDWORD elapsed = GetTickCount() - g_timerStart;\n\t\t\tDWORD elapsedSecs = elapsed / 1000;\n\t\t\tDWORD progress = min((elapsed * g_timerMultiplier) / 1000, COUNTDOWN_LENGTH * g_timerMultiplier);\n\t\t\tSendDlgItemMessage(hwnd, IDC_PROGRESS, PBM_SETPOS, progress, 0);\n\n\t\t\tDWORD remaining = max(COUNTDOWN_LENGTH - elapsedSecs, 0);\n\t\t\tWCHAR timerDisplay[NSIS_MAX_STRLEN];\n\t\t\twsprintf(timerDisplay, L\"%s%02d:%02d\", g_timerPrefix, remaining / 60, remaining % 60);\n\t\t\tSetDlgItemText(hwnd, IDC_TEXT1, timerDisplay);\n\n\t\t\tif (elapsedSecs >= COUNTDOWN_LENGTH) {\n\t\t\t\tKillTimer(hwnd, COUNTDOWN_ID);\n\t\t\t\tg_timer = 0;\n\t\t\t\tPostMessage(hwnd, WM_NOTIFY_OUTER_NEXT, 0, 0);\n\t\t\t}\n\t\t}\n\t\treturn TRUE;\n\n\tcase WM_CTLCOLORSTATIC:\n\tcase WM_CTLCOLOREDIT:\n\tcase WM_CTLCOLORDLG:\n\tcase WM_CTLCOLORBTN:\n\tcase WM_CTLCOLORLISTBOX:\n\t\treturn SendMessage(g_hwndParent, uMsg, wParam, lParam);\n\t}\n\n\treturn FALSE;\n}\n\nstatic LRESULT CALLBACK RebootMainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {\n\tLRESULT result = CallWindowProc(g_dialogOrigWndProc, hwnd, uMsg, wParam, lParam);\n\n\tswitch (uMsg) {\n\tcase WM_NOTIFY_OUTER_NEXT:\n\t\tg_rebootParam = wParam;\n\n\t\tif (g_timer) {\n\t\t\tKillTimer(g_rebootHwnd, COUNTDOWN_ID);\n\t\t\tg_timer = 0;\n\t\t}\n\n\t\tDestroyWindow(g_rebootHwnd);\n\t\tg_rebootHwnd = NULL;\n\t\tbreak;\n\t}\n\n\treturn result;\n}\n\nPLUGIN_METHOD(RebootPageCreate) {\n\tPLUGIN_INIT();\n\n\tWCHAR introText[NSIS_MAX_STRLEN], nextText[NSIS_MAX_STRLEN], cancelText[NSIS_MAX_STRLEN];\n\tpopstringn(introText, sizeof(introText) / sizeof(WCHAR));\n\tpopstringn(g_timerPrefix, sizeof(g_timerPrefix) / sizeof(WCHAR));\n\tpopstringn(nextText, sizeof(nextText) / sizeof(WCHAR));\n\tpopstringn(cancelText, sizeof(cancelText) / sizeof(WCHAR));\n\n\t// Set up child dialog\n\tRECT childRect;\n\tHWND childHwnd = GetDlgItem(g_hwndParent, IDC_CHILDRECT);\n\tGetWindowRect(childHwnd, &childRect);\n\tMapWindowPoints(NULL, g_hwndParent, (LPPOINT)&childRect, 2);\n\n\tg_rebootHwnd = CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_REBOOT), g_hwndParent, RebootDialogProc);\n\tif (g_rebootHwnd == NULL) {\n\t\treturn;\n\t}\n\n\tSetWindowPos(g_rebootHwnd, 0,\n\t\tchildRect.left, childRect.top,\n\t\tchildRect.right - childRect.left,\n\t\tchildRect.bottom - childRect.top,\n\t\tSWP_NOZORDER | SWP_NOACTIVATE);\n\n\t// Icon\n\tHICON hIcon = LoadImage(NULL, MAKEINTRESOURCE(IDI_WARNING), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR | LR_SHARED | LR_DEFAULTSIZE);\n\tif (hIcon) {\n\t\tSendDlgItemMessage(g_rebootHwnd, IDI_ICON2, STM_SETICON, (WPARAM)hIcon, 0);\n\t}\n\n\t// Intro text\n\tSetDlgItemText(g_rebootHwnd, IDC_INTROTEXT, introText);\n\n\t// Smoother animation for Aero progress bar\n\tg_timerMultiplier = AtLeastWinVista() ? 10 : 1;\n\n\t// Progress bar/timer\n\tSendDlgItemMessage(g_rebootHwnd, IDC_PROGRESS, PBM_SETRANGE, 0, MAKELPARAM(0, COUNTDOWN_LENGTH * g_timerMultiplier));\n\tSendDlgItemMessage(g_rebootHwnd, IDC_PROGRESS, PBM_SETPOS, 0, 0);\n\tg_timerStart = GetTickCount();\n\tg_timer = SetTimer(g_rebootHwnd, COUNTDOWN_ID, 1000 / g_timerMultiplier, NULL);\n\n\t// Force initial timer callback to fire now\n\tSendMessage(g_rebootHwnd, WM_TIMER, COUNTDOWN_ID, 0);\n\n\t// Show window\n\tg_dialogOrigWndProc = (WNDPROC)SetWindowLongPtr(g_hwndParent, GWLP_WNDPROC, (LONG_PTR)RebootMainWndProc);\n\tSendMessage(g_hwndParent, WM_NOTIFY_CUSTOM_READY, (WPARAM)g_rebootHwnd, 0);\n\tShowWindow(g_rebootHwnd, SW_SHOWNA);\n\n\t// Set Next button to Reboot\n\tHWND nextButton = GetDlgItem(g_hwndParent, IDOK);\n\tif (nextButton) {\n\t\tSetWindowText(nextButton, nextText);\n\t}\n\n\t// Set Cancel button to Later\n\tHWND cancelButton = GetDlgItem(g_hwndParent, IDCANCEL);\n\tif (cancelButton) {\n\t\tSetWindowText(cancelButton, cancelText);\n\t\tEnableWindow(cancelButton, TRUE);\n\t}\n\n\t// Bring attention back if the user switched away\n\tSetForegroundWindow(g_hwndParent);\n\tBringWindowToTop(g_hwndParent);\n\tSetFocus(nextButton);\n\tMessageBeep(AtLeastWinVista() ? MB_ICONWARNING : MB_ICONINFORMATION);\n\n\t// Flash taskbar button\n\tFLASHWINFO fInfo = {0};\n\tfInfo.cbSize = sizeof(fInfo);\n\tfInfo.hwnd = g_rebootHwnd;\n\tfInfo.dwFlags = FLASHW_ALL | FLASHW_TIMER;\n\tfInfo.uCount = COUNTDOWN_LENGTH;\n\tfInfo.dwTimeout = 0;\n\tFlashWindowEx(&fInfo);\n}\n\nPLUGIN_METHOD(RebootPageShow) {\n\twhile (g_rebootHwnd) {\n\t\tMSG msg;\n\t\tGetMessage(&msg, NULL, 0, 0);\n\t\tif (!IsDialogMessage(g_rebootHwnd, &msg) && !IsDialogMessage(g_hwndParent, &msg)) {\n\t\t\tTranslateMessage(&msg);\n\t\t\tDispatchMessage(&msg);\n\t\t}\n\n\t\t// Break out if timeout reached\n\t\tif (msg.message == WM_NOTIFY_OUTER_NEXT) {\n\t\t\tg_rebootParam = 1;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tpushint(g_rebootParam);\n\n\t// Cleanup\n\tif (g_timer) {\n\t\tKillTimer(g_rebootHwnd, COUNTDOWN_ID);\n\t\tg_timer = 0;\n\t}\n\tSetWindowLongPtr(g_hwndParent, GWLP_WNDPROC, (LONG_PTR)g_dialogOrigWndProc);\n\tg_dialogOrigWndProc = NULL;\n}\n"
  },
  {
    "path": "nsisplugin/TaskbarProgress.c",
    "content": "// Based on https://nsis.sourceforge.io/TaskbarProgress_plug-in - zlib licensed\n// Cleaned up and refactored into C by Legacy Update\n#undef _WIN32_WINNT\n#define _WIN32_WINNT _WIN32_WINNT_WIN7\n#include <windows.h>\n#include <nsis/pluginapi.h>\n#include <commctrl.h>\n#include <objbase.h>\n#include <shobjidl.h>\n#include \"main.h\"\n#include \"VersionInfo.h\"\n\nstatic extra_parameters *g_extra;\nstatic ITaskbarList3 *g_taskbarList;\nstatic UINT g_totalRange;\nstatic WNDPROC g_progressOrigWndProc;\nstatic WNDPROC g_dialogOrigWndProc;\n\nLRESULT CALLBACK ProgressBarWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {\n\tif (!g_progressOrigWndProc) {\n\t\treturn 0;\n\t}\n\n\tswitch (uMsg) {\n\tcase PBM_SETRANGE:\n\t\tg_totalRange = LOWORD(lParam) + HIWORD(lParam);\n\t\tbreak;\n\n\tcase PBM_SETRANGE32:\n\t\tg_totalRange = wParam + lParam;\n\t\tbreak;\n\n\tcase PBM_SETPOS:\n\t\tif (g_taskbarList) {\n\t\t\tITaskbarList3_SetProgressValue(g_taskbarList, g_hwndParent, wParam, g_totalRange);\n\t\t}\n\t\tbreak;\n\n\tcase WM_DESTROY:\n\t\tSetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)g_progressOrigWndProc);\n\n\t\tif (g_taskbarList) {\n\t\t\tITaskbarList3_SetProgressState(g_taskbarList, g_hwndParent, TBPF_NOPROGRESS);\n\t\t\tITaskbarList3_Release(g_taskbarList);\n\t\t\tg_taskbarList = NULL;\n\t\t}\n\n\t\tg_progressOrigWndProc = NULL;\n\t\tbreak;\n\t}\n\n\treturn CallWindowProc(g_progressOrigWndProc, hwnd, uMsg, wParam, lParam);\n}\n\nstatic LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {\n\tif (!g_dialogOrigWndProc) {\n\t\treturn 0;\n\t}\n\n\tswitch (uMsg) {\n\tcase WM_NOTIFY_OUTER_NEXT:\n\t\tif (g_extra->exec_flags->abort) {\n\t\t\t// Set the progress bar to error state (red)\n\t\t\tHWND innerWindow = FindWindowEx(hwnd, NULL, L\"#32770\", NULL);\n\t\t\tHWND progressBar = FindWindowEx(innerWindow, NULL, L\"msctls_progress32\", NULL);\n\t\t\tif (progressBar) {\n\t\t\t\tSendMessage(progressBar, PBM_SETSTATE, PBST_ERROR, 0);\n\t\t\t}\n\n\t\t\tif (g_taskbarList) {\n\t\t\t\tITaskbarList3_SetProgressState(g_taskbarList, g_hwndParent, TBPF_ERROR);\n\t\t\t}\n\t\t}\n\t\tbreak;\n\n\tcase WM_DESTROY:\n\t\tSetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)g_dialogOrigWndProc);\n\t\tg_dialogOrigWndProc = NULL;\n\t\tbreak;\n\t}\n\n\treturn CallWindowProc(g_dialogOrigWndProc, hwnd, uMsg, wParam, lParam);\n}\n\nstatic UINT_PTR NSISPluginCallback(enum NSPIM event) {\n\t// Does nothing, but keeping a callback registered prevents NSIS from unloading the plugin\n\treturn 0;\n}\n\nPLUGIN_METHOD(InitTaskbarProgress) {\n\tPLUGIN_INIT();\n\n\tif (!AtLeastWin7()) {\n\t\treturn;\n\t}\n\n\tg_extra = extra;\n\textra->RegisterPluginCallback(g_hInstance, NSISPluginCallback);\n\n\tif (g_dialogOrigWndProc) {\n\t\t// Already initialised\n\t\treturn;\n\t}\n\n\tHWND innerWindow = FindWindowEx(g_hwndParent, NULL, L\"#32770\", NULL);\n\tHWND progressBar = FindWindowEx(innerWindow, NULL, L\"msctls_progress32\", NULL);\n\tPBRANGE range = {0};\n\tHRESULT hr = E_FAIL;\n\n\tif (!progressBar) {\n\t\tgoto end;\n\t}\n\n\thr = CoCreateInstance(&CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, &IID_ITaskbarList3, (void **)&g_taskbarList);\n\tCHECK_HR_OR_GOTO_END(L\"CoCreateInstance\");\n\n\thr = ITaskbarList3_HrInit(g_taskbarList);\n\tif (hr == E_NOTIMPL) {\n\t\t// Expected when on the SYSTEM desktop\n\t\tgoto end;\n\t}\n\tCHECK_HR_OR_GOTO_END(L\"HrInit\");\n\n\t// Get the initial progress bar range\n\tSendMessage(progressBar, PBM_GETRANGE, 0, (LPARAM)&range);\n\tg_totalRange = range.iLow + range.iHigh;\n\n\t// Add our own window procedure so we can respond to progress bar updates\n\tg_progressOrigWndProc = (WNDPROC)SetWindowLongPtr(progressBar, GWLP_WNDPROC, (LONG_PTR)ProgressBarWndProc);\n\tg_dialogOrigWndProc = (WNDPROC)SetWindowLongPtr(g_hwndParent, GWLP_WNDPROC, (LONG_PTR)MainWndProc);\n\tif (!g_progressOrigWndProc || !g_dialogOrigWndProc) {\n\t\tgoto end;\n\t}\n\treturn;\n\nend:\n\tif (g_taskbarList) {\n\t\tITaskbarList3_Release(g_taskbarList);\n\t\tg_taskbarList = NULL;\n\t}\n\n\tg_progressOrigWndProc = NULL;\n\tg_dialogOrigWndProc = NULL;\n}\n"
  },
  {
    "path": "nsisplugin/UpdateRoots.c",
    "content": "#include <windows.h>\n#include <nsis/pluginapi.h>\n#include <wincrypt.h>\n#include \"HResult.h\"\n\nPLUGIN_METHOD(UpdateRoots) {\n\tPLUGIN_INIT();\n\n\tHRESULT hr = E_FAIL;\n\tWCHAR stateStr[NSIS_MAX_STRLEN], store[NSIS_MAX_STRLEN], path[NSIS_MAX_STRLEN];\n\tpopstringn(stateStr, sizeof(stateStr) / sizeof(WCHAR));\n\tpopstringn(store, sizeof(store) / sizeof(WCHAR));\n\tpopstringn(path, sizeof(path) / sizeof(WCHAR));\n\n\tif (lstrlen(stateStr) == 0 || lstrlen(store) == 0 || lstrlen(path) == 0) {\n\t\tpushint(E_INVALIDARG);\n\t\treturn;\n\t}\n\n\tBOOL add = FALSE;\n\tif (lstrcmpi(stateStr, L\"/update\") == 0) {\n\t\tadd = TRUE;\n\t} else if (lstrcmpi(stateStr, L\"/delete\") == 0) {\n\t\tadd = FALSE;\n\t} else {\n\t\tpushint(E_INVALIDARG);\n\t\treturn;\n\t}\n\n\tHCERTSTORE srcStore = CertOpenStore(CERT_STORE_PROV_FILENAME_W, 0, 0, CERT_STORE_READONLY_FLAG, path);\n\tHCERTSTORE dstStore = NULL;\n\tif (!srcStore) {\n\t\tTRACE(L\"CertOpenStore for %ls failed: %08x\", path, hr);\n\t\thr = HRESULT_FROM_WIN32(GetLastError());\n\t\tgoto end;\n\t}\n\n\tdstStore = CertOpenStore(CERT_STORE_PROV_SYSTEM_REGISTRY_W, 0, 0, CERT_SYSTEM_STORE_LOCAL_MACHINE, store);\n\tif (!dstStore) {\n\t\thr = HRESULT_FROM_WIN32(GetLastError());\n\t\tTRACE(L\"CertOpenStore for %ls failed: %08x\", store, hr);\n\t\tgoto end;\n\t}\n\n\tPCCERT_CONTEXT cert = NULL;\n\twhile ((cert = CertEnumCertificatesInStore(srcStore, cert)) != NULL) {\n\t\tBOOL result = add\n\t\t\t? CertAddCertificateContextToStore(dstStore, cert, CERT_STORE_ADD_REPLACE_EXISTING, NULL)\n\t\t\t: CertDeleteCertificateFromStore(CertDuplicateCertificateContext(cert));\n\t\tif (!result) {\n\t\t\tTRACE(L\"cert %ls in %ls failed: %d\\n\", add ? L\"add\" : L\"delete\", store, GetLastError());\n\t\t\thr = HRESULT_FROM_WIN32(GetLastError());\n\t\t\tgoto end;\n\t\t}\n\t}\n\n\thr = S_OK;\n\nend:\n\tif (srcStore) {\n\t\tCertCloseStore(srcStore, 0);\n\t}\n\tif (dstStore) {\n\t\tCertCloseStore(dstStore, 0);\n\t}\n\n\tpushint(hr);\n}\n"
  },
  {
    "path": "nsisplugin/VerifyFileHash.c",
    "content": "#include <windows.h>\n#include <nsis/pluginapi.h>\n#include \"sha256.h\"\n\nstatic BOOL hexToBinary(const char *hex, uint8_t *binary, int binaryLength) {\n\tif (lstrlenA(hex) != binaryLength * 2) {\n\t\treturn FALSE;\n\t}\n\n\tfor (int i = 0; i < binaryLength; i++) {\n\t\tchar high = hex[i * 2];\n\t\tchar low = hex[i * 2 + 1];\n\n\t\tif (high >= '0' && high <= '9') {\n\t\t\thigh -= '0';\n\t\t} else if (high >= 'a' && high <= 'f') {\n\t\t\thigh -= 'a' - 10;\n\t\t} else {\n\t\t\t// Invalid character\n\t\t\treturn FALSE;\n\t\t}\n\n\t\tif (low >= '0' && low <= '9') {\n\t\t\tlow -= '0';\n\t\t} else if (low >= 'a' && low <= 'f') {\n\t\t\tlow -= 'a' - 10;\n\t\t} else {\n\t\t\t// Invalid character\n\t\t\treturn FALSE;\n\t\t}\n\n\t\tbinary[i] = (uint8_t)((high << 4) | low);\n\t}\n\n\treturn TRUE;\n}\n\nstatic BOOL calculateFileSha256(const LPWSTR path, uint8_t hash[SIZE_OF_SHA_256_HASH]) {\n\tHANDLE file = CreateFile(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);\n\tif (file == INVALID_HANDLE_VALUE) {\n\t\treturn FALSE;\n\t}\n\n\tstruct Sha_256 sha256;\n\tsha_256_init(&sha256, hash);\n\n\tuint8_t buffer[8192];\n\tDWORD bytesRead = 0;\n\twhile (ReadFile(file, buffer, sizeof(buffer), &bytesRead, NULL) && bytesRead > 0) {\n\t\tsha_256_write(&sha256, buffer, bytesRead);\n\t}\n\n\tsha_256_close(&sha256);\n\tCloseHandle(file);\n\treturn TRUE;\n}\n\nPLUGIN_METHOD(VerifyFileHash) {\n\tPLUGIN_INIT();\n\n\tWCHAR filename[MAX_PATH], expectedHashHex[256];\n\tpopstringn(filename, sizeof(filename) / sizeof(WCHAR));\n\tpopstringn(expectedHashHex, sizeof(expectedHashHex) / sizeof(WCHAR));\n\n\tchar expectedHashHexA[256];\n\tWideCharToMultiByte(CP_ACP, 0, expectedHashHex, -1, expectedHashHexA, sizeof(expectedHashHexA), NULL, NULL);\n\n\tuint8_t expectedHash[SIZE_OF_SHA_256_HASH], calculatedHash[SIZE_OF_SHA_256_HASH];\n\n\tif (!hexToBinary(expectedHashHexA, expectedHash, SIZE_OF_SHA_256_HASH)) {\n\t\tpushint(-1);\n\t\treturn;\n\t}\n\n\tif (!calculateFileSha256(filename, calculatedHash)) {\n\t\tpushint(-1);\n\t\treturn;\n\t}\n\n\tWCHAR calculatedHashHex[SIZE_OF_SHA_256_HASH * 2 + 1];\n\tfor (int i = 0; i < SIZE_OF_SHA_256_HASH; i++) {\n\t\twsprintf(&calculatedHashHex[i * 2], L\"%02x\", calculatedHash[i]);\n\t}\n\tpushstring(calculatedHashHex);\n\n\tfor (int i = 0; i < SIZE_OF_SHA_256_HASH; i++) {\n\t\tif (expectedHash[i] != calculatedHash[i]) {\n\t\t\tpushint(0);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tpushint(1);\n}\n"
  },
  {
    "path": "nsisplugin/WriteLog.c",
    "content": "#include \"stdafx.h\"\n#include <nsis/pluginapi.h>\n#include <commctrl.h>\n#include \"Log.h\"\n\nstatic HWND g_hwndLogList = 0;\nstatic WNDPROC g_pfnListViewProc = NULL;\n\nstatic LRESULT CALLBACK LogListViewProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {\n\tif (msg == LVM_INSERTITEM) {\n\t\tLVITEM *item = (LVITEM *)lParam;\n\t\tif (item && (item->mask & LVIF_TEXT) && item->pszText) {\n\t\t\tLogInternal(item->pszText);\n\t\t}\n\t}\n\n\treturn CallWindowProc(g_pfnListViewProc, hwnd, msg, wParam, lParam);\n}\n\nPLUGIN_METHOD(InitLog) {\n\tPLUGIN_INIT();\n\tOpenLog();\n\n\t// Hook progress log to send items to the log file\n\tif (!g_hwndLogList && g_hwndParent) {\n\t\tHWND innerWindow = FindWindowEx(g_hwndParent, NULL, L\"#32770\", NULL);\n\t\tHWND listView = FindWindowEx(innerWindow, NULL, L\"SysListView32\", NULL);\n\n\t\tif (listView) {\n\t\t\tg_hwndLogList = listView;\n\t\t\tg_pfnListViewProc = (WNDPROC)SetWindowLong(g_hwndLogList, GWL_WNDPROC, (LONG_PTR)LogListViewProc);\n\t\t}\n\t}\n}\n\nPLUGIN_METHOD(WriteLog) {\n\tPLUGIN_INIT();\n\n\tWCHAR text[NSIS_MAX_STRLEN];\n\tpopstring(text);\n\tLogInternal(text);\n}\n"
  },
  {
    "path": "nsisplugin/main.c",
    "content": "#include <windows.h>\n#include <nsis/pluginapi.h>\n#include \"Startup.h\"\n#include \"Log.h\"\n\nHINSTANCE g_hInstance;\nHWND g_hwndParent;\n\nEXTERN_C __declspec(dllexport)\nBOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) {\n\tswitch (dwReason) {\n\tcase DLL_PROCESS_ATTACH:\n\t\tg_hInstance = hInstance;\n\t\tStartup();\n\t\tOpenLog();\n\t\tbreak;\n\n\tcase DLL_PROCESS_DETACH:\n\t\tg_hInstance = NULL;\n\t\tCloseLog();\n\t\tbreak;\n\t}\n\n\treturn TRUE;\n}\n\n#include <nsis/pluginapi.c>\n"
  },
  {
    "path": "nsisplugin/main.h",
    "content": "#include <windows.h>\n\nEXTERN_C HINSTANCE g_hInstance;\nEXTERN_C HWND g_hwndParent;\n"
  },
  {
    "path": "nsisplugin/resource.h",
    "content": "#define IDC_CHILDRECT       1018\n\n// Reboot\n#define IDD_REBOOT          120\n#define IDI_ICON2           103\n#define IDC_INTROTEXT       1006\n#define IDC_TEXT1           1021\n#define IDC_PROGRESS        1004\n"
  },
  {
    "path": "nsisplugin/resource.rc",
    "content": "#include \"resource.h\"\n#include <windows.h>\n#include \"Version.h\"\n\n#define INNER_WIDTH         317\n#define INNER_HEIGHT        119\n#define INNER_WIDTH_ALIGNED (INNER_WIDTH - 12)\n\n/////////////////////////////////////////////////////////////////////////////\n// English (United States) resources\n\n#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\nLANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\n#pragma code_page(65001)\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Dialogs\n//\n\nIDD_REBOOT DIALOGEX 0, 0, INNER_WIDTH, INNER_HEIGHT\nSTYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD\nFONT 8, \"MS Shell Dlg\", 0, 0, 0x1\nBEGIN\n\t// Icon\n\tCONTROL    \"\",         IDI_ICON2,     \"STATIC\", SS_ICON, 0, 0, 21, 20\n\t// Intro text\n\tLTEXT      \"Text\\nText\\nText\", IDC_INTROTEXT, 27, 0, INNER_WIDTH - 28, 65\n\t// Countdown text\n\tLTEXT      \"\",         IDC_TEXT1,           0, 68, INNER_WIDTH, 16, SS_LEFTNOWORDWRAP | SS_NOPREFIX\n\t// Progress\n\tCONTROL    \"\",         IDC_PROGRESS,        \"msctls_progress32\", WS_BORDER, 0, 84, INNER_WIDTH_ALIGNED, 10\nEND\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Version\n//\n\nVS_VERSION_INFO VERSIONINFO\n FILEVERSION VERSION\n PRODUCTVERSION VERSION\n FILEFLAGSMASK VS_FFI_FILEFLAGSMASK\n#ifdef _DEBUG\n FILEFLAGS VS_FF_DEBUG | VS_FF_PRERELEASE\n#else\n FILEFLAGS 0\n#endif\n FILEOS VOS_NT_WINDOWS32\n FILETYPE VFT_DLL\n FILESUBTYPE VFT2_UNKNOWN\nBEGIN\n\tBLOCK \"StringFileInfo\"\n\tBEGIN\n\t\tBLOCK \"040904b0\"\n\t\tBEGIN\n\t\t\tVALUE \"CompanyName\", \"Hashbang Productions\"\n\t\t\tVALUE \"FileDescription\", \"Legacy Update Setup Helper\"\n\t\t\tVALUE \"FileVersion\", VERSION_STRING\n\t\t\tVALUE \"InternalName\", \"LegacyUpdateNSIS.dll\"\n\t\t\tVALUE \"LegalCopyright\", \"© Hashbang Productions. All rights reserved.\"\n\t\t\tVALUE \"OriginalFilename\", \"LegacyUpdateNSIS.dll\"\n\t\t\tVALUE \"ProductName\", \"Legacy Update\"\n\t\t\tVALUE \"ProductVersion\", VERSION_STRING\n\t\tEND\n\tEND\n\tBLOCK \"VarFileInfo\"\n\tBEGIN\n\t\tVALUE \"Translation\", 0x0409, 0x04b0\n\tEND\nEND\n\n#endif    // English (United States) resources\n/////////////////////////////////////////////////////////////////////////////\n"
  },
  {
    "path": "nsisplugin/sha256.c",
    "content": "// From https://github.com/amosnier/sha-2\n// Licensed under 0BSD https://github.com/amosnier/sha-2/blob/565f650/LICENSE.md\n\n#include \"sha256.h\"\n\n#define TOTAL_LEN_LEN 8\n\n/*\n * Comments from pseudo-code at https://en.wikipedia.org/wiki/SHA-2 are reproduced here.\n * When useful for clarification, portions of the pseudo-code are reproduced here too.\n */\n\n/*\n * @brief Rotate a 32-bit value by a number of bits to the right.\n * @param value The value to be rotated.\n * @param count The number of bits to rotate by.\n * @return The rotated value.\n */\nstatic inline uint32_t right_rot(uint32_t value, unsigned int count)\n{\n\t/*\n\t * Defined behaviour in standard C for all count where 0 < count < 32, which is what we need here.\n\t */\n\treturn value >> count | value << (32 - count);\n}\n\n/*\n * @brief Update a hash value under calculation with a new chunk of data.\n * @param h Pointer to the first hash item, of a total of eight.\n * @param p Pointer to the chunk data, which has a standard length.\n *\n * @note This is the SHA-256 work horse.\n */\nstatic inline void consume_chunk(uint32_t *h, const uint8_t *p)\n{\n\tunsigned i, j;\n\tuint32_t ah[8];\n\n\t/* Initialize working variables to current hash value: */\n\tfor (i = 0; i < 8; i++)\n\t\tah[i] = h[i];\n\n\t/*\n\t * The w-array is really w[64], but since we only need 16 of them at a time, we save stack by\n\t * calculating 16 at a time.\n\t *\n\t * This optimization was not there initially and the rest of the comments about w[64] are kept in their\n\t * initial state.\n\t */\n\n\t/*\n\t * create a 64-entry message schedule array w[0..63] of 32-bit words (The initial values in w[0..63]\n\t * don't matter, so many implementations zero them here) copy chunk into first 16 words w[0..15] of the\n\t * message schedule array\n\t */\n\tuint32_t w[16];\n\n\t/* Compression function main loop: */\n\tfor (i = 0; i < 4; i++) {\n\t\tfor (j = 0; j < 16; j++) {\n\t\t\tif (i == 0) {\n\t\t\t\tw[j] =\n\t\t\t\t    (uint32_t)p[0] << 24 | (uint32_t)p[1] << 16 | (uint32_t)p[2] << 8 | (uint32_t)p[3];\n\t\t\t\tp += 4;\n\t\t\t} else {\n\t\t\t\t/* Extend the first 16 words into the remaining 48 words w[16..63] of the\n\t\t\t\t * message schedule array: */\n\t\t\t\tconst uint32_t s0 = right_rot(w[(j + 1) & 0xf], 7) ^ right_rot(w[(j + 1) & 0xf], 18) ^\n\t\t\t\t\t\t    (w[(j + 1) & 0xf] >> 3);\n\t\t\t\tconst uint32_t s1 = right_rot(w[(j + 14) & 0xf], 17) ^\n\t\t\t\t\t\t    right_rot(w[(j + 14) & 0xf], 19) ^ (w[(j + 14) & 0xf] >> 10);\n\t\t\t\tw[j] = w[j] + s0 + w[(j + 9) & 0xf] + s1;\n\t\t\t}\n\t\t\tconst uint32_t s1 = right_rot(ah[4], 6) ^ right_rot(ah[4], 11) ^ right_rot(ah[4], 25);\n\t\t\tconst uint32_t ch = (ah[4] & ah[5]) ^ (~ah[4] & ah[6]);\n\n\t\t\t/*\n\t\t\t * Initialize array of round constants:\n\t\t\t * (first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311):\n\t\t\t */\n\t\t\tstatic const uint32_t k[] = {\n\t\t\t    0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4,\n\t\t\t    0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe,\n\t\t\t    0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f,\n\t\t\t    0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n\t\t\t    0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n\t\t\t    0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,\n\t\t\t    0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116,\n\t\t\t    0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n\t\t\t    0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7,\n\t\t\t    0xc67178f2};\n\n\t\t\tconst uint32_t temp1 = ah[7] + s1 + ch + k[i << 4 | j] + w[j];\n\t\t\tconst uint32_t s0 = right_rot(ah[0], 2) ^ right_rot(ah[0], 13) ^ right_rot(ah[0], 22);\n\t\t\tconst uint32_t maj = (ah[0] & ah[1]) ^ (ah[0] & ah[2]) ^ (ah[1] & ah[2]);\n\t\t\tconst uint32_t temp2 = s0 + maj;\n\n\t\t\tah[7] = ah[6];\n\t\t\tah[6] = ah[5];\n\t\t\tah[5] = ah[4];\n\t\t\tah[4] = ah[3] + temp1;\n\t\t\tah[3] = ah[2];\n\t\t\tah[2] = ah[1];\n\t\t\tah[1] = ah[0];\n\t\t\tah[0] = temp1 + temp2;\n\t\t}\n\t}\n\n\t/* Add the compressed chunk to the current hash value: */\n\tfor (i = 0; i < 8; i++)\n\t\th[i] += ah[i];\n}\n\n/*\n * Public functions. See header file for documentation.\n */\n\nvoid sha_256_init(struct Sha_256 *sha_256, uint8_t hash[SIZE_OF_SHA_256_HASH])\n{\n\tsha_256->hash = hash;\n\tsha_256->chunk_pos = sha_256->chunk;\n\tsha_256->space_left = SIZE_OF_SHA_256_CHUNK;\n\tsha_256->total_len = 0;\n\t/*\n\t * Initialize hash values (first 32 bits of the fractional parts of the square roots of the first 8 primes\n\t * 2..19):\n\t */\n\tsha_256->h[0] = 0x6a09e667;\n\tsha_256->h[1] = 0xbb67ae85;\n\tsha_256->h[2] = 0x3c6ef372;\n\tsha_256->h[3] = 0xa54ff53a;\n\tsha_256->h[4] = 0x510e527f;\n\tsha_256->h[5] = 0x9b05688c;\n\tsha_256->h[6] = 0x1f83d9ab;\n\tsha_256->h[7] = 0x5be0cd19;\n}\n\nvoid sha_256_write(struct Sha_256 *sha_256, const void *data, size_t len)\n{\n\tsha_256->total_len += len;\n\n\t/*\n\t * The following cast is not necessary, and could even be considered as poor practice. However, it makes this\n\t * file valid C++, which could be a good thing for some use cases.\n\t */\n\tconst uint8_t *p = (const uint8_t *)data;\n\n\twhile (len > 0) {\n\t\t/*\n\t\t * If the input chunks have sizes that are multiples of the calculation chunk size, no copies are\n\t\t * necessary. We operate directly on the input data instead.\n\t\t */\n\t\tif (sha_256->space_left == SIZE_OF_SHA_256_CHUNK && len >= SIZE_OF_SHA_256_CHUNK) {\n\t\t\tconsume_chunk(sha_256->h, p);\n\t\t\tlen -= SIZE_OF_SHA_256_CHUNK;\n\t\t\tp += SIZE_OF_SHA_256_CHUNK;\n\t\t\tcontinue;\n\t\t}\n\t\t/* General case, no particular optimization. */\n\t\tconst size_t consumed_len = len < sha_256->space_left ? len : sha_256->space_left;\n\t\tmemcpy(sha_256->chunk_pos, p, consumed_len);\n\t\tsha_256->space_left -= consumed_len;\n\t\tlen -= consumed_len;\n\t\tp += consumed_len;\n\t\tif (sha_256->space_left == 0) {\n\t\t\tconsume_chunk(sha_256->h, sha_256->chunk);\n\t\t\tsha_256->chunk_pos = sha_256->chunk;\n\t\t\tsha_256->space_left = SIZE_OF_SHA_256_CHUNK;\n\t\t} else {\n\t\t\tsha_256->chunk_pos += consumed_len;\n\t\t}\n\t}\n}\n\nuint8_t *sha_256_close(struct Sha_256 *sha_256)\n{\n\tuint8_t *pos = sha_256->chunk_pos;\n\tsize_t space_left = sha_256->space_left;\n\tuint32_t *const h = sha_256->h;\n\n\t/*\n\t * The current chunk cannot be full. Otherwise, it would already have been consumed. I.e. there is space left\n\t * for at least one byte. The next step in the calculation is to add a single one-bit to the data.\n\t */\n\t*pos++ = 0x80;\n\t--space_left;\n\n\t/*\n\t * Now, the last step is to add the total data length at the end of the last chunk, and zero padding before\n\t * that. But we do not necessarily have enough space left. If not, we pad the current chunk with zeroes, and add\n\t * an extra chunk at the end.\n\t */\n\tif (space_left < TOTAL_LEN_LEN) {\n\t\tmemset(pos, 0x00, space_left);\n\t\tconsume_chunk(h, sha_256->chunk);\n\t\tpos = sha_256->chunk;\n\t\tspace_left = SIZE_OF_SHA_256_CHUNK;\n\t}\n\tconst size_t left = space_left - TOTAL_LEN_LEN;\n\tmemset(pos, 0x00, left);\n\tpos += left;\n\tuint64_t len = sha_256->total_len;\n\tpos[7] = (uint8_t)(len << 3);\n\tlen >>= 5;\n\tint i;\n\tfor (i = 6; i >= 0; --i) {\n\t\tpos[i] = (uint8_t)len;\n\t\tlen >>= 8;\n\t}\n\tconsume_chunk(h, sha_256->chunk);\n\t/* Produce the final hash value (big-endian): */\n\tint j;\n\tuint8_t *const hash = sha_256->hash;\n\tfor (i = 0, j = 0; i < 8; i++) {\n\t\thash[j++] = (uint8_t)(h[i] >> 24);\n\t\thash[j++] = (uint8_t)(h[i] >> 16);\n\t\thash[j++] = (uint8_t)(h[i] >> 8);\n\t\thash[j++] = (uint8_t)h[i];\n\t}\n\treturn sha_256->hash;\n}\n\nvoid calc_sha_256(uint8_t hash[SIZE_OF_SHA_256_HASH], const void *input, size_t len)\n{\n\tstruct Sha_256 sha_256;\n\tsha_256_init(&sha_256, hash);\n\tsha_256_write(&sha_256, input, len);\n\t(void)sha_256_close(&sha_256);\n}\n"
  },
  {
    "path": "nsisplugin/sha256.h",
    "content": "// From https://github.com/amosnier/sha-2\n// Licensed under 0BSD https://github.com/amosnier/sha-2/blob/565f650/LICENSE.md\n\n#ifndef SHA_256_H\n#define SHA_256_H\n\n#include <stdint.h>\n#include <string.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*\n * @brief Size of the SHA-256 sum. This times eight is 256 bits.\n */\n#define SIZE_OF_SHA_256_HASH 32\n\n/*\n * @brief Size of the chunks used for the calculations.\n *\n * @note This should mostly be ignored by the user, although when using the streaming API, it has an impact for\n * performance. Add chunks whose size is a multiple of this, and you will avoid a lot of superfluous copying in RAM!\n */\n#define SIZE_OF_SHA_256_CHUNK 64\n\n/*\n * @brief The opaque SHA-256 type, that should be instantiated when using the streaming API.\n *\n * @note Although the details are exposed here, in order to make instantiation easy, you should refrain from directly\n * accessing the fields, as they may change in the future.\n */\nstruct Sha_256 {\n\tuint8_t *hash;\n\tuint8_t chunk[SIZE_OF_SHA_256_CHUNK];\n\tuint8_t *chunk_pos;\n\tsize_t space_left;\n\tuint64_t total_len;\n\tuint32_t h[8];\n};\n\n/*\n * @brief The simple SHA-256 calculation function.\n * @param hash Hash array, where the result is delivered.\n * @param input Pointer to the data the hash shall be calculated on.\n * @param len Length of the input data, in byte.\n *\n * @note If all of the data you are calculating the hash value on is available in a contiguous buffer in memory, this is\n * the function you should use.\n *\n * @note If either of the passed pointers is NULL, the results are unpredictable.\n *\n * @note See note about maximum data length for sha_256_write, as it applies for this function's len argument too.\n */\nvoid calc_sha_256(uint8_t hash[SIZE_OF_SHA_256_HASH], const void *input, size_t len);\n\n/*\n * @brief Initialize a SHA-256 streaming calculation.\n * @param sha_256 A pointer to a SHA-256 structure.\n * @param hash Hash array, where the result will be delivered.\n *\n * @note If all of the data you are calculating the hash value on is not available in a contiguous buffer in memory,\n * this is where you should start. Instantiate a SHA-256 structure, for instance by simply declaring it locally, make\n * your hash buffer available, and invoke this function. Once a SHA-256 hash has been calculated (see further below) a\n * SHA-256 structure can be initialized again for the next calculation.\n *\n * @note If either of the passed pointers is NULL, the results are unpredictable.\n */\nvoid sha_256_init(struct Sha_256 *sha_256, uint8_t hash[SIZE_OF_SHA_256_HASH]);\n\n/*\n * @brief Stream more input data for an on-going SHA-256 calculation.\n * @param sha_256 A pointer to a previously initialized SHA-256 structure.\n * @param data Pointer to the data to be added to the calculation.\n * @param len Length of the data to add, in byte.\n *\n * @note This function may be invoked an arbitrary number of times between initialization and closing, but the maximum\n * data length is limited by the SHA-256 algorithm: the total number of bits (i.e. the total number of bytes times\n * eight) must be representable by a 64-bit unsigned integer. While that is not a practical limitation, the results are\n * unpredictable if that limit is exceeded.\n *\n * @note This function may be invoked on empty data (zero length), although that obviously will not add any data.\n *\n * @note If either of the passed pointers is NULL, the results are unpredictable.\n */\nvoid sha_256_write(struct Sha_256 *sha_256, const void *data, size_t len);\n\n/*\n * @brief Conclude a SHA-256 streaming calculation, making the hash value available.\n * @param sha_256 A pointer to a previously initialized SHA-256 structure.\n * @return Pointer to the hash array, where the result is delivered.\n *\n * @note After this function has been invoked, the result is available in the hash buffer that initially was provided. A\n * pointer to the hash value is returned for convenience, but you should feel free to ignore it: it is simply a pointer\n * to the first byte of your initially provided hash array.\n *\n * @note If the passed pointer is NULL, the results are unpredictable.\n *\n * @note Invoking this function for a calculation with no data (the writing function has never been invoked, or it only\n * has been invoked with empty data) is legal. It will calculate the SHA-256 value of the empty string.\n */\nuint8_t *sha_256_close(struct Sha_256 *sha_256);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "nsisplugin/stdafx.h",
    "content": "#pragma once\n\n#ifndef STRICT\n#define STRICT\n#endif\n\n#define WINVER       _WIN32_WINNT_NT4\n#define _WIN32_WINNT _WIN32_WINNT_NT4\n\n// Use msvcrt stdio functions\n#define __USE_MINGW_ANSI_STDIO 0\n\n// Enable COM C interfaces\n#define CINTERFACE\n#define COBJMACROS\n#define INITGUID\n\n#include \"resource.h\"\n#include <windows.h>\n#include \"Trace.h\"\n\nEXTERN_C HWND g_hwndParent;\n\n#define NSIS_MAX_STRLEN 8192\n\n#define PLUGIN_METHOD(name) \\\n\tEXTERN_C __declspec(dllexport) \\\n\tvoid __cdecl name(HWND hwndParent, int string_size, TCHAR *variables, stack_t **stacktop, extra_parameters *extra)\n\n#define PLUGIN_INIT() \\\n\tif (extra && extra->exec_flags && (extra->exec_flags->plugin_api_version != NSISPIAPIVER_CURR)) { \\\n\t\treturn; \\\n\t} \\\n\tEXDLL_INIT(); \\\n\tg_hwndParent = hwndParent;\n"
  },
  {
    "path": "setup/ActiveX.inf",
    "content": "[Version]\nSignature=\"$CHICAGO$\"\nAdvancedINF=2.0\n\n[Setup Hooks]\nsetup=setup\n\n[setup]\nrun=\"%EXTRACT_DIR%\\setup.exe\"\n"
  },
  {
    "path": "setup/ActiveXPage.nsh",
    "content": "Var Dialog\nVar Dialog.Y\n\nFunction ActiveXPage\n\t; Skip in runonce\n\t${If} ${IsRunOnce}\n\t${OrIf} ${IsPostInstall}\n\t\tAbort\n\t${EndIf}\n\n\t; Skip if ActiveX install (user already opted for it)\n\t${If} ${IsActiveX}\n\t\tAbort\n\t${EndIf}\n\n\t; Skip if not required\n\t${If} ${AtLeastWin7}\n\t; TODO: Fix ordering of setup.nsi so we can do this\n\t; ${OrIfNot} ${SectionIsSelected} ${LEGACYUPDATE}\n\t\tAbort\n\t${EndIf}\n\n\t!insertmacro MUI_HEADER_TEXT \"$(ActiveXPageTitle)\" \"\"\n\n\tnsDialogs::Create 1018\n\tPop $Dialog\n\n\t${AeroWizardDialogControl} $Dialog\n\n\tStrCpy $Dialog.Y 0\n\n\t${NSD_CreateLabel} 0 $Dialog.Y -1u 24u \"$(ActiveXPageText)\"\n\tPop $0\n\t${AeroWizardDialogControl} $0\n\n\tIntOp $Dialog.Y $Dialog.Y + 60\n\n\t${NSD_CreateIcon} 3u $Dialog.Y 4u 4u \"\"\n\tPop $0\n\t${AeroWizardDialogControl} $0\n\t${NSD_SetIconFromInstaller} $0 103\n\n\t${NSD_CreateRadioButton} 30u $Dialog.Y -30u 10u \"$(ActiveXPageYesTitle)\"\n\tPop $0\n\t${AeroWizardDialogControl} $0\n\t${NSD_OnClick} $0 ActiveXPageSelectionChanged\n\tSendMessage $0 ${BM_SETCHECK} ${BST_CHECKED} 0\n\n\t${NSD_SetFocus} $0\n\n\t${If} ${AtLeastWinVista}\n\t\tStrCpy $0 \"$(ActiveXPageYesTextVista)\"\n\t${Else}\n\t\tStrCpy $0 \"$(ActiveXPageYesText2KXP)\"\n\t${EndIf}\n\n\tIntOp $Dialog.Y $Dialog.Y + 17\n\n\t${NSD_CreateLabel} 41u $Dialog.Y -41u 24u \"$0\"\n\tPop $0\n\t${AeroWizardDialogControl} $0\n\n\tIntOp $Dialog.Y $Dialog.Y + 50\n\n\t${NSD_CreateIcon} 3u $Dialog.Y 4u 4u \"\"\n\tPop $0\n\t${AeroWizardDialogControl} $0\n\n\t${If} ${AtLeastWinVista}\n\t\t${NSD_SetIcon} $0 \"$WINDIR\\System32\\wucltux.dll\" $1\n\t\tStrCpy $1 \"$(ActiveXPageNoTitleVista)\"\n\t\tStrCpy $2 \"$(ActiveXPageNoTextVista)\"\n\t${Else}\n\t\t${NSD_SetIcon} $0 \"res://$WINDIR\\System32\\wupdmgr.exe/#Icon/APPICON\" $1\n\t\tStrCpy $1 \"$(ActiveXPageNoTitle2KXP)\"\n\t\tStrCpy $2 \"$(ActiveXPageNoText2KXP)\"\n\t${EndIf}\n\n\t${NSD_CreateRadioButton} 30u $Dialog.Y -30u 10u \"$1\"\n\tPop $0\n\t${AeroWizardDialogControl} $0\n\t${NSD_OnClick} $0 ActiveXPageSelectionChanged\n\n\tIntOp $Dialog.Y $Dialog.Y + 17\n\n\t${NSD_CreateLabel} 41u $Dialog.Y -41u 24u \"$2\"\n\tPop $0\n\t${AeroWizardDialogControl} $0\n\n\tnsDialogs::Show\n\tCall AeroWizardOnShow\nFunctionEnd\n\nFunction ActiveXPageSelectionChanged\n\tPop $0\n\t${NSD_GetState} $0 $0\n\n\t; TODO: Fix ordering of setup.nsi so we can do this\n\t${If} $0 == ${BST_CHECKED}\n\t\t; !insertmacro UnselectSection ${ACTIVEX}\n\t${Else}\n\t\t; !insertmacro SelectSection ${ACTIVEX}\n\t${EndIf}\nFunctionEnd\n"
  },
  {
    "path": "setup/AeroWizard.nsh",
    "content": "!macro SetFont font parent control\n\tGetDlgItem $0 ${parent} ${control}\n\tSendMessage $0 ${WM_SETFONT} ${font} 0\n!macroend\n\n!macro SetControlColor parent control color\n\tGetDlgItem $0 ${parent} ${control}\n\tSetCtlColors $0 ${color} SYSCLR:WINDOW\n!macroend\n\n!macro SetBackground parent control\n\t!insertmacro SetControlColor ${parent} ${control} SYSCLR:WINDOWTEXT\n!macroend\n\n; These are PE resources because there's no benefit to LZMA compressing PNGs\nPEAddResource \"banner-wordmark-light.png\" \"PNG\" \"#1337\"\nPEAddResource \"banner-wordmark-dark.png\"  \"PNG\" \"#1338\"\nPEAddResource \"banner-wordmark-glow.png\"  \"PNG\" \"#1339\"\n\nVar /GLOBAL ChildHwnd\nVar /GLOBAL AeroWizard.Font\n\n!macro -AeroWizardOnShow\n\t; Get the child window where the wizard page is\n\tFindWindow $ChildHwnd \"#32770\" \"\" $HWNDPARENT\n\n\t; Set font\n\t${If} ${AtLeastWinVista}\n\t\t; Aero wizard style\n\t\t${If} ${AtLeastWin11}\n\t\t\t; Semi-Fluent style\n\t\t\tCreateFont $3 \"Segoe UI Variable Display Semibold\" 14 600\n\t\t\t!insertmacro SetControlColor $HWNDPARENT 1037 SYSCLR:WINDOWTEXT\n\t\t${Else}\n\t\t\t; Aero style\n\t\t\tCreateFont $3 \"Segoe UI\" 12 400\n\t\t\t!insertmacro SetControlColor $HWNDPARENT 1037 0x003399\n\t\t${EndIf}\n\t\tCreateFont $AeroWizard.Font \"Segoe UI\" 8 400\n\t\t!insertmacro SetFont $3 $HWNDPARENT 1037\n\t\t!insertmacro SetFont $AeroWizard.Font $HWNDPARENT 1028\n\t\t${For} $4 1 3\n\t\t\t!insertmacro SetFont $AeroWizard.Font $HWNDPARENT $4\n\t\t${Next}\n\t\t${For} $4 1000 1043\n\t\t\t!insertmacro SetFont $AeroWizard.Font $ChildHwnd $4\n\t\t${Next}\n\t${Else}\n\t\t; Wizard97ish style\n\t\t${If} ${FileExists} \"$FONTS\\framd.ttf\"\n\t\t\tCreateFont $2 \"Franklin Gothic Medium\" 13 400\n\t\t\t!insertmacro SetControlColor $HWNDPARENT 1037 0x003399\n\t\t${Else}\n\t\t\tCreateFont $2 \"Verdana\" 12 800\n\t\t\t!insertmacro SetControlColor $HWNDPARENT 1037 SYSCLR:WINDOWTEXT\n\t\t${EndIf}\n\t\t!insertmacro SetFont $2 $HWNDPARENT 1037\n\t\tCreateFont $AeroWizard.Font \"MS Shell Dlg 2\" 8 400\n\t${EndIf}\n\n\t; Set white background\n\tSetCtlColors $HWNDPARENT SYSCLR:WINDOWTEXT SYSCLR:WINDOW\n\tSetCtlColors $ChildHwnd  SYSCLR:WINDOWTEXT SYSCLR:WINDOW\n\t!insertmacro SetBackground $ChildHwnd 103\n\t${For} $4 1000 1043\n\t\t!insertmacro SetBackground $ChildHwnd $4\n\t${Next}\n\n\t; Set up banner and glass\n\tLegacyUpdateNSIS::DialogInit\n\n\t; Activate taskbar progress bar plugin\n\tLegacyUpdateNSIS::InitTaskbarProgress\n!macroend\n\nFunction AeroWizardOnShow\n\t!insertmacro -AeroWizardOnShow\nFunctionEnd\n\n!if ${NT4} == 0\nFunction un.AeroWizardOnShow\n\t!insertmacro -AeroWizardOnShow\nFunctionEnd\n!endif\n\n!macro -AeroWizardDialogControl hwnd\n\tSendMessage ${hwnd} ${WM_SETFONT} $AeroWizard.Font 0\n\tSetCtlColors ${hwnd} SYSCLR:WINDOWTEXT SYSCLR:WINDOW\n!macroend\n\n!define AeroWizardDialogControl '!insertmacro -AeroWizardDialogControl'\n"
  },
  {
    "path": "setup/Common.nsh",
    "content": "!addplugindir /x86-unicode x86-unicode\n\nSetPluginUnload alwaysoff\n\n!if ${DEBUG} == 0\n\t!packhdr        upx.tmp 'upx --lzma -9 upx.tmp'\n!endif\n\n!if ${SIGN} == 1\n\t!finalize       '../build/sign.sh \"%1\"'\n\t!uninstfinalize '../build/sign.sh \"%1\"'\n!endif\n\n!macro -Trace msg\n\t!if ${DEBUG} == 1\n\t\t!insertmacro _LOGICLIB_TEMP\n\t\t!ifdef __FUNCTION__\n\t\t\tStrCpy $_LOGICLIB_TEMP \"${__FUNCTION__}\"\n\t\t!else\n\t\t\tStrCpy $_LOGICLIB_TEMP \"${__SECTION__}\"\n\t\t!endif\n\t\tMessageBox MB_OK `${__FILE__}(${__LINE__}): $_LOGICLIB_TEMP: ${msg}`\n\t!endif\n!macroend\n!define TRACE '!insertmacro -Trace'\n\n!define IsNativeIA64 '${IsNativeMachineArchitecture} ${IMAGE_FILE_MACHINE_IA64}'\n\n; Avoid needing to use System.dll for this\n!define /redef RunningX64 `\"$PROGRAMFILES64\" != \"$PROGRAMFILES32\"`\n\n!macro _HasFlag _a _b _t _f\n\t!insertmacro _LOGICLIB_TEMP\n\t${GetParameters} $_LOGICLIB_TEMP\n\tClearErrors\n\t${GetOptions} $_LOGICLIB_TEMP `${_b}` $_LOGICLIB_TEMP\n\tIfErrors `${_f}` `${_t}`\n!macroend\n\n!define IsPassive     `\"\" HasFlag \"/passive\"`\n!define IsActiveX     `\"\" HasFlag \"/activex\"`\n!define IsRunOnce     `\"\" HasFlag \"/runonce\"`\n!define IsPostInstall `\"\" HasFlag \"/postinstall\"`\n!define NoRestart     `\"\" HasFlag \"/norestart\"`\n!define IsHelp        `\"\" HasFlag \"/?\"`\n\n!if ${DEBUG} == 1\n\t!define IsVerbose   `1 == 1`\n\t!define TestRunOnce `\"\" HasFlag \"/testrunonce\"`\n!else\n\t!define IsVerbose   `\"\" HasFlag \"/v\"`\n!endif\n\n!macro -DetailPrint level text\n\tLegacyUpdateNSIS::WriteLog \"${text}\"\n!if ${level} == 0\n\t${If} ${IsVerbose}\n\t\tDetailPrint \"${text}\"\n\t${EndIf}\n!else\n\tSetDetailsPrint both\n\tDetailPrint \"${text}\"\n\tSetDetailsPrint listonly\n!endif\n!macroend\n\n!define VerbosePrint `!insertmacro -DetailPrint 0`\n!define DetailPrint  `!insertmacro -DetailPrint 1`\n\nVar /GLOBAL SetupMutexHandle\nVar /GLOBAL TermsrvUserModeChanged\n\nFunction CheckSetupMutex\n\t!define SetupMutexName \"Global\\$(^Name)\"\n\tSystem::Call '${OpenMutex}(${SYNCHRONIZE}, 0, \"${SetupMutexName}\") .r0'\n\t${If} $0 != 0\n\t\tSystem::Call '${CloseHandle}($0)'\n\t\t${VerbosePrint} \"Setup is already running\"\n\t\tMessageBox MB_USERICON \"$(MsgBoxSetupAlreadyRunning)\" /SD IDOK\n\t\tSetErrorLevel 1\n\t\tQuit\n\t${EndIf}\n\n\tSystem::Call '${CreateMutex}(0, 1, \"${SetupMutexName}\") .r0'\n\tStrCpy $SetupMutexHandle $0\nFunctionEnd\n\nFunction InitChecks\n\tSetShellVarContext all\n\t${If} ${IsVerbose}\n\t\tSetDetailsPrint both\n\t${Else}\n\t\tSetDetailsPrint listonly\n\t${EndIf}\n\n\t${If} ${RunningX64}\n\t\tSetRegView 64\n\t${EndIf}\n\n!if ${NT4} == 1\n\t${IfNot} ${IsWinNT4}\n\t\tMessageBox MB_USERICON|MB_OKCANCEL \"$(MsgBoxNeedsNT4)\" /SD IDCANCEL \\\n\t\t\tIDCANCEL +2\n\t\tExecShell \"\" \"${WEBSITE}\"\n\t\tSetErrorLevel ${ERROR_OLD_WIN_VERSION}\n\t\tQuit\n\t${EndIf}\n!else\n\t${IfNot} ${AtLeastWin2000}\n\t\tMessageBox MB_USERICON|MB_OKCANCEL \"$(MsgBoxOldWinVersion)\" /SD IDCANCEL \\\n\t\t\tIDCANCEL +2\n\t\tExecShell \"\" \"${WUR_WEBSITE}\"\n\t\tSetErrorLevel ${ERROR_OLD_WIN_VERSION}\n\t\tQuit\n\t${EndIf}\n!endif\n\n\t${If} ${IsHelp}\n\t\tMessageBox MB_USERICON \"$(MsgBoxUsage)\"\n\t\tQuit\n\t${EndIf}\n\n\tClearErrors\n\tLegacyUpdateNSIS::InitLog\n\t${If} ${Errors}\n\t\tMessageBox MB_USERICON \"$(MsgBoxPluginFailed)\" /SD IDOK\n\t\tSetErrorLevel 1\n\t\tQuit\n\t${EndIf}\n\n\tLegacyUpdateNSIS::IsAdmin\n\tPop $0\n\t${If} $0 == 0\n\t\t${VerbosePrint} \"Not an admin\"\n\t\tMessageBox MB_USERICON \"$(MsgBoxElevationRequired)\" /SD IDOK\n\t\tSetErrorLevel ${ERROR_ELEVATION_REQUIRED}\n\t\tQuit\n\t${EndIf}\n\n\tCall CheckSetupMutex\n\n\t${If} ${IsRunOnce}\n\t${OrIf} ${IsPostInstall}\n\t\t${VerbosePrint} \"RunOnce logon\"\n\t\tCall OnRunOnceLogon\n\t${ElseIfNot} ${AtLeastWin10}\n\t\tGetWinVer $0 Build\n\t\tReadRegDword $1 HKLM \"${REGPATH_CONTROL_WINDOWS}\" \"CSDVersion\"\n\t\tIntOp $1 $1 & 0xFF\n\t\t${If} $1 != 0\n\t\t\t${VerbosePrint} \"Unexpected service pack: $1\"\n\t\t\tStrCpy $1 1\n\t\t${EndIf}\n\n!if ${NT4} == 1\n\t\t${If} $0 != ${WINVER_BUILD_NT4}\n!else\n\t\t${If} $0 != ${WINVER_BUILD_2000}\n\t\t${AndIf} $0 != ${WINVER_BUILD_XP2002}\n\t\t${AndIf} $0 != ${WINVER_BUILD_XP2003}\n\t\t${AndIf} $0 != ${WINVER_BUILD_VISTA}\n\t\t${AndIf} $0 != ${WINVER_BUILD_VISTA_SP1}\n\t\t${AndIf} $0 != ${WINVER_BUILD_VISTA_SP2}\n\t\t${AndIf} $0 != ${WINVER_BUILD_VISTA_ESU}\n\t\t${AndIf} $0 != ${WINVER_BUILD_7}\n\t\t${AndIf} $0 != ${WINVER_BUILD_7_SP1}\n\t\t${AndIf} $0 != ${WINVER_BUILD_8}\n\t\t${AndIf} $0 != ${WINVER_BUILD_8.1}\n!endif\n\t\t\t${VerbosePrint} \"Unexpected build: $0\"\n\t\t\tStrCpy $1 1\n\t\t${EndIf}\n\n\t\t${If} $1 == 1\n\t\t\tMessageBox MB_USERICON|MB_OKCANCEL \"$(MsgBoxBetaOS)\" /SD IDOK \\\n\t\t\t\tIDOK +3\n\t\t\tSetErrorLevel 1\n\t\t\tQuit\n\t\t${EndIf}\n\n!if ${NT4} == 0\n\t\t; Detect One-Core-API\n\t\tReadRegDword $0 HKLM \"${REGPATH_HOTFIX}\\OCAB\" \"Installed\"\n\t\t${If} $0 == 1\n\t\t\t${VerbosePrint} \"One-Core-API detected\"\n\t\t\tMessageBox MB_USERICON|MB_OKCANCEL \"$(MsgBoxOneCoreAPI)\" /SD IDOK \\\n\t\t\t\tIDOK +3\n\t\t\tSetErrorLevel 1\n\t\t\tQuit\n\t\t${EndIf}\n!endif\n\t${EndIf}\n\n!if ${NT4} == 0\n\t; Detect NNN4NT5\n\tReadEnvStr $0 \"_COMPAT_VER_NNN\"\n\t${If} $0 != \"\"\n\t\t${VerbosePrint} \"NNN4NT5 detected\"\n\t\tMessageBox MB_USERICON \"$(MsgBoxNNN4NT5)\" /SD IDOK\n\t\tSetErrorLevel 1\n\t\tQuit\n\t${EndIf}\n\n\t; Check for compatibility mode (GetVersionEx() and RtlGetNtVersionNumbers() disagreeing)\n\tGetWinVer $0 Major\n\tGetWinVer $1 Minor\n\tGetWinVer $2 Build\n\tSystem::Call '${RtlGetNtVersionNumbers}(.r3, .r4, .r5)'\n\tIntOp $5 $5 & 0xFFFF\n\n\t; Windows 2000 lacks RtlGetNtVersionNumbers(), but there is no compatibility mode anyway.\n\t${If} \"$3.$4.$5\" != \"0.0.0\"\n\t${AndIf} \"$0.$1.$2\" != \"$3.$4.$5\"\n\t\t${VerbosePrint} \"Compatibility mode detected. Fake: $0.$1.$2, Actual: $3.$4.$5\"\n\t\tMessageBox MB_USERICON \"$(MsgBoxCompatMode)\" /SD IDOK\n\t\tSetErrorLevel 1\n\t\tQuit\n\t${EndIf}\n!endif\n\n\t; Check for a service pack or hotfix install in progress\n\tStrCpy $1 0\n\tSystem::Call '${OpenMutex}(${SYNCHRONIZE}, 0, \"Global\\ServicePackOrHotfix\") .r0'\n\t${If} $0 != 0\n\t\tSystem::Call '${CloseHandle}($0)'\n\t\tStrCpy $1 1\n\t${Else}\n\t\t; This mutex string is also used by Vista SP2 and 7 SP1, and yes, it has a typo\n\t\tSystem::Call '${OpenMutex}(${SYNCHRONIZE}, 0, \"Global\\Microsoft® Windows® Vista Sevice Pack 1 Installer\") .r0'\n\t\t${If} $0 != 0\n\t\t\tSystem::Call '${CloseHandle}($0)'\n\t\t\tStrCpy $1 1\n\t\t${EndIf}\n\t${EndIf}\n\n\t${If} $1 == 1\n\t\t${VerbosePrint} \"Found a service pack or hotfix installer running\"\n\t\tMessageBox MB_USERICON \"$(MsgBoxInstallInProgress)\" /SD IDOK\n\t\tSetErrorLevel 1\n\t\tQuit\n\t${EndIf}\n\n\t; Check for Terminal Services execute mode\n\t${If} ${IsServerOS}\n\t${AndIf} ${IsTerminalServer}\n\t\tReadRegDword $0 HKLM \"${REGPATH_CONTROL_TERMSRV}\" \"TSAppCompat\"\n\t\tSystem::Call '${TermsrvAppInstallMode}() .r1'\n\t\t${If} $0 == 1\n\t\t${AndIf} $1 == 0\n\t\t\t${IfNot} ${IsRunOnce}\n\t\t\t${AndIfNot} ${IsPostInstall}\n\t\t\t\t${VerbosePrint} \"Terminal Server execute mode detected\"\n\t\t\t\tMessageBox MB_USERICON|MB_OKCANCEL \"$(MsgBoxTermsrvAppInstallMode)\" /SD IDOK \\\n\t\t\t\t\tIDOK +3\n\t\t\t\tSetErrorLevel 1\n\t\t\t\tQuit\n\t\t\t${EndIf}\n\n\t\t\t${VerbosePrint} \"Setting Terminal Server install mode\"\n\t\t\tStrCpy $TermsrvUserModeChanged 1\n\t\t\tSystem::Call '${SetTermsrvAppInstallMode}(1)'\n\t\t${EndIf}\n\t${EndIf}\nFunctionEnd\n\nFunction RevertTermsrvUserMode\n\t${If} $TermsrvUserModeChanged == 1\n\t\t${VerbosePrint} \"Reverting Terminal Server install mode\"\n\t\tSystem::Call '${SetTermsrvAppInstallMode}(0)'\n\t${EndIf}\nFunctionEnd\n\n!macro InhibitSleep state\n!if ${state} == 1\n\tSystem::Call '${SetThreadExecutionState}(${ES_CONTINUOUS}|${ES_SYSTEM_REQUIRED})'\n!else\n\tSystem::Call '${SetThreadExecutionState}(${ES_CONTINUOUS})'\n!endif\n!macroend\n\n!macro -DeleteWithErrorHandling file\n\tClearErrors\n\tDelete \"${file}\"\n\tIfErrors 0 +4\n\t\tStrCpy $0 \"${file}\"\n\t\tMessageBox MB_USERICON|MB_RETRYCANCEL \"$(MsgBoxCopyFailed)\" /SD IDCANCEL \\\n\t\t\tIDRETRY -4\n\t\tAbort\n!macroend\n\n!define DeleteWithErrorHandling `!insertmacro -DeleteWithErrorHandling`\n\n!macro -WriteRegWithBackup type root subkey name value\n\tClearErrors\n\tReadReg${type} $0 ${root} \"${subkey}\" \"${name}\"\n\t${IfNot} ${Errors}\n\t\tWriteReg${type} ${root} \"${subkey}\" \"${name}_LegacyUpdateBackup\" $0\n\t${EndIf}\n\tWriteReg${type} ${root} \"${subkey}\" \"${name}\" `${value}`\n!macroend\n\n!macro -DeleteRegWithBackup type root subkey name fallback\n\tClearErrors\n\tReadReg${type} $0 ${root} \"${subkey}\" \"${name}_LegacyUpdateBackup\"\n\t${If} ${Errors}\n!if \"${fallback}\" == \"-\"\n\t\tDeleteRegValue ${root} \"${subkey}\" \"${name}\"\n!else\n\t\tWriteReg${type} ${root} \"${subkey}\" \"${name}\" `${fallback}`\n!endif\n\t${Else}\n\t\tWriteReg${type} ${root} \"${subkey}\" \"${name}\" $0\n\t\tDeleteRegValue ${root} \"${subkey}\" \"${name}_LegacyUpdateBackup\"\n\t${EndIf}\n!macroend\n\n!define WriteRegWithBackup  `!insertmacro -WriteRegWithBackup`\n!define DeleteRegWithBackup `!insertmacro -DeleteRegWithBackup`\n\nFunction SetLastOSVersion\n\tSystem::Call '${GetVersion}() .r0'\n\tWriteRegDWORD HKLM \"${REGPATH_LEGACYUPDATE_SETUP}\" \"LastOSVersion\" \"$0\"\nFunctionEnd\n"
  },
  {
    "path": "setup/Constants.nsh",
    "content": "; Product\n!define NAME               \"Legacy Update\"\n!define DOMAIN             \"legacyupdate.net\"\n\n; NSIS target\n!ifdef NSIS_UNICODE\n\t!define NSIS_CHARSET     \"unicode\"\n!else\n\t!define NSIS_CHARSET     \"ansi\"\n!endif\n!define NSIS_TARGET        \"${NSIS_CPU}-${NSIS_CHARSET}\"\n\n; Version\n!if ${NT4} == 1\n\t!define DLLVersion_1 1\n\t!define DLLVersion_2 11\n\t!define DLLVersion_3 1\n\t!define DLLVersion_4 0\n!else\n\t!getdllversion \"..\\LegacyUpdate\\obj\\LegacyUpdate32.dll\" DLLVersion_\n!endif\n\n!define LONGVERSION        \"${DLLVersion_1}.${DLLVersion_2}.${DLLVersion_3}.${DLLVersion_4}\"\n!define VERSION            \"${LONGVERSION}\"\n\n!if ${DLLVersion_4} == 0\n\t!define /redef VERSION   \"${DLLVersion_1}.${DLLVersion_2}.${DLLVersion_3}\"\n!endif\n\n!if ${DLLVersion_3}.${DLLVersion_4} == 0.0\n\t!define /redef VERSION   \"${DLLVersion_1}.${DLLVersion_2}\"\n!endif\n\n; Main URLs\n!define WEBSITE            \"http://legacyupdate.net/\"\n!define UPDATE_URL         \"http://legacyupdate.net/windowsupdate/v6/\"\n!define UPDATE_URL_HTTPS   \"https://legacyupdate.net/windowsupdate/v6/\"\n!define WSUS_SERVER        \"http://legacyupdate.net/v6\"\n!define WSUS_SERVER_HTTPS  \"https://legacyupdate.net/v6\"\n!define WUR_WEBSITE        \"http://windowsupdaterestored.com/\"\n!define TRUSTEDR           \"http://download.windowsupdate.com/msdownload/update/v3/static/trustedr/en\"\n\n; Control Panel entry\n!define CPL_GUID           \"{FFBE8D44-E9CF-4DD8-9FD6-976802C94D9C}\"\n!define CPL_APPNAME        \"LegacyUpdate\"\n\n; IE elevation policy\n!define ELEVATIONPOLICY_GUID \"{3D800943-0434-49F2-89A1-472A259AD982}\"\n\n; Legacy Update keys\n!define REGPATH_LEGACYUPDATE_SETUP \"Software\\Hashbang Productions\\Legacy Update\\Setup\"\n!define REGPATH_UNINSTSUBKEY       \"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${NAME}\"\n\n; Control Panel entry\n!define REGPATH_CPLNAMESPACE       \"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ControlPanel\\NameSpace\\${CPL_GUID}\"\n!define REGPATH_HKCR_CPLCLSID      \"CLSID\\${CPL_GUID}\"\n\n; System\n!define REGPATH_HARDWARE_SYSTEM    \"Hardware\\Description\\System\"\n!define REGPATH_CONTROL            \"System\\CurrentControlSet\\Control\"\n!define REGPATH_CONTROL_HAL        \"${REGPATH_CONTROL}\\HAL\"\n!define REGPATH_CONTROL_LANGUAGE   \"${REGPATH_CONTROL}\\Nls\\Language\"\n!define REGPATH_CONTROL_TERMSRV    \"${REGPATH_CONTROL}\\Terminal Server\"\n!define REGPATH_CONTROL_WINDOWS    \"${REGPATH_CONTROL}\\Windows\"\n\n; XP WPA\n!define REGPATH_WPA                \"System\\WPA\"\n!define REGPATH_POSREADY           \"${REGPATH_WPA}\\POSReady\"\n\n; RunOnce\n!define REGPATH_SETUP              \"System\\Setup\"\n!define REGPATH_SETUP_STATUS       \"${REGPATH_SETUP}\\Status\"\n!define REGPATH_RUNONCE            \"Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce\"\n!define REGPATH_POLICIES_SYSTEM    \"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\"\n!define REGPATH_SECURITYCENTER     \"Software\\Microsoft\\Security Center\"\n\n; Windows Update keys\n!define REGPATH_WU                 \"Software\\Microsoft\\Windows\\CurrentVersion\\WindowsUpdate\"\n!define REGPATH_WU_SERVICES        \"${REGPATH_WU}\\Services\"\n\n; Windows Update policies\n!define REGPATH_WUPOLICY           \"Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\"\n!define REGPATH_WUAUPOLICY         \"${REGPATH_WUPOLICY}\\AU\"\n\n; CBS keys\n!define REGPATH_CBS                \"Software\\Microsoft\\Windows\\CurrentVersion\\Component Based Servicing\"\n!define REGPATH_CBS_REBOOTPENDING  \"${REGPATH_CBS}\\RebootPending\"\n!define REGPATH_CBS_PACKAGESPENDING  \"${REGPATH_CBS}\\PackagesPending\"\n!define REGPATH_CBS_REBOOTINPROGRESS \"${REGPATH_CBS}\\RebootInProgress\"\n\n; IE zone keys\n!define REGPATH_INETSETTINGS       \"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\"\n!define REGPATH_INETSETTINGS_WINHTTP \"${REGPATH_INETSETTINGS}\\WinHttp\"\n!define REGPATH_ZONEDOMAINS        \"${REGPATH_INETSETTINGS}\\ZoneMap\\Domains\"\n!define REGPATH_ZONEESCDOMAINS     \"${REGPATH_INETSETTINGS}\\ZoneMap\\EscDomains\"\n\n; IE elevation policy keys\n!define REGPATH_ELEVATIONPOLICY    \"Software\\Microsoft\\Internet Explorer\\Low Rights\\ElevationPolicy\"\n\n; SChannel protocol keys\n!define REGPATH_SCHANNEL_PROTOCOLS \"System\\CurrentControlSet\\Control\\SecurityProviders\\SChannel\\Protocols\"\n!define REGPATH_DOTNET             \"Software\\Microsoft\\.NETFramework\"\n!define REGPATH_DOTNET_V2          \"${REGPATH_DOTNET}\\v2.0.50727\"\n!define REGPATH_DOTNET_V4          \"${REGPATH_DOTNET}\\v4.0.30319\"\n\n; Roots update keys\n!define ROOTSUPDATE_GUID           \"{EF289A85-8E57-408d-BE47-73B55609861A}\"\n!define REGPATH_COMPONENTS         \"Software\\Microsoft\\Active Setup\\Installed Components\"\n\n; Hotfix keys\n!define REGPATH_HOTFIX             \"Software\\Microsoft\\Windows NT\\CurrentVersion\\HotFix\"\n"
  },
  {
    "path": "setup/Download2KXP.nsh",
    "content": "!insertmacro NeedsSPHandler \"W2KSP4\"  \"Win2000\"   3\n!insertmacro NeedsSPHandler \"XPSP1a\"  \"WinXP2002\" 0\n!insertmacro NeedsSPHandler \"XPSP2\"   \"WinXP2002\" 1\n!insertmacro NeedsSPHandler \"XPSP3\"   \"WinXP2002\" 2\n!insertmacro NeedsSPHandler \"XPESP3\"  \"WinXP2002\" 2\n!insertmacro NeedsSPHandler \"2003SP2\" \"WinXP2003\" 1\n\n!insertmacro NeedsFileVersionHandler \"W2KUR1\" \"$WINDIR\\system32\\kernel32.dll\" \"5.00.2195.7006\"\n\n!insertmacro PatchHandler \"W2KSP4\"  \"Windows 2000 $(SP) 4\"      ${PATCH_FLAGS_SHORT} \"\"\n!insertmacro PatchHandler \"W2KUR1\"  \"$(SectionW2KUR1)\"          ${PATCH_FLAGS_LONG}  \"\"\n!insertmacro PatchHandler \"XPSP1a\"  \"Windows XP $(SP) 1a\"       ${PATCH_FLAGS_SHORT} \"\"\n!insertmacro PatchHandler \"XPSP2\"   \"Windows XP $(SP) 2\"        ${PATCH_FLAGS_LONG}  \"\"\n!insertmacro PatchHandler \"XPSP3\"   \"Windows XP $(SP) 3\"        ${PATCH_FLAGS_LONG}  \"\"\n!insertmacro PatchHandler \"2003SP2\" \"Windows XP $(P64)/$(SRV) 2003 $(SP) 2\" ${PATCH_FLAGS_LONG} \"\"\n!insertmacro PatchHandler \"XPESP3\"  \"Windows XP $(EMB) $(SP) 3\" ${PATCH_FLAGS_LONG}  \"\"\n\nFunction FixW2KUR1\n\t; Fix idling on multi-CPU systems when Update Rollup 1 is installed\n\tWriteRegDWORD HKLM \"${REGPATH_CONTROL_HAL}\" \"14140000FFFFFFFF\" 0x10\nFunctionEnd\n"
  },
  {
    "path": "setup/DownloadIE.nsh",
    "content": "!insertmacro NeedsFileVersionHandler \"IE6\" \"$WINDIR\\system32\\mshtml.dll\" \"6.0.2600.0\"\n\n!macro DownloadIE ver title\n\t${If} ${NeedsPatch} IE${ver}\n\t\tStrCpy $Patch.Key   \"IE${ver}\"\n\t\tStrCpy $Patch.File  \"ie${ver}setup.cab\"\n\t\tStrCpy $Patch.Title \"${title} $(Setup)\"\n\t\tCall -PatchHandler\n\n\t\t${IfNot} ${FileExists} \"$PLUGINSDIR\\IE${ver}\\ie${ver}setup.exe\"\n\t\t\t!insertmacro ExtractCab '${title} $(Setup)' \"$Patch.File\" \"$PLUGINSDIR\\IE${ver}\"\n\t\t\t${DetailPrint} \"$(Downloading)${title}...\"\n\t\t\t!insertmacro ExecWithErrorHandling '${title}' '\"$PLUGINSDIR\\IE${ver}\\ie${ver}setup.exe\" /c:\"ie${ver}wzd.exe /q /d /s:\"\"#e\"\"\"'\n\t\t${EndIf}\n\t${EndIf}\n!macroend\n\n!macro InstallIE ver title\n\t${If} ${NeedsPatch} IE${ver}\n\t\tCall DownloadIE${ver}\n\t\t${DetailPrint} \"$(Installing)${title}...\"\n\t\tStrCpy $RunOnce.UseFallback 1\n\t\t!insertmacro ExecWithErrorHandling '${title}' '\"$PLUGINSDIR\\IE${ver}\\ie${ver}setup.exe\" /c:\"ie${ver}wzd.exe /q /r:n /s:\"\"#e\"\"\"'\n\t\tRMDir /r /REBOOTOK \"$WINDIR\\Windows Update Setup Files\"\n\t${EndIf}\n!macroend\n\nFunction DownloadIE6\n\t!insertmacro DownloadIE 6 \"$(IE) 6 $(SP) 1\"\nFunctionEnd\n\nFunction InstallIE6\n\t!insertmacro InstallIE 6 \"$(IE) 6 $(SP) 1\"\nFunctionEnd\n"
  },
  {
    "path": "setup/DownloadNT4.nsh",
    "content": "!macro TODO thing\n\tFunction Install${thing}\n\t\tDetailPrint \"TODO: ${thing}\"\n\tFunctionEnd\n!macroend\n\n!include \"NT4USB.nsh\"\n\n!insertmacro NeedsSPHandler \"NT4SP6a\" \"WinNT4\" 6\n\nFunction NeedsNT4SP6a-clt\n\t${If} ${IsTerminalServer}\n\t\tPush 0\n\t${Else}\n\t\tCall NeedsNT4SP6a\n\t${EndIf}\nFunctionEnd\n\nFunction NeedsNT4SP6a-wts\n\t${If} ${IsTerminalServer}\n\t\tCall NeedsNT4SP6a\n\t${Else}\n\t\tPush 0\n\t${EndIf}\nFunctionEnd\n\n!insertmacro PatchHandler \"NT4SP6a-clt\" \"Windows NT 4.0 $(SP) 6a\"        ${PATCH_FLAGS_NT4} \"\"\n!insertmacro PatchHandler \"NT4SP6a-wts\" \"Windows NT 4.0 $(WTS) $(SP) 6a\" ${PATCH_FLAGS_NT4} \"\"\n\nFunction InstallNT4SP6a\n\t${If} ${NeedsPatch} NT4SP6a\n\t\tDetailPrint \"$(Installing)Windows NT 4.0 $(SP) 6a...\"\n\t\t${If} ${IsTerminalServer}\n\t\t\tCall InstallNT4SP6a-wts\n\t\t${Else}\n\t\t\tCall InstallNT4SP6a-clt\n\t\t${EndIf}\n\t${EndIf}\nFunctionEnd\n\n!insertmacro TODO \"NT4Rollup\"\n\n; Workstation/Server\n!insertmacro TODO \"KB243649\"\n!insertmacro TODO \"KB304158\"\n!insertmacro TODO \"KB314147\"\n!insertmacro TODO \"KB318138\"\n!insertmacro TODO \"KB320206\"\n!insertmacro TODO \"KB326830\"\n!insertmacro TODO \"KB329115\"\n!insertmacro TODO \"KB810833\"\n!insertmacro TODO \"KB815021\"\n!insertmacro TODO \"KB817606\"\n!insertmacro TODO \"KB819696\"\n\n; Server-only\n!insertmacro TODO \"KB823182\"\n!insertmacro TODO \"KB823803\"\n!insertmacro TODO \"KB824105\"\n!insertmacro TODO \"KB824141\"\n!insertmacro TODO \"KB824146\"\n!insertmacro TODO \"KB825119\"\n!insertmacro TODO \"KB828035\"\n!insertmacro TODO \"KB828741\"\n!insertmacro TODO \"NT4KB835732\"\n!insertmacro TODO \"KB839645\"\n!insertmacro TODO \"KB841533\"\n!insertmacro TODO \"KB841872\"\n!insertmacro TODO \"KB870763\"\n!insertmacro TODO \"KB873339\"\n!insertmacro TODO \"KB873350\"\n!insertmacro TODO \"KB885249\"\n!insertmacro TODO \"KB885834\"\n!insertmacro TODO \"KB885835\"\n!insertmacro TODO \"KB885836\"\n!insertmacro TODO \"KB891711\"\n\n; Runtimes\n!insertmacro NeedsFileVersionHandler \"MSI\" \"$WINDIR\\system32\\msiexec.exe\" \"3.1.4000.2435\"\n\nFunction InstallMSI\n\t${If} ${NeedsPatch} MSI\n\t\t${DetailPrint} \"$(Installing)$(MSI)...\"\n\t\tFile \"patches\\redist\\instmsiw.exe\"\n\t\t!insertmacro ExecWithErrorHandling '$(MSI)' '\"$PLUGINSDIR\\instmsiw.exe\" /c:\"msiinst.exe /delayrebootq\"'\n\t${EndIf}\nFunctionEnd\n\n!insertmacro TODO \"NT4VCRT\"\n!insertmacro TODO \"NT4VB6\"\n!insertmacro TODO \"NT4MFCOLE\"\n!insertmacro TODO \"NT4WMP64\"\n!insertmacro TODO \"NT4DX5\"\n\n; Cleanup\nFunction CleanUpSPUninstall\n\tDetailPrint \"TODO: CleanUpSPUninstall\"\nFunctionEnd\n"
  },
  {
    "path": "setup/DownloadVista78.nsh",
    "content": "Function NeedsPackage\n\tPop $0\n\tClearErrors\n\tFindFirst $R0 $R1 \"$WINDIR\\servicing\\Packages\\$0~31bf3856ad364e35~*\"\n\tFindClose $R0\n\t${If} ${Errors}\n\t\tPush 1\n\t${Else}\n\t\tPush 0\n\t${EndIf}\nFunctionEnd\n\n!macro SPHandler kbid pkg title\n\tFunction Needs${kbid}\n!if \"${kbid}\" == \"VistaSP1\"\n\t\t; Special case: Server 2008 is already SP1, but doesn't have a VistaSP1 package we can detect.\n\t\t${If} ${IsServerOS}\n\t\t\tPush 0\n\t\t\tReturn\n\t\t${EndIf}\n!endif\n\t\tPush ${pkg}\n\t\tCall NeedsPackage\n\tFunctionEnd\n\n\tFunction Download${kbid}\n\t\tStrCpy $Patch.Key   \"${kbid}\"\n\t\tStrCpy $Patch.File  \"${kbid}.exe\"\n\t\tStrCpy $Patch.Title \"${title}\"\n\n\t\t${If} ${NeedsPatch} ${kbid}\n\t\t\tCall -PatchHandler\n\t\t${EndIf}\n\tFunctionEnd\n\n\tFunction Install${kbid}\n\t\t${If} ${NeedsPatch} ${kbid}\n\t\t\tCall Download${kbid}\n\t\t\t!insertmacro InstallSP \"${title}\" \"${kbid}.exe\"\n\t\t${EndIf}\n\tFunctionEnd\n!macroend\n\n!macro MSUHandler kbid title\n\tFunction Needs${kbid}\n\t\tPush Package_for_${kbid}\n\t\tCall NeedsPackage\n\tFunctionEnd\n\n\tFunction Download${kbid}\n\t\t${If} ${NeedsPatch} ${kbid}\n\t\t\tCall GetArch\n\t\t\tPop $0\n\t\t\tReadINIStr $1 $PLUGINSDIR\\Patches.ini \"${kbid}\" $0\n\t\t\tReadINIStr $2 $PLUGINSDIR\\Patches.ini \"${kbid}\" Prefix\n\t\t\tReadINIStr $3 $PLUGINSDIR\\Patches.ini \"${kbid}\" \"$0-sha256\"\n\t\t\t!insertmacro DownloadMSU \"${kbid}\" \"${title}\" \"$2$1\" \"$3\"\n\t\t${EndIf}\n\tFunctionEnd\n\n\tFunction Install${kbid}\n\t\t${If} ${NeedsPatch} ${kbid}\n\t\t\tCall Download${kbid}\n\t\t\t!insertmacro InstallMSU \"${kbid}\" \"${title}\"\n\t\t${EndIf}\n\tFunctionEnd\n!macroend\n\n; Service Packs\n!insertmacro SPHandler  \"VistaSP1\"  \"VistaSP1-KB936330\"    \"Windows Vista $(SP) 1\"\n!insertmacro SPHandler  \"VistaSP2\"  \"VistaSP2-KB948465\"    \"Windows Vista $(SP) 2\"\n!insertmacro SPHandler  \"Win7SP1\"   \"Windows7SP1-KB976933\" \"Windows 7 $(SP) 1\"\n\n; Windows Vista post-SP2 update combination that fixes WU indefinitely checking for updates\n!insertmacro MSUHandler \"KB3205638\" \"$(SecUpd) for Windows Vista\"\n!insertmacro MSUHandler \"KB4012583\" \"$(SecUpd) for Windows Vista\"\n!insertmacro MSUHandler \"KB4015195\" \"$(SecUpd) for Windows Vista\"\n!insertmacro MSUHandler \"KB4015380\" \"$(SecUpd) for Windows Vista\"\n\n; Internet Explorer 9 for Windows Vista\n!insertmacro MSUHandler \"KB971512\"  \"$(Update) for Windows Vista\"\n!insertmacro MSUHandler \"KB2117917\" \"$(PUS) for Windows Vista\"\n\n!insertmacro NeedsFileVersionHandler \"IE9\" \"$WINDIR\\system32\\mshtml.dll\" \"9.0.8112.16421\"\n!insertmacro PatchHandler \"IE9\" \"$(IE) 9 for Windows Vista\" ${PATCH_FLAGS_OTHER} \"/passive /norestart /update-no /closeprograms\"\n\n; Windows Vista Servicing Stack Update\n!insertmacro MSUHandler \"KB4493730\" \"2019-04 $(SSU) for Windows $(SRV) 2008\"\n\n; Hyper-V Update for Windows Server 2008\n!insertmacro MSUHandler \"KB950050\" \"Hyper-V $(Update) for Windows $(SRV) 2008\"\n\n; Only check/apply KB950050 if the Hyper-V role is present on 2008 SP1\n; This update is integrated in SP2\nFunction NeedsHyperV2008Update\n\t${If} ${IsWinVista}\n\t${AndIf} ${IsServerOS}\n\t${AndIf} ${AtMostServicePack} 1\n\t\t; Get version of Hyper-V boot driver.\n\t\t${GetFileVersion} \"$WINDIR\\system32\\drivers\\hvboot.sys\" $0\n\t\t${VersionCompare} $0 \"6.0.6001.18016\" $1\n\t\t${If} $1 == 2 ; Less than\n\t\t\tPush 1\n\t\t${Else}\n\t\t\tPush 0\n\t\t${EndIf}\n\t${Else}\n\t\tPush 0\n\t${EndIf}\nFunctionEnd\n\n; Windows 7 Convenience Rollup Update\n!insertmacro MSUHandler \"KB3020369\" \"2015-04 $(SSU) for Windows 7\"\n!insertmacro MSUHandler \"KB3125574\" \"$(CRU) for Windows 7\"\n\n; Windows 7 Servicing Stack Update\n!insertmacro MSUHandler \"KB3138612\" \"2016-03 $(SSU) for Windows 7\"\n!insertmacro MSUHandler \"KB4474419\" \"$(SHA2) for Windows 7\"\n!insertmacro MSUHandler \"KB4490628\" \"2019-03 $(SSU) for Windows 7\"\n\n; Windows Home Server 2011 Update Rollup 4\n!insertmacro MSUHandler \"KB2757011\" \"$(SectionWHS2011U4)\"\n\n; Windows 8 Servicing Stack\n!insertmacro MSUHandler \"KB4598297\" \"2021-01 $(SSU) for Windows $(SRV) 2012\"\n\n; Windows 8.1 Servicing Stack\n!insertmacro MSUHandler \"KB3021910\" \"2015-04 $(SSU) for Windows 8.1\"\n\n; Weird prerequisite to Update 1 that fixes the main KB2919355 update failing to install\nFunction NeedsClearCompressionFlag\n\tCall NeedsKB2919355\nFunctionEnd\n\n!insertmacro PatchHandler \"ClearCompressionFlag\" \"Windows 8.1 $(Update) 1 $(PrepTool)\" ${PATCH_FLAGS_OTHER} \"\"\n\n; Windows 8.1 Update 1\n!insertmacro MSUHandler \"KB2919355\" \"Windows 8.1 $(Update) 1\"\n!insertmacro MSUHandler \"KB2932046\" \"Windows 8.1 $(Update) 1\"\n!insertmacro MSUHandler \"KB2959977\" \"Windows 8.1 $(Update) 1\"\n!insertmacro MSUHandler \"KB2937592\" \"Windows 8.1 $(Update) 1\"\n!insertmacro MSUHandler \"KB2934018\" \"Windows 8.1 $(Update) 1\"\n\n; Windows 8.1 Update 3\n; TODO\n; !insertmacro MSUHandler \"KB2934018\" \"Windows 8.1 $(Update) 3\"\n\nFunction NeedsVistaPostSP2\n\t${If} ${NeedsPatch} KB3205638\n\t${OrIf} ${NeedsPatch} KB4012583\n\t${OrIf} ${NeedsPatch} KB4015195\n\t${OrIf} ${NeedsPatch} KB4015380\n\t\tPush 1\n\t${Else}\n\t\tPush 0\n\t${EndIf}\nFunctionEnd\n\nFunction NeedsVistaESU\n\tCall NeedsKB4493730\nFunctionEnd\n\nFunction NeedsWin7CRU\n\t; Not released for Itanium. There are no superseding updates, but we assume the user might have\n\t; already installed the rolled-up updates manually.\n\t${If} ${NeedsPatch} KB2919355\n\t${AndIf} ${NeedsPatch} Win7PostSP1\n\t${AndIfNot} ${IsNativeIA64}\n\t\tPush 1\n\t${Else}\n\t\tPush 0\n\t${EndIf}\nFunctionEnd\n\nFunction NeedsWin7PostSP1\n\t${If} ${NeedsPatch} KB3138612\n\t${OrIf} ${NeedsPatch} KB4474419\n\t${OrIf} ${NeedsPatch} KB4490628\n\t\tPush 1\n\t${Else}\n\t\tPush 0\n\t${EndIf}\nFunctionEnd\n\nFunction NeedsWin81Update1\n\t${If} ${NeedsPatch} KB2919355\n\t${OrIf} ${NeedsPatch} KB2932046\n\t${OrIf} ${NeedsPatch} KB2937592\n\t${OrIf} ${NeedsPatch} KB2934018\n\t\tPush 1\n\t${Else}\n\t\tPush 0\n\t${EndIf}\nFunctionEnd\n\n; TODO\n; Function NeedsWin81Update3\n; \tCall GetArch\n; \tPop $0\n; \t${If} $0 == \"arm\"\n; \t${AndIf} ${NeedsPatch} KB2934018\n; \t\tPush 1\n; \t${Else}\n; \t\tPush 0\n; \t${EndIf}\n; FunctionEnd\n"
  },
  {
    "path": "setup/DownloadWUA.nsh",
    "content": "Function DetermineWUAVersion\n\t; WUA refuses to install on 2000 Datacenter Server. Maybe we can hack around this in future.\n\t${If} ${IsWin2000}\n\t${AndIf} ${IsDatacenter}\n\t\tStrCpy $0 \"\"\n\t\tReturn\n\t${EndIf}\n\n\tGetWinVer $1 Major\n\tGetWinVer $2 Minor\n\tGetWinVer $3 ServicePack\n\n\t; Handle scenarios where the SP will be updated by the time we install WUA.\n\t${If} \"$1.$2\" == \"5.1\"\n\t\t${If} ${SectionIsSelected} ${XPSP3}\n\t\t${OrIf} ${SectionIsSelected} ${XPESP3}\n\t\t\tStrCpy $3 \"3\"\n\t\t${EndIf}\n\t${ElseIf} \"$1.$2\" == \"5.2\"\n\t\t${If} ${SectionIsSelected} ${2003SP2}\n\t\t\tStrCpy $3 \"2\"\n\t\t${EndIf}\n\t${EndIf}\n\n\tStrCpy $1 \"$1.$2.$3\"\n\n\t; Hardcoded special case for XP Home/Embedded SP3, because the WUA 7.6.7600.256 setup SFX is seriously broken on it,\n\t; potentially causing an unbootable Windows install due to it entering an infinite loop of creating folders in the\n\t; root of C:.\n\t${If} $1 == \"5.1.3\"\n\t\t${If} ${IsHomeEdition}\n\t\t${OrIf} ${IsEmbedded}\n\t\t\tStrCpy $1 \"$1-home\"\n\t\t${EndIf}\n\t${EndIf}\n\n\tStrCpy $0 \"\"\n\tReadINIStr $2 $PLUGINSDIR\\Patches.ini WUA $1\n\t${If} $2 == \"\"\n\t\tReturn\n\t${EndIf}\n\n\t${GetFileVersion} \"$SYSDIR\\wuaueng.dll\" $1\n\t${VersionCompare} $1 $2 $3\n\t${If} $3 == 2\n\t\tCall GetArch\n\t\tPop $0\n\t\tReadINIStr $3 $PLUGINSDIR\\Patches.ini WUA \"$2-$0-sha256\"\n\t\tReadINIStr $0 $PLUGINSDIR\\Patches.ini WUA \"$2-$0\"\n\t\t${If} $0 == \"\"\n\t\t\tReturn\n\t\t${EndIf}\n\n\t\tReadINIStr $1 $PLUGINSDIR\\Patches.ini WUA Prefix\n\t\tStrCpy $0 \"$1$0\"\n\t${EndIf}\nFunctionEnd\n\nFunction NeedsWUA\n\tCall DetermineWUAVersion\n\t${If} $0 == \"\"\n\t\tPush 0\n\t${Else}\n\t\tPush 1\n\t${EndIf}\nFunctionEnd\n\nFunction DownloadWUA\n\tCall DetermineWUAVersion\n\t${If} $0 != \"\"\n\t\t!insertmacro Download \"$(WUA)\" \"$0\" \"WindowsUpdateAgent.exe\" \"$3\" 1\n\t${EndIf}\nFunctionEnd\n\nFunction InstallWUA\n\tCall DetermineWUAVersion\n\t${If} $0 != \"\"\n\t\tCall DownloadWUA\n\t\t!insertmacro Install \"$(WUA)\" \"WindowsUpdateAgent.exe\" \"/quiet /norestart\"\n\t${EndIf}\nFunctionEnd\n"
  },
  {
    "path": "setup/Makefile",
    "content": "DEBUG ?= 1\nSIGN ?= 0\nCI ?= 0\n\nMAKENSIS = makensis\nNSISFLAGS = -DDEBUG=$(DEBUG) -DSIGN=$(SIGN) -DCI=$(CI)\n\nFILES   = resource.c\nRCFILES = resource.rc\nBIN     = obj/resource.dll\n\ninclude ../build/shared.mk\n\nCFLAGS  += -mdll\nLDFLAGS += -Wl,-e_DllMain\n\nall:: internal-all nsisplugin setup activex\n\nnt4: internal-all nsisplugin setup-nt4\n\nnsisplugin:\nifeq ($(MAKELEVEL),0)\n\t+$(MAKE) -C ../nsisplugin\nendif\n\nsetup: internal-all nsisplugin\n\t$(MAKENSIS) $(NSISFLAGS) -DNT4=0 setup.nsi\n\nsetup-nt4: internal-all nsisplugin\n\t$(MAKENSIS) $(NSISFLAGS) -DNT4=1 setup-nt4.nsi\n\nactivex: setup\nifeq ($(SIGN),1)\n\tcp LegacyUpdate-*.exe codebase/setup.exe\n\tcd codebase && makecab.exe /f lucontrl.ddf\n\t../build/sign.sh codebase/lucontrl.cab\n\trm codebase/setup.exe codebase/setup.rpt\nendif\n\nclean::\n\trm -rf obj\n\trm -f LegacyUpdate-*.exe codebase/{lucontrl.cab,setup.exe,setup.rpt}\nifeq ($(MAKELEVEL),0)\n\t+$(MAKE) -C ../nsisplugin clean\nendif\n\ntest:\n\t+$(MAKE)\n\tsudo.exe LegacyUpdate-*.exe\n\n.PHONY: all internal-all nt4 nsisplugin setup setup-nt4 activex clean\n"
  },
  {
    "path": "setup/NT4USB.nsh",
    "content": "; TODO: Check whether machine will support the USB stack, via LegacyUpdateNSIS::IsMultiCPU\n\nFunction InstallNT4USB\n\tCall InstallNT4USBStack\n\tCall InstallNT4USBHID\n\tCall InstallNT4USBEdgeport\n\tCall InstallNT4USBMassStorage\n\tCall InstallNT4USBImaging\n\n\tSetOutPath \"${RUNONCEDIR}\"\nFunctionEnd\n\nFunction InstallNT4USBStack\n\t${DetailPrint} \"$(Installing)Inside Out Networks USB Stack...\"\n\n\t; Files\n\tSetOutPath \"$PROGRAMFILES\\Inside Out Networks\\Inside Out Networks' USB Peripheral Drivers\"\n\tFile \"patches\\nt4\\usb\\ReadMe.txt\"\n\n\tSetOutPath \"$WINDIR\"\n\tFile \"patches\\nt4\\usb\\ionlicense.txt\"\n\n\tSetOutPath \"$WINDIR\\system32\"\n\t; File \"patches\\nt4\\usb\\awusbcfg.exe\"\n\tFile \"patches\\nt4\\usb\\UsbTray.exe\"\n\tFile \"patches\\nt4\\usb\\ionusb.exe\"\n\tFile \"patches\\nt4\\usb\\UsbShare.dll\"\n\tSetOutPath \"$WINDIR\\system32\\drivers\"\n\tFile \"patches\\nt4\\usb\\usbd.sys\"\n\tFile \"patches\\nt4\\usb\\usbhub.sys\"\n\tFile \"patches\\nt4\\usb\\vusbd.sys\"\n\n\t; Startup shortcut\n\tCreateShortcut \"$SMSTARTUP\\USB Status Utility.lnk\" \"$WINDIR\\system32\\UsbTray.exe\"\n\n\t; Register services\n\tSetOutPath \"$PLUGINSDIR\"\n\tFile \"patches\\nt4\\usb\\ionsvc.dll\"\n\t${DetailPrint} \"$(Installing)USBD service...\"\n\tSystem::Call 'ionsvc::CreateUSBDSrvc(i 0, i 0, s \"$WINDIR\\system32\\usbd.sys\") i .r0'\n\t${If} $0 != 0\n\t\tSetErrorLevel 1\n\t\tAbort\n\t${EndIf}\n\n\t${DetailPrint} \"$(Installing)VUSBD service...\"\n\tSystem::Call 'ionsvc::CreateVUSBDSrvc(i 0, i 0, s \"$WINDIR\\system32\\usbd.sys\") i .r0'\n\t${If} $0 != 0\n\t\tSetErrorLevel 1\n\t\tAbort\n\t${EndIf}\n\n\t${DetailPrint} \"$(Installing)USBHUB service...\"\n\tSystem::Call 'ionsvc::CreateUSBHUBSrvc(i 0, i 0, s \"$WINDIR\\system32\\usbd.sys\") i .r0'\n\t${If} $0 != 0\n\t\tSetErrorLevel 1\n\t\tAbort\n\t${EndIf}\n\n\t${DetailPrint} \"$(Installing)IONUSB service...\"\n\tSystem::Call 'ionsvc::CreateIONUSBSrvc(i 0, i 0, s \"$WINDIR\\system32\\ionusb.exe\") i .r0'\n\t${If} $0 != 0\n\t\tSetErrorLevel 1\n\t\tAbort\n\t${EndIf}\nFunctionEnd\n\n; TODO: The rest of the files\n\n; File \"patches\\nt4\\usb\\edgeport.exe\"\n; File \"patches\\nt4\\usb\\edgeser.sys\"\n; File \"patches\\nt4\\usb\\ionflash.exe\"\n; File \"patches\\nt4\\usb\\usbhid.sys\"\n; File \"patches\\nt4\\usb\\usbms.sys\"\n; File \"patches\\nt4\\usb\\UsbMsDll.dll\"\n; File \"patches\\nt4\\usb\\usbprint.sys\"\n; File \"patches\\nt4\\usb\\usbrm.sys\"\n; File \"patches\\nt4\\usb\\vcusbnt4.sys\"\n; File \"patches\\nt4\\usb\\vicam_32.dll\"\n\nFunction InstallNT4USBHID\n\t${DetailPrint} \"$(Installing)Inside Out Networks USB HID Driver...\"\nFunctionEnd\n\nFunction InstallNT4USBMassStorage\n\t${DetailPrint} \"$(Installing)Inside Out Networks USB Mass Storage Driver...\"\nFunctionEnd\n\nFunction InstallNT4USBImaging\n\t${DetailPrint} \"$(Installing)Inside Out Networks USB Imaging Driver...\"\nFunctionEnd\n\nFunction InstallNT4USBEdgeport\n\t${DetailPrint} \"$(Installing)Inside Out Networks USB to Serial (Edgeport) Drivers...\"\n\tSetOutPath \"$WINDIR\\inf\"\n\tFile \"patches\\nt4\\usb\\rp_mdm.inf\"\nFunctionEnd\n"
  },
  {
    "path": "setup/PatchInstall.nsh",
    "content": "Function GetArch\n\tVar /GLOBAL Arch\n\t${If} $Arch == \"\"\n\t\t${If} ${IsNativeIA32}\n\t\t\tStrCpy $Arch \"x86\"\n\t\t${ElseIf} ${IsNativeAMD64}\n\t\t\tStrCpy $Arch \"x64\"\n\t\t${ElseIf} ${IsNativeIA64}\n\t\t\tStrCpy $Arch \"ia64\"\n\t\t${Else}\n\t\t\tStrCpy $Arch \"\"\n\t\t${EndIf}\n\t${EndIf}\n\tPush $Arch\nFunctionEnd\n\n!macro _NeedsPatch _a _b _t _f\n\t!insertmacro _LOGICLIB_TEMP\n\tCall Needs${_b}\n\tPop $_LOGICLIB_TEMP\n\tStrCmp $_LOGICLIB_TEMP 1 `${_t}` `${_f}`\n!macroend\n\n!define NeedsPatch `\"\" NeedsPatch`\n\nVar /GLOBAL Download.ID\n\nFunction DownloadRequest\n\t; TODO: This is broken on XP for some reason\n\t; Var /GLOBAL Download.UserAgent\n\t; ${If} $Download.UserAgent == \"\"\n\t; \tGetWinVer $R8 Major\n\t; \tGetWinVer $R9 Minor\n\t; \tStrCpy $Download.UserAgent \"Mozilla/4.0 (${NAME} ${VERSION}; Windows NT $R8.$R9)\"\n\t; ${EndIf}\n\t; /HEADER \"User-Agent: $Download.UserAgent\"\n\n\tNSxfer::Request \\\n\t\t/TIMEOUTCONNECT 60000 \\\n\t\t/TIMEOUTRECONNECT 60000 \\\n\t\t/OPTCONNECTTIMEOUT 60000 \\\n\t\t/OPTRECEIVETIMEOUT 60000 \\\n\t\t/OPTSENDTIMEOUT 60000 \\\n\t\t/URL \"$R0\" \\\n\t\t/LOCAL \"$R1\" \\\n\t\t/INTERNETFLAGS ${INTERNET_FLAG_RELOAD}|${INTERNET_FLAG_NO_CACHE_WRITE}|${INTERNET_FLAG_KEEP_CONNECTION}|${INTERNET_FLAG_NO_COOKIES}|${INTERNET_FLAG_NO_UI} \\\n\t\t/SECURITYFLAGS ${SECURITY_FLAG_STRENGTH_STRONG} \\\n\t\t$R2 \\\n\t\t/END\n\tPop $Download.ID\nFunctionEnd\n\n!macro DownloadRequest url local extra\n\tStrCpy $R0 \"${url}\"\n\tStrCpy $R1 \"${local}\"\n\tStrCpy $R2 \"${extra}\"\n\tCall DownloadRequest\n!macroend\n\nFunction DownloadWaitSilent\n\tNSxfer::Wait /ID $Download.ID /MODE SILENT /END\n\tNSxfer::Query /ID $Download.ID /ERRORCODE /ERRORTEXT /END\nFunctionEnd\n\nFunction DownloadWait\n\tNSxfer::Wait /ID $Download.ID /MODE PAGE \\\n\t\t/STATUSTEXT \"$(DownloadStatusSingle)\" \"$(DownloadStatusMulti)\" \\\n\t\t/ABORT \"$(^Name)\" \"$(MsgBoxDownloadAbort)\" \\\n\t\t/END\n\tNSxfer::Query /ID $Download.ID /ERRORCODE /ERRORTEXT /END\nFunctionEnd\n\n\nVar /GLOBAL Download.Name\nVar /GLOBAL Download.URL\nVar /GLOBAL Download.Filename\nVar /GLOBAL Download.Hash\nVar /GLOBAL Download.Verbose\n\nFunction Download\n\t${If} ${FileExists} \"${RUNONCEDIR}\\$Download.Filename\"\n\t\tStrCpy $0 \"${RUNONCEDIR}\\$Download.Filename\"\n\t\tReturn\n\t${EndIf}\n\n\t${If} ${FileExists} \"$EXEDIR\\$Download.Filename\"\n\t\tCopyFiles /SILENT \"$EXEDIR\\$Download.Filename\" \"${RUNONCEDIR}\\$Download.Filename\"\n\t${Else}\n\t\t${If} $Download.Verbose == 1\n\t\t${OrIf} ${IsVerbose}\n\t\t\t${DetailPrint} \"$(Downloading)$Download.Name...\"\n\t\t${EndIf}\n\t\t${If} ${IsVerbose}\n\t\t\t${VerbosePrint} \"From: $Download.URL\"\n\t\t\t${VerbosePrint} \"To: ${RUNONCEDIR}\\$Download.Filename\"\n\t\t${EndIf}\n\t\t!insertmacro DownloadRequest \"$Download.URL\" \"${RUNONCEDIR}\\$Download.Filename\" \"\"\n\t\t${If} $Download.Verbose == 1\n\t\t${OrIf} ${IsVerbose}\n\t\t\tCall DownloadWait\n\t\t${Else}\n\t\t\tCall DownloadWaitSilent\n\t\t${EndIf}\n\t\tPop $1\n\t\tPop $0\n\t\t${If} $1 < 200\n\t\t${OrIf} $1 >= 300\n\t\t\t${If} $1 == ${ERROR_INTERNET_NAME_NOT_RESOLVED}\n\t\t\t\tStrCpy $2 \"$Download.Name\"\n\t\t\t\tMessageBox MB_USERICON \"$(MsgBoxDownloadDNSError)\" /SD IDOK\n\t\t\t${ElseIf} $1 != ${ERROR_INTERNET_OPERATION_CANCELLED}\n\t\t\t\tStrCpy $2 \"$Download.Name\"\n\t\t\t\tMessageBox MB_USERICON \"$(MsgBoxDownloadFailed)\" /SD IDOK\n\t\t\t${EndIf}\n\t\t\tDelete /REBOOTOK \"${RUNONCEDIR}\\$Download.Filename\"\n\t\t\tSetErrorLevel 1\n\t\t\tAbort\n\t\t${EndIf}\n\t${EndIf}\n\n\tStrCpy $0 \"${RUNONCEDIR}\\$Download.Filename\"\n\n\t; Verify downloaded file\n\t${If} $Download.Hash != \"\"\n\t\t${DetailPrint} \"$(Verifying)$Download.Name...\"\n\t\tLegacyUpdateNSIS::VerifyFileHash \"$0\" \"$Download.Hash\"\n\t\tPop $R0\n\t\tPop $R1\n\t\t${If} ${IsVerbose}\n\t\t${OrIf} $R0 != 1\n\t\t\t${DetailPrint} \"Expected: $Download.Hash\"\n\t\t\t${DetailPrint} \"Actual: $R1\"\n\t\t${EndIf}\n\t\t${If} $R0 != 1\n\t\t\tStrCpy $2 \"$Download.Name\"\n\t\t\tMessageBox MB_USERICON \"$(MsgBoxHashFailed)\" /SD IDOK\n\t\t\tDelete /REBOOTOK \"$0\"\n\t\t\tSetErrorLevel 1\n\t\t\tAbort\n\t\t${EndIf}\n\t${EndIf}\nFunctionEnd\n\n!macro Download name url filename hash verbose\n\tStrCpy $Download.Name \"${name}\"\n\tStrCpy $Download.URL \"${url}\"\n\tStrCpy $Download.Filename \"${filename}\"\n\tStrCpy $Download.Hash \"${hash}\"\n\tStrCpy $Download.Verbose ${verbose}\n\tCall Download\n!macroend\n\nVar /GLOBAL Exec.Command\nVar /GLOBAL Exec.Patch\nVar /GLOBAL Exec.Name\n\nFunction ExecWithErrorHandling\n\t${VerbosePrint} \"$(^Exec)$Exec.Command\"\n\tLegacyUpdateNSIS::ExecToLog `$Exec.Command`\n\tPop $R0\n\t${VerbosePrint} \"$(ExitCode)$R0\"\n\n\t${If} $R0 == ${ERROR_SUCCESS_REBOOT_REQUIRED}\n\t\t${VerbosePrint} \"$(RestartRequired)\"\n\t\tSetRebootFlag true\n\t${ElseIf} $R0 == ${ERROR_INSTALL_USEREXIT}\n\t\tSetErrorLevel ${ERROR_INSTALL_USEREXIT}\n\t\tAbort\n\t${ElseIf} $R0 == ${WU_S_ALREADY_INSTALLED}\n\t\t${DetailPrint} \"$(AlreadyInstalled)\"\n\t${ElseIf} $R0 == ${WU_E_NOT_APPLICABLE}\n\t\t${DetailPrint} \"$(NotApplicable)\"\n\t${ElseIf} $R0 != 0\n\t\tStrCpy $0 $R0\n\t\tLegacyUpdateNSIS::MessageForHresult $R0\n\t\tPop $1\n\t\t${DetailPrint} \"$1 ($0)\"\n\t\tStrCpy $2 \"$Exec.Name\"\n\t\tMessageBox MB_USERICON \"$(MsgBoxInstallFailed)\" /SD IDOK\n\t\tSetErrorLevel $R0\n\t\tAbort\n\t${EndIf}\nFunctionEnd\n\n!macro ExecWithErrorHandling name command\n\tStrCpy $Exec.Command '${command}'\n\tStrCpy $Exec.Name '${name}'\n\tCall ExecWithErrorHandling\n!macroend\n\n!macro Install name filename args\n\t${DetailPrint} \"$(Installing)${name}...\"\n\t!insertmacro ExecWithErrorHandling '${name}' '\"$0\" ${args}'\n!macroend\n\nFunction GetUpdateLanguage\n\tVar /GLOBAL UpdateLanguage\n\t${If} $UpdateLanguage == \"\"\n\t\tReadRegStr $UpdateLanguage HKLM \"${REGPATH_HARDWARE_SYSTEM}\" \"Identifier\"\n\t\t${If} $UpdateLanguage == \"NEC PC-98\"\n\t\t\tStrCpy $UpdateLanguage \"NEC98\"\n\t\t${Else}\n\t\t\tReadRegStr $UpdateLanguage HKLM \"${REGPATH_CONTROL_LANGUAGE}\" \"InstallLanguage\"\n\t\t\tReadINIStr $UpdateLanguage $PLUGINSDIR\\Patches.ini Language $UpdateLanguage\n\t\t${EndIf}\n\t${EndIf}\n\tPush $UpdateLanguage\nFunctionEnd\n\n!macro NeedsSPHandler name os sp\n\tFunction Needs${name}\n\t\t${If} ${Is${os}}\n\t\t${AndIf} ${AtMostServicePack} ${sp}\n\t\t\tPush 1\n\t\t${Else}\n\t\t\tPush 0\n\t\t${EndIf}\n\tFunctionEnd\n!macroend\n\n!macro NeedsFileVersionHandler name file version\n\tFunction Needs${name}\n\t\t${DisableX64FSRedirection}\n\t\t${GetFileVersion} \"${file}\" $0\n\t\t${EnableX64FSRedirection}\n\t\t${VersionCompare} $0 ${version} $1\n\t\t${If} $1 == 2 ; Less than\n\t\t\tPush 1\n\t\t${Else}\n\t\t\tPush 0\n\t\t${EndIf}\n\tFunctionEnd\n!macroend\n\n!if ${NT4} == 1\nVar /GLOBAL SPCleanup\n!endif\n\n; TODO\n; Function SkipSPUninstall\n; !if ${NT4} == 1\n; \tPush $SPCleanup\n; !else\n; \tPush 0\n; !endif\n; FunctionEnd\n\nVar /GLOBAL Patch.Key\nVar /GLOBAL Patch.File\nVar /GLOBAL Patch.Title\nVar /GLOBAL Patch.Params\n\n!define PATCH_FLAGS_OTHER 0\n!define PATCH_FLAGS_NT4   1\n!define PATCH_FLAGS_SHORT 2\n!define PATCH_FLAGS_LONG  3\n\n!macro -PatchHandlerFlags params cleanup\n!if ${DEBUG} == 1\n\t; To make testing go faster\n\tStrCpy $Patch.Params \"${params} ${cleanup}\"\n!else\n\t; LUNT will add a SkipSPUninstall setting. For now, we ignore the cleanup param.\n\tStrCpy $Patch.Params \"${params}\"\n!endif\n!macroend\n\nFunction -PatchHandler\n\tCall GetUpdateLanguage\n\tCall GetArch\n\tPop $1\n\tPop $0\n\tStrCpy $2 \"$0-$1\"\n\tClearErrors\n\tReadINIStr $0 $PLUGINSDIR\\Patches.ini \"$Patch.Key\" \"$2\"\n\t${If} ${Errors}\n\t\t; Language neutral\n\t\tStrCpy $2 \"$1\"\n\t\tClearErrors\n\t\tReadINIStr $0 $PLUGINSDIR\\Patches.ini \"$Patch.Key\" \"$2\"\n\t\t${If} ${Errors}\n\t\t\tStrCpy $0 \"$Patch.Title\"\n\t\t\tMessageBox MB_USERICON \"$(MsgBoxPatchNotFound)\" /SD IDOK\n\t\t\tSetErrorLevel 1\n\t\t\tAbort\n\t\t${EndIf}\n\t${EndIf}\n\tReadINIStr $1 $PLUGINSDIR\\Patches.ini \"$Patch.Key\" Prefix\n\tReadINIStr $3 $PLUGINSDIR\\Patches.ini \"$Patch.Key\" \"$2-sha256\"\n\t!insertmacro Download \"$Patch.Title\" \"$1$0\" \"$Patch.File\" \"$3\" 1\nFunctionEnd\n\nFunction InstallPatch\n\t!insertmacro ExecWithErrorHandling \"$Patch.Title\" '\"$0\" $Patch.Params'\nFunctionEnd\n\n!macro PatchHandler kbid title type params\n\tFunction Download${kbid}\n\t\tStrCpy $Patch.Key   \"${kbid}\"\n\t\tStrCpy $Patch.File  \"${kbid}.exe\"\n\t\tStrCpy $Patch.Title \"${title}\"\n\n\t\t${If} ${NeedsPatch} ${kbid}\n\t\t\tCall -PatchHandler\n\t\t${EndIf}\n\tFunctionEnd\n\n\tFunction Install${kbid}\n\t\t${IfNot} ${NeedsPatch} ${kbid}\n\t\t\tReturn\n\t\t${EndIf}\n\n\t\tCall Download${kbid}\n\t\t; TODO: Call SkipSPUninstall\n!if ${type} == ${PATCH_FLAGS_OTHER}\n\t\tStrCpy $Patch.Params \"\"\n!endif\n!if ${type} == ${PATCH_FLAGS_NT4}\n\t\t!insertmacro -PatchHandlerFlags \"-z\"    \"-n -o\"\n!endif\n!if ${type} == ${PATCH_FLAGS_SHORT}\n\t\t!insertmacro -PatchHandlerFlags \"-u -z\" \"-n -o\"\n!endif\n!if ${type} == ${PATCH_FLAGS_LONG}\n\t\t!insertmacro -PatchHandlerFlags \"/passive /norestart\" \"/n /o\"\n!endif\n\n\t\tStrCpy $Patch.Params \"$Patch.Params ${params}\"\n\t\tCall InstallPatch\n\tFunctionEnd\n!macroend\n\n!macro ExtractCab name filename path\n\t${DetailPrint} \"$(Extracting)$Exec.Name...\"\n\t${IfNot} ${IsVerbose}\n\t\tSetDetailsPrint none\n\t${EndIf}\n\tCreateDirectory \"$PLUGINSDIR\\$Exec.Patch\"\n\tStrCpy $Exec.Name \"${name}\"\n\tStrCpy $Exec.Command '\"$WINDIR\\system32\\expand.exe\" -F:* \"${filename}\" \"${path}\"'\n\tCall ExecWithErrorHandling\n\t${IfNot} ${IsVerbose}\n\t\tSetDetailsPrint lastused\n\t${EndIf}\n!macroend\n\n!macro InstallSP name filename\n\t; SPInstall.exe /norestart seems to be broken. We let it do a delayed restart, then cancel it.\n\t${DetailPrint} \"$(Installing)${name}...\"\n\t!insertmacro ExecWithErrorHandling '${name}' '\"$0\" /unattend /nodialog /warnrestart:600'\n\n\t; If we successfully abort a shutdown, we'll get exit code 0, so we know a reboot is required.\n\tLegacyUpdateNSIS::Exec '\"$WINDIR\\system32\\shutdown.exe\" /a'\n\tPop $0\n\t${If} $0 == 0\n\t\tSetRebootFlag true\n\t${EndIf}\n!macroend\n\n!macro DownloadMSU kbid name url sha256\n\t!insertmacro Download '${name} (${kbid})' '${url}' '${kbid}.msu' '${sha256}' 1\n!macroend\n\nFunction InstallMSU\n\t!insertmacro ExtractCab '$Exec.Name' \"$0\" \"$PLUGINSDIR\\$Exec.Patch\"\n\tCreateDirectory \"$PLUGINSDIR\\$Exec.Patch\\Temp\"\n\n\t; Set %ConfigSetRoot% to where the files are stored. Lenovo Windows 7 RTM images have been found to globally set this\n\t; to C:\\Windows\\ConfigSetRoot, which doesn't exist. When Dism reads the unattend xml, it tries to look for the cab\n\t; there, and fails.\n\tSystem::Call '${SetEnvironmentVariable}(\"ConfigSetRoot\", \"$PLUGINSDIR\\$Exec.Patch\")'\n\n\t${DetailPrint} \"$(Installing)$Exec.Name...\"\n\t${DisableX64FSRedirection}\n\tFindFirst $0 $1 \"$PLUGINSDIR\\$Exec.Patch\\*.xml\"\n\t${Do}\n\t\t${If} $1 == \"\"\n\t\t\tFindClose $R0\n\t\t\t${Break}\n\t\t${EndIf}\n\n\t\t; We prefer Dism, but need to fall back to Pkgmgr for Vista.\n\t\t${If} ${IsWinVista}\n\t\t\tStrCpy $Exec.Command '\"$WINDIR\\system32\\pkgmgr.exe\" \\\n\t\t\t\t/n:\"$PLUGINSDIR\\$Exec.Patch\\$1\" \\\n\t\t\t\t/s:\"$PLUGINSDIR\\$Exec.Patch\\Temp\" \\\n\t\t\t\t/quiet /norestart'\n\t\t${Else}\n\t\t\tStrCpy $Exec.Command '\"$WINDIR\\system32\\dism.exe\" \\\n\t\t\t\t/Online \\\n\t\t\t\t/Apply-Unattend:\"$PLUGINSDIR\\$Exec.Patch\\$1\" \\\n\t\t\t\t/ScratchDir:\"$PLUGINSDIR\\$Exec.Patch\\Temp\" \\\n\t\t\t\t/LogPath:\"$TEMP\\LegacyUpdate-Dism.log\" \\\n\t\t\t\t/Quiet /NoRestart'\n\t\t${EndIf}\n\t\tCall ExecWithErrorHandling\n\n\t\tFindNext $0 $1\n\t${Loop}\n\t${EnableX64FSRedirection}\nFunctionEnd\n\n!macro InstallMSU kbid name\n\tStrCpy $Exec.Patch '${kbid}'\n\tStrCpy $Exec.Name '${name} (${kbid})'\n\tCall InstallMSU\n!macroend\n"
  },
  {
    "path": "setup/Patches.ini",
    "content": "[Language]\n0401=ARA\n0403=CAT\n0404=CHT\n0804=CHS\n0405=CSY\n0406=DAN\n0407=DEU\n0408=ELL\n0409=ENU\n0c0a=ESN\n0425=ETI\n040b=FIN\n040c=FRA\n040d=HEB\n040e=HUN\n0410=ITA\n0411=JPN\n0412=KOR\n0427=LTH\n0426=LVI\n0413=NLD\n0414=NOR\n0415=PLK\n0416=PTB\n0816=PTG\n0418=ROM\n0419=RUS\n041a=HRV\n041b=SKY\n041d=SVE\n041e=THA\n041f=TRK\n0424=SLV\n042a=VIT\n042d=EUQ\n0c04=CHH\n\n; Windows 2000\n[W2KSP4]\nPrefix=http://download.windowsupdate.com/msdownload/update/v3-19990518/cabpool/\nARA-x86=w2ksp4_ar_d2a46163d29f14829f230729e2c0821.exe\nARA-x86-sha256=61de2d20706d80de285fc241a4d82fe2d7849926b3f0f1b483b2065dbaf816f2\nCHH-x86=w2ksp4_hk_89b5425007c388c1c146756557915ab.exe\nCHH-x86-sha256=51df3e5cac2803d940af803cbd4aee523390646898f3f8af933a3b188db85b0e\nCHS-x86=w2ksp4_cn_a6d8fab4fe598cf1d5c3cf257b11fc8.exe\nCHS-x86-sha256=57550fe61f5ea1d151216ad7bc5f6267edc63887b28a93318b3e60a04071eb95\nCHT-x86=w2ksp4_tw_baf16f1aaae8be095127f4a46dded69.exe\nCHT-x86-sha256=a4cdaa96289d9243050aba1ee69c304daf05dbcb1a52a4a523437ed565fedac7\nCSY-x86=w2ksp4_cs_d055279f80e684debdac3f4a230ab2c.exe\nCSY-x86-sha256=f72a915d72160c413e6c52442bd90a097d7f09a0740a5054c7a771f146a769ee\nDAN-x86=w2ksp4_da_e9afc8657e31b34730ea2cda85ece36.exe\nDAN-x86-sha256=a91211b82257a457cb5993c704409ba6f74d1dad0bfcc552824a228ff7539dc6\nDEU-x86=w2ksp4_de_00d4912b4703c77c46cf53a8a8f2027.exe\nDEU-x86-sha256=b0648871eaf9025dfe263d4cd1a8afcc7c279d5663c8044e9c5d7d39261a40c7\nELL-x86=w2ksp4_el_55eeec8b3b303e61cb0ddab4d943cd1.exe\nELL-x86-sha256=01f9394865b8f67da536ff2ea326290107bcf61fc4e73c6d522000782e8cec16\nENU-x86=w2ksp4_en_7f12d2da3d7c5b6a62ec4fde9a4b1e6.exe\nENU-x86-sha256=167bb78d4adc957cc39fb4902517e1f32b1e62092353be5f8fb9ee647642de7e\nESN-x86=w2ksp4_es_51bae94c83adcf9f0ad3155bcf3ddfc.exe\nESN-x86-sha256=aa96ffdfbe5a3c19cc4f0c93b1bfaadaefe49ac108492407a4be26ca0bbee25d\nFIN-x86=w2ksp4_fi_794e2bba5a5286287dccf7943055e46.exe\nFIN-x86-sha256=3905fd7abb14b57e9eb2e302ccf61b8fd19f54522a0eb88e533c9f56bdec354f\nFRA-x86=w2ksp4_fr_4556797dfc88fdd4be13d638bcfb655.exe\nFRA-x86-sha256=ec9c1ad3c90076d420f1f5424e328cdb5f7c689226544b0587d24ab1f1664a3f\nHEB-x86=w2ksp4_he_b8e8519d7ae067f49ce742b59e8bcce.exe\nHEB-x86-sha256=6be441290aaea01232fb9a27c6f73f3324f5bfc03b9676a8cbade7873fe1cfd8\nHUN-x86=w2ksp4_hu_1de3d254582472c714af315c85bf2b3.exe\nHUN-x86-sha256=3e4436b8cfcc92da30ef19c260e54db6920d17e389a1bbf27ecb777427449a45\nITA-x86=w2ksp4_it_6395c3848397fa6cf05e0c3d1923205.exe\nITA-x86-sha256=4fcaefd8de48c335e399980f892fc362d6e52a572e4eac4a24cf9ef009820778\nJPN-x86=w2ksp4_ja_beb10c6f96ac4bb93f6e192b419a50f.exe\nJPN-x86-sha256=4cb8034dd6af83285d36d5b754b87bbfc3986ad1f7566909ef5580dec90c77b0\nKOR-x86=w2ksp4_ko_8bd7a0eedfaf1fb30439abdad43c347.exe\nKOR-x86-sha256=1ded8137c7c7beab2b54d4fe42f856ce865551157d31d926dab3d19aa31401b9\nNLD-x86=w2ksp4_nl_07596ad911493b966a18b6626e4a1c4.exe\nNLD-x86-sha256=538d93c8e511f5c2d5ff9e7099db7b051629429f87ad8830f6680fdd8a60dcad\nNOR-x86=w2ksp4_no_64602c5f513d7244dd5790c6a11577e.exe\nNOR-x86-sha256=070a646080f7ffeaefdde1deeeaa0cf4460f53e12dc60c9fe3ca95f282b843d5\nPLK-x86=w2ksp4_pl_5248f4f8262d599079f5ee246cafc28.exe\nPLK-x86-sha256=67a8e6dcb37394942128b4b0adefc357e00af50aa02204bd250d8ae6dc8a632f\nPTB-x86=w2ksp4_br_a90a49821bf9b5e37810e4c453a5128.exe\nPTB-x86-sha256=e0e2dc33012cde1ee31d2741548e87f05e6a703b2f408632bdfaa08fdc625870\nPTG-x86=w2ksp4_pt_cdf5d5ecd163862ff6f641b0a4d4168.exe\nPTG-x86-sha256=c9863c55a76d281c42970a98369947d8be9b114b0f413226ac832bf7b77df28b\nRUS-x86=w2ksp4_ru_980742b1376cf5614a9e10705952dcd.exe\nRUS-x86-sha256=bb643c5b0eb8ad7acac2c50118fe1559e257292554b8261a258b7a8ca122d499\nSVE-x86=w2ksp4_sv_c46814adb550c5184297a290acd9d25.exe\nSVE-x86-sha256=6d8df02f8505e48d70070450d61d1b8ce868ead8db95f29e7d5cedd56f99091c\nTRK-x86=w2ksp4_tr_3d5c002a300e271049b18acdc569d83.exe\nTRK-x86-sha256=ef6440e780bd8b37724d5dacdafb51333f7455e6346998682facd068a4c31a7d\nNEC98-x86=w2ksp4_ja_7cf59dd6babe7afcf1d7489b40941a8.exe\nNEC98-x86-sha256=ca03755cd266b885cfc964f7de5370a65c2726f3ff6165b3b11b25fd1f44b3b1\n\n[W2KUR1]\nPrefix=http://download.windowsupdate.com/msdownload/update/v3-19990518/cabpool/\nARA-x86=windows2000-kb891861-v2-x86-ara_73c7fa3d013476d3a2b8ff8569e3bc82f1ad1582.exe\nARA-x86-sha256=93b8e14e20a07b3cf781d5ccf2b1850a568f243116ce459cc1cf30bbddcb9ba4\nCHH-x86=windows2000-kb891861-v2-x86-cht_4b7c5abb4e313f5cbd5f139ea7094145e2a80b5a.exe\nCHH-x86-sha256=f76dc699682b8098d0756fa6da3b2b87ac967d8e573e3ef413697be91e51e8cc\nCHS-x86=windows2000-kb891861-v2-x86-chs_fe99e12ef1944cc43ad2891797ac9a7698e194d9.exe\nCHS-x86-sha256=2199076d04b3f229600ab5aeddeb64f699422cdcde904f68bb3b2f532f39030d\nCHT-x86=windows2000-kb891861-v2-x86-cht_4b7c5abb4e313f5cbd5f139ea7094145e2a80b5a.exe\nCHT-x86-sha256=f76dc699682b8098d0756fa6da3b2b87ac967d8e573e3ef413697be91e51e8cc\nCSY-x86=windows2000-kb891861-v2-x86-csy_a18b67cb73d57b03d9ae276097e33ae870acc77d.exe\nCSY-x86-sha256=026ce759801ee991f88672effc2185323ea75aee6857beb0e5618d580496d16c\nDAN-x86=windows2000-kb891861-v2-x86-dan_0b5521ef897e7859fefd1ceace978ba06a67caf6.exe\nDAN-x86-sha256=8bd53e11a8969431d53dea44ebebd4b49ec33ea21cb406009662e9f0154ef8aa\nDEU-x86=windows2000-kb891861-v2-x86-deu_e2c13be516127d3b1de17a60b9fadfb11862b86b.exe\nDEU-x86-sha256=dca1493c8fab3ef59a5650534991eb1d7375e06a6cc321e21955243058e9d05f\nELL-x86=windows2000-kb891861-v2-x86-ell_e04a73c2761a323c0b266f766c5cc3e6f9389b76.exe\nELL-x86-sha256=3694af2b5e8f87a0e12c27add4286cf21c352c9463084f780329ad42d01ec243\nENU-x86=windows2000-kb891861-v2-x86-enu_f118bd276f4211929719961a2e929b620c1a2234.exe\nENU-x86-sha256=55e09d2a5a8390338a7bc1321844f1c3e716898245d5f843c8554a16dbd097c9\nESN-x86=windows2000-kb891861-v2-x86-esn_b9f1a26cc909adca730ed20344cf712480c9877e.exe\nESN-x86-sha256=b6bc21196326433b8791481c23f089b07b13556e573d0b16b0f4320e90649d96\nFIN-x86=windows2000-kb891861-v2-x86-fin_318d6b6a1ac04e9c9c033d53d7fcd47748e7f75f.exe\nFIN-x86-sha256=5cc26e029b6b62cb2dcbfc5193dd8f69454a913ed2dc39493db7e7a759b0cd11\nFRA-x86=windows2000-kb891861-v2-x86-fra_8d036d92d4895bf23b0e9b714937b5b211b1d592.exe\nFRA-x86-sha256=fd7c3685cae1b695ce6b723335998990472090c2ecd89394d9a767a1fe21697d\nHEB-x86=windows2000-kb891861-v2-x86-heb_3f08f4037db77733e5de5e1cb89e5bedebb4d249.exe\nHEB-x86-sha256=71473829b8f27b9123298e9bb918afd2d8718805c7cacaddfb3c3a21c01413f3\nHUN-x86=windows2000-kb891861-v2-x86-hun_d94efec685c682825592e04130ea1b0bf3c4e532.exe\nHUN-x86-sha256=28ccc4c207d149f2f7fbcafaf44582e746f0e66ad7de74be410d4f312d71f3df\nITA-x86=windows2000-kb891861-v2-x86-ita_aaf013cd7a046d6069c0250e8e7f0bf8582c3e31.exe\nITA-x86-sha256=65d1246df2f4f3e21203948cfbf4491ded95abe6f8fcae32369ce30cfa8277af\nJPN-x86=windows2000-kb891861-v2-x86-jpn_d5fa54ab3547a38fae6260e28227a6fb0ed4a827.exe\nJPN-x86-sha256=e824af4aec05a2ef10481ae83d7d1330bdb2dae596bc99172f4d544e06363795\nKOR-x86=windows2000-kb891861-v2-x86-kor_10db79be10624535fb3926781db5a02efb2b5503.exe\nKOR-x86-sha256=d54987fbadd52df10f93f23a20715d4801171f647349b9754e12365bbb71e9aa\nNLD-x86=windows2000-kb891861-v2-x86-nld_33cbe9c7dedc85d22f6fc281aefef77b9d26ce6f.exe\nNLD-x86-sha256=d6743083b1fbc06dc0365874cdeb945790cc492f15c8a878469adb32277c202c\nNOR-x86=windows2000-kb891861-v2-x86-nor_6dce467272a1cb3375bc74bec901a581d55661e6.exe\nNOR-x86-sha256=5bbc0261a1844368ecea9d6074a38a67ce2cf3324015bcf135b2a2c5d22be8ed\nPLK-x86=windows2000-kb891861-v2-x86-plk_1cded665d65ea7614b7b33989efb81a4b91cf674.exe\nPLK-x86-sha256=93a0a1d8bf77cb13a7b301d2c1203f3eeb568cb904e2ec51e969e4f8809905bc\nPTB-x86=windows2000-kb891861-v2-x86-ptb_d1a5c2bf1c9393f64748bab275339d09f767a1d9.exe\nPTB-x86-sha256=9003a81fc261b0b7bb1ad99645ee956f5ce504c2a228c2b887a3e54e8f29e647\nPTG-x86=windows2000-kb891861-v2-x86-ptg_ad4fd8ab12ee20236a44cf3e550ee55a3e8019ec.exe\nPTG-x86-sha256=da071d194b93068a915120ad0b5e02f8977f0f4eb75d967102ff54ce850cf40f\nRUS-x86=windows2000-kb891861-v2-x86-rus_2d2b365faf8fc71be99122fa89b8eea97ae40abd.exe\nRUS-x86-sha256=d531f30ac747686856d51eaa2fee1e0373d40f165a8637a75600d7339d33eaa8\nSVE-x86=windows2000-kb891861-v2-x86-sve_e694a39661f9a6531c1b9367ed6fc9458ae536fb.exe\nSVE-x86-sha256=cf8f87e0f938f499f93f2fdc72280ebd1fc45c6a12f51e019cacc146aad9b259\nTRK-x86=windows2000-kb891861-v2-x86-trk_31ee7902955f771a63b8bd6165fa41119624ac23.exe\nTRK-x86-sha256=42590ad2ccebf909bd7cfd34bc6ff03a7dd768cea75a9bc7f1933865e7aea7d4\nNEC98-x86=windows2000-kb891861-v2-nec98-jpn_ca1372faeb77c66ded958bd3dc8e3344e1cd4260.exe\nNEC98-x86-sha256=09cea1fa3d33932eecfb50d3a4ae3fa19d1031d810fa881df87814bc7308ad8a\n\n[IE6]\nPrefix=http://download.windowsupdate.com/msdownload/update/v3-19990518/cabpool/\nARA-x86=ie6sp1-wucab-ara_b1720a72becd05142cb4ccbb23205c76b51d29e2.cab\nARA-x86-sha256=00d97a076490ba149036947a8b7bdcdf0f3da0c9beeb27964111c96665516805\nCHH-x86=ie6sp1-wucab-cht_1899bffb8ebf36c0a58686f04cc1d721c419792d.cab\nCHH-x86-sha256=e97b1998b6018275d7689a1a40f2a0480bb6977f3bda4f4aa16ee98e2471a511\nCHS-x86=ie6sp1-wucab-chs_6d93ab8525d3b6f775faf692caaa4c8267c8a22b.cab\nCHS-x86-sha256=ebe63b68deed463ce93a5cbf396b23fcb4a34db4e88c55cfdf6e67661db4bc69\nCHT-x86=ie6sp1-wucab-cht_1899bffb8ebf36c0a58686f04cc1d721c419792d.cab\nCHT-x86-sha256=e97b1998b6018275d7689a1a40f2a0480bb6977f3bda4f4aa16ee98e2471a511\nCSY-x86=ie6sp1-wucab-csy_2789a030bba2128fc90e0475e2530c300ed5defc.cab\nCSY-x86-sha256=62b6399918816a72ac05bf3e169f9b206d42e3d9e7c86b35b9a09db05b88eabd\nDAN-x86=ie6sp1-wucab-dan_0c178b2634a97a4879c172797b21a59e567d18e6.cab\nDAN-x86-sha256=4a9b5c4afc04f70fa1533191f8f38672ddf4c956d89a8cacc4fdf97b717b9aa3\nDEU-x86=ie6sp1-wucab-deu_2a13ac14e403ad4a1c6877fe478067e81ac20da8.cab\nDEU-x86-sha256=0a5775809900dd72ab8ab6ed9f95c8f2cd05e1de22fd00a2d125cb02371e0ed2\nELL-x86=ie6sp1-wucab-ell_15a4e43c8922f658eddd5d57d23c11e0fa55dce9.cab\nELL-x86-sha256=c5ecfd53d031f61ca77decb3651bddeda4460e0d2a3ab99ca0d0d76f3b2e5f64\nENU-x86=ie6sp1-wucab-enu_91192253c8d3cf7beff22e68ae1fdff9638bf546.cab\nENU-x86-sha256=57d10f32b9312f8160cc613f61abb10f950e20040a20053bcd91ee436e1fb342\nESN-x86=ie6sp1-wucab-esn_a9c53ad93bae78becf2b06f6d317ef7ef66a2abe.cab\nESN-x86-sha256=052e80ae42941a96e0ab11cffbf49ce44cef76c6f14ce2820db176d3c7179b22\nFIN-x86=ie6sp1-wucab-fin_1a369fcc86e803128144e17246e16d0a27a8c35b.cab\nFIN-x86-sha256=ab9773eebce72f1780c2f27f2a3aba83dcfce646c501dba804abd506d7cfdf49\nFRA-x86=ie6sp1-wucab-fra_0bc4219b3119a127503cd93863cfedfb1e37bd55.cab\nFRA-x86-sha256=4b9e4264be2725fd94e601ad9b76f9b628cd9283ace4854ac8ef9363759a0020\nHEB-x86=ie6sp1-wucab-heb_70518dd1d09d702975b8e44a22c88e139f168975.cab\nHEB-x86-sha256=6c6d21364d8b5b0b33374db9cb684a82b39cc30f6ada5d98f112b2e723651284\nHUN-x86=ie6sp1-wucab-hun_1eeed3e7b3e6bd311c17c0d97f67ec12df8b4b85.cab\nHUN-x86-sha256=3ec506555388ea9dd12ca6c07dbd41c1d0a07b11279c3f8a9077cdf14b3b5f6e\nITA-x86=ie6sp1-wucab-ita_2c6ab20b41114e53646ebb56ff6d269fd86fba36.cab\nITA-x86-sha256=efff03fe5c1ccef643358600014c5204498eb50a735295a298d3d1f3ea7622a4\nJPN-x86=ie6sp1-wucab-jpn_b1e1e8b9dbbf440d8964ec375348674502ef0728.cab\nJPN-x86-sha256=6122c7ad1aa555de13b0a1ac349799bcbecad687b9011acee482ab33192bc0cf\nKOR-x86=ie6sp1-wucab-kor_f61474b056ae37c5e9670978c6d3b24f4800d7f5.cab\nKOR-x86-sha256=5696ce7d9a3dfb25110f719d5aa0deef51ba48e7ee1ea43fdd8bec66ac10b70e\nNLD-x86=ie6sp1-wucab-nld_3fd676fe34f93471f4db9a0a1f3ef5c3ed8e5f43.cab\nNLD-x86-sha256=904d8d1301835b025bd65e477b5e84302f797dd7c16c3e88ae2e361cb970dd7b\nNOR-x86=ie6sp1-wucab-nor_72a81d06462c5a66f9531f4f226b13463698dd24.cab\nNOR-x86-sha256=c4900351cc950a8de85c028849b3291449682cdfdc81392f5b2db73010155492\nPLK-x86=ie6sp1-wucab-plk_14889750985a9d29490886c2e901ef3bc69c4ff5.cab\nPLK-x86-sha256=4154b875fdb879d68804e8c1048d59b7438ddb87f15b445154c1c32282d33892\nPTB-x86=ie6sp1-wucab-ptb_448df44aea5d853e4954d48411b1953569df23c2.cab\nPTB-x86-sha256=cfe4bae54599de1e334a3158e8e249d9200b6be3497d19a52d9bc8c8189c71d0\nPTG-x86=ie6sp1-wucab-ptg_5892593c72f702ba6c7d88b47c2bd7c5707081fd.cab\nPTG-x86-sha256=d6cd7ae8d40d9e8b6c171f3cdfb62148e83838ad8672c26a6d3d0e20e565ccab\nRUS-x86=ie6sp1-wucab-rus_842c289d0887bbe2e4edea1ff3763addc8d77db5.cab\nRUS-x86-sha256=f9b4c82b5cc91595d1e4241c414b7ca04c4e0ee4955e9f69b1ad4673c6634577\nSVE-x86=ie6sp1-wucab-sve_db8dcfef073f2df327fc3706d9a141b6124cfed0.cab\nSVE-x86-sha256=5ce56fb70e8cf61c0f0f532406433ed5372c87e3bb1867e3b519e83bb3902938\nTRK-x86=ie6sp1-wucab-trk_64479241feb2f783f851b16791d5d1c684d94a66.cab\nTRK-x86-sha256=f97f243cb541f6f9af013b3e6185c87c818e18810a773daa2d654b7c0a660e20\nNEC98-x86=ie6sp1-wucab-jpn_b1e1e8b9dbbf440d8964ec375348674502ef0728.cab\nNEC98-x86-sha256=6122c7ad1aa555de13b0a1ac349799bcbecad687b9011acee482ab33192bc0cf\n\n; Windows XP 2002\n[XPSP1a]\nPrefix=http://download.windowsupdate.com/msdownload/update/v3-19990518/cabpool/\nARA-x86=xpsp1a_e31fa91a89a658f3d586aa1c9992b01af3e11fe0.exe\nARA-x86-sha256=d41b76b70a0552b4e418615945d18dce19d454b0f0beb98f19a2d18a2b8c00e4\nCHH-x86=xpsp1a_c7c76e11bb0c1bbabefe5d4576851f3.exe\nCHH-x86-sha256=9597aec1bcada2a50170f40f9b311e6ab194a9b098517d8943524cf93774b7d3\nCHS-x86=xpsp1a_8bd1bde300df00e7bd6831ac37cb87e437e2b729.exe\nCHS-x86-sha256=dd4eb6391214e2d1295fc39aa38b7f374a29c8463de344c651143a6025b254e8\nCHT-x86=xpsp1a_98472ed83897ec104c8496fcd661e6f289ef5090.exe\nCHT-x86-sha256=e2f24bcd9a1f328cd812287b677f75133ab4adf6f4d30d45a3b1700eeef42ecd\nCSY-x86=xpsp1a_57f0caa259089b1477a162f220d08b1c4bc86010.exe\nCSY-x86-sha256=ab2bf6c2dd0159dea96495a546fad42a29eee19a42b8af75e2296898fcca4d74\nDAN-x86=xpsp1a_619cc6cf6a98f75d18f4d6eddb662ebfe4a44223.exe\nDAN-x86-sha256=046b465b71464f132e15eb62b99a97aff6ac9264eaa987c7f1c69e141fe20892\nDEU-x86=xpsp1a_cb7d182645ea1019741d9d94732c29251294acdc.exe\nDEU-x86-sha256=2d291429f38b58f0ced45e31e2f9217b0416b961f97a1ebf00deb0e869caebec\nELL-x86=xpsp1a_47666b37340d6224eeb40f67ae16da3e457e64e0.exe\nELL-x86-sha256=79449a7703689b6e735d869a0c6bcbb7053ed681e8f9dcf58577de951f2d79a9\nENU-x86=xpsp1a_8441053935adbfc760b966e5e413d3415a753213.exe\nENU-x86-sha256=265bcb1f9bd3ee01dad3d1271a3d149a468d50413b0fc46e6f42f0f79038899e\nESN-x86=xpsp1a_e675d08b12d20ca372ba6d3b502074000981870f.exe\nESN-x86-sha256=2ed011aa23a09bcdb7d49280a0f33db018f32c580aef1ee0c3f182a910a0c7ca\nFIN-x86=xpsp1a_8a254d89daeb22f4f4ccb9b0861e83cb5ea66196.exe\nFIN-x86-sha256=3d7043ae996f25564a6ddef5c7fc32852b2d83b576f768b8942a687a3a2bb690\nFRA-x86=xpsp1a_fe557a68aed45003151f647189767aeb2bed53a9.exe\nFRA-x86-sha256=22bfb16e30ccea9dc14186173df595ba7d196e1091e5ab480c29780be4586d7a\nHEB-x86=xpsp1a_499ee7440dba140909fe4d3a86fffd8ec4a1d473.exe\nHEB-x86-sha256=f6ce365778bf7784cc3cd48875ea3eb16043884212ce4cfdb429ce198e9c55c1\nHUN-x86=xpsp1a_9f24000eb4b69aaa975edeb578b4cd22f971318b.exe\nHUN-x86-sha256=a37f9926429e8db1e70cfdde9cc9aafef2ca052577b02740a991f69bff24b15f\nITA-x86=xpsp1a_4f5aa5833bee00c3309fc03d6eafcc6e6f4e2eea.exe\nITA-x86-sha256=9f4d467b35777162a02782971e58e3ce82bb951877c68869f36ccd081bffac42\nJPN-x86=xpsp1a_a03d9d2ad30a478ca4c2a51c1de26eaca021e4d1.exe\nJPN-x86-sha256=09671231da2e8e2a711d2efb3e02a903f2520403fbee2022d3d86a9ee8afbcf8\nKOR-x86=xpsp1a_e79e224ef297b77c0a23a9440f919c8d64e6554a.exe\nKOR-x86-sha256=cc2af43b3b59912aaff3d8894f6566e57c3d4ef0826050ef89715786fd0d02ca\nNLD-x86=xpsp1a_f1a0183ddc01376d27f374b69fa9364647b336b2.exe\nNLD-x86-sha256=c7cded9cb347ef7230cdb2f31eded2b49e6502c298afb35de0edc9cae4826a6a\nNOR-x86=xpsp1a_487a5bbfcf9164a0cda2bbe31f9d4aed6c5455a2.exe\nNOR-x86-sha256=28eba2a1544172959aac062fbb31cd45c030707ccb73e485c4d98a0267a028f6\nPLK-x86=xpsp1a_d2a89787c9ac8ed660684686930513663bc723ba.exe\nPLK-x86-sha256=5f389bf3c8f17c95f35e0dca355038ce387b687d64cf9336c34072b7e9e8567e\nPTB-x86=xpsp1a_87ec9b54ce8b93f7319b2158cbb0fa1de47d48df.exe\nPTB-x86-sha256=e16a63d103757161c4ac25dba10c07d50da79601a2321a4c7071ef30c0e57137\nPTG-x86=xpsp1a_625bc5ebcc1306c2632c1b1a60a6f8f30f230cb9.exe\nPTG-x86-sha256=1efaaee387502f2c6398ecc4f2472acd8b6b07544b3051796cb8aa06aec26566\nRUS-x86=xpsp1a_b5151f669462b3154faf93d48e10beae1b0339aa.exe\nRUS-x86-sha256=30b74327cbd07ec74f89ee4a150deac5943e5885737f3a28f7cbfcc2423de824\nSVE-x86=xpsp1a_8f11213e01d65c883a95b8871b6134e179e09941.exe\nSVE-x86-sha256=d7798916c5c6187336fc8ab4e0e4a902d6c493102ada6e5cc60c84b857732207\nTRK-x86=xpsp1a_a2bc3da0f0a3d366c78d4c51ea6aabbb2dd0d545.exe\nTRK-x86-sha256=e06c6e90f4964cc2ec4d4436ab21f273dacdbcc9e8249890e037aba4b9ea2527\n\n[XPSP2]\nPrefix=http://download.windowsupdate.com/msdownload/update/v3-19990518/cabpool/\nARA-x86=xpsp2_a001b2b27b0f748ab89bd28fa45359f28f95ffb6.exe\nARA-x86-sha256=e0b06ae32ff73af4d69ed39da405c07b0e04d66a031244e48c5b3414ca781e92\nCHH-x86=xpsp2_546c11a0a5a41e90ae5f021f234d9abad5a0a25a.exe\nCHH-x86-sha256=8b4887a3f5de5017f2e61159fbe1f7b1e48feda6ed605134aa9ffe00c385fbf5\nCHS-x86=xpsp2_554ee954bae0f65e88b706cf9b9fd733c02fa397.exe\nCHS-x86-sha256=5e706191fb7cf002908a974639b4a0243031d55958332969b508503c1bbafde7\nCHT-x86=xpsp2_66d8ba2cbf90737010a45e2b5969c9a779ab1d35.exe\nCHT-x86-sha256=a9160f4017dc0e3a595909dae517675ddc7b35b29499826807b8c127f4e5a36c\nCSY-x86=xpsp2_767f81c9d0154bfa21d19a49e0b27ede9f93190a.exe\nCSY-x86-sha256=a2c0a886d946e016e70f809f576366c5b1fd267e30a67da0cabff9d6c1d4f709\nDAN-x86=xpsp2_e60a2b567fda2ab2cf4629700cf65cd3f4d46b0d.exe\nDAN-x86-sha256=4b98e4230b6201bfd699f739691420e719c176abba4f4070525583fe0082e00e\nDEU-x86=xpsp2_ac8d3101744ff56f74a4de941dc04a7e567c8ba7.exe\nDEU-x86-sha256=05561c851b83fe3631cc83ef1c793086bacd8ec773e69d73d74907839b0eb760\nELL-x86=xpsp2_fd86a331f91bc16185e88e6706db859cb27264d1.exe\nELL-x86-sha256=adfd2d30860e40380e8156a7bf793c229df1698abe6d7d02123e6ff685d65bfe\nENU-x86=xpsp2_33a8fef60d48ae1f2c4feea27111af5ceca3c4f6.exe\nENU-x86-sha256=8e4c617eb3b8c61f5d8011aa0e692829a5166bd73e9064e5d318f4579dcc8dfa\nESN-x86=xpsp2_8e7e8de62676d994a7412df190fcdce848f25cf0.exe\nESN-x86-sha256=2e6cf4d610b63b889cfc9aff5730ccf9fbbb4b3d74a6b99dd2eea31343647706\nFIN-x86=xpsp2_2feacc1ad5a703d508e9aee4c2fca1e0b9ca9962.exe\nFIN-x86-sha256=099a7960283c0c43bdee5037e782b8aefa37b9d00a30e47530063307987f217f\nFRA-x86=xpsp2_da94a031147ebd6f8d02eadb7972801843a533bb.exe\nFRA-x86-sha256=f6102b86d30e88573fe98e1ecddbf319430a57ab8c507255dc32e8632e341866\nHEB-x86=xpsp2_76096ed9f2218ac7a14472cbf435f380ffc1c2f6.exe\nHEB-x86-sha256=4b8cbbddce12131f404c2fe714fa0d68dd7f086a09fe136651a0ab577c004d6c\nHUN-x86=xpsp2_bd03a3d2a28de2de9e58da3e5dec888ffae25aca.exe\nHUN-x86-sha256=686699d2e8b970fa078e4fde690c6f214c112a8590f59eb3e4bbc59c8e35f522\nITA-x86=xpsp2_1334fdd285666bfd821eef8590914f188b1bcc0c.exe\nITA-x86-sha256=e68e3d6c2640bc227fffb99ef00d92d08e9f3e4292f6f6d4fc745679ff26dd7f\nJPN-x86=xpsp2_d36c0a7046f2dbe29dfff33b6dbb6bb4574bbd7d.exe\nJPN-x86-sha256=08d71b3c17b5654c32266b89c37cc0e7de443bcc790e38bbd0d9857c50f0ddb0\nKOR-x86=xpsp2_4a6b32f007fe94a2a8b4542fc6778582ef4245e3.exe\nKOR-x86-sha256=665731c61e24dcf79df2cc5b38b3bff773f136b89038d612e98f1ca147041201\nNLD-x86=xpsp2_64551a535981fbcd9c2bac3f91df30c6b3610725.exe\nNLD-x86-sha256=cd4680eec0a420884d2bed659d54e01d0603cfda1bf7c98b664301bdd01b3dc9\nNOR-x86=xpsp2_ace2994463597f9cb7cb059e1dca2a87c12bf278.exe\nNOR-x86-sha256=06aa6e675290005a6fdb7d632bba433ab3dae1b0880c56c2eae2b475f5c7142c\nPLK-x86=xpsp2_8aefc12abade033f2f093786646206fbb70cbb5d.exe\nPLK-x86-sha256=095a80b203226421787973f7a2700aefe551aec7a00f23bb2c1610d695a8c858\nPTB-x86=xpsp2_bcbc1bbb2c493dd0a942d13695b18da0400188f8.exe\nPTB-x86-sha256=1f1404dd95af19341c1e8dab480d25dccfa5d343836a2d85a6f4366df0b9145e\nPTG-x86=xpsp2_db1f7c486f0eda249d77ae91c858a162cefb769b.exe\nPTG-x86-sha256=338309ca7abc25cae6c6ec8ebd33e7e222a8d31c967079f592eb8950a9c05a3f\nRUS-x86=xpsp2_72946fbe955201f2387430963d4372cda7cac392.exe\nRUS-x86-sha256=eef47682b0d173df28148c9e8f9baf26fd849dea6247c3c0f44ec246b8dc39fc\nSVE-x86=xpsp2_3ff578d759e77df91effefe34a42030b8ada1c24.exe\nSVE-x86-sha256=e1f08d9f4c8f138a0ba3be6cbda4280fdaf5af7823062799672ea82cf4d741bb\nTRK-x86=xpsp2_68cfeb8fda746b900f9c3ce313d7348c812fd30d.exe\nTRK-x86-sha256=fdde64bb905ab4fd32df2ad2546881c489f427b5a7aa791d8a8a2f871dae1605\n\n[XPSP3]\nPrefix=http://download.windowsupdate.com/msdownload/update/software/\nARA-x86=dflt/2008/04/windowsxp-kb936929-sp3-x86-ara_4e82a87cea3b9643fd57b39393a88061614cdae6.exe\nARA-x86-sha256=83a9c1f65cc02f0597a283c7a0175ce30468d05f39236e3e5e68c1497894fc9a\nCHH-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-chh_2663fb610f29e65a10be176740ea6757ca1f22d5.exe\nCHH-x86-sha256=83c9155ffab220d5b4d56187966d9d2e52466b2c59ad009261e8c1526c22c233\nCHS-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-chs_d7067e86abd4257454200d0c398d71c4ce6cd33e.exe\nCHS-x86-sha256=39eeb121685e1566c655ae821bf6d2be97fdcc8a62ae2249602954b4f7bb5fd9\nCHT-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-cht_8a0625e10b8c6cb88d9d1952f1a189fbd761b744.exe\nCHT-x86-sha256=239396a476cad4d4b50e93b5cf0c7ede84dc88fe345b60e275cb8ae0106b0302\nCSY-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-csy_7af606916b887dba9dd38ae282505ce2c2b81b08.exe\nCSY-x86-sha256=0f2602a19ff6390be2286f2f205ce28c559341d4b8d493ed7d8d503de32506fd\nDAN-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-dan_37e03a7d43ad65bc4b71f3947c76bd2fc0fe44d6.exe\nDAN-x86-sha256=2e71b33fa6e9fbe2d3b711d8b11b2ab1d869be6d651d8e50336e814202123187\nDEU-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-deu_f2dcd2211384a78df215c696a7fd1a7949dc794b.exe\nDEU-x86-sha256=10e158040c04c5dd90aedb624ae144c8eff9c6badc5dcfd001e6a61d4e36ca91\nELL-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-ell_cec2ed1c3097e44e62dcb1f2a473a64a58e031fe.exe\nELL-x86-sha256=6e28a272ed069140968585d6ec41e38f38cab14ceebb96bed6c6512ba06a1bba\nENU-x86=dflt/2008/04/windowsxp-kb936929-sp3-x86-enu_c81472f7eeea2eca421e116cd4c03e2300ebfde4.exe\nENU-x86-sha256=62e524a552db9f6fd22d469010ea4d7e28ee06fa615a1c34362129f808916654\nESN-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-esn_e305becfc6fd5a8199368ceffc496397247ac60f.exe\nESN-x86-sha256=b18ef3ddc740952d36dd5f880ce3f1c2eb41fdad139eca05ba2c9c31053d84f1\nFIN-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-fin_5654c021a03bfb10543a2c673bdfc42a853e347a.exe\nFIN-x86-sha256=39a27e9796a5375f492384b3e71b5b33b9a381a64ed7ef67af9977aac0719923\nFRA-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-fra_414b61bbc86e09579d8447baa23eb1b867f9ca93.exe\nFRA-x86-sha256=7cc6321e200cc8517fe246723b98af880e863930b547617b44173ded65d19009\nHEB-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-heb_eb8fc9ff0890279346661dde065c14b5c696e423.exe\nHEB-x86-sha256=7e32f7a0c772548268a6e9e0efabf52de8fd8965a7c750f81e53694d5d0b0e1e\nHUN-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-hun_77b70fe421baeebb115c2f378b8a1fc274db9867.exe\nHUN-x86-sha256=1233e1d7877bd92f246c20dcb5c1e02855652c709bf9a87c41feecb6ae52caa8\nITA-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-ita_2162c1d419d1e462a7dc34294528b2daf593302c.exe\nITA-x86-sha256=99e69d414f2d026b5cc789911fb00184c401010284f91579c5de84c5e3a36202\nJPN-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-jpn_e0fc34cfa52d270b3c79a68af8fa358244f7419e.exe\nJPN-x86-sha256=4d59ff48494eb17ca9db5a577f5811d0753f19fd05e20e6f9d6f652928e9692b\nKOR-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-kor_8ca7e862bfc2742ad9c4c58df0b0cd5ad4b700ae.exe\nKOR-x86-sha256=6ed8c3caa648f65184cc6b201ec9fc657e8f587aa5c4db702d6d8882713cf173\nNLD-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-nld_b2576b4d1972583a3b776fdf963b914341d34058.exe\nNLD-x86-sha256=a2c87924ee51ad748273c07ecc001478b7e5df608d246241aa8a41faaf157d88\nNOR-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-nor_67c9167275a2c3e3884a38c2ad7387556ad4713a.exe\nNOR-x86-sha256=5eb734b6dc226d57b6802ef6bfc35404e463d7e4ad34125a7b2d9572e6384d55\nPLK-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-plk_7cbe718131e9c71b322f1149e86bedba351ba11c.exe\nPLK-x86-sha256=ea707282fc6ce7f6c7c58943713958df45e074fdd38b43490dfedc5a2556a3a0\nPTB-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-ptb_02900ef11f5a982a93de5f927997ce92d5a81a86.exe\nPTB-x86-sha256=51cd7320492a0b816e848ed934f80a1b2e501b88b964fee7eabf1b026fd15adc\nPTG-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-ptg_bc5189c05e93cd0e5742712d84f0b5f5ffcbb7e4.exe\nPTG-x86-sha256=070366f5bce1adc80cd3149a0d7990d9a374c75b8db52f13f44ed14e2cc3c77e\nRUS-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-rus_850cda9f57033a17d046a56d422547ea80dcaf61.exe\nRUS-x86-sha256=80840593225a95a44768416ff51df048792f9e3cfad2917ec1ad9683aad12ee4\nSVE-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-sve_13c5ecca22e12224934a1faa1190ee34db3995ae.exe\nSVE-x86-sha256=73e26e3c074362f66a9445904ae29ccc8d36ebb99ffbac991224de5e01361a18\nTRK-x86=svpk/2008/04/windowsxp-kb936929-sp3-x86-trk_5aaf60501636af08c97ef1c18f1315f4ed6fbcdf.exe\nTRK-x86-sha256=fd5c9acab3f143e5083d4ac53670f92376432fcc7c9163eb2ce3883310337f01\n\n[XPESP3]\n; Only seems to be available in English. Mirrored by us because the file was deleted by Microsoft.\nx86=http://content.legacyupdate.net/download.microsoft.com/download/3/a/e/3aea3d4e-159d-4078-a5b4-5b1e4f5a4db4/WindowsXP-KB958255-ENU.exe\nx86-sha256=b3f410a712f3382119f4bd5705ed914edb07632b1ed54798abfaa494bd60b1e5\n\n; Windows XP 2003\n[2003SP2]\nPrefix=http://download.windowsupdate.com/msdownload/update/\nCHH-x86=v3-19990518/cabpool/windowsserver2003-kb914961-sp2-x86-chh_2de4fb187533e226cd615bcda30b9a8a2836e197.exe\nCHH-x86-sha256=ae6c95197b69b031b2a5547afc8dbc3fe82845efa68842f6530b7d1a64d0bd4c\nCHS-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-chs_c3e7772c6ad063bac3cb6ca05ea6e1b39c5bb35d.exe\nCHS-x86-sha256=569bc93961bedb5645a4c2c3d00bc81819b87e3754272462c4b6afb56f58cb08\nCHT-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-cht_65a62b8ef051bf93d0ccd78900fe8d6709d37a92.exe\nCHT-x86-sha256=4fdb0a2d6ac056accaa65da6272f11139a5dfff8741ef084e60260443f110629\nCSY-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-csy_fa0c18ba0a265001778e9d2691086742fc4efeb6.exe\nCSY-x86-sha256=0afb6655c1ef02509c1a7f731557d6f86b0a8304b2c4f532fb983242232b5a01\nDEU-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-deu_f9a055504e882bb06ce2c7e83319000d905f7917.exe\nDEU-x86-sha256=ece3cd4c96a2d50310c5ded40aca7b35cec149db05aac52cd0f6729a179ea32d\nENU-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-enu_51e1759a1fda6cd588660324abaed59dd3bbe86b.exe\nENU-x86-sha256=9b18b8094318fda577ce392fa634a5e825ca8feb1b72b051dce21116265f15ad\nESN-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-esn_38d7fba08bdebdaf567ae626042e860bf525306e.exe\nESN-x86-sha256=2e5fd9d16c086a99c90a8cdf038a2b0b2af579b78a422812ffd55d2516800616\nFRA-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-fra_51f76d9ebb01806f905199f83a16715e8026c095.exe\nFRA-x86-sha256=2cfc34d91dfd72a5e8d001a411b3f70ff4c91473134ae2c443a7ee84604f1684\nHUN-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-hun_0ac4aaf8685d74132da6256439ed5f74337cb7f5.exe\nHUN-x86-sha256=791ed73f214b83c361f34778714b6e22f9012bef7e5dc6b13bc65c7cb9fa620f\nITA-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-ita_75aa7220b0e226330a723cd27cb0f8b56e9b5f22.exe\nITA-x86-sha256=a81203ab2df3625e0ff46b1d04f800224d9392e68f58b506eecb9732ab5be3e1\nJPN-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-jpn_af70b74d70df32c530352b75e42ce772e9bb68d2.exe\nJPN-x86-sha256=9f42f6fb01eec164c0a51bd86563abff7d84b56da2eb0537fbd6228792a2b02d\nKOR-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-kor_65bcd5be738a08046f0714a108a5fa334ef08fd0.exe\nKOR-x86-sha256=b41827beda31671041857bfed9225ce04cbc83063516b42a405285aa9e694a7b\nNLD-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-nld_12014e84ae5c8a41cd918a6e2c97586bdee030f7.exe\nNLD-x86-sha256=d95527fbdb812a74809bd5cbe02db3a68d5d2395634f5012ada7a851a0d40001\nPLK-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-plk_213469cc7ac58cfa82215f1e5ca6753675061b57.exe\nPLK-x86-sha256=04ac0dbab6148009dd91b3d29929ed24e3d7173155495ab44ee4740d865d1abe\nPTB-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-ptb_73a2c9a9a28f1203aba9f1852c64247467494652.exe\nPTB-x86-sha256=1f4d3ef6574dc430af1be9168878d809cecca5c5328ec4b213d2949190e30777\nPTG-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-ptg_d8b921ee4bb0e0d2831f249e99c64264ae9098db.exe\nPTG-x86-sha256=4619329f32eb844e1a1fc36c5a6de493d81538f0efac0c4de0185e494456372d\nRUS-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-rus_b53c66c6cec98327d1a25b77a252dc82d984f959.exe\nRUS-x86-sha256=b9d36d52553d8f3294e810fc2d64cb69b6f8681169b92ddc033335ccb3ad0e80\nSVE-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-sve_fba6d5c90dc7c15ae750c98cf407a0f148bbfee5.exe\nSVE-x86-sha256=38f87207509abd109c3641c4bab0f35ca9c3319c7dbf299a617e7939ec31c02e\nTRK-x86=software/dflt/2008/02/windowsserver2003-kb914961-sp2-x86-trk_428236b66433ce6b08c9d7a6aa6c523874a340ae.exe\nTRK-x86-sha256=63f0e3f33d5e710e686bb257532d99ec191e8b9f353984faaf3ddaa069a338ca\nENU-x64=v3-19990518/cabpool/windowsserver2003.windowsxp-kb914961-sp2-x64-enu_7f8e909c52d23ac8b5dbfd73f1f12d3ee0fe794c.exe\nENU-x64-sha256=62c6f31edc47f5a00651a83b6fa6edc7b4245dcf693d9233b6d0a79e52a5a57a\nJPN-x64=v3-19990518/cabpool/windowsserver2003.windowsxp-kb914961-sp2-x64-jpn_c725a8c4e03803b12a9ac8820e964dbc377a80dc.exe\nJPN-x64-sha256=8c39dc9bbdd4a6bbb6830bb49a108d79f18de42b5489a0496d965c2611667148\nDEU-ia64=v3-19990518/cabpool/windowsserver2003-kb914961-sp2-ia64-deu_f6857c1bb8fc03798541a78cdc1f5bb98b456333.exe\nDEU-ia64-sha256=66a9dc02f7f9b214b6a1a9674f0ac6a6393d23102ee967014a4c8c1cc5fe6b08\nENU-ia64=v3-19990518/cabpool/windowsserver2003-kb914961-sp2-ia64-enu_8856af0aa0f198a8aad2de2c1ca68240d1d49bf3.exe\nENU-ia64-sha256=f701a8e0950c9b7454ebd5526409fdc39b9fd463cd5ae0ce281d2752194c2fa7\nFRA-ia64=v3-19990518/cabpool/windowsserver2003-kb914961-sp2-ia64-fra_0289b81fe7ed5c1c36f87232f87b25cdb21d331d.exe\nFRA-ia64-sha256=378209aaea67ea261631d2f1e4d51645870e10f845b050cc28a9d348864de774\nJPN-ia64=v3-19990518/cabpool/windowsserver2003-kb914961-sp2-ia64-jpn_3216b1978fd418181ecbf77eef67398edb97a106.exe\nJPN-ia64-sha256=fe87dbcaad083d2a0a28d836e385f6ac9602060d7cb7482cbcf3ed3f0eb45a73\n\n; Windows Update Agent standalone installer\n[WUA]\nPrefix=http://download.windowsupdate.com/windowsupdate/redist/standalone/\n; Pay no attention to the version numbers in the urls, they're all over the place. The keys have the\n; actual versions of dlls that gets installed.\n7.2.6001.788-x86=7.2.6001.788/WindowsUpdateAgent30-x86.exe\n7.2.6001.788-x86-sha256=3dc3ab0add514e0f2780a7d40b310d373fb84087060e16dcf1004f9e2b84de7c\n7.2.6001.788-x64=7.2.6001.788/WindowsUpdateAgent30-x64.exe\n7.2.6001.788-x64-sha256=e61a0fb432780f1071b142bc24d83a5f081da12cd6c2bc8bd4ab6e5e2ecf653e\n7.2.6001.788-ia64=7.2.6001.788/WindowsUpdateAgent30-ia64.exe\n7.2.6001.788-ia64-sha256=7cc4c81f32b3a649cde35b768bdf4f9a89c595aa74c2c0878828c19119eebf3b\n7.6.7600.243-x86=7.4.7600.243/WindowsUpdateAgent30-x86.exe\n7.6.7600.243-x86-sha256=0c645755a01bebef694825362f7df308e7b4ee26dadca88474797f327a61a8d7\n7.6.7600.256-x86=7.6.7600.320/WindowsUpdateAgent-7.6-x86.exe\n7.6.7600.256-x86-sha256=9fc6856827123d0391a2c7451ccb1cbf93261442252dd87819ad5b8db72b0ec0\n7.6.7600.256-x64=7.6.7600.320/WindowsUpdateAgent-7.6-x64.exe\n7.6.7600.256-x64-sha256=d82a85e4874fbee6cb70479a5e146bb373a82cf8d898c95a600358b6e1933c24\n7.6.7600.256-ia64=7.6.7600.320/WindowsUpdateAgent-7.6-ia64.exe\n7.6.7600.256-ia64-sha256=c3645037ed96bf9ccb75d1ef40a8453382e03a06f2c44d97c97bb4e5ccf49097\n; Win2k\n5.0.0=7.2.6001.788\n5.0.1=7.2.6001.788\n5.0.2=7.2.6001.788\n5.0.3=7.2.6001.788\n5.0.4=7.2.6001.788\n; XP\n5.1.0=7.2.6001.788\n5.1.1=7.2.6001.788\n5.1.2=7.2.6001.788\n5.1.3=7.6.7600.256\n5.1.3-home=7.6.7600.243\n; Server 03/XP x64\n5.2.0=7.2.6001.788\n5.2.1=7.2.6001.788\n5.2.2=7.6.7600.256\n; Vista/Server 08\n6.0.0=7.6.7600.256\n6.0.1=7.6.7600.256\n6.0.2=7.6.7600.256\n\n; Vista/Server 08\n[VistaSP1]\nPrefix=http://download.windowsupdate.com/msdownload/update/software/svpk/2008/04/\nx86=windows6.0-kb936330-x86_b8a3fa8f819269e37d8acde799e7a9aea3dd4529.exe\nx86-sha256=f2c460675e4a64665a685968a1e8123ce5cce4f1a419d13f9a819554305731ee\nx64=windows6.0-kb936330-x64_12eed6cf0a842ce2a609c622b843afc289a8f4b9.exe\nx64-sha256=4c441093f023e4a7d1c5df32734916a5bb430ccc141d489be15865dbbb921763\n; No ia64 release for Vista SP1\n\n[VistaSP2]\nPrefix=http://download.windowsupdate.com/msdownload/update/software/svpk/2009/06/\nx86=windows6.0-kb948465-x86_55f17352b4398ecb4f0cc20e3737631420ca1609.exe\nx86-sha256=9fcbbef32ffae17bfe3859770ea49a0bd26970c29d1f0123d127fc5bfc63d563\nx64=windows6.0-kb948465-x64_2eedca0bfa5ae8d1b0acf2117ddc4f15ac5183c9.exe\nx64-sha256=bc8e2a4b663b41fdb4b154a2398c1c5e72ca6ac5651cb421152c344fb08a829e\nia64=windows6.0-kb948465-ia64_1a6cd9ade213bcc056cba3b810e86f0c09c16b51.exe\nia64-sha256=ae65b53de3235f4d767374865a00ebc4e960bb4e053abad9c4e088634a36edcd\n\n[KB3205638]\nPrefix=http://download.windowsupdate.com/d/msdownload/update/software/secu/2016/11/\nx86=windows6.0-kb3205638-x86_e2211e9a6523061972decd158980301fc4c32a47.msu\nx86-sha256=bba36504ae8c0178f06ac4d0a94de66c5fdbdb3a61d989e332453ec866b0b000\nx64=windows6.0-kb3205638-x64_a52aaa009ee56ca941e21a6009c00bc4c88cbb7c.msu\nx64-sha256=0e2a8b49a6eaf22863e68f77f0c69403d1a074f441b26ad9ecf03809bff6b451\nia64=windows6.0-kb3205638-ia64_d6bd55663080885c712c3afb9021c7336d0be83a.msu\nia64-sha256=406dc4e8a965f814906a0a34c403de14d6482c0dbf5b17f6e3f5e5f229119a80\n\n[KB4012583]\nPrefix=http://download.windowsupdate.com/c/msdownload/update/software/secu/2017/02/\nx86=windows6.0-kb4012583-x86_1887cb5393b62cbd2dbb6a6ff6b136e809a2fbd0.msu\nx86-sha256=e83118b4ab3e628ab773fd244e7b8d41ed467543dd53b1cf2c733a45f833e05a\nx64=windows6.0-kb4012583-x64_f63c9a85aa877d86c886e432560fdcfad53b752d.msu\nx64-sha256=6ef5b5ec6912ede5629622d4c05000df38cc0a566d1a1881b15e6a4d1ad534ad\nia64=windows6.0-kb4012583-ia64_ab1ab96d3a3d7fbd1bf5d1cee53bf0be958c6329.msu\nia64-sha256=4f87975fca9ce119b523bc930109c9e0c9f7e58d89f972cada19a7fde519da45\n\n[KB4015195]\nPrefix=http://download.windowsupdate.com/d/msdownload/update/software/secu/2017/03/\nx86=windows6.0-kb4015195-x86_eb045e0144266b20b615f29fa581c4001ebb7852.msu\nx86-sha256=8e55dec6bf11cfbbd37b64cd74611d46814f75cdc46b1bdf3f01784a0fa6aa32\nx64=windows6.0-kb4015195-x64_2e310724d86b6a43c5ae8ec659685dd6cfb28ba4.msu\nx64-sha256=b62531d6925f6cb0b2b3bc5593d3b81157d7103db988379763556c4af1d35594\nia64=windows6.0-kb4015195-ia64_0ae8f7c2ab5cf24123f6e279469674d823d20129.msu\nia64-sha256=64ed566d2238b37bf7fd296b2ddc278819774e578ab004fb80afd611a6b266b1\n\n[KB4015380]\nPrefix=http://download.windowsupdate.com/\nx86=d/msdownload/update/software/secu/2017/03/windows6.0-kb4015380-x86_3f3548db24cf61d6f47d2365c298d739e6cb069a.msu\nx86-sha256=f7f41d5645b2517619c3619ac4a42fb21118eea1047ad31e984b0b2de33ac517\nx64=c/msdownload/update/software/secu/2017/03/windows6.0-kb4015380-x64_959aedbe0403d160be89f4dac057e2a0cd0c6d40.msu\nx64-sha256=18367f7ce24e11ce8ef84b1839df929713d30354e16e893ba789e40e760acc8f\nia64=c/msdownload/update/software/secu/2017/03/windows6.0-kb4015380-ia64_2a825e5f1aca191bb5f627b494838660180da2d6.msu\nia64-sha256=5bc5c096336f3f2200dcc762301035690e9607a4b7c19ca3a01814a7b642cd8c\n\n[KB4493730]\nPrefix=http://download.windowsupdate.com/d/msdownload/update/software/secu/2019/04/\nx86=windows6.0-kb4493730-x86_ab4368f19db796680ff445a7769886c4cdc009a0.msu\nx86-sha256=601c6afc2da2bce6e6068aba2368c94a3902a4948365a24cde44022ef462e163\nx64=windows6.0-kb4493730-x64_5cb91f4e9000383f061b80f88feffdf228c2443c.msu\nx64-sha256=26bf790fadd11eca1433abd8edc78d2ddfa1fe85fe0d2f67cdffb5de0c069530\nia64=windows6.0-kb4493730-ia64_024e5a390f7eace6d2e9dcaa91f09976e4d147db.msu\nia64-sha256=e806326e885fa6d7b072ada47ca63e88d3b399b2137515fe202764e70f8215ec\n\n; IE9 for Vista\n[KB971512]\nPrefix=http://download.windowsupdate.com/msdownload/update/software/updt/2009/10/\nx86=windows6.0-kb971512-x86_370c3e41e1c161ddce29676e9273e4b8bb7ba3eb.msu\nx86-sha256=ebfae656dc0936ed003ac0c2ea9b0b0dd1810558ff32c61a0952e92e6bf9c3d1\nx64=windows6.0-kb971512-x64_0b329b985437c6c572529e5fd0042b9d54aeaa0c.msu\nx64-sha256=05127e5cef082bad20cfdb9e87ebe89b6285dbc0ec43e7a6fb36a4b294ce0722\n\n[KB2117917]\nPrefix=http://download.windowsupdate.com/msdownload/update/software/updt/2011/02/\nx86=windows6.0-kb2117917-x86_370435d9efa6643c44d6506666b1960d56cf673a.msu\nx86-sha256=eaf649252e2d784f994236fc413356bd433798599b924a7c07645cb050a513fa\nx64=windows6.0-kb2117917-x64_655a21758801e9648702791d7bf30f81b58884b3.msu\nx64-sha256=f188b7ccb72fcd45a96bf8487e1d5e683bf7a7379e6491adb61398972ff9548c\n\n[IE9]\nPrefix=http://download.windowsupdate.com/msdownload/update/software/uprl/2011/\nx86=05/wu-ie9-windowsvista-x86_90e3e90e964c2769a008cbf924eefdc42413dd52.exe\nx86-sha256=de20f531dede818aa65c05194b1e7bfed163dd060dc5214c85629d2e8c760fe3\nx64=03/wu-ie9-windowsvista-x64_f599c02e7e1ea8a4e1029f0e49418a8be8416367.exe\nx64-sha256=e9c8ee3418f92b93a4f0759f527f4fd63215f6bc9fbbd1d86131d0ec49cce95d\n\n; Hyper-V update for Server 08\n[KB950050]\nPrefix=http://download.windowsupdate.com/msdownload/update/software/updt/2008/06/\nx86=windows6.0-kb950050-x86_ca9c19235f4789743d1d818c33726e0f2600238a.msu\nx86-sha264=3ba4464725f19fb11b1a1d16f02f3e871d0bbb208cd4219acd2afa80e4a0cbda\nx64=windows6.0-kb950050-x64_0440bab6c829c0cc052473e34d42e18d37745a91.msu\nx64-sha256=a7a9c40dbbceec3981fb923b8d55600b0e0095980f482d67dca781603744f87c\n\n; 7/Server 08 R2\n[Win7SP1]\nx86=http://download.windowsupdate.com/msdownload/update/software/svpk/2011/02/windows6.1-kb976932-x86_c3516bc5c9e69fee6d9ac4f981f5b95977a8a2fa.exe\nx86-sha256=e5449839955a22fc4dd596291aff1433b998f9797e1c784232226aba1f8abd97\nx64=http://download.windowsupdate.com/msdownload/update/software/svpk/2011/02/windows6.1-kb976932-x64_74865ef2562006e51d7f9333b4a8d45b7a749dab.exe\nx64-sha256=f4d1d418d91b1619688a482680ee032ffd2b65e420c6d2eaecf8aa3762aa64c8\nia64=http://content.legacyupdate.net/download.microsoft.com/download/0/a/f/0afb5316-3062-494a-ab78-7fb0d4461357/windows6.1-KB976932-IA64.exe\nia64-sha256=12f82b736f6d29813ab7c93e10b6cbe308e7e9236428f624dc614447fe24f6be\n\n[KB3020369]\nPrefix=http://download.windowsupdate.com/d/msdownload/update/software/updt/2015/04/\nx86=windows6.1-kb3020369-x86_82e168117c23f7c479a97ee96c82af788d07452e.msu\nx86-sha256=9263e422baa496b59e7ae5be1d43790e9f0fccaad7e4c7336b4a3bd03b0855c9\nx64=windows6.1-kb3020369-x64_5393066469758e619f21731fc31ff2d109595445.msu\nx64-sha256=e9fbb6b43c6fb9c1dcc8864bb7a35f29e4002830f3acbb93e0e717ae653fe76a\n; ia64 exists, but not used by us\n\n[KB3125574]\nPrefix=http://download.windowsupdate.com/d/msdownload/update/software/updt/2016/05/\nx86=windows6.1-kb3125574-v4-x86_ba1ff5537312561795cc04db0b02fbb0a74b2cbd.msu\nx86-sha256=930cc1c0f8838d731dbb89755b9de12b489ab35fdc2644c01605a6b6de3f497e\nx64=windows6.1-kb3125574-v4-x64_2dafb1d203c8964239af3048b5dd4b1264cd93b9.msu\nx64-sha256=7bb1796827448df30356b57ac5731bccbc1336789dc884630e8d356df2e1685b\n\n[KB3138612]\nPrefix=http://download.windowsupdate.com/d/msdownload/update/software/updt/2016/02/\nx86=windows6.1-kb3138612-x86_6e90531daffc13bc4e92ecea890e501e807c621f.msu\nx86-sha256=a70e00bd2c77122ad819e05009b6557ff4ed31567dc7b643ed848d095ef34df8\nx64=windows6.1-kb3138612-x64_f7b1de8ea7cf8faf57b0138c4068d2e899e2b266.msu\nx64-sha256=5309f9d9a49dd91ef38031b1e4518cf5d1bf8f7d35cf11814cd867912ba11870\nia64=windows6.1-kb3138612-ia64_4edd5410fb137382d77f468a14118fa6d1c03655.msu\nia64-sha256=38423da2dc1882990ff6d335c4720877f5bba777cf46d7ccc8c90fc1943d8e65\n\n[KB4474419]\nPrefix=http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/\nx86=windows6.1-kb4474419-v3-x86_0f687d50402790f340087c576886501b3223bec6.msu\nx86-sha256=8cf49fc7ac61e0b217859313a96337b149ab41b3307eb0d9529615142ea34c6c\nx64=windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu\nx64-sha256=99312df792b376f02e25607d2eb3355725c47d124d8da253193195515fe90213\nia64=windows6.1-kb4474419-v3-ia64_1436a990f64876332857baaafa7aeb9eadcb4fa4.msu\nia64-sha256=8162835bb6f51d63784ca66b1b013beb657e9289179d37b456f54334f28b3d0b\n\n[KB4490628]\nPrefix=http://download.windowsupdate.com/\nx86=c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x86_3cdb3df55b9cd7ef7fcb24fc4e237ea287ad0992.msu\nx86-sha256=b86849fda570f906012992a033f6342373c00a3b3ec0089780eabb084a9a0182\nx64=c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu\nx64-sha256=8075f6d889bcb27be6f52ed47081675e5bb8a5390f2f5bfe4ec27a2bb70cbf5e\nia64=d/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-ia64_4736acd98e0a4e02f29fcdef63feacc5ac7b702b.msu\nia64-sha256=3c343a9ed3a4e67bcc3aa7b784bfc2fce4fdd0c65f0050813b7e2de03fbe9c87\n\n; Windows Home Server 2011\n[KB2757011]\nPrefix=http://download.windowsupdate.com/msdownload/update/software/uprl/2012/12/\nx64=windows6.1-kb2757011-x64_4140355ab0b06df89668ec51432a820dff9af356.msu\nx64-sha256=47548095dd7baa7ac977b07c025243b1050be9c13cc5d82c4a03cd53513f1b2d\n\n; 8/Server 2012\n[KB4598297]\nPrefix=http://download.windowsupdate.com/d/msdownload/update/software/secu/2021/01/\nx86=windows8-rt-kb4598297-x86_a517ea587c91af5f803b0973d40166c3e076fe5c.msu\nx86-sha256=740c16a73778d3a936ffd5a9adcc9ba123f120f2a6b549b864f9edf1b6e04fe4\nx64=windows8-rt-kb4598297-x64_60f5c45d1216ee6ff1ab88ca03b037ac519ad0da.msu\nx64-sha256=ee75660e59543caec58e22b3c089119a6f4fcd8bf9d143bee88d4ac5873b6e5a\n\n; 8.1/Server 2012 R2\n[KB3021910]\nPrefix=http://download.windowsupdate.com/\nx86=c/msdownload/update/software/updt/2015/04/windows8.1-kb3021910-x86_7e70173bec00c3d4fe3b0b8cba17b095b4ed2d20.msu\nx86-sha256=971d1b18cb26e578926591ee944f7183be7a6d7abfc2e255b930803666eebc20\nx64=c/msdownload/update/software/updt/2015/04/windows8.1-kb3021910-x64_e291c0c339586e79c36ebfc0211678df91656c3d.msu\nx64-sha256=feb03c1c3d5719ec2e7873c0b9b85bb9e9db44df88c75f9ddd5222942e4bf928\narm=d/msdownload/update/software/updt/2015/03/windows8.1-kb3021910-arm_72a8286480463b9328f742c7247d7c155a716cd0.msu\narm-sha256=7c2ffdc3029c0c6bc98726722cea34bc4968bc8c69440ad619db62a1d841c8c3\n\n[ClearCompressionFlag]\nPrefix=http://download.windowsupdate.com/\nx86=c/msdownload/update/software/secu/2014/04/clearcompressionflag_220edca17ae47089fc4da060915e0df568eac4ff.exe\nx86-sha256=fc540c0d8da69d08dbd26f71f817f4925b5725e04e76ee0d0fd89e42d1860a86\nx64=d/msdownload/update/software/secu/2014/04/clearcompressionflag_3104315db9d84f6a2a56b9621e89ea66a8c27604.exe\nx64-sha256=9b95973b198eb255c8e85eb72e0af96482f5ae7547d66aa1b70a7e41602f2548\narm=c/msdownload/update/software/secu/2014/04/clearcompressionflag_70c52df15023ad1fa579149f0435e6a2b078fc94.exe\narm-sha256=8c05fb101a01b54de6cc6e22441b528ea1b3cde211781a8e4258e2f776338841\n\n[KB2919355]\nPrefix=http://download.windowsupdate.com/\nx86=c/msdownload/update/software/crup/2014/02/windows8.1-kb2919355-x86_de9df31e42fe034c9a763328326e5852c2b4963d.msu\nx86-sha256=f8beca5b463a36e1fef45ad0dca6a0de7606930380514ac1852df5ca6e3f6c1d\nx64=d/msdownload/update/software/crup/2014/02/windows8.1-kb2919355-x64_e6f4da4d33564419065a7370865faacf9b40ff72.msu\nx64-sha256=b0c9ada530f5ee90bb962afa9ed26218c582362315e13b1ba97e59767cb7825d\narm=c/msdownload/update/software/crup/2014/02/windows8.1-kb2919355-arm_a6119d3e5ddd1a233a09dd79d91067de7b826f85.msu\narm-sha256=cf3e9dd5a521965a613ca5b931dea739ac9101e21dc20aa6d05374710083e426\n\n[KB2932046]\nPrefix=http://download.windowsupdate.com/\nx86=c/msdownload/update/software/crup/2014/02/windows8.1-kb2932046-x86_bfd8ca4c683ccec26355afc1f2e677f3809cb3d6.msu\nx86-sha256=a57c15c14f21d2a36a10a587efbd5229e5b10c58d5c39e809093582151cb061a\nx64=d/msdownload/update/software/crup/2014/02/windows8.1-kb2932046-x64_6aee5fda6e2a6729d1fbae6eac08693acd70d985.msu\nx64-sha256=46b5f5ac8592caa1fc9f9494f775c480dd35b8d1034bc443469df2ae7260cd2e\narm=c/msdownload/update/software/crup/2014/02/windows8.1-kb2932046-arm_fe6acf558880d127aef1a759a8c2539afc67b5fb.msu\narm-sha256=86d78135033944f169974e3523f12072bc34de82d68de924250d0917fb953254\n\n[KB2959977]\nPrefix=http://download.windowsupdate.com/\nx86=d/msdownload/update/software/secu/2014/04/windows8.1-kb2959977-x86_5ccf761a356bb143b68887f99883d8c24946d2c2.msu\nx86-sha256=c0da1c3845ba98f5ee5f1cba1312189422ce1c6bec95bc9c86270b2bf61751ee\nx64=c/msdownload/update/software/secu/2014/04/windows8.1-kb2959977-x64_574ba2d60baa13645b764f55069b74b2de866975.msu\nx64-sha256=3e6a8674cc5a206cae551426a6bfe254092b11e0501c162f3872fb32ffbc797b\narm=c/msdownload/update/software/secu/2014/04/windows8.1-kb2959977-arm_d37dfe20cdc496b4ed4338913d225fc1a9a91d36.msu\narm-sha256=734dc55f56798695d98d7ba13d774abb54e2326b7b51881fa6db78eadcc1fb4b\n\n[KB2937592]\nPrefix=http://download.windowsupdate.com/\nx86=d/msdownload/update/software/crup/2014/02/windows8.1-kb2937592-x86_96a3416d480bd2b54803df26b8e76cd1d0008d43.msu\nx86-sha256=af4622499f3a054c8eef2ced379b24f95af95eca1b8582c22935ed6ceddd1553\nx64=c/msdownload/update/software/crup/2014/02/windows8.1-kb2937592-x64_4abc0a39c9e500c0fbe9c41282169c92315cafc2.msu\nx64-sha256=094f92c5fea35c9067844f7acc160f3106214fc62a56068798759512183c18fd\narm=c/msdownload/update/software/crup/2014/02/windows8.1-kb2937592-arm_860c83a0cccc0519111f57a679ae9f9d071315e5.msu\narm-sha256=0abb841953f1abbd59d0d95f20a093d8ff454f2c8cdd781c87693f3b32fe9b66\n\n[KB2934018]\nPrefix=http://download.windowsupdate.com/\nx86=d/msdownload/update/software/secu/2014/04/windows8.1-kb2934018-x86_8fb05387836b77abbf1755185ae743c9da417e9a.msu\nx86-sha256=3976c63843b89bc3a167f26166c7ff7007edc2edf3ed671888b5480ee8c34179\nx64=c/msdownload/update/software/secu/2014/04/windows8.1-kb2934018-x64_234a5fc4955f81541f5bfc0d447e4fc4934efc38.msu\nx64-sha256=083cb134f59107531e241645530fed396f3cfdd8128ab33349fe138f20f2e19d\narm=c/msdownload/update/software/secu/2014/04/windows8.1-kb2934018-arm_28c62f5a4129ba24ab75936517c5066435702ae8.msu\narm-sha256=d87e2d6d5a9d544ff50d268df6421f92791416f095a8a09050b5a8a48d334d5d\n\n[KB3097667]\narm=http://download.windowsupdate.com/d/msdownload/update/software/updt/2015/09/windows8.1-kb3033055-arm_1b0aeee420c6ad850de7cfac0c485d4bd7965f71.msu\narm-sha256=4e861185a4897c7950f02ab93069297fbd929460a3c4c735877cb1be8b4aa472\n"
  },
  {
    "path": "setup/PatchesNT4.ini",
    "content": "[Language]\n0401=ARA\n0403=CAT\n0404=CHT\n0804=CHS\n0405=CSY\n0406=DAN\n0407=DEU\n0408=ELL\n0409=ENU\n0c0a=ESN\n0425=ETI\n040b=FIN\n040c=FRA\n040d=HEB\n040e=HUN\n0410=ITA\n0411=JPN\n0412=KOR\n0427=LTH\n0426=LVI\n0413=NLD\n0414=NOR\n0415=PLK\n0416=PTB\n0816=PTG\n0418=ROM\n0419=RUS\n041a=HRV\n041b=SKY\n041d=SVE\n041e=THA\n041f=TRK\n0424=SLV\n042a=VIT\n042d=EUQ\n0c04=CHH\n\n[IE6]\nPrefix=http://download.windowsupdate.com/msdownload/update/v3-19990518/cabpool/\nARA-x86=ie6sp1-wucab-ara_b1720a72becd05142cb4ccbb23205c76b51d29e2.cab\nCHH-x86=ie6sp1-wucab-cht_1899bffb8ebf36c0a58686f04cc1d721c419792d.cab\nCHS-x86=ie6sp1-wucab-chs_6d93ab8525d3b6f775faf692caaa4c8267c8a22b.cab\nCHT-x86=ie6sp1-wucab-cht_1899bffb8ebf36c0a58686f04cc1d721c419792d.cab\nCSY-x86=ie6sp1-wucab-csy_2789a030bba2128fc90e0475e2530c300ed5defc.cab\nDAN-x86=ie6sp1-wucab-dan_0c178b2634a97a4879c172797b21a59e567d18e6.cab\nDEU-x86=ie6sp1-wucab-deu_2a13ac14e403ad4a1c6877fe478067e81ac20da8.cab\nELL-x86=ie6sp1-wucab-ell_15a4e43c8922f658eddd5d57d23c11e0fa55dce9.cab\nENU-x86=ie6sp1-wucab-enu_91192253c8d3cf7beff22e68ae1fdff9638bf546.cab\nESN-x86=ie6sp1-wucab-esn_a9c53ad93bae78becf2b06f6d317ef7ef66a2abe.cab\nFIN-x86=ie6sp1-wucab-fin_1a369fcc86e803128144e17246e16d0a27a8c35b.cab\nFRA-x86=ie6sp1-wucab-fra_0bc4219b3119a127503cd93863cfedfb1e37bd55.cab\nHEB-x86=ie6sp1-wucab-heb_70518dd1d09d702975b8e44a22c88e139f168975.cab\nHUN-x86=ie6sp1-wucab-hun_1eeed3e7b3e6bd311c17c0d97f67ec12df8b4b85.cab\nITA-x86=ie6sp1-wucab-ita_2c6ab20b41114e53646ebb56ff6d269fd86fba36.cab\nJPN-x86=ie6sp1-wucab-jpn_b1e1e8b9dbbf440d8964ec375348674502ef0728.cab\nKOR-x86=ie6sp1-wucab-kor_f61474b056ae37c5e9670978c6d3b24f4800d7f5.cab\nNLD-x86=ie6sp1-wucab-nld_3fd676fe34f93471f4db9a0a1f3ef5c3ed8e5f43.cab\nNOR-x86=ie6sp1-wucab-nor_72a81d06462c5a66f9531f4f226b13463698dd24.cab\nPLK-x86=ie6sp1-wucab-plk_14889750985a9d29490886c2e901ef3bc69c4ff5.cab\nPTB-x86=ie6sp1-wucab-ptb_448df44aea5d853e4954d48411b1953569df23c2.cab\nPTG-x86=ie6sp1-wucab-ptg_5892593c72f702ba6c7d88b47c2bd7c5707081fd.cab\nRUS-x86=ie6sp1-wucab-rus_842c289d0887bbe2e4edea1ff3763addc8d77db5.cab\nSVE-x86=ie6sp1-wucab-sve_db8dcfef073f2df327fc3706d9a141b6124cfed0.cab\nTRK-x86=ie6sp1-wucab-trk_64479241feb2f783f851b16791d5d1c684d94a66.cab\nNEC98-x86=ie6sp1-wucab-jpn_b1e1e8b9dbbf440d8964ec375348674502ef0728.cab\n"
  },
  {
    "path": "setup/RebootPage.nsh",
    "content": "Function RebootPage\n\t; Only show if reboot needed\n\t${IfNot} ${RebootFlag}\n\t\tAbort\n\t${EndIf}\n\n\t; Not needed in runonce\n\t${If} ${IsRunOnce}\n\t${OrIf} ${IsPostInstall}\n\t\tAbort\n\t${EndIf}\n\n\t; If /norestart passed, skip creating the page\n\t${If} ${NoRestart}\n\t\tStrCpy $0 -1\n\t${Else}\n\t\t!insertmacro MUI_HEADER_TEXT \"$(RebootPageTitle)\" \"\"\n\n\t\tLegacyUpdateNSIS::RebootPageCreate \\\n\t\t\t\"$(RebootPageText)\" \\\n\t\t\t\"$(RebootPageTimer)\" \\\n\t\t\t\"$(RebootPageRestart)\" \\\n\t\t\t\"$(RebootPageLater)\"\n\n\t\tCall AeroWizardOnShow\n\n\t\tLegacyUpdateNSIS::RebootPageShow\n\t\tPop $0\n\t${EndIf}\n\n\t${If} $0 == 0\n\t${OrIf} $0 == 1\n\t\t; Reboot\n\t\tCall RebootIfRequired\n\t${Else}\n\t\t; Later\n\t\t${MementoSectionSave}\n\t\tCall PrepareRunOnce\n\t\tSetErrorLevel ${ERROR_SUCCESS_REBOOT_REQUIRED}\n\t\tQuit\n\t${EndIf}\nFunctionEnd\n"
  },
  {
    "path": "setup/RunOnce.nsh",
    "content": "Function IsAuditMode\n\t; 2k/XP\n\tReadRegDword $0 HKLM \"${REGPATH_SETUP}\" \"AuditInProgress\"\n\t${If} $0 == 1\n\t\tPush 1\n\t${Else}\n\t\t; Vista+\n\t\tReadRegDword $0 HKLM \"${REGPATH_SETUP_STATUS}\" \"AuditBoot\"\n\t\t${If} $0 > 0\n\t\t\tPush 1\n\t\t${Else}\n\t\t\tPush 0\n\t\t${EndIf}\n\t${EndIf}\nFunctionEnd\n\n!macro _IsAuditMode _a _b _t _f\n\t!insertmacro _LOGICLIB_TEMP\n\tCall IsAuditMode\n\tPop $_LOGICLIB_TEMP\n\tStrCmp $_LOGICLIB_TEMP 1 `${_t}` `${_f}`\n!macroend\n\n!define IsAuditMode `\"\" IsAuditMode \"\"`\n\n!macro PromptReboot\n\t!insertmacro InhibitSleep 0\n\tSetErrorLevel ${ERROR_SUCCESS_REBOOT_REQUIRED}\n\n\t${If} ${NoRestart}\n\t\t; Prompt for reboot\n\t\t${IfNot} ${Silent}\n\t\t${AndIfNot} ${IsPassive}\n\t\t\tSystem::Call '${RestartDialog}($HWNDPARENT, \"\", ${EWX_REBOOT})'\n\t\t${EndIf}\n\t\tQuit\n\t${Else}\n\t\t; Reboot immediately\n\t\tSystem::Call '${GetUserName}(.r0, ${NSIS_MAX_STRLEN}) .r1'\n\t\t${If} ${IsRunOnce}\n\t\t${AndIf} $0 == \"SYSTEM\"\n\t\t${AndIfNot} ${IsAuditMode}\n\t\t\t; Running in setup mode. Winlogon will reboot for us.\n\t\t\tQuit\n\t\t${Else}\n\t\t\t; Regular reboot.\n\t\t\tReboot\n\t\t${EndIf}\n\t${EndIf}\n!macroend\n\nFunction CleanUpRunOnce\n\t; The reboot has happened, so remove reboot flag if any\n\tDeleteRegValue HKLM \"${REGPATH_LEGACYUPDATE_SETUP}\" \"RebootPending\"\n\n\t; Restore setup keys\n\t; Be careful here. Doing this wrong can cause SYSTEM_LICENSE_VIOLATION bootloops!\n\t${DeleteRegWithBackup} Str   HKLM \"${REGPATH_SETUP}\" \"CmdLine\"   \"\"\n\t${DeleteRegWithBackup} Dword HKLM \"${REGPATH_SETUP}\" \"SetupType\" ${SETUP_TYPE_NORMAL}\n\tDeleteRegValue HKLM \"${REGPATH_SETUP}\" \"SetupShutdownRequired\"\n\n\t${If} ${Abort}\n\t\tCall CleanUpRunOnceFinal\n\t${EndIf}\nFunctionEnd\n\nFunction CleanUpRunOnceFinal\n\t; Enable keys we disabled if needed\n\t${If} ${IsWinXP2002}\n\t\t${DeleteRegWithBackup} Dword HKLM \"${REGPATH_SECURITYCENTER}\" \"FirstRunDisabled\" \"-\"\n\t${EndIf}\n\n\t${If} ${AtLeastWin8}\n\t\t${DeleteRegWithBackup} Dword HKLM \"${REGPATH_POLICIES_SYSTEM}\" \"EnableFirstLogonAnimation\" \"-\"\n\t${EndIf}\n\n\t; Delete runonce stuff\n\tRMDir /r /REBOOTOK \"${RUNONCEDIR}\"\n\n\t; Delete IE6 temp files\n\tRMDir /r /REBOOTOK \"$WINDIR\\Windows Update Setup Files\"\nFunctionEnd\n\n!if ${NT4} == 0\nFunction CopyLauncher\n\t${If} ${IsNativeAMD64}\n\t\tFile /ONAME=LegacyUpdate.exe \"..\\launcher\\obj\\LegacyUpdate64.exe\"\n\t${Else}\n\t\tFile /ONAME=LegacyUpdate.exe \"..\\launcher\\obj\\LegacyUpdate32.exe\"\n\t${EndIf}\nFunctionEnd\n!endif\n\nVar /GLOBAL RunOnce.UseFallback\n\nFunction PrepareRunOnce\n\t${IfNot} ${RebootFlag}\n\t\tReturn\n\t${EndIf}\n\n\t; Set flag in case the user decides to restart later, so we can jump straight to the restart page\n\tWriteRegDword HKLM \"${REGPATH_LEGACYUPDATE_SETUP}\" \"RebootPending\" 1\n\n\t!if ${NT4} == 0\n\t${IfNot} ${IsRunOnce}\n\t\t; Copy to runonce path to ensure installer is accessible by the temp user\n\t\tCreateDirectory \"${RUNONCEDIR}\"\n\t\tSetOutPath \"${RUNONCEDIR}\"\n\t\tCopyFiles /SILENT \"$EXEPATH\" \"${RUNONCEDIR}\\LegacyUpdateSetup.exe\"\n\t\tCall CopyLauncher\n\n\t\t; Remove mark of the web to prevent \"Open File - Security Warning\" dialog\n\t\tSystem::Call '${DeleteFile}(\"${RUNONCEDIR}\\LegacyUpdateSetup.exe:Zone.Identifier\")'\n\t${EndIf}\n\t!endif\n\n\t!if ${NT4} == 1\n\t\tStrCpy $1 \"${RUNONCEDIR}\\LegacyUpdateSetup.exe\"\n\t!else\n\t\tStrCpy $1 \"${RUNONCEDIR}\\LegacyUpdate.exe\"\n\t!endif\n\n\t${If} $RunOnce.UseFallback == 1\n\t${OrIf} ${IsAuditMode}\n\t\tWriteRegStr HKLM \"${REGPATH_RUNONCE}\" \"LegacyUpdateRunOnce\" '\"$1\" /runonce'\n\t${Else}\n\t\t; Somewhat documented in KB939857:\n\t\t; https://web.archive.org/web/20090723061647/http://support.microsoft.com/kb/939857\n\t\t; See also Wine winternl.h\n\t\t${WriteRegWithBackup} Str   HKLM \"${REGPATH_SETUP}\" \"CmdLine\" '\"$1\" /runonce'\n\t\t${WriteRegWithBackup} Dword HKLM \"${REGPATH_SETUP}\" \"SetupType\" ${SETUP_TYPE_NOREBOOT}\n\t\tWriteRegDword HKLM \"${REGPATH_SETUP}\" \"SetupShutdownRequired\" ${SETUP_SHUTDOWN_REBOOT}\n\t${EndIf}\n\n\t; Temporarily disable Security Center first run if needed\n\t${If} ${IsWinXP2002}\n\t${AndIfNot} ${AtLeastServicePack} 2\n\t\t${VerbosePrint} \"Disabling Security Center first run\"\n\t\t${WriteRegWithBackup} Dword HKLM \"${REGPATH_SECURITYCENTER}\" \"FirstRunDisabled\" 1\n\t${EndIf}\n\n\t; Temporarily disable logon animation if needed\n\t${If} ${AtLeastWin8}\n\t\t${VerbosePrint} \"Disabling first logon animation\"\n\t\t${WriteRegWithBackup} Dword HKLM \"${REGPATH_POLICIES_SYSTEM}\" \"EnableFirstLogonAnimation\" 0\n\t${EndIf}\nFunctionEnd\n\n!macro -RebootIfRequired\n\t${If} ${RebootFlag}\n\t\t${If} ${Silent}\n\t\t${OrIf} ${IsRunOnce}\n\t\t\tCall RebootIfRequired\n\t\t${EndIf}\n\t\tReturn\n\t${EndIf}\n!macroend\n\n!define RebootIfRequired `!insertmacro -RebootIfRequired`\n\nFunction RebootIfRequired\n\t${MementoSectionSave}\n\t${If} ${RebootFlag}\n\t\t; Reboot now\n\t\tCall PrepareRunOnce\n\t\t!insertmacro PromptReboot\n\t${Else}\n\t\t; Restore setup keys\n\t\tCall CleanUpRunOnce\n\t${EndIf}\nFunctionEnd\n\nFunction OnRunOnceLogon\n\t; To be safe in case we crash, immediately restore setup keys. We'll set them again if needed.\n\tCall CleanUpRunOnce\nFunctionEnd\n\n!macro SetMarquee state\n\tPush $0\n\tFindWindow $0 \"#32770\" \"\" $HWNDPARENT\n\tFindWindow $0 \"msctls_progress32\" \"\" $0\n!if ${state} == 1\n\t${NSD_AddStyle} $0 ${PBS_MARQUEE}\n\tSendMessage $0 ${PBM_SETMARQUEE} 1 100\n!else\n\t${NSD_RemoveStyle} $0 ${PBS_MARQUEE}\n!endif\n\tPop $0\n!macroend\n\n!if ${NT4} == 0\nFunction PollCbsInstall\n\t${IfNot} ${AtLeastWinVista}\n\t\tReturn\n\t${EndIf}\n\n\tReadRegDword $0 HKLM \"${REGPATH_CBS}\" \"ExecuteState\"\n\t${If} $0 == ${CBS_EXECUTE_STATE_NONE}\n\t${OrIf} $0 == ${CBS_EXECUTE_STATE_NONE2}\n\t\tReturn\n\t${EndIf}\n\n\t${VerbosePrint} \"Packages are still installing [$0]\"\n\t${DetailPrint} \"$(StatusCbsInstalling)\"\n\n\t; Set marquee progress bar\n\t!insertmacro SetMarquee 1\n\n\t${While} 1 == 1\n\t\t; Are we in a RebootInProgress phase?\n\t\tClearErrors\n\t\tEnumRegKey $1 HKLM \"${REGPATH_CBS_REBOOTINPROGRESS}\" 0\n\t\t${IfNot} ${Errors}\n\t\t\t; Prepare runonce now and spin forever. TrustedInstaller will reboot on its own.\n\t\t\tSetRebootFlag true\n\t\t\tCall PrepareRunOnce\n\t\t\t${VerbosePrint} \"System will restart automatically\"\n\t\t\t${While} 1 == 1\n\t\t\t\tSleep 10000\n\t\t\t${EndWhile}\n\t\t${EndIf}\n\n\t\t; Poll TrustedInstaller execution state\n\t\tReadRegDword $0 HKLM \"${REGPATH_CBS}\" \"ExecuteState\"\n\t\t${If} $0 == ${CBS_EXECUTE_STATE_NONE}\n\t\t${OrIf} $0 == ${CBS_EXECUTE_STATE_NONE2}\n\t\t\t; Ignore under Vista RTM servicing stack. It can trick us by going to -1, then back to 0.\n\t\t\t; This happens in the first 2 (of 3) reboots when installing SP1.\n\t\t\t${IfNot} ${IsWinVista}\n\t\t\t${OrIf} ${AtLeastServicePack} 1\n\t\t\t\t${Break}\n\t\t\t${EndIf}\n\t\t${EndIf}\n\n\t\tSleep 1000\n\t${EndWhile}\n\n\t; Revert progress bar\n\t!insertmacro SetMarquee 0\nFunctionEnd\n!endif\n\nFunction RebootIfCbsRebootPending\n\t${IfNot} ${AtLeastWinVista}\n\t\tReturn\n\t${EndIf}\n\n\tStrCpy $1 0\n\n\tClearErrors\n\tReadRegDword $0 HKLM \"${REGPATH_CBS}\" \"ExecuteState\"\n\t${IfNot} ${Errors}\n\t${AndIf} $0 != ${CBS_EXECUTE_STATE_NONE}\n\t${AndIf} $0 != ${CBS_EXECUTE_STATE_NONE2}\n\t\tStrCpy $1 1\n\t${EndIf}\n\n\tClearErrors\n\tEnumRegKey $0 HKLM \"${REGPATH_CBS_REBOOTPENDING}\" 0\n\tEnumRegKey $0 HKLM \"${REGPATH_CBS_PACKAGESPENDING}\" 0\n\t${IfNot} ${Errors}\n\t\tStrCpy $1 1\n\t${EndIf}\n\n\t${If} $1 == 1\n\t\t${VerbosePrint} \"Restarting to install previously pending packages\"\n\t\tSetRebootFlag true\n\t\t${RebootIfRequired}\n\t${EndIf}\nFunctionEnd\n\nFunction OnRunOnceDone\n\t${If} ${IsRunOnce}\n\t${AndIfNot} ${Abort}\n\t\t; Set up postinstall runonce\n\t\t${If} ${IsAuditMode}\n\t\t\t${VerbosePrint} \"Running postinstall\"\n\t\t\tExec '\"${RUNONCEDIR}\\LegacyUpdate.exe\" /runonce postinstall'\n\t\t${Else}\n\t\t\t${VerbosePrint} \"Preparing postinstall\"\n\t\t\tWriteRegStr HKLM \"${REGPATH_RUNONCE}\" \"LegacyUpdatePostInstall\" '\"${RUNONCEDIR}\\LegacyUpdate.exe\" /runonce postinstall'\n\n\t\t\tSystem::Call '${GetUserName}(.r0, ${NSIS_MAX_STRLEN}) .r1'\n\t\t\t${If} $0 == \"SYSTEM\"\n\t\t\t\t; Configure winlogon to proceed to the logon dialog\n\t\t\t\tCall CleanUpRunOnce\n\t\t\t${EndIf}\n\t\t${EndIf}\n\t${EndIf}\nFunctionEnd\n"
  },
  {
    "path": "setup/Strings.nsh",
    "content": "!insertmacro MUI_LANGUAGE \"English\"\n\n; Dialog\nMiscButtonText \"Back\" \"Next\" \"Cancel\" \"Close\"\n\n; Log\nLangString ^ExecShell  ${LANG_ENGLISH} \"Execute: \"\nLangString ^Completed  ${LANG_ENGLISH} \"Done\"\nLangString Downloading ${LANG_ENGLISH} \"Downloading \"\nLangString Verifying   ${LANG_ENGLISH} \"Verifying \"\nLangString Extracting  ${LANG_ENGLISH} \"Extracting \"\nLangString Installing  ${LANG_ENGLISH} \"Installing \"\nLangString ExitCode    ${LANG_ENGLISH} \"Exit code: \"\n\nLangString RestartRequired  ${LANG_ENGLISH} \"Success - restart required\"\nLangString AlreadyInstalled ${LANG_ENGLISH} \"Installation skipped - already installed\"\nLangString NotApplicable    ${LANG_ENGLISH} \"Installation skipped - not applicable\"\n\n; Download\nLangString DownloadStatusSingle ${LANG_ENGLISH} \"{TIMEREMAINING} left - {RECVSIZE} of {FILESIZE} ({SPEED})\"\nLangString DownloadStatusMulti  ${LANG_ENGLISH} \"{TIMEREMAINING} left - {TOTALRECVSIZE} of {TOTALFILESIZE} ({SPEED})\"\n\n; Startup errors\nLangString MsgBoxUsage ${LANG_ENGLISH} \\\n\t\"Usage: setup.exe [/S] [/v] [/passive] [/norestart]$\\r$\\n\\\n\t$\\r$\\n\\\n\t/S$\\tExecute Legacy Update setup silently.$\\r$\\n\\\n\t/v$\\tDisplay verbose details during installation.$\\r$\\n\\\n\t/passive$\\tInstall without user interaction.$\\r$\\n\\\n\t/norestart$\\tDisable automatic restart during installation.$\\r$\\n\\\n\t$\\r$\\n\\\n\tIf no flags are passed, Legacy Update will launch its full user interface.$\\r$\\n\\\n\tFor more information on these flags, visit legacyupdate.net.\"\n\nLangString MsgBoxElevationRequired ${LANG_ENGLISH} \\\n\t\"Log on as an administrator to install Legacy Update.\"\n\nLangString MsgBoxOldWinVersion ${LANG_ENGLISH} \\\n\t\"Legacy Update requires Windows 2000 or later.$\\r$\\n\\\n\t$\\r$\\n\\\n\tYou might be interested in Windows Update Restored instead.$\\r$\\n\\\n\tWould you like to go to ${WUR_WEBSITE} now?\"\n\nLangString MsgBoxNeedsNT4 ${LANG_ENGLISH} \\\n\t\"Legacy Update NT is intended only for use on Windows NT 4.0.$\\r$\\n\\\n\t$\\r$\\n\\\n\tFor other versions of Windows, use the regular version of Legacy Update.$\\r$\\n\\\n\tWould you like to go to ${WEBSITE} now?\"\n\nLangString MsgBoxBetaOS ${LANG_ENGLISH} \\\n\t\"The current version of Windows is a beta build. Legacy Update may not work correctly on this version of Windows.$\\r$\\n\\\n\t$\\r$\\n\\\n\tContinue anyway?\"\n\nLangString MsgBoxOneCoreAPI ${LANG_ENGLISH} \\\n\t\"One-Core-API has been detected on this system. Installation of updates will fail while One-Core-API is installed.$\\r$\\n\\\n\t$\\r$\\n\\\n\tIt is recommended to uninstall One-Core-API, then install it again after you have installed all updates.$\\r$\\n\\\n\t$\\r$\\n\\\n\tContinue anyway?\"\n\nLangString MsgBoxNNN4NT5 ${LANG_ENGLISH} \\\n\t\"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\\\n\t$\\r$\\n\\\n\tClick the $\\\"Delete$\\\" button in NNN4NT5 to disable compatibility mode, then try again.\"\n\nLangString MsgBoxCompatMode ${LANG_ENGLISH} \\\n\t\"A compatibility mode has been set on this program. Legacy Update will not work correctly in compatibility mode.$\\r$\\n\\\n\t$\\r$\\n\\\n\tDisable it in the Properties dialog of this file and try again.\"\n\nLangString MsgBoxSetupAlreadyRunning ${LANG_ENGLISH} \\\n\t\"Legacy Update setup is already running.\"\n\nLangString MsgBoxInstallInProgress ${LANG_ENGLISH} \\\n\t\"An update is currently being installed. Please wait for that installation to finish before running Legacy Update setup again.\"\n\nLangString MsgBoxTermsrvAppInstallMode ${LANG_ENGLISH} \\\n\t\"Terminal Services is currently in Execute mode. To install Legacy Update, Terminal Services will be changed to Install mode.\"\n\nLangString MsgBoxPluginFailed ${LANG_ENGLISH} \\\n\t\"Setup failed to initialize.$\\r$\\n\\\n\t$\\r$\\n\\\n\tThe file may be corrupt. Try downloading Legacy Update again.\"\n\n; Install errors\nLangString MsgBoxCopyFailed ${LANG_ENGLISH} \\\n\t'Unable to write to \"$0\".$\\r$\\n\\\n\t$\\r$\\n\\\n\tIf Internet Explorer is open, close it and click Retry.'\n\nFileErrorText $(MsgBoxCopyFailed) $(MsgBoxCopyFailed)\n\nLangString MsgBoxDownloadAbort ${LANG_ENGLISH} \\\n\t\"Cancelling will terminate Legacy Update setup.\"\n\nLangString MsgBoxDownloadFailed ${LANG_ENGLISH} \\\n\t\"$2 failed to download.$\\r$\\n\\\n\t$\\r$\\n\\\n\t$0 ($1)\"\n\nLangString MsgBoxDownloadDNSError ${LANG_ENGLISH} \\\n\t\"$2 failed to download.$\\r$\\n\\\n\t$\\r$\\n\\\n\tLegacy Update requires an internet connection to download additional components from Microsoft. Check your internet connection and try again.$\\r$\\n\\\n\t$\\r$\\n\\\n\t$0 ($1)\"\n\nLangString MsgBoxHashFailed ${LANG_ENGLISH} \\\n\t\"$2 failed to download.$\\r$\\n\\\n\t$\\r$\\n\\\n\tThe downloaded file is corrupt. If this persists, a firewall or your internet service provider may be blocking the download.\"\n\nLangString MsgBoxInstallFailed ${LANG_ENGLISH} \\\n\t\"$2 failed to install.$\\r$\\n\\\n\t$\\r$\\n\\\n\t$1 ($0)\"\n\nLangString MsgBoxPatchNotFound ${LANG_ENGLISH} \\\n\t\"$0 failed to install.$\\r$\\n\\\n\t$\\r$\\n\\\n\tThe installed Windows language and/or architecture is not supported.\"\n\nLangString MsgBoxMUFailed ${LANG_ENGLISH} \\\n\t\"Failed to enable Microsoft Update.$\\r$\\n\\\n\t$\\r$\\n\\\n\t$1 ($0)\"\n\n; Warnings\nLangString MsgBoxWES09NotSSE2Main ${LANG_ENGLISH} \\\n\t\"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\\\n\tFor more information, visit http://legacyupdate.net/help/sse2.\"\n\nLangString MsgBoxWES09NotSSE2Block ${LANG_ENGLISH} \\\n\t\"$(MsgBoxWES09NotSSE2Main)$\\r$\\n\\\n\t$\\r$\\n\\\n\tTo protect your Windows installation from becoming damaged by incompatible updates, this option will be disabled.\"\n\nLangString MsgBoxWES09NotSSE2Pre ${LANG_ENGLISH} \\\n\t\"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\\\n\t$\\r$\\n\\\n\t$(MsgBoxWES09NotSSE2Main)\"\n\nLangString MsgBoxActivateXP2002NotSP3 ${LANG_ENGLISH} \\\n\t\"Windows XP must be updated to Service Pack 3 to activate over the internet. The Service Pack 3 update action will be enabled.\"\n\nLangString MsgBoxActivateXP2003NotSP2 ${LANG_ENGLISH} \\\n\t\"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.\"\n\nLangString MsgBoxVistaSPInstall ${LANG_ENGLISH} \\\n\t\"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.\"\n\nLangString MsgBoxWUA2000Datacenter ${LANG_ENGLISH} \\\n\t\"Windows Update Agent is not supported on Windows 2000 Datacenter Server. The Legacy Update action will be disabled.\"\n\n; Statuses\nLangString StatusRestarting     ${LANG_ENGLISH} \"Restarting...\"\nLangString StatusRestartingWUAU ${LANG_ENGLISH} \"Restarting Windows Update service...\"\nLangString StatusCheckingSSL    ${LANG_ENGLISH} \"Checking SSL connectivity...\"\nLangString StatusCbsInstalling  ${LANG_ENGLISH} \"Configuring updates...\"\nLangString StatusClosingIE      ${LANG_ENGLISH} \"Closing Internet Explorer windows...\"\n\n; Products\nLangString DX       ${LANG_ENGLISH} \"DirectX\"\nLangString IE       ${LANG_ENGLISH} \"Internet Explorer\"\nLangString MSI      ${LANG_ENGLISH} \"Windows Installer\"\nLangString VB       ${LANG_ENGLISH} \"Visual Basic\"\nLangString VC       ${LANG_ENGLISH} \"Visual C/C++\"\nLangString WMP      ${LANG_ENGLISH} \"Windows Media Player\"\nLangString Runtime  ${LANG_ENGLISH} \"Runtime\"\nLangString Runtimes ${LANG_ENGLISH} \"Runtimes\"\n\n; Editions\nLangString PRO      ${LANG_ENGLISH} \"Professional\"\nLangString P64      ${LANG_ENGLISH} \"Professional x64 Edition\"\nLangString EMB      ${LANG_ENGLISH} \"Embedded\"\nLangString SRV      ${LANG_ENGLISH} \"Server\"\nLangString WTS      ${LANG_ENGLISH} \"Terminal Server\"\n\n; Update types\nLangString Setup    ${LANG_ENGLISH} \"Setup\"\nLangString Update   ${LANG_ENGLISH} \"Update\"\nLangString Updates  ${LANG_ENGLISH} \"Updates\"\nLangString Rollup   ${LANG_ENGLISH} \"Update Rollup\"\nLangString SP       ${LANG_ENGLISH} \"Service Pack\"\nLangString PostSP   ${LANG_ENGLISH} \"Post-Service Pack\"\nLangString SecUpd   ${LANG_ENGLISH} \"Security Update\"\nLangString SSU      ${LANG_ENGLISH} \"Servicing Stack Update\"\nLangString WUA      ${LANG_ENGLISH} \"Windows Update Agent\"\nLangString PrepTool ${LANG_ENGLISH} \"Preparation Tool\"\nLangString PUS      ${LANG_ENGLISH} \"Platform Update Supplement\"\nLangString SRP      ${LANG_ENGLISH} \"Security Rollup Package\"\nLangString CRU      ${LANG_ENGLISH} \"Convenience Rollup Update\"\nLangString SHA2     ${LANG_ENGLISH} \"SHA-2 Code Signing Support Update\"\nLangString CTL      ${LANG_ENGLISH} \"Certificate Trust List\"\nLangString Unofficial ${LANG_ENGLISH} \"(Unofficial)\"\n\nLangString SectionWES09     ${LANG_ENGLISH} \"Enable Windows Embedded 2009 updates\"\nLangString SectionWS2008HVU ${LANG_ENGLISH} \"Hyper-V $(Update) for Windows Server 2008\"\nLangString SectionWHS2011U4 ${LANG_ENGLISH} \"Windows Home Server 2011 $(Rollup) 4\"\nLangString SectionW2KUR1    ${LANG_ENGLISH} \"Update Rollup 1 for Windows 2000 $(SP) 4\"\nLangString SectionSSU       ${LANG_ENGLISH} \"Windows Servicing Stack update\"\nLangString SectionWUA       ${LANG_ENGLISH} \"Windows Update Agent update\"\nLangString SectionRootCerts ${LANG_ENGLISH} \"Root certificates store update\"\nLangString SectionEnableMU  ${LANG_ENGLISH} \"Enable Microsoft Update\"\nLangString SectionActivate  ${LANG_ENGLISH} \"Activate Windows\"\nLangString SectionESU       ${LANG_ENGLISH} \"Prepare for Extended Security Updates\"\n\nLangString SectionSupEULA   ${LANG_ENGLISH} \\\n\t\"By installing, you are agreeing to the Supplemental End User License Agreement for this update.\"\nLangString SectionMSLT      ${LANG_ENGLISH} \\\n\t\"By installing, you are agreeing to the Microsoft Software License Terms for this update.\"\n\nLangString SectionW2KSP4Desc    ${LANG_ENGLISH} \\\n\t\"Updates Windows 2000 to Service Pack 4 with Update Rollup 1, as required to install the Windows Update Agent.$\\r$\\n$(SectionSupEULA)\"\nLangString SectionIE6SP1Desc    ${LANG_ENGLISH} \\\n\t\"Updates Internet Explorer to 6.0 SP1, as required for Legacy Update.$\\r$\\n$(SectionSupEULA)\"\nLangString SectionXPSP3Desc     ${LANG_ENGLISH} \\\n\t\"Updates Windows XP to Service Pack 3. Required if you would like to activate Windows online.$\\r$\\n$(SectionSupEULA)\"\nLangString SectionXPESP3Desc    ${LANG_ENGLISH} \\\n\t\"Updates Windows XP Embedded to Service Pack 3. Required if you would like to activate Windows online.$\\r$\\n$(SectionSupEULA)\"\nLangString SectionWES09Desc     ${LANG_ENGLISH} \\\n\t\"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.\"\nLangString Section2003SP2Desc   ${LANG_ENGLISH} \\\n\t\"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)\"\nLangString SectionVistaSP2Desc  ${LANG_ENGLISH} \\\n\t\"Updates Windows Vista or Windows Server 2008 to Service Pack 2, as required to install the Windows Update Agent.$\\r$\\n$(SectionMSLT)\"\nLangString SectionVistaSSUDesc ${LANG_ENGLISH} \\\n\t\"Installs additional updates required to resolve issues with the Windows Update Agent.\"\nLangString SectionVistaESUDesc  ${LANG_ENGLISH} \\\n\t\"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.\"\nLangString SectionVistaIE9Desc  ${LANG_ENGLISH} \\\n\t\"Updates Internet Explorer to 9.0, improving website compatibility.$\\r$\\n$(SectionMSLT)\"\nLangString SectionWin7SP1Desc   ${LANG_ENGLISH} \\\n\t\"Updates Windows 7 or Windows Server 2008 R2 to Service Pack 1, as required to install the Windows Update Agent.$\\r$\\n$(SectionMSLT)\"\nLangString SectionWin7CRUDesc   ${LANG_ENGLISH} \\\n\t\"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.\"\nLangString SectionWin7SSUDesc   ${LANG_ENGLISH} \\\n\t\"Updates Windows 7 or Windows Server 2008 R2 with additional updates required to resolve issues with the Windows Update Agent.\"\nLangString SectionWin8SSUDesc   ${LANG_ENGLISH} \\\n\t\"Updates Windows 8 or Windows Server 2012 with additional updates required to resolve issues with the Windows Update Agent.\"\nLangString SectionWin81U1Desc   ${LANG_ENGLISH} \\\n\t\"Updates Windows 8.1 to Update 1, as required to resolve issues with the Windows Update Agent. Also required to upgrade to Windows 10.\"\nLangString SectionWin81SSUDesc  ${LANG_ENGLISH} \\\n\t\"Updates Windows 8.1 or Windows Server 2012 R2 with additional updates required to resolve issues with the Windows Update Agent.\"\nLangString SectionWS2008HVUDesc ${LANG_ENGLISH} \\\n\t\"Updates Windows Server 2008 to the released version of Hyper-V, as required to install Service Pack 2.\"\nLangString SectionWHS2011U4Desc ${LANG_ENGLISH} \\\n\t\"Updates Windows Home Server 2011 to Update Rollup 4 to resolve issues with the Windows Update Agent. Also fixes data corruption problems.\"\nLangString SectionWUADesc       ${LANG_ENGLISH} \\\n\t\"Updates the Windows Update Agent to the latest version, as required for Legacy Update.\"\nLangString SectionRootCertsDesc ${LANG_ENGLISH} \\\n\t\"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.\"\nLangString SectionEnableMUDesc  ${LANG_ENGLISH} \\\n\t\"Configures Windows Update to receive updates for Microsoft Office and other Microsoft software.\"\nLangString SectionActivateDesc  ${LANG_ENGLISH} \\\n\t\"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.\"\nLangString SectionActiveX2KXPDesc ${LANG_ENGLISH} \\\n\t\"Installs the Legacy Update ActiveX control, enabling access to the full Windows Update interface via the legacyupdate.net website.\"\nLangString SectionActiveXVista78Desc ${LANG_ENGLISH} \\\n\t\"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.\"\nLangString SectionActiveXWin10Desc ${LANG_ENGLISH} \\\n\t\"Installs the Legacy Update ActiveX control, enabling access to the classic Windows Update interface via the legacyupdate.net website.\"\n\n; LangString SectionLegacyUpdateDesc ${LANG_ENGLISH} \\\n; \t\"Installs Legacy Update, enabling access to Windows Update.\"\n; LangString SectionWUServerDesc     ${LANG_ENGLISH} \\\n; \t\"Configures Windows Update to use the Legacy Update proxy server, resolving connection issues to the official Microsoft Windows Update service.\"\n\n; NT 4.0\nLangString MsgBoxNT4PostInstall ${LANG_ENGLISH} \\\n\t\"Legacy Update is complete. Windows is up to date.\"\n\nLangString SectionWDU           ${LANG_ENGLISH} \\\n\t\"Windows Desktop Update\"\nLangString SectionWDUYes        ${LANG_ENGLISH} \\\n\t\"Install Windows 98-style Explorer\"\nLangString SectionWDUNo         ${LANG_ENGLISH} \\\n\t\"Keep Windows 95-style Explorer\"\n\nLangString SectionNT4USB        ${LANG_ENGLISH} \\\n\t\"Inside Out Networks USB Peripheral Drivers\"\nLangString SectionSPCleanup     ${LANG_ENGLISH} \\\n\t\"Delete update uninstall data\"\n\nLangString SectionNT4WDUDesc    ${LANG_ENGLISH} \\\n\t\"Installs the updated Windows 98-style Explorer experience. This choice can not be changed later. Requires installing Internet Explorer 6.\"\nLangString SectionNT4WDUYesDesc ${LANG_ENGLISH} \\\n\t\"$(SectionNT4WDUDesc)\"\nLangString SectionNT4WDUNoDesc  ${LANG_ENGLISH} \\\n\t\"Keeps the Windows 95-style Explorer experience. This choice can not be changed later.\"\n\nLangString SectionNT4SP6ADesc   ${LANG_ENGLISH} \\\n\t\"Updates Windows NT 4.0 to Service Pack 6a with 128-bit encryption support.$\\r$\\n$(SectionSupEULA)\"\nLangString SectionNT4RollupDesc ${LANG_ENGLISH} \\\n\t\"Installs Windows NT 4.0 Service Pack 6a Security Rollup Package.$\\r$\\n$(SectionSupEULA)\"\nLangString SectionNT4PostSPDesc ${LANG_ENGLISH} \\\n\t\"Installs Windows NT 4.0 updates released after the Security Rollup Package.$\\r$\\n$(SectionSupEULA)\"\n\nLangString SectionNT4MSIDesc    ${LANG_ENGLISH} \\\n\t\"Installs Windows Installer, required to install newer applications.$\\r$\\n$(SectionSupEULA)\"\nLangString SectionNT4VCRTDesc   ${LANG_ENGLISH} \\\n\t\"Installs updated versions of the Microsoft Visual C, Visual C++, and Visual Basic runtimes, required to run newer applications.$\\r$\\n$(SectionSupEULA)\"\nLangString SectionNT4IE6SP1Desc ${LANG_ENGLISH} \\\n\t\"Installs Internet Explorer 6. Required for Windows Desktop Update.$\\r$\\n$(SectionSupEULA)\"\nLangString SectionNT4WMP64Desc  ${LANG_ENGLISH} \\\n\t\"Installs Windows Media Player 6.4.$\\r$\\n$(SectionSupEULA)\"\nLangString SectionNT4DX5Desc    ${LANG_ENGLISH} \\\n\t\"Installs DirectX 5. This is an unofficial patch. Microsoft officially supports only up to DirectX 3 on Windows NT 4.0.$\\r$\\n$(SectionSupEULA)\"\n\nLangString SectionNT4USBDesc    ${LANG_ENGLISH} \\\n\t\"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.\"\nLangString SectionSPCleanupDesc ${LANG_ENGLISH} \\\n\t\"Deletes backup files created during installation of updates. This frees up disk space, but you will not be able to uninstall updates.\"\n\n; Components page\nLangString ComponentsPageTitle     ${LANG_ENGLISH} \"Welcome to Legacy Update\"\nLangString 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.\"\n\n; Install page\nLangString InstFilesPageTitle      ${LANG_ENGLISH} \"Performing Actions\"\n\n; Uninstall confirm page\nLangString UnConfirmPageTitle      ${LANG_ENGLISH} \"Uninstall Legacy Update\"\nLangString UnConfirmPageText       ${LANG_ENGLISH} \"Legacy Update will be uninstalled. Your Windows Update configuration will be reset to directly use Microsoft servers.\"\n\n; ActiveX page\nLangString ActiveXPageTitle        ${LANG_ENGLISH} \"How do you want to use Windows Update?\"\nLangString 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.\"\nLangString ActiveXPageYesTitle     ${LANG_ENGLISH} \"Use the Legacy Update website\"\nLangString 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.\"\nLangString ActiveXPageYesText2KXP  ${LANG_ENGLISH} \"The Legacy Update website is a replacement for the original Windows Update website, allowing you to download optional updates and drivers.\"\nLangString ActiveXPageNoTitleVista ${LANG_ENGLISH} \"Use the Windows Update Control Panel\"\nLangString 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\"\nLangString ActiveXPageNoTitle2KXP  ${LANG_ENGLISH} \"Use Automatic Updates\"\nLangString ActiveXPageNoText2KXP   ${LANG_ENGLISH} \"Use the built-in Automatic Updates feature to download and install updates. You will only be able to download critical updates.\"\n\n; Reboot page\nLangString RebootPageTitle   ${LANG_ENGLISH} \"Restarting Windows\"\nLangString 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\\\n$\\r$\\n\\\nSetup will resume after restarting. Your computer may restart several times to complete installation.\"\nLangString RebootPageTimer   ${LANG_ENGLISH} \"Restarting in \"\nLangString RebootPageRestart ${LANG_ENGLISH} \"Restart\"\nLangString RebootPageLater   ${LANG_ENGLISH} \"Later\"\n"
  },
  {
    "path": "setup/UpdateRoots.nsh",
    "content": "!macro -SetSecureProtocolsBitmask root path key\n\tReadRegDword $0 ${root} \"${path}\" \"${key}\"\n\t${VerbosePrint} \"${root}\\${path}\"\n\t${VerbosePrint} \"Before: $0\"\n\n\t; If the value isn't yet set, ReadRegDword will return 0. This means TLSv1.1 and v1.2 will be the\n\t; only enabled protocols. This is intentional behavior, because SSLv2 and SSLv3 are not secure,\n\t; and TLSv1.0 is deprecated. The user can manually enable them in Internet Settings if needed.\n\t; On XP, we'll also enable TLSv1.0, given TLSv1.1 and v1.2 are only offered through an optional\n\t; POSReady 2009 update.\n\t${If} $0 == 0\n\t${AndIf} ${AtMostWinXP2003}\n\t\tIntOp $0 $0 | ${WINHTTP_FLAG_SECURE_PROTOCOL_TLS1}\n\t${EndIf}\n\tIntOp $0 $0 | ${WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1}\n\tIntOp $0 $0 | ${WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2}\n\n\t${VerbosePrint} \"After: $0\"\n\tWriteRegDword ${root} \"${path}\" \"${key}\" $0\n!macroend\n\nFunction _ConfigureCrypto\n\t; Enable SChannel TLSv1.1 and v1.2\n\tWriteRegDword HKLM \"${REGPATH_SCHANNEL_PROTOCOLS}\\TLS 1.1\\Client\" \"Enabled\" 1\n\tWriteRegDword HKLM \"${REGPATH_SCHANNEL_PROTOCOLS}\\TLS 1.1\\Client\" \"DisabledByDefault\" 0\n\tWriteRegDword HKLM \"${REGPATH_SCHANNEL_PROTOCOLS}\\TLS 1.1\\Server\" \"Enabled\" 1\n\tWriteRegDword HKLM \"${REGPATH_SCHANNEL_PROTOCOLS}\\TLS 1.1\\Server\" \"DisabledByDefault\" 0\n\tWriteRegDword HKLM \"${REGPATH_SCHANNEL_PROTOCOLS}\\TLS 1.2\\Client\" \"Enabled\" 1\n\tWriteRegDword HKLM \"${REGPATH_SCHANNEL_PROTOCOLS}\\TLS 1.2\\Client\" \"DisabledByDefault\" 0\n\tWriteRegDword HKLM \"${REGPATH_SCHANNEL_PROTOCOLS}\\TLS 1.2\\Server\" \"Enabled\" 1\n\tWriteRegDword HKLM \"${REGPATH_SCHANNEL_PROTOCOLS}\\TLS 1.2\\Server\" \"DisabledByDefault\" 0\n\n\t; Enable IE TLSv1.1 and v1.2\n\t!insertmacro -SetSecureProtocolsBitmask HKLM \"${REGPATH_INETSETTINGS}\" \"SecureProtocols\"\n\t!insertmacro -SetSecureProtocolsBitmask HKCU \"${REGPATH_INETSETTINGS}\" \"SecureProtocols\"\n\n\t; Enable WinHTTP TLSv1.1 and v1.2\n\t!insertmacro -SetSecureProtocolsBitmask HKLM \"${REGPATH_INETSETTINGS_WINHTTP}\" \"DefaultSecureProtocols\"\n\t!insertmacro -SetSecureProtocolsBitmask HKCU \"${REGPATH_INETSETTINGS_WINHTTP}\" \"DefaultSecureProtocols\"\n\n\t; Enable .NET inheriting SChannel protocol config\n\t; .NET 3 uses the same registry keys as .NET 2.\n\tWriteRegDword HKLM \"${REGPATH_DOTNET_V2}\" \"SystemDefaultTlsVersions\" 1\n\tWriteRegDword HKLM \"${REGPATH_DOTNET_V4}\" \"SystemDefaultTlsVersions\" 1\nFunctionEnd\n\nFunction ConfigureCrypto\n\t${VerbosePrint} \"Configuring crypto (native)\"\n\tCall _ConfigureCrypto\n\n\t; Repeat in the WOW64 registry if needed\n\t${If} ${RunningX64}\n\t\t${VerbosePrint} \"Configuring crypto (WOW64)\"\n\t\tSetRegView 32\n\t\tCall _ConfigureCrypto\n\t\tSetRegView 64\n\t${EndIf}\nFunctionEnd\n\n!macro _DownloadSST name\n\t!insertmacro Download \"$(CTL) (${name})\" \"${TRUSTEDR}/${name}.sst\" \"${name}.sst\" \"\" 0\n!macroend\n\nFunction DownloadRoots\n\t${DetailPrint} \"$(Downloading)$(CTL)...\"\n\t!insertmacro _DownloadSST authroots\n\t!insertmacro _DownloadSST delroots\n\t!insertmacro _DownloadSST roots\n\t!insertmacro _DownloadSST updroots\n\t!insertmacro _DownloadSST disallowedcert\nFunctionEnd\n\n!macro _InstallRoots state store file\n\tLegacyUpdateNSIS::UpdateRoots ${state} ${store} \"${file}\"\n\tPop $0\n\t${If} $0 != 0\n\t\tLegacyUpdateNSIS::MessageForHresult $0\n\t\tPop $1\n\t\tStrCpy $2 \"$(CTL) (${file})\"\n\t\tMessageBox MB_USERICON \"$(MsgBoxInstallFailed)\" /SD IDOK\n\t\tSetErrorLevel $0\n\t\tAbort\n\t${EndIf}\n!macroend\n\nFunction UpdateRoots\n\t${DetailPrint} \"$(Installing)$(CTL)...\"\n\t!insertmacro _InstallRoots /update AuthRoot authroots.sst\n\t!insertmacro _InstallRoots /update AuthRoot updroots.sst\n\t!insertmacro _InstallRoots /update Root roots.sst\n\t!insertmacro _InstallRoots /delete AuthRoot delroots.sst\n\t!insertmacro _InstallRoots /update Disallowed disallowedcert.sst\n\n\tWriteRegStr   HKLM \"${REGPATH_COMPONENTS}\\${ROOTSUPDATE_GUID}\" \"\"            \"RootsUpdate\"\n\tWriteRegDword HKLM \"${REGPATH_COMPONENTS}\\${ROOTSUPDATE_GUID}\" \"IsInstalled\" 1\n\tWriteRegStr   HKLM \"${REGPATH_COMPONENTS}\\${ROOTSUPDATE_GUID}\" \"Version\"     \"1337,0,2195,0\"\n\tWriteRegStr   HKLM \"${REGPATH_COMPONENTS}\\${ROOTSUPDATE_GUID}\" \"Locale\"      \"*\"\n\tWriteRegStr   HKLM \"${REGPATH_COMPONENTS}\\${ROOTSUPDATE_GUID}\" \"ComponentID\" \"Windows Roots Update\"\n\n\tLegacyUpdateNSIS::SetRootsUpdateTime\nFunctionEnd\n"
  },
  {
    "path": "setup/Win32.nsh",
    "content": "; advapi32\n!define GetUserName              'advapi32::GetUserName(t, *i) i'\n\n; cbscore\n!define CBS_EXECUTE_STATE_NONE  -1         ; Officially -1 in cbscore.dll, but underflows in the registry.\n!define CBS_EXECUTE_STATE_NONE2 0xffffffff ; We can get one or the other depending on the OS.\n\n; kernel32\n!define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10\n\n!define ES_CONTINUOUS      0x80000000\n!define ES_SYSTEM_REQUIRED 0x00000001\n\n!define GetVersion               'kernel32::GetVersion() i'\n!define GetVersionEx             'kernel32::GetVersionEx(pr) i'\n!define IsProcessorFeaturePresent 'kernel32::IsProcessorFeaturePresent(i) i'\n!define SetThreadExecutionState  'kernel32::SetThreadExecutionState(i) i'\n!define OpenEvent                'kernel32::OpenEvent(i, i, t) i'\n!define OpenMutex                'kernel32::OpenMutex(i, i, t) i'\n!define CreateMutex              'kernel32::CreateMutex(i, i, t) i'\n!define SetEvent                 'kernel32::SetEvent(i) i'\n!define CloseHandle              'kernel32::CloseHandle(i) i'\n!define DeleteFile               'kernel32::DeleteFile(t) i'\n!define TermsrvAppInstallMode    'kernel32::TermsrvAppInstallMode() i'\n!define SetTermsrvAppInstallMode 'kernel32::SetTermsrvAppInstallMode(i) i'\n!define SetEnvironmentVariable   'kernel32::SetEnvironmentVariable(t, t) i'\n\n; ntdll\n!define RtlGetNtVersionNumbers   'ntdll::RtlGetNtVersionNumbers(*i, *i, *i)'\n\n; shell32\n!define RestartDialog            'shell32::RestartDialog(p, t, i) i'\n\n; user32\n!define EWX_REBOOT 0x02\n\n!define PBS_SMOOTH  0x02\n!define PBS_MARQUEE 0x08\n\n!define GetSystemMetrics         'user32::GetSystemMetrics(i) i'\n\n; winhttp\n!define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1   0x00000080\n!define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 0x00000200\n!define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2 0x00000800\n\n; wininet\n!define INTERNET_FLAG_RELOAD          0x80000000\n!define INTERNET_FLAG_NO_CACHE_WRITE  0x04000000\n!define INTERNET_FLAG_KEEP_CONNECTION 0x00400000\n!define INTERNET_FLAG_NO_COOKIES      0x00080000\n!define INTERNET_FLAG_NO_UI           0x00000200\n\n!define SECURITY_FLAG_STRENGTH_STRONG 0x20000000\n\n!define ERROR_INTERNET_NAME_NOT_RESOLVED    12007\n!define ERROR_INTERNET_OPERATION_CANCELLED  12017\n\n; winlogon\n!define SETUP_TYPE_NORMAL     0\n!define SETUP_TYPE_NOREBOOT   2\n!define SETUP_SHUTDOWN_REBOOT 1\n\n; wuapi\n!define WU_S_ALREADY_INSTALLED 2359302     ; 0x00240006\n!define WU_E_NOT_APPLICABLE    -2145124329 ; 0x80240017\n\n!define WU_MU_SERVICE_ID       \"7971f918-a847-4430-9279-4a52d1efe18d\"\n"
  },
  {
    "path": "setup/WinVer.nsh",
    "content": "; NSIS WinVer.nsh rewritten to work more like what I expect.\n\n!include LogicLib.nsh\n!include Util.nsh\n\n; Defines\n\n!define OSVERSIONINFOW_SIZE      276\n!define OSVERSIONINFOEXW_SIZE    284\n\n!define WINVER_NT4               0x0400 ;  4.0.1381\n!define WINVER_2000              0x0500 ;  5.0.2195\n!define WINVER_XP                0x0501 ;  5.1.2600\n!define WINVER_XP2002            0x0501 ;  5.1.2600\n!define WINVER_XP2003            0x0502 ;  5.2.3790\n!define WINVER_VISTA             0x0600 ;  6.0.6000\n!define WINVER_7                 0x0601 ;  6.1.7600\n!define WINVER_8                 0x0602 ;  6.2.9200\n!define WINVER_8.1               0x0603 ;  6.3.9600\n!define WINVER_10TP              0x0604 ;  6.4.9841-9883\n!define WINVER_10                0x0A00 ; 10.0.10240\n\n!define WINVER_SERVER_2000       ${WINVER_2000}\n!define WINVER_SERVER_2003       ${WINVER_XP2003}\n!define WINVER_SERVER_2003R2     ${WINVER_XP2003}\n!define WINVER_SERVER_2008       ${WINVER_VISTA}\n!define WINVER_SERVER_2008R2     ${WINVER_7}\n!define WINVER_SERVER_2012       ${WINVER_8}\n!define WINVER_SERVER_2012R2     ${WINVER_8.1}\n!define WINVER_SERVER_2016       ${WINVER_10}\n\n!define WINVER_BUILD_NT4         1381\n!define WINVER_BUILD_2000        2195\n!define WINVER_BUILD_XP2002      2600\n!define WINVER_BUILD_XP2003      3790\n!define WINVER_BUILD_VISTA       6000\n!define WINVER_BUILD_VISTA_SP1   6001\n!define WINVER_BUILD_VISTA_SP2   6002\n!define WINVER_BUILD_VISTA_ESU   6003\n!define WINVER_BUILD_7           7600\n!define WINVER_BUILD_7_SP1       7601\n!define WINVER_BUILD_8           9200\n!define WINVER_BUILD_8.1         9600\n!define WINVER_BUILD_10          10240\n!define WINVER_BUILD_11          22000\n\n!define /ifndef VER_NT_WORKSTATION 1\n\n!define VER_SUITE_BACKOFFICE     0x00000004 ; Microsoft BackOffice\n!define VER_SUITE_BLADE          0x00000400 ; Windows Server 2003, Web Edition\n!define VER_SUITE_COMPUTE_SERVER 0x00004000 ; Windows Server 2003, Compute Cluster Edition\n!define VER_SUITE_DATACENTER     0x00000080 ; Windows Server Datacenter\n!define VER_SUITE_ENTERPRISE     0x00000002 ; Windows Server Enterprise\n!define VER_SUITE_EMBEDDEDNT     0x00000040 ; Windows Embedded\n!define VER_SUITE_PERSONAL       0x00000200 ; Windows Home Edition\n!define VER_SUITE_SINGLEUSERTS   0x00000100 ; Single-user Remote Desktop\n!define VER_SUITE_SMALLBUSINESS  0x00000001 ; Small Business Server\n!define VER_SUITE_SMALLBUSINESS_RESTRICTED 0x00000020 ; Small Business Server (restrictive client license)\n!define VER_SUITE_STORAGE_SERVER 0x00002000 ; Windows Storage Server 2003\n!define VER_SUITE_TERMINAL       0x00000010 ; Terminal Services (always true since XP)\n!define VER_SUITE_WH_SERVER      0x00008000 ; Windows Home Server\n!define VER_SUITE_MULTIUSERTS    0x00020000 ; Multi-user Remote Desktop\n\n!define SM_CLEANBOOT             67\n\n; Init\n\n!macro __WinVer_Init\n\t!ifndef __WINVER_VARS_DECLARED\n\t\t!define __WINVER_VARS_DECLARED\n\n\t\tVar /GLOBAL __WINVEROS\n\t\tVar /GLOBAL __WINVERBUILD\n\t\tVar /GLOBAL __WINVERSP\n\t!endif\n\n\tStrCmp $__WINVEROS \"\" _winver_noveryet\n\t\tReturn\n\n\t_winver_noveryet:\n\t\tGetWinVer $__WINVEROS    NTDDIMajMin\n\t\tGetWinVer $__WINVERBUILD Build\n\t\tGetWinVer $__WINVERSP    ServicePack\n!macroend\n\n!macro __WinVer_InitEx\n\t!ifndef __WINVER_VARS_DECLARED_EX\n\t\t!define __WINVER_VARS_DECLARED_EX\n\n\t\tVar /GLOBAL __WINVERSUITE\n\t\tVar /GLOBAL __WINVERPROD\n\t!endif\n\n\tStrCmp $__WINVERSUITE \"\" _winver_noveryet_ex\n\t\tReturn\n\n\t_winver_noveryet_ex:\n\t\tPush $0\n\t\tPush $1\n\t\tPush $2\n\t\tSystem::Alloc ${OSVERSIONINFOEXW_SIZE}\n\t\tPop $0\n\t\tSystem::Call '*$0(i ${OSVERSIONINFOEXW_SIZE})'\n\t\tSystem::Call '${GetVersionEx}(.r0)'\n\t\tSystem::Call '*$0(i, i, i, i, i, &t128, h, h, h .r1, b .r2, b)'\n\t\tSystem::Free $0\n\t\tStrCpy $__WINVERSUITE $1\n\t\tStrCpy $__WINVERPROD  $2\n\t\tPop $2\n\t\tPop $1\n\t\tPop $0\n!macroend\n\n; Tests\n\n!macro __WinVer_TestOS op num _t _f\n\t${CallArtificialFunction} __WinVer_Init\n\t!insertmacro _${op} $__WINVEROS ${num} `${_t}` `${_f}`\n!macroend\n\n!macro __WinVer_TestBuild op num _t _f\n\t${CallArtificialFunction} __WinVer_Init\n\t!insertmacro _${op} $__WINVERBUILD ${num} `${_t}` `${_f}`\n!macroend\n\n!macro __WinVer_TestSP op num _t _f\n\t${CallArtificialFunction} __WinVer_Init\n\t!insertmacro _${op} $__WINVERSP ${num} `${_t}` `${_f}`\n!macroend\n\n!macro __WinVer_TestSuite _a num _t _f\n\t!insertmacro _LOGICLIB_TEMP\n\t${CallArtificialFunction} __WinVer_InitEx\n\tIntOp $_LOGICLIB_TEMP $__WINVERSUITE & ${num}\n\t!insertmacro _= $_LOGICLIB_TEMP ${num} `${_t}` `${_f}`\n!macroend\n\n!macro __WinVer_TestProduct op num _t _f\n\t${CallArtificialFunction} __WinVer_InitEx\n\t!insertmacro _${op} $__WINVERPROD ${num} `${_t}` `${_f}`\n!macroend\n\n!macro __WinVer_TestSystemMetric op metric _t _f\n\t!insertmacro _LOGICLIB_TEMP\n\t${CallArtificialFunction} __WinVer_Init\n\tSystem::Call '${GetSystemMetrics}(${metric}) .s'\n\tPop $_LOGICLIB_TEMP\n\t!insertmacro _${op} $_LOGICLIB_TEMP 0 `${_t}` `${_f}`\n!macroend\n\n!macro __WinVer_TestXPWPAEdition _a key _t _f\n\t!insertmacro _LOGICLIB_TEMP\n\tReadRegDword $_LOGICLIB_TEMP HKLM \"${REGPATH_WPA}\\${key}\" \"Installed\"\n\t!insertmacro _= $_LOGICLIB_TEMP 1 `${_t}` `${_f}`\n!macroend\n\n; Defines\n\n; TODO: This is apparently insufficient prior to NT4 SP6?\n!define IsClientOS         `=  _WinVer_TestProduct ${VER_NT_WORKSTATION}`\n!define IsServerOS         `!= _WinVer_TestProduct ${VER_NT_WORKSTATION}`\n\n!define IsHomeEdition      `\"\" _WinVer_TestSuite ${VER_SUITE_PERSONAL}`\n!define IsEmbedded         `\"\" _WinVer_TestSuite ${VER_SUITE_EMBEDDEDNT}`\n!define IsDatacenter       `\"\" _WinVer_TestSuite ${VER_SUITE_DATACENTER}`\n!define IsTerminalServer   `\"\" _WinVer_TestSuite ${VER_SUITE_TERMINAL}`\n!define IsHomeServer       `\"\" _WinVer_TestSuite ${VER_SUITE_WH_SERVER}`\n\n!define IsSafeMode         `!= _WinVer_TestSystemMetric ${SM_CLEANBOOT}`\n\n!define IsServicePack      `=  _WinVer_TestSP`\n!define AtLeastServicePack `>= _WinVer_TestSP`\n!define AtMostServicePack  `<= _WinVer_TestSP`\n\n!macro __WinVer_DefineClient os\n\t!define IsWin${os}       `=  _WinVer_TestOS ${WINVER_${os}}`\n\t!define AtLeastWin${os}  `>= _WinVer_TestOS ${WINVER_${os}}`\n\t!define AtMostWin${os}   `<= _WinVer_TestOS ${WINVER_${os}}`\n!macroend\n\n!macro __WinVer_DefineServer os\n\t!define IsWin${os}       `=  _WinVer_TestOS ${WINVER_SERVER_${os}}`\n\t!define AtLeastWin${os}  `>= _WinVer_TestOS ${WINVER_SERVER_${os}}`\n\t!define AtMostWin${os}   `<= _WinVer_TestOS ${WINVER_SERVER_${os}}`\n!macroend\n\n!macro __WinVer_DefineBuild os\n\t!define IsWin${os}       `=  _WinVer_TestBuild ${WINVER_BUILD_${os}}`\n\t!define AtLeastWin${os}  `>= _WinVer_TestBuild ${WINVER_BUILD_${os}}`\n\t!define AtMostWin${os}   `<= _WinVer_TestBuild ${WINVER_BUILD_${os}}`\n!macroend\n\n!macro __WinVer_DefineXPWPAEdition key\n\t!define IsWinXP${key}    `=  _WinVer_TestXPWPAEdition ${key}`\n!macroend\n\n!insertmacro __WinVer_DefineClient NT4\n!insertmacro __WinVer_DefineClient 2000\n!insertmacro __WinVer_DefineClient XP2002\n!insertmacro __WinVer_DefineClient XP2003\n!insertmacro __WinVer_DefineClient Vista\n!insertmacro __WinVer_DefineClient 7\n!insertmacro __WinVer_DefineClient 8\n!insertmacro __WinVer_DefineClient 8.1\n!insertmacro __WinVer_DefineClient 10\n\n!insertmacro __WinVer_DefineServer 2003\n!insertmacro __WinVer_DefineServer 2003R2\n!insertmacro __WinVer_DefineServer 2008\n!insertmacro __WinVer_DefineServer 2008R2\n!insertmacro __WinVer_DefineServer 2012\n!insertmacro __WinVer_DefineServer 2012R2\n!insertmacro __WinVer_DefineServer 2016\n\n!insertmacro __WinVer_DefineBuild  11\n\n!insertmacro __WinVer_DefineXPWPAEdition MediaCenter\n!insertmacro __WinVer_DefineXPWPAEdition TabletPC\n!insertmacro __WinVer_DefineXPWPAEdition WES\n!insertmacro __WinVer_DefineXPWPAEdition POSReady\n"
  },
  {
    "path": "setup/codebase/lucontrl.ddf",
    "content": ".Set CabinetNameTemplate=lucontrl.cab\n.Set CompressionType=MSZIP\n.Set CompressionLevel=7\n.Set InfFileName=lucontrl_layout.inf\n.Set MaxDiskSize=CDROM\n.Set ReservePerCabinetSize=6144\n.Set InfCabinetLineFormat=*cab#*=Application Source Media,*cabfile*,0\n.Set Compress=on\n.Set CompressionMemory=21\n.Set DiskDirectoryTemplate=\n.Set Cabinet=ON\n.Set MaxCabinetSize=999999999\n.Set InfDiskHeader=\n.Set InfDiskLineFormat=\n.Set InfCabinetHeader=[SourceDisksNames]\n.Set InfFileHeader=\n.Set InfFileHeader1=[SourceDisksFiles]\n.Set InfFileLineFormat=*file*=*cab#*,,*size*,*csum*\nsetup.inf\nsetup.exe\n"
  },
  {
    "path": "setup/codebase/setup.inf",
    "content": "[Version]\nSignature=\"$CHICAGO$\"\nAdvancedINF=2.0\n\n[Setup Hooks]\nsetup=setup\n\n[setup]\nrun=\"%EXTRACT_DIR%\\setup.exe\" /activex\n"
  },
  {
    "path": "setup/codebase/test.html",
    "content": "<object classid=\"CLSID:AD28E0DF-5F5A-40B5-9432-85EFD97D1F9F\" codebase=\"/lucontrl.cab#version=1,9,0,0\" viewastext></object>\n"
  },
  {
    "path": "setup/patches/.gitignore",
    "content": "# Only commit redists\n**/*\n!.gitignore\n!redist\n!redist/**/*\n"
  },
  {
    "path": "setup/resource.c",
    "content": "void DllMain() {}\n"
  },
  {
    "path": "setup/resource.h",
    "content": "// Root dialog\n#define IDD_INST            105\n#define IDC_BACK            3\n#define IDC_CHILDRECT       1018\n#define IDC_VERSTR          1028\n\n// Common\n#define IDC_INTROTEXT       1006\n#define IDC_EDIT1           1000\n\n// License\n#define IDD_LICENSE         102\n#define IDC_LICENSEAGREE    1034\n#define IDC_LICENSEDISAGREE 1035\n\n// License - radio buttons\n#define IDD_LICENSE_FSRB    108\n\n// License - checkbox\n#define IDD_LICENSE_FSCB    109\n\n// Directory\n#define IDD_DIR             103\n#define IDC_DIR             1019\n#define IDC_BROWSE          1001\n#define IDC_CHECK1          1008\n#define IDC_SELDIRTEXT      1020\n#define IDC_SPACEREQUIRED   1023\n#define IDC_SPACEAVAILABLE  1024\n\n// Components\n#define IDD_SELCOM          104\n#define IDC_TREE1           1032\n#define IDC_COMBO1          1017\n#define IDC_TEXT1           1021\n#define IDC_TEXT2           1022\n\n// Install files\n#define IDD_INSTFILES       106\n#define IDC_LIST1           1016\n#define IDC_PROGRESS        1004\n#define IDC_SHOWDETAILS     1027\n\n// Uninstall\n#define IDD_UNINST          107\n#define IDC_UNINSTFROM      1029\n\n// Verifying\n#define IDD_VERIFY          111\n#define IDI_ICON2           103\n#define IDC_STR             1030\n"
  },
  {
    "path": "setup/resource.rc",
    "content": "#include \"resource.h\"\n#include <windows.h>\n#include <richedit.h>\n\n#define OUTER_WIDTH         363\n#define OUTER_HEIGHT        246\n\n#define INNER_LEFT          25\n#define INNER_WIDTH         325\n#define INNER_HEIGHT        131\n#define INNER_WIDTH_ALIGNED INNER_WIDTH - 12\n\n/////////////////////////////////////////////////////////////////////////////\n// English (United States) resources\n\n#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\nLANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\n#pragma code_page(65001)\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Dialogs\n//\n\nIDD_INST DIALOGEX 0, 0, OUTER_WIDTH, OUTER_HEIGHT\nSTYLE DS_SHELLFONT | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\nEXSTYLE WS_EX_WINDOWEDGE | WS_EX_APPWINDOW\nCAPTION \"Template\"\nFONT 8, \"MS Shell Dlg\", 0, 0, 0x1\nBEGIN\n\t// Bottom divider\n\tLTEXT      \"\",         6900,                0, OUTER_HEIGHT - 26, OUTER_WIDTH + 2, 1, SS_ETCHEDHORZ | WS_CHILD | WS_GROUP\n\t// Bottom background\n\tLTEXT      \"\",         6901,                0, OUTER_HEIGHT - 25, OUTER_WIDTH, 25, WS_CHILD | WS_GROUP\n\t// Buttons\n\tPUSHBUTTON \"Back\",     IDABORT,             OUTER_WIDTH - 148, OUTER_HEIGHT - 20, 45, 14, BS_PUSHBUTTON | WS_GROUP | WS_TABSTOP\n\tPUSHBUTTON \"Next\",     IDOK,                OUTER_WIDTH - 102, OUTER_HEIGHT - 20, 45, 14, BS_PUSHBUTTON | WS_TABSTOP\n\tPUSHBUTTON \"Cancel\",   IDCANCEL,            OUTER_WIDTH - 52, OUTER_HEIGHT - 20, 45, 14, BS_PUSHBUTTON | WS_TABSTOP\n\t// Branding\n\tLTEXT      \"Branding\", IDC_VERSTR,          INNER_LEFT, OUTER_HEIGHT - 17, OUTER_WIDTH - 183, 11, WS_DISABLED\n\t// Inner content\n\tLTEXT      \"\",         IDC_CHILDRECT,       INNER_LEFT, 75, INNER_WIDTH, INNER_HEIGHT, SS_BLACKRECT | WS_GROUP | NOT WS_VISIBLE\n\t// Title\n\tLTEXT      \"Title\",    1037,                INNER_LEFT, 52, INNER_WIDTH, 36, 0\n\t// Top divider\n\tLTEXT      \"\",         1047,                0, 40, OUTER_WIDTH + 2, 1, SS_ETCHEDHORZ | WS_CHILD | WS_GROUP\n\t// Banner\n\tLTEXT      \"\",         1046,                0, 0, OUTER_WIDTH, 40, SS_BITMAP | WS_CHILD\nEND\n\nIDD_LICENSE DIALOGEX 0, 0, INNER_WIDTH, INNER_HEIGHT\nSTYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CAPTION\nFONT 8, \"MS Shell Dlg\", 0, 0, 0x1\nBEGIN\n\t// Unused\n\tCONTROL    \"\",         IDC_EDIT1,           \"RichEdit20W\", ES_MULTILINE | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 0, 0, 0, 0\nEND\n\nIDD_DIR DIALOGEX 0, 0, INNER_WIDTH, INNER_HEIGHT\nSTYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD\nFONT 8, \"MS Shell Dlg\", 0, 0, 0x1\nBEGIN\n\t// Unused\n\tEDITTEXT               IDC_DIR,             0, 0, 0, 0, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP\n\tPUSHBUTTON \"\",         IDC_BROWSE,          0, 0, 0, 0, BS_PUSHBUTTON | WS_TABSTOP\nEND\n\nIDD_SELCOM DIALOGEX 0, 0, INNER_WIDTH, INNER_HEIGHT\nSTYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD\nFONT 8, \"MS Shell Dlg\", 0, 0, 0x1\nBEGIN\n\t// Intro text\n\tLTEXT      \"Text\\nText\\nText\", IDC_INTROTEXT, 0, 0, INNER_WIDTH, 31, 0\n\t// Selection\n\tCONTROL    \"\",         IDC_TREE1,           \"SysTreeView32\", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_DISABLEDRAGDROP | WS_BORDER | WS_TABSTOP, 0, 32, INNER_WIDTH_ALIGNED, 60\n\t// Description\n\tLTEXT      \"\",         1043,                0, 99, INNER_WIDTH, 32, 0\n\t// Unused\n\tCOMBOBOX               IDC_COMBO1,          0, 0, 0, 0, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | NOT WS_VISIBLE\nEND\n\nIDD_INSTFILES DIALOGEX 0, 0, INNER_WIDTH, INNER_HEIGHT\nSTYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD\nFONT 8, \"MS Shell Dlg\", 0, 0, 0x1\nBEGIN\n\t// Show details\n\tPUSHBUTTON \"\",         IDC_SHOWDETAILS,     0, 33, 60, 14, BS_PUSHBUTTON\n\t// Progress\n\tCONTROL    \"\",         IDC_PROGRESS,        \"msctls_progress32\", WS_BORDER, 0, 16, INNER_WIDTH_ALIGNED, 10\n\t// Intro text\n\tLTEXT      \"\",         IDC_INTROTEXT,       0, 0, INNER_WIDTH, 16, SS_LEFTNOWORDWRAP | SS_NOPREFIX\n\t// Details list\n\tCONTROL    \"\",         IDC_LIST1,           \"SysListView32\", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP | NOT WS_VISIBLE, 0, 33, INNER_WIDTH_ALIGNED, INNER_HEIGHT - 34\nEND\n\nIDD_UNINST DIALOGEX 0, 0, INNER_WIDTH, INNER_HEIGHT\nSTYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD\nFONT 8, \"MS Shell Dlg\", 0, 0, 0x1\nBEGIN\n\t// Uninstall path label\n\tLTEXT      \"\",         IDC_UNINSTFROM,      0, 42, 65, 8, 0\n\t// Uninstall path\n\tEDITTEXT               IDC_EDIT1,           70, 40, INNER_WIDTH_ALIGNED - 79, 12, ES_AUTOHSCROLL | ES_READONLY | WS_BORDER | WS_TABSTOP\n\t// Intro text\n\tLTEXT      \"\",         IDC_INTROTEXT,       0, 0, INNER_WIDTH, 30, 0\nEND\n\nIDD_LICENSE_FSRB DIALOGEX 0, 0, INNER_WIDTH, INNER_HEIGHT\nSTYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CAPTION\nFONT 8, \"MS Shell Dlg\", 0, 0, 0x1\nBEGIN\n\t// Unused\n\tCONTROL    \"\",         IDC_EDIT1,           \"RichEdit20W\", ES_MULTILINE | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 0, 0, 0, 0\n\tPUSHBUTTON \"\",         IDC_LICENSEAGREE,    0, 0, 0, 0, BS_AUTORADIOBUTTON | WS_TABSTOP\n\tPUSHBUTTON \"\",         IDC_LICENSEDISAGREE, 0, 0, 0, 0, BS_AUTORADIOBUTTON | WS_TABSTOP\nEND\n\nIDD_LICENSE_FSCB DIALOGEX 0, 0, INNER_WIDTH, INNER_HEIGHT\nSTYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CAPTION\nFONT 8, \"MS Shell Dlg\", 0, 0, 0x1\nBEGIN\n\t// Unused\n\tCONTROL    \"\",         IDC_EDIT1,           \"RichEdit20W\", ES_MULTILINE | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 0, 0, 0, 0\n\tPUSHBUTTON \"\",         IDC_LICENSEAGREE,    0, 0, 0, 0, BS_AUTOCHECKBOX | WS_TABSTOP\nEND\n\nIDD_VERIFY DIALOGEX 0, 0, 167, 43\nSTYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP\nFONT 8, \"MS Shell Dlg\", 0, 0, 0x1\nBEGIN\n\t// Status\n\tCTEXT      \"\",         IDC_STR,             40, 26, 120, 10, 0\n\t// Icon\n\tICON                   IDI_ICON2,           -1, 10, 11, 21, 20, 0\n\t// Loading text\n\tCTEXT      \"Please wait while Setup is loading...\", 76, 40, 10, 120, 16, 0\nEND\n\n#endif    // English (United States) resources\n/////////////////////////////////////////////////////////////////////////////\n"
  },
  {
    "path": "setup/setup-nt4.nsi",
    "content": "!include Constants.nsh\n\nName         \"${NAME}\"\nCaption      \"${NAME}\"\nBrandingText \"${NAME} ${VERSION} - ${DOMAIN}\"\nOutFile      \"LegacyUpdateNT-${VERSION}.exe\"\nInstallDir   \"$PROGRAMFILES32\\Legacy Update\"\nInstallDirRegKey HKLM \"${REGPATH_LEGACYUPDATE_SETUP}\" \"InstallLocation\"\n\nUnicode               true\nRequestExecutionLevel admin\nAutoCloseWindow       true\nManifestSupportedOS   all\nManifestDPIAware      true\nAllowSkipFiles        off\nSetCompressor         /SOLID lzma\n\nVIAddVersionKey /LANG=1033 \"ProductName\"     \"${NAME}\"\nVIAddVersionKey /LANG=1033 \"ProductVersion\"  \"${LONGVERSION}\"\nVIAddVersionKey /LANG=1033 \"CompanyName\"     \"Hashbang Productions\"\nVIAddVersionKey /LANG=1033 \"LegalCopyright\"  \"${U+00A9} Hashbang Productions. All rights reserved.\"\nVIAddVersionKey /LANG=1033 \"FileDescription\" \"${NAME}\"\nVIAddVersionKey /LANG=1033 \"FileVersion\"     \"${LONGVERSION}\"\nVIProductVersion ${LONGVERSION}\nVIFileVersion    ${LONGVERSION}\n\nReserveFile \"${NSIS_TARGET}\\System.dll\"\nReserveFile \"${NSIS_TARGET}\\NSxfer.dll\"\nReserveFile \"${NSIS_TARGET}\\LegacyUpdateNSIS.dll\"\nReserveFile \"banner-wordmark-nt4.bmp\"\nReserveFile \"banner-wordmark-nt4-low.bmp\"\nReserveFile \"PatchesNT4.ini\"\n\n!define RUNONCEDIR \"$COMMONPROGRAMDATA\\Legacy Update\"\n\n!define MUI_UI                       \"obj\\resource.dll\"\n!define MUI_UI_HEADERIMAGE           \"obj\\resource.dll\"\n!define MUI_COMPONENTSPAGE_CHECKBITMAP \"${NSISDIR}\\Contrib\\Graphics\\Checks\\classic.bmp\"\n\n!define MUI_CUSTOMFUNCTION_ABORT     CleanUp\n\n!define MUI_ICON                     \"..\\LegacyUpdate\\icon.ico\"\n!define MUI_UNICON                   \"..\\LegacyUpdate\\icon.ico\"\n\n!define MUI_HEADERIMAGE\n!define MUI_HEADERIMAGE_BITMAP       \"banner-wordmark-nt4.bmp\"\n!define MUI_HEADERIMAGE_UNBITMAP     \"banner-wordmark-nt4.bmp\"\n\n!define MUI_TEXT_ABORT_TITLE         \"Installation Failed\"\n\n!define MEMENTO_REGISTRY_ROOT        HKLM\n!define MEMENTO_REGISTRY_KEY         \"${REGPATH_LEGACYUPDATE_SETUP}\"\n\n!include FileFunc.nsh\n!include Integration.nsh\n!include LogicLib.nsh\n!include Memento.nsh\n!include MUI2.nsh\n!include nsDialogs.nsh\n!include Sections.nsh\n!include Win\\COM.nsh\n!include Win\\WinError.nsh\n!include Win\\WinNT.nsh\n!include WinCore.nsh\n!include WinMessages.nsh\n!include WinVer.nsh\n!include WordFunc.nsh\n!include x64.nsh\n\n!include Win32.nsh\n!include Common.nsh\n!include PatchInstall.nsh\n!include RunOnce.nsh\n!include AeroWizard.nsh\n!include DownloadIE.nsh\n!include DownloadNT4.nsh\n!include UpdateRoots.nsh\n\n!insertmacro GetParameters\n!insertmacro GetOptions\n\n!define MUI_PAGE_HEADER_TEXT         \"$(ComponentsPageTitle)\"\n!define MUI_COMPONENTSPAGE_TEXT_TOP  \"$(ComponentsPageText)\"\n!define MUI_PAGE_CUSTOMFUNCTION_PRE  ComponentsPageCheck\n!define MUI_PAGE_CUSTOMFUNCTION_SHOW OnShow\n!define MUI_PAGE_FUNCTION_GUIINIT    OnShow\n\n!insertmacro MUI_PAGE_COMPONENTS\n\n!define MUI_PAGE_HEADER_TEXT         \"$(InstFilesPageTitle)\"\n!define MUI_PAGE_CUSTOMFUNCTION_SHOW OnShow\n\n!insertmacro MUI_PAGE_INSTFILES\n\n!include Strings.nsh\n\nFunction OnShow\n\tCall AeroWizardOnShow\nFunctionEnd\n\nSection -BeforeInstall\n\t!insertmacro InhibitSleep 1\nSectionEnd\n\nSection -PreDownload\n\t${IfNot} ${IsRunOnce}\n\t${AndIfNot} ${IsPostInstall}\n\t\tCall PreDownload\n\t${EndIf}\nSectionEnd\n\nSection - PREREQS_START\nSectionEnd\n\nSectionGroup /e \"$(SectionWDU)\" NT4WDU\n\t${MementoSection} \"$(SectionWDUYes)\" NT4WDUYes\n\t\t; No-op; used during IE5.5 install\n\t${MementoSectionEnd}\n\n\t${MementoSection} \"$(SectionWDUNo)\" NT4WDUNo\n\t\t; No-op; used during IE5.5 install\n\t${MementoSectionEnd}\nSectionGroupEnd\n\nSectionGroup /e \"Windows NT 4.0 $(Updates)\" NT4Updates\n\tSection \"Windows NT 4.0 $(SP) 6a\" NT4SP6A\n\t\tSectionIn Ro\n\t\tCall InstallNT4SP6A ; SP6I386\n\t\tCall RebootIfRequired\n\tSectionEnd\n\n\tSection \"Windows NT 4.0 $(SRP)\" NT4ROLLUP\n\t\tSectionIn Ro\n\t\tCall InstallNT4Rollup ; Q299444\n\tSectionEnd\n\n\tSection \"Windows NT 4.0 $(PostSP) 6a $(Updates)\" NT4POSTSP\n\t\tSectionIn Ro\n\t\t; Workstation/Server\n\t\tCall InstallKB243649\n\t\tCall InstallKB304158\n\t\tCall InstallKB314147\n\t\tCall InstallKB318138\n\t\tCall InstallKB320206\n\t\tCall InstallKB326830\n\t\tCall InstallKB329115\n\t\tCall InstallKB810833\n\t\tCall InstallKB815021\n\t\tCall InstallKB817606\n\t\tCall InstallKB819696\n\t\t; Server-only\n\t\tCall InstallKB823182\n\t\tCall InstallKB823803\n\t\tCall InstallKB824105\n\t\tCall InstallKB824141\n\t\tCall InstallKB824146\n\t\tCall InstallKB825119\n\t\tCall InstallKB828035\n\t\tCall InstallKB828741\n\t\tCall InstallNT4KB835732\n\t\tCall InstallKB839645\n\t\tCall InstallKB841533\n\t\tCall InstallKB841872\n\t\tCall InstallKB870763\n\t\tCall InstallKB873339\n\t\tCall InstallKB873350\n\t\tCall InstallKB885249\n\t\tCall InstallKB885834\n\t\tCall InstallKB885835\n\t\tCall InstallKB885836\n\t\tCall InstallKB891711\n\t\tCall RebootIfRequired\n\tSectionEnd\nSectionGroupEnd\n\nSectionGroup /e \"$(Runtimes)\" NT4Runtimes\n\t${MementoSection} \"$(MSI)\" NT4MSI\n\t\tCall InstallMSI\n\t${MementoSectionEnd}\n\n\t${MementoSection} \"Microsoft $(VC) and $(VB) $(Runtimes)\" NT4VCRT\n\t\tCall InstallNT4VCRT\n\t\tCall InstallNT4VB6\n\t\tCall InstallNT4MFCOLE\n\t${MementoSectionEnd}\n\n\t${MementoSection} \"$(IE) 6.0 $(SP) 1\" NT4IE6SP1\n\t\tCall InstallIE6\n\t\tCall RebootIfRequired\n\t${MementoSectionEnd}\n\n\t${MementoSection} \"$(WMP) 6.4\" NT4WMP64\n\t\tCall InstallNT4WMP64\n\t${MementoSectionEnd}\n\n\t${MementoSection} \"$(DX) 5 $(Unofficial)\" NT4DX5\n\t\tCall InstallNT4DX5\n\t${MementoSectionEnd}\nSectionGroupEnd\n\n${MementoSection} \"$(SectionRootCerts)\" ROOTCERTS\n\tCall ConfigureCrypto\n\n\t${IfNot} ${IsPostInstall}\n\t\tCall UpdateRoots\n\t${EndIf}\n${MementoSectionEnd}\n\n${MementoSection} \"$(SectionNT4USB)\" NT4USB\n\tCall InstallNT4USB\n${MementoSectionEnd}\n\n${MementoUnselectedSection} \"$(SectionSPCleanup)\" SPCLEANUP\n\tCall CleanUpSPUninstall\n${MementoSectionEnd}\n\nSection - PREREQS_END\nSectionEnd\n\n${MementoSectionDone}\n\n!macro DESCRIPTION_STRING section\n\t!insertmacro MUI_DESCRIPTION_TEXT ${${section}} \"$(Section${section}Desc)\"\n!macroend\n\n!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN\n\t!insertmacro DESCRIPTION_STRING NT4WDU\n\t!insertmacro DESCRIPTION_STRING NT4WDUYes\n\t!insertmacro DESCRIPTION_STRING NT4WDUNo\n\t!insertmacro DESCRIPTION_STRING NT4SP6A\n\t!insertmacro DESCRIPTION_STRING NT4ROLLUP\n\t!insertmacro DESCRIPTION_STRING NT4POSTSP\n\t!insertmacro DESCRIPTION_STRING NT4MSI\n\t!insertmacro DESCRIPTION_STRING NT4VCRT\n\t!insertmacro DESCRIPTION_STRING NT4IE6SP1\n\t!insertmacro DESCRIPTION_STRING NT4WMP64\n\t!insertmacro DESCRIPTION_STRING NT4DX5\n\t!insertmacro DESCRIPTION_STRING ROOTCERTS\n\t!insertmacro DESCRIPTION_STRING SPCLEANUP\n!insertmacro MUI_FUNCTION_DESCRIPTION_END\n\nFunction .onInit\n\tCall InitChecks\n\n\t${MementoSectionRestore}\n\n\tSetOutPath $PLUGINSDIR\n\tFile Patches.ini\n\tSetOutPath \"${RUNONCEDIR}\"\nFunctionEnd\n\nFunction ComponentsPageCheck\n\t; Skip the page if we're being launched with /runonce, /postinstall, or /passive\n\t${If} ${IsRunOnce}\n\t${OrIf} ${IsPostInstall}\n\t${OrIf} ${IsPassive}\n\t\tAbort\n\t${EndIf}\nFunctionEnd\n\nFunction PreDownload\n\t${If} ${SectionIsSelected} ${SPCLEANUP}\n\t\tStrCpy $SPCleanup 1\n\t${EndIf}\n\n\t${If} ${SectionIsSelected} ${NT4IE6SP1}\n\t\tCall DownloadIE6\n\t${EndIf}\n\n\t${If} ${SectionIsSelected} ${ROOTCERTS}\n\t\tCall DownloadRoots\n\t${EndIf}\nFunctionEnd\n\nFunction PostInstall\n\tMessageBox MB_OK|MB_USERICON \\\n\t\t\"$(MsgBoxNT4PostInstall)\" \\\n\t\t/SD IDOK\nFunctionEnd\n\nFunction CleanUp\n\t; Called only after all tasks have completed\n\tCall CleanUpRunOnce\n\t!insertmacro InhibitSleep 0\n\n\t${If} ${IsRunOnce}\n\t\tCall OnRunOnceDone\n\t${Else}\n\t\t${If} ${IsPostInstall}\n\t\t${OrIfNot} ${RebootFlag}\n\t\t\tCall CleanUpRunOnceFinal\n\t\t${EndIf}\n\t${EndIf}\nFunctionEnd\n\nFunction .onInstSuccess\n\t${MementoSectionSave}\n\n\t; Reboot now if we need to. Nothing further in this function will be run if we do need to reboot.\n\tCall RebootIfRequired\n\n\t; If we're done, launch the update site\n\tCall PostInstall\n\tCall CleanUp\nFunctionEnd\n\nFunction .onInstFailed\n\t${MementoSectionSave}\n\tCall CleanUp\nFunctionEnd\n\nFunction .onSelChange\n\t; Nothing for now\nFunctionEnd\n"
  },
  {
    "path": "setup/setup.nsi",
    "content": "!include Constants.nsh\n\nName         \"${NAME}\"\nCaption      \"${NAME}\"\nBrandingText \"${NAME} ${VERSION} - ${DOMAIN}\"\nOutFile      \"LegacyUpdate-${VERSION}.exe\"\nInstallDir   \"$PROGRAMFILES64\\Legacy Update\"\nInstallDirRegKey HKLM \"${REGPATH_LEGACYUPDATE_SETUP}\" \"InstallLocation\"\n\nUnicode               true\nRequestExecutionLevel admin\nAutoCloseWindow       true\nManifestSupportedOS   all\nManifestDPIAware      true\nAllowSkipFiles        off\n\n!if ${DEBUG} == 1\n\tSetCompress         off\n!else\n\tSetCompressor       /SOLID lzma\n!endif\n\nVIAddVersionKey /LANG=1033 \"ProductName\"     \"${NAME}\"\nVIAddVersionKey /LANG=1033 \"ProductVersion\"  \"${LONGVERSION}\"\nVIAddVersionKey /LANG=1033 \"CompanyName\"     \"Hashbang Productions\"\nVIAddVersionKey /LANG=1033 \"LegalCopyright\"  \"${U+00A9} Hashbang Productions. All rights reserved.\"\nVIAddVersionKey /LANG=1033 \"FileDescription\" \"${NAME}\"\nVIAddVersionKey /LANG=1033 \"FileVersion\"     \"${LONGVERSION}\"\nVIProductVersion ${LONGVERSION}\nVIFileVersion    ${LONGVERSION}\n\nReserveFile \"${NSIS_TARGET}\\System.dll\"\nReserveFile \"${NSIS_TARGET}\\NSxfer.dll\"\nReserveFile \"${NSIS_TARGET}\\LegacyUpdateNSIS.dll\"\nReserveFile \"banner-wordmark-classic.bmp\"\nReserveFile \"Patches.ini\"\nReserveFile \"..\\LegacyUpdate\\obj\\LegacyUpdate32.dll\"\nReserveFile \"..\\LegacyUpdate\\obj\\LegacyUpdate64.dll\"\nReserveFile \"..\\launcher\\obj\\LegacyUpdate32.exe\"\nReserveFile \"..\\launcher\\obj\\LegacyUpdate64.exe\"\n\nVar /GLOBAL UninstallInstalled\n\n!define RUNONCEDIR \"$COMMONPROGRAMDATA\\Legacy Update\"\n\n!define MUI_UI                       \"obj\\resource.dll\"\n!define MUI_UI_HEADERIMAGE           \"obj\\resource.dll\"\n\n!define MUI_CUSTOMFUNCTION_UNGUIINIT un.OnShow\n!define MUI_CUSTOMFUNCTION_ABORT     CleanUp\n\n!define MUI_ICON                     \"..\\LegacyUpdate\\icon.ico\"\n!define MUI_UNICON                   \"..\\LegacyUpdate\\icon_small.ico\"\n\n!define MUI_HEADERIMAGE\n!define MUI_HEADERIMAGE_BITMAP       \"banner-wordmark-classic.bmp\"\n!define MUI_HEADERIMAGE_UNBITMAP     \"banner-wordmark-classic.bmp\"\n\n!define MUI_TEXT_ABORT_TITLE         \"Installation Failed\"\n\n!define MEMENTO_REGISTRY_ROOT        HKLM\n!define MEMENTO_REGISTRY_KEY         \"${REGPATH_LEGACYUPDATE_SETUP}\"\n\n!include FileFunc.nsh\n!include Integration.nsh\n!include LogicLib.nsh\n!include Memento.nsh\n!include MUI2.nsh\n!include nsDialogs.nsh\n!include Sections.nsh\n!include Win\\COM.nsh\n!include Win\\WinError.nsh\n!include Win\\WinNT.nsh\n!include WinCore.nsh\n!include WinMessages.nsh\n!include WinVer.nsh\n!include WordFunc.nsh\n!include x64.nsh\n\n!include Win32.nsh\n!include Common.nsh\n!include PatchInstall.nsh\n!include RunOnce.nsh\n!include AeroWizard.nsh\n!include Download2KXP.nsh\n!include DownloadIE.nsh\n!include DownloadVista78.nsh\n!include UpdateRoots.nsh\n; !include ActiveXPage.nsh\n!include RebootPage.nsh\n\n!insertmacro GetParameters\n!insertmacro GetOptions\n\n!define MUI_PAGE_HEADER_TEXT         \"$(ComponentsPageTitle)\"\n!define MUI_COMPONENTSPAGE_TEXT_TOP  \"$(ComponentsPageText)\"\n!define MUI_PAGE_CUSTOMFUNCTION_PRE  ComponentsPageCheck\n!define MUI_PAGE_CUSTOMFUNCTION_SHOW OnShow\n!define MUI_PAGE_FUNCTION_GUIINIT    OnShow\n!define MUI_CUSTOMFUNCTION_ONMOUSEOVERSECTION OnMouseOverSection\n\n!insertmacro MUI_PAGE_COMPONENTS\n\n; Page custom ActiveXPage\n\n!define MUI_PAGE_HEADER_TEXT         \"$(InstFilesPageTitle)\"\n!define MUI_PAGE_CUSTOMFUNCTION_SHOW OnShow\n\n!insertmacro MUI_PAGE_INSTFILES\n\nPage custom RebootPage\n\n!define MUI_PAGE_HEADER_TEXT         \"$(UnConfirmPageTitle)\"\n!define MUI_UNCONFIRMPAGE_TEXT_TOP   \"$(UnConfirmPageText)\"\n!define MUI_PAGE_CUSTOMFUNCTION_SHOW un.OnShow\n\n!insertmacro MUI_UNPAGE_CONFIRM\n\n!define MUI_PAGE_HEADER_TEXT         \"$(InstFilesPageTitle)\"\n!define MUI_PAGE_CUSTOMFUNCTION_SHOW un.OnShow\n\n!insertmacro MUI_UNPAGE_INSTFILES\n\n!include Strings.nsh\n\n!macro RestartWUAUService\n\t${DetailPrint} \"$(StatusRestartingWUAU)\"\n\tLegacyUpdateNSIS::Exec '\"$WINDIR\\system32\\net.exe\" stop wuauserv'\n!macroend\n\nFunction OnShow\n\tCall AeroWizardOnShow\nFunctionEnd\n\nFunction un.OnShow\n\tCall un.AeroWizardOnShow\nFunctionEnd\n\nFunction MakeUninstallEntry\n\t${IfNot} $UninstallInstalled == 1\n\t\tStrCpy $UninstallInstalled 1\n\t\tSetOutPath $INSTDIR\n\t\tWriteUninstaller \"$INSTDIR\\Uninstall.exe\"\n\n\t\t; Add uninstall entry\n\t\tWriteRegStr   HKLM \"${REGPATH_UNINSTSUBKEY}\" \"DisplayName\"          \"${NAME}\"\n\t\tWriteRegStr   HKLM \"${REGPATH_UNINSTSUBKEY}\" \"DisplayIcon\"          '\"$INSTDIR\\LegacyUpdate.exe\",-100'\n\t\tWriteRegStr   HKLM \"${REGPATH_UNINSTSUBKEY}\" \"DisplayVersion\"       \"${VERSION}\"\n\t\tWriteRegStr   HKLM \"${REGPATH_UNINSTSUBKEY}\" \"Publisher\"            \"${NAME}\"\n\t\tWriteRegStr   HKLM \"${REGPATH_UNINSTSUBKEY}\" \"URLInfoAbout\"         \"${WEBSITE}\"\n\t\tWriteRegStr   HKLM \"${REGPATH_UNINSTSUBKEY}\" \"InstallLocation\"      \"$INSTDIR\"\n\t\tWriteRegStr   HKLM \"${REGPATH_UNINSTSUBKEY}\" \"UninstallString\"      '\"$INSTDIR\\Uninstall.exe\"'\n\t\tWriteRegStr   HKLM \"${REGPATH_UNINSTSUBKEY}\" \"QuietUninstallString\" '\"$INSTDIR\\Uninstall.exe\" /S'\n\t\tWriteRegDword HKLM \"${REGPATH_UNINSTSUBKEY}\" \"NoModify\"             1\n\t\tWriteRegDword HKLM \"${REGPATH_UNINSTSUBKEY}\" \"NoRepair\"             1\n\t\t${MakeARPInstallDate} $0\n\t\tWriteRegStr   HKLM \"${REGPATH_UNINSTSUBKEY}\" \"InstallDate\" $0\n\t${EndIf}\nFunctionEnd\n\nSection -BeforeInstall PREREQS_START\n\t!insertmacro InhibitSleep 1\n\n\t${IfNot} ${IsRunOnce}\n\t${AndIfNot} ${IsPostInstall}\n\t\t; Download files\n\t\tCall PreDownload\n\n\t\t; If a reboot is pending, do it now\n\t\tReadRegDword $0 HKLM \"${REGPATH_LEGACYUPDATE_SETUP}\" \"RebootPending\"\n\t\t${If} $0 == 1\n\t\t\tSetRebootFlag true\n\t\t\t${RebootIfRequired}\n\t\t${EndIf}\n\n\t\t${IfNot} ${AtLeastWin10}\n\t\t\tCall RebootIfCbsRebootPending\n\t\t${EndIf}\n\n!if ${DEBUG} == 1\n\t\t${If} ${TestRunOnce}\n\t\t\tSetRebootFlag true\n\t\t\t${RebootIfRequired}\n\t\t${EndIf}\n!endif\n\t${Else}\n\t\t; Wait for packages to install if needed\n\t\tCall PollCbsInstall\n\t${EndIf}\nSectionEnd\n\n; Win2k prerequisities\nSection \"$(IE) 6.0 $(SP) 1\" IE6SP1\n\tSectionIn Ro\n\t${RebootIfRequired}\n\tCall InstallIE6\n\t${RebootIfRequired}\nSectionEnd\n\nSection \"Windows 2000 $(SP) 4\" W2KSP4\n\tSectionIn Ro\n\t${RebootIfRequired}\n\tCall InstallW2KSP4\n\tCall InstallW2KUR1\n\tCall FixW2KUR1\n\t${RebootIfRequired}\nSectionEnd\n\n; XP 2002 prerequisities\n${MementoSection} \"Windows XP $(SP) 3\" XPSP3\n\t${RebootIfRequired}\n\t${If} ${IsWinXPMediaCenter}\n\t${OrIf} ${IsWinXPTabletPC}\n\t\tCall InstallXPSP2\n\t${Else}\n\t\tCall InstallXPSP1a\n\t${EndIf}\n\t${RebootIfRequired}\n\tCall InstallXPSP3\n\t${RebootIfRequired}\n${MementoSectionEnd}\n\n${MementoSection} \"Windows XP $(EMB) $(SP) 3\" XPESP3\n\t${RebootIfRequired}\n\tCall InstallXPESP3\n\t${RebootIfRequired}\n${MementoSectionEnd}\n\n${MementoUnselectedSection} \"$(SectionWES09)\" WES09\n\t${RebootIfRequired}\n\tWriteRegDword HKLM \"${REGPATH_POSREADY}\" \"Installed\" 1\n\n\t; KB2686509 is known to fail due to an edition check when the Embedded version of the update is installed on XP. It\n\t; isn't actually a security fix - it just runs a one-time check and writes a log of bad registry keys. In my opinion,\n\t; this update is pointless, so fake it as installed so it doesn't get offered.\n\t; https://legacyupdate.net/help/kb2686509\n\tWriteRegStr   HKLM \"${REGPATH_HOTFIX}\\KB2686509\" \"\" \"http://legacyupdate.net/help/kb2686509\"\n\tWriteRegDword HKLM \"${REGPATH_HOTFIX}\\KB2686509\" \"Installed\" 1\n${MementoSectionEnd}\n\n; XP 2003 prerequisities\n${MementoSection} \"Windows XP/$(SRV) 2003 $(SP) 2\" 2003SP2\n\t${RebootIfRequired}\n\tCall Install2003SP2\n\t${RebootIfRequired}\n${MementoSectionEnd}\n\n; Vista prerequisities\nSection \"$(SectionWS2008HVU)\" WS2008HVU\n\tSectionIn Ro\n\t${If} ${NeedsPatch} HyperV2008Update\n\t\tCall InstallKB950050\n\t\t${RebootIfRequired}\n\t${EndIf}\nSectionEnd\n\nSection \"Windows Vista $(SP) 2\" VISTASP2\n\tSectionIn Ro\n\t${RebootIfRequired}\n\tCall InstallVistaSP1\n\t${RebootIfRequired}\n\tCall InstallVistaSP2\n\t${RebootIfRequired}\nSectionEnd\n\nSection \"Windows Vista $(PostSP) 2 Updates\" VISTASSU\n\tSectionIn Ro\n\t${RebootIfRequired}\n\tCall InstallKB3205638\n\tCall InstallKB4012583\n\tCall InstallKB4015195\n\tCall InstallKB4015380\n\t${RebootIfRequired}\nSectionEnd\n\n${MementoUnselectedSection} \"$(SectionESU)\" VISTAESU\n\t${RebootIfRequired}\n\tCall InstallKB4493730\n\t${RebootIfRequired}\n${MementoSectionEnd}\n\n${MementoSection} \"$(IE) 9\" VISTAIE9\n\t${RebootIfRequired}\n\tCall InstallKB971512\n\tCall InstallKB2117917\n\t${RebootIfRequired}\n\tCall InstallIE9\n\t${RebootIfRequired}\n${MementoSectionEnd}\n\n; 7 prerequisities\nSection \"Windows 7 $(SP) 1\" WIN7SP1\n\tSectionIn Ro\n\tCall InstallWin7SP1\n\t${RebootIfRequired}\nSectionEnd\n\n${MementoUnselectedSection} \"Windows 7 $(CRU)\" WIN7CRU\n\t${RebootIfRequired}\n\tCall InstallKB3020369\n\tCall InstallKB3125574\n\t${RebootIfRequired}\n${MementoSectionEnd}\n\nSection \"$(SectionSSU)\" WIN7SSU\n\tSectionIn Ro\n\t${RebootIfRequired}\n\tCall InstallKB3138612\n\tCall InstallKB4474419\n\tCall InstallKB4490628\n\t${RebootIfRequired}\nSectionEnd\n\n; Windows Home Server 2011 is based on Server 2008 R2, but has its own separate \"rollup\" updates\nSection \"$(SectionWHS2011U4)\" WHS2011U4\n\tSectionIn Ro\n\t${RebootIfRequired}\n\tCall InstallKB2757011\n\t${RebootIfRequired}\nSectionEnd\n\n; 8 prerequisities\nSection \"$(SectionSSU)\" WIN8SSU\n\tSectionIn Ro\n\t${RebootIfRequired}\n\tCall InstallKB4598297\n\t${RebootIfRequired}\nSectionEnd\n\n; 8.1 prerequisities\nSection \"Windows 8.1 $(Update) 1\" WIN81U1\n\tSectionIn Ro\n\t${RebootIfRequired}\n\tCall InstallKB3021910\n\tCall InstallClearCompressionFlag\n\tCall InstallKB2919355\n\tCall InstallKB2932046\n\tCall InstallKB2959977\n\tCall InstallKB2937592\n\tCall InstallKB2934018\n\t${RebootIfRequired}\nSectionEnd\n\nSection \"$(SectionSSU)\" WIN81SSU\n\tSectionIn Ro\n\t${RebootIfRequired}\n\tCall InstallKB3021910\n\t${RebootIfRequired}\nSectionEnd\n\n; Shared prerequisites\n!include DownloadWUA.nsh\n\nSection \"$(SectionWUA)\" WUA\n\tSectionIn Ro\n\t${RebootIfRequired}\n\tCall InstallWUA\nSectionEnd\n\n${MementoSection} \"$(SectionRootCerts)\" ROOTCERTS\n\t${RebootIfRequired}\n\tCall ConfigureCrypto\n\n\t${IfNot} ${IsPostInstall}\n\t\tCall UpdateRoots\n\t${EndIf}\n${MementoSectionEnd}\n\n${MementoSection} \"$(SectionEnableMU)\" ENABLEMU\n\t${RebootIfRequired}\n\tLegacyUpdateNSIS::EnableMicrosoftUpdate\n\tPop $0\n\t${If} $0 != 0\n\t\tLegacyUpdateNSIS::MessageForHresult $0\n\t\tPop $1\n\t\t${DetailPrint} \"$1 ($0)\"\n\t\tMessageBox MB_USERICON \"$(MsgBoxMUFailed)\" /SD IDOK\n\t${EndIf}\n\t!insertmacro RestartWUAUService\n${MementoSectionEnd}\n\n${MementoSection} \"$(SectionActivate)\" ACTIVATE\n\t; No-op; we'll launch the activation wizard in post-install.\n${MementoSectionEnd}\n\nSection - PREREQS_END\nSectionEnd\n\n; Main installation\n${MementoSection} \"$(^Name)\" LEGACYUPDATE\n\t${RebootIfRequired}\n\n\t; WUSERVER section\n\tCall MakeUninstallEntry\n\n\t${If} ${AtMostWinVista}\n\t\t; Check if SChannel is going to work with modern TLS\n\t\t${If} ${AtLeastWinVista}\n\t\t\t${DetailPrint} \"$(StatusCheckingSSL)\"\n\t\t\t!insertmacro DownloadRequest \"${WSUS_SERVER_HTTPS}/ClientWebService/ping.bin\" NONE \\\n\t\t\t\t`/TIMEOUTCONNECT 0 /TIMEOUTRECONNECT 0`\n\t\t\tPop $0\n\t\t\tCall DownloadWaitSilent\n\t\t\tPop $1\n\t\t\tPop $0\n\t\t\t${VerbosePrint} \"Ping result: $0 ($1)\"\n\t\t${Else}\n\t\t\tStrCpy $1 0\n\t\t${EndIf}\n\n\t\t${If} $1 >= 200\n\t\t${AndIf} $1 < 300\n\t\t\t; HTTPS will work\n\t\t\t${WriteRegWithBackup} Str HKLM \"${REGPATH_WUPOLICY}\" \"WUServer\" \"${WSUS_SERVER_HTTPS}\"\n\t\t\t${WriteRegWithBackup} Str HKLM \"${REGPATH_WUPOLICY}\" \"WUStatusServer\" \"${WSUS_SERVER_HTTPS}\"\n\t\t\t${WriteRegWithBackup} Str HKLM \"${REGPATH_WU}\" \"URL\" \"${UPDATE_URL_HTTPS}\"\n\t\t${Else}\n\t\t\t; Probably not supported; use HTTP\n\t\t\t${WriteRegWithBackup} Str HKLM \"${REGPATH_WUPOLICY}\" \"WUServer\" \"${WSUS_SERVER}\"\n\t\t\t${WriteRegWithBackup} Str HKLM \"${REGPATH_WUPOLICY}\" \"WUStatusServer\" \"${WSUS_SERVER}\"\n\t\t\t${WriteRegWithBackup} Str HKLM \"${REGPATH_WU}\" \"URL\" \"${UPDATE_URL}\"\n\t\t${EndIf}\n\n\t\t${WriteRegWithBackup} Dword HKLM \"${REGPATH_WUAUPOLICY}\" \"UseWUServer\" 1\n\n\t\t; Restart service\n\t\t!insertmacro RestartWUAUService\n\t${EndIf}\n\n\t; Server Core does not have IE, do not install ActiveX control\n\t${If} ${AtLeastWinVista}\n\t${AndIf} ${IsServerOS}\n\t\tLegacyUpdateNSIS::IsServerCore\n\t\tPop $0\n\t${Else}\n\t\tStrCpy $0 0\n\t${EndIf}\n\n\t${If} $0 != 1\n\t\t; ACTIVEX section\n\t\tSetOutPath $INSTDIR\n\t\t; Call MakeUninstallEntry\n\n\t\t; Add Control Panel entry\n\t\t; Category 5:  XP Performance and Maintenance, Vista System and Maintenance, 7+ System and Security\n\t\t; Category 10: XP SP2 Security Center, Vista Security, 7+ System and Security\n\t\tWriteRegStr   HKCR \"${REGPATH_HKCR_CPLCLSID}\"                    \"\"                \"${NAME}\"\n\t\tWriteRegStr   HKCR \"${REGPATH_HKCR_CPLCLSID}\"                    \"LocalizedString\" '@\"$OUTDIR\\LegacyUpdate.exe\",-2'\n\t\tWriteRegStr   HKCR \"${REGPATH_HKCR_CPLCLSID}\\DefaultIcon\"        \"\"                '\"$OUTDIR\\LegacyUpdate.exe\",-100'\n\t\tWriteRegStr   HKCR \"${REGPATH_HKCR_CPLCLSID}\\Shell\\Open\\Command\" \"\"                '\"$OUTDIR\\LegacyUpdate.exe\"'\n\t\tWriteRegDword HKCR \"${REGPATH_HKCR_CPLCLSID}\\ShellFolder\"        \"Attributes\"      0\n\t\tWriteRegDword HKCR \"${REGPATH_HKCR_CPLCLSID}\" \"{305CA226-D286-468e-B848-2B2E8E697B74} 2\" 5\n\t\tWriteRegStr   HKCR \"${REGPATH_HKCR_CPLCLSID}\" \"System.ApplicationName\"             \"${CPL_APPNAME}\"\n\t\tWriteRegStr   HKCR \"${REGPATH_HKCR_CPLCLSID}\" \"System.ControlPanelCategory\"        \"5,10\"\n\t\tWriteRegStr   HKCR \"${REGPATH_HKCR_CPLCLSID}\" \"System.Software.TasksFileUrl\"       '\"$OUTDIR\\LegacyUpdate.exe\",-202'\n\n\t\t${If} ${IsWin2000}\n\t\t\t; Doesn't seem to support @ syntax with an exe?\n\t\t\tWriteRegStr   HKCR \"${REGPATH_HKCR_CPLCLSID}\"                  \"InfoTip\"         'Check for software and driver updates via Legacy Update.'\n\t\t${Else}\n\t\t\tWriteRegStr   HKCR \"${REGPATH_HKCR_CPLCLSID}\"                  \"InfoTip\"         '@\"$OUTDIR\\LegacyUpdate.exe\",-4'\n\t\t${EndIf}\n\n\t\tWriteRegStr   HKLM \"${REGPATH_CPLNAMESPACE}\" \"\" \"${NAME}\"\n\n\t\t; Install DLLs\n\t\t${DetailPrint} \"$(StatusClosingIE)\"\n\t\tLegacyUpdateNSIS::CloseIEWindows\n\n\t\t; NOTE: Here we specifically check for amd64, because the DLL is amd64.\n\t\t; We still install to native Program Files on IA64, but with x86 binaries.\n\t\tFile /ONAME=LegacyUpdate.dll \"..\\LegacyUpdate\\obj\\LegacyUpdate32.dll\"\n\t\t${If} ${IsNativeAMD64}\n\t\t\t${If} ${FileExists} \"LegacyUpdate32.dll\"\n\t\t\t\t${DeleteWithErrorHandling} \"$OUTDIR\\LegacyUpdate32.dll\"\n\t\t\t${EndIf}\n\t\t\tRename \"LegacyUpdate.dll\" \"LegacyUpdate32.dll\"\n\t\t\tFile /ONAME=LegacyUpdate.dll \"..\\LegacyUpdate\\obj\\LegacyUpdate64.dll\"\n\t\t${EndIf}\n\t\tCall CopyLauncher\n\n\t\t; Register DLLs\n\t\tExecWait '\"$OUTDIR\\LegacyUpdate.exe\" /regserver $HWNDPARENT' $0\n\t\t${If} $0 != 0\n\t\t\tAbort\n\t\t${EndIf}\n\n\t\t; Create shortcut\n\t\t${If} ${IsWin2000}\n\t\t\t; Doesn't seem to support @ syntax with an exe?\n\t\t\tStrCpy $0 \"Check for software and driver updates via Legacy Update.\"\n\t\t${Else}\n\t\t\tStrCpy $0 '@\"$OUTDIR\\LegacyUpdate.exe\",-4'\n\t\t${EndIf}\n\n\t\tCreateShortcut \"$COMMONSTARTMENU\\${NAME}.lnk\" \\\n\t\t\t'\"$OUTDIR\\LegacyUpdate.exe\"' '' \\\n\t\t\t\"$OUTDIR\\LegacyUpdate.exe\" 0 \\\n\t\t\tSW_SHOWNORMAL \"\" \\\n\t\t\t\"$0\"\n\n\t\t; Hide WU shortcuts\n\t\t${If} ${AtMostWinXP2003}\n\t\t\t${If} ${FileExists} \"$COMMONSTARTMENU\\Windows Update.lnk\"\n\t\t\t\tCreateDirectory \"$OUTDIR\\Backup\"\n\t\t\t\tRename \"$COMMONSTARTMENU\\Windows Update.lnk\" \"$OUTDIR\\Backup\\Windows Update.lnk\"\n\t\t\t${EndIf}\n\n\t\t\t${If} ${FileExists} \"$COMMONSTARTMENU\\Microsoft Update.lnk\"\n\t\t\t\tCreateDirectory \"$OUTDIR\\Backup\"\n\t\t\t\tRename \"$COMMONSTARTMENU\\Microsoft Update.lnk\" \"$OUTDIR\\Backup\\Microsoft Update.lnk\"\n\t\t\t${EndIf}\n\t\t${EndIf}\n\n\t\t; Add to trusted sites\n\t\tWriteRegDword HKLM \"${REGPATH_ZONEDOMAINS}\\${DOMAIN}\"    \"http\"  2\n\t\tWriteRegDword HKLM \"${REGPATH_ZONEDOMAINS}\\${DOMAIN}\"    \"https\" 2\n\t\tWriteRegDword HKLM \"${REGPATH_ZONEESCDOMAINS}\\${DOMAIN}\" \"http\"  2\n\t\tWriteRegDword HKLM \"${REGPATH_ZONEESCDOMAINS}\\${DOMAIN}\" \"https\" 2\n\n\t\tWriteRegDword HKCU \"${REGPATH_ZONEDOMAINS}\\${DOMAIN}\"    \"http\"  2\n\t\tWriteRegDword HKCU \"${REGPATH_ZONEDOMAINS}\\${DOMAIN}\"    \"https\" 2\n\t\tWriteRegDword HKCU \"${REGPATH_ZONEESCDOMAINS}\\${DOMAIN}\" \"http\"  2\n\t\tWriteRegDword HKCU \"${REGPATH_ZONEESCDOMAINS}\\${DOMAIN}\" \"https\" 2\n\n\t\t; Add low rights elevation policy\n\t\tWriteRegDword HKLM \"${REGPATH_ELEVATIONPOLICY}\\${ELEVATIONPOLICY_GUID}\" \"Policy\"  3\n\t\tWriteRegStr   HKLM \"${REGPATH_ELEVATIONPOLICY}\\${ELEVATIONPOLICY_GUID}\" \"AppPath\" \"$OUTDIR\"\n\t\tWriteRegStr   HKLM \"${REGPATH_ELEVATIONPOLICY}\\${ELEVATIONPOLICY_GUID}\" \"AppName\" \"LegacyUpdate.exe\"\n\n\t\t${If} ${RunningX64}\n\t\t\tSetRegView 32\n\t\t\tWriteRegDword HKLM \"${REGPATH_ELEVATIONPOLICY}\\${ELEVATIONPOLICY_GUID}\" \"Policy\"  3\n\t\t\tWriteRegStr   HKLM \"${REGPATH_ELEVATIONPOLICY}\\${ELEVATIONPOLICY_GUID}\" \"AppPath\" \"$OUTDIR\"\n\t\t\tWriteRegStr   HKLM \"${REGPATH_ELEVATIONPOLICY}\\${ELEVATIONPOLICY_GUID}\" \"AppName\" \"LegacyUpdate.exe\"\n\t\t\tSetRegView 64\n\t\t${EndIf}\n\n\t\t; Delete LegacyUpdate.dll in System32 from 1.0 installer\n\t\t${If} ${FileExists} $WINDIR\\System32\\LegacyUpdate.dll\n\t\t\t${DeleteWithErrorHandling} $WINDIR\\System32\\LegacyUpdate.dll\n\t\t${EndIf}\n\n\t\t; Delete LegacyUpdate.inf from 1.0 installer\n\t\t${If} ${FileExists} $WINDIR\\inf\\LegacyUpdate.inf\n\t\t\tDelete $WINDIR\\inf\\LegacyUpdate.inf\n\t\t${EndIf}\n\n\t\t; If 32-bit Legacy Update exists, move it to 64-bit Program Files\n\t\t${If} ${RunningX64}\n\t\t${AndIf} ${FileExists} \"$PROGRAMFILES32\\Legacy Update\\Backup\"\n\t\t\tCreateDirectory \"$PROGRAMFILES64\\Legacy Update\"\n\t\t\tRename \"$PROGRAMFILES32\\Legacy Update\\Backup\" \"$PROGRAMFILES64\\Legacy Update\\Backup\"\n\t\t\tRMDir /r \"$PROGRAMFILES32\\Legacy Update\"\n\t\t${EndIf}\n\t${EndIf}\n${MementoSectionEnd}\n\n${MementoSectionDone}\n\n; Uninstaller\nSection \"-un.Legacy Update Server\" un.WUSERVER\n\t; Clear WSUS server\n\t${If} ${AtMostWinVista}\n\t\tReadRegStr $0 HKLM \"${REGPATH_WUPOLICY}\" \"WUServer\"\n\t\t${VerbosePrint} \"WUServer: $0\"\n\t\t${If} $0 == \"${WSUS_SERVER}\"\n\t\t${OrIf} $0 == \"${WSUS_SERVER_HTTPS}\"\n\t\t\t${DeleteRegWithBackup} Str   HKLM \"${REGPATH_WUPOLICY}\"   \"WUServer\"    \"-\"\n\t\t\t${DeleteRegWithBackup} Dword HKLM \"${REGPATH_WUAUPOLICY}\" \"UseWUServer\" \"-\"\n\t\t${EndIf}\n\n\t\tReadRegStr $0 HKLM \"${REGPATH_WUPOLICY}\" \"WUStatusServer\"\n\t\t${VerbosePrint} \"WUStatusServer: $0\"\n\t\t${If} $0 == \"${WSUS_SERVER}\"\n\t\t${OrIf} $0 == \"${WSUS_SERVER_HTTPS}\"\n\t\t\t${DeleteRegWithBackup} Str   HKLM \"${REGPATH_WUPOLICY}\"   \"WUStatusServer\" \"-\"\n\t\t\t${DeleteRegWithBackup} Dword HKLM \"${REGPATH_WUAUPOLICY}\" \"UseWUServer\"    \"-\"\n\t\t${EndIf}\n\n\t\tReadRegStr $0 HKLM \"${REGPATH_WU}\" \"URL\"\n\t\t${VerbosePrint} \"URL: $0\"\n\t\t${If} $0 == \"${UPDATE_URL}\"\n\t\t${OrIf} $0 == \"${UPDATE_URL_HTTPS}\"\n\t\t\t${DeleteRegWithBackup} Str HKLM \"${REGPATH_WU}\" \"URL\" \"-\"\n\t\t${EndIf}\n\t${EndIf}\nSectionEnd\n\nSection \"-un.Legacy Update website\" un.ACTIVEX\n\tSetOutPath $INSTDIR\n\n\t; Delete shortcut\n\tDelete \"$COMMONSTARTMENU\\${NAME}.lnk\"\n\n\t; Delete Control Panel entry\n\tDeleteRegKey HKLM \"${REGPATH_CPLNAMESPACE}\"\n\tDeleteRegKey HKCR \"${REGPATH_HKCR_CPLCLSID}\"\n\n\t; Restore shortcuts\n\t${If} ${FileExists} \"$OUTDIR\\Backup\\Windows Update.lnk\"\n\t\tRename \"$OUTDIR\\Backup\\Windows Update.lnk\" \"$COMMONSTARTMENU\\Windows Update.lnk\"\n\t${EndIf}\n\n\t${If} ${FileExists} \"$OUTDIR\\Backup\\Microsoft Update.lnk\"\n\t\tRename \"$OUTDIR\\Backup\\Microsoft Update.lnk\" \"$COMMONSTARTMENU\\Microsoft Update.lnk\"\n\t${EndIf}\n\n\t; Close IE\n\t${DetailPrint} \"$(StatusClosingIE)\"\n\tLegacyUpdateNSIS::CloseIEWindows\n\n\t; Unregister DLLs\n\t${If} ${FileExists} \"$INSTDIR\\LegacyUpdate.exe\"\n\t\tExecWait '\"$OUTDIR\\LegacyUpdate.exe\" /unregserver $HWNDPARENT' $0\n\t\t${If} $0 != 0\n\t\t\tAbort\n\t\t${EndIf}\n\t${EndIf}\n\n\t; Delete files\n\t${DeleteWithErrorHandling} \"$OUTDIR\\LegacyUpdate.exe\"\n\t${DeleteWithErrorHandling} \"$OUTDIR\\LegacyUpdate.dll\"\n\t${DeleteWithErrorHandling} \"$OUTDIR\\LegacyUpdate32.dll\"\n\n\t; Remove from trusted sites\n\tDeleteRegKey HKLM \"${REGPATH_ZONEDOMAINS}\\${DOMAIN}\"\n\tDeleteRegKey HKCU \"${REGPATH_ZONEDOMAINS}\\${DOMAIN}\"\n\tDeleteRegKey HKLM \"${REGPATH_ZONEESCDOMAINS}\\${DOMAIN}\"\n\tDeleteRegKey HKCU \"${REGPATH_ZONEESCDOMAINS}\\${DOMAIN}\"\n\n\t; Remove IE elevation policy\n\tDeleteRegKey HKLM \"${REGPATH_ELEVATIONPOLICY}\\${ELEVATIONPOLICY_GUID}\"\n\n\t${If} ${RunningX64}\n\t\tSetRegView 32\n\t\tDeleteRegKey HKLM \"${REGPATH_ELEVATIONPOLICY}\\${ELEVATIONPOLICY_GUID}\"\n\t\tSetRegView 64\n\t${EndIf}\n\n\t; Restart service\n\t!insertmacro RestartWUAUService\nSectionEnd\n\nSection -Uninstall\n\tSetOutPath $INSTDIR\n\n\t; Delete folders\n\tRMDir /r \"$OUTDIR\"\n\tRMDir /r /REBOOTOK \"${RUNONCEDIR}\"\n\n\t; Delete uninstall entry\n\tDeleteRegKey HKLM \"${REGPATH_UNINSTSUBKEY}\"\nSectionEnd\n\n!macro DESCRIPTION_STRING section\n\t!insertmacro MUI_DESCRIPTION_TEXT ${${section}} \"$(Section${section}Desc)\"\n!macroend\n\n!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN\n\t!insertmacro DESCRIPTION_STRING W2KSP4\n\t!insertmacro DESCRIPTION_STRING IE6SP1\n\t!insertmacro DESCRIPTION_STRING XPSP3\n\t!insertmacro DESCRIPTION_STRING XPESP3\n\t!insertmacro DESCRIPTION_STRING WES09\n\t!insertmacro DESCRIPTION_STRING 2003SP2\n\t!insertmacro DESCRIPTION_STRING VISTASP2\n\t!insertmacro DESCRIPTION_STRING VISTASSU\n\t!insertmacro DESCRIPTION_STRING VISTAESU\n\t!insertmacro DESCRIPTION_STRING VISTAIE9\n\t!insertmacro DESCRIPTION_STRING WIN7SP1\n\t!insertmacro DESCRIPTION_STRING WIN7CRU\n\t!insertmacro DESCRIPTION_STRING WIN7SSU\n\t!insertmacro DESCRIPTION_STRING WIN8SSU\n\t!insertmacro DESCRIPTION_STRING WIN81U1\n\t!insertmacro DESCRIPTION_STRING WIN81SSU\n\t!insertmacro DESCRIPTION_STRING WS2008HVU\n\t!insertmacro DESCRIPTION_STRING WHS2011U4\n\t!insertmacro DESCRIPTION_STRING WUA\n\t!insertmacro DESCRIPTION_STRING ROOTCERTS\n\t!insertmacro DESCRIPTION_STRING ENABLEMU\n\t!insertmacro DESCRIPTION_STRING ACTIVATE\n\t; !insertmacro DESCRIPTION_STRING LEGACYUPDATE\n\t; !insertmacro DESCRIPTION_STRING WUSERVER\n!insertmacro MUI_FUNCTION_DESCRIPTION_END\n\nFunction OnMouseOverSection\n\t${If} $0 == ${LEGACYUPDATE}\n\t\t${If} ${AtMostWinXP2003}\n\t\t\tStrCpy $0 \"$(SectionActiveX2KXPDesc)\"\n\t\t${ElseIf} ${AtMostWin8.1}\n\t\t\tStrCpy $0 \"$(SectionActiveXVista78Desc)\"\n\t\t${Else}\n\t\t\tStrCpy $0 \"$(SectionActiveXWin10Desc)\"\n\t\t${EndIf}\n\t\tSendMessage $mui.ComponentsPage.DescriptionText ${WM_SETTEXT} 0 \"STR:\"\n\t\tEnableWindow $mui.ComponentsPage.DescriptionText 1\n\t\tSendMessage $mui.ComponentsPage.DescriptionText ${WM_SETTEXT} 0 \"STR:$0\"\n\t${EndIf}\nFunctionEnd\n\nFunction .onInit\n\tCall InitChecks\n\t${MementoSectionRestore}\n\n\tSetOutPath $PLUGINSDIR\n\tFile Patches.ini\n\tSetOutPath \"${RUNONCEDIR}\"\n\n\t${If} ${IsWin2000}\n\t\t; Determine whether Win2k prereqs need to be installed\n\t\t${IfNot} ${NeedsPatch} W2KSP4\n\t\t${AndIfNot} ${NeedsPatch} W2KUR1\n\t\t\t!insertmacro RemoveSection ${W2KSP4}\n\t\t${EndIf}\n\n\t\t${IfNot} ${NeedsPatch} IE6\n\t\t\t!insertmacro RemoveSection ${IE6SP1}\n\t\t${EndIf}\n\n\t\t; Handle 2000 Datacenter Server\n\t\t${If} ${IsDatacenter}\n\t\t\t!insertmacro UnselectSection ${LEGACYUPDATE}\n\t\t${EndIf}\n\t${Else}\n\t\t!insertmacro RemoveSection ${W2KSP4}\n\t\t!insertmacro RemoveSection ${IE6SP1}\n\t${EndIf}\n\n\t${If} ${IsWinXP2002}\n\t\t${If} ${IsEmbedded}\n\t\t\t; Determine whether XP Embedded prereqs need to be installed\n\t\t\t; Windows XP Embedded (version 2001), including FLP and WEPOS, has a different service pack\n\t\t\t!insertmacro RemoveSection ${XPSP3}\n\n\t\t\t${IfNot} ${NeedsPatch} XPESP3\n\t\t\t\t!insertmacro RemoveSection ${XPESP3}\n\t\t\t${EndIf}\n\t\t${Else}\n\t\t\t; Determine whether XP prereqs need to be installed\n\t\t\t!insertmacro RemoveSection ${XPESP3}\n\n\t\t\t${IfNot} ${NeedsPatch} XPSP3\n\t\t\t\t!insertmacro RemoveSection ${XPSP3}\n\t\t\t${EndIf}\n\t\t${EndIf}\n\n\t\t${If} ${IsWinXPPOSReady}\n\t\t\t!insertmacro RemoveSection ${WES09}\n\t\t${EndIf}\n\t${Else}\n\t\t!insertmacro RemoveSection ${XPSP3}\n\t\t!insertmacro RemoveSection ${XPESP3}\n\t\t!insertmacro RemoveSection ${WES09}\n\t${EndIf}\n\n\t${If} ${IsWinXP2003}\n\t\t; Determine whether 2003 prereqs need to be installed\n\t\t${IfNot} ${NeedsPatch} 2003SP2\n\t\t\t!insertmacro RemoveSection ${2003SP2}\n\t\t${EndIf}\n\t${Else}\n\t\t!insertmacro RemoveSection ${2003SP2}\n\t${EndIf}\n\n\t${If} ${IsWinVista}\n\t\t; Determine whether Vista prereqs need to be installed\n\t\t${IfNot} ${NeedsPatch} HyperV2008Update\n\t\t\t!insertmacro RemoveSection ${WS2008HVU}\n\t\t${EndIf}\n\n\t\t${IfNot} ${NeedsPatch} VistaSP2\n\t\t\t!insertmacro RemoveSection ${VISTASP2}\n\t\t${EndIf}\n\n\t\t${IfNot} ${NeedsPatch} VistaPostSP2\n\t\t\t!insertmacro RemoveSection ${VISTASSU}\n\t\t${EndIf}\n\n\t\t${IfNot} ${NeedsPatch} VistaESU\n\t\t\t!insertmacro RemoveSection ${VISTAESU}\n\t\t${EndIf}\n\n\t\t${IfNot} ${NeedsPatch} IE9\n\t\t\t!insertmacro RemoveSection ${VISTAIE9}\n\t\t${ElseIf} ${IsServerOS}\n\t\t\tLegacyUpdateNSIS::IsServerCore\n\t\t\tPop $0\n\t\t\t${If} $0 == 1\n\t\t\t\t!insertmacro RemoveSection ${VISTAIE9}\n\t\t\t${EndIf}\n\t\t${EndIf}\n\t${Else}\n\t\t!insertmacro RemoveSection ${WS2008HVU}\n\t\t!insertmacro RemoveSection ${VISTASP2}\n\t\t!insertmacro RemoveSection ${VISTASSU}\n\t\t!insertmacro RemoveSection ${VISTAESU}\n\t\t!insertmacro RemoveSection ${VISTAIE9}\n\t${EndIf}\n\n\t${If} ${IsWin7}\n\t\t; Determine whether 7 prereqs need to be installed\n\t\t${IfNot} ${NeedsPatch} Win7SP1\n\t\t\t!insertmacro RemoveSection ${WIN7SP1}\n\t\t${EndIf}\n\n\t\t${IfNot} ${IsHomeServer}\n\t\t${OrIfNot} ${NeedsPatch} KB2757011\n\t\t\t!insertmacro RemoveSection ${WHS2011U4}\n\t\t${EndIf}\n\n\t\t${IfNot} ${NeedsPatch} Win7CRU\n\t\t\t!insertmacro RemoveSection ${WIN7CRU}\n\t\t${EndIf}\n\n\t\t${IfNot} ${NeedsPatch} Win7PostSP1\n\t\t\t!insertmacro RemoveSection ${WIN7SSU}\n\t\t${EndIf}\n\t${Else}\n\t\t!insertmacro RemoveSection ${WIN7SP1}\n\t\t!insertmacro RemoveSection ${WHS2011U4}\n\t\t!insertmacro RemoveSection ${WIN7CRU}\n\t\t!insertmacro RemoveSection ${WIN7SSU}\n\t${EndIf}\n\n\t${If} ${IsWin8}\n\t\t; Determine whether 8 prereqs need to be installed\n\t\t${IfNot} ${NeedsPatch} KB4598297\n\t\t\t!insertmacro RemoveSection ${WIN8SSU}\n\t\t${EndIf}\n\t${Else}\n\t\t!insertmacro RemoveSection ${WIN8SSU}\n\t${EndIf}\n\n\t${If} ${IsWin8.1}\n\t\t; Determine whether 8.1 prereqs need to be installed\n\t\t${IfNot} ${NeedsPatch} Win81Update1\n\t\t\t!insertmacro RemoveSection ${WIN81U1}\n\t\t${EndIf}\n\n\t\t${IfNot} ${NeedsPatch} KB3021910\n\t\t\t!insertmacro RemoveSection ${WIN81SSU}\n\t\t${EndIf}\n\t${Else}\n\t\t!insertmacro RemoveSection ${WIN81U1}\n\t\t!insertmacro RemoveSection ${WIN81SSU}\n\t${EndIf}\n\n\t${IfNot} ${NeedsPatch} WUA\n\t\t!insertmacro RemoveSection ${WUA}\n\t${EndIf}\n\n\t${If} ${AtLeastWinXP2002}\n\t${AndIf} ${AtMostWin8.1}\n\t\t; Check if the OS needs activation\n\t\tLegacyUpdateNSIS::IsActivated\n\t\tPop $0\n\t\t${If} $0 == 1\n\t\t\t!insertmacro RemoveSection ${ACTIVATE}\n\t\t${EndIf}\n\t${Else}\n\t\t!insertmacro RemoveSection ${ACTIVATE}\n\t${EndIf}\n\n\t${If} ${AtLeastWin7}\n\t${AndIf} ${AtMostWin8.1}\n\t\tClearErrors\n\t\tEnumRegKey $0 HKLM \"${REGPATH_WU_SERVICES}\\${WU_MU_SERVICE_ID}\" 0\n\t\t${IfNot} ${Errors}\n\t\t\t!insertmacro RemoveSection ${ENABLEMU}\n\t\t${EndIf}\n\t${Else}\n\t\t!insertmacro RemoveSection ${ENABLEMU}\n\t${EndIf}\n\n\t; Server Core does not have activation wizard\n\t${If} ${AtLeastWinVista}\n\t${AndIf} ${IsServerOS}\n\t\tLegacyUpdateNSIS::IsServerCore\n\t\tPop $0\n\t\t${If} $0 == 1\n\t\t\t!insertmacro RemoveSection ${ACTIVATE}\n\t\t${EndIf}\n\t${EndIf}\n\n\t; ${IfNot} ${AtMostWinVista}\n\t; \t!insertmacro RemoveSection ${LEGACYUPDATE}\n\t; ${EndIf}\n\n\t; Try not to be too intrusive on Windows 10 and newer, which are (for now) fine\n\t${If} ${AtLeastWin10}\n\t\t!insertmacro RemoveSection ${ROOTCERTS}\n\t${Else}\n\t\tLegacyUpdateNSIS::NeedsRootsUpdate\n\t\tPop $0\n\t\t${If} $0 == 0\n\t\t\t!insertmacro RemoveSection ${ROOTCERTS}\n\t\t${EndIf}\n\t${EndIf}\nFunctionEnd\n\nFunction ComponentsPageCheck\n\t; Skip the page if we're being launched with /runonce, /postinstall, or /passive\n\t${If} ${IsRunOnce}\n\t${OrIf} ${IsPostInstall}\n\t${OrIf} ${IsPassive}\n\t\tAbort\n\t${EndIf}\n\n\t; Skip if installer was invoked by IE, and all prerequisites are installed\n\t${If} ${IsActiveX}\n\t${AndIf} ${SectionIsSelected} ${LEGACYUPDATE}\n\t\tStrCpy $1 0\n\t\t${For} $0 ${PREREQS_START} ${PREREQS_END}\n\t\t\t${If} ${SectionIsSelected} $0\n\t\t\t${AndIf} $0 != ${PREREQS_START}\n\t\t\t${AndIf} $0 != ${PREREQS_END}\n\t\t\t${AndIf} $0 != ${LEGACYUPDATE}\n\t\t\t${AndIf} $0 != ${ROOTCERTS}\n\t\t\t\tStrCpy $1 1\n\t\t\t\t${Break}\n\t\t\t${EndIf}\n\t\t${Next}\n\n\t\t${If} $1 == 0\n\t\t\tAbort\n\t\t${EndIf}\n\t${EndIf}\n\n\t; Skip if reboot pending\n\tReadRegDword $0 HKLM \"${REGPATH_LEGACYUPDATE_SETUP}\" \"RebootPending\"\n\t${If} $0 == 1\n\t\tAbort\n\t${EndIf}\n\n\t; Handle 2000 Datacenter Server\n\t${If} ${IsWin2000}\n\t${AndIf} ${IsDatacenter}\n\t\t!insertmacro UnselectSection ${LEGACYUPDATE}\n\t${EndIf}\n\n\t; Handle WES09 already enabled on non-SSE2\n\t${If} ${IsWinXP2002}\n\t\t${If} ${IsWinXPWES}\n\t\t${OrIf} ${IsWinXPPOSReady}\n\t\t\t; Check for SSE2\n\t\t\tSystem::Call '${IsProcessorFeaturePresent}(${PF_XMMI64_INSTRUCTIONS_AVAILABLE}) .r0'\n\t\t\t${If} $0 == 0\n\t\t\t\tMessageBox MB_USERICON \"$(MsgBoxWES09NotSSE2Pre)\" /SD IDOK\n\t\t\t${EndIf}\n\t\t${EndIf}\n\t${EndIf}\nFunctionEnd\n\nFunction PreDownload\n\t; Win2k\n\t${If} ${IsWin2000}\n\t\tCall DownloadW2KSP4\n\t\tCall DownloadW2KUR1\n\t\tCall DownloadIE6\n\t${EndIf}\n\n\t; XP 2002\n\t${If} ${IsWinXP2002}\n\t${AndIf} ${SectionIsSelected} ${XPSP3}\n\t\t${If} ${IsWinXPMediaCenter}\n\t\t${OrIf} ${IsWinXPTabletPC}\n\t\t\tCall DownloadXPSP2\n\t\t${Else}\n\t\t\tCall DownloadXPSP1a\n\t\t${EndIf}\n\t\tCall DownloadXPSP3\n\t${EndIf}\n\n\t${If} ${IsWinXP2002}\n\t${AndIf} ${SectionIsSelected} ${XPESP3}\n\t\tCall DownloadXPESP3\n\t${EndIf}\n\n\t; XP 2003\n\t${If} ${IsWinXP2003}\n\t${AndIf} ${SectionIsSelected} ${2003SP2}\n\t\tCall Download2003SP2\n\t${EndIf}\n\n\t; Vista\n\t${If} ${IsWinVista}\n\t\t${If} ${NeedsPatch} HyperV2008Update\n\t\t\tCall DownloadKB950050\n\t\t${EndIf}\n\n\t\tCall DownloadVistaSP1\n\t\tCall DownloadVistaSP2\n\t\tCall DownloadKB3205638\n\t\tCall DownloadKB4012583\n\t\tCall DownloadKB4015195\n\t\tCall DownloadKB4015380\n\n\t\t${If} ${SectionIsSelected} ${VISTAESU}\n\t\t\tCall DownloadKB4493730\n\t\t${EndIf}\n\n\t\t${If} ${SectionIsSelected} ${VISTAIE9}\n\t\t\tCall DownloadKB971512\n\t\t\tCall DownloadKB2117917\n\t\t\tCall DownloadIE9\n\t\t${EndIf}\n\t${EndIf}\n\n\t; 7\n\t${If} ${IsWin7}\n\t\t${If} ${IsHomeServer}\n\t\t\tCall DownloadKB2757011\n\t\t${Else}\n\t\t\tCall DownloadWin7SP1\n\t\t${EndIf}\n\n\t\t${If} ${SectionIsSelected} ${WIN7CRU}\n\t\t\tCall DownloadKB3020369\n\t\t\tCall DownloadKB3125574\n\t\t${EndIf}\n\n\t\tCall DownloadKB3138612\n\t\tCall DownloadKB4474419\n\t\tCall DownloadKB4490628\n\t${EndIf}\n\n\t; 8\n\t${If} ${IsWin8}\n\t\tCall DownloadKB4598297\n\t${EndIf}\n\n\t; 8.1\n\t${If} ${IsWin8.1}\n\t\tCall DownloadKB3021910\n\t\tCall DownloadClearCompressionFlag\n\t\tCall DownloadKB2919355\n\t\tCall DownloadKB2932046\n\t\tCall DownloadKB2959977\n\t\tCall DownloadKB2937592\n\t\tCall DownloadKB2934018\n\t\tCall DownloadKB3021910\n\t${EndIf}\n\n\t; General\n\tCall DownloadWUA\n\n\t${If} ${AtMostWin8.1}\n\t${AndIf} ${SectionIsSelected} ${ROOTCERTS}\n\t\tCall DownloadRoots\n\t${EndIf}\nFunctionEnd\n\nFunction PostInstall\n\t; Handle first run flag if needed\n\t${If} ${FileExists} \"$INSTDIR\\LegacyUpdate.exe\"\n\t${AndIfNot} ${IsRunOnce}\n\t\tClearErrors\n\t\tReadRegDword $0 HKLM \"${REGPATH_LEGACYUPDATE_SETUP}\" \"ActiveXInstalled\"\n\t\t${If} ${Errors}\n\t\t\tStrCpy $0 \"/firstrun\"\n\t\t${Else}\n\t\t\tStrCpy $0 \"\"\n\t\t${EndIf}\n\t\tWriteRegDword HKLM \"${REGPATH_LEGACYUPDATE_SETUP}\" \"ActiveXInstalled\" 1\n\t${EndIf}\n\n\t${IfNot} ${Silent}\n\t${AndIfNot} ${IsRunOnce}\n\t\t${If} ${FileExists} \"$INSTDIR\\LegacyUpdate.exe\"\n\t\t\tExec '\"$INSTDIR\\LegacyUpdate.exe\" /launch $0'\n\t\t${ElseIf} ${AtLeastWin10}\n\t\t\tExecShell \"\" \"ms-settings:windowsupdate\"\n\t\t${ElseIf} ${AtLeastWinVista}\n\t\t\tExec '\"$WINDIR\\system32\\wuauclt.exe\" /ShowWUAutoScan'\n\t\t${EndIf}\n\n\t\t; Launch activation wizard if requested by the user\n\t\t${If} ${SectionIsSelected} ${ACTIVATE}\n\t\t\t${DisableX64FSRedirection}\n\t\t\t${If} ${AtLeastWinVista}\n\t\t\t\tExec '\"$WINDIR\\system32\\slui.exe\"'\n\t\t\t${Else}\n\t\t\t\tExec '\"$WINDIR\\system32\\oobe\\msoobe.exe\" /a'\n\t\t\t${EndIf}\n\t\t\t${EnableX64FSRedirection}\n\t\t${EndIf}\n\t${EndIf}\nFunctionEnd\n\nFunction CleanUp\n\t; Called only after all tasks have completed\n\tCall CleanUpRunOnce\n\tCall RevertTermsrvUserMode\n\t!insertmacro InhibitSleep 0\n\n\t${If} ${IsRunOnce}\n\t\tCall OnRunOnceDone\n\t${Else}\n\t\t${If} ${IsPostInstall}\n\t\t${OrIfNot} ${RebootFlag}\n\t\t\tCall CleanUpRunOnceFinal\n\t\t${EndIf}\n\t${EndIf}\nFunctionEnd\n\nFunction .onInstSuccess\n\t${MementoSectionSave}\n\n\tCall SetLastOSVersion\n\n\t; Reboot now if we need to. Nothing further in this function will be run if we do need to reboot.\n\t${RebootIfRequired}\n\n\t; If we're done, launch the update site\n\tCall PostInstall\n\tCall CleanUp\nFunctionEnd\n\nFunction .onInstFailed\n\t${MementoSectionSave}\n\tCall CleanUp\nFunctionEnd\n\nFunction .onSelChange\n\t${If} ${SectionIsSelected} ${WES09}\n\t\t; Check for SSE2\n\t\tSystem::Call '${IsProcessorFeaturePresent}(${PF_XMMI64_INSTRUCTIONS_AVAILABLE}) .r0'\n\t\t${If} $0 == 0\n\t\t\tMessageBox MB_USERICON \"$(MsgBoxWES09NotSSE2Block)\" /SD IDOK\n\t\t\t!insertmacro UnselectSection ${WES09}\n\t\t${EndIf}\n\t${ElseIf} ${SectionIsSelected} ${ACTIVATE}\n\t\t; Make sure the service pack prerequisite is selected\n\t\t${If} ${IsWinXP2002}\n\t\t${AndIfNot} ${AtLeastServicePack} 3\n\t\t${AndIfNot} ${SectionIsSelected} ${XPSP3}\n\t\t\tMessageBox MB_USERICON \"$(MsgBoxActivateXP2002NotSP3)\" /SD IDOK\n\t\t\t!insertmacro SelectSection ${XPSP3}\n\t\t${ElseIf} ${IsWinXP2003}\n\t\t${AndIfNot} ${AtLeastServicePack} 2\n\t\t${AndIfNot} ${SectionIsSelected} ${2003SP2}\n\t\t\tMessageBox MB_USERICON \"$(MsgBoxActivateXP2003NotSP2)\" /SD IDOK\n\t\t\t!insertmacro SelectSection ${2003SP2}\n\t\t${EndIf}\n\t${ElseIf} ${SectionIsSelected} ${LEGACYUPDATE}\n\t\t; Handle 2000 Datacenter Server\n\t\t${If} ${IsWin2000}\n\t\t${AndIf} ${IsDatacenter}\n\t\t\tMessageBox MB_USERICON \"$(MsgBoxWUA2000Datacenter)\" /SD IDOK\n\t\t\t!insertmacro UnselectSection ${LEGACYUPDATE}\n\t\t${EndIf}\n\t${EndIf}\nFunctionEnd\n\nFunction un.onInit\n\tSetShellVarContext all\n\tSetAutoClose true\n\t${If} ${IsVerbose}\n\t\tSetDetailsPrint both\n\t${Else}\n\t\tSetDetailsPrint listonly\n\t${EndIf}\n\n\t${If} ${RunningX64}\n\t\tSetRegView 64\n\t${EndIf}\nFunctionEnd\n"
  },
  {
    "path": "setup/stdafx.h",
    "content": ""
  },
  {
    "path": "shared/Exec.c",
    "content": "#include \"stdafx.h\"\n#include \"Exec.h\"\n\nHRESULT Exec(LPCWSTR verb, LPCWSTR file, LPCWSTR params, LPCWSTR workingDir, int show, BOOL wait, LPDWORD exitCode) {\n\tSHELLEXECUTEINFO execInfo = {0};\n\texecInfo.cbSize = sizeof(execInfo);\n\texecInfo.lpVerb = verb;\n\texecInfo.lpFile = file;\n\texecInfo.lpParameters = params;\n\texecInfo.lpDirectory = workingDir;\n\texecInfo.nShow = show;\n\treturn ExecEx(&execInfo, wait, exitCode);\n}\n\nHRESULT ExecEx(LPSHELLEXECUTEINFO execInfo, BOOL wait, LPDWORD exitCode) {\n\tif (wait) {\n\t\texecInfo->fMask |= SEE_MASK_NOCLOSEPROCESS;\n\t}\n\n\tif (!ShellExecuteEx(execInfo)) {\n\t\treturn HRESULT_FROM_WIN32(GetLastError());\n\t}\n\n\tHRESULT hr = S_OK;\n\n\tif (wait) {\n\t\tif (execInfo->hProcess == NULL) {\n\t\t\tTRACE(L\"ShellExecuteEx() didn't return a handle: %u\", GetLastError());\n\t\t\thr = E_FAIL;\n\t\t}\n\n\t\tWaitForSingleObject(execInfo->hProcess, INFINITE);\n\n\t\tif (exitCode != NULL && GetExitCodeProcess(execInfo->hProcess, exitCode) == 0) {\n\t\t\thr = HRESULT_FROM_WIN32(GetLastError());\n\t\t\tTRACE(L\"GetExitCodeProcess() failed: %p\\n\", hr);\n\t\t}\n\n\t\tCloseHandle(execInfo->hProcess);\n\t} else if (exitCode != NULL) {\n\t\t*exitCode = 0;\n\t}\n\n\treturn hr;\n}\n"
  },
  {
    "path": "shared/Exec.h",
    "content": "#pragma once\n\n#include <windows.h>\n#include <shellapi.h>\n\nEXTERN_C HRESULT Exec(LPCWSTR verb, LPCWSTR file, LPCWSTR params, LPCWSTR workingDir, int show, BOOL wait, LPDWORD exitCode);\nEXTERN_C HRESULT ExecEx(LPSHELLEXECUTEINFO execInfo, BOOL wait, LPDWORD exitCode);\n"
  },
  {
    "path": "shared/HResult.c",
    "content": "#include \"stdafx.h\"\n#include <windows.h>\n#include \"HResult.h\"\n#include \"LegacyUpdate.h\"\n#include \"VersionInfo.h\"\n\nstatic BOOL g_loadedHModule;\nstatic HMODULE g_messagesHModule;\n\nEXTERN_C LPWSTR GetMessageForHresult(HRESULT hr) {\n\tLPWSTR message = NULL;\n\n\tif (HRESULT_FACILITY(hr) == FACILITY_WINDOWSUPDATE) {\n\t\tif (!g_loadedHModule) {\n\t\t\tg_loadedHModule = TRUE;\n\n\t\t\t// Load messages table from main dll\n\t\t\tLPWSTR installPath = NULL;\n\t\t\tif (GetInstallPath(&installPath)) {\n\t\t\t\tWCHAR path[MAX_PATH];\n\t\t\t\twsprintf(path, L\"%ls\\\\LegacyUpdate.dll\", installPath);\n\t\t\t\tg_messagesHModule = LoadLibrary(path);\n\t\t\t\tLocalFree(installPath);\n\t\t\t}\n\n\t\t\tif (!g_messagesHModule) {\n\t\t\t\t// Try the current module\n\t\t\t\tg_messagesHModule = OWN_MODULE;\n\t\t\t}\n\t\t}\n\n\t\tFormatMessage(FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS, g_messagesHModule, hr, LANG_NEUTRAL, (LPWSTR)&message, 0, NULL);\n\t}\n\n\tif (message == NULL && !FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, hr, LANG_NEUTRAL, (LPWSTR)&message, 0, NULL)) {\n\t\tmessage = (LPWSTR)LocalAlloc(LPTR, 17 * sizeof(WCHAR));\n\t\twsprintf(message, L\"Error 0x%08X\", hr);\n\t\treturn message;\n\t}\n\n\t// Truncate trailing \\r\\n if any\n\tint len = lstrlen(message);\n\tif (len >= 2 && message[len - 2] == '\\r' && message[len - 1] == '\\n') {\n\t\tmessage[len - 2] = 0;\n\t}\n\n\t// Remove title part in braces\n\tif (len > 1 && message[0] == '{') {\n\t\tLPWSTR closeBrace = wcsstr(message, L\"}\\r\\n\");\n\t\tif (closeBrace) {\n\t\t\tmessage = closeBrace + 3;\n\t\t}\n\t}\n\n\treturn message;\n}\n"
  },
  {
    "path": "shared/HResult.h",
    "content": "#pragma once\n\n#include <windows.h>\n\nEXTERN_C LPWSTR GetMessageForHresult(HRESULT hr);\n"
  },
  {
    "path": "shared/LegacyUpdate.c",
    "content": "#include \"stdafx.h\"\n#include <windows.h>\n#include \"Registry.h\"\n\nstatic LPWSTR _installPath;\n\nEXTERN_C HRESULT GetInstallPath(LPWSTR *path) {\n\t*path = (LPWSTR)LocalAlloc(LPTR, MAX_PATH * sizeof(WCHAR));\n\tHRESULT hr = S_OK;\n\n\tif (!_installPath) {\n\t\tDWORD size = 0;\n\t\thr = GetRegistryString(HKEY_LOCAL_MACHINE, REGPATH_LEGACYUPDATE_UNINSTALL, L\"InstallLocation\", KEY_WOW64_64KEY, &_installPath, &size);\n\t\tif (SUCCEEDED(hr)) {\n\t\t\tlstrcpy(*path, _installPath);\n\t\t\treturn S_OK;\n\t\t}\n\n\t\t// Do our best to guess where it should be\n\t\tLPWSTR programFiles = NULL;\n\t\thr = GetRegistryString(HKEY_LOCAL_MACHINE, REGPATH_WIN, L\"ProgramFilesDir\", KEY_WOW64_64KEY, &programFiles, &size);\n\t\tif (SUCCEEDED(hr)) {\n\t\t\t_installPath = (LPWSTR)LocalAlloc(LPTR, MAX_PATH * sizeof(WCHAR));\n\t\t\twsprintf(_installPath, L\"%ls\\\\Legacy Update\", programFiles);\n\t\t\tLocalFree(programFiles);\n\t\t}\n\t}\n\n\tlstrcpy(*path, _installPath);\n\treturn hr;\n}\n"
  },
  {
    "path": "shared/LegacyUpdate.h",
    "content": "#pragma once\n\n#include <windows.h>\n\nEXTERN_C HRESULT GetInstallPath(LPWSTR *path);\n"
  },
  {
    "path": "shared/LoadImage.c",
    "content": "#include <windows.h>\n#include <wincodec.h>\n#include <gdiplus.h>\n\n// Adapted from https://faithlife.codes/blog/2008/09/displaying_a_splash_screen_with_c_part_i/\n//  1. Get resource as an IStream\n//  2. Use Windows Imaging Component to load the PNG\n//  3. Convert the WIC bitmap to an HBITMAP\n// Why does loading a PNG need to be so difficult?\n\ntypedef HRESULT (WINAPI *_WICConvertBitmapSource)(REFWICPixelFormatGUID dstFormat, IWICBitmapSource *pISrc, IWICBitmapSource **ppIDst);\ntypedef HRESULT (WINAPI *_SHCreateStreamOnFileEx)(LPCWSTR pszFile, DWORD grfMode, DWORD dwAttributes, BOOL fCreate, IStream *pstmTemplate, IStream **ppstm);\n\nstatic _WICConvertBitmapSource $WICConvertBitmapSource;\nstatic _SHCreateStreamOnFileEx $SHCreateStreamOnFileEx;\n\nstatic HGLOBAL GetRawResource(HINSTANCE hInstance, LPCWSTR name, LPCWSTR type) {\n\tHRSRC resource = FindResource(hInstance, name, type);\n\tif (!resource) {\n\t\tTRACE(L\"FindResource failed: %d\", GetLastError());\n\t\treturn NULL;\n\t}\n\n\tDWORD resourceSize = SizeofResource(hInstance, resource);\n\tHGLOBAL imageHandle = LoadResource(hInstance, resource);\n\tif (!imageHandle) {\n\t\tTRACE(L\"LoadResource failed: %d\", GetLastError());\n\t\treturn NULL;\n\t}\n\n\tLPVOID sourceResourceData = LockResource(imageHandle);\n\tif (!sourceResourceData) {\n\t\tTRACE(L\"LockResource failed: %d\", GetLastError());\n\t\treturn NULL;\n\t}\n\n\tHGLOBAL resourceDataHandle = GlobalAlloc(GMEM_MOVEABLE, resourceSize);\n\tif (!resourceDataHandle) {\n\t\tTRACE(L\"GlobalAlloc failed: %d\", GetLastError());\n\t\treturn NULL;\n\t}\n\n\tLPVOID resourceData = GlobalLock(resourceDataHandle);\n\tif (!resourceData) {\n\t\tTRACE(L\"GlobalLock failed: %d\", GetLastError());\n\t\tGlobalFree(resourceDataHandle);\n\t\treturn NULL;\n\t}\n\n\tCopyMemory(resourceData, sourceResourceData, resourceSize);\n\tGlobalUnlock(resourceDataHandle);\n\treturn resourceDataHandle;\n}\n\nstatic IStream *GetResourceStream(HINSTANCE hInstance, LPCWSTR name, LPCWSTR type) {\n\tIStream *stream = NULL;\n\tHGLOBAL resource = GetRawResource(hInstance, name, type);\n\tif (!resource) {\n\t\tTRACE(L\"GetResource failed: %d\", GetLastError());\n\t\treturn NULL;\n\t}\n\n\tif (SUCCEEDED(CreateStreamOnHGlobal(resource, TRUE, &stream))) {\n\t\treturn stream;\n\t}\n\n\tGlobalFree(resource);\n\treturn NULL;\n}\n\nstatic IWICBitmapSource *GetWICBitmap(IStream *imageStream, REFCLSID rclsid) {\n\tIWICBitmapSource *bitmap = NULL;\n\tIWICBitmapDecoder *decoder = NULL;\n\tUINT frameCount = 0;\n\tIWICBitmapFrameDecode *frame = NULL;\n\n\tif (!SUCCEEDED(CoCreateInstance(rclsid, NULL, CLSCTX_INPROC_SERVER, &IID_IWICBitmapDecoder, (LPVOID *)&decoder))) {\n\t\treturn NULL;\n\t}\n\n\tif (!SUCCEEDED(IWICBitmapDecoder_Initialize(decoder, imageStream, WICDecodeMetadataCacheOnLoad))) {\n\t\tgoto end;\n\t}\n\n\tif (!SUCCEEDED(IWICBitmapDecoder_GetFrameCount(decoder, &frameCount)) || frameCount != 1) {\n\t\tgoto end;\n\t}\n\n\tif (!SUCCEEDED(IWICBitmapDecoder_GetFrame(decoder, 0, &frame))) {\n\t\tgoto end;\n\t}\n\n\t$WICConvertBitmapSource(&GUID_WICPixelFormat32bppPBGRA, (IWICBitmapSource *)frame, &bitmap);\n\tIWICBitmapFrameDecode_Release(frame);\n\nend:\n\tIWICBitmapDecoder_Release(decoder);\n\treturn bitmap;\n}\n\nstatic HBITMAP GetHBitmapForWICBitmap(IWICBitmapSource *bitmap) {\n\tHBITMAP hBitmap = NULL;\n\tUINT width = 0, height = 0;\n\tif (!SUCCEEDED(IWICBitmapSource_GetSize(bitmap, &width, &height)) || width == 0 || height == 0) {\n\t\treturn NULL;\n\t}\n\n\tBITMAPINFO bminfo = {0};\n\tZeroMemory(&bminfo, sizeof(bminfo));\n\tbminfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\n\tbminfo.bmiHeader.biWidth = width;\n\tbminfo.bmiHeader.biHeight = -(LONG)height;\n\tbminfo.bmiHeader.biPlanes = 1;\n\tbminfo.bmiHeader.biBitCount = 32;\n\tbminfo.bmiHeader.biCompression = BI_RGB;\n\n\tvoid *imageBits = NULL;\n\tHDC screenDC = GetDC(NULL);\n\thBitmap = CreateDIBSection(screenDC, &bminfo, DIB_RGB_COLORS, &imageBits, NULL, 0);\n\tReleaseDC(NULL, screenDC);\n\tif (!hBitmap) {\n\t\treturn NULL;\n\t}\n\n\tUINT stride = width * 4;\n\tUINT imageSize = stride * height;\n\tif (!SUCCEEDED(IWICBitmapSource_CopyPixels(bitmap, NULL, stride, imageSize, (BYTE*)imageBits))) {\n\t\tDeleteObject(hBitmap);\n\t\treturn NULL;\n\t}\n\n\treturn hBitmap;\n}\n\nHBITMAP LoadPNGResource(HINSTANCE hInstance, LPCWSTR resourceName, LPCWSTR resourceType) {\n\tif (!$WICConvertBitmapSource) {\n\t\tHMODULE windowscodecs = LoadLibrary(L\"windowscodecs.dll\");\n\t\tif (windowscodecs) {\n\t\t\t$WICConvertBitmapSource = (_WICConvertBitmapSource)GetProcAddress(windowscodecs, \"WICConvertBitmapSource\");\n\t\t}\n\t\tif (!$WICConvertBitmapSource) {\n\t\t\treturn NULL;\n\t\t}\n\t}\n\n\tIStream *imageStream = GetResourceStream(hInstance, resourceName, resourceType);\n\tif (!imageStream) {\n\t\tTRACE(L\"GetResourceStream failed: %d\", GetLastError());\n\t\treturn NULL;\n\t}\n\n\tIWICBitmapSource *bitmap = GetWICBitmap(imageStream, &CLSID_WICPngDecoder);\n\tif (!bitmap) {\n\t\tTRACE(L\"GetWICBitmap failed: %d\", GetLastError());\n\t\tIStream_Release(imageStream);\n\t\treturn NULL;\n\t}\n\n\tHBITMAP result = GetHBitmapForWICBitmap(bitmap);\n\tIWICBitmapSource_Release(bitmap);\n\tIStream_Release(imageStream);\n\treturn result;\n}\n\nHBITMAP LoadJPEGFile(LPCWSTR filePath) {\n\tif (!$WICConvertBitmapSource) {\n\t\tHMODULE windowscodecs = LoadLibrary(L\"windowscodecs.dll\");\n\t\tif (windowscodecs) {\n\t\t\t$WICConvertBitmapSource = (_WICConvertBitmapSource)GetProcAddress(windowscodecs, \"WICConvertBitmapSource\");\n\t\t}\n\t\tif (!$WICConvertBitmapSource) {\n\t\t\treturn NULL;\n\t\t}\n\t}\n\n\tif (!$SHCreateStreamOnFileEx) {\n\t\tHMODULE shlwapi = LoadLibrary(L\"shlwapi.dll\");\n\t\tif (shlwapi) {\n\t\t\t$SHCreateStreamOnFileEx = (_SHCreateStreamOnFileEx)GetProcAddress(shlwapi, \"SHCreateStreamOnFileEx\");\n\t\t}\n\t\tif (!$SHCreateStreamOnFileEx) {\n\t\t\treturn NULL;\n\t\t}\n\t}\n\n\tIStream *imageStream = NULL;\n\tHRESULT hr = $SHCreateStreamOnFileEx(filePath, STGM_READ, FILE_ATTRIBUTE_NORMAL, FALSE, NULL, &imageStream);\n\tif (!SUCCEEDED(hr)) {\n\t\tTRACE(L\"SHCreateStreamOnFileEx failed: 0x%08x\", hr);\n\t\treturn NULL;\n\t}\n\n\tIWICBitmapSource *bitmap = GetWICBitmap(imageStream, &CLSID_WICJpegDecoder);\n\tif (!bitmap) {\n\t\tTRACE(L\"GetWICBitmap failed: %d\", GetLastError());\n\t\tIStream_Release(imageStream);\n\t\treturn NULL;\n\t}\n\n\tHBITMAP result = GetHBitmapForWICBitmap(bitmap);\n\tIWICBitmapSource_Release(bitmap);\n\tIStream_Release(imageStream);\n\treturn result;\n}\n\nBOOL ScaleAndWriteToBMP(HBITMAP hBitmap, DWORD width, DWORD height, LPCWSTR outputPath) {\n\tBOOL result = FALSE;\n\tif (!hBitmap) {\n\t\tTRACE(L\"Null bitmap\");\n\t\treturn FALSE;\n\t}\n\n\tHDC hdc = GetDC(NULL);\n\tHDC hdcMem = CreateCompatibleDC(hdc);\n\tHDC hdcMemScaled = NULL;\n\tHGLOBAL handle = NULL;\n\tHANDLE file = INVALID_HANDLE_VALUE;\n\tHBITMAP oldBitmap = NULL;\n\tHBITMAP oldScaledBitmap = NULL;\n\n\tHBITMAP scaledBitmap = CreateCompatibleBitmap(hdc, width, height);\n\tif (!scaledBitmap) {\n\t\tTRACE(L\"CreateCompatibleBitmap failed: %d\", GetLastError());\n\t\tgoto end;\n\t}\n\n\tBITMAP bmp = {0};\n\tif (!GetObject(hBitmap, sizeof(BITMAP), &bmp)) {\n\t\tTRACE(L\"GetObject failed: %d\", GetLastError());\n\t\tgoto end;\n\t}\n\n\thdcMemScaled = CreateCompatibleDC(hdc);\n\tSetStretchBltMode(hdcMemScaled, HALFTONE);\n\n\toldBitmap = SelectObject(hdcMem, hBitmap);\n\toldScaledBitmap = SelectObject(hdcMemScaled, scaledBitmap);\n\n\tif (!StretchBlt(hdcMemScaled,\n\t\t0, 0, width, height, hdcMem,\n\t\t0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY)) {\n\t\tTRACE(L\"StretchBlt failed: %d\", GetLastError());\n\t\tgoto end;\n\t}\n\n\tBITMAPINFOHEADER bmih = {0};\n\tbmih.biSize = sizeof(BITMAPINFOHEADER);\n\tbmih.biWidth = width;\n\tbmih.biHeight = height;\n\tbmih.biPlanes = 1;\n\tbmih.biBitCount = bmp.bmBitsPixel;\n\tbmih.biCompression = BI_RGB;\n\tbmih.biSizeImage = ((width * bmp.bmBitsPixel + 31) / 32) * 4 * height;\n\n\tBITMAPFILEHEADER bmfh = {0};\n\tbmfh.bfType = 0x4D42;\n\tbmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);\n\tbmfh.bfSize = bmfh.bfOffBits + bmih.biSizeImage;\n\n\thandle = GlobalAlloc(GMEM_MOVEABLE, bmih.biSizeImage);\n\tif (!handle) {\n\t\tTRACE(L\"GlobalAlloc failed: %d\", GetLastError());\n\t\tgoto end;\n\t}\n\n\tBYTE *bitmapData = (BYTE *)GlobalLock(handle);\n\tif (!bitmapData) {\n\t\tTRACE(L\"GlobalLock failed: %d\", GetLastError());\n\t\tgoto end;\n\t}\n\n\tif (!GetDIBits(hdcMemScaled, scaledBitmap, 0, height, bitmapData, (BITMAPINFO *)&bmih, DIB_RGB_COLORS)) {\n\t\tTRACE(L\"GetDIBits failed: %d\", GetLastError());\n\t\tgoto end;\n\t}\n\n\tfile = CreateFile(outputPath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);\n\tif (file == INVALID_HANDLE_VALUE) {\n\t\tTRACE(L\"CreateFile failed: %d\", GetLastError());\n\t\tgoto end;\n\t}\n\n\tDWORD written = 0;\n\tif (!WriteFile(file, &bmfh, sizeof(BITMAPFILEHEADER), &written, NULL) ||\n\t\t!WriteFile(file, &bmih, sizeof(BITMAPINFOHEADER), &written, NULL) ||\n\t\t!WriteFile(file, bitmapData, bmih.biSizeImage, &written, NULL)) {\n\t\tTRACE(L\"WriteFile failed: %d\", GetLastError());\n\t\tgoto end;\n\t}\n\n\tresult = TRUE;\n\nend:\n\tif (hdcMem && oldBitmap) {\n\t\tSelectObject(hdcMem, oldBitmap);\n\t}\n\tif (hdcMemScaled && oldScaledBitmap) {\n\t\tSelectObject(hdcMemScaled, oldScaledBitmap);\n\t}\n\tif (file != INVALID_HANDLE_VALUE) {\n\t\tCloseHandle(file);\n\t}\n\tif (scaledBitmap) {\n\t\tDeleteObject(scaledBitmap);\n\t}\n\tif (handle) {\n\t\tGlobalUnlock(handle);\n\t\tGlobalFree(handle);\n\t}\n\tif (hdc) {\n\t\tReleaseDC(NULL, hdc);\n\t}\n\tif (hdcMem) {\n\t\tDeleteDC(hdcMem);\n\t}\n\tif (hdcMemScaled) {\n\t\tDeleteDC(hdcMemScaled);\n\t}\n\n\treturn result;\n}\n"
  },
  {
    "path": "shared/LoadImage.h",
    "content": "#pragma once\n\n#include <windows.h>\n\nHBITMAP LoadPNGResource(HINSTANCE hInstance, LPCWSTR resourceName, LPCWSTR resourceType);\nHBITMAP LoadJPEGFile(LPCWSTR filePath);\nBOOL ScaleAndWriteToBMP(HBITMAP hBitmap, DWORD width, DWORD height, LPCWSTR outputPath);\n"
  },
  {
    "path": "shared/Log.c",
    "content": "#include \"stdafx.h\"\n#include \"Log.h\"\n#include \"Version.h\"\n#include \"VersionInfo.h\"\n#include \"User.h\"\n#include \"Wow64.h\"\n\nstatic const struct {\n\tDWORD arch;\n\tLPCWSTR name;\n} archNames[] = {\n\t{PROCESSOR_ARCHITECTURE_INTEL, L\"x86\"},\n\t{PROCESSOR_ARCHITECTURE_ARM,   L\"ARM\"},\n\t{PROCESSOR_ARCHITECTURE_IA64,  L\"IA64\"},\n\t{PROCESSOR_ARCHITECTURE_AMD64, L\"x64\"},\n\t{PROCESSOR_ARCHITECTURE_ARM64, L\"ARM64\"}\n};\n\nstatic const struct {\n\tDWORD rid;\n\tLPCWSTR name;\n} integrityLevels[] = {\n\t{SECURITY_MANDATORY_UNTRUSTED_RID, L\"untrusted\"},\n\t{SECURITY_MANDATORY_LOW_RID,       L\"low\"},\n\t{SECURITY_MANDATORY_MEDIUM_RID,    L\"medium\"},\n\t{SECURITY_MANDATORY_HIGH_RID,      L\"high\"},\n\t{SECURITY_MANDATORY_SYSTEM_RID,    L\"system\"},\n\t{SECURITY_MANDATORY_PROTECTED_PROCESS_RID, L\"protected process\"},\n\t{MAXDWORD, L\"n/a\"}\n};\n\nstatic BOOL g_logInitialized = FALSE;\nstatic HANDLE g_hLogFile  = INVALID_HANDLE_VALUE;\n\nvoid LogInternal(LPCWSTR text) {\n\tif (g_hLogFile == INVALID_HANDLE_VALUE || text == NULL || wcslen(text) > LOG_LINE_MAXLEN) {\n\t\treturn;\n\t}\n\n\tSYSTEMTIME time;\n\tGetLocalTime(&time);\n\n\tWCHAR line[LOG_LINE_MAXLEN + 39];\n\tint length = wsprintf(line, L\"%04d-%02d-%02d %02d:%02d:%02d\\t%ls[%d]\\t%ls\\r\\n\",\n\t\ttime.wYear, time.wMonth, time.wDay,\n\t\ttime.wHour, time.wMinute, time.wSecond,\n\t\tL\"\" LOG_NAME, GetCurrentProcessId(),\n\t\ttext);\n\n\tDWORD written = 0;\n\tWriteFile(g_hLogFile, line, length * sizeof(WCHAR), &written, NULL);\n\tFlushFileBuffers(g_hLogFile);\n}\n\nstatic void WriteLogBanner() {\n\t// Divider\n\tWCHAR divider[41];\n\tfor (size_t i = 0; i < ARRAYSIZE(divider) - 1; i++) {\n\t\tdivider[i] = L'=';\n\t}\n\tdivider[ARRAYSIZE(divider) - 1] = L'\\0';\n\n\tLogInternal(divider);\n\n\t// App version\n\tLogInternal(L\"Legacy Update \" VERSION_STRING);\n\n\t// OS info\n\tLPCWSTR archName = L\"?\";\n\tSYSTEM_INFO sysInfo;\n\tOurGetNativeSystemInfo(&sysInfo);\n\tfor (size_t i = 0; i < ARRAYSIZE(archNames); i++) {\n\t\tif (sysInfo.wProcessorArchitecture == archNames[i].arch) {\n\t\t\tarchName = archNames[i].name;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tOSVERSIONINFOEX *versionInfo = GetVersionInfo();\n\tLPCWSTR productType = versionInfo->wProductType == VER_NT_WORKSTATION ? L\"Workstation\" : L\"Server\";\n\n\tLOG(L\"OS: %d.%d.%d%ls%ls %ls (%ls, Suite: %05x)\",\n\t\tversionInfo->dwMajorVersion,\n\t\tversionInfo->dwMinorVersion,\n\t\tversionInfo->dwBuildNumber,\n\t\tversionInfo->szCSDVersion == NULL || lstrlen(versionInfo->szCSDVersion) == 0 ? L\"\" : L\" \",\n\t\tversionInfo->szCSDVersion,\n\t\tarchName,\n\t\tproductType,\n\t\tversionInfo->wSuiteMask);\n\n\t// Launch info\n\tLOG(L\"Command line: %ls\", GetCommandLine());\n\n\t// Integrity\n\tDWORD integrity = GetTokenIntegrity();\n\tLPCWSTR integrityName = L\"?\";\n\tfor (size_t i = 0; i < ARRAYSIZE(integrityLevels); i++) {\n\t\tif (integrity <= integrityLevels[i].rid) {\n\t\t\tintegrityName = integrityLevels[i].name;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tLOG(L\"%ls, %ls integrity\", IsUserAdmin() ? L\"Admin\" : L\"Non-admin\", integrityName);\n}\n\nHRESULT OpenLog() {\n\tif (g_logInitialized) {\n\t\treturn S_OK;\n\t}\n\n\tg_logInitialized = TRUE;\n\n\n\t// Get system log path\n\tWCHAR logPath[MAX_PATH];\n\tGetWindowsDirectory(logPath, ARRAYSIZE(logPath));\n\tlstrcat(logPath, AtLeastWinVista() ? L\"\\\\Logs\\\\LegacyUpdate.log\" : L\"\\\\Temp\\\\LegacyUpdate.log\");\n\n\tSECURITY_ATTRIBUTES sa = {0};\n\tsa.nLength = sizeof(sa);\n\tsa.lpSecurityDescriptor = NULL;\n\tsa.bInheritHandle = FALSE;\n\n\t// Try to open in the preferred location\n\tg_hLogFile = CreateFile(logPath, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, &sa, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);\n\tif (g_hLogFile == INVALID_HANDLE_VALUE) {\n\t\t// Access denied? Use user temp instead\n\t\tGetTempPath(ARRAYSIZE(logPath), logPath);\n\t\tlstrcat(logPath, L\"LegacyUpdate.log\");\n\t\tg_hLogFile = CreateFile(logPath, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, &sa, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);\n\t}\n\n\tHRESULT hr = HRESULT_FROM_WIN32(GetLastError());\n\tif (hr == HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS)) {\n\t\t// Continue previous log file\n\t\tSetFilePointer(g_hLogFile, 0, NULL, FILE_END);\n\t} else {\n\t\tCHECK_HR_OR_RETURN(L\"OpenLog\");\n\n\t\t// Write UTF-16LE BOM to make Notepad happy\n\t\tDWORD bom = 0xFEFF;\n\t\tDWORD written = 0;\n\t\tWriteFile(g_hLogFile, &bom, sizeof(WCHAR), &written, NULL);\n\t}\n\n\tWriteLogBanner();\n\treturn S_OK;\n}\n\nvoid CloseLog(void) {\n\tif (g_hLogFile != INVALID_HANDLE_VALUE) {\n\t\tCloseHandle(g_hLogFile);\n\t\tg_hLogFile = INVALID_HANDLE_VALUE;\n\t}\n}\n"
  },
  {
    "path": "shared/Log.h",
    "content": "#pragma once\n\n#include <windows.h>\n\n// Same as NSIS_MAX_STRLEN\n#define LOG_LINE_MAXLEN 4096\n\nEXTERN_C HRESULT OpenLog();\nEXTERN_C void CloseLog(void);\nEXTERN_C void LogInternal(LPCWSTR text);\n\n#define LOG(...) { \\\n\tLPWSTR _logMsg = (LPWSTR)LocalAlloc(LPTR, LOG_LINE_MAXLEN * sizeof(WCHAR)); \\\n\twsprintf(_logMsg, __VA_ARGS__); \\\n\tLogInternal(_logMsg); \\\n\tLocalFree(_logMsg); \\\n}\n"
  },
  {
    "path": "shared/ProductInfo.c",
    "content": "#include <windows.h>\n\ntypedef BOOL (WINAPI *_GetProductInfo)(DWORD, DWORD, DWORD, DWORD, PDWORD);\n\nstatic BOOL productInfoLoaded = FALSE;\nstatic _GetProductInfo $GetProductInfo;\n\nBOOL GetVistaProductInfo(DWORD dwOSMajorVersion, DWORD dwOSMinorVersion, DWORD dwSpMajorVersion, DWORD dwSpMinorVersion, PDWORD pdwReturnedProductType) {\n\tif (!productInfoLoaded) {\n\t\tproductInfoLoaded = TRUE;\n\t\t$GetProductInfo = (_GetProductInfo)GetProcAddress(GetModuleHandle(L\"kernel32.dll\"), \"GetProductInfo\");\n\t}\n\n\tif ($GetProductInfo) {\n\t\treturn $GetProductInfo(dwOSMajorVersion, dwOSMinorVersion, dwSpMajorVersion, dwSpMinorVersion, pdwReturnedProductType);\n\t}\n\n\t*pdwReturnedProductType = PRODUCT_UNDEFINED;\n\treturn FALSE;\n}\n"
  },
  {
    "path": "shared/ProductInfo.h",
    "content": "#pragma once\n\n#include <windows.h>\n\nBOOL GetVistaProductInfo(DWORD dwOSMajorVersion, DWORD dwOSMinorVersion, DWORD dwSpMajorVersion, DWORD dwSpMinorVersion, PDWORD pdwReturnedProductType);\n"
  },
  {
    "path": "shared/Registry.c",
    "content": "#include \"stdafx.h\"\n#include \"Registry.h\"\n#include \"VersionInfo.h\"\n#include <shlwapi.h>\n\nLPVOID DELETE_KEY   = (LPVOID)INT_MIN;\nLPVOID DELETE_VALUE = (LPVOID)(INT_MIN + 1);\n\nHRESULT GetRegistryString(HKEY key, LPCWSTR subkeyPath, LPCWSTR valueName, REGSAM options, LPWSTR *data, LPDWORD size) {\n\tif (data == NULL) {\n\t\treturn E_POINTER;\n\t}\n\n\tHKEY subkey = NULL;\n\tHRESULT hr = HRESULT_FROM_WIN32(RegOpenKeyEx(key, subkeyPath, 0, GetRegistryWow64Flag(KEY_READ | options), &subkey));\n\tif (!SUCCEEDED(hr)) {\n\t\tgoto end;\n\t}\n\n\tif (data) {\n\t\tDWORD length = 0;\n\t\thr = HRESULT_FROM_WIN32(RegQueryValueEx(subkey, valueName, NULL, NULL, NULL, &length));\n\t\tif (!SUCCEEDED(hr)) {\n\t\t\tgoto end;\n\t\t}\n\n\t\tLPWSTR buffer = (LPWSTR)LocalAlloc(LPTR, length + sizeof(WCHAR));\n\t\tif (!buffer) {\n\t\t\thr = E_OUTOFMEMORY;\n\t\t\tgoto end;\n\t\t}\n\n\t\thr = HRESULT_FROM_WIN32(RegQueryValueEx(subkey, valueName, NULL, NULL, (BYTE *)buffer, &length));\n\t\tif (!SUCCEEDED(hr)) {\n\t\t\tLocalFree(buffer);\n\t\t\tgoto end;\n\t\t}\n\n\t\tDWORD ourSize = length / sizeof(WCHAR);\n\t\tbuffer[ourSize] = L'\\0';\n\t\t*data = buffer;\n\n\t\tif (size) {\n\t\t\t*size = ourSize;\n\t\t}\n\t}\n\nend:\n\tif (subkey) {\n\t\tRegCloseKey(subkey);\n\t}\n\tif (!SUCCEEDED(hr)) {\n\t\t*data = NULL;\n\t\tif (size) {\n\t\t\t*size = 0;\n\t\t}\n\t}\n\treturn hr;\n}\n\nHRESULT GetRegistryDword(HKEY key, LPCWSTR subkeyPath, LPCWSTR valueName, REGSAM options, LPDWORD data) {\n\tHKEY subkey = NULL;\n\tHRESULT hr = HRESULT_FROM_WIN32(RegOpenKeyEx(key, subkeyPath, 0, GetRegistryWow64Flag(KEY_READ | options), &subkey));\n\tif (!SUCCEEDED(hr)) {\n\t\tgoto end;\n\t}\n\n\tif (data) {\n\t\tDWORD length = sizeof(DWORD);\n\t\thr = HRESULT_FROM_WIN32(RegQueryValueEx(subkey, valueName, NULL, NULL, (LPBYTE)data, &length));\n\t}\n\nend:\n\tif (subkey) {\n\t\tRegCloseKey(subkey);\n\t}\n\treturn hr;\n}\n\nHRESULT SetRegistryEntries(RegistryEntry entries[]) {\n\tfor (DWORD i = 0; entries[i].hKey != NULL; i++) {\n\t\tRegistryEntry entry = entries[i];\n\t\tLPWSTR expandedSubKey = NULL, expandedData = NULL;\n\n\t\tif (entry.lpSubKey) {\n\t\t\tDWORD length = ExpandEnvironmentStrings((LPCWSTR)entry.lpSubKey, NULL, 0);\n\t\t\texpandedSubKey = (LPWSTR)LocalAlloc(LPTR, length * sizeof(WCHAR));\n\t\t\tExpandEnvironmentStrings((LPCWSTR)entry.lpSubKey, expandedSubKey, length);\n\t\t\tentry.lpSubKey = expandedSubKey;\n\t\t}\n\n\t\tHRESULT hr;\n\t\tif (entry.uData.lpData == DELETE_KEY) {\n#if WINVER < _WIN32_WINNT_WIN2K\n\t\t\thr = E_NOTIMPL;\n#else\n\t\t\thr = HRESULT_FROM_WIN32(SHDeleteKey(entry.hKey, entry.lpSubKey));\n#endif\n\t\t\tif (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) {\n\t\t\t\thr = S_OK;\n\t\t\t}\n\t\t\tif (!SUCCEEDED(hr)) {\n\t\t\t\tTRACE(L\"Delete %ls failed: %08x\", entry.lpSubKey, hr);\n\t\t\t\tif (expandedSubKey) {\n\t\t\t\t\tLocalFree(expandedSubKey);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tHKEY key;\n\t\t\thr = HRESULT_FROM_WIN32(RegCreateKeyEx(entry.hKey, entry.lpSubKey, 0, NULL, 0, GetRegistryWow64Flag(KEY_WRITE | entry.samDesired), NULL, &key, NULL));\n\t\t\tif (!SUCCEEDED(hr)) {\n\t\t\t\tTRACE(L\"Create %ls failed: %08x\", entry.lpSubKey, hr);\n\t\t\t\tif (expandedSubKey) {\n\t\t\t\t\tLocalFree(expandedSubKey);\n\t\t\t\t}\n\t\t\t\treturn hr;\n\t\t\t}\n\n\t\t\tif (entry.uData.lpData == DELETE_VALUE) {\n\t\t\t\thr = HRESULT_FROM_WIN32(RegDeleteValue(key, entry.lpValueName));\n\t\t\t\tif (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) {\n\t\t\t\t\thr = S_OK;\n\t\t\t\t}\n\t\t\t} else if (entry.uData.lpData != NULL) {\n\t\t\t\tif (entry.dwType == REG_SZ) {\n\t\t\t\t\tif (entry.uData.lpData) {\n\t\t\t\t\t\tDWORD length = ExpandEnvironmentStrings((LPCWSTR)entry.uData.lpData, NULL, 0);\n\t\t\t\t\t\texpandedData = (LPWSTR)LocalAlloc(LPTR, length * sizeof(WCHAR));\n\t\t\t\t\t\tExpandEnvironmentStrings((LPCWSTR)entry.uData.lpData, expandedData, length);\n\t\t\t\t\t\tentry.uData.lpData = expandedData;\n\n\t\t\t\t\t\tentry.dataSize = (DWORD)(lstrlen((LPCWSTR)entry.uData.lpData) + 1) * sizeof(WCHAR);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tentry.dataSize = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\thr = HRESULT_FROM_WIN32(RegSetValueEx(key, entry.lpValueName, 0, entry.dwType, (const BYTE *)entry.uData.lpData, entry.dataSize));\n\t\t\t\t} else if (entry.dwType == REG_DWORD) {\n\t\t\t\t\thr = HRESULT_FROM_WIN32(RegSetValueEx(key, entry.lpValueName, 0, entry.dwType, (const BYTE *)&entry.uData.dwData, sizeof(entry.uData.dwData)));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!SUCCEEDED(hr)) {\n\t\t\t\tTRACE(L\"Set %ls -> %ls failed: %08x\", entry.lpSubKey, entry.lpValueName, hr);\n\t\t\t}\n\n\t\t\tif (expandedSubKey) {\n\t\t\t\tLocalFree(expandedSubKey);\n\t\t\t}\n\t\t\tif (expandedData) {\n\t\t\t\tLocalFree(expandedData);\n\t\t\t}\n\n\t\t\tRegCloseKey(key);\n\t\t}\n\n\t\tif (!SUCCEEDED(hr)) {\n\t\t\treturn hr;\n\t\t}\n\t}\n\n\treturn S_OK;\n}\n"
  },
  {
    "path": "shared/Registry.h",
    "content": "#pragma once\n\n#include <windows.h>\n\n#define REGPATH_SETUP              L\"System\\\\Setup\"\n\n#define REGPATH_CPL_DESKTOP        L\"Control Panel\\\\Desktop\"\n\n#define REGPATH_WIN                L\"Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\"\n#define REGPATH_WIN_PERSONALIZE    REGPATH_WIN L\"\\\\Themes\\\\Personalize\"\n\n#define REGPATH_WINNT              L\"Software\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\"\n#define REGPATH_WINNT_SERVERLEVELS REGPATH_WINNT L\"\\\\Server\\\\ServerLevels\"\n\n#define REGPATH_WU                 L\"Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\WindowsUpdate\"\n#define REGPATH_WU_REBOOTREQUIRED  REGPATH_WU L\"\\\\Auto Update\\\\RebootRequired\"\n\n#define REGPATH_POLICIES_WINDOWS   L\"Software\\\\Policies\\\\Microsoft\\\\Windows\"\n#define REGPATH_POLICIES_EXPLORER  REGPATH_POLICIES_WINDOWS L\"\\\\Explorer\"\n#define REGPATH_POLICIES_WU        REGPATH_POLICIES_WINDOWS L\"\\\\WindowsUpdate\"\n#define REGPATH_POLICIES_WU_AU     REGPATH_POLICIES_WU L\"\\\\AU\"\n\n#define REGPATH_LEGACYUPDATE       L\"Software\\\\Hashbang Productions\\\\Legacy Update\"\n#define REGPATH_LEGACYUPDATE_SETUP REGPATH_LEGACYUPDATE L\"\\\\Setup\"\n#define REGPATH_LEGACYUPDATE_UNINSTALL REGPATH_WIN L\"\\\\Uninstall\\\\Legacy Update\"\n\n// Filter out WOW64 keys that are not supported on Windows 2000\n#ifdef _WIN64\n\t#define GetRegistryWow64Flag(options) (options)\n#else\n\t#define GetRegistryWow64Flag(options) ((options) & ~(AtLeastWinXP2002() ? 0 : KEY_WOW64_64KEY | KEY_WOW64_32KEY))\n#endif\n\nEXTERN_C LPVOID DELETE_KEY;\nEXTERN_C LPVOID DELETE_VALUE;\n\ntypedef struct {\n\tHKEY hKey;\n\tLPCTSTR lpSubKey;\n\tLPCWSTR lpValueName;\n\tDWORD dwType;\n\tunion {\n\t\tLPVOID lpData;\n\t\tDWORD dwData;\n\t} uData;\n\tDWORD dataSize;\n\tREGSAM samDesired;\n} RegistryEntry;\n\nEXTERN_C HRESULT GetRegistryString(HKEY key, LPCWSTR subkeyPath, LPCWSTR valueName, REGSAM options, LPWSTR *data, LPDWORD size);\nEXTERN_C HRESULT GetRegistryDword(HKEY key, LPCWSTR subkeyPath, LPCWSTR valueName, REGSAM options, LPDWORD data);\nEXTERN_C HRESULT SetRegistryEntries(RegistryEntry entries[]);\n"
  },
  {
    "path": "shared/Startup.h",
    "content": "#pragma once\n\n#include <windows.h>\n\ntypedef void (WINAPI *_SetDefaultDllDirectories)(DWORD DirectoryFlags);\ntypedef BOOL (WINAPI *_SetDllDirectoryW)(LPWSTR);\n\nstatic inline void HardenDllSearchPaths(void) {\n\t// Try our best to secure DLL search paths to just system32\n\tWCHAR windir[MAX_PATH];\n\tWCHAR sysdir[MAX_PATH];\n\n\tGetWindowsDirectory(windir, ARRAYSIZE(windir));\n\tGetSystemDirectory(sysdir, ARRAYSIZE(sysdir));\n\n\t// Reset %windir% and %SystemRoot%\n\tSetEnvironmentVariable(L\"WINDIR\", windir);\n\tSetEnvironmentVariable(L\"SystemRoot\", windir);\n\n\t// Reset %PATH% to just system32\n\tWCHAR path[MAX_PATH];\n\twsprintf(path, L\"%ls;%ls\", sysdir, windir);\n\tSetEnvironmentVariable(L\"PATH\", path);\n\n\twcscat(sysdir, L\"\\\\kernel32.dll\");\n\tHMODULE kernel32 = GetModuleHandle(windir);\n\tif (!kernel32) {\n\t\treturn;\n\t}\n\n\t// Windows Vista SP2+/7 SP1+ with KB2533623\n\t_SetDefaultDllDirectories $SetDefaultDllDirectories = (_SetDefaultDllDirectories)GetProcAddress(kernel32, \"SetDefaultDllDirectories\");\n\tif ($SetDefaultDllDirectories) {\n\t\t$SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32);\n\t\treturn;\n\t}\n\n\t// Windows XP SP1+\n\t_SetDllDirectoryW $SetDllDirectoryW = (_SetDllDirectoryW)GetProcAddress(kernel32, \"SetDllDirectoryW\");\n\tif ($SetDllDirectoryW) {\n\t\t$SetDllDirectoryW(L\"\");\n\t\treturn;\n\t}\n}\n\nstatic inline void Startup(void) {\n\tHardenDllSearchPaths();\n}\n"
  },
  {
    "path": "shared/Trace.h",
    "content": "#pragma once\n\n#include \"Log.h\"\n\n#ifdef _DEBUG\n\t// Yeah, sue me lol\n\t#define TRACE(...) { \\\n\t\tLPWSTR __traceMsg = (LPWSTR)LocalAlloc(LPTR, 4096 * sizeof(WCHAR)); \\\n\t\twsprintf(__traceMsg, L\"%hs(%d): %hs: \", __FILE__, __LINE__, __func__); \\\n\t\twsprintf(__traceMsg + wcslen(__traceMsg), __VA_ARGS__); \\\n\t\tMessageBox(NULL, __traceMsg, L\"Debug\", MB_OK); \\\n\t\tLocalFree(__traceMsg); \\\n\t\tLOG(__VA_ARGS__); \\\n\t}\n#else\n\t#define TRACE(...) LOG(__VA_ARGS__)\n#endif\n\n#define CHECK_HR_OR_RETURN(thing) \\\n\tif (!SUCCEEDED(hr)) { \\\n\t\tTRACE(thing L\" failed: %08x\", hr); \\\n\t\treturn hr; \\\n\t}\n\n#define CHECK_HR_OR_GOTO_END(thing) \\\n\tif (!SUCCEEDED(hr)) { \\\n\t\tTRACE(thing L\" failed: %08x\", hr); \\\n\t\tgoto end; \\\n\t}\n"
  },
  {
    "path": "shared/User.h",
    "content": "#pragma once\n\n#include <windows.h>\n\nstatic inline BOOL IsUserAdmin(void) {\n\tSID_IDENTIFIER_AUTHORITY authority = SECURITY_NT_AUTHORITY;\n\tPSID adminsSid = NULL;\n\tBOOL result = FALSE;\n\n\tif (!AllocateAndInitializeSid(&authority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &adminsSid)) {\n\t\treturn FALSE;\n\t}\n\n\tif (!CheckTokenMembership(NULL, adminsSid, &result)) {\n\t\tresult = FALSE;\n\t}\n\n\tFreeSid(adminsSid);\n\treturn result;\n}\n\nstatic inline BOOL IsElevated(void) {\n\tHANDLE hToken = NULL;\n\n\tif (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) {\n\t\treturn FALSE;\n\t}\n\n\tTOKEN_ELEVATION elevation;\n\tDWORD size = sizeof(elevation);\n\tif (!GetTokenInformation(hToken, TokenElevation, &elevation, sizeof(elevation), &size)) {\n\t\treturn FALSE;\n\t}\n\n\tBOOL result = elevation.TokenIsElevated;\n\tCloseHandle(hToken);\n\treturn result;\n}\n\nstatic inline DWORD GetTokenIntegrity(void) {\n#if WINVER < _WIN32_WINNT_WIN2K\n\treturn MAXDWORD;\n#else\n\tHANDLE hToken = NULL;\n\n\tif (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) {\n\t\treturn MAXDWORD;\n\t}\n\n\tBYTE buffer[sizeof(TOKEN_MANDATORY_LABEL) + SECURITY_MAX_SID_SIZE];\n\tDWORD size = sizeof(buffer);\n\tif (!GetTokenInformation(hToken, TokenIntegrityLevel, buffer, size, &size)) {\n\t\tCloseHandle(hToken);\n\t\treturn MAXDWORD;\n\t}\n\n\tCloseHandle(hToken);\n\n\tTOKEN_MANDATORY_LABEL *tokenLabel = (TOKEN_MANDATORY_LABEL *)buffer;\n\treturn *GetSidSubAuthority(tokenLabel->Label.Sid, *GetSidSubAuthorityCount(tokenLabel->Label.Sid) - 1);\n#endif\n}\n"
  },
  {
    "path": "shared/Version.h",
    "content": "#pragma once\n\n#define VERSION        1,13,0,0\n#define VERSION_STRING \"1.13\"\n"
  },
  {
    "path": "shared/VersionInfo.h",
    "content": "#pragma once\n\n#include <windows.h>\n#include \"stdafx.h\"\n\n// Windows 11 Copper (22H2). \"WIN10\" typo is from the original sdkddkvers.h\n#ifndef NTDDI_WIN10_CU\n#define NTDDI_WIN10_CU 0x0A00000D\n#endif\n\n#define BUILD_WIN10_1507 10240\n#define BUILD_WIN10_1511 10586\n#define BUILD_WIN10_1607 14393\n#define BUILD_WIN10_1703 15063\n#define BUILD_WIN10_1709 16299\n#define BUILD_WIN10_1803 17134\n#define BUILD_WIN10_1809 17763\n#define BUILD_WIN10_1903 18362\n#define BUILD_WIN10_1909 18363\n#define BUILD_WIN10_2004 19041\n#define BUILD_WIN10_20H2 19042\n#define BUILD_WIN10_21H1 19043\n#define BUILD_WIN10_21H2 19044\n#define BUILD_WIN10_22H2 19045\n#define BUILD_WIN11_21H1 22000\n#define BUILD_WIN11_22H2 22621\n#define BUILD_WIN11_23H2 22631\n#define BUILD_WIN11_24H2 26100\n\n// Undocumented IsOS() flags\n#define OS_STARTER        38 // Starter Edition\n#define OS_STORAGESERVER  40 // Windows Storage Server 2003\n#define OS_COMPUTECLUSTER 41 // Windows Compute Cluster 2003\n#define OS_SERVERR2       42 // Windows Server 2003 R2 (in combination with edition)\n#define OS_EMBPOS         43 // Windows Embedded for Point of Service\n#define OS_HOMESERVER     43 // Windows Home Server (2007)\n#define OS_WINFLP         44 // Windows Fundamentals for Legacy PCs\n#define OS_EMBSTD2009     45 // Windows Embedded Standard 2009\n#define OS_EMBPOS2009     46 // Windows Embedded POSReady 2009\n\nEXTERN_C IMAGE_DOS_HEADER __ImageBase;\n\n#define OWN_MODULE ((HMODULE)&__ImageBase)\n\nstatic OSVERSIONINFOEX _versionInfo;\n\nstatic ALWAYS_INLINE OSVERSIONINFOEX *GetVersionInfo(void) {\n\tif (_versionInfo.dwOSVersionInfoSize == 0) {\n\t\tZeroMemory(&_versionInfo, sizeof(OSVERSIONINFOEX));\n\t\t_versionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);\n\t\tGetVersionEx((LPOSVERSIONINFO)&_versionInfo);\n\t}\n\treturn &_versionInfo;\n}\n\nstatic ALWAYS_INLINE WORD GetWinVer(void) {\n\treturn __builtin_bswap16(LOWORD(GetVersion()));\n}\n\nstatic ALWAYS_INLINE WORD GetWinBuild(void) {\n\treturn HIWORD(GetVersion());\n}\n\n#define _IS_OS_MACRO(name, ver) \\\n\tstatic ALWAYS_INLINE BOOL IsWin ## name(void) { \\\n\t\treturn GetWinVer() == ver; \\\n\t} \\\n\tstatic ALWAYS_INLINE BOOL AtLeastWin ## name(void) { \\\n\t\treturn GetWinVer() >= ver; \\\n\t} \\\n\tstatic ALWAYS_INLINE BOOL AtMostWin ## name(void) { \\\n\t\treturn GetWinVer() <= ver; \\\n\t}\n\n_IS_OS_MACRO(NT4,    0x0400)\n_IS_OS_MACRO(2000,   0x0500)\n_IS_OS_MACRO(XP2002, 0x0501)\n_IS_OS_MACRO(XP2003, 0x0502)\n_IS_OS_MACRO(Vista,  0x0600)\n_IS_OS_MACRO(7,      0x0601)\n_IS_OS_MACRO(8,      0x0602)\n_IS_OS_MACRO(8_1,    0x0603)\n_IS_OS_MACRO(10,     0x0A00)\n#undef _IS_OS_MACRO\n\n#define _IS_BUILD_MACRO(ver) \\\n\tstatic ALWAYS_INLINE BOOL IsWin ## ver(void) { \\\n\t\treturn GetWinBuild() == BUILD_WIN ## ver; \\\n\t} \\\n\tstatic ALWAYS_INLINE BOOL AtLeastWin ## ver(void) { \\\n\t\treturn GetWinBuild() >= BUILD_WIN ## ver; \\\n\t} \\\n\tstatic ALWAYS_INLINE BOOL AtMostWin ## ver(void) { \\\n\t\treturn GetWinBuild() <= BUILD_WIN ## ver; \\\n\t}\n\n_IS_BUILD_MACRO(10_1507)\n_IS_BUILD_MACRO(10_1511)\n_IS_BUILD_MACRO(10_1607)\n_IS_BUILD_MACRO(10_1703)\n_IS_BUILD_MACRO(10_1709)\n_IS_BUILD_MACRO(10_1803)\n_IS_BUILD_MACRO(10_1809)\n_IS_BUILD_MACRO(10_1903)\n_IS_BUILD_MACRO(10_1909)\n_IS_BUILD_MACRO(10_2004)\n_IS_BUILD_MACRO(10_20H2)\n_IS_BUILD_MACRO(10_21H1)\n_IS_BUILD_MACRO(10_21H2)\n_IS_BUILD_MACRO(10_22H2)\n_IS_BUILD_MACRO(11_21H1)\n_IS_BUILD_MACRO(11_22H2)\n_IS_BUILD_MACRO(11_23H2)\n_IS_BUILD_MACRO(11_24H2)\n#undef _IS_BUILD_MACRO\n\nstatic ALWAYS_INLINE HRESULT GetOwnFileName(LPWSTR *filename) {\n\t*filename = (LPWSTR)LocalAlloc(LPTR, MAX_PATH * sizeof(WCHAR));\n\tif (GetModuleFileName(OWN_MODULE, *filename, MAX_PATH) == 0) {\n\t\tHRESULT hr = HRESULT_FROM_WIN32(GetLastError());\n\t\tLocalFree(*filename);\n\t\t*filename = NULL;\n\t\treturn hr;\n\t}\n\n\treturn S_OK;\n}\n"
  },
  {
    "path": "shared/ViewLog.c",
    "content": "#include \"ViewLog.h\"\n\nHRESULT ViewLog(LogAction log, int nCmdShow, BOOL showErrors) {\n\tif (log < 0 || log > LogActionWindowsUpdate) {\n\t\treturn E_INVALIDARG;\n\t}\n\n\tWCHAR workDir[MAX_PATH];\n\n\tswitch (log) {\n\tcase LogActionSystem: {\n\t\tLPCWSTR logsPath = AtLeastWinVista() ? L\"%SystemRoot%\\\\Logs\" : L\"%SystemRoot%\\\\Temp\";\n\t\tExpandEnvironmentStrings(logsPath, workDir, ARRAYSIZE(workDir));\n\t\tbreak;\n\t}\n\n\tcase LogActionLocal: {\n\t\tGetTempPath(ARRAYSIZE(workDir), workDir);\n\t\tbreak;\n\t}\n\n\tcase LogActionLocalLow: {\n\t\tif (!AtLeastWinVista()) {\n\t\t\treturn HRESULT_FROM_WIN32(ERROR_OLD_WIN_VERSION);\n\t\t}\n\n\t\tif (AtLeastWin7()) {\n\t\t\t// AppData\\Low\\Temp\n\t\t\ttypedef HRESULT (*_SHGetKnownFolderPath)(const KNOWNFOLDERID *rfid, DWORD dwFlags, HANDLE hToken, PWSTR *ppszPath);\n\t\t\t_SHGetKnownFolderPath $SHGetKnownFolderPath = (_SHGetKnownFolderPath)GetProcAddress(GetModuleHandle(L\"shell32.dll\"), \"SHGetKnownFolderPath\");\n\t\t\tif ($SHGetKnownFolderPath == NULL) {\n\t\t\t\treturn HRESULT_FROM_WIN32(ERROR_OLD_WIN_VERSION);\n\t\t\t}\n\n\t\t\tLPWSTR localLow;\n\t\t\tHRESULT hr = $SHGetKnownFolderPath(&FOLDERID_LocalAppDataLow, CSIDL_FLAG_CREATE, NULL, &localLow);\n\t\t\tCHECK_HR_OR_RETURN(L\"SHGetKnownFolderPath\");\n\n\t\t\twsprintf(workDir, L\"%ls\\\\Temp\", localLow);\n\t\t\tLocalFree(localLow);\n\t\t} else {\n\t\t\t// AppData\\Local\\Temp\\Low\n\t\t\tWCHAR localTemp[MAX_PATH];\n\t\t\tGetTempPath(ARRAYSIZE(localTemp), localTemp);\n\t\t\twsprintf(workDir, L\"%ls\\\\Low\", localTemp);\n\t\t}\n\t\tbreak;\n\t}\n\n\tcase LogActionWindowsUpdate: {\n\t\tHRESULT hr = SHGetFolderPath(0, CSIDL_WINDOWS, NULL, 0, workDir);\n\t\tCHECK_HR_OR_RETURN(L\"SHGetFolderPath\");\n\n\t\tif (AtLeastWin10()) {\n\t\t\t// Windows 10 moves WU/USO logs to ETW. The ETW logs can be converted back to a plain-text .log using a cmdlet.\n\t\t\tWCHAR powershell[MAX_PATH];\n\t\t\tExpandEnvironmentStrings(L\"%SystemRoot%\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell.exe\", powershell, ARRAYSIZE(powershell));\n\n\t\t\tDWORD code = 0;\n\t\t\thr = Exec(NULL, powershell, L\"-NoProfile -Command Get-WindowsUpdateLog\", workDir, nCmdShow, TRUE, &code);\n\t\t\tCHECK_HR_OR_RETURN(L\"Exec\");\n\n\t\t\tif (code != 0) {\n\t\t\t\treturn E_FAIL;\n\t\t\t}\n\n\t\t\t// On success, the log is written to Desktop\\WindowsUpdate.log.\n\t\t\thr = SHGetFolderPath(0, CSIDL_DESKTOP, NULL, 0, workDir);\n\t\t\tCHECK_HR_OR_RETURN(L\"SHGetFolderPath\");\n\t\t}\n\t\tbreak;\n\t}\n\t}\n\n\tLPCWSTR logFileName = log == LogActionWindowsUpdate ? L\"WindowsUpdate.log\" : L\"LegacyUpdate.log\";\n\tWCHAR finalPath[MAX_PATH];\n\twsprintf(finalPath, L\"%ls\\\\%ls\", workDir, logFileName);\n\n\tSHELLEXECUTEINFO execInfo = {0};\n\texecInfo.cbSize = sizeof(execInfo);\n\texecInfo.lpVerb = L\"open\";\n\texecInfo.lpFile = finalPath;\n\texecInfo.nShow = nCmdShow;\n\texecInfo.fMask = showErrors ? 0 : SEE_MASK_FLAG_NO_UI;\n\tHRESULT hr = ExecEx(&execInfo, FALSE, NULL);\n\treturn hr;\n}\n"
  },
  {
    "path": "shared/ViewLog.h",
    "content": "#pragma once\n\n#include \"stdafx.h\"\n#include <windows.h>\n#include <knownfolders.h>\n#include <shlobj.h>\n#include \"Exec.h\"\n#include \"HResult.h\"\n#include \"VersionInfo.h\"\n\ntypedef enum LogAction {\n\tLogActionSystem,\n\tLogActionLocal,\n\tLogActionLocalLow,\n\tLogActionWindowsUpdate\n} LogAction;\n\nHRESULT ViewLog(LogAction log, int nCmdShow, BOOL showErrors);\n"
  },
  {
    "path": "shared/WMI.c",
    "content": "#include \"stdafx.h\"\n#include \"WMI.h\"\n#include <wbemcli.h>\n\n#ifdef CINTERFACE\n\t#define our_CLSID_WbemLocator &CLSID_WbemLocator\n\t#define our_IID_IWbemLocator  &IID_IWbemLocator\n#else\n\t#define our_CLSID_WbemLocator CLSID_WbemLocator\n\t#define our_IID_IWbemLocator  IID_IWbemLocator\n\t#define IWbemLocator_ConnectServer(obj, ...) obj->ConnectServer(__VA_ARGS__)\n\t#define IWbemServices_ExecQuery(obj, ...)    obj->ExecQuery(__VA_ARGS__)\n\t#define IEnumWbemClassObject_Next(obj, ...)  obj->Next(__VA_ARGS__)\n\t#define IWbemClassObject_Get(obj, ...)       obj->Get(__VA_ARGS__)\n\t#define IWbemClassObject_Release(obj)        obj->Release()\n\t#define IEnumWbemClassObject_Release(obj)    obj->Release()\n\t#define IWbemServices_Release(obj)           obj->Release()\n\t#define IWbemLocator_Release(obj)            obj->Release()\n#endif\n\nHRESULT QueryWMIProperty(LPCWSTR query, LPCWSTR property, LPVARIANT value) {\n\tIWbemLocator *locator = NULL;\n\tIWbemServices *services = NULL;\n\tIEnumWbemClassObject *enumerator = NULL;\n\tIWbemClassObject *object = NULL;\n\tBSTR server, wql, queryBstr, propBstr;\n\tULONG uReturn = 0;\n\n\tHRESULT hr = CoCreateInstance(our_CLSID_WbemLocator, NULL, CLSCTX_INPROC_SERVER, our_IID_IWbemLocator, (void **)&locator);\n\tCHECK_HR_OR_GOTO_END(L\"CoCreateInstance\");\n\n\tserver = SysAllocString(L\"ROOT\\\\CIMV2\");\n\thr = IWbemLocator_ConnectServer(locator, server, NULL, NULL, NULL, 0, NULL, NULL, &services);\n\tSysFreeString(server);\n\tCHECK_HR_OR_GOTO_END(L\"ConnectServer\");\n\n\thr = 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);\n\tCHECK_HR_OR_GOTO_END(L\"CoSetProxyBlanket\");\n\n\twql = SysAllocString(L\"WQL\");\n\tqueryBstr = SysAllocString(query);\n\thr = IWbemServices_ExecQuery(services, wql, queryBstr, WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &enumerator);\n\tSysFreeString(wql);\n\tSysFreeString(queryBstr);\n\tCHECK_HR_OR_GOTO_END(L\"ExecQuery\");\n\n\tuReturn = 0;\n\thr = IEnumWbemClassObject_Next(enumerator, (LONG)WBEM_INFINITE, 1, &object, &uReturn);\n\tCHECK_HR_OR_GOTO_END(L\"Next\");\n\n\tpropBstr = SysAllocString(property);\n\thr = IWbemClassObject_Get(object, propBstr, 0, value, NULL, NULL);\n\tSysFreeString(propBstr);\n\tCHECK_HR_OR_GOTO_END(L\"Get\");\n\nend:\n\tif (object) {\n\t\tIWbemClassObject_Release(object);\n\t}\n\tif (enumerator) {\n\t\tIEnumWbemClassObject_Release(enumerator);\n\t}\n\tif (services) {\n\t\tIWbemServices_Release(services);\n\t}\n\tif (locator) {\n\t\tIWbemLocator_Release(locator);\n\t}\n\n\treturn hr;\n}\n"
  },
  {
    "path": "shared/WMI.h",
    "content": "#pragma once\n\n#include <windows.h>\n#include <oaidl.h>\n\nEXTERN_C HRESULT QueryWMIProperty(LPCWSTR query, LPCWSTR property, LPVARIANT value);\n"
  },
  {
    "path": "shared/Wow64.c",
    "content": "#include \"stdafx.h\"\n#include \"Wow64.h\"\n\n#if !_WIN64\n\ntypedef void (WINAPI *_GetNativeSystemInfo)(LPSYSTEM_INFO lpSystemInfo);\ntypedef BOOL (WINAPI *_Wow64DisableWow64FsRedirection)(PVOID *OldValue);\ntypedef BOOL (WINAPI *_Wow64RevertWow64FsRedirection)(PVOID OldValue);\n\nstatic BOOL _loadedWow64;\nstatic _GetNativeSystemInfo $GetNativeSystemInfo = NULL;\nstatic _Wow64DisableWow64FsRedirection $Wow64DisableWow64FsRedirection;\nstatic _Wow64RevertWow64FsRedirection $Wow64RevertWow64FsRedirection;\n\nstatic void LoadWow64Symbols(void) {\n\tif (!_loadedWow64) {\n\t\t_loadedWow64 = TRUE;\n\n\t\tHMODULE kernel32 = GetModuleHandle(L\"kernel32.dll\");\n\t\t$GetNativeSystemInfo = (_GetNativeSystemInfo)GetProcAddress(kernel32, \"GetNativeSystemInfo\");\n\t\t$Wow64DisableWow64FsRedirection = (_Wow64DisableWow64FsRedirection)GetProcAddress(kernel32, \"Wow64DisableWow64FsRedirection\");\n\t\t$Wow64RevertWow64FsRedirection = (_Wow64RevertWow64FsRedirection)GetProcAddress(kernel32, \"Wow64RevertWow64FsRedirection\");\n\t}\n}\n\nvoid OurGetNativeSystemInfo(LPSYSTEM_INFO lpSystemInfo) {\n\tLoadWow64Symbols();\n\n\tif ($GetNativeSystemInfo) {\n\t\t$GetNativeSystemInfo(lpSystemInfo);\n\t\treturn;\n\t}\n\n\tGetSystemInfo(lpSystemInfo);\n}\n\nBOOL DisableWow64FsRedirection(PVOID *OldValue) {\n\tLoadWow64Symbols();\n\n\tif ($Wow64DisableWow64FsRedirection) {\n\t\treturn $Wow64DisableWow64FsRedirection(OldValue);\n\t}\n\n\treturn TRUE;\n}\n\nBOOL RevertWow64FsRedirection(PVOID OldValue) {\n\tLoadWow64Symbols();\n\n\tif ($Wow64RevertWow64FsRedirection) {\n\t\treturn $Wow64RevertWow64FsRedirection(OldValue);\n\t}\n\n\treturn TRUE;\n}\n\n#endif\n"
  },
  {
    "path": "shared/Wow64.h",
    "content": "#pragma once\n\n#include <windows.h>\n\n#if _WIN64\n\t#define OurGetNativeSystemInfo(lpSystemInfo) GetNativeSystemInfo(lpSystemInfo)\n\t#define DisableWow64FsRedirection(OldValue)  TRUE\n\t#define RevertWow64FsRedirection(OldValue)   TRUE\n#else\n\tEXTERN_C void OurGetNativeSystemInfo(LPSYSTEM_INFO lpSystemInfo);\n\tEXTERN_C BOOL DisableWow64FsRedirection(PVOID *OldValue);\n\tEXTERN_C BOOL RevertWow64FsRedirection(PVOID OldValue);\n#endif\n"
  },
  {
    "path": "shared/stdafx.h",
    "content": "#define ALWAYS_INLINE inline __attribute__((__always_inline__))\n"
  }
]