diff --git a/.acrolinx-config.edn b/.acrolinx-config.edn
deleted file mode 100644
index 78cdd0e4df0..00000000000
--- a/.acrolinx-config.edn
+++ /dev/null
@@ -1,27 +0,0 @@
-{:allowed-branchname-matches ["main" "release-.*"]
- :allowed-filename-matches ["docs" "styleguide"]
-
- :template-header
- "
-## Acrolinx Scorecards
-
- Click the scorecard links for each article to review the Acrolinx feedback on grammar, spelling, punctuation, writing style, and terminology:
-
-| Article | Score | Issues | Scorecard |
-| ------- | ----- | ------ | --------- |
-"
-
- ;; do not remove the spaces at the end of lines! That is markdown for
- ;; linebreak
- :template-change
- "| **${github/filename}** | ${acrolinx/qualityscore} | ${acrolinx/flags/issues} | [link](${acrolinx/scorecard}) |
-"
-
- :template-footer
-"
-**More info about Acrolinx**
-
-- [Install Acrolinx locally for VS Code](https://review.docs.microsoft.com/en-us/help/contribute/contribute-acrolinx-vscode)
-- [Report false positives or issues](https://aka.ms/acrolinxbug)
-
-"}
diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
index 417f80a8da9..6498b2c6631 100644
--- a/.github/copilot-instructions.md
+++ b/.github/copilot-instructions.md
@@ -15,6 +15,9 @@ This document uses the following markers to indicate instruction priority:
## General Guidelines
+### Using MCP tools
+If the user intent relates to Azure Devops, make sure to prioritize the Azure DevOps MCP server tools.
+
### 1. Issue Handling
When creating a PR for an issue:
- [ ] Read the full issue and all linked references
@@ -88,7 +91,7 @@ When working on an issue:
author: github-username
ms.author: ms-alias
ms.date: 12/11/2025
- ms.topic: conceptual
+ ms.topic: concept-article
ai-usage: ai-assisted
---
```
diff --git a/.github/workflows/generate-preview-links.yml b/.github/workflows/generate-preview-links.yml
new file mode 100644
index 00000000000..784d2be5b6e
--- /dev/null
+++ b/.github/workflows/generate-preview-links.yml
@@ -0,0 +1,25 @@
+name: 'Preview link generator'
+
+on:
+ pull_request_target:
+ types: [opened, synchronize, reopened]
+
+permissions:
+ contents: read
+
+jobs:
+ preview_link_generator_job:
+ name: Generate preview link table
+ runs-on: ubuntu-latest
+ permissions:
+ statuses: read
+ pull-requests: write
+ steps:
+ - name: Harden Runner
+ uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
+ with:
+ egress-policy: audit
+
+ - uses: dotnet/docs-tools/actions/preview-link-generator@main
+ with:
+ repo_token: ${{ secrets.GITHUB_TOKEN }}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 10b0192bf56..de09a544e84 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,6 +10,7 @@ _themes.VS.Modern/
#.github/
.openpublishing.buildcore.ps1
.vscode/
+.squad/
# Documentation build
/docs/vcppdocs
diff --git a/.openpublishing.redirection.json b/.openpublishing.redirection.json
index dc663314250..e437970bff5 100644
--- a/.openpublishing.redirection.json
+++ b/.openpublishing.redirection.json
@@ -1,5 +1,2810 @@
{
"redirections": [
+ {
+ "source_path": "docs/porting/copilot-app-modernization-cpp.md",
+ "redirect_url": "/cpp/porting/github-copilot-modernization-cpp/overview",
+ "redirect_document_id": true
+ },
+ {
+ "source_path": "docs/parallel/amp/cpp-amp-cpp-accelerated-massive-parallelism.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/cpp-amp-cpp-accelerated-massive-parallelism",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/cpp-amp-overview.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/cpp-amp-overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/graphics-cpp-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/graphics-cpp-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/using-accelerator-and-accelerator-view-objects.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/using-accelerator-and-accelerator-view-objects",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/using-cpp-amp-in-windows-store-apps.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/using-cpp-amp-in-windows-store-apps",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/using-lambdas-function-objects-and-restricted-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/using-lambdas-function-objects-and-restricted-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/using-tiles.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/using-tiles",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/walkthrough-debugging-a-cpp-amp-application.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/walkthrough-debugging-a-cpp-amp-application",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/walkthrough-matrix-multiplication.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/walkthrough-matrix-multiplication",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/accelerator-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/accelerator-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/accelerator-view-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/accelerator-view-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/accelerator-view-removed-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/accelerator-view-removed-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/adopt-d3d-access-lock-t-structure.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/adopt-d3d-access-lock-t-structure",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/array-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/array-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/array-view-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/array-view-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/completion-future-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/completion-future-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-direct3d-namespace-functions-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-direct3d-namespace-functions-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-direct3d-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-direct3d-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-fast-math-namespace-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-fast-math-namespace-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-fast-math-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-fast-math-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-direct3d-namespace-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-direct3d-namespace-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-direct3d-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-direct3d-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-namespace-enums.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-namespace-enums",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-namespace-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-namespace-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-constants-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-constants-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-cpp-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-cpp-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-enums-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-enums-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-functions-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-functions-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-operators-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-operators-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-precise-math-namespace-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-precise-math-namespace-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-precise-math-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-precise-math-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/double-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/double-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/double-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/double-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/double-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/double-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/extent-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/extent-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/float-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/float-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/float-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/float-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/float-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/float-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/index-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/index-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/int-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/int-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/int-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/int-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/int-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/int-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/invalid-compute-domain-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/invalid-compute-domain-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/norm-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/norm-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/norm-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/norm-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/norm-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/norm-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/norm-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/norm-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/out-of-memory-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/out-of-memory-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/reference-cpp-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/reference-cpp-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/runtime-exception-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/runtime-exception-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/sampler-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/sampler-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/scoped-d3d-access-lock-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/scoped-d3d-access-lock-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/short-vector-structure.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/short-vector-structure",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/short-vector-traits-structure.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/short-vector-traits-structure",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/texture-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/texture-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/texture-view-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/texture-view-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/tile-barrier-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/tile-barrier-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/tiled-extent-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/tiled-extent-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/tiled-index-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/tiled-index-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/uint-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/uint-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/uint-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/uint-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/uint-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/uint-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/uninitialized-object-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/uninitialized-object-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unorm-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unorm-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unorm-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unorm-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unorm-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unorm-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unorm-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unorm-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unsupported-feature-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unsupported-feature-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/writeonly-texture-view-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/writeonly-texture-view-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-160"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/cpp-amp-cpp-accelerated-massive-parallelism.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/cpp-amp-cpp-accelerated-massive-parallelism",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/cpp-amp-overview.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/cpp-amp-overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/graphics-cpp-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/graphics-cpp-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/using-accelerator-and-accelerator-view-objects.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/using-accelerator-and-accelerator-view-objects",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/using-cpp-amp-in-windows-store-apps.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/using-cpp-amp-in-windows-store-apps",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/using-lambdas-function-objects-and-restricted-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/using-lambdas-function-objects-and-restricted-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/using-tiles.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/using-tiles",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/walkthrough-debugging-a-cpp-amp-application.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/walkthrough-debugging-a-cpp-amp-application",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/walkthrough-matrix-multiplication.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/walkthrough-matrix-multiplication",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/accelerator-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/accelerator-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/accelerator-view-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/accelerator-view-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/accelerator-view-removed-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/accelerator-view-removed-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/adopt-d3d-access-lock-t-structure.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/adopt-d3d-access-lock-t-structure",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/array-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/array-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/array-view-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/array-view-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/completion-future-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/completion-future-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-direct3d-namespace-functions-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-direct3d-namespace-functions-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-direct3d-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-direct3d-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-fast-math-namespace-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-fast-math-namespace-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-fast-math-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-fast-math-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-direct3d-namespace-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-direct3d-namespace-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-direct3d-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-direct3d-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-namespace-enums.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-namespace-enums",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-namespace-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-namespace-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-constants-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-constants-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-cpp-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-cpp-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-enums-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-enums-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-functions-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-functions-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-operators-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-operators-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-precise-math-namespace-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-precise-math-namespace-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-precise-math-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-precise-math-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/double-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/double-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/double-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/double-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/double-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/double-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/extent-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/extent-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/float-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/float-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/float-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/float-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/float-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/float-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/index-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/index-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/int-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/int-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/int-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/int-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/int-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/int-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/invalid-compute-domain-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/invalid-compute-domain-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/norm-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/norm-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/norm-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/norm-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/norm-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/norm-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/norm-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/norm-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/out-of-memory-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/out-of-memory-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/reference-cpp-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/reference-cpp-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/runtime-exception-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/runtime-exception-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/sampler-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/sampler-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/scoped-d3d-access-lock-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/scoped-d3d-access-lock-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/short-vector-structure.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/short-vector-structure",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/short-vector-traits-structure.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/short-vector-traits-structure",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/texture-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/texture-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/texture-view-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/texture-view-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/tile-barrier-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/tile-barrier-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/tiled-extent-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/tiled-extent-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/tiled-index-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/tiled-index-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/uint-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/uint-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/uint-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/uint-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/uint-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/uint-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/uninitialized-object-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/uninitialized-object-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unorm-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unorm-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unorm-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unorm-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unorm-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unorm-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unorm-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unorm-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unsupported-feature-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unsupported-feature-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/writeonly-texture-view-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/writeonly-texture-view-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-150"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/cpp-amp-cpp-accelerated-massive-parallelism.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/cpp-amp-cpp-accelerated-massive-parallelism",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/cpp-amp-overview.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/cpp-amp-overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/graphics-cpp-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/graphics-cpp-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/using-accelerator-and-accelerator-view-objects.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/using-accelerator-and-accelerator-view-objects",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/using-cpp-amp-in-windows-store-apps.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/using-cpp-amp-in-windows-store-apps",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/using-lambdas-function-objects-and-restricted-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/using-lambdas-function-objects-and-restricted-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/using-tiles.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/using-tiles",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/walkthrough-debugging-a-cpp-amp-application.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/walkthrough-debugging-a-cpp-amp-application",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/walkthrough-matrix-multiplication.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/walkthrough-matrix-multiplication",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/accelerator-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/accelerator-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/accelerator-view-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/accelerator-view-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/accelerator-view-removed-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/accelerator-view-removed-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/adopt-d3d-access-lock-t-structure.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/adopt-d3d-access-lock-t-structure",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/array-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/array-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/array-view-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/array-view-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/completion-future-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/completion-future-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-direct3d-namespace-functions-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-direct3d-namespace-functions-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-direct3d-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-direct3d-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-fast-math-namespace-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-fast-math-namespace-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-fast-math-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-fast-math-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-direct3d-namespace-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-direct3d-namespace-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-direct3d-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-direct3d-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-namespace-enums.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-namespace-enums",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-namespace-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-namespace-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-constants-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-constants-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-cpp-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-cpp-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-enums-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-enums-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-functions-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-functions-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-operators-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-operators-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-precise-math-namespace-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-precise-math-namespace-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-precise-math-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-precise-math-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/double-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/double-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/double-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/double-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/double-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/double-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/extent-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/extent-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/float-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/float-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/float-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/float-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/float-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/float-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/index-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/index-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/int-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/int-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/int-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/int-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/int-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/int-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/invalid-compute-domain-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/invalid-compute-domain-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/norm-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/norm-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/norm-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/norm-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/norm-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/norm-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/norm-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/norm-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/out-of-memory-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/out-of-memory-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/reference-cpp-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/reference-cpp-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/runtime-exception-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/runtime-exception-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/sampler-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/sampler-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/scoped-d3d-access-lock-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/scoped-d3d-access-lock-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/short-vector-structure.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/short-vector-structure",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/short-vector-traits-structure.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/short-vector-traits-structure",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/texture-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/texture-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/texture-view-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/texture-view-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/tile-barrier-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/tile-barrier-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/tiled-extent-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/tiled-extent-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/tiled-index-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/tiled-index-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/uint-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/uint-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/uint-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/uint-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/uint-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/uint-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/uninitialized-object-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/uninitialized-object-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unorm-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unorm-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unorm-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unorm-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unorm-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unorm-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unorm-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unorm-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unsupported-feature-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unsupported-feature-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/writeonly-texture-view-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/writeonly-texture-view-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-140"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/cpp-amp-cpp-accelerated-massive-parallelism.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/cpp-amp-cpp-accelerated-massive-parallelism",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/cpp-amp-overview.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/cpp-amp-overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/graphics-cpp-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/graphics-cpp-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/using-accelerator-and-accelerator-view-objects.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/using-accelerator-and-accelerator-view-objects",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/using-cpp-amp-in-windows-store-apps.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/using-cpp-amp-in-windows-store-apps",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/using-lambdas-function-objects-and-restricted-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/using-lambdas-function-objects-and-restricted-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/using-tiles.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/using-tiles",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/walkthrough-debugging-a-cpp-amp-application.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/walkthrough-debugging-a-cpp-amp-application",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/walkthrough-matrix-multiplication.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/walkthrough-matrix-multiplication",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/accelerator-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/accelerator-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/accelerator-view-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/accelerator-view-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/accelerator-view-removed-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/accelerator-view-removed-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/adopt-d3d-access-lock-t-structure.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/adopt-d3d-access-lock-t-structure",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/array-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/array-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/array-view-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/array-view-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/completion-future-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/completion-future-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-direct3d-namespace-functions-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-direct3d-namespace-functions-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-direct3d-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-direct3d-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-fast-math-namespace-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-fast-math-namespace-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-fast-math-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-fast-math-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-direct3d-namespace-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-direct3d-namespace-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-direct3d-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-direct3d-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-namespace-enums.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-namespace-enums",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-namespace-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-namespace-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-constants-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-constants-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-cpp-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-cpp-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-enums-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-enums-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-functions-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-functions-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-operators-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-operators-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-precise-math-namespace-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-precise-math-namespace-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-precise-math-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-precise-math-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/double-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/double-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/double-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/double-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/double-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/double-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/extent-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/extent-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/float-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/float-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/float-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/float-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/float-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/float-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/index-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/index-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/int-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/int-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/int-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/int-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/int-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/int-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/invalid-compute-domain-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/invalid-compute-domain-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/norm-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/norm-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/norm-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/norm-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/norm-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/norm-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/norm-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/norm-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/out-of-memory-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/out-of-memory-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/reference-cpp-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/reference-cpp-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/runtime-exception-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/runtime-exception-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/sampler-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/sampler-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/scoped-d3d-access-lock-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/scoped-d3d-access-lock-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/short-vector-structure.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/short-vector-structure",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/short-vector-traits-structure.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/short-vector-traits-structure",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/texture-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/texture-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/texture-view-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/texture-view-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/tile-barrier-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/tile-barrier-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/tiled-extent-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/tiled-extent-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/tiled-index-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/tiled-index-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/uint-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/uint-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/uint-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/uint-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/uint-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/uint-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/uninitialized-object-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/uninitialized-object-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unorm-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unorm-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unorm-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unorm-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unorm-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unorm-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unorm-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unorm-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unsupported-feature-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unsupported-feature-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/writeonly-texture-view-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/writeonly-texture-view-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-180"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/cpp-amp-cpp-accelerated-massive-parallelism.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/cpp-amp-cpp-accelerated-massive-parallelism",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/cpp-amp-overview.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/cpp-amp-overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/graphics-cpp-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/graphics-cpp-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/using-accelerator-and-accelerator-view-objects.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/using-accelerator-and-accelerator-view-objects",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/using-cpp-amp-in-windows-store-apps.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/using-cpp-amp-in-windows-store-apps",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/using-lambdas-function-objects-and-restricted-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/using-lambdas-function-objects-and-restricted-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/using-tiles.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/using-tiles",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/walkthrough-debugging-a-cpp-amp-application.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/walkthrough-debugging-a-cpp-amp-application",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/walkthrough-matrix-multiplication.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/walkthrough-matrix-multiplication",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/accelerator-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/accelerator-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/accelerator-view-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/accelerator-view-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/accelerator-view-removed-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/accelerator-view-removed-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/adopt-d3d-access-lock-t-structure.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/adopt-d3d-access-lock-t-structure",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/array-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/array-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/array-view-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/array-view-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/completion-future-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/completion-future-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-direct3d-namespace-functions-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-direct3d-namespace-functions-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-direct3d-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-direct3d-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-fast-math-namespace-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-fast-math-namespace-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-fast-math-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-fast-math-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-direct3d-namespace-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-direct3d-namespace-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-direct3d-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-direct3d-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-namespace-enums.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-namespace-enums",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-namespace-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-namespace-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-graphics-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-graphics-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-constants-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-constants-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-cpp-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-cpp-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-enums-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-enums-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-functions-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-functions-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-namespace-operators-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-namespace-operators-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-precise-math-namespace-functions.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-precise-math-namespace-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/concurrency-precise-math-namespace.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/concurrency-precise-math-namespace",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/double-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/double-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/double-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/double-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/double-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/double-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/extent-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/extent-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/float-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/float-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/float-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/float-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/float-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/float-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/index-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/index-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/int-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/int-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/int-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/int-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/int-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/int-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/invalid-compute-domain-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/invalid-compute-domain-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/norm-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/norm-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/norm-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/norm-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/norm-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/norm-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/norm-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/norm-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/out-of-memory-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/out-of-memory-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/reference-cpp-amp.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/reference-cpp-amp",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/runtime-exception-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/runtime-exception-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/sampler-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/sampler-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/scoped-d3d-access-lock-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/scoped-d3d-access-lock-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/short-vector-structure.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/short-vector-structure",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/short-vector-traits-structure.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/short-vector-traits-structure",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/texture-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/texture-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/texture-view-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/texture-view-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/tile-barrier-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/tile-barrier-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/tiled-extent-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/tiled-extent-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/tiled-index-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/tiled-index-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/uint-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/uint-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/uint-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/uint-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/uint-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/uint-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/uninitialized-object-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/uninitialized-object-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unorm-2-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unorm-2-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unorm-3-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unorm-3-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unorm-4-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unorm-4-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unorm-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unorm-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/unsupported-feature-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/unsupported-feature-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
+ {
+ "source_path": "docs/parallel/amp/reference/writeonly-texture-view-class.md",
+ "redirect_url": "/previous-versions/cpp/parallel/amp/reference/writeonly-texture-view-class",
+ "redirect_document_id": false,
+ "monikers": [
+ "msvc-170"
+ ]
+ },
{
"source_path": "docs/windows/desktop-applications-visual-cpp.md",
"redirect_url": "/cpp/windows/overview-of-windows-programming-in-cpp",
@@ -13764,6 +16569,176 @@
"source_path": "docs/overview/whats-new-cpp-docs.md",
"redirect_url": "../../cpp/overview/what-s-new-for-visual-cpp-in-visual-studio",
"redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/sample-container.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/sample-container-class.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/sample-container-classes.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/sample-container-member-functions.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/sample-container-members.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/sample-container-operators.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/sample-container-specialized-template-functions.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/sample-container-typedefs.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/operator-equality-sample-container.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/operator-greater-than-sample-container.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/operator-less-or-equal-sample-container.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/operator-less-than-sample-container.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/swap-sample-container.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/operator-greater-or-equal.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/operator-inequality.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/container-class-begin.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/container-class-clear.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/container-class-const-iterator.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/container-class-const-reference.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/container-class-const-reverse-iterator.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/container-class-difference-type.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/container-class-empty.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/container-class-end.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/container-class-erase.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/container-class-iterator.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/container-class-max-size.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/container-class-rbegin.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/container-class-reference.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/container-class-rend.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/container-class-reverse-iterator.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/container-class-size.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/container-class-size-type.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/container-class-swap.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/standard-library/container-class-value-type.md",
+ "redirect_url": "/cpp/standard-library/stl-containers",
+ "redirect_document_id": false
}
]
-}
\ No newline at end of file
+}
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index bbfa4431118..1fed536772c 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,8 +1,8 @@
# Contributing
-Thank you for your interest in contributing to the Visual C++ documentation!
+Thank you for your interest in contributing to the Microsoft C++ documentation!
-In this topic, you'll see the basic process for adding or updating content in the [Visual C++ documentation site](https://learn.microsoft.com/cpp/).
+In this topic, you'll see the basic process for adding or updating content in the [Microsoft C++ documentation site](https://learn.microsoft.com/cpp/).
In this topic, we'll cover:
@@ -14,16 +14,13 @@ In this topic, we'll cover:
## Process for contributing
-**Step 1:** Open an issue describing the article you wish to write and how it relates to existing content.
-The content inside the **docs** folder is organized into sections that are organized by content area (e.g., debugger). Try to determine the correct folder for your new content. Get feedback on your proposal.
-
-You can skip this first step for small changes.
+**Step 1:** The content inside the **docs** folder is organized into sections that are organized by content area (e.g., debugger). Try to determine the correct folder for your changes.
**Step 2:** Fork the `MicrosoftDocs/cpp-docs` repository.
-**Step 3:** Create a `branch` for your article.
+**Step 3:** Create a `branch` for your changes.
-**Step 4:** Write your article.
+**Step 4:** Make your edits and commit.
If it's a new topic, you can use this [template file](./styleguide/template.md) as your starting point. It contains the writing guidelines and also explains the metadata required for each article, such as author information.
@@ -46,9 +43,7 @@ docs
**Step 5:** Submit a Pull Request (PR) from your branch to `MicrosoftDocs/cpp-docs/main`.
-If your PR is addressing an existing issue, add the `Fixes #Issue_Number` keyword to the commit message or PR description, so the issue can be automatically closed when the PR is merged. For more information, see [Closing issues via commit messages](https://help.github.com/articles/closing-issues-via-commit-messages/).
-
-The Visual Studio team will review your PR and let you know if the change looks good or if there are any other updates/changes necessary in order to approve it.
+The Microsoft C++ docs team will review your PR and let you know if the change looks good or if there are any other updates/changes necessary in order to approve it.
**Step 6:** Make any necessary updates to your branch as discussed with the team.
@@ -58,9 +53,9 @@ On a certain cadence, we push all commits from main branch into the live branch
## DOs and DON'Ts
-Below is a short list of guiding rules that you should keep in mind when you are contributing to the .NET documentation.
+Below is a short list of guiding rules that you should keep in mind when you are contributing to the Microsoft C++ documentation.
-- **DON'T** surprise us with big pull requests. Instead, file an issue and start a discussion so we can agree on a direction before you invest a large amount of time.
+- **DON'T** surprise us with big pull requests.
- **DO** read the [style guide](./styleguide/template.md) and [voice and tone](./styleguide/voice-tone.md) guidelines.
- **DO** use the [template](./styleguide/template.md) file as the starting point of your work.
- **DO** create a separate branch on your fork before working on the articles.
@@ -68,7 +63,7 @@ Below is a short list of guiding rules that you should keep in mind when you are
- **DO** blog and tweet (or whatever) about your contributions, frequently!
> [!NOTE]
-> You might notice that some of the topics are not currently following all the guidelines specified here and on the [style guide](./styleguide/template.md) as well. We're working towards achieving consistency throughout the site. Check the list of [open issues](https://github.com/MicrosoftDocs/cpp-docs/issues?q=is%3Aissue+is%3Aopen+label%3Aguidelines-adherence) we're currently tracking for that specific goal.
+> You might notice that some of the topics are not currently following all the guidelines specified here and on the [style guide](./styleguide/template.md) as well. We're working towards achieving consistency throughout the site.
## Building the documentation
diff --git a/docs/assembler/masm/at-unwindversion.md b/docs/assembler/masm/at-unwindversion.md
new file mode 100644
index 00000000000..388cfd802e7
--- /dev/null
+++ b/docs/assembler/masm/at-unwindversion.md
@@ -0,0 +1,60 @@
+---
+description: "Learn more about: @UnwindVersion"
+title: "@UnwindVersion"
+ms.date: 05/07/2026
+f1_keywords: ["@UnwindVersion"]
+helpviewer_keywords: ["@UnwindVersion symbol"]
+ai-usage: ai-assisted
+---
+# \@UnwindVersion
+
+A predefined macro that returns the unwind version the `.asm` file is being assembled with.
+
+## Syntax
+
+> **\@UnwindVersion**
+
+## Remarks
+
+> [!IMPORTANT]
+> This symbol is experimental and is subject to change. Enable Unwind Version 3 with `ml64.exe /unwindv3`.
+
+**\@UnwindVersion** is set to the unwind version used by the assembler. When `/unwindv3` is passed to `ml64.exe`, **\@UnwindVersion** is set to `3`; otherwise it's set to `1`.
+
+Use this macro with conditional assembly directives such as `IF` to assemble different code paths depending on the unwind version.
+
+This example is intended to be assembled only as it doesn't define an application entry point:
+
+## Example for unwindv3
+
+```asm
+; ml64 /c /unwindv3 ex1.asm
+.code
+
+IF @UnwindVersion EQ 3
+
+foo PROC FRAME
+ .pushreg r12
+ push r12
+
+ .endprolog
+
+ mov rax, 0
+
+ .beginepilog
+ .popreg r12
+ pop r12
+ .endepilog
+ ret
+foo ENDP
+ELSE
+ .ERR <@UnwindVersion should be 3>
+ENDIF
+
+END
+```
+
+## See also
+
+[x64 Unwind Version 3 (experimental)](directives-reference.md#x64-unwind-version-3-experimental)\
+[MASM BNF Grammar](masm-bnf-grammar.md)
diff --git a/docs/assembler/masm/directives-reference.md b/docs/assembler/masm/directives-reference.md
index c9f7208c7d7..97de3fcad7a 100644
--- a/docs/assembler/masm/directives-reference.md
+++ b/docs/assembler/masm/directives-reference.md
@@ -4,7 +4,7 @@ title: "Directives Reference"
ms.date: 07/15/2020
f1_keywords: ["Directives Reference"]
helpviewer_keywords: ["MASM (Microsoft Macro Assembler), directives reference"]
-ms.assetid: da6efcd1-18f7-41de-81cd-a002a02f9a22
+ai-usage: ai-assisted
---
# Directives Reference
@@ -27,6 +27,49 @@ ms.assetid: da6efcd1-18f7-41de-81cd-a002a02f9a22
:::column-end:::
:::row-end:::
+## x64 Unwind Version 3 (experimental)
+
+The following directives are used with `ml64.exe` when the `/unwindv3` option is enabled. Unwind Version 3 is experimental and is subject to change.
+
+**Prologue directives**
+
+:::row:::
+ :::column span="":::
+ [`.ALLOCSTACK`](dot-allocstack.md)\
+ [`.ENDPROLOG`](dot-endprolog.md)\
+ [`.PUSH2REG`](dot-push2reg.md)
+ :::column-end:::
+ :::column span="":::
+ [`.PUSHFRAME`](dot-pushframe.md)\
+ [`.PUSHREG`](dot-pushreg.md)\
+ [`.SAVEREG`](dot-savereg.md)
+ :::column-end:::
+ :::column span="":::
+ [`.SAVEXMM128`](dot-savexmm128.md)\
+ [`.SETFRAME`](dot-setframe.md)
+ :::column-end:::
+:::row-end:::
+
+**Epilogue directives**
+
+:::row:::
+ :::column span="":::
+ [`.BEGINEPILOG`](dot-beginepilog.md)\
+ [`.ENDEPILOG`](dot-endepilog.md)\
+ [`.FREESTACK`](dot-freestack.md)
+ :::column-end:::
+ :::column span="":::
+ [`.POP2REG`](dot-pop2reg.md)\
+ [`.POPFRAME`](dot-popframe.md)\
+ [`.POPREG`](dot-popreg.md)\
+ [`.RESTOREREG`](dot-restorereg.md)
+ :::column-end:::
+ :::column span="":::
+ [`.RESTOREXMM128`](dot-restorexmm128.md)\
+ [`.UNSETFRAME`](dot-unsetframe.md)
+ :::column-end:::
+:::row-end:::
+
## Code Labels
:::row:::
diff --git a/docs/assembler/masm/dot-allocstack.md b/docs/assembler/masm/dot-allocstack.md
index 13c5e6e1146..6d0881627bd 100644
--- a/docs/assembler/masm/dot-allocstack.md
+++ b/docs/assembler/masm/dot-allocstack.md
@@ -1,39 +1,41 @@
---
description: "Learn more about: .ALLOCSTACK"
title: ".ALLOCSTACK"
-ms.date: "12/17/2019"
+ms.date: 05/11/2026
f1_keywords: [".ALLOCSTACK"]
helpviewer_keywords: [".ALLOCSTACK directive"]
-ms.assetid: 9801594b-7ac2-4df2-a49d-07d9dd9af99e
+ai-usage: ai-assisted
---
# .ALLOCSTACK
-Generates a **UWOP_ALLOC_SMALL** or a **UWOP_ALLOC_LARGE** with the specified size for the current offset in the prologue.
+`.ALLOCSTACK` generates a **UWOP_ALLOC_SMALL** or a **UWOP_ALLOC_LARGE** with the specified size for the current offset in the prologue.
## Syntax
-> **.ALLOCSTACK** *size*
+> `.ALLOCSTACK` *size*
## Remarks
-MASM will choose the most efficient encoding for a given size.
+Microsoft Assembler (MASM) chooses the most efficient encoding for a given size.
-**.ALLOCSTACK** allows ml64.exe users to specify how a frame function unwinds and is only allowed within the prologue, which extends from the [PROC](proc.md) FRAME declaration to the [.ENDPROLOG](dot-endprolog.md) directive. These directives do not generate code; they only generate `.xdata` and `.pdata`. **.ALLOCSTACK** should be preceded by instructions that actually implement the actions to be unwound. It is a good practice to wrap both the unwind directives and the code they are meant to unwind in a macro to ensure agreement.
+`.ALLOCSTACK` allows `ml64.exe` users to specify how a frame function unwinds and is only allowed within the prologue, which extends from the [PROC](proc.md) `FRAME` declaration to the [.ENDPROLOG](dot-endprolog.md) directive.
+- These directives generate unwind metadata (`.xdata` and `.pdata` sections) but don't produce executable code.
+- Precede `.ALLOCSTACK` with the instructions that actually implement the actions to be unwound. Wrap both the unwind directives and the code they're meant to unwind in a macro to ensure agreement.
The *size* operand must be a multiple of 8.
-For more information, see [MASM for x64 (ml64.exe)](masm-for-x64-ml64-exe.md).
+The epilogue counterpart is [.FREESTACK](dot-freestack.md).
-## Sample
+## Example: specify an unwind version 3 unwind/exception handler
The following sample shows how to specify an unwind/exception handler:
```asm
-; ml64 ex3.asm /link /entry:Example1 /SUBSYSTEM:Console
+; ml64 ex3.asm /link /entry:Example3 /SUBSYSTEM:Console
text SEGMENT
PUBLIC Example3
PUBLIC Example3_UW
-Example3_UW PROC NEAR
+Example3_UW PROC
; exception/unwind handler body
ret 0
@@ -56,7 +58,61 @@ text ENDS
END
```
+## Unwind Version 3 behavior
+
+> [!IMPORTANT]
+> Unwind Version 3 support is experimental and is subject to change. Enable it by using `ml64.exe /unwindv3`.
+
+`.ALLOCSTACK` generates a `WOD_ALLOC_SMALL`, `WOD_ALLOC_LARGE`, or `WOD_ALLOC_HUGE` Unwind Version 3 unwind code entry with the specified size for the current offset in the prolog.
+
+`.ALLOCSTACK` must appear **before** the `sub rsp, N` instruction it describes. This requirement is the opposite of Version 1, where the directive follows the instruction.
+
+MASM emits one of three unwind codes depending on the allocation size:
+
+| Unwind code | Condition |
+|---|---|
+| `WOD_ALLOC_SMALL` | *size* ≤ 128 bytes |
+| `WOD_ALLOC_LARGE` | *size* ≤ 32 KB |
+| `WOD_ALLOC_HUGE` | *size* > 32 KB |
+
+Version 1 generates only `UWOP_ALLOC_SMALL` or `UWOP_ALLOC_LARGE`. Version 3 adds a third variant, `WOD_ALLOC_HUGE`, for allocations larger than 32 KB.
+
+> [!NOTE]
+> In Unwind Version 1, the directive appears after the corresponding instruction. In Unwind Version 3, the directive appears **before** the instruction.
+
+### Example for unwindv3
+
+```asm
+; ml64 ex3.asm /unwindv3 /link /entry:Example3 /SUBSYSTEM:Console
+text SEGMENT
+PUBLIC Example3
+PUBLIC Example3_UW
+Example3_UW PROC
+ ; exception/unwind handler body
+
+ ret 0
+
+Example3_UW ENDP
+
+Example3 PROC FRAME : Example3_UW
+
+.allocstack 16
+ sub rsp, 16
+
+.endprolog
+
+ ; function body
+ add rsp, 16
+ ret 0
+
+Example3 ENDP
+text ENDS
+END
+```
+
## See also
+[x64 Unwind Version 3 (experimental)](directives-reference.md#x64-unwind-version-3-experimental)\
[Directives Reference](directives-reference.md)\
-[MASM BNF Grammar](masm-bnf-grammar.md)
+[MASM BNF Grammar](masm-bnf-grammar.md)\
+[MASM for x64 (ml64.exe)](masm-for-x64-ml64-exe.md)
\ No newline at end of file
diff --git a/docs/assembler/masm/dot-beginepilog.md b/docs/assembler/masm/dot-beginepilog.md
new file mode 100644
index 00000000000..9f05bcdaf1d
--- /dev/null
+++ b/docs/assembler/masm/dot-beginepilog.md
@@ -0,0 +1,59 @@
+---
+description: "Learn more about: .BEGINEPILOG"
+title: ".BEGINEPILOG"
+ms.date: 05/04/2026
+ai-usage: ai-assisted
+f1_keywords: [".BEGINEPILOG"]
+helpviewer_keywords: [".BEGINEPILOG directive"]
+---
+# .BEGINEPILOG
+
+Marks the start of an epilogue unwind region. This directive doesn't emit an Unwind Operation Descriptors (WOD) code.
+
+## Syntax
+
+> `.BEGINEPILOG`
+
+## Remarks
+
+> [!IMPORTANT]
+> This directive is experimental and is subject to change.
+> Enable Unwind Version 3 by using `ml64.exe /unwindv3`.
+
+`.BEGINEPILOG` is only valid in Unwind Version 3.
+
+- It marks the start of an epilogue region where epilogue unwind operations are recorded. Pair `.BEGINEPILOG` with a closing [.ENDEPILOG](dot-endepilog.md) or no epilog unwind codes are emitted.
+- In Unwind Version 3, epilog directives are mandatory for epilog unwind code generation.
+- Epilogues must contain at least one directive.
+- These directives generate unwind metadata (`.xdata` and `.pdata` sections) but don't produce executable code.
+
+> [!NOTE]
+> In Unwind Version 1, the directive appears after the corresponding instruction. In Unwind Version 3, the directive appears **before** the instruction.
+
+## Example for unwindv3
+
+```asm
+; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
+_text SEGMENT
+Example1 PROC FRAME
+ .allocstack 16
+ sub rsp, 16
+.endprolog
+ ; function body
+ .beginepilog
+ .freestack 16
+ add rsp, 16
+ .endepilog
+ ret
+Example1 ENDP
+_text ENDS
+END
+```
+
+## See also
+
+[x64 Unwind Version 3 (experimental)](directives-reference.md#x64-unwind-version-3-experimental)\
+[Directives Reference](directives-reference.md)\
+[.ENDEPILOG](dot-endepilog.md)\
+[.ENDPROLOG](dot-endprolog.md)\
+[MASM BNF Grammar](masm-bnf-grammar.md)
diff --git a/docs/assembler/masm/dot-endepilog.md b/docs/assembler/masm/dot-endepilog.md
new file mode 100644
index 00000000000..af9383ae19e
--- /dev/null
+++ b/docs/assembler/masm/dot-endepilog.md
@@ -0,0 +1,60 @@
+---
+description: "Learn more about: .ENDEPILOG"
+title: ".ENDEPILOG"
+ms.date: "04/29/2026"
+ai-usage: ai-assisted
+f1_keywords: [".ENDEPILOG"]
+helpviewer_keywords: [".ENDEPILOG directive"]
+---
+# .ENDEPILOG
+
+Marks the end of an epilogue unwind region. This directive doesn't emit a Windows unwind data (WOD) unwind code.
+
+## Syntax
+
+> **.ENDEPILOG**
+
+## Remarks
+
+> [!IMPORTANT]
+> This directive is experimental and is subject to change.
+> Enable Unwind Version 3 by using `ml64.exe /unwindv3`.
+
+**.ENDEPILOG** is only valid in Unwind Version 3.
+
+- It marks the end of an epilogue region started by [.BEGINEPILOG](dot-beginepilog.md).
+- These directives generate unwind metadata (`.xdata` and `.pdata` sections) but don't produce executable code.
+- Epilogues must contain at least one directive.
+- Epilogue directives are mandatory for epilogue unwind code generation. No epilogue unwind codes are emitted without a `.BEGINEPILOG`/`.ENDEPILOG` pair.
+- It's an error to use epilogue directives outside of the region between [.BEGINEPILOG](dot-beginepilog.md) and **.ENDEPILOG**.
+
+> [!NOTE]
+> In Unwind Version 1, the directive appears after the corresponding instruction. In Unwind Version 3, the directive appears **before** the instruction.
+
+## Example
+
+```asm
+; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
+_text SEGMENT
+Example1 PROC FRAME
+ .allocstack 16
+ sub rsp, 16
+.endprolog
+ ; function body
+ .beginepilog
+ .freestack 16
+ add rsp, 16
+ .endepilog
+ ret
+Example1 ENDP
+_text ENDS
+END
+```
+
+## See also
+
+[x64 Unwind Version 3 (experimental)](directives-reference.md#x64-unwind-version-3-experimental)\
+[Directives Reference](directives-reference.md)\
+[.BEGINEPILOG](dot-beginepilog.md)\
+[.ENDPROLOG](dot-endprolog.md)\
+[MASM BNF Grammar](masm-bnf-grammar.md)
diff --git a/docs/assembler/masm/dot-endprolog.md b/docs/assembler/masm/dot-endprolog.md
index c864e0c8494..bc366ab72e5 100644
--- a/docs/assembler/masm/dot-endprolog.md
+++ b/docs/assembler/masm/dot-endprolog.md
@@ -1,14 +1,14 @@
---
description: "Learn more about: .ENDPROLOG"
title: ".ENDPROLOG"
-ms.date: "12/17/2019"
+ms.date: 05/06/2026
f1_keywords: [".ENDPROLOG"]
helpviewer_keywords: [".ENDPROLOG directive"]
-ms.assetid: 61a2474c-9527-46e6-9f9d-bc4b42c10f35
+ai-usage: ai-assisted
---
# .ENDPROLOG
-Signals the end of the prologue declarations.
+Marks the end of the prologue declarations.
## Syntax
@@ -16,11 +16,22 @@ Signals the end of the prologue declarations.
## Remarks
-It is an error to use any of the prologue declarations outside of the region between [PROC](proc.md) **FRAME** and **.ENDPROLOG**.
+It's an error to use any of the prologue declarations outside of the region between [PROC](proc.md) `FRAME` and **.ENDPROLOG**.
For more information, see [MASM for x64 (ml64.exe)](masm-for-x64-ml64-exe.md).
+## Unwind Version 3 behavior
+
+> [!IMPORTANT]
+> Unwind Version 3 support is experimental and is subject to change.
+> Enable it with `ml64.exe /unwindv3`.
+
+`.ENDPROLOG` is also used in Unwind Version 3 and continues to mark the end of the function prologue. It doesn't generate a Windows unwind data (WOD) unwind code entry.
+
+It's an error to use any prologue directive outside the region between `PROC FRAME` and `.ENDPROLOG`.
+
## See also
+[x64 Unwind Version 3 (experimental)](directives-reference.md#x64-unwind-version-3-experimental)\
[Directives Reference](directives-reference.md)\
[MASM BNF Grammar](masm-bnf-grammar.md)
diff --git a/docs/assembler/masm/dot-freestack.md b/docs/assembler/masm/dot-freestack.md
new file mode 100644
index 00000000000..bf80a2be682
--- /dev/null
+++ b/docs/assembler/masm/dot-freestack.md
@@ -0,0 +1,74 @@
+---
+description: "Learn more about: .FREESTACK"
+title: ".FREESTACK"
+ms.date: 05/06/2026
+f1_keywords: [".FREESTACK"]
+helpviewer_keywords: [".FREESTACK directive"]
+ai-usage: ai-assisted
+---
+# .FREESTACK
+
+Generates a **WOD_ALLOC_SMALL**, **WOD_ALLOC_LARGE**, or **WOD_ALLOC_HUGE** unwind code entry with the specified size for the current offset in the epilogue.
+
+## Syntax
+
+> **.FREESTACK** *size*
+
+## Parameters
+
+*size*\
+The number of bytes to deallocate from the stack. Must be a multiple of 8.
+
+## Remarks
+
+> [!IMPORTANT]
+> This directive is experimental and is subject to change.
+> Enable Unwind Version 3 by using `ml64.exe /unwindv3`.
+
+- You can use **.FREESTACK** only in Unwind Version 3. It's the epilogue counterpart to [.ALLOCSTACK](dot-allocstack.md).
+- You can use **.FREESTACK** only within an epilogue region, between [.BEGINEPILOG](dot-beginepilog.md) and [.ENDEPILOG](dot-endepilog.md).
+- In Unwind Version 3, **.FREESTACK** must appear **before** the `add rsp, N` instruction that implements the stack deallocation.
+- To ensure agreement, wrap both the unwind directives and the code they're meant to unwind in a macro.
+- These directives generate unwind metadata (`.xdata` and `.pdata` sections) but don't produce executable code.
+- Microsoft Assembler (MASM) chooses the most efficient encoding for a given size.
+
+MASM emits one of three unwind codes depending on the size:
+
+| Unwind code | Condition |
+|---|---|
+| `WOD_ALLOC_SMALL` | *size* ≤ 128 bytes |
+| `WOD_ALLOC_LARGE` | *size* ≤ 32 KB |
+| `WOD_ALLOC_HUGE` | *size* > 32 KB |
+
+In Unwind Version 3, epilogue directives are mandatory for epilogue unwind code generation. The assembler doesn't emit epilogue unwind codes without a `.BEGINEPILOG`/`.ENDEPILOG` pair.
+
+> [!NOTE]
+> In Unwind Version 1, the directive appears after the corresponding instruction. In Unwind Version 3, the directive appears **before** the instruction.
+
+## Example for unwindv3
+
+```asm
+; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
+_text SEGMENT
+Example1 PROC FRAME
+ .allocstack 16
+ sub rsp, 16
+.endprolog
+ ; function body
+ .beginepilog
+ .freestack 16
+ add rsp, 16
+ .endepilog
+ ret
+Example1 ENDP
+_text ENDS
+END
+```
+
+## See also
+
+[x64 Unwind Version 3 (experimental)](directives-reference.md#x64-unwind-version-3-experimental)\
+[Directives Reference](directives-reference.md)\
+[.ALLOCSTACK](dot-allocstack.md)\
+[.BEGINEPILOG](dot-beginepilog.md)\
+[MASM BNF Grammar](masm-bnf-grammar.md)
diff --git a/docs/assembler/masm/dot-pop2reg.md b/docs/assembler/masm/dot-pop2reg.md
new file mode 100644
index 00000000000..56dbdff4b52
--- /dev/null
+++ b/docs/assembler/masm/dot-pop2reg.md
@@ -0,0 +1,76 @@
+---
+description: "Learn more about: .POP2REG"
+title: ".POP2REG"
+ms.date: 05/04/2026
+f1_keywords: [".POP2REG"]
+helpviewer_keywords: [".POP2REG directive"]
+ai-usage: ai-assisted
+---
+# .POP2REG
+
+Generates a two-register pop unwind code entry for the specified register pair using the current offset in the epilogue.
+
+## Syntax
+
+> **.POP2REG** *register1*, *register2*
+
+## Parameters
+
+*register1*\
+The first register to pop. Must be a general-purpose 64-bit register.
+
+*register2*\
+The second register to pop. Must be a general-purpose 64-bit register.
+
+*register1* and *register2* may each be one of:\
+`RAX, RCX, RDX, RBX, RDI, RSI, RBP, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31`.
+
+## Remarks
+
+> [!IMPORTANT]
+> This directive is experimental and is subject to change. Enable Unwind Version 3 with `ml64.exe /unwindv3`.
+
+- **.POP2REG** is only valid in Unwind Version 3. It's the epilogue counterpart to [.PUSH2REG](dot-push2reg.md).
+- **.POP2REG** is only allowed within an epilogue region, between [.BEGINEPILOG](dot-beginepilog.md) and [.ENDEPILOG](dot-endepilog.md).
+- These directives generate unwind metadata (`.xdata` and `.pdata` sections) but don't produce executable code.
+- In Unwind Version 3, **.POP2REG** must appear **before** the instruction that actually implements the action to be unwound.
+- In Unwind Version 3, epilogue directives are mandatory for epilogue unwind code generation. No epilogue unwind codes are emitted without a `.BEGINEPILOG`/`.ENDEPILOG` pair.
+- To ensure agreement, wrap both the unwind directives and the code they're meant to unwind in a macro.
+
+If *register1* and *register2* are consecutive and in increasing order, MASM emits a `WOD_PUSH_CONSECUTIVE_2` unwind code. Otherwise, MASM emits a `WOD_PUSH2` unwind code.
+
+> [!NOTE]
+> In Unwind Version 1, the directive appears after the corresponding instruction. In Unwind Version 3, the directive appears **before** the instruction.
+
+## Example
+
+```asm
+; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
+_text SEGMENT
+Example1 PROC FRAME
+ .push2reg rbx, rsi
+ push2 rbx, rsi
+ .push2reg r10, r11
+ push2 r10, r11
+.endprolog
+ ; rest of function ...
+ .beginepilog
+ .pop2reg r10, r11
+ pop2 r10, r11
+ .pop2reg rbx, rsi
+ pop2 rbx, rsi
+ .endepilog
+ ret
+Example1 ENDP
+_text ENDS
+END
+```
+
+## See also
+
+[x64 Unwind Version 3 (experimental)](directives-reference.md#x64-unwind-version-3-experimental)\
+[Directives Reference](directives-reference.md)\
+[.PUSH2REG](dot-push2reg.md)\
+[.POPREG](dot-popreg.md)\
+[.BEGINEPILOG](dot-beginepilog.md)\
+[MASM BNF Grammar](masm-bnf-grammar.md)
diff --git a/docs/assembler/masm/dot-popframe.md b/docs/assembler/masm/dot-popframe.md
new file mode 100644
index 00000000000..6f0d869f13d
--- /dev/null
+++ b/docs/assembler/masm/dot-popframe.md
@@ -0,0 +1,74 @@
+---
+description: "Learn more about: .POPFRAME"
+title: ".POPFRAME"
+ms.date: 05/01/2026
+f1_keywords: [".POPFRAME"]
+helpviewer_keywords: [".POPFRAME directive"]
+ai-usage: ai-assisted
+---
+# .POPFRAME
+
+Generates a `WOD_PUSH_CANONICAL_FRAME` Windows unwind data (WOD) unwind code entry in the epilogue.
+
+## Syntax
+
+> **.POPFRAME** ⟦**CODE** | *value*⟧
+
+## Parameters
+
+*value*\
+An optional numeric modifier in the range 0–255.\
+Mutually exclusive with **CODE**. If you specify the optional **CODE** keyword, the unwind code entry receives a modifier of 1.\
+If you specify an optional numeric *value* instead, it receives the specified value.\
+If you don't pass an argument, the value is 0.
+
+## Remarks
+
+> [!IMPORTANT]
+> This directive is experimental and is subject to change. Enable Unwind Version 3 with `ml64.exe /unwindv3`.
+
+The **.POPFRAME** directive lets `ml64.exe` users specify how a frame function unwinds in an epilog. You can only use it within an epilog region, between [.BEGINEPILOG](dot-beginepilog.md) and [.ENDEPILOG](dot-endepilog.md).
+
+- **.POPFRAME** is only valid in Unwind Version 3. It's the epilog counterpart of [.PUSHFRAME](dot-pushframe.md). The operand value should match the corresponding **.PUSHFRAME** in the prologue.
+- In Unwind Version 3, **.POPFRAME** must appear **before** the instruction that implements the action to be unwound. To ensure agreement, wrap both the unwind directives and the code they're meant to unwind in a macro.
+- In Unwind Version 3, epilogue directives are mandatory for epilogue unwind code generation. No epilogue unwind codes are emitted without a `.BEGINEPILOG`/`.ENDEPILOG` pair.
+- These directives generate unwind metadata (`.xdata` and `.pdata` sections) but don't produce executable code.
+
+> [!NOTE]
+> In Unwind Version 1, directives appear after the corresponding instruction. In Unwind Version 3, directives appear **before** the instruction.
+
+## Example for unwindv3
+
+The following example shows how to use **.POPFRAME** in an epilogue to indicate an interrupt handler that pushes and pops a canonical machine frame.
+
+```asm
+; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
+_text SEGMENT
+Example1 PROC FRAME
+ .pushframe
+ .pushreg rbx
+ push rbx
+ .allocstack 32
+ sub rsp, 32
+.endprolog
+ ; interrupt handler body ...
+ .beginepilog
+ .freestack 32
+ add rsp, 32
+ .popreg rbx
+ pop rbx
+ .popframe
+ .endepilog
+ iretq
+Example1 ENDP
+_text ENDS
+END
+```
+
+## See also
+
+[x64 Unwind Version 3 (experimental)](directives-reference.md#x64-unwind-version-3-experimental)\
+[.PUSHFRAME](dot-pushframe.md)\
+[.BEGINEPILOG](dot-beginepilog.md)\
+[.ENDEPILOG](dot-endepilog.md)\
+[MASM BNF Grammar](masm-bnf-grammar.md)
diff --git a/docs/assembler/masm/dot-popreg.md b/docs/assembler/masm/dot-popreg.md
new file mode 100644
index 00000000000..963e7de0f48
--- /dev/null
+++ b/docs/assembler/masm/dot-popreg.md
@@ -0,0 +1,70 @@
+---
+description: "Learn more about: .POPREG"
+title: ".POPREG"
+ms.date: 05/04/2026
+f1_keywords: [".POPREG"]
+helpviewer_keywords: [".POPREG directive"]
+ai-usage: ai-assisted
+---
+# .POPREG
+
+Generates a `WOD_PUSH` unwind code entry for the specified register using the current offset in the epilogue.
+
+## Syntax
+
+> .POPREG *register*
+
+## Parameters
+
+*register*\
+The register to pop. Must be a general-purpose 64-bit register.
+
+## Remarks
+
+> [!IMPORTANT]
+> This directive is experimental and is subject to change. Enable Unwind Version 3 by using the `/unwindv3` option in ml64.exe.
+
+`.POPREG` is only valid in Unwind Version 3. It's the epilogue counterpart to [.PUSHREG](dot-pushreg.md).
+
+`.POPREG` is only allowed within an epilogue region, between [.BEGINEPILOG](dot-beginepilog.md) and [.ENDEPILOG](dot-endepilog.md). These directives generate unwind metadata (`.xdata` and `.pdata` sections) but don't produce executable code. In Unwind Version 3, `.POPREG` must appear **before** the `pop` instruction that implements the register restore. To ensure agreement, wrap both the unwind directives and the code they're meant to unwind in a macro.
+
+*register* may be one of:\
+`RAX, RCX, RDX, RBX, RDI, RSI, RBP, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31`
+
+In Unwind Version 3, epilogue directives are mandatory for epilogue unwind code generation. The assembler doesn't emit epilogue unwind codes without a `.BEGINEPILOG`/`.ENDEPILOG` pair.
+
+> [!NOTE]
+> In Unwind Version 1, the directive appears after the corresponding instruction. In Unwind Version 3, the directive appears **before** the instruction.
+
+## Example for unwindv3
+
+```asm
+; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
+_text SEGMENT
+Example1 PROC FRAME
+ .pushreg rbx
+ push rbx
+ .pushreg rsi
+ push rsi
+.endprolog
+ ; rest of function ...
+ .beginepilog
+ .popreg rsi
+ pop rsi
+ .popreg rbx
+ pop rbx
+ .endepilog
+ ret
+Example1 ENDP
+_text ENDS
+END
+```
+
+## See also
+
+[x64 Unwind Version 3 (experimental)](directives-reference.md#x64-unwind-version-3-experimental)\
+[Directives Reference](directives-reference.md)\
+[.PUSHREG](dot-pushreg.md)\
+[.POP2REG](dot-pop2reg.md)\
+[.BEGINEPILOG](dot-beginepilog.md)\
+[MASM BNF Grammar](masm-bnf-grammar.md)
diff --git a/docs/assembler/masm/dot-push2reg.md b/docs/assembler/masm/dot-push2reg.md
new file mode 100644
index 00000000000..d43e1113271
--- /dev/null
+++ b/docs/assembler/masm/dot-push2reg.md
@@ -0,0 +1,65 @@
+---
+description: "Learn more about: .PUSH2REG"
+title: ".PUSH2REG"
+ms.date: 05/04/2026
+f1_keywords: [".PUSH2REG"]
+helpviewer_keywords: [".PUSH2REG directive"]
+ai-usage: ai-assisted
+---
+# .PUSH2REG
+
+Generates a two-register push unwind code entry for the specified register pair using the current offset in the prologue.
+
+## Syntax
+
+> `.PUSH2REG` *register1*, *register2*
+
+## Parameters
+
+*register1*\
+The first register to push. Must be a general-purpose 64-bit register.
+
+*register2*\
+The second register to push. Must be a general-purpose 64-bit register.
+
+*register1* and *register2* may each be one of:\
+`RAX, RCX, RDX, RBX, RDI, RSI, RBP, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31.`
+
+## Remarks
+
+> [!IMPORTANT]
+> This directive is experimental and is subject to change. Enable Unwind Version 3 by using `ml64.exe /unwindv3`.
+
+- Use `.PUSH2REG` to specify how a frame function unwinds. You can only use this directive within the prologue, which extends from the [PROC](proc.md) `FRAME` declaration to the [.ENDPROLOG](dot-endprolog.md) directive.
+- These directives generate unwind metadata (`.xdata` and `.pdata` sections) but don't produce executable code. In Unwind Version 3, `.PUSH2REG` must appear **before** the instruction that actually implements the action to be unwound. To ensure agreement, it's a good practice to wrap both the unwind directives and the code they're meant to unwind in a macro.
+- If *register1* and *register2* are consecutive and in increasing order, MASM emits a `WOD_PUSH_CONSECUTIVE_2` unwind code. Otherwise, MASM emits a `WOD_PUSH2` unwind code.
+
+> [!NOTE]
+> In Unwind Version 1, the directive appears after the corresponding instruction. In Unwind Version 3, the directive appears **before** the instruction.
+
+## Example for unwindv3
+
+```asm
+; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
+_text SEGMENT
+Example1 PROC FRAME
+ .push2reg r10, r11
+ push2 r10, r11
+ .push2reg rbx, rsi
+ push2 rbx, rsi
+.endprolog
+ ; rest of function ...
+ ret
+Example1 ENDP
+_text ENDS
+END
+```
+
+## See also
+
+[x64 Unwind Version 3 (experimental)](directives-reference.md#x64-unwind-version-3-experimental)\
+[Directives Reference](directives-reference.md)\
+[.POP2REG](dot-pop2reg.md)\
+[.PUSHREG](dot-pushreg.md)\
+[.ENDPROLOG](dot-endprolog.md)\
+[MASM BNF Grammar](masm-bnf-grammar.md)
diff --git a/docs/assembler/masm/dot-pushframe.md b/docs/assembler/masm/dot-pushframe.md
index 07dc3972dfc..da3d77c596f 100644
--- a/docs/assembler/masm/dot-pushframe.md
+++ b/docs/assembler/masm/dot-pushframe.md
@@ -4,23 +4,58 @@ description: "Describes the .PUSHFRAME MASM directive, used to specify how to un
ms.date: "12/06/2019"
f1_keywords: [".PUSHFRAME"]
helpviewer_keywords: [".PUSHFRAME directive"]
-ms.assetid: 17b123d0-4c6d-4fd2-85eb-798e8ad0a73c
+ai-usage: ai-assisted
---
# .PUSHFRAME
-Generates a `UWOP_PUSH_MACHFRAME` unwind code entry. If the optional **CODE** keyword is specified, the unwind code entry is given a modifier of 1. Otherwise the modifier is 0.
+Generates a `UWOP_PUSH_MACHFRAME` unwind code entry. If you specify the optional **CODE** keyword, the unwind code entry gets a modifier of 1. Otherwise, the modifier is 0.
## Syntax
-> **.PUSHFRAME** ⟦**CODE**⟧;;
+> `.PUSHFRAME` ⟦**CODE**⟧ ;Prior to Unwind Version 3
+> `.PUSHFRAME` ⟦**CODE**⟧ | [0-255] ;Unwind Version 3 specific
## Remarks
-.PUSHFRAME allows ml64.exe users to specify how a frame function unwinds. It's only allowed within the prologue, which extends from the [PROC](proc.md) FRAME declaration to the [.ENDPROLOG](dot-endprolog.md) directive. These directives don't generate code; they only generate `.xdata` and `.pdata`. **.PUSHFRAME** should be preceded by instructions that actually implement the actions to be unwound. It's a good practice to wrap both the unwind directives and the code they're meant to unwind in a macro to ensure agreement.
+Use `.PUSHFRAME` with `ml64.exe` to specify how a frame function unwinds. You can only use it within the prologue, which extends from the [PROC](proc.md) `FRAME` declaration to the [.ENDPROLOG](dot-endprolog.md) directive.
+- These directives generate unwind metadata (`.xdata` and `.pdata` sections) but don't produce executable code.
+- Precede `.PUSHFRAME` with the instructions that implement the actions to be unwound.
+- To ensure agreement, wrap both the unwind directives and the code they're meant to unwind in a macro.
-For more information, see [MASM for x64 (ml64.exe)](masm-for-x64-ml64-exe.md).
+## Unwind Version 3 behavior
+
+> [!IMPORTANT]
+> Unwind Version 3 support is experimental and is subject to change. Enable it by using `ml64.exe /unwindv3`.
+
+In Unwind Version 3, `.PUSHFRAME` emits a `WOD_PUSH_CANONICAL_FRAME` unwind code entry.\
+When you specify the optional **CODE** keyword, the unwind code entry modifier value is 1.\
+If you specify an optional *value*, the directive uses it directly.\
+If you don't pass an argument, the value is 0. The *value* must be in the range 0–255.
+
+> **Note:** In Unwind Version 1 the directives come after the instruction. In Unwind Version 3, the directives come before the instruction.
+> `.PUSHFRAME` must appear **before** the instruction it describes. This behavior is the opposite of Version 1, where the directive follows the instruction.
+
+### Example for unwindv3
+
+```asm
+; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
+_text SEGMENT
+Example1 PROC FRAME
+ .pushframe CODE
+.endprolog
+ ; interrupt handler body ...
+ iretq
+Example1 ENDP
+_text ENDS
+END
+```
+
+The epilogue counterpart is [.POPFRAME](dot-popframe.md).
## See also
+[x64 Unwind Version 3 (experimental)](directives-reference.md#x64-unwind-version-3-experimental)\
[Directives reference](directives-reference.md)\
-[MASM BNF Grammar](masm-bnf-grammar.md)
+[.POPFRAME](dot-popframe.md)\
+[MASM BNF Grammar](masm-bnf-grammar.md)\
+[MASM for x64 (ml64.exe)](masm-for-x64-ml64-exe.md)
diff --git a/docs/assembler/masm/dot-pushreg.md b/docs/assembler/masm/dot-pushreg.md
index a433f688d6e..d6a48cb5227 100644
--- a/docs/assembler/masm/dot-pushreg.md
+++ b/docs/assembler/masm/dot-pushreg.md
@@ -1,10 +1,10 @@
---
description: "Learn more about: .PUSHREG"
title: ".PUSHREG"
-ms.date: "12/16/2019"
+ms.date: 05/04/2026
f1_keywords: [".PUSHREG"]
helpviewer_keywords: [".PUSHREG directive"]
-ms.assetid: e0c83758-dfed-40ea-afe6-cb833c8d2d30
+ai-usage: ai-assisted
---
# .PUSHREG
@@ -14,23 +14,20 @@ Generates a `UWOP_PUSH_NONVOL` unwind code entry for the specified register numb
> .PUSHREG *register*
-## Remarks
-
-**.PUSHREG** allows ml64.exe users to specify how a frame function unwinds, and is only allowed within the prologue, which extends from the [PROC](proc.md) **FRAME** declaration to the [.ENDPROLOG](dot-endprolog.md) directive. These directives do not generate code; they only generate `.xdata` and `.pdata`. **.PUSHREG** should be preceded by instructions that actually implement the actions to be unwound. It is a good practice to wrap both the unwind directives and the code they are meant to unwind in a macro to ensure agreement.
-
*register* may be one of:\
-RAX | RCX | RDX | RBX | RDI | RSI | RBP | R8 | R9 | R10 | R11 | R12 | R13 | R14 | R15.
-
-For more information, see [MASM for x64 (ml64.exe)](masm-for-x64-ml64-exe.md).
+`RAX, RCX, RDX, RBX, RDI, RSI, RBP, R8, R9, R10, R11, R12, R13, R14, R15`
-## Sample
+Unwind Version 3 extends register support to include R16–R31. *register* may be one of:\
+`RAX, RCX, RDX, RBX, RDI, RSI, RBP, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31`
-### Description
+## Remarks
-The following sample shows how to push non-volatile registers.
+Use `.PUSHREG` with `ml64.exe` to specify how a frame function unwinds. You can only use `.PUSHREG` within the prologue, which extends from the [PROC](proc.md) `FRAME` declaration to the [.ENDPROLOG](dot-endprolog.md) directive. These directives generate unwind metadata (`.xdata` and `.pdata` sections) but don't produce executable code. Precede `.PUSHREG` with the instructions that actually implement the actions to be unwound. To ensure agreement, wrap both the unwind directives and the code they're meant to unwind in a macro.
### Code
+The following sample shows how to push nonvolatile registers.
+
```asm
; ml64 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
@@ -51,7 +48,42 @@ _text ENDS
END
```
+## Unwind Version 3 behavior
+
+> [!IMPORTANT]
+> Unwind Version 3 support is experimental and is subject to change. Enable it by using `ml64.exe /unwindv3`.
+
+> [!NOTE]
+> In Unwind Version 1, the directive appears after the corresponding instruction. In Unwind Version 3, the directive appears **before** the instruction.
+> In Unwind Version 3, `.PUSHREG` generates a `WOD_PUSH` unwind code entry and must appear **before** the `push reg` instruction it describes. This requirement is the opposite of Version 1, where the directive follows the instruction.
+
+### Example for unwindv3
+
+```asm
+; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
+_text SEGMENT
+Example1 PROC FRAME
+ .pushreg r10
+ push r10
+ .pushreg r15
+ push r15
+ .pushreg rbx
+ push rbx
+ .pushreg rsi
+ push rsi
+.endprolog
+ ; rest of function ...
+ ret
+Example1 ENDP
+_text ENDS
+END
+```
+
+The epilogue counterpart is [.POPREG](dot-popreg.md).
+
## See also
+[x64 Unwind Version 3 (experimental)](directives-reference.md#x64-unwind-version-3-experimental)\
[Directives reference](directives-reference.md)\
-[MASM BNF Grammar](masm-bnf-grammar.md)
+[MASM BNF Grammar](masm-bnf-grammar.md)\
+[MASM for x64 (ml64.exe)](masm-for-x64-ml64-exe.md)
\ No newline at end of file
diff --git a/docs/assembler/masm/dot-restorereg.md b/docs/assembler/masm/dot-restorereg.md
new file mode 100644
index 00000000000..94836c8da74
--- /dev/null
+++ b/docs/assembler/masm/dot-restorereg.md
@@ -0,0 +1,77 @@
+---
+description: "Learn more about: .RESTOREREG"
+title: ".RESTOREREG"
+ms.date: 05/04/2026
+f1_keywords: [".RESTOREREG"]
+helpviewer_keywords: [".RESTOREREG directive"]
+ai-usage: ai-assisted
+---
+# .RESTOREREG
+
+Generates either a `WOD_SAVE_NONVOL` or a `WOD_SAVE_NONVOL_FAR` unwind code entry for the specified register and offset, using the current epilogue offset.
+
+## Syntax
+
+> `.RESTOREREG` *reg*, *offset*
+
+## Parameters
+
+*reg*\
+The nonvolatile register to restore.
+
+*offset*\
+The stack offset from which the register is restored.
+
+## Remarks
+
+> [!IMPORTANT]
+> This directive is experimental and is subject to change. Enable Unwind Version 3 by using `ml64.exe /unwindv3`.
+
+`.RESTOREREG` is only valid in Unwind Version 3. It's the epilogue counterpart to [.SAVEREG](dot-savereg.md).
+
+Microsoft Assembler (MASM) chooses the most efficient encoding for a given offset.
+
+- `.RESTOREREG` is only allowed within an epilogue region, between [.BEGINEPILOG](dot-beginepilog.md) and [.ENDEPILOG](dot-endepilog.md).
+- These directives generate unwind metadata (`.xdata` and `.pdata` sections) but don't produce executable code.
+- In Unwind Version 3, `.RESTOREREG` must appear **before** the instruction that loads the register from the stack.
+- To ensure agreement, wrap both the unwind directives and the code they're meant to unwind in a macro.
+- In Unwind Version 3, epilogue directives are mandatory for epilogue unwind code generation. No epilogue unwind codes are emitted without a `.BEGINEPILOG`/`.ENDEPILOG` pair.
+
+> [!NOTE]
+> In Unwind Version 1, the directive appears after the corresponding instruction. In Unwind Version 3, the directive appears **before** the instruction.
+
+## Example for unwindv3
+
+```asm
+; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
+_text SEGMENT
+Example1 PROC FRAME
+ .allocstack 020h
+ sub rsp, 020h
+ .savereg rbx, 0
+ mov [rsp], rbx
+ .savereg rsi, 8
+ mov [rsp+8], rsi
+.endprolog
+ ; rest of function ...
+ .beginepilog
+ .restorereg rsi, 8
+ mov rsi, [rsp+8]
+ .restorereg rbx, 0
+ mov rbx, [rsp]
+ .freestack 020h
+ add rsp, 020h
+ .endepilog
+ ret
+Example1 ENDP
+_text ENDS
+END
+```
+
+## See also
+
+[x64 Unwind Version 3 (experimental)](directives-reference.md#x64-unwind-version-3-experimental)\
+[Directives Reference](directives-reference.md)\
+[.SAVEREG](dot-savereg.md)\
+[.BEGINEPILOG](dot-beginepilog.md)\
+[MASM BNF Grammar](masm-bnf-grammar.md)
diff --git a/docs/assembler/masm/dot-restorexmm128.md b/docs/assembler/masm/dot-restorexmm128.md
new file mode 100644
index 00000000000..03d1bc27750
--- /dev/null
+++ b/docs/assembler/masm/dot-restorexmm128.md
@@ -0,0 +1,77 @@
+---
+description: "Learn more about: .RESTOREXMM128"
+title: ".RESTOREXMM128"
+ms.date: 05/06/2026
+f1_keywords: [".RESTOREXMM128"]
+helpviewer_keywords: [".RESTOREXMM128 directive"]
+ai-usage: ai-assisted
+---
+# .RESTOREXMM128
+
+Generates either a `WOD_SAVE_XMM128` or a `WOD_SAVE_XMM128_FAR` Unwind Version 3 unwind code entry for the specified XMM register and offset using the current epilogue offset.
+
+## Syntax
+
+> `.RESTOREXMM128` *xmmreg*, *offset*
+
+## Parameters
+
+*xmmreg*\
+The XMM register to restore.
+
+*offset*\
+The stack offset from which the register is restored. Must be a multiple of 16.
+
+## Remarks
+
+> [!IMPORTANT]
+> This directive is experimental and is subject to change. Enable Unwind Version 3 with `ml64.exe /unwindv3`.
+
+`.RESTOREXMM128` is only valid in Unwind Version 3. It's the epilogue counterpart to [.SAVEXMM128](dot-savexmm128.md).
+
+Microsoft Assembler (MASM) chooses the most efficient encoding for a given offset.
+
+- `.RESTOREXMM128` is only allowed within an epilogue region, between [.BEGINEPILOG](dot-beginepilog.md) and [.ENDEPILOG](dot-endepilog.md).
+- These directives generate unwind metadata (`.xdata` and `.pdata` sections) but don't produce executable code.
+- In Unwind Version 3, `.RESTOREXMM128` must appear **before** the instruction that loads the XMM register from the stack.
+- To ensure agreement, wrap both the unwind directives and the code they're meant to unwind in a macro.
+- In Unwind Version 3, epilogue directives are mandatory for epilogue unwind code generation. No epilogue unwind codes are emitted without a `.BEGINEPILOG`/`.ENDEPILOG` pair.
+
+> [!NOTE]
+> In Unwind Version 1, the directive appears after the corresponding instruction. In Unwind Version 3, the directive appears **before** the instruction.
+
+## Example for unwindv3
+
+```asm
+; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
+_text SEGMENT
+Example1 PROC FRAME
+ .allocstack 030h
+ sub rsp, 030h
+ .savexmm128 xmm6, 0
+ movdqa [rsp], xmm6
+ .savexmm128 xmm7, 010h
+ movdqa [rsp+010h], xmm7
+.endprolog
+ ; rest of function ...
+ .beginepilog
+ .restorexmm128 xmm7, 010h
+ movdqa xmm7, [rsp+010h]
+ .restorexmm128 xmm6, 0
+ movdqa xmm6, [rsp]
+ .freestack 030h
+ add rsp, 030h
+ .endepilog
+ ret
+Example1 ENDP
+_text ENDS
+END
+```
+
+## See also
+
+[x64 Unwind Version 3 (experimental)](directives-reference.md#x64-unwind-version-3-experimental)\
+[Directives Reference](directives-reference.md)\
+[.SAVEXMM128](dot-savexmm128.md)\
+[.BEGINEPILOG](dot-beginepilog.md)\
+[MASM BNF Grammar](masm-bnf-grammar.md)
diff --git a/docs/assembler/masm/dot-savereg.md b/docs/assembler/masm/dot-savereg.md
index a786f88777f..654d19cfe57 100644
--- a/docs/assembler/masm/dot-savereg.md
+++ b/docs/assembler/masm/dot-savereg.md
@@ -1,26 +1,70 @@
---
description: "Learn more about: .SAVEREG"
title: ".SAVEREG"
-ms.date: "12/16/2019"
+ms.date: 05/06/2026
f1_keywords: [".SAVEREG"]
helpviewer_keywords: [".SAVEREG directive"]
-ms.assetid: 1dbc2ef6-a197-40e7-9e55-fddcae8cef29
+ai-usage: ai-assisted
---
# .SAVEREG
-Generates either a `UWOP_SAVE_NONVOL` or a `UWOP_SAVE_NONVOL_FAR` unwind code entry for the specified register (*reg*) and offset (*offset*) using the current prologue offset. MASM will choose the most efficient encoding.
+Generates either a `UWOP_SAVE_NONVOL` or a `UWOP_SAVE_NONVOL_FAR` unwind code entry for the specified register (*reg*) and offset (*offset*) using the current prologue offset. Microsoft Assembler (MASM) chooses the most efficient encoding.
## Syntax
-> **.SAVEREG** *reg*__,__ *offset*
+> `.SAVEREG` *reg*__,__ *offset*
## Remarks
-**.SAVEREG** allows ml64.exe users to specify how a frame function unwinds and is only allowed within the prologue, which extends from the [PROC](proc.md) FRAME declaration to the [.ENDPROLOG](dot-endprolog.md) directive. These directives do not generate code; they only generate `.xdata` and `.pdata`. **.SAVEREG** should be preceded by instructions that actually implement the actions to be unwound. It is a good practice to wrap both the unwind directives and the code they are meant to unwind in a macro to ensure agreement.
+Use `.SAVEREG` with `ml64.exe` to specify how a frame function unwinds. You can only use it within the prologue, which extends from the [`PROC`](proc.md) `FRAME` declaration to the [.ENDPROLOG](dot-endprolog.md) directive.
+- These directives generate unwind metadata (`.xdata` and `.pdata` sections) but don't produce executable code.
+- Precede `.SAVEREG` with instructions that actually implement the actions to be unwound.
+- To ensure agreement, wrap both the unwind directives and the code they're meant to unwind in a macro.
-For more information, see [MASM for x64 (ml64.exe)](masm-for-x64-ml64-exe.md).
+## Unwind Version 3 behavior
+
+> [!IMPORTANT]
+> Unwind Version 3 support is experimental and is subject to change. Enable it by using `ml64.exe /unwindv3`.
+
+In Unwind Version 3, `.SAVEREG` emits either a `WOD_SAVE_NONVOL` or a `WOD_SAVE_NONVOL_FAR` unwind code entry. MASM selects the most efficient encoding based on the size of *offset*:
+
+| Unwind code | Condition |
+|---|---|
+| `WOD_SAVE_NONVOL` | *offset* can be encoded as a scaled 16-bit value |
+| `WOD_SAVE_NONVOL_FAR` | *offset* requires a full 32-bit value |
+
+> [!NOTE]
+> In Unwind Version 1, the directive appears after the corresponding instruction. In Unwind Version 3, the directive appears **before** the instruction.
+> `.SAVEREG` must appear **before** the instruction it describes. This requirement is the opposite of Version 1, where the directive follows the instruction.
+
+### Example for unwindv3
+
+```asm
+; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
+_text SEGMENT
+Example1 PROC FRAME
+ .allocstack 020h
+ sub rsp, 020h
+ .savereg rbx, 0
+ mov [rsp], rbx
+ .savereg rsi, 8
+ mov [rsp+8], rsi
+.endprolog
+ ; rest of function ...
+ mov rsi, [rsp+8]
+ mov rbx, [rsp]
+ add rsp, 020h
+ ret
+Example1 ENDP
+_text ENDS
+END
+```
+
+The epilogue counterpart is [.RESTOREREG](dot-restorereg.md).
## See also
+[x64 Unwind Version 3 (experimental)](directives-reference.md#x64-unwind-version-3-experimental)\
[Directives reference](directives-reference.md)\
+[MASM for x64 (ml64.exe)](masm-for-x64-ml64-exe.md)\
[MASM BNF Grammar](masm-bnf-grammar.md)
diff --git a/docs/assembler/masm/dot-savexmm128.md b/docs/assembler/masm/dot-savexmm128.md
index 6a914c5547f..ed2fae15341 100644
--- a/docs/assembler/masm/dot-savexmm128.md
+++ b/docs/assembler/masm/dot-savexmm128.md
@@ -1,28 +1,69 @@
---
description: "Learn more about: .SAVEXMM128"
title: ".SAVEXMM128"
-ms.date: "12/17/2019"
+ms.date: 05/04/2026
f1_keywords: [".SAVEXMM128"]
helpviewer_keywords: [".SAVEXMM128 directive"]
-ms.assetid: 551eb472-b8d0-47b1-8d82-995d1f485723
+ai-usage: ai-assisted
---
# .SAVEXMM128
-Generates either a `UWOP_SAVE_XMM128` or a `UWOP_SAVE_XMM128_FAR` unwind code entry for the specified XMM register and offset using the current prologue offset. MASM will choose the most efficient encoding.
+Generates either a `UWOP_SAVE_XMM128` or a `UWOP_SAVE_XMM128_FAR` unwind code entry for the specified XMM register and offset using the current prologue offset. Microsoft Assembler (MASM) chooses the most efficient encoding.
## Syntax
-> **.SAVEXMM128** *xmmreg* , *offset*
+> `.SAVEXMM128` *xmmreg* , *offset*
## Remarks
-**.SAVEXMM128** allows ml64.exe users to specify how a frame function unwinds, and is only allowed within the prologue, which extends from the [PROC](proc.md) FRAME declaration to the [.ENDPROLOG](dot-endprolog.md) directive. These directives do not generate code; they only generate `.xdata` and `.pdata`. .SAVEXMM128 should be preceded by instructions that actually implement the actions to be unwound. It is a good practice to wrap both the unwind directives and the code they are meant to unwind in a macro to ensure agreement.
+Use `.SAVEXMM128` with `ml64.exe` to specify how a frame function unwinds. You can only use it within the prologue, which extends from the [`PROC`](proc.md) `FRAME` declaration to the [.ENDPROLOG](dot-endprolog.md) directive. These directives generate unwind metadata (`.xdata` and `.pdata` sections) but don't produce executable code. Precede `.SAVEXMM128` by the instructions that actually implement the actions to be unwound. To ensure agreement, wrap both the unwind directives and the code they're meant to unwind in a macro.
*offset* must be a multiple of 16.
-For more information, see [MASM for x64 (ml64.exe)](masm-for-x64-ml64-exe.md).
+## Unwind Version 3 behavior
+
+> [!IMPORTANT]
+> Unwind Version 3 support is experimental and is subject to change. Enable it by using `ml64.exe /unwindv3`.
+
+In Unwind Version 3, `.SAVEXMM128` emits either a `WOD_SAVE_XMM128` or a `WOD_SAVE_XMM128_FAR` unwind code entry. Microsoft Assembler (MASM) selects the most efficient encoding based on the size of *offset*:
+
+| Unwind code | Condition |
+|---|---|
+| `WOD_SAVE_XMM128` | *offset* can be encoded as a scaled 16-bit value |
+| `WOD_SAVE_XMM128_FAR` | *offset* requires a full 32-bit value |
+
+> [!NOTE]
+> In Unwind Version 1 the directives come after the instruction. In Unwind Version 3, the directives come before the instruction.
+> `.SAVEXMM128` must appear **before** the instruction it describes. This requirement is the opposite of Version 1, where the directive follows the instruction.
+
+### Example for unwindv3
+
+```asm
+; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
+_text SEGMENT
+Example1 PROC FRAME
+ .allocstack 030h
+ sub rsp, 030h
+ .savexmm128 xmm6, 0
+ movdqa [rsp], xmm6
+ .savexmm128 xmm7, 010h
+ movdqa [rsp+010h], xmm7
+.endprolog
+ ; rest of function ...
+ movdqa xmm7, [rsp+010h]
+ movdqa xmm6, [rsp]
+ add rsp, 030h
+ ret
+Example1 ENDP
+_text ENDS
+END
+```
+
+The epilogue counterpart is [.RESTOREXMM128](dot-restorexmm128.md).
## See also
+[x64 Unwind Version 3 (experimental)](directives-reference.md#x64-unwind-version-3-experimental)\
[Directives reference](directives-reference.md)\
-[MASM BNF Grammar](masm-bnf-grammar.md)
+[MASM BNF Grammar](masm-bnf-grammar.md)\
+[MASM for x64 (ml64.exe)](masm-for-x64-ml64-exe.md)
diff --git a/docs/assembler/masm/dot-setframe.md b/docs/assembler/masm/dot-setframe.md
index d33281ed97a..7eeec50f330 100644
--- a/docs/assembler/masm/dot-setframe.md
+++ b/docs/assembler/masm/dot-setframe.md
@@ -1,10 +1,10 @@
---
description: "Learn more about: .SETFRAME"
title: ".SETFRAME"
-ms.date: "12/17/2019"
+ms.date: 05/04/2026
f1_keywords: [".SETFRAME"]
helpviewer_keywords: [".SETFRAME directive"]
-ms.assetid: eaa9b5ed-4daa-4f1e-bdb6-100758007ab3
+ai-usage: ai-assisted
---
# .SETFRAME
@@ -12,13 +12,11 @@ Fills in the frame register field and offset in the unwind information using the
## Syntax
-> **.SETFRAME** *reg*, *offset*
+> `.SETFRAME` *reg*, *offset*
## Remarks
-**.SETFRAME** allows ml64.exe users to specify how a frame function unwinds, and is only allowed within the prologue, which extends from the [PROC](proc.md) FRAME declaration to the [.ENDPROLOG](dot-endprolog.md) directive. These directives do not generate code; they only generate `.xdata` and `.pdata`. **.SETFRAME** should be preceded by instructions that actually implement the actions to be unwound. It is a good practice to wrap both the unwind directives and the code they are meant to unwind in a macro to ensure agreement.
-
-For more information, see [MASM for x64 (ml64.exe)](masm-for-x64-ml64-exe.md).
+Use `.SETFRAME` to specify how a frame function unwinds. You can only use it within the prologue, which extends from the [`PROC`](proc.md) `FRAME` declaration to the [.ENDPROLOG](dot-endprolog.md) directive. These directives generate unwind metadata (`.xdata` and `.pdata` sections) but don't produce executable code. Precede `.SETFRAME` with instructions that implement the actions to be unwound. To ensure agreement, wrap both the unwind directives and the code they're meant to unwind in a macro.
## Sample
@@ -55,7 +53,51 @@ _text ENDS
END
```
+## Unwind Version 3 behavior
+
+> [!IMPORTANT]
+> Unwind Version 3 support is experimental and is subject to change. Enable it by using `ml64.exe /unwindv3`.
+
+In Unwind Version 3, `.SETFRAME` emits a `WOD_SET_FPREG` unwind code entry for the specified register using the current prologue offset. It also fills in the frame register field and offset in the unwind information. The *offset* must be a multiple of 16 and less than or equal to 240.
+
+> [!NOTE]
+> In Unwind Version 1 the directives come after the instruction. In Unwind Version 3, the directives come before the instruction.
+> `.SETFRAME` must appear **before** the instruction it describes. This requirement is the opposite of Version 1, where the directive follows the instruction.
+
+### Example for unwindv3
+
+```asm
+; ml64 /unwindv3 frmex2.asm /link /entry:frmex2 /SUBSYSTEM:CONSOLE
+_text SEGMENT
+frmex2 PROC FRAME
+ .pushreg rbp
+ push rbp
+ .allocstack 010h
+ sub rsp, 010h
+ .setframe rbp, 0
+ mov rbp, rsp
+.endprolog
+ ; modify the stack pointer outside of the prologue (similar to alloca)
+ sub rsp, 060h
+
+ ; we can unwind from the following AV because of the frame pointer
+ mov rax, 0
+ mov rax, [rax] ; AV!
+
+ add rsp, 060h
+ add rsp, 010h
+ pop rbp
+ ret
+frmex2 ENDP
+_text ENDS
+END
+```
+
+The epilogue counterpart is [.UNSETFRAME](dot-unsetframe.md).
+
## See also
+[x64 Unwind Version 3 (experimental)](directives-reference.md#x64-unwind-version-3-experimental)\
+[MASM for x64 (ml64.exe)](masm-for-x64-ml64-exe.md)\
[Directives reference](directives-reference.md)\
[MASM BNF Grammar](masm-bnf-grammar.md)
diff --git a/docs/assembler/masm/dot-unsetframe.md b/docs/assembler/masm/dot-unsetframe.md
new file mode 100644
index 00000000000..10b55371053
--- /dev/null
+++ b/docs/assembler/masm/dot-unsetframe.md
@@ -0,0 +1,82 @@
+---
+description: "Learn more about: .UNSETFRAME"
+title: ".UNSETFRAME"
+ms.date: 05/04/2026
+f1_keywords: [".UNSETFRAME"]
+helpviewer_keywords: [".UNSETFRAME directive"]
+ai-usage: ai-assisted
+---
+# .UNSETFRAME
+
+Generates a `WOD_SET_FPREG` unwind code entry for the specified register and offset using the current offset in the epilogue.
+
+## Syntax
+
+> `.UNSETFRAME` *reg*, *offset*
+
+## Parameters
+
+*reg*\
+The frame pointer register to unset.
+
+*offset*\
+The offset into the stack frame where the frame pointer was established.
+
+## Remarks
+
+> [!IMPORTANT]
+> This directive is experimental and is subject to change. Enable Unwind Version 3 with `ml64.exe /unwindv3`.
+
+`.UNSETFRAME` is only valid in Unwind Version 3. It's the epilogue counterpart to [.SETFRAME](dot-setframe.md).
+
+`.UNSETFRAME` is only allowed within an epilogue region, between [.BEGINEPILOG](dot-beginepilog.md) and [.ENDEPILOG](dot-endepilog.md). These directives generate unwind metadata (`.xdata` and `.pdata` sections) but don't produce executable code.\
+In Unwind Version 3, `.UNSETFRAME` must appear **before** the instruction that restores the stack pointer from the frame pointer register.\
+It's a good practice to wrap both the unwind directives and the code they're meant to unwind in a macro to ensure agreement.
+
+In Unwind Version 3, epilogue directives are mandatory for epilogue unwind code generation. No epilogue unwind codes are emitted without a `.BEGINEPILOG`/`.ENDEPILOG` pair.
+
+> [!NOTE]
+> In Unwind Version 1, the directive appears after the corresponding instruction. In Unwind Version 3, the directive appears **before** the instruction.
+
+## Example for unwindv3
+
+```asm
+; ml64 /unwindv3 frmex2.asm /link /entry:frmex2 /SUBSYSTEM:CONSOLE
+_text SEGMENT
+frmex2 PROC FRAME
+ .pushreg rbp
+ push rbp
+ .allocstack 010h
+ sub rsp, 010h
+ .setframe rbp, 0
+ mov rbp, rsp
+.endprolog
+ ; modify the stack pointer outside of the prologue (similar to alloca)
+ sub rsp, 060h
+
+ ; we can unwind from the following AV because of the frame pointer
+ mov rax, 0
+ mov rax, [rax] ; AV!
+
+ add rsp, 060h
+ .beginepilog
+ .unsetframe rbp, 0
+ mov rsp, rbp
+ .freestack 010h
+ add rsp, 010h
+ .popreg rbp
+ pop rbp
+ .endepilog
+ ret
+frmex2 ENDP
+_text ENDS
+END
+```
+
+## See also
+
+[x64 Unwind Version 3 (experimental)](directives-reference.md#x64-unwind-version-3-experimental)\
+[Directives Reference](directives-reference.md)\
+[.SETFRAME](dot-setframe.md)\
+[.BEGINEPILOG](dot-beginepilog.md)\
+[MASM BNF Grammar](masm-bnf-grammar.md)
diff --git a/docs/assembler/masm/masm-for-x64-ml64-exe.md b/docs/assembler/masm/masm-for-x64-ml64-exe.md
index 840b0020837..6abb9b44993 100644
--- a/docs/assembler/masm/masm-for-x64-ml64-exe.md
+++ b/docs/assembler/masm/masm-for-x64-ml64-exe.md
@@ -1,8 +1,9 @@
---
description: "Learn more about: Microsoft Macro Assembler (MASM) for x64 (ml64.exe)"
title: "MASM for x64 (ml64.exe)"
-ms.date: 09/21/2021
+ms.date: 05/07/2026
helpviewer_keywords: ["ml64", "ml64.exe", "masm for x64"]
+ai-usage: ai-assisted
---
# MASM for x64 (ml64.exe)
@@ -21,34 +22,54 @@ The Visual Studio project system supports assembler-language files built by usin
### To add an assembler-language file to an existing Visual Studio C++ project
1. Select the project in **Solution Explorer**. On the menu bar, choose **Project**, **Build Customizations**.
-
1. In the **Visual C++ Build Customization Files** dialog box, check the checkbox next to **masm(.targets,.props)**. Choose **OK** to save your selection and close the dialog box.
-
1. On the menu bar, choose **Project**, **Add New Item**.
-
1. In the **Add New Item** dialog box, select **C++ file (.cpp)** in the center pane. In the **Name** edit control, enter a new file name that has a *`.asm`* extension instead of *`.cpp`*. Choose **Add** to add the file to your project and close the dialog box.
Create your assembler-language code in the *`.asm`* file you added. When you build your solution, the MASM assembler is invoked to assemble the *`.asm`* file into an object file that is then linked into your project. To make symbol access easier, declare your assembler functions as `extern "C"` in your C++ source code, rather than using the C++ name decoration conventions in your assembler-language source files.
-## ml64-Specific Directives
+## ml64-specific directives
You can use the following ml64-specific directives in your assembler-language source code that targets x64:
- [`.ALLOCSTACK`](dot-allocstack.md)
-
- [`.ENDPROLOG`](dot-endprolog.md)
-
- [`.PUSHFRAME`](dot-pushframe.md)
-
- [`.PUSHREG`](dot-pushreg.md)
-
- [`.SAVEREG`](dot-savereg.md)
-
- [`.SAVEXMM128`](dot-savexmm128.md)
-
- [`.SETFRAME`](dot-setframe.md)
-The [`PROC`](proc.md) directive has also been updated for use with ml64.exe.
+The [`PROC`](proc.md) directive is also updated for use with ml64.exe.
+
+## Unwind Version 3 directives (experimental)
+
+> [!IMPORTANT]
+> Unwind Version 3 support is experimental and is subject to change.
+
+Unwind Version 3 is an updated unwind code scheme for x64 that generates richer stack unwind metadata. It introduces new epilogue directives, extends register support, and changes the directive ordering model.
+
+### Enable Unwind Version 3
+
+Assemble with the `/unwindv3` option: `ml64 /unwindv3 filename.asm /link /entry:FunctionName`
+
+### Key differences from Version 1
+
+| Feature | Version 1 | Version 3 |
+|---|---|---|
+| Directive ordering | Directive follows instruction | Directive precedes instruction |
+| Unwind codes | `UWOP_*` | `WOD_*` |
+| `.ALLOCSTACK` size variants | 2 (`UWOP_ALLOC_SMALL`, `UWOP_ALLOC_LARGE`) | 3 (adds `WOD_ALLOC_HUGE` for > 32 KB) |
+| `.PUSHREG` register range | R0–R15 | R0–R31 |
+| Epilogue recording | Optional | Mandatory (`.BEGINEPILOG`/`.ENDEPILOG` required) |
+| Register-pair push/pop | Not supported | `.PUSH2REG`/`.POP2REG` directives |
+
+Epilogue recording is mandatory in Version 3: `.BEGINEPILOG` and `.ENDEPILOG` must surround the epilogue instructions. Without them, no epilogue unwind codes are emitted.
+
+> [!NOTE]
+> In Unwind Version 1 the directives come after the instruction. In Unwind Version 3, the directives come before the instruction.
+
+For a complete list of Version 3 directives, see [x64 Unwind Version 3 directives](directives-reference.md) and [@UnwindVersion](at-unwindversion.md).
## 32-Bit Address Mode (Address Size Override)
diff --git a/docs/assembler/masm/ml-and-ml64-command-line-reference.md b/docs/assembler/masm/ml-and-ml64-command-line-reference.md
index e4ea469e36f..ab91d77ce37 100644
--- a/docs/assembler/masm/ml-and-ml64-command-line-reference.md
+++ b/docs/assembler/masm/ml-and-ml64-command-line-reference.md
@@ -1,9 +1,10 @@
---
title: "ML and ML64 command-line reference"
description: "Reference guide to the Microsoft MASM ML and ML64 assembler command-line options."
-ms.date: 7/3/2023
-f1_keywords: ["ML"]
-helpviewer_keywords: ["/W* MASM compiler option", "/c MASM compiler option", "/EP MASM compiler option", "/Fe MASM compiler option", "/Zp MASM compiler option", "/AT MASM compiler option", "/Zm MASM compiler option", "/Sf MASM compiler option", "/Sp MASM compiler option", "/w MASM compiler option", "/Fl MASM compiler option", "/coff MASM compiler option", "/St MASM compiler option", "/Cx MASM compiler option", "/Sl MASM compiler option", "/Cu MASM compiler option", "MASM (Microsoft Macro Assembler), ML command-line reference", "/FPi MASM compiler option", "/Zf MASM compiler option", "ML environment variable", "/Fr MASM compiler option", "/help MASM compiler option", "/Sa MASM compiler option", "/Zd MASM compiler option", "/I MASM compiler option", "/? MASM compiler option", "/Bl MASM compiler option", "/Fm MASM compiler option", "/Fo MASM compiler option", "command-line reference [ML]", "/Sn MASM compiler option", "/Gd MASM compiler option", "/D* MASM compiler option", "environment variables, ML", "/Gc MASM compiler option", "/F* MASM compiler option", "/Sc MASM compiler option", "/H MASM compiler option", "/Zs MASM compiler option", "/omf MASM compiler option", "/quiet MASM compiler option", "/Sg MASM compiler option", "/Cp MASM compiler option", "/Zi MASM compiler option", "/nologo MASM compiler option", "/Sx MASM compiler option", "/WX MASM compiler option", "/Ss MASM compiler option", "command line, reference [ML]", "/Ta MASM compiler option"]
+ms.date: 05/25/2026
+ai-usage: ai-assisted
+f1_keywords: ["ML", "/unwindv3"]
+helpviewer_keywords: ["/W* MASM compiler option", "/c MASM compiler option", "/EP MASM compiler option", "/Fe MASM compiler option", "/Zp MASM compiler option", "/AT MASM compiler option", "/Zm MASM compiler option", "/Sf MASM compiler option", "/Sp MASM compiler option", "/w MASM compiler option", "/Fl MASM compiler option", "/coff MASM compiler option", "/St MASM compiler option", "/Cx MASM compiler option", "/Sl MASM compiler option", "/Cu MASM compiler option", "MASM (Microsoft Macro Assembler), ML command-line reference", "/FPi MASM compiler option", "/Zf MASM compiler option", "ML environment variable", "/Fr MASM compiler option", "/help MASM compiler option", "/Sa MASM compiler option", "/Zd MASM compiler option", "/I MASM compiler option", "/? MASM compiler option", "/Bl MASM compiler option", "/Fm MASM compiler option", "/Fo MASM compiler option", "command-line reference [ML]", "/Sn MASM compiler option", "/Gd MASM compiler option", "/D* MASM compiler option", "environment variables, ML", "/Gc MASM compiler option", "/F* MASM compiler option", "/Sc MASM compiler option", "/H MASM compiler option", "/Zs MASM compiler option", "/omf MASM compiler option", "/quiet MASM compiler option", "/Sg MASM compiler option", "/Cp MASM compiler option", "/Zi MASM compiler option", "/nologo MASM compiler option", "/Sx MASM compiler option", "/WX MASM compiler option", "/Ss MASM compiler option", "command line, reference [ML]", "/Ta MASM compiler option", "/unwindv3 MASM compiler option"]
---
# ML and ML64 command-line reference
@@ -61,6 +62,7 @@ The options listed in the following table:
| **`/St`** *`text`* | Specifies title for source listing. Same as [`TITLE`](title.md) text. |
| **`/Sx`** | Turns on false conditionals in listing. |
| **`/Ta`** *`filename`* | Assembles source file whose name doesn't end with the *`.asm`* extension. |
+| **`/unwindv3`** | Enables experimental Unwind Version 3 unwind directive support. When specified, V3 unwind directives must appear *before* their associated instruction (the reverse of V1 behavior), epilogue recording via [`.BEGINEPILOG`](dot-beginepilog.md)/[`.ENDEPILOG`](dot-endepilog.md) is required, and the predefined macro [`@UnwindVersion`](at-unwindversion.md) returns `3`. For more information, see [MASM for x64 (ml64.exe)](masm-for-x64-ml64-exe.md). Only available in ml64.exe. |
| **`/w`** | Same as **`/W0 /WX`**. |
| **`/W`** *`level`* | Sets the warning level, where *`level`* = 0, 1, 2, or 3. |
| **`/WX`** | If warnings are generated, returns an error code. |
@@ -69,12 +71,16 @@ The options listed in the following table:
| **`/Zf`** | Makes all symbols public. |
| **`/ZH:MD5`** | Use MD5 for checksum in debug info. |
| **`/ZH:SHA_256`** | Use SHA256 for checksum in debug info (default in Visual Studio 2022 version 17.0 and later). |
+| **`/ZH:SHA384`** | Use SHA384 for checksum in debug info.18.6.0 |
+| **`/ZH:SHA512`** | Use SHA512 for checksum in debug info.18.6.0 |
| **`/Zi`** | Generates CodeView information in object file. |
| **`/Zm`** | Enables **`M510`** option for maximum compatibility with MASM 5.1. Not available in ml64.exe. |
| **`/Zp`**⟦*`alignment`*⟧ | Packs structures on the specified byte boundary. The *`alignment`* can be 1, 2, 4, 8, or 16. |
| **`/Zs`** | Performs a syntax check only. |
| **`/?`** | Displays a summary of ML command-line syntax and options. |
+18.6.0 This option is available starting in Visual Studio 2026 version 18.6.0 and MSVC version 14.51.
+
*`filename`*\
The name of the file.
diff --git a/docs/assembler/masm/proc.md b/docs/assembler/masm/proc.md
index 9eb65fc3770..222b437a4a9 100644
--- a/docs/assembler/masm/proc.md
+++ b/docs/assembler/masm/proc.md
@@ -12,8 +12,8 @@ Marks start and end of a procedure block called *label*. The statements in the b
## Syntax
-> *label* **PROC** ⟦*distance*⟧ ⟦*language-type*⟧ ⟦ **PUBLIC** | **PRIVATE** | **EXPORT** ⟧ ⟦__\<__*prologuearg*__>__⟧ ⟦**USES** *reglist*⟧ ⟦__,__ *parameter* ⟦__:__*tag*⟧ ...⟧\
-> ⟦**FRAME** ⟦__:__*ehandler-address*⟧ ⟧\
+> *label* `PROC` ⟦*distance*⟧ ⟦*language-type*⟧ ⟦ `PUBLIC` | `PRIVATE` | `EXPORT` ⟧ ⟦__\<__*prologuearg*__>__⟧ ⟦`USES` *reglist*⟧ ⟦__,__ *parameter* ⟦__:__*tag*⟧ ...⟧\
+> ⟦`FRAME` ⟦__:__*ehandler-address*⟧ ⟧\
> *statements*\
> *label* **ENDP**
@@ -21,9 +21,9 @@ Marks start and end of a procedure block called *label*. The statements in the b
The ⟦*distance*⟧ and ⟦*language-type*⟧ arguments are valid only in 32-bit MASM.
-⟦**FRAME** ⟦__:__*ehandler-address*⟧ ⟧ is only valid with ml64.exe, and causes MASM to generate a function table entry in .pdata and unwind information in .xdata for a function's structured exception handling unwind behavior.
+⟦`FRAME` ⟦__:__*ehandler-address*⟧ ⟧ is only valid with ml64.exe, and causes MASM to generate a function table entry in .pdata and unwind information in .xdata for a function's structured exception handling unwind behavior.
-When the **FRAME** attribute is used, it must be followed by an [.ENDPROLOG](dot-endprolog.md) directive.
+When the `FRAME` attribute is used, it must be followed by an [.ENDPROLOG](dot-endprolog.md) directive.
See [MASM for x64 (ml64.exe)](masm-for-x64-ml64-exe.md) for more information on using ml64.exe.
@@ -49,7 +49,7 @@ _text ENDS
END
```
-The above code will emit the following function table and unwind information:
+The above code emits the following function table and unwind information:
```Output
FileHeader->Machine 34404
diff --git a/docs/assembler/masm/symbols-reference.md b/docs/assembler/masm/symbols-reference.md
index c7fd4af9f81..a6c296fc5c1 100644
--- a/docs/assembler/masm/symbols-reference.md
+++ b/docs/assembler/masm/symbols-reference.md
@@ -1,9 +1,9 @@
---
description: "Learn more about: Symbols reference"
title: "Symbols reference"
-ms.date: 07/15/2020
+ms.date: 05/04/2026
helpviewer_keywords: ["MASM (Microsoft Macro Assembler), symbols reference"]
-ms.assetid: 96ed59cc-dafa-4299-bb2e-9c7c3f496491
+ai-usage: ai-assisted
---
# Symbols reference
@@ -30,6 +30,9 @@ ms.assetid: 96ed59cc-dafa-4299-bb2e-9c7c3f496491
:::column span="":::
[`@Interface`](at-interface.md)
:::column-end:::
+ :::column span="":::
+ [`@UnwindVersion`](at-unwindversion.md)
+ :::column-end:::
:::column span="":::
[`@Version`](at-version.md)
:::column-end:::
diff --git a/docs/assembler/toc.yml b/docs/assembler/toc.yml
index 8f8b923a9c3..1e90a1e19d3 100644
--- a/docs/assembler/toc.yml
+++ b/docs/assembler/toc.yml
@@ -117,6 +117,8 @@ items:
href: ../assembler/masm/dot-alpha.md
- name: ASSUME
href: ../assembler/masm/assume.md
+ - name: .BEGINEPILOG
+ href: ../assembler/masm/dot-beginepilog.md
- name: .BREAK
href: ../assembler/masm/dot-break.md
- name: BYTE
@@ -171,6 +173,8 @@ items:
href: ../assembler/masm/end-masm.md
- name: .ENDIF
href: ../assembler/masm/dot-endif.md
+ - name: .ENDEPILOG
+ href: ../assembler/masm/dot-endepilog.md
- name: ENDM
href: ../assembler/masm/endm.md
- name: ENDP
@@ -225,6 +229,8 @@ items:
href: ../assembler/masm/forc.md
- name: .FPO
href: ../assembler/masm/dot-fpo.md
+ - name: .FREESTACK
+ href: ../assembler/masm/dot-freestack.md
- name: FWORD
href: ../assembler/masm/fword.md
- name: GOTO
@@ -315,8 +321,14 @@ items:
href: ../assembler/masm/oword.md
- name: PAGE
href: ../assembler/masm/page.md
+ - name: .POP2REG
+ href: ../assembler/masm/dot-pop2reg.md
- name: POPCONTEXT
href: ../assembler/masm/popcontext.md
+ - name: .POPREG
+ href: ../assembler/masm/dot-popreg.md
+ - name: .POPFRAME
+ href: ../assembler/masm/dot-popframe.md
- name: PROC
href: ../assembler/masm/proc.md
- name: PROTO
@@ -325,6 +337,8 @@ items:
href: ../assembler/masm/public-masm.md
- name: PURGE
href: ../assembler/masm/purge.md
+ - name: .PUSH2REG
+ href: ../assembler/masm/dot-push2reg.md
- name: PUSHCONTEXT
href: ../assembler/masm/pushcontext.md
- name: .PUSHFRAME
@@ -349,6 +363,10 @@ items:
href: ../assembler/masm/repeat.md
- name: REPT
href: ../assembler/masm/rept.md
+ - name: .RESTOREREG
+ href: ../assembler/masm/dot-restorereg.md
+ - name: .RESTOREXMM128
+ href: ../assembler/masm/dot-restorexmm128.md
- name: .SAFESEH
href: ../assembler/masm/dot-safeseh.md
- name: .SALL
@@ -401,6 +419,8 @@ items:
href: ../assembler/masm/typedef-masm.md
- name: UNION
href: ../assembler/masm/union.md
+ - name: .UNSETFRAME
+ href: ../assembler/masm/dot-unsetframe.md
- name: .UNTIL
href: ../assembler/masm/dot-until.md
- name: .UNTILCXZ
@@ -479,6 +499,8 @@ items:
href: ../assembler/masm/at-substr.md
- name: "@Time"
href: ../assembler/masm/at-time.md
+ - name: "@UnwindVersion"
+ href: ../assembler/masm/at-unwindversion.md
- name: "@Version"
href: ../assembler/masm/at-version.md
- name: "@WordSize"
diff --git a/docs/atl-mfc-shared/allocating-and-releasing-memory-for-a-bstr.md b/docs/atl-mfc-shared/allocating-and-releasing-memory-for-a-bstr.md
index b257f105f93..d1c1db36c70 100644
--- a/docs/atl-mfc-shared/allocating-and-releasing-memory-for-a-bstr.md
+++ b/docs/atl-mfc-shared/allocating-and-releasing-memory-for-a-bstr.md
@@ -4,10 +4,11 @@ title: "Allocating and Releasing Memory for a BSTR"
ms.date: "11/04/2016"
f1_keywords: ["bstr"]
helpviewer_keywords: ["BSTRs, memory allocation", "memory deallocation, string memory", "memory [C++], releasing", "memory allocation, BSTRs", "memory deallocation, BSTR memory", "strings [C++], releasing"]
-ms.assetid: 98041e29-3442-4a02-b425-7a4a13e9cc84
---
# Allocating and Releasing Memory for a `BSTR`
+[!INCLUDE[product-lifecycle-status](./includes/lifecycle-note.md)]
+
When you create `BSTR`s and pass them between COM objects, you must take care in treating the memory they use in order to avoid memory leaks. When a `BSTR` stays within an interface, you must free its memory when you are done with it. However, when a `BSTR` passes out of an interface, the receiving object takes responsibility for its memory management.
In general, the rules for allocating and releasing memory allocated for `BSTR`s are as follows:
diff --git a/docs/atl-mfc-shared/atl-mfc-concepts.md b/docs/atl-mfc-shared/atl-mfc-concepts.md
index 6227696c2bb..c2d4845da77 100644
--- a/docs/atl-mfc-shared/atl-mfc-concepts.md
+++ b/docs/atl-mfc-shared/atl-mfc-concepts.md
@@ -3,15 +3,16 @@ description: "Learn more about: ATL/MFC Concepts"
title: "ATL-MFC Concepts"
ms.date: "11/04/2016"
helpviewer_keywords: ["MFC", "ATL"]
-ms.assetid: 4d973f56-8730-4e0b-9522-b5f43bc4548d
---
# ATL/MFC Concepts
+[!INCLUDE[product-lifecycle-status](./includes/lifecycle-note.md)]
+
This section provides conceptual and task-based topics to help you program using the classes shared between Active Template Library (ATL) and Microsoft Foundation Class (MFC) Library.
## In This Section
-[Strings (ATL/MFC)](../atl-mfc-shared/strings-atl-mfc.md)
+[Strings (ATL/MFC)](../atl-mfc-shared/strings-atl-mfc.md)\
Describes how to manage string data in applications.
## See also
diff --git a/docs/atl-mfc-shared/atl-mfc-shared-classes.md b/docs/atl-mfc-shared/atl-mfc-shared-classes.md
index 564d03df38f..52b69d1e957 100644
--- a/docs/atl-mfc-shared/atl-mfc-shared-classes.md
+++ b/docs/atl-mfc-shared/atl-mfc-shared-classes.md
@@ -6,10 +6,11 @@ ms.date: "11/04/2016"
ms.topic: "concept-article"
f1_keywords: ["vc.classes.shared"]
helpviewer_keywords: ["CPoint class, shared class", "CFileTimeSpan class, shared class", "COleDateTime class, shared class", "CFixedStringT class, shared class", "CStrBufT class, shared class", "CFileTime class, shared class", "CRect class, shared class", "CSimpleStringT class, shared class", "CStringT class, shared class", "CSize class, shared class", "CStringData class, shared class", "IAtlStringMgr class, shared class", "shared classes, MFC and ATL", "COleDateTimeSpan class, shared class", "CString objects, shared class", "shared classes"]
-ms.assetid: e13aaac3-21ec-4f4d-8834-432b40fde544
---
# ATL/MFC Shared Classes
+[!INCLUDE[product-lifecycle-status](./includes/lifecycle-note.md)]
+
These utility classes can be used in any native C++ project without requiring any MFC DLL.
## In This Section
diff --git a/docs/atl-mfc-shared/avoidance-of-heap-contention.md b/docs/atl-mfc-shared/avoidance-of-heap-contention.md
index 6639bbbe493..aec032124dc 100644
--- a/docs/atl-mfc-shared/avoidance-of-heap-contention.md
+++ b/docs/atl-mfc-shared/avoidance-of-heap-contention.md
@@ -3,10 +3,11 @@ description: "Learn more about: Avoidance of Heap Contention"
title: "Avoidance of Heap Contention"
ms.date: "11/04/2016"
helpviewer_keywords: ["heap contention"]
-ms.assetid: 797129d7-5f8c-4b0e-8974-bb93217e9ab5
---
# Avoidance of Heap Contention
+[!INCLUDE[product-lifecycle-status](./includes/lifecycle-note.md)]
+
The default string managers provided by MFC and ATL are simple wrappers on top of a global heap. This global heap is fully thread-safe, meaning that multiple threads can allocate and free memory from it simultaneously without corrupting the heap. To help provide thread safety, the heap has to serialize access to itself. This is usually accomplished with a critical section or similar locking mechanism. Whenever two threads try to access the heap simultaneously, one thread is blocked until the other thread's request is finished. For many applications, this situation rarely occurs and the performance impact of the heap's locking mechanism is negligible. However, for applications that frequently access the heap from multiple threads contention for the heap's lock can cause the application to run slower than if it were single-threaded (even on machines with multiple CPUs).
Applications that use [CStringT](../atl-mfc-shared/reference/cstringt-class.md) are especially susceptible to heap contention because operations on `CStringT` objects frequently require reallocation of the string buffer.
diff --git a/docs/atl-mfc-shared/basic-cstring-operations.md b/docs/atl-mfc-shared/basic-cstring-operations.md
index 047bd978b28..243f52b3271 100644
--- a/docs/atl-mfc-shared/basic-cstring-operations.md
+++ b/docs/atl-mfc-shared/basic-cstring-operations.md
@@ -6,6 +6,8 @@ helpviewer_keywords: ["CString objects, basic operations", "string literals, CSt
---
# Basic CString Operations
+[!INCLUDE[product-lifecycle-status](./includes/lifecycle-note.md)]
+
This topic explains the following basic [CString](../atl-mfc-shared/reference/cstringt-class.md) operations:
- [Creating CString objects from standard C literal strings](#_core_creating_cstring_objects_from_standard_c_literal_strings)
diff --git a/docs/atl-mfc-shared/cfixedstringt-example-of-a-custom-string-manager.md b/docs/atl-mfc-shared/cfixedstringt-example-of-a-custom-string-manager.md
index 11094716d1b..b525fdae33f 100644
--- a/docs/atl-mfc-shared/cfixedstringt-example-of-a-custom-string-manager.md
+++ b/docs/atl-mfc-shared/cfixedstringt-example-of-a-custom-string-manager.md
@@ -3,10 +3,11 @@ description: "Learn more about: CFixedStringT: Example of a Custom String Manage
title: "CFixedStringT: Example of a Custom String Manager"
ms.date: "11/04/2016"
helpviewer_keywords: ["CFixedStringT class, using a custom string manager"]
-ms.assetid: 1cf11fd7-51b8-4b94-87af-02bc25f47dd6
---
# CFixedStringT: Example of a Custom String Manager
+[!INCLUDE[product-lifecycle-status](./includes/lifecycle-note.md)]
+
The ATL library implements one example of a custom string manager used by class [CFixedStringT](../atl-mfc-shared/reference/cfixedstringt-class.md), called **CFixedStringMgr**. `CFixedStringT` is derived from [CStringT](../atl-mfc-shared/reference/cstringt-class.md) and implements a string that allocates its character data as part of the `CFixedStringT` object itself as long as the string is less than the length specified by the `t_nChars` template parameter of `CFixedStringT`. With this approach, the string does not need the heap at all, unless the length of the string grows beyond the size of the fixed buffer. Because `CFixedStringT` does not always use a heap to allocate its string data, it cannot use `CAtlStringMgr` as its string manager. It uses a custom string manager (`CFixedStringMgr`), implementing the [IAtlStringMgr](../atl-mfc-shared/reference/iatlstringmgr-class.md) interface. This interface is discussed in [Implementation of a Custom String Manager (Advanced Method)](../atl-mfc-shared/implementation-of-a-custom-string-manager-advanced-method.md).
The constructor for `CFixedStringMgr` takes three parameters:
diff --git a/docs/atl-mfc-shared/cstring-argument-passing.md b/docs/atl-mfc-shared/cstring-argument-passing.md
index 68ff5addc65..23f1483655f 100644
--- a/docs/atl-mfc-shared/cstring-argument-passing.md
+++ b/docs/atl-mfc-shared/cstring-argument-passing.md
@@ -6,6 +6,8 @@ helpviewer_keywords: ["strings [C++], as function input/output", "argument passi
---
# `CString` Argument Passing
+[!INCLUDE[product-lifecycle-status](./includes/lifecycle-note.md)]
+
This article explains how to pass [`CString`](../atl-mfc-shared/reference/cstringt-class.md) objects to functions and how to return `CString` objects from functions.
## `CString` Argument-Passing Conventions
diff --git a/docs/atl-mfc-shared/cstring-exception-cleanup.md b/docs/atl-mfc-shared/cstring-exception-cleanup.md
index f9571eb6993..3a5273217b2 100644
--- a/docs/atl-mfc-shared/cstring-exception-cleanup.md
+++ b/docs/atl-mfc-shared/cstring-exception-cleanup.md
@@ -3,10 +3,11 @@ description: "Learn more about: CString Exception Cleanup"
title: "CString Exception Cleanup"
ms.date: "11/04/2016"
helpviewer_keywords: ["CString objects, exceptions", "exception handling, cleanup code"]
-ms.assetid: 28b9ce70-be63-4a0d-92a8-44bbfbc95e83
---
# CString Exception Cleanup
+[!INCLUDE[product-lifecycle-status](./includes/lifecycle-note.md)]
+
In previous versions of MFC, it was important that you clean up [CString](../atl-mfc-shared/reference/cstringt-class.md) objects after use. With MFC version 3.0 and later, explicit cleanup is no longer necessary.
Under the C++ exception handling mechanism that MFC now uses, you do not have to worry about cleanup after an exception. For a description of how C++ "unwinds" the stack after an exception is caught, see [the try, catch, and throw statements](../cpp/try-throw-and-catch-statements-cpp.md). Even if you use the MFC **TRY**/**CATCH** macros instead of the C++ keywords **`try`** and **`catch`**, MFC uses the C++ exception mechanism underneath, so you still do not need to clean up explicitly.
diff --git a/docs/atl-mfc-shared/cstring-operations-relating-to-c-style-strings.md b/docs/atl-mfc-shared/cstring-operations-relating-to-c-style-strings.md
index c90c04bf1b1..8629690cd0a 100644
--- a/docs/atl-mfc-shared/cstring-operations-relating-to-c-style-strings.md
+++ b/docs/atl-mfc-shared/cstring-operations-relating-to-c-style-strings.md
@@ -3,10 +3,11 @@ description: "Learn more about: CString Operations Relating to C-Style Strings"
title: "CString Operations Relating to C-Style Strings"
ms.date: "11/04/2016"
helpviewer_keywords: ["CString objects, basic operations", "MFC [C++], string handling class", "string conversion [C++], C-style strings", "strings [C++], string operations", "standard run-time library string functions", "null values, Null-terminated string conversion", "string functions", "strings [C++], in C", "string arguments", "C-style strings", "strings [C++], class CString", "casting CString objects"]
-ms.assetid: 5048de8a-5298-4891-b8a0-c554b5a3ac1b
---
# `CString` Operations Relating to C-Style Strings
+[!INCLUDE[product-lifecycle-status](./includes/lifecycle-note.md)]
+
A [`CString`](../atl-mfc-shared/using-cstring.md) object contains character string data. `CString` inherits the set of the [methods and operators](../atl-mfc-shared/reference/cstringt-class.md) that are defined in the class template [`CStringT`](../atl-mfc-shared/reference/cstringt-class.md) to work with string data. (`CString` is a **`typedef`** that specializes `CStringT` to work with the kind of character data that `CString` supports.)
`CString` does not store character data internally as a C-style null-terminated string. Instead, `CString` tracks the length of character data so that it can more securely watch the data and the space it requires.
diff --git a/docs/atl-mfc-shared/cstring-semantics.md b/docs/atl-mfc-shared/cstring-semantics.md
index a8b283511b6..a978cc1e251 100644
--- a/docs/atl-mfc-shared/cstring-semantics.md
+++ b/docs/atl-mfc-shared/cstring-semantics.md
@@ -3,10 +3,11 @@ description: "Learn more about: CString Semantics"
title: "CString Semantics"
ms.date: "11/04/2016"
helpviewer_keywords: ["semantics in Cstring", "CString objects, assignment semantics", "assignment statements, assigning CString objects"]
-ms.assetid: d4023480-526f-499a-85f6-324b4de5b85f
---
# CString Semantics
+[!INCLUDE[product-lifecycle-status](./includes/lifecycle-note.md)]
+
Even though [CString](../atl-mfc-shared/reference/cstringt-class.md) objects are dynamic objects that can grow, they act like built-in primitive types and simple classes. Each `CString` object represents a unique value. `CString` objects should be thought of as the actual strings rather than as pointers to strings.
You can assign one `CString` object to another. However, when you modify one of the two `CString` objects, the other `CString` object is not modified, as shown by the following example:
diff --git a/docs/atl-mfc-shared/date-and-time.md b/docs/atl-mfc-shared/date-and-time.md
index 6285d86cb2f..9f7eec080cc 100644
--- a/docs/atl-mfc-shared/date-and-time.md
+++ b/docs/atl-mfc-shared/date-and-time.md
@@ -6,6 +6,8 @@ helpviewer_keywords: ["time, MFC programming", "time", "MFC, date and time", "da
---
# Date and Time
+[!INCLUDE[product-lifecycle-status](./includes/lifecycle-note.md)]
+
MFC supports several different ways of working with dates and times:
- Support for the Automation [`DATE` data type](../atl-mfc-shared/date-type.md). `DATE` supports date, time, and date/time values. The [`COleDateTime`](../atl-mfc-shared/reference/coledatetime-class.md) and [`COleDateTimeSpan`](../atl-mfc-shared/reference/coledatetimespan-class.md) classes encapsulate this functionality. They work with the [`COleVariant`](../mfc/reference/colevariant-class.md) class using Automation support.
diff --git a/docs/atl-mfc-shared/date-type.md b/docs/atl-mfc-shared/date-type.md
index 51909869c5b..6c9e9c6c7fb 100644
--- a/docs/atl-mfc-shared/date-type.md
+++ b/docs/atl-mfc-shared/date-type.md
@@ -4,10 +4,11 @@ title: "DATE Type"
ms.date: "11/04/2016"
f1_keywords: ["DATE"]
helpviewer_keywords: ["Date data type, implementing", "Date data type", "DATE type", "Date data type, about Date data type", "MFC, date and time", "hour values representation"]
-ms.assetid: 695853ed-b614-4575-b793-b8c287372038
---
# DATE Type
+[!INCLUDE[product-lifecycle-status](./includes/lifecycle-note.md)]
+
The DATE type is implemented using an 8-byte floating-point number. Days are represented by whole number increments starting with 30 December 1899, midnight as time zero. Hour values are expressed as the absolute value of the fractional part of the number. The following table illustrates several dates along with their DATE type numeric equivalent:
|Date and time|Representation|
diff --git a/docs/atl-mfc-shared/exporting-string-classes-using-cstringt.md b/docs/atl-mfc-shared/exporting-string-classes-using-cstringt.md
index 3e5b794a885..c8e98da7fe7 100644
--- a/docs/atl-mfc-shared/exporting-string-classes-using-cstringt.md
+++ b/docs/atl-mfc-shared/exporting-string-classes-using-cstringt.md
@@ -3,10 +3,11 @@ description: "Learn more about: Exporting String Classes Using CStringT"
title: "Exporting String Classes Using CStringT"
ms.date: "11/04/2016"
helpviewer_keywords: ["CStringT class, exporting strings"]
-ms.assetid: bdfc441e-8d2a-461c-9885-46178066c09f
---
# Exporting String Classes Using CStringT
+[!INCLUDE[product-lifecycle-status](./includes/lifecycle-note.md)]
+
In the past, MFC developers have derived from `CString` to specialize their own string classes. In Microsoft Visual C++.NET (MFC 8.0), the [CString](../atl-mfc-shared/using-cstring.md) class was superseded by a template class called [CStringT](../atl-mfc-shared/reference/cstringt-class.md). This provided several benefits:
- It allowed the MFC `CString` class to be used in ATL projects without linking in the larger MFC static library or DLL.
diff --git a/docs/atl-mfc-shared/implementation-of-a-custom-string-manager-advanced-method.md b/docs/atl-mfc-shared/implementation-of-a-custom-string-manager-advanced-method.md
index 55fe40e157f..0ea1922d71c 100644
--- a/docs/atl-mfc-shared/implementation-of-a-custom-string-manager-advanced-method.md
+++ b/docs/atl-mfc-shared/implementation-of-a-custom-string-manager-advanced-method.md
@@ -3,10 +3,11 @@ description: "Learn more about: Implementation of a Custom String Manager (Advan
title: "Implementation of a Custom String Manager (Advanced Method)"
ms.date: "11/04/2016"
helpviewer_keywords: ["IAtlStringMgr class, using"]
-ms.assetid: 64ab7da9-47c1-4c4a-9cd7-4cc37e7f3f57
---
# Implementation of a Custom String Manager (Advanced Method)
+[!INCLUDE[product-lifecycle-status](./includes/lifecycle-note.md)]
+
In specialized situations, you might want to implement a custom string manager that does more than just change which heap is used to allocate memory. In this situation, you must manually implement the [IAtlStringMgr](../atl-mfc-shared/reference/iatlstringmgr-class.md) interface as your custom string manager.
In order to do this, it is important to first understand how [CStringT](../atl-mfc-shared/reference/cstringt-class.md) uses that interface to manage its string data. Every instance of `CStringT` has a pointer to a [CStringData](../atl-mfc-shared/reference/cstringdata-class.md) structure. This variable-length structure contains important information about the string (such as length), as well as the actual character data for the string. Every custom string manager is responsible for allocating and freeing these structures at the request of `CStringT`.
diff --git a/docs/atl-mfc-shared/implementation-of-a-custom-string-manager-basic-method.md b/docs/atl-mfc-shared/implementation-of-a-custom-string-manager-basic-method.md
index 2e91251aaa2..ff0ead0d8cd 100644
--- a/docs/atl-mfc-shared/implementation-of-a-custom-string-manager-basic-method.md
+++ b/docs/atl-mfc-shared/implementation-of-a-custom-string-manager-basic-method.md
@@ -3,10 +3,11 @@ description: "Learn more about: Implementation of a Custom String Manager (Basic
title: "Implementation of a Custom String Manager (Basic Method)"
ms.date: "11/04/2016"
helpviewer_keywords: ["IAtlStringMgr class, using"]
-ms.assetid: eac5d13e-cbb4-4e82-b01e-f5f2dbcb962a
---
# Implementation of a Custom String Manager (Basic Method)
+[!INCLUDE[product-lifecycle-status](./includes/lifecycle-note.md)]
+
The easiest way to customize the memory allocation scheme for string data is to use the ATL-provided `CAtlStringMgr` class but provide your own memory allocation routines. The constructor for `CAtlStringMgr` takes a single parameter: a pointer to an `IAtlMemMgr` object. `IAtlMemMgr` is an abstract base class that provides a generic interface to a heap. Using the `IAtlMemMgr` interface, the `CAtlStringMgr` allocates, reallocates, and frees the memory used to store string data. You can either implement the `IAtlMemMgr` interface yourself, or use one of the five ATL-provided memory manager classes. The ATL-provided memory managers simply wrap existing memory allocation facilities:
- [CCRTHeap](../atl/reference/ccrtheap-class.md) Wraps the standard CRT heap functions ([malloc](../c-runtime-library/reference/malloc.md), [free](../c-runtime-library/reference/free.md), and [realloc](../c-runtime-library/reference/realloc.md))
diff --git a/docs/atl-mfc-shared/includes/lifecycle-note.md b/docs/atl-mfc-shared/includes/lifecycle-note.md
new file mode 100644
index 00000000000..6725bfc524e
--- /dev/null
+++ b/docs/atl-mfc-shared/includes/lifecycle-note.md
@@ -0,0 +1,2 @@
+>[!NOTE]
+> The Microsoft Foundation Classes (MFC) library and Active Template Library (ATL) continue to be supported. However, we're no longer adding features or updating the documentation.
\ No newline at end of file
diff --git a/docs/atl-mfc-shared/memory-management-with-cstringt.md b/docs/atl-mfc-shared/memory-management-with-cstringt.md
index c0df6f2ceb3..104e67a46e7 100644
--- a/docs/atl-mfc-shared/memory-management-with-cstringt.md
+++ b/docs/atl-mfc-shared/memory-management-with-cstringt.md
@@ -3,10 +3,11 @@ description: "Learn more about: Memory Management with CStringT"
title: "Memory Management with CStringT"
ms.date: "11/04/2016"
helpviewer_keywords: ["CString objects, memory management", "memory [C++], usage", "IAtlStringMgr class, using", "strings [C++], custom memory management", "CFixedStringT class, description of", "strings [C++], memory management", "CStringT class, memory management"]
-ms.assetid: 88b8342d-19b5-48c4-9cf6-e4c44cece21e
---
# Memory Management with CStringT
+[!INCLUDE[product-lifecycle-status](./includes/lifecycle-note.md)]
+
Class [CStringT](../atl-mfc-shared/reference/cstringt-class.md) is a template class used to manipulate variable-length character strings. The memory to hold these strings is allocated and released through a string manager object, associated with each instance of `CStringT`. MFC and ATL provide default instantiations of `CStringT`, called `CString`, `CStringA`, and `CStringW`, which manipulate strings of different character types. These character types are of type TCHAR, **`char`**, and **`wchar_t`**, respectively. These default string types use a string manager that allocates memory from the process heap (in ATL) or the CRT heap (in MFC). For typical applications, this memory allocation scheme is sufficient. However, for code making intensive use of strings (or multithreaded code) the default memory managers may not perform optimally. This topic describes how to override the default memory management behavior of `CStringT`, creating allocators specifically optimized for the task at hand.
- [Implementation of a Custom String Manager (Basic Method)](../atl-mfc-shared/implementation-of-a-custom-string-manager-basic-method.md)
diff --git a/docs/atl-mfc-shared/reference/cfiletime-class.md b/docs/atl-mfc-shared/reference/cfiletime-class.md
index 35d7d8dc48e..abc271c7199 100644
--- a/docs/atl-mfc-shared/reference/cfiletime-class.md
+++ b/docs/atl-mfc-shared/reference/cfiletime-class.md
@@ -4,10 +4,11 @@ title: "CFileTime class"
ms.date: "10/18/2018"
f1_keywords: ["CFileTime", "ATLTIME/ATL::CFileTime", "ATLTIME/ATL::CFileTime::CFileTime", "ATLTIME/ATL::CFileTime::GetCurrentTime", "ATLTIME/ATL::CFileTime::GetTime", "ATLTIME/ATL::CFileTime::LocalToUTC", "ATLTIME/ATL::CFileTime::SetTime", "ATLTIME/ATL::CFileTime::UTCToLocal", "ATLTIME/ATL::CFileTime::Day", "ATLTIME/ATL::CFileTime::Hour", "ATLTIME/ATL::CFileTime::Millisecond", "ATLTIME/ATL::CFileTime::Minute", "ATLTIME/ATL::CFileTime::Second", "ATLTIME/ATL::CFileTime::Week"]
helpviewer_keywords: ["CFileTime class", "shared classes, CFileTime"]
-ms.assetid: 1a358a65-1383-4124-b0d4-59b026e6860f
---
# `CFileTime` class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for managing the date and time values associated with a file.
## Syntax
diff --git a/docs/atl-mfc-shared/reference/cfiletimespan-class.md b/docs/atl-mfc-shared/reference/cfiletimespan-class.md
index 62a26f382ec..b972803f581 100644
--- a/docs/atl-mfc-shared/reference/cfiletimespan-class.md
+++ b/docs/atl-mfc-shared/reference/cfiletimespan-class.md
@@ -4,10 +4,11 @@ description: "The Active Template Library (ATL) and Microsoft Foundation Classes
ms.date: "01/10/2020"
f1_keywords: ["CFileTimeSpan", "ATLTIME/ATL::CFileTimeSpan", "ATLTIME/ATL::CFileTimeSpan::CFileTimeSpan", "ATLTIME/ATL::CFileTimeSpan::GetTimeSpan", "ATLTIME/ATL::CFileTimeSpan::SetTimeSpan"]
helpviewer_keywords: ["shared classes, CFileTimeSpan", "CFileTimeSpan class"]
-ms.assetid: 5856fb39-9c82-4027-8ccf-8760890491ec
---
# `CFileTimeSpan` class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for managing relative date and time values associated with a file.
## Syntax
diff --git a/docs/atl-mfc-shared/reference/cfixedstringt-class.md b/docs/atl-mfc-shared/reference/cfixedstringt-class.md
index c236dcb8d4d..6109dc0c1a6 100644
--- a/docs/atl-mfc-shared/reference/cfixedstringt-class.md
+++ b/docs/atl-mfc-shared/reference/cfixedstringt-class.md
@@ -4,10 +4,11 @@ title: "CFixedStringT Class"
ms.date: "03/27/2019"
f1_keywords: ["CFixedStringT", "CSTRINGT/ATL::CFixedStringT", "CSTRINGT/ATL::CFixedStringT::CFixedStringT"]
helpviewer_keywords: ["CFixedStringT class", "shared classes, CFixedStringT"]
-ms.assetid: 6d4171ba-3104-493a-a6cc-d515f4ba9a4b
---
# CFixedStringT Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class represents a string object with a fixed character buffer.
## Syntax
diff --git a/docs/atl-mfc-shared/reference/cimage-class.md b/docs/atl-mfc-shared/reference/cimage-class.md
index d355d0f27a4..311a44e2811 100644
--- a/docs/atl-mfc-shared/reference/cimage-class.md
+++ b/docs/atl-mfc-shared/reference/cimage-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["jpeg files", "bitmaps [C++], ATL and MFC support for", "i
---
# `CImage` Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
`CImage` provides enhanced bitmap support, including the ability to load and save images in JPEG, GIF, BMP, and Portable Network Graphics (PNG) formats.
> [!IMPORTANT]
diff --git a/docs/atl-mfc-shared/reference/classes-shared-by-mfc-and-atl.md b/docs/atl-mfc-shared/reference/classes-shared-by-mfc-and-atl.md
index bbcb2af0790..6fb01f6e90c 100644
--- a/docs/atl-mfc-shared/reference/classes-shared-by-mfc-and-atl.md
+++ b/docs/atl-mfc-shared/reference/classes-shared-by-mfc-and-atl.md
@@ -3,10 +3,11 @@ description: "Learn more about: Classes Shared by MFC and ATL"
title: "Classes Shared by MFC and ATL"
ms.date: "11/04/2016"
helpviewer_keywords: ["shared classes, classes"]
-ms.assetid: ca8b4b6b-744d-430b-b31f-d5b2f17bf210
---
# Classes Shared by MFC and ATL
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
The following table lists the classes shared between MFC and ATL.
|Class|Description|Header file|
diff --git a/docs/atl-mfc-shared/reference/coledatetime-class.md b/docs/atl-mfc-shared/reference/coledatetime-class.md
index 5da193d9b93..98a888a14f1 100644
--- a/docs/atl-mfc-shared/reference/coledatetime-class.md
+++ b/docs/atl-mfc-shared/reference/coledatetime-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["shared classes, COleDateTime", "time-only values", "Date
---
# COleDateTime Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Encapsulates the `DATE` data type that is used in OLE automation.
## Syntax
diff --git a/docs/atl-mfc-shared/reference/coledatetimespan-class.md b/docs/atl-mfc-shared/reference/coledatetimespan-class.md
index 491074bbae3..04701fb7ddc 100644
--- a/docs/atl-mfc-shared/reference/coledatetimespan-class.md
+++ b/docs/atl-mfc-shared/reference/coledatetimespan-class.md
@@ -4,10 +4,11 @@ title: "COleDateTimeSpan Class"
ms.date: "03/27/2019"
f1_keywords: ["COleDateTimeSpan", "ATLCOMTIME/ATL::COleDateTimeSpan", "ATLCOMTIME/ATL::COleDateTimeSpan::COleDateTimeSpan", "ATLCOMTIME/ATL::COleDateTimeSpan::Format", "ATLCOMTIME/ATL::COleDateTimeSpan::GetDays", "ATLCOMTIME/ATL::COleDateTimeSpan::GetHours", "ATLCOMTIME/ATL::COleDateTimeSpan::GetMinutes", "ATLCOMTIME/ATL::COleDateTimeSpan::GetSeconds", "ATLCOMTIME/ATL::COleDateTimeSpan::GetStatus", "ATLCOMTIME/ATL::COleDateTimeSpan::GetTotalDays", "ATLCOMTIME/ATL::COleDateTimeSpan::GetTotalHours", "ATLCOMTIME/ATL::COleDateTimeSpan::GetTotalMinutes", "ATLCOMTIME/ATL::COleDateTimeSpan::GetTotalSeconds", "ATLCOMTIME/ATL::COleDateTimeSpan::SetDateTimeSpan", "ATLCOMTIME/ATL::COleDateTimeSpan::SetStatus", "ATLCOMTIME/ATL::COleDateTimeSpan::m_span", "ATLCOMTIME/ATL::COleDateTimeSpan::m_status"]
helpviewer_keywords: ["timespan", "time span", "shared classes, COleDateTimeSpan", "Date data type, MFC encapsulation of", "COleDateTimeSpan class"]
-ms.assetid: 7441526d-a30a-4019-8fb3-3fee6f897cbe
---
# COleDateTimeSpan Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Represents a relative time, a time span.
## Syntax
diff --git a/docs/atl-mfc-shared/reference/cpoint-class.md b/docs/atl-mfc-shared/reference/cpoint-class.md
index 1636a18f6dd..d153efe18e5 100644
--- a/docs/atl-mfc-shared/reference/cpoint-class.md
+++ b/docs/atl-mfc-shared/reference/cpoint-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["LPPOINT structure", "POINT structure", "CPoint class"]
---
# `CPoint` Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Similar to the Windows `POINT` structure.
## Syntax
diff --git a/docs/atl-mfc-shared/reference/crect-class.md b/docs/atl-mfc-shared/reference/crect-class.md
index a213a9fcb66..2ccae83333a 100644
--- a/docs/atl-mfc-shared/reference/crect-class.md
+++ b/docs/atl-mfc-shared/reference/crect-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["LPCRECT data type", "CRect class", "LPRECT operator", "RE
---
# `CRect` Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Similar to a Windows [`RECT`](/windows/win32/api/windef/ns-windef-rect) structure.
## Syntax
diff --git a/docs/atl-mfc-shared/reference/csimplestringt-class.md b/docs/atl-mfc-shared/reference/csimplestringt-class.md
index b62a850efa1..cda69f67bea 100644
--- a/docs/atl-mfc-shared/reference/csimplestringt-class.md
+++ b/docs/atl-mfc-shared/reference/csimplestringt-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["shared classes, CSimpleStringT", "strings [C++], ATL clas
---
# `CSimpleStringT` Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class represents a `CSimpleStringT` object.
## Syntax
diff --git a/docs/atl-mfc-shared/reference/csize-class.md b/docs/atl-mfc-shared/reference/csize-class.md
index f398b5055da..458de4f0ed0 100644
--- a/docs/atl-mfc-shared/reference/csize-class.md
+++ b/docs/atl-mfc-shared/reference/csize-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["SIZE", "dimensions, MFC", "dimensions", "CSize class"]
---
# CSize Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Similar to the Windows [SIZE](/windows/win32/api/windef/ns-windef-size) structure, which implements a relative coordinate or position.
## Syntax
diff --git a/docs/atl-mfc-shared/reference/cstrbuft-class.md b/docs/atl-mfc-shared/reference/cstrbuft-class.md
index 4cc53bfee59..ed385faa03d 100644
--- a/docs/atl-mfc-shared/reference/cstrbuft-class.md
+++ b/docs/atl-mfc-shared/reference/cstrbuft-class.md
@@ -4,10 +4,11 @@ title: "CStrBufT Class"
ms.date: "10/18/2018"
f1_keywords: ["CStrBufT", "ATLSIMPSTR/ATL::CStrBufT", "ATLSIMPSTR/ATL::CStrBufT::CStrBufT", "ATLSIMPSTR/ATL::CStrBufT::SetLength", "ATLSIMPSTR/ATL::CStrBufT::AUTO_LENGTH", "ATLSIMPSTR/ATL::CStrBufT::SET_LENGTH"]
helpviewer_keywords: ["strings [C++], custom memory management", "CStrBufT class", "shared classes, CStrBufT"]
-ms.assetid: 6b50fa8f-87e8-4ed4-a229-157ce128710f
---
# CStrBufT Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides automatic resource cleanup for `GetBuffer` and `ReleaseBuffer` calls on an existing `CStringT` object.
## Syntax
diff --git a/docs/atl-mfc-shared/reference/cstringdata-class.md b/docs/atl-mfc-shared/reference/cstringdata-class.md
index 2755f5e8ab1..8db5939672f 100644
--- a/docs/atl-mfc-shared/reference/cstringdata-class.md
+++ b/docs/atl-mfc-shared/reference/cstringdata-class.md
@@ -4,10 +4,11 @@ title: "CStringData Class"
ms.date: "11/04/2016"
f1_keywords: ["CStringData", "ATLSIMPSTR/ATL::CStringData", "ATLSIMPSTR/ATL::AddRef", "ATLSIMPSTR/ATL::data", "ATLSIMPSTR/ATL::IsLocked", "ATLSIMPSTR/ATL::IsShared", "ATLSIMPSTR/ATL::Lock", "ATLSIMPSTR/ATL::Release", "ATLSIMPSTR/ATL::Unlock", "ATLSIMPSTR/ATL::nAllocLength", "ATLSIMPSTR/ATL::nDataLength", "ATLSIMPSTR/ATL::nRefs", "ATLSIMPSTR/ATL::pStringMgr"]
helpviewer_keywords: ["CStringData class", "shared classes, CStringData"]
-ms.assetid: 4e31b5ca-3dbe-4fd5-b692-8211fbfb2593
---
# CStringData Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class represents the data of a string object.
## Syntax
diff --git a/docs/atl-mfc-shared/reference/cstringt-class.md b/docs/atl-mfc-shared/reference/cstringt-class.md
index a47c9ad9a69..d22cac3373a 100644
--- a/docs/atl-mfc-shared/reference/cstringt-class.md
+++ b/docs/atl-mfc-shared/reference/cstringt-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["strings [C++], in ATL", "shared classes, CStringT", "CStr
---
# `CStringT` Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class represents a **`CStringT`** object.
## Syntax
diff --git a/docs/atl-mfc-shared/reference/ctime-class.md b/docs/atl-mfc-shared/reference/ctime-class.md
index 067db91b524..9c5623b02f3 100644
--- a/docs/atl-mfc-shared/reference/ctime-class.md
+++ b/docs/atl-mfc-shared/reference/ctime-class.md
@@ -4,10 +4,11 @@ title: "CTime Class"
ms.date: "10/18/2018"
f1_keywords: ["ATLTIME/ATL::CTime", "ATLTIME/ATL::CTime::CTime", "ATLTIME/ATL::CTime::Format", "ATLTIME/ATL::CTime::FormatGmt", "ATLTIME/ATL::CTime::GetAsDBTIMESTAMP", "ATLTIME/ATL::CTime::GetAsSystemTime", "ATLTIME/ATL::CTime::GetCurrentTime", "ATLTIME/ATL::CTime::GetDay", "ATLTIME/ATL::CTime::GetDayOfWeek", "ATLTIME/ATL::CTime::GetGmtTm", "ATLTIME/ATL::CTime::GetHour", "ATLTIME/ATL::CTime::GetLocalTm", "ATLTIME/ATL::CTime::GetMinute", "ATLTIME/ATL::CTime::GetMonth", "ATLTIME/ATL::CTime::GetSecond", "ATLTIME/ATL::CTime::GetTime", "ATLTIME/ATL::CTime::GetYear", "ATLTIME/ATL::CTime::Serialize64"]
helpviewer_keywords: ["CTime class", "shared classes, CTime"]
-ms.assetid: 0a299544-485b-48dc-9d3c-fdc30f57d612
---
# CTime Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Represents an absolute time and date.
## Syntax
diff --git a/docs/atl-mfc-shared/reference/ctimespan-class.md b/docs/atl-mfc-shared/reference/ctimespan-class.md
index ae10bdba1cf..df669d06353 100644
--- a/docs/atl-mfc-shared/reference/ctimespan-class.md
+++ b/docs/atl-mfc-shared/reference/ctimespan-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["elapsed time, CTimeSpan object", "timespan", "time span",
---
# `CTimeSpan` Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
An amount of time, which is internally stored as the number of seconds in the time span.
## Syntax
diff --git a/docs/atl-mfc-shared/reference/iatlstringmgr-class.md b/docs/atl-mfc-shared/reference/iatlstringmgr-class.md
index 9eb991ca286..c94ac02b615 100644
--- a/docs/atl-mfc-shared/reference/iatlstringmgr-class.md
+++ b/docs/atl-mfc-shared/reference/iatlstringmgr-class.md
@@ -4,10 +4,11 @@ title: "IAtlStringMgr Class"
ms.date: "10/18/2018"
f1_keywords: ["IAtlStringMgr", "ATLSIMPSTR/ATL::IAtlStringMgr", "ATLSIMPSTR/ATL::Allocate", "ATLSIMPSTR/ATL::Clone", "ATLSIMPSTR/ATL::Free", "ATLSIMPSTR/ATL::GetNilString", "ATLSIMPSTR/ATL::Reallocate"]
helpviewer_keywords: ["shared classes, IAtlStringMgr", "memory, managing", "IAtlStringMgr class"]
-ms.assetid: 722f0346-a770-4aa7-8f94-177be8dba823
---
# IAtlStringMgr Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class represents the interface to a `CStringT` memory manager.
## Syntax
diff --git a/docs/atl-mfc-shared/string-data-management.md b/docs/atl-mfc-shared/string-data-management.md
index b48c6a636da..c30b096c6ec 100644
--- a/docs/atl-mfc-shared/string-data-management.md
+++ b/docs/atl-mfc-shared/string-data-management.md
@@ -6,6 +6,8 @@ helpviewer_keywords: ["Unicode, string objects"]
---
# String Data Management
+[!INCLUDE[product-lifecycle-status](./includes/lifecycle-note.md)]
+
Visual C++ provides several ways to manage string data:
- [String Manipulation](../c-runtime-library/string-manipulation-crt.md) for working with C-style `NULL`-terminated strings
diff --git a/docs/atl-mfc-shared/strings-atl-mfc.md b/docs/atl-mfc-shared/strings-atl-mfc.md
index 1c0b4515fa4..a497b8ec3a7 100644
--- a/docs/atl-mfc-shared/strings-atl-mfc.md
+++ b/docs/atl-mfc-shared/strings-atl-mfc.md
@@ -6,6 +6,8 @@ helpviewer_keywords: ["const char pointers", "strings [C++], in ATL", "MFC [C++]
---
# Strings (ATL/MFC)
+[!INCLUDE[product-lifecycle-status](./includes/lifecycle-note.md)]
+
Nearly all programs work with string data. Visual C++ provides several ways to manage this string data.
## In This Section
diff --git a/docs/atl-mfc-shared/unicode-and-multibyte-character-set-mbcs-support.md b/docs/atl-mfc-shared/unicode-and-multibyte-character-set-mbcs-support.md
index 2ba1928aa64..b6ca21a7e14 100644
--- a/docs/atl-mfc-shared/unicode-and-multibyte-character-set-mbcs-support.md
+++ b/docs/atl-mfc-shared/unicode-and-multibyte-character-set-mbcs-support.md
@@ -6,6 +6,8 @@ helpviewer_keywords: ["MFC [C++], character set support", "MBCS [C++], strings a
---
# Unicode and Multibyte Character Set (MBCS) Support
+[!INCLUDE[product-lifecycle-status](./includes/lifecycle-note.md)]
+
Some languages, for example, Japanese and Chinese, have large character sets. To support programming for these markets, the Microsoft Foundation Class Library (MFC) enables two different approaches to handling large character sets:
- [Unicode](#mfc-support-for-unicode-strings), **`wchar_t`** based wide-characters, and strings encoded as UTF-16.
diff --git a/docs/atl-mfc-shared/using-cstring.md b/docs/atl-mfc-shared/using-cstring.md
index f6a99466fcc..829888fc125 100644
--- a/docs/atl-mfc-shared/using-cstring.md
+++ b/docs/atl-mfc-shared/using-cstring.md
@@ -3,10 +3,11 @@ description: "Learn more about: Using CString"
title: "Using CString"
ms.date: "06/18/2018"
helpviewer_keywords: ["CString objects, C++ string manipulation", "CString objects, reference counting", "CString class (Visual C++)"]
-ms.assetid: ed018aaf-8b10-46f9-828c-f9c092dc7609
---
# Using `CString`
+[!INCLUDE[product-lifecycle-status](./includes/lifecycle-note.md)]
+
The topics in this section describe how to program with `CString`. For reference documentation about the `CString` class, see the documentation for [`CStringT`](../atl-mfc-shared/reference/cstringt-class.md).
To use `CString`, include the `atlstr.h` header.
diff --git a/docs/atl-mfc-shared/using-cstringt.md b/docs/atl-mfc-shared/using-cstringt.md
index e7232579f8a..6e322077aef 100644
--- a/docs/atl-mfc-shared/using-cstringt.md
+++ b/docs/atl-mfc-shared/using-cstringt.md
@@ -3,10 +3,11 @@ description: "Learn more about: Using CStringT"
title: "Using CStringT"
ms.date: "11/04/2016"
helpviewer_keywords: ["CStringT class, using"]
-ms.assetid: 3a9fffb1-6f90-482a-ab69-4003e6084cb5
---
# Using CStringT
+[!INCLUDE[product-lifecycle-status](./includes/lifecycle-note.md)]
+
The topics in this section describe programming using the template class [CStringT](../atl-mfc-shared/reference/cstringt-class.md).
## In This Section
diff --git a/docs/atl/active-template-library-atl-concepts.md b/docs/atl/active-template-library-atl-concepts.md
index cda405159a6..ba5f6335bbc 100644
--- a/docs/atl/active-template-library-atl-concepts.md
+++ b/docs/atl/active-template-library-atl-concepts.md
@@ -3,11 +3,12 @@ description: "Learn more about: Active Template Library (ATL) Concepts"
title: "Active Template Library (ATL) Concepts"
ms.date: "05/06/2019"
helpviewer_keywords: ["ATL, about ATL"]
-ms.assetid: a3960991-4d76-4da5-9568-3fa7fde53ff4
ms.topic: concept-article
---
# Active Template Library (ATL) Concepts
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The Active Template Library (ATL) is a set of template-based C++ classes that let you create small, fast Component Object Model (COM) objects. It has special support for key COM features, including stock implementations, dual interfaces, standard COM enumerator interfaces, connection points, tear-off interfaces, and ActiveX controls.
If you do a lot of ATL programming, you will want to learn more about COM and .NET attributes, which is designed to simplify COM programming. For more information, see [Attributed Programming](../windows/attributes/cpp-attributes-com-net.md). (COM and .NET attributes are not to be confused with the \[\[attribute]] feature in the C++ standard.)
diff --git a/docs/atl/active-template-library-atl-tutorial.md b/docs/atl/active-template-library-atl-tutorial.md
index 2a9841ea00c..e8054c8897f 100644
--- a/docs/atl/active-template-library-atl-tutorial.md
+++ b/docs/atl/active-template-library-atl-tutorial.md
@@ -4,11 +4,12 @@ description: "Create an ActiveX control using Microsoft C++ and the Active Templ
ms.custom: "get-started-article"
ms.date: "05/03/2019"
helpviewer_keywords: ["ATL projects, tutorials", "controls [ATL], tutorials", "ATL tutorial", "tutorials [ATL]", "ATL, tutorials"]
-ms.assetid: f921a121-09c8-4812-9317-e15b2f1471fa
ms.topic: tutorial
---
# Active Template Library (ATL) Tutorial
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
ATL is designed to simplify the process of creating efficient, flexible, lightweight controls. This tutorial leads you through the creation of an ActiveX control, demonstrating many ATL and COM fundamentals.
By following this tutorial, you will learn how to add a control to an ATL project that draws a circle and a filled polygon. You will then add a property to indicate how many sides the polygon will have and create drawing code for updating the control when the property changes. The control will then be displayed on a Web page using some VBScript to make it respond to events.
diff --git a/docs/atl/adding-a-control-atl-tutorial-part-2.md b/docs/atl/adding-a-control-atl-tutorial-part-2.md
index 668cb2039f1..f0cdb0d25aa 100644
--- a/docs/atl/adding-a-control-atl-tutorial-part-2.md
+++ b/docs/atl/adding-a-control-atl-tutorial-part-2.md
@@ -3,11 +3,12 @@ description: "Learn more about: Adding a Control (ATL Tutorial, Part 2)"
title: "Adding a Control (ATL Tutorial, Part 2)"
ms.custom: "get-started-article"
ms.date: "08/19/2019"
-ms.assetid: c9575a75-1064-41f1-9697-7aada560c669
ms.topic: tutorial
---
# Adding a Control (ATL Tutorial, Part 2)
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
In this step, you add a control to your project, build it, and test it on a Web page.
## Procedures
diff --git a/docs/atl/adding-a-property-page-atl-tutorial-part-6.md b/docs/atl/adding-a-property-page-atl-tutorial-part-6.md
index 394d9aff8da..1d169bed706 100644
--- a/docs/atl/adding-a-property-page-atl-tutorial-part-6.md
+++ b/docs/atl/adding-a-property-page-atl-tutorial-part-6.md
@@ -3,11 +3,12 @@ description: "Learn more about: Adding a Property Page (ATL Tutorial, Part 6)"
title: "Adding a Property Page (ATL Tutorial, Part 6)"
ms.custom: "get-started-article"
ms.date: "09/27/2018"
-ms.assetid: df80d255-e7ea-49d9-b940-3f012e90cf9b
ms.topic: tutorial
---
# Adding a Property Page (ATL Tutorial, Part 6)
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
> [!NOTE]
> The ATL OLE DB Provider wizard is not available in Visual Studio 2019 and later.
diff --git a/docs/atl/adding-a-property-to-the-control-atl-tutorial-part-3.md b/docs/atl/adding-a-property-to-the-control-atl-tutorial-part-3.md
index 839a2653ed1..852dd925637 100644
--- a/docs/atl/adding-a-property-to-the-control-atl-tutorial-part-3.md
+++ b/docs/atl/adding-a-property-to-the-control-atl-tutorial-part-3.md
@@ -3,11 +3,12 @@ description: "Learn more about: Adding a Property to the Control (ATL Tutorial,
title: "Adding a Property to the Control (ATL Tutorial, Part 3)"
ms.custom: "get-started-article"
ms.date: "09/26/2018"
-ms.assetid: f775fe34-103b-4f07-9999-400e987ee030
ms.topic: tutorial
---
# Adding a Property to the Control (ATL Tutorial, Part 3)
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
`IPolyCtl` is the interface that contains the control's custom methods and properties, and you will add a property to it.
### To add the property definitions to your project
diff --git a/docs/atl/adding-an-atl-message-handler.md b/docs/atl/adding-an-atl-message-handler.md
index ee2243126a9..178eb55484c 100644
--- a/docs/atl/adding-an-atl-message-handler.md
+++ b/docs/atl/adding-an-atl-message-handler.md
@@ -3,11 +3,12 @@ description: "Learn more about: Adding an ATL Message Handler"
title: "Adding an ATL Message Handler"
ms.date: "11/04/2016"
helpviewer_keywords: ["message handlers [C++]", "ATL, windows", "message handling [C++], ATL message handler", "windows [C++], ATL", "ATL, message handlers"]
-ms.assetid: cdea38a1-0d9b-4f8d-bbd5-b4f063fb3eeb
ms.topic: concept-article
---
# Adding an ATL Message Handler
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
To add a message handler (a member function that handles Windows messages) to a control, first select the control in the Class View. Then open the **Properties** window, select the **Messages** icon, and click the drop-down control in the box opposite the required message. This will add a declaration for the message handler in the control's header file and a skeleton implementation of the handler in the control's .cpp file. It will also add the message map and add an entry for the handler.
Adding a message handler in ATL is similar to adding a message handler to an MFC class. See [Adding an MFC Message Handler](../mfc/reference/adding-an-mfc-message-handler.md) for more information.
diff --git a/docs/atl/adding-an-event-atl-tutorial-part-5.md b/docs/atl/adding-an-event-atl-tutorial-part-5.md
index 48d9ef8f01d..ed1690d4df0 100644
--- a/docs/atl/adding-an-event-atl-tutorial-part-5.md
+++ b/docs/atl/adding-an-event-atl-tutorial-part-5.md
@@ -3,11 +3,12 @@ description: "Learn more about: Adding an Event (ATL Tutorial, Part 5)"
title: "Adding an Event (ATL Tutorial, Part 5)"
ms.custom: "get-started-article"
ms.date: "09/27/2018"
-ms.assetid: 2de12022-3148-4ce3-8606-8a9d4274f0e9
ms.topic: tutorial
---
# Adding an Event (ATL Tutorial, Part 5)
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
In this step, you will add a `ClickIn` and a `ClickOut` event to your ATL control. You will fire the `ClickIn` event if the user clicks within the polygon and fire `ClickOut` if the user clicks outside. The tasks to add an event are as follows:
- Adding the `ClickIn` and `ClickOut` methods
diff --git a/docs/atl/adding-connection-points-to-an-object.md b/docs/atl/adding-connection-points-to-an-object.md
index d2564c44cd6..732d3688c9c 100644
--- a/docs/atl/adding-connection-points-to-an-object.md
+++ b/docs/atl/adding-connection-points-to-an-object.md
@@ -7,6 +7,8 @@ ms.topic: how-to
---
# Adding Connection Points to an Object
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The [ATL Tutorial](active-template-library-atl-tutorial.md) demonstrates how to create a control with support for connection points, how to add events, and then how to implement the connection point. ATL implements connection points with the [`IConnectionPointImpl`](reference/iconnectionpointimpl-class.md) class.
To implement a connection point, you have two choices:
diff --git a/docs/atl/adding-functionality-to-the-composite-control.md b/docs/atl/adding-functionality-to-the-composite-control.md
index 35766209450..f32c146abd8 100644
--- a/docs/atl/adding-functionality-to-the-composite-control.md
+++ b/docs/atl/adding-functionality-to-the-composite-control.md
@@ -3,11 +3,12 @@ description: "Learn more about: Adding Functionality to the Composite Control"
title: "Adding Functionality to the Composite Control"
ms.date: "11/04/2016"
helpviewer_keywords: ["event handlers [C++], ActiveX controls", "composite controls, handling events", "ActiveX controls [C++], events"]
-ms.assetid: 98f85681-9564-480d-af38-03f9733fe58b
ms.topic: concept-article
---
# Adding Functionality to the Composite Control
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
Once you have inserted any necessary controls into the composite control, the next step involves adding new functionality. This new functionality usually falls into two categories:
- Supporting additional interfaces and customizing the behavior of your composite control with additional, specific features.
diff --git a/docs/atl/aggregation.md b/docs/atl/aggregation.md
index 36c510daf37..e1b0448277a 100644
--- a/docs/atl/aggregation.md
+++ b/docs/atl/aggregation.md
@@ -3,10 +3,11 @@ description: "Learn more about: Aggregation"
title: "Aggregation"
ms.date: "11/04/2016"
helpviewer_keywords: ["aggregation [C++]", "aggregate objects [C++]"]
-ms.assetid: 7125bb8e-b269-4b50-9bba-295b467a54cc
---
# Aggregation
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
There are times when an object's implementor would like to take advantage of the services offered by another, prebuilt object. Furthermore, it would like this second object to appear as a natural part of the first. COM achieves both of these goals through containment and aggregation.
Aggregation means that the containing (outer) object creates the contained (inner) object as part of its creation process and the interfaces of the inner object are exposed by the outer. An object allows itself to be aggregatable or not. If it is, then it must follow certain rules for aggregation to work properly.
diff --git a/docs/atl/atl-and-the-free-threaded-marshaler.md b/docs/atl/atl-and-the-free-threaded-marshaler.md
index 5d5e78c8a63..b496b5b4fc8 100644
--- a/docs/atl/atl-and-the-free-threaded-marshaler.md
+++ b/docs/atl/atl-and-the-free-threaded-marshaler.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL and the Free Threaded Marshaler"
title: "ATL and the Free Threaded Marshaler"
ms.date: "11/04/2016"
helpviewer_keywords: ["ATL, free threaded marshaler", "free threaded marshaler", "threading [C++], marshaler in ATL", "threading [ATL], free threaded marshaler", "FTM in ATL"]
-ms.assetid: 2db88a13-2217-4ebc-aa7e-432d5da902eb
---
# ATL and the Free Threaded Marshaler
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The ATL Simple Object Wizard's Attributes page provides an option that allows your class to aggregate the free threaded marshaler (FTM).
The wizard generates code to create an instance of the free threaded marshaler in `FinalConstruct` and release that instance in `FinalRelease`. A COM_INTERFACE_ENTRY_AGGREGATE macro is automatically added to the COM map to ensure that `QueryInterface` requests for [IMarshal](/windows/win32/api/objidlbase/nn-objidlbase-imarshal) are handled by the free threaded marshaler.
diff --git a/docs/atl/atl-class-overview.md b/docs/atl/atl-class-overview.md
index 98846a0de5f..bf22cf76fca 100644
--- a/docs/atl/atl-class-overview.md
+++ b/docs/atl/atl-class-overview.md
@@ -3,11 +3,12 @@ description: "Learn more about: ATL class overview"
title: "ATL class overview"
ms.date: "11/04/2016"
helpviewer_keywords: ["classes [C++], ATL", "ATL, class reference"]
-ms.assetid: c38ac93d-c3a2-4ce7-8153-f1d34c0f0fa6
ms.topic: concept-article
---
# ATL class overview
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
Classes in the Active Template Library (ATL) can be categorized as follows:
[Class factories](../atl/class-factories-classes.md)\
diff --git a/docs/atl/atl-collection-and-enumerator-classes.md b/docs/atl/atl-collection-and-enumerator-classes.md
index d96c74e5703..b887eabdb83 100644
--- a/docs/atl/atl-collection-and-enumerator-classes.md
+++ b/docs/atl/atl-collection-and-enumerator-classes.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL Collection and Enumerator Classes"
title: "ATL Collection and Enumerator Classes"
ms.date: "11/04/2016"
helpviewer_keywords: ["enumerators, ATL classes", "collection classes, ATL"]
-ms.assetid: 6818db73-7094-48d8-a0ca-18147beec362
---
# ATL Collection and Enumerator Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
ATL provides the following classes to help you implement collections and enumerators.
|Class|Description|
diff --git a/docs/atl/atl-collection-classes.md b/docs/atl/atl-collection-classes.md
index db96014d6f0..bd9c02edc03 100644
--- a/docs/atl/atl-collection-classes.md
+++ b/docs/atl/atl-collection-classes.md
@@ -3,11 +3,12 @@ description: "Learn more about: ATL Collection Classes"
title: "ATL collection class overview"
ms.date: "11/19/2018"
helpviewer_keywords: ["DestructElements function", "collection classes, choosing", "ConstructElements function", "SerializeElements function", "traits classes", "collection classes, about collection classes", "CTraits classes", "collection classes"]
-ms.assetid: 4d619d46-5b4e-41dd-b9fd-e86b1fbc00b5
ms.topic: concept-article
---
# ATL Collection Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
ATL provides many classes for storing and accessing data. Which class you decide to use depends on several factors, including:
- The amount of data to be stored
diff --git a/docs/atl/atl-collections-and-enumerators.md b/docs/atl/atl-collections-and-enumerators.md
index 68eea6e6f86..ba991026b3c 100644
--- a/docs/atl/atl-collections-and-enumerators.md
+++ b/docs/atl/atl-collections-and-enumerators.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL Collections and Enumerators"
title: "ATL Collections and Enumerators"
ms.date: "11/04/2016"
helpviewer_keywords: ["enumerator interfaces", "collections, ATL classes", "enumerators, ATL classes", "collection interfaces"]
-ms.assetid: b2d37119-3ab2-4e0a-b65b-f377f07e4098
---
# ATL Collections and Enumerators
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
A `collection` is a COM object that provides an interface that allows access to a group of data items (raw data or other objects). An interface that follows the standards for providing access to a group of objects is known as a *collection interface*.
At a minimum, collection interfaces must provide a `Count` property that returns the number of items in the collection, an `Item` property that returns an item from the collection based on an index, and a `_NewEnum` property that returns an enumerator for the collection. Optionally, collection interfaces can provide `Add` and `Remove` methods to allow items to be inserted into or deleted from the collection, and a `Clear` method to remove all items.
diff --git a/docs/atl/atl-com-desktop-components.md b/docs/atl/atl-com-desktop-components.md
index 3d5d2ad0c96..e12f41f8be4 100644
--- a/docs/atl/atl-com-desktop-components.md
+++ b/docs/atl/atl-com-desktop-components.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL COM Desktop Components"
title: "ATL COM Desktop Components"
ms.date: "10/19/2018"
helpviewer_keywords: ["ATL, reference", "ATL, about ATL"]
-ms.assetid: 291f38d1-d2de-4687-86a9-99b4fd35706c
---
# ATL COM Desktop Components
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The ATL Reference documents the Active Template Library (ATL), a set of template-based C++ classes that simplify the programming of Component Object Model (COM) objects. COM is a binary specification for creating and consuming software components on Windows. To fully take advantage of ATL, a working familiarity with COM is highly recommended. For more information about COM, see [Component Object Model (COM)](/windows/win32/com/component-object-model--com--portal).
## In This Section
diff --git a/docs/atl/atl-com-property-pages.md b/docs/atl/atl-com-property-pages.md
index 109d83b95c0..3b84ea0421e 100644
--- a/docs/atl/atl-com-property-pages.md
+++ b/docs/atl/atl-com-property-pages.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL COM Property Pages"
title: "ATL COM Property Pages"
ms.date: "11/04/2016"
helpviewer_keywords: ["property pages, COM", "ATL COM objects", "COM property pages", "property pages, ATL", "COM objects, ATL", "ATL property pages"]
-ms.assetid: 663c7caa-2e5e-4b5c-b8ea-fd434ceb1654
---
# ATL COM Property Pages
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
COM property pages provide a user interface for setting the properties (or calling the methods) of one or more COM objects. Property pages are used extensively by ActiveX controls for providing rich user interfaces that allow control properties to be set at design time.
Property pages are COM objects that implement the [IPropertyPage](/windows/win32/api/ocidl/nn-ocidl-ipropertypage) or [IPropertyPage2](/windows/win32/api/ocidl/nn-ocidl-ipropertypage2) interface. These interfaces provide methods that allow the page to be associated with a `site` (a COM object representing the container of the page) and a number of *objects* (COM objects whose methods will be called in response to changes made by the user of the property page). The property page container is responsible for calling methods on the property page interface to tell the page when to show or hide its user interface, and when to apply the changes made by the user to the underlying objects.
diff --git a/docs/atl/atl-composite-control-fundamentals.md b/docs/atl/atl-composite-control-fundamentals.md
index 99d5bc76e01..c96615a0bd2 100644
--- a/docs/atl/atl-composite-control-fundamentals.md
+++ b/docs/atl/atl-composite-control-fundamentals.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL Composite Control Fundamentals"
title: "ATL Composite Control Fundamentals"
ms.date: "11/04/2016"
helpviewer_keywords: ["composite controls, about composite controls"]
-ms.assetid: 2ac78cdd-1ec4-4d78-871c-1bcc23b5253e
---
# ATL Composite Control Fundamentals
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
A composite control is a type of ActiveX control that can contain (similar to a dialog box) other ActiveX controls or Windows controls. Once the composite control is built, it can be inserted anywhere an ActiveX control can be hosted.
The ATL Project Wizard and **Add Class** dialog box automate the process of creating and implementing a composite control project, similar to the result of running the Application Wizard to create an MFC application framework. The development process consists of five steps:
diff --git a/docs/atl/atl-connection-point-classes.md b/docs/atl/atl-connection-point-classes.md
index 9de4d1eaf44..21d955c22e5 100644
--- a/docs/atl/atl-connection-point-classes.md
+++ b/docs/atl/atl-connection-point-classes.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL Connection Point Classes"
title: "ATL Connection Point Classes"
ms.date: "11/04/2016"
helpviewer_keywords: ["CFirePropNotifyEvent class, connection point classes", "connection points [C++], ATL classes", "ATL, connection points", "CComDynamicUnkArray class, connection point classes", "CFirePropNotifyEvent class", "CComUnkArray class, connection point classes"]
-ms.assetid: 9582ba71-7ace-4df4-9c9b-1b0636953efc
---
# ATL Connection Point Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
ATL uses the following classes to support connection points:
- [IConnectionPointImpl](../atl/reference/iconnectionpointimpl-class.md) implements a connection point. The IID of the outgoing interface it represents is passed as a template parameter.
diff --git a/docs/atl/atl-connection-point-example.md b/docs/atl/atl-connection-point-example.md
index 0a7cf22ac7a..c837053c9e1 100644
--- a/docs/atl/atl-connection-point-example.md
+++ b/docs/atl/atl-connection-point-example.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL Connection Point Example"
title: "ATL Connection Point Example"
ms.date: "11/04/2016"
helpviewer_keywords: ["connection points [C++], examples", "examples [ATL]"]
-ms.assetid: a49721b7-f308-43de-8868-f662a94bc81a
---
# ATL Connection Point Example
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
This example shows an object that supports [IPropertyNotifySink](/windows/win32/api/ocidl/nn-ocidl-ipropertynotifysink) as an outgoing interface:
[!code-cpp[NVC_ATL_Windowing#84](../atl/codesnippet/cpp/atl-connection-point-example_1.h)]
diff --git a/docs/atl/atl-connection-points.md b/docs/atl/atl-connection-points.md
index 9bad34db0b4..cb3f08ffa9f 100644
--- a/docs/atl/atl-connection-points.md
+++ b/docs/atl/atl-connection-points.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL Connection Points"
title: "ATL Connection Points"
ms.date: "11/04/2016"
helpviewer_keywords: ["connections, connection points", "ATL, connection points", "connection points [C++], about connection points"]
-ms.assetid: 17d76165-5f83-4f95-b36d-483821c247a1
---
# ATL Connection Points
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
A connectable object is one that supports outgoing interfaces. An outgoing interface allows the object to communicate with a client. For each outgoing interface, the connectable object exposes a connection point. Each outgoing interface is implemented by a client on an object called a sink.

diff --git a/docs/atl/atl-copy-policy-classes.md b/docs/atl/atl-copy-policy-classes.md
index 08787e3fe9b..0c2aad5b629 100644
--- a/docs/atl/atl-copy-policy-classes.md
+++ b/docs/atl/atl-copy-policy-classes.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL Copy Policy Classes"
title: "ATL Copy Policy Classes"
ms.date: "11/04/2016"
helpviewer_keywords: ["data [C++], ATL", "classes [C++], copy policy", "copy policy classes [C++]", "_Copy class", "_CopyInterface class"]
-ms.assetid: 06704b68-d318-4c5d-a65b-71457fe9d00d
---
# ATL Copy Policy Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
Copy policy classes are [utility classes](../atl/utility-classes.md) used to initialize, copy, and delete data. Copy policy classes allow you to define copy semantics for any type of data, and to define conversions between different data types.
ATL uses copy policy classes in its implementations of the following templates:
diff --git a/docs/atl/atl-encoding-reference.md b/docs/atl/atl-encoding-reference.md
index e7153b05201..36787474f2a 100644
--- a/docs/atl/atl-encoding-reference.md
+++ b/docs/atl/atl-encoding-reference.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL Encoding Reference"
title: "ATL Encoding Reference"
ms.date: "11/04/2016"
helpviewer_keywords: ["encoding", "encoding, functions"]
-ms.assetid: 82d4fdf3-3c4a-4fe2-b297-8ffb4714406f
---
# ATL Encoding Reference
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
Encoding in a range of common Internet standards such as uuencode, hexadecimal, and UTF8 is supported by the code found in *`atlenc.h`*.
### Functions
diff --git a/docs/atl/atl-event-handling-summary.md b/docs/atl/atl-event-handling-summary.md
index 166f1d40284..55d8eabacca 100644
--- a/docs/atl/atl-event-handling-summary.md
+++ b/docs/atl/atl-event-handling-summary.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL Event Handling Summary"
title: "ATL Event Handling Summary"
ms.date: "11/04/2016"
helpviewer_keywords: ["event handling, implementing"]
-ms.assetid: e8b47ef0-0bdc-47ff-9dd6-34df11dde9a2
---
# ATL Event Handling Summary
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
In general, handling COM events is a relatively simple process. There are three main steps:
- Implement the event interface on your object.
diff --git a/docs/atl/atl-module-classes.md b/docs/atl/atl-module-classes.md
index 4613d5af005..512b96192d5 100644
--- a/docs/atl/atl-module-classes.md
+++ b/docs/atl/atl-module-classes.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL Module Classes"
title: "ATL Module Classes"
ms.date: "11/04/2016"
helpviewer_keywords: ["CComModule class, what's changed", "ATL, module classes", "module classes"]
-ms.assetid: fd75382d-c955-46ba-a38e-37728b7fa00f
---
# ATL Module Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
This topic discusses the module classes that were new in ATL 7.0.
## CComModule Replacement Classes
diff --git a/docs/atl/atl-registry-component-registrar.md b/docs/atl/atl-registry-component-registrar.md
index 6fc68ca1fc2..3615ba7fc45 100644
--- a/docs/atl/atl-registry-component-registrar.md
+++ b/docs/atl/atl-registry-component-registrar.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL Registry Component (Registrar)"
title: "ATL Registry Component (Registrar)"
ms.date: "11/04/2016"
helpviewer_keywords: ["scripting, registry scripting", "ATL, registry", "registrar scripts [ATL]", "registry, accessing", "ATL Registrar", "scripts, Registrar scripts", "registry, Registrar"]
-ms.assetid: 106752ae-4cfc-4030-8cb2-d36a1d635a2e
---
# ATL Registry Component (Registrar)
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The ATL Registrar provides optimized access to the system registry through a custom interface. The Registrar is free-threaded and allows static linking of code for C++ clients.
> [!NOTE]
diff --git a/docs/atl/atl-services.md b/docs/atl/atl-services.md
index 4acde07ca7e..591a7222173 100644
--- a/docs/atl/atl-services.md
+++ b/docs/atl/atl-services.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL Services"
title: "ATL Services"
ms.date: "11/04/2016"
helpviewer_keywords: ["CServiceModule class", "COM objects, ATL", "services, ATL", "ATL services"]
-ms.assetid: 8c09d1a8-7548-4d2c-947c-9d795a81659b
---
# ATL Services
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
To create your ATL COM object so that it runs in a service, simply select Service (EXE) from the list of server options in the ATL Project Wizard. The wizard will then create a class derived from `CAtlServiceModuleT` to implement the service.
When the ATL COM object is built as a service, it will only be registered as a local server, and it will not appear in the list of services in Control Panel. This is because it is easier to debug the service as a local server than as a service. To install it as a service, run the following at the command prompt:
diff --git a/docs/atl/atl-support-for-dhtml-controls.md b/docs/atl/atl-support-for-dhtml-controls.md
index eca0e2fe0b1..2a2f8c091f8 100644
--- a/docs/atl/atl-support-for-dhtml-controls.md
+++ b/docs/atl/atl-support-for-dhtml-controls.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL Support for DHTML Controls"
title: "ATL Support for DHTML Controls"
ms.date: "11/04/2016"
helpviewer_keywords: ["HTML controls, ATL support", "DHTML controls, ATL support", "DHTML controls"]
-ms.assetid: 4ba98098-da5d-4362-96ad-8372f816c307
---
# ATL Support for DHTML Controls
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
Using ATL, you can create a control with Dynamic HTML (DHTML) capability. An ATL DHTML control:
- Hosts the WebBrowser control.
diff --git a/docs/atl/atl-utilities-reference.md b/docs/atl/atl-utilities-reference.md
index d903e4dbab6..19120124b84 100644
--- a/docs/atl/atl-utilities-reference.md
+++ b/docs/atl/atl-utilities-reference.md
@@ -5,6 +5,8 @@ ms.date: 11/04/2016
---
# ATL utilities reference
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
ATL provides code for manipulating paths and URLs in the form of [CPathT](../atl/reference/cpatht-class.md) and [CUrl](../atl/reference/curl-class.md). A thread pool, [CThreadPool](../atl/reference/cthreadpool-class.md), can be used in your applications. This code can be found in atlpath.h and atlutil.h.
## Classes
diff --git a/docs/atl/atl-window-classes.md b/docs/atl/atl-window-classes.md
index bf9968a0313..92c7c453843 100644
--- a/docs/atl/atl-window-classes.md
+++ b/docs/atl/atl-window-classes.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL Window Classes"
title: "ATL Window Classes"
ms.date: "11/04/2016"
helpviewer_keywords: ["ATL, windows", "windows [C++], subclassing", "windows [C++], superclassing", "windows [C++], ATL", "subclassing ATL window classes", "superclassing", "superclassing, ATL"]
-ms.assetid: 1d12b708-de3e-49d5-9e41-42fe4769fa62
---
# ATL Window Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
ATL includes several classes that allow you to use and implement windows. These classes, like other ATL classes, provide an efficient implementation that does not impose an overhead on your code.
This section describes the ATL window classes and explains how to use them.
diff --git a/docs/atl/benefits-and-tradeoffs-of-the-method-used-to-link-to-the-crt.md b/docs/atl/benefits-and-tradeoffs-of-the-method-used-to-link-to-the-crt.md
index d84c7e8e639..3c3d0fe0276 100644
--- a/docs/atl/benefits-and-tradeoffs-of-the-method-used-to-link-to-the-crt.md
+++ b/docs/atl/benefits-and-tradeoffs-of-the-method-used-to-link-to-the-crt.md
@@ -3,10 +3,11 @@ description: "Learn more about: Benefits and Tradeoffs of the Method Used to Lin
title: "Benefits and Tradeoffs of the Method Used to Link to the CRT"
ms.date: "05/06/2019"
helpviewer_keywords: ["_ATL_MIN_CRT macro"]
-ms.assetid: 49b485f7-9487-49e4-b12a-0f710b620e2b
---
# Benefits and Tradeoffs of the Method Used to Link to the CRT
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
Your project can link with the CRT either dynamically or statically. The table below outlines the benefits and tradeoffs involved in choosing which method to use.
|Method|Benefit|Tradeoff|
diff --git a/docs/atl/building-and-testing-the-atl-project.md b/docs/atl/building-and-testing-the-atl-project.md
index d5920c6e591..53aebdcc5e4 100644
--- a/docs/atl/building-and-testing-the-atl-project.md
+++ b/docs/atl/building-and-testing-the-atl-project.md
@@ -3,11 +3,12 @@ description: "Learn more about: Building and Testing the ATL Project"
title: "Building and Testing the ATL Project"
ms.date: "11/04/2016"
helpviewer_keywords: ["composite controls, building and testing the project", "composite controls, containers for"]
-ms.assetid: 5c1541f8-f6cb-4c22-bd22-c66bcfbaa077
ms.topic: concept-article
---
# Building and Testing the ATL Project
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
As mentioned in [Inserting a Composite Control](../atl/inserting-a-composite-control.md), one of the initial components of the project is a default HTML page that hosts your new composite control. After you finish modifying the composite control, click **Build Solution** or **Rebuild Solution** from the **Build** menu. Once the project successfully builds, load the HTML page, located in the root directory of your composite control project, into Internet Explorer or another browser and test the functionality of your control.
You can also test your composite control using the Test Container tool, or any other application that can host an ActiveX control. See [Testing Properties and Events with Test Container](../mfc/testing-properties-and-events-with-test-container.md) for information on how to access the test container.
diff --git a/docs/atl/calling-cpp-code-from-dhtml.md b/docs/atl/calling-cpp-code-from-dhtml.md
index a5d05fe09ee..03f3e87a0d4 100644
--- a/docs/atl/calling-cpp-code-from-dhtml.md
+++ b/docs/atl/calling-cpp-code-from-dhtml.md
@@ -3,11 +3,12 @@ description: "Learn more about: Calling C++ Code from DHTML"
title: "Calling C++ Code from DHTML"
ms.date: "11/04/2016"
helpviewer_keywords: ["DHTML, calling C++ code from"]
-ms.assetid: 37329acd-4c22-40ca-a85a-b7480748f75f
ms.topic: concept-article
---
# Calling C++ Code from DHTML
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
A DHTML control can be hosted in a container, such as Test Container or Internet Explorer. See [Testing Properties and Events with Test Container](../mfc/testing-properties-and-events-with-test-container.md) for information on how to access Test Container.
The container hosting the control communicates with the control using the normal control interfaces. DHTML uses the dispatch interface that ends with "UI" to communicate with your C++ code and your HTML resource. In [Modifying the ATL DHTML Control](../atl/modifying-the-atl-dhtml-control.md), you can practice adding the methods to be called by these different interfaces.
diff --git a/docs/atl/catlservicemodulet-handler-function.md b/docs/atl/catlservicemodulet-handler-function.md
index a2da13bec83..c21778eec43 100644
--- a/docs/atl/catlservicemodulet-handler-function.md
+++ b/docs/atl/catlservicemodulet-handler-function.md
@@ -3,10 +3,11 @@ description: "Learn more about: CAtlServiceModuleT::Handler Function"
title: "CAtlServiceModuleT::Handler Function"
ms.date: "11/04/2016"
helpviewer_keywords: ["Handler method"]
-ms.assetid: 14db5f2a-be87-4774-a296-445cb6fc7b2e
---
# CAtlServiceModuleT::Handler Function
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
`CAtlServiceModuleT::Handler` is the routine that the service control manager (SCM) calls to retrieve the status of the service and give it various instructions (such as stopping or pausing). The SCM passes an operation code to `Handler` to indicate what the service should do. A default ATL-generated service only handles the stop instruction. If the SCM passes the stop instruction, the service tells the SCM that the program is about to stop. The service then calls `PostThreadMessage` to post a quit message to itself. This terminates the message loop and the service will ultimately close.
To handle more instructions, you need to change the `m_status` data member initialized in the `CAtlServiceModuleT` constructor. This data member tells the SCM which buttons to enable when the service is selected in the Services Control Panel application.
diff --git a/docs/atl/catlservicemodulet-run-function.md b/docs/atl/catlservicemodulet-run-function.md
index 9471ee390a8..e9aadfc95c2 100644
--- a/docs/atl/catlservicemodulet-run-function.md
+++ b/docs/atl/catlservicemodulet-run-function.md
@@ -3,10 +3,11 @@ description: "Learn more about: CAtlServiceModuleT::Run Function"
title: "CAtlServiceModuleT::Run Function"
ms.date: "11/04/2016"
helpviewer_keywords: ["ATL services, security"]
-ms.assetid: 42c010f0-e60e-459c-a63b-a53a24cda93b
---
# CAtlServiceModuleT::Run Function
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
`Run` contains calls to `PreMessageLoop`, `RunMessageLoop`, and `PostMessageLoop`. After being called, `PreMessageLoop` first stores the service's thread ID. The service will use this ID to close itself by sending a WM_QUIT message using the Win32 API function, [PostThreadMessage](/windows/win32/api/winuser/nf-winuser-postthreadmessagew).
`PreMessageLoop` then calls `InitializeSecurity`. By default, `InitializeSecurity` calls [CoInitializeSecurity](/windows/win32/api/combaseapi/nf-combaseapi-coinitializesecurity) with the security descriptor set to NULL, which means that any user has access to your object.
diff --git a/docs/atl/catlservicemodulet-servicemain-function.md b/docs/atl/catlservicemodulet-servicemain-function.md
index f3cfffa7fd3..f037a2ca6ae 100644
--- a/docs/atl/catlservicemodulet-servicemain-function.md
+++ b/docs/atl/catlservicemodulet-servicemain-function.md
@@ -3,10 +3,11 @@ description: "Learn more about: CAtlServiceModuleT::ServiceMain Function"
title: "CAtlServiceModuleT::ServiceMain Function"
ms.date: "11/04/2016"
helpviewer_keywords: ["ServiceMain method"]
-ms.assetid: f21408c1-1919-4dec-88d8-bf5b39ac9808
---
# CAtlServiceModuleT::ServiceMain Function
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The service control manager (SCM) calls `ServiceMain` when you open the Services Control Panel application, select the service, and click **Start**.
After the SCM calls `ServiceMain`, a service must give the SCM a handler function. This function lets the SCM obtain the service's status and pass specific instructions (such as pausing or stopping). The SCM gets this function when the service passes `_Handler` to the Win32 API function, [RegisterServiceCtrlHandler](/windows/win32/api/winsvc/nf-winsvc-registerservicectrlhandlerw). (`_Handler` is a static member function that calls the non-static member function [Handler](../atl/reference/catlservicemodulet-class.md#handler).)
diff --git a/docs/atl/catlservicemodulet-start-function.md b/docs/atl/catlservicemodulet-start-function.md
index 920857413d4..670a2023aee 100644
--- a/docs/atl/catlservicemodulet-start-function.md
+++ b/docs/atl/catlservicemodulet-start-function.md
@@ -3,10 +3,11 @@ description: "Learn more about: CAtlServiceModuleT::Start Function"
title: "CAtlServiceModuleT::Start Function"
ms.date: "11/04/2016"
helpviewer_keywords: ["Start method"]
-ms.assetid: b5193a23-41bc-42d2-8d55-3eb43dc62238
---
# CAtlServiceModuleT::Start Function
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
When the service is run, `_tWinMain` calls `CAtlServiceModuleT::WinMain`, which in turn calls `CAtlServiceModuleT::Start`.
`CAtlServiceModuleT::Start` sets up an array of `SERVICE_TABLE_ENTRY` structures that map each service to its startup function. This array is then passed to the Win32 API function, [StartServiceCtrlDispatcher](/windows/win32/api/winsvc/nf-winsvc-startservicectrldispatcherw). In theory, one EXE could handle multiple services and the array could have multiple `SERVICE_TABLE_ENTRY` structures. Currently, however, an ATL-generated service supports only one service per EXE. Therefore, the array has a single entry that contains the service name and `_ServiceMain` as the startup function. `_ServiceMain` is a static member function of `CAtlServiceModuleT` that calls the non-static member function, `ServiceMain`.
diff --git a/docs/atl/changing-the-default-class-factory-and-aggregation-model.md b/docs/atl/changing-the-default-class-factory-and-aggregation-model.md
index 78b9ca1c8a0..31cf67c1254 100644
--- a/docs/atl/changing-the-default-class-factory-and-aggregation-model.md
+++ b/docs/atl/changing-the-default-class-factory-and-aggregation-model.md
@@ -3,11 +3,12 @@ description: "Learn more about: Changing the Default Class Factory and Aggregati
title: "Changing the Default Class Factory and Aggregation Model"
ms.date: "11/04/2016"
helpviewer_keywords: ["CComClassFactory class, making the default", "aggregation [C++], using ATL", "aggregation [C++], aggregation models", "defaults [C++], aggregation model in ATL", "default class factory", "class factories, changing default", "CComCoClass class, default class factory and aggregation model", "default class factory, ATL", "defaults [C++], class factory"]
-ms.assetid: 6e040e95-0f38-4839-8a8b-c9800dd47e8c
ms.topic: concept-article
---
# Changing the Default Class Factory and Aggregation Model
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
ATL uses [CComCoClass](../atl/reference/ccomcoclass-class.md) to define the default class factory and aggregation model for your object. `CComCoClass` specifies the following two macros:
- [DECLARE_CLASSFACTORY](reference/aggregation-and-class-factory-macros.md#declare_classfactory) Declares the class factory to be [CComClassFactory](../atl/reference/ccomclassfactory-class.md).
diff --git a/docs/atl/changing-the-drawing-code-atl-tutorial-part-4.md b/docs/atl/changing-the-drawing-code-atl-tutorial-part-4.md
index 2ed4a960e6b..d835f00e7d9 100644
--- a/docs/atl/changing-the-drawing-code-atl-tutorial-part-4.md
+++ b/docs/atl/changing-the-drawing-code-atl-tutorial-part-4.md
@@ -4,11 +4,12 @@ title: "Changing the Drawing Code (ATL Tutorial, Part 4)"
ms.custom: "get-started-article"
ms.date: "09/26/2018"
helpviewer_keywords: ["_ATL_MIN_CRT macro"]
-ms.assetid: 08ff14e8-aa49-4139-a110-5d071939cf1e
ms.topic: tutorial
---
# Changing the Drawing Code (ATL Tutorial, Part 4)
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
By default, the control's drawing code displays a square and the text **PolyCtl**. In this step, you will change the code to display something more interesting. The following tasks are involved:
- Modifying the Header File
diff --git a/docs/atl/class-factories-classes.md b/docs/atl/class-factories-classes.md
index 15bda12d380..a0e9bdb8927 100644
--- a/docs/atl/class-factories-classes.md
+++ b/docs/atl/class-factories-classes.md
@@ -4,10 +4,11 @@ title: " ATL Class Factories Classes"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["class factories", "class factories, ATL classes"]
-ms.assetid: 1d8c2ae2-2c37-452c-a02d-1ecbdd309f84
---
# Class Factories Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following classes implement or support a class factory:
- [CComClassFactory](../atl/reference/ccomclassfactory-class.md) Provides a default class factory for object creation.
diff --git a/docs/atl/class-information-classes.md b/docs/atl/class-information-classes.md
index 4f4b3f3158e..b1854183884 100644
--- a/docs/atl/class-information-classes.md
+++ b/docs/atl/class-information-classes.md
@@ -4,10 +4,11 @@ title: "Class Information Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["class information, retrieving"]
-ms.assetid: 39365025-f24a-41ae-87ab-4ae8ed085b98
---
# Class Information Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following class provides support for retrieving class information:
- [IProvideClassInfo2Impl](../atl/reference/iprovideclassinfo2impl-class.md) Provides access to type information. Retrieves the outgoing IID for the object's default event set.
diff --git a/docs/atl/collection-classes.md b/docs/atl/collection-classes.md
index 0545b6d29b0..5702e9832d1 100644
--- a/docs/atl/collection-classes.md
+++ b/docs/atl/collection-classes.md
@@ -4,10 +4,11 @@ title: "Collection classes in ATL"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["collection classes"]
-ms.assetid: eff95de6-78ef-4212-9d7d-1dacbdd4cc58
---
# Collection Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following classes provide support for arrays, lists, maps, and also traits methods for helping with comparisons and element access.
- [CAtlArray](../atl/reference/catlarray-class.md) This class implements an array object.
diff --git a/docs/atl/com-modules-classes.md b/docs/atl/com-modules-classes.md
index 4c4671f1231..768c712e943 100644
--- a/docs/atl/com-modules-classes.md
+++ b/docs/atl/com-modules-classes.md
@@ -4,10 +4,11 @@ title: "COM Modules Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["COM modules classes"]
-ms.assetid: 0a8a82dd-a153-47cd-9bbe-1a1ad5d1a6ff
---
# COM Modules Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following classes provide support for a COM module:
- [CAtlBaseModule](../atl/reference/catlbasemodule-class.md) This class is instantiated in every ATL project.
diff --git a/docs/atl/commandhandler.md b/docs/atl/commandhandler.md
index 6ad29accfb3..2a299bfa7d7 100644
--- a/docs/atl/commandhandler.md
+++ b/docs/atl/commandhandler.md
@@ -4,10 +4,11 @@ title: "CommandHandler"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["CommandHandler function"]
-ms.assetid: 662bc7bf-4a10-42b3-986d-d8bae4f63551
---
# CommandHandler
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
`CommandHandler` is the function identified by the third parameter of the COMMAND_HANDLER macro in your message map.
## Syntax
diff --git a/docs/atl/composite-controls-classes.md b/docs/atl/composite-controls-classes.md
index 0e45651cc80..42f653e0cbb 100644
--- a/docs/atl/composite-controls-classes.md
+++ b/docs/atl/composite-controls-classes.md
@@ -4,10 +4,11 @@ title: "Composite Controls Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["composite controls, C++", "composite controls classes"]
-ms.assetid: 9e8d65c4-d631-4500-a28b-6d42c35aba26
---
# Composite Controls Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following class provides support for creating composite controls
- [CComCompositeControl](../atl/reference/ccomcompositecontrol-class.md) ActiveX controls derived from `CComCompositeControl` are hosted by a standard dialog box. These types of controls are called composite controls because they are able to host other controls (native Windows controls and ActiveX controls).
diff --git a/docs/atl/connection-points-classes.md b/docs/atl/connection-points-classes.md
index 52b73a0103c..4903c12022e 100644
--- a/docs/atl/connection-points-classes.md
+++ b/docs/atl/connection-points-classes.md
@@ -4,10 +4,11 @@ title: "Connection Points Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["classes [C++], connection points", "connection points classes"]
-ms.assetid: 076365fa-299a-4dce-84c3-a5dff0e0da1f
---
# Connection Points Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following classes provide support for connection points:
- [IConnectionPointContainerImpl](../atl/reference/iconnectionpointcontainerimpl-class.md) Implements a connection point container.
diff --git a/docs/atl/control-containment-classes.md b/docs/atl/control-containment-classes.md
index 1446101b696..8eb055a2cbf 100644
--- a/docs/atl/control-containment-classes.md
+++ b/docs/atl/control-containment-classes.md
@@ -4,10 +4,11 @@ title: "Control Containment Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["control containment classes"]
-ms.assetid: e0812aee-c078-4ced-b967-247976552b9a
---
# Control Containment Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following classes provide containment support for hosting controls:
- [CAxWindow](../atl/reference/caxwindow-class.md) Provides methods for manipulating a window that hosts an ActiveX control.
diff --git a/docs/atl/controls-general-support-classes.md b/docs/atl/controls-general-support-classes.md
index fdb016140e0..2bcaa142937 100644
--- a/docs/atl/controls-general-support-classes.md
+++ b/docs/atl/controls-general-support-classes.md
@@ -4,10 +4,11 @@ title: "ATL Controls: General Support Classes"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["controls [ATL]", "general support classes"]
-ms.assetid: cf73f1d2-7542-48e3-b8c8-9d3abf29f85b
---
# Controls: General Support Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following classes provide general support for ATL controls:
- [CComControl](../atl/reference/ccomcontrol-class.md) Consists of helper functions and data members that are essential to ATL controls.
diff --git a/docs/atl/creating-an-aggregated-object.md b/docs/atl/creating-an-aggregated-object.md
index f0bc8d88b24..e6e24a5bf08 100644
--- a/docs/atl/creating-an-aggregated-object.md
+++ b/docs/atl/creating-an-aggregated-object.md
@@ -3,11 +3,12 @@ description: "Learn more about: Creating an Aggregated Object"
title: "Creating an Aggregated Object"
ms.date: "11/04/2016"
helpviewer_keywords: ["aggregation [C++], creating aggregated objects", "aggregate objects [C++], creating"]
-ms.assetid: fc29d7aa-fd53-4276-9c2f-37379f71b179
ms.topic: how-to
---
# Creating an Aggregated Object
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
Aggregation delegates `IUnknown` calls, providing a pointer to the outer object's `IUnknown` to the inner object.
## To create an aggregated object
diff --git a/docs/atl/creating-an-atl-dhtml-control.md b/docs/atl/creating-an-atl-dhtml-control.md
index 1831d58d0b3..c6c4f9c846b 100644
--- a/docs/atl/creating-an-atl-dhtml-control.md
+++ b/docs/atl/creating-an-atl-dhtml-control.md
@@ -3,11 +3,12 @@ description: "Learn more about: Creating an ATL DHTML Control"
title: "Creating an ATL DHTML Control"
ms.date: "11/04/2016"
helpviewer_keywords: ["HTML controls, creating", "DHTML controls", "DHTML controls, creating"]
-ms.assetid: 1d8f0ede-7d8b-4959-976e-b4d0e2a87f5a
ms.topic: how-to
---
# Creating an ATL DHTML Control
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The ATL Control Wizard automates the process of creating a DHTML control. It generates the necessary resource files, including an HTML file containing sample code.
## To create an ATL DHTML control
diff --git a/docs/atl/creating-registrar-scripts.md b/docs/atl/creating-registrar-scripts.md
index d9d281b53ab..9e9e8eb0ca2 100644
--- a/docs/atl/creating-registrar-scripts.md
+++ b/docs/atl/creating-registrar-scripts.md
@@ -3,11 +3,12 @@ description: "Learn more about: Creating Registrar scripts"
title: "Creating scripts for ATL Registrar"
ms.date: "05/14/2014"
helpviewer_keywords: ["scripting, registry scripting", "ATL, registry", "registrar scripts [ATL]", "scripts, Registrar scripts", "scripts, creating"]
-ms.assetid: cbd5024b-8061-4a71-be65-7fee90374a35
ms.topic: concept-article
---
# Creating Registrar scripts
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
A registrar script provides data-driven, rather than API-driven, access to the system registry. Data-driven access is typically more efficient since it takes only one or two lines in a script to add a key to the registry.
The [ATL Control Wizard](../atl/reference/atl-control-wizard.md) automatically generates a registrar script for your COM server. You can find this script in the .rgs file associated with your object.
diff --git a/docs/atl/creating-the-project-atl-tutorial-part-1.md b/docs/atl/creating-the-project-atl-tutorial-part-1.md
index b8a01fd2255..c7aa2721438 100644
--- a/docs/atl/creating-the-project-atl-tutorial-part-1.md
+++ b/docs/atl/creating-the-project-atl-tutorial-part-1.md
@@ -3,11 +3,12 @@ description: "Learn more about: Creating the Project (ATL Tutorial, Part 1)"
title: "Creating the Project (ATL Tutorial, Part 1)"
ms.custom: "get-started-article"
ms.date: "08/19/2019"
-ms.assetid: f6b727d1-390a-4b27-b82f-daadcd9fc059
ms.topic: tutorial
---
# Creating the Project (ATL Tutorial, Part 1)
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
This tutorial walks you step-by-step through a non-attributed ATL project that creates an ActiveX object that displays a polygon. The object includes options for allowing the user to change the number of sides making up the polygon, and code to refresh the display.
> [!NOTE]
diff --git a/docs/atl/data-transfer-classes.md b/docs/atl/data-transfer-classes.md
index 67709a809cd..c3515d329ca 100644
--- a/docs/atl/data-transfer-classes.md
+++ b/docs/atl/data-transfer-classes.md
@@ -4,10 +4,11 @@ title: "Data Transfer Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["data transfer [C++]", "data transfer [C++], classes", "data transfer classes [C++]"]
-ms.assetid: c10bcdc8-b90c-4c2a-9179-fd3de80461da
---
# Data Transfer Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following classes support various types of data transfer:
- [IDataObjectImpl](../atl/reference/idataobjectimpl-class.md) Supports Uniform Data Transfer by using standard formats to retrieve and set data. Handles data change notifications by managing connections to advise sinks.
diff --git a/docs/atl/data-types-classes.md b/docs/atl/data-types-classes.md
index 85d986bad81..c636b279ff2 100644
--- a/docs/atl/data-types-classes.md
+++ b/docs/atl/data-types-classes.md
@@ -4,10 +4,11 @@ title: "Data Types Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["data types classes [C++]", "data types [C++], classes"]
-ms.assetid: 29882bab-9174-4dfa-8227-ccfeba80b865
---
# Data Types Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following classes wrap C++ data types:
- [CComBSTR](../atl/reference/ccombstr-class.md) Wraps the `BSTR` data type.
diff --git a/docs/atl/dcomcnfg.md b/docs/atl/dcomcnfg.md
index 0a0468d6a57..ac312effae9 100644
--- a/docs/atl/dcomcnfg.md
+++ b/docs/atl/dcomcnfg.md
@@ -3,10 +3,11 @@ description: "Learn more about: DCOMCNFG"
title: "DCOMCNFG"
ms.date: "11/04/2016"
helpviewer_keywords: ["DCOMCNFG utility", "DCOM, configuring in ATL"]
-ms.assetid: 5a8126e9-ef27-40fb-a66e-9dce8d1a7e80
---
# DCOMCNFG
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
DCOMCNFG is a Windows NT 4.0 utility that allows you to configure various DCOM-specific settings in the registry. The DCOMCNFG window has three pages: Default Security, Default Properties, and Applications. Under Windows 2000 a fourth page, Default Protocols, is present.
## Default Security Page
diff --git a/docs/atl/debugging-and-exceptions-classes.md b/docs/atl/debugging-and-exceptions-classes.md
index 703972808b0..c8a8205fa2c 100644
--- a/docs/atl/debugging-and-exceptions-classes.md
+++ b/docs/atl/debugging-and-exceptions-classes.md
@@ -4,10 +4,11 @@ title: "Debugging and Exceptions Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["debugging and exceptions classes"]
-ms.assetid: d42d7649-9721-4a1a-8b38-d983a649fdb9
---
# Debugging and Exceptions Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
These classes provide support for exception handling and debugging.
- [CAtlDebugInterfacesModule](../atl/reference/catldebuginterfacesmodule-class.md) This class provides support for debugging interfaces.
diff --git a/docs/atl/debugging-tips.md b/docs/atl/debugging-tips.md
index 5fcdee636d5..f5680d207ed 100644
--- a/docs/atl/debugging-tips.md
+++ b/docs/atl/debugging-tips.md
@@ -3,11 +3,12 @@ description: "Learn more about: Debugging Tips"
title: "Debugging Tips (ATL)"
ms.date: "11/04/2016"
helpviewer_keywords: ["ATL, debugging", "services, debugging"]
-ms.assetid: 48c60244-d0ce-4466-85fa-6fa65fcfe86c
ms.topic: concept-article
---
# Debugging Tips
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following topics outline some useful steps for debugging your service:
- [Using Task Manager](../atl/using-task-manager.md)
diff --git a/docs/atl/design-principles-for-collection-and-enumerator-interfaces.md b/docs/atl/design-principles-for-collection-and-enumerator-interfaces.md
index e75179b64e0..7f9b5386a3b 100644
--- a/docs/atl/design-principles-for-collection-and-enumerator-interfaces.md
+++ b/docs/atl/design-principles-for-collection-and-enumerator-interfaces.md
@@ -3,11 +3,12 @@ description: "Learn more about: Design Principles for Collection and Enumerator
title: "Designing Collection and Enumerator Interfaces (ATL)"
ms.date: "11/04/2016"
helpviewer_keywords: ["enumerator interfaces", "collection interfaces"]
-ms.assetid: ea19a39e-6333-41a1-be62-5435c236640e
ms.topic: concept-article
---
# Design Principles for Collection and Enumerator Interfaces
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
There are different design principles behind each type of interface:
- A collection interface provides *random* access to a *single* item in the collection via the `Item` method, it lets clients discover how many items are in the collection via the `Count` property, and often allows clients to add and remove items.
diff --git a/docs/atl/displaying-assertions.md b/docs/atl/displaying-assertions.md
index 8587c3eb40c..e4ffc2a6420 100644
--- a/docs/atl/displaying-assertions.md
+++ b/docs/atl/displaying-assertions.md
@@ -3,11 +3,12 @@ description: "Learn more about: Displaying Assertions"
title: "Displaying Assertions"
ms.date: "05/05/2019"
helpviewer_keywords: ["debugging [ATL], displaying assertions", "assertions, displaying", "debugging assertions", "assertions, debugging"]
-ms.assetid: fa353fe8-4656-4384-a5d2-8866bc977f06
ms.topic: concept-article
---
# Displaying Assertions
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
If the client connected to your service appears to stop responding, the service may have asserted and displayed a message box that you are not able to see. You can confirm this by using the Visual Studio debugger to debug your code (see [Using Task Manager](../atl/using-task-manager.md) earlier in this section).
If you determine that your service is displaying a message box that you cannot see, you may want to set the **Allow Service to Interact with Desktop** option before using the service again. This option is a startup parameter that permits any message boxes displayed by the service to appear on the desktop. To set this option, open the Services Control Panel application, select the service, click **Startup**, and then select the **Allow Service to Interact with Desktop** option.
diff --git a/docs/atl/dual-interfaces-and-atl.md b/docs/atl/dual-interfaces-and-atl.md
index 2039cb3e12e..38dcc7d2888 100644
--- a/docs/atl/dual-interfaces-and-atl.md
+++ b/docs/atl/dual-interfaces-and-atl.md
@@ -3,10 +3,11 @@ description: "Learn more about: Dual Interfaces and ATL"
title: "Dual Interfaces and ATL"
ms.date: "11/04/2016"
helpviewer_keywords: ["COM, and ATL", "ATL, dual interfaces", "dual interfaces, about dual interfaces"]
-ms.assetid: 5a390e89-d2c4-41f0-8538-cab2c5e5d4c8
---
# Dual Interfaces and ATL
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
A dual interface allows its methods to be accessed as dispinterface methods or as vtable methods. This section covers some of the features of dual interfaces from an ATL perspective.
## In This Section
diff --git a/docs/atl/dual-interfaces-and-events.md b/docs/atl/dual-interfaces-and-events.md
index a0a520b396a..5e5fc2bc5e1 100644
--- a/docs/atl/dual-interfaces-and-events.md
+++ b/docs/atl/dual-interfaces-and-events.md
@@ -3,10 +3,11 @@ description: "Learn more about: Dual Interfaces and Events"
title: "Dual Interfaces and Events"
ms.date: "11/04/2016"
helpviewer_keywords: ["events [C++], dual interfaces", "dual interfaces, events"]
-ms.assetid: bb382f7c-e885-4274-bf07-83f3602615d2
---
# Dual Interfaces and Events
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
While it is possible to design an event interface as a dual, there are a number of good design reasons not to do so. The fundamental reason is that the source of the event will only fire the event via the vtable or via `Invoke`, not both. If the event source fires the event as a direct vtable method call, the `IDispatch` methods will never be used and it's clear that the interface should have been a pure vtable interface. If the event source fires the event as a call to `Invoke`, the vtable methods will never be used and it's clear that the interface should have been a dispinterface. If you define your event interfaces as duals, you'll be requiring clients to implement part of an interface that will never be used.
> [!NOTE]
diff --git a/docs/atl/dual-interfaces-classes.md b/docs/atl/dual-interfaces-classes.md
index b6755655498..c66bd005920 100644
--- a/docs/atl/dual-interfaces-classes.md
+++ b/docs/atl/dual-interfaces-classes.md
@@ -4,10 +4,11 @@ title: "Dual Interfaces Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["dual interfaces, classes", "dual interfaces"]
-ms.assetid: c2b1b165-ff39-4e4a-a683-91eca9158304
---
# Dual Interfaces Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following class provides support for dual interfaces:
- [IDispatchImpl](../atl/reference/idispatchimpl-class.md) Implements the `IDispatch` portion of a dual interface. For more information, see [Implementing the IDispatch Interface](/previous-versions/windows/desktop/automat/implementing-the-idispatch-interface).
diff --git a/docs/atl/enumerators-and-collections-classes.md b/docs/atl/enumerators-and-collections-classes.md
index 6ccef203df3..1362c008dee 100644
--- a/docs/atl/enumerators-and-collections-classes.md
+++ b/docs/atl/enumerators-and-collections-classes.md
@@ -4,10 +4,11 @@ title: "Enumerators and Collections Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["enumerators, ATL classes"]
-ms.assetid: fcd093b2-98bf-444d-94ab-9a55520a5051
---
# Enumerators and Collections Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following classes provide support for COM collections and enumerations:
- [CComEnum](../atl/reference/ccomenum-class.md) Defines a COM enumerator object based on an array.
diff --git a/docs/atl/error-information-classes.md b/docs/atl/error-information-classes.md
index 5a2a987385b..bea5c2cbbe2 100644
--- a/docs/atl/error-information-classes.md
+++ b/docs/atl/error-information-classes.md
@@ -4,10 +4,11 @@ title: "Error Information Classe (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["error handling, error information classes", "error handling, classes", "error information, classes"]
-ms.assetid: ba40c8fb-81fd-4f61-8f47-fa2cb540e274
---
# Error Information Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following class indicates how error information is handled:
- [ISupportErrorInfoImpl](../atl/reference/isupporterrorinfoimpl-class.md) Determines whether the object supports the [IErrorInfo](/windows/win32/api/oaidl/nn-oaidl-ierrorinfo) interface. `IErrorInfo` allows error information to be propagated back to the client.
diff --git a/docs/atl/event-handling-and-atl.md b/docs/atl/event-handling-and-atl.md
index 649b68042c1..9a06e07a6a7 100644
--- a/docs/atl/event-handling-and-atl.md
+++ b/docs/atl/event-handling-and-atl.md
@@ -3,10 +3,11 @@ description: "Learn more about: Event Handling and ATL"
title: "Event Handling and ATL"
ms.date: "11/04/2016"
helpviewer_keywords: ["event handling, about event handling"]
-ms.assetid: e4812b0d-6fdd-4e8c-bdb8-378a25c7bde2
---
# Event Handling and ATL
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
This section shows how to sink events using ATL. It covers the principles of COM event handling and the specifics of sinking events using the support provided by ATL.
For information on how to fire events and implement connection points, read [ATL Connection Points](../atl/atl-connection-points.md).
diff --git a/docs/atl/event-handling-principles.md b/docs/atl/event-handling-principles.md
index 41c766a5e7a..4aba9a8917b 100644
--- a/docs/atl/event-handling-principles.md
+++ b/docs/atl/event-handling-principles.md
@@ -3,10 +3,11 @@ description: "Learn more about: Event Handling Principles"
title: "Event Handling Principles (ATL)"
ms.date: "11/04/2016"
helpviewer_keywords: ["event handling, implementing", "event handling, advising event sources", "interfaces, event and event sink", "dual interfaces, event interfaces", "event handling, dual event interfaces"]
-ms.assetid: d17ca7cb-54f2-4658-ab8b-b721ac56801d
---
# Event Handling Principles
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
There are three steps common to all event handling. You will need to:
- Implement the event interface on your object.
diff --git a/docs/atl/example-implementing-a-property-page.md b/docs/atl/example-implementing-a-property-page.md
index 6e7ee66751a..57f0ba62255 100644
--- a/docs/atl/example-implementing-a-property-page.md
+++ b/docs/atl/example-implementing-a-property-page.md
@@ -3,11 +3,12 @@ description: "Learn more about: Example: Implementing a Property Page"
title: "Implementing a Property Page (ATL)"
ms.date: "05/09/2019"
helpviewer_keywords: ["property pages, implementing"]
-ms.assetid: c30b67fe-ce08-4249-ae29-f3060fa8d61e
ms.topic: how-to
---
# Example: Implementing a Property Page
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
::: moniker range=">=msvc-160"
The ATL Property Page wizard is not available in Visual Studio 2019 and later.
diff --git a/docs/atl/file-handling-classes.md b/docs/atl/file-handling-classes.md
index 22602083ecb..da26a0af03f 100644
--- a/docs/atl/file-handling-classes.md
+++ b/docs/atl/file-handling-classes.md
@@ -4,10 +4,11 @@ title: "File Handling Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["file classes [C++]"]
-ms.assetid: 94355eb1-daa3-4825-b183-7392b3899561
---
# File Handling Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
These classes provide methods for handling files, temporary files, and memory-mapped files.
- [CAtlFile](../atl/reference/catlfile-class.md) This class provides a thin wrapper around the Windows file-handling API.
diff --git a/docs/atl/fundamentals-of-atl-com-objects.md b/docs/atl/fundamentals-of-atl-com-objects.md
index afc7adb434f..336b93f9f20 100644
--- a/docs/atl/fundamentals-of-atl-com-objects.md
+++ b/docs/atl/fundamentals-of-atl-com-objects.md
@@ -3,10 +3,11 @@ description: "Learn more about: Fundamentals of ATL COM Objects"
title: "Fundamentals of ATL COM Objects"
ms.date: "11/19/2018"
helpviewer_keywords: ["COM, and ATL", "ATL, COM", "ATL COM objects", "COM objects, ATL"]
-ms.assetid: 0f9c9d98-cc28-45da-89ac-dc94cee422fe
---
# Fundamentals of ATL COM Objects
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following illustration depicts the relationship among the classes and interfaces that are used to define an ATL COM object.

diff --git a/docs/atl/identifying-the-elements-of-the-dhtml-control-project.md b/docs/atl/identifying-the-elements-of-the-dhtml-control-project.md
index 7ac825b8372..563f6a8ec03 100644
--- a/docs/atl/identifying-the-elements-of-the-dhtml-control-project.md
+++ b/docs/atl/identifying-the-elements-of-the-dhtml-control-project.md
@@ -3,11 +3,12 @@ description: "Learn more about: Identifying the Elements of the DHTML Control Pr
title: "Identifying the Elements of the DHTML Control Project"
ms.date: "11/19/2018"
helpviewer_keywords: ["HTML controls, ATL support", "DHTML controls, ATL support"]
-ms.assetid: b627547a-3768-4346-9900-4b7a21fb8e27
ms.topic: concept-article
---
# Identifying the Elements of the DHTML Control Project
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
Most DHTML control code is exactly like that created for any ATL control. For a basic understanding of the generic code, work through the [ATL tutorial](../atl/active-template-library-atl-tutorial.md), and read the sections [Creating an ATL Project](../atl/reference/creating-an-atl-project.md) and [Fundamentals of ATL COM Objects](../atl/fundamentals-of-atl-com-objects.md).
A DHTML control is similar to any ATL control, except:
diff --git a/docs/atl/implementing-a-dialog-box.md b/docs/atl/implementing-a-dialog-box.md
index c84428bea54..a416d87a717 100644
--- a/docs/atl/implementing-a-dialog-box.md
+++ b/docs/atl/implementing-a-dialog-box.md
@@ -3,11 +3,12 @@ description: "Learn more about: Implementing a Dialog Box"
title: "Implementing a Dialog Box"
ms.date: "11/04/2016"
helpviewer_keywords: ["CSimpleDialog class, implementing dialog boxes in ATL", "dialog boxes, ATL", "CAxDialogImpl class, implementing dialog boxes in ATL", "ATL, dialog boxes"]
-ms.assetid: 478525f2-aa6a-435a-b162-68fc8aa98a8e
ms.topic: how-to
---
# Implementing a Dialog Box
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
There are two ways to add a dialog box to your ATL project: use the ATL Dialog Wizard or add it manually.
## Adding a Dialog Box with the ATL Dialog Wizard
diff --git a/docs/atl/implementing-a-dual-interface.md b/docs/atl/implementing-a-dual-interface.md
index 6abd84d51b4..fc2afff4195 100644
--- a/docs/atl/implementing-a-dual-interface.md
+++ b/docs/atl/implementing-a-dual-interface.md
@@ -3,11 +3,12 @@ description: "Learn more about: Implementing a Dual Interface"
title: "Implementing a Dual Interface (ATL)"
ms.date: "11/04/2016"
helpviewer_keywords: ["IDispatchImpl class, implementing dual interfaces", "dual interfaces, implementing"]
-ms.assetid: d1da3633-b445-4dcd-8a0a-3efdafada3ea
ms.topic: concept-article
---
# Implementing a Dual Interface
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
You can implement a dual interface using the [IDispatchImpl](../atl/reference/idispatchimpl-class.md) class, which provides a default implementation of the `IDispatch` methods in a dual interface. For more information, see [Implementing the IDispatch Interface](/previous-versions/windows/desktop/automat/implementing-the-idispatch-interface).
To use this class:
diff --git a/docs/atl/implementing-a-window-with-cwindowimpl.md b/docs/atl/implementing-a-window-with-cwindowimpl.md
index be0f590b83f..aaad98298e0 100644
--- a/docs/atl/implementing-a-window-with-cwindowimpl.md
+++ b/docs/atl/implementing-a-window-with-cwindowimpl.md
@@ -3,11 +3,12 @@ description: "Learn more about: Implementing a Window with CWindowImpl"
title: "Implementing a Window with CWindowImpl"
ms.date: "11/04/2016"
helpviewer_keywords: ["ATL, windows", "windows [C++], subclassing", "windows [C++], superclassing", "windows [C++], ATL", "subclassing ATL window classes", "superclassing, ATL"]
-ms.assetid: 3fc40550-f1d6-4702-8b7c-4cf682b6a855
ms.topic: how-to
---
# Implementing a Window with CWindowImpl
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
To implement a window, derive a class from `CWindowImpl`. In your derived class, declare a message map and the message handler functions. You can now use your class in three different ways:
- [Create a window based on a new Windows class](#_atl_creating_a_window_based_on_a_new_windows_class)
diff --git a/docs/atl/implementing-a-window.md b/docs/atl/implementing-a-window.md
index dbe42c3fbc5..478f0fa5750 100644
--- a/docs/atl/implementing-a-window.md
+++ b/docs/atl/implementing-a-window.md
@@ -3,11 +3,12 @@ description: "Learn more about: Implementing a Window"
title: "Implementing a Window (ATL)"
ms.date: "11/04/2016"
helpviewer_keywords: ["ATL, windows", "CWindowImpl class, using", "windows [C++], implementing in ATL"]
-ms.assetid: eb1ce8d6-72f9-4894-aae7-e60a61665628
ms.topic: concept-article
---
# Implementing a Window
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
Class [CWindowImpl](../atl/reference/cwindowimpl-class.md) allows you to implement a window and handle its messages. Message handing in ATL is based on a message map. This section explains:
- How to [add a message handler](../atl/adding-an-atl-message-handler.md) to a control.
diff --git a/docs/atl/implementing-an-stl-based-collection.md b/docs/atl/implementing-an-stl-based-collection.md
index 761ef740d16..5670f233a3b 100644
--- a/docs/atl/implementing-an-stl-based-collection.md
+++ b/docs/atl/implementing-an-stl-based-collection.md
@@ -3,11 +3,12 @@ description: "Learn more about: Implementing a C++ Standard Library-Based Collec
title: "Implementing a C++ Standard Library-Based Collection"
ms.date: "11/04/2016"
helpviewer_keywords: ["ICollectionOnSTLImpl interface"]
-ms.assetid: 6d49f819-1957-4813-b074-3f12c494d8ca
ms.topic: how-to
---
# Implementing a C++ Standard Library-Based Collection
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
ATL provides the `ICollectionOnSTLImpl` interface to enable you to quickly implement C++ Standard Library-based collection interfaces on your objects. To understand how this class works, you will work through a simple example (below) that uses this class to implement a read-only collection aimed at Automation clients.
The sample code is from the [ATLCollections sample](../overview/visual-cpp-samples.md).
diff --git a/docs/atl/implementing-ccomobject-ccomaggobject-and-ccompolyobject.md b/docs/atl/implementing-ccomobject-ccomaggobject-and-ccompolyobject.md
index e7a6428fbaa..1248dc40715 100644
--- a/docs/atl/implementing-ccomobject-ccomaggobject-and-ccompolyobject.md
+++ b/docs/atl/implementing-ccomobject-ccomaggobject-and-ccompolyobject.md
@@ -3,11 +3,12 @@ description: "Learn more about: Implementing CComObject, CComAggObject, and CCom
title: "Implementing CComObject, CComAggObject, and CComPolyObject"
ms.date: "11/04/2016"
helpviewer_keywords: ["CComPolyObject class, implementing", "CreateInstance method", "CComAggObject class", "CComObject class, implementing"]
-ms.assetid: 5aabe938-104d-492e-9c41-9f7fb1c62098
ms.topic: concept-article
---
# Implementing CComObject, CComAggObject, and CComPolyObject
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The template classes [CComObject](../atl/reference/ccomobject-class.md), [CComAggObject](../atl/reference/ccomaggobject-class.md), and [CComPolyObject](../atl/reference/ccompolyobject-class.md) are always the most derived classes in the inheritance chain. It is their responsibility to handle all of the methods in `IUnknown`: `QueryInterface`, `AddRef`, and `Release`. In addition, `CComAggObject` and `CComPolyObject` (when used for aggregated objects) provide the special reference counting and `QueryInterface` semantics required for the inner unknown.
Whether `CComObject`, `CComAggObject`, or `CComPolyObject` is used depends on whether you declare one (or none) of the following macros:
diff --git a/docs/atl/implementing-ccomobjectrootex.md b/docs/atl/implementing-ccomobjectrootex.md
index 5dc0fc19caf..48a7ab9b4de 100644
--- a/docs/atl/implementing-ccomobjectrootex.md
+++ b/docs/atl/implementing-ccomobjectrootex.md
@@ -3,11 +3,12 @@ description: "Learn more about: Implementing CComObjectRootEx"
title: "Implementing CComObjectRootEx"
ms.date: "11/04/2016"
helpviewer_keywords: ["CComObjectRoot class, implementing", "CComObjectRootEx class"]
-ms.assetid: 79630c44-f2df-4e9e-b730-400a0ebfbd2b
ms.topic: concept-article
---
# Implementing CComObjectRootEx
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
[CComObjectRootEx](../atl/reference/ccomobjectrootex-class.md) is essential; all ATL objects must have one instance of `CComObjectRootEx` or [CComObjectRoot](../atl/reference/ccomobjectroot-class.md) in their inheritance. `CComObjectRootEx` provides the default `QueryInterface` mechanism based on COM map entries.
Through its COM map, an object's interfaces are exposed to a client when the client queries for an interface. The query is performed through `CComObjectRootEx::InternalQueryInterface`. `InternalQueryInterface` only handles interfaces in the COM map table.
diff --git a/docs/atl/implementing-property-pages.md b/docs/atl/implementing-property-pages.md
index d9e3b0942c4..b6fb0ecf5ee 100644
--- a/docs/atl/implementing-property-pages.md
+++ b/docs/atl/implementing-property-pages.md
@@ -3,11 +3,12 @@ description: "Learn more about: Implementing Property Pages"
title: "Implementing Property Pages"
ms.date: "11/04/2016"
helpviewer_keywords: ["IPropertyPage2 class", "IPropertyPage class", "property pages, implementing"]
-ms.assetid: 62f29440-33a7-40eb-a1ef-3634c95f640c
ms.topic: how-to
---
# Implementing Property Pages
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
::: moniker range=">=msvc-160"
The ATL Property Page wizard is not available in Visual Studio 2019 and later.
diff --git a/docs/atl/implementing-the-event-handling-interface.md b/docs/atl/implementing-the-event-handling-interface.md
index 3442039a73e..121be8961ce 100644
--- a/docs/atl/implementing-the-event-handling-interface.md
+++ b/docs/atl/implementing-the-event-handling-interface.md
@@ -3,11 +3,12 @@ description: "Learn more about: Implementing the Event Handling Interface"
title: "Implementing the Event Handling Interface"
ms.date: "11/04/2016"
helpviewer_keywords: ["ATL, event handling", "event handling, ATL", "interfaces, event and event sink"]
-ms.assetid: eb2a5b33-88dc-4ce3-bee0-c5c38ea050d7
ms.topic: concept-article
---
# Implementing the Event Handling Interface
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
ATL helps you with all three elements required for handling events: implementing the event interface, advising the event source, and unadvising the event source. The precise steps you'll need to take depend on the type of the event interface and the performance requirements of your application.
The most common ways of implementing an interface using ATL are:
diff --git a/docs/atl/includes/lifecycle-note.md b/docs/atl/includes/lifecycle-note.md
new file mode 100644
index 00000000000..7d403694aaa
--- /dev/null
+++ b/docs/atl/includes/lifecycle-note.md
@@ -0,0 +1,3 @@
+>[!NOTE]
+> The Active Template Library (ATL) continues to be supported. However, we're no longer adding features or updating the documentation.
+
diff --git a/docs/atl/inserting-a-composite-control.md b/docs/atl/inserting-a-composite-control.md
index ad1f4f6dc24..78e2ee55f0d 100644
--- a/docs/atl/inserting-a-composite-control.md
+++ b/docs/atl/inserting-a-composite-control.md
@@ -3,11 +3,12 @@ description: "Learn more about: Inserting a Composite Control"
title: "Inserting a Composite Control"
ms.date: "11/04/2016"
helpviewer_keywords: ["composite controls, inserting with ATL Object Wizard", "composite controls", "ATL Control Wizard"]
-ms.assetid: f10b1927-9fc6-40a7-ac29-efdac70584fe
ms.topic: how-to
---
# Inserting a Composite Control
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The **Add Class** dialog box allows you to insert an ATL object into a project. Access this dialog box by right-clicking the project name in Solution Explorer, pointing to **Add**, and then clicking **Add Class**.
In the **Add Class** dialog box, choose **ATL Control**. This will start the [ATL Control Wizard](../atl/reference/atl-control-wizard.md). To create a composite control, select the **Options** tab, and click the **Composite control** check box.
diff --git a/docs/atl/interface-pointers-classes.md b/docs/atl/interface-pointers-classes.md
index d54f0ad4aa5..06f9c44a043 100644
--- a/docs/atl/interface-pointers-classes.md
+++ b/docs/atl/interface-pointers-classes.md
@@ -4,10 +4,11 @@ title: "Interface Pointers Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["pointers, to interfaces", "interfaces, pointers classes", "interface pointers classes"]
-ms.assetid: 712617a1-17ae-4b5c-a32c-a48b758df7a6
---
# Interface Pointers Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following classes manage a given interface pointer:
- [CComPtr](../atl/reference/ccomptr-class.md) Performs automatic reference counting.
diff --git a/docs/atl/interfaces-atl.md b/docs/atl/interfaces-atl.md
index 93422d3cd23..1b36fe72cec 100644
--- a/docs/atl/interfaces-atl.md
+++ b/docs/atl/interfaces-atl.md
@@ -4,10 +4,11 @@ title: "Interfaces (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["COM interfaces", "interfaces, COM"]
-ms.assetid: de6c8b12-6230-4fdc-af66-a28b91d5ee55
---
# Interfaces (ATL)
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
An interface is the way in which an object exposes its functionality to the outside world. In COM, an interface is a table of pointers (like a C++ vtable) to functions implemented by the object. The table represents the interface, and the functions to which it points are the methods of that interface. An object can expose as many interfaces as it chooses.
Each interface is based on the fundamental COM interface, [IUnknown](../atl/iunknown.md). The methods of `IUnknown` allow navigation to other interfaces exposed by the object.
diff --git a/docs/atl/introduction-to-atl-window-classes.md b/docs/atl/introduction-to-atl-window-classes.md
index 5ae3fc8c8a3..6c245514d51 100644
--- a/docs/atl/introduction-to-atl-window-classes.md
+++ b/docs/atl/introduction-to-atl-window-classes.md
@@ -3,11 +3,12 @@ description: "Learn more about: Introduction to ATL Window Classes"
title: "Introduction to ATL Window Classes"
ms.date: "11/04/2016"
helpviewer_keywords: ["window classes"]
-ms.assetid: 503efc2c-a269-495d-97cf-3fb300d52f3d
ms.topic: concept-article
---
# Introduction to ATL Window Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following ATL classes are designed to implement and manipulate windows:
- [CWindow](../atl/reference/cwindow-class.md) allows you to attach a window handle to the `CWindow` object. You then call `CWindow` methods to manipulate the window.
diff --git a/docs/atl/introduction-to-atl.md b/docs/atl/introduction-to-atl.md
index cccfc973918..0a62bded508 100644
--- a/docs/atl/introduction-to-atl.md
+++ b/docs/atl/introduction-to-atl.md
@@ -4,11 +4,12 @@ title: "Introduction to ATL"
ms.custom: "index-page"
ms.date: "11/04/2016"
helpviewer_keywords: ["COM objects, creating in ATL", "ATL"]
-ms.assetid: 77f565e8-c4ec-4a80-af4b-7278fcfe5c98
ms.topic: concept-article
---
# Introduction to ATL
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
ATL is the Active Template Library, a set of template-based C++ classes with which you can easily create small, fast Component Object Model (COM) objects. It has special support for key COM features including: stock implementations of [IUnknown](/windows/win32/api/unknwn/nn-unknwn-iunknown), [IClassFactory](/windows/win32/api/unknwnbase/nn-unknwnbase-iclassfactory), [IClassFactory2](/windows/win32/api/ocidl/nn-ocidl-iclassfactory2), and `IDispatch`; dual interfaces; standard COM enumerator interfaces; connection points; tear-off interfaces; and ActiveX controls.
ATL code can be used to create single-threaded objects, apartment-model objects, free-threaded model objects, or both free-threaded and apartment-model objects.
diff --git a/docs/atl/introduction-to-com-and-atl.md b/docs/atl/introduction-to-com-and-atl.md
index 57e25904bca..47447c9ebdb 100644
--- a/docs/atl/introduction-to-com-and-atl.md
+++ b/docs/atl/introduction-to-com-and-atl.md
@@ -4,11 +4,12 @@ title: "Introduction to COM and ATL"
ms.custom: "index-page"
ms.date: "11/04/2016"
helpviewer_keywords: ["COM, and ATL", "ATL, COM", "COM objects, ATL"]
-ms.assetid: 35d6ae9c-abbb-42f0-9344-33f3c19ac3ce
ms.topic: concept-article
---
# Introduction to COM and ATL
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
This section provides a brief introduction to COM and ATL.
## In This Section
diff --git a/docs/atl/introduction-to-com.md b/docs/atl/introduction-to-com.md
index c44fc4f0652..8b192520ef9 100644
--- a/docs/atl/introduction-to-com.md
+++ b/docs/atl/introduction-to-com.md
@@ -4,11 +4,12 @@ title: "Introduction to COM"
ms.custom: "index-page"
ms.date: "11/04/2016"
helpviewer_keywords: ["COM"]
-ms.assetid: 120735d9-db71-4ad3-a730-ce576ea2354e
ms.topic: concept-article
---
# Introduction to COM
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
COM is the fundamental "object model" on which ActiveX Controls and OLE are built. COM allows an object to expose its functionality to other components and to host applications. It defines both how the object exposes itself and how this exposure works across processes and across networks. COM also defines the object's life cycle.
Fundamental to COM are these concepts:
diff --git a/docs/atl/invoking-scripts.md b/docs/atl/invoking-scripts.md
index 2d339471811..3cc906049fc 100644
--- a/docs/atl/invoking-scripts.md
+++ b/docs/atl/invoking-scripts.md
@@ -3,11 +3,12 @@ description: "Learn more about: Invoking Scripts"
title: "Invoking Scripts (ATL)"
ms.date: "11/04/2016"
helpviewer_keywords: ["StringRegister method", "scripts, invoking registry in ATL"]
-ms.assetid: eabd41ee-586b-4266-9e92-5aaad04b73a4
ms.topic: concept-article
---
# Invoking Scripts
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
[Using Replaceable Parameters (The Registrar's Preprocessor)](../atl/using-replaceable-parameters-the-registrar-s-preprocessor.md) discusses replacement maps and mentions the Registrar method **AddReplacement**. The Registrar has eight other methods specific to scripting, and all are described in the following table.
|Method|Syntax/Description|
diff --git a/docs/atl/iunknown-implementation-classes.md b/docs/atl/iunknown-implementation-classes.md
index 7721fad35c6..a64a723fe84 100644
--- a/docs/atl/iunknown-implementation-classes.md
+++ b/docs/atl/iunknown-implementation-classes.md
@@ -4,10 +4,11 @@ title: "IUnknown Implementation Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["IUnknown implementation classes"]
-ms.assetid: 47b69bb5-69d8-4a9c-84a8-329bdde2bb3f
---
# IUnknown Implementation Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following classes implement `IUnknown` and related methods:
- [CComObjectRootEx](../atl/reference/ccomobjectrootex-class.md) Manages reference counting for both aggregated and nonaggregated objects. Allows you to specify a threading model.
diff --git a/docs/atl/iunknown.md b/docs/atl/iunknown.md
index ee1578aa31f..e466a86e6a5 100644
--- a/docs/atl/iunknown.md
+++ b/docs/atl/iunknown.md
@@ -4,10 +4,11 @@ title: "IUnknown"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["COM interfaces, base interface", "IUnknown interface"]
-ms.assetid: e6b85472-e54b-4b8c-b19f-4454d6c05a8f
---
# IUnknown
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
[IUnknown](/windows/win32/api/unknwn/nn-unknwn-iunknown) is the base interface of every other COM interface. This interface defines three methods: [QueryInterface](/windows/win32/api/unknwn/nf-unknwn-iunknown-queryinterface(q)), [AddRef](/windows/win32/api/unknwn/nf-unknwn-iunknown-addref), and [Release](/windows/win32/api/unknwn/nf-unknwn-iunknown-release). [QueryInterface](/windows/win32/api/unknwn/nf-unknwn-iunknown-queryinterface(q)) allows an interface user to ask the object for a pointer to another of its interfaces. [AddRef](/windows/win32/api/unknwn/nf-unknwn-iunknown-addref) and [Release](/windows/win32/api/unknwn/nf-unknwn-iunknown-release) implement reference counting on the interface.
## See also
diff --git a/docs/atl/linking-to-the-crt-in-your-atl-project.md b/docs/atl/linking-to-the-crt-in-your-atl-project.md
index 430134baa43..3e5d84ca794 100644
--- a/docs/atl/linking-to-the-crt-in-your-atl-project.md
+++ b/docs/atl/linking-to-the-crt-in-your-atl-project.md
@@ -3,11 +3,12 @@ description: "Learn more about: Linking to the CRT in Your ATL Project"
title: "Linking to the CRT in Your ATL Project"
ms.date: "11/04/2016"
helpviewer_keywords: ["CRT, linking with ATL", "WinMainCRTStartup method", "DllMainCRTStartup method", "wWinMainCRTStartup method", "ATL, C Run-Time library (CRT)"]
-ms.assetid: 650957ae-362c-4ecf-8b03-5d49138e8b5b
ms.topic: concept-article
---
# Linking to the CRT in Your ATL Project
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The [C Run-Time Libraries](../c-runtime-library/crt-library-features.md) (CRT) provide many useful functions that can make programming much easier during ATL development. All ATL projects link to the CRT library. You can see the advantages and disadvantages of linking method in [Benefits and Tradeoffs of the Method Used to Link to the CRT](../atl/benefits-and-tradeoffs-of-the-method-used-to-link-to-the-crt.md).
## Effects of Linking to the CRT on Your Program Image
diff --git a/docs/atl/marshaling.md b/docs/atl/marshaling.md
index 1f5c52b2be5..28f1c0f3582 100644
--- a/docs/atl/marshaling.md
+++ b/docs/atl/marshaling.md
@@ -3,11 +3,12 @@ description: "Learn more about: Marshaling"
title: "Marshaling"
ms.date: "11/04/2016"
helpviewer_keywords: ["marshaling, COM interop", "marshaling", "COM interfaces, marshaling"]
-ms.assetid: 40644b0a-1106-4fc8-9dfb-9bee9915d825
ms.topic: concept-article
---
# Marshaling
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The COM technique of marshaling allows interfaces exposed by an object in one process to be used in another process. In marshaling, COM provides code (or uses code provided by the interface implementor) both to pack a method's parameters into a format that can be moved across processes (as well as, across the wire to processes running on other machines) and to unpack those parameters at the other end. Likewise, COM must perform these same steps on the return from the call.
> [!NOTE]
diff --git a/docs/atl/memory-management-classes.md b/docs/atl/memory-management-classes.md
index 680e61f19de..89bea5d1d08 100644
--- a/docs/atl/memory-management-classes.md
+++ b/docs/atl/memory-management-classes.md
@@ -4,10 +4,11 @@ title: "Memory Management Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["memory, managing"]
-ms.assetid: be564a5e-577e-40a7-bfe3-25ad21e57270
---
# Memory Management Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
These classes provide support for heap pointers, smart pointers, and other memory allocation routines.
- [CAutoPtr](../atl/reference/cautoptr-class.md) This class represents a smart pointer object.
diff --git a/docs/atl/message-handler-functions.md b/docs/atl/message-handler-functions.md
index a37dc85d188..e478109d521 100644
--- a/docs/atl/message-handler-functions.md
+++ b/docs/atl/message-handler-functions.md
@@ -4,10 +4,11 @@ title: "Message Handler Functions"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["MESSAGE_HANDLER macro", "COMMAND_HANDLER macro", "CommandHandler method", "MessageHandler method", "NotifyHandler method", "message maps, ATL", "NOTIFY_HANDLER macro, message handler functions", "ATL, message handlers"]
-ms.assetid: 2007a8c5-0143-42f1-91ab-809f235f9d50
---
# Message Handler Functions
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
ATL provides three types of message handler functions:
|Type of message handler|Corresponding message macro|
diff --git a/docs/atl/message-maps-atl.md b/docs/atl/message-maps-atl.md
index 0ab8a690a8f..6b0ab765a4d 100644
--- a/docs/atl/message-maps-atl.md
+++ b/docs/atl/message-maps-atl.md
@@ -4,10 +4,11 @@ title: "Message Maps (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["message maps, ATL", "ATL, message handlers"]
-ms.assetid: 9e100400-65c7-4a85-8857-4e6cb6dd7340
---
# Message Maps (ATL)
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
A message map associates a handler function with a particular message, command, or notification. By using ATL's [message map macros](../atl/reference/message-map-macros-atl.md), you can specify a message map for a window. The window procedures in `CWindowImpl`, `CDialogImpl`, and `CContainedWindowT` direct a window's messages to its message map.
The [message handler functions](../atl/message-handler-functions.md) accept an additional argument of type `BOOL&`. This argument indicates whether a message has been processed, and it is set to TRUE by default. A handler function can then set the argument to FALSE to indicate that it has not handled a message. In this case, ATL will continue to look for a handler function further in the message map. By setting this argument to FALSE, you can first perform some action in response to a message and then allow the default processing or another handler function to finish handling the message.
diff --git a/docs/atl/messagehandler.md b/docs/atl/messagehandler.md
index 4fcdaad53bd..4fa25ca0ead 100644
--- a/docs/atl/messagehandler.md
+++ b/docs/atl/messagehandler.md
@@ -4,10 +4,11 @@ title: "MessageHandler"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["MessageHandler function"]
-ms.assetid: 8a0acf97-1b0d-4226-91b9-75446634a03c
---
# MessageHandler
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
`MessageHandler` is the name of the function identified by the second parameter of the MESSAGE_HANDLER macro in your message map.
## Syntax
diff --git a/docs/atl/mmc-snap-in-classes.md b/docs/atl/mmc-snap-in-classes.md
index 140e10dc5e1..62c9af27f64 100644
--- a/docs/atl/mmc-snap-in-classes.md
+++ b/docs/atl/mmc-snap-in-classes.md
@@ -4,10 +4,11 @@ title: "MMC Snap-In Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["MMC Snap-In classes"]
-ms.assetid: 4af1d5af-687f-48b1-b2c5-fa252241b4d6
---
# MMC Snap-In Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following classes provide support for developing Microsoft Management Console (MMC) snap-in components:
- [CSnapInItemImpl](../atl/reference/csnapinitemimpl-class.md) Implements a snap-in node object, such as adding menu items and toolbars, and forwarding commands for the snap-in node to the appropriate handler function.
diff --git a/docs/atl/modifying-the-atl-dhtml-control.md b/docs/atl/modifying-the-atl-dhtml-control.md
index 3e77a536a1f..34fab00665a 100644
--- a/docs/atl/modifying-the-atl-dhtml-control.md
+++ b/docs/atl/modifying-the-atl-dhtml-control.md
@@ -3,11 +3,12 @@ description: "Learn more about: Modifying the ATL DHTML Control"
title: "Modifying the ATL DHTML Control"
ms.date: "11/04/2016"
helpviewer_keywords: ["HTML controls, modifying", "DHTML controls", "DHTML controls, modifying"]
-ms.assetid: c053f35f-8629-4600-9595-721f5956777a
ms.topic: how-to
---
# Modifying the ATL DHTML Control
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The ATL Control Wizard provides starter code so you can build and run the control, and so you can see how the methods are written in the project files and how the DHTML calls into the control's C++ code using the dispatch methods. You can add any dispatch method to the interface. Then, you can call the methods in the HTML resource.
## To modify the ATL DHTML control
diff --git a/docs/atl/modifying-the-atl-project.md b/docs/atl/modifying-the-atl-project.md
index d9211d97764..7b87fb2adbf 100644
--- a/docs/atl/modifying-the-atl-project.md
+++ b/docs/atl/modifying-the-atl-project.md
@@ -3,11 +3,12 @@ description: "Learn more about: Modifying the ATL Project"
title: "Modifying the ATL Project"
ms.date: "11/04/2016"
helpviewer_keywords: ["controls [ATL], adding to composite controls", "Dialog editor, working with composite controls", "composite controls, adding controls"]
-ms.assetid: 59984518-748f-4b8b-875f-3e97d22d0b0f
ms.topic: concept-article
---
# Modifying the ATL Project
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
At this point, your composite control project implements the necessary objects for your composite control. The next step is to add any controls that the composite control will contain and handle any necessary events.
To add additional ActiveX or Windows controls, add a new resource script and then use the Dialog editor. For more information on adding controls (and related tasks), see [Dialog Editor](../windows/dialog-editor.md).
diff --git a/docs/atl/multiple-dual-interfaces.md b/docs/atl/multiple-dual-interfaces.md
index 99c43025249..52b22900163 100644
--- a/docs/atl/multiple-dual-interfaces.md
+++ b/docs/atl/multiple-dual-interfaces.md
@@ -4,10 +4,11 @@ title: "Multiple Dual Interfaces"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["multiple dual interfaces", "COM_INTERFACE_ENTRY2 macro", "dual interfaces, exposing multiple", "multiple dual interfaces, exposing with ATL", "IDispatchImpl class, multiple dual interfaces", "COM_INTERFACE_ENTRY_IID macro"]
-ms.assetid: 7fea86e6-247f-4063-be6e-85588a9e3719
---
# Multiple Dual Interfaces
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
You may want to combine the advantages of a dual interface (that is, the flexibility of both vtable and late binding, thus making the class available to scripting languages as well as C++) with the techniques of multiple inheritance.
Although it is possible to expose multiple dual interfaces on a single COM object, it is not recommended. If there are multiple dual interfaces, there must be only one `IDispatch` interface exposed. The techniques available to ensure that this is the case carry penalties such as loss of function or increased code complexity. The developer considering this approach should carefully weigh the advantages and disadvantages.
diff --git a/docs/atl/nonextensible-attribute.md b/docs/atl/nonextensible-attribute.md
index 08a854a4873..517f6ad1da7 100644
--- a/docs/atl/nonextensible-attribute.md
+++ b/docs/atl/nonextensible-attribute.md
@@ -3,10 +3,11 @@ description: "Learn more about: nonextensible Attribute"
title: "nonextensible Attribute"
ms.date: "11/04/2016"
helpviewer_keywords: ["nonextensible attribute", "dual interfaces, nonextensible attribute"]
-ms.assetid: 02a4a18b-ffd3-4d53-8fd1-feb1c05ad5ac
---
# nonextensible Attribute
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
If a dual interface will not be extended at run time (that is, you won't provide methods or properties via `IDispatch::Invoke` that are not available via the vtable), you should apply the **nonextensible** attribute to your interface definition. This attribute provides information to client languages (such as Visual Basic) that can be used to enable full code verification at compile time. If this attribute is not supplied, bugs may remain hidden in the client code until run time.
For more information on the **nonextensible** attribute and an example, see [nonextensible](../windows/attributes/nonextensible.md).
diff --git a/docs/atl/notifyhandler.md b/docs/atl/notifyhandler.md
index adb1d4a0db6..deaf83115cf 100644
--- a/docs/atl/notifyhandler.md
+++ b/docs/atl/notifyhandler.md
@@ -4,10 +4,11 @@ title: "NotifyHandler"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["NotifyHandler function"]
-ms.assetid: 5ff953ec-de35-42bc-8b3c-d384d636c139
---
# NotifyHandler
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The name of the function identified by the third parameter of the NOTIFY_HANDLER macro in your message map.
## Syntax
diff --git a/docs/atl/object-safety-classes.md b/docs/atl/object-safety-classes.md
index 8021fd778b8..69ec66cf8eb 100644
--- a/docs/atl/object-safety-classes.md
+++ b/docs/atl/object-safety-classes.md
@@ -4,10 +4,11 @@ title: Object Safety Classes (ATL)
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["safety classes", "object safety classes"]
-ms.assetid: 00060b28-49e2-4ec1-9a22-f501e07821d6
---
# Object Safety Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following class provides support for object safety:
- [IObjectSafetyImpl](../atl/reference/iobjectsafetyimpl-class.md) Allows an object to be marked as safe for initialization or safe for scripting.
diff --git a/docs/atl/persistence-classes.md b/docs/atl/persistence-classes.md
index bce7966eb71..18d1a4e3826 100644
--- a/docs/atl/persistence-classes.md
+++ b/docs/atl/persistence-classes.md
@@ -4,10 +4,11 @@ title: "Persistence Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["persistence classes", "persistence, classes"]
-ms.assetid: a6a2b6b2-52bc-471c-b78a-de58363128bb
---
# Persistence Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following classes implement object persistence:
- [IPersistPropertyBagImpl](../atl/reference/ipersistpropertybagimpl-class.md) Allows a client to load and save an object's properties to a property bag.
diff --git a/docs/atl/programming-with-atl-and-c-run-time-code.md b/docs/atl/programming-with-atl-and-c-run-time-code.md
index 66c4ade4f21..804e19a5600 100644
--- a/docs/atl/programming-with-atl-and-c-run-time-code.md
+++ b/docs/atl/programming-with-atl-and-c-run-time-code.md
@@ -3,11 +3,12 @@ description: "Learn more about: Programming with ATL and C Run-Time Code"
title: "Programming with ATL and C Run-Time Code"
ms.date: "11/04/2016"
helpviewer_keywords: ["ATL_MIN_CRT macro", "CRT, using with ATL", "_ATL_MIN_CRT macro", "ATL, C Run-Time library (CRT)"]
-ms.assetid: 20f03b66-1eb7-4add-84a2-6047db0911eb
ms.topic: concept-article
---
# Programming with ATL and C Run-Time Code
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
This section discusses the benefits of using the C Run-Time Library (CRT) with either static or dynamic linking.
## In This Section
diff --git a/docs/atl/programming-with-ccombstr-atl.md b/docs/atl/programming-with-ccombstr-atl.md
index 31f7ee2d370..c1b044ae46b 100644
--- a/docs/atl/programming-with-ccombstr-atl.md
+++ b/docs/atl/programming-with-ccombstr-atl.md
@@ -3,11 +3,12 @@ description: "Learn more about: Programming with CComBSTR (ATL)"
title: "Programming with CComBSTR (ATL)"
ms.date: "11/04/2016"
helpviewer_keywords: ["CComBSTR class, programming with", "Unicode, using CComBSTR [ATL]"]
-ms.assetid: d3bd0851-d132-4be9-9c4c-6ccba17acb2b
ms.topic: concept-article
---
# Programming with CComBSTR (ATL)
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The ATL class [CComBSTR](../atl/reference/ccombstr-class.md) provides a wrapper around the BSTR data type. While `CComBSTR` is a useful tool, there are several situations that require caution.
- [Conversion Issues](#programmingwithccombstr_conversionissues)
diff --git a/docs/atl/properties-and-property-pages-classes.md b/docs/atl/properties-and-property-pages-classes.md
index 17e8307bb07..9fafa9baf65 100644
--- a/docs/atl/properties-and-property-pages-classes.md
+++ b/docs/atl/properties-and-property-pages-classes.md
@@ -4,10 +4,11 @@ title: "Properties and Property Pages Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["property pages, classes", "properties [ATL], classes", "properties [ATL]"]
-ms.assetid: 31616f98-69f8-48b2-8d58-b8e7d1c2b2d8
---
# Properties and Property Pages Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following classes support properties and property pages:
- [CComDispatchDriver](../atl/reference/atl-typedefs.md#ccomdispatchdriver) Retrieves or sets an object's properties through an `IDispatch` pointer.
diff --git a/docs/atl/putting-the-control-on-a-web-page-atl-tutorial-part-7.md b/docs/atl/putting-the-control-on-a-web-page-atl-tutorial-part-7.md
index faf66529f16..b191688f163 100644
--- a/docs/atl/putting-the-control-on-a-web-page-atl-tutorial-part-7.md
+++ b/docs/atl/putting-the-control-on-a-web-page-atl-tutorial-part-7.md
@@ -3,11 +3,12 @@ description: "Learn more about: Putting the Control on a Web Page (ATL Tutorial,
title: "Putting the Control on a Web Page (ATL Tutorial, Part 7)"
ms.custom: "get-started-article"
ms.date: "05/06/2019"
-ms.assetid: 50dc4c95-c95b-4006-b88a-9826f7bdb222
ms.topic: tutorial
---
# Putting the Control on a Web Page (ATL Tutorial, Part 7)
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
Your control is now finished. To see your control work in a real-world situation, put it on a Web page. An HTML file that contains the control was created when you defined your control. Open the PolyCtl.htm file from **Solution Explorer**, and you can see your control on a Web page.
In this step, you add functionality to the control and script the Web page to respond to events. You'll also modify the control to let Internet Explorer know the control is safe for scripting.
diff --git a/docs/atl/queryinterface.md b/docs/atl/queryinterface.md
index 3d982e0e938..6849e52d2cd 100644
--- a/docs/atl/queryinterface.md
+++ b/docs/atl/queryinterface.md
@@ -4,10 +4,11 @@ title: "QueryInterface"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["interfaces, pointers", "interfaces, availability", "QueryInterface method"]
-ms.assetid: 62fce95e-aafa-4187-b50b-e6611b74c3b3
---
# `QueryInterface`
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
Although there are mechanisms by which an object can express the functionality it provides statically (before it is instantiated), the fundamental COM mechanism is to use the `IUnknown` method called [`QueryInterface`](/windows/win32/api/unknwn/nf-unknwn-iunknown-queryinterface(q)).
Every interface is derived from `IUnknown`, so every interface has an implementation of `QueryInterface`. Regardless of implementation, this method queries an object using the `IID` of the interface to which the caller wants a pointer. If the object supports that interface, `QueryInterface` retrieves a pointer to the interface, while also calling `AddRef`. Otherwise, it returns the `E_NOINTERFACE` error code.
diff --git a/docs/atl/recommendations-for-choosing-between-atl-and-mfc.md b/docs/atl/recommendations-for-choosing-between-atl-and-mfc.md
index 2fc4145a2b8..f52522b644c 100644
--- a/docs/atl/recommendations-for-choosing-between-atl-and-mfc.md
+++ b/docs/atl/recommendations-for-choosing-between-atl-and-mfc.md
@@ -3,10 +3,12 @@ description: "Learn more about: Recommendations for Choosing Between ATL and MFC
title: "Recommendations for Choosing Between ATL and MFC"
ms.date: "11/04/2016"
helpviewer_keywords: ["MFC, ATL support", "ATL, vs. MFC"]
-ms.assetid: 269325bb-11a8-4330-ad2b-a14a2458679e
---
# Recommendations for Choosing Between ATL and MFC
+>[!NOTE]
+> The Microsoft Foundation Classes library (MFC) and Active Template Library (ATL) continue to be supported. However, we're no longer adding features or updating the documentation.
+
When developing components and applications, you can choose between two approaches — ATL and MFC (the Microsoft Foundation Class Library).
## Using ATL
diff --git a/docs/atl/reference-counting.md b/docs/atl/reference-counting.md
index db71a9ca66c..594cc68c495 100644
--- a/docs/atl/reference-counting.md
+++ b/docs/atl/reference-counting.md
@@ -3,10 +3,11 @@ description: "Learn more about: Reference Counting"
title: "Reference Counting (ATL)"
ms.date: "11/04/2016"
helpviewer_keywords: ["AddRef method [C++], reference counting", "reference counting", "AddRef method [C++]", "reference counts", "references, counting"]
-ms.assetid: b1fd4514-6de6-429f-9e60-2777c0d07a3d
---
# Reference Counting
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
COM itself does not automatically try to remove an object from memory when it thinks the object is no longer being used. Instead, the object programmer must remove the unused object. The programmer determines whether an object can be removed based on a reference count.
COM uses the `IUnknown` methods, [AddRef](/windows/win32/api/unknwn/nf-unknwn-iunknown-addref) and [Release](/windows/win32/api/unknwn/nf-unknwn-iunknown-release), to manage the reference count of interfaces on an object. The general rules for calling these methods are:
diff --git a/docs/atl/reference/adding-a-new-interface-in-an-atl-project.md b/docs/atl/reference/adding-a-new-interface-in-an-atl-project.md
index f9b927b58c0..04bda95f84c 100644
--- a/docs/atl/reference/adding-a-new-interface-in-an-atl-project.md
+++ b/docs/atl/reference/adding-a-new-interface-in-an-atl-project.md
@@ -4,10 +4,11 @@ title: "Adding a New Interface in an ATL Project"
ms.date: "11/04/2016"
f1_keywords: ["vc.appwiz.ATL.interface"]
helpviewer_keywords: ["interfaces, adding to ATL objects", "Implement Interface ATL wizard", "controls [ATL], interfaces", "ATL projects, adding interfaces"]
-ms.assetid: 7d34b023-2c6b-4155-aca3-d47a40968063
---
# Adding a New Interface in an ATL Project
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
When you add an interface to your object or control, you create stubbed-out functions for each method in that interface. In your object or control, you can add only interfaces currently found in an existing type library. Also, the class in which you add the interface must implement the [BEGIN_COM_MAP](com-map-macros.md#begin_com_map) macro or, if the project is attributed, it must have the `coclass` attribute.
You can add a new interface to your control in one of two ways: manually or using code wizards in Class View.
diff --git a/docs/atl/reference/adding-an-atl-active-server-page-component.md b/docs/atl/reference/adding-an-atl-active-server-page-component.md
index 508bf1fbfca..9b0aa9b0b73 100644
--- a/docs/atl/reference/adding-an-atl-active-server-page-component.md
+++ b/docs/atl/reference/adding-an-atl-active-server-page-component.md
@@ -2,10 +2,11 @@
description: "Learn more about: Adding an ATL Active Server Page Component"
title: "Adding an ATL Active Server Page Component"
ms.date: "05/09/2019"
-ms.assetid: 7be2204c-6e58-4099-8892-001b848c8987
---
# Adding an ATL Active Server Page Component
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
::: moniker range=">=msvc-160"
The ATL Active Server Pages component wizard is not available in Visual Studio 2019 and later.
diff --git a/docs/atl/reference/adding-an-atl-com-plus-1-0-component.md b/docs/atl/reference/adding-an-atl-com-plus-1-0-component.md
index 6df0a367ba5..b04378c1ea7 100644
--- a/docs/atl/reference/adding-an-atl-com-plus-1-0-component.md
+++ b/docs/atl/reference/adding-an-atl-com-plus-1-0-component.md
@@ -2,10 +2,11 @@
description: "Learn more about: Adding an ATL COM+ 1.0 Component"
title: "Adding an ATL COM+ 1.0 Component"
ms.date: "05/09/2019"
-ms.assetid: c6c95e64-9ee4-4a6e-8804-5930202ce1b9
---
# Adding an ATL COM+ 1.0 Component
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
::: moniker range=">=msvc-160"
The ATL COM+ 1.0 Component wizard is not available in Visual Studio 2019 and later.
diff --git a/docs/atl/reference/adding-an-atl-control.md b/docs/atl/reference/adding-an-atl-control.md
index c9a01745336..e62a42cd078 100644
--- a/docs/atl/reference/adding-an-atl-control.md
+++ b/docs/atl/reference/adding-an-atl-control.md
@@ -3,10 +3,11 @@ description: "Learn more about: Adding an ATL Control"
title: "Adding an ATL Control"
ms.date: "11/04/2016"
helpviewer_keywords: ["ATL projects, adding controls", "controls [ATL], adding to projects"]
-ms.assetid: 10223e7e-fdb7-4163-80c6-44aeafa8e6ce
---
# Adding an ATL Control
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Use this wizard to add a user interface object to a project that supports interfaces for all potential containers. To support these interfaces, the project must have been created as an ATL application or as an MFC application that contains ATL support. You can use the [ATL Project Wizard](../../atl/reference/atl-project-wizard.md) to create an ATL application, or [add an ATL object to your MFC application](../../mfc/reference/adding-atl-support-to-your-mfc-project.md) to implement ATL support for an MFC application.
## To add an ATL control to your project
diff --git a/docs/atl/reference/adding-an-atl-dialog-box.md b/docs/atl/reference/adding-an-atl-dialog-box.md
index 928fd204304..e7519718ea2 100644
--- a/docs/atl/reference/adding-an-atl-dialog-box.md
+++ b/docs/atl/reference/adding-an-atl-dialog-box.md
@@ -3,10 +3,11 @@ description: "Learn more about: Adding an ATL Dialog Box"
title: "Adding an ATL Dialog Box"
ms.date: "11/04/2016"
helpviewer_keywords: ["ATL projects, adding dialog resources", "MFC dialog boxes, ATL dialogs", "dialog boxes, ATL"]
-ms.assetid: 152a378f-7b24-4f66-aeba-c740973f03a6
---
# Adding an ATL Dialog Box
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
To add an ATL dialog to your project, your project must be either an ATL project or an MFC project that includes ATL support. You can use the [ATL Project Wizard](../../atl/reference/atl-project-wizard.md) to create an ATL application, or [add an ATL object to your MFC application](../../mfc/reference/adding-atl-support-to-your-mfc-project.md) to implement ATL support for an MFC application.
By default, the ATL Dialog Wizard implements a dialog box derived from [CAxDialogImpl](../../atl/reference/caxdialogimpl-class.md). This class includes support for hosting ActiveX and Windows controls. If you do not want the overhead of ActiveX control support, once the wizard has generated your code, replace all instances of `CAxDialogImpl` with either [CSimpleDialog](../../atl/reference/csimpledialog-class.md) or [CDialogImpl](../../atl/reference/cdialogimpl-class.md) as your base class.
diff --git a/docs/atl/reference/adding-an-atl-ole-db-consumer.md b/docs/atl/reference/adding-an-atl-ole-db-consumer.md
index 52b1acc39ab..52b42c75ed2 100644
--- a/docs/atl/reference/adding-an-atl-ole-db-consumer.md
+++ b/docs/atl/reference/adding-an-atl-ole-db-consumer.md
@@ -3,10 +3,11 @@ description: "Learn more about: Adding an ATL OLE DB Consumer"
title: "Adding an ATL OLE DB Consumer"
ms.date: "05/09/2019"
helpviewer_keywords: ["ATL OLE DB consumers"]
-ms.assetid: f940a513-4e42-4148-b521-dd0d7dc89fa2
---
# Adding an ATL OLE DB Consumer
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
::: moniker range=">=msvc-160"
The ATL OLE DB Consumer wizard is not available in Visual Studio 2019 and later. You can still add the functionality manually. For more information, see [Creating a Consumer Without Using a Wizard](../../data/oledb/creating-a-consumer-without-using-a-wizard.md).
diff --git a/docs/atl/reference/adding-an-atl-ole-db-provider.md b/docs/atl/reference/adding-an-atl-ole-db-provider.md
index 3aba76e606f..908e53502a3 100644
--- a/docs/atl/reference/adding-an-atl-ole-db-provider.md
+++ b/docs/atl/reference/adding-an-atl-ole-db-provider.md
@@ -3,10 +3,11 @@ description: "Learn more about: Adding an ATL OLE DB Provider"
title: "Adding an ATL OLE DB Provider"
ms.date: "05/09/2019"
helpviewer_keywords: ["OLE DB, adding ATL OLE DB provider to projects", "ATL projects, adding ATL OLE DB providers", "ATL OLE DB providers"]
-ms.assetid: 26fba1e3-880f-4bc6-90e5-2096a48a3a6c
---
# Adding an ATL OLE DB Provider
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
::: moniker range=">=msvc-160"
The ATL OLE DB Provider wizard is not available in Visual Studio 2019 and later.
diff --git a/docs/atl/reference/adding-an-atl-property-page.md b/docs/atl/reference/adding-an-atl-property-page.md
index 376b4875a7f..543c72db463 100644
--- a/docs/atl/reference/adding-an-atl-property-page.md
+++ b/docs/atl/reference/adding-an-atl-property-page.md
@@ -3,10 +3,11 @@ description: "Learn more about: Adding an ATL Property Page"
title: "Adding an ATL Property Page"
ms.date: "05/09/2019"
helpviewer_keywords: ["property pages, adding", "ATL projects, adding property pages", "controls [ATL], property pages"]
-ms.assetid: ddf92b49-42a2-46d2-b6b8-d37baedebeca
---
# Adding an ATL Property Page
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
> [!NOTE]
> The ATL Property Page wizard is not available in Visual Studio 2019 and later.
diff --git a/docs/atl/reference/adding-an-atl-simple-object.md b/docs/atl/reference/adding-an-atl-simple-object.md
index 91e8e2ddac4..53c4b37fd33 100644
--- a/docs/atl/reference/adding-an-atl-simple-object.md
+++ b/docs/atl/reference/adding-an-atl-simple-object.md
@@ -4,10 +4,11 @@ title: "Adding an ATL Simple Object"
ms.date: "11/04/2016"
f1_keywords: ["vc.codewiz.classes.adding.atl"]
helpviewer_keywords: ["ATL projects, adding objects", "objects [ATL]", "ATL, simple objects"]
-ms.assetid: 9c57d2ef-0447-4c84-8982-3304b8e49847
---
# Adding an ATL Simple Object
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
To add an ATL (Active Template Library) object to your project, your project must have been created as an ATL application or as an MFC application that contains ATL support. You can use the [ATL Project Wizard](../../atl/reference/atl-project-wizard.md) to create an ATL application, or [add an ATL object to your MFC application](../../mfc/reference/adding-atl-support-to-your-mfc-project.md) to implement ATL support for an MFC application.
You can define COM interfaces for your new ATL object when you first create it, or add them later by using the [Implement Interface](../../ide/implementing-an-interface-visual-cpp.md#implement-interface-wizard) command from the **Class View** shortcut menu.
diff --git a/docs/atl/reference/adding-objects-and-controls-to-an-atl-project.md b/docs/atl/reference/adding-objects-and-controls-to-an-atl-project.md
index 036b72dc54c..f77dfceb83e 100644
--- a/docs/atl/reference/adding-objects-and-controls-to-an-atl-project.md
+++ b/docs/atl/reference/adding-objects-and-controls-to-an-atl-project.md
@@ -4,10 +4,11 @@ title: "Adding Objects and Controls to an ATL Project"
ms.date: "05/09/2019"
f1_keywords: ["vc.appwiz.ATL.controls"]
helpviewer_keywords: ["ATL projects, adding objects", "wizards [C++], ATL projects", "ATL projects, adding controls", "controls [ATL], adding to projects", "objects [C++], adding to ATL projects", "ATL Control Wizard"]
-ms.assetid: c0adcbd0-07fe-4c55-a8fd-8c2c65ecdaad
---
# Adding Objects and Controls to an ATL Project
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
> [!NOTE]
> The ATL COM+ 1.0 Component Wizard, ATL OLE DB Consumer wizard, and ATL Active Server Page Component wizard are not available in Visual Studio 2019 and later.
diff --git a/docs/atl/reference/aggregation-and-class-factory-macros.md b/docs/atl/reference/aggregation-and-class-factory-macros.md
index b6dacd4282f..7520e67a5f9 100644
--- a/docs/atl/reference/aggregation-and-class-factory-macros.md
+++ b/docs/atl/reference/aggregation-and-class-factory-macros.md
@@ -4,10 +4,11 @@ title: "Aggregation and Class Factory Macros"
ms.date: 08/12/2020
f1_keywords: ["ATLCOM/ATL::DECLARE_AGGREGATABLE", "ATLCOM/ATL::DECLARE_CLASSFACTORY", "ATLCOM/ATL::DECLARE_CLASSFACTORY_EX", "ATLCOM/ATL::DECLARE_CLASSFACTORY_AUTO_THREAD", "ATLCOM/ATL::DECLARE_CLASSFACTORY_SINGLETON", "ATLCOM/ATL::DECLARE_GET_CONTROLLING_UNKNOWN", "ATLCOM/ATL::DECLARE_NOT_AGGREGATABLE", "ATLCOM/ATL::DECLARE_ONLY_AGGREGATABLE", "ATLCOM/ATL::DECLARE_POLY_AGGREGATABLE", "ATLCOM/ATL::DECLARE_PROTECT_FINAL_CONSTRUCT", "ATLCOM/ATL::DECLARE_VIEW_STATUS", "ATLDEF/ATL::DECLARE_AGGREGATABLE", "ATLDEF/ATL::DECLARE_CLASSFACTORY", "ATLDEF/ATL::DECLARE_CLASSFACTORY_EX", "ATLDEF/ATL::DECLARE_CLASSFACTORY_AUTO_THREAD", "ATLDEF/ATL::DECLARE_CLASSFACTORY_SINGLETON", "ATLDEF/ATL::DECLARE_GET_CONTROLLING_UNKNOWN", "ATLDEF/ATL::DECLARE_NOT_AGGREGATABLE", "ATLDEF/ATL::DECLARE_ONLY_AGGREGATABLE", "ATLDEF/ATL::DECLARE_POLY_AGGREGATABLE", "ATLDEF/ATL::DECLARE_PROTECT_FINAL_CONSTRUCT", "ATLDEF/ATL::DECLARE_VIEW_STATUS", "ATLCOM/DECLARE_AGGREGATABLE", "ATLCOM/DECLARE_CLASSFACTORY", "ATLCOM/DECLARE_CLASSFACTORY_EX", "ATLCOM/DECLARE_CLASSFACTORY_AUTO_THREAD", "ATLCOM/DECLARE_CLASSFACTORY_SINGLETON", "ATLCOM/DECLARE_GET_CONTROLLING_UNKNOWN", "ATLCOM/DECLARE_NOT_AGGREGATABLE", "ATLCOM/DECLARE_ONLY_AGGREGATABLE", "ATLCOM/DECLARE_POLY_AGGREGATABLE", "ATLCOM/DECLARE_PROTECT_FINAL_CONSTRUCT", "ATLCOM/DECLARE_VIEW_STATUS", "ATL::DECLARE_AGGREGATABLE", "ATL::DECLARE_CLASSFACTORY", "ATL::DECLARE_CLASSFACTORY_EX", "ATL::DECLARE_CLASSFACTORY_AUTO_THREAD", "ATL::DECLARE_CLASSFACTORY_SINGLETON", "ATL::DECLARE_GET_CONTROLLING_UNKNOWN", "ATL::DECLARE_NOT_AGGREGATABLE", "ATL::DECLARE_ONLY_AGGREGATABLE", "ATL::DECLARE_POLY_AGGREGATABLE", "ATL::DECLARE_PROTECT_FINAL_CONSTRUCT", "ATL::DECLARE_VIEW_STATUS", "DECLARE_AGGREGATABLE", "DECLARE_CLASSFACTORY", "DECLARE_CLASSFACTORY_EX", "DECLARE_CLASSFACTORY_AUTO_THREAD", "DECLARE_CLASSFACTORY_SINGLETON", "DECLARE_GET_CONTROLLING_UNKNOWN", "DECLARE_NOT_AGGREGATABLE", "DECLARE_ONLY_AGGREGATABLE", "DECLARE_POLY_AGGREGATABLE", "DECLARE_PROTECT_FINAL_CONSTRUCT", "DECLARE_VIEW_STATUS"]
helpviewer_keywords: ["class factories, ATL macros", "aggregation [C++], ATL macros", "ATL::DECLARE_AGGREGATABLE", "ATL::DECLARE_CLASSFACTORY", "ATL::DECLARE_CLASSFACTORY_EX", "ATL::DECLARE_CLASSFACTORY_AUTO_THREAD", "ATL::DECLARE_CLASSFACTORY_SINGLETON", "ATL::DECLARE_GET_CONTROLLING_UNKNOWN", "ATL::DECLARE_NOT_AGGREGATABLE", "ATL::DECLARE_ONLY_AGGREGATABLE", "ATL::DECLARE_POLY_AGGREGATABLE", "ATL::DECLARE_PROTECT_FINAL_CONSTRUCT", "ATL::DECLARE_VIEW_STATUS"]
-ms.assetid: d99d379a-0eec-481f-8daa-252dac18f163
---
# Aggregation and Class Factory Macros
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These macros provide ways of controlling aggregation and of declaring class factories.
| Macro | Description |
diff --git a/docs/atl/reference/appearance-atl-control-wizard.md b/docs/atl/reference/appearance-atl-control-wizard.md
index 5a28f5a572e..2f305fd5e95 100644
--- a/docs/atl/reference/appearance-atl-control-wizard.md
+++ b/docs/atl/reference/appearance-atl-control-wizard.md
@@ -4,10 +4,11 @@ title: "Appearance, ATL Control Wizard"
ms.date: "08/31/2018"
f1_keywords: ["vc.codewiz.class.atl.control.misc"]
helpviewer_keywords: ["ATL Control Wizard, appearance"]
-ms.assetid: cc16d7ff-74d7-4c15-9ebd-4b19201ff457
---
# Appearance, ATL Control Wizard
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Use this page of the wizard to identify additional user element options for the control. This page is available for controls identified as **Standard controls** under **Control type** on the [Options, ATL Control Wizard](../../atl/reference/options-atl-control-wizard.md) page.
## UIElement List
diff --git a/docs/atl/reference/application-settings-atl-project-wizard.md b/docs/atl/reference/application-settings-atl-project-wizard.md
index 03b0fade12f..6922ea0313c 100644
--- a/docs/atl/reference/application-settings-atl-project-wizard.md
+++ b/docs/atl/reference/application-settings-atl-project-wizard.md
@@ -4,10 +4,11 @@ title: "Application Settings, ATL Project Wizard"
ms.date: "11/04/2016"
f1_keywords: ["vc.appwiz.atl.com.appset"]
helpviewer_keywords: ["ATL Project Wizard, application settings"]
-ms.assetid: d48c9fc5-f439-49fd-884c-8bcfa7d52991
---
# Application Settings, ATL Project Wizard
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Use the **Application Settings** page of the ATL Project Wizard to design and add basic features to a new ATL project.
## Server type
diff --git a/docs/atl/reference/asp-atl-active-server-page-component-wizard.md b/docs/atl/reference/asp-atl-active-server-page-component-wizard.md
index efb54c5bbfa..3a9dd3f5419 100644
--- a/docs/atl/reference/asp-atl-active-server-page-component-wizard.md
+++ b/docs/atl/reference/asp-atl-active-server-page-component-wizard.md
@@ -4,10 +4,11 @@ title: "ASP, ATL Active Server Page Component Wizard"
ms.date: "11/04/2016"
f1_keywords: ["vc.codewiz.class.atl.asp.asp"]
helpviewer_keywords: ["ATL Active Server Page Component Wizard, ASP"]
-ms.assetid: 4d8cafd6-5e12-4461-8911-29288896af3c
---
# ASP, ATL Active Server Page Component Wizard
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Use this page of the ATL Active Server Page Component Wizard to specify optional settings for handling information and state related to your ASP component.
- **Optional methods**
diff --git a/docs/atl/reference/atl-active-server-page-component-wizard.md b/docs/atl/reference/atl-active-server-page-component-wizard.md
index ceab8c73f93..410c00ddb87 100644
--- a/docs/atl/reference/atl-active-server-page-component-wizard.md
+++ b/docs/atl/reference/atl-active-server-page-component-wizard.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL Active Server Page Component Wizard"
title: "ATL Active Server Page Component Wizard"
ms.date: "05/09/2019"
helpviewer_keywords: ["ASP components, creating in ATL"]
-ms.assetid: 5a5cb904-dbbf-44ea-ad3d-2ddd14c1d3c5
---
# ATL Active Server Page Component Wizard
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
::: moniker range=">=msvc-160"
This wizard is not available in Visual Studio 2019 and later.
diff --git a/docs/atl/reference/atl-base-module70-structure.md b/docs/atl/reference/atl-base-module70-structure.md
index 78cbd738768..004ec92a8bd 100644
--- a/docs/atl/reference/atl-base-module70-structure.md
+++ b/docs/atl/reference/atl-base-module70-structure.md
@@ -4,10 +4,11 @@ title: "_ATL_BASE_MODULE70 Structure"
ms.date: "11/04/2016"
f1_keywords: ["ATL::_ATL_BASE_MODULE70", "ATL._ATL_BASE_MODULE70", "_ATL_BASE_MODULE70"]
helpviewer_keywords: ["ATL_BASE_MODULE70 structure", "_ATL_BASE_MODULE70 structure"]
-ms.assetid: 4539282f-15b8-4d7c-aafa-a85dc56f4980
---
# _ATL_BASE_MODULE70 Structure
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Used by any project that uses ATL.
## Syntax
diff --git a/docs/atl/reference/atl-classes.md b/docs/atl/reference/atl-classes.md
index 36a3ed3f0de..836fa1aa854 100644
--- a/docs/atl/reference/atl-classes.md
+++ b/docs/atl/reference/atl-classes.md
@@ -6,6 +6,8 @@ helpviewer_keywords: ["classes [C++], ATL", "ATL, classes"]
---
# ATL classes and structs
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
The Active Template Library (ATL) includes the following classes and structs. To find a particular class by category, see the [ATL Class Overview](../../atl/atl-class-overview.md).
|Class / struct|Description|Header file|
diff --git a/docs/atl/reference/atl-com-module70-structure.md b/docs/atl/reference/atl-com-module70-structure.md
index 3f37add4ec9..424d68a7e57 100644
--- a/docs/atl/reference/atl-com-module70-structure.md
+++ b/docs/atl/reference/atl-com-module70-structure.md
@@ -4,10 +4,11 @@ title: "_ATL_COM_MODULE70 Structure"
ms.date: "11/04/2016"
f1_keywords: ["ATL::_ATL_COM_MODULE70", "ATL._ATL_COM_MODULE70", "_ATL_COM_MODULE70"]
helpviewer_keywords: ["_ATL_COM_MODULE70 structure", "ATL_COM_MODULE70 structure"]
-ms.assetid: 5b0b2fd0-bdeb-4c7e-8870-78fa69ace6e6
---
# _ATL_COM_MODULE70 Structure
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Used by COM-related code in ATL.
## Syntax
diff --git a/docs/atl/reference/atl-com-plus-1-0-component-wizard.md b/docs/atl/reference/atl-com-plus-1-0-component-wizard.md
index 4f342caa931..a72c326005e 100644
--- a/docs/atl/reference/atl-com-plus-1-0-component-wizard.md
+++ b/docs/atl/reference/atl-com-plus-1-0-component-wizard.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL COM+ 1.0 Component Wizard"
title: "ATL COM+ 1.0 Component Wizard"
ms.date: "05/08/2019"
helpviewer_keywords: ["ATL projects, adding components"]
-ms.assetid: 11670681-8671-4122-96a4-2e52f8dadce0
---
# ATL COM+ 1.0 Component Wizard
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
::: moniker range=">=msvc-160"
This wizard is not available in Visual Studio 2019 and later.
diff --git a/docs/atl/reference/atl-control-wizard.md b/docs/atl/reference/atl-control-wizard.md
index f1ba09a54dd..1c7f40ee9f4 100644
--- a/docs/atl/reference/atl-control-wizard.md
+++ b/docs/atl/reference/atl-control-wizard.md
@@ -4,10 +4,11 @@ title: "ATL Control Wizard"
ms.date: "11/04/2016"
f1_keywords: ["vc.codewiz.class.atl.control.overview"]
helpviewer_keywords: ["ATL projects, adding controls", "controls [ATL], adding to projects", "ATL Control Wizard"]
-ms.assetid: 991f8e72-ffbc-4382-a4ce-e255acfba5b6
---
# ATL Control Wizard
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Inserts into an ATL project (or an MFC project with ATL support) an ATL control. You can use this wizard to insert one of three kinds of controls:
- Standard control
diff --git a/docs/atl/reference/atl-dialog-wizard.md b/docs/atl/reference/atl-dialog-wizard.md
index c2908571e3c..862cb038b71 100644
--- a/docs/atl/reference/atl-dialog-wizard.md
+++ b/docs/atl/reference/atl-dialog-wizard.md
@@ -4,10 +4,11 @@ title: "ATL Dialog Wizard"
ms.date: "11/04/2016"
f1_keywords: ["vc.codewiz.class.atl.dlg.overview"]
helpviewer_keywords: ["ATL projects, adding dialog resources", "ATL Dialog Wizard"]
-ms.assetid: b0b9ace5-83c9-40d3-82c3-eb6293f10583
---
# ATL Dialog Wizard
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This wizard inserts into the project an ATL dialog box object, derived from [CAxDialogImpl](../../atl/reference/caxdialogimpl-class.md). A dialog box derived from `CAxDialogImpl` can host ActiveX controls.
The wizard creates a dialog resource with default **OK** and **Cancel** buttons. You can edit the dialog resource and add ActiveX controls using the [Dialog Editor](../../windows/dialog-editor.md) in Resource View.
diff --git a/docs/atl/reference/atl-drawinfo-structure.md b/docs/atl/reference/atl-drawinfo-structure.md
index 8c44e5e231a..971943f6209 100644
--- a/docs/atl/reference/atl-drawinfo-structure.md
+++ b/docs/atl/reference/atl-drawinfo-structure.md
@@ -4,10 +4,11 @@ title: "ATL_DRAWINFO Structure"
ms.date: "11/04/2016"
f1_keywords: ["ATL::ATL_DRAWINFO", "ATL_DRAWINFO", "ATL.ATL_DRAWINFO"]
helpviewer_keywords: ["ATL_DRAWINFO structure"]
-ms.assetid: dd2e2aa8-e8c5-403b-b4df-35c0f6f57fb7
---
# ATL_DRAWINFO Structure
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Contains information used for rendering to various targets, such as a printer, metafile, or ActiveX control.
## Syntax
diff --git a/docs/atl/reference/atl-func-info-structure.md b/docs/atl/reference/atl-func-info-structure.md
index 2be432a32d9..7f3e2b1dc1d 100644
--- a/docs/atl/reference/atl-func-info-structure.md
+++ b/docs/atl/reference/atl-func-info-structure.md
@@ -4,10 +4,11 @@ title: "_ATL_FUNC_INFO Structure"
ms.date: "11/04/2016"
f1_keywords: ["_ATL_FUNC_INFO", "ATL::_ATL_FUNC_INFO", "ATL._ATL_FUNC_INFO"]
helpviewer_keywords: ["_ATL_FUNC_INFO structure", "ATL_FUNC_INFO structure"]
-ms.assetid: 441ebe2c-f971-47de-9f52-a258e8d6f88e
---
# _ATL_FUNC_INFO Structure
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Contains type information used to describe a method or property on a dispinterface.
## Syntax
diff --git a/docs/atl/reference/atl-functions.md b/docs/atl/reference/atl-functions.md
index f32f42b2041..96a93f09150 100644
--- a/docs/atl/reference/atl-functions.md
+++ b/docs/atl/reference/atl-functions.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL Functions"
title: "ATL Functions"
ms.date: "11/04/2016"
helpviewer_keywords: ["functions [ATL]", "ATL, global functions"]
-ms.assetid: 69db0cb2-de1d-445b-b692-020d6e8c2173
---
# ATL Functions
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
To find an ATL function by category, see the following topics.
[ATL Path Functions](../../atl/reference/com-map-global-functions.md)
diff --git a/docs/atl/reference/atl-global-variables.md b/docs/atl/reference/atl-global-variables.md
index 68a23951c11..553aec1f266 100644
--- a/docs/atl/reference/atl-global-variables.md
+++ b/docs/atl/reference/atl-global-variables.md
@@ -4,10 +4,11 @@ title: "ATL Global Variables"
ms.date: "12/06/2017"
f1_keywords: ["ATLBASE/_pAtlModule"]
helpviewer_keywords: ["global variables, ATL", "_pAtlModule"]
-ms.assetid: e881a319-99ca-4f5d-8a0b-34b3dcd0f37f
---
# ATL Global Variables
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
## _pAtlModule
A global variable storing a pointer to the current module.
diff --git a/docs/atl/reference/atl-http-utility-functions.md b/docs/atl/reference/atl-http-utility-functions.md
index 47f78813f00..6980b30e704 100644
--- a/docs/atl/reference/atl-http-utility-functions.md
+++ b/docs/atl/reference/atl-http-utility-functions.md
@@ -2,10 +2,11 @@
description: "Learn more about: ATL HTTP Utility Functions"
title: "ATL HTTP Utility Functions"
ms.date: "11/04/2016"
-ms.assetid: 4db57ef2-31fa-4696-bbeb-79a9035033ed
---
# ATL HTTP Utility Functions
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These functions support manipulation of URLs.
|Function|Description|
diff --git a/docs/atl/reference/atl-macros.md b/docs/atl/reference/atl-macros.md
index 28f62b30117..d660507aeb8 100644
--- a/docs/atl/reference/atl-macros.md
+++ b/docs/atl/reference/atl-macros.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL Macros"
title: "ATL Macros"
ms.date: "11/04/2016"
helpviewer_keywords: ["ATL, macros", "macros, ATL"]
-ms.assetid: 788bd803-e7dc-4dc5-9e8d-31649471415b
---
# ATL Macros
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
To find an ATL macro by category, see the following topics.
[Aggregation and Class Factory Macros](../../atl/reference/aggregation-and-class-factory-macros.md)
diff --git a/docs/atl/reference/atl-module70-structure.md b/docs/atl/reference/atl-module70-structure.md
index eeee4263273..642c262492a 100644
--- a/docs/atl/reference/atl-module70-structure.md
+++ b/docs/atl/reference/atl-module70-structure.md
@@ -4,10 +4,11 @@ title: "_ATL_MODULE70 Structure"
ms.date: "11/04/2016"
f1_keywords: ["_ATL_MODULE70", "ATL::_ATL_MODULE70", "ATL._ATL_MODULE70"]
helpviewer_keywords: ["ATL_MODULE70 structure", "_ATL_MODULE70 structure"]
-ms.assetid: b059b2c8-dfd1-4ac9-b07d-39df638cc7b3
---
# _ATL_MODULE70 Structure
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Contains data used by every ATL module.
## Syntax
diff --git a/docs/atl/reference/atl-ole-db-consumer-wizard.md b/docs/atl/reference/atl-ole-db-consumer-wizard.md
index da09ffeebbb..8192655ec73 100644
--- a/docs/atl/reference/atl-ole-db-consumer-wizard.md
+++ b/docs/atl/reference/atl-ole-db-consumer-wizard.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL OLE DB Consumer Wizard"
title: "ATL OLE DB Consumer Wizard"
ms.date: "07/02/2019"
helpviewer_keywords: ["ATL projects, adding ATL OLE DB consumers"]
-ms.assetid: dcb68ed1-2224-422f-9f7b-108a74864204
---
# ATL OLE DB Consumer Wizard
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
::: moniker range=">=msvc-160"
This wizard is not available in Visual Studio 2019 and later.
diff --git a/docs/atl/reference/atl-ole-db-provider-wizard.md b/docs/atl/reference/atl-ole-db-provider-wizard.md
index 29417f6f85d..e0d73a85994 100644
--- a/docs/atl/reference/atl-ole-db-provider-wizard.md
+++ b/docs/atl/reference/atl-ole-db-provider-wizard.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL OLE DB Provider Wizard"
title: "ATL OLE DB Provider Wizard"
ms.date: "05/09/2019"
helpviewer_keywords: ["ATL projects, adding ATL OLE DB providers"]
-ms.assetid: cf91ba78-01d1-4d12-b673-e95d96bfbebe
---
# ATL OLE DB Provider Wizard
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
::: moniker range=">=msvc-160"
This wizard is not available in Visual Studio 2019 and later.
diff --git a/docs/atl/reference/atl-operators.md b/docs/atl/reference/atl-operators.md
index 85beb951ab3..2e16c36d15a 100644
--- a/docs/atl/reference/atl-operators.md
+++ b/docs/atl/reference/atl-operators.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL Operators"
title: "ATL Operators"
ms.date: "11/04/2016"
helpviewer_keywords: ["operators [ATL]"]
-ms.assetid: 58ccd252-2869-45ee-8a5c-3ca40ee7f8a2
---
# ATL Operators
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This section contains the reference topics for the ATL global operators.
|Operator|Description|
diff --git a/docs/atl/reference/atl-path-functions.md b/docs/atl/reference/atl-path-functions.md
index 33562d071a8..709a5e9f82a 100644
--- a/docs/atl/reference/atl-path-functions.md
+++ b/docs/atl/reference/atl-path-functions.md
@@ -4,10 +4,11 @@ title: "ATL Path functions"
ms.date: "11/04/2016"
helpviewer_keywords: ["ATL, path"]
f1_keywords: ["ATLPATH/ATL::ATLPath::AddBackslash", "ATLPATH/ATL::ATLPath::AddExtension", "ATLPATH/ATL::ATLPath::Append", "ATLPATH/ATL::ATLPath::BuildRoot", "ATLPATH/ATL::ATLPath::Canonicalize", "ATLPATH/ATL::ATLPath::Combine", "ATLPATH/ATL::ATLPath::CommonPrefix", "ATLPATH/ATL::ATLPath::CompactPath", "ATLPATH/ATL::ATLPath::CompactPathEx", "ATLPATH/ATL::ATLPath::FileExists", "ATLPATH/ATL::ATLPath::FindExtension", "ATLPATH/ATL::ATLPath::FindFileName", "ATLPATH/ATL::ATLPath::GetDriveNumber", "ATLPATH/ATL::ATLPath::IsDirectory", "ATLPATH/ATL::ATLPath::IsFileSpec", "ATLPATH/ATL::ATLPath::IsPrefix", "ATLPATH/ATL::ATLPath::IsRelative", "ATLPATH/ATL::ATLPath::IsRoot", "ATLPATH/ATL::ATLPath::IsSameRoot", "ATLPATH/ATL::ATLPath::IsUNC", "ATLPATH/ATL::ATLPath::IsUNCServer", "ATLPATH/ATL::ATLPath::IsUNCServerShare", "ATLPATH/ATL::ATLPath::MakePretty", "ATLPATH/ATL::ATLPath::MatchSpec", "ATLPATH/ATL::ATLPath::QuoteSpaces", "ATLPATH/ATL::ATLPath::RelativePathTo", "ATLPATH/ATL::ATLPath::RemoveArgs", "ATLPATH/ATL::ATLPath::RemoveBackslash", "ATLPATH/ATL::ATLPath::RemoveBlanks", "ATLPATH/ATL::ATLPath::RemoveExtension", "ATLPATH/ATL::ATLPath::RemoveFileSpec", "ATLPATH/ATL::ATLPath::RenameExtension", "ATLPATH/ATL::ATLPath::SkipRoot", "ATLPATH/ATL::ATLPath::StripPath", "ATLPATH/ATL::ATLPath::StripToRoot", "ATLPATH/ATL::ATLPath::UnquoteSpaces"]
-ms.assetid: d1ec2b8d-7ec7-43ea-90dd-0a740d2a742b
---
# ATL Path functions
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
ATL provides the ATLPath class for manipulating paths in the form of [CPathT](cpatht-class.md). This code can be found in atlpath.h.
## Related Classes
diff --git a/docs/atl/reference/atl-project-wizard.md b/docs/atl/reference/atl-project-wizard.md
index 54180ade5d1..f0ceeb5726f 100644
--- a/docs/atl/reference/atl-project-wizard.md
+++ b/docs/atl/reference/atl-project-wizard.md
@@ -4,10 +4,11 @@ title: "ATL Project Wizard"
ms.date: "11/04/2016"
f1_keywords: ["vc.appwiz.atl.com.overview"]
helpviewer_keywords: ["ATL projects, creating", "ATL Project Wizard"]
-ms.assetid: 564d2aaf-5b8e-4c2a-a925-ca40a283ea34
---
# ATL Project Wizard
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
The Active Template Library (ATL) is a set of template-based C++ classes that simplify writing small and fast COM objects. The ATL Project Wizard creates a project with the structures to contain COM objects.
## Overview
diff --git a/docs/atl/reference/atl-property-page-wizard.md b/docs/atl/reference/atl-property-page-wizard.md
index 16c00456903..4d7eb8263ac 100644
--- a/docs/atl/reference/atl-property-page-wizard.md
+++ b/docs/atl/reference/atl-property-page-wizard.md
@@ -4,10 +4,11 @@ title: "ATL Property Page Wizard"
ms.date: "05/09/2019"
f1_keywords: ["vc.codewiz.class.atl.ppg.overview"]
helpviewer_keywords: ["ATL projects, adding property pages", "ATL Property Page Wizard"]
-ms.assetid: 6113e325-facd-4f68-b491-144d75209922
---
# ATL Property Page Wizard
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
::: moniker range=">=msvc-160"
This wizard is not available in Visual Studio 2019 and later.
diff --git a/docs/atl/reference/atl-simple-object-wizard.md b/docs/atl/reference/atl-simple-object-wizard.md
index 23a819b1bf8..392f374f655 100644
--- a/docs/atl/reference/atl-simple-object-wizard.md
+++ b/docs/atl/reference/atl-simple-object-wizard.md
@@ -4,10 +4,11 @@ title: "ATL Simple Object Wizard"
ms.date: "11/04/2016"
f1_keywords: ["vc.codewiz.class.atl.simple.overview"]
helpviewer_keywords: ["ATL projects, adding objects", "ATL Simple Object Wizard"]
-ms.assetid: f7f85741-9aad-4543-a917-a29b996364da
---
# ATL Simple Object Wizard
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This wizard inserts into the project a minimal COM object. Use this page of the wizard to specify the names that identify the C++ class and files for your object and its COM functionality.
Use the [Options](../../atl/reference/options-atl-simple-object-wizard.md) page of this wizard to specify the object's threading model, its aggregation support, and whether it supports dual interfaces and Automation. You can also indicate support for the error information interface, connection points, Internet Explorer support, and free-threaded marshaling.
diff --git a/docs/atl/reference/atl-text-encoding-functions.md b/docs/atl/reference/atl-text-encoding-functions.md
index aa50e31f2ef..6afe2a4900b 100644
--- a/docs/atl/reference/atl-text-encoding-functions.md
+++ b/docs/atl/reference/atl-text-encoding-functions.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL Text Encoding Functions"
title: "ATL Text Encoding Functions"
ms.date: "11/04/2016"
f1_keywords: ["atlbase/ATL::AtlGetHexValue", "atlbase/ATL::AtlGetVersion", "atlenc/ATL::AtlHexDecode", "atlenc/ATL::AtlHexDecodeGetRequiredLength", "atlenc/ATL::AtlHexEncode", "atlenc/ATL::AtlHexEncodeGetRequiredLength", "atlenc/ATL::AtlHexValue", "atlenc/ATL::BEncode", "atlenc/ATL::BEncodeGetRequiredLength", "atlenc/ATL::EscapeXML", "atlenc/ATL::GetExtendedChars", "atlenc/ATL::IsExtendedChar", "atlenc/ATL::QEncode", "atlenc/ATL::QEncodeGetRequiredLength", "atlenc/ATL::QPDecode", "atlenc/ATL::QPDecodeGetRequiredLength", "atlenc/ATL::QPEncode", "atlenc/ATL::QPEncodeGetRequiredLength", "atlenc/ATL::UUDecode", "atlenc/ATL::UUDecodeGetRequiredLength", "atlenc/ATL::UUEncode", "atlenc/ATL::UUEncodeGetRequiredLength"]
-ms.assetid: 2ae1648b-2b87-4112-92aa-0069fcfd23da
---
# ATL Text Encoding Functions
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These functions support text encoding and decoding.
|Function|Description|
diff --git a/docs/atl/reference/atl-typedefs.md b/docs/atl/reference/atl-typedefs.md
index 471587e3278..28f4a79773f 100644
--- a/docs/atl/reference/atl-typedefs.md
+++ b/docs/atl/reference/atl-typedefs.md
@@ -4,10 +4,11 @@ title: "ATL Typedefs"
ms.date: "11/04/2016"
f1_keywords: ["atlcore/ATL::_ATL_BASE_MODULE", "atlbase/ATL::_ATL_COM_MODULE", "atlbase/ATL::_ATL_MODULE", "atlbase/ATL::_ATL_WIN_MODULE", "atlutil/ATL::ATL_URL_PORT", "atlbase/ATL::CComDispatchDriver", "atlbase/ATL::CComGlobalsThreadModel", "atlbase/ATL::CComObjectThreadModel", "atlwin/ATL::CContainedWindow", "atlpath/ATL::CPath", "atlpath/ATL::CPathA", "atlpath/ATL::CPathW", " atlsimpcoll/ATL::CSimpleValArray", " atlutil/ATL::LPCURL", "atlbase/ATL::DefaultThreadTraits", "atlutil/ATL::LPURL"]
helpviewer_keywords: ["typedefs, ATL", "typedefs", "ATL, typedefs"]
-ms.assetid: 7dd05baa-3efb-4e3b-af23-793c610f4560
---
# ATL Typedefs
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
The Active Template Library includes the following typedefs.
|Typedef|Description|
diff --git a/docs/atl/reference/atl-url-scheme-enum.md b/docs/atl/reference/atl-url-scheme-enum.md
index fbed95cb013..8c6df2df608 100644
--- a/docs/atl/reference/atl-url-scheme-enum.md
+++ b/docs/atl/reference/atl-url-scheme-enum.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL_URL_SCHEME"
title: "ATL_URL_SCHEME enumeration"
ms.date: "11/04/2016"
helpviewer_keywords: ["ATLUTIL/ATL::ATL_URL_SCHEME"]
-ms.assetid: f4131046-8ba0-4ec1-8209-84203f05d20e
---
# ATL_URL_SCHEME
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
The members of this enumeration provide constants for the schemes understood by [CUrl](curl-class.md).
## Syntax
diff --git a/docs/atl/reference/atl-win-module70-structure.md b/docs/atl/reference/atl-win-module70-structure.md
index 4a053f0aecd..b5e717cbc3a 100644
--- a/docs/atl/reference/atl-win-module70-structure.md
+++ b/docs/atl/reference/atl-win-module70-structure.md
@@ -4,10 +4,11 @@ title: "_ATL_WIN_MODULE70 Structure"
ms.date: "11/04/2016"
f1_keywords: ["_ATL_WIN_MODULE70", "ATL::_ATL_WIN_MODULE70", "ATL._ATL_WIN_MODULE70"]
helpviewer_keywords: ["_ATL_WIN_MODULE70 structure", "ATL_WIN_MODULE70 structure"]
-ms.assetid: a0aaf3ea-ca77-46ec-bd53-4dfb61dffbea
---
# _ATL_WIN_MODULE70 Structure
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Used by windowing code in ATL.
## Syntax
diff --git a/docs/atl/reference/atl-wizards-and-dialog-boxes.md b/docs/atl/reference/atl-wizards-and-dialog-boxes.md
index 0632227a113..0b3400f14d8 100644
--- a/docs/atl/reference/atl-wizards-and-dialog-boxes.md
+++ b/docs/atl/reference/atl-wizards-and-dialog-boxes.md
@@ -3,10 +3,11 @@ description: "Learn more about: ATL Wizards and Dialog Boxes"
title: "ATL Wizards and Dialog Boxes"
ms.date: "06/26/2020"
helpviewer_keywords: ["ATL, class wizards"]
-ms.assetid: 51cf002a-83bc-41ba-aeb8-364ea2331375
---
# ATL Wizards and Dialog Boxes
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
The Active Template Library (ATL) wizards generate boilerplate code for various kinds of COM objects. You can run the wizards by opening the shortcut menu for a project in **Solution Explorer** and choosing **Add**, **Class**.
## Related Articles
diff --git a/docs/atl/reference/atlcreatewnddata-structure.md b/docs/atl/reference/atlcreatewnddata-structure.md
index ab5f1b3cf66..ccef921db99 100644
--- a/docs/atl/reference/atlcreatewnddata-structure.md
+++ b/docs/atl/reference/atlcreatewnddata-structure.md
@@ -4,10 +4,11 @@ title: "_AtlCreateWndData Structure"
ms.date: "11/04/2016"
f1_keywords: ["ATL::_AtlCreateWndData", "ATL._AtlCreateWndData", "_AtlCreateWndData"]
helpviewer_keywords: ["_AtlCreateWndData structure", "AtlCreateWndData structure"]
-ms.assetid: 76ed5382-bfbf-4b8b-8a29-912688dfd2ae
---
# _AtlCreateWndData Structure
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This structure contains class instance data in windowing code in ATL.
## Syntax
diff --git a/docs/atl/reference/ca2aex-class.md b/docs/atl/reference/ca2aex-class.md
index 17184ac1d4a..17355a4e6d8 100644
--- a/docs/atl/reference/ca2aex-class.md
+++ b/docs/atl/reference/ca2aex-class.md
@@ -4,10 +4,11 @@ title: "CA2AEX Class"
ms.date: "11/04/2016"
f1_keywords: ["CA2AEX", "ATLCONV/ATL::CA2AEX", "ATLCONV/ATL::CA2AEX::CA2AEX", "ATLCONV/ATL::CA2AEX::m_psz", "ATLCONV/ATL::CA2AEX::m_szBuffer"]
helpviewer_keywords: ["CA2AEX class"]
-ms.assetid: 57dc65df-d9cf-4a84-99d3-6e031dde3664
---
# CA2AEX Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is used by the string conversion macros CA2TEX and CT2AEX, and the typedef CA2A.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ca2caex-class.md b/docs/atl/reference/ca2caex-class.md
index 384efbd5ea5..74d94867f69 100644
--- a/docs/atl/reference/ca2caex-class.md
+++ b/docs/atl/reference/ca2caex-class.md
@@ -4,10 +4,11 @@ title: "CA2CAEX Class"
ms.date: "11/04/2016"
f1_keywords: ["CA2CAEX", "ATLCONV/ATL::CA2CAEX", "ATLCONV/ATL::CA2CAEX::CA2CAEX", "ATLCONV/ATL::CA2CAEX::m_psz"]
helpviewer_keywords: ["CA2CAEX class"]
-ms.assetid: 388e7c1d-a144-474c-a182-b15f69a74bd8
---
# CA2CAEX Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is used by string conversion macros CA2CTEX and CT2CAEX, and the typedef CA2CA.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ca2wex-class.md b/docs/atl/reference/ca2wex-class.md
index 6b350dc68cf..efe52c7c486 100644
--- a/docs/atl/reference/ca2wex-class.md
+++ b/docs/atl/reference/ca2wex-class.md
@@ -4,10 +4,11 @@ title: "CA2WEX Class"
ms.date: "11/04/2016"
f1_keywords: ["CA2WEX", "ATLCONV/ATL::CA2WEX", "ATLCONV/ATL::CA2WEX::CA2WEX", "ATLCONV/ATL::CA2WEX::m_psz", "ATLCONV/ATL::CA2WEX::m_szBuffer"]
helpviewer_keywords: ["CA2WEX class"]
-ms.assetid: 317d9ffb-e84f-47e8-beda-57e28fb19124
---
# CA2WEX Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is used by the string conversion macros CA2TEX, CA2CTEX, CT2WEX, and CT2CWEX, and the typedef CA2W.
> [!IMPORTANT]
diff --git a/docs/atl/reference/caccesstoken-class.md b/docs/atl/reference/caccesstoken-class.md
index 49272bfcd4a..6cd58e432ee 100644
--- a/docs/atl/reference/caccesstoken-class.md
+++ b/docs/atl/reference/caccesstoken-class.md
@@ -4,10 +4,11 @@ title: "CAccessToken Class"
ms.date: "07/02/2019"
f1_keywords: ["CAccessToken", "ATLSECURITY/ATL::CAccessToken", "ATLSECURITY/ATL::CAccessToken::Attach", "ATLSECURITY/ATL::CAccessToken::CheckTokenMembership", "ATLSECURITY/ATL::CAccessToken::CreateImpersonationToken", "ATLSECURITY/ATL::CAccessToken::CreatePrimaryToken", "ATLSECURITY/ATL::CAccessToken::CreateProcessAsUser", "ATLSECURITY/ATL::CAccessToken::CreateRestrictedToken", "ATLSECURITY/ATL::CAccessToken::Detach", "ATLSECURITY/ATL::CAccessToken::DisablePrivilege", "ATLSECURITY/ATL::CAccessToken::DisablePrivileges", "ATLSECURITY/ATL::CAccessToken::EnablePrivilege", "ATLSECURITY/ATL::CAccessToken::EnablePrivileges", "ATLSECURITY/ATL::CAccessToken::GetDefaultDacl", "ATLSECURITY/ATL::CAccessToken::GetEffectiveToken", "ATLSECURITY/ATL::CAccessToken::GetGroups", "ATLSECURITY/ATL::CAccessToken::GetHandle", "ATLSECURITY/ATL::CAccessToken::GetImpersonationLevel", "ATLSECURITY/ATL::CAccessToken::GetLogonSessionId", "ATLSECURITY/ATL::CAccessToken::GetLogonSid", "ATLSECURITY/ATL::CAccessToken::GetOwner", "ATLSECURITY/ATL::CAccessToken::GetPrimaryGroup", "ATLSECURITY/ATL::CAccessToken::GetPrivileges", "ATLSECURITY/ATL::CAccessToken::GetProcessToken", "ATLSECURITY/ATL::CAccessToken::GetProfile", "ATLSECURITY/ATL::CAccessToken::GetSource", "ATLSECURITY/ATL::CAccessToken::GetStatistics", "ATLSECURITY/ATL::CAccessToken::GetTerminalServicesSessionId", "ATLSECURITY/ATL::CAccessToken::GetThreadToken", "ATLSECURITY/ATL::CAccessToken::GetTokenId", "ATLSECURITY/ATL::CAccessToken::GetType", "ATLSECURITY/ATL::CAccessToken::GetUser", "ATLSECURITY/ATL::CAccessToken::HKeyCurrentUser", "ATLSECURITY/ATL::CAccessToken::Impersonate", "ATLSECURITY/ATL::CAccessToken::ImpersonateLoggedOnUser", "ATLSECURITY/ATL::CAccessToken::IsTokenRestricted", "ATLSECURITY/ATL::CAccessToken::LoadUserProfile", "ATLSECURITY/ATL::CAccessToken::LogonUser", "ATLSECURITY/ATL::CAccessToken::OpenCOMClientToken", "ATLSECURITY/ATL::CAccessToken::OpenNamedPipeClientToken", "ATLSECURITY/ATL::CAccessToken::OpenRPCClientToken", "ATLSECURITY/ATL::CAccessToken::OpenThreadToken", "ATLSECURITY/ATL::CAccessToken::PrivilegeCheck", "ATLSECURITY/ATL::CAccessToken::Revert", "ATLSECURITY/ATL::CAccessToken::SetDefaultDacl", "ATLSECURITY/ATL::CAccessToken::SetOwner", "ATLSECURITY/ATL::CAccessToken::SetPrimaryGroup"]
helpviewer_keywords: ["CAccessToken class"]
-ms.assetid: bb5c5945-56a5-4083-b442-76573cee83ab
---
# CAccessToken Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is a wrapper for an access token.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cacl-class.md b/docs/atl/reference/cacl-class.md
index 1521ad15fe8..49733e001d4 100644
--- a/docs/atl/reference/cacl-class.md
+++ b/docs/atl/reference/cacl-class.md
@@ -4,10 +4,11 @@ title: "CAcl Class"
ms.date: "11/04/2016"
f1_keywords: ["CAcl", "ATLSECURITY/ATL::CAcl", "ATLSECURITY/ATL::CAcl::CAccessMaskArray", "ATLSECURITY/ATL::CAcl::CAceFlagArray", "ATLSECURITY/ATL::CAcl::CAceTypeArray", "ATLSECURITY/ATL::CAcl::CAcl", "ATLSECURITY/ATL::CAcl::GetAceCount", "ATLSECURITY/ATL::CAcl::GetAclEntries", "ATLSECURITY/ATL::CAcl::GetAclEntry", "ATLSECURITY/ATL::CAcl::GetLength", "ATLSECURITY/ATL::CAcl::GetPACL", "ATLSECURITY/ATL::CAcl::IsEmpty", "ATLSECURITY/ATL::CAcl::IsNull", "ATLSECURITY/ATL::CAcl::RemoveAce", "ATLSECURITY/ATL::CAcl::RemoveAces", "ATLSECURITY/ATL::CAcl::SetEmpty", "ATLSECURITY/ATL::CAcl::SetNull"]
helpviewer_keywords: ["CAcl class"]
-ms.assetid: 20bcb9af-dc1c-4737-b923-3864776680d6
---
# CAcl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is a wrapper for an `ACL` (access-control list) structure.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cadapt-class.md b/docs/atl/reference/cadapt-class.md
index e3596e34f0d..010fa0f3f7f 100644
--- a/docs/atl/reference/cadapt-class.md
+++ b/docs/atl/reference/cadapt-class.md
@@ -4,10 +4,11 @@ title: "CAdapt Class"
ms.date: "11/04/2016"
f1_keywords: ["CAdapt", "ATLCOMCLI/ATL::CAdapt", "ATLCOMCLI/ATL::CAdapt::CAdapt", "ATLCOMCLI/ATL::CAdapt::m_T"]
helpviewer_keywords: ["address-of operator", "adapter objects", "& operator, address-of operator", "CAdapt class"]
-ms.assetid: 0bb695a5-72fe-43d1-8f39-7e4da6e34765
---
# CAdapt Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This template is used to wrap classes that redefine the address-of operator to return something other than the address of the object.
## Syntax
diff --git a/docs/atl/reference/category-macros.md b/docs/atl/reference/category-macros.md
index 2520af59602..c6339244da1 100644
--- a/docs/atl/reference/category-macros.md
+++ b/docs/atl/reference/category-macros.md
@@ -3,10 +3,11 @@ description: "Learn more about: Category Macros"
title: "Category Macros"
ms.date: "11/04/2016"
f1_keywords: ["ATLCOM/BEGIN_CATEGORY_MAP", "ATLCOM/END_CATEGORY_MAP", "ATLCOM/IMPLEMENTED_CATEGORY", "ATLCOM/REQUIRED_CATEGORY", "atlcom/ATL::BEGIN_CATEGORY_MAP", "atlcom/ATL::END_CATEGORY_MAP", "atlcom/ATL::IMPLEMENTED_CATEGORY", "atlcom/ATL::REQUIRED_CATEGORY"]
-ms.assetid: 223578cb-6180-4787-a8d8-ba3787a5d3ee
---
# Category Macros
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These macros define category maps.
|Macro|Description|
diff --git a/docs/atl/reference/catlarray-class.md b/docs/atl/reference/catlarray-class.md
index e2ff7b40f54..9a7af00b550 100644
--- a/docs/atl/reference/catlarray-class.md
+++ b/docs/atl/reference/catlarray-class.md
@@ -4,10 +4,11 @@ title: "CAtlArray Class"
ms.date: "11/04/2016"
f1_keywords: ["CAtlArray", "ATLCOLL/ATL::CAtlArray", "ATLCOLL/ATL::Add", "ATLCOLL/ATL::Append", "ATLCOLL/ATL::AssertValid", "ATLCOLL/ATL::Copy", "ATLCOLL/ATL::FreeExtra", "ATLCOLL/ATL::GetAt", "ATLCOLL/ATL::GetCount", "ATLCOLL/ATL::GetData", "ATLCOLL/ATL::InsertArrayAt", "ATLCOLL/ATL::InsertAt", "ATLCOLL/ATL::IsEmpty", "ATLCOLL/ATL::RemoveAll", "ATLCOLL/ATL::RemoveAt", "ATLCOLL/ATL::SetAt", "ATLCOLL/ATL::SetAtGrow", "ATLCOLL/ATL::SetCount", "ATLCOLL/ATL::INARGTYPE", "ATLCOLL/ATL::OUTARGTYPE"]
helpviewer_keywords: ["CAtlArray class"]
-ms.assetid: 0b503aa8-2357-40af-a326-6654bf1da098
---
# CAtlArray Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements an array object.
## Syntax
diff --git a/docs/atl/reference/catlautothreadmodule-class.md b/docs/atl/reference/catlautothreadmodule-class.md
index ad171cbf113..fde8b27ac04 100644
--- a/docs/atl/reference/catlautothreadmodule-class.md
+++ b/docs/atl/reference/catlautothreadmodule-class.md
@@ -4,10 +4,11 @@ title: "CAtlAutoThreadModule Class"
ms.date: "11/04/2016"
f1_keywords: ["CAtlAutoThreadModule", "atlbase/ATL::CAtlAutoThreadModule"]
helpviewer_keywords: ["CAtlAutoThreadModule class"]
-ms.assetid: 3be834aa-55ef-403e-94ae-41979691b15f
---
# CAtlAutoThreadModule Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements a thread-pooled, apartment-model COM server.
> [!IMPORTANT]
diff --git a/docs/atl/reference/catlautothreadmodulet-class.md b/docs/atl/reference/catlautothreadmodulet-class.md
index b3551f67c25..fdc99205556 100644
--- a/docs/atl/reference/catlautothreadmodulet-class.md
+++ b/docs/atl/reference/catlautothreadmodulet-class.md
@@ -4,10 +4,11 @@ title: "CAtlAutoThreadModuleT Class"
ms.date: "11/04/2016"
f1_keywords: ["CAtlAutoThreadModuleT", "ATLBASE/ATL::CAtlAutoThreadModuleT", "ATLBASE/ATL::CAtlAutoThreadModuleT::GetDefaultThreads"]
helpviewer_keywords: ["CAtlAutoThreadModuleT class"]
-ms.assetid: ae1667c6-3fb8-47bc-b35d-9ea5e9896d7f
---
# CAtlAutoThreadModuleT Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for implementing a thread-pooled, apartment-model COM server.
> [!IMPORTANT]
diff --git a/docs/atl/reference/catlbasemodule-class.md b/docs/atl/reference/catlbasemodule-class.md
index ca75cf7b50b..1126d5109ea 100644
--- a/docs/atl/reference/catlbasemodule-class.md
+++ b/docs/atl/reference/catlbasemodule-class.md
@@ -4,10 +4,11 @@ title: "CAtlBaseModule Class"
ms.date: "11/04/2016"
f1_keywords: ["CAtlBaseModule", "ATLCORE/ATL::CAtlBaseModule", "ATLCORE/ATL::CAtlBaseModule::CAtlBaseModule", "ATLCORE/ATL::CAtlBaseModule::AddResourceInstance", "ATLCORE/ATL::CAtlBaseModule::GetHInstanceAt", "ATLCORE/ATL::CAtlBaseModule::GetModuleInstance", "ATLCORE/ATL::CAtlBaseModule::GetResourceInstance", "ATLCORE/ATL::CAtlBaseModule::RemoveResourceInstance", "ATLCORE/ATL::CAtlBaseModule::SetResourceInstance", "ATLCORE/ATL::CAtlBaseModule::m_bInitFailed"]
helpviewer_keywords: ["CAtlBaseModule class"]
-ms.assetid: 55ade80c-9b0c-4c51-933e-2158436c1096
---
# CAtlBaseModule Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is instantiated in every ATL project.
## Syntax
diff --git a/docs/atl/reference/catlcommodule-class.md b/docs/atl/reference/catlcommodule-class.md
index ec1824a9769..cb307e817bc 100644
--- a/docs/atl/reference/catlcommodule-class.md
+++ b/docs/atl/reference/catlcommodule-class.md
@@ -4,10 +4,11 @@ title: "CAtlComModule Class"
ms.date: "11/04/2016"
f1_keywords: ["CAtlComModule", "ATLBASE/ATL::CAtlComModule", "ATLBASE/ATL::CAtlComModule::CAtlComModule", "ATLBASE/ATL::CAtlComModule::RegisterServer", "ATLBASE/ATL::CAtlComModule::RegisterTypeLib", "ATLBASE/ATL::CAtlComModule::UnregisterServer", "ATLBASE/ATL::CAtlComModule::UnRegisterTypeLib"]
helpviewer_keywords: ["CAtlComModule class"]
-ms.assetid: af5dd71a-a0d1-4a2e-9a24-154a03381c75
---
# CAtlComModule Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements a COM server module.
## Syntax
diff --git a/docs/atl/reference/catldebuginterfacesmodule-class.md b/docs/atl/reference/catldebuginterfacesmodule-class.md
index 38a674b3e7c..ff00c86e3c5 100644
--- a/docs/atl/reference/catldebuginterfacesmodule-class.md
+++ b/docs/atl/reference/catldebuginterfacesmodule-class.md
@@ -4,10 +4,11 @@ title: "CAtlDebugInterfacesModule Class"
ms.date: "11/04/2016"
f1_keywords: ["CAtlDebugInterfacesModule", "atlbase/ATL::CAtlDebugInterfacesModule"]
helpviewer_keywords: ["_ATL_DEBUG_QI macro", "CAtlDebugInterfacesModule class"]
-ms.assetid: a193b567-8191-4115-a963-a10805972bac
---
# CAtlDebugInterfacesModule Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides support for debugging interfaces.
## Syntax
diff --git a/docs/atl/reference/catldllmodulet-class.md b/docs/atl/reference/catldllmodulet-class.md
index af960db0ee0..95c947d68cd 100644
--- a/docs/atl/reference/catldllmodulet-class.md
+++ b/docs/atl/reference/catldllmodulet-class.md
@@ -4,10 +4,11 @@ title: "CAtlDllModuleT Class"
ms.date: "11/04/2016"
f1_keywords: ["CAtlDllModuleT", "ATLBASE/ATL::CAtlDllModuleT", "ATLBASE/ATL::CAtlDllModuleT::CAtlDllModuleT", "ATLBASE/ATL::CAtlDllModuleT::DllCanUnloadNow", "ATLBASE/ATL::CAtlDllModuleT::DllGetClassObject", "ATLBASE/ATL::CAtlDllModuleT::DllMain", "ATLBASE/ATL::CAtlDllModuleT::DllRegisterServer", "ATLBASE/ATL::CAtlDllModuleT::DllUnregisterServer", "ATLBASE/ATL::CAtlDllModuleT::GetClassObject"]
helpviewer_keywords: ["CAtlDllModuleT class"]
-ms.assetid: 351d5767-8257-4878-94be-45a85e31a72d
---
# CAtlDllModuleT Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class represents the module for a DLL.
## Syntax
diff --git a/docs/atl/reference/catlexception-class.md b/docs/atl/reference/catlexception-class.md
index 5549aa2ab77..584270063fc 100644
--- a/docs/atl/reference/catlexception-class.md
+++ b/docs/atl/reference/catlexception-class.md
@@ -4,10 +4,11 @@ title: "CAtlException Class"
ms.date: "11/04/2016"
f1_keywords: ["CAtlException", "ATLEXCEPT/ATL::CAtlException", "ATLEXCEPT/ATL::CAtlException::CAtlException", "ATLEXCEPT/ATL::CAtlException::m_hr"]
helpviewer_keywords: ["CAtlException class"]
-ms.assetid: 3fd7b041-f70d-4292-b947-0d70781d95a8
---
# CAtlException Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class defines an ATL exception.
## Syntax
diff --git a/docs/atl/reference/catlexemodulet-class.md b/docs/atl/reference/catlexemodulet-class.md
index 9d191306d99..fa15ff7dee1 100644
--- a/docs/atl/reference/catlexemodulet-class.md
+++ b/docs/atl/reference/catlexemodulet-class.md
@@ -4,10 +4,11 @@ title: "CAtlExeModuleT Class"
ms.date: "11/04/2016"
f1_keywords: ["CAtlExeModuleT", "ATLBASE/ATL::CAtlExeModuleT", "ATLBASE/ATL::CAtlExeModuleT::CAtlExeModuleT", "ATLBASE/ATL::CAtlExeModuleT::InitializeCom", "ATLBASE/ATL::CAtlExeModuleT::ParseCommandLine", "ATLBASE/ATL::CAtlExeModuleT::PostMessageLoop", "ATLBASE/ATL::CAtlExeModuleT::PreMessageLoop", "ATLBASE/ATL::CAtlExeModuleT::RegisterClassObjects", "ATLBASE/ATL::CAtlExeModuleT::RevokeClassObjects", "ATLBASE/ATL::CAtlExeModuleT::Run", "ATLBASE/ATL::CAtlExeModuleT::RunMessageLoop", "ATLBASE/ATL::CAtlExeModuleT::UninitializeCom", "ATLBASE/ATL::CAtlExeModuleT::Unlock", "ATLBASE/ATL::CAtlExeModuleT::WinMain", "ATLBASE/ATL::CAtlExeModuleT::m_bDelayShutdown", "ATLBASE/ATL::CAtlExeModuleT::m_dwPause", "ATLBASE/ATL::CAtlExeModuleT::m_dwTimeOut"]
helpviewer_keywords: ["CAtlExeModuleT class"]
-ms.assetid: 82245f3d-91d4-44fa-aa86-7cc7fbd758d9
---
# CAtlExeModuleT Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class represents the module for an application.
## Syntax
diff --git a/docs/atl/reference/catlfile-class.md b/docs/atl/reference/catlfile-class.md
index bbc448b9790..d959d4b8c38 100644
--- a/docs/atl/reference/catlfile-class.md
+++ b/docs/atl/reference/catlfile-class.md
@@ -4,10 +4,11 @@ title: "CAtlFile Class"
ms.date: "11/04/2016"
f1_keywords: ["CAtlFile", "ATLFILE/ATL::CAtlFile", "ATLFILE/ATL::CAtlFile::CAtlFile", "ATLFILE/ATL::CAtlFile::Create", "ATLFILE/ATL::CAtlFile::Flush", "ATLFILE/ATL::CAtlFile::GetOverlappedResult", "ATLFILE/ATL::CAtlFile::GetPosition", "ATLFILE/ATL::CAtlFile::GetSize", "ATLFILE/ATL::CAtlFile::LockRange", "ATLFILE/ATL::CAtlFile::Read", "ATLFILE/ATL::CAtlFile::Seek", "ATLFILE/ATL::CAtlFile::SetSize", "ATLFILE/ATL::CAtlFile::UnlockRange", "ATLFILE/ATL::CAtlFile::Write", "ATLFILE/ATL::CAtlFile::m_pTM"]
helpviewer_keywords: ["CAtlFile class"]
-ms.assetid: 93ed160b-af2a-448c-9cbe-e5fa46c199bb
---
# CAtlFile Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides a thin wrapper around the Windows file-handling API.
> [!IMPORTANT]
diff --git a/docs/atl/reference/catlfilemapping-class.md b/docs/atl/reference/catlfilemapping-class.md
index 8eebfc290c1..db442ec69fb 100644
--- a/docs/atl/reference/catlfilemapping-class.md
+++ b/docs/atl/reference/catlfilemapping-class.md
@@ -4,10 +4,11 @@ title: "CAtlFileMapping Class"
ms.date: "11/04/2016"
f1_keywords: ["CAtlFileMapping", "atlfile/ATL::CAtlFileMapping"]
helpviewer_keywords: ["CAtlFileMapping class"]
-ms.assetid: 899fc058-e05e-48b5-aca9-340403bb9e26
---
# CAtlFileMapping Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class represents a memory-mapped file, adding a cast operator to the methods of [CAtlFileMappingBase](../../atl/reference/catlfilemappingbase-class.md).
> [!IMPORTANT]
diff --git a/docs/atl/reference/catlfilemappingbase-class.md b/docs/atl/reference/catlfilemappingbase-class.md
index f7084aa9571..b2bc6e3c4e5 100644
--- a/docs/atl/reference/catlfilemappingbase-class.md
+++ b/docs/atl/reference/catlfilemappingbase-class.md
@@ -4,10 +4,11 @@ title: "CAtlFileMappingBase Class"
ms.date: "11/04/2016"
f1_keywords: ["CAtlFileMappingBase", "ATLFILE/ATL::CAtlFileMappingBase", "ATLFILE/ATL::CAtlFileMappingBase::CAtlFileMappingBase", "ATLFILE/ATL::CAtlFileMappingBase::CopyFrom", "ATLFILE/ATL::CAtlFileMappingBase::GetData", "ATLFILE/ATL::CAtlFileMappingBase::GetHandle", "ATLFILE/ATL::CAtlFileMappingBase::GetMappingSize", "ATLFILE/ATL::CAtlFileMappingBase::MapFile", "ATLFILE/ATL::CAtlFileMappingBase::MapSharedMem", "ATLFILE/ATL::CAtlFileMappingBase::OpenMapping", "ATLFILE/ATL::CAtlFileMappingBase::Unmap"]
helpviewer_keywords: ["CAtlFileMappingBase class"]
-ms.assetid: be555723-2790-4f57-a8fb-be4d68460775
---
# CAtlFileMappingBase Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class represents a memory-mapped file.
> [!IMPORTANT]
diff --git a/docs/atl/reference/catllist-class.md b/docs/atl/reference/catllist-class.md
index 6b1fc2ce91e..a5cada88bd7 100644
--- a/docs/atl/reference/catllist-class.md
+++ b/docs/atl/reference/catllist-class.md
@@ -4,10 +4,11 @@ title: "CAtlList Class"
ms.date: "11/04/2016"
f1_keywords: ["CAtlList", "ATLCOLL/ATL::CAtlList", "ATLCOLL/ATL::CAtlList::INARGTYPE", "ATLCOLL/ATL::CAtlList::CAtlList", "ATLCOLL/ATL::CAtlList::AddHead", "ATLCOLL/ATL::CAtlList::AddHeadList", "ATLCOLL/ATL::CAtlList::AddTail", "ATLCOLL/ATL::CAtlList::AddTailList", "ATLCOLL/ATL::CAtlList::AssertValid", "ATLCOLL/ATL::CAtlList::Find", "ATLCOLL/ATL::CAtlList::FindIndex", "ATLCOLL/ATL::CAtlList::GetAt", "ATLCOLL/ATL::CAtlList::GetCount", "ATLCOLL/ATL::CAtlList::GetHead", "ATLCOLL/ATL::CAtlList::GetHeadPosition", "ATLCOLL/ATL::CAtlList::GetNext", "ATLCOLL/ATL::CAtlList::GetPrev", "ATLCOLL/ATL::CAtlList::GetTail", "ATLCOLL/ATL::CAtlList::GetTailPosition", "ATLCOLL/ATL::CAtlList::InsertAfter", "ATLCOLL/ATL::CAtlList::InsertBefore", "ATLCOLL/ATL::CAtlList::IsEmpty", "ATLCOLL/ATL::CAtlList::MoveToHead", "ATLCOLL/ATL::CAtlList::MoveToTail", "ATLCOLL/ATL::CAtlList::RemoveAll", "ATLCOLL/ATL::CAtlList::RemoveAt", "ATLCOLL/ATL::CAtlList::RemoveHead", "ATLCOLL/ATL::CAtlList::RemoveHeadNoReturn", "ATLCOLL/ATL::CAtlList::RemoveTail", "ATLCOLL/ATL::CAtlList::RemoveTailNoReturn", "ATLCOLL/ATL::CAtlList::SetAt", "ATLCOLL/ATL::CAtlList::SwapElements"]
helpviewer_keywords: ["CAtlList class"]
-ms.assetid: 09e98053-64b2-4efa-99ab-d0542caaf981
---
# CAtlList Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for creating and managing a list object.
## Syntax
diff --git a/docs/atl/reference/catlmap-class.md b/docs/atl/reference/catlmap-class.md
index b9273b02c8e..1801355e86b 100644
--- a/docs/atl/reference/catlmap-class.md
+++ b/docs/atl/reference/catlmap-class.md
@@ -4,10 +4,11 @@ title: "CAtlMap Class"
ms.date: "11/04/2016"
f1_keywords: ["CAtlMap", "ATLCOLL/ATL::CAtlMap", "ATLCOLL/ATL::CAtlMap::KINARGTYPE", "ATLCOLL/ATL::CAtlMap::KOUTARGTYPE", "ATLCOLL/ATL::CAtlMap::VINARGTYPE", "ATLCOLL/ATL::CAtlMap::VOUTARGTYPE", "ATLCOLL/ATL::CPair::m_key", "ATLCOLL/ATL::CPair::m_value", "ATLCOLL/ATL::CAtlMap::CAtlMap", "ATLCOLL/ATL::CAtlMap::AssertValid", "ATLCOLL/ATL::CAtlMap::DisableAutoRehash", "ATLCOLL/ATL::CAtlMap::EnableAutoRehash", "ATLCOLL/ATL::CAtlMap::GetAt", "ATLCOLL/ATL::CAtlMap::GetCount", "ATLCOLL/ATL::CAtlMap::GetHashTableSize", "ATLCOLL/ATL::CAtlMap::GetKeyAt", "ATLCOLL/ATL::CAtlMap::GetNext", "ATLCOLL/ATL::CAtlMap::GetNextAssoc", "ATLCOLL/ATL::CAtlMap::GetNextKey", "ATLCOLL/ATL::CAtlMap::GetNextValue", "ATLCOLL/ATL::CAtlMap::GetStartPosition", "ATLCOLL/ATL::CAtlMap::GetValueAt", "ATLCOLL/ATL::CAtlMap::InitHashTable", "ATLCOLL/ATL::CAtlMap::IsEmpty", "ATLCOLL/ATL::CAtlMap::Lookup", "ATLCOLL/ATL::CAtlMap::Rehash", "ATLCOLL/ATL::CAtlMap::RemoveAll", "ATLCOLL/ATL::CAtlMap::RemoveAtPos", "ATLCOLL/ATL::CAtlMap::RemoveKey", "ATLCOLL/ATL::CAtlMap::SetAt", "ATLCOLL/ATL::CAtlMap::SetOptimalLoad", "ATLCOLL/ATL::CAtlMap::SetValueAt"]
helpviewer_keywords: ["CAtlMap class"]
-ms.assetid: 5e2fe028-8e6d-4686-93df-1433d2080ec3
---
# CAtlMap Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for creating and managing a map object.
## Syntax
diff --git a/docs/atl/reference/catlmodule-class.md b/docs/atl/reference/catlmodule-class.md
index 637193f3c88..2136b7f2d94 100644
--- a/docs/atl/reference/catlmodule-class.md
+++ b/docs/atl/reference/catlmodule-class.md
@@ -4,10 +4,11 @@ title: "CAtlModule Class"
ms.date: "11/04/2016"
f1_keywords: ["CAtlModule", "ATLBASE/ATL::CAtlModule", "ATLBASE/ATL::CAtlModule::CAtlModule", "ATLBASE/ATL::CAtlModule::AddCommonRGSReplacements", "ATLBASE/ATL::CAtlModule::AddTermFunc", "ATLBASE/ATL::CAtlModule::GetGITPtr", "ATLBASE/ATL::CAtlModule::GetLockCount", "ATLBASE/ATL::CAtlModule::Lock", "ATLBASE/ATL::CAtlModule::Term", "ATLBASE/ATL::CAtlModule::Unlock", "ATLBASE/ATL::CAtlModule::UpdateRegistryFromResourceD", "ATLBASE/ATL::CAtlModule::UpdateRegistryFromResourceDHelper", "ATLBASE/ATL::CAtlModule::UpdateRegistryFromResourceS", "ATLBASE/ATL::CAtlModule::m_libid", "ATLBASE/ATL::CAtlModule::m_pGIT"]
helpviewer_keywords: ["CAtlModule class"]
-ms.assetid: 63fe02f1-4c4b-4e7c-ae97-7ad7b4252415
---
# CAtlModule Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods used by several ATL module classes.
## Syntax
diff --git a/docs/atl/reference/catlmodulet-class.md b/docs/atl/reference/catlmodulet-class.md
index aeddee3c887..d8cc2b1db58 100644
--- a/docs/atl/reference/catlmodulet-class.md
+++ b/docs/atl/reference/catlmodulet-class.md
@@ -4,10 +4,11 @@ title: "CAtlModuleT Class"
ms.date: "11/04/2016"
f1_keywords: ["CAtlModuleT", "ATLBASE/ATL::CAtlModuleT", "ATLBASE/ATL::CAtlModuleT::CAtlModuleT", "ATLBASE/ATL::CAtlModuleT::InitLibId", "ATLBASE/ATL::CAtlModuleT::RegisterAppId", "ATLBASE/ATL::CAtlModuleT::RegisterServer", "ATLBASE/ATL::CAtlModuleT::UnregisterAppId", "ATLBASE/ATL::CAtlModuleT::UnregisterServer", "ATLBASE/ATL::CAtlModuleT::UpdateRegistryAppId"]
helpviewer_keywords: ["CAtlModuleT class"]
-ms.assetid: 9b74d02f-9117-47b1-a05e-c5945f83dd2b
---
# CAtlModuleT Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements an ATL module.
## Syntax
diff --git a/docs/atl/reference/catlpreviewctrlimpl-class.md b/docs/atl/reference/catlpreviewctrlimpl-class.md
index 2f2fc09617b..c5e24db6ba6 100644
--- a/docs/atl/reference/catlpreviewctrlimpl-class.md
+++ b/docs/atl/reference/catlpreviewctrlimpl-class.md
@@ -4,10 +4,11 @@ title: "CAtlPreviewCtrlImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["CAtlPreviewCtrlImpl", "ATLPREVIEWCTRLIMPL/ATL::CAtlPreviewCtrlImpl", "ATLPREVIEWCTRLIMPL/ATL::CAtlPreviewCtrlImpl::CAtlPreviewCtrlImpl", "ATLPREVIEWCTRLIMPL/ATL::CAtlPreviewCtrlImpl::Create", "ATLPREVIEWCTRLIMPL/ATL::CAtlPreviewCtrlImpl::Destroy", "ATLPREVIEWCTRLIMPL/ATL::CAtlPreviewCtrlImpl::Focus", "ATLPREVIEWCTRLIMPL/ATL::CAtlPreviewCtrlImpl::OnPaint", "ATLPREVIEWCTRLIMPL/ATL::CAtlPreviewCtrlImpl::Redraw", "ATLPREVIEWCTRLIMPL/ATL::CAtlPreviewCtrlImpl::SetHost", "ATLPREVIEWCTRLIMPL/ATL::CAtlPreviewCtrlImpl::SetPreviewVisuals", "ATLPREVIEWCTRLIMPL/ATL::CAtlPreviewCtrlImpl::SetRect", "ATLPREVIEWCTRLIMPL/ATL::CAtlPreviewCtrlImpl::DoPaint", "ATLPREVIEWCTRLIMPL/ATL::CAtlPreviewCtrlImpl::m_plf", "ATLPREVIEWCTRLIMPL/ATL::CAtlPreviewCtrlImpl::m_clrBack", "ATLPREVIEWCTRLIMPL/ATL::CAtlPreviewCtrlImpl::m_clrText"]
helpviewer_keywords: ["CAtlPreviewCtrlImpl class"]
-ms.assetid: 39b3299e-07e4-4abc-9b6e-b54bfa3b0802
---
# CAtlPreviewCtrlImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is an ATL implementation of a window that is placed on a host window provided by the Shell for Rich Preview.
> [!IMPORTANT]
diff --git a/docs/atl/reference/catlservicemodulet-class.md b/docs/atl/reference/catlservicemodulet-class.md
index 8931b815121..19c51da62bc 100644
--- a/docs/atl/reference/catlservicemodulet-class.md
+++ b/docs/atl/reference/catlservicemodulet-class.md
@@ -4,10 +4,11 @@ title: "CAtlServiceModuleT Class"
ms.date: "05/06/2019"
f1_keywords: ["CAtlServiceModuleT", "ATLBASE/ATL::CAtlServiceModuleT", "ATLBASE/ATL::CAtlServiceModuleT::CAtlServiceModuleT", "ATLBASE/ATL::CAtlServiceModuleT::Handler", "ATLBASE/ATL::CAtlServiceModuleT::InitializeSecurity", "ATLBASE/ATL::CAtlServiceModuleT::Install", "ATLBASE/ATL::CAtlServiceModuleT::IsInstalled", "ATLBASE/ATL::CAtlServiceModuleT::LogEvent", "ATLBASE/ATL::CAtlServiceModuleT::OnContinue", "ATLBASE/ATL::CAtlServiceModuleT::OnInterrogate", "ATLBASE/ATL::CAtlServiceModuleT::OnPause", "ATLBASE/ATL::CAtlServiceModuleT::OnShutdown", "ATLBASE/ATL::CAtlServiceModuleT::OnStop", "ATLBASE/ATL::CAtlServiceModuleT::OnUnknownRequest", "ATLBASE/ATL::CAtlServiceModuleT::ParseCommandLine", "ATLBASE/ATL::CAtlServiceModuleT::PreMessageLoop", "ATLBASE/ATL::CAtlServiceModuleT::RegisterAppId", "ATLBASE/ATL::CAtlServiceModuleT::Run", "ATLBASE/ATL::CAtlServiceModuleT::ServiceMain", "ATLBASE/ATL::CAtlServiceModuleT::SetServiceStatus", "ATLBASE/ATL::CAtlServiceModuleT::Start", "ATLBASE/ATL::CAtlServiceModuleT::Uninstall", "ATLBASE/ATL::CAtlServiceModuleT::Unlock", "ATLBASE/ATL::CAtlServiceModuleT::UnregisterAppId", "ATLBASE/ATL::CAtlServiceModuleT::WinMain", "ATLBASE/ATL::CAtlServiceModuleT::m_bService", "ATLBASE/ATL::CAtlServiceModuleT::m_dwThreadID", "ATLBASE/ATL::CAtlServiceModuleT::m_hServiceStatus", "ATLBASE/ATL::CAtlServiceModuleT::m_status", "ATLBASE/ATL::CAtlServiceModuleT::m_szServiceName"]
helpviewer_keywords: ["CAtlServiceModuleT class"]
-ms.assetid: 8fc753ce-4a50-402b-9b4a-0a4ce5dd496c
---
# CAtlServiceModuleT Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements a service.
> [!IMPORTANT]
diff --git a/docs/atl/reference/catltemporaryfile-class.md b/docs/atl/reference/catltemporaryfile-class.md
index 9878d4a0d93..597aaba7e09 100644
--- a/docs/atl/reference/catltemporaryfile-class.md
+++ b/docs/atl/reference/catltemporaryfile-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["CAtlTemporaryFile class"]
---
# CAtlTemporaryFile Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for the creation and use of a temporary file.
> [!IMPORTANT]
diff --git a/docs/atl/reference/catltransactionmanager-class.md b/docs/atl/reference/catltransactionmanager-class.md
index 4c4430bf45b..4eec9cfe549 100644
--- a/docs/atl/reference/catltransactionmanager-class.md
+++ b/docs/atl/reference/catltransactionmanager-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["CAtlTransactionManager class"]
---
# CAtlTransactionManager Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
CAtlTransactionManager class provides a wrapper to Kernel Transaction Manager (KTM) functions.
> [!IMPORTANT]
diff --git a/docs/atl/reference/catlwinmodule-class.md b/docs/atl/reference/catlwinmodule-class.md
index fe46bab7a8f..dfd3f356a9a 100644
--- a/docs/atl/reference/catlwinmodule-class.md
+++ b/docs/atl/reference/catlwinmodule-class.md
@@ -4,10 +4,11 @@ title: "CAtlWinModule Class"
ms.date: "11/04/2016"
f1_keywords: ["CAtlWinModule", "ATLBASE/ATL::CAtlWinModule", "ATLBASE/ATL::CAtlWinModule::CAtlWinModule", "ATLBASE/ATL::CAtlWinModule::AddCreateWndData", "ATLBASE/ATL::CAtlWinModule::ExtractCreateWndData"]
helpviewer_keywords: ["CAtlWinModule class"]
-ms.assetid: 7ec844af-0f68-4a34-b0c8-9de50a025df0
---
# CAtlWinModule Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides support for ATL windowing components.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cautoptr-class.md b/docs/atl/reference/cautoptr-class.md
index ec51839b4b2..69c6edfac9f 100644
--- a/docs/atl/reference/cautoptr-class.md
+++ b/docs/atl/reference/cautoptr-class.md
@@ -4,10 +4,11 @@ title: "CAutoPtr class"
ms.date: "11/04/2016"
f1_keywords: ["CAutoPtr", "ATLBASE/ATL::CAutoPtr", "ATLBASE/ATL::CAutoPtr::CAutoPtr", "ATLBASE/ATL::CAutoPtr::Attach", "ATLBASE/ATL::CAutoPtr::Detach", "ATLBASE/ATL::CAutoPtr::Free", "ATLBASE/ATL::CAutoPtr::m_p"]
helpviewer_keywords: ["CAutoPtr class"]
-ms.assetid: 08988d53-4fb0-4711-bdfc-8ac29c63f410
---
# `CAutoPtr` class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class represents a smart pointer object.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cautoptrarray-class.md b/docs/atl/reference/cautoptrarray-class.md
index cadb53e14a1..ab3616b4920 100644
--- a/docs/atl/reference/cautoptrarray-class.md
+++ b/docs/atl/reference/cautoptrarray-class.md
@@ -4,10 +4,11 @@ title: "CAutoPtrArray Class"
ms.date: "11/04/2016"
f1_keywords: ["CAutoPtrArray", "ATLCOLL/ATL::CAutoPtrArray", "ATLCOLL/ATL::CAutoPtrArray::CAutoPtrArray"]
helpviewer_keywords: ["CAutoPtrArray class"]
-ms.assetid: 880a70da-8c81-4427-8ac6-49aa8d424244
---
# CAutoPtrArray Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods useful when constructing an array of smart pointers.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cautoptrelementtraits-class.md b/docs/atl/reference/cautoptrelementtraits-class.md
index 90b8dbbea8c..5d2f5125152 100644
--- a/docs/atl/reference/cautoptrelementtraits-class.md
+++ b/docs/atl/reference/cautoptrelementtraits-class.md
@@ -4,10 +4,11 @@ title: "CAutoPtrElementTraits Class"
ms.date: "11/04/2016"
f1_keywords: ["CAutoPtrElementTraits", "ATLCOLL/ATL::CAutoPtrElementTraits", "ATLCOLL/ATL::CAutoPtrElementTraits::INARGTYPE", "ATLCOLL/ATL::CAutoPtrElementTraits::OUTARGTYPE"]
helpviewer_keywords: ["CAutoPtrElementTraits class"]
-ms.assetid: 777c1b14-6ab7-491f-b9a5-be149e71d4a2
---
# CAutoPtrElementTraits Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods, static functions, and typedefs useful when creating collections of smart pointers.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cautoptrlist-class.md b/docs/atl/reference/cautoptrlist-class.md
index c2b8e2a7d2a..9f1ae599de9 100644
--- a/docs/atl/reference/cautoptrlist-class.md
+++ b/docs/atl/reference/cautoptrlist-class.md
@@ -4,10 +4,11 @@ title: "CAutoPtrList Class"
ms.date: "11/04/2016"
f1_keywords: ["CAutoPtrList", "ATLCOLL/ATL::CAutoPtrList", "ATLCOLL/ATL::CAutoPtrList::CAutoPtrList"]
helpviewer_keywords: ["CAutoPtrList class"]
-ms.assetid: 11de4aca-28b0-4ff2-a74a-cb602312ffbd
---
# CAutoPtrList Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods useful when constructing a list of smart pointers.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cautorevertimpersonation-class.md b/docs/atl/reference/cautorevertimpersonation-class.md
index 6f63d124513..0999a258299 100644
--- a/docs/atl/reference/cautorevertimpersonation-class.md
+++ b/docs/atl/reference/cautorevertimpersonation-class.md
@@ -4,10 +4,11 @@ title: "CAutoRevertImpersonation Class"
ms.date: "11/04/2016"
f1_keywords: ["CAutoRevertImpersonation", "ATLSECURITY/ATL::CAutoRevertImpersonation", "ATLSECURITY/ATL::CAutoRevertImpersonation::CAutoRevertImpersonation", "ATLSECURITY/ATL::CAutoRevertImpersonation::Attach", "ATLSECURITY/ATL::CAutoRevertImpersonation::Detach", "ATLSECURITY/ATL::CAutoRevertImpersonation::GetAccessToken"]
helpviewer_keywords: ["CAutoRevertImpersonation class"]
-ms.assetid: 43732849-1940-4bd4-9d52-7a5698bb8838
---
# CAutoRevertImpersonation Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class reverts [CAccessToken](../../atl/reference/caccesstoken-class.md) objects to a nonimpersonating state when it goes out of scope.
## Syntax
diff --git a/docs/atl/reference/cautovectorptr-class.md b/docs/atl/reference/cautovectorptr-class.md
index be4c474bcce..e53ebac6abb 100644
--- a/docs/atl/reference/cautovectorptr-class.md
+++ b/docs/atl/reference/cautovectorptr-class.md
@@ -4,10 +4,11 @@ title: "CAutoVectorPtr Class"
ms.date: "11/04/2016"
f1_keywords: ["CAutoVectorPtr", "ATLBASE/ATL::CAutoVectorPtr", "ATLBASE/ATL::CAutoVectorPtr::CAutoVectorPtr", "ATLBASE/ATL::CAutoVectorPtr::Allocate", "ATLBASE/ATL::CAutoVectorPtr::Attach", "ATLBASE/ATL::CAutoVectorPtr::Detach", "ATLBASE/ATL::CAutoVectorPtr::Free", "ATLBASE/ATL::CAutoVectorPtr::m_p"]
helpviewer_keywords: ["CAutoVectorPtr class"]
-ms.assetid: 0030362b-6bc4-4a47-9b5b-3c3899dceab4
---
# CAutoVectorPtr Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class represents a smart pointer object using vector new and delete operators.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cautovectorptrelementtraits-class.md b/docs/atl/reference/cautovectorptrelementtraits-class.md
index 86e766db0b2..7a18d053716 100644
--- a/docs/atl/reference/cautovectorptrelementtraits-class.md
+++ b/docs/atl/reference/cautovectorptrelementtraits-class.md
@@ -4,10 +4,11 @@ title: "CAutoVectorPtrElementTraits Class"
ms.date: "11/04/2016"
f1_keywords: ["CAutoVectorPtrElementTraits", "ATLCOLL/ATL::CAutoVectorPtrElementTraits", "ATLCOLL/ATL::CAutoVectorPtrElementTraits::INARGTYPE", "ATLCOLL/ATL::CAutoVectorPtrElementTraits::OUTARGTYPE"]
helpviewer_keywords: ["CAutoVectorPtrElementTraits class"]
-ms.assetid: 16b81a56-55fb-46ca-b376-66a1884231a6
---
# CAutoVectorPtrElementTraits Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods, static functions, and typedefs useful when creating collections of smart pointers using vector new and delete operators.
> [!IMPORTANT]
diff --git a/docs/atl/reference/caxdialogimpl-class.md b/docs/atl/reference/caxdialogimpl-class.md
index 76937ed12b0..8e536aadf64 100644
--- a/docs/atl/reference/caxdialogimpl-class.md
+++ b/docs/atl/reference/caxdialogimpl-class.md
@@ -4,10 +4,11 @@ title: "CAxDialogImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["CAxDialogImpl", "ATLWIN/ATL::CAxDialogImpl", "ATLWIN/ATL::CAxDialogImpl::AdviseSinkMap", "ATLWIN/ATL::CAxDialogImpl::Create", "ATLWIN/ATL::CAxDialogImpl::DestroyWindow", "ATLWIN/ATL::CAxDialogImpl::DoModal", "ATLWIN/ATL::CAxDialogImpl::EndDialog", "ATLWIN/ATL::CAxDialogImpl::GetDialogProc", "ATLWIN/ATL::CAxDialogImpl::GetIDD", "ATLWIN/ATL::CAxDialogImpl::IsDialogMessage", "ATLWIN/ATL::CAxDialogImpl::m_bModal"]
helpviewer_keywords: ["CAxDialogImpl class", "ATL, dialog boxes"]
-ms.assetid: 817df483-3fa8-44e7-8487-72ba0881cd27
---
# CAxDialogImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements a dialog box (modal or modeless) that hosts ActiveX controls.
> [!IMPORTANT]
diff --git a/docs/atl/reference/caxwindow-class.md b/docs/atl/reference/caxwindow-class.md
index 1817a66fc3c..6a8268eb678 100644
--- a/docs/atl/reference/caxwindow-class.md
+++ b/docs/atl/reference/caxwindow-class.md
@@ -4,7 +4,6 @@ title: "CAxWindow Class"
ms.date: "11/04/2016"
f1_keywords: ["CAxWindow", "ATLWIN/ATL::CAxWindow", "ATLWIN/ATL::AttachControl", "ATLWIN/ATL::CreateControl", "ATLWIN/ATL::CreateControlEx", "ATLWIN/ATL::GetWndClassName", "ATLWIN/ATL::QueryControl", "ATLWIN/ATL::QueryHost", "ATLWIN/ATL::SetExternalDispatch", "ATLWIN/ATL::SetExternalUIHandler"]
helpviewer_keywords: ["CAxWindow class", "ATL, hosting ActiveX controls"]
-ms.assetid: 85e79261-43e4-4770-bde0-1ff87f222b0f
api_type:
- DllExport
api_location:
@@ -14,6 +13,8 @@ api_name:
---
# CAxWindow Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for manipulating a window hosting an ActiveX control.
> [!IMPORTANT]
diff --git a/docs/atl/reference/caxwindow2t-class.md b/docs/atl/reference/caxwindow2t-class.md
index 866f52ad95f..b8ed27afc15 100644
--- a/docs/atl/reference/caxwindow2t-class.md
+++ b/docs/atl/reference/caxwindow2t-class.md
@@ -4,10 +4,11 @@ title: "CAxWindow2T Class"
ms.date: "11/04/2016"
f1_keywords: ["CAxWindow2T", "ATLWIN/ATL::CAxWindow2T", "ATLWIN/ATL::CAxWindow2T::CAxWindow2T", "ATLWIN/ATL::CAxWindow2T::Create", "ATLWIN/ATL::CAxWindow2T::CreateControlLic", "ATLWIN/ATL::CAxWindow2T::CreateControlLicEx", "ATLWIN/ATL::CAxWindow2T::GetWndClassName"]
helpviewer_keywords: ["CAxWindow2 class"]
-ms.assetid: b87bc943-7991-4537-b902-2138d7f4d837
---
# CAxWindow2T Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for manipulating a window that hosts an ActiveX control, and also has support for hosting licensed ActiveX controls.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cbindstatuscallback-class.md b/docs/atl/reference/cbindstatuscallback-class.md
index 1de6349c0cc..795c96c8517 100644
--- a/docs/atl/reference/cbindstatuscallback-class.md
+++ b/docs/atl/reference/cbindstatuscallback-class.md
@@ -4,10 +4,11 @@ title: "CBindStatusCallback Class"
ms.date: "11/04/2016"
f1_keywords: ["CBindStatusCallback", "ATLCTL/ATL::CBindStatusCallback", "ATLCTL/ATL::CBindStatusCallback::CBindStatusCallback", "ATLCTL/ATL::CBindStatusCallback::Download", "ATLCTL/ATL::CBindStatusCallback::GetBindInfo", "ATLCTL/ATL::CBindStatusCallback::GetPriority", "ATLCTL/ATL::CBindStatusCallback::OnDataAvailable", "ATLCTL/ATL::CBindStatusCallback::OnLowResource", "ATLCTL/ATL::CBindStatusCallback::OnObjectAvailable", "ATLCTL/ATL::CBindStatusCallback::OnProgress", "ATLCTL/ATL::CBindStatusCallback::OnStartBinding", "ATLCTL/ATL::CBindStatusCallback::OnStopBinding", "ATLCTL/ATL::CBindStatusCallback::StartAsyncDownload", "ATLCTL/ATL::CBindStatusCallback::m_dwAvailableToRead", "ATLCTL/ATL::CBindStatusCallback::m_dwTotalRead", "ATLCTL/ATL::CBindStatusCallback::m_pFunc", "ATLCTL/ATL::CBindStatusCallback::m_pT", "ATLCTL/ATL::CBindStatusCallback::m_spBindCtx", "ATLCTL/ATL::CBindStatusCallback::m_spBinding", "ATLCTL/ATL::CBindStatusCallback::m_spMoniker", "ATLCTL/ATL::CBindStatusCallback::m_spStream"]
helpviewer_keywords: ["asynchronous data transfer [C++]", "data transfer [C++]", "data transfer [C++], asynchronous", "CBindStatusCallback class"]
-ms.assetid: 0f5da276-6031-4418-b2a9-a4750ef29e77
---
# CBindStatusCallback Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements the `IBindStatusCallback` interface.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ccomaggobject-class.md b/docs/atl/reference/ccomaggobject-class.md
index b6eefe72330..f3401c8642f 100644
--- a/docs/atl/reference/ccomaggobject-class.md
+++ b/docs/atl/reference/ccomaggobject-class.md
@@ -4,10 +4,11 @@ title: "CComAggObject Class"
ms.date: "11/04/2016"
f1_keywords: ["CComAggObject", "ATLCOM/ATL::CComAggObject", "ATLCOM/ATL::CComAggObject::CComAggObject", "ATLCOM/ATL::CComAggObject::AddRef", "ATLCOM/ATL::CComAggObject::CreateInstance", "ATLCOM/ATL::CComAggObject::FinalConstruct", "ATLCOM/ATL::CComAggObject::FinalRelease", "ATLCOM/ATL::CComAggObject::QueryInterface", "ATLCOM/ATL::CComAggObject::Release", "ATLCOM/ATL::CComAggObject::m_contained"]
helpviewer_keywords: ["aggregate objects [C++], in ATL", "aggregation [C++], ATL objects", "CComAggObject class"]
-ms.assetid: 7aa90d69-d399-477b-880d-e2cdf0ef7881
---
# CComAggObject Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements the [IUnknown](/windows/win32/api/unknwn/nn-unknwn-iunknown) interface for an aggregated object. By definition, an aggregated object is contained within an outer object. The `CComAggObject` class is similar to the [CComObject Class](../../atl/reference/ccomobject-class.md), except that it exposes an interface that is directly accessible to external clients.
## Syntax
diff --git a/docs/atl/reference/ccomallocator-class.md b/docs/atl/reference/ccomallocator-class.md
index c29ebdbe019..83af39f1631 100644
--- a/docs/atl/reference/ccomallocator-class.md
+++ b/docs/atl/reference/ccomallocator-class.md
@@ -4,10 +4,11 @@ title: "CComAllocator Class"
ms.date: "11/04/2016"
f1_keywords: ["CComAllocator", "ATLBASE/ATL::CComAllocator", "ATLBASE/ATL::CComAllocator::Allocate", "ATLBASE/ATL::CComAllocator::Free", "ATLBASE/ATL::CComAllocator::Reallocate"]
helpviewer_keywords: ["CComAllocator class"]
-ms.assetid: 0cd706fd-0c7b-42d3-9054-febe2966fc8e
---
# CComAllocator Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for managing memory using COM memory routines.
## Syntax
diff --git a/docs/atl/reference/ccomapartment-class.md b/docs/atl/reference/ccomapartment-class.md
index b49417cff84..f1b11e286b0 100644
--- a/docs/atl/reference/ccomapartment-class.md
+++ b/docs/atl/reference/ccomapartment-class.md
@@ -4,10 +4,11 @@ title: "CComApartment Class"
ms.date: "11/04/2016"
f1_keywords: ["CComApartment", "ATLBASE/ATL::CComApartment", "ATLBASE/ATL::CComApartment::CComApartment", "ATLBASE/ATL::CComApartment::Apartment", "ATLBASE/ATL::CComApartment::GetLockCount", "ATLBASE/ATL::CComApartment::Lock", "ATLBASE/ATL::CComApartment::Unlock", "ATLBASE/ATL::CComApartment::m_dwThreadID", "ATLBASE/ATL::CComApartment::m_hThread", "ATLBASE/ATL::CComApartment::m_nLockCnt"]
helpviewer_keywords: ["apartments in ATL EXE modules", "CComApartment class"]
-ms.assetid: dbc177d7-7ee4-45f2-b563-d578a467ca93
---
# CComApartment Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides support for managing an apartment in a thread-pooled EXE module.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ccomautocriticalsection-class.md b/docs/atl/reference/ccomautocriticalsection-class.md
index 1307f3e999d..a2f558a71ac 100644
--- a/docs/atl/reference/ccomautocriticalsection-class.md
+++ b/docs/atl/reference/ccomautocriticalsection-class.md
@@ -4,10 +4,11 @@ title: "CComAutoCriticalSection Class"
ms.date: "11/04/2016"
f1_keywords: ["CComAutoCriticalSection", "ATLCORE/ATL::CComAutoCriticalSection", "ATLCORE/ATL::CComAutoCriticalSection::CComAutoCriticalSection"]
helpviewer_keywords: ["CComAutoCriticalSection class"]
-ms.assetid: 491a9d90-3398-4f90-88f5-fd2172a46b30
---
# CComAutoCriticalSection Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
`CComAutoCriticalSection` provides methods for obtaining and releasing ownership of a critical section object.
## Syntax
diff --git a/docs/atl/reference/ccomautodeletecriticalsection-class.md b/docs/atl/reference/ccomautodeletecriticalsection-class.md
index b7ab596a45f..61c39b5626b 100644
--- a/docs/atl/reference/ccomautodeletecriticalsection-class.md
+++ b/docs/atl/reference/ccomautodeletecriticalsection-class.md
@@ -4,10 +4,11 @@ title: "CComAutoDeleteCriticalSection Class"
ms.date: "11/04/2016"
f1_keywords: ["CComAutoDeleteCriticalSection", "atlcore/ATL::CComAutoDeleteCriticalSection"]
helpviewer_keywords: ["CComAutoDeleteCriticalSection class"]
-ms.assetid: 2396dbea-1c60-4841-b50e-c4e18af311a3
---
# CComAutoDeleteCriticalSection Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for obtaining and releasing ownership of a critical section object.
## Syntax
diff --git a/docs/atl/reference/ccomautothreadmodule-class.md b/docs/atl/reference/ccomautothreadmodule-class.md
index 4cff4d76b9d..2c6e947a2fe 100644
--- a/docs/atl/reference/ccomautothreadmodule-class.md
+++ b/docs/atl/reference/ccomautothreadmodule-class.md
@@ -4,10 +4,11 @@ title: "CComAutoThreadModule Class"
ms.date: "11/04/2016"
f1_keywords: ["CComAutoThreadModule", "ATLBASE/ATL::CComAutoThreadModule", "ATLBASE/ATL::CreateInstance", "ATLBASE/ATL::GetDefaultThreads", "ATLBASE/ATL::Init", "ATLBASE/ATL::Lock", "ATLBASE/ATL::Unlock", "ATLBASE/ATL::dwThreadID", "ATLBASE/ATL::m_Allocator", "ATLBASE/ATL::m_nThreads", "ATLBASE/ATL::m_pApartments"]
helpviewer_keywords: ["CComAutoThreadModule class", "apartment model modules"]
-ms.assetid: 13063ea5-a57e-4aac-97d3-227137262811
---
# CComAutoThreadModule Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
As of ATL 7.0, `CComAutoThreadModule` is obsolete: see [ATL Module Classes](../../atl/atl-module-classes.md) for more details.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ccombstr-class.md b/docs/atl/reference/ccombstr-class.md
index 14c7a7e8d83..7062d1d7d9c 100644
--- a/docs/atl/reference/ccombstr-class.md
+++ b/docs/atl/reference/ccombstr-class.md
@@ -4,10 +4,11 @@ title: "CComBSTR Class"
ms.date: "11/04/2016"
f1_keywords: ["CComBSTR", "ATLBASE/ATL::CComBSTR", "ATLBASE/ATL::CComBSTR::CComBSTR", "ATLBASE/ATL::CComBSTR::Append", "ATLBASE/ATL::CComBSTR::AppendBSTR", "ATLBASE/ATL::CComBSTR::AppendBytes", "ATLBASE/ATL::CComBSTR::ArrayToBSTR", "ATLBASE/ATL::CComBSTR::AssignBSTR", "ATLBASE/ATL::CComBSTR::Attach", "ATLBASE/ATL::CComBSTR::BSTRToArray", "ATLBASE/ATL::CComBSTR::ByteLength", "ATLBASE/ATL::CComBSTR::Copy", "ATLBASE/ATL::CComBSTR::CopyTo", "ATLBASE/ATL::CComBSTR::Detach", "ATLBASE/ATL::CComBSTR::Empty", "ATLBASE/ATL::CComBSTR::Length", "ATLBASE/ATL::CComBSTR::LoadString", "ATLBASE/ATL::CComBSTR::ReadFromStream", "ATLBASE/ATL::CComBSTR::ToLower", "ATLBASE/ATL::CComBSTR::ToUpper", "ATLBASE/ATL::CComBSTR::WriteToStream", "ATLBASE/ATL::CComBSTR::m_str"]
helpviewer_keywords: ["BSTRs, wrapper", "CComBSTR class", "CComBSTR"]
-ms.assetid: 8fea1879-a05e-47a5-a803-8dec60eaa534
---
# `CComBSTR` Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is a wrapper for [`BSTR`](/previous-versions/windows/desktop/automat/bstr)s.
## Syntax
diff --git a/docs/atl/reference/ccomcachedtearoffobject-class.md b/docs/atl/reference/ccomcachedtearoffobject-class.md
index 26e8f9526df..bfeda509925 100644
--- a/docs/atl/reference/ccomcachedtearoffobject-class.md
+++ b/docs/atl/reference/ccomcachedtearoffobject-class.md
@@ -4,10 +4,11 @@ title: "CComCachedTearOffObject Class"
ms.date: "11/04/2016"
f1_keywords: ["CComCachedTearOffObject", "ATLCOM/ATL::CComCachedTearOffObject", "ATLCOM/ATL::CComCachedTearOffObject::CComCachedTearOffObject", "ATLCOM/ATL::CComCachedTearOffObject::AddRef", "ATLCOM/ATL::CComCachedTearOffObject::FinalConstruct", "ATLCOM/ATL::CComCachedTearOffObject::FinalRelease", "ATLCOM/ATL::CComCachedTearOffObject::QueryInterface", "ATLCOM/ATL::CComCachedTearOffObject::Release", "ATLCOM/ATL::CComCachedTearOffObject::m_contained"]
helpviewer_keywords: ["cache, ATL cached tear-off objects", "CComCachedTearOffObject class"]
-ms.assetid: ae19507d-a1de-4dbc-a988-da9f75a50c95
---
# CComCachedTearOffObject Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements [IUnknown](/windows/win32/api/unknwn/nn-unknwn-iunknown) for a tear-off interface.
## Syntax
diff --git a/docs/atl/reference/ccomclassfactory-class.md b/docs/atl/reference/ccomclassfactory-class.md
index 02636d54b19..8ffc9ddddb9 100644
--- a/docs/atl/reference/ccomclassfactory-class.md
+++ b/docs/atl/reference/ccomclassfactory-class.md
@@ -4,10 +4,11 @@ title: "CComClassFactory Class"
ms.date: "11/04/2016"
f1_keywords: ["CComClassFactory", "ATLCOM/ATL::CComClassFactory", "ATLCOM/ATL::CComClassFactory::CreateInstance", "ATLCOM/ATL::CComClassFactory::LockServer"]
helpviewer_keywords: ["CComClassFactory class"]
-ms.assetid: e56dacf7-d5c4-4c42-aef4-a86d91981a1b
---
# CComClassFactory Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements the [IClassFactory](/windows/win32/api/unknwnbase/nn-unknwnbase-iclassfactory) interface.
## Syntax
diff --git a/docs/atl/reference/ccomclassfactory2-class.md b/docs/atl/reference/ccomclassfactory2-class.md
index 6a40fbd71ed..b96614dc260 100644
--- a/docs/atl/reference/ccomclassfactory2-class.md
+++ b/docs/atl/reference/ccomclassfactory2-class.md
@@ -4,10 +4,11 @@ title: "CComClassFactory2 Class"
ms.date: "11/04/2016"
f1_keywords: ["CComClassFactory2", "ATLCOM/ATL::CComClassFactory2", "ATLCOM/ATL::CComClassFactory2::CreateInstance", "ATLCOM/ATL::CComClassFactory2::CreateInstanceLic", "ATLCOM/ATL::CComClassFactory2::GetLicInfo", "ATLCOM/ATL::CComClassFactory2::LockServer", "ATLCOM/ATL::CComClassFactory2::RequestLicKey"]
helpviewer_keywords: ["CComClassFactory2 class"]
-ms.assetid: 19b66fd6-b9ed-47a0-822c-8132184f5a3e
---
# CComClassFactory2 Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements the [IClassFactory2](/windows/win32/api/ocidl/nn-ocidl-iclassfactory2) interface.
## Syntax
diff --git a/docs/atl/reference/ccomclassfactoryautothread-class.md b/docs/atl/reference/ccomclassfactoryautothread-class.md
index af076db252a..39c4c45f686 100644
--- a/docs/atl/reference/ccomclassfactoryautothread-class.md
+++ b/docs/atl/reference/ccomclassfactoryautothread-class.md
@@ -4,10 +4,11 @@ title: "CComClassFactoryAutoThread Class"
ms.date: "11/04/2016"
f1_keywords: ["CComClassFactoryAutoThread", "ATLCOM/ATL::CComClassFactoryAutoThread", "ATLCOM/ATL::CComClassFactoryAutoThread::CreateInstance", "ATLCOM/ATL::CComClassFactoryAutoThread::LockServer"]
helpviewer_keywords: ["CComClassFactoryAutoThread class"]
-ms.assetid: 22008042-533f-4dd9-bf7e-191ee571f9a1
---
# CComClassFactoryAutoThread Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements the [IClassFactory](/windows/win32/api/unknwnbase/nn-unknwnbase-iclassfactory) interface, and allows objects to be created in multiple apartments.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ccomclassfactorysingleton-class.md b/docs/atl/reference/ccomclassfactorysingleton-class.md
index 7559d27a594..a2eb6745545 100644
--- a/docs/atl/reference/ccomclassfactorysingleton-class.md
+++ b/docs/atl/reference/ccomclassfactorysingleton-class.md
@@ -4,10 +4,11 @@ title: "CComClassFactorySingleton Class"
ms.date: "11/04/2016"
f1_keywords: ["CComClassFactorySingleton", "ATLCOM/ATL::CComClassFactorySingleton", "ATLCOM/ATL::CComClassFactorySingleton::CreateInstance", "ATLCOM/ATL::CComClassFactorySingleton::m_spObj"]
helpviewer_keywords: ["CComClassFactorySingleton class"]
-ms.assetid: debb983c-382b-487b-8d42-7ea26dc158b8
---
# CComClassFactorySingleton Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class derives from [CComClassFactory](../../atl/reference/ccomclassfactory-class.md) and uses [CComObjectGlobal](../../atl/reference/ccomobjectglobal-class.md) to construct a single object.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ccomcoclass-class.md b/docs/atl/reference/ccomcoclass-class.md
index 2101a31f892..c9ccbbc5100 100644
--- a/docs/atl/reference/ccomcoclass-class.md
+++ b/docs/atl/reference/ccomcoclass-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["CComCoClass class", "aggregation [C++], aggregation model
---
# CComCoClass Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for creating instances of a class, and obtaining its properties.
## Syntax
diff --git a/docs/atl/reference/ccomcompositecontrol-class.md b/docs/atl/reference/ccomcompositecontrol-class.md
index d2899ea4afc..09bdc9f10a2 100644
--- a/docs/atl/reference/ccomcompositecontrol-class.md
+++ b/docs/atl/reference/ccomcompositecontrol-class.md
@@ -4,10 +4,11 @@ title: "CComCompositeControl Class"
ms.date: "11/04/2016"
f1_keywords: ["CComCompositeControl", "ATLCTL/ATL::CComCompositeControl", "ATLCTL/ATL::CComCompositeControl::CComCompositeControl", "ATLCTL/ATL::CComCompositeControl::AdviseSinkMap", "ATLCTL/ATL::CComCompositeControl::CalcExtent", "ATLCTL/ATL::CComCompositeControl::Create", "ATLCTL/ATL::CComCompositeControl::CreateControlWindow", "ATLCTL/ATL::CComCompositeControl::SetBackgroundColorFromAmbient", "ATLCTL/ATL::CComCompositeControl::m_hbrBackground", "ATLCTL/ATL::CComCompositeControl::m_hWndFocus"]
helpviewer_keywords: ["CComCompositeControl class", "composite controls, CComCompositeControl class"]
-ms.assetid: 1304b931-27e8-4fbc-be8e-bb226ad887fb
---
# CComCompositeControl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides the methods required to implement a composite control.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ccomcontainedobject-class.md b/docs/atl/reference/ccomcontainedobject-class.md
index 1f6f7008ce7..47a9a11db59 100644
--- a/docs/atl/reference/ccomcontainedobject-class.md
+++ b/docs/atl/reference/ccomcontainedobject-class.md
@@ -4,10 +4,11 @@ title: "CComContainedObject Class"
ms.date: "11/04/2016"
f1_keywords: ["CComContainedObject", "ATLCOM/ATL::CComContainedObject", "ATLCOM/ATL::CComContainedObject::CComContainedObject", "ATLCOM/ATL::CComContainedObject::AddRef", "ATLCOM/ATL::CComContainedObject::GetControllingUnknown", "ATLCOM/ATL::CComContainedObject::QueryInterface", "ATLCOM/ATL::CComContainedObject::Release"]
helpviewer_keywords: ["aggregate objects [C++], in ATL", "aggregation [C++], ATL objects", "CComContainedObject class"]
-ms.assetid: e8616b41-c200-47b8-bf2c-fb9f713ebdad
---
# CComContainedObject Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements [IUnknown](/windows/win32/api/unknwn/nn-unknwn-iunknown) by delegating to the owner object's `IUnknown`.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ccomcontrol-class.md b/docs/atl/reference/ccomcontrol-class.md
index 4c3cba00c3e..ef8078200c8 100644
--- a/docs/atl/reference/ccomcontrol-class.md
+++ b/docs/atl/reference/ccomcontrol-class.md
@@ -4,10 +4,11 @@ title: "CComControl Class"
ms.date: "11/04/2016"
f1_keywords: ["CComControl", "ATLCTL/ATL::CComControl", "ATLCTL/ATL::CComControl::CComControl", "ATLCTL/ATL::CComControl::ControlQueryInterface", "ATLCTL/ATL::CComControl::CreateControlWindow", "ATLCTL/ATL::CComControl::FireOnChanged", "ATLCTL/ATL::CComControl::FireOnRequestEdit", "ATLCTL/ATL::CComControl::MessageBox"]
helpviewer_keywords: ["control flags", "CComControlBase class, CComControl class", "stock properties, ATL", "CComControl class", "controls [ATL], control helper functions", "ambient properties", "controls [ATL], properties"]
-ms.assetid: 55368c27-bd16-45a7-b701-edb36157c8e8
---
# CComControl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for creating and managing ATL controls.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ccomcontrolbase-class.md b/docs/atl/reference/ccomcontrolbase-class.md
index f65f6c90ee2..82c638b2f4b 100644
--- a/docs/atl/reference/ccomcontrolbase-class.md
+++ b/docs/atl/reference/ccomcontrolbase-class.md
@@ -4,10 +4,11 @@ title: "CComControlBase Class"
ms.date: "11/04/2016"
f1_keywords: ["CComControlBase", "ATLCTL/ATL::CComControlBase", "ATLCTL/ATL::CComControlBase::AppearanceType", "ATLCTL/ATL::CComControlBase::CComControlBase", "ATLCTL/ATL::CComControlBase::ControlQueryInterface", "ATLCTL/ATL::CComControlBase::DoesVerbActivate", "ATLCTL/ATL::CComControlBase::DoesVerbUIActivate", "ATLCTL/ATL::CComControlBase::DoVerbProperties", "ATLCTL/ATL::CComControlBase::FireViewChange", "ATLCTL/ATL::CComControlBase::GetAmbientAppearance", "ATLCTL/ATL::CComControlBase::GetAmbientAutoClip", "ATLCTL/ATL::CComControlBase::GetAmbientBackColor", "ATLCTL/ATL::CComControlBase::GetAmbientCharSet", "ATLCTL/ATL::CComControlBase::GetAmbientCodePage", "ATLCTL/ATL::CComControlBase::GetAmbientDisplayAsDefault", "ATLCTL/ATL::CComControlBase::GetAmbientDisplayName", "ATLCTL/ATL::CComControlBase::GetAmbientFont", "ATLCTL/ATL::CComControlBase::GetAmbientFontDisp", "ATLCTL/ATL::CComControlBase::GetAmbientForeColor", "ATLCTL/ATL::CComControlBase::GetAmbientLocaleID", "ATLCTL/ATL::CComControlBase::GetAmbientMessageReflect", "ATLCTL/ATL::CComControlBase::GetAmbientPalette", "ATLCTL/ATL::CComControlBase::GetAmbientProperty", "ATLCTL/ATL::CComControlBase::GetAmbientRightToLeft", "ATLCTL/ATL::CComControlBase::GetAmbientScaleUnits", "ATLCTL/ATL::CComControlBase::GetAmbientShowGrabHandles", "ATLCTL/ATL::CComControlBase::GetAmbientShowHatching", "ATLCTL/ATL::CComControlBase::GetAmbientSupportsMnemonics", "ATLCTL/ATL::CComControlBase::GetAmbientTextAlign", "ATLCTL/ATL::CComControlBase::GetAmbientTopToBottom", "ATLCTL/ATL::CComControlBase::GetAmbientUIDead", "ATLCTL/ATL::CComControlBase::GetAmbientUserMode", "ATLCTL/ATL::CComControlBase::GetDirty", "ATLCTL/ATL::CComControlBase::GetZoomInfo", "ATLCTL/ATL::CComControlBase::InPlaceActivate", "ATLCTL/ATL::CComControlBase::InternalGetSite", "ATLCTL/ATL::CComControlBase::OnDraw", "ATLCTL/ATL::CComControlBase::OnDrawAdvanced", "ATLCTL/ATL::CComControlBase::OnKillFocus", "ATLCTL/ATL::CComControlBase::OnMouseActivate", "ATLCTL/ATL::CComControlBase::OnPaint", "ATLCTL/ATL::CComControlBase::OnSetFocus", "ATLCTL/ATL::CComControlBase::PreTranslateAccelerator", "ATLCTL/ATL::CComControlBase::SendOnClose", "ATLCTL/ATL::CComControlBase::SendOnDataChange", "ATLCTL/ATL::CComControlBase::SendOnRename", "ATLCTL/ATL::CComControlBase::SendOnSave", "ATLCTL/ATL::CComControlBase::SendOnViewChange", "ATLCTL/ATL::CComControlBase::SetControlFocus", "ATLCTL/ATL::CComControlBase::SetDirty", "ATLCTL/ATL::CComControlBase::m_bAutoSize", "ATLCTL/ATL::CComControlBase::m_bDrawFromNatural", "ATLCTL/ATL::CComControlBase::m_bDrawGetDataInHimetric", "ATLCTL/ATL::CComControlBase::m_bInPlaceActive", "ATLCTL/ATL::CComControlBase::m_bInPlaceSiteEx", "ATLCTL/ATL::CComControlBase::m_bNegotiatedWnd", "ATLCTL/ATL::CComControlBase::m_bRecomposeOnResize", "ATLCTL/ATL::CComControlBase::m_bRequiresSave", "ATLCTL/ATL::CComControlBase::m_bResizeNatural", "ATLCTL/ATL::CComControlBase::m_bUIActive", "ATLCTL/ATL::CComControlBase::m_bUsingWindowRgn", "ATLCTL/ATL::CComControlBase::m_bWasOnceWindowless", "ATLCTL/ATL::CComControlBase::m_bWindowOnly", "ATLCTL/ATL::CComControlBase::m_bWndLess", "ATLCTL/ATL::CComControlBase::m_hWndCD", "ATLCTL/ATL::CComControlBase::m_nFreezeEvents", "ATLCTL/ATL::CComControlBase::m_rcPos", "ATLCTL/ATL::CComControlBase::m_sizeExtent", "ATLCTL/ATL::CComControlBase::m_sizeNatural", "ATLCTL/ATL::CComControlBase::m_spAdviseSink", "ATLCTL/ATL::CComControlBase::m_spAmbientDispatch", "ATLCTL/ATL::CComControlBase::m_spClientSite", "ATLCTL/ATL::CComControlBase::m_spDataAdviseHolder", "ATLCTL/ATL::CComControlBase::m_spInPlaceSite", "ATLCTL/ATL::CComControlBase::m_spOleAdviseHolder"]
helpviewer_keywords: ["CComControlBase class"]
-ms.assetid: 3d1bf022-acf2-4092-8283-ff8cee6332f3
---
# CComControlBase Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for creating and managing ATL controls.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ccomcriticalsection-class.md b/docs/atl/reference/ccomcriticalsection-class.md
index 7ee8d73ac54..dc63e60f1ee 100644
--- a/docs/atl/reference/ccomcriticalsection-class.md
+++ b/docs/atl/reference/ccomcriticalsection-class.md
@@ -4,10 +4,11 @@ title: "CComCriticalSection Class"
ms.date: "11/04/2016"
f1_keywords: ["CComCriticalSection", "ATLCORE/ATL::CComCriticalSection", "ATLCORE/ATL::CComCriticalSection::CComCriticalSection", "ATLCORE/ATL::CComCriticalSection::Init", "ATLCORE/ATL::CComCriticalSection::Lock", "ATLCORE/ATL::CComCriticalSection::Term", "ATLCORE/ATL::CComCriticalSection::Unlock", "ATLCORE/ATL::CComCriticalSection::m_sec"]
helpviewer_keywords: ["CComCriticalSection class"]
-ms.assetid: 44e1edd2-90be-4bfe-9739-58e8b419e7d1
---
# CComCriticalSection Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for obtaining and releasing ownership of a critical section object.
## Syntax
diff --git a/docs/atl/reference/ccomcritseclock-class.md b/docs/atl/reference/ccomcritseclock-class.md
index 726f3bc79c4..2b05e7b608c 100644
--- a/docs/atl/reference/ccomcritseclock-class.md
+++ b/docs/atl/reference/ccomcritseclock-class.md
@@ -4,10 +4,11 @@ title: "CComCritSecLock Class"
ms.date: "11/04/2016"
f1_keywords: ["CComCritSecLock", "ATLBASE/ATL::CComCritSecLock", "ATLBASE/ATL::CComCritSecLock::CComCritSecLock", "ATLBASE/ATL::CComCritSecLock::Lock", "ATLBASE/ATL::CComCritSecLock::Unlock"]
helpviewer_keywords: ["CComCritSecLock class"]
-ms.assetid: 223152a1-86c3-4ef9-89a7-f455fe791b0e
---
# CComCritSecLock Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for locking and unlocking a critical section object.
## Syntax
diff --git a/docs/atl/reference/ccomcurrency-class.md b/docs/atl/reference/ccomcurrency-class.md
index cee7bfd016c..ba76d99a06d 100644
--- a/docs/atl/reference/ccomcurrency-class.md
+++ b/docs/atl/reference/ccomcurrency-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["CComCurrency class"]
---
# `CComCurrency` Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
`CComCurrency` has methods and operators for creating and managing a `CURRENCY` object.
## Syntax
diff --git a/docs/atl/reference/ccomdynamicunkarray-class.md b/docs/atl/reference/ccomdynamicunkarray-class.md
index 682edba8166..f81b285a499 100644
--- a/docs/atl/reference/ccomdynamicunkarray-class.md
+++ b/docs/atl/reference/ccomdynamicunkarray-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["connection points [C++], managing", "CComDynamicUnkArray
---
# CComDynamicUnkArray Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class stores an array of `IUnknown` pointers.
## Syntax
diff --git a/docs/atl/reference/ccomenum-class.md b/docs/atl/reference/ccomenum-class.md
index 874c02b84cf..d8c54423b54 100644
--- a/docs/atl/reference/ccomenum-class.md
+++ b/docs/atl/reference/ccomenum-class.md
@@ -4,10 +4,11 @@ title: "CComEnum Class"
ms.date: "11/04/2016"
f1_keywords: ["CComEnum", "atlcom/ATL::CComEnum"]
helpviewer_keywords: ["CComEnum class"]
-ms.assetid: bff7dd7b-eb6e-4d6e-96ed-2706e66c8b3b
---
# CComEnum Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class defines a COM enumerator object based on an array.
## Syntax
diff --git a/docs/atl/reference/ccomenumimpl-class.md b/docs/atl/reference/ccomenumimpl-class.md
index 904acfd49b9..221edcb1d4a 100644
--- a/docs/atl/reference/ccomenumimpl-class.md
+++ b/docs/atl/reference/ccomenumimpl-class.md
@@ -4,10 +4,11 @@ title: "CComEnumImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["CComEnumImpl", "ATLCOM/ATL::CComEnumImpl", "ATLCOM/ATL::CComEnumImpl::CComEnumImpl", "ATLCOM/ATL::CComEnumImpl::Clone", "ATLCOM/ATL::CComEnumImpl::Init", "ATLCOM/ATL::CComEnumImpl::Next", "ATLCOM/ATL::CComEnumImpl::Reset", "ATLCOM/ATL::CComEnumImpl::Skip", "ATLCOM/ATL::CComEnumImpl::m_begin", "ATLCOM/ATL::CComEnumImpl::m_dwFlags", "ATLCOM/ATL::CComEnumImpl::m_end", "ATLCOM/ATL::CComEnumImpl::m_iter", "ATLCOM/ATL::CComEnumImpl::m_spUnk"]
helpviewer_keywords: ["CComEnumImpl class"]
-ms.assetid: cc0d8e76-e608-46db-87cd-4c7161fe32d2
---
# CComEnumImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides the implementation for a COM enumerator interface where the items being enumerated are stored in an array.
## Syntax
diff --git a/docs/atl/reference/ccomenumonstl-class.md b/docs/atl/reference/ccomenumonstl-class.md
index 7ab682b5062..9d581e4f87c 100644
--- a/docs/atl/reference/ccomenumonstl-class.md
+++ b/docs/atl/reference/ccomenumonstl-class.md
@@ -4,10 +4,11 @@ title: "CComEnumOnSTL Class"
ms.date: "11/04/2016"
f1_keywords: ["CComEnumOnSTL", "atlcom/ATL::CComEnumOnSTL"]
helpviewer_keywords: ["CComEnumOnSTL class"]
-ms.assetid: befe1a44-7a00-4f28-9a2e-cc0fa526643c
---
# CComEnumOnSTL Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class defines a COM enumerator object based on a C++ Standard Library collection.
## Syntax
diff --git a/docs/atl/reference/ccomfakecriticalsection-class.md b/docs/atl/reference/ccomfakecriticalsection-class.md
index 087bc175ffb..9d146470b88 100644
--- a/docs/atl/reference/ccomfakecriticalsection-class.md
+++ b/docs/atl/reference/ccomfakecriticalsection-class.md
@@ -4,10 +4,11 @@ title: "CComFakeCriticalSection Class"
ms.date: "11/04/2016"
f1_keywords: ["CComFakeCriticalSection", "ATLCORE/ATL::CComFakeCriticalSection", "ATLCORE/ATL::CComFakeCriticalSection::Init", "ATLCORE/ATL::CComFakeCriticalSection::Lock", "ATLCORE/ATL::CComFakeCriticalSection::Term", "ATLCORE/ATL::CComFakeCriticalSection::Unlock"]
helpviewer_keywords: ["CComFakeCriticalSection class"]
-ms.assetid: a4811b97-96bb-493b-ab9f-62822aeddb10
---
# CComFakeCriticalSection Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides the same methods as [CComCriticalSection](../../atl/reference/ccomcriticalsection-class.md) but does not provide a critical section.
## Syntax
diff --git a/docs/atl/reference/ccomgitptr-class.md b/docs/atl/reference/ccomgitptr-class.md
index 1cc42d0b166..e2478fd7faf 100644
--- a/docs/atl/reference/ccomgitptr-class.md
+++ b/docs/atl/reference/ccomgitptr-class.md
@@ -4,10 +4,11 @@ title: "CComGITPtr Class"
ms.date: "11/04/2016"
f1_keywords: ["CComGITPtr", "ATLBASE/ATL::CComGITPtr", "ATLBASE/ATL::CComGITPtr::CComGITPtr", "ATLBASE/ATL::CComGITPtr::Attach", "ATLBASE/ATL::CComGITPtr::CopyTo", "ATLBASE/ATL::CComGITPtr::Detach", "ATLBASE/ATL::CComGITPtr::GetCookie", "ATLBASE/ATL::CComGITPtr::Revoke", "ATLBASE/ATL::CComGITPtr::m_dwCookie"]
helpviewer_keywords: ["CComGITPtr class"]
-ms.assetid: af895acb-525a-4555-bb67-b241b7df515b
---
# CComGITPtr Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for dealing with interface pointers and the global interface table (GIT).
## Syntax
diff --git a/docs/atl/reference/ccomheap-class.md b/docs/atl/reference/ccomheap-class.md
index f561ecf30de..f4446ee0ef4 100644
--- a/docs/atl/reference/ccomheap-class.md
+++ b/docs/atl/reference/ccomheap-class.md
@@ -4,10 +4,11 @@ title: "CComHeap Class"
ms.date: "11/04/2016"
f1_keywords: ["CComHeap", "ATLCOMMEM/ATL::CComHeap", "ATLCOMMEM/ATL::CComHeap::Allocate", "ATLCOMMEM/ATL::CComHeap::Free", "ATLCOMMEM/ATL::CComHeap::GetSize", "ATLCOMMEM/ATL::CComHeap::Reallocate"]
helpviewer_keywords: ["CComHeap class"]
-ms.assetid: c74183ce-98ae-46fb-b186-93ea4cf0222b
---
# `CComHeap` Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements [`IAtlMemMgr`](../../atl/reference/iatlmemmgr-class.md) using the COM memory allocation functions.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ccomheapptr-class.md b/docs/atl/reference/ccomheapptr-class.md
index 0edb83160e8..16767755ff6 100644
--- a/docs/atl/reference/ccomheapptr-class.md
+++ b/docs/atl/reference/ccomheapptr-class.md
@@ -4,10 +4,11 @@ title: "CComHeapPtr Class"
ms.date: "11/04/2016"
f1_keywords: ["CComHeapPtr", "ATLBASE/ATL::CComHeapPtr", "ATLBASE/ATL::CComHeapPtr::CComHeapPtr"]
helpviewer_keywords: ["CComHeapPtr class"]
-ms.assetid: bd08b53d-da2b-43ab-a79c-e7c8dbbc5994
---
# CComHeapPtr Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
A smart pointer class for managing heap pointers.
## Syntax
diff --git a/docs/atl/reference/ccommodule-class.md b/docs/atl/reference/ccommodule-class.md
index eb17faf3c4e..0d8c58b4f6f 100644
--- a/docs/atl/reference/ccommodule-class.md
+++ b/docs/atl/reference/ccommodule-class.md
@@ -4,10 +4,11 @@ title: "CComModule Class"
ms.date: "08/19/2019"
f1_keywords: ["CComModule", "ATLBASE/ATL::CComModule", "ATLBASE/ATL::CComModule::GetClassObject", "ATLBASE/ATL::CComModule::GetModuleInstance", "ATLBASE/ATL::CComModule::GetResourceInstance", "ATLBASE/ATL::CComModule::GetTypeLibInstance", "ATLBASE/ATL::CComModule::Init", "ATLBASE/ATL::CComModule::RegisterClassHelper", "ATLBASE/ATL::CComModule::RegisterClassObjects", "ATLBASE/ATL::CComModule::RegisterServer", "ATLBASE/ATL::CComModule::RegisterTypeLib", "ATLBASE/ATL::CComModule::RevokeClassObjects", "ATLBASE/ATL::CComModule::Term", "ATLBASE/ATL::CComModule::UnregisterClassHelper", "ATLBASE/ATL::CComModule::UnregisterServer", "ATLBASE/ATL::CComModule::UpdateRegistryClass", "ATLBASE/ATL::CComModule::UpdateRegistryFromResourceD", "ATLBASE/ATL::CComModule::UpdateRegistryFromResourceS", "ATLBASE/ATL::CComModule::m_csObjMap", "ATLBASE/ATL::CComModule::m_csTypeInfoHolder", "ATLBASE/ATL::CComModule::m_csWindowCreate", "ATLBASE/ATL::CComModule::m_hInst", "ATLBASE/ATL::CComModule::m_hInstResource", "ATLBASE/ATL::CComModule::m_hInstTypeLib", "ATLBASE/ATL::CComModule::m_pObjMap"]
helpviewer_keywords: ["CComModule class", "DLL modules [C++], ATL"]
-ms.assetid: f5face2c-8fd8-40e6-9ec3-54ab74701769
---
# CComModule Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
As of ATL 7.0, `CComModule` is deprecated: see [ATL Module Classes](../../atl/atl-module-classes.md) for more details.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ccommultithreadmodel-class.md b/docs/atl/reference/ccommultithreadmodel-class.md
index 651aa91f662..56e99deb92b 100644
--- a/docs/atl/reference/ccommultithreadmodel-class.md
+++ b/docs/atl/reference/ccommultithreadmodel-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["ATL, multithreading", "CComMultiThreadModel class", "thre
---
# CComMultiThreadModel Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
`CComMultiThreadModel` provides thread-safe methods for incrementing and decrementing the value of a variable.
## Syntax
diff --git a/docs/atl/reference/ccommultithreadmodelnocs-class.md b/docs/atl/reference/ccommultithreadmodelnocs-class.md
index 9a116848eab..b5af9c08403 100644
--- a/docs/atl/reference/ccommultithreadmodelnocs-class.md
+++ b/docs/atl/reference/ccommultithreadmodelnocs-class.md
@@ -4,10 +4,11 @@ title: "CComMultiThreadModelNoCS Class"
ms.date: "11/04/2016"
f1_keywords: ["CComMultiThreadModelNoCS", "ATLBASE/ATL::CComMultiThreadModelNoCS", "ATLBASE/ATL::CComMultiThreadModelNoCS::AutoCriticalSection", "ATLBASE/ATL::CComMultiThreadModelNoCS::CriticalSection", "ATLBASE/ATL::CComMultiThreadModelNoCS::ThreadModelNoCS", "ATLBASE/ATL::CComMultiThreadModelNoCS::Decrement", "ATLBASE/ATL::CComMultiThreadModelNoCS::Increment"]
helpviewer_keywords: ["ATL, multithreading", "CComMultiThreadModelNoCS class", "threading [ATL]"]
-ms.assetid: 2b3f7a45-fd72-452c-aaf3-ccdaa621c821
---
# CComMultiThreadModelNoCS Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
`CComMultiThreadModelNoCS` provides thread-safe methods for incrementing and decrementing the value of a variable, without critical section locking or unlocking functionality.
## Syntax
diff --git a/docs/atl/reference/ccomobject-class.md b/docs/atl/reference/ccomobject-class.md
index 940285715a1..9e209ec6239 100644
--- a/docs/atl/reference/ccomobject-class.md
+++ b/docs/atl/reference/ccomobject-class.md
@@ -4,10 +4,11 @@ title: "CComObject Class"
ms.date: "11/04/2016"
f1_keywords: ["CComObject", "ATLCOM/ATL::CComObject", "ATLCOM/ATL::CComObject::CComObject", "ATLCOM/ATL::CComObject::AddRef", "ATLCOM/ATL::CComObject::CreateInstance", "ATLCOM/ATL::CComObject::QueryInterface", "ATLCOM/ATL::CComObject::Release"]
helpviewer_keywords: ["CComObject class"]
-ms.assetid: e2b6433b-6349-4749-b4bc-acbd7a22c8b0
---
# CComObject Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements `IUnknown` for a nonaggregated object.
## Syntax
diff --git a/docs/atl/reference/ccomobjectglobal-class.md b/docs/atl/reference/ccomobjectglobal-class.md
index 14afcb2e9d4..345291d1d39 100644
--- a/docs/atl/reference/ccomobjectglobal-class.md
+++ b/docs/atl/reference/ccomobjectglobal-class.md
@@ -4,10 +4,11 @@ title: "CComObjectGlobal Class"
ms.date: "11/04/2016"
f1_keywords: ["CComObjectGlobal", "ATLCOM/ATL::CComObjectGlobal", "ATLCOM/ATL::CComObjectGlobal::CComObjectGlobal", "ATLCOM/ATL::CComObjectGlobal::AddRef", "ATLCOM/ATL::CComObjectGlobal::QueryInterface", "ATLCOM/ATL::CComObjectGlobal::Release", "ATLCOM/ATL::CComObjectGlobal::m_hResFinalConstruct"]
helpviewer_keywords: ["CComObjectGlobal class"]
-ms.assetid: 79bdee55-66e4-4536-b5b3-bdf09f78b9a6
---
# CComObjectGlobal Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class manages a reference count on the module containing your `Base` object.
## Syntax
diff --git a/docs/atl/reference/ccomobjectnolock-class.md b/docs/atl/reference/ccomobjectnolock-class.md
index e98933f3641..91009986913 100644
--- a/docs/atl/reference/ccomobjectnolock-class.md
+++ b/docs/atl/reference/ccomobjectnolock-class.md
@@ -4,10 +4,11 @@ title: "CComObjectNoLock Class"
ms.date: "11/04/2016"
f1_keywords: ["CComObjectNoLock", "ATLCOM/ATL::CComObjectNoLock", "ATLCOM/ATL::CComObjectNoLock::CComObjectNoLock", "ATLCOM/ATL::CComObjectNoLock::AddRef", "ATLCOM/ATL::CComObjectNoLock::QueryInterface", "ATLCOM/ATL::CComObjectNoLock::Release"]
helpviewer_keywords: ["CComObjectNoLock class"]
-ms.assetid: 288c6506-7da8-4127-8d58-7f4bd779539a
---
# CComObjectNoLock Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements `IUnknown` for a nonaggregated object, but does not increment the module lock count in the constructor.
## Syntax
diff --git a/docs/atl/reference/ccomobjectroot-class.md b/docs/atl/reference/ccomobjectroot-class.md
index 5a34267e8d9..e12f04a372f 100644
--- a/docs/atl/reference/ccomobjectroot-class.md
+++ b/docs/atl/reference/ccomobjectroot-class.md
@@ -4,10 +4,11 @@ title: "CComObjectRoot Class"
ms.date: "11/04/2016"
f1_keywords: ["CComObjectRoot", "atlcom/ATL::CComObjectRoot"]
helpviewer_keywords: ["CComObjectRoot class"]
-ms.assetid: f8797c38-6e73-4f67-85c2-71654cffa8eb
---
# CComObjectRoot Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This typedef of [CComObjectRootEx](../../atl/reference/ccomobjectrootex-class.md) is templatized on the default threading model of the server.
## Syntax
diff --git a/docs/atl/reference/ccomobjectrootex-class.md b/docs/atl/reference/ccomobjectrootex-class.md
index d28e79d4906..4b7181dd07d 100644
--- a/docs/atl/reference/ccomobjectrootex-class.md
+++ b/docs/atl/reference/ccomobjectrootex-class.md
@@ -4,10 +4,11 @@ title: "CComObjectRootEx Class"
ms.date: "11/04/2016"
f1_keywords: ["CComObjectRootEx", "ATLCOM/ATL::CComObjectRootEx", "ATLCOM/ATL::InternalAddRef", "ATLCOM/ATL::InternalRelease", "ATLCOM/ATL::Lock", "ATLCOM/ATL::Unlock", "ATLCOM/ATL::FinalConstruct", "ATLCOM/ATL::FinalRelease", "ATLCOM/ATL::OuterAddRef", "ATLCOM/ATL::OuterQueryInterface", "ATLCOM/ATL::OuterRelease", "ATLCOM/ATL::InternalQueryInterface", "ATLCOM/ATL::ObjectMain", "ATLCOM/ATL::m_dwRef", "ATLCOM/ATL::m_pOuterUnknown"]
helpviewer_keywords: ["reference counting"]
-ms.assetid: 894a3d7c-2daf-4fd0-8fa4-e6a05bcfb631
---
# CComObjectRootEx Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods to handle object reference count management for both nonaggregated and aggregated objects.
## Syntax
diff --git a/docs/atl/reference/ccomobjectstack-class.md b/docs/atl/reference/ccomobjectstack-class.md
index 946beb5b66c..3e109aa93a3 100644
--- a/docs/atl/reference/ccomobjectstack-class.md
+++ b/docs/atl/reference/ccomobjectstack-class.md
@@ -4,10 +4,11 @@ title: "CComObjectStack Class"
ms.date: "11/04/2016"
f1_keywords: ["CComObjectStack", "ATLCOM/ATL::CComObjectStack", "ATLCOM/ATL::CComObjectStack::CComObjectStack", "ATLCOM/ATL::CComObjectStack::AddRef", "ATLCOM/ATL::CComObjectStack::QueryInterface", "ATLCOM/ATL::CComObjectStack::Release", "ATLCOM/ATL::CComObjectStack::m_hResFinalConstruct"]
helpviewer_keywords: ["CComObjectStack class"]
-ms.assetid: 3da72c40-c834-45f6-bb76-6ac204028d80
---
# CComObjectStack Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class creates a temporary COM object and provides it with a skeletal implementation of `IUnknown`.
## Syntax
diff --git a/docs/atl/reference/ccompolyobject-class.md b/docs/atl/reference/ccompolyobject-class.md
index d3632a52837..42991caee8d 100644
--- a/docs/atl/reference/ccompolyobject-class.md
+++ b/docs/atl/reference/ccompolyobject-class.md
@@ -4,10 +4,11 @@ title: "CComPolyObject Class"
ms.date: "11/04/2016"
f1_keywords: ["CComPolyObject", "ATLCOM/ATL::CComPolyObject", "ATLCOM/ATL::CComPolyObject::CComPolyObject", "ATLCOM/ATL::CComPolyObject::AddRef", "ATLCOM/ATL::CComPolyObject::CreateInstance", "ATLCOM/ATL::CComPolyObject::FinalConstruct", "ATLCOM/ATL::CComPolyObject::FinalRelease", "ATLCOM/ATL::CComPolyObject::QueryInterface", "ATLCOM/ATL::CComPolyObject::Release", "ATLCOM/ATL::CComPolyObject::m_contained"]
helpviewer_keywords: ["aggregate objects [C++], in ATL", "aggregation [C++], ATL objects", "CComPolyObject class"]
-ms.assetid: eaf67c18-e855-48ca-9b15-f1df3106121b
---
# CComPolyObject Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements `IUnknown` for an aggregated or nonaggregated object.
## Syntax
diff --git a/docs/atl/reference/ccomptr-class.md b/docs/atl/reference/ccomptr-class.md
index 6ccf6090383..9be4578c843 100644
--- a/docs/atl/reference/ccomptr-class.md
+++ b/docs/atl/reference/ccomptr-class.md
@@ -4,10 +4,11 @@ description: "Reference guide to the Microsoft C++ Active Template Library (ATL)
ms.date: "02/07/2020"
f1_keywords: ["CComPtr", "ATLBASE/ATL::CComPtr", "ATLBASE/ATL::CComPtr::CComPtr"]
helpviewer_keywords: ["CComPtr class"]
-ms.assetid: 22d9ea8d-ed66-4c34-940f-141db11e83bd
---
# `CComPtr` Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
A smart pointer class for managing COM interface pointers.
## Syntax
diff --git a/docs/atl/reference/ccomptrbase-class.md b/docs/atl/reference/ccomptrbase-class.md
index c2363d848e2..c1653b2a447 100644
--- a/docs/atl/reference/ccomptrbase-class.md
+++ b/docs/atl/reference/ccomptrbase-class.md
@@ -4,10 +4,11 @@ title: "CComPtrBase Class"
ms.date: "11/04/2016"
f1_keywords: ["CComPtrBase", "ATLCOMCLI/ATL::CComPtrBase", "ATLCOMCLI/ATL::CComPtrBase::Advise", "ATLCOMCLI/ATL::CComPtrBase::Attach", "ATLCOMCLI/ATL::CComPtrBase::CoCreateInstance", "ATLCOMCLI/ATL::CComPtrBase::CopyTo", "ATLCOMCLI/ATL::CComPtrBase::Detach", "ATLCOMCLI/ATL::CComPtrBase::IsEqualObject", "ATLCOMCLI/ATL::CComPtrBase::QueryInterface", "ATLCOMCLI/ATL::CComPtrBase::Release", "ATLCOMCLI/ATL::CComPtrBase::SetSite", "ATLCOMCLI/ATL::CComPtrBase::p"]
helpviewer_keywords: ["CComPtrBase class"]
-ms.assetid: 6dbe9543-dee8-4a97-b02f-dd3a25f4a1a0
---
# `CComPtrBase` Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides a basis for smart pointer classes using COM-based memory routines.
## Syntax
diff --git a/docs/atl/reference/ccomqiptr-class.md b/docs/atl/reference/ccomqiptr-class.md
index 03490efe16e..23c87d54f7e 100644
--- a/docs/atl/reference/ccomqiptr-class.md
+++ b/docs/atl/reference/ccomqiptr-class.md
@@ -4,10 +4,11 @@ title: "CComQIPtr Class"
ms.date: "11/04/2016"
f1_keywords: ["CComQIPtr", "ATLCOMCLI/ATL::CComQIPtr", "ATLCOMCLI/ATL::CComQIPtr::CComQIPtr"]
helpviewer_keywords: ["CComQIPtr class"]
-ms.assetid: 969cacb5-05b6-4af4-b683-24911d70242d
---
# CComQIPtr Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
A smart pointer class for managing COM interface pointers.
## Syntax
diff --git a/docs/atl/reference/ccomqiptrelementtraits-class.md b/docs/atl/reference/ccomqiptrelementtraits-class.md
index c81c56e55e6..9d739a9404c 100644
--- a/docs/atl/reference/ccomqiptrelementtraits-class.md
+++ b/docs/atl/reference/ccomqiptrelementtraits-class.md
@@ -4,10 +4,11 @@ title: "CComQIPtrElementTraits Class"
ms.date: "11/04/2016"
f1_keywords: ["CComQIPtrElementTraits", "ATLCOLL/ATL::CComQIPtrElementTraits", "ATLCOLL/ATL::CComQIPtrElementTraits::INARGTYPE"]
helpviewer_keywords: ["CComQIPtrElementTraits class"]
-ms.assetid: 9df9250a-5413-4362-b133-332932a597c4
---
# CComQIPtrElementTraits Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods, static functions, and typedefs useful when creating collections of COM interface pointers.
## Syntax
diff --git a/docs/atl/reference/ccomsafearray-class.md b/docs/atl/reference/ccomsafearray-class.md
index d9c6729e915..e8b65490485 100644
--- a/docs/atl/reference/ccomsafearray-class.md
+++ b/docs/atl/reference/ccomsafearray-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["CComSafeArray class"]
---
# `CComSafeArray` Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is a wrapper for the `SAFEARRAY` structure.
## Syntax
diff --git a/docs/atl/reference/ccomsafearraybound-class.md b/docs/atl/reference/ccomsafearraybound-class.md
index fa65d7b399d..2d1ea111408 100644
--- a/docs/atl/reference/ccomsafearraybound-class.md
+++ b/docs/atl/reference/ccomsafearraybound-class.md
@@ -4,10 +4,11 @@ title: "CComSafeArrayBound Class"
ms.date: "05/06/2019"
f1_keywords: ["CComSafeArrayBound", "ATLSAFE/ATL::CComSafeArrayBound", "ATLSAFE/ATL::GetCount", "ATLSAFE/ATL::GetLowerBound", "ATLSAFE/ATL::GetUpperBound", "ATLSAFE/ATL::SetCount", "ATLSAFE/ATL::SetLowerBound"]
helpviewer_keywords: ["CComSafeArrayBound class"]
-ms.assetid: dd6299db-5f84-4630-bbf0-f5add5318437
---
# CComSafeArrayBound Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is a wrapper for a [SAFEARRAYBOUND](/windows/win32/api/oaidl/ns-oaidl-safearraybound) structure.
## Syntax
diff --git a/docs/atl/reference/ccomsafedeletecriticalsection-class.md b/docs/atl/reference/ccomsafedeletecriticalsection-class.md
index 1ece1377c38..c4e8ec088ea 100644
--- a/docs/atl/reference/ccomsafedeletecriticalsection-class.md
+++ b/docs/atl/reference/ccomsafedeletecriticalsection-class.md
@@ -4,10 +4,11 @@ title: "CComSafeDeleteCriticalSection Class"
ms.date: "11/04/2016"
f1_keywords: ["CComSafeDeleteCriticalSection", "ATLCORE/ATL::CComSafeDeleteCriticalSection", "ATLCORE/ATL::CComSafeDeleteCriticalSection::CComSafeDeleteCriticalSection", "ATLCORE/ATL::CComSafeDeleteCriticalSection::Init", "ATLCORE/ATL::CComSafeDeleteCriticalSection::Lock", "ATLCORE/ATL::CComSafeDeleteCriticalSection::Term", "ATLCORE/ATL::m_bInitialized"]
helpviewer_keywords: ["CComSafeDeleteCriticalSection class"]
-ms.assetid: 4d2932c4-ba8f-48ec-8664-1db8bed01314
---
# CComSafeDeleteCriticalSection Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for obtaining and releasing ownership of a critical section object.
## Syntax
diff --git a/docs/atl/reference/ccomsimplethreadallocator-class.md b/docs/atl/reference/ccomsimplethreadallocator-class.md
index 3ba04a9ad2d..1d3b4a19f4b 100644
--- a/docs/atl/reference/ccomsimplethreadallocator-class.md
+++ b/docs/atl/reference/ccomsimplethreadallocator-class.md
@@ -4,10 +4,11 @@ title: "CComSimpleThreadAllocator Class"
ms.date: "11/04/2016"
f1_keywords: ["CComSimpleThreadAllocator", "ATLBASE/ATL::CComSimpleThreadAllocator", "ATLBASE/ATL::CComSimpleThreadAllocator::GetThread"]
helpviewer_keywords: ["threading [ATL], selecting threads", "ATL threads", "CComSimpleThreadAllocator class", "ATL threads, allocating"]
-ms.assetid: 66b2166a-8c50-49fd-b8e4-7f293470327d
---
# CComSimpleThreadAllocator Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class manages thread selection for the class `CComAutoThreadModule`.
## Syntax
diff --git a/docs/atl/reference/ccomsinglethreadmodel-class.md b/docs/atl/reference/ccomsinglethreadmodel-class.md
index 1fdb2f95db5..d81455f0ca3 100644
--- a/docs/atl/reference/ccomsinglethreadmodel-class.md
+++ b/docs/atl/reference/ccomsinglethreadmodel-class.md
@@ -4,10 +4,11 @@ title: "CComSingleThreadModel Class"
ms.date: "2/29/2020"
f1_keywords: ["CComSingleThreadModel", "ATLBASE/ATL::CComSingleThreadModel", "ATLBASE/ATL::CComSingleThreadModel::AutoCriticalSection", "ATLBASE/ATL::CComSingleThreadModel::CriticalSection", "ATLBASE/ATL::CComSingleThreadModel::ThreadModelNoCS", "ATLBASE/ATL::CComSingleThreadModel::Decrement", "ATLBASE/ATL::CComSingleThreadModel::Increment"]
helpviewer_keywords: ["single-threaded applications", "CComSingleThreadModel class", "single-threaded applications, ATL"]
-ms.assetid: e5dc30c7-405a-4ba4-8ae9-51937243fce8
---
# CComSingleThreadModel Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for incrementing and decrementing the value of a variable.
## Syntax
diff --git a/docs/atl/reference/ccomtearoffobject-class.md b/docs/atl/reference/ccomtearoffobject-class.md
index 42f6daf5171..a1813b71e2d 100644
--- a/docs/atl/reference/ccomtearoffobject-class.md
+++ b/docs/atl/reference/ccomtearoffobject-class.md
@@ -4,10 +4,11 @@ title: "CComTearOffObject Class"
ms.date: "11/04/2016"
f1_keywords: ["CComTearOffObject", "ATLCOM/ATL::CComTearOffObject", "ATLCOM/ATL::CComTearOffObject::CComTearOffObject", "ATLCOM/ATL::CComTearOffObject::AddRef", "ATLCOM/ATL::CComTearOffObject::QueryInterface", "ATLCOM/ATL::CComTearOffObject::Release", "ATLCOM/ATL::CComTearOffObjectBase", "ATLCOM/ATL::m_pOwner"]
helpviewer_keywords: ["tear-off interfaces, ATL", "tear-off interfaces", "CComTearOffObject class"]
-ms.assetid: d974b598-c6b2-42b1-8360-9190d9d0fbf3
---
# CComTearOffObject Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements a tear-off interface.
## Syntax
diff --git a/docs/atl/reference/ccomunkarray-class.md b/docs/atl/reference/ccomunkarray-class.md
index dcdc5ecd76d..2232eea84ef 100644
--- a/docs/atl/reference/ccomunkarray-class.md
+++ b/docs/atl/reference/ccomunkarray-class.md
@@ -4,10 +4,11 @@ title: "CComUnkArray Class"
ms.date: "11/04/2016"
f1_keywords: ["CComUnkArray", "ATLCOM/ATL::CComUnkArray", "ATLCOM/ATL::CComUnkArray::CComUnkArray", "ATLCOM/ATL::CComUnkArray::Add", "ATLCOM/ATL::CComUnkArray::begin", "ATLCOM/ATL::CComUnkArray::end", "ATLCOM/ATL::CComUnkArray::GetCookie", "ATLCOM/ATL::CComUnkArray::GetUnknown", "ATLCOM/ATL::CComUnkArray::Remove"]
helpviewer_keywords: ["connection points [C++], managing", "CComUnkArray class"]
-ms.assetid: 5fd4b378-a7b5-4cc1-8866-8ab72a73639e
---
# CComUnkArray Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class stores `IUnknown` pointers, and is designed to be used as a parameter to the [IConnectionPointImpl](../../atl/reference/iconnectionpointimpl-class.md) template class.
## Syntax
diff --git a/docs/atl/reference/ccomvariant-class.md b/docs/atl/reference/ccomvariant-class.md
index e3b806e113a..b7387eaed95 100644
--- a/docs/atl/reference/ccomvariant-class.md
+++ b/docs/atl/reference/ccomvariant-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["VARIANT macro", "CComVariant class", "VARIANT macro, ATL"
---
# `CComVariant` class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class wraps the `VARIANT` type, providing a member indicating the type of data stored.
## Syntax
diff --git a/docs/atl/reference/ccontainedwindowt-class.md b/docs/atl/reference/ccontainedwindowt-class.md
index 92e55f8f39c..a3bd317fda7 100644
--- a/docs/atl/reference/ccontainedwindowt-class.md
+++ b/docs/atl/reference/ccontainedwindowt-class.md
@@ -4,10 +4,11 @@ title: "CContainedWindowT Class"
ms.date: "11/04/2016"
f1_keywords: ["CContainedWindowT", "ATLWIN/ATL::CContainedWindowT", "ATLWIN/ATL::CContainedWindowT::CContainedWindowT", "ATLWIN/ATL::CContainedWindowT::Create", "ATLWIN/ATL::CContainedWindowT::DefWindowProc", "ATLWIN/ATL::CContainedWindowT::GetCurrentMessage", "ATLWIN/ATL::CContainedWindowT::RegisterWndSuperclass", "ATLWIN/ATL::CContainedWindowT::SubclassWindow", "ATLWIN/ATL::CContainedWindowT::SwitchMessageMap", "ATLWIN/ATL::CContainedWindowT::UnsubclassWindow", "ATLWIN/ATL::CContainedWindowT::WindowProc", "ATLWIN/ATL::CContainedWindowT::m_dwMsgMapID", "ATLWIN/ATL::CContainedWindowT::m_lpszClassName", "ATLWIN/ATL::CContainedWindowT::m_pfnSuperWindowProc", "ATLWIN/ATL::CContainedWindowT::m_pObject"]
helpviewer_keywords: ["CContainedWindow class", "contained windows", "CContainedWindowT class"]
-ms.assetid: cde0ca36-9347-4068-995a-d294dae57ca9
---
# CContainedWindowT Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements a window contained within another object.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ccrtallocator-class.md b/docs/atl/reference/ccrtallocator-class.md
index 782c70f47f4..6df2c1e8ef6 100644
--- a/docs/atl/reference/ccrtallocator-class.md
+++ b/docs/atl/reference/ccrtallocator-class.md
@@ -4,10 +4,11 @@ title: "CCRTAllocator Class"
ms.date: "11/04/2016"
f1_keywords: ["CCRTAllocator", "ATLCORE/ATL::CCRTAllocator", "ATLCORE/ATL::CCRTAllocator::Allocate", "ATLCORE/ATL::CCRTAllocator::Free", "ATLCORE/ATL::CCRTAllocator::Reallocate"]
helpviewer_keywords: ["CCRTAllocator class"]
-ms.assetid: 3e1b8cb0-859a-41ab-8e93-6f0b5ceca49d
---
# CCRTAllocator Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for managing memory using CRT memory routines.
## Syntax
diff --git a/docs/atl/reference/ccrtheap-class.md b/docs/atl/reference/ccrtheap-class.md
index 2c032d979d5..e1437bf729f 100644
--- a/docs/atl/reference/ccrtheap-class.md
+++ b/docs/atl/reference/ccrtheap-class.md
@@ -4,10 +4,11 @@ title: "CCRTHeap Class"
ms.date: "11/04/2016"
f1_keywords: ["CCRTHeap", "ATLMEM/ATL::CCRTHeap", "ATLMEM/ATL::CCRTHeap::Allocate", "ATLMEM/ATL::CCRTHeap::Free", "ATLMEM/ATL::CCRTHeap::GetSize", "ATLMEM/ATL::CCRTHeap::Reallocate"]
helpviewer_keywords: ["CCRTHeap class"]
-ms.assetid: 321bd6c5-1856-4ff7-8590-95044a1209f7
---
# CCRTHeap Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements [IAtlMemMgr](../../atl/reference/iatlmemmgr-class.md) using the CRT heap functions.
## Syntax
diff --git a/docs/atl/reference/cdacl-class.md b/docs/atl/reference/cdacl-class.md
index dcd93c40d51..d3efde58ccc 100644
--- a/docs/atl/reference/cdacl-class.md
+++ b/docs/atl/reference/cdacl-class.md
@@ -4,10 +4,11 @@ title: "CDacl Class"
ms.date: "11/04/2016"
f1_keywords: ["CDacl", "ATLSECURITY/ATL::CDacl", "ATLSECURITY/ATL::CDacl::CDacl", "ATLSECURITY/ATL::CDacl::AddAllowedAce", "ATLSECURITY/ATL::CDacl::AddDeniedAce", "ATLSECURITY/ATL::CDacl::GetAceCount", "ATLSECURITY/ATL::CDacl::RemoveAce", "ATLSECURITY/ATL::CDacl::RemoveAllAces"]
helpviewer_keywords: ["CDacl class"]
-ms.assetid: 2dc76616-6362-4967-b6cf-e2d39ca37ddd
---
# CDacl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is a wrapper for a DACL (discretionary access-control list) structure.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cdebugreporthook-class.md b/docs/atl/reference/cdebugreporthook-class.md
index a525a352572..5226a4b5a71 100644
--- a/docs/atl/reference/cdebugreporthook-class.md
+++ b/docs/atl/reference/cdebugreporthook-class.md
@@ -4,10 +4,11 @@ title: "CDebugReportHook Class"
ms.date: "11/04/2016"
f1_keywords: ["CDebugReportHook", "ATLUTIL/ATL::CDebugReportHook", "ATLUTIL/ATL::CDebugReportHook::CDebugReportHook", "ATLUTIL/ATL::CDebugReportHook::CDebugReportHookProc", "ATLUTIL/ATL::CDebugReportHook::RemoveHook", "ATLUTIL/ATL::CDebugReportHook::SetHook", "ATLUTIL/ATL::CDebugReportHook::SetPipeName", "ATLUTIL/ATL::CDebugReportHook::SetTimeout"]
helpviewer_keywords: ["CDebugReportHook class"]
-ms.assetid: 798076c3-6e63-4286-83b8-aa1bbcd0c20c
---
# CDebugReportHook Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Use this class to send debug reports to a named pipe.
## Syntax
diff --git a/docs/atl/reference/cdefaultchartraits-class.md b/docs/atl/reference/cdefaultchartraits-class.md
index 6d941499c6e..af31367ac79 100644
--- a/docs/atl/reference/cdefaultchartraits-class.md
+++ b/docs/atl/reference/cdefaultchartraits-class.md
@@ -4,10 +4,11 @@ title: "CDefaultCharTraits Class"
ms.date: "11/04/2016"
f1_keywords: ["CDefaultCharTraits", "ATLCOLL/ATL::CDefaultCharTraits", "ATLCOLL/ATL::CDefaultCharTraits::CharToLower", "ATLCOLL/ATL::CDefaultCharTraits::CharToUpper"]
helpviewer_keywords: ["CDefaultCharTraits class"]
-ms.assetid: f94a3934-597f-401d-8513-ed6924ae069a
---
# CDefaultCharTraits Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides two static functions for converting characters between uppercase and lowercase.
## Syntax
diff --git a/docs/atl/reference/cdefaultcomparetraits-class.md b/docs/atl/reference/cdefaultcomparetraits-class.md
index ba680d50619..214e82b226e 100644
--- a/docs/atl/reference/cdefaultcomparetraits-class.md
+++ b/docs/atl/reference/cdefaultcomparetraits-class.md
@@ -4,10 +4,11 @@ title: "CDefaultCompareTraits Class"
ms.date: "11/04/2016"
f1_keywords: ["CDefaultCompareTraits", "ATLCOLL/ATL::CDefaultCompareTraits", "ATLCOLL/ATL::CDefaultCompareTraits::CompareElements", "ATLCOLL/ATL::CDefaultCompareTraits::CompareElementsOrdered"]
helpviewer_keywords: ["CDefaultCompareTraits class"]
-ms.assetid: a17e2740-e7b4-48f2-aeb7-c80ce84b63f7
---
# CDefaultCompareTraits Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides default element comparison functions.
## Syntax
diff --git a/docs/atl/reference/cdefaultelementtraits-class.md b/docs/atl/reference/cdefaultelementtraits-class.md
index ee35bca2b36..7f33e07d8f3 100644
--- a/docs/atl/reference/cdefaultelementtraits-class.md
+++ b/docs/atl/reference/cdefaultelementtraits-class.md
@@ -4,10 +4,11 @@ title: "CDefaultElementTraits Class"
ms.date: "11/04/2016"
f1_keywords: ["CDefaultElementTraits", "atlcoll/ATL::CDefaultElementTraits"]
helpviewer_keywords: ["CDefaultElementTraits class"]
-ms.assetid: ac5ee610-7957-4b7c-92b6-38ff72e4118e
---
# CDefaultElementTraits Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides default methods and functions for a collection class.
## Syntax
diff --git a/docs/atl/reference/cdefaulthashtraits-class.md b/docs/atl/reference/cdefaulthashtraits-class.md
index 8c626840a95..562b6da25a7 100644
--- a/docs/atl/reference/cdefaulthashtraits-class.md
+++ b/docs/atl/reference/cdefaulthashtraits-class.md
@@ -4,10 +4,11 @@ title: "CDefaultHashTraits Class"
ms.date: "11/04/2016"
f1_keywords: ["CDefaultHashTraits", "ATLCOLL/ATL::CDefaultHashTraits", "ATLCOLL/ATL::CDefaultHashTraits::Hash"]
helpviewer_keywords: ["CDefaultHashTraits class"]
-ms.assetid: d8ec4b37-6d58-447b-a0c1-8580c5b1ab85
---
# CDefaultHashTraits Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides a static function for calculating hash values.
## Syntax
diff --git a/docs/atl/reference/cdialogimpl-class.md b/docs/atl/reference/cdialogimpl-class.md
index 56a1d4713c2..322ce2b5812 100644
--- a/docs/atl/reference/cdialogimpl-class.md
+++ b/docs/atl/reference/cdialogimpl-class.md
@@ -4,10 +4,11 @@ title: "CDialogImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["CDialogImpl", "ATLWIN/ATL::CDialogImpl", "ATLWIN/ATL::Create", "ATLWIN/ATL::DestroyWindow", "ATLWIN/ATL::DoModal", "ATLWIN/ATL::EndDialog", "ATLWIN/ATL::GetDialogProc", "ATLWIN/ATL::MapDialogRect", "ATLWIN/ATL::OnFinalMessage", "ATLWIN/ATL::DialogProc", "ATLWIN/ATL::StartDialogProc"]
helpviewer_keywords: ["dialog boxes, ATL", "CDialogImpl class"]
-ms.assetid: d430bc7b-8a28-4ad3-9507-277bdd2c2c2e
---
# CDialogImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for creating a modal or modeless dialog box.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cdynamicchain-class.md b/docs/atl/reference/cdynamicchain-class.md
index 27e0374b8f9..b3095ff263e 100644
--- a/docs/atl/reference/cdynamicchain-class.md
+++ b/docs/atl/reference/cdynamicchain-class.md
@@ -4,10 +4,11 @@ title: "CDynamicChain Class"
ms.date: "11/04/2016"
f1_keywords: ["CDynamicChain", "ATLWIN/ATL::CDynamicChain", "ATLWIN/ATL::CDynamicChain::CDynamicChain", "ATLWIN/ATL::CDynamicChain::CallChain", "ATLWIN/ATL::CDynamicChain::RemoveChainEntry", "ATLWIN/ATL::CDynamicChain::SetChainEntry"]
helpviewer_keywords: ["message maps, chaining", "chaining message maps", "CDynamicChain class"]
-ms.assetid: f084b2be-0e77-4836-973d-ae278a1e9da8
---
# CDynamicChain Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods supporting the dynamic chaining of message maps.
> [!IMPORTANT]
diff --git a/docs/atl/reference/celementtraits-class.md b/docs/atl/reference/celementtraits-class.md
index 067c69927e0..69ba5045e2b 100644
--- a/docs/atl/reference/celementtraits-class.md
+++ b/docs/atl/reference/celementtraits-class.md
@@ -4,10 +4,11 @@ title: "CElementTraits Class"
ms.date: "11/04/2016"
f1_keywords: ["CElementTraits", "atlcoll/ATL::CElementTraits"]
helpviewer_keywords: ["CElementTraits class"]
-ms.assetid: 496528e5-7f80-4b45-be0c-6f646feb43c5
---
# CElementTraits Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is used by collection classes to provide methods and functions for moving, copying, comparison, and hashing operations.
## Syntax
diff --git a/docs/atl/reference/celementtraitsbase-class.md b/docs/atl/reference/celementtraitsbase-class.md
index 8bf122174c6..569f754e6b2 100644
--- a/docs/atl/reference/celementtraitsbase-class.md
+++ b/docs/atl/reference/celementtraitsbase-class.md
@@ -4,10 +4,11 @@ title: "CElementTraitsBase Class"
ms.date: "11/04/2016"
f1_keywords: ["CElementTraitsBase", "ATLCOLL/ATL::CElementTraitsBase", "ATLCOLL/ATL::CElementTraitsBase::INARGTYPE", "ATLCOLL/ATL::CElementTraitsBase::OUTARGTYPE", "ATLCOLL/ATL::CElementTraitsBase::CopyElements", "ATLCOLL/ATL::CElementTraitsBase::RelocateElements"]
helpviewer_keywords: ["CElementTraitsBase class"]
-ms.assetid: 75284caf-347e-4355-a7d8-efc708dd514a
---
# CElementTraitsBase Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides default copy and move methods for a collection class.
## Syntax
diff --git a/docs/atl/reference/cfirepropnotifyevent-class.md b/docs/atl/reference/cfirepropnotifyevent-class.md
index 76834b9a5ed..a9058036f19 100644
--- a/docs/atl/reference/cfirepropnotifyevent-class.md
+++ b/docs/atl/reference/cfirepropnotifyevent-class.md
@@ -4,10 +4,11 @@ title: "CFirePropNotifyEvent Class"
ms.date: "11/04/2016"
f1_keywords: ["CFirePropNotifyEvent", "ATLCTL/ATL::CFirePropNotifyEvent", "ATLCTL/ATL::CFirePropNotifyEvent::FireOnChanged", "ATLCTL/ATL::CFirePropNotifyEvent::FireOnRequestEdit"]
helpviewer_keywords: ["sinks, notifying of ATL events", "CFirePropNotifyEvent class", "connection points [C++], notifying of events"]
-ms.assetid: eb7a563e-6bce-4cdf-8d20-8c6a5307781b
---
# CFirePropNotifyEvent Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for notifying the container's sink regarding control property changes.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cglobalheap-class.md b/docs/atl/reference/cglobalheap-class.md
index 426101159d7..38fe72d252b 100644
--- a/docs/atl/reference/cglobalheap-class.md
+++ b/docs/atl/reference/cglobalheap-class.md
@@ -4,10 +4,11 @@ title: "CGlobalHeap Class"
ms.date: "11/04/2016"
f1_keywords: ["CGlobalHeap", "ATLMEM/ATL::CGlobalHeap", "ATLMEM/ATL::CGlobalHeap::Allocate", "ATLMEM/ATL::CGlobalHeap::Free", "ATLMEM/ATL::CGlobalHeap::GetSize", "ATLMEM/ATL::CGlobalHeap::Reallocate"]
helpviewer_keywords: ["CGlobalHeap class"]
-ms.assetid: e348d838-3aa7-4bee-a1b3-cd000c99f834
---
# CGlobalHeap Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements [IAtlMemMgr](../../atl/reference/iatlmemmgr-class.md) using the Win32 global heap functions.
> [!IMPORTANT]
diff --git a/docs/atl/reference/chandle-class.md b/docs/atl/reference/chandle-class.md
index 237fa0cd883..54f0095d210 100644
--- a/docs/atl/reference/chandle-class.md
+++ b/docs/atl/reference/chandle-class.md
@@ -4,10 +4,11 @@ title: "CHandle Class"
ms.date: "07/09/2019"
f1_keywords: ["CHandle", "ATLBASE/ATL::CHandle", "ATLBASE/ATL::CHandle::CHandle", "ATLBASE/ATL::CHandle::Attach", "ATLBASE/ATL::CHandle::Close", "ATLBASE/ATL::CHandle::Detach", "ATLBASE/ATL::CHandle::m_h"]
helpviewer_keywords: ["CHandle class"]
-ms.assetid: 883e9db5-40ec-4e29-9c74-4dd2ddd2e35d
---
# CHandle Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for creating and using a handle object.
## Syntax
diff --git a/docs/atl/reference/cheapptr-class.md b/docs/atl/reference/cheapptr-class.md
index c7888bfbccd..53580613dcc 100644
--- a/docs/atl/reference/cheapptr-class.md
+++ b/docs/atl/reference/cheapptr-class.md
@@ -4,10 +4,11 @@ title: "CHeapPtr Class"
ms.date: "11/04/2016"
f1_keywords: ["CHeapPtr", "ATLCORE/ATL::CHeapPtr", "ATLCORE/ATL::CHeapPtr::CHeapPtr", "ATLCORE/ATL::CHeapPtr::Allocate", "ATLCORE/ATL::CHeapPtr::Reallocate"]
helpviewer_keywords: ["CHeapPtr class"]
-ms.assetid: e5c5bfd4-9bf1-4164-8a83-8155fe253454
---
# CHeapPtr Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
A smart pointer class for managing heap pointers.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cheapptrbase-class.md b/docs/atl/reference/cheapptrbase-class.md
index 8ba15f0fb65..a756cc99bc3 100644
--- a/docs/atl/reference/cheapptrbase-class.md
+++ b/docs/atl/reference/cheapptrbase-class.md
@@ -4,10 +4,11 @@ title: "CHeapPtrBase class"
ms.date: "11/04/2016"
f1_keywords: ["CHeapPtrBase", "ATLCORE/ATL::CHeapPtrBase", "ATLCORE/ATL::CHeapPtrBase::AllocateBytes", "ATLCORE/ATL::CHeapPtrBase::Attach", "ATLCORE/ATL::CHeapPtrBase::Detach", "ATLCORE/ATL::CHeapPtrBase::Free", "ATLCORE/ATL::CHeapPtrBase::ReallocateBytes", "ATLCORE/ATL::CHeapPtrBase::m_pData"]
helpviewer_keywords: ["CHeapPtrBase class"]
-ms.assetid: 501ac1b2-fb34-4c72-b7e6-a4f1fc8fda21
---
# `CHeapPtrBase` class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class forms the basis for several smart heap pointer classes.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cheapptrelementtraits-class.md b/docs/atl/reference/cheapptrelementtraits-class.md
index 3ff0b3f44d1..5fb6c021ad1 100644
--- a/docs/atl/reference/cheapptrelementtraits-class.md
+++ b/docs/atl/reference/cheapptrelementtraits-class.md
@@ -4,10 +4,11 @@ title: "CHeapPtrElementTraits Class"
ms.date: "11/04/2016"
f1_keywords: ["CHeapPtrElementTraits", "ATLCOLL/ATL::CHeapPtrElementTraits", "ATLCOLL/ATL::CHeapPtrElementTraits::INARGTYPE", "ATLCOLL/ATL::CHeapPtrElementTraits::OUTARGTYPE"]
helpviewer_keywords: ["CHeapPtrElementTraits class"]
-ms.assetid: 910e0e06-3c8b-4242-bf00-b57eb74fbc77
---
# CHeapPtrElementTraits Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods, static functions, and typedefs useful when creating collections of heap pointers.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cheapptrlist-class.md b/docs/atl/reference/cheapptrlist-class.md
index 591c5787727..4513428fcb8 100644
--- a/docs/atl/reference/cheapptrlist-class.md
+++ b/docs/atl/reference/cheapptrlist-class.md
@@ -4,10 +4,11 @@ title: "CHeapPtrList Class"
ms.date: "11/04/2016"
f1_keywords: ["CHeapPtrList", "ATLCOLL/ATL::CHeapPtrList", "ATLCOLL/ATL::CHeapPtrList::CHeapPtrList"]
helpviewer_keywords: ["CHeapPtrList class"]
-ms.assetid: cc70e585-362a-4007-81db-c705eb181226
---
# CHeapPtrList Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods useful when constructing a list of heap pointers.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cinterfacearray-class.md b/docs/atl/reference/cinterfacearray-class.md
index 3a6ec0bc1df..d7c378a72a9 100644
--- a/docs/atl/reference/cinterfacearray-class.md
+++ b/docs/atl/reference/cinterfacearray-class.md
@@ -4,10 +4,11 @@ title: "CInterfaceArray Class"
ms.date: "11/04/2016"
f1_keywords: ["CInterfaceArray", "ATLCOLL/ATL::CInterfaceArray", "ATLCOLL/ATL::CInterfaceArray::CInterfaceArray"]
helpviewer_keywords: ["CInterfaceArray class"]
-ms.assetid: 1f29cf66-a086-4a7b-b6a8-64f73da39f79
---
# CInterfaceArray Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods useful when constructing an array of COM interface pointers.
## Syntax
diff --git a/docs/atl/reference/cinterfacelist-class.md b/docs/atl/reference/cinterfacelist-class.md
index e5aae7bdce7..f445de12465 100644
--- a/docs/atl/reference/cinterfacelist-class.md
+++ b/docs/atl/reference/cinterfacelist-class.md
@@ -4,10 +4,11 @@ title: "CInterfaceList Class"
ms.date: "11/04/2016"
f1_keywords: ["CInterfaceList", "ATLCOLL/ATL::CInterfaceList", "ATLCOLL/ATL::CInterfaceList::CInterfaceList"]
helpviewer_keywords: ["CInterfaceList class"]
-ms.assetid: 2077764d-25e5-4b3d-96c8-08a287bbcd25
---
# CInterfaceList Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods useful when constructing a list of COM interface pointers.
## Syntax
diff --git a/docs/atl/reference/clocalheap-class.md b/docs/atl/reference/clocalheap-class.md
index 32ff5c199e4..9d597b0d29c 100644
--- a/docs/atl/reference/clocalheap-class.md
+++ b/docs/atl/reference/clocalheap-class.md
@@ -4,10 +4,11 @@ title: "CLocalHeap Class"
ms.date: "11/04/2016"
f1_keywords: ["CLocalHeap", "ATLMEM/ATL::CLocalHeap", "ATLMEM/ATL::CLocalHeap::Allocate", "ATLMEM/ATL::CLocalHeap::Free", "ATLMEM/ATL::CLocalHeap::GetSize", "ATLMEM/ATL::CLocalHeap::Reallocate"]
helpviewer_keywords: ["CLocalHeap class"]
-ms.assetid: 1ffa87a5-5fc8-4f8d-8809-58e87e963bd2
---
# CLocalHeap Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements [IAtlMemMgr](../../atl/reference/iatlmemmgr-class.md) using the Win32 local heap functions.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cmessagemap-class.md b/docs/atl/reference/cmessagemap-class.md
index 1f8f30e7429..3e9c87e6d8e 100644
--- a/docs/atl/reference/cmessagemap-class.md
+++ b/docs/atl/reference/cmessagemap-class.md
@@ -4,10 +4,11 @@ title: "CMessageMap Class"
ms.date: "11/04/2016"
f1_keywords: ["CMessageMap", "ATLWIN/ATL::CMessageMap", "ATLWIN/ATL::CMessageMap::ProcessWindowMessage"]
helpviewer_keywords: ["CMessageMap class", "message maps, ATL", "ATL, message handlers"]
-ms.assetid: 1f97bc16-a8a0-4cf0-b90f-1778813a5c8e
---
# CMessageMap Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class allows an object's message maps to be access by another object.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cnonstatelessworker-class.md b/docs/atl/reference/cnonstatelessworker-class.md
index 014cd170ab8..c11f44e5cf6 100644
--- a/docs/atl/reference/cnonstatelessworker-class.md
+++ b/docs/atl/reference/cnonstatelessworker-class.md
@@ -4,10 +4,11 @@ title: "CNonStatelessWorker Class"
ms.date: "11/04/2016"
f1_keywords: ["CNonStatelessWorker", "ATLUTIL/ATL::CNonStatelessWorker", "ATLUTIL/ATL::CNonStatelessWorker::RequestType", "ATLUTIL/ATL::CNonStatelessWorker::Execute", "ATLUTIL/ATL::CNonStatelessWorker::Initialize", "ATLUTIL/ATL::CNonStatelessWorker::Terminate"]
helpviewer_keywords: ["CNonStatelessWorker class"]
-ms.assetid: d00936c6-9e7d-49fb-b87d-417b963367d1
---
# CNonStatelessWorker Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Receives requests from a thread pool and passes them on to a worker object that is created and destroyed on each request.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cnoworkerthread-class.md b/docs/atl/reference/cnoworkerthread-class.md
index 69c725ddc5e..a46f79dd47f 100644
--- a/docs/atl/reference/cnoworkerthread-class.md
+++ b/docs/atl/reference/cnoworkerthread-class.md
@@ -4,10 +4,11 @@ title: "CNoWorkerThread Class"
ms.date: "11/04/2016"
f1_keywords: ["CNoWorkerThread", "ATLUTIL/ATL::CNoWorkerThread", "ATLUTIL/ATL::CNoWorkerThread::AddHandle", "ATLUTIL/ATL::CNoWorkerThread::AddTimer", "ATLUTIL/ATL::CNoWorkerThread::GetThreadHandle", "ATLUTIL/ATL::CNoWorkerThread::GetThreadId", "ATLUTIL/ATL::CNoWorkerThread::Initialize", "ATLUTIL/ATL::CNoWorkerThread::RemoveHandle", "ATLUTIL/ATL::CNoWorkerThread::Shutdown"]
helpviewer_keywords: ["CNoWorkerThread class"]
-ms.assetid: 29f06bae-b658-4aac-9c14-331e996d25d1
---
# CNoWorkerThread Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Use this class as the argument for the `MonitorClass` template parameter to cache classes if you want to disable dynamic cache maintenance.
> [!IMPORTANT]
diff --git a/docs/atl/reference/com-interface-entry-macros.md b/docs/atl/reference/com-interface-entry-macros.md
index 83a187ec491..dd365f7d09d 100644
--- a/docs/atl/reference/com-interface-entry-macros.md
+++ b/docs/atl/reference/com-interface-entry-macros.md
@@ -4,10 +4,11 @@ title: "COM Interface Entry Macros"
ms.date: "03/28/2017"
f1_keywords: ["atlcom/ATL::COM_INTERFACE_ENTRY", "atlcom/ATL::COM_INTERFACE_ENTRY_IID", "atlcom/ATL::COM_INTERFACE_ENTRY_AGGREGATE", "atlcom/ATL::COM_INTERFACE_ENTRY_AGGREGATE_BLIND", "atlcom/ATL::COM_INTERFACE_ENTRY_AUTOAGGREGATE", "atlcom/ATL::COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND", "atlcom/ATL::COM_INTERFACE_ENTRY_BREAK", "atlcom/ATL::COM_INTERFACE_ENTRY_CACHED_TEAR_OFF", "atlcom/ATL::COM_INTERFACE_ENTRY_TEAR_OFF", "atlcom/ATL::COM_INTERFACE_ENTRY_CHAIN", "atlcom/ATL::COM_INTERFACE_ENTRY_FUNC", "atlcom/ATL::COM_INTERFACE_ENTRY_FUNC_BLIND", "atlcom/ATL::COM_INTERFACE_ENTRY_NOINTERFACE"]
helpviewer_keywords: ["COM interfaces, COM interface entry macros"]
-ms.assetid: 19dcb768-2e1f-4b8d-a618-453a01a4bd00
---
# COM_INTERFACE_ENTRY Macros
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These macros enter an object's interfaces into its COM map so that they can be accessed by `QueryInterface`. The order of entries in the COM map is the order interfaces will be checked for a matching IID during `QueryInterface`.
|Macro|Description|
diff --git a/docs/atl/reference/com-map-global-functions.md b/docs/atl/reference/com-map-global-functions.md
index 97e19802646..e7ebb9ed76d 100644
--- a/docs/atl/reference/com-map-global-functions.md
+++ b/docs/atl/reference/com-map-global-functions.md
@@ -4,10 +4,11 @@ title: "COM Map Global Functions"
ms.date: "11/04/2016"
f1_keywords: ["atlbase/ATL::AtlInternalQueryInterface", "atlbase/ATL::InlineIsEqualIUnknown"]
helpviewer_keywords: ["COM interfaces, COM map global functions"]
-ms.assetid: b9612d30-eb23-46ef-8093-d56f237d3cf1
---
# COM Map Global Functions
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These functions provide support for COM Map `IUnknown` implementations.
|Function|Description|
diff --git a/docs/atl/reference/com-map-macros.md b/docs/atl/reference/com-map-macros.md
index 6734604721d..93d4b26bb69 100644
--- a/docs/atl/reference/com-map-macros.md
+++ b/docs/atl/reference/com-map-macros.md
@@ -4,10 +4,11 @@ title: "COM Map Macros"
ms.date: "11/04/2016"
f1_keywords: ["atlcom/ATL::BEGIN_COM_MAP", "atlcom/ATL::END_COM_MAP", "ATLCOM/BEGIN_COM_MAP", "ATLCOM/END_COM_MAP"]
helpviewer_keywords: ["COM interfaces, COM map macros"]
-ms.assetid: 0f33656d-321f-4996-90cc-9a7f21ab73c3
---
# COM Map Macros
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These macros define COM interface maps.
|Macro|Description|
diff --git a/docs/atl/reference/com-plus-1-0-atl-com-plus-1-0-component-wizard.md b/docs/atl/reference/com-plus-1-0-atl-com-plus-1-0-component-wizard.md
index 0a125245518..37826eba5b2 100644
--- a/docs/atl/reference/com-plus-1-0-atl-com-plus-1-0-component-wizard.md
+++ b/docs/atl/reference/com-plus-1-0-atl-com-plus-1-0-component-wizard.md
@@ -3,10 +3,11 @@ description: "Learn more about: COM+ 1.0, ATL COM+ 1.0 Component Wizard"
title: "COM+ 1.0, ATL COM+ 1.0 Component Wizard"
ms.date: "05/09/2019"
f1_keywords: ["vc.codewiz.class.atl.mts.options"]
-ms.assetid: 2fbe259c-6be1-4d0e-9cfe-721c75c97cb1
---
# COM+ 1.0, ATL COM+ 1.0 Component Wizard
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
::: moniker range=">=msvc-160"
This wizard is not available in Visual Studio 2019 and later.
diff --git a/docs/atl/reference/com-plus-1-0-support-in-atl-projects.md b/docs/atl/reference/com-plus-1-0-support-in-atl-projects.md
index ae0f296311b..72d9e7e0ff7 100644
--- a/docs/atl/reference/com-plus-1-0-support-in-atl-projects.md
+++ b/docs/atl/reference/com-plus-1-0-support-in-atl-projects.md
@@ -4,10 +4,11 @@ title: "COM+ 1.0 Support in ATL Projects"
ms.date: "11/04/2016"
f1_keywords: ["vc.appwiz.ATL.MTS"]
helpviewer_keywords: ["ATL projects, COM+ 1.0 support"]
-ms.assetid: 51fb08ac-d632-4657-a4e0-d3f989f0b6f8
---
# COM+ 1.0 Support in ATL Projects
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
You can use the [ATL Project Wizard](../../atl/reference/creating-an-atl-project.md) to create a project with basic support for COM+ 1.0 components.
COM+ 1.0 is designed for developing distributed component-based applications. It also provides a run-time infrastructure for deploying and managing these applications.
diff --git a/docs/atl/reference/compiler-options-macros.md b/docs/atl/reference/compiler-options-macros.md
index 4c80bb5d9bf..465fd84fab8 100644
--- a/docs/atl/reference/compiler-options-macros.md
+++ b/docs/atl/reference/compiler-options-macros.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["compiler options, macros"]
---
# Compiler Options Macros
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These macros control specific compiler features.
|Macro|Description|
diff --git a/docs/atl/reference/composite-control-global-functions.md b/docs/atl/reference/composite-control-global-functions.md
index b55042bb271..b14dc283be1 100644
--- a/docs/atl/reference/composite-control-global-functions.md
+++ b/docs/atl/reference/composite-control-global-functions.md
@@ -4,10 +4,11 @@ title: "Composite Control Global Functions"
ms.date: "11/04/2016"
f1_keywords: ["atlhost/ATL::AtlAxDialogBox", "atlhost/ATL::AtlAxCreateDialog", "atlhost/ATL::AtlAxCreateControl", "atlhost/ATL::AtlAxCreateControlEx", "atlhost/ATL::AtlAxCreateControlLic", "atlhost/ATL::AtlAxCreateControlLicEx", "atlhost/ATL::AtlAxAttachControl", "atlhost/ATL::AtlAxGetHost", "atlhost/ATL::AtlAxGetControl", "atlhost/ATL::AtlSetChildSite", "atlhost/ATL::AtlAxWinInit", "atlhost/ATL::AtlAxWinTerm", "atlhost/ATL::AtlGetObjectSourceInterface"]
helpviewer_keywords: ["composite controls, global functions"]
-ms.assetid: 536884cd-e863-4c7a-ab0a-604dc60a0bbe
---
# Composite Control Global Functions
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These functions provide support for creating dialog boxes, and for creating, hosting and licensing ActiveX controls.
> [!IMPORTANT]
diff --git a/docs/atl/reference/composite-control-macros.md b/docs/atl/reference/composite-control-macros.md
index 9721f16031c..94620901dbc 100644
--- a/docs/atl/reference/composite-control-macros.md
+++ b/docs/atl/reference/composite-control-macros.md
@@ -4,10 +4,11 @@ title: "Composite Control Macros"
ms.date: "05/06/2019"
f1_keywords: ["atlcom/ATL::BEGIN_SINK_MAP", "atlcom/ATL::END_SINK_MAP", "atlcom/ATL::SINK_ENTRY", "ATLCOM/BEGIN_SINK_MAP", "ATLCOM/END_SINK_MAP", "ATLCOM/SINK_ENTRY", "ATLCOM/SINK_ENTRY_EX", "ATLCOM/SINK_ENTRY_EX_P", "ATLCOM/SINK_ENTRY_INFO", "ATLCOM/SINK_ENTRY_INFO_P", "BEGIN_SINK_MAP", "END_SINK_MAP", "SINK_ENTRY", "SINK_ENTRY_EX", "SINK_ENTRY_EX_P", "SINK_ENTRY_INFO", "SINK_ENTRY_INFO_P"]
helpviewer_keywords: ["composite controls, macros"]
-ms.assetid: 17f2dd5e-07e6-4aa6-b965-7a361c78c45e
---
# Composite Control Macros
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These macros define event sink maps and entries.
|Macro|Description|
diff --git a/docs/atl/reference/connection-point-global-functions.md b/docs/atl/reference/connection-point-global-functions.md
index be49a8643a4..27a14e4ca41 100644
--- a/docs/atl/reference/connection-point-global-functions.md
+++ b/docs/atl/reference/connection-point-global-functions.md
@@ -4,10 +4,11 @@ title: "Connection Point Global Functions"
ms.date: "11/04/2016"
f1_keywords: ["atlbase/ATL::AtlAdvise", "atlbase/ATL::AtlUnadvise", "atlbase/ATL::AtlAdviseSinkMap"]
helpviewer_keywords: ["connection points [C++], global functions"]
-ms.assetid: bcb4bf50-2155-4e20-b8bb-f2908b03a6e7
---
# Connection Point Global Functions
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These functions provide support for connection points and sink maps.
> [!IMPORTANT]
diff --git a/docs/atl/reference/connection-point-macros.md b/docs/atl/reference/connection-point-macros.md
index 490abb2c387..5bdfd5b0491 100644
--- a/docs/atl/reference/connection-point-macros.md
+++ b/docs/atl/reference/connection-point-macros.md
@@ -4,10 +4,11 @@ title: "Connection Point Macros"
ms.date: "11/04/2016"
f1_keywords: ["atlcom/ATL::BEGIN_CONNECTION_POINT_MAP", "atlcom/ATL::END_CONNECTION_POINT_MAP", "ATLCOM/BEGIN_CONNECTION_POINT_MAP", "ATLCOM/END_CONNECTION_POINT_MAP", "ATLCOM/CONNECTION_POINT_ENTRY", "ATLCOM/CONNECTION_POINT_ENTRY_P", "BEGIN_CONNECTION_POINT_MAP", "END_CONNECTION_POINT_MAP", "CONNECTION_POINT_ENTRY", "CONNECTION_POINT_ENTRY_P"]
helpviewer_keywords: ["connection points [C++], macros"]
-ms.assetid: cc3a6dd3-5538-45df-b027-1f34963c31e5
---
# Connection Point Macros
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These macros define connection point maps and entries.
|Macro|Description|
diff --git a/docs/atl/reference/cpatht-class.md b/docs/atl/reference/cpatht-class.md
index 32b31a3db12..93adf44cd29 100644
--- a/docs/atl/reference/cpatht-class.md
+++ b/docs/atl/reference/cpatht-class.md
@@ -4,10 +4,11 @@ title: "CPathT Class"
ms.date: "03/27/2019"
f1_keywords: ["CPathT", "ATLPATH/ATL::CPathT", "ATLPATH/ATL::CPathT::PCXSTR", "ATLPATH/ATL::CPathT::PXSTR", "ATLPATH/ATL::CPathT::XCHAR", "ATLPATH/ATL::CPathT::CPathT", "ATLPATH/ATL::CPathT::AddBackslash", "ATLPATH/ATL::CPathT::AddExtension", "ATLPATH/ATL::CPathT::Append", "ATLPATH/ATL::CPathT::BuildRoot", "ATLPATH/ATL::CPathT::Canonicalize", "ATLPATH/ATL::CPathT::Combine", "ATLPATH/ATL::CPathT::CommonPrefix", "ATLPATH/ATL::CPathT::CompactPath", "ATLPATH/ATL::CPathT::CompactPathEx", "ATLPATH/ATL::CPathT::FileExists", "ATLPATH/ATL::CPathT::FindExtension", "ATLPATH/ATL::CPathT::FindFileName", "ATLPATH/ATL::CPathT::GetDriveNumber", "ATLPATH/ATL::CPathT::GetExtension", "ATLPATH/ATL::CPathT::IsDirectory", "ATLPATH/ATL::CPathT::IsFileSpec", "ATLPATH/ATL::CPathT::IsPrefix", "ATLPATH/ATL::CPathT::IsRelative", "ATLPATH/ATL::CPathT::IsRoot", "ATLPATH/ATL::CPathT::IsSameRoot", "ATLPATH/ATL::CPathT::IsUNC", "ATLPATH/ATL::CPathT::IsUNCServer", "ATLPATH/ATL::CPathT::IsUNCServerShare", "ATLPATH/ATL::CPathT::MakePretty", "ATLPATH/ATL::CPathT::MatchSpec", "ATLPATH/ATL::CPathT::QuoteSpaces", "ATLPATH/ATL::CPathT::RelativePathTo", "ATLPATH/ATL::CPathT::RemoveArgs", "ATLPATH/ATL::CPathT::RemoveBackslash", "ATLPATH/ATL::CPathT::RemoveBlanks", "ATLPATH/ATL::CPathT::RemoveExtension", "ATLPATH/ATL::CPathT::RemoveFileSpec", "ATLPATH/ATL::CPathT::RenameExtension", "ATLPATH/ATL::CPathT::SkipRoot", "ATLPATH/ATL::CPathT::StripPath", "ATLPATH/ATL::CPathT::StripToRoot", "ATLPATH/ATL::CPathT::UnquoteSpaces", "ATLPATH/ATL::CPathT::m_strPath"]
helpviewer_keywords: ["CPathT class"]
-ms.assetid: eba4137d-1fd2-4b44-a2e1-0944db64df3c
---
# CPathT Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class represents a path.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cprimitiveelementtraits-class.md b/docs/atl/reference/cprimitiveelementtraits-class.md
index 7a0da283d47..efbb2c1caff 100644
--- a/docs/atl/reference/cprimitiveelementtraits-class.md
+++ b/docs/atl/reference/cprimitiveelementtraits-class.md
@@ -4,10 +4,11 @@ title: "CPrimitiveElementTraits Class"
ms.date: "11/04/2016"
f1_keywords: ["CPrimitiveElementTraits", "ATLCOLL/ATL::CPrimitiveElementTraits", "ATLCOLL/ATL::CPrimitiveElementTraits::INARGTYPE", "ATLCOLL/ATL::CPrimitiveElementTraits::OUTARGTYPE"]
helpviewer_keywords: ["CPrimitiveElementTraits class"]
-ms.assetid: 21c1cea8-2c5a-486c-b65c-85490f3ed4e6
---
# CPrimitiveElementTraits Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides default methods and functions for a collection class composed of primitive data types.
## Syntax
diff --git a/docs/atl/reference/cprivateobjectsecuritydesc-class.md b/docs/atl/reference/cprivateobjectsecuritydesc-class.md
index 8d18a4cef84..b3e8123fd32 100644
--- a/docs/atl/reference/cprivateobjectsecuritydesc-class.md
+++ b/docs/atl/reference/cprivateobjectsecuritydesc-class.md
@@ -4,10 +4,11 @@ title: "CPrivateObjectSecurityDesc Class"
ms.date: "11/04/2016"
f1_keywords: ["CPrivateObjectSecurityDesc", "ATLSECURITY/ATL::CPrivateObjectSecurityDesc", "ATLSECURITY/ATL::CPrivateObjectSecurityDesc::CPrivateObjectSecurityDesc", "ATLSECURITY/ATL::CPrivateObjectSecurityDesc::ConvertToAutoInherit", "ATLSECURITY/ATL::CPrivateObjectSecurityDesc::Create", "ATLSECURITY/ATL::CPrivateObjectSecurityDesc::Get", "ATLSECURITY/ATL::CPrivateObjectSecurityDesc::Set"]
helpviewer_keywords: ["CPrivateObjectSecurityDesc class"]
-ms.assetid: 2c4bbb13-bf99-4833-912a-197f6815bb5d
---
# CPrivateObjectSecurityDesc Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class represents a private object security descriptor object.
## Syntax
diff --git a/docs/atl/reference/crbmap-class.md b/docs/atl/reference/crbmap-class.md
index 4617fc49e3c..3a09ccf6c49 100644
--- a/docs/atl/reference/crbmap-class.md
+++ b/docs/atl/reference/crbmap-class.md
@@ -4,10 +4,11 @@ title: "CRBMap Class"
ms.date: "11/04/2016"
f1_keywords: ["CRBMap", "ATLCOLL/ATL::CRBMap", "ATLCOLL/ATL::CRBMap::CRBMap", "ATLCOLL/ATL::CRBMap::Lookup", "ATLCOLL/ATL::CRBMap::RemoveKey", "ATLCOLL/ATL::CRBMap::SetAt"]
helpviewer_keywords: ["CRBMap class"]
-ms.assetid: 658e94dc-e835-4356-aed1-1513e1f66969
---
# CRBMap Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class represents a mapping structure, using a Red-Black binary tree.
## Syntax
diff --git a/docs/atl/reference/crbmultimap-class.md b/docs/atl/reference/crbmultimap-class.md
index 3788491f6d5..c50ea797627 100644
--- a/docs/atl/reference/crbmultimap-class.md
+++ b/docs/atl/reference/crbmultimap-class.md
@@ -4,10 +4,11 @@ title: "CRBMultiMap Class"
ms.date: "11/04/2016"
f1_keywords: ["CRBMultiMap", "ATLCOLL/ATL::CRBMultiMap", "ATLCOLL/ATL::CRBMultiMap::CRBMultiMap", "ATLCOLL/ATL::CRBMultiMap::FindFirstWithKey", "ATLCOLL/ATL::CRBMultiMap::GetNextValueWithKey", "ATLCOLL/ATL::CRBMultiMap::GetNextWithKey", "ATLCOLL/ATL::CRBMultiMap::Insert", "ATLCOLL/ATL::CRBMultiMap::RemoveKey"]
helpviewer_keywords: ["CRBMultiMap class"]
-ms.assetid: 94d3ec0c-3e30-4ab7-a101-d8da4fb8add3
---
# CRBMultiMap Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class represents a mapping structure that allows each key can be associated with more than one value, using a Red-Black binary tree.
## Syntax
diff --git a/docs/atl/reference/crbtree-class.md b/docs/atl/reference/crbtree-class.md
index 1b37d5c41ee..d755ed2a10c 100644
--- a/docs/atl/reference/crbtree-class.md
+++ b/docs/atl/reference/crbtree-class.md
@@ -4,10 +4,11 @@ title: "CRBTree Class"
ms.date: "11/04/2016"
f1_keywords: ["CRBTree", "ATLCOLL/ATL::CRBTree", "ATLCOLL/ATL::CRBTree::KINARGTYPE", "ATLCOLL/ATL::CRBTree::KOUTARGTYPE", "ATLCOLL/ATL::CRBTree::VINARGTYPE", "ATLCOLL/ATL::CRBTree::VOUTARGTYPE", "ATLCOLL/ATL::CRBTree::FindFirstKeyAfter", "ATLCOLL/ATL::CRBTree::GetAt", "ATLCOLL/ATL::CRBTree::GetCount", "ATLCOLL/ATL::CRBTree::GetHeadPosition", "ATLCOLL/ATL::CRBTree::GetKeyAt", "ATLCOLL/ATL::CRBTree::GetNext", "ATLCOLL/ATL::CRBTree::GetNextAssoc", "ATLCOLL/ATL::CRBTree::GetNextKey", "ATLCOLL/ATL::CRBTree::GetNextValue", "ATLCOLL/ATL::CRBTree::GetPrev", "ATLCOLL/ATL::CRBTree::GetTailPosition", "ATLCOLL/ATL::CRBTree::GetValueAt", "ATLCOLL/ATL::CRBTree::IsEmpty", "ATLCOLL/ATL::CRBTree::RemoveAll", "ATLCOLL/ATL::CRBTree::RemoveAt", "ATLCOLL/ATL::CRBTree::SetValueAt"]
helpviewer_keywords: ["CRBTree class"]
-ms.assetid: a1b1cb63-38e4-4fc2-bb28-f774d1721760
---
# CRBTree Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for creating and utilizing a Red-Black tree.
## Syntax
diff --git a/docs/atl/reference/creating-an-atl-project.md b/docs/atl/reference/creating-an-atl-project.md
index 0e82550faf9..2b8d1914bda 100644
--- a/docs/atl/reference/creating-an-atl-project.md
+++ b/docs/atl/reference/creating-an-atl-project.md
@@ -4,10 +4,11 @@ title: "Creating an ATL Project"
ms.date: "05/06/2019"
f1_keywords: ["vc.appwiz.ATL.project"]
helpviewer_keywords: ["ATL projects, creating", "ATL70.DLL", "_ATL_MIN_CRT macro", "distributing files with ATL components"]
-ms.assetid: 061d5f98-f669-440e-9380-42f017a0f9e8
---
# Creating an ATL Project
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
The easiest way to create an ATL project is to use the ATL Project Wizard, located in the **Win32 Projects** folder of the **New Project** dialog box.
## To create an ATL project using the ATL Project Wizard
diff --git a/docs/atl/reference/cregkey-class.md b/docs/atl/reference/cregkey-class.md
index 175495ad2e4..d2510be3e45 100644
--- a/docs/atl/reference/cregkey-class.md
+++ b/docs/atl/reference/cregkey-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["CRegKey class", "ATL, registry", "registry, deleting valu
---
# `CRegKey` Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for manipulating entries in the system registry.
> [!IMPORTANT]
diff --git a/docs/atl/reference/crtthreadtraits-class.md b/docs/atl/reference/crtthreadtraits-class.md
index de1edbf63f5..3703ee3ee16 100644
--- a/docs/atl/reference/crtthreadtraits-class.md
+++ b/docs/atl/reference/crtthreadtraits-class.md
@@ -4,10 +4,11 @@ title: "CRTThreadTraits Class"
ms.date: "11/04/2016"
f1_keywords: ["CRTThreadTraits", "ATLBASE/ATL::CRTThreadTraits", "ATLBASE/ATL::CRTThreadTraits::CreateThread"]
helpviewer_keywords: ["CRTThreadTraits class", "threading [ATL], creation functions", "threading [ATL], CRT threads"]
-ms.assetid: eb6e20b0-c2aa-4170-8e34-aaeeacc86343
---
# CRTThreadTraits Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides the creation function for a CRT thread. Use this class if the thread will use CRT functions.
> [!IMPORTANT]
diff --git a/docs/atl/reference/csacl-class.md b/docs/atl/reference/csacl-class.md
index 47717cec068..12157beccdf 100644
--- a/docs/atl/reference/csacl-class.md
+++ b/docs/atl/reference/csacl-class.md
@@ -4,10 +4,11 @@ title: "CSacl Class"
ms.date: "11/04/2016"
f1_keywords: ["CSacl", "ATLSECURITY/ATL::CSacl", "ATLSECURITY/ATL::CSacl::CSacl", "ATLSECURITY/ATL::CSacl::AddAuditAce", "ATLSECURITY/ATL::CSacl::GetAceCount", "ATLSECURITY/ATL::CSacl::RemoveAce", "ATLSECURITY/ATL::CSacl::RemoveAllAces"]
helpviewer_keywords: ["CSacl class"]
-ms.assetid: 8624889b-aebc-4183-9d29-a20f07837f05
---
# CSacl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is a wrapper for a SACL (system access-control list) structure.
> [!IMPORTANT]
diff --git a/docs/atl/reference/csecurityattributes-class.md b/docs/atl/reference/csecurityattributes-class.md
index 7ba2de9becc..ffb68f7fe43 100644
--- a/docs/atl/reference/csecurityattributes-class.md
+++ b/docs/atl/reference/csecurityattributes-class.md
@@ -4,10 +4,11 @@ title: "CSecurityAttributes Class"
ms.date: "11/04/2016"
f1_keywords: ["CSecurityAttributes", "ATLSECURITY/ATL::CSecurityAttributes", "ATLSECURITY/ATL::CSecurityAttributes::CSecurityAttributes", "ATLSECURITY/ATL::CSecurityAttributes::Set"]
helpviewer_keywords: ["CSecurityAttributes class"]
-ms.assetid: a094880c-52e1-4a28-97ff-752d5869908e
---
# CSecurityAttributes Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is a thin wrapper for the security attributes structure.
> [!IMPORTANT]
diff --git a/docs/atl/reference/csecuritydesc-class.md b/docs/atl/reference/csecuritydesc-class.md
index d5042907684..67f652293ec 100644
--- a/docs/atl/reference/csecuritydesc-class.md
+++ b/docs/atl/reference/csecuritydesc-class.md
@@ -4,10 +4,11 @@ title: "CSecurityDesc Class"
ms.date: "11/04/2016"
f1_keywords: ["CSecurityDesc", "ATLSECURITY/ATL::CSecurityDesc", "ATLSECURITY/ATL::CSecurityDesc::CSecurityDesc", "ATLSECURITY/ATL::CSecurityDesc::FromString", "ATLSECURITY/ATL::CSecurityDesc::GetControl", "ATLSECURITY/ATL::CSecurityDesc::GetDacl", "ATLSECURITY/ATL::CSecurityDesc::GetGroup", "ATLSECURITY/ATL::CSecurityDesc::GetOwner", "ATLSECURITY/ATL::CSecurityDesc::GetPSECURITY_DESCRIPTOR", "ATLSECURITY/ATL::CSecurityDesc::GetSacl", "ATLSECURITY/ATL::CSecurityDesc::IsDaclAutoInherited", "ATLSECURITY/ATL::CSecurityDesc::IsDaclDefaulted", "ATLSECURITY/ATL::CSecurityDesc::IsDaclPresent", "ATLSECURITY/ATL::CSecurityDesc::IsDaclProtected", "ATLSECURITY/ATL::CSecurityDesc::IsGroupDefaulted", "ATLSECURITY/ATL::CSecurityDesc::IsOwnerDefaulted", "ATLSECURITY/ATL::CSecurityDesc::IsSaclAutoInherited", "ATLSECURITY/ATL::CSecurityDesc::IsSaclDefaulted", "ATLSECURITY/ATL::CSecurityDesc::IsSaclPresent", "ATLSECURITY/ATL::CSecurityDesc::IsSaclProtected", "ATLSECURITY/ATL::CSecurityDesc::IsSelfRelative", "ATLSECURITY/ATL::CSecurityDesc::MakeAbsolute", "ATLSECURITY/ATL::CSecurityDesc::MakeSelfRelative", "ATLSECURITY/ATL::CSecurityDesc::SetControl", "ATLSECURITY/ATL::CSecurityDesc::SetDacl", "ATLSECURITY/ATL::CSecurityDesc::SetGroup", "ATLSECURITY/ATL::CSecurityDesc::SetOwner", "ATLSECURITY/ATL::CSecurityDesc::SetSacl", "ATLSECURITY/ATL::CSecurityDesc::ToString"]
helpviewer_keywords: ["CSecurityDesc class"]
-ms.assetid: 3767a327-378f-4690-ba40-4d9f6a1f5ee4
---
# CSecurityDesc Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is a wrapper for the `SECURITY_DESCRIPTOR` structure.
> [!IMPORTANT]
diff --git a/docs/atl/reference/csid-class.md b/docs/atl/reference/csid-class.md
index 49be86aa613..064eaa6ad79 100644
--- a/docs/atl/reference/csid-class.md
+++ b/docs/atl/reference/csid-class.md
@@ -4,10 +4,11 @@ title: "CSid class"
ms.date: "03/27/2019"
f1_keywords: ["CSid", "ATLSECURITY/ATL::CSid", "ATLSECURITY/ATL::CSid::CSidArray", "ATLSECURITY/ATL::CSid::CSid", "ATLSECURITY/ATL::CSid::AccountName", "ATLSECURITY/ATL::CSid::Domain", "ATLSECURITY/ATL::CSid::EqualPrefix", "ATLSECURITY/ATL::CSid::GetLength", "ATLSECURITY/ATL::CSid::GetPSID", "ATLSECURITY/ATL::CSid::GetPSID_IDENTIFIER_AUTHORITY", "ATLSECURITY/ATL::CSid::GetSubAuthority", "ATLSECURITY/ATL::CSid::GetSubAuthorityCount", "ATLSECURITY/ATL::CSid::IsValid", "ATLSECURITY/ATL::CSid::LoadAccount", "ATLSECURITY/ATL::CSid::Sid", "ATLSECURITY/ATL::CSid::SidNameUse"]
helpviewer_keywords: ["CSid class"]
-ms.assetid: be58b7ca-5958-49c3-a833-ca341aaaf753
---
# `CSid` class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is a wrapper for a `SID` (security identifier) structure.
> [!IMPORTANT]
diff --git a/docs/atl/reference/csimplearray-class.md b/docs/atl/reference/csimplearray-class.md
index 12a7cd13323..c9393a904da 100644
--- a/docs/atl/reference/csimplearray-class.md
+++ b/docs/atl/reference/csimplearray-class.md
@@ -4,10 +4,11 @@ title: "CSimpleArray Class"
ms.date: "11/04/2016"
f1_keywords: ["CSimpleArray", "ATLSIMPCOLL/ATL::CSimpleArray", "ATLSIMPCOLL/ATL::CSimpleArray::CSimpleArray", "ATLSIMPCOLL/ATL::CSimpleArray::Add", "ATLSIMPCOLL/ATL::CSimpleArray::Find", "ATLSIMPCOLL/ATL::CSimpleArray::GetData", "ATLSIMPCOLL/ATL::CSimpleArray::GetSize", "ATLSIMPCOLL/ATL::CSimpleArray::Remove", "ATLSIMPCOLL/ATL::CSimpleArray::RemoveAll", "ATLSIMPCOLL/ATL::CSimpleArray::RemoveAt", "ATLSIMPCOLL/ATL::CSimpleArray::SetAtIndex"]
helpviewer_keywords: ["CSimpleArray class"]
-ms.assetid: ee0c9f39-b61c-4c18-bc43-4eada21dca3a
---
# CSimpleArray Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for managing a simple array.
## Syntax
diff --git a/docs/atl/reference/csimplearrayequalhelper-class.md b/docs/atl/reference/csimplearrayequalhelper-class.md
index e88c64cd44f..dd20404054a 100644
--- a/docs/atl/reference/csimplearrayequalhelper-class.md
+++ b/docs/atl/reference/csimplearrayequalhelper-class.md
@@ -4,10 +4,11 @@ title: "CSimpleArrayEqualHelper Class"
ms.date: "11/04/2016"
f1_keywords: ["CSimpleArrayEqualHelper", "ATLSIMPCOLL/ATL::CSimpleArrayEqualHelper", "ATLSIMPCOLL/ATL::CSimpleArrayEqualHelper::IsEqual"]
helpviewer_keywords: ["CSimpleArrayEqualHelper class"]
-ms.assetid: a2b55d89-78c9-42ef-842c-5304c6d20ad6
---
# CSimpleArrayEqualHelper Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is a helper for the [CSimpleArray](../../atl/reference/csimplearray-class.md) class.
## Syntax
diff --git a/docs/atl/reference/csimplearrayequalhelperfalse-class.md b/docs/atl/reference/csimplearrayequalhelperfalse-class.md
index 9b66910ec4e..36ad6022a6d 100644
--- a/docs/atl/reference/csimplearrayequalhelperfalse-class.md
+++ b/docs/atl/reference/csimplearrayequalhelperfalse-class.md
@@ -4,10 +4,11 @@ title: "CSimpleArrayEqualHelperFalse Class"
ms.date: "11/04/2016"
f1_keywords: ["CSimpleArrayEqualHelperFalse", "ATLSIMPCOLL/ATL::CSimpleArrayEqualHelperFalse", "ATLSIMPCOLL/ATL::CSimpleArrayEqualHelperFalse::IsEqual"]
helpviewer_keywords: ["CSimpleArrayEqualHelperFalse class"]
-ms.assetid: 6918af6f-d23d-49eb-8482-c44272f5ffeb
---
# CSimpleArrayEqualHelperFalse Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is a helper for the [CSimpleArray](../../atl/reference/csimplearray-class.md) class.
## Syntax
diff --git a/docs/atl/reference/csimpledialog-class.md b/docs/atl/reference/csimpledialog-class.md
index 9650d3ce7c3..ea993e768cc 100644
--- a/docs/atl/reference/csimpledialog-class.md
+++ b/docs/atl/reference/csimpledialog-class.md
@@ -4,10 +4,11 @@ title: "CSimpleDialog Class"
ms.date: "11/04/2016"
f1_keywords: ["CSimpleDialog", "ATLWIN/ATL::CSimpleDialog", "ATLWIN/ATL::CSimpleDialog::DoModal"]
helpviewer_keywords: ["CSimpleDialog class", "CSimpleDialog class, modal dialog boxes in ATL", "dialog boxes, modal", "modal dialog boxes, ATL"]
-ms.assetid: 2ae65cc9-4f32-4168-aecd-200b4a480fdf
---
# CSimpleDialog Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements a basic modal dialog box.
## Syntax
diff --git a/docs/atl/reference/csimplemap-class.md b/docs/atl/reference/csimplemap-class.md
index 50f20403759..ce0d4f90990 100644
--- a/docs/atl/reference/csimplemap-class.md
+++ b/docs/atl/reference/csimplemap-class.md
@@ -4,10 +4,11 @@ title: "CSimpleMap Class"
ms.date: "11/04/2016"
f1_keywords: ["CSimpleMap", "ATLSIMPCOLL/ATL::CSimpleMap", "ATLSIMPCOLL/ATL::CSimpleMap::_ArrayElementType", "ATLSIMPCOLL/ATL::CSimpleMap::_ArrayKeyType", "ATLSIMPCOLL/ATL::CSimpleMap::CSimpleMap", "ATLSIMPCOLL/ATL::CSimpleMap::Add", "ATLSIMPCOLL/ATL::CSimpleMap::FindKey", "ATLSIMPCOLL/ATL::CSimpleMap::FindVal", "ATLSIMPCOLL/ATL::CSimpleMap::GetKeyAt", "ATLSIMPCOLL/ATL::CSimpleMap::GetSize", "ATLSIMPCOLL/ATL::CSimpleMap::GetValueAt", "ATLSIMPCOLL/ATL::CSimpleMap::Lookup", "ATLSIMPCOLL/ATL::CSimpleMap::Remove", "ATLSIMPCOLL/ATL::CSimpleMap::RemoveAll", "ATLSIMPCOLL/ATL::CSimpleMap::RemoveAt", "ATLSIMPCOLL/ATL::CSimpleMap::ReverseLookup", "ATLSIMPCOLL/ATL::CSimpleMap::SetAt", "ATLSIMPCOLL/ATL::CSimpleMap::SetAtIndex"]
helpviewer_keywords: ["CSimpleMap class"]
-ms.assetid: 61b06eb4-ae73-44b0-a305-0afb5a33e8b1
---
# CSimpleMap Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides support for a simple mapping array.
## Syntax
diff --git a/docs/atl/reference/csimplemapequalhelper-class.md b/docs/atl/reference/csimplemapequalhelper-class.md
index 05c3178fdaa..ad384ff61db 100644
--- a/docs/atl/reference/csimplemapequalhelper-class.md
+++ b/docs/atl/reference/csimplemapequalhelper-class.md
@@ -4,10 +4,11 @@ title: "CSimpleMapEqualHelper Class"
ms.date: "11/04/2016"
f1_keywords: ["CSimpleMapEqualHelper", "ATLSIMPCOLL/ATL::CSimpleMapEqualHelper", "ATLSIMPCOLL/ATL::CSimpleMapEqualHelper::IsEqualKey", "ATLSIMPCOLL/ATL::CSimpleMapEqualHelper::IsEqualValue"]
helpviewer_keywords: ["CSimpleMapEqualHelper class"]
-ms.assetid: 9bb2968a-d609-405c-8272-ff3b42df6164
---
# CSimpleMapEqualHelper Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is a helper for the [CSimpleMap](../../atl/reference/csimplemap-class.md) class.
## Syntax
diff --git a/docs/atl/reference/csimplemapequalhelperfalse-class.md b/docs/atl/reference/csimplemapequalhelperfalse-class.md
index 97e43c2e59e..0be6f6a9539 100644
--- a/docs/atl/reference/csimplemapequalhelperfalse-class.md
+++ b/docs/atl/reference/csimplemapequalhelperfalse-class.md
@@ -4,10 +4,11 @@ title: "CSimpleMapEqualHelperFalse Class"
ms.date: "11/04/2016"
f1_keywords: ["CSimpleMapEqualHelperFalse", "ATLSIMPCOLL/ATL::CSimpleMapEqualHelperFalse", "ATLSIMPCOLL/ATL::CSimpleMapEqualHelperFalse::IsEqualKey", "ATLSIMPCOLL/ATL::CSimpleMapEqualHelperFalse::IsEqualValue"]
helpviewer_keywords: ["CSimpleMapEqualHelperFalse class"]
-ms.assetid: a873eea3-e130-45cc-a476-61ee79511c3b
---
# CSimpleMapEqualHelperFalse Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is a helper for the [CSimpleMap](../../atl/reference/csimplemap-class.md) class.
## Syntax
diff --git a/docs/atl/reference/csnapinitemimpl-class.md b/docs/atl/reference/csnapinitemimpl-class.md
index b302a376c2c..b9c745e5ff1 100644
--- a/docs/atl/reference/csnapinitemimpl-class.md
+++ b/docs/atl/reference/csnapinitemimpl-class.md
@@ -4,10 +4,11 @@ title: "CSnapInItemImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["CSnapInItemImpl", "ATLSNAP/ATL::CSnapInItemImpl", "ATLSNAP/ATL::CSnapInItemImpl::CSnapInItemImpl", "ATLSNAP/ATL::CSnapInItemImpl::AddMenuItems", "ATLSNAP/ATL::CSnapInItemImpl::Command", "ATLSNAP/ATL::CSnapInItemImpl::CreatePropertyPages", "ATLSNAP/ATL::CSnapInItemImpl::FillData", "ATLSNAP/ATL::CSnapInItemImpl::GetResultPaneInfo", "ATLSNAP/ATL::CSnapInItemImpl::GetResultViewType", "ATLSNAP/ATL::CSnapInItemImpl::GetScopePaneInfo", "ATLSNAP/ATL::CSnapInItemImpl::Notify", "ATLSNAP/ATL::CSnapInItemImpl::QueryPagesFor", "ATLSNAP/ATL::CSnapInItemImpl::SetMenuInsertionFlags", "ATLSNAP/ATL::CSnapInItemImpl::SetToolbarButtonInfo", "ATLSNAP/ATL::CSnapInItemImpl::UpdateMenuState", "ATLSNAP/ATL::CSnapInItemImpl::UpdateToolbarButton", "ATLSNAP/ATL::CSnapInItemImpl::m_bstrDisplayName", "ATLSNAP/ATL::CSnapInItemImpl::m_resultDataItem", "ATLSNAP/ATL::CSnapInItemImpl::m_scopeDataItem"]
helpviewer_keywords: ["snap-ins, data items", "snap-ins, ATL support for", "CSnapInItemImpl class", "snap-ins"]
-ms.assetid: 52caefbd-9eae-49b0-add2-d55524271aa7
---
# CSnapInItemImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for implementing a snap-in node object.
> [!IMPORTANT]
diff --git a/docs/atl/reference/csnapinpropertypageimpl-class.md b/docs/atl/reference/csnapinpropertypageimpl-class.md
index e7cd51b1c78..ab78fc1e15c 100644
--- a/docs/atl/reference/csnapinpropertypageimpl-class.md
+++ b/docs/atl/reference/csnapinpropertypageimpl-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["snap-ins, property pages", "snap-ins", "property pages, A
---
# CSnapInPropertyPageImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for implementing a snap-in property page object.
> [!IMPORTANT]
diff --git a/docs/atl/reference/csocketaddr-class.md b/docs/atl/reference/csocketaddr-class.md
index de051c6ae62..5a186823dce 100644
--- a/docs/atl/reference/csocketaddr-class.md
+++ b/docs/atl/reference/csocketaddr-class.md
@@ -4,10 +4,11 @@ title: "CSocketAddr Class"
ms.date: "10/22/2018"
f1_keywords: ["CSocketAddr", "ATLSOCKET/ATL::CSocketAddr", "ATLSOCKET/ATL::CSocketAddr::CSocketAddr", "ATLSOCKET/ATL::CSocketAddr::FindAddr", "ATLSOCKET/ATL::CSocketAddr::FindINET4Addr", "ATLSOCKET/ATL::CSocketAddr::FindINET6Addr", "ATLSOCKET/ATL::CSocketAddr::GetAddrInfo", "ATLSOCKET/ATL::CSocketAddr::GetAddrInfoList"]
helpviewer_keywords: ["CSocketAddr class"]
-ms.assetid: 2fb2d8a7-899e-4a36-a342-cc9f4fcdd68c
---
# CSocketAddr Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for converting host names to host addresses, supporting both IPv4 and IPV6 formats.
## Syntax
diff --git a/docs/atl/reference/cstockpropimpl-class.md b/docs/atl/reference/cstockpropimpl-class.md
index 1f4959941f7..0b5fc8d9fc6 100644
--- a/docs/atl/reference/cstockpropimpl-class.md
+++ b/docs/atl/reference/cstockpropimpl-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["CStockPropImpl class", "controls [ATL], stock properties"
---
# CStockPropImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for supporting stock property values.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cstringelementtraits-class.md b/docs/atl/reference/cstringelementtraits-class.md
index d314865a597..93cb8ccf5a2 100644
--- a/docs/atl/reference/cstringelementtraits-class.md
+++ b/docs/atl/reference/cstringelementtraits-class.md
@@ -4,10 +4,11 @@ title: "CStringElementTraits Class"
ms.date: "11/04/2016"
f1_keywords: ["CStringElementTraits", "CSTRINGT/ATL::CStringElementTraits", "CSTRINGT/ATL::CStringElementTraits::INARGTYPE", "CSTRINGT/ATL::CStringElementTraits::OUTARGTYPE", "CSTRINGT/ATL::CStringElementTraits::CompareElements", "CSTRINGT/ATL::CStringElementTraits::CompareElementsOrdered", "CSTRINGT/ATL::CStringElementTraits::CopyElements", "CSTRINGT/ATL::CStringElementTraits::Hash", "CSTRINGT/ATL::CStringElementTraits::RelocateElements"]
helpviewer_keywords: ["CStringElementTraits class"]
-ms.assetid: 74d7134b-099d-4455-bf91-3e68ccbf95bc
---
# CStringElementTraits Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides static functions used by collection classes storing `CString` objects.
## Syntax
diff --git a/docs/atl/reference/cstringelementtraitsi-class.md b/docs/atl/reference/cstringelementtraitsi-class.md
index 089e89ec285..41f472f6925 100644
--- a/docs/atl/reference/cstringelementtraitsi-class.md
+++ b/docs/atl/reference/cstringelementtraitsi-class.md
@@ -4,10 +4,11 @@ title: "CStringElementTraitsI Class"
ms.date: "11/04/2016"
f1_keywords: ["CStringElementTraitsI", "ATLCOLL/ATL::CStringElementTraitsI", "ATLCOLL/ATL::CStringElementTraitsI::INARGTYPE", "ATLCOLL/ATL::CStringElementTraitsI::OUTARGTYPE", "ATLCOLL/ATL::CStringElementTraitsI::CompareElements", "ATLCOLL/ATL::CStringElementTraitsI::CompareElementsOrdered", "ATLCOLL/ATL::CStringElementTraitsI::Hash"]
helpviewer_keywords: ["CStringElementTraitsI class"]
-ms.assetid: c23f92b1-91e5-400f-96ed-258b02622b7a
---
# CStringElementTraitsI Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides static functions related to strings stored in collection class objects. It is similar to [CStringElementTraits](../../atl/reference/cstringelementtraits-class.md), but performs case-insensitive comparisons.
## Syntax
diff --git a/docs/atl/reference/cstringrefelementtraits-class.md b/docs/atl/reference/cstringrefelementtraits-class.md
index ed14c61490e..1973a6ed2fb 100644
--- a/docs/atl/reference/cstringrefelementtraits-class.md
+++ b/docs/atl/reference/cstringrefelementtraits-class.md
@@ -4,10 +4,11 @@ title: "CStringRefElementTraits Class"
ms.date: "11/04/2016"
f1_keywords: ["CStringRefElementTraits", "ATLCOLL/ATL::CStringRefElementTraits", "ATLCOLL/ATL::CStringRefElementTraits::CompareElements", "ATLCOLL/ATL::CStringRefElementTraits::CompareElementsOrdered", "ATLCOLL/ATL::CStringRefElementTraits::Hash"]
helpviewer_keywords: ["CStringRefElementTraits class"]
-ms.assetid: cc15062d-5627-46cc-ac2b-1744afdc2dbd
---
# CStringRefElementTraits Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides static functions related to strings stored in collection class objects. The string objects are dealt with as references.
## Syntax
diff --git a/docs/atl/reference/cthreadpool-class.md b/docs/atl/reference/cthreadpool-class.md
index 0cca6b473fa..a9760e62914 100644
--- a/docs/atl/reference/cthreadpool-class.md
+++ b/docs/atl/reference/cthreadpool-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["CThreadPool class"]
---
# CThreadPool Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides a pool of worker threads that process a queue of work items.
## Syntax
diff --git a/docs/atl/reference/ctokengroups-class.md b/docs/atl/reference/ctokengroups-class.md
index 50ca0053c9b..08dfba3fbf9 100644
--- a/docs/atl/reference/ctokengroups-class.md
+++ b/docs/atl/reference/ctokengroups-class.md
@@ -4,10 +4,11 @@ title: "CTokenGroups Class"
ms.date: "11/04/2016"
f1_keywords: ["CTokenGroups", "ATLSECURITY/ATL::CTokenGroups", "ATLSECURITY/ATL::CTokenGroups::CTokenGroups", "ATLSECURITY/ATL::CTokenGroups::Add", "ATLSECURITY/ATL::CTokenGroups::Delete", "ATLSECURITY/ATL::CTokenGroups::DeleteAll", "ATLSECURITY/ATL::CTokenGroups::GetCount", "ATLSECURITY/ATL::CTokenGroups::GetLength", "ATLSECURITY/ATL::CTokenGroups::GetPTOKEN_GROUPS", "ATLSECURITY/ATL::CTokenGroups::GetSidsAndAttributes", "ATLSECURITY/ATL::CTokenGroups::LookupSid"]
helpviewer_keywords: ["CTokenGroups class"]
-ms.assetid: 2ab08076-4b08-4487-bc70-ec6dee304190
---
# CTokenGroups Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is a wrapper for the `TOKEN_GROUPS` structure.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ctokenprivileges-class.md b/docs/atl/reference/ctokenprivileges-class.md
index df23437d13c..43abc2e7c6c 100644
--- a/docs/atl/reference/ctokenprivileges-class.md
+++ b/docs/atl/reference/ctokenprivileges-class.md
@@ -4,10 +4,11 @@ title: "CTokenPrivileges Class"
ms.date: "11/04/2016"
f1_keywords: ["CTokenPrivileges", "ATLSECURITY/ATL::CTokenPrivileges", "ATLSECURITY/ATL::CTokenPrivileges::CTokenPrivileges", "ATLSECURITY/ATL::CTokenPrivileges::Add", "ATLSECURITY/ATL::CTokenPrivileges::Delete", "ATLSECURITY/ATL::CTokenPrivileges::DeleteAll", "ATLSECURITY/ATL::CTokenPrivileges::GetCount", "ATLSECURITY/ATL::CTokenPrivileges::GetDisplayNames", "ATLSECURITY/ATL::CTokenPrivileges::GetLength", "ATLSECURITY/ATL::CTokenPrivileges::GetLuidsAndAttributes", "ATLSECURITY/ATL::CTokenPrivileges::GetNamesAndAttributes", "ATLSECURITY/ATL::CTokenPrivileges::GetPTOKEN_PRIVILEGES", "ATLSECURITY/ATL::CTokenPrivileges::LookupPrivilege"]
helpviewer_keywords: ["CTokenPrivileges class"]
-ms.assetid: 89590105-f001-4014-870d-142926091231
---
# CTokenPrivileges Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is a wrapper for the `TOKEN_PRIVILEGES` structure.
> [!IMPORTANT]
diff --git a/docs/atl/reference/curl-class.md b/docs/atl/reference/curl-class.md
index ff1a201f3fc..1676b7244ed 100644
--- a/docs/atl/reference/curl-class.md
+++ b/docs/atl/reference/curl-class.md
@@ -4,10 +4,11 @@ title: "CUrl Class"
ms.date: "05/06/2019"
f1_keywords: ["CUrl", "ATLUTIL/ATL::CUrl", "ATLUTIL/ATL::CUrl::CUrl", "ATLUTIL/ATL::CUrl::Canonicalize", "ATLUTIL/ATL::CUrl::Clear", "ATLUTIL/ATL::CUrl::CrackUrl", "ATLUTIL/ATL::CUrl::CreateUrl", "ATLUTIL/ATL::CUrl::GetExtraInfo", "ATLUTIL/ATL::CUrl::GetExtraInfoLength", "ATLUTIL/ATL::CUrl::GetHostName", "ATLUTIL/ATL::CUrl::GetHostNameLength", "ATLUTIL/ATL::CUrl::GetPassword", "ATLUTIL/ATL::CUrl::GetPasswordLength", "ATLUTIL/ATL::CUrl::GetPortNumber", "ATLUTIL/ATL::CUrl::GetScheme", "ATLUTIL/ATL::CUrl::GetSchemeName", "ATLUTIL/ATL::CUrl::GetSchemeNameLength", "ATLUTIL/ATL::CUrl::GetUrlLength", "ATLUTIL/ATL::CUrl::GetUrlPath", "ATLUTIL/ATL::CUrl::GetUrlPathLength", "ATLUTIL/ATL::CUrl::GetUserName", "ATLUTIL/ATL::CUrl::GetUserNameLength", "ATLUTIL/ATL::CUrl::SetExtraInfo", "ATLUTIL/ATL::CUrl::SetHostName", "ATLUTIL/ATL::CUrl::SetPassword", "ATLUTIL/ATL::CUrl::SetPortNumber", "ATLUTIL/ATL::CUrl::SetScheme", "ATLUTIL/ATL::CUrl::SetSchemeName", "ATLUTIL/ATL::CUrl::SetUrlPath", "ATLUTIL/ATL::CUrl::SetUserName"]
helpviewer_keywords: ["CUrl class"]
-ms.assetid: b3894d34-47b9-4961-9719-4197153793da
---
# CUrl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class represents a URL. It allows you to manipulate each element of the URL independently of the others whether parsing an existing URL string or building a string from scratch.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cw2aex-class.md b/docs/atl/reference/cw2aex-class.md
index 9029cccbe76..ef2b3d63263 100644
--- a/docs/atl/reference/cw2aex-class.md
+++ b/docs/atl/reference/cw2aex-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["CW2AEX class"]
---
# `CW2AEX` Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is used by the string conversion macros `CT2AEX`, `CW2TEX`, `CW2CTEX`, and `CT2CAEX`, and the typedef `CW2A`.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cw2cwex-class.md b/docs/atl/reference/cw2cwex-class.md
index 58df28f8f63..c00e6ef2143 100644
--- a/docs/atl/reference/cw2cwex-class.md
+++ b/docs/atl/reference/cw2cwex-class.md
@@ -4,10 +4,11 @@ title: "CW2CWEX Class"
ms.date: "11/04/2016"
f1_keywords: ["CW2CWEX", "ATLCONV/ATL::CW2CWEX", "ATLCONV/ATL::CW2CWEX::CW2CWEX", "ATLCONV/ATL::CW2CWEX::m_psz"]
helpviewer_keywords: ["CW2CWEX class"]
-ms.assetid: d654b22b-05a6-410f-a0ec-9a2cbbb4cca7
---
# CW2CWEX Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is used by the string conversion macros CW2CTEX and CT2CWEX, and the typedef CW2W.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cw2wex-class.md b/docs/atl/reference/cw2wex-class.md
index d5c15f69f2e..7148e484e49 100644
--- a/docs/atl/reference/cw2wex-class.md
+++ b/docs/atl/reference/cw2wex-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["CW2WEX class"]
---
# CW2WEX Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class is used by the string conversion macros CW2TEX and CT2WEX, and the typedef CW2W.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cwin32heap-class.md b/docs/atl/reference/cwin32heap-class.md
index 8c69f91f153..0076ab7e2c0 100644
--- a/docs/atl/reference/cwin32heap-class.md
+++ b/docs/atl/reference/cwin32heap-class.md
@@ -4,10 +4,11 @@ title: "CWin32Heap Class"
ms.date: "11/04/2016"
f1_keywords: ["CWin32Heap", "ATLMEM/ATL::CWin32Heap", "ATLMEM/ATL::CWin32Heap::CWin32Heap", "ATLMEM/ATL::CWin32Heap::Allocate", "ATLMEM/ATL::CWin32Heap::Attach", "ATLMEM/ATL::CWin32Heap::Detach", "ATLMEM/ATL::CWin32Heap::Free", "ATLMEM/ATL::CWin32Heap::GetSize", "ATLMEM/ATL::CWin32Heap::Reallocate", "ATLMEM/ATL::CWin32Heap::m_bOwnHeap", "ATLMEM/ATL::CWin32Heap::m_hHeap"]
helpviewer_keywords: ["CWin32Heap class"]
-ms.assetid: 69176022-ed98-4e3b-96d8-116b0c58ac95
---
# CWin32Heap Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements [IAtlMemMgr](../../atl/reference/iatlmemmgr-class.md) using the Win32 heap allocation functions.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cwindow-class.md b/docs/atl/reference/cwindow-class.md
index c91fae3db68..99016859b08 100644
--- a/docs/atl/reference/cwindow-class.md
+++ b/docs/atl/reference/cwindow-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["CWindow class"]
---
# `CWindow` Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for manipulating a window.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cwindowimpl-class.md b/docs/atl/reference/cwindowimpl-class.md
index d2041bc669a..bfd4e676f0c 100644
--- a/docs/atl/reference/cwindowimpl-class.md
+++ b/docs/atl/reference/cwindowimpl-class.md
@@ -4,10 +4,11 @@ title: "CWindowImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["CWindowImpl", "ATLWIN/ATL::CWindowImpl", "ATLWIN/ATL::CWindowImpl::Create", "ATLWIN/ATL::CWindowImpl::DefWindowProc", "ATLWIN/ATL::CWindowImpl::GetCurrentMessage", "ATLWIN/ATL::CWindowImpl::GetWindowProc", "ATLWIN/ATL::CWindowImpl::OnFinalMessage", "ATLWIN/ATL::CWindowImpl::SubclassWindow", "ATLWIN/ATL::CWindowImpl::UnsubclassWindow", "ATLWIN/ATL::CWindowImpl::GetWndClassInfo", "ATLWIN/ATL::CWindowImpl::WindowProc", "ATLWIN/ATL::CWindowImpl::m_pfnSuperWindowProc"]
helpviewer_keywords: ["CWindowImpl class", "subclassing windows, ATL"]
-ms.assetid: 02eefd45-a0a6-4d1b-99f6-dbf627e2cc2f
---
# CWindowImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Provides methods for creating or subclassing a window.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cwintraits-class.md b/docs/atl/reference/cwintraits-class.md
index e7d7b65eabc..123d908d88a 100644
--- a/docs/atl/reference/cwintraits-class.md
+++ b/docs/atl/reference/cwintraits-class.md
@@ -4,10 +4,11 @@ title: "CWinTraits Class"
ms.date: "11/04/2016"
f1_keywords: ["CWinTraits", "ATLWIN/ATL::CWinTraits", "ATLWIN/ATL::CWinTraits::GetWndExStyle", "ATLWIN/ATL::CWinTraits::GetWndStyle"]
helpviewer_keywords: ["CMDIChildWinTraits class", "window styles, default values for ATL", "CWinTraits class", "CFrameWinTraits class", "CControlWinTraits class"]
-ms.assetid: f78f486e-6d9c-42c6-8e86-371e05aa7e59
---
# CWinTraits Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides a method for standardizing the styles used when creating a window object.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cwintraitsor-class.md b/docs/atl/reference/cwintraitsor-class.md
index fbc54c0034a..8f6c147d330 100644
--- a/docs/atl/reference/cwintraitsor-class.md
+++ b/docs/atl/reference/cwintraitsor-class.md
@@ -4,10 +4,11 @@ title: "CWinTraitsOR Class"
ms.date: "11/04/2016"
f1_keywords: ["CWinTraitsOR", "ATLWIN/ATL::CWinTraitsOR", "ATLWIN/ATL::CWinTraitsOR::GetWndExStyle", "ATLWIN/ATL::CWinTraitsOR::GetWndStyle"]
helpviewer_keywords: ["CWinTraitsOR class", "window styles, default values for ATL"]
-ms.assetid: 1eb7b1e8-a9bd-411b-a30a-35a8a10af989
---
# CWinTraitsOR Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides a method for standardizing the styles used when creating a window object.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cwndclassinfo-class.md b/docs/atl/reference/cwndclassinfo-class.md
index 0ac47624556..4cbf31cfbf4 100644
--- a/docs/atl/reference/cwndclassinfo-class.md
+++ b/docs/atl/reference/cwndclassinfo-class.md
@@ -4,10 +4,11 @@ title: "CWndClassInfo Class"
ms.date: "11/04/2016"
f1_keywords: ["CWndClassInfo", "ATLWIN/ATL::CWndClassInfo", "ATLWIN/ATL::Register", "ATLWIN/ATL::m_atom", "ATLWIN/ATL::m_bSystemCursor", "ATLWIN/ATL::m_lpszCursorID", "ATLWIN/ATL::m_lpszOrigName", "ATLWIN/ATL::m_szAutoName", "ATLWIN/ATL::m_wc", "ATLWIN/ATL::pWndProc"]
helpviewer_keywords: ["CWndClassInfo class"]
-ms.assetid: c36fe7e1-75f1-4cf5-a06f-9f59c43fe6fb
---
# CWndClassInfo Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for registering information for a window class.
> [!IMPORTANT]
diff --git a/docs/atl/reference/cworkerthread-class.md b/docs/atl/reference/cworkerthread-class.md
index a0171833ba9..8e3c4e5cbb1 100644
--- a/docs/atl/reference/cworkerthread-class.md
+++ b/docs/atl/reference/cworkerthread-class.md
@@ -4,10 +4,11 @@ title: "CWorkerThread Class"
ms.date: "11/04/2016"
f1_keywords: ["CWorkerThread", "ATLUTIL/ATL::CWorkerThread", "ATLUTIL/ATL::CWorkerThread::CWorkerThread", "ATLUTIL/ATL::CWorkerThread::AddHandle", "ATLUTIL/ATL::CWorkerThread::AddTimer", "ATLUTIL/ATL::CWorkerThread::GetThreadHandle", "ATLUTIL/ATL::CWorkerThread::GetThreadId", "ATLUTIL/ATL::CWorkerThread::Initialize", "ATLUTIL/ATL::CWorkerThread::RemoveHandle", "ATLUTIL/ATL::CWorkerThread::Shutdown"]
helpviewer_keywords: ["CWorkerThread class"]
-ms.assetid: be79a832-1345-4a36-a13e-a406cc65286f
---
# CWorkerThread Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class creates a worker thread or uses an existing one, waits on one or more kernel object handles, and executes a specified client function when one of the handles is signaled.
> [!IMPORTANT]
diff --git a/docs/atl/reference/debugging-and-error-reporting-global-functions.md b/docs/atl/reference/debugging-and-error-reporting-global-functions.md
index defba9ea3c3..0d293887fd6 100644
--- a/docs/atl/reference/debugging-and-error-reporting-global-functions.md
+++ b/docs/atl/reference/debugging-and-error-reporting-global-functions.md
@@ -4,10 +4,11 @@ title: "Debugging and Error Reporting Global Functions"
ms.date: "11/04/2016"
f1_keywords: ["atlcomcli/ATL::AtlHresultFromLastError", "atlcom/ATL::AtlReportError", "atldef/ATL::AtlThrow"]
helpviewer_keywords: ["functions [ATL], error reporting"]
-ms.assetid: 11339c02-98cd-428d-b3b9-7deeb155a6a3
---
# Debugging and Error Reporting Global Functions
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These functions provide useful debugging and trace facilities.
|Name|Description|
diff --git a/docs/atl/reference/debugging-and-error-reporting-macros.md b/docs/atl/reference/debugging-and-error-reporting-macros.md
index 463ef4c0072..c5d43762cfc 100644
--- a/docs/atl/reference/debugging-and-error-reporting-macros.md
+++ b/docs/atl/reference/debugging-and-error-reporting-macros.md
@@ -4,10 +4,11 @@ title: "Debugging and Error Reporting Macros"
ms.date: "05/06/2019"
f1_keywords: ["atldef/ATL::_ATL_DEBUG_INTERFACES", "atldef/ATL::_ATL_DEBUG_QI", "atldef/ATL::ATLASSERT", "afx/ATL::ATLENSURE", "atltrace/ATL::ATLTRACENOTIMPL", "atltrace/ATL::ATLTRACE", "ATLDEF/_ATL_DEBUG_INTERFACES", "ATLDEF/_ATL_DEBUG_QI", "ATLDEF/ATLASSERT", "AFX/ATLENSURE", "ATLTRACE/ATLTRACENOTIMPL", "ATLTRACE/ATLTRACE", "ATLDEF/ATLSTATIC_ASSERT"]
helpviewer_keywords: ["macros, error reporting"]
-ms.assetid: 4da9b87f-ec5c-4a32-ab93-637780909b9d
---
# Debugging and Error Reporting Macros
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These macros provide useful debugging and trace facilities.
|Name|Description|
diff --git a/docs/atl/reference/default-atl-project-configurations.md b/docs/atl/reference/default-atl-project-configurations.md
index 0b8caec7af5..bca92e9bb53 100644
--- a/docs/atl/reference/default-atl-project-configurations.md
+++ b/docs/atl/reference/default-atl-project-configurations.md
@@ -3,10 +3,11 @@ description: "Learn more about: Default ATL Project Configurations"
title: "Default ATL Project Configurations"
ms.date: "10/20/2017"
helpviewer_keywords: ["ATL projects, default configurations"]
-ms.assetid: 7e272722-41af-4330-b965-a6d74ec16880
---
# Default ATL Project Configurations
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
The ATL Project Wizard creates two project configurations by default:
|Configuration|Character set|Use of ATL|
diff --git a/docs/atl/reference/device-context-global-functions.md b/docs/atl/reference/device-context-global-functions.md
index 7ef43f0431e..0720fd8042b 100644
--- a/docs/atl/reference/device-context-global-functions.md
+++ b/docs/atl/reference/device-context-global-functions.md
@@ -3,10 +3,11 @@ description: "Learn more about: Device Context Global Functions"
title: "Device Context Global Functions"
ms.date: "11/04/2016"
f1_keywords: ["atlwin/ATL::AtlCreateTargetDC"]
-ms.assetid: 08ec28f6-daff-4882-9544-e8a4639d05c4
---
# Device Context Global Functions
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This function creates a device context for a given device.
|Name|Description|
diff --git a/docs/atl/reference/event-handling-global-functions.md b/docs/atl/reference/event-handling-global-functions.md
index 69c6f619b65..f5948e23c2d 100644
--- a/docs/atl/reference/event-handling-global-functions.md
+++ b/docs/atl/reference/event-handling-global-functions.md
@@ -4,10 +4,11 @@ title: "Event Handling Global Functions"
ms.date: "11/04/2016"
f1_keywords: ["atlbase/ATL::AtlWaitWithMessageLoop"]
helpviewer_keywords: ["event handling, global functions", "global functions, event handling"]
-ms.assetid: fd674470-3def-47c3-be1c-894fa85f13e8
---
# Event Handling Global Functions
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This function provides an event handler.
> [!IMPORTANT]
diff --git a/docs/atl/reference/exception-handling-macros.md b/docs/atl/reference/exception-handling-macros.md
index 44f99934523..fe201b9e3a1 100644
--- a/docs/atl/reference/exception-handling-macros.md
+++ b/docs/atl/reference/exception-handling-macros.md
@@ -4,10 +4,11 @@ title: "Exception Handling Macros"
ms.date: "11/04/2016"
f1_keywords: ["atldef/ATL::_ATLCATCH", "atldef/ATL::_ATLCATCHALL", "atldef/ATL::_ATLTRY", "ATLDEF/_ATLCATCH", "ATLDEF/_ATLCATCHALL", "ATLDEF/_ATLTRY"]
helpviewer_keywords: ["exception handling, macros", "C++ exception handling, macros"]
-ms.assetid: a8385d34-3fb0-4006-a42a-de045cacf0f4
---
# Exception Handling Macros
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These macros provide support for exception handling.
|Name|Description|
diff --git a/docs/atl/reference/iatlautothreadmodule-class.md b/docs/atl/reference/iatlautothreadmodule-class.md
index 42df620330a..f83105ba786 100644
--- a/docs/atl/reference/iatlautothreadmodule-class.md
+++ b/docs/atl/reference/iatlautothreadmodule-class.md
@@ -4,10 +4,11 @@ title: "IAtlAutoThreadModule Class"
ms.date: "11/04/2016"
f1_keywords: ["IAtlAutoThreadModule", "atlbase/ATL::IAtlAutoThreadModule"]
helpviewer_keywords: ["IAtlAutoThreadModule class"]
-ms.assetid: fcb58cf9-a427-4be9-89eb-04e1ab5cc3a1
---
# IAtlAutoThreadModule Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class represents an interface to a `CreateInstance` method.
> [!IMPORTANT]
diff --git a/docs/atl/reference/iatlmemmgr-class.md b/docs/atl/reference/iatlmemmgr-class.md
index 46acd301740..5df51a5cfc1 100644
--- a/docs/atl/reference/iatlmemmgr-class.md
+++ b/docs/atl/reference/iatlmemmgr-class.md
@@ -4,10 +4,11 @@ title: "IAtlMemMgr Class"
ms.date: "11/04/2016"
f1_keywords: ["IAtlMemMgr", "ATLMEM/ATL::IAtlMemMgr", "ATLMEM/ATL::Allocate", "ATLMEM/ATL::Free", "ATLMEM/ATL::GetSize", "ATLMEM/ATL::Reallocate"]
helpviewer_keywords: ["IAtlMemMgr class", "memory, managing", "memory, memory manager"]
-ms.assetid: 18b2c569-25fe-4464-bdb6-3b1abef7154a
---
# IAtlMemMgr Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class represents the interface to a memory manager.
## Syntax
diff --git a/docs/atl/reference/iaxwinambientdispatch-interface.md b/docs/atl/reference/iaxwinambientdispatch-interface.md
index f1799cf5b26..4810d037297 100644
--- a/docs/atl/reference/iaxwinambientdispatch-interface.md
+++ b/docs/atl/reference/iaxwinambientdispatch-interface.md
@@ -4,10 +4,11 @@ title: "IAxWinAmbientDispatch Interface"
ms.date: "11/04/2016"
f1_keywords: ["IAxWinAmbientDispatch", "ATLIFACE/ATL::IAxWinAmbientDispatch", "ATLIFACE/ATL::get_AllowContextMenu", "ATLIFACE/ATL::get_AllowShowUI", "ATLIFACE/ATL::get_AllowWindowlessActivation", "ATLIFACE/ATL::get_BackColor", "ATLIFACE/ATL::get_DisplayAsDefault", "ATLIFACE/ATL::get_DocHostDoubleClickFlags", "ATLIFACE/ATL::get_DocHostFlags", "ATLIFACE/ATL::get_Font", "ATLIFACE/ATL::get_ForeColor", "ATLIFACE/ATL::get_LocaleID", "ATLIFACE/ATL::get_MessageReflect", "ATLIFACE/ATL::get_OptionKeyPath", "ATLIFACE/ATL::get_ShowGrabHandles", "ATLIFACE/ATL::get_ShowHatching", "ATLIFACE/ATL::get_UserMode", "ATLIFACE/ATL::put_AllowContextMenu", "ATLIFACE/ATL::put_AllowShowUI", "ATLIFACE/ATL::put_AllowWindowlessActivation", "ATLIFACE/ATL::put_BackColor", "ATLIFACE/ATL::put_DisplayAsDefault", "ATLIFACE/ATL::put_DocHostDoubleClickFlags", "ATLIFACE/ATL::put_DocHostFlags", "ATLIFACE/ATL::put_Font", "ATLIFACE/ATL::put_ForeColor", "ATLIFACE/ATL::put_LocaleID", "ATLIFACE/ATL::put_MessageReflect", "ATLIFACE/ATL::put_OptionKeyPath", "ATLIFACE/ATL::put_UserMode"]
helpviewer_keywords: ["IAxWinAmbientDispatch interface"]
-ms.assetid: 55ba6f7b-7a3c-4792-ae47-c8a84b683ca9
---
# IAxWinAmbientDispatch Interface
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This interface provides methods for specifying characteristics of the hosted control or container.
> [!IMPORTANT]
diff --git a/docs/atl/reference/iaxwinambientdispatchex-interface.md b/docs/atl/reference/iaxwinambientdispatchex-interface.md
index 4df19f4e982..45190ff5ecb 100644
--- a/docs/atl/reference/iaxwinambientdispatchex-interface.md
+++ b/docs/atl/reference/iaxwinambientdispatchex-interface.md
@@ -4,10 +4,11 @@ title: "IAxWinAmbientDispatchEx Interface"
ms.date: "11/04/2016"
f1_keywords: ["IAxWinAmbientDispatchEx", "ATLIFACE/ATL::IAxWinAmbientDispatchEx", "ATLIFACE/ATL::SetAmbientDispatch"]
helpviewer_keywords: ["IAxWinAmbientDispatchEx interface"]
-ms.assetid: 2c25e079-6128-4278-bc72-b2c6195ba7ef
---
# IAxWinAmbientDispatchEx Interface
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This interface implements supplemental ambient properties for a hosted control.
> [!IMPORTANT]
diff --git a/docs/atl/reference/iaxwinhostwindow-interface.md b/docs/atl/reference/iaxwinhostwindow-interface.md
index 38ea65043d6..9b981a96ee3 100644
--- a/docs/atl/reference/iaxwinhostwindow-interface.md
+++ b/docs/atl/reference/iaxwinhostwindow-interface.md
@@ -4,10 +4,11 @@ title: "IAxWinHostWindow Interface"
ms.date: "11/04/2016"
f1_keywords: ["IAxWinHostWindow", "ATLIFACE/ATL::IAxWinHostWindow", "ATLIFACE/ATL::AttachControl", "ATLIFACE/ATL::CreateControl", "ATLIFACE/ATL::CreateControlEx", "ATLIFACE/ATL::QueryControl", "ATLIFACE/ATL::SetExternalDispatch", "ATLIFACE/ATL::SetExternalUIHandler"]
helpviewer_keywords: ["IAxWinHostWindow interface"]
-ms.assetid: 9821c035-cd52-4c46-b58a-9278064f09b4
---
# IAxWinHostWindow Interface
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This interface provides methods for manipulating a control and its host object.
> [!IMPORTANT]
diff --git a/docs/atl/reference/iaxwinhostwindowlic-interface.md b/docs/atl/reference/iaxwinhostwindowlic-interface.md
index e2d65671f24..49479516988 100644
--- a/docs/atl/reference/iaxwinhostwindowlic-interface.md
+++ b/docs/atl/reference/iaxwinhostwindowlic-interface.md
@@ -4,10 +4,11 @@ title: "IAxWinHostWindowLic Interface"
ms.date: "11/04/2016"
f1_keywords: ["IAxWinHostWindowLic", "ATLIFACE/ATL::IAxWinHostWindowLic", "ATLIFACE/ATL::CreateControlLic", "ATLIFACE/ATL::CreateControlLicEx"]
helpviewer_keywords: ["IAxWinHostWindowLic interface"]
-ms.assetid: 750f1520-6bce-428c-aca0-fccbe3f063c7
---
# IAxWinHostWindowLic Interface
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This interface provides methods for manipulating a licensed control and its host object.
## Syntax
diff --git a/docs/atl/reference/icollectiononstlimpl-class.md b/docs/atl/reference/icollectiononstlimpl-class.md
index 58c7584c398..54377d23a95 100644
--- a/docs/atl/reference/icollectiononstlimpl-class.md
+++ b/docs/atl/reference/icollectiononstlimpl-class.md
@@ -4,10 +4,11 @@ title: "ICollectionOnSTLImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["ICollectionOnSTLImpl", "ATLCOM/ATL::ICollectionOnSTLImpl", "ATLCOM/ATL::ICollectionOnSTLImpl::get__NewEnum", "ATLCOM/ATL::ICollectionOnSTLImpl::getcount", "ATLCOM/ATL::ICollectionOnSTLImpl::get_Item", "ATLCOM/ATL::ICollectionOnSTLImpl::m_coll"]
helpviewer_keywords: ["ICollectionOnSTLImpl class"]
-ms.assetid: 683c88b0-0d97-4779-a762-e493334ba7f9
---
# ICollectionOnSTLImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods used by a collection class.
## Syntax
diff --git a/docs/atl/reference/iconnectionpointcontainerimpl-class.md b/docs/atl/reference/iconnectionpointcontainerimpl-class.md
index fd6e2362ee3..e7575eb5862 100644
--- a/docs/atl/reference/iconnectionpointcontainerimpl-class.md
+++ b/docs/atl/reference/iconnectionpointcontainerimpl-class.md
@@ -4,10 +4,11 @@ title: "IConnectionPointContainerImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["IConnectionPointContainerImpl", "ATLCOM/ATL::IConnectionPointContainerImpl", "ATLCOM/ATL::IConnectionPointContainerImpl::EnumConnectionPoints", "ATLCOM/ATL::IConnectionPointContainerImpl::FindConnectionPoint"]
helpviewer_keywords: ["connectable objects", "connection points [C++], container", "IConnectionPointContainerImpl class"]
-ms.assetid: 10db5a8d-8be9-4d9d-8a82-8ab9ffe3e9d6
---
# IConnectionPointContainerImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements a connection point container to manage a collection of [IConnectionPointImpl](../../atl/reference/iconnectionpointimpl-class.md) objects.
## Syntax
diff --git a/docs/atl/reference/iconnectionpointimpl-class.md b/docs/atl/reference/iconnectionpointimpl-class.md
index 2b51b7bc46c..01653837946 100644
--- a/docs/atl/reference/iconnectionpointimpl-class.md
+++ b/docs/atl/reference/iconnectionpointimpl-class.md
@@ -4,10 +4,11 @@ title: "IConnectionPointImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["IConnectionPointImpl", "ATLCOM/ATL::IConnectionPointImpl", "ATLCOM/ATL::IConnectionPointImpl::Advise", "ATLCOM/ATL::IConnectionPointImpl::EnumConnections", "ATLCOM/ATL::IConnectionPointImpl::GetConnectionInterface", "ATLCOM/ATL::IConnectionPointImpl::GetConnectionPointContainer", "ATLCOM/ATL::IConnectionPointImpl::Unadvise", "ATLCOM/ATL::IConnectionPointImpl::m_vec"]
helpviewer_keywords: ["connection points [C++], implementing", "IConnectionPointImpl class"]
-ms.assetid: 27992115-3b86-45dd-bc9e-54f32876c557
---
# IConnectionPointImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements a connection point.
## Syntax
diff --git a/docs/atl/reference/idataobjectimpl-class.md b/docs/atl/reference/idataobjectimpl-class.md
index 3ebc3c44024..66da64d27e2 100644
--- a/docs/atl/reference/idataobjectimpl-class.md
+++ b/docs/atl/reference/idataobjectimpl-class.md
@@ -4,10 +4,11 @@ title: "IDataObjectImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["IDataObjectImpl", "ATLCTL/ATL::IDataObjectImpl", "ATLCTL/ATL::IDataObjectImpl::DAdvise", "ATLCTL/ATL::IDataObjectImpl::DUnadvise", "ATLCTL/ATL::IDataObjectImpl::EnumDAdvise", "ATLCTL/ATL::IDataObjectImpl::EnumFormatEtc", "ATLCTL/ATL::IDataObjectImpl::FireDataChange", "ATLCTL/ATL::IDataObjectImpl::GetCanonicalFormatEtc", "ATLCTL/ATL::IDataObjectImpl::GetData", "ATLCTL/ATL::IDataObjectImpl::GetDataHere", "ATLCTL/ATL::IDataObjectImpl::QueryGetData", "ATLCTL/ATL::IDataObjectImpl::SetData"]
helpviewer_keywords: ["data transfer [C++]", "data transfer [C++], Uniform Data Transfer", "IDataObjectImpl class", "IDataObject, ATL implementation"]
-ms.assetid: b680f0f7-7795-40a1-a0f6-f48768201c89
---
# IDataObjectImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for supporting Uniform Data Transfer and managing connections.
> [!IMPORTANT]
diff --git a/docs/atl/reference/idispatchimpl-class.md b/docs/atl/reference/idispatchimpl-class.md
index e44623c7625..ee9891c47fb 100644
--- a/docs/atl/reference/idispatchimpl-class.md
+++ b/docs/atl/reference/idispatchimpl-class.md
@@ -4,10 +4,11 @@ title: "IDispatchImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["IDispatchImpl", "ATLCOM/ATL::IDispatchImpl", "ATLCOM/ATL::IDispatchImpl::IDispatchImpl", "ATLCOM/ATL::IDispatchImpl::GetIDsOfNames", "ATLCOM/ATL::IDispatchImpl::GetTypeInfo", "ATLCOM/ATL::IDispatchImpl::GetTypeInfoCount", "ATLCOM/ATL::IDispatchImpl::Invoke"]
helpviewer_keywords: ["dual interfaces, classes", "IDispatchImpl class", "IDispatch class support in ATL"]
-ms.assetid: 8108eb36-1228-4127-a203-3ab5ba488892
---
# IDispatchImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Provides a default implementation for the `IDispatch` part of a dual interface.
> [!IMPORTANT]
diff --git a/docs/atl/reference/idispeventimpl-class.md b/docs/atl/reference/idispeventimpl-class.md
index ef54c3c7b5c..fe3cb6578ab 100644
--- a/docs/atl/reference/idispeventimpl-class.md
+++ b/docs/atl/reference/idispeventimpl-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["IDispEventImpl class"]
---
# `IDispEventImpl` Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides implementations of the `IDispatch` methods.
> [!IMPORTANT]
diff --git a/docs/atl/reference/idispeventsimpleimpl-class.md b/docs/atl/reference/idispeventsimpleimpl-class.md
index c76ceee1297..4224ca90998 100644
--- a/docs/atl/reference/idispeventsimpleimpl-class.md
+++ b/docs/atl/reference/idispeventsimpleimpl-class.md
@@ -4,10 +4,11 @@ title: "IDispEventSimpleImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["IDispEventSimpleImpl", "ATLCOM/ATL::IDispEventSimpleImpl", "ATLCOM/ATL::IDispEventSimpleImpl::Advise", "ATLCOM/ATL::IDispEventSimpleImpl::DispEventAdvise", "ATLCOM/ATL::IDispEventSimpleImpl::DispEventUnadvise", "ATLCOM/ATL::IDispEventSimpleImpl::GetIDsOfNames", "ATLCOM/ATL::IDispEventSimpleImpl::GetTypeInfo", "ATLCOM/ATL::IDispEventSimpleImpl::GetTypeInfoCount", "ATLCOM/ATL::IDispEventSimpleImpl::Invoke", "ATLCOM/ATL::IDispEventSimpleImpl::Unadvise"]
helpviewer_keywords: ["IDispEventSimpleImpl class"]
-ms.assetid: 971d82b7-a921-47fa-a4d8-909bed377ab0
---
# IDispEventSimpleImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides implementations of the `IDispatch` methods, without getting type information from a type library.
> [!IMPORTANT]
diff --git a/docs/atl/reference/idochostuihandlerdispatch-interface.md b/docs/atl/reference/idochostuihandlerdispatch-interface.md
index d748d3e3df2..35749bfb535 100644
--- a/docs/atl/reference/idochostuihandlerdispatch-interface.md
+++ b/docs/atl/reference/idochostuihandlerdispatch-interface.md
@@ -4,10 +4,11 @@ title: "IDocHostUIHandlerDispatch Interface"
ms.date: "07/02/2019"
f1_keywords: ["IDocHostUIHandlerDispatch", "atlbase/ATL::IDocHostUIHandlerDispatch"]
helpviewer_keywords: ["IDocHostUIHandlerDispatch interface"]
-ms.assetid: 6963a301-601a-4ac3-8bef-f7b252ea2fc6
---
# IDocHostUIHandlerDispatch Interface
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
An interface to the Microsoft HTML parsing and rendering engine.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ienumonstlimpl-class.md b/docs/atl/reference/ienumonstlimpl-class.md
index c8c694372a0..99b2f3ab0b2 100644
--- a/docs/atl/reference/ienumonstlimpl-class.md
+++ b/docs/atl/reference/ienumonstlimpl-class.md
@@ -4,10 +4,11 @@ title: "IEnumOnSTLImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["IEnumOnSTLImpl", "ATLCOM/ATL::IEnumOnSTLImpl", "ATLCOM/ATL::IEnumOnSTLImpl::Clone", "ATLCOM/ATL::IEnumOnSTLImpl::Init", "ATLCOM/ATL::IEnumOnSTLImpl::Next", "ATLCOM/ATL::IEnumOnSTLImpl::Reset", "ATLCOM/ATL::IEnumOnSTLImpl::Skip", "ATLCOM/ATL::IEnumOnSTLImpl::m_iter", "ATLCOM/ATL::IEnumOnSTLImpl::m_pcollection", "ATLCOM/ATL::IEnumOnSTLImpl::m_spUnk"]
helpviewer_keywords: ["IEnumOnSTLImpl class"]
-ms.assetid: 1789e77b-88b8-447d-a490-806b918912ce
---
# IEnumOnSTLImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class defines an enumerator interface based on a C++ Standard Library collection.
## Syntax
diff --git a/docs/atl/reference/interfaces-atl-control-wizard.md b/docs/atl/reference/interfaces-atl-control-wizard.md
index 97794e03f9b..f27b167effe 100644
--- a/docs/atl/reference/interfaces-atl-control-wizard.md
+++ b/docs/atl/reference/interfaces-atl-control-wizard.md
@@ -4,10 +4,11 @@ title: "Interfaces, ATL Control Wizard"
ms.date: "11/04/2016"
f1_keywords: ["vc.codewiz.class.atl.control.interfaces"]
helpviewer_keywords: ["ATL Control Wizard, interfaces"]
-ms.assetid: 971eadcd-6a1e-46f2-b8fe-ee6b53dfe3ea
---
# Interfaces, ATL Control Wizard
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This page of the wizard identifies the interfaces that the control supports. By default, the supported interfaces are those typically used by most containers.
> [!NOTE]
diff --git a/docs/atl/reference/iobjectsafetyimpl-class.md b/docs/atl/reference/iobjectsafetyimpl-class.md
index dee092995fc..61f7cf4f394 100644
--- a/docs/atl/reference/iobjectsafetyimpl-class.md
+++ b/docs/atl/reference/iobjectsafetyimpl-class.md
@@ -4,10 +4,11 @@ title: "IObjectSafetyImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["IObjectSafetyImpl", "ATLCTL/ATL::IObjectSafetyImpl", "ATLCTL/ATL::IObjectSafetyImpl::GetInterfaceSafetyOptions", "ATLCTL/ATL::IObjectSafetyImpl::SetInterfaceSafetyOptions", "ATLCTL/ATL::IObjectSafetyImpl::m_dwCurrentSafety"]
helpviewer_keywords: ["controls [ATL], safe", "safe for scripting and initialization (controls)", "IObjectSafety, ATL implementation", "IObjectSafetyImpl class"]
-ms.assetid: 64e32082-d910-4a8a-a5bf-ebed9145359d
---
# IObjectSafetyImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides a default implementation of the `IObjectSafety` interface to allow a client to retrieve and set an object's safety levels.
> [!IMPORTANT]
diff --git a/docs/atl/reference/iobjectwithsiteimpl-class.md b/docs/atl/reference/iobjectwithsiteimpl-class.md
index 5ae9a4b8d7c..3d686a03d63 100644
--- a/docs/atl/reference/iobjectwithsiteimpl-class.md
+++ b/docs/atl/reference/iobjectwithsiteimpl-class.md
@@ -4,10 +4,11 @@ title: "IObjectWithSiteImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["IObjectWithSiteImpl", "ATLCOM/ATL::IObjectWithSiteImpl", "ATLCOM/ATL::IObjectWithSiteImpl::GetSite", "ATLCOM/ATL::IObjectWithSiteImpl::SetChildSite", "ATLCOM/ATL::IObjectWithSiteImpl::SetSite", "ATLCOM/ATL::IObjectWithSiteImpl::m_spUnkSite"]
helpviewer_keywords: ["IObjectWithSiteImpl class"]
-ms.assetid: 4e1f774f-bc3d-45ee-9a1c-c3533a511588
---
# IObjectWithSiteImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods allowing an object to communicate with its site.
## Syntax
diff --git a/docs/atl/reference/iolecontrolimpl-class.md b/docs/atl/reference/iolecontrolimpl-class.md
index 6c3430e9ceb..d1e7e97f595 100644
--- a/docs/atl/reference/iolecontrolimpl-class.md
+++ b/docs/atl/reference/iolecontrolimpl-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["IOleControlImpl class"]
---
# IOleControlImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides a default implementation of the `IOleControl` interface and implements `IUnknown`.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ioleinplaceactiveobjectimpl-class.md b/docs/atl/reference/ioleinplaceactiveobjectimpl-class.md
index 64fcdcd25bf..b275380a09b 100644
--- a/docs/atl/reference/ioleinplaceactiveobjectimpl-class.md
+++ b/docs/atl/reference/ioleinplaceactiveobjectimpl-class.md
@@ -4,10 +4,11 @@ title: "IOleInPlaceActiveObjectImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["IOleInPlaceActiveObjectImpl", "ATLCTL/ATL::IOleInPlaceActiveObjectImpl", "ATLCTL/ATL::IOleInPlaceActiveObjectImpl::ContextSensitiveHelp", "ATLCTL/ATL::IOleInPlaceActiveObjectImpl::EnableModeless", "ATLCTL/ATL::IOleInPlaceActiveObjectImpl::GetWindow", "ATLCTL/ATL::IOleInPlaceActiveObjectImpl::OnDocWindowActivate", "ATLCTL/ATL::IOleInPlaceActiveObjectImpl::OnFrameWindowActivate", "ATLCTL/ATL::IOleInPlaceActiveObjectImpl::ResizeBorder", "ATLCTL/ATL::IOleInPlaceActiveObjectImpl::TranslateAccelerator"]
helpviewer_keywords: ["IOleInPlaceActiveObjectImpl class", "ActiveX controls [C++], communication between container and control", "IOleInPlaceActiveObject, ATL implementation"]
-ms.assetid: 44e6cc6d-a2dc-4187-98e3-73cf0320dea9
---
# IOleInPlaceActiveObjectImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides methods for assisting communication between an in-place control and its container.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ioleinplaceobjectwindowlessimpl-class.md b/docs/atl/reference/ioleinplaceobjectwindowlessimpl-class.md
index d34f0d80b9b..d4307e69f4c 100644
--- a/docs/atl/reference/ioleinplaceobjectwindowlessimpl-class.md
+++ b/docs/atl/reference/ioleinplaceobjectwindowlessimpl-class.md
@@ -4,10 +4,11 @@ title: "IOleInPlaceObjectWindowlessImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["IOleInPlaceObjectWindowlessImpl", "ATLCTL/ATL::IOleInPlaceObjectWindowlessImpl", "ATLCTL/ATL::IOleInPlaceObjectWindowlessImpl::ContextSensitiveHelp", "ATLCTL/ATL::IOleInPlaceObjectWindowlessImpl::GetDropTarget", "ATLCTL/ATL::IOleInPlaceObjectWindowlessImpl::GetWindow", "ATLCTL/ATL::IOleInPlaceObjectWindowlessImpl::InPlaceDeactivate", "ATLCTL/ATL::IOleInPlaceObjectWindowlessImpl::OnWindowMessage", "ATLCTL/ATL::IOleInPlaceObjectWindowlessImpl::ReactivateAndUndo", "ATLCTL/ATL::IOleInPlaceObjectWindowlessImpl::SetObjectRects", "ATLCTL/ATL::IOleInPlaceObjectWindowlessImpl::UIDeactivate"]
helpviewer_keywords: ["IOleInPlaceObjectWindowless, ATL implementation", "activation [C++], ATL", "IOleInPlaceObjectWindowlessImpl class", "ActiveX controls [C++], communication between container and control", "controls [ATL], windowless", "deactivating ATL"]
-ms.assetid: a2e0feb4-bc59-4adf-aab2-105457bbdbb4
---
# IOleInPlaceObjectWindowlessImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements `IUnknown` and provides methods that enable a windowless control to receive window messages and to participate in drag-and-drop operations.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ioleobjectimpl-class.md b/docs/atl/reference/ioleobjectimpl-class.md
index 888f9c0db98..42349e85a20 100644
--- a/docs/atl/reference/ioleobjectimpl-class.md
+++ b/docs/atl/reference/ioleobjectimpl-class.md
@@ -4,10 +4,11 @@ title: "IOleObjectImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["IOleObjectImpl", "ATLCTL/ATL::IOleObjectImpl", "ATLCTL/ATL::IOleObjectImpl::Advise", "ATLCTL/ATL::IOleObjectImpl::Close", "ATLCTL/ATL::IOleObjectImpl::DoVerb", "ATLCTL/ATL::IOleObjectImpl::DoVerbDiscardUndo", "ATLCTL/ATL::IOleObjectImpl::DoVerbHide", "ATLCTL/ATL::IOleObjectImpl::DoVerbInPlaceActivate", "ATLCTL/ATL::IOleObjectImpl::DoVerbOpen", "ATLCTL/ATL::IOleObjectImpl::DoVerbPrimary", "ATLCTL/ATL::IOleObjectImpl::DoVerbShow", "ATLCTL/ATL::IOleObjectImpl::DoVerbUIActivate", "ATLCTL/ATL::IOleObjectImpl::EnumAdvise", "ATLCTL/ATL::IOleObjectImpl::EnumVerbs", "ATLCTL/ATL::IOleObjectImpl::GetClientSite", "ATLCTL/ATL::IOleObjectImpl::GetClipboardData", "ATLCTL/ATL::IOleObjectImpl::GetExtent", "ATLCTL/ATL::IOleObjectImpl::GetMiscStatus", "ATLCTL/ATL::IOleObjectImpl::GetMoniker", "ATLCTL/ATL::IOleObjectImpl::GetUserClassID", "ATLCTL/ATL::IOleObjectImpl::GetUserType", "ATLCTL/ATL::IOleObjectImpl::InitFromData", "ATLCTL/ATL::IOleObjectImpl::IsUpToDate", "ATLCTL/ATL::IOleObjectImpl::OnPostVerbDiscardUndo", "ATLCTL/ATL::IOleObjectImpl::OnPostVerbHide", "ATLCTL/ATL::IOleObjectImpl::OnPostVerbInPlaceActivate", "ATLCTL/ATL::IOleObjectImpl::OnPostVerbOpen", "ATLCTL/ATL::IOleObjectImpl::OnPostVerbShow", "ATLCTL/ATL::IOleObjectImpl::OnPostVerbUIActivate", "ATLCTL/ATL::IOleObjectImpl::OnPreVerbDiscardUndo", "ATLCTL/ATL::IOleObjectImpl::OnPreVerbHide", "ATLCTL/ATL::IOleObjectImpl::OnPreVerbInPlaceActivate", "ATLCTL/ATL::IOleObjectImpl::OnPreVerbOpen", "ATLCTL/ATL::IOleObjectImpl::OnPreVerbShow", "ATLCTL/ATL::IOleObjectImpl::OnPreVerbUIActivate", "ATLCTL/ATL::IOleObjectImpl::SetClientSite", "ATLCTL/ATL::IOleObjectImpl::SetColorScheme", "ATLCTL/ATL::IOleObjectImpl::SetExtent", "ATLCTL/ATL::IOleObjectImpl::SetHostNames", "ATLCTL/ATL::IOleObjectImpl::SetMoniker", "ATLCTL/ATL::IOleObjectImpl::Unadvise", "ATLCTL/ATL::IOleObjectImpl::Update"]
helpviewer_keywords: ["ActiveX controls [C++], communication between container and control", "IOleObject, ATL implementation", "IOleObjectImpl class"]
-ms.assetid: 59750b2d-1633-4a51-a4c2-6455b6b90c45
---
# IOleObjectImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements `IUnknown` and is the principal interface through which a container communicates with a control.
> [!IMPORTANT]
diff --git a/docs/atl/reference/iperpropertybrowsingimpl-class.md b/docs/atl/reference/iperpropertybrowsingimpl-class.md
index c5f0e2678ed..c1ca3e087dc 100644
--- a/docs/atl/reference/iperpropertybrowsingimpl-class.md
+++ b/docs/atl/reference/iperpropertybrowsingimpl-class.md
@@ -4,10 +4,11 @@ title: "IPerPropertyBrowsingImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["IPerPropertyBrowsingImpl", "ATLCTL/ATL::IPerPropertyBrowsingImpl", "ATLCTL/ATL::IPerPropertyBrowsingImpl::GetDisplayString", "ATLCTL/ATL::IPerPropertyBrowsingImpl::GetPredefinedStrings", "ATLCTL/ATL::IPerPropertyBrowsingImpl::GetPredefinedValue", "ATLCTL/ATL::IPerPropertyBrowsingImpl::MapPropertyToPage"]
helpviewer_keywords: ["IPerPropertyBrowsingImpl class", "property pages, accessing information", "IPerPropertyBrowsing, ATL implementation"]
-ms.assetid: 0b1a9be3-d242-4767-be69-663a21e4b728
---
# IPerPropertyBrowsingImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements `IUnknown` and allows a client to access the information in an object's property pages.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ipersistpropertybagimpl-class.md b/docs/atl/reference/ipersistpropertybagimpl-class.md
index b9029c339df..84fb6c38136 100644
--- a/docs/atl/reference/ipersistpropertybagimpl-class.md
+++ b/docs/atl/reference/ipersistpropertybagimpl-class.md
@@ -4,10 +4,11 @@ title: "IPersistPropertyBagImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["IPersistPropertyBagImpl", "ATLCOM/ATL::IPersistPropertyBagImpl", "ATLCOM/ATL::IPersistPropertyBagImpl::GetClassID", "ATLCOM/ATL::IPersistPropertyBagImpl::InitNew", "ATLCOM/ATL::IPersistPropertyBagImpl::Load", "ATLCOM/ATL::IPersistPropertyBagImpl::Save"]
helpviewer_keywords: ["IPersistPropertyBagImpl class"]
-ms.assetid: 712af24d-99f8-40f2-9811-53b3ff6e5b19
---
# IPersistPropertyBagImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements `IUnknown` and allows an object to save its properties to a client-supplied property bag.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ipersiststorageimpl-class.md b/docs/atl/reference/ipersiststorageimpl-class.md
index a5396bee533..ae95395147b 100644
--- a/docs/atl/reference/ipersiststorageimpl-class.md
+++ b/docs/atl/reference/ipersiststorageimpl-class.md
@@ -7,6 +7,8 @@ helpviewer_keywords: ["storage, ATL", "IPersistStorageImpl class"]
---
# IPersistStorageImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements the [IPersistStorage](/windows/win32/api/objidl/nn-objidl-ipersiststorage) interface.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ipersiststreaminitimpl-class.md b/docs/atl/reference/ipersiststreaminitimpl-class.md
index 3eab5ba63c0..cf426de9552 100644
--- a/docs/atl/reference/ipersiststreaminitimpl-class.md
+++ b/docs/atl/reference/ipersiststreaminitimpl-class.md
@@ -4,10 +4,11 @@ title: "IPersistStreamInitImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["IPersistStreamInitImpl", "ATLCOM/ATL::IPersistStreamInitImpl", "ATLCOM/ATL::IPersistStreamInitImpl::GetClassID", "ATLCOM/ATL::IPersistStreamInitImpl::GetSizeMax", "ATLCOM/ATL::IPersistStreamInitImpl::InitNew", "ATLCOM/ATL::IPersistStreamInitImpl::IsDirty", "ATLCOM/ATL::IPersistStreamInitImpl::Load", "ATLCOM/ATL::IPersistStreamInitImpl::Save"]
helpviewer_keywords: ["IPersistStreamInit ATL implementation", "IPersistStreamInitImpl class", "streams, ATL"]
-ms.assetid: ef217c3c-020f-4cf8-871e-ef68e57865b8
---
# IPersistStreamInitImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements `IUnknown` and provides a default implementation of the [IPersistStreamInit](/windows/win32/api/ocidl/nn-ocidl-ipersiststreaminit) interface.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ipointerinactiveimpl-class.md b/docs/atl/reference/ipointerinactiveimpl-class.md
index 71189491246..ed5fa3495e3 100644
--- a/docs/atl/reference/ipointerinactiveimpl-class.md
+++ b/docs/atl/reference/ipointerinactiveimpl-class.md
@@ -4,10 +4,11 @@ title: "IPointerInactiveImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["IPointerInactiveImpl", "ATLCTL/ATL::IPointerInactiveImpl", "ATLCTL/ATL::IPointerInactiveImpl::GetActivationPolicy", "ATLCTL/ATL::IPointerInactiveImpl::OnInactiveMouseMove", "ATLCTL/ATL::IPointerInactiveImpl::OnInactiveSetCursor"]
helpviewer_keywords: ["IPointerInactive ATL implementation", "inactive objects", "IPointerInactiveImpl class"]
-ms.assetid: e1fe9ea6-d38a-4527-9112-eb344771e0b7
---
# IPointerInactiveImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements `IUnknown` and the [IPointerInactive](/windows/win32/api/ocidl/nn-ocidl-ipointerinactive) interface methods.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ipropertynotifysinkcp-class.md b/docs/atl/reference/ipropertynotifysinkcp-class.md
index b02d41d33b0..d4a74b402a9 100644
--- a/docs/atl/reference/ipropertynotifysinkcp-class.md
+++ b/docs/atl/reference/ipropertynotifysinkcp-class.md
@@ -4,10 +4,11 @@ title: "IPropertyNotifySinkCP Class"
ms.date: "11/04/2016"
f1_keywords: ["IPropertyNotifySinkCP", "atlctl/ATL::IPropertyNotifySinkCP"]
helpviewer_keywords: ["connection points [C++], managing", "sinks, notifying of changes", "IPropertyNotifySinkCP class"]
-ms.assetid: 1b41445e-bc88-4fa6-bb62-d68aacec2bd5
---
# IPropertyNotifySinkCP Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class exposes [IPropertyNotifySink](/windows/win32/api/ocidl/nn-ocidl-ipropertynotifysink) interface as an outgoing interface on a connectable object.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ipropertypage2impl-class.md b/docs/atl/reference/ipropertypage2impl-class.md
index f39eac4e87e..412048f8778 100644
--- a/docs/atl/reference/ipropertypage2impl-class.md
+++ b/docs/atl/reference/ipropertypage2impl-class.md
@@ -4,10 +4,11 @@ title: "IPropertyPage2Impl Class"
ms.date: "11/04/2016"
f1_keywords: ["IPropertyPage2Impl", "ATLCTL/ATL::IPropertyPage2Impl", "ATLCTL/ATL::IPropertyPage2Impl::EditProperty"]
helpviewer_keywords: ["property pages", "IPropertyPage2 ATL implementation", "IPropertyPage2Impl class"]
-ms.assetid: e89fbe90-203a-47f0-a5de-23616697e1ce
---
# IPropertyPage2Impl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements `IUnknown` and inherits the default implementation of [IPropertyPageImpl](../../atl/reference/ipropertypageimpl-class.md).
> [!IMPORTANT]
diff --git a/docs/atl/reference/ipropertypageimpl-class.md b/docs/atl/reference/ipropertypageimpl-class.md
index 8b217ed0d02..0cd5e4d87bf 100644
--- a/docs/atl/reference/ipropertypageimpl-class.md
+++ b/docs/atl/reference/ipropertypageimpl-class.md
@@ -4,10 +4,11 @@ title: "IPropertyPageImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["IPropertyPageImpl", "ATLCTL/ATL::IPropertyPageImpl", "ATLCTL/ATL::IPropertyPageImpl::IPropertyPageImpl", "ATLCTL/ATL::IPropertyPageImpl::Activate", "ATLCTL/ATL::IPropertyPageImpl::Apply", "ATLCTL/ATL::IPropertyPageImpl::Deactivate", "ATLCTL/ATL::IPropertyPageImpl::GetPageInfo", "ATLCTL/ATL::IPropertyPageImpl::Help", "ATLCTL/ATL::IPropertyPageImpl::IsPageDirty", "ATLCTL/ATL::IPropertyPageImpl::Move", "ATLCTL/ATL::IPropertyPageImpl::SetDirty", "ATLCTL/ATL::IPropertyPageImpl::SetObjects", "ATLCTL/ATL::IPropertyPageImpl::SetPageSite", "ATLCTL/ATL::IPropertyPageImpl::Show", "ATLCTL/ATL::IPropertyPageImpl::TranslateAccelerator", "ATLCTL/ATL::IPropertyPageImpl::m_bDirty", "ATLCTL/ATL::IPropertyPageImpl::m_dwDocString", "ATLCTL/ATL::IPropertyPageImpl::m_dwHelpContext", "ATLCTL/ATL::IPropertyPageImpl::m_dwHelpFile", "ATLCTL/ATL::IPropertyPageImpl::m_dwTitle", "ATLCTL/ATL::IPropertyPageImpl::m_nObjects", "ATLCTL/ATL::IPropertyPageImpl::m_pPageSite", "ATLCTL/ATL::IPropertyPageImpl::m_ppUnk", "ATLCTL/ATL::IPropertyPageImpl::m_size"]
helpviewer_keywords: ["property pages", "IPropertyPage ATL implementation", "IPropertyPageImpl class"]
-ms.assetid: f9b7c8b1-7a04-4eab-aa63-63efddb740fa
---
# IPropertyPageImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements `IUnknown` and provides a default implementation of the [IPropertyPage](/windows/win32/api/ocidl/nn-ocidl-ipropertypage) interface.
> [!IMPORTANT]
diff --git a/docs/atl/reference/iprovideclassinfo2impl-class.md b/docs/atl/reference/iprovideclassinfo2impl-class.md
index c700c6a2809..3115d96f8e1 100644
--- a/docs/atl/reference/iprovideclassinfo2impl-class.md
+++ b/docs/atl/reference/iprovideclassinfo2impl-class.md
@@ -4,10 +4,11 @@ title: "IProvideClassInfo2Impl Class"
ms.date: "11/04/2016"
f1_keywords: ["IProvideClassInfo2Impl", "ATLCOM/ATL::IProvideClassInfo2Impl", "ATLCOM/ATL::IProvideClassInfo2Impl::IProvideClassInfo2Impl", "ATLCOM/ATL::IProvideClassInfo2Impl::GetClassInfo", "ATLCOM/ATL::IProvideClassInfo2Impl::GetGUID", "ATLCOM/ATL::IProvideClassInfo2Impl::_tih"]
helpviewer_keywords: ["IProvideClassInfo2Impl class", "IProvideClassInfo2 ATL implementation", "class information, ATL"]
-ms.assetid: d74956e8-9c69-4cba-b99d-ca1ac031bb9d
---
# IProvideClassInfo2Impl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides a default implementation of the [IProvideClassInfo](/windows/win32/api/ocidl/nn-ocidl-iprovideclassinfo) and [IProvideClassInfo2](/windows/win32/api/ocidl/nn-ocidl-iprovideclassinfo2) methods.
## Syntax
diff --git a/docs/atl/reference/iquickactivateimpl-class.md b/docs/atl/reference/iquickactivateimpl-class.md
index 55d408feadc..88ea87bc8d8 100644
--- a/docs/atl/reference/iquickactivateimpl-class.md
+++ b/docs/atl/reference/iquickactivateimpl-class.md
@@ -4,10 +4,11 @@ title: "IQuickActivateImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["IQuickActivateImpl", "ATLCTL/ATL::IQuickActivateImpl", "ATLCTL/ATL::IQuickActivateImpl::GetContentExtent", "ATLCTL/ATL::IQuickActivateImpl::QuickActivate", "ATLCTL/ATL::IQuickActivateImpl::SetContentExtent"]
helpviewer_keywords: ["activating ATL controls", "controls [ATL], activating", "IQuickActivateImpl class", "IQuickActivate ATL implementation"]
-ms.assetid: aa80c056-1041-494e-b21d-2acca7dc27ea
---
# IQuickActivateImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class combines containers' control initialization into a single call.
> [!IMPORTANT]
diff --git a/docs/atl/reference/iregistrar-class.md b/docs/atl/reference/iregistrar-class.md
index 9c3ca2a9805..5f8c8909e23 100644
--- a/docs/atl/reference/iregistrar-class.md
+++ b/docs/atl/reference/iregistrar-class.md
@@ -4,10 +4,11 @@ title: "IRegistrar Interface"
ms.date: "02/01/2017"
f1_keywords: ["IRegistrar", "ATLIFASE/ATL::IRegistrar", "ATLIFASE/ATL::IRegistrar::ResourceRegisterSz", "ATLIFASE/ATL::IRegistrar::ResourceUnregisterSz", "ATLIFASE/ATL::IRegistrar::FileRegister", "ATLIFASE/ATL::IRegistrar::FileUnregister", "ATLIFASE/ATL::IRegistrar::StringRegister", "ATLIFASE/ATL::IRegistrar::StringUnregister", "ATLIFASE/ATL::IRegistrar::ResourceRegister", "ATLIFASE/ATL::IRegistrar::ResourceUnregister"]
helpviewer_keywords: ["Iregistrar Interface"]
-ms.assetid: e88c04b7-0c93-4ae8-aeb9-ecd78f87421e
---
# IRegistrar Interface
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This interface is defined in atliface.h and is used internally by CAtlModule member functions such as [UpdateRegistryFromResourceD](catlmodule-class.md#updateregistryfromresourced).
## Syntax
diff --git a/docs/atl/reference/irunnableobjectimpl-class.md b/docs/atl/reference/irunnableobjectimpl-class.md
index 77b26a50729..ad0058aeb3c 100644
--- a/docs/atl/reference/irunnableobjectimpl-class.md
+++ b/docs/atl/reference/irunnableobjectimpl-class.md
@@ -4,10 +4,11 @@ title: "IRunnableObjectImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["IRunnableObjectImpl", "ATLCTL/ATL::IRunnableObjectImpl", "ATLCTL/ATL::IRunnableObjectImpl::GetRunningClass", "ATLCTL/ATL::IRunnableObjectImpl::IsRunning", "ATLCTL/ATL::IRunnableObjectImpl::LockRunning", "ATLCTL/ATL::IRunnableObjectImpl::Run", "ATLCTL/ATL::IRunnableObjectImpl::SetContainedObject"]
helpviewer_keywords: ["containers, running controls", "IRunnableObjectImpl class", "IRunnableObject, ATL implementation", "controls [ATL], running", "controls [C++], container running in ATL"]
-ms.assetid: 305c7c3b-889e-49dd-aca1-34379c1b9931
---
# IRunnableObjectImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements `IUnknown` and provides a default implementation of the [IRunnableObject](/windows/win32/api/objidl/nn-objidl-irunnableobject) interface.
> [!IMPORTANT]
diff --git a/docs/atl/reference/iserviceproviderimpl-class.md b/docs/atl/reference/iserviceproviderimpl-class.md
index 6cd8822fddc..682901b2c7d 100644
--- a/docs/atl/reference/iserviceproviderimpl-class.md
+++ b/docs/atl/reference/iserviceproviderimpl-class.md
@@ -4,10 +4,11 @@ title: "IServiceProviderImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["IServiceProviderImpl", "ATLCOM/ATL::IServiceProviderImpl", "ATLCOM/ATL::IServiceProviderImpl::QueryService"]
helpviewer_keywords: ["IServiceProviderImpl class", "IServiceProvider interface, ATL implementation"]
-ms.assetid: 251254d3-c4ce-40d7-aee0-3d676d1d72f2
---
# IServiceProviderImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides a default implementation of the `IServiceProvider` interface.
## Syntax
diff --git a/docs/atl/reference/ispecifypropertypagesimpl-class.md b/docs/atl/reference/ispecifypropertypagesimpl-class.md
index ae7b4481938..5549949feed 100644
--- a/docs/atl/reference/ispecifypropertypagesimpl-class.md
+++ b/docs/atl/reference/ispecifypropertypagesimpl-class.md
@@ -4,10 +4,11 @@ title: "ISpecifyPropertyPagesImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["ISpecifyPropertyPagesImpl", "ATLCOM/ATL::ISpecifyPropertyPagesImpl", "ATLCOM/ATL::ISpecifyPropertyPagesImpl::GetPages"]
helpviewer_keywords: ["property pages, CLSIDs associated with", "ISpecifyPropertyPages", "ISpecifyPropertyPagesImpl class"]
-ms.assetid: 4e4b9795-b656-4d56-9b8c-85941e7731f9
---
# ISpecifyPropertyPagesImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements `IUnknown` and provides a default implementation of the [ISpecifyPropertyPages](/windows/win32/api/ocidl/nn-ocidl-ispecifypropertypages) interface.
> [!IMPORTANT]
diff --git a/docs/atl/reference/isupporterrorinfoimpl-class.md b/docs/atl/reference/isupporterrorinfoimpl-class.md
index b9146cc6cf8..b9b4bcdb872 100644
--- a/docs/atl/reference/isupporterrorinfoimpl-class.md
+++ b/docs/atl/reference/isupporterrorinfoimpl-class.md
@@ -4,10 +4,11 @@ title: "ISupportErrorInfoImpl Class"
ms.date: "06/13/2019"
f1_keywords: ["ISupportErrorInfoImpl", "ATLCOM/ATL::ISupportErrorInfoImpl", "ATLCOM/ATL::ISupportErrorInfoImpl::InterfaceSupportsErrorInfo"]
helpviewer_keywords: ["ISupportErrorInfo ATL implementation", "ISupportErrorInfoImpl class", "error information, ATL"]
-ms.assetid: e33a4b11-a123-41cf-bcea-7b19743902af
---
# ISupportErrorInfoImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides a default implementation of the [ISupportErrorInfo Interface](/windows/win32/api/oaidl/nn-oaidl-isupporterrorinfo) and can be used when only a single interface generates errors on an object.
> [!IMPORTANT]
diff --git a/docs/atl/reference/ithreadpoolconfig-interface.md b/docs/atl/reference/ithreadpoolconfig-interface.md
index 3a3411e1366..1061b138d72 100644
--- a/docs/atl/reference/ithreadpoolconfig-interface.md
+++ b/docs/atl/reference/ithreadpoolconfig-interface.md
@@ -4,10 +4,11 @@ title: "IThreadPoolConfig Interface"
ms.date: "11/04/2016"
f1_keywords: ["IThreadPoolConfig", "ATLUTIL/ATL::IThreadPoolConfig", "ATLUTIL/ATL::GetSize", "ATLUTIL/ATL::GetTimeout", "ATLUTIL/ATL::SetSize", "ATLUTIL/ATL::SetTimeout"]
helpviewer_keywords: ["IThreadPoolConfig interface"]
-ms.assetid: 69e642bf-6925-46e6-9a37-cce52231b1cc
---
# IThreadPoolConfig Interface
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This interface provides methods for configuring a thread pool.
> [!IMPORTANT]
diff --git a/docs/atl/reference/iviewobjecteximpl-class.md b/docs/atl/reference/iviewobjecteximpl-class.md
index ad03e3ac103..b2faac4bb81 100644
--- a/docs/atl/reference/iviewobjecteximpl-class.md
+++ b/docs/atl/reference/iviewobjecteximpl-class.md
@@ -4,10 +4,11 @@ title: "IViewObjectExImpl Class"
ms.date: "11/04/2016"
f1_keywords: ["IViewObjectExImpl", "ATLCTL/ATL::IViewObjectExImpl", "ATLCTL/ATL::IViewObjectExImpl::Draw", "ATLCTL/ATL::IViewObjectExImpl::Freeze", "ATLCTL/ATL::IViewObjectExImpl::GetAdvise", "ATLCTL/ATL::IViewObjectExImpl::GetColorSet", "ATLCTL/ATL::IViewObjectExImpl::GetExtent", "ATLCTL/ATL::IViewObjectExImpl::GetNaturalExtent", "ATLCTL/ATL::IViewObjectExImpl::GetRect", "ATLCTL/ATL::IViewObjectExImpl::GetViewStatus", "ATLCTL/ATL::IViewObjectExImpl::QueryHitPoint", "ATLCTL/ATL::IViewObjectExImpl::QueryHitRect", "ATLCTL/ATL::IViewObjectExImpl::SetAdvise", "ATLCTL/ATL::IViewObjectExImpl::Unfreeze"]
helpviewer_keywords: ["ActiveX controls [C++], drawing", "IViewObjectEx ATL implementation", "advise sinks", "IViewObjectExImpl class"]
-ms.assetid: ad6de760-1ee5-4883-b033-ae57beffc369
---
# IViewObjectExImpl Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class implements `IUnknown` and provides default implementations of the [IViewObject](/windows/win32/api/oleidl/nn-oleidl-iviewobject), [IViewObject2](/windows/win32/api/oleidl/nn-oleidl-iviewobject2), and [IViewObjectEx](/windows/win32/api/ocidl/nn-ocidl-iviewobjectex) interfaces.
> [!IMPORTANT]
diff --git a/docs/atl/reference/iworkerthreadclient-interface.md b/docs/atl/reference/iworkerthreadclient-interface.md
index c962eb0cdf8..46cf241e897 100644
--- a/docs/atl/reference/iworkerthreadclient-interface.md
+++ b/docs/atl/reference/iworkerthreadclient-interface.md
@@ -4,10 +4,11 @@ title: "IWorkerThreadClient Interface"
ms.date: "11/04/2016"
f1_keywords: ["IWorkerThreadClient", "ATLUTIL/ATL::IWorkerThreadClient", "ATLUTIL/ATL::CloseHandle", "ATLUTIL/ATL::Execute"]
helpviewer_keywords: ["IWorkerThreadClient interface"]
-ms.assetid: 56f4a2f5-007e-4a33-9e20-05187629f715
---
# IWorkerThreadClient Interface
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
`IWorkerThreadClient` is the interface implemented by clients of the [CWorkerThread](../../atl/reference/cworkerthread-class.md) class.
> [!IMPORTANT]
diff --git a/docs/atl/reference/making-an-atl-object-noncreatable.md b/docs/atl/reference/making-an-atl-object-noncreatable.md
index 6a144323321..cda5e5b2a71 100644
--- a/docs/atl/reference/making-an-atl-object-noncreatable.md
+++ b/docs/atl/reference/making-an-atl-object-noncreatable.md
@@ -4,10 +4,11 @@ title: "Making an ATL Object Noncreatable"
ms.date: "11/04/2016"
f1_keywords: ["vc.appwiz.ATL.objects"]
helpviewer_keywords: ["noncreatable ATL objects", "ATL projects, noncreatable objects"]
-ms.assetid: 80d0bca2-dea0-4801-9a85-6243124437f6
---
# Making an ATL Object Noncreatable
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
You can change the attributes of an ATL-based COM object so that a client cannot directly create the object. In this case, the object would be returned through a method call on another object rather than created directly.
## To make an object noncreatable
diff --git a/docs/atl/reference/marshaling-global-functions.md b/docs/atl/reference/marshaling-global-functions.md
index 74ec8bf7143..721a8e52101 100644
--- a/docs/atl/reference/marshaling-global-functions.md
+++ b/docs/atl/reference/marshaling-global-functions.md
@@ -3,10 +3,11 @@ description: "Learn more about: Marshaling Global Functions"
title: "Marshaling Global Functions"
ms.date: "11/04/2016"
f1_keywords: ["atlbase/ATL::AtlFreeMarshalStream", "atlbase/ATL::AtlMarshalPtrInProc", "atlbase/ATL::AtlUnmarshalPtr"]
-ms.assetid: 877100b5-6ad9-44c5-a2e0-09414f1720d0
---
# Marshaling Global Functions
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These functions provide support for marshaling and converting marshaling data into interface pointers.
> [!IMPORTANT]
diff --git a/docs/atl/reference/message-map-macros-atl.md b/docs/atl/reference/message-map-macros-atl.md
index 99775caee56..b94fb021afd 100644
--- a/docs/atl/reference/message-map-macros-atl.md
+++ b/docs/atl/reference/message-map-macros-atl.md
@@ -3,10 +3,11 @@ description: "Learn more about: Message Map Macros (ATL)"
title: "Message Map Macros (ATL)"
ms.date: "11/04/2016"
f1_keywords: ["atlwin/ATL::ALT_MSG_MAP", "atlwin/ATL::BEGIN_MSG_MAP", "atlwin/ATL::CHAIN_MSG_MAP_ALT", "atlwin/ATL::CHAIN_MSG_MAP_ALT_MEMBER", "atlwin/ATL::CHAIN_MSG_MAP", "atlwin/ATL::CHAIN_MSG_MAP_DYNAMIC", "atlwin/ATL::CHAIN_MSG_MAP_MEMBER", "atlwin/ATL::COMMAND_CODE_HANDLER", "atlwin/ATL::COMMAND_HANDLER", "atlwin/ATL::COMMAND_ID_HANDLER", "atlwin/ATL::COMMAND_RANGE_CODE_HANDLER", "atlwin/ATL::COMMAND_RANGE_HANDLER", "atlwin/ATL::DECLARE_EMPTY_MSG_MAP", "atlwin/ATL::DEFAULT_REFLECTION_HANDLER", "atlwin/ATL::END_MSG_MAP", "atlwin/ATL::FORWARD_NOTIFICATIONS", "atlwin/ATL::MESSAGE_HANDLER", "atlwin/ATL::MESSAGE_RANGE_HANDLER", "atlwin/ATL::NOTIFY_CODE_HANDLER", "atlwin/ATL::NOTIFY_HANDLER", "atlwin/ATL::NOTIFY_ID_HANDLER", "atlwin/ATL::NOTIFY_RANGE_CODE_HANDLER", "atlwin/ATL::NOTIFY_RANGE_HANDLER", "atlwin/ATL::REFLECT_NOTIFICATIONS", "atlwin/ATL::REFLECTED_COMMAND_CODE_HANDLER", "atlwin/ATL::REFLECTED_COMMAND_HANDLER", "atlwin/ATL::REFLECTED_COMMAND_ID_HANDLER", "atlwin/ATL::REFLECTED_COMMAND_RANGE_CODE_HANDLER", "atlwin/ATL::REFLECTED_COMMAND_RANGE_HANDLER", "atlwin/ATL::REFLECTED_NOTIFY_CODE_HANDLER", "atlwin/ATL::REFLECTED_NOTIFY_HANDLER", "atlwin/ATL::REFLECTED_NOTIFY_ID_HANDLER", "atlwin/ATL::REFLECTED_NOTIFY_RANGE_CODE_HANDLER", "atlwin/ATL::REFLECTED_NOTIFY_RANGE_HANDLER", "ATLWIN/ALT_MSG_MAP", "ATLWIN/BEGIN_MSG_MAP", "ATLWIN/CHAIN_MSG_MAP_ALT", "ATLWIN/CHAIN_MSG_MAP_ALT_MEMBER", "ATLWIN/CHAIN_MSG_MAP", "ATLWIN/CHAIN_MSG_MAP_DYNAMIC", "ATLWIN/CHAIN_MSG_MAP_MEMBER", "ATLWIN/COMMAND_CODE_HANDLER", "ATLWIN/COMMAND_HANDLER", "ATLWIN/COMMAND_ID_HANDLER", "ATLWIN/COMMAND_RANGE_CODE_HANDLER", "ATLWIN/COMMAND_RANGE_HANDLER", "ATLWIN/DECLARE_EMPTY_MSG_MAP", "ATLWIN/DEFAULT_REFLECTION_HANDLER", "ATLWIN/END_MSG_MAP", "ATLWIN/FORWARD_NOTIFICATIONS", "ATLWIN/MESSAGE_HANDLER", "ATLWIN/MESSAGE_RANGE_HANDLER", "ATLWIN/NOTIFY_CODE_HANDLER", "ATLWIN/NOTIFY_HANDLER", "ATLWIN/NOTIFY_ID_HANDLER", "ATLWIN/NOTIFY_RANGE_CODE_HANDLER", "ATLWIN/NOTIFY_RANGE_HANDLER", "ATLWIN/REFLECT_NOTIFICATIONS", "ATLWIN/REFLECTED_COMMAND_CODE_HANDLER", "ATLWIN/REFLECTED_COMMAND_HANDLER", "ATLWIN/REFLECTED_COMMAND_ID_HANDLER", "ATLWIN/REFLECTED_COMMAND_RANGE_CODE_HANDLER", "ATLWIN/REFLECTED_COMMAND_RANGE_HANDLER", "ATLWIN/REFLECTED_NOTIFY_CODE_HANDLER", "ATLWIN/REFLECTED_NOTIFY_HANDLER", "ATLWIN/REFLECTED_NOTIFY_ID_HANDLER", "ATLWIN/REFLECTED_NOTIFY_RANGE_CODE_HANDLER", "ATLWIN/REFLECTED_NOTIFY_RANGE_HANDLER"]
-ms.assetid: eefdd546-8934-4a30-b263-9c06a8addcbd
---
# Message Map Macros (ATL)
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These macros define message maps and entries.
|Name|Description|
diff --git a/docs/atl/reference/mfc-support-in-atl-projects.md b/docs/atl/reference/mfc-support-in-atl-projects.md
index c02e7ad566b..faa1b174097 100644
--- a/docs/atl/reference/mfc-support-in-atl-projects.md
+++ b/docs/atl/reference/mfc-support-in-atl-projects.md
@@ -4,10 +4,12 @@ title: "MFC Support in ATL Projects"
ms.date: "11/04/2016"
f1_keywords: ["vc.atl.addmfc"]
helpviewer_keywords: ["ATL projects, MFC support"]
-ms.assetid: f90b4276-cb98-4c11-902c-9ebcfe6f954b
---
# MFC Support in ATL Projects
+>[!NOTE]
+> The Microsoft Foundation Classes (MFC) library and Active Template Library (ATL) continue to be supported. However, we're no longer adding features or updating the documentation.
+
If you select **Support MFC** in the ATL Project Wizard, your project declares the application as an MFC application object (class). The project initializes the MFC library and instantiates a class (class *ProjName*) that is derived from [CWinApp](../../mfc/reference/cwinapp-class.md).
This option is available for nonattributed ATL DLL projects only.
diff --git a/docs/atl/reference/object-map-macros.md b/docs/atl/reference/object-map-macros.md
index e0d53e8236d..aec214fd6db 100644
--- a/docs/atl/reference/object-map-macros.md
+++ b/docs/atl/reference/object-map-macros.md
@@ -3,10 +3,11 @@ description: "Learn more about: Object Map Macros"
title: "Object Map Macros"
ms.date: "11/04/2016"
f1_keywords: ["atlcom/ATL::DECLARE_OBJECT_DESCRIPTION", "atlcom/ATL::OBJECT_ENTRY_AUTO", "atlcom/ATL::OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO", "ATLCOM/DECLARE_OBJECT_DESCRIPTION", "ATLCOM/OBJECT_ENTRY_AUTO", "ATLCOM/OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO"]
-ms.assetid: 680087f4-9894-41dd-a79c-6f337e1f13c1
---
# Object Map Macros
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These macros define object maps and entries.
|Name|Description|
diff --git a/docs/atl/reference/object-status-macros.md b/docs/atl/reference/object-status-macros.md
index 06a9bdb39fc..124d32d8e17 100644
--- a/docs/atl/reference/object-status-macros.md
+++ b/docs/atl/reference/object-status-macros.md
@@ -3,10 +3,11 @@ description: "Learn more about: Object Status Macros"
title: "Object Status Macros"
ms.date: "11/04/2016"
f1_keywords: ["atlcom/ATL::DECLARE_OLEMISC_STATUS", "ATLCOM/DECLARE_OLEMISC_STATUS"]
-ms.assetid: 727dbef2-a342-4157-9d64-a421805d9747
---
# Object Status Macros
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This macro sets flags belonging to ActiveX controls.
|Name|Description|
diff --git a/docs/atl/reference/options-atl-active-server-page-component-wizard.md b/docs/atl/reference/options-atl-active-server-page-component-wizard.md
index ee4d74799fe..7def4310f65 100644
--- a/docs/atl/reference/options-atl-active-server-page-component-wizard.md
+++ b/docs/atl/reference/options-atl-active-server-page-component-wizard.md
@@ -4,10 +4,11 @@ title: "Options, ATL Active Server Page Component Wizard"
ms.date: "11/04/2016"
f1_keywords: ["vc.codewiz.class.atl.asp.options"]
helpviewer_keywords: ["ATL Active Server Page Component Wizard, options"]
-ms.assetid: 54f34e26-53c7-4456-9675-cb86e356bde0
---
# Options, ATL Active Server Page Component Wizard
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Use this page of the ATL Active Server Page Component Wizard to design for increased efficiency and error support for the object.
For more information on ATL projects and ATL COM classes, see [ATL COM Desktop Components](../../atl/atl-com-desktop-components.md).
diff --git a/docs/atl/reference/options-atl-control-wizard.md b/docs/atl/reference/options-atl-control-wizard.md
index b6ec7ec9d06..b2656d02218 100644
--- a/docs/atl/reference/options-atl-control-wizard.md
+++ b/docs/atl/reference/options-atl-control-wizard.md
@@ -4,10 +4,11 @@ title: "Options, ATL Control Wizard"
ms.date: "11/04/2016"
f1_keywords: ["vc.codewiz.class.atl.control.options"]
helpviewer_keywords: ["ATL Control Wizard, options"]
-ms.assetid: 4607c51a-992d-433e-9281-919c6f519a3d
---
# Options, ATL Control Wizard
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Use this page of the wizard to define the type of control you are creating and the level of interface support it contains.
## UIElement List
diff --git a/docs/atl/reference/options-atl-property-page-wizard.md b/docs/atl/reference/options-atl-property-page-wizard.md
index a49caf9d072..cbf30f158dc 100644
--- a/docs/atl/reference/options-atl-property-page-wizard.md
+++ b/docs/atl/reference/options-atl-property-page-wizard.md
@@ -4,10 +4,11 @@ title: "Options, ATL Property Page Wizard"
ms.date: "05/09/2019"
f1_keywords: ["vc.codewiz.class.atl.ppg.options"]
helpviewer_keywords: ["ATL Property Page Wizard, options"]
-ms.assetid: a7107779-b2ea-4f99-b84b-7f3e0c504bc8
---
# Options, ATL Property Page Wizard
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
::: moniker range=">=msvc-160"
The ATL Property Page wizard is not available in Visual Studio 2019 and later.
diff --git a/docs/atl/reference/options-atl-simple-object-wizard.md b/docs/atl/reference/options-atl-simple-object-wizard.md
index a15ab0eccc0..b3e62ebf15c 100644
--- a/docs/atl/reference/options-atl-simple-object-wizard.md
+++ b/docs/atl/reference/options-atl-simple-object-wizard.md
@@ -4,10 +4,11 @@ title: "Options, ATL Simple Object Wizard"
ms.date: "11/04/2016"
f1_keywords: ["vc.codewiz.class.atl.simple.options"]
helpviewer_keywords: ["ATL Simple Object Wizard, options"]
-ms.assetid: 125fe179-942d-4181-8b82-33e92e1fd779
---
# Options, ATL Simple Object Wizard
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Use this page of the ATL Simple Object Wizard to design for increased efficiency and error support for the object.
For more information on ATL projects and ATL COM classes, see [ATL COM Desktop Components](../../atl/atl-com-desktop-components.md).
diff --git a/docs/atl/reference/pixel-himetric-conversion-global-functions.md b/docs/atl/reference/pixel-himetric-conversion-global-functions.md
index 3e1c7e9264d..19634eccdff 100644
--- a/docs/atl/reference/pixel-himetric-conversion-global-functions.md
+++ b/docs/atl/reference/pixel-himetric-conversion-global-functions.md
@@ -3,10 +3,11 @@ description: "Learn more about: Pixel/HIMETRIC Conversion Global Functions"
title: "Pixel-HIMETRIC Conversion Global Functions"
ms.date: "11/04/2016"
f1_keywords: ["atlwin/ATL::AtlHiMetricToPixel", "atlwin/ATL::AtlPixelToHiMetric"]
-ms.assetid: ecb1b1b2-7e9d-4fbc-a855-16252d2d794c
---
# Pixel/HIMETRIC Conversion Global Functions
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These functions provide support for converting to and from pixel and HIMETRIC units.
> [!IMPORTANT]
diff --git a/docs/atl/reference/property-map-macros.md b/docs/atl/reference/property-map-macros.md
index c0e785543db..1556a46baaf 100644
--- a/docs/atl/reference/property-map-macros.md
+++ b/docs/atl/reference/property-map-macros.md
@@ -4,10 +4,11 @@ title: "Property Map Macros"
ms.date: "11/04/2016"
f1_keywords: ["atlcom/ATL::BEGIN_PROP_MAP", "atlcom/ATL::PROP_DATA_ENTRY", "atlcom/ATL::PROP_ENTRY_TYPE", "atlcom/ATL::PROP_ENTRY_TYPE_EX", "atlcom/ATL::PROP_PAGE", "atlcom/ATL::END_PROP_MAP", "ATLCOM/BEGIN_PROP_MAP", "ATLCOM/PROP_DATA_ENTRY", "ATLCOM/PROP_ENTRY_TYPE", "ATLCOM/PROP_ENTRY_TYPE_EX", "ATLCOM/PROP_PAGE", "ATLCOM/END_PROP_MAP"]
helpviewer_keywords: ["property maps"]
-ms.assetid: 128bc742-2b98-4b97-a243-684dbb83db77
---
# Property Map Macros
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These macros define property maps and entries.
|Name|Description|
diff --git a/docs/atl/reference/registry-and-typelib-global-functions.md b/docs/atl/reference/registry-and-typelib-global-functions.md
index c97812f48d0..74287bfd26f 100644
--- a/docs/atl/reference/registry-and-typelib-global-functions.md
+++ b/docs/atl/reference/registry-and-typelib-global-functions.md
@@ -4,10 +4,11 @@ title: "Registry and TypeLib Global Functions"
ms.date: "03/27/2019"
f1_keywords: ["atlbase/ATL::AtlGetPerUserRegistration", "afxpriv/ATL::AfxRegCreateKey", "afxpriv/ATL::AfxRegDeleteKey", "atlbase/ATL::AtlRegisterTypeLib", "afxpriv/ATL::AfxRegOpenKey", "afxpriv/ATL::AfxRegOpenKeyEx", "afxdisp/ATL::AfxUnregisterPreviewHandler", "atlbase/ATL::AtlSetPerUserRegistration", "atlbase/ATL::AtlUnRegisterTypeLib", "atlbase/ATL::AtlLoadTypeLib", "atlbase/ATL::AtlUpdateRegistryFromResourceD", "atlbase/ATL::RegistryDataExchange"]
helpviewer_keywords: ["RegistryDataExchange function, global functions"]
-ms.assetid: d58b8a4e-975c-4417-8b34-d3c847f679b3
---
# Registry and TypeLib Global Functions
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These functions provide support for loading and registering a type library.
> [!IMPORTANT]
diff --git a/docs/atl/reference/registry-data-exchange-macros.md b/docs/atl/reference/registry-data-exchange-macros.md
index 98857707a31..76afbece908 100644
--- a/docs/atl/reference/registry-data-exchange-macros.md
+++ b/docs/atl/reference/registry-data-exchange-macros.md
@@ -4,10 +4,11 @@ title: "Registry Data Exchange Macros"
ms.date: "11/04/2016"
f1_keywords: ["atlplus/ATL::BEGIN_RDX_MAP", "atlplus/ATL::END_RDX_MAP", "atlplus/ATL::RDX_BINARY", "atlplus/ATL::RDX_CSTRING_TEXT", "atlplus/ATL::RDX_DWORD", "atlplus/ATL::RDX_TEXT", "ATLPLUS/BEGIN_RDX_MAP", "ATLPLUS/END_RDX_MAP", "ATLPLUS/RDX_BINARY", "ATLPLUS/RDX_CSTRING_TEXT", "ATLPLUS/RDX_DWORD", "ATLPLUS/RDX_TEXT"]
helpviewer_keywords: ["RegistryDataExchange function, macros"]
-ms.assetid: c1bc5e79-2307-43d2-9d10-3a62ffadf473
---
# Registry Data Exchange Macros
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These macros perform Registry Data Exchange operations.
|Name|Description|
diff --git a/docs/atl/reference/registry-macros.md b/docs/atl/reference/registry-macros.md
index f18617f0fe5..1d5b75f746f 100644
--- a/docs/atl/reference/registry-macros.md
+++ b/docs/atl/reference/registry-macros.md
@@ -4,10 +4,11 @@ title: "Registry Macros"
ms.date: "08/19/2019"
f1_keywords: ["ATLBASE/_ATL_STATIC_REGISTRY", "ATLBASE/DECLARE_LIBID", "ATLBASE/DECLARE_NO_REGISTRY", "ATLBASE/DECLARE_REGISTRY", "ATLBASE/DECLARE_REGISTRY_APPID_RESOURCEID", "ATLBASE/DECLARE_REGISTRY_RESOURCE", "ATLBASE/DECLARE_REGISTRY_RESOURCEID", "_ATL_STATIC_REGISTRY", "DECLARE_LIBID", "DECLARE_NO_REGISTRY", "DECLARE_REGISTRY", "DECLARE_REGISTRY_APPID_RESOURCEID", "DECLARE_REGISTRY_RESOURCE", "DECLARE_REGISTRY_RESOURCEID"]
helpviewer_keywords: ["registry, ATL macros"]
-ms.assetid: 3ee041da-c63b-42a4-89cf-2a4b2a6f81ae
---
# Registry Macros
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These macros define useful type library and registry facilities.
|Name|Description|
diff --git a/docs/atl/reference/security-global-functions.md b/docs/atl/reference/security-global-functions.md
index e42bcb30f72..25ea04d962f 100644
--- a/docs/atl/reference/security-global-functions.md
+++ b/docs/atl/reference/security-global-functions.md
@@ -4,10 +4,11 @@ title: "Security Global Functions"
ms.date: "11/04/2016"
f1_keywords: ["atlsecurity/ATL::AtlGetDacl", "atlsecurity/ATL::AtlSetDacl", "atlsecurity/ATL::AtlGetGroupSid", "atlsecurity/ATL::AtlSetGroupSid", "atlsecurity/ATL::AtlGetOwnerSid", "atlsecurity/ATL::AtlSetOwnerSid", "atlsecurity/ATL::AtlGetSacl", "atlsecurity/ATL::AtlSetSacl", "atlsecurity/ATL::AtlGetSecurityDescriptor"]
helpviewer_keywords: ["SIDs [C++], modifying SID objects", "ACL object global functions", "security IDs [C++]"]
-ms.assetid: 6a584bfe-16b7-47f4-8439-9c789c41567a
---
# Security Global Functions
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These functions provide support for modifying SID and ACL objects.
> [!IMPORTANT]
diff --git a/docs/atl/reference/security-identifier-global-functions.md b/docs/atl/reference/security-identifier-global-functions.md
index d429e27b2a4..c390c7f3951 100644
--- a/docs/atl/reference/security-identifier-global-functions.md
+++ b/docs/atl/reference/security-identifier-global-functions.md
@@ -4,10 +4,11 @@ title: "Security Identifier Global Functions"
ms.date: "11/04/2016"
f1_keywords: ["atlsecurity/ATL::Sids::AccountOps", "atlsecurity/ATL::Sids::Admins", "atlsecurity/ATL::Sids::AnonymousLogon", "atlsecurity/ATL::Sids::AuthenticatedUser", "atlsecurity/ATL::Sids::BackupOps", "atlsecurity/ATL::Sids::Batch", "atlsecurity/ATL::Sids::CreatorGroup", "atlsecurity/ATL::Sids::CreatorGroupServer", "atlsecurity/ATL::Sids::CreatorOwner", "atlsecurity/ATL::Sids::CreatorOwnerServer", "atlsecurity/ATL::Sids::Dialup", "atlsecurity/ATL::Sids::Guests", "atlsecurity/ATL::Sids::Interactive", "atlsecurity/ATL::Sids::Local", "atlsecurity/ATL::Sids::Network", "atlsecurity/ATL::Sids::NetworkService", "atlsecurity/ATL::Sids::Null", "atlsecurity/ATL::Sids::PowerUsers", "atlsecurity/ATL::Sids::PrintOps", "atlsecurity/ATL::Sids::Proxy", "atlsecurity/ATL::Sids::RasServers", "atlsecurity/ATL::Sids::Replicator", "atlsecurity/ATL::Sids::RestrictedCode", "atlsecurity/ATL::Sids::Self", "atlsecurity/ATL::Sids::ServerLogon", "atlsecurity/ATL::Sids::Service", "atlsecurity/ATL::Sids::System", "atlsecurity/ATL::Sids::SystemOps", "atlsecurity/ATL::Sids::TerminalServer", "atlsecurity/ATL::Sids::Users", "atlsecurity/ATL::Sids::World"]
helpviewer_keywords: ["security IDs [C++]", "SIDs [C++], returning SID objects"]
-ms.assetid: 85404dcb-c59b-4535-ab3d-66cfa37e87de
---
# Security Identifier Global Functions
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These functions return common well-known SID objects.
> [!IMPORTANT]
diff --git a/docs/atl/reference/server-registration-global-functions.md b/docs/atl/reference/server-registration-global-functions.md
index 4277c7c13a8..084c2b5257e 100644
--- a/docs/atl/reference/server-registration-global-functions.md
+++ b/docs/atl/reference/server-registration-global-functions.md
@@ -3,10 +3,11 @@ description: "Learn more about: Server Registration Global Functions"
title: "Server Registration Global Functions"
ms.date: "11/04/2016"
f1_keywords: ["atlbase/ATL::AtlComModuleRegisterServer", "atlbase/ATL::AtlComModuleUnregisterServer", "atlbase/ATL::AtlComModuleRegisterClassObjects", "atlbase/ATL::AtlComModuleRevokeClassObjects", "atlbase/ATL::AtlComModuleGetClassObject"]
-ms.assetid: c2f0a35d-857c-4538-a44d-c4ea0db63b06
---
# Server Registration Global Functions
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These functions provide support for registering and unregistering server objects in the object map.
> [!IMPORTANT]
diff --git a/docs/atl/reference/service-map-macros.md b/docs/atl/reference/service-map-macros.md
index b42010306af..923b3b80708 100644
--- a/docs/atl/reference/service-map-macros.md
+++ b/docs/atl/reference/service-map-macros.md
@@ -3,10 +3,11 @@ description: "Learn more about: Service Map Macros"
title: "Service Map Macros"
ms.date: "11/04/2016"
f1_keywords: ["atlcom/ATL::BEGIN_SERVICE_MAP", "atlcom/ATL::END_SERVICE_MAP", "atlcom/ATL::SERVICE_ENTRY", "atlcom/ATL::SERVICE_ENTRY_CHAIN", "ATLCOM/BEGIN_SERVICE_MAP", "ATLCOM/END_SERVICE_MAP", "ATLCOM/SERVICE_ENTRY", "ATLCOM/SERVICE_ENTRY_CHAIN"]
-ms.assetid: ca02a125-454a-4cf6-aac2-1c5585025ed4
---
# Service Map Macros
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These macros define service maps and entries.
|Name|Description|
diff --git a/docs/atl/reference/snap-in-object-macros.md b/docs/atl/reference/snap-in-object-macros.md
index 380f4cf1169..d4a210f6777 100644
--- a/docs/atl/reference/snap-in-object-macros.md
+++ b/docs/atl/reference/snap-in-object-macros.md
@@ -3,10 +3,11 @@ description: "Learn more about: Snap-In Object Macros"
title: "Snap-In Object Macros"
ms.date: "11/04/2016"
f1_keywords: ["atlsnap/ATL::BEGIN_EXTENSION_SNAPIN_NODEINFO_MAP", "atlsnap/ATL::BEGIN_SNAPINTOOLBARID_MAP", "atlsnap/ATL::END_EXTENSION_SNAPIN_NODEINFO_MAP", "atlsnap/ATL::END_SNAPINTOOLBARID_MAP", "atlsnap/ATL::EXTENSION_SNAPIN_DATACLASS", "atlsnap/ATL::EXTENSION_SNAPIN_NODEINFO_ENTRY", "atlsnap/ATL::SNAPINMENUID", "atlsnap/ATL::SNAPINTOOLBARID_ENTRY", "ATLSNAP/BEGIN_EXTENSION_SNAPIN_NODEINFO_MAP", "ATLSNAP/BEGIN_SNAPINTOOLBARID_MAP", "ATLSNAP/END_EXTENSION_SNAPIN_NODEINFO_MAP", "ATLSNAP/END_SNAPINTOOLBARID_MAP", "ATLSNAP/EXTENSION_SNAPIN_DATACLASS", "ATLSNAP/EXTENSION_SNAPIN_NODEINFO_ENTRY", "ATLSNAP/SNAPINMENUID", "ATLSNAP/SNAPINTOOLBARID_ENTRY"]
-ms.assetid: 4e9850c0-e395-4929-86c9-584a81828053
---
# Snap-In Object Macros
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These macros provide support for snap-in extensions.
|Name|Description|
diff --git a/docs/atl/reference/specifying-compiler-optimization-for-an-atl-project.md b/docs/atl/reference/specifying-compiler-optimization-for-an-atl-project.md
index c59923486a7..faaa0a50052 100644
--- a/docs/atl/reference/specifying-compiler-optimization-for-an-atl-project.md
+++ b/docs/atl/reference/specifying-compiler-optimization-for-an-atl-project.md
@@ -4,10 +4,11 @@ title: "Specifying Compiler Optimization for an ATL Project"
ms.date: "08/19/2019"
f1_keywords: ["vc.appwiz.ATL.optimization", "vc.appwiz.ATL.vtable"]
helpviewer_keywords: ["ATL_DISABLE_NO_VTABLE macro", "ATL projects, compiler optimization", "ATL_NO_VTABLE macro"]
-ms.assetid: 7f379318-66d5-43dd-a53d-530758d3a228
---
# Specifying Compiler Optimization for an ATL Project
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
By default, the [ATL Control Wizard](../../atl/reference/atl-control-wizard.md) generates new classes with the ATL_NO_VTABLE macro, as follows:
```
diff --git a/docs/atl/reference/stock-properties-atl-control-wizard.md b/docs/atl/reference/stock-properties-atl-control-wizard.md
index d71b29f1d24..b5e748c87a7 100644
--- a/docs/atl/reference/stock-properties-atl-control-wizard.md
+++ b/docs/atl/reference/stock-properties-atl-control-wizard.md
@@ -3,10 +3,11 @@ description: "Learn more about: Stock Properties, ATL Control Wizard"
title: "Stock Properties, ATL Control Wizard"
ms.date: "11/04/2016"
f1_keywords: ["vc.codewiz.class.atl.control.stockprops"]
-ms.assetid: b27b0e60-08a6-43f4-ba6e-0a4e45147693
---
# Stock Properties, ATL Control Wizard
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This page of the wizard identifies the stock properties supported for the control. By default, no properties are identified.
- **Not supported**
diff --git a/docs/atl/reference/string-conversion-macros.md b/docs/atl/reference/string-conversion-macros.md
index 9b67e45e5f2..34e484087c7 100644
--- a/docs/atl/reference/string-conversion-macros.md
+++ b/docs/atl/reference/string-conversion-macros.md
@@ -3,10 +3,11 @@ description: "Learn more about: String Conversion Macros"
title: "String Conversion Macros"
ms.date: "11/04/2016"
f1_keywords: ["atlconv/ATL::DEVMODEA2W", "atlconv/ATL::TEXTMETRICA2W", "atlconv/ATL::DEVMODEOLE2T", "atlconv/ATL::TEXTMETRICOLE2T", "atlconv/ATL::DEVMODET2OLE", "atlconv/ATL::TEXTMETRICT2OLE", "atlconv/ATL::DEVMODEW2A", "atlconv/ATL::TEXTMETRICW2A", "ATLCONV/DEVMODEA2W", "ATLCONV/TEXTMETRICA2W", "ATLCONV/DEVMODEOLE2T", "ATLCONV/TEXTMETRICOLE2T", "ATLCONV/DEVMODET2OLE", "ATLCONV/TEXTMETRICT2OLE", "ATLCONV/DEVMODEW2A", "ATLCONV/TEXTMETRICW2A"]
-ms.assetid: 2ff7c0b6-2bde-45fe-897f-6128e18e0c27
---
# String Conversion Macros
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These macros provide string conversion features.
## ATL and MFC String Conversion Macros
diff --git a/docs/atl/reference/strings-atl-property-page-wizard.md b/docs/atl/reference/strings-atl-property-page-wizard.md
index af7682dd9f2..c9ed6e81a2a 100644
--- a/docs/atl/reference/strings-atl-property-page-wizard.md
+++ b/docs/atl/reference/strings-atl-property-page-wizard.md
@@ -4,10 +4,11 @@ title: "Strings, ATL Property Page Wizard"
ms.date: "05/09/2019"
f1_keywords: ["vc.codewiz.class.atl.ppg.strings"]
helpviewer_keywords: ["ATL Property Page Wizard, strings"]
-ms.assetid: 00547db6-911f-49eb-92e1-2ba67079d4df
---
# Strings, ATL Property Page Wizard
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
::: moniker range=">=msvc-160"
The ATL Property Page wizard is not available in Visual Studio 2019 and later.
diff --git a/docs/atl/reference/u-menuorid-class.md b/docs/atl/reference/u-menuorid-class.md
index cd2b60ec3e5..f20de6ecfa3 100644
--- a/docs/atl/reference/u-menuorid-class.md
+++ b/docs/atl/reference/u-menuorid-class.md
@@ -4,10 +4,11 @@ title: "_U_MENUorID Class"
ms.date: "11/04/2016"
f1_keywords: ["ATL._U_MENUorID", "ATL::_U_MENUorID", "_U_MENUorID"]
helpviewer_keywords: ["U_MENUorID class", "_U_MENUorID class"]
-ms.assetid: cfc8032b-61b4-4a68-ba3a-92b82500ccae
---
# _U_MENUorID Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides wrappers for `CreateWindow` and `CreateWindowEx`.
> [!IMPORTANT]
diff --git a/docs/atl/reference/u-rect-class.md b/docs/atl/reference/u-rect-class.md
index 515c8add351..2a86016dd22 100644
--- a/docs/atl/reference/u-rect-class.md
+++ b/docs/atl/reference/u-rect-class.md
@@ -4,10 +4,11 @@ title: "_U_RECT Class"
ms.date: "11/04/2016"
f1_keywords: ["ATL::_U_RECT", "_U_RECT", "ATL._U_RECT"]
helpviewer_keywords: ["U_RECT class", "_U_RECT class"]
-ms.assetid: 5f880a2d-09cf-4327-bf32-a3519c4dcd63
---
# _U_RECT Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This argument adapter class allows either `RECT` pointers or references to be passed to a function that is implemented in terms of pointers.
> [!IMPORTANT]
diff --git a/docs/atl/reference/u-stringorid-class.md b/docs/atl/reference/u-stringorid-class.md
index d7148ff89ca..84488cd8aea 100644
--- a/docs/atl/reference/u-stringorid-class.md
+++ b/docs/atl/reference/u-stringorid-class.md
@@ -4,10 +4,11 @@ title: "_U_STRINGorID Class"
ms.date: "11/04/2016"
f1_keywords: ["ATL._U_STRINGorID", "ATL::_U_STRINGorID", "_U_STRINGorID"]
helpviewer_keywords: ["_U_STRINGorID class", "U_STRINGorID class"]
-ms.assetid: 443cdc00-d265-4b27-8ef3-2feb95f3e5e3
---
# _U_STRINGorID Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This argument adapter class allows either resource names (LPCTSTRs) or resource IDs (UINTs) to be passed to a function without requiring the caller to convert the ID to a string using the MAKEINTRESOURCE macro.
> [!IMPORTANT]
diff --git a/docs/atl/reference/win32threadtraits-class.md b/docs/atl/reference/win32threadtraits-class.md
index 2d4f1fa008f..321d51e832c 100644
--- a/docs/atl/reference/win32threadtraits-class.md
+++ b/docs/atl/reference/win32threadtraits-class.md
@@ -4,10 +4,11 @@ title: "Win32ThreadTraits Class"
ms.date: "11/04/2016"
f1_keywords: ["Win32ThreadTraits", "ATLBASE/ATL::Win32ThreadTraits", "ATLBASE/ATL::Win32ThreadTraits::CreateThread"]
helpviewer_keywords: ["threading [ATL], Windows threads", "threading [ATL], creation functions", "Win32ThreadTraits class"]
-ms.assetid: 50279c38-eae1-4301-9ea6-97ccea580f3e
---
# Win32ThreadTraits Class
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This class provides the creation function for a Windows thread. Use this class if the thread will not use CRT functions.
> [!IMPORTANT]
diff --git a/docs/atl/reference/window-class-macros.md b/docs/atl/reference/window-class-macros.md
index 4804e4b723c..13224f77bbc 100644
--- a/docs/atl/reference/window-class-macros.md
+++ b/docs/atl/reference/window-class-macros.md
@@ -3,10 +3,11 @@ description: "Learn more about: Window Class Macros"
title: "Window Class Macros"
ms.date: "11/04/2016"
f1_keywords: ["atlwin/ATL::DECLARE_WND_CLASS", "atlwin/ATL::DECLARE_WND_SUPERCLASS", "atlwin/ATL::DECLARE_WND_CLASS_EX", "ATLWIN/DECLARE_WND_CLASS", "ATLWIN/DECLARE_WND_SUPERCLASS", "ATLWIN/DECLARE_WND_CLASS_EX"]
-ms.assetid: ce18681a-2bab-4453-9895-0f3ea47c2b24
---
# Window Class Macros
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These macros define window class utilities.
|Name|Description|
diff --git a/docs/atl/reference/windows-messages-macros.md b/docs/atl/reference/windows-messages-macros.md
index 06753053208..222363698ed 100644
--- a/docs/atl/reference/windows-messages-macros.md
+++ b/docs/atl/reference/windows-messages-macros.md
@@ -3,10 +3,11 @@ description: "Learn more about: Windows Messages Macros"
title: "Windows Messages Macros"
ms.date: "11/04/2016"
f1_keywords: ["atlbase/ATL::WM_FORWARDMSG", "ATLBASE/WM_FORWARDMSG"]
-ms.assetid: 63abd22c-372d-4148-bb04-c605950ae64f
---
# Windows Messages Macros
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
This macro forwards window messages.
|Name|Description|
diff --git a/docs/atl/reference/winmodule-global-functions.md b/docs/atl/reference/winmodule-global-functions.md
index c0708a6a568..2523f806fc7 100644
--- a/docs/atl/reference/winmodule-global-functions.md
+++ b/docs/atl/reference/winmodule-global-functions.md
@@ -3,10 +3,11 @@ description: "Learn more about: WinModule Global Functions"
title: "WinModule Global Functions"
ms.date: "11/04/2016"
f1_keywords: ["atlbase/ATL::AtlWinModuleAddCreateWndData", "atlbase/ATL::AtlWinModuleExtractCreateWndData"]
-ms.assetid: 8ce45a5b-26a7-491f-9096-c09ceca5f2c2
---
# WinModule Global Functions
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
These functions provide support for `_AtlCreateWndData` structure operations.
> [!IMPORTANT]
diff --git a/docs/atl/reference/worker-archetype.md b/docs/atl/reference/worker-archetype.md
index e4a36e9702a..ec8e422243c 100644
--- a/docs/atl/reference/worker-archetype.md
+++ b/docs/atl/reference/worker-archetype.md
@@ -3,10 +3,11 @@ description: "Learn more about: Worker Archetype"
title: "Worker Archetype"
ms.date: "11/04/2016"
helpviewer_keywords: ["Worker archetype"]
-ms.assetid: 834145cd-09d3-4149-bc99-620e1871cbfb
---
# Worker Archetype
+[!INCLUDE[product-lifecycle-status](../includes/lifecycle-note.md)]
+
Classes that conform to the *worker* archetype provide the code to process work items queued on a thread pool.
**Implementation**
diff --git a/docs/atl/registry-entries.md b/docs/atl/registry-entries.md
index 30fd6299398..2f59a898775 100644
--- a/docs/atl/registry-entries.md
+++ b/docs/atl/registry-entries.md
@@ -3,10 +3,11 @@ description: "Learn more about: Registry Entries"
title: "Registry Entries (ATL)"
ms.date: "11/04/2016"
helpviewer_keywords: ["registry, ATL services entries", "registry, application IDs"]
-ms.assetid: 881989b7-61bb-459a-a13e-3bfcb33e184e
---
# Registry Entries
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
DCOM introduced the concept of Application IDs (AppIDs), which group configuration options for one or more DCOM objects into a centralized location in the registry. You specify an AppID by indicating its value in the AppID named value under the object's CLSID.
By default, an ATL-generated service uses its CLSID as the GUID for its AppID. Under `HKEY_CLASSES_ROOT\AppID`, you can specify DCOM-specific entries. Initially, two entries exist:
diff --git a/docs/atl/registry-scripting-examples.md b/docs/atl/registry-scripting-examples.md
index 605b92f0df0..55053c58db8 100644
--- a/docs/atl/registry-scripting-examples.md
+++ b/docs/atl/registry-scripting-examples.md
@@ -3,10 +3,11 @@ description: "Learn more about: Registry Scripting Examples"
title: "Registry Scripting Examples"
ms.date: "11/04/2016"
helpviewer_keywords: ["scripting, examples", "registrar scripts [ATL]", "scripts, Registrar scripts", "registry, Registrar"]
-ms.assetid: b6df80e1-e08b-40ee-9243-9b381b172460
---
# Registry Scripting Examples
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The scripting examples in this topic demonstrate how to add a key to the system registry, register the Registrar COM server, and specify multiple parse trees.
## Add a Key to HKEY_CURRENT_USER
diff --git a/docs/atl/registry-support-classes.md b/docs/atl/registry-support-classes.md
index 1aafad7ccfc..2e0b86bd46e 100644
--- a/docs/atl/registry-support-classes.md
+++ b/docs/atl/registry-support-classes.md
@@ -4,10 +4,11 @@ title: "Registry Support Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["registry support classes, ATL", "ATL, registry", "registry support classes"]
-ms.assetid: 4203c346-77a9-42bf-8683-a3c3351cc490
---
# Registry Support Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following class provides registry support:
- [CRegKey](../atl/reference/cregkey-class.md) Contains methods for manipulating values in the system registry.
diff --git a/docs/atl/running-objects-classes.md b/docs/atl/running-objects-classes.md
index 8d7c92b99fe..f621bae5721 100644
--- a/docs/atl/running-objects-classes.md
+++ b/docs/atl/running-objects-classes.md
@@ -4,10 +4,11 @@ title: "Running Objects Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["object classes, running", "objects [C++], running objects classes"]
-ms.assetid: b4d63c41-81fd-4000-96c5-ea0a011f4308
---
# Running Objects Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following class provides support for running objects:
- [IRunnableObjectImpl](../atl/reference/irunnableobjectimpl-class.md) Determines if an object is running, forces it to run, or locks it into the running state.
diff --git a/docs/atl/running-the-program-as-a-local-server.md b/docs/atl/running-the-program-as-a-local-server.md
index 647555b4552..4d1bc97c64e 100644
--- a/docs/atl/running-the-program-as-a-local-server.md
+++ b/docs/atl/running-the-program-as-a-local-server.md
@@ -3,11 +3,12 @@ description: "Learn more about: Running the Program as a Local Server"
title: "Running the Program as a Local Server"
ms.date: "11/04/2016"
helpviewer_keywords: ["debugging [ATL], running services as local server", "ATL services, running as local servers"]
-ms.assetid: eb9701e6-e2a8-4666-897f-0c893aec8ac7
ms.topic: concept-article
---
# Running the Program as a Local Server
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
If running the program as a service is inconvenient, you can temporarily change the registry so that the program is run as a normal local server. Simply rename the `LocalService` value under your AppID to `_LocalService` and ensure the `LocalServer32` key under your CLSID is set correctly. (Note that using DCOMCNFG to specify that your application should be run on a different computer renames your `LocalServer32` key to `_LocalServer32`.) Running your program as a local server takes a few more seconds on startup because the call to `StartServiceCtrlDispatcher` in `CAtlServiceModuleT::Start` takes a few seconds before it fails.
## See also
diff --git a/docs/atl/scope-of-atl.md b/docs/atl/scope-of-atl.md
index bf84207f3b3..34b054cdbb3 100644
--- a/docs/atl/scope-of-atl.md
+++ b/docs/atl/scope-of-atl.md
@@ -3,10 +3,11 @@ description: "Learn more about: Scope of ATL"
title: "Scope of ATL"
ms.date: "11/04/2016"
helpviewer_keywords: ["ATL, scope"]
-ms.assetid: 381adf50-3cb0-4d0f-a79a-07da093bc280
---
# Scope of ATL
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
ATL allows you to easily create COM objects, Automation servers, and ActiveX controls. ATL provides built-in support for many of the fundamental COM interfaces.
ATL is shipped as source code which you include in your application. ATL also makes a DLL available (atl90.dll), which contains code that can be shared across components. However, this DLL is not necessary.
diff --git a/docs/atl/security-classes.md b/docs/atl/security-classes.md
index c4d3e1acab7..e44ab3c8040 100644
--- a/docs/atl/security-classes.md
+++ b/docs/atl/security-classes.md
@@ -4,10 +4,11 @@ title: "Security Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["security classes [C++]"]
-ms.assetid: 0477f1a4-c1af-4c4f-bbca-08f7b844e028
---
# Security Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
These classes are wrappers for common Win32 security classes and objects.
- [CAccessToken](../atl/reference/caccesstoken-class.md) This class is a wrapper for an access token.
diff --git a/docs/atl/service-provider-support-classes.md b/docs/atl/service-provider-support-classes.md
index 9cce29b4cd7..a46d539dbf4 100644
--- a/docs/atl/service-provider-support-classes.md
+++ b/docs/atl/service-provider-support-classes.md
@@ -4,10 +4,11 @@ title: "Service Provider Support Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["service provider support classes"]
-ms.assetid: 190f598e-fb32-4d37-adf1-21de395b04d9
---
# Service Provider Support Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following class provides support for service providers:
- [IServiceProviderImpl](../atl/reference/iserviceproviderimpl-class.md) Locates a service specified by its GUID and returns the interface pointer for the requested interface on the service.
diff --git a/docs/atl/setting-up-a-static-link-to-the-registrar-code-cpp-only.md b/docs/atl/setting-up-a-static-link-to-the-registrar-code-cpp-only.md
index e5797ef152c..6b56f346110 100644
--- a/docs/atl/setting-up-a-static-link-to-the-registrar-code-cpp-only.md
+++ b/docs/atl/setting-up-a-static-link-to-the-registrar-code-cpp-only.md
@@ -3,11 +3,12 @@ title: "Setting up a static link to the Registrar code (C++ only)"
description: "How to statically link C++ code to the ATL Registrar code."
ms.date: 09/03/2020
helpviewer_keywords: ["statically linking to ATL Registrar code", "linking [C++], to ATL Registrar code"]
-ms.assetid: 835f5885-87a6-48fa-91e6-60988ee65538
ms.topic: how-to
---
# Setting up a static link to the Registrar code (C++ Only)
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
C++ clients can create a static link to the Registrar's code. Static linking of the Registrar's parser adds approximately 5K to a release build.
The simplest way to set up static linking assumes you have specified [`DECLARE_REGISTRY_RESOURCEID`](reference/registry-macros.md#declare_registry_resourceid) in your object's declaration. (It's the default specification used by the ATL.)
diff --git a/docs/atl/site-information-classes.md b/docs/atl/site-information-classes.md
index 4ece835b060..620d587be46 100644
--- a/docs/atl/site-information-classes.md
+++ b/docs/atl/site-information-classes.md
@@ -4,10 +4,11 @@ title: "Site Information Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["site information classes"]
-ms.assetid: 102eae20-7953-4efb-b27b-409885c9c064
---
# Site Information Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following classes allow an object to communicate with its site:
- [IObjectWithSiteImpl](../atl/reference/iobjectwithsiteimpl-class.md) Retrieves and sets a pointer to an object's site. Used for objects that are not controls.
diff --git a/docs/atl/specifying-property-pages.md b/docs/atl/specifying-property-pages.md
index 0213211d07c..507024c56c7 100644
--- a/docs/atl/specifying-property-pages.md
+++ b/docs/atl/specifying-property-pages.md
@@ -3,11 +3,12 @@ description: "Learn more about: Specifying Property Pages"
title: "Specifying Property Pages (ATL)"
ms.date: "11/04/2016"
helpviewer_keywords: ["ISpecifyPropertyPages method", "property pages, specifying"]
-ms.assetid: ee8678cf-c708-49ab-b0ad-fc2db31f1ac3
ms.topic: how-to
---
# Specifying Property Pages
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
When you create an ActiveX control, you will often want to associate it with property pages that can be used to set the properties of your control. Control containers use the `ISpecifyPropertyPages` interface to find out which property pages can be used to set your control's properties. You will need to implement this interface on your control.
To implement `ISpecifyPropertyPages` using ATL, take the following steps:
diff --git a/docs/atl/specifying-the-threading-model-for-a-project-atl.md b/docs/atl/specifying-the-threading-model-for-a-project-atl.md
index f9d9ebeb3aa..690bb8c1a1e 100644
--- a/docs/atl/specifying-the-threading-model-for-a-project-atl.md
+++ b/docs/atl/specifying-the-threading-model-for-a-project-atl.md
@@ -3,11 +3,12 @@ description: "Learn more about: Specifying the Threading Model for a Project (AT
title: "Specifying the Threading Model for a Project (ATL)"
ms.date: "11/04/2016"
helpviewer_keywords: ["_ATL_FREE_THREADED macro", "_ATL_APARTMENT_THREADED macro", "ATL, multithreading", "threading [ATL], models", "_ATL_SINGLE_THREADED macro"]
-ms.assetid: 6b571078-521c-4f3e-9f08-482aa235a822
ms.topic: concept-article
---
# Specifying the Threading Model for a Project (ATL)
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following macros are available to specify the threading model of an ATL project:
|Macro|Guidelines for using|
diff --git a/docs/atl/string-and-text-classes.md b/docs/atl/string-and-text-classes.md
index 3810a64d0d8..01bf9dde0e9 100644
--- a/docs/atl/string-and-text-classes.md
+++ b/docs/atl/string-and-text-classes.md
@@ -4,10 +4,11 @@ title: "ATL String and Text Classes"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["string conversion, ATL", "string classes [ATL]"]
-ms.assetid: aa0cdc41-c953-4b17-82b6-59b908545571
---
# String and Text Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
These classes provide support for strings and text string conversions.
- [CA2AEX](../atl/reference/ca2aex-class.md) This class is used by the string conversion macros CA2TEX and CT2AEX, and the typedef CA2A.
diff --git a/docs/atl/supporting-idispatch-and-ierrorinfo.md b/docs/atl/supporting-idispatch-and-ierrorinfo.md
index 97c49084358..97d5c06785d 100644
--- a/docs/atl/supporting-idispatch-and-ierrorinfo.md
+++ b/docs/atl/supporting-idispatch-and-ierrorinfo.md
@@ -3,11 +3,12 @@ description: "Learn more about: Supporting IDispatch and IErrorInfo"
title: "Supporting IDispatch and IErrorInfo"
ms.date: "11/04/2016"
helpviewer_keywords: ["ISupportErrorInfoImpl method", "IErrorInfo class suppor in ATL", "IDispatchImpl class", "IDispatch class support in ATL"]
-ms.assetid: 7db2220f-319d-4ce9-9382-d340019f14f7
ms.topic: concept-article
---
# Supporting IDispatch and IErrorInfo
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
You can use the template class [IDispatchImpl](../atl/reference/idispatchimpl-class.md) to provide a default implementation of the `IDispatch Interface` portion of any dual interfaces on your object.
If your object uses the `IErrorInfo` interface to report errors back to the client, then your object must support the `ISupportErrorInfo` interface. The template class [ISupportErrorInfoImpl](../atl/reference/isupporterrorinfoimpl-class.md) provides an easy way to implement this if you only have a single interface that generates errors on your object.
diff --git a/docs/atl/supporting-idispeventimpl.md b/docs/atl/supporting-idispeventimpl.md
index 261ffa445cd..dde4fa8ab69 100644
--- a/docs/atl/supporting-idispeventimpl.md
+++ b/docs/atl/supporting-idispeventimpl.md
@@ -3,11 +3,12 @@ description: "Learn more about: Supporting IDispEventImpl"
title: "Supporting IDispEventImpl"
ms.date: "11/04/2016"
helpviewer_keywords: ["event sink maps, declaring", "IDispEventImpl class, advising and unadvising", "SINK_ENTRY macro", "type libraries, importing", "ATL, IDispEventImpl support in COM objects", "BEGIN_SINK_MAP macro", "IDispEventImpl class, declaring"]
-ms.assetid: b957f930-6a5b-4598-8e4d-8027759957e7
ms.topic: concept-article
---
# Supporting IDispEventImpl
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The template class [IDispEventImpl](../atl/reference/idispeventimpl-class.md) can be used to provide support for connection point sinks in your ATL class. A connection point sink allows your class to handle events fired from external COM objects. These connection point sinks are mapped with an event sink map, provided by your class.
To properly implement a connection point sink for your class, the following steps must be completed:
diff --git a/docs/atl/tear-off-interfaces-classes.md b/docs/atl/tear-off-interfaces-classes.md
index 0f6c3667bd5..9de3758a0d8 100644
--- a/docs/atl/tear-off-interfaces-classes.md
+++ b/docs/atl/tear-off-interfaces-classes.md
@@ -4,10 +4,11 @@ title: "Tear-Off Interfaces Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["interfaces, tear-off", "tear-off interfaces classes"]
-ms.assetid: 14e4ab01-9213-43e5-bef5-78af1e6206ff
---
# Tear-Off Interfaces Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following classes provide support for tear-off interfaces:
- [CComTearOffObject](../atl/reference/ccomtearoffobject-class.md) Implements `IUnknown` for a tear-off interface.
diff --git a/docs/atl/testing-the-atl-dhtml-control.md b/docs/atl/testing-the-atl-dhtml-control.md
index 1d223e24d1d..32fe9fae2ff 100644
--- a/docs/atl/testing-the-atl-dhtml-control.md
+++ b/docs/atl/testing-the-atl-dhtml-control.md
@@ -3,11 +3,12 @@ description: "Learn more about: Testing the ATL DHTML Control"
title: "Testing the ATL DHTML Control"
ms.date: "11/04/2016"
helpviewer_keywords: ["HTML controls, testing", "testing controls", "DHTML controls", "DHTML controls, testing"]
-ms.assetid: 0e4b4358-80ce-4505-8b06-ef4f30b1d1f0
ms.topic: how-to
---
# Testing the ATL DHTML Control
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
Once you have created your project, you can build and test the sample control. Before you do this, use **Class View** and **Solution Explorer** to examine the project. The elements of your project are described in greater detail in [Identifying the Elements of the DHTML Control Project](../atl/identifying-the-elements-of-the-dhtml-control-project.md).
## To build and test the ATL DHTML control
diff --git a/docs/atl/testing-the-modified-atl-dhtml-control.md b/docs/atl/testing-the-modified-atl-dhtml-control.md
index fe0809b88b7..b120c2d27bf 100644
--- a/docs/atl/testing-the-modified-atl-dhtml-control.md
+++ b/docs/atl/testing-the-modified-atl-dhtml-control.md
@@ -3,11 +3,12 @@ description: "Learn more about: Testing the Modified ATL DHTML Control"
title: "Testing the Modified ATL DHTML Control"
ms.date: "11/06/2018"
helpviewer_keywords: ["HTML controls, testing", "testing controls", "DHTML controls, testing"]
-ms.assetid: 42316118-9433-410f-9d8a-0efcc1eff824
ms.topic: how-to
---
# Testing the Modified ATL DHTML Control
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
Try out your new control to see how it works now.
## To build and test the modified control
diff --git a/docs/atl/thread-pooling-classes.md b/docs/atl/thread-pooling-classes.md
index ff62fdc9f8c..d78f5b29aa5 100644
--- a/docs/atl/thread-pooling-classes.md
+++ b/docs/atl/thread-pooling-classes.md
@@ -4,10 +4,11 @@ title: "Thread Pooling Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["thread pooling, classes", "threading [ATL], pooling", "pooling worker threads"]
-ms.assetid: 01fa2c1c-12ae-4781-b772-0a74b6365a8c
---
# Thread Pooling Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following classes support thread pooling:
- [CComAutoThreadModule](../atl/reference/ccomautothreadmodule-class.md) Implements an EXE module, with support for multiple thread-pooled apartments.
diff --git a/docs/atl/threading-models-and-critical-sections-classes.md b/docs/atl/threading-models-and-critical-sections-classes.md
index 1bc26034ca9..21ebb6aafcb 100644
--- a/docs/atl/threading-models-and-critical-sections-classes.md
+++ b/docs/atl/threading-models-and-critical-sections-classes.md
@@ -3,11 +3,12 @@ description: "Learn more about: Threading Models and Critical Sections Classes"
title: "Threading Models and Critical Sections Classes (ATL)"
ms.date: "11/04/2016"
helpviewer_keywords: ["ATL, critical sections", "ATL, multithreading", "threading [ATL], models", "critical sections"]
-ms.assetid: 759f05ef-6285-4be6-a2cc-78572dd75146
ms.topic: concept-article
---
# Threading Models and Critical Sections Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following classes define a threading model and critical section:
- [CAtlAutoThreadModule](../atl/reference/catlautothreadmodule-class.md) Implements a thread-pooled, apartment-model COM server.
diff --git a/docs/atl/ui-support-classes.md b/docs/atl/ui-support-classes.md
index 8e5f56f4c4c..53a4941d0a5 100644
--- a/docs/atl/ui-support-classes.md
+++ b/docs/atl/ui-support-classes.md
@@ -4,10 +4,11 @@ title: "UI Support Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["user interfaces, support classes", "user interfaces, ATL classes"]
-ms.assetid: 313dfc95-308a-4118-b919-5a3c3673b865
---
# UI Support Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following classes provide general UI support:
- [IDocHostUIHandlerDispatch](../atl/reference/idochostuihandlerdispatch-interface.md) An interface to the Microsoft HTML parsing and rendering engine.
diff --git a/docs/atl/understanding-backus-naur-form-bnf-syntax.md b/docs/atl/understanding-backus-naur-form-bnf-syntax.md
index 7e5295bf9ec..3e218f2ade2 100644
--- a/docs/atl/understanding-backus-naur-form-bnf-syntax.md
+++ b/docs/atl/understanding-backus-naur-form-bnf-syntax.md
@@ -3,11 +3,12 @@ description: "Learn more about: Understanding Backus-Naur form (BNF) syntax"
title: "ATL Registrar and Backus-Naur form (BNF) syntax"
ms.date: "05/14/2019"
helpviewer_keywords: ["BNF notation", "Backus-Naur form (BNF) syntax"]
-ms.assetid: 994bbef0-9077-4aa8-bdfe-b7e830af9acc
ms.topic: concept-article
---
# Understanding Backus-Naur form (BNF) syntax
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The scripts used by the ATL Registrar are described in this topic using BNF syntax, which uses the notation shown in the following table.
|Convention/symbol|Meaning|
diff --git a/docs/atl/understanding-parse-trees.md b/docs/atl/understanding-parse-trees.md
index a0eea7d823a..75544ab3c4e 100644
--- a/docs/atl/understanding-parse-trees.md
+++ b/docs/atl/understanding-parse-trees.md
@@ -7,6 +7,8 @@ ms.topic: concept-article
---
# Understanding parse trees
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
You can define one or more parse trees in your registrar script, where each parse tree has the following form:
> \{\}+
diff --git a/docs/atl/understanding-window-traits.md b/docs/atl/understanding-window-traits.md
index df7884f8624..a6a391133f6 100644
--- a/docs/atl/understanding-window-traits.md
+++ b/docs/atl/understanding-window-traits.md
@@ -3,11 +3,12 @@ description: "Learn more about: Understanding Window Traits"
title: "ATL Window Traits"
ms.date: "11/04/2016"
helpviewer_keywords: ["window traits"]
-ms.assetid: c90cf850-9e91-49da-9cf3-ad4efb30347d
ms.topic: concept-article
---
# Understanding Window Traits
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
Window traits classes provide a simple method for standardizing the styles used for the creation of an ATL window object. Window traits are accepted as template parameters by [CWindowImpl](../atl/reference/cwindowimpl-class.md) and other ATL window classes as a way of providing default window styles at the class level.
If the creator of a window instance doesn't provide styles explicitly in the call to [Create](../atl/reference/cwindowimpl-class.md#create), you can use a traits class to ensure that the window is still created with the correct styles. You can even ensure that certain styles are set for all instances of that window class while permitting other styles to be set on a per-instance basis.
diff --git a/docs/atl/using-a-template-library.md b/docs/atl/using-a-template-library.md
index 11bd456ff96..7fae7aa5932 100644
--- a/docs/atl/using-a-template-library.md
+++ b/docs/atl/using-a-template-library.md
@@ -3,11 +3,12 @@ description: "Learn more about: Using a Template Library"
title: "Using a Template Library (ATL)"
ms.date: "11/04/2016"
helpviewer_keywords: ["template libraries"]
-ms.assetid: 5e80ec6e-a61c-41ce-b34b-9a6252c46265
ms.topic: concept-article
---
# Using a Template Library
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
A template is somewhat like a macro. As with a macro, invoking a template causes it to expand (with appropriate parameter substitution) to code you have written. However, a template goes further than this to allow the creation of new classes based on types that you pass as parameters. These new classes implement type-safe ways of performing the operation expressed in your template code.
Template libraries such as ATL differ from traditional C++ class libraries in that they are typically supplied only as source code (or as source code with a little, supporting run time) and are not inherently or necessarily hierarchical in nature. Rather than deriving from a class to get the functionality you desire, you instantiate a class from a template.
diff --git a/docs/atl/using-a-window.md b/docs/atl/using-a-window.md
index 69488133ae5..99a3e945018 100644
--- a/docs/atl/using-a-window.md
+++ b/docs/atl/using-a-window.md
@@ -3,11 +3,12 @@ description: "Learn more about: Using a Window"
title: "Using a Window (ATL)"
ms.date: "11/04/2016"
helpviewer_keywords: ["ATL, windows", "CWindow class, about CWindow class", "windows [C++], ATL"]
-ms.assetid: b3b9cc8e-4287-486b-b080-38852bc2943a
ms.topic: concept-article
---
# Using a Window
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
Class [CWindow](../atl/reference/cwindow-class.md) allows you to use a window. Once you attach a window to a `CWindow` object, you can then call `CWindow` methods to manipulate the window. `CWindow` also contains an HWND operator to convert a `CWindow` object to an HWND. Thus you can pass a `CWindow` object to any function that requires a handle to a window. You can easily mix `CWindow` method calls and Win32 function calls, without creating any temporary objects.
Because `CWindow` has only two data member (a window handle and the default dimensions), it does not impose an overhead on your code. In addition, many of the `CWindow` methods simply wrap corresponding Win32 API functions. By using `CWindow`, the HWND member is automatically passed to the Win32 function.
diff --git a/docs/atl/using-contained-windows.md b/docs/atl/using-contained-windows.md
index 82894f8eeae..9de7cffd6db 100644
--- a/docs/atl/using-contained-windows.md
+++ b/docs/atl/using-contained-windows.md
@@ -3,11 +3,12 @@ description: "Learn more about: Using Contained Windows"
title: "Using Contained Windows"
ms.date: "11/04/2016"
helpviewer_keywords: ["ATL, windows", "windows [C++], ATL", "contained windows in ATL"]
-ms.assetid: 7b3d79e5-b569-413f-9b98-df4f14efbe2b
ms.topic: concept-article
---
# Using Contained Windows
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
ATL implements contained windows with [CContainedWindowT](../atl/reference/ccontainedwindowt-class.md). A contained window represents a window that delegates its messages to a container object instead of handling them in its own class.
> [!NOTE]
diff --git a/docs/atl/using-idispeventimpl.md b/docs/atl/using-idispeventimpl.md
index 9e9c1537f24..10a6ef481e5 100644
--- a/docs/atl/using-idispeventimpl.md
+++ b/docs/atl/using-idispeventimpl.md
@@ -3,11 +3,12 @@ description: "Learn more about: Using IDispEventImpl"
title: "Using IDispEventImpl (ATL)"
ms.date: "08/19/2019"
helpviewer_keywords: ["IDispEventImpl class, using"]
-ms.assetid: 82d53b61-9d0d-45c5-aff9-2fafa468a9ca
ms.topic: how-to
---
# Using IDispEventImpl
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
When using `IDispEventImpl` to handle events, you will need to:
- Derive your class from [IDispEventImpl](../atl/reference/idispeventimpl-class.md).
diff --git a/docs/atl/using-idispeventsimpleimpl.md b/docs/atl/using-idispeventsimpleimpl.md
index 3f50230f72c..875fb0cd26c 100644
--- a/docs/atl/using-idispeventsimpleimpl.md
+++ b/docs/atl/using-idispeventsimpleimpl.md
@@ -3,11 +3,12 @@ description: "Learn more about: Using IDispEventSimpleImpl"
title: "Using IDispEventSimpleImpl (ATL)"
ms.date: "08/19/2019"
helpviewer_keywords: ["IDispEventSimpleImpl class, using"]
-ms.assetid: 8640ad1a-4bd0-40a5-b5e4-7322685d7aab
ms.topic: concept-article
---
# Using IDispEventSimpleImpl
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
When using `IDispEventSimpleImpl` to handle events, you will need to:
- Derive your class from [IDispEventSimpleImpl](../atl/reference/idispeventsimpleimpl-class.md).
diff --git a/docs/atl/using-replaceable-parameters-the-registrar-s-preprocessor.md b/docs/atl/using-replaceable-parameters-the-registrar-s-preprocessor.md
index 5541235e127..ea68a8f0ef7 100644
--- a/docs/atl/using-replaceable-parameters-the-registrar-s-preprocessor.md
+++ b/docs/atl/using-replaceable-parameters-the-registrar-s-preprocessor.md
@@ -3,11 +3,12 @@ description: "Learn more about: Using Replaceable Parameters (The Registrar's Pr
title: "Using Replaceable Parameters (ATL Registrar)"
ms.date: "11/04/2016"
helpviewer_keywords: ["%MODULE%"]
-ms.assetid: 0b376994-84a6-4967-8d97-8c01dfc94efe
ms.topic: concept-article
---
# Using Replaceable Parameters (The Registrar's Preprocessor)
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
Replaceable parameters allow a Registrar's client to specify run-time data. To do this, the Registrar maintains a replacement map into which it enters the values associated with the replaceable parameters in your script. The Registrar makes these entries at run time.
## Using %MODULE%
diff --git a/docs/atl/using-task-manager.md b/docs/atl/using-task-manager.md
index 31747f62825..37a86152888 100644
--- a/docs/atl/using-task-manager.md
+++ b/docs/atl/using-task-manager.md
@@ -3,11 +3,12 @@ description: "Learn more about: Using Task Manager"
title: "Using Task Manager"
ms.date: "11/04/2016"
helpviewer_keywords: ["Task Manager", "breakpoints, Task Manager", "debugging [ATL], using Task Manager"]
-ms.assetid: 773fccd5-308d-42c2-a17f-60ae94989062
ms.topic: how-to
---
# Using Task Manager
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
One of the simplest ways to debug a service is through the use of the Task Manager. While the service is running, start the Task Manager and click the **Processes** tab. Right-click the name of the EXE and then click **Debug**. This launches Visual C++ attached to that running process. Now, click **Break** on the **Debug** menu to allow you to set breakpoints in your code. Click **Run** to run to your selected breakpoints.
## See also
diff --git a/docs/atl/utility-classes.md b/docs/atl/utility-classes.md
index df1f4375949..b454bb01a80 100644
--- a/docs/atl/utility-classes.md
+++ b/docs/atl/utility-classes.md
@@ -4,10 +4,11 @@ title: "Utility Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["utility classes"]
-ms.assetid: 33d5da9d-89a5-49f9-a873-a26499299d17
---
# Utility Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following MFC-independent utility classes are provided:
- [CImage](../atl-mfc-shared/reference/cimage-class.md) Provides enhanced bitmap support, including the ability to load and save images in JPEG, GIF, BMP, and Portable Network Graphics (PNG) formats.
diff --git a/docs/atl/windows-support-classes.md b/docs/atl/windows-support-classes.md
index caa906a9fb4..a8f615fa208 100644
--- a/docs/atl/windows-support-classes.md
+++ b/docs/atl/windows-support-classes.md
@@ -4,10 +4,11 @@ title: "Windows Support Classes (ATL)"
ms.date: "11/04/2016"
ms.topic: "reference"
helpviewer_keywords: ["ATL, windows", "windows [C++], ATL"]
-ms.assetid: 750b14d5-d787-4d2b-9728-ac199ccad489
---
# Windows Support Classes
+[!INCLUDE[product-lifecycle-status](includes/lifecycle-note.md)]
+
The following classes provide support for windows:
- [_U_MENUorID](../atl/reference/u-menuorid-class.md) Provides wrappers for `CreateWindow` and `CreateWindowEx`.
diff --git a/docs/build-insights/build-performance.md b/docs/build-insights/build-performance.md
new file mode 100644
index 00000000000..13a51332376
--- /dev/null
+++ b/docs/build-insights/build-performance.md
@@ -0,0 +1,183 @@
+---
+title: "Get Started with GitHub Copilot build performance for Windows"
+description: "Learn how to use GitHub Copilot to improve build times."
+ms.date: 01/21/2026
+helpviewer_keywords: ["GitHub Copilot build performance", "C++ Build Insights", "build time optimization", "header file analysis", "template instantiation", "Visual Studio build performance"]
+ms.topic: how-to
+---
+
+# Get started with GitHub Copilot build performance for Windows
+
+The GitHub Copilot build performance for Windows helps you make your builds faster. It finds expensive headers, template instantiations, and functions and can automatically make your builds more efficient. GitHub Copilot is integrated with Visual Studio.
+
+## Prerequisites
+
+- Visual Studio 2026 version 18.3 Insiders 4, or later.
+- MSVC Build Tools version 14.50 or later.
+- An MSBuild or CMake project.
+- Windows 10 or later.
+
+### Before you begin
+
+In the Visual Studio 2026 Installer, ensure the following components are selected in the **Desktop development with C++** [workload](/visualstudio/install/install-visual-studio#step-4---choose-workloads):
+
+:::image type="complex" source="./media/vs-installer-options.png" alt-text="Screenshot of the Visual Studio installer.":::
+The desktop development with C++ section is highlighted and C++ Build Insights, C++ profiling tools, and C++ CMake tools for Windows are selected.
+:::image-end:::
+
+### Verify your GitHub Copilot subscription
+
+To use GitHub Copilot build performance for Windows, you need a GitHub Copilot Pro, Pro+, Business, or Enterprise subscription.
+
+Verify your GitHub Copilot subscription on GitHub, and then sign in to your GitHub account in Visual Studio 2026.
+
+1. Verify your GitHub Copilot subscription by signing in to [https://github.com](https://github.com/). Select your profile picture and then [Copilot settings](https://github.com/settings/copilot/features). Your plan type appears near the top of the page:
+
+ :::image type="complex" source="./media/copilot-subscription.png" alt-text="Screenshot showing the user's GitHub Copilot information.":::
+ The Copilot settings page shows the type of subscription. In this case, the user has GitHub Copilot Enterprise.
+ :::image-end:::
+1. In Visual Studio, sign in to your GitHub account:
+ - If you're not signed in to GitHub in Visual Studio, open the GitHub Copilot Chat and follow the sign-in instructions in the pop-up window.
+ - Confirm your GitHub sign-in status by selecting your profile picture in Visual Studio. You should see that your GitHub account is **Active**:
+
+ :::image type="complex" source="./media/vs-account-authentication.png" alt-text="Screenshot of the account dropdown in Visual Studio.":::
+ The account dropdown shows that a Microsoft account and a GitHub account are both signed in and active.
+ :::image-end:::
+
+### Enable template collection
+
+To minimize analysis overhead, the template instantiation time collection is off by default. Turn it on:
+
+ 1. In Visual Studio, go to **Tools** > **Options**.
+ 1. In the **Options** dialog, expand **Build Insights**.
+ 1. Select **Collect Template Instantiation**.
+
+:::image type="complex" source="./media/build-insights-options.png" alt-text="Screenshot of the Build Insights settings page in Visual Studio Options with the Collect template instantiation checkbox enabled, displaying trace collection configurations for analysis.":::
+The dialog shows trace collection settings with the Collect template instantiation checkbox selected.
+:::image-end:::
+
+For more information about template instantiation on build time, see [Troubleshoot template instantiation impact on build time | Microsoft Learn](/cpp/build-insights/tutorials/build-insights-template-view)
+
+## Troubleshoot build performance with GitHub Copilot
+
+To start the GitHub Copilot build performance agent:
+
+1. Open the GitHub Copilot chat pane and type '@'. One of the options is **@BuildPerfCpp**. Select it:
+
+ :::image type="complex" source="./media/copilot-build-perf-select.png" alt-text="Screenshot of the GitHub Copilot chat pane.":::
+ The GitHub Copilot chat pane shows a list of agents to choose from. Build Perf C p p (optimize your c + + build) is selected.
+ :::image-end:::
+
+1. Select your preferred model in the model drop down menu:
+
+ :::image type="complex" source="./media/model-select.png" alt-text="Screenshot of the model selection menu in the Copilot Chat window.":::
+ This dropdown lists various models like GPT-5, CLaude Sonnet 4, Gemini 3 Pro, and others.
+ :::image-end:::
+
+1. Instruct GitHub Copilot to improve the build performance of your selected project by typing something like **Help me improve the build performance of this project**. You can add extra context so that GitHub Copilot can better make suggestions to match the needs of your project.
+
+ :::image type="complex" source="./media/copilot-build-request.png" alt-text="Screenshot of the GitHub Copilot Chat window.":::
+ The GitHub Copilot chat window shows @ Build Per Cpp: Help me improve the build performance of this project.
+ :::image-end:::
+
+### Permissions
+
+The first time you use GitHub Copilot build performance for Windows, you may need to enable Build Insights and grant elevated permissions to collect MSVC compiler traces.
+
+Visual Studio needs elevated permissions to analyze build performance and the Build Insights tool needs to be enabled. It stays enabled until you disable it. For more information about these permissions, see [Build Insights needs additional permissions](/cpp/build-insights/elevate-note).
+
+If GitHub Copilot prompts you to enable Build Insights and grant elevated permissions, choose **Confirm**:
+
+:::image type="complex" source="./media/build-insights-permission.png" alt-text="Screenshot of a GitHub Copilot dialog asking to elevate permissions.":::
+The dialog indicates that Build Insights (vcperf) needs additional permissions to capture MSVC compiler traces. There are Confirm and Deny buttons.
+:::image-end:::
+
+A Visual Studio dialog then appears prompting you to allow a one-time elevated request:
+
+:::image type="complex" source="./media/msvc-elevation.png" alt-text="Screenshot of a Microsoft Visual Studio prompt requesting elevated permissions.":::
+The elevation prompt says: Build Insights (vcperf) needs additional permissions to capture MSVC compiler traces. Allow this one-time elevated request? There are Yes and No buttons.
+:::image-end:::
+
+Choose **Yes**. The Windows User Account Control dialog then appears:
+
+:::image type="complex" source="./media/windows-user-account-control.png" alt-text="Screenshot of the User Account Control dialog.":::
+The dialog asks for permission for the Windows Command Processor, verified publisher Microsoft, to allow this app to make changes to your device. There are Yes and No buttons.
+:::image-end:::
+
+Choose **Yes** to grant permission to capture the MSVC compiler traces. Denying the elevated request cancels the build analysis.
+
+## Guide GitHub Copilot through the process of improving the build time
+
+As you guide GitHub Copilot through the process of improving the build time, it may ask you to provide permission to run tools such as PowerShell scripts:
+
+:::image type="complex" source="./media/terminal-permission.png" alt-text="Screenshot of a Copilot Chat notification.":::
+The prompt asks the user to authorize running the command: ls ../src/ in the terminal. The Confirm dropdown offers: Always allow and Allow in this session. There's also a Deny button.
+:::image-end:::
+
+Choose the level of permission you are comfortable with. If you deny the request, GitHub Copilot can't proceed with the build performance analysis.
+
+Copilot may go through multiple iterations to find the best way to make the build faster. In this chat example, Copilot made its first build performance improvement but recognizes more areas to optimize.
+
+:::image type="complex" source="./media/build-analysis-complete.png" alt-text="Screenshot of a message in the GitHub Copilot chat window.":::
+The message indicates that analysis is complete and the build time improved from 78.6 seconds to 70.5 seconds (8.1 seconds faster, ~10.3% improvement). It indicates there's still room for improvement.
+:::image-end:::
+
+When the analysis is done, GitHub Copilot displays a summary of the changes and build performance impact for that iteration:
+
+:::image type="complex" source="./media/build-summary.png" alt-text="Screenshot of the build performance summary.":::
+The summary shows a before and after optimization summary indicating build time, the top bottleneck, and the top five headers that contributed the most to the build time. The report shows build time dropping from 110.7 seconds to 34.1 seconds. It highlights a 69.2% overall improvement and faster incremental rebuilds after enabling precompiled headers.
+:::image-end:::
+
+In this example, build time dropped from **110.7s to 34.1s** after enabling precompiled headers for costly includes. A **69% improvement** and **3.2× faster builds** with near-instant incremental rebuilds.
+
+### Other ways to access GitHub Copilot build performance for Windows
+
+You can access the GitHub Copilot build performance for Windows in other ways:
+
+The **Build** menu:
+
+ :::image type="complex" source="./media/build-menu-improve.png" alt-text="Screenshot of the Build menu.":::
+ The Build menu option Run Build Insights is expanded to show Build All, Rebuild All, and Improve Build Performance. The latter is selected.
+ :::image-end:::
+
+ Select **Improve build performance on Solution** to open the GitHub Copilot chat window, which prompts you to optimize the build performance of your project.
+ :::image type="complex" source="./media/copilot-improve-prompt.png" alt-text="Screenshot of the Copilot chat window.":::
+ The chat window shows a prompt to Improve Build Performance.
+ :::image-end:::
+
+Or use the **Solution** window context menu which you can access by right-clicking the solution node:
+
+ :::image type="complex" source="./media/solution-menu-improve.png" alt-text="A screenshot of the Solution explorer.":::
+ The context menu shows Build Solution, Build Solution, and so on. Improve build performance on Solution is highlighted.
+ :::image-end:::
+
+ Select **Improve build performance on Solution** to open the GitHub Copilot chat window, which prompts you to optimize the build performance of your project.
+
+ :::image type="complex" source="./media/copilot-improve-prompt.png" alt-text="Screenshot of the Copilot chat window.":::
+ The chat window shows a prompt to Improve Build Performance.
+ :::image-end:::
+
+Or from the **Build Insights** view:
+
+ Select **Improve** from the Build Insights diagnostics session view to open the GitHub Copilot chat window, which prompts you to optimize the build performance of your project. This button uses data from the existing build insights trace results. It doesn't do a new analysis until the current changes are processed.
+
+ :::image type="complex" source="./media/insights-improve-button.png" alt-text="Screenshot of the Build Insights view window.":::
+ The Improve link is highlighted.
+ :::image-end:::
+
+ The GitHub Copilot chat window is prompted to optimize the build performance of your project, focusing on includes.
+
+ :::image type="complex" source="./media/copilot-improve-includes.png" alt-text="Screenshot of the Copilot chat window with focusing on includes prompt.":::
+ The chat window shows a prompt to Improve Build Performance, focusing on includes.
+ :::image-end:::
+
+## Summary
+
+By combining MSVC Build Insights with GitHub Copilot, you can identify build bottlenecks and apply fixes without manually analyzing trace data or configuring precompiled headers yourself. The workflow handles trace collection, analysis, and code changes in an iterative loop until build times are reduced to your satisfaction.
+
+## See also
+
+[Build Insights function view](/cpp/build-insights/tutorials/build-insights-function-view)\
+[Build Insights included files view](/cpp/build-insights/tutorials/build-insights-included-files-view)\
+[vcperf and Windows Performance Analyzer](/cpp/build-insights/tutorials/vcperf-and-wpa)\
+[Windows Performance Analyzer basics](/cpp/build-insights/tutorials/wpa-basics)
\ No newline at end of file
diff --git a/docs/build-insights/elevate-note.md b/docs/build-insights/elevate-note.md
index 502e2087fef..f13849c4b32 100644
--- a/docs/build-insights/elevate-note.md
+++ b/docs/build-insights/elevate-note.md
@@ -1,7 +1,7 @@
---
title: "Build Insights needs additional permissions"
description: "To capture trace files, Build Insights needs additional permissions as described in this topic."
-ms.topic: article
+ms.topic: concept-article
ms.date: 12/9/2025
ms.update-cycle: 3650-days
f1_keywords:
diff --git a/docs/build-insights/index.yml b/docs/build-insights/index.yml
index 5020326898f..bf11ccdb5e3 100644
--- a/docs/build-insights/index.yml
+++ b/docs/build-insights/index.yml
@@ -25,6 +25,8 @@ landingContent:
url: get-started-with-cpp-build-insights.md
- linkListType: tutorial
links:
+ - text: Get started with GitHub Copilot build performance for Windows
+ url: build-performance.md
- text: Build Insights function view
url: tutorials/build-insights-function-view.md
- text: Build Insights included files view
diff --git a/docs/build-insights/media/build-analysis-complete.png b/docs/build-insights/media/build-analysis-complete.png
new file mode 100644
index 00000000000..18857c6d623
Binary files /dev/null and b/docs/build-insights/media/build-analysis-complete.png differ
diff --git a/docs/build-insights/media/build-insights-options.png b/docs/build-insights/media/build-insights-options.png
new file mode 100644
index 00000000000..e8fce846167
Binary files /dev/null and b/docs/build-insights/media/build-insights-options.png differ
diff --git a/docs/build-insights/media/build-insights-permission.png b/docs/build-insights/media/build-insights-permission.png
new file mode 100644
index 00000000000..4a54a2c87d1
Binary files /dev/null and b/docs/build-insights/media/build-insights-permission.png differ
diff --git a/docs/build-insights/media/build-menu-improve.png b/docs/build-insights/media/build-menu-improve.png
new file mode 100644
index 00000000000..14fd3cbe2fa
Binary files /dev/null and b/docs/build-insights/media/build-menu-improve.png differ
diff --git a/docs/build-insights/media/build-summary.png b/docs/build-insights/media/build-summary.png
new file mode 100644
index 00000000000..fc7e0a51bff
Binary files /dev/null and b/docs/build-insights/media/build-summary.png differ
diff --git a/docs/build-insights/media/copilot-build-perf-select.png b/docs/build-insights/media/copilot-build-perf-select.png
new file mode 100644
index 00000000000..4bda984a9ca
Binary files /dev/null and b/docs/build-insights/media/copilot-build-perf-select.png differ
diff --git a/docs/build-insights/media/copilot-build-request.png b/docs/build-insights/media/copilot-build-request.png
new file mode 100644
index 00000000000..325ec315daa
Binary files /dev/null and b/docs/build-insights/media/copilot-build-request.png differ
diff --git a/docs/build-insights/media/copilot-improve-includes.png b/docs/build-insights/media/copilot-improve-includes.png
new file mode 100644
index 00000000000..2a398182634
Binary files /dev/null and b/docs/build-insights/media/copilot-improve-includes.png differ
diff --git a/docs/build-insights/media/copilot-improve-prompt.png b/docs/build-insights/media/copilot-improve-prompt.png
new file mode 100644
index 00000000000..43a5194dc4a
Binary files /dev/null and b/docs/build-insights/media/copilot-improve-prompt.png differ
diff --git a/docs/build-insights/media/copilot-subscription.png b/docs/build-insights/media/copilot-subscription.png
new file mode 100644
index 00000000000..9147ff7177c
Binary files /dev/null and b/docs/build-insights/media/copilot-subscription.png differ
diff --git a/docs/build-insights/media/insights-improve-button.png b/docs/build-insights/media/insights-improve-button.png
new file mode 100644
index 00000000000..ba4a0383b82
Binary files /dev/null and b/docs/build-insights/media/insights-improve-button.png differ
diff --git a/docs/build-insights/media/model-select.png b/docs/build-insights/media/model-select.png
new file mode 100644
index 00000000000..4c3db683c85
Binary files /dev/null and b/docs/build-insights/media/model-select.png differ
diff --git a/docs/build-insights/media/msvc-elevation.png b/docs/build-insights/media/msvc-elevation.png
new file mode 100644
index 00000000000..7404b6f41ab
Binary files /dev/null and b/docs/build-insights/media/msvc-elevation.png differ
diff --git a/docs/build-insights/media/solution-menu-improve.png b/docs/build-insights/media/solution-menu-improve.png
new file mode 100644
index 00000000000..8b52818c8bb
Binary files /dev/null and b/docs/build-insights/media/solution-menu-improve.png differ
diff --git a/docs/build-insights/media/terminal-permission.png b/docs/build-insights/media/terminal-permission.png
new file mode 100644
index 00000000000..4baf7683bf5
Binary files /dev/null and b/docs/build-insights/media/terminal-permission.png differ
diff --git a/docs/build-insights/media/vs-account-authentication.png b/docs/build-insights/media/vs-account-authentication.png
new file mode 100644
index 00000000000..3e62cf49c70
Binary files /dev/null and b/docs/build-insights/media/vs-account-authentication.png differ
diff --git a/docs/build-insights/media/vs-installer-options.png b/docs/build-insights/media/vs-installer-options.png
new file mode 100644
index 00000000000..6bd7c59e9f8
Binary files /dev/null and b/docs/build-insights/media/vs-installer-options.png differ
diff --git a/docs/build-insights/media/windows-user-account-control.png b/docs/build-insights/media/windows-user-account-control.png
new file mode 100644
index 00000000000..7bee87290d7
Binary files /dev/null and b/docs/build-insights/media/windows-user-account-control.png differ
diff --git a/docs/build-insights/toc.yml b/docs/build-insights/toc.yml
index d5f07030b96..f9c51225e1d 100644
--- a/docs/build-insights/toc.yml
+++ b/docs/build-insights/toc.yml
@@ -6,6 +6,8 @@ items:
- name: "Tutorials"
expanded: true
items:
+ - name: "Get started with GitHub Copilot build performance for Windows"
+ href: ../build-insights/build-performance.md
- name: "Troubleshoot function inlining impact on build time"
href: ../build-insights/tutorials/build-insights-function-view.md
- name: "Troubleshoot template instantiation impact on build time"
diff --git a/docs/build-insights/tutorials/build-insights-tips.md b/docs/build-insights/tutorials/build-insights-tips.md
index b9c2b0e6f6c..45b4517777f 100644
--- a/docs/build-insights/tutorials/build-insights-tips.md
+++ b/docs/build-insights/tutorials/build-insights-tips.md
@@ -4,7 +4,7 @@ description: "Learn time-saving tips for using Build Insights."
ms.date: 1/8/2025
author: tylermsft
ms.author: twhitney
-ms.topic: article
+ms.topic: concept-article
helpviewer_keywords: ["C++ Build Insights tips and tricks"]
---
# Build Insights tips and tricks
diff --git a/docs/build/arm64-exception-handling.md b/docs/build/arm64-exception-handling.md
index d459965ede4..dc383c44181 100644
--- a/docs/build/arm64-exception-handling.md
+++ b/docs/build/arm64-exception-handling.md
@@ -401,7 +401,7 @@ Step 6: Allocate remaining stack, including local area, `` pair, and out
\* If **CR** == 01 and **RegI** is an odd number, step 3 and the last `save_reg` in step 2 are merged into one `save_regp`.
-\*\* If **RegI** == **CR** == 0, and **RegF** != 0, the first `stp` for the floating-point does the predecrement.
+\*\* If **RegI** == 0, **CR** != 01, and **RegF** != 0, the first `stp` for the floating-point does the predecrement to adjust sp to allocate space for the FP/SIMD save area.
\*\*\* No instruction corresponding to `mov x29,sp` is present in the epilog. Packed unwind data can't be used if a function requires restoration of `sp` from `x29`.
diff --git a/docs/build/building-on-the-command-line.md b/docs/build/building-on-the-command-line.md
index 1a2c2232451..ba6f8012556 100644
--- a/docs/build/building-on-the-command-line.md
+++ b/docs/build/building-on-the-command-line.md
@@ -1,317 +1,355 @@
---
title: "Use the Microsoft C++ Build Tools from the command line"
-description: "Use the Microsoft C++ (MSVC) Build Tools from the command line outside of the Visual Studio IDE."
+description: "Learn how to install and use the Microsoft C++ (MSVC) Build Tools from the command line."
ms.custom: "conceptual"
-ms.date: 04/07/2022
-helpviewer_keywords: ["command-line builds [C++]", "compiling source code [C++], command line", "builds [C++], command-line", "command line [C++], building from", "command line [C++], compilers"]
-ms.assetid: 7ca9daed-a003-4162-842d-908f79058365
+ms.date: 06/02/2026
ms.topic: how-to
+helpviewer_keywords: ["command-line builds [C++]", "compiling source code [C++], command line", "builds [C++], command-line", "command line [C++], building from", "command line [C++], compilers"]
+#custom intent: As a C++ developer, I want to understand the options for using the command line to compile and build my software projects.
---
# Use the Microsoft C++ Build Tools from the command line
-You can build C and C++ applications on the command line by using tools that are included in Visual Studio. The Microsoft C++ (MSVC) Build Tools are also downloadable as a standalone package. You don't need to install the Visual Studio IDE if you don't plan to use it.
+You can build C and C++ applications on the command line by using tools that are included in Visual Studio. You can also download the Microsoft C++ (MSVC) Build Tools as a standalone package. You don't need to install the Visual Studio IDE if you don't plan to use it.
> [!NOTE]
-> This article is about how to set up an environment to use the individual compilers, linkers, librarian, and other basic tools. The native project build system in Visual Studio, based on MSBuild, doesn't use the environment as described in this article. For more information on how to use MSBuild from the command line, see [MSBuild on the command line - C++](msbuild-visual-cpp.md).
+> This article is about how to set up an environment to use the individual compilers, linkers, libraries, and other basic tools. The native project build system in Visual Studio, based on MSBuild, doesn't use the environment as described in this article. For more information on how to use MSBuild from the command line, see [MSBuild on the command line - C++](msbuild-visual-cpp.md).
## Download and install the tools
::: moniker range=">=msvc-160"
-If you've installed Visual Studio and a C++ workload, you have all the command-line tools. For information on how to install C++ and Visual Studio, see [Install C++ support in Visual Studio](vscpp-step-0-installation.md). If you only want the command-line toolset, download the [Build Tools for Visual Studio](https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022). When you run the downloaded executable, it updates and runs the Visual Studio Installer. To install only the tools you need for C++ development, select the **Desktop development with C++** workload. You can select optional libraries and toolsets to include under **Installation details**. To build code by using the Visual Studio 2015, 2017, or 2019 toolsets, select the optional MSVC v140, v141, or v142 build tools. When you're satisfied with your selections, choose **Install**.
+If you installed Visual Studio and a C++ workload, you have all the command-line tools. For information on how to install C++ and Visual Studio, see [Install C++ support in Visual Studio](vscpp-step-0-installation.md).
+
+If you want only the command-line toolset, download the [Build Tools for Visual Studio](https://visualstudio.microsoft.com/downloads/). On the downloads page, expand **Tools for Visual Studio** to find the Build Tools download. When you run the downloaded executable, it updates and runs the Visual Studio Installer.
+
+To install only the tools you need for C++ development, select the **Desktop development with C++** workload. Under **Installation details**, you can select optional libraries and toolsets. To build code by using the Visual Studio 2015, Visual Studio 2017, or Visual Studio 2019 toolsets, select the optional MSVC v140, v141, or v142 build tools. When you're satisfied with your selections, choose **Install**.
::: moniker-end
::: moniker range="<=msvc-150"
-If you've installed Visual Studio and a C++ workload, you have all the command-line tools. For information on how to install C++ and Visual Studio, see [Install C++ support in Visual Studio](vscpp-step-0-installation.md). If you only want the command-line toolset, download the [Build Tools for Visual Studio 2017](https://my.visualstudio.com/Downloads?q=2017). When you run the downloaded executable, it updates and runs the Visual Studio Installer. To install only the tools you need for C++ development, select the **Desktop development with C++** workload. You can select optional libraries and toolsets to include under **Installation details**. To build code by using the Visual Studio 2015 toolset, select the optional MSVC v140 build tools. When you're satisfied with your selections, choose **Install**.
+If you installed Visual Studio and a C++ workload, you have all the command-line tools. For information on how to install C++ and Visual Studio, see [Install C++ support in Visual Studio](vscpp-step-0-installation.md).
+
+If you want only the command-line toolset, download the [Build Tools for Visual Studio 2017](https://my.visualstudio.com/Downloads?q=2017). When you run the downloaded executable, it updates and runs the Visual Studio Installer.
+
+To install only the tools you need for C++ development, select the **Desktop development with C++** workload. Under **Installation details**, you can select optional libraries and toolsets. To build code by using the Visual Studio 2015 toolset, select the optional MSVC v140 build tools. When you're satisfied with your selections, choose **Install**.
::: moniker-end
## How to use the command-line tools
-When you choose one of the C++ workloads in the Visual Studio Installer, by default, it installs a particular version of the MSVC Build Tools package. For Visual Studio 2022 and earlier, this is organized by a *platform toolset* (v### version format) that has all the C and C++ tools for a specific version of Visual Studio. For Visual Studio 2026 and later, this consists of the MSVC version (v##.## version format), which has all the C and C++ tools for that particular MSVC package. The MSVC version is decoupled from the Visual Studio version. The tools include the C/C++ compilers, linkers, assemblers, and other build tools, and matching libraries and header files. You can use all of these tools at the command-line. They're also used internally by the Visual Studio IDE. There are separate x86-hosted and x64-hosted compilers and tools that build code for x86, x64, ARM, and ARM64 targets. Each set of tools for a particular host and target build architecture is stored in its own directory.
+When you choose one of the C++ workloads in the Visual Studio Installer, it installs a specific version of the MSVC Build Tools package by default. For Visual Studio 2022 and earlier, the package is organized by a *platform toolset* (v### version format) that includes all the C and C++ tools for a specific version of Visual Studio. Starting with Visual Studio 2026, the MSVC version is decoupled from the Visual Studio version. In other words, from Visual Studio 2026 onwards the package corresponds to the MSVC toolset version (v##.## version format), which includes all the C and C++ tools for that particular MSVC Build Tools package.
-To work correctly, the tools require several specific environment variables to be set. These variables are used to add the tools to the path, and to set the locations of include files, library files, and SDKs. To make it easy to set these environment variables, the installer creates customized *command files*, or batch files, during installation. You can run one of these command files to set a specific host and target build architecture, Windows SDK version, and platform toolset. For convenience, the installer also creates shortcuts in your Start menu. The shortcuts open developer command prompt windows by using these command files for specific combinations of host and target. These shortcuts ensure all the required environment variables are set and ready to use.
+The tools include the C/C++ compilers, linkers, assemblers, and other build tools. It includes matching libraries and header files. You can use all of these tools at the command line. The Visual Studio IDE uses them internally. There are separate x86-hosted and x64-hosted compilers and tools that build code for x86, x64, ARM, and ARM64 targets. Each set of tools for a particular host and target build architecture is stored in its own directory.
-The required environment variables are specific to your installation and to the build architecture you choose. They also might be changed by product updates or upgrades. This variability is one reason why we recommend you use an installed command prompt shortcut or command file, instead of setting the environment variables yourself.
+The tools require several environment variables to be set. These variables add the tools to the path and set the locations of include files, library files, and SDKs. To make it easy to set these environment variables, the installer creates customized *command files*, or batch files, during installation. You can run one of these command files to set a specific host and target build architecture, Windows SDK version, and platform toolset.
-The toolsets, command files, and shortcuts installed depend on your computer processor and the options you selected during installation. The x86-hosted tools and cross tools that build x86 and x64 code are always installed. If you have 64-bit Windows, the x64-hosted tools and cross tools that build x86 and x64 code are also installed. If you choose the optional C++ Universal Windows Platform tools, then the x86 and x64 tools that build ARM and ARM64 code also get installed. Other workloads may install these and other tools.
+For convenience, the installer also creates shortcuts in your **Start** menu. The shortcuts open developer Command Prompt windows by using these command files for specific combinations of host and target architectures. These shortcuts ensure all the required environment variables are set and ready to use.
-## Path and environment variables for command-line builds
+The required environment variables are specific to your installation and to the build architecture you choose. Product updates or upgrades might change the variables. This variability is one reason why we recommend you use an installed command prompt shortcut or command file, instead of setting the environment variables yourself.
-The MSVC command-line tools use the `PATH`, `TMP`, `INCLUDE`, `LIB`, and `LIBPATH` environment variables, and also use other environment variables specific to your installed tools, platforms, and SDKs. Even a simple Visual Studio installation may set twenty or more environment variables. This complexity is why we strongly recommend that you use a [developer command prompt shortcut](#developer_command_prompt_shortcuts) or one of the [customized command files](#developer_command_file_locations). We don't recommend you set these variables in the Windows environment yourself.
+The toolsets, command files, and shortcuts that the installer adds depend on your computer processor and the options you select during installation. The x86-hosted tools and cross tools that build x86 and x64 code are always installed. If you have 64-bit Windows, the x64-hosted tools and cross tools that build x86 and x64 code are also installed. If you choose the optional C++ Universal Windows Platform tools, the x86 and x64 tools that build ARM and ARM64 code are also installed. Other workloads can install these tools.
-To see which environment variables are set by a developer command prompt shortcut, you can use the `SET` command. Open a plain command prompt window and capture the output of the `SET` command for a baseline. Open a developer command prompt window and capture the output of the `SET` command for comparison. Use a diff tool such as the one built into Visual Studio to highlight the environment variables set by the developer command prompt. For more information about the compiler and linker environment variables, see [CL environment variables](reference/cl-environment-variables.md).
+## Path and environment variables for command-line builds
-## Developer command prompt shortcuts
+The MSVC command-line tools use the `PATH`, `TMP`, `INCLUDE`, `LIB`, and `LIBPATH` environment variables. They also use other environment variables specific to your installed tools, platforms, and SDKs. Even a simple Visual Studio installation can set twenty or more environment variables. This complexity is why we strongly recommend that you use a [developer command prompt shortcut](#developer_command_prompt_shortcuts) or one of the [customized command files](#developer_command_file_locations). We don't recommend you set these variables in the Windows environment yourself.
-The command prompt shortcuts are installed in a version-specific Visual Studio folder in your Windows Start menu. Here's a list of the base command prompt shortcuts and the build architectures they support:
+To see which environment variables a developer command prompt shortcut sets, use the `SET` command. Open a plain Command Prompt window and capture the output of the `SET` command for a baseline. Open a developer Command Prompt window and capture the output of the `SET` command for comparison. Use a diff tool such as the one built into Visual Studio to highlight the environment variables set by the developer command prompt. For more information about the compiler and linker environment variables, see [CL environment variables](reference/cl-environment-variables.md).
-- **Developer Command Prompt** - Sets the environment to use 32-bit, x86-native tools to build 32-bit, x86-native code.
-- **x86 Native Tools Command Prompt** - Sets the environment to use 32-bit, x86-native tools to build 32-bit, x86-native code.
-- **x64 Native Tools Command Prompt** - Sets the environment to use 64-bit, x64-native tools to build 64-bit, x64-native code.
-- **x86_x64 Cross Tools Command Prompt** - Sets the environment to use 32-bit, x86-native tools to build 64-bit, x64-native code.
-- **x64_x86 Cross Tools Command Prompt** - Sets the environment to use 64-bit, x64-native tools to build 32-bit, x86-native code.
+## Developer command prompt shortcuts
-::: moniker range=">= msvc-160"
+The command prompt shortcuts are installed in a version-specific Visual Studio folder in your Windows **Start** menu. Here's a list of the base command prompt shortcuts and the build architectures they support:
-The Start menu folder and shortcut names vary depending on the installed version of Visual Studio. If you set one, they also depend on the installation **Nickname**. For example, suppose you installed Visual Studio 2022, and you gave it a nickname of *Latest*. The developer command prompt shortcut is named **Developer Command Prompt for VS 2022 (Latest)**, in a folder named **Visual Studio 2022**.
+- **Developer Command Prompt**. Sets the environment to use 32-bit x86 tools to build 32-bit x86 code.
+- **x86 Native Tools Command Prompt**. Sets the environment to use 32-bit x86 tools to build 32-bit x86 code.
+- **x64 Native Tools Command Prompt**. Sets the environment to use 64-bit x64 tools to build 64-bit x64 code.
+- **x86_x64 Cross Tools Command Prompt**. Sets the environment to use 32-bit x86 tools to build 64-bit x64 code.
+- **x64_x86 Cross Tools Command Prompt**. Sets the environment to use 64-bit x64 tools to build 32-bit x86 code.
+::: moniker range=">=msvc-180"
+The **Start** menu folder and shortcut names vary depending on the installed version of Visual Studio. For example, suppose you installed the Visual Studio 2026 Insiders version. The developer command prompt shortcut is named **Developer Command Prompt for VS Insiders** in **Start** > **Programs** > **Visual Studio** > **Visual Studio Tools**.
+::: moniker-end
+::: moniker range="msvc-170"
+The **Start** menu folder and shortcut names vary depending on the installed version of Visual Studio. For example, the developer prompt shortcut for Visual Studio 2022 is named **Developer Command Prompt for VS 2022** in **Start** > **Programs** > **Visual Studio 2022** > **Visual Studio Tools**.
+::: moniker-end
+::: moniker range="msvc-160"
+The **Start** menu folder and shortcut names vary depending on the installed version of Visual Studio. For example, the developer prompt shortcut for Visual Studio 2019 is named **Developer Command Prompt for VS 2019** in **Start** > **Programs** > **Visual Studio 2019** > **Visual Studio Tools**.
::: moniker-end
::: moniker range="msvc-150"
-
-The Start menu folder and shortcut names vary depending on the installed version of Visual Studio. If you set one, they also depend on the installation **Nickname**. For example, suppose you installed Visual Studio 2017, and you gave it a nickname of *Latest*. The developer command prompt shortcut is named **Developer Command Prompt for VS 2017 (Latest)**, in a folder named **Visual Studio 2017**.
-
+The **Start** menu folder and shortcut names vary depending on the installed version of Visual Studio. For example, the developer prompt shortcut for Visual Studio 2017 is named **Developer Command Prompt for VS 2017** in **Start** > **Programs** > **Visual Studio 2017** > **Visual Studio Tools**.
::: moniker-end
::: moniker range="< msvc-150"
-
-The Start menu folder and shortcut names vary depending on the installed version of Visual Studio. For example, suppose you installed Visual Studio 2015. The developer command prompt shortcut is named **Developer Command Prompt for VS 2015**.
-
+The **Start** menu folder and shortcut names vary depending on the installed version of Visual Studio. For example, the developer prompt shortcut for Visual Studio 2015 is named **Developer Command Prompt for VS 2015** in **Start** > **Programs** > **Visual Studio 2015** > **Visual Studio Tools**.
::: moniker-end
> [!NOTE]
-> Several command-line tools or tool options may require Administrator permission. If you have permission issues when you use them, we recommend that you open the developer command prompt window by using the **Run as Administrator** option. Right-click to open the shortcut menu for the command prompt window, then choose **More**, **Run as administrator**.
+> Several command-line tools or tool options require Administrator privileges. If you have permission issues when you use them, we recommend that you open the developer Command Prompt window by using the **Run as Administrator** option. Right-click to open the shortcut menu for the Command Prompt window, then choose **More** > **Run as administrator**.
-### To open a developer command prompt window
+### To open a developer Command Prompt window
-1. On the desktop, open the Windows **Start** menu. In Windows 11, choose the **All apps** button to open the list of installed apps. In Windows 10, the list is open to the left. Scroll down the list to find and open the folder (not the app) for your version of Visual Studio, for example, **Visual Studio 2022**.
-
-1. In the folder, choose the **Developer Command Prompt** for your version of Visual Studio. This shortcut starts a developer command prompt window that uses the default build architecture of 32-bit, x86-native tools to build 32-bit, x86-native code. If you prefer a non-default build architecture, choose one of the native or cross tools command prompts to specify the host and target architecture.
+1. On the desktop, open the Windows **Start** menu. In Windows 11, choose **All apps** to open the list of installed apps. In Windows 10, the list is open to the left. Scroll down the list to find and open the folder (not the app) for your version of Visual Studio, such as **Visual Studio 2022** or **Visual Studio** for version 2026 and later.
+1. In the folder, choose the **Developer Command Prompt** for your version of Visual Studio. This shortcut starts a developer Command Prompt window that sets the environment to use 32-bit x86 tools to build 32-bit x86 code. If you prefer a nondefault build architecture, choose one of the native or cross tools command prompts to specify the host and target architecture.
For an even faster way to open a developer command prompt, enter *developer command prompt* in the desktop search box. Then choose the result you want.
> [!NOTE]
-> By default, the current working directory in a developer command prompt is the root of your Visual Studio installation in the Program Files directory. This isn't an appropriate location for your code and projects. Change the current working directory to another location before you create a project. The IDE creates projects in your user directory, typically in *%USERPROFILE%\\source\\repos*.
+> By default, the current working directory in a developer command prompt is the root of your Visual Studio installation in the Program Files directory. This location isn't appropriate for your code and projects. Change the current working directory to another location before you create a project. The IDE creates projects in your user directory, typically in `%USERPROFILE%\source\repos`.
## Developer command file locations
-If you prefer to set the build environment in an existing command prompt window, you can use one of the command files created by the installer. We recommend you set the environment in a new command prompt window. We don't recommend you later switch environments in the same command window.
+If you prefer to set the build environment in an existing Command Prompt window, you can use one of the command files created by the installer. We recommend you set the environment in a new Command Prompt window. We don't recommend you later switch environments in the same command window.
-::: moniker range=">= msvc-170"
+::: moniker range=">= msvc-180"
-The command file location depends on the version of Visual Studio you installed, and on choices you made during installation. For Visual Studio 2019, the typical installation location on a 64-bit system is in *`\Program Files\Microsoft Visual Studio\2022\`*. The *``* may be Community, Professional, Enterprise, BuildTools, or another nickname you supplied.
+The command file location depends on the version of Visual Studio you installed, and on choices you made during installation. For Visual Studio 2026 and later, the typical installation location on a 64-bit system is `C:\Program Files\Microsoft Visual Studio\18\`. The `` can be `Insiders`, `Community`, `Professional`, `Enterprise`, `BuildTools`.
+
+::: moniker-end
+::: moniker range="= msvc-170"
+
+The command file location depends on the version of Visual Studio you installed, and on choices you made during installation. For Visual Studio 2022, the typical installation location is `C:\Program Files\Microsoft Visual Studio\2022\`. The `` can be `Community`, `Professional`, `Enterprise`, `BuildTools`.
::: moniker-end
::: moniker range="= msvc-160"
-The command file location depends on the version of Visual Studio you installed, and on choices you made during installation. For Visual Studio 2019, the typical installation location on a 64-bit system is in *`\Program Files (x86)\Microsoft Visual Studio\2019\`*. The *``* may be Community, Professional, Enterprise, BuildTools, or another nickname you supplied.
+The command file location depends on the version of Visual Studio you installed, and on choices you made during installation. For Visual Studio 2019, the typical installation location on a 64-bit system is `C:\Program Files (x86)\Microsoft Visual Studio\2019\`. The `` can be `Community`, `Professional`, `Enterprise`, `BuildTools`.
::: moniker-end
::: moniker range="= msvc-150"
-The command file location depends on the version of Visual Studio you installed, and on choices you made during installation. For Visual Studio 2017, the typical installation location on a 64-bit system is in *`\Program Files (x86)\Microsoft Visual Studio\2017\`*. The *``* may be Community, Professional, Enterprise, BuildTools, or another nickname you supplied.
+The command file location depends on the version of Visual Studio you installed, and on choices you made during installation. For Visual Studio 2017, the typical installation location on a 64-bit system is `C:\Program Files (x86)\Microsoft Visual Studio\2017\`. The `` can be `Community`, `Professional`, `Enterprise`, `BuildTools`.
::: moniker-end
::: moniker range="< msvc-150"
-The command file location depends on the Visual Studio version, and the installation directory. For Visual Studio 2015, the typical installation location on a 64-bit system is in *`\Program Files (x86)\Microsoft Visual Studio 14.0`*.
+The command file location depends on the Visual Studio version, and the installation directory. For Visual Studio 2015, the typical installation location on a 64-bit system is `C:\Program Files (x86)\Microsoft Visual Studio 14.0`.
::: moniker-end
-The primary developer command prompt command file, *`VsDevCmd.bat`*, is located in the *`Common7\Tools`* subdirectory. When no parameters are specified, it sets the environment to use the x86-native tools to build 32-bit x86 code.
+The primary developer command prompt command file, `VsDevCmd.bat`, is located in the `Common7\Tools` directory. When you don't specify parameters, it sets the environment to use the x86-native tools to build 32-bit x86 code.
::: moniker range=">= msvc-150"
-More command files are available to set up specific build architectures. The command files available depend on the Visual Studio workloads and options you've installed. In Visual Studio 2017 and Visual Studio 2019, you'll find them in the VC\\Auxiliary\\Build subdirectory.
+More command files are available to set up specific build architectures. The command files available depend on the Visual Studio workloads and options you installed. In Visual Studio 2017 and Visual Studio 2019, you find them in the `VC\Auxiliary\Build` directory.
::: moniker-end
::: moniker range="< msvc-150"
-More command files are available to set up specific build architectures. The command files available depend on the Visual Studio workloads and options you've installed. In Visual Studio 2015, they're located in the VC, VC\\bin, or VC\\bin\\*architecture* subdirectories, where *architecture* is one of the native or cross-compiler options.
+More command files are available to set up specific build architectures. The command files available depend on the Visual Studio workloads and options you installed. In Visual Studio 2015, they're located in the `VC`, `VC\bin`, or `VC\bin\` directories, where `` is one of the native or cross-compiler options.
::: moniker-end
-These command files set default parameters and call *`VsDevCmd.bat`* to set up the specified build architecture environment. A typical installation may include these command files:
+These command files set default parameters and call `VsDevCmd.bat` to set up the specified build architecture environment. A typical installation might include these command files:
| Command File | Host and Target architectures |
|--|--|
-| *`vcvars32.bat`* | Use the 32-bit x86-native tools to build 32-bit x86 code. |
-| *`vcvars64.bat`* | Use the 64-bit x64-native tools to build 64-bit x64 code. |
-| *`vcvarsx86_amd64.bat`* | Use the 32-bit x86-native cross tools to build 64-bit x64 code. |
-| *`vcvarsamd64_x86.bat`* | Use the 64-bit x64-native cross tools to build 32-bit x86 code. |
-| *`vcvarsx86_arm.bat`* | Use the 32-bit x86-native cross tools to build ARM code. |
-| *`vcvarsamd64_arm.bat`* | Use the 64-bit x64-native cross tools to build ARM code. |
-| *`vcvarsx86_arm64.bat`* | Use the 32-bit x86-native cross tools to build ARM64 code. |
-| *`vcvarsamd64_arm64.bat`* | Use the 64-bit x64-native cross tools to build ARM64 code. |
-| *`vcvarsall.bat`* | Use parameters to specify the host and target architectures, Windows SDK, and platform choices. For a list of supported options, call by using a `/help` parameter. |
+| `vcvars32.bat` | Use the 32-bit x86-native tools to build 32-bit x86 code. |
+| `vcvars64.bat` | Use the 64-bit x64-native tools to build 64-bit x64 code. |
+| `vcvarsx86_amd64.bat` | Use the 32-bit x86-native cross tools to build 64-bit x64 code. |
+| `vcvarsamd64_x86.bat` | Use the 64-bit x64-native cross tools to build 32-bit x86 code. |
+| `vcvarsx86_arm.bat` | Use the 32-bit x86-native cross tools to build ARM code. |
+| `vcvarsamd64_arm.bat` | Use the 64-bit x64-native cross tools to build ARM code. |
+| `vcvarsx86_arm64.bat` | Use the 32-bit x86-native cross tools to build ARM64 code. |
+| `vcvarsamd64_arm64.bat` | Use the 64-bit x64-native cross tools to build ARM64 code. |
+| `vcvarsall.bat` | Use parameters to specify the host and target architectures, Windows SDK, and platform choices. For a list of supported options, call by using a `/help` parameter. |
> [!CAUTION]
-> The *`vcvarsall.bat`* file and other Visual Studio command files can vary from computer to computer. Do not replace a missing or damaged *`vcvarsall.bat`* file by using a file from another computer. Rerun the Visual Studio installer to replace the missing file.
+> The `vcvarsall.bat` file and other Visual Studio command files can vary from computer to computer. Don't replace a missing or damaged `vcvarsall.bat` file by using a file from another computer. Rerun the Visual Studio installer to replace the missing file.
>
-> The *`vcvarsall.bat`* file also varies from version to version. If the current version of Visual Studio is installed on a computer that also has an earlier version of Visual Studio, do not run *`vcvarsall.bat`* or another Visual Studio command file from different versions in the same command prompt window.
+> The `vcvarsall.bat` file also varies from version to version. If the current version of Visual Studio is installed on a computer that also has an earlier version of Visual Studio, don't run `vcvarsall.bat` or another Visual Studio command file from different versions in the same Command Prompt window.
## Use the developer tools in an existing command window
-The simplest way to specify a particular build architecture in an existing command window is to use the *`vcvarsall.bat`* file. Use *`vcvarsall.bat`* to set environment variables to configure the command line for native 32-bit or 64-bit compilation. Arguments let you specify cross-compilation to x86, x64, ARM, or ARM64 processors. You can target Microsoft Store, Universal Windows Platform, or Windows Desktop platforms. You can even specify which Windows SDK to use, and select the platform toolset version.
+The simplest way to specify a particular build architecture in an existing command window is to use the `vcvarsall.bat` file. Use `vcvarsall.bat` to set environment variables to configure the Command Prompt window for native 32-bit or 64-bit compilation. Arguments let you specify cross-compilation to x86, x64, ARM, or ARM64 processors. You can target Microsoft Store, Universal Windows Platform, or Windows Desktop platforms. You can even specify which Windows SDK to use, and select the platform toolset version.
-When used with no arguments, *`vcvarsall.bat`* configures the environment variables to use the current x86-native compiler for 32-bit Windows Desktop targets. You can add arguments to configure the environment to use any of the native or cross compiler tools. *`vcvarsall.bat`* displays an error message if you specify a configuration that's not installed, or not available on your computer.
+When you use `vcvarsall.bat` with no arguments, it configures the environment variables to use the current x86-native compiler for 32-bit Windows Desktop targets. Add arguments to configure the environment to use any of the native or cross compiler tools. `vcvarsall.bat` displays an error message if you specify a configuration that isn't installed, or isn't available on your computer.
### `vcvarsall` syntax
-> **`vcvarsall.bat`** [*`architecture`*] [*`platform_type`*] [*`winsdk_version`*] [**`-vcvars_ver=`***`vcversion`*] [*`spectre_mode`*]
+`vcvarsall.bat` [`architecture`] [`platform_type`] [`winsdk_version`] [`-vcvars_ver=`*`vcversion`*] [`spectre_mode`]
-*`architecture`*
-This optional argument specifies the host and target architecture to use. If *architecture* isn't specified, the default build environment is used. These arguments are supported:
+- `architecture`
-| *`architecture`* | Compiler | Host computer architecture | Build output (target) architecture |
-|--|--|--|--|
-| `x86` | x86 32-bit native | x86, x64 | x86 |
-| `x86_amd64` or `x86_x64` | x64 on x86 cross | x86, x64 | x64 |
-| `x86_arm` | ARM on x86 cross | x86, x64 | ARM |
-| `x86_arm64` | ARM64 on x86 cross | x86, x64 | ARM64 |
-| `amd64` or `x64` | x64 64-bit native | x64 | x64 |
-| `amd64_x86` or `x64_x86` | x86 on x64 cross | x64 | x86 |
-| `amd64_arm` or `x64_arm` | ARM on x64 cross | x64 | ARM |
-| `amd64_arm64` or `x64_arm64` | ARM64 on x64 cross | x64 | ARM64 |
+ This optional argument specifies the host and target architecture to use. If you don't specify `architecture`, the default build environment is used. The following arguments are supported:
-*`platform_type`*
-This optional argument allows you to specify **`store`** or **`uwp`** as the platform type. By default, the environment is set to build desktop or console apps.
+ | `architecture` | Compiler | Host computer architecture | Build output (target) architecture |
+ |--|--|--|--|
+ | `x86` | x86 32-bit native | x86, x64 | x86 |
+ | `x86_amd64` or `x86_x64` | x64 on x86 cross | x86, x64 | x64 |
+ | `x86_arm` | ARM on x86 cross | x86, x64 | ARM |
+ | `x86_arm64` | ARM64 on x86 cross | x86, x64 | ARM64 |
+ | `amd64` or `x64` | x64 64-bit native | x64 | x64 |
+ | `amd64_x86` or `x64_x86` | x86 on x64 cross | x64 | x86 |
+ | `amd64_arm` or `x64_arm` | ARM on x64 cross | x64 | ARM |
+ | `amd64_arm64` or `x64_arm64` | ARM64 on x64 cross | x64 | ARM64 |
-*`winsdk_version`*
-Optionally specifies the version of the Windows SDK to use. By default, the latest installed Windows SDK is used. To specify the Windows SDK version, you can use a full Windows SDK number such as **`10.0.10240.0`**, or specify **`8.1`** to use the Windows 8.1 SDK.
+- `platform_type`
-*`vcversion`*
-Optionally specifies the Visual Studio compiler toolset to use. By default, the environment is set to use the current Visual Studio compiler toolset.
+ This optional argument specifies `store` or `uwp` as the platform type. By default, the environment is set to build desktop or console apps.
-::: moniker range=">= msvc-160"
+- `winsdk_version`
-Use **-vcvars_ver=14.2x.yyyyy** to specify a specific version of the Visual Studio 2019 compiler toolset.
+ Optionally specifies the version of the Windows SDK to use. By default, the latest installed Windows SDK is used. To specify the Windows SDK version, use a full Windows SDK number such as `10.0.10240.0`, or specify `8.1` to use the Windows 8.1 SDK.
-Use **-vcvars_ver=14.29** to specify the latest version of the Visual Studio 2019 compiler toolset.
+- `vcversion`
-::: moniker-end
-::: moniker range="= msvc-150"
+ Optionally specifies the Visual Studio compiler toolset to use. By default, the environment uses the latest installed Visual Studio compiler toolset. The following table shows example `vcvars_ver` values:
-Use **-vcvars_ver=14.16** to specify the latest version of the Visual Studio 2017 compiler toolset.
+ | `vcvars_ver={value}` | Result | VS 2026 example | VS 2022 example | VS 2019 example | VS 2017 example |
+ |--|--|--|--|--|--|
+ | `"Preview"` | Use the Visual Studio preview compiler toolset. | Supported | Not supported | Not supported | Not supported |
+ | `"14.0"` | Use the Visual Studio 2015 compiler toolset. | Supported | Supported | Supported | Supported |
+ | `"14.xx"` | Use the latest installed `14.xx.yyyyy` toolset. | `"14.51"` | `"14.44"` | `"14.29"` | `"14.16"` |
+ | `"14.xx.yyyyy"` | Use a specific full version number. | `"14.51.36231"` | `"14.44.35207"` | `"14.29.30133"` | `"14.16.27034"` |
-Use **-vcvars_ver=14.1x.yyyyy** to specify a specific version of the Visual Studio 2017 compiler toolset.
+- `spectre_mode`
-::: moniker-end
+ Leave this parameter out to use libraries without Spectre mitigations. Specify `spectre` to use libraries with Spectre mitigations.
+
+#### To set up the build environment in an existing Command Prompt window
-Use **-vcvars_ver=14.0** to specify the Visual Studio 2015 compiler toolset.
+1. At the command prompt, use the `CD` command to change to the Visual Studio installation directory. For example, `C:\Program Files\Microsoft Visual Studio\18\Professional` if you are using Visual studio 2026. Then, use `CD` again to change to the subdirectory that contains the configuration-specific command files. For Visual Studio 2017 and beyond, use the `VC\Auxiliary\Build` subdirectory. For Visual Studio 2015, use the `VC` subdirectory.
+1. Enter the command for your preferred developer environment. For example, to build ARM code for UWP on a 64-bit platform, using the latest Windows SDK and Visual Studio compiler toolset, use this command:
-*`spectre_mode`*\
-Leave this parameter out to use libraries without Spectre mitigations. Use the value **`spectre`** to use libraries with Spectre mitigations.
+ ```cmd
+ vcvarsall.bat amd64_arm uwp
+ ```
-#### To set up the build environment in an existing command prompt window
+## Create your own command prompt shortcut
-1. At the command prompt, use the CD command to change to the Visual Studio installation directory. Then, use CD again to change to the subdirectory that contains the configuration-specific command files. For Visual Studio 2019 and Visual Studio 2017, use the *VC\\Auxiliary\\Build* subdirectory. For Visual Studio 2015, use the *VC* subdirectory.
+::: moniker range=">=msvc-180"
-1. Enter the command for your preferred developer environment. For example, to build ARM code for UWP on a 64-bit platform, using the latest Windows SDK and Visual Studio compiler toolset, use this command line:
+Open the **Properties** dialog for a developer command prompt shortcut to see the command target used. For example, the target for the **x64 Native Tools Command Prompt for VS** shortcut is similar to:
- `vcvarsall.bat amd64_arm uwp`
+```cmd
+%comspec% /k "C:\Program Files\Microsoft Visual Studio\18\Professional\VC\Auxiliary\Build\vcvars64.bat"
+```
-## Create your own command prompt shortcut
+:::moniker-end
+::: moniker range="=msvc-170"
-::: moniker range=">= msvc-160"
+Open the **Properties** dialog for a developer command prompt shortcut to see the command target used. For example, the target for the **Developer Command Prompt for VS 2022** shortcut is similar to:
-Open the Properties dialog for a developer command prompt shortcut to see the command target used. For example, the target for the **x64 Native Tools Command Prompt for VS 2019** shortcut is something similar to:
+```cmd
+%comspec% /k "C:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\Tools\VsDevCmd.bat"
+```
-`%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"`
+:::moniker-end
+::: moniker range="= msvc-160"
+
+Open the **Properties** dialog for a developer command prompt shortcut to see the command target used. For example, the target for the **Developer Command Prompt for VS 2019** shortcut is similar to:
+
+```cmd
+%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\Tools\VsDevCmd.bat"
+```
::: moniker-end
::: moniker range="= msvc-150"
-Open the Properties dialog for a developer command prompt shortcut to see the command target used. For example, the target for the **x64 Native Tools Command Prompt for VS 2017** shortcut is something similar to:
+Open the **Properties** dialog for a developer command prompt shortcut to see the command target used. For example, the target for the **Developer Command Prompt for VS 2017** shortcut is similar to:
-`%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"`
+```cmd
+%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Tools\VsDevCmd.bat"
+```
::: moniker-end
::: moniker range="< msvc-150"
-Open the Properties dialog for a developer command prompt shortcut to see the command target used. For example, the target for the **VS2015 x64 Native Tools Command Prompt** shortcut is something similar to:
+Open the **Properties** dialog for a developer command prompt shortcut to see the command target used. For example, the target for the **Developer Command Prompt for VS2015** shortcut is similar to:
-`%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64`
+```cmd
+%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat"
+```
::: moniker-end
-The architecture-specific batch files set the *`architecture`* parameter and call *`vcvarsall.bat`*. You can pass the same options to these batch files as you would pass to *`vcvarsall.bat`*, or you can just call *`vcvarsall.bat`* directly. To specify parameters for your own command shortcut, add them to the end of the command in double-quotes. For example, here's a shortcut to build ARM code for UWP on a 64-bit platform, using the latest Windows SDK. To use an earlier compiler toolset, specify the version number. Use something like this command target in your shortcut:
+The architecture-specific batch files set the `architecture` parameter and call `vcvarsall.bat`. You can pass the same options to these batch files as you pass to `vcvarsall.bat`, or you can just call `vcvarsall.bat` directly. To specify parameters for your own command shortcut, add them to the end of the command in double quotes. To use an earlier compiler toolset, specify the version number.
-::: moniker range=">= msvc-160"
+You can only target ARM64 starting with Visual Studio 2026 because ARM32 targeting was removed then.
-`%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64_arm uwp -vcvars_ver=14.29`
+Here's a shortcut to build ARM64 code for UWP on a 64-bit platform, using the latest Windows SDK. Targeting ARM64 is shown for Visual Studio 2026 and later. Targeting ARM32 is shown for earlier versions.
-::: moniker-end
-::: moniker range="= msvc-150"
+::: moniker range=">= msvc-180"
-`%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64_arm uwp -vcvars_ver=14.19`
+```cmd
+%comspec% /k "C:\Program Files\Microsoft Visual Studio\18\Professional\VC\Auxiliary\Build\vcvarsall.bat" amd64_arm64 uwp -vcvars_ver=14.50
+```
::: moniker-end
-::: moniker range="< msvc-150"
+::: moniker range="= msvc-170"
-`%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64 -vcvars_ver=14.0`
+```cmd
+%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" amd64_arm uwp -vcvars_ver=14.44
+```
::: moniker-end
+::: moniker range="= msvc-160"
-Adjust the path to reflect your Visual Studio installation directory. The vcvarsall.bat file has additional information about specific version numbers.
+```cmd
+%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64_arm uwp -vcvars_ver=14.29
+```
-## Command-line tools
-
-To build a C/C++ project at a command prompt, Visual Studio provides these command-line tools:
+::: moniker-end
+::: moniker range="= msvc-150"
-[`CL`](reference/compiling-a-c-cpp-program.md)
-Use the compiler (cl.exe) to compile and link source code files into apps, libraries, and DLLs.
+```cmd
+%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64_arm uwp -vcvars_ver=14.19
+```
-[`Link`](reference/linking.md)
-Use the linker (link.exe) to link compiled object files and libraries into apps and DLLs.
+::: moniker-end
+::: moniker range="< msvc-150"
-When you build on the command line, the F1 command isn't available for instant help. Instead, you can use a search engine to get information about warnings, errors, and messages. You can also download and use the offline help files. To use the search in Microsoft Learn, enter your query in the search box at the top of any article.
+```cmd
+%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64 -vcvars_ver=14.0
+```
-## Command-line project management tools
+::: moniker-end
-By default, the Visual Studio IDE uses native project build systems based on MSBuild. You can invoke MSBuild directly to build projects without using the IDE. You can also use the `devenv` command to use Visual Studio to build projects and solutions. Visual Studio also supports build systems based on CMake or NMake.
+Adjust the path to reflect your Visual Studio installation directory. The `vcvarsall.bat` file has more information about specific version numbers.
-[`MSBuild`](msbuild-visual-cpp.md)\
-Use MSBuild (msbuild.exe) and a project file (.vcxproj) to configure a build and invoke the toolset without loading the Visual Studio IDE. It's equivalent to running the **Build** project or **Build Solution** command in the Visual Studio IDE. MSBuild has advantages over the IDE when you build at the command line. You don't have to install the full IDE on all your build servers and build pipelines. You avoid the extra overhead of the IDE. MSBuild runs in containerized build environments, and supports a [binary logger](https://msbuildlog.com/).
+## Command-line tools
-[`DEVENV`](/visualstudio/ide/reference/devenv-command-line-switches)\
-Use DEVENV (devenv.exe) combined with a command-line switch such as **`/Build`** or **`/Clean`** to execute certain build commands without displaying the Visual Studio IDE.
+To build a C/C++ project at a command prompt, Visual Studio provides these command-line tools:
-[`CMake`](../build/cmake-projects-in-visual-studio.md)\
-CMake (cmake.exe) is a cross-platform, open-source tool for defining build processes that run on multiple platforms. CMake can configure and control native build tools for its supported platforms, such as MSBuild and Make. For more information about CMake, see the [CMake documentation](https://cmake.org/cmake/help/latest/index.html#).
+- [CL](reference/compiling-a-c-cpp-program.md)
-[`NMAKE`](reference/nmake-reference.md)\
-Use NMAKE (nmake.exe) to build C++ projects by using a traditional makefile.
+ Use the compiler (`cl.exe`) to compile and link source code files into apps, libraries, and DLLs.
-> [!NOTE]
-> Starting in Visual Studio 2019 version 16.5, MSBuild and DEVENV don't use the command-line environment to control the toolset and libraries used.
+- [Link](reference/linking.md)
-## In this section
+ Use the linker (`link.exe`) to link compiled object files and libraries into apps and DLLs.
-These articles show how to build apps on the command line, and describe how to customize the command-line build environment. Some show how to use 64-bit toolsets, and target x86, x64, ARM, and ARM64 platforms. They also describe use of the command-line build tools MSBuild and NMAKE.
+When you build on the command line, the F1 command isn't available for instant help. Instead, you can use a search engine to get information about warnings, errors, and messages. You can also download and use the offline help files. To use the search in Microsoft Learn, enter your query in the search box at the top of any article.
-[Walkthrough: Compiling a native C++ program on the command line](walkthrough-compiling-a-native-cpp-program-on-the-command-line.md)
-Gives an example that shows how to create and compile a C++ program on the command line.
+## Command-line project management tools
-[Walkthrough: Compile a C program on the command line](walkthrough-compile-a-c-program-on-the-command-line.md)
-Describes how to compile a program written in the C programming language.
+By default, the Visual Studio IDE uses native project build systems based on MSBuild. You can invoke MSBuild directly to build projects without using the IDE. You can also use the `devenv` command to use Visual Studio to build projects and solutions. Visual Studio also supports build systems based on CMake or NMake.
-[Walkthrough: Compiling a C++/CLI program on the command line](walkthrough-compiling-a-cpp-cli-program-on-the-command-line.md)
-Describes how to create and compile a C++/CLI program that uses the .NET Framework.
+- [MSBuild](msbuild-visual-cpp.md)
-[Walkthrough: Compiling a C++/CX program on the command line](walkthrough-compiling-a-cpp-cx-program-on-the-command-line.md)
-Describes how to create and compile a C++/CX program that uses the Windows Runtime.
+ Use MSBuild (`msbuild.exe`) and a project file (`.vcxproj`) to configure a build and invoke the toolset without loading the Visual Studio IDE. It's equivalent to running the **Build** project or **Build Solution** command in the Visual Studio IDE. MSBuild has advantages over the IDE when you build at the command line. You don't have to install the full IDE on all your build servers and build pipelines. You avoid the extra overhead of the IDE. MSBuild runs in containerized build environments, and supports a [binary logger](https://msbuildlog.com/).
-[NMAKE reference](reference/nmake-reference.md)
-Provides links to articles that describe the Microsoft Program Maintenance Utility (NMAKE.EXE).
+- [DEVENV](/visualstudio/ide/reference/devenv-command-line-switches)
-[MSBuild on the command line - C++](msbuild-visual-cpp.md)
-Provides links to articles that discuss how to use msbuild.exe from the command line.
+ Use DEVENV (`devenv.exe`) combined with a command-line switch such as `/Build` or `/Clean` to execute certain build commands without displaying the Visual Studio IDE.
-## Related sections
+- [CMake](../build/cmake-projects-in-visual-studio.md)
-[/MD, /MT, /LD (Use run-time library)](reference/md-mt-ld-use-run-time-library.md)
-Describes how to use these compiler options to use a Debug or Release run-time library.
+ CMake (`cmake.exe`) is a cross-platform open-source tool for defining build processes that run on multiple platforms. CMake can configure and control native build tools for its supported platforms, such as MSBuild and Make. For more information about CMake, see the [CMake documentation](https://cmake.org/cmake/help/latest/index.html#).
-[C/C++ compiler options](reference/compiler-options.md)
-Provides links to articles that discuss the C and C++ compiler options and CL.exe.
+- [NMAKE](reference/nmake-reference.md)
-[MSVC linker options](reference/linker-options.md)
-Provides links to articles that discuss the linker options and LINK.exe.
+ Use NMAKE (`nmake.exe`) to build C++ projects by using a traditional makefile.
-[Additional MSVC build tools](reference/c-cpp-build-tools.md)
-Provides links to the C/C++ build tools that are included in Visual Studio.
+> [!NOTE]
+> Starting in Visual Studio 2019 version 16.5, MSBuild and DEVENV don't use the command-line environment to control the toolset and libraries used.
## See also
-[Projects and build systems](projects-and-build-systems-cpp.md)
+- [Walkthrough: Compiling a native C++ program on the command line](walkthrough-compiling-a-native-cpp-program-on-the-command-line.md)
+- [Walkthrough: Compile a C program on the command line](walkthrough-compile-a-c-program-on-the-command-line.md)
+- [Walkthrough: Compiling a C++/CLI program on the command line](walkthrough-compiling-a-cpp-cli-program-on-the-command-line.md)
+- [Walkthrough: Compiling a C++/CX program on the command line](walkthrough-compiling-a-cpp-cx-program-on-the-command-line.md)
+- [Projects and build systems](projects-and-build-systems-cpp.md)
+- [`/MD`, `/MT`, `/LD` (Use run-time library)](reference/md-mt-ld-use-run-time-library.md)
+- [C/C++ compiler options](reference/compiler-options.md)
+- [MSVC linker options](reference/linker-options.md)
+- [Additional MSVC build tools](reference/c-cpp-build-tools.md)
diff --git a/docs/build/cmake-presets-vs.md b/docs/build/cmake-presets-vs.md
index 5282a491801..62d80010a54 100644
--- a/docs/build/cmake-presets-vs.md
+++ b/docs/build/cmake-presets-vs.md
@@ -4,6 +4,7 @@ description: "Reference for using CMake Presets to configure and build CMake pro
ms.date: 06/09/2023
ms.topic: reference
ms.custom: sfi-image-nochange
+ai-usage: ai-assisted
---
# Configure and build with CMake Presets in Visual Studio
@@ -460,6 +461,38 @@ The `` part lists other compilation flags, like `"-fno-omit-
Pass runtime flags to AddressSanitizer by using the `ASAN_OPTIONS` field in *`launch.vs.json`*. `ASAN_OPTIONS` defaults to `detect_leaks=0` when no other runtime options are specified because LeakSanitizer isn't supported in Visual Studio.
+## Enable Segment Heap
+
+The Segment Heap is a Windows heap implementation that reduces memory usage and fragmentation. Visual Studio ships a CMake script that enables Segment Heap for your project by adding the required manifest settings. New C++ CMake projects enable Segment Heap by default.
+
+To enable Segment Heap, set `CMAKE_PROJECT_TOP_LEVEL_INCLUDES` in the `cacheVariables` map of your Configure Preset in *`CMakePresets.json`*. Optionally, set the `VS_SEGMENT_HEAP_ALLOWLIST` and `VS_SEGMENT_HEAP_EXCLUDE` environment variables to control which targets in the project use Segment Heap. Separate target names with semicolons:
+
+ ```json
+{
+ "configurePresets": [
+ {
+ // ...
+ "environment": {
+ "VS_SEGMENT_HEAP_ALLOWLIST": "target1;target2;",
+ "VS_SEGMENT_HEAP_EXCLUDE": "target3;"
+ },
+ "cacheVariables": {
+ "CMAKE_PROJECT_TOP_LEVEL_INCLUDES": "$env{VSINSTALLDIR}Common7/IDE/CommonExtensions/Microsoft/CMake/cmake/Microsoft/SegmentHeap.cmake"
+ }
+ }
+ ]
+}
+
+```
+
+> [!NOTE]
+> `CMAKE_PROJECT_TOP_LEVEL_INCLUDES` is available in CMake 3.24 or later.
+
+- `VS_SEGMENT_HEAP_ALLOWLIST` — Apply the Segment Heap manifest entry only to the listed targets. Exclude all other targets.
+- `VS_SEGMENT_HEAP_EXCLUDE` — Exclude the listed targets from using the Segment Heap.
+
+In this example, `CMAKE_PROJECT_TOP_LEVEL_INCLUDES` points to the Visual Studio-provided `SegmentHeap.cmake` script. The optional `VS_SEGMENT_HEAP_ALLOWLIST` and `VS_SEGMENT_HEAP_EXCLUDE` variables show how to include or exclude specific targets. If neither variable is set, Visual Studio enables Segment Heap for all targets. If both variables are set, `VS_SEGMENT_HEAP_ALLOWLIST` takes precedence.
+
## Run CMake from the command line or a CI pipeline
You can use the same *`CMakePresets.json`* and *`CMakeUserPresets.json`* files to invoke CMake in Visual Studio and from the command line. The [CMake](https://cmake.org/cmake/help/latest/manual/cmake.1.html) and [CTest](https://cmake.org/cmake/help/latest/manual/ctest.1.html) documentation are the best resources for invoking CMake and CTest with `--preset`. CMake version 3.20 or later is required.
diff --git a/docs/build/cppproperties-schema-reference.md b/docs/build/cppproperties-schema-reference.md
index cafd37a1e78..8ab040779a0 100644
--- a/docs/build/cppproperties-schema-reference.md
+++ b/docs/build/cppproperties-schema-reference.md
@@ -93,7 +93,7 @@ You can optionally use the `environments` property to define sets of variables i
"mingw_64"
],
"name": "Mingw64",
- "includePath ,": [
+ "includePath": [
"${env.INCLUDE}",
"${workspaceRoot}\\**",
],
diff --git a/docs/build/create-reusable-property-configurations.md b/docs/build/create-reusable-property-configurations.md
index 52af28e0f40..33a1075ce57 100644
--- a/docs/build/create-reusable-property-configurations.md
+++ b/docs/build/create-reusable-property-configurations.md
@@ -1,28 +1,35 @@
---
-description: "Learn more about: Share or reuse Visual Studio project settings"
-title: "Share or reuse Visual Studio project settings - C++"
-ms.date: 02/07/2022
+title: Share or reuse Visual Studio project settings - C++
+description: Learn how to create Visual Studio property sheets to share and reuse C++ project settings across projects. Simplify configuration with Property Manager.
+ms.date: 07/14/2026
helpviewer_keywords: ["project properties [C++], reusable"]
ms.topic: how-to
+#customer intent: As a C++ developer, I want to create a reusable property sheet using Property Manager so that I can share project settings across multiple projects.
---
# Share or reuse Visual Studio project settings
-To create a custom group of settings that you can share with others or reuse in multiple projects, use **Property Manager** to create a *property sheet* (a *`.props`* file) to store the settings for each kind of project that you want to be able to reuse or share with others. Using property sheets are far less error-prone than other ways of creating "global" settings.
+To create a custom group of settings that you can share with others or reuse in multiple projects, use **Property Manager** to create a *property sheet* (a *`.props`* file) to store the settings for each kind of project that you want to be able to reuse or share with others. Using property sheets is far less error-prone than other ways of creating "global" settings.
> [!IMPORTANT]
> **The problem with *`*.user`* files**
>
-> Past versions of Visual Studio used global property sheets that had a *`.user`* file name extension and were located in the *`\\AppData\Local\Microsoft\MSBuild\v4.0\`* folder. We no longer recommend these files because they set properties for project configurations on a per-user, per-computer basis. Such "global" settings can interfere with builds, especially when you are targeting more than one platform on your build computer. For example, if you have both an MFC project and Windows Phone project, the *`.user`* properties would be invalid for one of them. Reusable property sheets are more flexible and more robust.
+> Past versions of Visual Studio used global property sheets that had a *`.user`* file name extension and were located in the *`\\AppData\Local\Microsoft\MSBuild\v4.0\`* folder.
>
-> Although *`.user`* files are still installed by Visual Studio and participate in property inheritance, they're empty by default. The best practice is to delete any reference to them in **Property Manager** to ensure that your projects operate independently of any per-user, per-computer settings. This practice is important to ensure correct behavior in a SCC (source code control) environment.
+> Microsoft no longer recommends using this approach. These files set properties for project configurations on a per-user, per-computer basis. Such *global* settings can interfere with builds, especially when you are targeting more than one platform on your build computer. For example, if you have both an MFC project and Windows Phone project, the *`.user`* properties are invalid for one of them. Reusable property sheets are more flexible and more robust.
+>
+> Although Visual Studio still installs *`.user`* files and they participate in property inheritance, they're empty by default. The best practice is to delete any reference to them in **Property Manager** to ensure that your projects operate independently of any per-user, per-computer settings. This practice is important to ensure correct behavior in a source code control environment.
To display **Property Manager**, on the menu bar, choose **View** > **Property Manager** or **View** > **Other Windows** > **Property Manager**, depending on your settings.
-If you want to apply a common, frequently used set of properties to multiple projects, you can use **Property Manager** to capture them in a reusable *property sheet* file, which by convention has a *`.props`* file name extension. You can apply the sheet (or sheets) to new projects so you don't have to set those properties from scratch.
+If you want to apply a common, frequently used set of properties to multiple projects, use **Property Manager** to capture them in a reusable *property sheet* file, which by convention has a *`.props`* file name extension. You can apply the sheet (or sheets) to new projects so you don't have to set those properties from scratch.
+
+:::image type="content" source="media/add-new-project-property-sheet.png" alt-text="Screenshot of the Property Manager context menu.":::
+
+Under each configuration node, you see nodes for each property sheet that applies to that configuration. The system adds property sheets that set common values based on options you choose in the app wizard when you create the project. Right-click any node and choose **Properties** to see the properties that apply to that node.
-
+All the property sheets are imported automatically into the project's primary property sheet (*`ms.cpp.props`*) and are evaluated in the order they appear in **Property Manager**. You can move them to change the evaluation order. Property sheets that are evaluated later override the values in previously evaluated sheets.
-Under each configuration node, you see nodes for each property sheet that applies to that configuration. The system adds property sheets that set common values based on options you choose in the app wizard when you create the project. Right-click any node and choose Properties to see the properties that apply to that node. All the property sheets are imported automatically into the project's primary property sheet (*`ms.cpp.props`*) and are evaluated in the order they appear in Property Manager. You can move them to change the evaluation order. Property sheets that are evaluated later override the values in previously evaluated sheets. For more information about the order of evaluation in the *`.vcxproj`* file, the *`.props`* and *`.targets`* files, environment variables, and the command line, see [Project property inheritance](project-property-inheritance.md).
+For more information about the order of evaluation in the *`.vcxproj`* file, the *`.props`* and *`.targets`* files, environment variables, and the command line, see [Project property inheritance](project-property-inheritance.md).
If you choose **Add New Project Property Sheet** and then select, for example, the MyProps.props property sheet, a property page dialog box appears. Notice that it applies to the MyProps property sheet; any changes you make are written to the sheet, not to the project file (.vcxproj).
@@ -30,17 +37,20 @@ Properties in a property sheet are overridden if the same property is set direct
You can import a property sheet as often as required. Multiple projects in a solution can inherit settings from the same property sheet, and a project can have multiple sheets. A property sheet itself can inherit settings from another property sheet.
-You can also create a common property sheet for multiple configurations. To create a property sheet for each configuration, open the shortcut menu for one of them, choose **Add Existing Property Sheet**, and then add the other sheets. However, if you use a common property sheet, properties you set for all configurations that the sheet applies to. The IDE doesn't show which projects or other property sheets inherit from a given property sheet.
+You can also create a common property sheet for multiple configurations. To create a property sheet for each configuration, open the shortcut menu for one of them, choose **Add Existing Property Sheet**, and then add the other sheets. However, if you use a common property sheet, properties you set apply to all configurations that the sheet applies to. The IDE doesn't show which projects or other property sheets inherit from a given property sheet.
In large solutions that have many projects, it can be useful to create a common property sheet for all the projects in the solution. Create the property sheet as usual. Use **Property Manager** to add that property sheet to each project in the solution. If necessary at the project level, you can add another property sheet to set project-specific values.
> [!IMPORTANT]
-> A *`.props`* file by default does not participate in source control because it isn't created as a project item. You can manually add the file as a solution item if you want to include it in source control.
+> A *`.props`* file by default doesn't participate in source control because it isn't created as a project item. You can manually add the file as a solution item if you want to include it in source control.
#### To create a property sheet
1. On the menu bar, choose **View** > **Property Manager** or **View** > **Other Windows** > **Property Manager**. The **Property Manager** opens.
+1. Select the item to which to apply the property sheet. This item can be a particular configuration, or another property sheet.
+1. Right-click the item and then choose **Add New Project Property Sheet**.
+1. In the **Add New Item** dialog, specify a name and location for the property sheet. Visual Studio saves the *`.props`* file in the specified location.
-2. To define the scope of the property sheet, select the item to which it applies. This item can be a particular configuration, or another property sheet. Open the shortcut menu for this item and then choose **Add New Project Property Sheet**. Specify a name and location.
+ Expand the items under the project to see your property sheet.
-3. In **Property Manager**, open the new property sheet and then set the properties you want to include.
+1. In **Property Manager**, open the new property sheet and then set the properties you want to include.
diff --git a/docs/build/creating-and-managing-visual-cpp-projects.md b/docs/build/creating-and-managing-visual-cpp-projects.md
index 2441a8b327e..f72cbf8f850 100644
--- a/docs/build/creating-and-managing-visual-cpp-projects.md
+++ b/docs/build/creating-and-managing-visual-cpp-projects.md
@@ -1,29 +1,59 @@
---
-title: "Create and Configure Visual Studio C++ Projects"
-description: "Learn how to create a Visual Studio C++ project, and then add code and build your project."
-ms.date: 03/24/2025
+title: Create and Configure Visual Studio C++ Projects
+description: Get started with Visual Studio C++ projects. Learn to create a solution, then compile and run your code.
+ms.date: 07/15/2026
ms.topic: concept-article
helpviewer_keywords: ["Visual Studio C++ projects, creating", "projects [C++], creating", "Visual Studio C++ projects"]
---
# Visual Studio C++ projects
-A *Visual Studio project* is a collection of code files and assets such as icons, images, and so on, that are built together using the MSBuild system. MSBuild is the native build system for Visual Studio and is generally the best build system to use for Windows-specific programs. MSBuild is tightly integrated with Visual Studio, but you can also use it from the command line.
+A *Visual Studio project* is a collection of code files and assets such as icons, images, and other resources that you build together by using the MSBuild system. MSBuild is the native build system for Visual Studio and is generally the best build system to use for Windows-specific programs. Visual Studio tightly integrates with MSBuild, but you can also use MSBuild from the command line.
For information about upgrading MSBuild projects from older versions of Visual Studio, see the [Microsoft C++ porting and upgrading guide](../porting/visual-cpp-porting-and-upgrading-guide.md).
-For cross-platform projects, or projects that use open-source libraries, we recommend using [CMake projects in Visual Studio](cmake-projects-in-visual-studio.md).
+For cross-platform projects, or projects that use open-source libraries, use [CMake projects in Visual Studio](cmake-projects-in-visual-studio.md).
## Create a Visual Studio C++ project
-::: moniker range=">=msvc-160"
+When you open Visual Studio, you see options to open an existing project or create a new one. You can also open Visual Studio without code.
-1. Create a C++ project by choosing **File** > **New** > **Project**.
+::: moniker range=">=msvc-180"
-1. In the **Create a new project** dialog, set the **Language** dropdown to **C++**. This filters the list of project templates to C++ projects. You can filter the templates by setting the **Platform**, **Project Type**, or by entering keywords in the search box.
+1. Open Visual Studio and select **Create a new project**. If you already opened Visual Studio, create a C++ project by choosing **File** > **New** > **Project**.
- :::image type="content" source="../build/media/vs2019-choose-console-app.png" alt-text="Screenshot of the Create a new project wizard. The Console App project template is selected.":::
+1. In the **Create a new project** dialog, set the **Language** dropdown menu to **C++**. This option filters the list of project templates to C++ projects. You can filter the templates by setting the **Platform**, **Project Type**, or by entering keywords in the search box.
-1. Select a project template, then choose **Next**.
+ :::image type="content" source="media/vs-2026/choose-console-app.png" alt-text="Screenshot of the Create a new project dialog with the Console App project template selected.":::
+
+1. Select a project template, and then choose **Next**.
+
+1. On the **Configure your new project page**, enter project-specific settings such as the project name or location and then choose **Create** to create your project.
+
+::: moniker-end
+
+::: moniker range="msvc-170"
+
+1. Open Visual Studio and select **Create a new project**. If you already opened Visual Studio, create a C++ project by choosing **File** > **New** > **Project**.
+
+1. In the **Create a new project** dialog, set the **Language** dropdown menu to **C++**. This option filters the list of project templates to C++ projects. You can filter the templates by setting the **Platform**, **Project Type**, or by entering keywords in the search box.
+
+ :::image type="content" source="media/vs-2022/choose-console-app.png" alt-text="Screenshot of the Create a new project dialog with the Console App project template selected.":::
+
+1. Select a project template, and then choose **Next**.
+
+1. On the **Configure your new project page**, enter project-specific settings such as the project name or location and then choose **Create** to create your project.
+
+::: moniker-end
+
+::: moniker range="msvc-160"
+
+1. Open Visual Studio and select **Create a new project**. If you already opened Visual Studio, create a C++ project by choosing **File** > **New** > **Project**.
+
+1. In the **Create a new project** dialog, set the **Language** dropdown menu to **C++**. This option filters the list of project templates to C++ projects. You can filter the templates by setting the **Platform**, **Project Type**, or by entering keywords in the search box.
+
+ :::image type="content" source="../build/media/vs2019-choose-console-app.png" alt-text="Screenshot of the Create a new project dialog with the Console App project template selected.":::
+
+1. Select a project template, and then choose **Next**.
1. On the **Configure your new project page**, enter project-specific settings such as the project name or location and then choose **Create** to create your project.
@@ -31,7 +61,7 @@ For cross-platform projects, or projects that use open-source libraries, we reco
::: moniker range="msvc-150"
-1. Create a C++ project by choosing **File** > **New** > **Project**.
+1. Open Visual Studio and select **Create a new project**. If you already opened Visual Studio, create a C++ project by choosing **File** > **New** > **Project**.
1. Choose **Visual C++** in the left pane. In the center pane, a list of project templates appears:
@@ -43,9 +73,11 @@ For more information about the default project templates included in Visual Stud
You can create your own project templates. For more information, see [Create project templates](/visualstudio/ide/how-to-create-project-templates).
-After you create a project, it appears in the [Solution Explorer](/visualstudio/ide/solutions-and-projects-in-visual-studio) window:
+After you create a project, it appears in [Solution Explorer](/visualstudio/ide/solutions-and-projects-in-visual-studio):
-:::image type="content" source="media/mathlibrary-solution-explorer-153.png" alt-text="Screenshot of the Solution Explorer window, showing source files, header files, and resource files.":::
+:::image type="content" source="media/vs-2026/solution-explorer.png" alt-text="Screenshot of the Solution Explorer window, showing source files, header files, and resource files." lightbox="media/vs-2026/solution-explorer.png":::
+
+If you don't see **Solution Explorer**, from the main menu, select **View** > **Solution Explorer**.
When you create a new project, a solution file (*`.sln`*) is also created. A *Visual Studio solution* is a collection of one or more projects. You can add another project to the solution by right-clicking the solution name in **Solution Explorer** > **Add** > **New project**.
@@ -57,29 +89,30 @@ Add source code files, icons, or any other items to your project by right-clicki
## Add third-party libraries to a project
-Over 900 C++ open source libraries are available via the [vcpkg](/vcpkg/) package manager. Run the Visual Studio integration step to set up the paths to that library when you reference it from any Visual Studio project.
+Over 900 C++ open source libraries are available through the [vcpkg](/vcpkg/) package manager. Run the Visual Studio integration step to set up the paths to those libraries when you reference them from any Visual Studio project.
+
+For more information about consuming a library that you download by using the **vcpkg** package manager, see:
-For more information about consuming a library that you have downloaded by using the **vcpkg** package manager, see:
- [vcpkg in CMake projects](/vcpkg/users/buildsystems/cmake-integration)
- [Install and use packages with CMake in Visual Studio](/vcpkg/get_started/get-started-vs)
- [vcpkg in MSBuild projects](/vcpkg/users/buildsystems/msbuild-integration)
- [Tutorial: Install and use packages with MSBuild in Visual Studio](/vcpkg/get_started/get-started-msbuild)
-There are also commercial third-party libraries that you can install. Follow their installation instructions.
+You can also install commercial third-party libraries. Follow their installation instructions.
## Set compiler options and build properties
-To configure build settings for a project, right-click on the project in **Solution Explorer** and choose **Properties**. For more information, see [Set compiler and build properties](working-with-project-properties.md).
+To configure build settings for a project, in **Solution Explorer**, right-click the project and choose **Properties**. For more information, see [Set compiler and build properties](working-with-project-properties.md).
## Compile and run a project
-To compile and run the new project, press **F5** or select the *debug dropdown* with the green arrow on the main toolbar. The *configuration dropdown* is where you choose whether to perform a *Debug* or *Release* build (or some other custom configuration).
+To compile and run the new project, press **F5** or select the **debug dropdown list** with the green arrow on the main toolbar. Use the **configuration dropdown list** to choose whether to perform a **Debug** or **Release** build, or some custom configuration.
-A new project compiles without errors. When adding your own code, you might occasionally introduce an error or trigger a warning. An error prevents the build from completing; a warning doesn't. All errors and warnings appear both in the Output Window and in the Error List when you build the project.
+A new project compiles without errors. When you add your own code, you might occasionally introduce an error or trigger a warning. An error prevents the build from completing. A warning doesn't. All errors and warnings appear both in the **Output** window and in the **Error List**.
-:::image type="content" source="../overview/media/vs2017-output-error-list.png" alt-text="Screenshot of the Output window and Error list, showing a syntax error for a misplaced colon.":::
+:::image type="content" source="media/vs-2026/output-error-list.png" alt-text="Screenshot of the Output window and Error list, showing a syntax error for a typo in a variable name.":::
-In the **Error List**, you can press **F1** on the highlighted error to go to its documentation topic.
+In the **Error List**, press **F1** on the highlighted error to go to its documentation topic.
## Related content
diff --git a/docs/build/customize-cmake-settings.md b/docs/build/customize-cmake-settings.md
index 6b56804360f..5c8cd24cf4a 100644
--- a/docs/build/customize-cmake-settings.md
+++ b/docs/build/customize-cmake-settings.md
@@ -7,7 +7,17 @@ ms.topic: how-to
---
# Customize CMake build settings
-::: moniker range=">=msvc-160"
+::: moniker range=">=msvc-180"
+
+The CMake settings editor has been deprecated in Visual Studio 2026.
+
+To learn about changing the *`CMakePresets.json`* file, see [CMakePresets.json and CMakeUserPresets.json Microsoft vendor maps](/cpp/build/cmake-presets-json-reference).
+
+For Visual Studio 2019 to 2022, select your version by using the version selector in the sidebar menu.
+
+::: moniker-end
+
+::: moniker range=">=msvc-160 <=msvc-170"
Visual Studio uses a CMake configuration file to drive CMake generation and build. *`CMakePresets.json`* is supported by Visual Studio 2019 version 16.10 or later and is the recommended CMake configuration file. *`CMakePresets.json`* is supported directly by CMake and can be used to drive CMake generation and build from Visual Studio, from VS Code, in a Continuous Integration pipeline, and from the command line on Windows, Linux, and Mac. For more information on *`CMakePresets.json`*, see [Configure and build with CMake Presets](cmake-presets-vs.md).
@@ -23,6 +33,10 @@ Now you see the **Settings Editor** with the installed configurations on the lef
The left pane shows the installed configurations (x86-Debug). The right pane shows the settings for the selected configuration. The settings include the configuration name, configuration type (set to Debug), toolset (set to msvc_x86), CMake toolchain file (empty), build root (contains ${env:USERPROFILE}\CMakeBuilds\${workspaceHash}\build\${name}), CMake command arguments (empty), and build command arguments (-v).
:::image-end:::
+> [!NOTE]
+> If a JSON editor opens instead of the **Settings Editor** when you select **Manage Configurations**, you need to enable the CMakeSettings mode. Under **Tools** > **Options** > **CMake**, select **Never use CMake Presets**, and then close and reopen your CMake project. Alternatively, you can choose **Use CMake Presets if available, otherwise use CMakeSettings.json**, and then delete the *CMakePresets.json* file from the project folder.
+> :::image type="content" source="media/options-configuration-file.png" alt-text="Screenshot of the C make options pane.":::
+
Visual Studio provides one `x64-Debug` configuration by default. You can add more configurations by choosing the green plus sign. The settings that you see in the editor might vary depending on which configuration is selected.
The options that you choose in the editor are written to a file called *`CMakeSettings.json`*. This file provides command-line arguments and environment variables that are passed to CMake when you build the projects. Visual Studio never modifies *`CMakeLists.txt`* automatically; by using *`CMakeSettings.json`* you can customize the build through Visual Studio while leaving the CMake project files untouched so that others on your team can consume them with whatever tools they're using.
@@ -201,11 +215,11 @@ For more information about each of the properties in the file, see [`CMakeSettin
::: moniker-end
-## See also
+## Related content
-[CMake Projects in Visual Studio](cmake-projects-in-visual-studio.md)
-[Configure a Linux CMake project](../linux/cmake-linux-project.md)
-[Connect to your remote Linux computer](../linux/connect-to-your-remote-linux-computer.md)
-[Configure CMake debugging sessions](configure-cmake-debugging-sessions.md)
-[Deploy, run, and debug your Linux project](../linux/deploy-run-and-debug-your-linux-project.md)
-[CMake predefined configuration reference](cmake-predefined-configuration-reference.md)
+- [CMake Projects in Visual Studio](cmake-projects-in-visual-studio.md)
+- [Configure a Linux CMake project](../linux/cmake-linux-project.md)
+- [Connect to your remote Linux computer](../linux/connect-to-your-remote-linux-computer.md)
+- [Configure CMake debugging sessions](configure-cmake-debugging-sessions.md)
+- [Deploy, run, and debug your Linux project](../linux/deploy-run-and-debug-your-linux-project.md)
+- [CMake predefined configuration reference](cmake-predefined-configuration-reference.md)
diff --git a/docs/build/exception-handling-x64.md b/docs/build/exception-handling-x64.md
index 8e35eb70ffd..efb1eac2d73 100644
--- a/docs/build/exception-handling-x64.md
+++ b/docs/build/exception-handling-x64.md
@@ -9,27 +9,31 @@ ms.assetid: 41fecd2d-3717-4643-b21c-65dcd2f18c93
An overview of structured exception handling and C++ exception handling coding conventions and behavior on the x64. For general information on exception handling, see [Exception Handling in Microsoft C++](../cpp/exception-handling-in-visual-cpp.md).
-## Unwind data for exception handling, debugger support
+## Unwind data for exception handling and debugger support
-Several data structures are required for exception handling and debugging support.
+To recover nonvolatile registers when an exception is handled, nonleaf functions are annotated with static data. This data, commonly referred to as "Function Unwind Information", describes how to properly unwind the function at an arbitrary instruction. This data is stored as *pdata*, or procedure data, which in turn refers to *xdata*, the exception handling data.
+
+The Function Unwind Information is composed of several data structures, described next.
+
+For Unwind Information supporting the Intel APX (Advanced Performance Extensions), see the [Unwind V3 Preview Specification](../build/x64-unwind-information-v3.md).
### struct RUNTIME_FUNCTION
Table-based exception handling requires a table entry for all functions that allocate stack space or call another function (for example, nonleaf functions). Function table entries have the format:
-|Size|Value|
+| Size | Value |
|-|-|
|ULONG|Function start address|
|ULONG|Function end address|
|ULONG|Unwind info address|
-The RUNTIME_FUNCTION structure must be DWORD aligned in memory. All addresses are image relative, that is, they're 32-bit offsets from the starting address of the image that contains the function table entry. These entries are sorted, and put in the .pdata section of a PE32+ image. For dynamically generated functions [JIT compilers], the runtime to support these functions must either use RtlInstallFunctionTableCallback or RtlAddFunctionTable to provide this information to the operating system. Failure to do so will result in unreliable exception handling and debugging of processes.
+The `RUNTIME_FUNCTION` structure must be `DWORD` aligned in memory. All addresses are image relative, that is, they're 32-bit offsets from the starting address of the image that contains the function table entry. These entries are sorted, and put in the `.pdata` section of a PE32+ image. For dynamically generated functions [JIT compilers], the runtime to support these functions must either use `RtlInstallFunctionTableCallback` or `RtlAddFunctionTable` to provide this information to the operating system. Failure to do so results in unreliable exception handling and debugging of processes.
### struct UNWIND_INFO
-The unwind data info structure is used to record the effects a function has on the stack pointer, and where the nonvolatile registers are saved on the stack:
+The unwind data info structure records the effects a function has on the stack pointer and where the nonvolatile registers are saved on the stack:
-|Size|Value|
+| Size | Value |
|-|-|
|UBYTE: 3|Version|
|UBYTE: 5|Flags|
@@ -42,20 +46,20 @@ The unwind data info structure is used to record the effects a function has on t
(1) Exception Handler
-|Size|Value|
+| Size | Value |
|-|-|
|ULONG|Address of exception handler|
|variable|Language-specific handler data (optional)|
(2) Chained Unwind Info
-|Size|Value|
+| Size | Value |
|-|-|
|ULONG|Function start address|
|ULONG|Function end address|
|ULONG|Unwind info address|
-The UNWIND_INFO structure must be DWORD aligned in memory. Here's what each field means:
+The `UNWIND_INFO` structure must be `DWORD` aligned in memory. Here's what each field means:
- **Version**
@@ -67,9 +71,9 @@ The UNWIND_INFO structure must be DWORD aligned in memory. Here's what each fiel
|Flag|Description|
|-|-|
- |`UNW_FLAG_EHANDLER`| The function has an exception handler that should be called when looking for functions that need to examine exceptions.|
- |`UNW_FLAG_UHANDLER`| The function has a termination handler that should be called when unwinding an exception.|
- |`UNW_FLAG_CHAININFO`| This unwind info structure is not the primary one for the procedure. Instead, the chained unwind info entry is the contents of a previous RUNTIME_FUNCTION entry. For information, see [Chained unwind info structures](#chained-unwind-info-structures). If this flag is set, then the UNW_FLAG_EHANDLER and UNW_FLAG_UHANDLER flags must be cleared. Also, the frame register and fixed-stack allocation fields must have the same values as in the primary unwind info.|
+ |`UNW_FLAG_EHANDLER`| The function has an exception handler that the operating system calls to examine the state of the exception and potentially handle it. Language features such as the C `__try` clause register such a handler.|
+ |`UNW_FLAG_UHANDLER`| The function has a termination handler that the operation system calls when unwinding the stack. This handler could release resources allocated by the function in exception safe code. Language features such as local C++ object destructors and C `__finally` clauses register such a termination handler. |
+ |`UNW_FLAG_CHAININFO`| This unwind info structure isn't the primary one for the procedure. Instead, the chained unwind info entry is the contents of a previous `RUNTIME_FUNCTION` entry. For information, see [Chained unwind info structures](#chained-unwind-info-structures). If this flag is set, then the `UNW_FLAG_EHANDLER` and `UNW_FLAG_UHANDLER` flags must be cleared. Also, the frame register and fixed-stack allocation fields must have the same values as in the primary unwind info.|
- **Size of prolog**
@@ -77,23 +81,23 @@ The UNWIND_INFO structure must be DWORD aligned in memory. Here's what each fiel
- **Count of unwind codes**
- The number of slots in the unwind codes array. Some unwind codes, for example, UWOP_SAVE_NONVOL, require more than one slot in the array.
+ The number of slots in the unwind codes array. Some unwind codes, such as `UWOP_SAVE_NONVOL`, require more than one slot in the array.
- **Frame register**
- If nonzero, then the function uses a frame pointer (FP), and this field is the number of the nonvolatile register used as the frame pointer, using the same encoding for the operation info field of UNWIND_CODE nodes.
+ If nonzero, the function uses a frame pointer (FP), and this field is the number of the nonvolatile register used as the frame pointer, using the same encoding for the operation info field of `UNWIND_CODE` nodes.
- **Frame register offset (scaled)**
- If the frame register field is nonzero, this field is the scaled offset from RSP that is applied to the FP register when it's established. The actual FP register is set to RSP + 16 \* this number, allowing offsets from 0 to 240. This offset permits pointing the FP register into the middle of the local stack allocation for dynamic stack frames, allowing better code density through shorter instructions. (That is, more instructions can use the 8-bit signed offset form.)
+ This field is a scaled offset between the `RSP` register value and the selected Frame Pointer (FP) register value. The selected FP register is set to `RSP` + 16 * this number, which means you can use offsets from 0 to 240. This offset points the FP register into the middle of the local stack allocation for dynamic stack frames, so you get better code density through shorter instructions. (That is, more instructions can use the 8-bit signed offset form.)
- **Unwind codes array**
- An array of items that explains the effect of the prolog on the nonvolatile registers and RSP. See the section on UNWIND_CODE for the meanings of individual items. For alignment purposes, this array always has an even number of entries, and the final entry is potentially unused. In that case, the array is one longer than indicated by the count of unwind codes field.
+ An array of items that explains the effect of the prolog on the nonvolatile registers and `RSP`. See the section on [Unwind operations code](#unwind-operation-code) for the meanings of individual items. To maintain proper data alignment, this array always contains an even number of entries, and the final entry may be unused. In that case, the array is one longer than indicated by the count of unwind codes field.
- **Address of exception handler**
- An image-relative pointer to either the function's language-specific exception or termination handler, if flag UNW_FLAG_CHAININFO is clear and one of the flags UNW_FLAG_EHANDLER or UNW_FLAG_UHANDLER is set.
+ An image-relative pointer to either the function's language-specific exception or termination handler, if flag `UNW_FLAG_CHAININFO` is clear and one of the flags `UNW_FLAG_EHANDLER` or `UNW_FLAG_UHANDLER` is set.
- **Language-specific handler data**
@@ -101,13 +105,13 @@ The UNWIND_INFO structure must be DWORD aligned in memory. Here's what each fiel
- **Chained Unwind Info**
- If flag UNW_FLAG_CHAININFO is set, then the UNWIND_INFO structure ends with three UWORDs. These UWORDs represent the RUNTIME_FUNCTION information for the function of the chained unwind.
+ If flag `UNW_FLAG_CHAININFO` is set, the `UNWIND_INFO` structure ends with three `UWORD`s. These `UWORD`s represent the `RUNTIME_FUNCTION` information for the function of the chained unwind.
### struct UNWIND_CODE
-The unwind code array is used to record the sequence of operations in the prolog that affect the nonvolatile registers and RSP. Each code item has this format:
+Use the unwind code array to record the sequence of operations in the prolog that affect the nonvolatile registers and `RSP`. Each code item has this format:
-|Size|Value|
+| Size | Value |
|-|-|
|UBYTE|Offset in prolog|
|UBYTE: 4|Unwind operation code|
@@ -121,17 +125,17 @@ Offset (from the beginning of the prolog) of the end of the instruction that per
#### Unwind operation code
-Note: Certain operation codes require an unsigned offset to a value in the local stack frame. This offset is from the start, that is, the lowest address of the fixed stack allocation. If the Frame Register field in the UNWIND_INFO is zero, this offset is from RSP. If the Frame Register field is nonzero, this offset is from where RSP was located when the FP register was established. It equals the FP register minus the FP register offset (16 \* the scaled frame register offset in the UNWIND_INFO). If an FP register is used, then any unwind code taking an offset must only be used after the FP register is established in the prolog.
+Certain operation codes require an unsigned offset to a value in the local stack frame. This offset is from the start, that is, the lowest address of the fixed stack allocation. If the Frame Register field in the `UNWIND_INFO` is zero, this offset is from `RSP`. If the Frame Register field is nonzero, this offset is from where `RSP` was located when the FP register was established. It equals the FP register minus the FP register offset (16 \* the scaled frame register offset in the `UNWIND_INFO`). If an FP register is used, then any unwind code taking an offset must only be used after the FP register is established in the prolog.
-For all opcodes except `UWOP_SAVE_XMM128` and `UWOP_SAVE_XMM128_FAR`, the offset is always a multiple of 8, because all stack values of interest are stored on 8-byte boundaries (the stack itself is always 16-byte aligned). For operation codes that take a short offset (less than 512K), the final USHORT in the nodes for this code holds the offset divided by 8. For operation codes that take a long offset (512K <= offset < 4GB), the final two USHORT nodes for this code hold the offset (in little-endian format).
+For all opcodes except `UWOP_SAVE_XMM128` and `UWOP_SAVE_XMM128_FAR`, the offset is always a multiple of 8, because all stack values of interest are stored on 8-byte boundaries (the stack itself is always 16-byte aligned). For operation codes that take a short offset (less than 512K), the final `USHORT` in the nodes for this code holds the offset divided by 8. For operation codes that take a long offset (512K <= offset < 4GB), the final two `USHORT` nodes for this code hold the offset (in little-endian format).
-For the opcodes `UWOP_SAVE_XMM128` and `UWOP_SAVE_XMM128_FAR`, the offset is always a multiple of 16, since all 128-bit XMM operations must occur on 16-byte aligned memory. Therefore, a scale factor of 16 is used for `UWOP_SAVE_XMM128`, permitting offsets of less than 1M.
+For the opcodes `UWOP_SAVE_XMM128` and `UWOP_SAVE_XMM128_FAR`, the offset is always a multiple of 16, since all 128-bit `XMM` operations must occur on 16-byte aligned memory. Therefore, a scale factor of 16 is used for `UWOP_SAVE_XMM128`, permitting offsets of less than 1M.
The unwind operation code is one of these values:
- `UWOP_PUSH_NONVOL` (0) 1 node
- Push a nonvolatile integer register, decrementing RSP by 8. The operation info is the number of the register. Because of the constraints on epilogs, `UWOP_PUSH_NONVOL` unwind codes must appear first in the prolog and correspondingly, last in the unwind code array. This relative ordering applies to all other unwind codes except `UWOP_PUSH_MACHFRAME`.
+ Push a nonvolatile integer register, decrementing `RSP` by 8. The operation info is the number of the register. Because of the constraints on epilogs, `UWOP_PUSH_NONVOL` unwind codes must appear first in the prolog and correspondingly, last in the unwind code array. This relative ordering applies to all other unwind codes except `UWOP_PUSH_MACHFRAME`.
- `UWOP_ALLOC_LARGE` (1) 2 or 3 nodes
@@ -151,7 +155,7 @@ The unwind operation code is one of these values:
- `UWOP_SET_FPREG` (3) 1 node
- Establish the frame pointer register by setting the register to some offset of the current RSP. The offset is equal to the Frame Register offset (scaled) field in the UNWIND_INFO \* 16, allowing offsets from 0 to 240. The use of an offset permits establishing a frame pointer that points to the middle of the fixed stack allocation, helping code density by allowing more accesses to use short instruction forms. The operation info field is reserved and shouldn't be used.
+ Establish the frame pointer register by setting the register to some offset of the current `RSP`. The offset is equal to the Frame Register offset (scaled) field in the `UNWIND_INFO` \* 16, allowing offsets from 0 to 240. The use of an offset permits establishing a frame pointer that points to the middle of the fixed stack allocation, helping code density by allowing more accesses to use short instruction forms. The operation info field is reserved and shouldn't be used.
- `UWOP_SAVE_NONVOL` (4) 2 nodes
@@ -163,52 +167,52 @@ The unwind operation code is one of these values:
- `UWOP_SAVE_XMM128` (8) 2 nodes
- Save all 128 bits of a nonvolatile XMM register on the stack. The operation info is the number of the register. The scaled-by-16 stack offset is recorded in the next slot.
+ Save all 128 bits of a nonvolatile `XMM` register on the stack. The operation info is the number of the register. The scaled-by-16 stack offset is recorded in the next slot.
- `UWOP_SAVE_XMM128_FAR` (9) 3 nodes
- Save all 128 bits of a nonvolatile XMM register on the stack with a long offset. The operation info is the number of the register. The unscaled stack offset is recorded in the next two slots.
+ Save all 128 bits of a nonvolatile `XMM` register on the stack with a long offset. The operation info is the number of the register. The unscaled stack offset is recorded in the next two slots.
- `UWOP_PUSH_MACHFRAME` (10) 1 node
- Push a machine frame. This unwind code is used to record the effect of a hardware interrupt or exception. There are two forms. If the operation info equals 0, one of these frames has been pushed on the stack:
+ Push a machine frame. This unwind code records the effect of a hardware interrupt or exception. It has two forms. A value of 0, indicates hardware has pushed a frame such as this on the stack:
|Location|Value|
|-|-|
- |RSP+32|SS|
- |RSP+24|Old RSP|
- |RSP+16|EFLAGS|
- |RSP+8|CS|
- |RSP|RIP|
+ |`RSP`+32|`SS`|
+ |`RSP`+24|Old `RSP`|
+ |`RSP`+16|`EFLAGS`|
+ |`RSP`+8|`CS`|
+ |`RSP`|`RIP`|
- If the operation info equals 1, then one of these frames has been pushed:
+ A value of 1, indicates hardware has pushed a frame such as this on the stack:
|Location|Value|
|-|-|
- |RSP+40|SS|
- |RSP+32|Old RSP|
- |RSP+24|EFLAGS|
- |RSP+16|CS|
- |RSP+8|RIP|
- |RSP|Error code|
+ |`RSP`+40|`SS`|
+ |`RSP`+32|Old `RSP`|
+ |`RSP`+24|`EFLAGS`|
+ |`RSP`+16|`CS`|
+ |`RSP`+8|`RIP`|
+ |`RSP`|Error code|
This unwind code always appears in a dummy prolog, which is never actually executed, but instead appears before the real entry point of an interrupt routine, and exists only to provide a place to simulate the push of a machine frame. `UWOP_PUSH_MACHFRAME` records that simulation, which indicates the machine has conceptually done this operation:
- 1. Pop RIP return address from top of stack into *Temp*
+ 1. Pop `RIP` return address from top of stack into *Temp*
- 1. Push SS
+ 1. Push `SS`
- 1. Push old RSP
+ 1. Push old `RSP`
- 1. Push EFLAGS
+ 1. Push `EFLAGS`
- 1. Push CS
+ 1. Push `CS`
1. Push *Temp*
1. Push Error Code (if op info equals 1)
- The simulated `UWOP_PUSH_MACHFRAME` operation decrements RSP by 40 (op info equals 0) or 48 (op info equals 1).
+ The simulated `UWOP_PUSH_MACHFRAME` operation decrements `RSP` by 40 (if op info equals 0) or 48 (if op info equals 1).
#### Operation info
@@ -216,57 +220,57 @@ The meaning of the operation info bits depends upon the operation code. To encod
|Bit|Register|
|-|-|
-|0|RAX|
-|1|RCX|
-|2|RDX|
-|3|RBX|
-|4|RSP|
-|5|RBP|
-|6|RSI|
-|7|RDI|
-|8 to 15|R8 to R15|
+|0|`RAX`|
+|1|`RCX`|
+|2|`RDX`|
+|3|`RBX`|
+|4|`RSP`|
+|5|`RBP`|
+|6|`RSI`|
+|7|`RDI`|
+|8 to 15|`R8` to `R15`|
### Chained unwind info structures
-If the UNW_FLAG_CHAININFO flag is set, then an unwind info structure is a secondary one, and the shared exception-handler/chained-info address field contains the primary unwind information. This sample code retrieves the primary unwind information, assuming that `unwindInfo` is the structure that has the UNW_FLAG_CHAININFO flag set.
+If the `UNW_FLAG_CHAININFO` flag is set, then an unwind info structure is a secondary one, and the shared exception-handler/chained-info address field contains the primary unwind information. This sample code retrieves the primary unwind information, assuming that `unwindInfo` is the structure that has the `UNW_FLAG_CHAININFO` flag set.
```cpp
PRUNTIME_FUNCTION primaryUwindInfo = (PRUNTIME_FUNCTION)&(unwindInfo->UnwindCode[( unwindInfo->CountOfCodes + 1 ) & ~1]);
```
-Chained info is useful in two situations. First, it can be used for noncontiguous code segments. By using chained info, you can reduce the size of the required unwind information, because you do not have to duplicate the unwind codes array from the primary unwind info.
+Chained info is useful in two situations. First, it can be used for noncontiguous code segments. By using chained info, you can reduce the size of the required unwind information, because you don't have to duplicate the unwind codes array from the primary unwind info.
-You can also use chained info to group volatile register saves. The compiler may delay saving some volatile registers until it is outside of the function entry prolog. You can record them by having primary unwind info for the portion of the function before the grouped code, and then setting up chained info with a non-zero size of prolog, where the unwind codes in the chained info reflect saves of the nonvolatile registers. In that case, the unwind codes are all instances of UWOP_SAVE_NONVOL. A grouping that saves nonvolatile registers by using a PUSH or modifies the RSP register by using an additional fixed stack allocation is not supported.
+You can also use chained info to group volatile register saves. The compiler might delay saving some volatile registers until it is outside of the function entry prolog. You can record them by having primary unwind info for the portion of the function before the grouped code, and then setting up chained info with a nonzero size of prolog, where the unwind codes in the chained info reflect saves of the nonvolatile registers. In that case, the unwind codes are all instances of `UWOP_SAVE_NONVOL`. A grouping that saves nonvolatile registers by using a `PUSH` or modifies the `RSP` register by using an additional fixed stack allocation isn't supported.
-An UNWIND_INFO item that has UNW_FLAG_CHAININFO set can contain a RUNTIME_FUNCTION entry whose UNWIND_INFO item also has UNW_FLAG_CHAININFO set, sometimes called *multiple shrink-wrapping*. Eventually, the chained unwind info pointers arrive at an UNWIND_INFO item that has UNW_FLAG_CHAININFO cleared. This item is the primary UNWIND_INFO item, which points to the actual procedure entry point.
+An `UNWIND_INFO` item that has `UNW_FLAG_CHAININFO` set can contain a `RUNTIME_FUNCTION` entry whose `UNWIND_INFO` item also has `UNW_FLAG_CHAININFO` set, sometimes called *multiple shrink-wrapping*. Eventually, the chained unwind info pointers arrive at an `UNWIND_INFO` item that has `UNW_FLAG_CHAININFO` cleared. This item is the primary `UNWIND_INFO` item, which points to the actual procedure entry point.
## Unwind procedure
-The unwind code array is sorted into descending order. When an exception occurs, the complete context is stored by the operating system in a context record. The exception dispatch logic is then invoked, which repeatedly executes these steps to find an exception handler:
+The unwind code array is sorted into descending order. When an exception occurs, the operating system stores the complete context in a context record. The exception dispatch logic is then invoked, which repeatedly executes these steps to find an exception handler:
-1. Use the current RIP stored in the context record to search for a RUNTIME_FUNCTION table entry that describes the current function (or function portion, for chained UNWIND_INFO entries).
+1. Use the current `RIP` stored in the context record to search for a `RUNTIME_FUNCTION` table entry that describes the current function (or function portion, for chained `UNWIND_INFO` entries).
-1. If no function table entry is found, then it's in a leaf function, and RSP directly addresses the return pointer. The return pointer at [RSP] is stored in the updated context, the simulated RSP is incremented by 8, and step 1 is repeated.
+1. If the search doesn't find a function table entry, the code is assumed to be part of a leaf function, and `RSP` directly addresses the return pointer. The return pointer at [`RSP`] is stored in the updated context, the simulated `RSP` is incremented by 8, and step 1 is repeated.
-1. If a function table entry is found, RIP can lie within three regions: a) in an epilog, b) in the prolog, or c) in code that may be covered by an exception handler.
+1. If the search finds a function table entry, `RIP` can lie within three regions: a) in an epilog, b) in the prolog, or c) in code that might be covered by an exception handler.
- - Case a) If the RIP is within an epilog, then control is leaving the function, there can be no exception handler associated with this exception for this function, and the effects of the epilog must be continued to compute the context of the caller function. To determine if the RIP is within an epilog, the code stream from RIP onward is examined. If that code stream can be matched to the trailing portion of a legitimate epilog, then it's in an epilog, and the remaining portion of the epilog is simulated, with the context record updated as each instruction is processed. After this processing, step 1 is repeated.
+ - Case a) If the `RIP` is within an epilog, control is leaving the function. There can be no exception handler associated with this exception for this function. The effects of the epilog must continue to compute the context of the caller function. To determine if the `RIP` is within an epilog, the code stream from `RIP` onward is examined. If that code stream matches the trailing portion of a legitimate epilog, it's in an epilog. The remaining portion of the epilog is simulated, with the context record updated as each instruction is processed. After this processing, step 1 is repeated.
- - Case b) If the RIP lies within the prologue, then control hasn't entered the function, there can be no exception handler associated with this exception for this function, and the effects of the prolog must be undone to compute the context of the caller function. The RIP is within the prolog if the distance from the function start to the RIP is less than or equal to the prolog size encoded in the unwind info. The effects of the prolog are unwound by scanning forward through the unwind codes array for the first entry with an offset less than or equal to the offset of the RIP from the function start, then undoing the effect of all remaining items in the unwind code array. Step 1 is then repeated.
+ - Case b) If the `RIP` lies within the prolog, control hasn't entered the function. There can be no exception handler associated with this exception for this function. The effects of the prolog must be undone to compute the context of the caller function. The `RIP` is within the prolog if the distance from the function start to the `RIP` is less than or equal to the prolog size encoded in the unwind info. The unwinder scans forward through the unwind codes array for the first entry with an offset less than or equal to the offset of the `RIP` from the function start, then undoes the effect of all remaining items in the unwind code array. Step 1 is then repeated.
- - Case c) If the RIP isn't within a prolog or epilog, and the function has an exception handler (UNW_FLAG_EHANDLER is set), then the language-specific handler is called. The handler scans its data and calls filter functions as appropriate. The language-specific handler can return that the exception was handled or that the search is to be continued. It can also initiate an unwind directly.
+ - Case c) If the `RIP` isn't within a prolog or epilog, and the function has an exception handler (`UNW_FLAG_EHANDLER` is set), the language-specific handler is called. The handler scans its data and calls filter functions as appropriate. The language-specific handler can return that the exception was handled or that the search is to be continued. It can also initiate an unwind directly.
-1. If the language-specific handler returns a handled status, then execution is continued using the original context record.
+1. If the language-specific handler returns a handled status, execution continues by using the original context record.
-1. If there's no language-specific handler or the handler returns a "continue search" status, then the context record must be unwound to the state of the caller. It's done by processing all of the unwind code array elements, undoing the effect of each. Step 1 is then repeated.
+1. If there's no language-specific handler or the handler returns a "continue search" status, the context record must be unwound to the state of the caller. The unwinder undoes the effect of each element in the unwind code array. Step 1 is then repeated.
-When chained unwind info is involved, these basic steps are still followed. The only difference is that, while walking the unwind code array to unwind a prolog's effects, once the end of the array is reached, it's then linked to the parent unwind info and the entire unwind code array found there is walked. This linking continues until arriving at an unwind info without the UNW_CHAINED_INFO flag, and then it finishes walking its unwind code array.
+When chained unwind info is involved, these basic steps are still followed. The only difference is that, while walking the unwind code array to unwind a prolog's effects, once the process reaches the end of the array, it links to the parent unwind info and walks the entire unwind code array found there. This linking continues until arriving at an unwind info without the `UNW_CHAINED_INFO` flag, and then it finishes walking its unwind code array.
-The smallest set of unwind data is 8 bytes. This would represent a function that only allocated 128 bytes of stack or less, and possibly saved one nonvolatile register. It's also the size of a chained unwind info structure for a zero-length prolog with no unwind codes.
+The smallest set of unwind data is 8 bytes. Such set represents a function that only allocated 128 bytes of stack or less, and possibly saved one nonvolatile register. It's also the size of a chained unwind info structure for a zero-length prolog with no unwind codes.
## Language-specific handler
-The relative address of the language-specific handler is present in the UNWIND_INFO whenever flags UNW_FLAG_EHANDLER or UNW_FLAG_UHANDLER are set. As described in the previous section, the language-specific handler is called as part of the search for an exception handler or as part of an unwind. It has this prototype:
+The `UNWIND_INFO` structure provides the relative address of the language-specific handler when either `UNW_FLAG_EHANDLER` or `UNW_FLAG_UHANDLER` flags are set. As described in the previous section, the search for an exception handler or the process of unwinding calls the language-specific handler. The handler uses this prototype:
```cpp
typedef EXCEPTION_DISPOSITION (*PEXCEPTION_ROUTINE) (
@@ -298,15 +302,15 @@ typedef struct _DISPATCHER_CONTEXT {
} DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
```
-**ControlPc** is the value of RIP within this function. This value is either an exception address or the address at which control left the establishing function. The RIP is used to determine if control is within some guarded construct inside this function, for example, a **`__try`** block for **`__try`**/**`__except`** or **`__try`**/**`__finally`**.
+**ControlPc** is the value of `RIP` within this function. This value is either an exception address or the address at which control left the establishing function. The `RIP` is used to determine if control is within some guarded construct inside this function, for example, a **`__try`** block for **`__try`**/**`__except`** or **`__try`**/**`__finally`**.
-**ImageBase** is the image base (load address) of the module containing this function, to be added to the 32-bit offsets used in the function entry and unwind info to record relative addresses.
+**ImageBase** is the image base (load address) of the module containing this function. The 32-bit offsets used in the function entry and unwind info should be added to the ImageBase obtain the final address.
-**FunctionEntry** supplies a pointer to the RUNTIME_FUNCTION function entry holding the function and unwind info image-base relative addresses for this function.
+**FunctionEntry** supplies a pointer to the `RUNTIME_FUNCTION` function entry holding the function and unwind info image-base relative addresses for this function.
**EstablisherFrame** is the address of the base of the fixed stack allocation for this function.
-**TargetIp** Supplies an optional instruction address that specifies the continuation address of the unwind. This address is ignored if **EstablisherFrame** isn't specified.
+**TargetIp** supplies an optional instruction address that specifies the continuation address of the unwind. This address is ignored if **EstablisherFrame** isn't specified.
**ContextRecord** points to the exception context, for use by the system exception dispatch/unwind code.
@@ -316,19 +320,19 @@ typedef struct _DISPATCHER_CONTEXT {
## Unwind helpers for MASM
-In order to write proper assembly routines, there's a set of pseudo-operations that can be used in parallel with the actual assembly instructions to create the appropriate .pdata and .xdata. And, there's a set of macros that provide simplified use of the pseudo-operations for their most common uses.
+To write proper assembly routines, use a set of pseudo-operations alongside the actual assembly instructions. These pseudo-operations create the appropriate `.pdata` and `.xdata`. Also, use a set of macros that simplify the use of these pseudo-operations for their most common uses.
### Raw pseudo-operations
|Pseudo operation|Description|
|-|-|
-|PROC FRAME \[:*ehandler*]|Causes MASM to generate a function table entry in .pdata and unwind information in .xdata for a function's structured exception handling unwind behavior. If *ehandler* is present, this proc is entered in the .xdata as the language-specific handler.
When the FRAME attribute is used, it must be followed by an .ENDPROLOG directive. If the function is a leaf function (as defined in [Function types](../build/stack-usage.md#function-types)) the FRAME attribute is unnecessary, as are the remainder of these pseudo-operations.|
-|.PUSHREG *register*|Generates a UWOP_PUSH_NONVOL unwind code entry for the specified register number using the current offset in the prologue.
Only use it with nonvolatile integer registers. For pushes of volatile registers, use an .ALLOCSTACK 8, instead|
-|.SETFRAME *register*, *offset*|Fills in the frame register field and offset in the unwind information using the specified register and offset. The offset must be a multiple of 16 and less than or equal to 240. This directive also generates a UWOP_SET_FPREG unwind code entry for the specified register using the current prologue offset.|
-|.ALLOCSTACK *size*|Generates a UWOP_ALLOC_SMALL or a UWOP_ALLOC_LARGE with the specified size for the current offset in the prologue.
The *size* operand must be a multiple of 8.|
-|.SAVEREG *register*, *offset*|Generates either a UWOP_SAVE_NONVOL or a UWOP_SAVE_NONVOL_FAR unwind code entry for the specified register and offset using the current prologue offset. MASM chooses the most efficient encoding.
*offset* must be positive, and a multiple of 8. *offset* is relative to the base of the procedure's frame, which is generally in RSP, or, if using a frame pointer, the unscaled frame pointer.|
-|.SAVEXMM128 *register*, *offset*|Generates either a UWOP_SAVE_XMM128 or a UWOP_SAVE_XMM128_FAR unwind code entry for the specified XMM register and offset using the current prologue offset. MASM chooses the most efficient encoding.
*offset* must be positive, and a multiple of 16. *offset* is relative to the base of the procedure's frame, which is generally in RSP, or, if using a frame pointer, the unscaled frame pointer.|
-|.PUSHFRAME \[*code*]|Generates a UWOP_PUSH_MACHFRAME unwind code entry. If the optional *code* is specified, the unwind code entry is given a modifier of 1. Otherwise the modifier is 0.|
+|PROC FRAME \[:*ehandler*]|Causes MASM to generate a function table entry in `.pdata` and unwind information in `.xdata` for a function's structured exception handling unwind behavior. If *ehandler* is present, this proc is entered in the .xdata as the language-specific handler.
When you use the FRAME attribute, follow it with an .ENDPROLOG directive. If the function is a leaf function (as defined in [Function types](../build/stack-usage.md#function-types)), the FRAME attribute is unnecessary, as are the remainder of these pseudo-operations.|
+|.PUSHREG *register*|Generates a `UWOP_PUSH_NONVOL` unwind code entry for the specified register number using the current offset in the prologue.
Only use it with nonvolatile integer registers. For pushes of volatile registers, use an .ALLOCSTACK 8, instead.|
+|.SETFRAME *register*, *offset*|Fills in the frame register field and offset in the unwind information using the specified register and offset. The offset must be a multiple of 16 and less than or equal to 240. This directive also generates a `UWOP_SET_FPREG` unwind code entry for the specified register using the current prologue offset.|
+|.ALLOCSTACK *size*|Generates a `UWOP_ALLOC_SMALL` or a `UWOP_ALLOC_LARGE` with the specified size for the current offset in the prologue.
The *size* operand must be a multiple of 8.|
+|.SAVEREG *register*, *offset*|Generates either a `UWOP_SAVE_NONVOL` or a `UWOP_SAVE_NONVOL_FAR` unwind code entry for the specified register and offset using the current prologue offset. MASM chooses the most efficient encoding.
*offset* must be positive, and a multiple of 8. *offset* is relative to the base of the procedure's frame, which is generally in `RSP`, or, if using a frame pointer, the unscaled frame pointer.|
+|.SAVEXMM128 *register*, *offset*|Generates either a `UWOP_SAVE_XMM128` or a `UWOP_SAVE_XMM128_FAR` unwind code entry for the specified `XMM` register and offset using the current prologue offset. MASM chooses the most efficient encoding.
*offset* must be positive, and a multiple of 16. *offset* is relative to the base of the procedure's frame, which is generally in `RSP`, or, if using a frame pointer, the unscaled frame pointer.|
+|.PUSHFRAME \[*code*]|Generates a `UWOP_PUSH_MACHFRAME` unwind code entry. If you specify the optional *code*, the unwind code entry gets a modifier of 1. Otherwise the modifier is 0.|
|.ENDPROLOG|Signals the end of the prologue declarations. Must occur in the first 255 bytes of the function.|
Here's a sample function prolog with proper usage of most of the opcodes:
@@ -384,19 +388,19 @@ For more information about the epilog example, see [Epilog code](prolog-and-epil
### MASM macros
-In order to simplify the use of the [Raw pseudo-operations](#raw-pseudo-operations), there's a set of macros, defined in ksamd64.inc, which can be used to create typical procedure prologues and epilogues.
+To simplify the use of [Raw pseudo-operations](#raw-pseudo-operations), use the set of macros defined in `ksamd64.inc`. These macros help you create typical procedure prologues and epilogues.
|Macro|Description|
|-|-|
-|alloc_stack(n)|Allocates a stack frame of n bytes (using `sub rsp, n`), and emits the appropriate unwind information (.allocstack n)|
-|save_reg *reg*, *loc*|Saves a nonvolatile register *reg* on the stack at RSP offset *loc*, and emits the appropriate unwind information. (.savereg reg, loc)|
-|push_reg *reg*|Pushes a nonvolatile register *reg* on the stack, and emits the appropriate unwind information. (.pushreg reg)|
-|rex_push_reg *reg*|Saves a nonvolatile register on the stack using a 2-byte push, and emits the appropriate unwind information (.pushreg reg). Use this macro if the push is the first instruction in the function, to ensure that the function is hot-patchable.|
-|save_xmm128 *reg*, *loc*|Saves a nonvolatile XMM register *reg* on the stack at RSP offset *loc*, and emits the appropriate unwind information (.savexmm128 reg, loc)|
-|set_frame *reg*, *offset*|Sets the frame register *reg* to be the RSP + *offset* (using a `mov`, or an `lea`), and emits the appropriate unwind information (.set_frame reg, offset)|
-|push_eflags|Pushes the eflags with a `pushfq` instruction, and emits the appropriate unwind information (.alloc_stack 8)|
-
-Here's a sample function prolog with proper usage of the macros:
+|alloc_stack(n)|Allocates a stack frame of *n* bytes (using `sub rsp, n`), and emits the appropriate unwind information (.allocstack n)|
+|save_reg *reg*, *loc*|Saves a nonvolatile register *reg* on the stack at `RSP` offset *loc*, and emits the appropriate unwind information (.savereg reg, loc)|
+|push_reg *reg*|Pushes a nonvolatile register *reg* on the stack, and emits the appropriate unwind information (.pushreg reg)|
+|rex_push_reg *reg*|Saves a nonvolatile register on the stack by using a 2-byte push, and emits the appropriate unwind information (.pushreg reg). Use this macro if the push is the first instruction in the function, to ensure that the function is hot-patchable.|
+|save_xmm128 *reg*, *loc*|Saves a nonvolatile `XMM` register *reg* on the stack at `RSP` offset *loc*, and emits the appropriate unwind information (.savexmm128 reg, loc)|
+|set_frame *reg*, *offset*|Sets the frame register *reg* to be the `RSP` + *offset* (using a `mov` or an `lea`), and emits the appropriate unwind information (.set_frame reg, offset)|
+|push_eflags|Pushes the eflags by using a `pushfq` instruction, and emits the appropriate unwind information (.alloc_stack 8)|
+
+Here's a sample function prologue with proper usage of the macros:
```MASM
sampleFrame struct
diff --git a/docs/build/how-to-create-a-release-build.md b/docs/build/how-to-create-a-release-build.md
index be26a6e5da9..9aec226e84f 100644
--- a/docs/build/how-to-create-a-release-build.md
+++ b/docs/build/how-to-create-a-release-build.md
@@ -1,18 +1,32 @@
---
-description: "Learn more about: How to: Create a Release Build"
title: "How to: Create a Release Build"
-ms.date: "11/04/2016"
+description: Learn how to create a release build in Visual Studio. Switch configurations, optimize your program, and prepare it for distribution.
+ms.date: "07/16/2026"
+author: TimShererWithAquent
+ms.author: v-tishe
helpviewer_keywords: ["Win32, release build", "release builds, creating"]
ms.assetid: 6a4c89b1-48f0-44d2-8703-ca0a4b0351bf
+#customer intent: As a developer, I want to create a release build of my program, so that I can distribute an optimized version to my users.
---
-# How to: Create a Release Build
+# How to create a release build
-### To generate a release build of your program
+Visual Studio projects have separate release and debug configurations for your program: debug version and release version for distribution.
-1. Select **Release** from the **Solution Configuration** drop-down list, which is on the **Standard** toolbar.
+In debug configuration, your program has symbolic debug information and no optimization. The release configuration of your program has no symbolic debug information and is fully optimized.
-1. On the **Build** menu, click **Build**.
+To generate a release build of your program, follow these steps:
+
+1. Open your solution in Visual Studio.
+1. In the **Solutions Configuration** menu under the toolbar, select **Release**.
+
+ :::image type="content" source="media/vs-2026/configure-release-build.png" alt-text="Screenshot shows Visual Studio Solutions Configuration menu with Release highlighted.":::
+
+1. From the **Build** menu, select **Build**.
+
+You can instead select **Configuration Manager**, where you can edit the build and release configurations. You can also create custom configurations to debug and release your program for different contexts and platforms.
## See also
-[Release Builds](release-builds.md)
+- [Project and solution configurations](/visualstudio/ide/understanding-build-configurations)
+- [Release Builds](release-builds.md)
+- [Common problems](common-problems-when-creating-a-release-build.md)
diff --git a/docs/build/how-to-enable-a-64-bit-visual-cpp-toolset-on-the-command-line.md b/docs/build/how-to-enable-a-64-bit-visual-cpp-toolset-on-the-command-line.md
index e551b430faf..0467db81855 100644
--- a/docs/build/how-to-enable-a-64-bit-visual-cpp-toolset-on-the-command-line.md
+++ b/docs/build/how-to-enable-a-64-bit-visual-cpp-toolset-on-the-command-line.md
@@ -1,36 +1,41 @@
---
-description: "Learn more about: How to: Enable a 64-Bit, x64 hosted MSVC toolset on the command line"
title: "How to: Enable a 64-Bit MSVC Toolset on the Command Line"
-ms.date: "07/24/2019"
+description: "Learn how to enable a 64-Bit, x64 hosted MSVC toolset on the command line. Use this toolset to create apps that run on 32-bit, 64-bit, or ARM-based systems."
+ms.date: "05/28/2026"
helpviewer_keywords: ["x64 [C++]", "64-bit compiler [C++], command line usage", "64-bit compiler [C++], toolset enabling at command line", "command line [C++], 64-bit compiler", "Itanium [C++], command-line compiler", "IPF", "Itanium [C++]", "IPF, command-line compiler", "x64 [C++], command-line compiler"]
+#customer intent: As a developer, I need the toolset installed with Visual Studio to build code for x86, x64, or ARM processors.
---
# How to: Enable a 64-Bit, x64 hosted MSVC toolset on the command line
-Visual Studio includes C++ compilers, linkers, and other tools that you can use to create platform-specific versions of your apps that can run on 32-bit, 64-bit, or ARM-based Windows operating systems. Other optional Visual Studio workloads let you use C++ tools to target other platforms, such as iOS, Android, and Linux. The default build architecture uses 32-bit, x86-hosted tools to build 32-bit, x86-native Windows code. However, you probably have a 64-bit computer. When Visual Studio is installed on a 64-bit Windows operating system, additional developer command prompt shortcuts for the 64-bit, x64-hosted native and cross compilers are available. You can take advantage of the processor and memory space available to 64-bit code by using the 64-bit, x64-hosted toolset when you build code for x86, x64, or ARM processors.
+Visual Studio includes C++ compilers, linkers, and other tools that you can use to create platform-specific versions of your apps. You can create versions that run on 32-bit, 64-bit, or ARM-based Windows operating systems. Other optional Visual Studio workloads let you use C++ tools to target other platforms, such as iOS, Android, and Linux. The default build architecture uses 32-bit, x86-hosted tools to build 32-bit, x86-native Windows code.
+
+You probably have a 64-bit computer. When Visual Studio is installed on a 64-bit Windows operating system, other developer command prompt shortcuts for the 64-bit, x64-hosted native, and cross compilers are available. You can take advantage of the processor and memory space available to 64-bit code by using the 64-bit, x64-hosted toolset when you build code for x86, x64, or ARM processors.
## Use a 64-bit hosted developer command prompt shortcut
-To access these command prompts on Windows, on the **Start** menu type `x64` and then choose one of the x64 native or cross-tool developer command prompts.
+To access these command prompts on Windows, on the **Start** menu, type `x64` and then choose one of the x64 native or cross-tool developer command prompts.
:::image type="complex" source="./media/x64-native-tools-command-prompt.png" alt-text="Screenshot showing the start menu with x64 in the search box and the x64 Native Tools Command Prompt shortcut selected.":::
If you have different versions of Visual Studio installed, other versions of the prompt appear. Choose the prompt for the version of Visual Studio that you want to use.
:::image-end:::
-On earlier versions of Windows, choose **Start**, expand **All Programs**, and then expand the folder for your version of **Visual Studio** (and on older versions of Visual Studio, **Visual Studio Tools**). For more information, see [Developer command prompt shortcuts](building-on-the-command-line.md#developer_command_prompt_shortcuts).
+On earlier versions of Windows, choose **Start**, expand **All Programs**, and then expand the folder for your version of **Visual Studio**. For older versions of Visual Studio, this folder is **Visual Studio Tools**. For more information, see [Developer command prompt shortcuts](building-on-the-command-line.md#developer_command_prompt_shortcuts).
-## Use Vcvarsall.bat to set a 64-bit hosted build architecture
+## Use vcvarsall.bat to set a 64-bit hosted build architecture
-Any of the native or cross compiler tools build configurations can be used on the command line by running the vcvarsall.bat command file. This command file configures the path and environment variables that enable a particular build architecture in an existing command prompt window. For specific instructions, see [Developer command file locations](building-on-the-command-line.md#developer_command_file_locations).
+Any of the native or cross compiler tools build configurations can be used on the command line by running the `vcvarsall.bat` command file. This command file configures the path and environment variables that enable a particular build architecture in an existing command prompt window. For more information, see [Developer command file locations](building-on-the-command-line.md#developer_command_file_locations).
## Remarks
+When you install a C++ workload in the Visual Studio installer, it always installs 32-bit, x86-hosted, native, and cross compiler tools to build x86 and x64 code. If you include the Universal Windows Platform workload, it also installs x86-hosted cross compiler tools to build ARM code.
+
+If you install these workloads on a 64-bit, x64 processor, you also get 64-bit native and cross compiler tools to build x86, x64, and ARM code. The 32-bit and 64-bit tools generate identical code, but the 64-bit tools support more memory for precompiled header symbols and the Whole Program Optimization ([/GL](reference/gl-whole-program-optimization.md) and [/LTCG](reference/ltcg-link-time-code-generation.md)) options. If you run into memory limits when you use the 32-bit tools, try the 64-bit tools.
+
> [!NOTE]
-> For information about the specific tools that are included with each Visual Studio edition, see [Visual C++ Tools and Features in Visual Studio Editions](../overview/visual-cpp-tools-and-features-in-visual-studio-editions.md).
+> For information about the specific tools that are included with each Visual Studio edition, see [C++ Tools and Features in Visual Studio Editions](../overview/visual-cpp-tools-and-features-in-visual-studio-editions.md).
>
-> For information about how to use the Visual Studio IDE to create 64-bit applications, see [How to: Configure Microsoft C++ Projects to Target 64-Bit, x64 Platforms](how-to-configure-visual-cpp-projects-to-target-64-bit-platforms.md).
-
-When you install a C++ workload in the Visual Studio installer, it always installs 32-bit, x86-hosted, native and cross compiler tools to build x86 and x64 code. If you include the Universal Windows Platform workload, it also installs x86-hosted cross compiler tools to build ARM code. If you install these workloads on a 64-bit, x64 processor, you also get 64-bit native and cross compiler tools to build x86, x64, and ARM code. The 32-bit and 64-bit tools generate identical code, but the 64-bit tools support more memory for precompiled header symbols and the Whole Program Optimization ([/GL](reference/gl-whole-program-optimization.md) and [/LTCG](reference/ltcg-link-time-code-generation.md)) options. If you run into memory limits when you use the 32-bit tools, try the 64-bit tools.
+> For information about how to use the Visual Studio IDE to create 64-bit applications, see [How to: Configure Visual Studio C++ Projects to Target 64-Bit, x64 Platforms](how-to-configure-visual-cpp-projects-to-target-64-bit-platforms.md).
## See also
-[Configure C++ projects for 64-bit, x64 targets](configuring-programs-for-64-bit-visual-cpp.md)
+- [Configure C++ projects for 64-bit, x64 targets](configuring-programs-for-64-bit-visual-cpp.md)
diff --git a/docs/build/launch-vs-schema-reference-cpp.md b/docs/build/launch-vs-schema-reference-cpp.md
index e7d4f24ef18..6313e0435a3 100644
--- a/docs/build/launch-vs-schema-reference-cpp.md
+++ b/docs/build/launch-vs-schema-reference-cpp.md
@@ -1,7 +1,7 @@
---
title: "launch.vs.json schema reference (C++)"
description: "Describes the schema elements for the `launch.vs.json` file"
-ms.date: 07/15/2021
+ms.date: 06/30/2026
helpviewer_keywords: ["launch.vs.json file [C++]"]
---
# `launch.vs.json` schema reference (C++)
@@ -40,6 +40,7 @@ To create the file, right-click on an executable file in **Solution Explorer** a
| `sourceFileMap` | object | Optional source file mappings passed to the debug engine. Format: `{ "\": "\" }` or `{ "\": { "editorPath": "\", "useForBreakpoints": true } }`. Example: `{ "/home/user/foo": "C:\\foo" }` or `{ "/home/user/foo": { "editorPath": "c:\\foo", "useForBreakpoints": true } }`. For more information, see [Source file map options](#source_file_map_options). |
| `additionalProperties` | string | One of the sourceFileMapOptions. (See below.) |
| `MIMode` | string | Indicates the type of MI-enabled console debugger that the MIDebugEngine will connect to. Allowed values are `"gdb"`, `"lldb"`. |
+| `debuginfod` | object | Controls how `gdb` uses [debuginfod](https://sourceware.org/elfutils/Debuginfod.html) to download missing debug symbols and source files from debuginfod servers. Visual Studio applies this option only when `MIMode` is `gdb`. For more information, see [debuginfod options](#debuginfod_options). |
| `args` | array | Command-line arguments passed to the program. |
| `environment` | array | Environment variables to add to the environment for the program. Example: `[ { "name": "squid", "value": "clam" } ]`. |
| `targetArchitecture` | string | The architecture of the debuggee. The architecture is detected automatically unless this parameter is set. Allowed values are `x86`, `arm`, `arm64`, `mips`, `x64`, `amd64`, `x86_64`. |
@@ -147,3 +148,21 @@ Use with the `sourceFileMap` property:
|--|--|--|
| `editorPath` | string | The location of the source code for the editor to locate. |
| `useForBreakpoints` | boolean | When setting breakpoints, this source mapping should be used. If **`false`**, only the filename and line number is used for setting breakpoints. If **`true`**, breakpoints will be set with the full path to the file and line number only when this source mapping is used. Otherwise just filename and line number will be used when setting breakpoints. Default is **`true`**. |
+
+## debuginfod options
+
+Use with the `debuginfod` property to control how `gdb` downloads debug symbols from debuginfod servers. On Linux systems that configure debuginfod, such as Ubuntu, Fedora, or Arch Linux, this option lets `gdb` automatically retrieve debug symbols and source files from the distribution's debuginfod servers so you don't have to install debug symbol packages manually. Visual Studio applies this option only when `MIMode` is `gdb`.
+
+| Property | Type | Description |
+|--|--|--|
+| `enabled` | boolean | When `true`, `gdb` queries debuginfod servers for missing debug info and source files. The default value is **`false`**, which avoids delays caused by network requests. |
+| `timeout` | integer | The timeout in seconds for debuginfod server requests. The default value is **`30`**. Set it to `0` to use `gdb`'s default timeout. |
+
+The following example enables debuginfod server support and sets the timeout to 10 seconds:
+
+```json
+"debuginfod": {
+ "enabled": true,
+ "timeout": 10
+}
+```
diff --git a/docs/build/media/add-new-project-property-sheet.png b/docs/build/media/add-new-project-property-sheet.png
new file mode 100644
index 00000000000..3241dc98580
Binary files /dev/null and b/docs/build/media/add-new-project-property-sheet.png differ
diff --git a/docs/build/media/github-copilot-fix-warning-accept.png b/docs/build/media/github-copilot-fix-warning-accept.png
deleted file mode 100644
index bb8f3ded876..00000000000
Binary files a/docs/build/media/github-copilot-fix-warning-accept.png and /dev/null differ
diff --git a/docs/build/media/github-copilot-fix-warning.png b/docs/build/media/github-copilot-fix-warning.png
deleted file mode 100644
index 4751bafdf01..00000000000
Binary files a/docs/build/media/github-copilot-fix-warning.png and /dev/null differ
diff --git a/docs/build/media/github-copilot-open-chat.png b/docs/build/media/github-copilot-open-chat.png
deleted file mode 100644
index c89019f9abc..00000000000
Binary files a/docs/build/media/github-copilot-open-chat.png and /dev/null differ
diff --git a/docs/build/media/normal-build-process.png b/docs/build/media/normal-build-process.png
new file mode 100644
index 00000000000..fbf6c0d1796
Binary files /dev/null and b/docs/build/media/normal-build-process.png differ
diff --git a/docs/build/media/options-configuration-file.png b/docs/build/media/options-configuration-file.png
new file mode 100644
index 00000000000..2a22a033a17
Binary files /dev/null and b/docs/build/media/options-configuration-file.png differ
diff --git a/docs/build/media/sample-profile-guided-optimization-build-process.png b/docs/build/media/sample-profile-guided-optimization-build-process.png
new file mode 100644
index 00000000000..9de3effdc4b
Binary files /dev/null and b/docs/build/media/sample-profile-guided-optimization-build-process.png differ
diff --git a/docs/build/media/sharingnew.png b/docs/build/media/sharingnew.png
deleted file mode 100644
index 2316c884b97..00000000000
Binary files a/docs/build/media/sharingnew.png and /dev/null differ
diff --git a/docs/build/media/vs-2022/choose-console-app.png b/docs/build/media/vs-2022/choose-console-app.png
new file mode 100644
index 00000000000..067815d8e0f
Binary files /dev/null and b/docs/build/media/vs-2022/choose-console-app.png differ
diff --git a/docs/build/media/vs-2026/choose-console-app.png b/docs/build/media/vs-2026/choose-console-app.png
new file mode 100644
index 00000000000..934f106be49
Binary files /dev/null and b/docs/build/media/vs-2026/choose-console-app.png differ
diff --git a/docs/build/media/vs-2026/configure-release-build.png b/docs/build/media/vs-2026/configure-release-build.png
new file mode 100644
index 00000000000..a67c06c8fa3
Binary files /dev/null and b/docs/build/media/vs-2026/configure-release-build.png differ
diff --git a/docs/build/media/vs-2026/github-copilot-fix-warning-accept.png b/docs/build/media/vs-2026/github-copilot-fix-warning-accept.png
new file mode 100644
index 00000000000..06c1d036e2d
Binary files /dev/null and b/docs/build/media/vs-2026/github-copilot-fix-warning-accept.png differ
diff --git a/docs/build/media/vs-2026/github-copilot-fix-warning.png b/docs/build/media/vs-2026/github-copilot-fix-warning.png
new file mode 100644
index 00000000000..c5a5cbffd1f
Binary files /dev/null and b/docs/build/media/vs-2026/github-copilot-fix-warning.png differ
diff --git a/docs/build/media/vs-2026/github-copilot-open-chat.png b/docs/build/media/vs-2026/github-copilot-open-chat.png
new file mode 100644
index 00000000000..b7855f695d7
Binary files /dev/null and b/docs/build/media/vs-2026/github-copilot-open-chat.png differ
diff --git a/docs/build/media/vs-2026/output-error-list.png b/docs/build/media/vs-2026/output-error-list.png
new file mode 100644
index 00000000000..f75a320cd7c
Binary files /dev/null and b/docs/build/media/vs-2026/output-error-list.png differ
diff --git a/docs/build/media/vs-2026/solution-explorer.png b/docs/build/media/vs-2026/solution-explorer.png
new file mode 100644
index 00000000000..a6f561d740b
Binary files /dev/null and b/docs/build/media/vs-2026/solution-explorer.png differ
diff --git a/docs/build/media/vscpp-first-start-page-flag.png b/docs/build/media/vscpp-first-start-page-flag.png
deleted file mode 100644
index e17924233c7..00000000000
Binary files a/docs/build/media/vscpp-first-start-page-flag.png and /dev/null differ
diff --git a/docs/build/profile-guided-optimizations.md b/docs/build/profile-guided-optimizations.md
index 065565ef0d9..2da31ddff99 100644
--- a/docs/build/profile-guided-optimizations.md
+++ b/docs/build/profile-guided-optimizations.md
@@ -1,18 +1,20 @@
---
description: "Learn more about: Profile-guided optimizations"
title: "Profile-guided optimizations"
-ms.date: "04/23/2019"
+ms.date: 05/11/2026
helpviewer_keywords: ["profile-guided optimizations", "optimization, profile-guided [C++]"]
-ms.assetid: 2225c307-d3ae-42c1-8345-a5a959d132dc
---
# Profile-guided optimizations
-Profile-guided optimization (PGO) lets you optimize a whole executable file, where the optimizer uses data from test runs of the .exe or .dll file. The data represents the likely performance of the program in a production environment.
+Profile-guided optimization (PGO) lets you optimize a whole executable file. The optimizer uses data from test runs of the .exe or .dll file. The data represents the likely performance of the program in a production environment.
+
+> [!NOTE]
+> SPGO (Sample Profile-Guided Optimization) is an alternative approach that uses hardware CPU Windows Performance Counters instead of instrumentation. SPGO requires no instrumented build - you profile an existing release binary by using `xperf`. For more information, see [Introducing Sample Profile Guided Optimization in MSVC](https://devblogs.microsoft.com/cppblog/introducing-sample-profile-guided-optimization-in-msvc/) and [Sample Profile-Guided Optimization (SPGO) tutorial](sample-profile-guided-optimization.md).
Profile-guided optimizations are only available for x86, x64, or ARM64 native targets. Profile-guided optimizations aren't available for executable files that run on the common language runtime. Even if you produce an assembly with mixed native and managed code (by using the **/clr** compiler option), you can't use profile-guided optimization on just the native code. If you attempt to build a project with these options set in the IDE, a build error results.
> [!NOTE]
-> Information that's gathered from profiling test runs overrides optimizations that would otherwise be in effect if you specify **/Ob**, **/Os**, or **/Ot**. For more information, see [/Ob (Inline Function Expansion)](reference/ob-inline-function-expansion.md) and [/Os, /Ot (Favor Small Code, Favor Fast Code)](reference/os-ot-favor-small-code-favor-fast-code.md).
+> Information gathered from profiling test runs overrides optimizations that would otherwise be in effect if you specify **/Ob**, **/Os**, or **/Ot**. For more information, see [/Ob (Inline Function Expansion)](reference/ob-inline-function-expansion.md) and [/Os, /Ot (Favor Small Code, Favor Fast Code)](reference/os-ot-favor-small-code-favor-fast-code.md).
## Steps to optimize your app
@@ -20,36 +22,36 @@ To use profile-guided optimization, follow these steps to optimize your app:
- Compile one or more source code files with [/GL](reference/gl-whole-program-optimization.md).
- Each module built with **/GL** can be examined during profile-guided optimization test runs to capture run-time behavior. Every module in a profile-guided optimization build doesn't have to be compiled with **/GL**. However, only those modules compiled with **/GL** are instrumented and later available for profile-guided optimizations.
+ The compiler examines each module built with **/GL** during profile-guided optimization test runs to capture run-time behavior. You don't need to compile every module in a profile-guided optimization build with **/GL**. However, only modules compiled with **/GL** are instrumented and later available for profile-guided optimizations.
-- Link using [/LTCG](reference/ltcg-link-time-code-generation.md) and [/GENPROFILE or /FASTGENPROFILE](reference/genprofile-fastgenprofile-generate-profiling-instrumented-build.md).
+- Link by using [/LTCG](reference/ltcg-link-time-code-generation.md) and [/GENPROFILE or /FASTGENPROFILE](reference/genprofile-fastgenprofile-generate-profiling-instrumented-build.md).
- Using both **/LTCG** and **/GENPROFILE** or **/FASTGENPROFILE** creates a `.pgd` file when the instrumented app is run. After test-run data is added to the `.pgd` file, it can be used as input to the next link step (creating the optimized image). When specifying **/GENPROFILE**, you can optionally add a **PGD=**_filename_ argument to specify a nondefault name or location for the `.pgd` file. The combination of **/LTCG** and **/GENPROFILE** or **/FASTGENPROFILE** linker options replaces the deprecated **/LTCG:PGINSTRUMENT** linker option.
+ When you use both **/LTCG** and **/GENPROFILE** or **/FASTGENPROFILE**, the instrumented app creates a `.pgd` file when it runs. After test-run data is added to the `.pgd` file, you can use it as input to the next link step (creating the optimized image). When you specify **/GENPROFILE**, you can optionally add a **PGD=**_filename_ argument to specify a nondefault name or location for the `.pgd` file. The combination of **/LTCG** and **/GENPROFILE** or **/FASTGENPROFILE** linker options replaces the deprecated **/LTCG:PGINSTRUMENT** linker option.
- Profile the application.
- Each time a profiled EXE session ends, or a profiled DLL is unloaded, a `appname!N.pgc` file is created. A `.pgc` file contains information about a particular application test run. *appname* is the name of your app, and *N* is a number starting with 1 that's incremented based on the number of other `appname!N.pgc` files in the directory. You can delete a `.pgc` file if the test run doesn't represent a scenario you want to optimize.
+ Each time a profiled EXE session ends, or a profiled DLL unloads, the process creates an `appname!N.pgc` file. A `.pgc` file contains information about a particular application test run. *appname* is the name of your app, and *N* is a number starting with 1. It increments based on the number of other `appname!N.pgc` files in the directory. You can delete a `.pgc` file if the test run doesn't represent a scenario you want to optimize.
- During a test run, you can force closure of the currently open `.pgc` file and the creation of a new `.pgc` file with the [pgosweep](pgosweep.md) utility (for example, when the end of a test scenario doesn't coincide with application shutdown).
+ During a test run, you can force closure of the currently open `.pgc` file and the creation of a new `.pgc` file by using the [pgosweep](pgosweep.md) utility (for example, when the end of a test scenario doesn't coincide with application shutdown).
Your application can also directly invoke a PGO function, [PgoAutoSweep](pgoautosweep.md), to capture the profile data at the point of the call as a `.pgc` file. It can give you finer control over the code covered by the captured data in your `.pgc` files. For an example of how to use this function, see the [PgoAutoSweep](pgoautosweep.md) documentation.
When you create your instrumented build, by default, data collection is done in non-thread-safe mode, which is faster but may be imprecise. By using the **EXACT** argument to **/GENPROFILE** or **/FASTGENPROFILE**, you can specify data collection in thread-safe mode, which is more precise, but slower. This option is also available if you set the deprecated [PogoSafeMode](environment-variables-for-profile-guided-optimizations.md#pogosafemode) environment variable, or the deprecated **/POGOSAFEMODE** linker option, when you create your instrumented build.
-- Link using **/LTCG** and **/USEPROFILE**.
+- Link by using **/LTCG** and **/USEPROFILE**.
- Use both the **/LTCG** and [/USEPROFILE](reference/useprofile.md) linker options to create the optimized image. This step takes as input the `.pgd` file. When you specify **/USEPROFILE**, you can optionally add a **PGD=**_filename_ argument to specify a non-default name or location for the `.pgd` file. You can also specify this name by using the deprecated **/PGD** linker option. The combination of **/LTCG** and **/USEPROFILE** replaces the deprecated **/LTCG:PGOPTIMIZE** and **/LTCG:PGUPDATE** linker options.
+ Use both the **/LTCG** and [/USEPROFILE](reference/useprofile.md) linker options to create the optimized image. This step takes the `.pgd` file as input. When you specify **/USEPROFILE**, you can optionally add a **PGD=**_filename_ argument to specify a nondefault name or location for the `.pgd` file. You can also specify this name by using the deprecated **/PGD** linker option. The combination of **/LTCG** and **/USEPROFILE** linker options replaces the deprecated **/LTCG:PGOPTIMIZE** and **/LTCG:PGUPDATE** linker options.
-It's even possible to create the optimized executable file and later determine that additional profiling would be useful to create a more optimized image. If the instrumented image and its `.pgd` file are available, you can do additional test runs and rebuild the optimized image with the newer `.pgd` file, by using the same **/LTCG** and **/USEPROFILE** linker options.
+It's even possible to create the optimized executable file and later determine that more profiling would be useful to create a more optimized image. If the instrumented image and its `.pgd` file are available, you can do more test runs and rebuild the optimized image with the newer `.pgd` file by using the same **/LTCG** and **/USEPROFILE** linker options.
> [!NOTE]
-> Both `.pgc` and `.pgd` files are binary file types. If stored in a source control system, avoid any automatic transformation that may be made to text files.
+> Both `.pgc` and `.pgd` files are binary file types. If you store them in a source control system, avoid any automatic transformation that might be made to text files.
## Optimizations performed by PGO
-The profile-guided optimizations include these checks and improvements:
+Profile-guided optimizations include these checks and improvements:
-- **Inlining** - For example, if a function A frequently calls function B, and function B is relatively small, then profile-guided optimizations inline function B in function A.
+- **Inlining** - For example, if function A frequently calls function B, and function B is relatively small, the profile-guided optimizations inline function B in function A.
- **Virtual Call Speculation** - If a virtual call, or other call through a function pointer, frequently targets a certain function, a profile-guided optimization can insert a conditionally executed direct call to the frequently targeted function, and the direct call can be inlined.
@@ -61,33 +63,36 @@ The profile-guided optimizations include these checks and improvements:
- **Function Layout** - Based on the call graph and profiled caller/callee behavior, functions that tend to be along the same execution path are placed in the same section.
-- **Conditional Branch Optimization** - With the value probes, profile-guided optimizations can find if a given value in a switch statement is used more often than other values. This value can then be pulled out of the switch statement. The same can be done with **`if`**...**`else`** instructions where the optimizer can order the **`if`**...**`else`** so that either the **`if`** or **`else`** block is placed first, depending on which block is more frequently true.
+- **Conditional Branch Optimization** - With the value probes, profile-guided optimizations can find if a given value in a switch statement is used more often than other values. This value can then be pulled out of the switch statement. The same optimization can be done with **`if`**...**`else`** instructions where the optimizer can order the **`if`**...**`else`** so that either the **`if`** or **`else`** block is placed first, depending on which block is more frequently true.
-- **Dead Code Separation** - Code that isn't called during profiling is moved to a special section that's appended to the end of the set of sections. It effectively keeps this section out of the often-used pages.
+- **Dead Code Separation** - Profile-guided optimization moves code that isn't called during profiling to a special section at the end of the section set. It effectively keeps this section out of the often-used pages.
-- **EH Code Separation** - Because EH code is only exceptionally executed, it can often be moved to a separate section. It's moved when profile-guided optimizations can determine that the exceptions occur only on exceptional conditions.
+- **EH Code Separation** - Because EH code is only exceptionally executed, it can often be moved to a separate section. Profile-guided optimizations move it when they determine that the exceptions occur only on exceptional conditions.
-- **Memory Intrinsics** - Whether to expand an intrinsic or not depends on whether it's called frequently. An intrinsic can also be optimized based on the block size of moves or copies.
+- **Memory Intrinsics** - Whether to expand an intrinsic or not depends on whether it gets called frequently. An intrinsic can also be optimized based on the block size of moves or copies.
## Next steps
-Read more about these environment variables, functions, and tools you can use in profile-guided optimizations:
+To learn more about these environment variables, functions, and tools you can use in profile-guided optimizations, see the following resources:
-[Environment variables for profile-guided optimizations](environment-variables-for-profile-guided-optimizations.md)
-These variables were used to specify run-time behavior of testing scenarios. They're now deprecated and replaced by new linker options. This document shows you how to move from the environment variables to the linker options.
+[Environment variables for profile-guided optimizations](environment-variables-for-profile-guided-optimizations.md)\
+These variables specify the run-time behavior of testing scenarios. They're now deprecated and replaced by new linker options. This document shows you how to move from the environment variables to the linker options.
-[PgoAutoSweep](pgoautosweep.md)
+[PgoAutoSweep](pgoautosweep.md)\
A function you can add to your app to provide fine-grained `.pgc` file data capture control.
-[pgosweep](pgosweep.md)
+[pgosweep](pgosweep.md)\
A command-line utility that writes all profile data to the `.pgc` file, closes the `.pgc` file, and opens a new `.pgc` file.
-[pgomgr](pgomgr.md)
+[pgomgr](pgomgr.md)\
A command-line utility that adds profile data from one or more `.pgc` files to the `.pgd` file.
-[How to: Merge multiple PGO profiles into a single profile](how-to-merge-multiple-pgo-profiles-into-a-single-profile.md)
+[How to: Merge multiple PGO profiles into a single profile](how-to-merge-multiple-pgo-profiles-into-a-single-profile.md)\
Examples of **pgomgr** usage.
+[Sample Profile-Guided Optimization (SPGO) tutorial](sample-profile-guided-optimization.md)\
+Use CPU hardware performance counters instead of instrumentation. No instrumented build required - profile your existing release binary with `xperf`.
+
## See also
[Additional MSVC build tools](reference/c-cpp-build-tools.md)
diff --git a/docs/build/projects-and-build-systems-cpp.md b/docs/build/projects-and-build-systems-cpp.md
index 511330c45a4..0e429325991 100644
--- a/docs/build/projects-and-build-systems-cpp.md
+++ b/docs/build/projects-and-build-systems-cpp.md
@@ -1,11 +1,10 @@
---
title: "C/C++ projects and build systems in Visual Studio"
description: "Use Visual Studio to compile and build C++ projects for Windows, ARM, or Linux based on any project system."
-ms.date: "07/17/2019"
-helpviewer_keywords: ["builds [C++]", "C++ projects, building", "projects [C++], building", "builds [C++], options", "C++, build options"]
-ms.assetid: fa6ed4ff-334a-4d99-b5e2-a1f83d2b3008
+ms.date: 07/17/2019
ms.topic: "overview"
ms.custom: intro-overview
+helpviewer_keywords: ["builds [C++]", "C++ projects, building", "projects [C++], building", "builds [C++], options", "C++, build options"]
---
# C/C++ projects and build systems in Visual Studio
@@ -13,25 +12,25 @@ You can use Visual Studio to edit, compile, and build any C++ code base with ful
## C++ compilation
-To *build* a C++ program means to compile source code from one or more files and then link those files into an executable file (.exe), a dynamic-load library (.dll) or a static library (.lib).
+To *build* a C++ program means to compile source code from one or more files and then link those files into an executable file (`.exe`), a dynamic-link library (`.dll`) or a static library (`.lib`).
Basic C++ compilation involves three main steps:
- The C++ preprocessor transforms all the #directives and macro definitions in each source file. This creates a *translation unit*.
-- The C++ compiler compiles each translation unit into object files (.obj), applying whatever compiler options have been set.
+- The C++ compiler compiles each translation unit into object files (`.obj`), applying whatever compiler options have been set.
- The *linker* merges the object files into a single executable, applying the linker options that have been set.
## The Microsoft C++ (MSVC) Build Tools
The Microsoft C++ compiler, linker, standard libraries, and related utilities make up the Microsoft C++ (MSVC) Build Tools (also called a toolchain or toolset). These are included in Visual Studio. You can also download and use the command-line toolset as a free standalone package. For more information, see [Build Tools for Visual Studio](https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022) on the Visual Studio Downloads page.
-You can build simple programs by invoking the MSVC compiler (cl.exe) directly from the command line. The following command accepts a single source code file, and invokes cl.exe to build an executable called *hello.exe*:
+You can build simple programs by invoking the MSVC compiler (`cl.exe`) directly from the command line. The following command accepts a single source code file, and invokes `cl.exe` to build an executable called *`hello.exe`*:
```cmd
cl /EHsc hello.cpp
```
-Here the compiler (cl.exe) automatically invokes the C++ preprocessor and the linker to produce the final output file. For more information, see [Building on the command line](building-on-the-command-line.md).
+Here the compiler (`cl.exe`) automatically invokes the C++ preprocessor and the linker to produce the final output file. For more information, see [Building on the command line](building-on-the-command-line.md).
## Build systems and projects
@@ -39,19 +38,19 @@ Most real-world programs use some kind of *build system* to manage complexities
The following list shows various options for Visual Studio Projects - C++:
-- create a Visual Studio project by using the Visual Studio IDE and configure it by using property pages. Visual Studio projects produce programs that run on Windows. For an overview, see [Compiling and Building](/visualstudio/ide/compiling-and-building-in-visual-studio) in the Visual Studio documentation.
+- Create a Visual Studio project by using the Visual Studio IDE and configure it by using property pages. Visual Studio projects produce programs that run on Windows. For an overview, see [Compiling and Building](/visualstudio/ide/compiling-and-building-in-visual-studio) in the Visual Studio documentation.
-- open a folder that contains a CMakeLists.txt file. CMake support is integrated into Visual Studio. You can use the IDE to edit, test, and debug without modifying the CMake files in any way. This enables you to work in the same CMake project as others who might be using different editors. CMake is the recommended approach for cross-platform development. For more information, see [CMake projects](cmake-projects-in-visual-studio.md).
+- Open a folder that contains a `CMakeLists.txt` file. CMake support is integrated into Visual Studio. You can use the IDE to edit, test, and debug without modifying the CMake files in any way. This enables you to work in the same CMake project as others who might be using different editors. CMake is the recommended approach for cross-platform development. For more information, see [CMake projects](cmake-projects-in-visual-studio.md).
-- open a loose folder of source files with no project file. Visual Studio will use heuristics to build the files. This is an easy way to compile and run small console applications. For more information, see [Open Folder projects](open-folder-projects-cpp.md).
+- Open a loose folder of source files with no project file. Visual Studio will use heuristics to build the files. This is an easy way to compile and run small console applications. For more information, see [Open Folder projects](open-folder-projects-cpp.md).
-- open a folder that contains a makefile, or any other build system configuration file. You can configure Visual Studio to invoke any arbitrary build commands by adding JSON files to the folder. For more information, see [Open Folder projects](open-folder-projects-cpp.md).
+- Open a folder that contains a makefile, or any other build system configuration file. You can configure Visual Studio to invoke any arbitrary build commands by adding JSON files to the folder. For more information, see [Open Folder projects](open-folder-projects-cpp.md).
- Open a Windows makefile in Visual Studio. For more information, see [NMAKE Reference](reference/nmake-reference.md).
## MSBuild from the command line
-You can invoke MSBuild from the command line by passing it a .vcxproj file along with command-line options. This approach requires a good understanding of MSBuild, and is recommended only when necessary. For more information, see [MSBuild](msbuild-visual-cpp.md).
+You can invoke MSBuild from the command line by passing it a `.vcxproj` file along with command-line options. This approach requires a good understanding of MSBuild, and is recommended only when necessary. For more information, see [MSBuild](msbuild-visual-cpp.md).
## In This Section
@@ -74,7 +73,7 @@ Discusses how to use the C/C++ compiler and build tools directly from the comman
How to create, debug, and deploy C/C++ DLLs (shared libraries) in Visual Studio.
[Walkthrough: Creating and Using a Static Library](walkthrough-creating-and-using-a-static-library-cpp.md)\
-How to create a **.lib** binary file.
+How to create a `.lib` binary file.
[Building C/C++ Isolated Applications and Side-by-side Assemblies](building-c-cpp-isolated-applications-and-side-by-side-assemblies.md)\
Describes the deployment model for Windows Desktop applications, based on the idea of isolated applications and side-by-side assemblies.
@@ -86,7 +85,7 @@ How to target 64-bit x64 hardware with the MSVC build tools.
How to use the MSVC Build Tools to target ARM hardware.
[Optimizing Your Code](optimizing-your-code.md)\
-How to optimize your code in various ways including program guided optimizations.
+How to optimize your code in various ways including profile-guided optimization (PGO).
[Configuring Programs for Windows XP](configuring-programs-for-windows-xp.md)\
How to target Windows XP with the MSVC build tools.
diff --git a/docs/build/reference/arch-x64.md b/docs/build/reference/arch-x64.md
index 696f055f190..a48dc2984cc 100644
--- a/docs/build/reference/arch-x64.md
+++ b/docs/build/reference/arch-x64.md
@@ -7,7 +7,7 @@ helpviewer_keywords: ["/arch:SSE2 compiler option [C++]", "/arch:SSE4.2 compiler
---
# `/arch` (x64)
-Specifies the architecture for code generation on x64. These switches apply to the x64 targeting version of the compiler. For more information on **`/arch`** for other target architectures, see [`/arch` (x86)](arch-x86.md), [`/arch` (ARM64)](arch-arm64.md), and [`/arch` (ARM)](arch-arm.md).
+Specifies the architecture for code generation on x64. These switches apply to version of the compiler that targets x64. For more information about **`/arch`** for other target architectures, see [`/arch` (x86)](arch-x86.md), [`/arch` (ARM64)](arch-arm64.md), and [`/arch` (ARM)](arch-arm.md).
## Syntax
@@ -16,25 +16,25 @@ Specifies the architecture for code generation on x64. These switches apply to t
## Arguments
**`/arch:SSE2`**\
-Enables Intel Streaming SIMD Extensions 2. The default instruction set is SSE2 if no **`/arch`** option is specified.
+Enables x64 Streaming SIMD Extensions 2. If you don't specify a **`/arch`** option, the default instruction set is SSE2.
**`/arch:SSE4.2`**\
-Enables Intel Streaming SIMD Extensions 4.2.
+Enables x64 Streaming SIMD Extensions 4.2.
**`/arch:AVX`**\
-Enables Intel Advanced Vector Extensions.
+Enables x64 Advanced Vector Extensions.
**`/arch:AVX2`**\
-Enables Intel Advanced Vector Extensions 2.
+Enables x64 Advanced Vector Extensions 2.
**`/arch:AVX512`**\
-Enables Intel Advanced Vector Extensions 512.
+Enables x64 Advanced Vector Extensions 512.
**`/arch:AVX10.1`**\
-Enables Intel Advanced Vector Extensions 10 version 1.
+Enables x64 Advanced Vector Extensions 10 version 1.
**`/arch:AVX10.2`**\
-Enables Intel Advanced Vector Extensions 10 version 2.
+Enables x64 Advanced Vector Extensions 10 version 2.
## Remarks
@@ -84,5 +84,6 @@ Support for **`/arch:AVX10.1`** was added in Visual Studio 2022. Support for **`
## See also
[`/arch` (Minimum CPU Architecture)](arch-minimum-cpu-architecture.md)\
+[`/feature` (x64)](feature-x64.md)\
[MSVC compiler options](compiler-options.md)\
[MSVC compiler command-line syntax](compiler-command-line-syntax.md)
diff --git a/docs/build/reference/arch-x86.md b/docs/build/reference/arch-x86.md
index a133eda92db..411c90f5e4d 100644
--- a/docs/build/reference/arch-x86.md
+++ b/docs/build/reference/arch-x86.md
@@ -7,7 +7,7 @@ helpviewer_keywords: ["/arch:IA32 compiler option [C++]", "/arch:SSE compiler op
---
# `/arch` (x86)
-Specifies the architecture for code generation on x86. These switches apply to the x86 (32-bit) targeting version of the compiler. For more information on **`/arch`** for other target architectures, see [`/arch` (ARM64)](arch-arm64.md), [`/arch` (x64)](arch-x64.md), and [`/arch` (ARM)](arch-arm.md).
+Specifies the architecture for code generation on x86. These switches apply to the version of the compiler that targets x86 (32-bit). For more information about **`/arch`** for other target architectures, see [`/arch` (ARM64)](arch-arm64.md), [`/arch` (x64)](arch-x64.md), and [`/arch` (ARM)](arch-arm.md).
## Syntax
@@ -19,25 +19,25 @@ Specifies the architecture for code generation on x86. These switches apply to t
Specifies no enhanced instructions and also specifies x87 for floating-point calculations.
**`/arch:SSE`**\
-Enables Intel Streaming SIMD Extensions.
+Enables Streaming SIMD Extensions.
**`/arch:SSE2`**\
-Enables Intel Streaming SIMD Extensions 2. The default instruction set is SSE2 if no **`/arch`** option is specified.
+Enables Streaming SIMD Extensions 2. If you don't specify an **`/arch`** option, the default instruction set is SSE2.
**`/arch:AVX`**\
-Enables Intel Advanced Vector Extensions.
+Enables Advanced Vector Extensions.
**`/arch:AVX2`**\
-Enables Intel Advanced Vector Extensions 2.
+Enables Advanced Vector Extensions 2.
**`/arch:AVX512`**\
-Enables Intel Advanced Vector Extensions 512.
+Enables Advanced Vector Extensions 512.
**`/arch:AVX10.1`**\
-Enables Intel Advanced Vector Extensions 10 version 1.
+Enables Advanced Vector Extensions 10 version 1.
**`/arch:AVX10.2`**\
-Enables Intel Advanced Vector Extensions 10 version 2.
+Enables Advanced Vector Extensions 10 version 2.
## Remarks
diff --git a/docs/build/reference/c-cpp-prop-page.md b/docs/build/reference/c-cpp-prop-page.md
index b43746b08b6..dce5341a0ff 100644
--- a/docs/build/reference/c-cpp-prop-page.md
+++ b/docs/build/reference/c-cpp-prop-page.md
@@ -1,7 +1,7 @@
---
title: "C/C++ Project Properties (Visual Studio)"
description: "Reference guide to the Visual Studio Microsoft C/C++ project Property Pages properties."
-ms.date: 6/9/2023
+ms.date: 3/26/2026
ms.topic: "article"
f1_keywords: ["VC.Project.VCCLCompilerTool.AdditionalModuleDirectories", "VC.Project.VCCLCompilerTool.ScanSourceForModuleDependencies"]
---
@@ -47,15 +47,19 @@ Specifies the type of debugging information generated by the compiler. This pro
#### Choices
-- **None** - Produces no debugging information, so compilation may be faster.
-- **C7 compatible** - Select the type of debugging information created for your program and whether this information is kept in object (.obj) files or in a program database (PDB).
-- **Program Database** - Produces a program database (PDB) that contains type information and symbolic debugging information for use with the debugger. The symbolic debugging information includes the names and types of variables and functions, and line numbers.
-- **Program Database for Edit And Continue** - Produces a program database, as described previously, in a format that supports the [Edit and Continue](/visualstudio/debugger/edit-and-continue) feature.
+- **None** (`None`) - Produces no debugging information, so compilation may be faster.
+- **C7 compatible** (`OldStyle`) - Produces object files that contain full symbolic debugging information. No PDB file is produced.
+- **Program Database** (`ProgramDatabase`) - Produces a program database (PDB) that contains type information and symbolic debugging information for use with the debugger. The symbolic debugging information includes the names and types of variables and functions, and line numbers.
+- **Program Database for Edit And Continue** (`EditAndContinue`) - Produces a program database, as described previously, in a format that supports the [Edit and Continue](/visualstudio/debugger/edit-and-continue) feature.
### Support Just My Code Debugging
Adds supporting code for enabling [Just My Code](/visualstudio/debugger/just-my-code) debugging in this compilation unit. Sets [`/JMC`](jmc.md).
+### Support C++ Dynamic Debugging
+
+(Preview) Sets compiler flag [`/dynamicdeopt`](dynamic-deopt.md) to turn on [C++ Dynamic Debugging](/visualstudio/debugger/cpp-dynamic-debugging). Place deoptimized breakpoints and step in anywhere with on-demand function deoptimization. Use this mode for debugging optimized code.
+
### Common Language RunTime Support
Use the .NET runtime service. This switch is incompatible with some other switches; see the documentation on the [`/clr`](clr-common-language-runtime-compilation.md) family of switches for details.
@@ -118,6 +122,10 @@ Enable multi-processor compilation. Sets the [`/MP`](mp-build-with-multiple-proc
Compiles and links the program with AddressSanitizer instrumentation. This property currently supports x86 and x64 target builds. Sets the [`/fsanitize`](fsanitize.md) compiler option.
+### Enable Fuzzer Support (Experimental)
+
+Compiles programs with the Fuzzer. Enable AddressSanitizer for best results. Currently available for x86 and x64 builds. Sets [`/fsanitize=fuzzer`](fsanitize.md).
+
## C/C++ Optimization Properties
### Optimization
@@ -199,6 +207,10 @@ Preprocess without #line directives.
Suppresses comment strip from source code; requires setting at least one of the **Preprocessing** options. Sets [`/C`](c-preserve-comments-during-preprocessing.md).
+### Use Standard Conforming Preprocessor
+
+Use a standard conforming preprocessor ([`/Zc:preprocessor`](zc-preprocessor.md)). Currently implied by [`/std:c11`](std-specify-language-standard-version.md) and later versions. To use legacy preprocessor set this property to 'No'.
+
## C/C++ Code Generation Properties
### Enable String Pooling
@@ -298,6 +310,10 @@ Enable use of instructions found on processors that support enhanced instruction
- **No Enhanced Instructions** - No Enhanced Instructions. Sets **`/arch:IA32`**
- **Not Set** - Not Set.
+### Enable Vector Length
+
+Enable choosing vector length for [`/arch:AVX512`](arch-x86.md) and [`/arch:AVX10.x`](arch-x86.md) flags. Allowed values are 256 and 512 bits (X86/X64).
+
### Floating Point Model
Sets the floating point model. Sets [`/fp:precise`, `/fp:strict`, `/fp:fast`](fp-specify-floating-point-behavior.md).
@@ -325,6 +341,18 @@ Spectre mitigations for CVE 2017-5753. Sets [`/Qspectre`](qspectre.md).
- **Enabled** - Enable Spectre mitigation feature for CVE 2017-5753
- **Disabled** - Not Set.
+### Enable Intel JCC Erratum Mitigation
+
+Software mitigation for the performance impact caused by the Intel JCC erratum microcode update. Sets [`/QIntel-jcc-erratum`](qintel-jcc-erratum.md).
+
+### Enable EH Continuation Metadata
+
+Generates a sorted list of all the valid exception handling continuation targets for a binary, used during runtime for RIP validation. Currently available for x64 builds. Sets [`/guard:ehcont`](guard-enable-eh-continuation-metadata.md).
+
+### Enable Signed Returns
+
+Enables signed returns which help detect and prevent attempts to dispatch to illegal blocks from function returns. Currently available for ARM64 builds. Sets `/guard:signret`.
+
## C/C++ Language Properties
### Disable Language Extensions
@@ -365,7 +393,8 @@ Determines the C++ language standard that the compiler enables. The default valu
- **ISO C++14 Standard (/std:c++14)**
- **ISO C++17 Standard (/std:c++17)**
- **ISO C++20 Standard (/std:c++20)**
-- **Preview - Features from the Latest C++ Working Draft (/std:c++latest)**
+- **Preview - ISO C++23 Standard (/std:c++23preview)**
+- **Preview - Features from the Latest C++ Working Draft (/std:c++latest)**
### C Language Standard
@@ -376,6 +405,7 @@ Determines the C language standard that the compiler enables. The default value
- **Default (Legacy MSVC)**
- **ISO C11 Standard (/std:c11)**
- **ISO C17 (2018) Standard (/std:c17)**
+- **Preview - Features from the Latest C Working Draft (/std:clatest)**
### Conformance mode
@@ -435,6 +465,14 @@ Causes the output file to be created in UTF-8 format.
Specifies relative path or name for ASM listing file; can be file or directory name. Sets [`/Fa`](fa-fa-listing-file.md).
+### Module Output File Name
+
+Module or header unit output (BMI) file location; can be file or directory name. Sets [`/ifcOutput[name]`](ifc-output.md).
+
+### Module Dependencies File Name
+
+Specifies the path and/or name of the generated module dependencies file. Sets [`/scanDependencies[path]`](scandependencies.md).
+
### Object File Name
Specifies a name to override the default object file name; can be file or directory name. Sets [`/Fo`](fo-object-file-name.md).
@@ -451,6 +489,14 @@ Specifies that the compiler should generate XML documentation comment files (.XD
Specifies the name of the generated XML documentation files; can be file or directory name. Sets [`/doc:`\](doc-process-documentation-comments-c-cpp.md).
+### Generate Source Dependencies File
+
+Generates a json file with the list of all files the compiler used for the compilation of the source. Sets [`/sourceDependencies`](sourcedependencies.md).
+
+### Source Dependencies File Name
+
+Specifies the path and/or name of the generated source dependencies file. Sets [`/sourceDependencies[path]`](sourcedependencies.md).
+
## C/C++ Browse Information Properties
### Enable Browse Information
@@ -461,7 +507,7 @@ Specifies level of browse information in *`.bsc`* file. Sets [`/FR`](fr-fr-creat
Specifies optional name for browser information file. Sets [`/FR`\](fr-fr-create-dot-sbr-file.md).
-## External Includes
+## C/C++ External Includes Properties
### Treat Files Included with Angle Brackets as External
diff --git a/docs/build/reference/cetcompat.md b/docs/build/reference/cetcompat.md
index d5c8870b4c0..984e60d83ad 100644
--- a/docs/build/reference/cetcompat.md
+++ b/docs/build/reference/cetcompat.md
@@ -23,7 +23,7 @@ Specifies that the executable shouldn't be marked compatible with CET Shadow Sta
Control-flow Enforcement Technology (CET) Shadow Stack is a computer processor feature. It provides capabilities to defend against return-oriented programming (ROP) based malware attacks. For more information, see [A Technical Look at Intel's Control-flow Enforcement Technology](https://software.intel.com/content/www/us/en/develop/articles/technical-look-control-flow-enforcement-technology.html).
-The **`/CETCOMPAT`** linker option tells the linker to mark the binary as CET Shadow Stack-compatible. **`/CETCOMPAT:NO`** marks the binary as not compatible with CET Shadow Stack. If both options are specified on the command line, the last one specified is used. This switch is currently only applicable to x86 and x64 architectures.
+The **`/CETCOMPAT`** linker option tells the linker to mark the binary as CET Shadow Stack-compatible. **`/CETCOMPAT:NO`** marks the binary as not compatible with CET Shadow Stack. If both options are specified on the command line, the last one specified is used. This switch is currently only applicable to the x64 architecture.
The **`/CETCOMPAT`** option is available beginning in Visual Studio 2019.
diff --git a/docs/build/reference/cgthreads-code-generation-threads.md b/docs/build/reference/cgthreads-code-generation-threads.md
index d169b1d3419..20091542bd9 100644
--- a/docs/build/reference/cgthreads-code-generation-threads.md
+++ b/docs/build/reference/cgthreads-code-generation-threads.md
@@ -4,11 +4,10 @@ title: "/cgthreads (Code generation threads)"
ms.date: 07/31/2020
f1_keywords: ["/cgthreads"]
helpviewer_keywords: ["/cgthreads compiler option (C++)", "-cgthreads compiler option (C++)", "cgthreads compiler option (C++)", "cgthreads"]
-ms.assetid: 64bc768c-6caa-4baf-9dea-7cfa1ffb01c2
---
# `/cgthreads` (Code generation threads)
-Sets number of cl.exe threads to use for optimization and code generation.
+Sets number of `cl.exe` threads to use for optimization and code generation.
## Syntax
@@ -24,20 +23,18 @@ Sets number of cl.exe threads to use for optimization and code generation.
## Arguments
**`cgthreadsN`**\
-The maximum number of threads for cl.exe to use, where *N* is a number in the range 1 to 8.
+The maximum number of threads for `cl.exe` to use, where *N* is a number in the range 1 to 8.
## Remarks
-The **`cgthreads`** option specifies the maximum number of threads cl.exe uses in parallel for the optimization and code generation phases of compilation. Notice that there can be no space between **`cgthreads`** and the *number* argument. By default, cl.exe uses four threads, as if **`/cgthreads4`** were specified. If more processor cores are available, a larger *number* value can improve build times. This option is especially useful when it's combined with [`/GL` (Whole Program Optimization)](gl-whole-program-optimization.md).
+The **`cgthreads`** option specifies the maximum number of threads `cl.exe` uses in parallel for the optimization and code generation phases of compilation. Notice that there can be no space between **`cgthreads`** and the *number* argument. By default, `cl.exe` uses four threads, as if **`/cgthreads4`** were specified. If more processor cores are available, a larger *number* value can improve build times. This option is especially useful when it's combined with [`/GL` (Whole Program Optimization)](gl-whole-program-optimization.md).
-Multiple levels of parallelism can be specified for a build. The msbuild.exe switch **`/maxcpucount`** specifies the number of MSBuild processes that can be run in parallel. The [`/MP` (Build with Multiple Processes)](mp-build-with-multiple-processes.md) compiler flag specifies the number of cl.exe processes that simultaneously compile the source files. The **`cgthreads`** option specifies the number of threads used by each cl.exe process. The processor can only run as many threads at the same time as there are processor cores. It's not useful to specify larger values for all of these options at the same time, and it can be counterproductive. For more information about how to build projects in parallel, see [Building Multiple Projects in Parallel](/visualstudio/msbuild/building-multiple-projects-in-parallel-with-msbuild).
+Multiple levels of parallelism can be specified for a build. The msbuild.exe switch **`/maxcpucount`** specifies the number of MSBuild processes that can be run in parallel. The [`/MP` (Build with Multiple Processes)](mp-build-with-multiple-processes.md) compiler flag specifies the number of `cl.exe` processes that simultaneously compile the source files. The **`cgthreads`** option specifies the number of threads used by each `cl.exe` process. The processor can only run as many threads at the same time as there are processor cores. It's not useful to specify larger values for all of these options at the same time, and it can be counterproductive. For more information about how to build projects in parallel, see [Building Multiple Projects in Parallel](/visualstudio/msbuild/building-multiple-projects-in-parallel-with-msbuild).
### To set this compiler option in the Visual Studio development environment
1. Open the project's **Property Pages** dialog box. For details, see [Set C++ compiler and build properties in Visual Studio](../working-with-project-properties.md).
-
1. Select the **Configuration Properties** > **C/C++** > **Command Line** property page.
-
1. Modify the **Additional Options** property to include **`cgthreadsN`**, where *`N`* is a value from 1 to 8, and then select **OK**.
### To set this compiler option programmatically
@@ -46,5 +43,5 @@ Multiple levels of parallelism can be specified for a build. The msbuild.exe swi
## See also
-[MSVC compiler options](compiler-options.md)
+[MSVC compiler options](compiler-options.md)\
[MSVC compiler command-line syntax](compiler-command-line-syntax.md)
diff --git a/docs/build/reference/common-macros-for-build-commands-and-properties.md b/docs/build/reference/common-macros-for-build-commands-and-properties.md
index bb52c1458b4..5f3cd0fc40d 100644
--- a/docs/build/reference/common-macros-for-build-commands-and-properties.md
+++ b/docs/build/reference/common-macros-for-build-commands-and-properties.md
@@ -59,8 +59,8 @@ This table describes a commonly used subset of the available macros; there are m
| **`$(TargetFileName)`** | The file name of the primary output file for the build (defined as base name + file extension). |
| **`$(TargetName)`** | The base name of the primary output file for the build. |
| **`$(TargetPath)`** | The absolute path name of the primary output file for the build (defined as drive + path + base name + file extension). |
-| **`$(VCInstallDir)`** | The directory that contains the C++ content of your Visual Studio installation. This property contains the version of the targeted Microsoft C++ (MSVC) toolset, which might be different that the host Visual Studio. For example, when building with `$(PlatformToolset) = v140`, **`$(VCInstallDir)`** contains the path to the Visual Studio 2015 installation. |
-| **`$(VSInstallDir)`** | The directory into which you installed Visual Studio. This property contains the version of the targeted Visual Studio toolset, which might be different that the host Visual Studio. For example, when building with `$(PlatformToolset) = v110`, **`$(VSInstallDir)`** contains the path to the Visual Studio 2012 installation. |
+| **`$(VCInstallDir)`** | The directory that contains the C++ content of your Visual Studio installation. This property contains the version of the targeted Microsoft C++ (MSVC) toolset, which might be different than the host Visual Studio. For example, when building with `$(PlatformToolset) = v140`, **`$(VCInstallDir)`** contains the path to the Visual Studio 2015 installation. |
+| **`$(VSInstallDir)`** | The directory into which you installed Visual Studio. This property contains the version of the targeted Visual Studio toolset, which might be different than the host Visual Studio. For example, when building with `$(PlatformToolset) = v110`, **`$(VSInstallDir)`** contains the path to the Visual Studio 2012 installation. |
| **`$(WebDeployPath)`** | The relative path from the web deployment root to where the project outputs belong. |
| **`$(WebDeployRoot)`** | The absolute path to the location of **``**. For example, *`c:\inetpub\wwwroot`*. |
diff --git a/docs/build/reference/compiler-options-listed-alphabetically.md b/docs/build/reference/compiler-options-listed-alphabetically.md
index 193a21544b1..8e2d8e81772 100644
--- a/docs/build/reference/compiler-options-listed-alphabetically.md
+++ b/docs/build/reference/compiler-options-listed-alphabetically.md
@@ -1,7 +1,8 @@
---
title: "Compiler options listed alphabetically"
description: "Reference listing in alphabetical order of the Microsoft C/C++ compiler command-line options."
-ms.date: 2/5/2025
+ms.date: 05/25/2026
+ai-usage: ai-assisted
helpviewer_keywords: ["compiler options, C++"]
---
# Compiler options listed alphabetically
@@ -66,7 +67,7 @@ This table contains an alphabetical list of compiler options. For a list of comp
| [`/FC`](fc-full-path-of-source-code-file-in-diagnostics.md) | Displays the full path of source code files passed to *cl.exe* in diagnostic text. |
| [`/Fd`](fd-program-database-file-name.md) | Renames program database file. |
| [`/Fe`](fe-name-exe-file.md) | Renames the executable file. |
-| [`/feature`](feature-arm64.md) | Enable architecture features.17.10 |
+| [`/feature`](feature-enable-architecture-features.md) | Enable architecture features. |
| [`/forceInterlockedFunctions`](force-interlocked-functions.md) | Dynamically selects between Armv8.0 load, store exclusive instructions or Armv8.1 LSE atomic instructions based on target CPU.17.14 |
| [`/FI`](fi-name-forced-include-file.md) | Preprocesses the specified include file. |
| [`/Fi`](fi-preprocess-output-file-name.md) | Specifies the preprocessed output file name. |
@@ -251,7 +252,7 @@ This table contains an alphabetical list of compiler options. For a list of comp
| [`/Zc:zeroSizeArrayNew[-]`](zc-zerosizearraynew.md) | Call member `new`/`delete` for zero-size arrays of objects (on by default). |
| [`/Ze`](za-ze-disable-language-extensions.md) | Deprecated. Enables C89 language extensions. |
| [`/Zf`](zf.md) | Improves PDB generation time in parallel builds. |
-| [`/ZH:[MD5|SHA1|SHA_256]`](zh.md) | Specifies MD5, SHA-1, or SHA-256 for checksums in debug info. |
+| [`/ZH:[MD5|SHA1|SHA_256|SHA384|SHA512]`](zh.md) | Specifies MD5, SHA-1, SHA-256, SHA-38418.6.0, or SHA-51218.6.0 for checksums in debug info. |
| [`/ZI`](z7-zi-zi-debug-information-format.md) | Includes debug information in a program database compatible with Edit and Continue. (x86 only) |
| [`/Zi`](z7-zi-zi-debug-information-format.md) | Generates complete debugging information. |
| [`/Zl`](zl-omit-default-library-name.md) | Removes the default library name from the *`.obj`* file. |
@@ -261,8 +262,8 @@ This table contains an alphabetical list of compiler options. For a list of comp
| [`/Zs`](zs-syntax-check-only.md) | Checks syntax only. |
| [`/ZW`](zw-windows-runtime-compilation.md) | Produces an output file to run on the Windows Runtime. |
-17.10 This option is available starting in Visual Studio 2022 version 17.10.\
-17.14 This option is available starting in Visual Studio 2022 version 17.14.
+17.14 This option is available starting in Visual Studio 2022 version 17.14.\
+18.6.0 This option is available starting in Visual Studio 2026 version 18.6.0 and MSVC version 14.51.
## See also
diff --git a/docs/build/reference/compiler-options-listed-by-category.md b/docs/build/reference/compiler-options-listed-by-category.md
index 5b2a78c030d..2636a52da0e 100644
--- a/docs/build/reference/compiler-options-listed-by-category.md
+++ b/docs/build/reference/compiler-options-listed-by-category.md
@@ -1,7 +1,8 @@
---
title: "Compiler Options Listed by Category"
description: "Reference listing by category of the Microsoft C/C++ compiler command-line options."
-ms.date: 2/5/2025
+ms.date: 05/25/2026
+ai-usage: ai-assisted
helpviewer_keywords: ["compiler options, C++"]
---
# Compiler options listed by category
@@ -43,7 +44,7 @@ This article contains a categorical list of compiler options. For an alphabetica
| [`/EHc`](eh-exception-handling-model.md) | `extern "C"` defaults to `nothrow`. |
| [`/EHr`](eh-exception-handling-model.md) | Always generate `noexcept` runtime termination checks. |
| [`/EHs`](eh-exception-handling-model.md) | Enable C++ exception handling (no SEH exceptions). |
-| [`/feature`](feature-arm64.md) | Enable architecture features.17.10 |
+| [`/feature`](feature-enable-architecture-features.md) | Enable architecture features. |
| [`/forceInterlockedFunctions`](force-interlocked-functions.md) | Dynamically selects between Armv8.0 load, store exclusive instructions or Armv8.1 LSE atomic instructions based on target CPU.17.14 |
| [`/fp:contract`](fp-specify-floating-point-behavior.md) | Consider floating-point contractions when generating code. |
| [`/fp:except[-]`](fp-specify-floating-point-behavior.md) | Consider floating-point exceptions when generating code. |
@@ -210,7 +211,7 @@ This article contains a categorical list of compiler options. For an alphabetica
| [`/Zc:zeroSizeArrayNew[-]`](zc-zerosizearraynew.md) | Call member `new`/`delete` for 0-size arrays of objects (on by default). |
| [`/Ze`](za-ze-disable-language-extensions.md) | Deprecated. Enables C89 language extensions. |
| [`/Zf`](zf.md) | Improves PDB generation time in parallel builds. |
-| [`/ZH`:[MD5|SHA1|SHA_256]](zh.md) | Specifies MD5, SHA-1, or SHA-256 for checksums in debug info. |
+| [`/ZH`:[MD5|SHA1|SHA_256|SHA384|SHA512]](zh.md) | Specifies MD5, SHA-1, SHA-256, SHA-38418.6.0, or SHA-51218.6.0 for checksums in debug info. |
| [`/ZI`](z7-zi-zi-debug-information-format.md) | Includes debug information in a program database compatible with Edit and Continue. (x86 only) |
| [`/Zi`](z7-zi-zi-debug-information-format.md) | Generates complete debugging information. |
| [`/Zl`](zl-omit-default-library-name.md) | Removes the default library name from the *`.obj`* file. |
@@ -219,6 +220,8 @@ This article contains a categorical list of compiler options. For an alphabetica
| [`/Zs`](zs-syntax-check-only.md) | Checks syntax only. |
| [`/ZW`](zw-windows-runtime-compilation.md) | Produces an output file to run on the Windows Runtime. |
+18.6.0 This option is available starting in Visual Studio 2026 version 18.6.0 and MSVC version 14.51.
+
## Linking
| Option | Purpose |
@@ -329,7 +332,6 @@ Experimental options may only be supported by certain versions of the compiler.
| [`/Ze`](za-ze-disable-language-extensions.md) | Deprecated. Enables language extensions. |
| [`/Zg`](zg-generate-function-prototypes.md) | Removed in Visual Studio 2015. Generates function prototypes. |
-17.10 This option is available starting in Visual Studio 2022 version 17.10.\
17.14 This option is available starting in Visual Studio 2022 version 17.14.
## See also
diff --git a/docs/build/reference/creating-a-makefile-project.md b/docs/build/reference/creating-a-makefile-project.md
index 1f88156dfd8..566ed5e134c 100644
--- a/docs/build/reference/creating-a-makefile-project.md
+++ b/docs/build/reference/creating-a-makefile-project.md
@@ -30,7 +30,13 @@ The output file that you specify in the project has no effect on the name that t
### To create a makefile project in Visual Studio
-1. From the Visual Studio main menu, choose **File** > **New** > **Project** and type "makefile" into the search box. If you see more than one project template, select from the options depending on your target platform.
+1. From the Visual Studio main menu, choose **File** > **New** > **Project/Solution**.
+
+ :::image type="content" source="media/file-new-project.png" alt-text="Screenshot of the File > New > Project/Solution menu item.":::
+
+1. Type *makefile* into the search box. If you see more than one project template, select the option for your target platform.
+
+ :::image type="content" source="media/create-project.png" alt-text="Screenshot of the Create a new project dialog. The Create a new project text field text box contains the text: makefile.":::
1. **Windows only**: In the Makefile project **Debug Configuration Settings** page, provide the command, output, clean, and rebuild information for debug and retail builds. Choose **Next** if you want to specify different settings for a Release configuration.
diff --git a/docs/build/reference/decorated-names.md b/docs/build/reference/decorated-names.md
index 6370302c0d6..4b5a674a640 100644
--- a/docs/build/reference/decorated-names.md
+++ b/docs/build/reference/decorated-names.md
@@ -53,10 +53,11 @@ The form of decoration for a C function depends on the calling convention used i
| Calling convention | Decoration |
|--|--|
-| **`__cdecl`** | Leading underscore (**`_`**) |
-| **`__stdcall`** | Leading underscore (**`_`**) and a trailing at sign (**`@`**) followed by the number of bytes in the parameter list in decimal |
-| **`__fastcall`** | Leading and trailing at signs (**`@`**) followed by a decimal number representing the number of bytes in the parameter list |
-| **`__vectorcall`** | Two trailing at signs (**`@@`**) followed by a decimal number of bytes in the parameter list |
+| [**`__cdecl`**](../../cpp/cdecl.md) | Leading underscore (**`_`**) |
+| [**`__stdcall`**](../../cpp/stdcall.md) | Leading underscore (**`_`**) and a trailing at sign (**`@`**) followed by the number of bytes in the parameter list in decimal |
+| [**`__fastcall`**](../../cpp/fastcall.md) | Leading and trailing at signs (**`@`**) followed by a decimal number representing the number of bytes in the parameter list |
+| [**`__vectorcall`**](../../cpp/vectorcall.md) | Two trailing at signs (**`@@`**) followed by a decimal number of bytes in the parameter list |
+| [**`__preserve_none`**](../../cpp/preserve-none.md) | Two trailing at signs, an underscore and the 'A' character (**`@@_A`**) |
For ARM64EC functions with C linkage (whether compiled as C or by using `extern "C"`), a **`#`** is prepended to the decorated name.
diff --git a/docs/build/reference/feature-arm64.md b/docs/build/reference/feature-arm64.md
index 2954b4fed11..b4a81178d93 100644
--- a/docs/build/reference/feature-arm64.md
+++ b/docs/build/reference/feature-arm64.md
@@ -16,6 +16,8 @@ To enable one or more features the targeted ARM64 extension supports, specify on
| Feature argument | Feature identifier | Optional from | Enabled by default | Description | Supported in version
|--|--|--|--|--|--|
+|**`cssc`** | `FEAT_CSSC` | Armv8.7 | Armv8.9 | Common Short Sequence Compression instructions. | Visual Studio 2026 18.10 (MSVC 14.52)
+|**`faminmax`** | `FEAT_FAMINMAX` | Armv9.2 | Armv9.5 | Floating-point maximum and minimum absolute value instructions. | Visual Studio 2026 18.10 (MSVC 14.52)
|**`lse`** | `FEAT_LSE` | Armv8.0 | Armv8.1 | Large System Extensions. | Visual Studio 2022 17.10
|**`rcpc`** | `FEAT_LRCPC` | Armv8.2 | Armv8.3 | Load-Acquire RCpc instructions. | Visual Studio 2022 17.10
|**`rcpc2`** | `FEAT_LRCPC2` | Armv8.2 | Armv8.4 | Load-Acquire RCpc instructions v2. | Visual Studio 2022 17.11
diff --git a/docs/build/reference/feature-enable-architecture-features.md b/docs/build/reference/feature-enable-architecture-features.md
new file mode 100644
index 00000000000..b9ca7324c68
--- /dev/null
+++ b/docs/build/reference/feature-enable-architecture-features.md
@@ -0,0 +1,23 @@
+---
+description: "Learn more about: /feature (Enable architecture features)"
+title: "/feature (Enable architecture features)"
+ms.date: 05/11/2026
+f1_keywords: ["/feature"]
+helpviewer_keywords: ["-feature compiler option [C++]", "/feature compiler option [C++]", "feature compiler option [C++]"]
+---
+# `/feature` (Enable architecture features)
+
+The **`/feature`** option enables specific architecture features for code generation. Select the target platform you're working with to see **`/feature`** options for that platform.
+
+- [`/feature` (ARM64)](feature-arm64.md)17.10
+
+- [`/feature` (x64)](feature-x64.md)14.51
+
+17.10 This option is available starting in Visual Studio 2022 version 17.10.\
+14.51 This option ships with MSVC Build Tools version 14.51. Available as part of Visual Studio starting with version 18.6.
+
+## See also
+
+[`/arch` (Minimum CPU architecture)](arch-minimum-cpu-architecture.md)\
+[MSVC compiler options](compiler-options.md)\
+[MSVC compiler command-line syntax](compiler-command-line-syntax.md)
diff --git a/docs/build/reference/feature-x64.md b/docs/build/reference/feature-x64.md
new file mode 100644
index 00000000000..676648ce4b5
--- /dev/null
+++ b/docs/build/reference/feature-x64.md
@@ -0,0 +1,57 @@
+---
+description: "Learn more about: /feature (x64)"
+title: "/feature (x64)"
+ms.date: 05/21/2026
+---
+# `/feature` (x64)
+
+Enable one or more architecture features for x64 code generation.
+
+> [!NOTE]
+> **`/feature:APX`** support is experimental and subject to change.
+
+## Syntax
+
+> **`/feature:`**
+
+## Arguments
+
+To enable one or more features the x64 target supports, specify one or more of the following feature arguments:
+
+| Feature argument | Description | Supported in version |
+|--|--|--|
+| **`APX`** | Enables preview support for Intel APX (Advanced Performance Extensions). Enables the compiler to target various APX features like Extended General-Purpose Registers (EGPRs), New Data Destination (NDD), No-Flags Update (NF), new conditional ISA and optimized registers save/restore operations. For more information, see [Intel Advanced Performance Extensions (APX)](https://www.intel.com/content/www/us/en/developer/articles/technical/advanced-performance-extensions-apx.html). | MSVC Build Tools 14.51 (Preview Support) |
+
+## Remarks
+
+Example usage: to enable APX, specify **`/feature:APX`**.
+
+When **`/feature:APX`** is specified, the following preprocessor macros are defined: `__APX_F__`, `__CCMP__`, `__CF__`, `__EGPR__`, `__NDD__`, `__NF__`, `__PPX__`, `__PUSH2POP2__`, and `__ZU__`. For more information, see [Microsoft-specific predefined macros](../../preprocessor/predefined-macros.md).
+
+APX extends the x64 architecture with new registers and instructions, which affects how the compiler generates calls, preserves state across function boundaries, and emits unwind metadata. The following articles describe the x64 conventions and unwind information related to APX:
+
+- [Caller/callee saved registers](../x64-calling-convention.md#callercallee-saved-registers)\
+ Describes which registers a callee must preserve and which the caller is responsible for saving across a call on x64.
+- [setjmp/longjmp](../x64-calling-convention.md#setjmplongjmp)\
+ Explains how nonlocal jumps capture and restore nonvolatile register state on x64, including the registers that participate in the jump buffer.
+- [Register volatility and preservation](../x64-software-conventions.md#register-volatility-and-preservation)\
+ Summarizes the x64 software conventions for volatile and nonvolatile general-purpose, `XMM`, `YMM`, and `ZMM` registers, and the rules callees must follow to preserve them.
+- [Exception handling unwind information V3](../x64-unwind-information-v3.md)\
+ Preview specification of the V3 unwind information format used to describe prologs, epilogs, and frame layout for x64 code, including the extended state introduced by APX.
+
+### To set the `/feature` compiler option in Visual Studio
+
+1. Open the **Property Pages** dialog box for the project. For more information, see [Set C++ compiler and build properties in Visual Studio](../working-with-project-properties.md).
+1. Select the **Configuration Properties** > **C/C++** > **Command Line** property page.
+1. In the **Additional options** box, add *`/feature:APX`*. Choose **OK** to save your changes.
+
+### To set this compiler option programmatically
+
+- See .
+
+## See also
+
+[`/arch` (x64)](arch-x64.md)\
+[`/arch` (Minimum CPU architecture)](arch-minimum-cpu-architecture.md)\
+[MSVC compiler options](compiler-options.md)\
+[MSVC compiler command-line syntax](compiler-command-line-syntax.md)
diff --git a/docs/build/reference/fsanitize.md b/docs/build/reference/fsanitize.md
index e1eef40728d..56a37b801fc 100644
--- a/docs/build/reference/fsanitize.md
+++ b/docs/build/reference/fsanitize.md
@@ -29,7 +29,9 @@ The **`/fsanitize=fuzzer`** compiler option enables experimental support for [Li
The **`/fsanitize`** option doesn't allow comma-separated syntax, for example: **`/fsanitize=address,fuzzer`**. These options must be specified individually.
-The **`/fsanitize-address-use-after-return`**, **`/fno-sanitize-address-vcasan-lib`**, **`/fsanitize-address-asan-compat-lib`**, and **`/fno-sanitize-address-asan-compat-lib`** compiler options, and the [`/INFERASANLIBS` (Use inferred sanitizer libs)](./inferasanlibs.md) and **`/INFERASANLIBS:NO`** linker options offer support for advanced users. For more information, see [AddressSanitizer build and language reference](../../sanitizers/asan-building.md).
+The **`/fsanitize-address-use-after-return`** compiler option enables experimental support for detecting memory safety issues arising from using a variable that has left scope. This requires that the ASan runtime option `ASAN_OPTIONS=detect_stack_use_after_return=1` is also set and incurs an additional performance penalty. For more information, see [Error: stack-use-after-return](../../sanitizers/error-stack-use-after-return.md).
+
+The **`/fno-sanitize-address-vcasan-lib`**, **`/fsanitize-address-asan-compat-lib`**, and **`/fno-sanitize-address-asan-compat-lib`** compiler options, and the [`/INFERASANLIBS` (Use inferred sanitizer libs)](./inferasanlibs.md) and **`/INFERASANLIBS:NO`** linker options offer support for advanced users. For more information, see [AddressSanitizer build and language reference](../../sanitizers/asan-building.md).
### To set the **`/fsanitize=address`** compiler option in the Visual Studio development environment
diff --git a/docs/build/reference/gm-enable-minimal-rebuild.md b/docs/build/reference/gm-enable-minimal-rebuild.md
index f0ec29080de..392220656af 100644
--- a/docs/build/reference/gm-enable-minimal-rebuild.md
+++ b/docs/build/reference/gm-enable-minimal-rebuild.md
@@ -1,14 +1,13 @@
---
description: "Learn more about: /Gm (Enable Minimal Rebuild)"
title: "/Gm (Enable Minimal Rebuild)"
-ms.date: "11/12/2018"
+ms.date: 04/14/2026
f1_keywords: ["VC.Project.VCCLCompilerTool.MinimalRebuild", "/Gm", "VC.Project.VCCLWCECompilerTool.MinimalRebuild"]
helpviewer_keywords: ["/Gm compiler option [C++]", "minimal rebuild", "enable minimal rebuild compiler option [C++]", "Gm compiler option [C++]", "-Gm compiler option [C++]"]
-ms.assetid: d8869ce0-d2ea-40eb-8dae-6d2cdb61dd59
---
# /Gm (Enable Minimal Rebuild)
-Deprecated. Enables minimal rebuild, which determines whether C++ source files that include changed C++ class definitions (stored in header (.h) files) need to be recompiled.
+Deprecated in Visual Studio 2019 version 16.0. Enables minimal rebuild, which determines whether C++ source files that include changed C++ class definitions (stored in header (.h) files) need to be recompiled.
## Syntax
@@ -18,7 +17,7 @@ Deprecated. Enables minimal rebuild, which determines whether C++ source files t
## Remarks
-**/Gm** is deprecated. It may not trigger a build for certain kinds of header file changes. You may safely remove this option from your projects. To improve build times, we recommend you use precompiled headers and incremental and parallel build options instead. For a list of deprecated compiler options, see the **Deprecated and Removed Compiler Options** section in [Compiler Options Listed by Category](compiler-options-listed-by-category.md).
+**/Gm** is deprecated as of Visual Studio 2019 version 16.0. Using it produces compiler warning D9035. It may not trigger a build for certain kinds of header file changes. You may safely remove this option from your projects. To improve build times, we recommend you use precompiled headers and incremental and parallel build options instead. For a list of deprecated compiler options, see the **Deprecated and Removed Compiler Options** section in [Compiler Options Listed by Category](compiler-options-listed-by-category.md).
The compiler stores dependency information between source files and class definitions in the project's .idb file during the first compile. (Dependency information tells which source file is dependent on which class definition, and which .h file the definition is located in.) Subsequent compiles use the information stored in the .idb file to determine whether a source file needs to be compiled, even if it includes a modified .h file.
@@ -30,9 +29,7 @@ Because the incremental linker does not support the Windows metadata included in
### To set this compiler option in the Visual Studio development environment
1. Open the project's **Property Pages** dialog box. For details, see [Set C++ compiler and build properties in Visual Studio](../working-with-project-properties.md).
-
1. Select the **Configuration Properties** > **C/C++** > **Code Generation** property page.
-
1. Modify the **Enable Minimal Rebuild** property.
### To set this compiler option programmatically
@@ -41,5 +38,5 @@ Because the incremental linker does not support the Windows metadata included in
## See also
-[MSVC Compiler Options](compiler-options.md)
+[MSVC Compiler Options](compiler-options.md)\
[MSVC Compiler Command-Line Syntax](compiler-command-line-syntax.md)
diff --git a/docs/build/reference/integritycheck-require-signature-check.md b/docs/build/reference/integritycheck-require-signature-check.md
index 2e154fe9607..0820e55c26c 100644
--- a/docs/build/reference/integritycheck-require-signature-check.md
+++ b/docs/build/reference/integritycheck-require-signature-check.md
@@ -17,7 +17,7 @@ The **`/INTEGRITYCHECK`** linker option sets a flag, `IMAGE_DLLCHARACTERISTICS_F
### Signing `/INTEGRITYCHECK` files
-Microsoft has new signing guidance for DLL and executable files linked by using **`/INTEGRITYCHECK`**. The guidance used to recommend a cross-signed certificate from the [cross-signing program](/windows-hardware/drivers/install/cross-certificates-for-kernel-mode-code-signing). However, the [cross-signing program is now deprecated](/windows-hardware/drivers/install/deprecation-of-software-publisher-certificates-and-commercial-release-certificates). You must now sign your **`/INTEGRITYCHECK`** files by using the Microsoft [Trusted Signing service](/azure/trusted-signing/) program instead.
+Microsoft has new signing guidance for DLL and executable files linked by using **`/INTEGRITYCHECK`**. The guidance used to recommend a cross-signed certificate from the [cross-signing program](/windows-hardware/drivers/install/cross-certificates-for-kernel-mode-code-signing). However, the [cross-signing program is now deprecated](/windows-hardware/drivers/install/deprecation-of-software-publisher-certificates-and-commercial-release-certificates). You must now sign your **`/INTEGRITYCHECK`** files by using the [Azure Artifact Signing service](https://azure.microsoft.com/products/artifact-signing) program instead.
### To set this linker option in Visual Studio
diff --git a/docs/build/reference/internal-partition.md b/docs/build/reference/internal-partition.md
index 393c44956ac..9a91b9ebb7b 100644
--- a/docs/build/reference/internal-partition.md
+++ b/docs/build/reference/internal-partition.md
@@ -1,7 +1,7 @@
---
title: "/internalPartition"
description: "Use the /internalPartition compiler option to treat the input file as an internal partition unit."
-ms.date: 11/16/2022
+ms.date: 6/3/2026
author: "tylermsft"
ms.author: "twhitney"
f1_keywords: ["/internalPartition", "VC.Project.VCCLCompilerTool.Interface"]
@@ -52,7 +52,7 @@ This option can't be used with the [`/interface`](interface.md) compiler option.
### To set this compiler option in the Visual Studio development environment
-You normally shouldn't set this option in the Visual Studio development environment unless you use a different extension for your partition files. By default, the build system applies this option to files that have a *`.ixx`** extension.
+You normally shouldn't set this option in the Visual Studio development environment unless you use a different extension for your partition files. By default, the build system applies this option to files that have a *`.ixx`* extension.
1. To apply the **`/internalPartition`** option to a file explicitly in the IDE, select the file in **Solution Explorer**. Right-click to open the context menu and select **Properties** to open the Property Pages dialog.
@@ -66,4 +66,4 @@ You normally shouldn't set this option in the Visual Studio development environm
[Overview of modules in C++](../../cpp/modules-cpp.md)\
[Using C++ Modules in MSVC from the Command Line](https://devblogs.microsoft.com/cppblog/using-cpp-modules-in-msvc-from-the-command-line-part-1/)\
-[C++ Modules conformance improvements with MSVC in Visual Studio 2019 16.5](https://devblogs.microsoft.com/cppblog/c-modules-conformance-improvements-with-msvc-in-visual-studio-2019-16-5/#module-partitions)
\ No newline at end of file
+[C++ Modules conformance improvements with MSVC in Visual Studio 2019 16.5](https://devblogs.microsoft.com/cppblog/c-modules-conformance-improvements-with-msvc-in-visual-studio-2019-16-5/#module-partitions)
diff --git a/docs/build/reference/linker-options.md b/docs/build/reference/linker-options.md
index 5749d0c2364..a647917101a 100644
--- a/docs/build/reference/linker-options.md
+++ b/docs/build/reference/linker-options.md
@@ -7,7 +7,7 @@ helpviewer_keywords: ["linker [C++]", "linker [C++], options listed", "libraries
---
# Linker options
-LINK.exe links Common Object File Format (COFF) object files and libraries to create an executable (EXE) file or a dynamic-link library (DLL).
+`LINK.exe` links Common Object File Format (COFF) object files and libraries to create an executable (EXE) file or a dynamic-link library (DLL).
The following table lists options for `LINK.exe`. For more information about LINK, see:
@@ -16,9 +16,9 @@ The following table lists options for `LINK.exe`. For more information about LIN
- [LINK output](link-output.md)
- [Reserved words](reserved-words.md)
-Linker options aren't case-sensitive; for example, `/base` and `/BASE` mean the same thing. For details on how to specify each option on the command line or in Visual Studio, see the documentation for that option.
+Linker options aren't case-sensitive. For example, `/base` and `/BASE` mean the same thing. For details on how to specify each option on the command line or in Visual Studio, see the documentation for that option.
-You can use the [`comment`](../../preprocessor/comment-c-cpp.md) pragma to specify some linker options.
+Use the [`comment`](../../preprocessor/comment-c-cpp.md) pragma to specify some linker options.
## Linker options listed alphabetically
@@ -112,6 +112,10 @@ You can use the [`comment`](../../preprocessor/comment-c-cpp.md) pragma to speci
| [`/SAFESEH`](safeseh-image-has-safe-exception-handlers.md) | Specifies that the image will contain a table of safe exception handlers. |
| [`/SECTION`](section-specify-section-attributes.md) | Overrides the attributes of a section. |
| [`/SOURCELINK`](sourcelink.md) | Specifies a SourceLink file to add to the PDB. |
+| [`/SPD`](spd-specify-sample-profile-database.md) | Specifies the name and location of the *`.spd`* file for Sample Profile-Guided Optimization. |
+| [`/SPDEMBED`](spdembed-embed-sample-profile-database.md) | Embeds the Sample Profile Database into the PDB file during a Sample Profile-Guided Optimization (SPGO) build. |
+| [`/SPDIN`](spdin-use-sample-profile-database.md) | Specifies a *`.spd`* file containing profiling data for an optimized Sample Profile-Guided Optimization (SPGO) build. |
+| [`/SPGO`](spgo-enable-sample-profile-guided-optimization.md) | Enables Sample Profile-Guided Optimization and creates an empty *`.spd`* file. |
| [`/STACK`](stack-stack-allocations.md) | Sets the size of the stack in bytes. |
| [`/STUB`](stub-ms-dos-stub-file-name.md) | Attaches an MS-DOS stub program to a Win32 program. |
| [`/SUBSYSTEM`](subsystem-specify-subsystem.md) | Tells the operating system how to run the *`.exe`* file. |
diff --git a/docs/build/reference/linker-property-pages.md b/docs/build/reference/linker-property-pages.md
index 27a8a52d11c..316eb3ed75d 100644
--- a/docs/build/reference/linker-property-pages.md
+++ b/docs/build/reference/linker-property-pages.md
@@ -37,6 +37,10 @@ The [`/VERSION`](version-version-information.md) option tells the linker to put
Enables incremental linking. ([`/INCREMENTAL, /INCREMENTAL:NO`](incremental-link-incrementally.md))
+### Incremental Link Database File
+
+Specifies incremental link database file location. ([`/ILK:[name]`](ilk-name-incremental-database-file.md))
+
### Suppress Startup Banner
The [`/NOLOGO`](nologo-suppress-startup-banner-linker.md) option prevents display of the copyright message and version number.
@@ -223,6 +227,10 @@ The [`/MAPINFO`](mapinfo-include-information-in-mapfile.md) option tells the lin
[`/ASSEMBLYDEBUG`](assemblydebug-add-debuggableattribute.md) emits the `DebuggableAttribute` attribute with debug information tracking and disables JIT optimizations.
+### Support C++ Dynamic Debugging
+
+(Preview) Set linker flag [`/DYNAMICDEOPT`](dynamic-deopt-linker.md) to turn on [C++ Dynamic Debugging](/visualstudio/debugger/cpp-dynamic-debugging). Place deoptimized breakpoints and step in anywhere with on-demand function deoptimization. Use this mode for debugging optimized code.
+
## System Property Page
### SubSystem
@@ -319,6 +327,10 @@ Specifies link-time code generation. ([`/LTCG`](ltcg-link-time-code-generation.m
- **Profile Guided Optimization - Optimization** - Specifies that the linker should use the profile data created after running the instrumented binary to create an optimized image.
- **Profile Guided Optimization - Update** - Allows and tracks list of input files to be added or modified from what was specified in the `:PGINSTRUMENT` phase.
+### Link Time Code Generation Object File
+
+Specifies *`.iobj`* file location. ([`/LTCGOUT:[name]`](ltcgout.md))
+
## Embedded IDL Property Page
### MIDL Commands
@@ -504,6 +516,10 @@ The [`/ALIGN`](align-section-alignment.md) option specifies the alignment of eac
- **Disabled** - Disable **`/CLRSupportLastError`**.
- **System DLLs Only** - Enable **`/CLRSupportLastError`** for system DLLs only.
+### CET Shadow Stack Compatible
+
+Specifies whether to mark an executable image as compatible with Control-flow Enforcement Technology (CET) Shadow Stack. ([`/CETCOMPAT`](cetcompat.md))
+
### Image Has Safe Exception Handlers
When [`/SAFESEH`](safeseh-image-has-safe-exception-handlers.md) is specified, the linker will only produce an image if it can also produce a table of the image's safe exception handlers. This table specifies for the operating system which exception handlers are valid for the image.
diff --git a/docs/build/reference/manifest-tool-property-pages.md b/docs/build/reference/manifest-tool-property-pages.md
index cdf705d3d85..fc70cc16669 100644
--- a/docs/build/reference/manifest-tool-property-pages.md
+++ b/docs/build/reference/manifest-tool-property-pages.md
@@ -22,6 +22,7 @@ f1_keywords:
- VC.Project.VCManifestTool.ReplacementsFile
- VC.Project.VCManifestTool.UpdateFileHashes
- VC.Project.VCManifestTool.UpdateFileHashesSearchPath
+ - VC.Project.VCManifestTool.EnableSegmentHeap
---
# Manifest Tool Property Pages
@@ -97,6 +98,10 @@ Specifies whether the application is DPI-aware. By default, the setting is **Yes
- **High DPI Aware**
- **Per Monitor High DPI Aware**
+### Segment Heap
+
+Specifies whether the application utilizes the Segment Heap. When enabled, applications benefit from improved memory efficiency, reduced fragmentation, and enhanced memory security. For new C++ projects, the setting is **Yes** by default.
+
## Isolated COM Property Page
For more information about isolated COM, see [Isolated applications](/windows/win32/SbsCs/isolated-applications) and [How to: Build isolated applications to consume COM components](../how-to-build-isolated-applications-to-consume-com-components.md).
diff --git a/docs/build/reference/media/create-project.png b/docs/build/reference/media/create-project.png
new file mode 100644
index 00000000000..e3398e80f7d
Binary files /dev/null and b/docs/build/reference/media/create-project.png differ
diff --git a/docs/build/reference/media/file-new-project.png b/docs/build/reference/media/file-new-project.png
new file mode 100644
index 00000000000..d42284e46a5
Binary files /dev/null and b/docs/build/reference/media/file-new-project.png differ
diff --git a/docs/build/reference/spd-specify-sample-profile-database.md b/docs/build/reference/spd-specify-sample-profile-database.md
new file mode 100644
index 00000000000..f6afb2d2407
--- /dev/null
+++ b/docs/build/reference/spd-specify-sample-profile-database.md
@@ -0,0 +1,46 @@
+---
+title: "/SPD (Specify Sample Profile Database)"
+description: "Learn more about: /SPD (Specify Sample Profile Database)"
+ms.date: 05/05/2026
+ai-usage: ai-assisted
+helpviewer_keywords: ["/SPD linker option", "-SPD linker option", "sample profile-guided optimization, /SPD"]
+---
+# /SPD (Specify Sample Profile Database)
+
+Specifies the name and location of the Sample Profile Database (SPD) file used by the Sample Profile-Guided Optimization (SPGO) workflow.
+
+## Syntax
+
+> **/SPD:**_filename_
+
+## Argument
+
+`filename`\
+Specifies the name of the `.spd` file. When expanded, the fully qualified path must not exceed `MAX_PATH` (260 characters).
+
+## Remarks
+
+When you build with [`/SPGO`](spgo-enable-sample-profile-guided-optimization.md), the linker creates an empty SPD file alongside the output binary. By default, the SPD file uses the same base name as the output file and is created in the directory where you invoked the link. Use `/SPD` to specify a different name or path.
+
+When linking with [`/SPDIN`](spdin-use-sample-profile-database.md), use `/SPDIN` to specify the input SPD file and `/SPD` to specify the output SPD file.
+
+For more information about the SPGO workflow, see [Tutorial: Use Sample Profile-Guided Optimization (SPGO) to improve performance](../sample-profile-guided-optimization.md).
+
+### To set this linker option in the Visual Studio development environment
+
+1. Open the project's **Property Pages** dialog box. For details, see [Set C++ compiler and build properties in Visual Studio](../working-with-project-properties.md).
+1. Select the **Configuration Properties** > **Linker** > **Command Line** property page.
+1. Add `/SPD:filename` to the **Additional Options** box. Choose **OK** to save your changes.
+
+### To set this linker option programmatically
+
+- See .
+
+## See also
+
+[MSVC linker reference](linking.md)\
+[MSVC Linker Options](linker-options.md)\
+[/SPDEMBED (Embed Sample Profile Database)](spdembed-embed-sample-profile-database.md)\
+[/SPDIN (Use Sample Profile Database)](spdin-use-sample-profile-database.md)\
+[/SPGO (Enable Sample Profile-Guided Optimization)](spgo-enable-sample-profile-guided-optimization.md)\
+[Tutorial: Use Sample Profile-Guided Optimization (SPGO) to improve performance](../sample-profile-guided-optimization.md)
\ No newline at end of file
diff --git a/docs/build/reference/spdembed-embed-sample-profile-database.md b/docs/build/reference/spdembed-embed-sample-profile-database.md
new file mode 100644
index 00000000000..db91e8359f1
--- /dev/null
+++ b/docs/build/reference/spdembed-embed-sample-profile-database.md
@@ -0,0 +1,41 @@
+---
+title: "/SPDEMBED (Embed Sample Profile Database)"
+description: "Learn more about: /SPDEMBED (Embed Sample Profile Database)"
+ms.date: 05/05/2026
+ai-usage: ai-assisted
+helpviewer_keywords: ["/SPDEMBED linker option", "-SPDEMBED linker option", "sample profile-guided optimization, /SPDEMBED"]
+---
+# /SPDEMBED (Embed Sample Profile Database)
+
+Embeds the Sample Profile Database (SPD) data into the Program Database (PDB) file during a Sample Profile-Guided Optimization (SPGO) build.
+
+## Syntax
+
+> **/SPDEMBED**
+
+## Remarks
+
+When you build with [`/SPDIN`](spdin-use-sample-profile-database.md), the linker uses the profile data in the SPD file to make optimization decisions. Use `/SPDEMBED` together with `/SPGO` to embed the SPD data into the PDB file produced by the build. Embedding the SPD in the PDB keeps the profile data together with the debug symbols, which simplifies distribution and archiving of build artifacts.
+
+To extract an SPD file that you embedded in a PDB, use [`SPDConvert /extract`](../spdconvert.md).
+
+For more information about the SPGO workflow, see [Tutorial: Use Sample Profile-Guided Optimization (SPGO) to improve performance](../sample-profile-guided-optimization.md).
+
+### To set this linker option in the Visual Studio development environment
+
+1. Open the project's **Property Pages** dialog box. For details, see [Set C++ compiler and build properties in Visual Studio](../working-with-project-properties.md).
+1. Select the **Configuration Properties** > **Linker** > **Command Line** property page.
+1. Add `/SPDEMBED` to the **Additional Options** box. Choose **OK** to save your changes.
+
+### To set this linker option programmatically
+
+- See .
+
+## See also
+
+[MSVC linker reference](linking.md)\
+[MSVC Linker Options](linker-options.md)\
+[/SPD (Specify Sample Profile Database)](spd-specify-sample-profile-database.md)\
+[/SPDIN (Use Sample Profile Database)](spdin-use-sample-profile-database.md)\
+[/SPGO (Enable Sample Profile-Guided Optimization)](spgo-enable-sample-profile-guided-optimization.md)\
+[Tutorial: Use Sample Profile-Guided Optimization (SPGO) to improve performance](../sample-profile-guided-optimization.md)
\ No newline at end of file
diff --git a/docs/build/reference/spdin-use-sample-profile-database.md b/docs/build/reference/spdin-use-sample-profile-database.md
new file mode 100644
index 00000000000..b8ba7989923
--- /dev/null
+++ b/docs/build/reference/spdin-use-sample-profile-database.md
@@ -0,0 +1,52 @@
+---
+title: "/SPDIN (Use Sample Profile Database)"
+description: "Learn more about linker option: /SPDIN (Use Sample Profile Database)"
+ms.date: 05/05/2026
+ai-usage: ai-assisted
+helpviewer_keywords: ["/SPDIN linker option", "-SPDIN linker option", "sample profile-guided optimization, /SPDIN"]
+---
+# /SPDIN (Use Sample Profile Database)
+
+Specifies a Sample Profile Database (SPD) file that contains profiling data for use in a Sample Profile-Guided Optimization (SPGO) build.
+Also used to override the default or file specified with `/SPD` for reading the sample profile database.
+
+## Syntax
+
+> **/SPDIN:**_filename_
+
+## Argument
+
+`filename`\
+Specifies the path to the `.spd` file that contains the profiling data to use for optimization. When expanded, the fully qualified path must not exceed `MAX_PATH` (260 characters).\
+If the file doesn't exist, the linker creates an empty file that will be used to collect data.
+
+## Remarks
+
+After collecting a performance trace by using `xperf`, converting it by using [`SPTAggregate`](../sptaggregate.md), and importing the data into an SPD file by using [`SPDConvert`](../spdconvert.md), use `/SPDIN` and [`/SPGO`](spgo-enable-sample-profile-guided-optimization.md) to produce an optimized binary.
+
+The GUID and age of the binary recorded in the SPD file must match the SPT file. If they don't match, you may see a "SPD version incompatible" error. To diagnose this error, use [`SPTDump /progid`](../sptdump.md) to inspect the binary identifiers in the SPT file, and [`SPDDump /header`](../spddump.md) to inspect the SPD file. The linker uses a valid SPD file to the extent possible. Minor updates to the code that don't alter the program's control flow are tolerated. Unchanged functions also use the data for optimization. If you provide a valid, but otherwise unrelated SPD, the process works, but likely no data is usable for optimization.
+
+Use [`/SPDEMBED`](spdembed-embed-sample-profile-database.md) together with `/SPGO` to embed the SPD data into the PDB file produced by the build.
+
+Use [`/SPD`](spd-specify-sample-profile-database.md) to specify a nondefault name or location for the SPD file. `/SPDIN` overrides this option, if specified.
+
+For more information about the SPGO workflow, see [Tutorial: Use Sample Profile-Guided Optimization (SPGO) to improve performance](../sample-profile-guided-optimization.md).
+
+### To set this linker option in the Visual Studio development environment
+
+1. Open the project's **Property Pages** dialog box. For details, see [Set C++ compiler and build properties in Visual Studio](../working-with-project-properties.md).
+1. Select the **Configuration Properties** > **Linker** > **Command Line** property page.
+1. Add `/SPDIN:filename` to the **Additional Options** box. Choose **OK** to save your changes.
+
+### To set this linker option programmatically
+
+- See .
+
+## See also
+
+[MSVC linker reference](linking.md)\
+[MSVC Linker Options](linker-options.md)\
+[/SPD (Specify Sample Profile Database)](spd-specify-sample-profile-database.md)\
+[/SPDEMBED (Embed Sample Profile Database)](spdembed-embed-sample-profile-database.md)\
+[/SPGO (Enable Sample Profile-Guided Optimization)](spgo-enable-sample-profile-guided-optimization.md)\
+[Tutorial: Use Sample Profile-Guided Optimization (SPGO) to improve performance](../sample-profile-guided-optimization.md)
\ No newline at end of file
diff --git a/docs/build/reference/spgo-enable-sample-profile-guided-optimization.md b/docs/build/reference/spgo-enable-sample-profile-guided-optimization.md
new file mode 100644
index 00000000000..e2eeaa48ed2
--- /dev/null
+++ b/docs/build/reference/spgo-enable-sample-profile-guided-optimization.md
@@ -0,0 +1,51 @@
+---
+title: "/SPGO (Enable Sample Profile-Guided Optimization)"
+description: "Learn more about: /SPGO (Enable Sample Profile-Guided Optimization)"
+ms.date: 05/05/2026
+ai-usage: ai-assisted
+helpviewer_keywords: ["/SPGO linker option", "-SPGO linker option", "sample profile-guided optimization, /SPGO"]
+---
+# /SPGO (Enable Sample Profile-Guided Optimization)
+
+Enables Sample Profile-Guided Optimization (SPGO) and creates an empty Sample Profile Database (SPD) file alongside the output binary.
+
+## Syntax
+
+> **/SPGO**
+
+## Remarks
+
+The `/SPGO` linker option starts the SPGO workflow. It directs the linker to create an empty `.spd` file that acts as a placeholder for profiling data. After building with `/SPGO`, you collect a performance trace by using `xperf`, convert it to an SPT file by using [`SPTAggregate`](../sptaggregate.md), and then import the data into the SPD file by using [`SPDConvert`](../spdconvert.md). Once the SPD file contains profile data, rebuild by using the SPD file to produce an optimized binary. The compiler and linker look for an SPD input file, either default or specified by [`/SPD`](spd-specify-sample-profile-database.md). The [/SPDIN (Use Sample Profile Database)](spdin-use-sample-profile-database.md) option is available as a convenience when the input file is over-written and that isn't desirable.
+
+When you build by using `/SPGO` but the SPD file contains no profile data yet, you see a message such as:
+
+```
+Result: SPD .spd does not contain sample profile, compiling without profile guided optimizations
+```
+
+This message is expected on the first build and indicates that the SPD file is ready to receive profiling data.
+
+By default, the build process creates the SPD file with the same base name as the output file in the directory from which the link was invoked. Use [`/SPD`](spd-specify-sample-profile-database.md) to specify a different name or location.
+
+Use [`/SPDEMBED`](spdembed-embed-sample-profile-database.md) to embed the SPD data into the PDB file after profile data is collected. Ensure that the linker is producing a PDB file by specifying the `/DEBUG` option.
+
+For more information about the SPGO workflow, see [Tutorial: Use Sample Profile-Guided Optimization (SPGO) to improve performance](../sample-profile-guided-optimization.md).
+
+### To set this linker option in the Visual Studio development environment
+
+1. Open the project's **Property Pages** dialog box. For details, see [Set C++ compiler and build properties in Visual Studio](../working-with-project-properties.md).
+1. Select the **Configuration Properties** > **Linker** > **Command Line** property page.
+1. Add `/SPGO` to the **Additional Options** box. Choose **OK** to save your changes.
+
+### To set this linker option programmatically
+
+- See .
+
+## See also
+
+[MSVC linker reference](linking.md)\
+[MSVC Linker Options](linker-options.md)\
+[/SPD (Specify Sample Profile Database)](spd-specify-sample-profile-database.md)\
+[/SPDEMBED (Embed Sample Profile Database)](spdembed-embed-sample-profile-database.md)\
+[/SPDIN (Use Sample Profile Database)](spdin-use-sample-profile-database.md)\
+[Tutorial: Use Sample Profile-Guided Optimization (SPGO) to improve performance](../sample-profile-guided-optimization.md)
\ No newline at end of file
diff --git a/docs/build/reference/volatile.md b/docs/build/reference/volatile.md
index fb3cced8479..4f133333193 100644
--- a/docs/build/reference/volatile.md
+++ b/docs/build/reference/volatile.md
@@ -1,13 +1,13 @@
---
description: "Learn more about: /volatileMetadata"
title: "/volatileMetadata (Generate metadata on volatile memory accesses)"
-ms.date: 5/30/2024
+ms.date: 04/27/2026
f1_keywords: ["/volatileMetadata"]
helpviewer_keywords: ["/volatileMetadata", "-volatileMetadata compiler option", "/volatileMetadata compiler option", "volatileMetadata"]
---
# `/volatileMetadata` (Generate metadata on volatile memory accesses)
-Generate metadata for volatile memory accesses to improve performance when running x64 code on ARM64.
+Generate metadata for volatile memory accesses to improve performance when running x64 or x86 code on ARM64.
## Syntax
@@ -15,20 +15,14 @@ Generate metadata for volatile memory accesses to improve performance when runni
/volatileMetadata[-]
```
-## Arguments
-
-**`-`**\
-Turns off `/volatileMetadata`. This may result in worse performance when your code runs in emulation mode on ARM64 because the emulator pessimistically assumes that every load/store needs a barrier.
-
## Remarks
-Starting with Visual Studio 2019 16.10, `/volatileMetadata` is on by default when generating x64 code. It improves the emulation performance of x64 code on ARM64 by generating metadata that identifies volatile memory addresses. An emulator can use this metadata to improve performance by not using acquire/release semantics on those accesses it knows aren't volatile. Without this metadata, the emulator assumes that all addresses are volatile and uses acquire and release semantics.
+Starting with Visual Studio 2022 18.6, `/volatileMetadata` is off by default and must be explicitly enabled. To explicitly disable it, use `/volatileMetadata-`. `/volatileMetadata` improves the emulation performance of x64 and x86 code on ARM64 by generating metadata that identifies volatile memory addresses. An emulator can use this metadata to improve performance by not using acquire/release semantics on those accesses it knows aren't volatile. Without this metadata, the emulator assumes that all addresses are volatile and uses acquire and release semantics.
One side effect of `/volatileMetadata` is you may see `npad` macros used in the generated code. This macro expands to a specified number of `NOP` instructions that create an address to associate with a memory barrier. That address is then recorded in the metadata to indicate that acquire/release semantics should be used to access it.
-`/volatileMetadata` is ignored when targeting x86.
-
-`/volatileMetadata` can be disabled by using `/volatileMetadata-`.
+> [!NOTE]
+> In Visual Studio 2019 version 16.10 through Visual Studio 2022, `/volatileMetadata` was on by default. Starting with Visual Studio 2022 18.6, `/volatileMetadata` is off by default.
## Requirements
diff --git a/docs/build/reference/z7-zi-zi-debug-information-format.md b/docs/build/reference/z7-zi-zi-debug-information-format.md
index 6cc70e4d4c8..4cf63809f02 100644
--- a/docs/build/reference/z7-zi-zi-debug-information-format.md
+++ b/docs/build/reference/z7-zi-zi-debug-information-format.md
@@ -1,7 +1,7 @@
---
description: "Learn more about: /Z7, /Zi, /ZI (Debug Information Format)"
title: "/Z7, /Zi, /ZI (Debug Information Format)"
-ms.date: 12/09/2021
+ms.date: 3/26/2026
f1_keywords: ["VC.Project.VCCLCompilerTool.DebugInformationFormat", "/ZI", "/Zi", "/Z7", "VC.Project.VCCLWCECompilerTool.DebugInformationFormat"]
helpviewer_keywords: ["C7 compatible compiler option [C++]", "Debug Information Format compiler option", "ZI compiler option", "-Zi compiler option [C++]", "/ZI compiler option [C++]", "Z7 compiler option [C++]", "debugging [C++], debug information files", "Zi compiler option [C++]", "/Zi compiler option [C++]", "program database compiler option [C++]", "full symbolic debugging information", "/Z7 compiler option [C++]", "line numbers only compiler option [C++]", "cl.exe compiler, debugging options", "-Z7 compiler option [C++]"]
---
@@ -62,6 +62,27 @@ The **`/ZI`** option forces both the [`/Gy` (Enable Function-Level Linking)](gy-
1. Modify the **Debug Information Format** property. Choose **OK** to save your changes.
+### To set this compiler option in a project file
+
+To set the debug information format in a `.vcxproj` project file, use the `` property within a `` item definition. The following table shows the MSBuild XML values and their corresponding compiler options:
+
+| MSBuild XML value | Compiler option | Description |
+|---|---|---|
+| `None` | *(none)* | No debug information |
+| `OldStyle` | **`/Z7`** | Full symbolic debug information embedded in .obj files, no PDB |
+| `ProgramDatabase` | **`/Zi`** | Program database (PDB) |
+| `EditAndContinue` | **`/ZI`** | PDB with Edit and Continue support |
+
+For example, to set the debug information format to program database in a release configuration:
+
+```xml
+
+
+ ProgramDatabase
+
+
+```
+
### To set this compiler option programmatically
- See .
diff --git a/docs/build/reference/zc-conformance.md b/docs/build/reference/zc-conformance.md
index 7c3d4f27a88..b2d72372b20 100644
--- a/docs/build/reference/zc-conformance.md
+++ b/docs/build/reference/zc-conformance.md
@@ -16,7 +16,7 @@ You may set multiple **`/Zc`** options separated by commas in a single **`/Zc`**
## Remarks
-When Visual Studio has implemented an extension to C or C++ that is incompatible with the standard, you can use a **`/Zc`** conformance option to specify standard-conforming or Microsoft-specific behavior. For some options, the Microsoft-specific behavior is the default, to prevent large-scale breaking changes to existing code. In other cases, the default is the standard behavior, where improvements in security, performance, or compatibility outweigh the costs of breaking changes. The default setting of each conformance option may change in newer versions of Visual Studio. For more information about each conformance option, see the article for the specific option. The [`/permissive-`](permissive-standards-conformance.md) compiler option implicitly sets the conformance options that aren't set by default to their conforming settings.
+When Visual Studio implements an extension to C or C++ that's incompatible with the standard, you can use a **`/Zc`** conformance option to specify standard-conforming or Microsoft-specific behavior. For some options, the Microsoft-specific behavior is the default, to prevent large-scale breaking changes to existing code. In other cases, the default is the standard behavior, where improvements in security, performance, or compatibility outweigh the costs of breaking changes. The default setting of each conformance option may change in newer versions of Visual Studio. For more information about each conformance option, see the article for the specific option. The [`/permissive-`](permissive-standards-conformance.md) compiler option implicitly sets the conformance options that aren't set by default to their conforming settings.
Here are the **`/Zc`** compiler options:
@@ -27,10 +27,10 @@ Here are the **`/Zc`** compiler options:
| [`/Zc:alignedNew[-]`](zc-alignednew.md) | Enable C++17 over-aligned dynamic allocation. Off by default unless **`/std:c++17`** or later is specified. |
| [`/Zc:auto[-]`](zc-auto-deduce-variable-type.md) | Enforce the new Standard C++ meaning for **`auto`**. On by default. |
| [`/Zc:char8_t[-]`](zc-char8-t.md) | Enable or disable C++20 native `u8` literal support as `const char8_t`. Off by default unless **`/std:c++20`** or later is specified. |
-| [`/Zc:checkGwOdr[-]`](zc-check-gwodr.md) | Enforce Standard C++ ODR violations under `/Gw`. |
+| [`/Zc:checkGwOdr[-]`](zc-check-gwodr.md) | Enforce Standard C++ One-Definition-Rule (ODR) violations under `/Gw`. |
| [`/Zc:enumTypes[-]`](zc-enumtypes.md) | Enable Standard C++ rules for `enum` type deduction. Off by default. |
| [`/Zc:externC[-]`](zc-externc.md) | Enforce Standard C++ rules for `extern "C"` functions. Off by default unless **`/permissive-`** is specified. |
-| [`/Zc:externConstexpr[-]`](zc-externconstexpr.md) | Enable external linkage for **`constexpr`** variables. Off by default. |
+| [`/Zc:externConstexpr[-]`](zc-externconstexpr.md) | Enable external linkage for **`constexpr`** variables. Off by default unless **`/permissive-`** is specified. |
| [`/Zc:forScope[-]`](zc-forscope-force-conformance-in-for-loop-scope.md) | Enforce Standard C++ **`for`** scoping rules. On by default. |
| [`/Zc:gotoScope[-]`](zc-gotoscope.md) | Enforce Standard C++ **`goto`** rules around local variable initialization. Off by default unless **`/permissive-`** is specified. |
| [`/Zc:hiddenFriend[-]`](zc-hiddenfriend.md) | Enforce Standard C++ hidden friend rules. Off by default unless **`/permissive-`** is specified. |
@@ -40,7 +40,7 @@ Here are the **`/Zc`** compiler options:
| [`/Zc:noexceptTypes[-]`](zc-noexcepttypes.md) | Enforce C++17 **`noexcept`** rules. Off by default unless **`/std:c++17`** or later is specified. |
| [`/Zc:nrvo[-]`](zc-nrvo.md) | Enable optional copy and move elisions. Off by default unless **`/O2`**, **`/permissive-`**, or **`/std:c++20`** or later is specified. |
| [`/Zc:preprocessor[-]`](zc-preprocessor.md) | Use the new conforming preprocessor. Off by default unless **`/std:c11`** or later is specified. |
-| [`/Zc:referenceBinding[-]`](zc-referencebinding-enforce-reference-binding-rules.md) | A UDT temporary won't bind to a nonconst lvalue reference. Off by default unless **`/permissive-`** is specified. |
+| [`/Zc:referenceBinding[-]`](zc-referencebinding-enforce-reference-binding-rules.md) | A temporary value of a user-defined type dosen't bind to a nonconst lvalue reference. Off by default unless **`/permissive-`** is specified. |
| [`/Zc:rvalueCast[-]`](zc-rvaluecast-enforce-type-conversion-rules.md) | Enforce Standard C++ explicit type conversion rules. Off by default unless **`/permissive-`** is specified. |
| [`/Zc:sizedDealloc[-]`](zc-sizeddealloc-enable-global-sized-dealloc-functions.md) | Enable C++14 global sized deallocation functions. On by default. |
| [`/Zc:strictStrings[-]`](zc-strictstrings-disable-string-literal-type-conversion.md) | Disable string-literal to `char*` or `wchar_t*` conversion. Off by default unless **`/permissive-`** is specified. |
@@ -52,8 +52,9 @@ Here are the **`/Zc`** compiler options:
| [`/Zc:tlsGuards[-]`](zc-tlsguards.md) | Generate runtime checks for TLS variable initialization. On by default. |
| [`/Zc:trigraphs[-]`](zc-trigraphs-trigraphs-substitution.md) | Enable trigraphs (obsolete, off by default). |
| [`/Zc:twoPhase-`](zc-twophase.md) | Use nonconforming template parsing behavior (only applicable when **`/permissive-`** is specified, which defaults to conforming). |
+| [`/Zc:u8EscapeEncoding[-]`](zc-u8escapeencoding.md) | Encode integer escape sequences in u8 string literals as-is instead of as utf-8 characters. Off by default. |
| [`/Zc:wchar_t[-]`](zc-wchar-t-wchar-t-is-native-type.md) | **`wchar_t`** is a native type, not a typedef. On by default. |
-| [`/Zc:zeroSizeArrayNew[-]`](zc-zerosizearraynew.md) | Call member `new`/`delete` for 0-size arrays of objects. On by default. |
+| [`/Zc:zeroSizeArrayNew[-]`](zc-zerosizearraynew.md) | Call member `new`/`delete` for `0`-size arrays of objects. On by default. |
For more information about conformance issues in MSVC, see [Nonstandard behavior](../../cpp/nonstandard-behavior.md).
diff --git a/docs/build/reference/zc-u8escapeencoding.md b/docs/build/reference/zc-u8escapeencoding.md
new file mode 100644
index 00000000000..361f7210eea
--- /dev/null
+++ b/docs/build/reference/zc-u8escapeencoding.md
@@ -0,0 +1,53 @@
+---
+title: /Zc:u8EscapeEncoding (numeric escape sequence encoding in u8 strings)
+description: "Learn more about the compiler option /Zc:u8EscapeEncoding (numeric escape sequence encoding in u8 strings)"
+author: Rastaban
+ms.author: philc
+ms.service: visual-cpp
+ms.topic: article
+ms.date: 06/01/2026
+ms.subservice: cpp-lang
+---
+# `/Zc:u8EscapeEncoding` (numeric escape sequence encoding in u8 strings)
+
+Keep the value of numeric escape sequences in `u8` string literals without encoding them as utf-8.
+
+Use this switch to increase cross compatibility or when a non-utf-8 character is embedded in an utf-8 string literal.
+
+## Syntax
+
+> **/Zc:u8EscapeEncoding**[**-**]
+
+## Remarks
+
+In C++, `u8` string literals are utf-8 encoded sequences of `char8_t`. This flag changes the way numeric escape sequences are interpreted in `u8` string literals. The behavior under `/Zc:u8EscapeEncoding` is to encode them in the string as a single 8-bit `char8_t` value. The behavior under `/Zc:u8EscapeEncoding-` is to interpret the value as a unicode code point. When the value is a higher code point in Unicode, it's encoded as a multibyte character. The behavior of universal-character sequences is always to encode them as utf-8 independent of `/Zc:u8EscapeEncoding[-]`.
+
+The following example contains both a hex escape sequence \\__x__ and a universal escape sequence \\__u__. `/Zc:u8EscapeEncoding[-]` affects the encoding of the hex escape sequence, but the universal escape sequence is always encoded as utf-8. The example string also includes the space character, which is encoded as `0x20` in utf-8.
+
+```cpp
+#include
+int main()
+{
+ const char8_t str[] = u8" \x00ff \u00ff ";
+ for(char8_t c : str) {
+ printf("0x%X ", c);
+ }
+ return 0;
+}
+```
+
+Under `/Zc:u8EscapeEncoding`, the escape sequence `\x00ff` is encoded as `0xFF` and the universal-character sequence `\u00ff` is encoded as the utf-8 sequence `0xC3 0xBF`. The code example outputs:
+
+```output
+0x20 0xFF 0x20 0xC3 0xBF 0x20 0x0
+```
+
+Under `/Zc:u8EscapeEncoding-`, the values of both `\x00ff` and `\u00ff` are re-encoded as the utf-8 sequence `0xC3 0xBF`. The code example outputs:
+
+```output
+0x20 0xC3 0xBF 0x20 0xC3 0xBF 0x20 0x0
+```
+
+## See also
+
+[/Zc (Conformance)](zc-conformance.md)
diff --git a/docs/build/reference/zf.md b/docs/build/reference/zf.md
index d15547b2e8c..cb7b1c17ec3 100644
--- a/docs/build/reference/zf.md
+++ b/docs/build/reference/zf.md
@@ -19,7 +19,7 @@ The **/Zf** option enables compiler support for faster generation of PDB files w
Because the **/Zf** option only applies to PDB generation, it requires the [/Zi](z7-zi-zi-debug-information-format.md) or [/ZI](z7-zi-zi-debug-information-format.md) option.
-The **/Zf** option is available beginning in Visual Studio 2017 version 15.1, where it is off by default. Starting in Visual Studio 2017 version 15.7, this option is on by default when the **/Zi** or **/ZI** option is enabled.
+The **/Zf** option is available beginning in Visual Studio 2017 version 15.1, where it is off by default. Starting in Visual Studio 2017 version 15.7, this option is on by default when the **/Zi** or **/ZI** option is enabled. To explicitly disable this option, use **/Zf-**.
### To set this compiler option in the Visual Studio development environment
diff --git a/docs/build/reference/zh.md b/docs/build/reference/zh.md
index 3cefaf8e712..3cfa06349a0 100644
--- a/docs/build/reference/zh.md
+++ b/docs/build/reference/zh.md
@@ -1,20 +1,37 @@
---
title: "/ZH (Hash algorithm for calculation of file checksum in debug info)"
-description: "Use the /ZH compiler option to enable MD5, SHA-1, or SHA-256 source file checksums in debug info"
-ms.date: 02/01/2022
-f1_keywords: ["/ZH", "/ZH:MD5", "/ZH:SHA1", "/ZH:SHA_256"]
-helpviewer_keywords: ["/ZH", "/ZH:MD5", "/ZH:SHA1", "/ZH:SHA_256", "/ZH compiler option", "/ZH:MD5 compiler option", "/ZH:SHA1 compiler option", "/ZH:SHA_256 compiler option", "Hash algorithm for file checksum in debug info"]
+description: "Use the /ZH compiler option to enable source file checksums in debug info"
+ms.date: 05/25/2026
+f1_keywords: ["/ZH", "/ZH:MD5", "/ZH:SHA1", "/ZH:SHA_256", "/ZH:SHA384", "/ZH:SHA512"]
+helpviewer_keywords: ["/ZH", "/ZH:MD5", "/ZH:SHA1", "/ZH:SHA_256", "/ZH:SHA384", "/ZH:SHA512", "/ZH compiler option", "/ZH:MD5 compiler option", "/ZH:SHA1 compiler option", "/ZH:SHA_256 compiler option", "/ZH:SHA384 compiler option", "/ZH:SHA512 compiler option", "Hash algorithm for file checksum in debug info"]
---
# `/ZH` (Hash algorithm for calculation of file checksum in debug info)
Specifies which cryptographic hash algorithm to use to generate a checksum of each source file.
+> [!NOTE]
+> The **`/ZH`** option is available in Visual Studio 2019 version 16.4 and later.
+
## Syntax
+::: moniker range="<=msvc-170"
+
> **`/ZH:MD5`**\
> **`/ZH:SHA1`**\
> **`/ZH:SHA_256`**
+::: moniker-end
+
+::: moniker range=">=msvc-180"
+
+> **`/ZH:MD5`**\
+> **`/ZH:SHA1`**\
+> **`/ZH:SHA_256`**\
+> **`/ZH:SHA384`**\
+> **`/ZH:SHA512`**
+
+::: moniker-end
+
## Arguments
**`/ZH:MD5`**\
@@ -26,15 +43,36 @@ Use an SHA-1 hash for the checksum.
**`/ZH:SHA_256`**\
Use an SHA-256 hash for the checksum. This option is the default in Visual Studio 2022 version 17.0 and later.
+::: moniker range=">=msvc-180"
+
+**`/ZH:SHA384`**\
+Use an SHA-384 hash for the checksum.
+
+**`/ZH:SHA512`**\
+Use an SHA-512 hash for the checksum.
+
+::: moniker-end
+
## Remarks
-PDB files store a checksum for each source file, compiled into the object code in the associated executable. The checksum allows the debugger to verify that the source code it loads matches the executable. The compiler and debugger support MD5, SHA-1, and SHA-256 hash algorithms. By default, in Visual Studio 2019 the compiler uses an MD5 hash to generate the checksum. To specify this hash algorithm explicitly, use the **`/ZH:MD5`** option.
+::: moniker range="<=msvc-170"
-Because of a risk of collision problems in MD5 and SHA-1, Microsoft recommends you use the **`/ZH:SHA_256`** option. The SHA-256 hash might result in a small increase in compile times. The **`/ZH:SHA_256`** option is the default in Visual Studio 2022 version 17.0 and later.
+PDB files store a checksum for each source file, compiled into the object code in the associated executable. The checksum allows the debugger to verify that the source code it loads matches the executable. The compiler and debugger support MD5, SHA-1, and SHA-256 hash algorithms.
+Because of a risk of collision problems in MD5 and SHA-1, use the **`/ZH:SHA_256`** option or stronger.
-When more than one **`/ZH`** option is specified, the last option is used.
+::: moniker-end
+
+::: moniker range=">=msvc-180"
+
+PDB files store a checksum for each source file, compiled into the object code in the associated executable. The checksum allows the debugger to verify that the source code it loads matches the executable. The compiler and debugger support MD5, SHA-1, SHA-256, SHA-384, and SHA-512 hash algorithms.
+Because of a risk of collision problems in MD5 and SHA-1, use the **`/ZH:SHA_256`** option or a stronger algorithm. SHA-384 and SHA-512 provide stronger checksums, but they can increase compile time.
-The **`/ZH`** option is available in Visual Studio 2019 version 16.4 and later.
+> [!NOTE]
+> The **`/ZH:SHA384`** and **`/ZH:SHA512`** options aren't supported for IFC (module interface) files. If you compile modules with one of these options, the compiler emits [fatal error C1029](../../error-messages/compiler-errors-1/fatal-error-c1029.md). Use **`/ZH:SHA_256`** or a smaller hash algorithm when you compile C++ modules.
+
+::: moniker-end
+
+When more than one **`/ZH`** option is specified, the last option is used.
### To set this compiler option in the Visual Studio development environment
@@ -44,9 +82,20 @@ The **`/ZH`** option is available in Visual Studio 2019 version 16.4 and later.
1. Select the **Configuration Properties** > **C/C++** > **Command Line** property page.
+::: moniker range=">=msvc-180"
+
+1. Modify the **Additional options** property to add a **`/ZH:MD5`**, **`/ZH:SHA1`**, **`/ZH:SHA_256`**, **`/ZH:SHA384`**, or **`/ZH:SHA512`** option, and then choose **OK**.
+
+::: moniker-end
+
+::: moniker range=">=msvc-160 <=msvc-170"
+
1. Modify the **Additional options** property to add a **`/ZH:MD5`**, **`/ZH:SHA1`**, or **`/ZH:SHA_256`** option, and then choose **OK**.
+::: moniker-end
+
## See also
[Compiler options](compiler-options.md)\
+[Debug Interface Access SDK - IDiaSourceFile::get_checksumType](/visualstudio/debugger/debug-interface-access/idiasourcefile-get-checksumtype)\
[Source server](/windows/win32/debug/source-server-and-source-indexing)
diff --git a/docs/build/reference/zw-windows-runtime-compilation.md b/docs/build/reference/zw-windows-runtime-compilation.md
index 6bba2c712c5..b535b3e7c78 100644
--- a/docs/build/reference/zw-windows-runtime-compilation.md
+++ b/docs/build/reference/zw-windows-runtime-compilation.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: /ZW (Windows Runtime Compilation)"
title: "/ZW (Windows Runtime Compilation)"
+description: "Learn more about: /ZW (Windows Runtime Compilation)"
ms.date: 06/22/2023
f1_keywords: ["VC.Project.VCCLCompilerTool.CompileAsWinRT", "/zw"]
helpviewer_keywords: ["/ZW", "-ZW compiler option", "/ZW compiler option", "-ZW", "Windows Runtime compiler option"]
@@ -9,19 +9,19 @@ helpviewer_keywords: ["/ZW", "-ZW compiler option", "/ZW compiler option", "-ZW"
Compiles source code to support Microsoft C++ component extensions C++/CX for the creation of Universal Windows Platform (UWP) apps.
-When you use **`/ZW`** to compile, always specify **`/EHsc`** as well.\
-**`/ZW`** isn't compatible with **`/std:c++20`**.
+When you use **`/ZW`** to compile, always specify [`/EHsc`](eh-exception-handling-model.md) as well.\
+**`/ZW`** isn't compatible with [`/std:c++20`](std-specify-language-standard-version.md) or later.
## Syntax
-```cpp
+```
/ZW /EHsc
/ZW:nostdlib /EHsc
```
## Arguments
-**`nostdlib`**\
+*`nostdlib`*\
Indicates that `Platform.winmd`, `Windows.Foundation.winmd`, and other default Windows metadata (`.winmd`) files aren't automatically included in the compilation. Instead, you must use the [`/FU` (Name Forced #using File)](fu-name-forced-hash-using-file.md) compiler option to explicitly specify Windows metadata files.
## Remarks
@@ -32,11 +32,9 @@ When you specify the **`/ZW`** option, the compiler supports these features:
- Automatic reference-counting of Windows Runtime objects, and automatic discarding of an object when its reference count goes to zero.
-Because the incremental linker doesn't support the Windows metadata included in .obj files by using the **`/ZW`** option, the deprecated [/Gm (Enable Minimal Rebuild)](gm-enable-minimal-rebuild.md) option is incompatible with **`/ZW`**.
-
-For more information, see [Visual C++ Language Reference](../../cppcx/visual-c-language-reference-c-cx.md).
+Because the incremental linker doesn't support the Windows metadata included in `.obj` files by using the **`/ZW`** option, the deprecated [`/Gm` (Enable Minimal Rebuild)](gm-enable-minimal-rebuild.md) option is incompatible with **`/ZW`**.
-## Requirements
+For more information, see [C++/CX Language Reference](../../cppcx/visual-c-language-reference-c-cx.md).
## See also
diff --git a/docs/build/run-time-library-behavior.md b/docs/build/run-time-library-behavior.md
index ad23da72e29..1b755df2623 100644
--- a/docs/build/run-time-library-behavior.md
+++ b/docs/build/run-time-library-behavior.md
@@ -1,31 +1,30 @@
---
-description: "Learn more about: DLLs and Microsoft C++ run-time library behavior"
-title: "DLLs and Visual C++ run-time library behavior"
-ms.date: "08/19/2019"
+description: "Learn more about: DLLs and Microsoft C++ runtime library behavior"
+title: "DLLs and Visual C++ runtime library behavior"
+ms.date: 02/23/2026
f1_keywords: ["_DllMainCRTStartup", "CRT_INIT"]
helpviewer_keywords: ["DLLs [C++], entry point function", "process detach [C++]", "process attach [C++]", "DLLs [C++], run-time library behavior", "DllMain function", "_CRT_INIT macro", "_DllMainCRTStartup method", "run-time [C++], DLL startup sequence", "DLLs [C++], startup sequence"]
-ms.assetid: e06f24ab-6ca5-44ef-9857-aed0c6f049f2
---
-# DLLs and Visual C++ run-time library behavior
+# DLLs and Visual C++ runtime library behavior
-When you build a Dynamic-link Library (DLL) by using Visual Studio, by default, the linker includes the Visual C++ run-time library (VCRuntime). The VCRuntime contains code required to initialize and terminate a C/C++ executable. When linked into a DLL, the VCRuntime code provides an internal DLL entry-point function called `_DllMainCRTStartup` that handles Windows OS messages to the DLL to attach to or detach from a process or thread. The `_DllMainCRTStartup` function performs essential tasks such as stack buffer security set up, C run-time library (CRT) initialization and termination, and calls to constructors and destructors for static and global objects. `_DllMainCRTStartup` also calls hook functions for other libraries such as WinRT, MFC, and ATL to perform their own initialization and termination. Without this initialization, the CRT and other libraries, as well as your static variables, would be left in an uninitialized state. The same VCRuntime internal initialization and termination routines are called whether your DLL uses a statically linked CRT or a dynamically linked CRT DLL.
+When you build a Dynamic-link Library (DLL) using Visual Studio, by default, the linker includes the Visual C++ runtime library (VCRuntime). The VCRuntime contains code required to initialize and terminate a C/C++ executable. When linked into a DLL, the VCRuntime code provides an internal DLL entry-point function called `_DllMainCRTStartup` that handles Windows OS messages to the DLL to attach to or detach from a process or thread. The `_DllMainCRTStartup` function performs essential tasks such as stack buffer security setup, C runtime library (CRT) initialization and termination, and calls to constructors and destructors for static and global objects. `_DllMainCRTStartup` also calls hook functions for other libraries such as WinRT, MFC, and ATL to perform their own initialization and termination. Without this initialization, the CRT and other libraries, and your static variables, would be left in an uninitialized state. The same VCRuntime internal initialization and termination routines are called whether your DLL uses a statically linked CRT or a dynamically linked CRT DLL.
## Default DLL entry point _DllMainCRTStartup
-In Windows, all DLLs can contain an optional entry-point function, usually called `DllMain`, that is called for both initialization and termination. This gives you an opportunity to allocate or release additional resources as needed. Windows calls the entry-point function in four situations: process attach, process detach, thread attach, and thread detach. When a DLL is loaded into a process address space, either when an application that uses it is loaded, or when the application requests the DLL at runtime, the operating system creates a separate copy of the DLL data. This is called *process attach*. *Thread attach* occurs when the process the DLL is loaded in creates a new thread. *Thread detach* occurs when the thread terminates, and *process detach* is when the DLL is no longer required and is released by an application. The operating system makes a separate call to the DLL entry point for each of these events, passing a *reason* argument for each event type. For example, the OS sends `DLL_PROCESS_ATTACH` as the *reason* argument to signal process attach.
+In Windows, all DLLs can contain an optional entry-point function, usually called `DllMain`, that is called for both initialization and termination. This gives you an opportunity to allocate or release other resources as needed. Windows calls the entry-point function in four situations: process attach, process detach, thread attach, and thread detach. When a DLL is loaded into a process address space, either when an application that uses it's loaded, or when the application requests the DLL at runtime, the operating system creates a separate copy of the DLL data. This is called *process attach*. *Thread attach* occurs when the process the DLL is loaded in creates a new thread. *Thread detach* occurs when the thread terminates, and *process detach* is when the DLL is no longer required and is released by an application. The operating system makes a separate call to the DLL entry point for each of these events, passing a *reason* argument for each event type. For example, the OS sends `DLL_PROCESS_ATTACH` as the *reason* argument to signal process attach.
-The VCRuntime library provides an entry-point function called `_DllMainCRTStartup` to handle default initialization and termination operations. On process attach, the `_DllMainCRTStartup` function sets up buffer security checks, initializes the CRT and other libraries, initializes run-time type information, initializes and calls constructors for static and non-local data, initializes thread-local storage, increments an internal static counter for each attach, and then calls a user- or library-supplied `DllMain`. On process detach, the function goes through these steps in reverse. It calls `DllMain`, decrements the internal counter, calls destructors, calls CRT termination functions and registered `atexit` functions, and notifies any other libraries of termination. When the attachment counter goes to zero, the function returns `FALSE` to indicate to Windows that the DLL can be unloaded. The `_DllMainCRTStartup` function is also called during thread attach and thread detach. In these cases, the VCRuntime code does no additional initialization or termination on its own, and just calls `DllMain` to pass the message along. If `DllMain` returns `FALSE` from process attach, signaling failure, `_DllMainCRTStartup` calls `DllMain` again and passes `DLL_PROCESS_DETACH` as the *reason* argument, then goes through the rest of the termination process.
+The VCRuntime library provides an entry-point function called `_DllMainCRTStartup` to handle default initialization and termination operations. On process attach, the `_DllMainCRTStartup` function sets up buffer security checks, initializes the CRT and other libraries, initializes runtime type information, initializes and calls constructors for static and nonlocal data, initializes thread-local storage, increments an internal static counter for each attach, and then calls a user- or library-supplied `DllMain`. On process detach, the function goes through these steps in reverse. It calls `DllMain`, decrements the internal counter, calls destructors, calls CRT termination functions and registered `atexit` functions, and notifies any other libraries of termination. When the attachment counter goes to zero, the function returns `FALSE` to indicate to Windows that the DLL can be unloaded. The `_DllMainCRTStartup` function is also called during thread attach and thread detach. In these cases, the VCRuntime code does no other initialization or termination on its own, and just calls `DllMain` to pass the message along. If `DllMain` returns `FALSE` from process attach, signaling failure, `_DllMainCRTStartup` calls `DllMain` again and passes `DLL_PROCESS_DETACH` as the *reason* argument, then goes through the rest of the termination process.
-When building DLLs in Visual Studio, the default entry point `_DllMainCRTStartup` supplied by VCRuntime is linked in automatically. You do not need to specify an entry-point function for your DLL by using the [/ENTRY (Entry point symbol)](reference/entry-entry-point-symbol.md) linker option.
+When building DLLs in Visual Studio, the default entry point `_DllMainCRTStartup` supplied by VCRuntime is linked in automatically. You don't need to specify an entry-point function for your DLL by using the [`/ENTRY` (Entry point symbol)](reference/entry-entry-point-symbol.md) linker option.
> [!NOTE]
-> While it is possible to specify another entry-point function for a DLL by using the /ENTRY: linker option, we do not recommend it, because your entry-point function would have to duplicate everything that `_DllMainCRTStartup` does, in the same order. The VCRuntime provides functions that allow you to duplicate its behavior. For example, you can call [__security_init_cookie](../c-runtime-library/reference/security-init-cookie.md) immediately on process attach to support the [/GS (Buffer security check)](reference/gs-buffer-security-check.md) buffer checking option. You can call the `_CRT_INIT` function, passing the same parameters as the entry point function, to perform the rest of the DLL initialization or termination functions.
+> While it's possible to specify another entry-point function for a DLL by using the `/ENTRY`: linker option, we don't recommend it, because your entry-point function would have to duplicate everything that `_DllMainCRTStartup` does, in the same order. The VCRuntime provides functions that allow you to duplicate its behavior. For example, you can call [__security_init_cookie](../c-runtime-library/reference/security-init-cookie.md) immediately on process attach to support the [/GS (Buffer security check)](reference/gs-buffer-security-check.md) buffer checking option. You can call the `_CRT_INIT` function, passing the same parameters as the entry point function, to perform the rest of the DLL initialization or termination functions.
## Initialize a DLL
-Your DLL may have initialization code that must execute when your DLL loads. In order for you to perform your own DLL initialization and termination functions, `_DllMainCRTStartup` calls a function called `DllMain` that you can provide. Your `DllMain` must have the signature required for a DLL entry point. The default entry point function `_DllMainCRTStartup` calls `DllMain` using the same parameters passed by Windows. By default, if you do not provide a `DllMain` function, Visual Studio provides one for you and links it in so that `_DllMainCRTStartup` always has something to call. This means that if you do not need to initialize your DLL, there is nothing special you have to do when building your DLL.
+Your DLL may have initialization code that must execute when your DLL loads. In order for you to perform your own DLL initialization and termination functions, `_DllMainCRTStartup` calls a function called `DllMain` that you can provide. Your `DllMain` must have the signature required for a DLL entry point. The default entry point function `_DllMainCRTStartup` calls `DllMain` using the same parameters passed by Windows. By default, if you don't provide a `DllMain` function, Visual Studio provides one for you and links it in so that `_DllMainCRTStartup` always has something to call. This means that if you don't need to initialize your DLL, there's nothing special you have to do when building your DLL.
This is the signature used for `DllMain`:
@@ -38,10 +37,10 @@ extern "C" BOOL WINAPI DllMain (
LPVOID const reserved); // reserved
```
-Some libraries wrap the `DllMain` function for you. For example, in a regular MFC DLL, implement the `CWinApp` object's `InitInstance` and `ExitInstance` member functions to perform initialization and termination required by your DLL. For more details, see the [Initialize regular MFC DLLs](#initializing-regular-dlls) section.
+Some libraries wrap the `DllMain` function for you. For example, in a regular MFC DLL, implement the `CWinApp` object's `InitInstance` and `ExitInstance` member functions to perform initialization and termination required by your DLL. For more information, see the [Initialize regular MFC DLLs](#initializing-regular-dlls) section.
> [!WARNING]
-> There are significant limits on what you can safely do in a DLL entry point. For more information about specific Windows APIs that are unsafe to call in `DllMain`, see [General Best Practices](/windows/win32/Dlls/dynamic-link-library-best-practices). If you need anything but the simplest initialization then do that in an initialization function for the DLL. You can require applications to call the initialization function after `DllMain` has run and before they call any other functions in the DLL.
+> There are significant limits on what you can safely do in a DLL entry point. For more information about specific Windows APIs that are unsafe to call in `DllMain`, see [General Best Practices](/windows/win32/Dlls/dynamic-link-library-best-practices). If you need anything but the simplest initialization, then do that in an initialization function for the DLL. You can require applications to call the initialization function after `DllMain` has run and before they call any other functions in the DLL.
@@ -82,17 +81,64 @@ extern "C" BOOL WINAPI DllMain (
```
> [!NOTE]
-> Older Windows SDK documentation says that the actual name of the DLL entry-point function must be specified on the linker command-line with the /ENTRY option. With Visual Studio, you do not need to use the /ENTRY option if the name of your entry-point function is `DllMain`. In fact, if you use the /ENTRY option and name your entry-point function something other than `DllMain`, the CRT does not get initialized properly unless your entry-point function makes the same initialization calls that `_DllMainCRTStartup` makes.
+> Older Windows SDK documentation says that the actual name of the DLL entry-point function must be specified on the linker command-line with the `/ENTRY` option. With Visual Studio, you don't need to use the `/ENTRY` option if the name of your entry-point function is `DllMain`. In fact, if you use the `/ENTRY` option and name your entry-point function something other than `DllMain`, the CRT doesn't get initialized properly unless your entry-point function makes the same initialization calls that `_DllMainCRTStartup` makes.
+
+### Manual CRT initialization with `_CRT_INIT`
+
+When building a DLL that uses any of the C runtime libraries, in order to ensure that the CRT is properly initialized, either:
+
+- The initialization function must be named `DllMain()` and the entry point must be specified with the linker option `-entry:_DllMainCRTStartup@12` This is the default behavior when building a DLL (the `@12` is x86-only because that platform uses `stdcall`), or
+- The DLL's entry point must explicitly call `_CRT_INIT()` on process attach and process detach. This is only relevant if you are using `/NOENTRY` or have a custom entry point. We don't recommend using `/NOENTRY` or a custom entry point, if possible, because you would have to duplicate all of the initialization and termination code that `_DllMainCRTStartup` provides, in the same order.
+
+This permits the C runtime libraries to properly allocate and initialize C runtime data when a process or thread is attaching to the DLL, to properly clean up C runtime data when a process is detaching from the DLL, and for global C++ objects in the DLL to be properly constructed and destructed.
+
+The Win32 SDK samples all use the first method. Refer to the Win32 Programmer's Reference for `DllEntryPoint()` and the Visual C++ documentation for `DllMain()`. `DllMainCRTStartup()` calls `_CRT_INIT()` and `_CRT_INIT()` calls your application's `DllMain()`, if it exists.
+
+If you wish to use the second method and call the CRT initialization code yourself, instead of using `DllMainCRTStartup()` and `DllMain()`, there are two techniques:
+
+1. If you do have your own DLL entry point, do the following in the entry point:
+
+ a. Use this prototype (defined in `process.h` when `_DECL_DLLMAIN` is defined) for `_CRT_INIT()`: `BOOL WINAPI _CRT_INIT(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved);`
+
+ For information on `_CRT_INIT()` return values, see the documentation for `DllEntryPoint`; the same values are returned.
+
+ b. On `DLL_PROCESS_ATTACH` and `DLL_THREAD_ATTACH`, call `_CRT_INIT()` first, before any C runtime functions are called or any floating-point operations are performed.
+
+ c. Call your own process/thread initialization/termination code.
+
+ d. On `DLL_PROCESS_DETACH` and `DLL_THREAD_DETACH`, call `_CRT_INIT()` last, after all C runtime functions have been called and all floating-point operations are completed.
+
+Be sure to pass on to `_CRT_INIT()` all of the parameters of the entry point; `_CRT_INIT()` expects those parameters, so things may not work reliably if they're omitted (in particular, `fdwReason` is required to determine whether process initialization or termination is needed).
+
+Below is a skeleton sample entry point function that shows when and how to make these calls to `_CRT_INIT()` in the DLL entry point:
+
+```cpp
+BOOL WINAPI DllEntryPoint(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
+{
+ if (fdwReason == DLL_PROCESS_ATTACH || fdwReason == DLL_THREAD_ATTACH)
+ if (!_CRT_INIT(hinstDLL, fdwReason, lpReserved))
+ return(FALSE);
+
+ if (fdwReason == DLL_PROCESS_DETACH || fdwReason == DLL_THREAD_DETACH)
+ if (!_CRT_INIT(hinstDLL, fdwReason, lpReserved))
+ return(FALSE);
+
+ return(TRUE);
+}
+```
+
+> [!NOTE]
+> This isn't necessary if you're using `DllMain()` and `-entry:_DllMainCRTStartup@12`.
### Initialize regular MFC DLLs
-Because regular MFC DLLs have a `CWinApp` object, they should perform their initialization and termination tasks in the same location as an MFC application: in the `InitInstance` and `ExitInstance` member functions of the DLL's `CWinApp`-derived class. Because MFC provides a `DllMain` function that is called by `_DllMainCRTStartup` for `DLL_PROCESS_ATTACH` and `DLL_PROCESS_DETACH`, you should not write your own `DllMain` function. The MFC-provided `DllMain` function calls `InitInstance` when your DLL is loaded and it calls `ExitInstance` before the DLL is unloaded.
+Because regular MFC DLLs have a `CWinApp` object, they should perform their initialization and termination tasks in the same location as an MFC application: in the `InitInstance` and `ExitInstance` member functions of the DLL's `CWinApp`-derived class. Because MFC provides a `DllMain` function that is called by `_DllMainCRTStartup` for `DLL_PROCESS_ATTACH` and `DLL_PROCESS_DETACH`, you shouldn't write your own `DllMain` function. The MFC-provided `DllMain` function calls `InitInstance` when your DLL is loaded and it calls `ExitInstance` before the DLL is unloaded.
A regular MFC DLL can keep track of multiple threads by calling [TlsAlloc](/windows/win32/api/processthreadsapi/nf-processthreadsapi-tlsalloc) and [TlsGetValue](/windows/win32/api/processthreadsapi/nf-processthreadsapi-tlsgetvalue) in its `InitInstance` function. These functions allow the DLL to track thread-specific data.
-In your regular MFC DLL that dynamically links to MFC, if you are using any MFC OLE, MFC Database (or DAO), or MFC Sockets support, respectively, the debug MFC extension DLLs MFCO*version*D.dll, MFCD*version*D.dll, and MFCN*version*D.dll (where *version* is the version number) are linked in automatically. You must call one of the following predefined initialization functions for each of these DLLs that you are using in your regular MFC DLL's `CWinApp::InitInstance`.
+In your regular MFC DLL that dynamically links to MFC, if you're using any MFC OLE, MFC Database (or DAO), or MFC Sockets support, respectively, the debug MFC extension DLLs MFCO*version*D.dll, MFCD*version*D.dll, and MFCN*version*D.dll (where *version* is the version number) are linked in automatically. You must call one of the following predefined initialization functions for each of these DLLs that you're using in your regular MFC DLL's `CWinApp::InitInstance`.
|Type of MFC support|Initialization function to call|
|-------------------------|-------------------------------------|
@@ -104,7 +150,7 @@ In your regular MFC DLL that dynamically links to MFC, if you are using any MFC
### Initialize MFC extension DLLs
-Because MFC extension DLLs do not have a `CWinApp`-derived object (as do regular MFC DLLs), you should add your initialization and termination code to the `DllMain` function that the MFC DLL Wizard generates.
+Because MFC extension DLLs don't have a `CWinApp`-derived object (as do regular MFC DLLs), you should add your initialization and termination code to the `DllMain` function that the MFC DLL Wizard generates.
The wizard provides the following code for MFC extension DLLs. In the code, `PROJNAME` is a placeholder for the name of your project.
@@ -143,27 +189,27 @@ DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
Creating a new `CDynLinkLibrary` object during initialization allows the MFC extension DLL to export `CRuntimeClass` objects or resources to the client application.
-If you are going to use your MFC extension DLL from one or more regular MFC DLLs, you must export an initialization function that creates a `CDynLinkLibrary` object. That function must be called from each of the regular MFC DLLs that use the MFC extension DLL. An appropriate place to call this initialization function is in the `InitInstance` member function of the regular MFC DLL's `CWinApp`-derived object before using any of the MFC extension DLL's exported classes or functions.
+If you're going to use your MFC extension DLL from one or more regular MFC DLLs, you must export an initialization function that creates a `CDynLinkLibrary` object. That function must be called from each of the regular MFC DLLs that use the MFC extension DLL. An appropriate place to call this initialization function is in the `InitInstance` member function of the regular MFC DLL's `CWinApp`-derived object before using any of the MFC extension DLL's exported classes or functions.
-In the `DllMain` that the MFC DLL Wizard generates, the call to `AfxInitExtensionModule` captures the module's run-time classes (`CRuntimeClass` structures) as well as its object factories (`COleObjectFactory` objects) for use when the `CDynLinkLibrary` object is created. You should check the return value of `AfxInitExtensionModule`; if a zero value is returned from `AfxInitExtensionModule`, return zero from your `DllMain` function.
+In the `DllMain` that the MFC DLL Wizard generates, the call to `AfxInitExtensionModule` captures the module's runtime classes (`CRuntimeClass` structures) and its object factories (`COleObjectFactory` objects) for use when the `CDynLinkLibrary` object is created. You should check the return value of `AfxInitExtensionModule`; if a zero value is returned from `AfxInitExtensionModule`, return zero from your `DllMain` function.
-If your MFC extension DLL will be explicitly linked to an executable (meaning the executable calls `AfxLoadLibrary` to link to the DLL), you should add a call to `AfxTermExtensionModule` on `DLL_PROCESS_DETACH`. This function allows MFC to clean up the MFC extension DLL when each process detaches from the MFC extension DLL (which happens when the process exits or when the DLL is unloaded as a result of a `AfxFreeLibrary` call). If your MFC extension DLL will be linked implicitly to the application, the call to `AfxTermExtensionModule` is not necessary.
+If your MFC extension DLL is explicitly linked to an executable (meaning the executable calls `AfxLoadLibrary` to link to the DLL), you should add a call to `AfxTermExtensionModule` on `DLL_PROCESS_DETACH`. This function allows MFC to clean up the MFC extension DLL when each process detaches from the MFC extension DLL (which happens when the process exits or when the DLL is unloaded as a result of a `AfxFreeLibrary` call). If your MFC extension DLL is linked implicitly to the application, the call to `AfxTermExtensionModule` isn't necessary.
-Applications that explicitly link to MFC extension DLLs must call `AfxTermExtensionModule` when freeing the DLL. They should also use `AfxLoadLibrary` and `AfxFreeLibrary` (instead of the Win32 functions `LoadLibrary` and `FreeLibrary`) if the application uses multiple threads. Using `AfxLoadLibrary` and `AfxFreeLibrary` ensures that the startup and shutdown code that executes when the MFC extension DLL is loaded and unloaded does not corrupt the global MFC state.
+Applications that explicitly link to MFC extension DLLs must call `AfxTermExtensionModule` when freeing the DLL. They should also use `AfxLoadLibrary` and `AfxFreeLibrary` (instead of the Win32 functions `LoadLibrary` and `FreeLibrary`) if the application uses multiple threads. Using `AfxLoadLibrary` and `AfxFreeLibrary` ensures that the startup and shutdown code that executes when the MFC extension DLL is loaded and unloaded doesn't corrupt the global MFC state.
Because the MFCx0.dll is fully initialized by the time `DllMain` is called, you can allocate memory and call MFC functions within `DllMain` (unlike the 16-bit version of MFC).
-Extension DLLs can take care of multithreading by handling the `DLL_THREAD_ATTACH` and `DLL_THREAD_DETACH` cases in the `DllMain` function. These cases are passed to `DllMain` when threads attach and detach from the DLL. Calling [TlsAlloc](/windows/win32/api/processthreadsapi/nf-processthreadsapi-tlsalloc) when a DLL is attaching allows the DLL to maintain thread local storage (TLS) indexes for every thread attached to the DLL.
+Extension DLLs can take care of multithreading by handling the `DLL_THREAD_ATTACH` and `DLL_THREAD_DETACH` cases in the `DllMain` function. These cases are passed to `DllMain` when threads attach and detach from the DLL. Calling [`TlsAlloc`](/windows/win32/api/processthreadsapi/nf-processthreadsapi-tlsalloc) when a DLL is attaching allows the DLL to maintain thread local storage (TLS) indexes for every thread attached to the DLL.
-Note that the header file Afxdllx.h contains special definitions for structures used in MFC extension DLLs, such as the definition for `AFX_EXTENSION_MODULE` and `CDynLinkLibrary`. You should include this header file in your MFC extension DLL.
+The header file `Afxdllx.h` contains special definitions for structures used in MFC extension DLLs, such as the definition for `AFX_EXTENSION_MODULE` and `CDynLinkLibrary`. You should include this header file in your MFC extension DLL.
> [!NOTE]
-> It is important that you neither define nor undefine any of the `_AFX_NO_XXX` macros in *pch.h* (*stdafx.h* in Visual Studio 2017 and earlier). These macros exist only for the purpose of checking whether a particular target platform supports that feature or not. You can write your program to check these macros (for example, `#ifndef _AFX_NO_OLE_SUPPORT`), but your program should never define or undefine these macros.
+> It's important that you don't define or undefine any of the `_AFX_NO_XXX` macros in `pch.h` (`stdafx.h` in Visual Studio 2017 and earlier). These macros exist only to check whether a particular target platform supports that feature or not. You can write your program to check these macros (for example, `#ifndef _AFX_NO_OLE_SUPPORT`), but your program should never define or undefine these macros.
-A sample initialization function that handles multithreading is included in [Using Thread Local Storage in a Dynamic-Link Library](/windows/win32/Dlls/using-thread-local-storage-in-a-dynamic-link-library) in the Windows SDK. Note that the sample contains an entry-point function called `LibMain`, but you should name this function `DllMain` so that it works with the MFC and C run-time libraries.
+A sample initialization function that handles multithreading is included in [Using Thread Local Storage in a Dynamic-Link Library](/windows/win32/Dlls/using-thread-local-storage-in-a-dynamic-link-library) in the Windows SDK. Note that the sample contains an entry-point function called `LibMain`, but you should name this function `DllMain` so that it works with the MFC and C runtime libraries.
## See also
-[Create C/C++ DLLs in Visual Studio](dlls-in-visual-cpp.md)
-[DllMain entry point](/windows/win32/Dlls/dllmain)
+[Create C/C++ DLLs in Visual Studio](dlls-in-visual-cpp.md)\
+[DllMain entry point](/windows/win32/Dlls/dllmain)\
[Dynamic-link Library Best Practices](/windows/win32/Dlls/dynamic-link-library-best-practices)
diff --git a/docs/build/sample-profile-guided-optimization.md b/docs/build/sample-profile-guided-optimization.md
new file mode 100644
index 00000000000..9a9b7babe60
--- /dev/null
+++ b/docs/build/sample-profile-guided-optimization.md
@@ -0,0 +1,715 @@
+---
+description: "Learn how to use Sample Profile-Guided Optimization (SPGO) to improve the performance of C and C++ applications."
+title: "Tutorial: Use Sample Profile-Guided Optimization (SPGO) to improve C++ performance"
+ms.date: 05/20/2026
+ms.topic: tutorial
+ai-usage: ai-assisted
+helpviewer_keywords: ["SPGO", "sample profile-guided optimization", "profiling, SPGO", "SPDConvert", "SPTAggregate"]
+---
+# Use Sample Profile Guided Optimization (SPGO) to improve C++ performance
+
+Profile-Guided Optimization (PGO) uses runtime data to help the compiler make better optimization decisions. By using execution profile data collected from representative workloads, PGO enables the compiler to make smarter decisions about inlining, code layout, and hot/cold code separation. These decisions are impossible to make from static analysis alone.
+
+SPGO takes a different approach. Instead of instrumenting your binary and running it through synthetic training scenarios, SPGO uses hardware performance counter sampling collected from your actual release binaries. Modern processors provide hardware sampling capabilities. You can collect these samples with negligible runtime overhead, making it practical to gather runtime profiles directly from production code.
+
+Because SPGO profiles release bits instead of instrumented builds, it enables much more flexibility in where and how you collect data. You can gather runtime profiles from production servers, developer machines, performance labs, or any combination. The result is a binary that runs hot paths more efficiently, with a typical performance speedup of 5-15% depending on the quality of the profile data.
+
+For more information about Sample Profile‑Guided Optimization (PGO) in MSVC and how it improves performance using sampling‑based profiling, see [Introducing Sample Profile Guided Optimization in MSVC](https://devblogs.microsoft.com/cppblog/introducing-sample-profile-guided-optimization-in-msvc/)
+
+In this tutorial, you walk through the complete SPGO workflow: build a sample app, profile it by using `xperf`, prepare the profile data, and rebuild with the profile data. When you finish, you can apply the same process to your own projects.
+
+## Prerequisites
+
+Before you start, make sure you have the following software and hardware.
+
+### Software
+
+- **MSVC build tools for x64/x86/ARM64 v14.51 or later**—Install them through the Visual Studio Installer. Under **Individual Components**, search for "MSVC build tools."
+- **Windows Performance Toolkit (xperf.exe)**—The `xperf` profiler collects sample data during your program's execution. Download the Windows Assessment and Deployment Kit (ADK) from [ADK install](/windows-hardware/get-started/adk-install). When you run the ADK installer, select the **Windows Performance Toolkit** component to get `xperf`. You don't need to install the full ADK.
+- **War and Peace text file**—Used as the sample workload to generate profiling data. Download it from Project Gutenberg: [https://www.gutenberg.org/ebooks/2600](https://www.gutenberg.org/ebooks/2600). Save it as a plain text file in your working directory.
+
+### Hardware requirements
+
+The tutorial has three profiling paths. Which path you use depends on your hardware. You run detection commands in [Choose your profiling method](#choose-your-profiling-method) to find out which path your machine supports. For now, use this table to confirm you meet at least one of the requirements.
+
+| Path | CPU requirement | Notes |
+|------|----------------|-------|
+| **LBR** (best results) | Last Branch Records (LBR) are performance counters provided on Intel Haswell CPUs (4th gen Core, 2013) or later; AMD Zen 4 (2022) or later, ARM64 ARMv9.2-A (2020) or later | Provides the best branch data. For more information about LBR, see [An introduction to last branch records](https://lwn.net/Articles/680985/) |
+| **PMC/IP mode** (good results) | Performance Monitoring Counters (PMC) are supported on any x64 CPU with a performance monitoring unit (PMU) | Works on most modern CPUs where LBR is unavailable. For more information about PMC, see [Recording Hardware Performance (PMU) Events](/windows-hardware/test/wpt/recording-pmu-events) and [Recording Hardware Performance (PMU) Events with Complete Examples](https://devblogs.microsoft.com/performance-diagnostics/recording-hardware-performance-pmu-events-with-complete-examples/#configuring-extended-pmu-counter-configurations5) |
+| **OS timer** (works everywhere) | Any x64 or ARM64 CPU, including Azure VMs and virtual machines | Lower-fidelity samples, but always available |
+
+Most developers on modern x64 desktop hardware have LBR support. VMs and some older hardware have PMC or an OS timer.
+
+## How SPGO works
+
+SPGO collects profile data from your running binary and feeds it back to the compiler when you next build. The compiler uses that data to make better decisions about inlining, code layout, and branch prediction. A convenience is that no instrumentation is required.
+
+The workflow is:
+
+1. Build your binary with the [/spgo](./reference/spgo-enable-sample-profile-guided-optimization.md) linker flag. This step creates an empty **sample profile database** (`.spd` file).
+1. Profile the binary by using `xperf` to produce an ETL trace file.
+1. Convert the ETL to an **SPT** file by using [`SPTAggregate.exe`](sptaggregate.md), then convert the SPT to an **SPD** file by using [`SPDConvert.exe`](spdconvert.md).
+1. Rebuild with the [/spdin](./reference/spdin-use-sample-profile-database.md) linker flag pointing to the populated sample profile database (SPD). The linker applies SPGO optimizations.
+
+The optimizer uses the SPD to answer questions like: which branches are taken most often? Which functions are called in hot loops? This process produces better code layout and inlining decisions than static analysis alone.
+
+SPGO works with both C and C++. The workflow and flags are identical for both languages.
+
+**Best candidates for SPGO:** Large, branch-filled C/C++ applications with tight inner loops. Gains scale with codebase size and branch complexity. The small sample in this tutorial shows around 7% improvement. Larger production codebases often see more improvement.
+
+## Build Process Comparison
+
+This section covers how SPGO fits into the build pipeline if you want to understand the mechanics.
+
+### Normal build process
+
+In a standard C/C++ release build:
+
+- **Inputs:** Source code files (`.cpp`, `.h`) and release-mode compiler flags (`/O2`, `/GL`, and so on).
+- **Process:** The compiler applies standard optimizations such as inlining heuristics, branch prediction assumptions, and code layout decisions based on static analysis alone. It has no data about how the program actually behaves when it runs.
+- **Output:** Executable (`.exe`), DLL files (`.dll`), debug information (`.pdb`).
+
+:::image type="content" source="media/normal-build-process.png" alt-text="Diagram of the normal release build process showing source code files and example compiler switch /GL as inputs flowing to a build step, which produces .exe, .dll, and .pdb outputs." lightbox="media/normal-build-process.png":::
+
+Without runtime data, hot paths and cold paths receive similar treatment.
+
+### SPGO-enabled build process
+
+SPGO adds profiling data as a new input to the build pipeline:
+
+- **Inputs:** Source code, the `.spd` profile file (sample counts from a profiling run), release-mode compiler flags, `/link /spgo`, and `/spdin:` to specify an input SPD file (if not specified, defaults to a .spd using the binary name and located in the obj folder).
+- **Process:** The linker reads the SPD alongside the intermediate code. It uses branch-frequency data to make better inlining, code layout, and branch-ordering decisions. Hot functions get laid out for fast access; cold code moves out of the critical path.
+- **Output:** Optimized executable (`.exe`), optimized DLL files (`.dll`), debug information (`.pdb`), **and a new `.spd` file** for future profiling iterations.
+
+:::image type="content" source="media/sample-profile-guided-optimization-build-process.png" alt-text="Diagram of the SPGO-enabled build process showing source code and profile data files (.spd) as inputs to the build step with an additional linker switch /spgo. The build process outputs optimized .exe, .dll, debug information (.pdb), and new profile data files (.spd)." lightbox="media/sample-profile-guided-optimization-build-process.png":::
+
+The key insight: SPGO moves optimization decisions from compiler and linker heuristics to data-driven choices based on real execution.
+
+### Key flags
+
+| Flag | Type | Purpose |
+|------|------|---------|
+| [`/spgo`](./reference/spgo-enable-sample-profile-guided-optimization.md) | Linker | Enables SPGO. Embeds SPGO metadata in the binary and creates an empty `.spd` output file unless `/spdin` is specified, in which case the specified `.spd` file is used as input. |
+| [`/spdin:`](./reference/spdin-use-sample-profile-database.md) | Linker | Input SPD - provides profile data to the linker for optimization |
+| [`/spd:`](./reference/spd-specify-sample-profile-database.md) | Linker | Output SPD path - specifies where the new SPD is written (optional; defaults to the same directory as the binary). Serves as the input SPD path if `/spdin` isn't specified. |
+| [`/GL`](./reference/gl-whole-program-optimization.md) | Compiler | Whole-program optimization-required for SPGO to work across translation units |
+| [`/O1`, `/O2` (Minimize Size, Maximize Speed)](./reference/o1-o2-minimize-size-maximize-speed.md) | Compiler | Optimize for speed; enables aggressive optimizations that SPGO can enhance |
+
+### How SPGO differs from PGO
+
+PGO (Profile-Guided Optimization) requires you to compile your binary with instrumentation flags (`/GENPROFILE`), run the slower instrumented binary to collect `.pgc` execution count files, then relink with `/USEPROFILE`. The compiler gets exact execution counts but you have to instrument the code first. For more information about this process, see [Profile-guided optimizations](profile-guided-optimizations.md).
+
+SPGO uses hardware CPU performance counters to collect statistical samples from your uninstrumented release binary. Run your existing binary, profile it by using `xperf`, convert the trace to an SPD file, and rebuild. There's no instrumented build and no slowdown during profiling. The compiler gets statistical sampling data instead of exact counts, which is less precise but easier to get and requires no code changes. It also allows profiling of system components or realtime components that are difficult to collect data for with an instrumented approach. You can also profile final/shipping binaries.
+
+This tutorial covers three profiling methods: LBR, PMC, and OS timer. You choose your method in [Choose your profiling method](#choose-your-profiling-method). For a detailed comparison of the normal build process versus the SPGO build process, including a flag reference table, see [Build Process Comparison](#build-process-comparison).
+
+## Configure `perfcore.ini`
+
+> **⚠️ Required:** Without this step, `xperf` doesn't provide the necessary profiling data. Complete this step before running `xperf`.
+
+The Windows Performance Toolkit (WPT) uses `perfcore.ini`, located if you installed the WPT in the default location at `C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\perfcore.ini`, to register the DLL providers it needs for SPGO.
+
+Open Windows Notepad as Administrator. Then open `perfcore.ini`. Find the DLL list section and add the following entries, one per line:
+
+```
+perf_lbr.dll
+perf_spt.dll
+perf_hv.dll
+```
+
+If `xperf.exe` isn't installed, see [General issues](#general-issues-all-paths) to install it.
+
+Save and close `perfcore.ini`. The DLL files already ship in the same directory as `xperf.exe` so you don't need to copy them anywhere. You're only registering them in `perfcore.ini`. Ensure that `xperf` is in your path.
+
+## Create the sample app
+
+The sample app for this tutorial is a C++ program that reads text from standard input and produces a line count, word count, total character count, a character frequency table, and elapsed time to process the file in milliseconds. It's written in C++, but SPGO also works with C. The workflow is identical for C projects.
+
+Create a file named `textCount.cpp` in your working directory and add the following source code:
+
+```cpp
+// textCount.cpp : Text Statistics Counter
+// Counts words, lines, and character frequencies from standard input
+// Usage: textCount < file.txt
+
+#include
+#include
+#include