Windows Win32
Windows Win32
Windows Win32
Get started
e OVERVIEW
g TUTORIAL
a DOWNLOAD
Development tools
Develop
e OVERVIEW
i REFERENCE
a DOWNLOAD
Windows virtual machines
e OVERVIEW
@WindowsDocs on Twitter
OneDevMinute on YouTube
Related docs
e OVERVIEW
C++/WinRT
UWP
.NET
Related technologies
e OVERVIEW
Windows AI
Windows IoT
Windows Containers
Games
Get started with desktop Windows apps
that use the Win32 API
Article • 01/06/2021
The Win32 API (also called the Windows API) is the original platform for native C/C++
Windows applications that require direct access to Windows and hardware. It provides a
first-class development experience without depending on a managed runtime
environment like .NET and WinRT (for UWP apps for Windows 10). This makes the Win32
API the platform of choice for applications that need the highest level of performance
and direct access to system hardware.
7 Note
This documentation covers how to create desktop Windows apps with the Win32
API. The Win32 API is one of several app platforms you can use to build desktop
Windows apps. For more info about other app platforms, see Choose your
platform.
Get set up
Follow these instructions and start creating desktop apps for Windows 10 that use the
Win32 API.
1. Download or update Visual Studio 2019. If you don't already have Visual Studio
2019, you can install the free Microsoft Visual Studio Community 2019. When you
install Visual Studio, make sure to select the Desktop development with C++
option. For download links, see our Downloads page.
7 Note
When you install Visual Studio, you can optionally select the .NET desktop
development and Universal Windows Platform development options for
access to other project types and app platforms for building desktop
Windows apps.
2. If you want to build your desktop app into an MSIX package and test or debug the
packaged app on your development computer, you'll need to enable Developer
Mode on your computer.
7 Note
For scripts you can use to set up your development computer and install other
features or packages, check out this GitHub project .
ノ Expand table
Topic Description
Create your first C++ Win32 This tutorial teaches you how to write a Windows program in
app C++ using Win32 and COM APIs.
Create your first app using This basic tutorial will get you started with DirectX app
DirectX development.
Programming Guide for 64-bit Describes programming for 64-bit versions of the Windows
Windows operating system.
Using the Windows Headers Provides an overview of some of the conventions used in the
Windows header files.
Most of these UWP features are available as modular components that you can adopt in
your desktop app at your own pace without having to rewrite your entire application.
You can enhance your existing desktop app by choosing which parts of Windows 10 and
UWP to adopt.
For new projects, you can install the C++/WinRT Visual Studio Extension (VSIX)
and use one of the C++/WinRT project templates included in that extension.
For existing Windows desktop application projects, you can install the
Microsoft.Windows.CppWinRT NuGet package in the project.
Related topics
Develop desktop apps
Windows API reference
Windows API index
Windows Runtime C++ reference
Feedback
Was this page helpful? Yes No
What's new in Windows 10 for desktop
Win32 app developers
Article • 01/07/2021
This article provides information about what's new for desktop Win32 app developers
starting in Windows 10. For additional information about what's new the latest release
of Windows 10, see the following resources:
Related topics
Get started with Win32 desktop Windows apps
What's cool in Windows 10
Windows API reference
Windows API index
Feedback
ツ ト
ツ Yes ト No
Was this page helpful?
The aim of this Get Started series is to teach you how to write a desktop program in
C++ using Win32 and COM APIs.
In the first module, you'll learn step-by-step how to create and show a window. Later
modules will introduce the Component Object Model (COM), graphics and text, and
user input.
For this series, it is assumed that you have a good working knowledge of C++
programming. No previous experience with Windows programming is assumed. If you
are new to C++, learning material is available in the C++ language documentation .
In this section
Topic Description
Intro to Win32 This section describes some of the basic terminology and coding
programming in C++ conventions used in Windows programming.
Module 1. Your First In this module, you will create a simple Windows program that
Windows Program shows a blank window.
Module 2. Using COM in This module introduces the Component Object Model (COM),
Your Windows Program which underlies many of the modern Windows APIs.
Module 3. Windows This module introduces the Windows graphics architecture, with a
Graphics focus on Direct2D.
Module 4. User Input This module describes mouse and keyboard input.
Sample Code Contains links to download the sample code for this series.
Feedback
Was this page helpful? ツ Yes ト No
If you know DirectX, you can develop a DirectX app using native C++ and HLSL to take
full advantage of graphics hardware.
Use this basic tutorial to get started with DirectX app development, then use the
roadmap to continue exploring DirectX.
That said, planning your game (or interactive, real-time app) is essential. If you are new
to game development, and your game doesn't have demanding graphics requirements,
consider developing it with the .NET framework instead. Also, many "middleware"
graphics and game development packages are available for Windows platforms, and
some do not require significant programming skills.
If you are confident, or simply have a dream of making a game with high-fidelity
graphics (or an app with complex graphics content), then read on!
In this section
Topic Description
Prerequisites When you start to develop a Windows app using DirectX, keep the prerequisites
for developing on this page in mind. This includes the technologies you need to know before
with DirectX you dive in.
Get started Creating a DirectX game for Windows is a challenge for a new developer. Here
with DirectX we quickly review the concepts involved and the steps you must take to begin
for Windows developing a game using DirectX and C++.
Roadmap for Here are key resources to help you get started with using DirectX and C++ to
Desktop develop graphics-intensive Desktop apps, like games.
DirectX apps
Feedback
Was this page helpful? ツ Yes ト No
The header files for the Windows API enable you to create 32- and 64-bit applications.
They include declarations for both Unicode and ANSI versions of the API. For more
information, see Unicode in the Windows API. They use data types that enable you to
build both 32- and 64-bit versions of your application from a single source code base.
For more information, see Getting Ready for 64-bit Windows. Additional features
include Header Annotations and STRICT Type Checking.
The Windows header files use macros to indicate which versions of Windows support
many programming elements. Therefore, you must define these macros to use new
functionality introduced in each major operating system release. (Individual header files
may use different macros; therefore, if compilation problems occur, check the header file
that contains the definition for conditional definitions.) For more information, see
SdkDdkVer.h.
The following table describes the preferred macros used in the Windows header files. If
you define NTDDI_VERSION, you must also define _WIN32_WINNT.
The following tables describe other macros used in the Windows header files.
Minimum system required Minimum value for _WIN32_WINNT and
WINVER
For example, to set WINVER in your source file, use the following statement:
To set _WIN32_WINNT using the /D compiler option, use the following command:
cl -c /D_WIN32_WINNT=0x0502 source.cpp
Note that some features introduced in the latest version of Windows may be added to a
service pack for a previous version of Windows. Therefore, to target a service pack, you
may need to define _WIN32_WINNT with the value for the next major operating system
release. For example, the GetDllDirectory function was introduced in Windows
Server 2003 and is conditionally defined if _WIN32_WINNT is 0x0502 or greater. This
function was also added to Windows XP with SP1. Therefore, if you were to define
_WIN32_WINNT as 0x0501 to target Windows XP, you would miss features that are
defined in Windows XP with SP1.
Define one or more of the NOapi symbols to exclude the API. For example,
NOCOMM excludes the serial communication API. For a list of support NOapi
symbols, see Windows.h.
#define NOCOMM
Related topics
Windows SDK download site
Feedback
Was this page helpful? ツ Yes ト No
Microsoft has released 64-bit versions of the Windows operating system. 64-bit
Windows was designed with compatibility in mind. Developers can ensure that their
existing 32-bit applications run well under 64-bit Windows or take advantage of the
benefits of 64-bit Windows by migrating their applications.
Each application can support more users. All or part of each application must be
replicated for each user, which requires additional memory.
Each application has better performance. Increased physical memory allows more
applications to run simultaneously and remain completely resident in the system's
main memory. This reduces or eliminates the performance penalty of swapping
pages to and from disk.
Each application has more memory for data storage and manipulation. Databases
can store more of their data in the physical memory of the system. Data access is
faster because disk reads are not necessary.
Applications can manipulate large amounts of data easily and more reliably. Video
composition for motion picture work requires 64-bit Windows for this reason.
Modeling for scientific and financial applications benefits greatly from memory-
resident data structures that are not possible on 32-bit Windows.
Increased productivity. Knowledge workers can spend their time thinking and
producing, rather than waiting for the software to finish its tasks.
Lower cost of ownership. Each server can support larger numbers of users and
applications, so your business will require fewer servers. This translates directly into
less management overhead—one of the highest costs in any computing
environment.
New application opportunities. New applications can be designed without the
barriers imposed by 32-bit Windows. New graphics applications will make work
easier and more enjoyable. Data-intensive tasks that are impossible today can be
done with 64-bit Windows.
In this Section
Getting Ready for 64-bit Windows
Designing 64-bit Compatible Interfaces
Running 32-bit Applications
Migration Tips
Feedback
Was this page helpful? ツ Yes ト No
Purpose
In the Cookbook, we provide info about changes to and new features of the Windows
10, Windows 8, Windows 8.1, Windows Server 2012, and Windows Server 2012 R2
operating systems. We also provide guidelines for you to verify the compatibility of your
existing and planned programs with the new operating systems. We assume that you
are familiar with previous versions of Windows.
Windows 10
Windows 8.1
Windows Server 2012 R2
Windows 8
Windows Server 2012
Windows 7
Windows Server 2008 R2
Feedback
Was this page helpful? ツ Yes ト No
In this section
Windows 7 and Windows Server 2008 R2 Application Quality Cookbook
Windows 7 Developer Guide
Hilo: Developing C++ Applications for Windows 7
Platform Update for Windows Vista
Feedback
Was this page helpful? ツ Yes ト No
The Windows 7 and Windows Server 2008 R2 Application Quality Cookbook familiarizes
application developers with how to verify the compatibility of their applications with the
new operating system and provides an overview of the few known application
compatibility issues in Windows 7 and Windows Server 2008 R2. It also points out
differences in performance, reliability, and usability, and provides links to detailed white
papers and other developer guidance.
Overview
Windows 7 and Windows Server 2008 R2 introduce the latest operating system
technology and software development platform for use by application developers and
enterprises worldwide. As part of further enhancing the security, reliability, performance,
and user experience of Windows, many new features have been introduced, existing
features have been improved, and some features have been removed.
While Windows 7 and Windows Server 2008 R2 are highly compatible with most of their
respective applications written for Windows XP, Windows Server 2003, Windows Vista,
Windows Server 2008, Windows Server 2008 R2 and their service packs, some
compatibility breaks are inevitable due to innovations, security tightening, and increased
reliability. Overall, the compatibility of Windows 7 and Windows Server 2008 R2 with
existing applications is high.
This document builds on the concepts embodied in the Windows Vista and Windows
Server 2008 Application Compatibility Cookbook. (This resource may not be available in
some languages and countries/regions.) Like it, this document provides you with the
means to become familiar with how to verify the compatibility of your applications with
the new operating system and provides an overview of the few known application
incompatibility issues in Windows 7 and Windows Server 2008 R2. But more than that, it
also points out differences in performance, reliability, and usability, and provides links to
detailed white papers and other developer guidance.
In addition, Microsoft is investing in several new and enhanced features and tools to
enable you to build higher quality applications and to troubleshoot when applications
do not function properly on Windows 7 and Windows Server 2008 R2. Included among
these tools are instructions for how to qualify your client and server applications for
participating in the Windows Logo Program.
This Cookbook contains more than three dozen topics divided into three major sections:
We invite you to check out these topics to learn how to optimize your application to
take advantage of what Windows 7 has to offer.
Feedback
Was this page helpful? ツ Yes ト No
Building applications that are easy to use, visually appealing, and offer high
performance is a challenge that developers face every day. Innovative applications can
greatly improve the user experience, empowering companies to differentiate their
services and solutions. However, developers are increasingly asked to do more in less
time, while also optimizing the power and performance requirements of their
applications.
The Windows 7 platform makes it easy for developers to create engaging, user-friendly
applications by providing familiar tools and rich development features that allow them
to take advantage of the latest PC capabilities.
For a downloadable version of the Windows 7 Developer Guide, visit Code Gallery on
MSDN.
Solid Foundation
Richer Application Experiences
The Best of Windows and the Web
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Platform Update for Windows Vista and the Platform Update for Windows Server
2008 are end-user operating system updates that support the use of selected Windows
7 technologies on previous versions of the Windows operating system. The updates
include a set of runtime libraries that enable application developers to target current
releases, Windows 7 and Windows Server 2008 R2 as well as previous versions, Windows
Vista and Windows Server 2008.
Developer audience
The API supported by the Platform Update for Windows Vista and the Platform Update
for Windows Server 2008 are designed for use by experienced C/C++ developers.
Recommended proficiencies:
COM programming
Windows API programming
Run-time requirements
For Windows Vista, end-users obtain the Platform Update for Windows Vista from
Windows Update. For Windows Server 2008, end-users obtain the Platform Update for
Windows Server 2008 from Windows Update.
In this section
Topic Description
About Platform Provides an overview of Platform Update for Windows Vista and Platform
Update for Update for Windows Server 2008 and their features.
Windows Vista
7 Note
This design guide was created for Windows 7 and has not been updated for newer
versions of Windows. Much of the guidance still applies in principle, but the
presentation and examples do not reflect our current design guidance.
These sections comprise the detailed user experience guidelines for Windows-based
desktop applications.
In this section
Topic Description
Controls Controls are UI elements that your users interact with on your app's main window
area. See visual examples of controls in Windows-based, desktop apps and get
links to guidelines for each control.
Commands Commands are actions users can take while using your app. Learn the guidelines
for adding commands to your app's menus, ribbons, and toolbars.
Text Text includes any text users can see in your app. Review these guidelines on the
use of UI text, style, and tone for your apps.
Messages Messages are any kind of message users need or want to see as they use your app.
Learn how to present errors, warning, confirmations, and notifications in your app.
Interaction Interaction is the variety of ways users interact with your app, including touch,
keyboard, mouse, and so on. Use these guidelines to create intuitive and
distinctive experiences that are optimized for touch but work consistently across
input devices.
Windows Windows are the main "canvases" or UI surfaces of your desktop app, including
the main windows itself and pop-ups, dialogs, and wizards. Follow these guidelines
when deciding which surface to use and how best to use them.
Visuals Visuals include the visual elements other than the controls. These guidelines help
you make decisions about layout, fonts, color, icons, and so on in your app.
Experiences Experiences are the common experiences and use cases for all apps, like set up,
first run, and printing. Learn about the best practices for creating these
experiences and communicating your app brand.
Topic Description
Windows The Windows environment is the onscreen work area provided by Windows,
Environment analogous to a physical desktop, and the operating system's core extension points.
Learn how to leverage the desktop, taskbar, notification area, control panels, help,
and user account control for your app.
Feedback
Was this page helpful? ツ Yes ト No
This section provides in-depth guidance and code examples about Windows features
that are available to desktop applications by using the Win32 API.
In this section
Topic Description
Desktop Provides information that enables you to develop graphical user interfaces for
user your apps, including features such as windows and messages, resources, and
interface controls.
Desktop Provides guidance for integrating and extending the desktop user-facing features
environment of Windows, including the Taskbar, the desktop, and File Explorer.
Application Provides information about using APIs and services provided by Windows to
installation install, manage, and service your desktop apps.
and
servicing
Audio and Provides guidance about using audio and video features provided by Windows.
video
Data access Provides information about data access and storage features you can use in your
and storage desktop applications, including file system management and cloud sync engines.
Diagnostics Provides guidance about debugging and error handling, performance profiling,
network monitoring, and other diagnostics features.
Documents Describes the documents and printing features of Windows that enable
and printing applications to save, view, and print.
Graphics Provides information about graphics and gaming features of Windows, including
and gaming DirectX and digital imaging.
Security and Provides information about authentication, authorization, cryptography, and other
identity security features of Windows.
System Provides guidance about fundamental OS features such as process and threads,
services services, dynamic-link libraries, COM, the registry, and more.
AI and Transform your Windows application with the power of artificial intelligence.
machine Windows AI empowers you and your business to achieve more by providing
learning intelligent solutions to complex problems.
Feedback
Was this page helpful? ツ Yes ト No
This topic provides links to documentation for Windows developers designing accessible
applications, assistive technology developers building tools such as screen readers and
magnifiers, and software test engineers creating automated scripts for testing Windows
applications.
Resources
The resources provided here can help you build Windows applications for as many
people as possible, including those with disabilities, personal preferences, environmental
considerations, and specific work styles.
Accessibility settings
Each accessibility parameter and each built-in accessibility feature corresponds to a
system parameter that can be set or queried with the SystemParametersInfo function.
There are two types of settings available to users (through the Ease of Access Center in
Control Panel) that are also exposed to developers.
Accessibility parameters. When set, these parameters indicate that applications
should change their default behavior. Applications can check the state of an
accessibility parameter to determine whether the user wants special behavior that
can be provided in an application-specific manner. For example, the ShowSounds
parameter indicates that an application that typically uses sound to convey
important information should also provide the information visually.
Built-in Accessibility Features. These features are built into the system or are
provided as an extension to the system. They affect how the user provides
keyboard and mouse input to the computer. When enabled, their functionality is
available regardless of which applications are running. An example is a keyboard
filter that makes it easier for users with movement impairments to type key
combinations such as CTRL+ALT+DEL.
Related topics
UI Automation WPF Framework Implementation sample
UI contrast and settings sample
Feedback
Was this page helpful? Yes No
Desktop app user interface
Article • 02/24/2023
This section provides information that enables you to develop graphical user interfaces
for your apps.
In this section
Topic Description
Internationalization for Describes the technologies that enable you to support the many
Windows Applications cultures and written languages of the international marketplace in
your Windows-based applications.
Accessibility Describes accessibility features that make it easier for persons with
disabilities to use computers.
User Interaction Describes features that enable the user to interact with an application,
through devices such as the keyboard, mouse, and touch screens.
Desktop Window Desktop Window Manager (DWM) enables visual effects on the
Manager desktop as well as various features such as glass window frames, 3-D
window transition animations, Windows Flip and Windows Flip3D, and
high resolution support.
Menus and Other A resource is binary data that you can add to the executable file of a
Resources Windows-based application. A resource can be either standard or
defined. The data in a standard resource describes an icon, cursor,
menu, dialog box, bitmap, enhanced metafile, font, accelerator table,
Topic Description
Data Exchange Describes basic methods of exchanging data, such as the clipboard
and Dynamic Data Exchange.
Windows Animation The Windows Animation Manager (Windows Animation) enables rich
Manager animation of user interface elements. It is designed to simplify the
process of adding animation to an application's user interface and to
enable developers to implement animations that are smooth, natural,
and interactive.
Tiles, badges, and Describes how to respond to toast notifications that appear in the
notifications for desktop action center. These toasts can be used to simply activate your
applications application, or they can be used to gather information from the user
and alter the launch protocol based on that information.
Related topics
Windows Environment Development
Feedback
Was this page helpful? Yes No
Getting Started Developing User
Interfaces for Windows Applications
Article • 04/27/2021
Purpose
The following sections offer general guidance to developers who are designing,
implementing, and testing the user interface of a Windows application.
7 Note
These guidelines are not intended to be comprehensive and are subject to the
specific scope and functionality of an application. For more comprehensive
guidelines, see the Windows User Experience Interaction Guidelines.
In this section
Topic Description
Overview of the This section outlines the three phases of user interface design and
User Interface introduces the tasks that are typically associated with each phase.
Development
Process
Designing a User This section describes in detail some of the tasks associated with designing
Interface a UI for a Windows application.
Implementing a This section describes some of the tasks associated with implementing a
User Interface user interface for a Windows application.
Testing a User This section describes in detail some of the tasks associated with testing a
Interface UI for a Windows application.
Other Resources This section contains a list of recommended books and resources related
to user interface design. (These books and resources may not be available
in some languages and countries.)
Feedback
Was this page helpful? ツ Yes ト No
This section describes the technologies in Windows that enable you to support the
many cultures and written languages of the international marketplace in your C or C++
based Microsoft Win32 application.
Windows has become an essential platform for customers worldwide. International users
expect solutions that are adapted to their languages and regions around the world. In
this section, you will find the information you need to develop multilanguage,
multicultural, and multi-site solutions. The international support built into Windows
empowers you to implement many scenarios with less engineering overhead than ever
before.
The development of world-ready applications requires the use of many services and
tools. Windows contains features that enable you to develop solutions that:
In this Section
The following international support technologies are documented in this section. They
are listed with some key scenarios for which they can be used.
Common Scenarios:
Determine a path to take to learn how to develop international software.
Discover the internationalization technologies available in the Microsoft
Windows Software Development Kit (SDK).
Follow a tutorial that takes an existing monolingual application and adds
support for additional languages.
Globalization Services
Describes Extended Linguistic Services (ELS), which enable you to discover the
language in which text and user input is written, and National Language Support
(NLS), which enables an application to use locale information to display culture-
sensitive information (such as time, dates, and currency) and properly sort strings.
Common Scenarios:
Discover the language of the user's input, so that help content can be displayed
in an understandable language.
Discover the script used in text that is to be displayed. If it is Simplified or
Traditional Chinese, offer the user the option to have the text transliterated from
one to the other.
Permit the user to select a locale (a collection of language-related user
preference information).
Display times, dates, calendar information, currency, and many other culture-
dependent objects in appropriate languages and formats.
Sort strings into the order expected by the user of a given locale.
Common Scenario:
Permit the user to use a standard keyboard to enter Japanese kanji characters.
Common Scenarios:
Allow the user to select international fonts based on character set.
Display international text.
Process complex scripts, including bidirectional rendering, contextual shaping,
and ligatures (Uniscribe).
Allow a high degree of control for fine typography (Uniscribe).
Common Scenarios:
Create regional or worldwide single deployment images of an application.
Localize a solution by updating application resources with no change to
application source code.
Permit users to switch from one UI language to another at run time.
Common Scenarios:
Support the many different languages of the international marketplace through
Unicode.
Convert Unicode characters to and from other character sets, when necessary.
Feedback
Was this page helpful? ツ Yes ト No
In this section
Topic Description
Direct The Direct Manipulation APIs are used to process touch input on a region or
Manipulation object, generate output to be used by a composition engine for applying
transforms to the related rendering surface, and optimize response and reduce
latency through predictive output based on the rendering time of the compositor.
Ink input Learn about the various Desktop inking APIs for Windows apps.
Input The Input Feedback Configuration APIs enable you to configure visual feedback
Feedback for user interactions based on the Windows application or UI framework you are
Configuration developing.
Input Source The Input Source Identification APIs enable Windows applications to accurately
Identification and reliably detect an input source, identify the input type, and provide a user
experience that's most appropriate for the input type.
Pointer The topics in this section provide an overview of the Windows Pointer Device
Device Input Input Stack Reference APIs. The Pointer Device Input Stack provides information
Stack about the input devices connected to the system.
Pointer Input The Pointer Input Message APIs expose pointer-related input messages,
Messages notifications, and associated functionality in Windows applications.
and
Notifications
Radial Learn about the various Desktop APIs for Windows Wheel accessories such as the
controller Surface Dial (available for purchase at the Microsoft Store ).
input
Touch Hit Use the Touch Hit Testing APIs to programmatically identify an input target by
Testing determining whether a geometry or point falls within the content area of a UI
element.
Feedback
Was this page helpful? ツ Yes ト No
The Direct Manipulation APIs let you create great pan, zoom, and drag user experiences.
To do this, it processes touch input on a region or object, generates output transforms,
and applies the transforms to UI elements. You can use Direct Manipulation to optimize
responsiveness and reduce latency through off-thread input processing, optional off-
thread input hit testing, and input/output prediction.
Any application that uses Direct Manipulation to process touch interactions displays the
fluid Windows 8 animations and interaction feedback behaviors that conform to the
Guidelines for common user interactions.
Developer Audience
The Direct Manipulation API is for experienced developers who know C/C++, have a
solid understanding of the Component Object Model (COM), and are familiar with
Windows programming concepts.
Run-time requirements
Direct Manipulation was introduced in Windows 8. It is included in both 32-bit and 64-
bit versions.
Implementation flexibility
The interfaces included with Direct Manipulation provide comprehensive support for
input handling, interaction recognition, feedback notifications, and UI updates. The
interfaces also incorporate system services such as DirectComposition.
Basic concepts
The most basic Direct Manipulation implementation consists of a viewport, content, and
interactions. The viewport is a region that is able to receive and process input from user
interactions. It is also the region of the content that is visible to the end-user. The
content is the actual object that end-users can see and is what moves or scales in
response to a user interaction. The primary user interactions (also known as
manipulations) supported by Direct Manipulation are panning and zooming. These
interactions apply a translate or scale transform to the content within the viewport,
respectively. Multiple viewports (each with their own content) can be configured in a
single window to create a rich UI experience.
This figure shows a basic Direct Manipulation implementation before and after panning.
In our basic case above, when SetContact is called a few things happen:
Supporting documentation
Viewports and content
Composition engine
Feedback
Was this page helpful? ツ Yes ト No
Learn about the various Desktop inking APIs for Windows apps.
In this section
Topic Description
Ink The ink presenter APIs enable Microsoft Win32 apps to manage the input, processing,
presenter and rendering of ink input (standard and modified) through an InkPresenter object
inserted into the app's DirectComposition visual tree.
Ink The Ink renderer APIs enable the rendering of ink strokes onto the designated
renderer Direct2D device context of a Universal Windows app, instead of the default InkCanvas
control.
Related topics
Pen and stylus interactions, Ink Analysis sample, Simple inking sample, Complex inking
sample
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The topics in this section provide an overview of Input Feedback Configuration in
Windows 8. Input Feedback Configuration provides access to visual feedback settings
for user interactions.
The collection of topics provided here describe how to use Input Feedback
Configuration to optimize the user experience of your app. For example, default visual
feedback settings might not be necessary, or desirable, in a game app because of
interference or conflicts with the gameplay itself.
In this section
Topic Description
Input Feedback The topics in this section provide the reference specifications for
Configuration Reference Input Feedback Configuration.
Developer audience
The Input Feedback ConfigurationAPIs are designed for developers who are building UI
frameworks that provide a consistent touch-optimized user experience across desktop
applications.
Related topics
User Interaction, SystemParametersInfo
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The topics in this section provide an overview of support for Input Source Identification
in Windows 8. Input Source Identification enables applications to accurately and reliably
detect an input source, identify the input type, and provide a user experience that's
most appropriate for the input type.
The collection of topics provided here describe how your app can obtain this
information and best use it to optimize the user experience for your customer.
In this section
Topic Description
Input Source The topics in this section provide the reference specifications for Input
Identification Reference Source Identification in Windows 8.
Developer audience
The Input Source Identification APIs are designed for developers who are building UI
frameworks that provide a consistent touch-optimized user experience across desktop
applications.
Related topics
User Interaction
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The topics in this section provide an overview of support for Interaction Context in
Windows 8. Interaction Context enables Windows 8 applications and UI frameworks to
support multiple, concurrent interactions by providing gesture detection and
manipulation processing.
The collection of topics provided here describe how your app can use Interaction
Context to optimize the user experience for your customer.
In this section
Topic Description
Interaction Context The topics in this section provide the reference specifications for
Reference Interaction Context.
Developer audience
The Interaction Context APIs are designed for developers who are building UI
frameworks that provide a consistent touch-optimized user experience across desktop
applications.
Related topics
User Interaction
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The topics in this section provide an overview of the Windows pointer device input
stack. The Pointer Device Input Stack APIs provide information about the input devices
connected to the system.
In this section
Topic Description
Pointer Device Input The topics in this section provide the reference specifications for the
Stack Reference Pointer Device Input Stack in Windows 8.
Developer audience
The Pointer Device Input StackAPIs are designed for developers who require information
about the pointer device being used to interact with their app.
Related topics
User Interaction
Feedback
Was this page helpful? ツ Yes ト No
In this section
Topic Description
Pointer Input Message The topics in this section provide the reference specifications for
Reference Pointer Input Messages and Notifications.
Pointer Input Messages and Terms and definitions specific to Pointer Input Messages and
Notifications Glossary Notifications.
Feedback
Was this page helpful? ツ Yes ト No
Learn about the radial controller APIs for Windows Wheel accessories such as the
Surface Dial.
In this section
Topic Description
Radial controller The topics contained in this section provide the reference specifications for
interfaces Radial controller input interfaces.
Related topics
Windows.UI.Input, Surface Dial interactions, Universal Windows Platform samples (C#
and C++) , Windows desktop sample
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Microsoft Windows Text Services Framework (TSF) is a system service available as a
redistributable for Windows. TSF provides a simple and scalable framework for the
delivery of advanced text input and natural language technologies. TSF can be enabled
in applications, or as a TSF text service. A TSF text service provides multilingual support
and delivers text services such as keyboard processors, handwriting recognition, and
speech recognition.
Where applicable
Text Services Framework is applicable for Windows-based computers using text services
and Windows XP or later versions of the operating system.
Developer audience
Text Services Framework is designed for use by Component Object Model (COM)
programmers using the C/C++ programming languages. Programmers should be
familiar with text services for Windows-based computers. Knowledge of handwriting
recognition, speech recognition, and programming for multilingual support is
recommended.
Run-time requirements
For the latest redistributable, download the Windows 10 platform SDK.
For more information about the requirements of specific API elements, see the
Requirements section in the TFS reference documentation.
In this section
Topic Description
Topic Description
Additional resources
What You Should Know Before Reading This Guide
For the purposes of the Text Services Framework Help, the term "application" refers to a
TSF-enabled application, the term "text service" refers to a TSF text service, and the term
"manager" refers to the TSF manager. Each term applies as stated herein unless
otherwise specified. Text service providers should provide digital signatures with their
binary executables.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The topics in this section provide an overview of support for Touch Hit Testing in
Windows. Touch Hit Testing lets you identify an input target based on whether the
content area of a UI element falls within the contact area or includes the contact point.
Touch hit testing uses complex contact geometry for the entire touch area rather than a
single interpolated x-y coordinate. Using the entire contact geometry greatly improves
precision and accuracy when you're identifying the most likely target of touch input.
In this section
Topic Description
Touch Hit Testing The topics in this section provide the reference specifications for Touch
Reference Hit Testing.
Developer audience
The Touch Hit Testing APIs are designed for developers who are building UI frameworks
that provide a consistent touch-optimized user experience across desktop applications.
Related topics
User Interaction
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The topics in this section provide an overview of Touch Injection for Windows
applications. The Touch Injection APIs enable Windows developers to programmatically
simulate touch input.
In this section
Topic Description
Touch Injection The topics in this section provide the reference specifications for Touch
Reference Injection.
Developer audience
The Touch Injection APIs are designed for developers who are building touch input
automation and test frameworks using C++.
Related topics
User Interaction
Feedback
Was this page helpful? ツ Yes ト No
In this section
Topic Description
Touch Describes how to use the Windows Touch API to build touch-enabled Windows-
Input based applications.
Keyboard Describes how to capture user input from the keyboard and the mouse.
and Mouse
Input
Multipoint Describes the framework that enables you to build applications that support
Mouse multiple mouse devices concurrently on one computer.
Tablet PC Describes how to build applications for the Tablet PC, which is a fully functional
personal computer geared for pen-enabled, handwriting-enabled, and speech-
enabled applications.
DirectInput Describes how to use the DirectInput API to process data from a joystick, or other
game controller. DirectInput is legacy and not available for Windows Store apps.
Use XInput instead.
Text Describes how to use the Microsoft Windows Text Services Framework (TSF), which
Services is an API that enables text services to supply text to applications in a way that does
Framework not require any detailed knowledge of the applications that produce or receive the
text. For example, a text service can provide text input from speech or handwriting
input devices.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Windows supports touch input through the interaction model exposed by the end-to-
end platform and user interface framework of Windows Touch.
Developer audience
The features of Windows Touch are designed for use by experienced C/C++ developers
who are familiar with Component Object Model (COM), UI programming concepts, and
general touch interaction concepts.
Run-time requirements
Windows 7
In this section
Topic Description
Programming Guide This section covers specific topics about software development with the
Windows Touch API targeted to the Windows 7 operating system.
Windows Touch Describes the path to the Windows Touch samples and gives brief
Samples overviews of the samples..
Windows Touch The following sections describe the functionality of the Windows Touch
Programming API.
Reference
Windows Touch This topic provides the definitions of terms that are used by Windows
Glossary Touch.
Feedback
Was this page helpful? ツ Yes ト No
In This Section
Name Description
Keyboard Discusses how the system generates keyboard input and how an application receives
Input and processes that input.
Mouse Discusses how the system provides mouse input to your application and how the
Input application receives and processes that input.
Raw Discusses how the system provides raw input to your application and how an
Input application receives and processes that input.
Feedback
Was this page helpful? ツ Yes ト No
Tablet PC technology in Windows enables input and output of handwriting and speech
data on a Tablet PC as well as interchange of this data with other computers.
In This Section
This section contains programming documentation, sample program descriptions, and
other resources for software development geared for deployment on a Tablet PC.
Getting Started
Shows how to get started with the Tablet PC technology and Microsoft Visual
Studio.
Describes the managed library and Automation API and ink controls, such as the
InkEdit and InkPicture controls, that you can use to build applications for Tablet PC
and computers that support Windows Touch.
Appendices
Contains sections that describe special purpose APIs and references related to
Tablet PC.
Related topics
Frequently Asked Questions
Feedback
Was this page helpful? ツ Yes ト No
In This Section
Name Description
Window Describes the types of window classes, how the system locates them, and the
Classes elements that define the default behavior of windows that belong to them.
Messages Describes messages and message queues and how to use them in your
and Message applications.
Queues
Configuration Describes the functions that can be used to control the configuration of system
metrics and various system attributes such as double-click time, screen saver
time-out, window border width, and desktop pattern.
Multiple Discusses the Multiple Document Interface which is a specification that defines a
Document user interface for applications that enable the user to work with more than one
Interface document at the same time.
Feedback
Was this page helpful? ツ Yes ト No
The Desktop Window Manager runs as a Windows service. It can be enabled and
disabled through the Administrative Tools Control Panel item, under Services, as
Desktop Window Manager Session Manager.
Many of the DWM features can be controlled or accessed by an application through the
DWM APIs. The following documentation describes the features and requirements of
the DWM APIs.
DWM Overviews
DWM Sample Code
DWM Reference
Feedback
Was this page helpful? ツ Yes ト No
Windows also provides predefined dialog boxes that support common menu items such
as Open and Print. Applications that use these menu items should use the common
dialog boxes to prompt for this user input, regardless of the type of application.
In This Section
Name Description
About Dialog Boxes Discusses using dialog boxes in the user interface for your
applications.
Using Dialog Boxes You use dialog boxes to display information and prompt for
input from the user.
Common Dialog Box Library Discusses using the common dialog boxes in the user interface
for your applications.
Name Description
DefDlgProc Calls the default dialog box window procedure to provide default
processing for any window messages that a dialog box with a
private window class does not process.
DialogBox Creates a modal dialog box from a dialog box template resource.
DialogBox does not return control until the specified callback
function terminates the modal dialog box by calling the EndDialog
function.
DialogBoxIndirect Creates a modal dialog box from a dialog box template in memory.
DialogBoxIndirect does not return control until the specified
callback function terminates the modal dialog box by calling the
EndDialog function.
DialogBoxIndirectParam Creates a modal dialog box from a dialog box template in memory.
Before displaying the dialog box, the function passes an
application-defined value to the dialog box procedure as the
lParam parameter of the WM_INITDIALOG message. An application
can use this value to initialize dialog box controls.
DialogBoxParam Creates a modal dialog box from a dialog box template resource.
Before displaying the dialog box, the function passes an
application-defined value to the dialog box procedure as the
lParam parameter of the WM_INITDIALOG message. An application
can use this value to initialize dialog box controls.
EndDialog Destroys a modal dialog box, causing the system to end any
processing for the dialog box.
GetDialogBaseUnits Retrieves the system's dialog base units, which are the average
width and height of characters in the system font. For dialog boxes
that use the system font, you can use these values to convert
between dialog template units, as specified in dialog box templates,
and pixels. For dialog boxes that do not use the system font, the
conversion from dialog template units to pixels depends on the
font used by the dialog box.
Name Description
GetDlgItemText Retrieves the title or text associated with a control in a dialog box.
GetNextDlgTabItem Retrieves a handle to the first control that has the WS_TABSTOP
style that precedes (or follows) the specified control.
MapDialogRect Converts the specified dialog box units to screen units (pixels). The
function replaces the coordinates in the specified RECT structure
with the converted coordinates, which allows the structure to be
used to create a dialog box or position a control within a dialog
box.
MessageBox Displays a modal dialog box that contains a system icon, a set of
buttons, and a brief application-specific message, such as status or
error information. The message box returns an integer value that
indicates which button the user clicked.
MessageBoxEx Creates, displays, and operates a message box. The message box
contains an application-defined message and title, plus any
combination of predefined icons and push buttons. The buttons are
in the language of the system user interface.
MessageBoxIndirect Creates, displays, and operates a message box. The message box
contains application-defined message text and title, any icon, and
any combination of predefined push buttons.
Name Description
Name Description
DM_GETDEFID Retrieves the identifier of the default push button control for a dialog box.
DM_REPOSITION Repositions a top-level dialog box so that it fits within the desktop area. An
application can send this message to a dialog box after resizing it to ensure
that the entire dialog box remains visible.
DM_SETDEFID Changes the identifier of the default push button for a dialog box.
Name Description
WM_CTLCOLORDLG Sent to a dialog box before the system draws the dialog box. By
responding to this message, the dialog box can set its text and
background colors using the specified display device context handle.
WM_ENTERIDLE Sent to the owner window of a modal dialog box or menu that is entering
an idle state. A modal dialog box or menu enters an idle state when no
messages are waiting in its queue after it has processed one or more
previous messages.
WM_GETDLGCODE Sent to the window procedure associated with a control. By default, the
system handles all keyboard input to the control; the system interprets
certain types of keyboard input as dialog box navigation keys. To override
this default behavior, the control can respond to the WM_GETDLGCODE
message to indicate the types of input it wants to process itself.
WM_INITDIALOG Sent to the dialog box procedure immediately before a dialog box is
displayed. Dialog box procedures typically use this message to initialize
controls and carry out any other initialization tasks that affect the
appearance of the dialog box.
WM_NEXTDLGCTL Sent to a dialog box procedure to set the keyboard focus to a different
control in the dialog box.
Name Description
DLGITEMTEMPLATE Defines the dimensions and style of a control in a dialog box. One or
more of these structures are combined with a DLGTEMPLATE structure
to form a standard template for a dialog box.
DLGTEMPLATE Defines the dimensions and style of a dialog box. This structure, always
the first in a standard template for a dialog box, also specifies the
number of controls in the dialog box and therefore specifies the number
of subsequent DLGITEMTEMPLATE structures in the template.
Feedback
Was this page helpful? ツ Yes ト No
A resource is binary data that you can add to the executable file of a Windows-based
application. A resource can be either standard or defined. The data in a standard
resource describes an icon, cursor, menu, dialog box, bitmap, enhanced metafile, font,
accelerator table, message-table entry, string-table entry, or version information. An
application-defined resource, also called a custom resource, contains any data required by
a specific application.
In This Section
Name Description
Carets Discusses carets, which are blinking lines, blocks, or bitmaps in the client
area of a window.
Cursors Discusses cursors, which are small pictures whose location on the screen is
controlled by a pointing device, such as a mouse, pen, or trackball.
Icons Discusses icons, which are bitmap images combined with a mask to create
transparent areas in the picture.
Keyboard Discusses keyboard accelerators, which are keystrokes that provide access
Accelerators to the commands for an application.
Resource Compiler Discusses the resource compiler, Rc.exe, and resource-definition files.
Package resource A set of APIs for working with a resource indexer. A resource indexer is
indexing (PRI) used to generate package resource index (PRI) files for a UWP app.
reference
For more information about creating message resources, see Message Compiler.
Feedback
Was this page helpful? ツ Yes ト No
Data Exchange
Name Description
Clipboard Discusses the clipboard. The clipboard is a set of functions and messages
that enable applications to transfer data.
Data Copy Discusses how to use the data copy message to transfer data from one
application to another.
Dynamic Data Discusses implementing dynamic data exchange for applications that
Exchange cannot use the Dynamic Data Exchange Management Library (DDEML).
Feedback
Was this page helpful? ツ Yes ト No
This content is targeted at developers who are looking to update desktop applications
to handle display scale factor (dots per inch, or DPI) changes dynamically, allowing their
applications to be crisp on any display they're rendered on.
To start, if you're creating a new Windows app from scratch, it is highly recommended
that you create a Universal Windows Platform (UWP) application. UWP applications
automatically—and dynamically—scale for each display that they're running on.
Most legacy desktop UI frameworks have built-in assumptions that the display DPI will
not change during the lifetime of the process. This assumption no longer holds true,
with display DPIs commonly changing several times throughout an application process's
lifetime. Some common scenarios where the display scale factor/DPI changes are:
Multiple-monitor setups where each display has a different scale factor and the
application is moved from one display to another (such as a 4K and a 1080p
display)
Docking and undocking a high DPI laptop with a low-DPI external display (or vice
versa)
Connecting via Remote Desktop from a high DPI laptop/tablet to a low-DPI device
(or vice versa)
Making a display-scale-factor settings change while applications are running
In these scenarios, UWP applications redraw themselves for the new DPI automatically.
By default, and without additional developer work, desktop applications do not. Desktop
applications that don't do this extra work to respond to DPI changes may appear blurry
or incorrectly-sized to the user.
DPI Unaware
DPI unaware applications render at a fixed DPI value of 96 (100%). Whenever these
applications are run on a screen with a display scale greater than 96 DPI, Windows will
stretch the application bitmap to the expected physical size. This results in the
application appearing blurry.
There are two versions of Per-Monitor awareness that an application can register itself
as: version 1 and version 2 (PMv2). Registering a process as running in PMv2 awareness
mode results in:
1. The application being notified when the DPI changes (both the top-level and child
HWNDs)
2. The application seeing the raw pixels of each display
3. The application never being bitmap scaled by Windows
4. Automatic non-client area (window caption, scroll bars, etc.) DPI scaling by
Windows
5. Win32 dialogs (from CreateDialog) automatically DPI scaled by Windows
6. Theme-drawn bitmap assets in common controls (checkboxes, button
backgrounds, etc.) being automatically rendered at the appropriate DPI scale factor
When running in Per-Monitor v2 Awareness mode, applications are notified when their
DPI has changed. If an application does not resize itself for the new DPI, the application
UI will appear too small or too large (depending on the difference in the previous and
new DPI values).
7 Note
The following table shows how applications will render under different scenarios:
System Vista All displays have the same DPI Bitmap-stretching (blurry)
(the DPI of the primary display
at the time the current user
session was started)
Per-Monitor 8.1 The DPI of the display that the Top-level HWND is
application window is primarily notified of DPI change
DPI Windows Application's view of DPI Behavior on DPI change
Awareness Version
Mode Introduced
Per-Monitor Windows 10 The DPI of the display that the Top-level and child
V2 Creators Update application window is primarily HWNDs are notified
(1703) located on of DPI change
Non-client area
Theme-drawn
bitmaps in common
controls (comctl32 V6)
Dialogs (CreateDialog)
The initial support for per-monitor awareness only offered applications the following:
1. Top-level HWNDs are notified of a DPI change and provided a new suggested size
2. Windows will not bitmap stretch the application UI
3. The application sees all displays in physical pixels (see virtualization)
Most desktop applications run under system DPI awareness mode. System-DPI-aware
applications typically scale to the DPI of the primary display (the display that the system
tray was located on at the time the Windows session was started). When the DPI
changes, Windows will bitmap stretch the UI of these applications, which often results in
them being blurry. When updating a System DPI-aware application to become per-
monitor-DPI aware, the code which handles UI layout needs to be updated such that it
is performed not only during application initialization, but also whenever a DPI change
notification (WM_DPICHANGED in the case of Win32) is received. This typically involves
revisiting any assumptions in the code that the UI only needs to be scaled once.
Also, in the case of Win32 programming, many Win32 APIs do not have any DPI or
display context so they will only return values relative to the System DPI. It can be useful
to grep through your code to look for some of these APIs and replace them with DPI-
aware variants. Some of the common APIs that have DPI-aware variants are:
GetSystemMetrics GetSystemMetricsForDpi
AdjustWindowRectEx AdjustWindowRectExForDpi
SystemParametersInfo SystemParametersInfoForDpi
GetDpiForMonitor GetDpiForWindow
It is also a good idea to search for hard-coded sizes in your codebase that assume a
constant DPI, replacing them with code that correctly accounts for DPI scaling. Below is
an example that incorporates all of these suggestions:
Example:
The example below shows a simplified Win32 case of creating a child HWND. The call to
CreateWindow assumes that the application is running at 96 DPI
( USER_DEFAULT_SCREEN_DPI constant), and neither the button's size nor position will be
correct at higher DPIs:
C++
case WM_CREATE:
{
// Add a button
HWND hWndChild = CreateWindow(L"BUTTON", L"Click Me",
WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
50,
50,
100,
50,
hWnd, (HMENU)NULL, NULL, NULL);
}
The updated code below shows:
1. The window-creation code DPI scaling the position and size of the child HWND for
the DPI of its parent window
2. Responding to DPI change by repositioning and resizing the child HWND
3. Hard-coded sizes removed and replaced with code that responds to DPI changes
C++
#define INITIALX_96DPI 50
#define INITIALY_96DPI 50
#define INITIALWIDTH_96DPI 100
#define INITIALHEIGHT_96DPI 50
...
case WM_CREATE:
{
// Add a button
HWND hWndChild = CreateWindow(L"BUTTON", L"Click Me",
WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
0,
0,
0,
0,
hWnd, (HMENU)NULL, NULL, NULL);
if (hWndChild != NULL)
{
UpdateButtonLayoutForDpi(hWndChild);
}
}
break;
case WM_DPICHANGED:
{
// Find the button and resize it
HWND hWndButton = FindWindowEx(hWnd, NULL, NULL, NULL);
if (hWndButton != NULL)
{
UpdateButtonLayoutForDpi(hWndButton);
}
}
break;
When updating a System DPI-aware application, some common steps to follow are:
1. Mark the process as per-monitor DPI aware (V2) using an application manifest (or
other method, depending on the UI framework(s) used).
2. Make UI layout logic reusable and move it out of application-initialization code
such that it can be reused when a DPI change occurs (WM_DPICHANGED in the
case of Windows (Win32) programming).
3. Invalidate any code that assumes that DPI-sensitive data (DPI/fonts/sizes/etc.)
never need to be updated. It is a very common practice to cache font sizes and DPI
values at process initialization. When updating an application to become per-
monitor DPI aware, DPI-sensitive data must be reevaluated whenever a new DPI is
encountered.
4. When a DPI change occurs, reload (or re-rasterize) any bitmap assets for the new
DPI or, optionally, bitmap stretch the currently loaded assets to the correct size.
5. Grep for APIs that are not Per-Monitor DPI aware and replace them with Per-
Monitor DPI-aware APIs (where applicable). Example: replace GetSystemMetrics
with GetSystemMetricsForDpi.
6. Test your application on a multiple-display/multi-DPI system.
7. For any top-level windows in your application that you are unable to update to
properly DPI scale, use mixed-mode DPI scaling (described below) to allow bitmap
stretching of these top-level windows by the system.
Below is an illustration of what this could look like: you update your main application UI
("Main Window" in the illustration) to run with per-monitor DPI awareness while you run
other windows in their existing mode ("Secondary Window").
Prior to the Windows 10 Anniversary Update (1607), the DPI awareness mode of a
process was a process-wide property. Beginning in the Windows 10 Anniversary Update,
this property can now be set per top-level window. (Child windows must continue to
match the scaling size of their parent.) A top-level window is defined as a window with
no parent. This is typically a "regular" window with minimize, maximize, and close
buttons. The scenario that sub-process DPI awareness is intended for is to have
secondary UI scaled by Windows (bitmap stretched) while you focus your time and
resources on updating your primary UI.
While using sub-process DPI scaling enables you to rely on Windows to do some of the
DPI scaling for your application, it can increase the complexity of your application. It is
important that you understand the drawbacks of this approach and nature of the
complexities that it introduces. For more information about sub-process DPI awareness,
see Mixed-Mode DPI Scaling and DPI-aware APIs.
1. Moving application windows back and forth between displays of different DPI
values
2. Starting your application on displays of different DPI values
3. Changing the scale factor for your monitor while the application is running
4. Changing the display that you use as the primary display, signing out of Windows,
then re-testing your application after signing back in. This is particularly useful in
finding code that uses hard-coded sizes/dimensions.
1. Ensure that the mouse cursor will stay in the same relative position on the Window
when dragging between displays
2. Prevent the application window from getting into a recursive dpi-change cycle
where one DPI change triggers a subsequent DPI change, which triggers yet
another DPI change.
If you have application-specific requirements that prevent you from using the suggested
rectangle that Windows provides in the WM_DPICHANGED message, see
WM_GETDPISCALEDSIZE. This message can be used to give Windows a desired size
you'd like used once the DPI change has occurred, while still avoiding the issues
described above.
When an HWND or process is running as either DPI unaware or system DPI aware, it can
be bitmap stretched by Windows. When this happens, Windows scales and converts
DPI-sensitive information from some APIs to the coordinate space of the calling thread.
For example, if a DPI-unaware thread queries the screen size while running on a high-
DPI display, Windows will virtualize the answer given to the application as if the screen
were in 96 DPI units. Alternatively, when a System DPI-aware thread is interacting with a
display at a different DPI than was in use when the current user's session was started,
Windows will DPI-scale some API calls into the coordinate space that the HWND would
be using if it were running at its original DPI scale factor.
When you update your desktop application to DPI scale properly, it can be difficult to
know which API calls can return virtualized values based on the thread context; this
information is not currently sufficiently documented by Microsoft. Be aware that if you
call any system API from a DPI-unaware or system-DPI-aware thread context, the return
value might be virtualized. As such, make sure your thread is running in the DPI context
you expect when interacting with the screen or individual windows. When temporarily
changing a thread's DPI context using SetThreadDpiAwarenessContext, be sure to
restore the old context when you're done to avoid causing incorrect behavior elsewhere
in your application.
Many legacy Windows APIs do not include a DPI or HWND context as part of their
interface. As a result, developers often have to do additional work to handle the scaling
of any DPI-sensitive information, such as sizes, points, or icons. As an example,
developers using LoadIcon must either bitmap stretch loaded icons or use alternate APIs
to load correctly-sized icons for the appropriate DPI, such as LoadImage.
In general, the DPI awareness mode of your process cannot be changed after process
initialization. Windows can, however, forcibly change the DPI awareness mode of your
process if you attempt to break the requirement that all HWNDs in a window tree have
the same DPI awareness mode. On all versions of Windows, as of Windows 10 1703, it is
not possible to have different HWNDs in an HWND tree run in different DPI awareness
modes. If you attempt to create a child-parent relationship that breaks this rule, the DPI
awareness of the entire process can be reset. This can be triggered by:
The table below shows what happens if you attempt to violate this rule:
CreateWindow Forced reset (of Child inherits Forced reset (of caller's
(Cross-Proc) caller's process) (mixed mode) process)
SetParent (Cross- Forced reset (of Forced reset (of Forced reset (of child
Proc) child window's child window's window's process)
process) process)
Related topics
High DPI API Reference
Feedback
Was this page helpful? Yes No
Windows Animation Manager
Article • 08/19/2020
Purpose
The Windows Animation Manager (Windows Animation) enables rich animation of user
interface elements. It is designed to simplify the process of adding animation to an
application's user interface and to enable developers to implement animations that are
smooth, natural, and interactive.
Windows Animation does not perform the rendering; it can be used with any graphics
platform, including Direct2D, Direct3D, or GDI+.
In this section
Topic Description
Windows Animation The developer guide provides an overview of Windows Animation and
Development Guide provides sample code that covers the basic animation tasks.
Windows Animation The topics contained in this section provide the reference specifications
Reference for the Windows Animation Manager.
Windows Animation The topics contained in this section provide details about the code
Samples samples that support the Windows Animation Manager documentation.
Windows Animation This glossary contains terms and acronyms of interest to developers using
Glossary the Windows Animation Manager.
Developer audience
Windows Animation is designed for use by experienced C/C++ developers who are
familiar with COM, UI programming concepts, and general animation concepts.
Run-time requirements
The Windows Animation Manager was introduced in Windows 7.
Applications that require support for Windows Animation Manager on Windows Vista
can utilize the Platform Update for Windows Vista. Applications that require Platform
Update for Windows Vista can have Windows Update verify that it is installed, or
download and install it in the background otherwise. For more information, see About
Platform Update for Windows Vista.
Additional resources
Windows Scenic Animation Overview (video)
Inside Windows 7: Animation Manager Deep Dive and Tutorial (video)
Windows Animation - Advanced Topics (video)
Windows Animation Manager Sample Code
Related topics
Animation Overview (.NET Framework)
Feedback
Was this page helpful? ツ Yes ト No
Purpose
A control is a child window that an application uses in conjunction with another window
to enable user interaction. Controls are most often used within dialog boxes, but they
can also be used in other windows. Controls within dialog boxes provide the user with a
way to type text, choose options, and initiate actions. Controls in other windows provide
a variety of services, such as letting the user choose commands, view status, and view
and edit text. This documentation describes the controls provided by Windows and the
programming elements used to create and manipulate them.
For a list of all Windows controls, including a link to comprehensive overview and
reference information for each control, see Control Library.
Developer audience
Controls are designed for use by C/C++ developers and UI designers. In general,
developers need a moderate level of understanding about UI programming concepts,
Windows API programming, and Unicode.
Run-time requirements
Support for controls is provided by User32.dll and Comctl32.dll. For more information,
see Common Control Versions.
In this section
Topic Description
About Common Controls Provides general information that is common to all controls that are
supported by Comctl32.dll.
Control Messages Explains how Windows messages are used to communicate with
controls.
Custom Draw Describes a service, provided by some controls, that applications can
use to customize various aspects of the control's appearance.
Control Library Provides overviews and reference information about each control
supported by User32.dll and Comctl32.dll.
General Control Reference Provides reference information about programming elements that
apply to multiple controls, not just to a specific control.
Control Spy v2.0 Describes Control Spy, a tool that helps developers understand
common controls.
Visual Styles Describes how the appearance of controls can change depending on
the visual style chosen by the user.
Theme File Format Discusses the format of Theme (.theme) files used in Windows 7 and
Windows Vista.
Feedback
Was this page helpful? ツ Yes ト No
The Windows Ribbon framework is a rich command presentation system that provides a
modern alternative to the layered menus, toolbars, and task panes of traditional
Windows applications. Similar in functionality and appearance to the Microsoft Office
2007 Fluent user interface, the Ribbon framework is composed of a ribbon command
bar that exposes the major features of an application through a series of tabs at the top
of an application window, and a context menu system.
In this section
Topic Description
Ribbon The topics contained in this section explore the fundamentals of the Ribbon
Framework framework.
Overviews
Ribbon The topics contained in this section describe specific aspects of the Windows
Framework Ribbon framework.
Developer
Guides
Ribbon The topics contained in this section describe the set of controls that are included
Framework with the Ribbon framework. The controls listed here are the UI objects in a ribbon
Control that expose Command functionality.
Library
Ribbon The topics contained in this section provide the Reference specifications for the
Framework Ribbon framework.
Reference
Ribbon The topics contained in this section provide details about the code samples that
Framework support the Windows Ribbon framework documentation.
Samples
Ribbon
Framework
Glossary
Developer Audience
The Windows Ribbon framework is designed for use by C/C++ developers and UI
designers.
Recommended proficiencies:
COM programming
Windows API programming
XML/XAML programming
UI programming concepts
General UI concepts
Minimum Requirements
Requirement Value
7 Note
The Platform Update for Windows Vista and Platform Update for Windows
Server 2008 are sets of run-time libraries that enable developers to target
Windows Ribbon applications to both Windows Vista and Windows Server 2008.
The platform updates will be available to all Windows Vista and Windows Server
2008 customers through Windows Update. Third-party applications that require
Platform Update for Windows Vista or Platform Update for Windows Server
2008 can have Windows Update detect whether the required updated is
installed; if it is not, Windows Update will download and install it in the
background.
See Also
Component Object Model (COM)
Windows API
XAML
Feedback
Was this page helpful? ツ Yes ト No
This section provides guidance for integrating and extending the desktop user-facing
features of Windows. You can learn how to ensure your apps and file formats appear
and behave properly in Start, in the Taskbar, on the desktop, and in File Explorer. You
can also ensure your file formats and data stores are indexable and searchable.
In this section
Topic Description
Windows The Windows desktop UI provides users with access to a wide variety of objects
Shell necessary for running applications and managing the operating system. The most
numerous and familiar of these objects are the folders and files that reside on
computer disk drives. There are also a number of virtual objects that allow the user to
perform tasks such as sending files to remote printers or accessing the Recycle Bin.
The Shell organizes these objects into a hierarchical namespace and provides users
and applications with a consistent and efficient way to access and manage objects.
Windows The Windows Property System is an extensible read/write system of data definitions
Property that provides a uniform way of expressing metadata about Shell items. The Windows
System Property system enables you to store and retrieve metadata for Shell items. A Shell
item is any single piece of content, such as a file, folder, email, or contact. A property
is an individual piece of metadata associated with a Shell item.
Windows Windows Search is a desktop search platform that has instant search capabilities for
Search most common file and data types such as email, contacts, calendar appointments,
documents, photos, multimedia, and other formats that can be extended by third
party developers. These capabilities enable users to find, manage, and organize the
increasing amount of data common in home and enterprise environments.
Window Windows provides three main categories of objects: user interface, graphics device
Stations interface (GDI), and kernel. Kernel objects are securable, while user objects and GDI
and objects are not. Therefore, to provide additional security, user interface objects are
Desktops managed using window stations and desktops, which themselves are securable
objects.
Consoles Consoles manage input and output (I/O) for character-mode applications
(applications that do not provide their own graphical user interface).
Related topics
Windows Application UI Development
Feedback
Was this page helpful? ツ Yes ト No
The Windows UI provides users with access to a wide variety of objects necessary for
running applications and managing the operating system. The most numerous and
familiar of these objects are the folders and files that reside on computer disk drives.
There are also a number of virtual objects that allow the user to perform tasks such as
sending files to remote printers or accessing the Recycle Bin. The Shell organizes these
objects into a hierarchical namespace and provides users and applications with a
consistent and efficient way to access and manage objects.
Extending the Shell, which consists of creating a data source (versus consuming
the Shell data model)
Implementing a subset of the Shell data source tasks
Supporting libraries and item views in Windows Explorer
Using the common file dialog
Implementing Control Panel items
Managing notifications
The Shell Developer's Guide provides conceptual material about how the Shell
works and how to use the Shell's API in your application.
The Shell Reference section documents programming elements that make up the
various Shell APIs.
Shell Samples provides links to related code samples.
The following table provides an outline of the Shell Reference section. Unless otherwise
noted, all programming elements are documented in unmanaged C++.
Section Description
Shell Interfaces This section describes the Windows Shell Component Object
Model (COM) interfaces.
Shell Callback Functions This section describes the Windows Shell callback functions
templates.
Shell Lightweight Utility This section describes the Windows Shell lightweight utility
Functions functions provided in Shlwapi.dll.
Shell Macros This section describes the Windows Shell utility macros.
Shell Messages and This section describes the messages and notifications sent by
Notifications elements of the Windows Shell.
Shell Objects for Scripting This section describes the Windows objects implemented by the
and Microsoft Visual Basic Shell for use in scripting and Microsoft Visual Basic.
Shell Objects for C++ This section describes the C++ Windows objects implemented by
the Shell.
Shell Schemas This section describes library, property, and transfer manifest
schemas used by the Windows Shell.
Shell Structures This section describes the Windows Shell structures used in the
Shell APIs.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Windows Property System is an extensible read/write system of data definitions that
provides a uniform way of expressing metadata about Shell items. The Windows
Property system in Windows Vista and later enables you to store and retrieve metadata
for Shell items. A Shell item is any single piece of content, such as a file, folder, email, or
contact. A property is an individual piece of metadata associated with a Shell item.
Developer audience
Before you start reading the Windows Property System SDK documentation, you should
have a fundamental understanding of the following:
For uses of the Windows Property System, see Property System Overview: Development
Scenarios.
Run-time requirements
The supported run-time environment for using the Windows Property System is
Windows Vista or later and the Windows Software Development Kit (SDK). Windows XP
and Microsoft Windows Desktop Search (WDS) 3.0 or later also include a subset of the
Windows Property System. For the Windows 7 or updated Windows Vista SDK
download, see the Windows SDK .
In this section
Property System Overview
Windows Property System Developer's Guide
Property System Reference
Property System Code Samples
Feedback
Was this page helpful? ツ Yes ト No
Windows Search is a desktop search platform that has instant search capabilities for
most common file and data types such as email, contacts, calendar appointments,
documents, photos, multimedia, and other formats that can be extended by third party
developers. These capabilities enable users to find, manage, and organize the increasing
amount of data common in home and enterprise environments.
In this section
Windows Search Overview
Windows Search Developer's Guide
Windows Search Reference
Windows Search Code Samples
Related Search Technologies
Federated Search in Windows
Windows Search Glossary
Additional Resources
For community-supported question and discussion message boards on Search
technologies, see MSDN Forum: Windows Desktop Search Development .
To download the Search Code Samples:
Windows Search Samples
To download the Windows SDK:
For Windows 10: Windows 10 SDK
For Windows 7: Windows SDK for Windows 7 and .NET Framework
Feedback
Was this page helpful? ツ Yes ト No
Windows provides three main categories of objects: user interface, graphics device
interface (GDI), and kernel. Kernel objects are securable, while user objects and GDI
objects are not. Therefore, to provide additional security, user interface objects are
managed using window stations and desktops, which themselves are securable objects.
Feedback
Was this page helpful? ツ Yes ト No
emptyvc.h
mmcobj.h
provider.h
reconcil.h
searchapi.h
shldisp.h
shlobj_core.h
windowsdefender.h
wmiutils.h
Enumerations
_ColumnSortOrder
Functions
AddDesktopItem
AddDesktopItemWithUI
Adds a desktop item to the Active Desktop after displaying user interfaces that confirm the
addition of the desktop item, verifying security zone permissions, and asking if the user wants to
create a subscription.
AddUrl
ApplyChanges
Applies changes to the Active Desktop and saves them in the registry.
Deactivate
Notifies the handler that the disk cleanup manager is shutting down.
GenerateDesktopItemHtml
GetDesktopItem
GetDesktopItemByID
GetDesktopItemBySource
GetDesktopItemCount
GetDesktopItemOptions
GetPattern
GetProgressFeedbackMaxEstimate
GetSpaceUsed
Requests the amount of disk space that the disk cleanup handler can free.
GetWallpaper
GetWallpaperOptions
Initialize
Initializes the disk cleanup handler, based on the information stored under the specified registry
key.
InitializeEx
Initializes the disk cleanup handler. It provides better support for localization than Initialize.
ModifyDesktopItem
Purge
PurgeProgress
Called periodically by a disk cleanup handler to update the disk cleanup manager on the progress
of a purge of deletable files.
Reconcile
Reconciles the state of an object with one or more other objects. The reconciliation updates the
internal state of the object by merging the states of all objects to form a combined state.
RemoveDesktopItem
ScanProgress
Called by a disk cleanup handler to update the disk cleanup manager on the progress of a scan
for deletable files.
SetAbortCallback
Sets the object through which the initiator can asynchronously terminate a reconciliation. A
briefcase reconciler typically sets this object for reconciliations that are lengthy or involve user
interaction.
SetDesktopItemOptions
SetPattern
SetProgressFeedback
Indicates the amount of progress the briefcase reconciler has made toward completing the
reconciliation.
SetSafeMode
SetWallpaper
SetWallpaperOptions
ShowProperties
UpdateAllDesktopSubscriptions
WDEnable
WDStatus
Interfaces
IActiveDesktop
Allows a client program to manage the desktop items and wallpaper on a local computer.
IActiveDesktopP
IADesktopP2
IEmptyVolumeCache
Used by the disk cleanup manager to communicate with a disk cleanup handler. Exposes methods
that enable the manager to request information from a handler, and notify it of events such as the
start of a scan or purge.
IEmptyVolumeCache2
Extends IEmptyVolumeCache. This interface defines one additional method, InitializeEx, that
provides better localization support than IEmptyVolumeCache::Initialize.
IEmptyVolumeCacheCallBack
Exposes methods that are used by a disk cleanup handler to communicate with the disk cleanup
manager.
IReconcilableObject
Exposes methods that reconcile a given document. The briefcase reconciler is responsible for
implementing this interface.
IReconcileInitiator
Exposes methods that provide the briefcase reconciler with the means to notify the initiator of its
progress, to set a termination object, and to request a given version of a document. The initiator is
responsible for implementing this interface.
Feedback
Was this page helpful? ツ Yes ト No
Make use of available APIs and services provided by Windows to install, manage, and
service your desktop apps.
In this section
Topic Description
Packaging, Programmatically create Windows app packages (including UWP and desktop
deployment, apps), and install, update, query, and uninstall apps.
and query
of Windows
apps
Restart The Restart Manager API can eliminate or reduce the number of system restarts
Manager that are required to complete an installation or update.
Update The Update Orchestrator API schedules your background software updates with
Orchestrator user impact in mind.
Windows This section documents the notifications used to detect and possibly repair an
Setup and application after a setup or migration has occurred. These notifications can also be
Migration used to suspend operations during the volatile setup or migration experience.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Isolated Applications and Side-by-side Assemblies is a Microsoft Windows solution that
reduces versioning conflicts in Windows-client applications. With Windows, application
developers can build isolated applications that are fully self-describing and unaffected
by changes to the registry, other applications, or other versions of assemblies running
on the system. Application authors and administrators can use manifests to manage the
sharing of side-by-side assemblies after deployment on either a global or per-
application basis. Customers benefit from isolated applications that are more stable and
more reliably updated.
Where applicable
Isolated applications and side-by-side assembly sharing can be used to develop
applications that safely share operating system assemblies. Developers can use this
technology to correct DLL versioning conflicts caused by an incompatible version of a
shared assembly.
If your application must consistently get the version of a component you have tested, it
is possible to isolate your application so that it will always be run with the tested version
of the component on the user's computer.
Developer audience
This documentation is primarily intended for software developers, application
developers, and network administrators:
Software developers who want to create isolated applications that will use the
side-by-side assemblies made available by Microsoft and other side-by-side
assembly publishers.
Application developers who are interested in creating their own side-by-side
assemblies to isolate their applications.
Network administrators who want more information about isolated applications.
As the primary reference for side-by-side assembly sharing and isolated applications,
this documentation provides general background information about authoring
manifests and side-by-side assemblies, installing isolated applications and side-by-side
assemblies, and using the Activation Context API.
Run-time requirements
Windows Server 2003 and later or Windows XP and later is required to use side-by-side
assemblies and manifests to isolate applications and to use the Activation Context API.
In this section
Topic Description
Feedback
Was this page helpful? ツ Yes ト No
You deploy, manage, and service Windows apps (including UWPs and desktop apps)
through .msix/.appx app packages based on the OPC format. Each app package contains
the files that constitute the app, and a manifest file that describes the software to
Windows.
Introduction
Typically, developers create and sign app packages using Visual Studio. For more info,
see Package a UWP app with Visual Studio.
The Microsoft Store makes it easy to build, submit, and sell your apps to customers
around the world. For more info, see App submissions.
Using the packaging, deployment, and query APIs, you can programmatically perform
these tasks:
In this section
Topic Description
How to create an app Learn how to create an app package using the packaging API.
package (C++)
How to create an app Learn how to use MakeCert and Pvk2Pfx to create a test code signing
package signing certificate, so that you can sign your app packages.
certificate
Topic Description
How to sign an app Learn how to use SignTool to sign your app packages so they can be
package using deployed.
SignTool
How to troubleshoot An app deployment failure can be caused by a failure to validate the
app package digital signature of the app package. Learn how to recognize these
signature errors failures, and what to do about them.
How to Learn how to sign an app package by using the SignerSignEx2 function.
programmatically
sign an app package
(C++)
How to develop an Learn how to develop an app that uses a custom file to pass info from the
OEM app that uses a OEM to the app.
custom file
Extract app package Learn how to extract files from an app package using the packaging API.
contents (C++)
Query app package Learn how to get info from an app package manifest using the packaging
manifest info (C++) API
Troubleshooting Provides info to help you troubleshoot problems you experience when
packaging, deploying, or querying an app package.
Packaging API The packaging API creates, reads, and writes app packages.
reference
Deployment API The deployment API installs, updates, and uninstalls app packages.
reference
Query API reference The query API gets info about the app packages installed on the system.
Tools and PowerShell Use these tools and cmdlets to create, install, and manage app packages.
cmdlets
SDK samples Download SDK samples that demonstrate the packaging, deployment,
and query APIs for Windows apps.
Glossary Learn about the terms related to packaging, deployment, and query of
Windows apps.
Related topics
Concepts
App packages and deployment
Other Reference
Windows.ApplicationModel.Package
Windows.ApplicationModel.PackageId
Windows.Management.Deployment.PackageManager
Windows.Management.Deployment.PackageUserInformation
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Developer licensing enables you to get, check, or remove a developer license.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Restart Manager API can eliminate or reduce the number of system restarts that are
required to complete an installation or update. The primary reason software updates
require a system restart during an installation or update is that some of the files that are
being updated are currently being used by a running application or service. The Restart
Manager enables all but the critical system services to be shut down and restarted. This
frees files that are in use and allows installation operations to complete.
Where applicable
The Restart Manager DLL exports a public C interface that can be loaded by standard or
custom installers. The installer can use the Restart Manager to register files that should
be replaced during the installation of an application or update. Then during a
subsequent update or installation, the installer can use the Restart Manager to
determine which files cannot be updated because they are currently in use. Restart
Manager can shut down and restart the non-critical services or applications that are
currently using those files. Installers can direct the Restart Manager to shut down and
restart applications or services based on the file in use, the process ID (PID), or the
short-name of a Windows service.
Developer audience
This documentation is intended for developers of installation applications who want to
take advantage of the installer capabilities in Windows Vista or Windows Server 2008.
Applications that use the Windows Installer version 4.0 for installation and servicing
automatically use the Restart Manager to reduce system restarts. Custom installers can
also be designed to call the Restart Manager API to shut down and restart applications
and services. In cases where a system restart is unavoidable, installers can use the
Restart Manager API to schedule restarts in such a way that it minimizes the disruption
of the user's work flow.
Run-time requirements
The Restart Manager API is available beginning with Windows Vista and Windows Server
2008. Restart Manager consists of a single DLL that applications can load to access the
Restart Manager API.
In this section
Topic Description
About Restart Manager Overview topics that describe the Restart Manager.
Using Restart Manager Overview topics about using the Restart Manager API.
Restart Manager Reference Reference topics for the Restart Manager API.
Feedback
Was this page helpful? ツ Yes ト No
Windows 20H1 includes a first-generation solution for automatic software update use
cases that were adopted by OS updates and Store App updates and exposes an initial
‘Limited Access’ version of this API for a select set of updaters of 'user-mode' apps as
described below.
Features
Dynamically registers software updaters
Invokes registered software updaters during optimal times, such as during user
absence, to update 'user mode apps'.
Developer Audience
) Important
Use UpdateOrchestrator API if you already have background software updaters for
Win32 'user mode' applications such as Adobe's updater for Acrobat Reader or Valve's
Steam. This interface is not needed for UWP/Store applications as the Microsoft Store
already takes advantage of this functionality for software updates.
To provide the best customer experience, this initial API release is scoped to a select set
of registered updaters that meet the following criteria:
Updates for 'user mode' applications only
Do not involve BIOS/Firmware/Device or Software Drivers
Updating BIOS, firmware, or device/software drivers that have not passed a
common quality criteria pose a substantial risk, particularly when a user is not
present.
Participating in the usage of this API entails being able to vouch for all content
downloaded and installed by your background software updaters on users systems
via audits.
The initial release of UpdateOrchestrator API as limited access feature is only for
updaters that meet above criteria at this time.
Our aim is to improve the functionality of this API and reduce impact from multiple
automatic software updaters on Windows. We would appreciate your input through this
brief survey to help us understand how UpdateOrchestrator API can better serve your
developer needs.
) Important
Requirements
To plug into the expedited app framework, the app must meet the following
requirements:
Registration
OEMs can register an application to be expedited by writing a new key in the existing
staging folder for expedited apps:
HKLM\Software\Microsoft\WindowsUpdate\Orchestrator\UScheduler_OOBE
Each OEM provided registration is in the form of a SubKey (with a unique name that will
be used to identify this expedited app), and a set of registry values to indicate specific
options for this application. The content of each key is in the following format:
Under the Subkey for the expedite app registration, OEMs need to create two values:
ノ Expand table
Required String PFN The Package Family Name of the app (ex:
Microsoft.WindowsStore_8wekyb3d8bbwe)
Maximum is 30
Optional Array ExcludedRegions A JSON array of strings for regions where this
(String) app should not be expedited. Each entry in
the array corresponds to the 2 letter ISO
3166-1 country code of the desired region.
For example, ["US"] would prevent this flow
on devices where the region is United States.
{
"PFN": "PFNName",
"Endpoint": "SSL_URI",
"AllowedInOobe": false,
"MaxRetryCount": 3,
"TimeoutDurationInMinutes": 15,
"ExcludedRegions": ["CN", "FR"]
}
Execution
The Universal Orchestrator framework automatically invokes each of the registered apps,
in sequence based on relative priority, within the first 30 minutes of a user reaching the
Desktop on a new device (or during User OOBE if AllowedInOobe is set to true). Each
registered application added by the OEM registration process will be attempted until
either:
It is successfully installed
It surpasses the maximum amount of failures specified in MaxRetryCount. After
each failure, the app will enter a cooldown period of 30 minutes before it is
attempted again.
The Universal Orchestrator framework will not perform expedited attempts if any of the
following conditions are true:
) Important
Exercise caution when opting to expedite apps via this framework, as the update
operations occur when the device may be in use and can cause a negative
performance impact of the user experience on a new device.
Feedback
Was this page helpful? Yes No
7 Note
This documentation is intended for software developers who want to use Windows
Installer to build installer packages for applications.
If you're looking for a Redistributable for Windows Installer 4.5 and earlier, see
Windows Installer Redistributables. There's no Redistributable for Windows
Installer 5.0. This version is included with the operating system in Windows 7,
Windows Server 2008 R2, and later client and server releases, including Windows
10.
This documentation describes Windows Installer 5.0 and earlier versions. Not all the
capabilities available in later Windows Installer versions are available in earlier versions.
This documentation doesn't describe versions earlier than Windows Installer 2.0.
Installation packages and patches that are created for Windows Installer 2.0 can still be
installed by using Windows Installer 3.0 and later.
Windows Installer 3.0 and later can install multiple patches with a single transaction that
integrates installation progress, rollback, and reboots. The installer can apply patches in
a specified order regardless of the order that the patches are provided to the system.
Patching using Windows Installer 3.0 only updates files affected by the patch and can be
significantly faster than earlier installer versions. Patches installed with Windows Installer
3.0 or later can be uninstalled in any order to leave the state of the product the same as
if the patch was never installed.
Accounts with administrator privileges can use the API of Windows Installer 3.0 and later
to query and inventory product, feature, component, and patch information. The
installer can be used to read, edit, and replace source lists for network, URL, and media
sources. Administrators can enumerate across user and install contexts, and manage
source lists from an external process.
Windows Installer 4.5 and later can install multiple installation packages using
transaction processing. If all the packages in the transaction can't be installed
successfully, or if the user cancels the installation, the Windows Installer can roll back
changes and restore the computer to its original state. The installer ensures that all the
packages belonging to a multiple-package transaction are installed or none of the
packages are installed.
Beginning with Windows Installer 5.0, a package can be authored to secure new
accounts, Windows Services, files, folders, and registry keys. The package can specify a
security descriptor that denies permissions, specifies inheritance of permissions from a
parent resource, or specifies the permissions of a new account. For more information,
see Securing resources.
The Windows Installer 5.0 service can enumerate all components installed on the
computer and obtain the key path for the component. For more information, see
Enumerating components.
By Using services configuration, Windows Installer 5.0 packages can customize the
services on a computer. Setup developers can use Windows Installer 5.0 and Single
package authoring to develop single installation packages capable of installing an
application in either the per-machine or per-user installation context.
Windows Installer 5.0, running on Windows Server 2012 or Windows 8, supports the
installation of approved apps on Windows RT. A Windows Installer package, patch, or
transform that hasn't been signed by Microsoft can't be installed on Windows RT. The
Template Summary property indicates the platform that is compatible with an
installation database and in this case should include the value for Windows RT.
Developer audience
This documentation is intended for software developers who want to make applications
that use Windows Installer. It provides general background information about
installation packages and the installer service. It contains complete descriptions of the
application programming interface and elements of the installer database. This
documentation also contains supplemental information for developers who want to use
a table editor or a package creation tool to make or maintain an installation.
Run-time requirements
Windows Installer 5.0 is included with Windows 7, Windows Server 2008 R2, and later
releases. There's no Redistributable for Windows Installer 5.0.
Versions earlier than Windows Installer 5.0 were released with Windows Server 2008,
Windows Vista, Windows Server 2003, Windows XP, and Windows 2000. Windows
Installer Redistributables are available for Windows Installer 4.5 and some earlier
versions.
Windows Installer 4.5 requires Windows Server 2008, Windows Vista, Windows XP
with Service Pack 2 and later, or Windows Server 2003 with Service Pack 1 and
later.
Windows Installer 4.0 requires Windows Vista or Windows Server 2008. There's no
Redistributable for installing Windows Installer 4.0 on other operating systems. An
updated version of Windows Installer 4.0, which doesn't add any new features, is
available in Windows Vista with Service Pack 1 and Windows Server 2008.
Windows Installer 2.0 is contained in Windows Server 2003 and Windows XP.
In this section
Article Description
Article Description
Feedback
Was this page helpful? ツ Yes ト No
In this section
Topic Description
Core Audio APIs A low-level API for audio capture and audio rendering, which can be used
to achieve minimum latency or to implement features that might not be
entirely supported by higher-level media APIs.
Windows Media Using the Windows Media Center Software Development Kit (SDK),
Center Software developers can create rich media applications and services for use with
Development Kit mouse, keyboard, and remote control on a Media Center PC.
Windows Media Supports reading and writing ASF files, decoding and encoding Windows
Format 11 SDK Media audio and video, and streaming ASF over a network.
Windows Media Enables applications to discover media devices on the home network, and
Library Sharing share media libraries on the home network and the Internet.
Services
Windows Media Extends the capabilities of Windows Media Player and Windows Media
Player SDK Player Mobile.
Windows Media Supports digital rights management (DRM) for protecting Windows Media
Rights Manager files.
10.1.2 SDK
Windows Media Provides an automation-based API for managing Windows Media Services
Services 9 Series in Windows Server.
Topic Description
Windows Media Models the Digital Media Renderer (DMR) and Digital Media Server (DMS)
Streaming API devices, as defined by the DLNA guidelines, for easy programmatic use.
Windows Media Provides a built-in interface that shows the user information about the
Transport Controls currently playing media, such as the title of a song or video. Also provides
the user with a common and familiar way to control media playback.
Windows Movie Enables customization of Windows Movie Maker 6.0 and Microsoft
Maker 6.0 and Windows DVD Maker 1.0.
Windows DVD
Maker 1.0 SDK
Legacy Audio and Technologies that are obsolete and should not be used in new applications.
Video
Related topics
DirectX Graphics and Gaming
Graphics
Feedback
Was this page helpful? ツ Yes ト No
7 Note
For code examples, see SDK samples that use the core audio APIs.
The core audio APIs provide the means for audio applications to access audio endpoint
devices such as headphones and microphones. The core audio APIs serve as the
foundation for higher-level audio APIs such as Microsoft DirectSound and the Windows
multimedia waveXxx functions. Most applications communicate with the higher-level
APIs, but some applications with special requirements might need to communicate
directly with the core audio APIs.
Starting with Windows 7, the existing APIs have been improved and new APIs have been
added to support new scenarios. The stream and session management APIs have been
improved so that the application can now enumerate and get extended control over the
audio session. By using the new APIs, the application can implement a custom stream
attenuation experience. New device-related APIs provide access to the driver properties
of the endpoint devices.
Section Description
About the Windows Core Provides an overview of the Windows core audio APIs and
Audio APIs describes basic concepts.
Programming Guide Describes the key features of the core audio APIs and how to use
them.
Programming Reference Provides C++ reference information for the core audio APIs.
Related topics
Media Technologies for Windows
Feedback
Was this page helpful? ツ Yes ト No
[The feature associated with this page, DirectShow, is a legacy feature. It has been
superseded by MediaPlayer, IMFMediaEngine, and Audio/Video Capture in Media
Foundation. Those features have been optimized for Windows 10 and Windows 11.
Microsoft strongly recommends that new code use MediaPlayer, IMFMediaEngine and
Audio/Video Capture in Media Foundation instead of DirectShow, when possible.
Microsoft suggests that existing code that uses the legacy APIs be rewritten to use the
new APIs if possible.]
The DirectShow headers, libraries, SDK tools, and samples are available in the Windows
SDK .
7 Note
Previous versions of the DirectShow SDK were included in the DirectX SDK. The last
version of the DirectX SDK to include DirectShow was DirectX 9.0 SDK Update -
(February 2005) Extras. After this version, DirectShow was moved to the Windows
SDK. To get the latest version of the DirectShow headers, libraries, and samples,
download the Windows SDK.
Introduction to DirectShow
Getting Started
About DirectShow
Using DirectShow
DirectShow Samples
DirectShow Reference
DirectX Media Objects
DirectShow Editing Services
Appendixes
Related topics
Media Technologies for Windows
Feedback
Was this page helpful? ツ Yes ト No
Media Foundation is the next generation multimedia platform for Windows that enables
developers, consumers, and content providers to embrace the new wave of premium
content with enhanced robustness, unparalleled quality, and seamless interoperability.
Topic Description
What's New for Describes what has changed in the latest version of Media Foundation.
Media Foundation
About Media Lists the headers and libraries you will need, and describes the tools and
Foundation code samples that are provided to make Media Foundation development
easier.
Media Foundation Describes the code samples for Media Foundation provided in the
SDK Samples Windows SDK.
Media Foundation Contains reference topics for all of the Media Foundation APIs.
Programming
Reference
Related topics
Media Technologies for Windows
Feedback
Was this page helpful? ツ Yes ト No
[The feature associated with this page, Windows Media Format 11 SDK, is a legacy
feature. It has been superseded by Source Reader and Sink Writer. Source Reader and
Sink Writer have been optimized for Windows 10 and Windows 11. Microsoft strongly
recommends that new code use Source Reader and Sink Writer instead of Windows
Media Format 11 SDK, when possible. Microsoft suggests that existing code that uses
the legacy APIs be rewritten to use the new APIs if possible.]
The Windows Media Format SDK is a component of the Microsoft Windows Media
Software Development Kit (SDK). Other components include the Windows Media
Services SDK, Windows Media Encoder SDK, Windows Media Rights Manager SDK,
Windows Media Device Manager SDK, and Windows Media Player SDK.
The Windows Media Format SDK provides application developers with access to the
components of the Windows Media Format. These components include the Advanced
Systems Format (ASF) file container, the Windows Media Audio and Video codecs, basic
network streaming capability, and digital rights management. The objects of the
Windows Media Format SDK manipulate the components of Windows Media at a low
level; the other components of the Windows Media SDK include objects that work on a
higher level.
The primary purpose of the Windows Media Format SDK is to enable developers to
create applications that play, write, edit, encrypt, and deliver Advanced Systems Format
(ASF) files and network streams. These files and streams commonly contain audio and
video content encoded using the Windows Media Audio and Video codecs. However,
ASF can contain any type of data. For more information about the Advanced Systems
Format container structure, see Overview of the ASF Format.
Support for industry-leading codecs. The Windows Media Format 11 SDK includes
the Microsoft Windows Media Video 9 codec and the Microsoft Windows Media
Audio 9.1 codec. Both of these codecs provide exceptional encoding of digital
media content. New for this release is the Windows Media Video 9 Advanced
Profile codec, which provides optimizations for broadcast video. This SDK also
includes the Microsoft Windows Media Video 9 Screen codec for compressing
computer-screen activity during sessions of user applications, and the Windows
Media Audio 9.1 Voice codec, which encodes low-complexity audio such as speech
and intelligently adapts to more complex audio such as music, for superior
representation of combined voice-music scenarios.
Support for writing ASF files. Files are created based on customizable profiles,
enabling easy configuration and standardization of files. This SDK can be used to
write files in excess of 2 gigabytes, enabling longer, better-quality, continuous files.
Support for reading ASF files. This SDK provides support for reading local ASF files
as well as reading ASF data being streamed over a network. Support is also
provided for many advanced reading features, such as native support for multiple
bit rate (MBR) files, which contain multiple streams with the same content encoded
at different bit rates. The reader automatically selects which MBR stream to use,
depending upon available bandwidth at the time of playback.
Support for delivering ASF streams over a network. This SDK provides support for
delivering ASF data through HTTP to remote computers on a network, and also for
delivering data directly to a remote Windows Media server.
Support for editing metadata in ASF files. Information about a file and its content
is easily manipulated with this SDK. Developers can use the robust system of
metadata attributes included in the SDK, or create custom attributes to suit their
needs.
Support for content editing applications. This SDK enables applications to seek to
points within a file by presentation time and by video frame. In addition, files
created by using the Windows Media Format SDK can maintain timestamps in
formats used in film and television production.
Support for reading and editing metadata in MP3 files. This SDK provides
integrated support for reading MP3 files with the same methods used to read ASF
files. Applications built with the Windows Media Format SDK can also edit
metadata attributes in MP3 files using built-in support for the most common ID3
tags used by content creators.
Support for Digital Rights Management protection. This SDK provides methods for
reading and writing ASF files and network streams that are protected by Digital
Rights Management to prevent unauthorized playback or copying of the content.
To download the Windows Media Format SDK, see the Windows Media Downloads
page at the Microsoft Web site.
This document describes how you can develop digital media applications using the
Windows Media Format SDK. It is divided into the following sections.
7 Note
Although this document contains information about the latest version of the
Windows Media Format SDK, most of the features it describes are supported by
older versions of the SDK. Reference pages for the methods, functions, structures,
and enumerations of the Windows Media Format SDK include version
requirements.
Section Description
About the Provides overview and background information that you should be familiar
Windows Media with before attempting to create applications.
Format SDK
Programming Provides detailed instructions for performing various tasks, such as reading,
Guide writing and indexing files, protecting files with Digital Rights Management,
streaming ASF data over a network, and so on.
Windows Media Provides instructions for using the Windows Media Audio and Video codec
Audio and Video digital media objects (DMOs) directly.
Codec Interfaces
Glossary Defines the terms used in the Windows Media Format SDK documentation.
Feedback
Was this page helpful? ツ Yes ト No
[The feature associated with this page, Windows Media Player SDK, is a legacy feature. It
has been superseded by MediaPlayer. MediaPlayer has been optimized for Windows 10
and Windows 11. Microsoft strongly recommends that new code use MediaPlayer
instead of Windows Media Player SDK, when possible. Microsoft suggests that existing
code that uses the legacy APIs be rewritten to use the new APIs if possible.]
The Windows Media Player SDK documents programming technologies that can be
used to extend the capabilities of Windows Media Player and Windows Media Player
Mobile. These technologies are documented in the following sections:
Section Description
About This section provides details about how to find specific information in the SDK. It
the includes a section about new features and information about how to use the samples
Windows included with the SDK.
Media
Player
SDK
Windows The Microsoft Windows Media Player control is a Microsoft ActiveX control used for
Media adding digital media playback capabilities to webpages. It provides a programming
Player interface for rendering digital media files and streams.
Object
Model
Windows Skins are an XML-based technology used to customize the user interface of Windows
Media Media Player. You can also use Windows Media Player Mobile skins to customize the
Player user interface of Windows Media Player Mobile.
Skins
Windows Plug-ins are objects that extend Windows Media Player functionality in a variety of
Media ways. Plug-in types include custom visualizations, user interface plug-ins, DSP plug-
Player ins, and rendering plug-ins. Windows Media Player Mobile plug-in support is also
Plug-ins described in this section.
Section Description
Windows Windows Media Metafiles are XML documents that provide information about a
Media media item and its presentation. Metafiles can be used to organize media items into
Metafiles playlists that can include functionality for seamless stream switching, ad insertion, and
other features.
Windows Playlists are files that use XML elements to define either a dynamic "smart" playlist of
Media media items or a static set of media items.
Playlists
Windows Windows Media Player provides functionality that enables digital media content
Media providers to integrate their services with Windows Media Player. Integration between
Player the Player and an online digital media store enables the user to locate content,
Online download and manage files, play content, and copy content to CDs or devices.
Stores
Windows Some features of the SDK apply to Windows Media Player, the Windows Media Player
Media ActiveX control, and Windows Media Player Mobile. This section provides information
Player about these features.
Glossary This section contains definitions of terms used throughout the SDK.
7 Note
Installing the Windows SDK does not install Windows Media Player or Windows
Media Player Mobile. You must have Windows Media Player installed to use the
material in this SDK. Windows Media Player Mobile is a part of Windows Mobile,
which is available only on a Pocket PC or Smartphone supplied by a device
manufacturer or mobile operator.
Related topics
Media Technologies for Windows
Feedback
Was this page helpful? ツ Yes ト No
[The feature associated with this page, Windows Media Streaming API, is a legacy
feature. It has been superseded by Media Casting. Media Casting has been optimized
for Windows 10 and Windows 11. Microsoft strongly recommends that new code use
Media Casting instead of Windows Media Streaming API, when possible. Microsoft
suggests that existing code that uses the legacy APIs be rewritten to use the new APIs if
possible.]
Purpose
The Media Streaming API models the Digital Media Renderer (DMR) and Digital Media
Server (DMS) devices as defined by the DLNA guidelines for easy programmatic use,
enabling developers to create applications with Digital Media Controller (DMC), Digital
Media Player (DMP) and Push Controller (+PU+) capabilities as defined by the DLNA
guidelines.
In this section
Topic Description
Delegates The Media Streaming API provides the following event handler functions.
Developer audience
Media Streaming API is designed for use by C++ developers creating digital media
applications that interact with DLNA devices.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Microsoft Windows multimedia support enables applications to use sound and video.
Where applicable
Windows multimedia can be used in all Windows-based applications.
Developer audience
Windows multimedia is designed for use by C/C++ programmers. Familiarity with the
Windows graphical user interface and message-driven architecture is required.
In this section
Topic Description
MCI General information about how to use the Media Control Interface.
MCIWnd Window General information about a window class that can serve as a control for
Class media playback.
Video for Windows General information about how to use Video for Windows.
Feedback
Was this page helpful? ツ Yes ト No
Windows has APIs, components, and services that support your desktop apps in data
access and storage. They provide:
In this section
Topic Description
Backup Registry keys for backup and restore allow backup applications to communicate
with other applications and services about backup and restore operations. The
tape backup API enables backup applications to archive data to tape. The single-
instance store (SIS) API enables backup applications to use the SIS architecture for
maintaining duplicate files with a minimum of overhead. The raw encryption API
enables backup and restore of encrypted files.
Cloud Sync Starting in Windows 10, version 1709, Windows provides the cloud files API. This
Engines API formalizes support for cloud sync engines, and handles tasks such as creating
and managing placeholder files and directories. Users of this API are typically sync
providers and to some extent, Windows applications.
Common The Common Log File System (CLFS) API provides a high-performance, general-
Log File purpose log file subsystem that dedicated client applications can use and multiple
System clients can share to optimize log access.
Distributed The Distributed File System (DFS) functions provide the ability to logically group
File System shares on multiple servers and to transparently link shares into a single
hierarchical namespace.
Extensible The Extensible Storage Engine (ESE) is an advanced indexed and sequential access
Storage method (ISAM) storage technology. ESE enables applications to store and retrieve
Engine data from tables using indexed or sequential cursor navigation.
File The File Management APIs provide a way for developers to discover and restore
Management deleted files from unencrypted volumes. The File Management APIs also provide
API (FMAPI) the ability to use a password or recovery key file for the discovery and recovery of
deleted files from BitLocker-encrypted volumes.
Image The image mastering API enables applications to stage and burn images to CD
Mastering and DVD optical storage media. Other disc-like media that lay images in the same
API manner can also use this API.
Imaging API The Windows Imaging Interface Reference describes the programmatic method
for managing Windows image (.wim) files.
iSCSI The iSCSI Discovery Library API allows initiators to locate any accessible target
Discovery devices as well as the associated addresses with a minimal amount of required
Library API configurations.
iSCSI The iSCSI Software Target API provides a WMI interface for managing Microsoft
Software iSCSI Software Target, such as creating virtual disks and presenting it to the client.
Target API
Local File Describes directory, disk, file, and volume management. Also describes
Systems Transactional NTFS (TxF).
MSXML Microsoft XML Core Services (MSXML) allows customers who use JScript, Visual
Basic Scripting Edition (VBScript), and Microsoft Visual Studio to build high-
performance XML-based applications.
Non-Volatile Allows developers to utilize NVML APIs in order to code for persistent memory in
Memory Windows environments.
Library
(NVML)
Offline Files The Offline Files API allows applications to control and monitor the behavior of
Offline Files programmatically.
Packaging The packaging APIs provide support for applications that produce or consume
files, called packages, that are compliant with the Open Packaging Conventions.
Topic Description
Projected The Projected File System (ProjFS) allows a user-mode application to project a
File System hierarchical data store into the file system, where it appears as files and
directories. Content is cached to the local file system on demand, allowing very
large data stores to appear local without overwhelming local storage.
User State The User State Management API provides an alternative way to configure and
Management retrieve current status for the Windows components related to user state. The
API Windows components that expose configuration and status through these APIs
are Folder Redirection, Offline Files, and Roaming Profiles.
Virtual Disk The Virtual Disk Service (VDS) manages a wide range of storage configurations,
Service from single-disk desktops to external storage arrays.
Virtual The Virtual Hard Disk (VHD) format is a publicly-available image format
Storage specification that specifies a virtual hard disk encapsulated in a single file, capable
of hosting native file systems while supporting standard disk and file operations.
Volume The Volume Shadow Copy Service (VSS) is a set of COM interfaces that
Shadow implements a framework to allow volume backups to be performed while
Copy Service applications on a system continue to write to the volumes.
Windows Windows Data Access Components (Windows DAC) 6.0 is a set of technologies
Data Access that provide access to information across the enterprise. These technologies
Components include Microsoft ActiveX Data Objects (ADO), OLE DB, and Microsoft Open
Database Connectivity (ODBC).
Windows The Windows Storage Management API is used to manage a wide range of
Storage storage configurations, from single-disk desktops to external storage arrays.
Management
API
Windows The Microsoft Windows Sync API provides a way for developers to write custom
Sync synchronization providers that enable devices to synchronize data with data
stores on a computer or on a network.
WMI Microsoft Services for Network File System (NFS) provides a file sharing solution
Provider for that enables you to transfer files using the NFS protocol between computers
NFS running Windows and third-party operating systems.
XmlLite XmlLite is a lightweight XML parser designed for ease of use, performance, and
standards compliance.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Background Intelligent Transfer Service (BITS) is used by programmers and system
administrators to download files from or upload files to HTTP web servers and SMB file
shares. BITS will take the cost of the transfer into consideration, as well as the network
usage so that the user's foreground work has as little impact as possible. BITS also
handles network interuptions, pausing and automatically resuming transfers, even after
a reboot. BITS includes PowerShell cmdlets for creating and managing transfers as well
as the BitsAdmin command-line utility.
7 Note
BITS can be used by Windows to download updates to your local system. If you are
an end-user searching for ways to troubleshoot your BITS installation, see Fix
Windows Update Issues .
Where applicable
Use BITS for applications that need to:
Download from or upload files to an HTTP or REST web server or SMB file server.
Automatically resume file transfers after network disconnects and computer
restarts.
Preserve the responsiveness of other network applications.
Be mindful of the network cost on e.g. roaming networks
Optionally work with BranchCache to optimize wide area network (WAN) traffic
Developer audience
BITS is a COM interface designed for C and C++ developers that can also be used by
.NET developers. UWP developers should use the
Windows.Networking.BackgroundTransfer API and not the BITS API.
BITS versions
For complete version history and information on earlier operating system, see What's
New.
In this section
Topic Description
Using Procedural guide for developing BITS clients that transfer files between a client and
BITS server.
BITS Reference information for the BITS programming interfaces. Also contains
Reference information about samples, tools, server settings for upload jobs, and the upload
protocol.
Additional resources
The following are additional resources.
Resource Description
.NET For information on using BITS from .NET using reference DLLs, see Calling into
Reference BITS from .NET using Reference DLLs
DLL
.NET For other .NET wrappers for BITS, you can search nuget for projects tagged with
Wrapper the BITS tag.
Feedback
Was this page helpful? ツ Yes ト No
Registry keys for backup and restore allow backup applications to communicate with
other applications and services about backup and restore operations. For more
information, see Registry Keys and Values for Backup and Restore.
The tape backup API enables backup applications to read from and write to a tape,
initialize a tape, and retrieve tape or tape drive information. For more information, see
Tape Backup.
Backup and restore of encrypted files is enabled by the raw encryption API, which reads
and writes encrypted files while keeping the data in encrypted format. The API allows
the encrypted data in these files to be backed up and restored, while meeting the goals
of maintaining the security of the backed up data, and being usable by an application
that lacks permission to use the encryption keys on the file. For more information, see
Backup and Restore of Encrypted Files.
The Srdelayed tool can enable system state recovery applications to move, delete, and
set the short name of system files. For more information, see Srdelayed.exe.
Related topics
Backup Reference
Feedback
Was this page helpful? ツ Yes ト No
Starting in Windows 10, version 1709, Windows provides the cloud files API. This API
consists of several native Win32 and WinRT APIs that formalize support for cloud sync
engines, and handles tasks such as creating and managing placeholder files and
directories. Users of this API are typically sync providers and to some extent, Windows
applications.
In this section
Topic Description
Build a Cloud Learn how to use the cloud files API to build a cloud file sync engine that
Sync Engine includes placeholder files and File Explorer integration.
that Supports
Placeholder
Files
Cloud Filter The cloud filter API is a native Win32 API that is part of the broader cloud files
Reference API. The cloud filter API provides functionality at the boundary between the
user mode and the file system. This API handles the creation and management
of placeholder files and directories.
Feedback
Was this page helpful? ツ Yes ト No
lmdfs.h
Enumerations
DFS_NAMESPACE_VERSION_ORIGIN
Functions
NetDfsAdd
Creates a new Distributed File System (DFS) link or adds targets to an existing link in a DFS
namespace.
NetDfsAddFtRoot
Creates a new domain-based Distributed File System (DFS) namespace. If the namespace already
exists, the function adds the specified root target to it.
NetDfsAddRootTarget
Creates a domain-based or stand-alone DFS namespace or adds a new root target to an existing
domain-based namespace.
NetDfsAddStdRoot
Enumerates the Distributed File System (DFS) namespaces hosted on a server or DFS links of a
namespace hosted by a server.
NetDfsGetClientInfo
Retrieves information about a Distributed File System (DFS) root or link from the cache maintained
by the DFS client.
NetDfsGetFtContainerSecurity
Retrieves the security descriptor of the container object for the domain-based DFS namespaces in
the specified Active Directory domain.
NetDfsGetInfo
Retrieves information about a specified Distributed File System (DFS) root or link in a DFS
namespace.
NetDfsGetSecurity
Retrieves the security descriptor for the root object of the specified DFS namespace.
NetDfsGetStdContainerSecurity
Retrieves the security descriptor for the container object of the specified stand-alone DFS
namespace.
NetDfsGetSupportedNamespaceVersion
NetDfsMove
NetDfsRemove
Removes a Distributed File System (DFS) link or a specific link target of a DFS link in a DFS
namespace. When removing a specific link target, the link itself is removed if the last link target of
the link is removed.
NetDfsRemoveFtRoot
Removes the specified root target from a domain-based Distributed File System (DFS) namespace.
NetDfsRemoveFtRootForced
Removes the specified root target from a domain-based Distributed File System (DFS) namespace,
even if the root target server is offline.
NetDfsRemoveRootTarget
Removes a DFS root target from a domain-based DFS namespace. If the root target is the last root
target in the DFS namespace, this function removes the DFS namespace. This function can also be
used to remove a stand-alone DFS namespace.
NetDfsRemoveStdRoot
NetDfsSetClientInfo
Modifies information about a Distributed File System (DFS) root or link in the cache maintained by
the DFS client.
NetDfsSetFtContainerSecurity
Sets the security descriptor of the container object for the domain-based DFS namespaces in the
specified Active Directory domain.
NetDfsSetInfo
Sets or modifies information about a specific Distributed File System (DFS) root, root target, link,
or link target.
NetDfsSetSecurity
Sets the security descriptor for the root object of the specified DFS namespace.
NetDfsSetStdContainerSecurity
Sets the security descriptor for the container object of the specified stand-alone DFS namespace.
Structures
DFS_GET_PKT_ENTRY_STATE_ARG
DFS_INFO_100
Contains a comment associated with a Distributed File System (DFS) root or link.
DFS_INFO_101
Describes the state of storage on a DFS root, link, root target, or link target.
DFS_INFO_102
Contains a time-out value to associate with a Distributed File System (DFS) root or a link in a
named DFS root.
DFS_INFO_103
Contains properties that set specific behaviors for a DFS root or link.
DFS_INFO_104
DFS_INFO_105
Contains information about a DFS root or link, including comment, state, time-out, and DFS
behaviors specified by property flags.
DFS_INFO_106
Contains the storage state and priority for a DFS root target or link target. This structure is only for
use with the NetDfsSetInfo function.
DFS_INFO_107
Contains information about a DFS root or link, including the comment, state, time-out, property
flags, and link reparse point security descriptor.
DFS_INFO_150
DFS_INFO_2
Contains information about a Distributed File System (DFS) root or link. This structure contains the
name, status, and number of DFS targets for the root or link.
DFS_INFO_200
DFS_INFO_3
Contains information about a Distributed File System (DFS) root or link. This structure contains the
name, status, number of DFS targets, and information about each target of the root or link.
DFS_INFO_300
DFS_INFO_4
Contains information about a Distributed File System (DFS) root or link. This structure contains the
name, status, GUID, time-out, number of targets, and information about each target of the root or
link.
DFS_INFO_5
Contains information about a Distributed File System (DFS) root or link. This structure contains the
name, status, GUID, time-out, namespace/root/link properties, metadata size, and number of
targets for the root or link.
DFS_INFO_50
Contains the DFS metadata version and capabilities of an existing DFS namespace.
DFS_INFO_6
Contains information about a Distributed File System (DFS) root or link. This structure contains the
name, status, GUID, time-out, namespace/root/link properties, metadata size, number of targets,
and information about each target of the root or link.
DFS_INFO_7
Contains information about a DFS namespace. This structure contains the version GUID for the
metadata for the namespace.
DFS_INFO_8
Contains the name, status, GUID, time-out, property flags, metadata size, DFS target information,
and link reparse point security descriptor for a root or link.
DFS_INFO_9
Contains the name, status, GUID, time-out, property flags, metadata size, DFS target information,
link reparse point security descriptor, and a list of DFS targets for a root or link.
DFS_STORAGE_INFO
Contains information about a DFS root or link target in a DFS namespace or from the cache
maintained by the DFS client.
DFS_STORAGE_INFO_1
Contains information about a DFS target, including the DFS target server name and share name as
well as the target's state and priority.
DFS_SUPPORTED_NAMESPACE_VERSION_INFO
DFS_TARGET_PRIORITY
Feedback
Was this page helpful? ツ Yes ト No
ESE is for use in applications that require fast and/or light structured data storage,
where raw file access or the registry does not support the application's indexing or data
size requirements.
It is used by applications that never store more than 1 megabyte of data, and has been
used in applications with databases in extreme cases in excess of 1 terabyte, and
commonly over 50 gigabytes.
This documentation is intended for developers who are familiar with C and C++, and
basic database concepts such as tables, columns, indexes, recovery, and transactions.
The only access method for ESE is the C API that is described in this documentation.
ESE provides a user-mode storage engine that manages data inside of flat, binary files
that are accessible through the Windows APIs. ESE is accessed through a DLL that is
loaded directly into the application's process; no remote access methods are required of
or provided by the database engine itself. Though ESE has no remote or inter-process
access method, the data files it uses can be provided remotely by using server message
block (SMB) through the Windows APIs, but this is not recommended.
Note Windows XP 64-Bit Edition is the same as Windows Server 2003 for the purpose
of determining the ESE feature set that is supported.
Notes
ESE was formerly known as Joint Engine Technology (JET) Blue, and so frequently the
term "JET Blue" or "JET" is used interchangeably with the term ESE outside this
documentation. However, there are in fact two completely separate implementations of
the JET API, called JET Blue and JET Red. The term "JET" is frequently also used to refer
to JET Red, which is the database engine that is used with Microsoft Office Access. The
two JET implementations are completely different, are separately maintained, have a
vastly different feature set, and are not interchangeable. Within the ESE documentation,
"JET" refers to the ESE or the JET API as ESE implements it. Any references to the JET Red
will always explicitly be labeled "JET Red".
In This Section
Extensible Storage Engine Reference
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Microsoft Windows image mastering API enables applications to stage and burn
images to CD, DVD, and Blu-ray optical storage media. Other disc-like media that lay
images in the same manner can also use this API.
Developer audience
IMAPI is designed for C/C++, C#, and Visual Basic developers and those writing scripts
using VBScript.
Knowledge of CD, DVD, and Blu-ray technologies and file systems is recommended.
Developers may benefit from a familiarity with the latest revision of Multimedia
Command (MMC) .
Run-time requirements
IMAPI 2.0 is supported natively starting with Windows Vista and Windows Server 2008.
Enabling IMAPI 2.0 functionality for Windows XP and Windows Server 2003 requires the
installation of the KB932716 update package. If this package is not installed, Windows
XP still natively supports IMAPI 1.0.
In this section
Topic Description
What's New Information detailing each significant release of the Image Mastering API.
Using IMAPI Task-related topics that demonstrate how to use the Image Mastering API.
IMAPI Reference Detailed descriptions of IMAPI interfaces and other programming elements.
Additional resources
Further information regarding IMAPI and other related subjects can be found at the
following locations:
Topic Description
Microsoft Highlights topics that focus on the implementation of the Image Mastering API in
Optical real world development scenarios.
Storage Blog
Optical Discuss CDROM.SYS, IMAPIv2 and Live File System issues. This forum focuses on
Platform system-level topics and is intended for application developers rather than end
Discussion users.
Forum
Optical Works to shape the future of the industry through regular meetings of
Storage Commercial Optical Storage Applications (COSA), DVD Compatibility, Marketing,
Technology MPV (MusicPhotoVideo), UDF committees, and a new adhoc Blue Laser
Association committee. Interested companies worldwide are invited to join the organization
(OSTA) and participate in its committees and programs.
Feedback
Was this page helpful? ツ Yes ト No
The Windows Imaging Interface Reference describes the programmatic method for
managing Windows image (.wim) files for Windows® 8 and Windows® 7.
Imaging APIs (Wimgapi.dll) can be used to programmatically capture, modify, and apply
images for deployment in a manufacturing or corporate IT environment. Wimgapi.dll is
included in all installations of Windows 8 or Windows 7. The Deployment Image
Servicing and Management (DISM) and ImageX tools included in the Windows®
Assessment and Deployment Kit (Windows ADK) use the Imaging APIs to perform some
image management functions. For more information about these tools, see the
Deployment and Imaging Tools Technical Reference .
In This Section
Imaging Requirements
Imaging Reference
A file system enables applications to store and retrieve files on storage devices. Files are
placed in a hierarchical structure. The file system specifies naming conventions for files
and the format for specifying the path to a file in the tree structure.
Each file system consists of one or more drivers and dynamic-link libraries that define
the data formats and features of the file system. File systems can exist on many different
types of storage devices, including hard disks, jukeboxes, removable optical disks, tape
back-up units, and memory cards.
All file systems supported by Windows have the following storage components:
In this section
Topic Description
Directory A directory is a hierarchical collection of directories and files. The only constraint
Management on the number of files that can be contained in a single directory is the physical
size of the disk on which the directory is located.
Disk A hard disk is a rigid disk inside a computer that stores and provides relatively
Management quick access to large amounts of data. It is the type of storage most often used
with Windows. The system also supports removable media.
Transactional Transactional NTFS (TxF) allows file operations on an NTFS file system volume to
NTFS (TxF) be performed in a transaction.
Volume The highest level of organization in the file system is the volume. A file system
Management resides on a volume.
Related topics
FAT Technical Reference
Feedback
Was this page helpful? ツ Yes ト No
The Windows Projected File System (ProjFS) allows a user-mode application called a
"provider" to project hierarchical data from a backing data store into the file system,
making it appear as files and directories in the file system. For example, a simple
provider could project the Windows registry into the file system, making registry keys
and values appear as files and directories, respectively. An example of a more complex
provider is VFS for Git , which is used to virtualize very large git repos.
7 Note
ProjFS is designed for use with high-speed backing data stores. One of its design
goals is to make the projected data appear as if it were locally present, hiding the
fact that the data may be remote. As such, ProjFS doesn't provide: mechanisms for
reporting progress of data recall; indication of the online versus offline state of a
file; nor other features that may be desirable when working with backing data
stores that are slow. For such scenarios, consider instead using the Cloud Files API.
In this section
Topic Description
Windows Projected File System API Reference information for the ProjFS programming
Reference interface.
Additional Resources
Topic Description
RegFS A sample ProjFS provider that projects the Windows registry into the file
Sample system.
Feedback
Was this page helpful? ツ Yes ト No
The purpose of this article is to outline how the non-volatile memory library (NVML) can
be integrated into a Visual Studio project for easy use.
7 Note
PM and NVML
First support for persistent memory was introduced in Windows Server 2016 and the
Windows 10 Anniversary Update (1607). For a quick overview, check out these two
Channel9 videos:
To help developers take advantage of the benefits persistent memory offers, Microsoft
has also contributed to the efforts of bringing the non-volatile memory library (NVML)
to Windows. This library provides various tools to make applications persistent-memory
aware. For example, it contains code that lets you easily create a PM-aware key-value
store for extremely fast look-ups and stores. You can find more information on NVML,
including samples, at NVM Library .
2. Place the library files and headers in a directory of your choosing, for example:
“C:\NVML\lib” and “C:\NVML\inc” respectively.
Open your visual studio project and in the “Solution Explorer” right-click on your
project’s name.
Open the project’s setting pane at the bottom of the resulting pop-up.
Navigate to “Configuration Properties -> C/C++” and add the folder in which you
stored the header (C:\NVML\inc) to the “Additional Include Directories” field.
Next, navigate to “Configuration Properties -> Linker” and add the folder in which
you stored the library (C:\NVML\lib) to the “Additional Library Directories” field
4. Next, make sure you target the project for Windows Server 2016 or Windows 10
Anniversary Update:
Navigate to “Configuration Properties -> General” and set the “Target Platform
Version” field to “10.0.14393.0” and
Navigate to “Configuration Properties -> C/C++” and add
“NTDDI_VERSION=NTDDI_WIN10_RS1;” to the “Preprocessor” field.
5. Include the headers in your code and link to the required libraries
At this point, you can simply include the header files you are looking to use in your
code like any other header files. For example, to use libpmem:
add "#include <libpmem.h>" and
add "libpmem.lib" to "Configuration Properties -> Linker -> Input -> Additional
Dependencies"
At this point you are ready to call the library’s functions directly in your code and take
advantage of them.
Feedback
Was this page helpful? ツ Yes ト No
Get help at Microsoft Q&A
Virtual Storage
Article • 08/19/2020
Virtual Disk
Feedback
Was this page helpful? Yes No
Virtual Disk Service
Article • 03/15/2023
[Beginning with Windows 8 and Windows Server 2012, the Virtual Disk Service COM
interface is superseded by the Windows Storage Management API.]
Purpose
The Virtual Disk Service (VDS) manages a wide range of storage configurations, from
single-disk desktops to external storage arrays. The service exposes an application
programming interface (API).
Where applicable
Beginning with Windows 8 and Windows Server 8, the Virtual Disk Service COM
interface is superseded by the Storage Management API, a WMI-based programming
interface. For managing storage subsystems, (Windows) disks, partitions, and volumes,
we strongly recommend using the Storage Management API. For more information, see
the Windows Storage Management API.
For all usages except mirror boot volumes (using a mirror volume to host the operating
system ), dynamic disks are deprecated. For data that requires resiliency against drive
failure, use Storage Spaces, a resilient storage virtualization solution. For more
information, see Storage Spaces Technical Preview.
Application developers who use the interfaces described in this guide can query and
configure a heterogeneous set of vendor-supplied and internally managed storage. VDS
hides from applications the complexities associated with storage, making the service
both vendor and technology neutral.
Developer audience
This documentation is intended for application developers who are familiar with the
storage capabilities of Microsoft Windows platforms and who are knowledgeable about
COM development.
The guide is also intended for hardware subsystem manufacturers who develop and
support VDS hardware provider programs.
Run-time requirements
VDS is supported on Windows Server 2003, Windows Vista, and later. For information
about run-time requirements for a particular programming element, see the
Requirements section of the documentation for that element.
Running 32-bit VDS applications under WOW64 is supported, but 64-bit VDS providers
must run as native applications on 64-bit Windows versions.
VDS is available in the Microsoft Windows Software Development Kit (SDK). You can
install the SDK for Windows 7 and Windows Server 2008 R2 from the Windows
Download Center . This version of the Windows SDK can be used to develop VDS
applications for Windows Server 2003, Windows Vista, and later. You can also download
the ISO version of the SDK from the Windows Download Center.
In this section
Topic Description
About VDS Describes the VDS object model, storage-configuration strategies, and VDS
notifications.
Using VDS Describes how to use VDS to query and configure storage devices.
VDS Describes VDS constants, data types, enumerations, interfaces, structures, and
Reference error codes.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Volume Shadow Copy Service (VSS) is a set of COM interfaces that implements a
framework to allow volume backups to be performed while applications on a system
continue to write to the volumes.
For an introduction to VSS for system administrators, see Volume Shadow Copy Service
in the TechNet Library.
Run-time requirements
VSS is supported on Microsoft Windows XP and later. For information about run-time
requirements for a particular programming element, see the Requirements section of
the documentation for that element.
All 32-bit VSS applications (requesters, providers, and writers) must run as native 32-bit
or 64-bit applications. Running them under WOW64 is not supported. For more
information, see Supported Configurations and Restrictions.
Windows Server 2003 and Windows XP: Running 32-bit VSS requesters under WOW64
is supported, but not for system-state backups. Running 32-bit VSS providers and
writers under WOW64 is not supported. Support for running 32-bit requesters under
WOW64 was removed in Windows Vista and subsequent versions.
7 Note
Overview Describes the VSS object model, backup and restore strategies, and how to create
VSS providers, requesters, and writers.
Reference Describes VSS classes, data types, enumerations, functions, interfaces, and structures.
Additional resources
Resource Description
Windows Vista VSS is available in the Microsoft Windows Software Development Kit (SDK). You
and later can install the SDK for Windows 7 and Windows Server 2008 R2 from the
Windows Download Center . You can also download the ISO version of the
SDK from the Windows Download Center. Previous versions of the SDK can be
downloaded from the Windows SDK Download Page .
Windows VSS is available in the Volume Shadow Copy Service 7.2 SDK, which you can
Server 2003 download from the Windows Download Center . Note that the 64-bit vssapi.lib
and files in the directories under the Win2003\Obj directory can be used for the 64-
Windows XP bit versions of Windows Server 2003 and Windows XP.
Feedback
Was this page helpful? ツ Yes ト No
In this section
Topic Description
Device Access The Device Access APIs enable developers to write Windows Store apps for
custom devices. The API applies a policy to grant a Windows Store app the
appropriate level of access to a device, and if access is granted, provides
methods for sending control codes to operate the device.
AllJoyn API AllJoyn is a DCOM-like framework and protocol for making remotable method
calls and/or sending one-way signals between applications on a distributed
bus. It is intended to be used primarily for Internet of Things type scenarios.
Point of Service The Point of Service API enables application developers to access Point of
API Service (POS) peripheral devices. The namespace provides a vendor-neutral
interface for accessing POS devices from a UWP app.
Device Device management provides a way to uniformly notify all applications and
Management system components of changes that may affect their operation or access to
resources. Applications and the system use and process device events to take
advantage of new resources when they become available and to prevent loss
of data when existing resources become unavailable.
Enhanced The Enhanced Storage API enables consistent end-to-end authentication for
Storage personal storage devices that differ in form factor.
PnP-X Plug and Play Extensions (PnP-X) enable a computer system to discover
networked devices and to install them on the local system using Plug and Play
(PnP).
Topic Description
Location API The Location API helps to simplify location-aware programming by providing
a standard way to retrieve data about user location and standardizing formats
for location data reports. The Location API automatically handles transitions
between location data providers and always chooses the most accurate
provider for the current situation.
Sensor API The Sensor API enables applications to get and use data from sensors in a
standardized way.
UPnP APIs The UPnP framework enables dynamic networking of intelligent appliances,
wireless devices, and PCs.
Web Services on The Microsoft Web Services on Devices API (WSDAPI) supports the
Devices implementation of client-controlled devices and services, and device hosts
conforming to the Devices Profile for Web Services (DPWS).
Windows Media Applications or components built on Windows Media Device Manager have a
Device Manager consistent API for communicating with a wide range of devices including
11 SDK Media Transfer Protocol (MTP), Mass Storage Class (MSC), RAPI, and other
devices built on both the latest and previous versions of Windows Media
technology.
Windows Mixed Windows Mixed Reality enables the building of mixed reality experience for
Reality Microsoft HoloLens and other immersive headsets. For more information, see
the Mixed Reality Dev Center.
Feedback
Was this page helpful? ツ Yes ト No
Feedback
Was this page helpful? ツ Yes ト No
Purpose
You can use the Device Access API to write Windows Store device apps for specialized
devices that use custom drivers. The API provides methods for sending control codes to
communicate with the device's custom driver.
In this section
Topic Description
About the The Device Access API is for C++ developers who are creating a Windows Store
Device app to interact with specialized devices in Windows 8. This topic describes the
Access API scenarios that the Device Access API applies to. It also explains how the Device
Access API applies security rules for Windows Store apps in Windows 8.
How to Use This topic contains tasks and design considerations for using the Device Access
the Device API.
Access API
Device Provides reference pages for the functions and interfaces in the Device Access
Access API API.
C++
Programming
Reference
Device The following are terms used throughout the documentation for the Device
Access Access API.
Glossary
Other APIs These interfaces are not supported and should not be used. Use the APIs in the
Device Access API C++ Programming Reference instead.
Developer audience
The Device Access API is designed for independent hardware vendor (IHV) and OEM
developers who are familiar with C++ and Component Object Model (COM).
Related topics
Custom Driver Access Sample , UWP device apps for internal devices, Hardware Dev
Center
Feedback
Was this page helpful? ツ Yes ト No
[The Win32 Location API and is available for use in the operating systems specified in
the Requirements section. It may be altered or unavailable in subsequent versions.
Instead, use the Windows.Devices.Geolocation API. To access location from a website,
use the W3C Geolocation API. ]
Purpose
Computers today are more mobile than ever. From small laptops to Tablet PCs, many
computers can go wherever the user wants to go. Programs that take advantage of the
computer's mobility can add significant value to people's lives. For example, a program
that can find nearby restaurants and provide driving directions would seem to be a
natural fit for a portable computer. But while the technology to determine the user's
current location is common and affordable, building solutions on this technology can be
a daunting task.
Global positioning system (GPS) devices that use virtual COM ports, which provide
access for only one program at a time.
Understanding and programming for protocols, such as the National Marine
Electronics Association (NMEA) specification, as well as proprietary vendor
extensions.
Being confined to programming for known, vertical hardware solutions.
Implementing logic to handle transitions between various location providers, such
as GPS receivers, connected networks, cellular telephone networks, the Internet,
and user settings.
Developer audience
The Location API provides its functionality through a set of COM interfaces. Location API
functionality can be used by programmers who are familiar with using COM through the
C++ programming language, or with using COM objects in scripting languages, such as
Microsoft JScript.
In this section
Location API C++ Programming Reference
Location API Object Model Reference
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Windows 7 includes native support for sensors, which are devices that can measure
physical phenomena such as temperature or location. This documentation describes the
Sensor API, which enables applications to get and use data from sensors in a
standardized way.
As humans, we rely on our senses to provide us with information about the world
around us. When we create machines to take on some of our work, we add sensor
mechanisms so the machines can respond appropriately to changing conditions.
For example, automobile engines typically use a variety of sensors. These sensors are
monitored by an onboard computer that continuously adjusts settings, such as engine
timing, to maximize power and efficiency. A television may use an ambient light sensor
to adjust the brightness of the picture to match changing room conditions. Even
something as simple as a doorbell button acts as a rudimentary sensor to detect a
human presence at the door.
While the purely mechanical doorbell fulfills its purpose, the information provided by
complex sensors becomes far more powerful when it is combined with software.
Modern sensors can provide a lot of data very quickly, and in a variety of formats, so
software provides a natural mechanism for making sense of sensor data.
Today, software developers can write programs that use sensors, but a lack of
standardization makes programming for sensors an arduous task. After a sensor-based
program is completed, it is usually forever dependent on a particular type of hardware.
Using one or more vertical solutions to enable deployment of a software-based system
has limited the integration of sensors with computer hardware and, until now, Windows-
based computers have been no exception.
The Sensor API provides a standard way to programmatically access data that sensors
provide. The Sensor API standardizes:
The Sensor API also enables you to define custom sensor categories, types, properties,
data formats, and events.
Developer audience
The Sensor API provides its functionality through a set of COM interfaces. This
documentation assumes that you have a working knowledge of programming using the
C++ programming language, and you have a basic understanding of how to use COM
objects and interfaces. For the sake of brevity, many code examples in this
documentation (as well as in the code samples) use Active Template Library (ATL) objects
to implement COM functionality.
In this section
Getting Started
About the Sensor API
Sensor API Programming Guide
Sensor API Programming Reference
Feedback
Was this page helpful? ツ Yes ト No
Get help at Microsoft Q&A
UPnP APIs
Article • 01/26/2022
Purpose
The UPnP framework enables dynamic networking of intelligent appliances, wireless
devices, and PCs. There are two APIs for working with UPnP-certified devices:
The Control Point API, which consists of a set of COM interfaces used to find and
control devices.
The Device Host API, which consists of a set of COM interfaces used to implement
devices that are hosted by a computer.
Where applicable
The Control Point API enables developers to write applications that search for and
control UPnP-certified devices. The Device Host API enables developers to implement
the functionality of UPnP-certified devices, and use the device host to manage the
discovery, description, control, presentation, and eventing functions of a UPnP-certified
device.
Developer audience
Developers using the Control Point APIs and Device Host APIs must be familiar with the
UPnP device architecture. For more information, see the UPnP Implementation
Documentation and the UPnP Forum .
Developers who are using the Device Host APIs should be familiar with the Active
Template Library (ATL) and COM interfaces.
The Control Point APIs and Device Host APIs are used by a variety of applications, from
scripts embedded in HTML pages to full-fledged C++ and Microsoft Visual Basic
programs.
Only the Control Point API supports Visual Basic Scripting Edition (VBScript).
Run-time requirements
The Control Point API is used on computers running Microsoft Windows Millennium
Edition, Windows XP, Windows XP Professional, and Windows CE .NET.
The Device Host API is used on computers running Windows XP, Windows XP
Professional, and Windows CE .NET.
For more specific information about which operating systems support a particular
function, refer to "Requirements" in the documentation.
In this section
Topic Description
Control Point Overview General information about the Control Point API.
Using the Control Point Sample code that shows how to develop applications that control
API UPnP-certified devices.
Control Point API Documentation of Control Point component interfaces, methods, and
Reference events.
Device Host API General information about the Device Host API.
Overview
Using the Device Host Sample code that shows how to develop an application for UPnP-
API certified devices.
Device Host API Documentation of Device Host component interfaces, methods, and
Reference events.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Microsoft Web Services on Devices API (WSDAPI) supports the implementation of
client-controlled devices and services, and device hosts conforming to the Devices
Profile for Web Services (DPWS). WSDAPI uses WS-Discovery for device discovery.
WSDAPI may be used for the development of both client and service implementations.
Where applicable
Web Services on Devices allows a client to discover and access a remote device and its
associated services across a network. It supports device discovery, description, control,
and eventing. Developers can create WSDAPI client proxies and corresponding stubs for
device hosts.
Developer audience
The Web Services on Devices documentation is intended for C/C++ programmers and
device vendors creating DPWS-compliant products.
Run-time requirements
Client applications that use WSDAPI are supported starting with Windows Vista and
Windows Server 2008.
In this section
Topic Description
About Web Services on Architectural and general information about Web Services on
Devices Devices.
Using Web Services on Information about generating code, configuring applications, and
Devices troubleshooting.
Topic Description
Web Services on Devices Reference documentation for the Web Services on Devices API.
Reference
Related topics
Dan Driscoll's Blog
Feedback
Was this page helpful? ツ Yes ト No
Windows Image Acquisition (WIA) is the still image acquisition platform in the Windows
family of operating systems starting with Windows Millennium Edition (Windows Me)
and Windows XP.
Introduction
Benefits of Windows Image Acquisition 2.0
For Application Writers
For Device Manufactures
For Scanner Users
Development of Windows Image Acquisition
Overview of Windows Image Acquisition
Facts about Windows Image Acquisition 2.0
Developer Audience
Run-Time Requirements
WIA Topics
Introduction
The WIA platform enables imaging/graphics applications to interact with imaging
hardware and standardizes the interaction between different applications and scanners.
This allows those different applications to talk to and interact with those different
scanners without requiring the application writers and scanner manufactures to
customize their application or drivers for each application-device combination.
Benefits of Windows Image Acquisition 2.0
WIA provides benefits to application developers, device manufacturers, and scanner
users who need to interact with imaging hardware.
WIA 1.0 was introduced in Windows Me and Windows XP and supports scanners, digital
cameras and digital video equipment. WIA 2.0 was released with Windows Vista. WIA 2.0
is targeted towards scanners but continues to offer support for legacy WIA 1.0
applications and devices through a WIA 1.0 to WIA 2.0 compatibility layer provided by
the WIA service. However, video content support was removed from WIA for
Windows Vista. We recommend Windows Portable Devices (WPD) API for digital
cameras and digital video equipment in the future. WIA 1.0 as well as STI TWAIN drivers
are still supported directly on Windows Vista and Windows 7 alongside native WIA 2.0
device drivers and imaging applications.
Overview of Windows Image Acquisition
WIA provides a framework that allows a device to present its unique capabilities to the
operating system and allows imaging applications to invoke those unique capabilities.
The WIA platform includes a data acquisition protocol, a Device Driver Model and
Interface (DDI), an API and a dedicated WIA service. The platform also includes a set of
built-in kernel mode drivers that support communication with imaging devices locally
connected through USB, serial/parallel, SCSI and FireWire interfaces. The WIA subsystem
also includes a transparent compatibility layer which allows TWAIN compatible
applications to employ and use WIA-driver-based devices.
Network connected imaging devices that support Web Services for Devices (WSD)
protocol can also be used from WIA-compliant imaging applications on Windows Vista
and Windows 7 out of the box via a WSD-WIA class driver that shipped as part of
Windows Vista. The class driver converts WIA calls to WSD calls and vice versa and
makes already existing WIA applications work with WSD based scanners without any
additional driver.
WIA drivers are made up of a user interface (UI) component and a core driver
component, loaded into two different process spaces: UI in the application space and
the driver core in the WIA service space. The service runs in Local System context in
Windows XP and runs in Local Service context starting with Windows Server 2003 and
Windows Vista for enhanced security against buggy or malicious drivers.
The WIA API set exposes imaging applications to still image acquisition hardware
functionality by providing support for:
Windows added scripting support to WIA by releasing the WIA Automation Library in
2002 that was incorporated in Windows Vista as Windows Image Acquisition (WIA)
Automation Layer and continues to be a part of Windows 7. The WIA Automation
Library provides end-to-end image acquisition capabilities to automation-enabled
application development environments and programming languages such as Microsoft
Visual Basic 6.0, Active Server Pages (ASP), VBScript and C#.
For Windows 7, WIA APIs have additional support to complement the already existing
push-scanning support.
Developer Audience
The WIA API is designed for use by C/C++ programmers. Familiarity with the Windows
GUI and Component Object Model (COM) interfaces is required.
For developers familiar with Microsoft Visual Basic 6.0, Active Server Pages (ASP), or
scripting, WIA provides an automation layer for Windows XP Service Pack 1 (SP1) or later
that builds upon and simplifies access to the foundation provided by C/C++. For
information about the automation layer, see Windows Image Acquisition Automation
Layer.
7 Note
The WIA Automation Layer supersedes Windows Image Acquisition (WIA) 1.0
scripting.
Run-Time Requirements
Applications that use the WIA API require Windows XP or later.
WIA Topics
The WIA topics are organized as shown in the following table.
Topic Description
) Important
The Windows Media Device Manager APIs are now included in the Windows SDK.
No additional SDK downloads are required.
The Microsoft Windows Media Device Manager Software Development Kit (SDK) enables
you to build desktop applications and components that can communicate with
connected portable devices. Windows Media Device Manager enables your application
or component to enumerate, explore, and exchange files with a device, query for
metadata, and request play count information. Applications or components built on
Windows Media Device Manager have a consistent API for communicating with a wide
range of devices including Media Transfer Protocol (MTP), Mass Storage Class (MSC),
RAPI, and other devices built on both the latest and previous versions of Windows
Media technology.
You can build the following items using the Windows Media Device Manager SDK:
To download the Windows Media Device Manager SDK, see the Windows Media
Download page on the MSDN Web site.
This SDK is a component of the Microsoft Windows Media Software Development Kit.
Other components include the Windows Media Format SDK, the Windows Media
Services SDK, the Windows Media Encoder SDK, the Windows Media Rights Manager
SDK, and the Windows Media Player SDK.
Section Description
Getting Describes what is new in this version of Windows Media Device Manager, gives
Started an overview of how Windows Media Device Manager works, describes what will
be needed to develop an application or service provider, and explains the
samples shipped with the SDK.
Programming Provides C++ reference information for the interfaces, methods, classes, and
Reference structures supported by the Windows Media Device Manager SDK.
Feedback
Was this page helpful? ツ Yes ト No
Applications that are built on WPD can explore a device, send and receive content, and
even control the device, for example, take a picture or send a text message. The system
is designed to be flexible so that many types of devices can be explored, and extensible
so that driver developers can define custom properties and commands for custom
devices.
You can write both Windows applications and Web applications with WPD. You use the
WPD Application Programming Interface to create Windows applications. These
applications can be written in C++, C# .Net, or Visual Basic .Net. You use the WPD
Automation Object Model to write web applications. These applications are written in
JScript and HTML.
For more information about creating a WPD Windows application, refer to the WPD
Application Programming Interface documentation and samples.
For more information about creating a WPD Automation application, refer to the WPD
Automation Object Model documentation and samples.
Related topics
WPD Application Programming Interface
Applications built on Windows Portable Devices can explore a device, send and receive
content, and even control the device, for example, take a picture or send a text message.
The system is designed to be flexible so that many types of devices can be explored, and
extensible so that driver developers can define custom properties and commands for
custom devices.
Topic Description
General Requirements for Hardware and software requirements to develop drivers and
Application Development applications using Windows Portable Devices.
Requirements for Windows Media Properties that are required to enable Windows Media DRM-
DRM-Enabled Applications protected content transfers.
Programming Guide Key tasks that an application will perform, with step-by-step
instructions and code snippets.
Programming Reference Reference guide to the interfaces and data types defined by
Windows Portable Devices.
Microsoft provides several drivers for standard protocols and devices, including Media
Transport Protocol (MTP) devices and Mass Storage Class (MSC) devices. If you are
familiar with the User-Mode Driver Framework, you can develop your own drivers for
custom devices.
Feedback
Was this page helpful? ツ Yes ト No
Windows has APIs and services that support diagnostics in and of your desktop apps.
They provide:
In this section
Topic Description
Assessment The Windows Assessment Execution Engine (AXE) enables the management
Execution and execution of Windows system assessments. Assessments can help a person
Engine understand the state of a system and remedy problems with performance,
reliability, or functionality. AXE provides infrastructure needed to manage
assessments using a UX tool or script, run assessments, make measurements,
process raw data into results, run diagnostics, and publish the results.
Hardware Applications use the Hardware Counter Profiling (HCP) SDK to capture thread
Counter profiling data such as cycle time and the reasons for context switches. You can
Profiling also use HCP to capture counter data for hardware performance counters that
you have configured on the system.
Network The Network Diagnostics Framework (NDF) provides a way for component and
Diagnostics application developers to simplify network troubleshooting for users. Users can
Framework attempt to diagnose and repair a network problem using a single
troubleshooting tool.
Network Network Monitor captures network traffic for display and analysis. It enables
Monitor you to perform tasks such as analyzing previously captured data in user-
defined methods and extract data from defined protocol parsers.
Topic Description
Performance Counters are used to provide information as to how well the operating system
Counters or an application, service, or driver is performing. The counter data can help
determine system bottlenecks and fine-tune system and application
performance. The operating system, network, and devices provide counter data
that an application can consume to provide users with a graphical view of how
well the system is performing.
Performance Performance Logs and Alerts (PLA) provides application programmers the
Logs and Alerts ability to generate alert notifications based on performance counter
thresholds. Programmers can also use PLA to query performance data, create
event tracing sessions, capture a computer's configuration, and trace the API
calls in some of the Win32 system DLLs.
Process Process snapshotting enables you to capture process state, in part or whole. It
Snapshotting is similar to the Tool Help API, but with one important advantage: it can
efficiently capture the virtual address contents of a process using the Windows
internal POSIX fork clone capability. The process snapshot can be dumped into
a file using the MiniDumpWriteDump function.
Process Status The process status application programming interface (PSAPI) is a helper
API library that makes it easier for you to obtain information about processes and
device drivers.
System Event Applications designed for use by mobile users require a unique set of
Notification connectivity functions and notifications. In the past these individual
Service applications were required to implement these features internally. The System
Event Notification Service (SENS) now provides these capabilities in the
operating system, creating a uniform connectivity and notification interface for
applications. Using SENS developers can determine connection bandwidth and
latency information from within their application and optimize the application's
operation based on those conditions.
System Monitor System Monitor (SYSMON) is the application programming interface (API) that
you use to configure the Microsoft System Monitor ActiveX control. The
System Monitor control lets you view real-time and previously logged
performance counter data such as memory, disk, and processor counter data.
Tool Help The functions provided by the tool help library make it easier for you to obtain
Library information about currently executing applications.
Windows Error The error reporting feature enables users to notify Microsoft of application
Reporting faults, kernel faults, unresponsive applications, and other application specific
problems. Microsoft can use the error reporting feature to provide customers
with troubleshooting information, solutions, or updates for their specific
problems. Developers can use this infrastructure to receive information that
can be used to improve their applications.
Feedback
Was this page helpful? ツ Yes ト No
In this section
Application Recovery and Restart
Error Handling
Basic Debugging
Debug Help Library
Structured Exception Handling
Wait Chain Traversal
Intel AVX
Feedback
Was this page helpful? ツ Yes ト No
Purpose
An application can use Application Recovery and Restart (ARR) to save data and state
information before the application exits due to an unhandled exception or when the
application stops responding. The application is also restarted, if requested.
Developer audience
ARR is designed for C and C++ developers.
Run-time requirements
ARR is available starting with the Windows Vista operating system.
In this section
Topic Description
Using Application Recovery and Restart Procedural guide for registering for recovery and
restart.
Application Recovery and Restart Reference information for the ARR API.
Reference
Feedback
Was this page helpful? ツ Yes ト No
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Network Diagnostics Framework (NDF) provides a way for component and
application developers to simplify network troubleshooting for users. Users can attempt
to diagnose and repair a network problem using a single troubleshooting tool.
Microsoft provides NDF helper classes, some of which are extensible so that developers
can create troubleshooting units called helper class extensions to provide more detailed
diagnoses specific to particular software or hardware components.
Where applicable
NDF can be used by any vendor's software which relies on network connectivity.
Developer audience
The NDF API is designed for C/C++ developers.
Run-time requirements
NDF is available for computers running Windows Vista, Windows Server 2008, or later.
In this section
Topic Description
Using NDF Provides information and examples on using NDF functionality, as well as how to
extend this functionality.
NDF Provides information about enumerations, functions, interfaces, and structures that
Reference support the use of NDF, as well as information about the extensible helper classes
provided by Microsoft.
Topic Description
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Network Monitor captures network traffic for display and analysis. It enables you to
perform tasks such as analyzing previously captured data in user-defined methods and
extract data from defined protocol parsers.
Developer audience
All API sets provided by Network Monitor can be accessed using C/C++. Those
developers also working with network packet providers must also be familiar with COM.
Run-time requirements
To call from the Network Monitor API, you must be running on Windows NT Server 4.0,
Windows 2000 Server, or Windows Server 2003, or have Microsoft Systems Management
Server installed.
The NPP driver and supported features include all versions of Windows NT 4.0 and
Windows 2000 Server.
7 Note
Network Monitor 2.1 and earlier are not supported on Windows Vista and later.
In this section
Topic Description
Using Network Task-related topics that describe how to use Network Monitor functions
Monitor 2.1 and COM components.
Topic Description
Feedback
Was this page helpful? ツ Yes ト No
In this section
ノ Expand table
Topic Description
Using Performance Task-related topics that describe how to use Performance Counters.
Counters
Feedback
Was this page helpful? Yes No
Process Snapshotting
Article01/24/2023
processsnapshot.h
Process Snapshotting
Enumerations
PSS_CAPTURE_FLAGS
PSS_DUPLICATE_FLAGS
PSS_HANDLE_FLAGS
PSS_OBJECT_TYPE
PSS_PROCESS_FLAGS
PSS_QUERY_INFORMATION_CLASS
PSS_THREAD_FLAGS
Functions
PssCaptureSnapshot
PssDuplicateSnapshot
PssFreeSnapshot
Frees a snapshot.
PssQuerySnapshot
PssWalkMarkerCreate
PssWalkMarkerFree
PssWalkMarkerGetPosition
PssWalkMarkerSeekToBeginning
PssWalkMarkerSetPosition
Returns information from the current walk position and advanced the walk marker to the next
position.
Structures
PSS_ALLOCATOR
Specifies custom functions which the Process Snapshotting functions use to allocate and free the
internal walk marker structures.
PSS_AUXILIARY_PAGE_ENTRY
PSS_AUXILIARY_PAGES_INFORMATION
PSS_HANDLE_ENTRY
PSS_HANDLE_INFORMATION
PSS_HANDLE_TRACE_INFORMATION
PSS_PERFORMANCE_COUNTERS
PSS_PROCESS_INFORMATION
PSS_THREAD_ENTRY
PSS_VA_CLONE_INFORMATION
PSS_VA_SPACE_ENTRY
PSS_VA_SPACE_INFORMATION
Feedback
Was this page helpful? ツ Yes ト No
The process status application programming interface (PSAPI) is a helper library that
makes it easier for you to obtain information about processes and device drivers. For
more information, see the following topics:
About PSAPI
Using PSAPI
PSAPI Reference
The same information is generally available through the performance data in the
registry. For more information, see Performance Counters.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Applications designed for use by mobile users require a unique set of connectivity
functions and notifications. In the past these individual applications were required to
implement these features internally. The System Event Notification Service (SENS) now
provides these capabilities in the operating system, creating a uniform connectivity and
notification interface for applications. Using SENS developers can determine connection
bandwidth and latency information from within their application and optimize the
application's operation based on those conditions.
Where applicable
The connectivity functions and notifications of SENS are useful for applications written
for mobile computers or computers connected to high latency local area networks.
Developer audience
This document is intended for software developers who develop applications for mobile
computing and high latency local area networks. This document provides a complete
reference of all parts of the System Event Notification Service including the SENS object
and supporting methods.
Run-time requirements
Requires Microsoft Windows XP or later. For information about which operating systems
are required to use a particular interface or function, see the Requirements section of
the documentation.
In this section
Topic Description
Feedback
Was this page helpful? ツ Yes ト No
Purpose
System Monitor (SYSMON) is the application programming interface (API) that you use
to configure the Microsoft System Monitor ActiveX control. The System Monitor control
lets you view real-time and previously logged performance counter data such as
memory, disk, and processor counter data.
Where applicable
Use the SYSMON API when you add the System Monitor control to any ActiveX-enabled
container such as a Microsoft Word document, or a web page viewed by Internet
Explorer, and you want to modify its default behavior. For example, you can create a
performance monitor that will only display a predefined set of system counters, or with
predefined display settings.
Developer audience
SYSMON is designed for use by C, C++, Visual Basic, and scripting developers.
Run-time requirements
SYSMON is available starting with Microsoft Windows 2000.
For information about run-time requirements for a particular programming element, see
the Requirements section of the reference page for that element.
In this section
Topic Description
Using System Monitor Task-related topics that describe how to use the SYSMON API.
The functions provided by the tool help library make it easier for you to obtain
information about currently executing applications. These functions are designed to
streamline the creation of tools, specifically debuggers.
Feedback
Was this page helpful? ツ Yes ト No
The error reporting feature enables users to notify Microsoft of application faults, kernel
faults, unresponsive applications, and other application specific problems. Microsoft can
use the error reporting feature to provide customers with troubleshooting information,
solutions, or updates for their specific problems. Developers can use this infrastructure
to receive information that can be used to improve their applications.
Users can enable error reporting through the Windows user interface. They can choose
to report errors for specific applications. Administrators can override these settings
using Group Policy.
Developers can register with Windows Desktop Application Program to get information
about the problems customers are experiencing with their applications and help
customers fix these problems. Developers can also use Application Recovery and Restart
to ensure that customers do not lose data when their application crashes and allow
users to quickly return to their tasks.
In this Section
What's New in WER
About WER
Using WER
WER Reference
Related topics
Application Recovery and Restart
Feedback
Was this page helpful? ツ Yes ト No
Get help at Microsoft Q&A
Windows Events
Article • 08/19/2020
Events are typically used for troubleshooting application and driver software.
Prior to Windows Vista, you would use either Event Tracing for Windows (ETW) or
Event Logging to log events.
Windows Vista introduced a new event model that unified both the Event Tracing
for Windows (ETW) and Windows Event Log API.
Windows 10 introduces TraceLogging which builds on ETW and provides a
simplified way to instrument code for native, .NET and WinRT developers.
The new TraceLogging model allows you to include structured data with events,
correlate events, and does not require a separate instrumentation manifest XML file.
The Windows Vista model uses an XML manifest to define the events that you want to
publish. Events can be published to a channel or an ETW session. You can publish the
events to the following types of channels: Admin, Operational, Analytic and Debug. If
you use only ETW to enable the publisher, you do not need to specify channels in your
manifest. For complete details on writing a manifest, see Writing an Instrumentation
Manifest, and for information on channels, see Defining Channels.
To register your event publisher and to publish events, you use the ETW API. For details,
see Providing Events and Developing a Provider. The event publisher will automatically
write the events to the channels specified in the manifest if they are enabled.
If you want to control the events that an event publisher publishes at a finer level of
granularity, use the ETW API. For example, if the manifest defines both write and read
events, you can enable only the write events. An event can also specify a level value such
as warning or error, so you can limit the events that are written to those that specify the
error level. For details, see Controlling Event Tracing Sessions. The events are written to
the session's log file.
Consuming events involves retrieving the events from an event channel, an event log file
(.evtx or .evt files), a trace file (.etl files), or a real-time ETW session. To consume events
from an ETW trace file or a real-time ETW session, use the trace data helper (TDH)
functions in ETW to consume the events. You can also use TDH to read the event
metadata. For details, see Consuming Events. To consume events from an event channel
or an event log file, use the Windows Event Log functions to query or subscribe to
events. For more information, see Querying for Events or Subscribing to Events.
Prior to Windows Vista, you must use Event Tracing for Windows or Event Logging to
publish and consume events.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
TraceLogging is a system for logging events that can be decoded without a manifest. On
Windows, TraceLogging is used in user-mode and kernel-mode to generate Event
Tracing for Windows (ETW) events. TraceLogging builds on Event Tracing for Windows
(ETW) and provides a simplified way to instrument code.
In this section
About TraceLogging
Using TraceLogging
These topics provide a TraceLogging quick start for C/C++ and .NET code, with
examples.
TraceLogging Reference
Developer audience
TraceLogging is designed for use by user-mode application developers and kernel-
mode driver developers who want to add tracing to their code.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Event Tracing for Windows (ETW) provides application programmers the ability to start
and stop event tracing sessions, instrument an application to provide trace events, and
consume trace events. Trace events contain an event header and provider-defined data
that describes the current state of an application or operation. You can use the events to
debug an application and perform capacity and performance analysis.
This documentation is for user-mode applications that want to use ETW. For information
about instrumenting device drivers that run in kernel mode, see WPP Software Tracing
and Adding Event Tracing to Kernel-Mode Drivers in the Windows Driver Kit (WDK).
Where applicable
Use ETW when you want to instrument your application, log user or kernel events to a
log file, and consume events from a log file or in real time.
Developer audience
ETW is designed for C and C++ developers who write user-mode applications.
Run-time requirements
ETW is included in Microsoft Windows 2000 and later. For information about which
operating systems are required to use a particular function, see the Requirements
section of the documentation for the function.
What's New in Event New features that were added to Event Tracing in each release.
Tracing
Using Event Tracing Task-related topics that describe how to use the ETW API.
Event Tracing Reference Detailed descriptions of ETW functions and other programming
elements.
Feedback
Was this page helpful? ツ Yes ト No
Many applications record errors and events in proprietary error logs, each with their
own format and user interface. Data from different applications can't easily be merged
into one complete report, requiring system administrators or support representatives to
check a variety of sources to diagnose problems.
Event logging provides a standard, centralized way for applications (and the operating
system) to record important software and hardware events. The event logging service
records events from various sources and stores them in a single collection called an
event log. The Event Viewer enables you to view logs; the programming interface also
enables you to examine logs.
7 Note
The Event Logging API was designed for applications that run on the Windows
Server 2003, Windows XP, or Windows 2000 operating system. In Windows Vista,
the event logging infrastructure was redesigned. Applications that are designed to
run on Windows Vista or later operating systems should use Windows Event Log to
log events.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Windows Event Log API defines the schema that you use to write an
instrumentation manifest. An instrumentation manifest identifies your event provider
and the events that it logs. The API also includes the functions that an event consumer,
such as the Event Viewer, would use to read and render the events. To write the events
defined in the manifest, use the functions included in the Event Tracing (ETW) API.
Windows Event Log supersedes the Event Logging API beginning with the Windows
Vista operating system.
Developer audience
Windows Event Log is designed for C/C++ programmers.
Run-time requirements
Windows Event Log is included in the operating system beginning with Windows Vista
and Windows Server 2008.
For information about run-time requirements for a particular programming element, see
the Requirements section of the reference page for that element.
In this section
Topic Description
Using Windows Event Procedural guide that shows how to use the Windows Event Log API.
Log
Windows Event Log The data types, functions, enumerations, structures, constants, and
Reference schemas that the API includes.
Feedback
Was this page helpful? ツ Yes ト No
You can subscribe to receive and store events on a local computer (event collector) that
are forwarded from a remote computer (event source). The Windows Event Collector
functions support subscribing to events by using the WS-Management protocol. For
more information about WS-Management, see About Windows Remote Management.
Subscriptions
The following list describes the types of event subscriptions:
For more information about the functions used to collect and forward events, see
Windows Event Collector functions.
Feedback
Was this page helpful? ツ Yes ト No
These topics describe the documents and printing features of Windows that enable
applications to save, view, and print.
In this section
Topic Description
What's New Windows 8 supports printing for Windows Store apps using JavaScript and HTML
for Printing and printing for Windows Store apps using C#/VB/C++ and XAML.
Windows 8 also includes a new COM-based API that provides full support for
Open XPS and access to portions of the new printer drivers that Windows 8
supports. For more information about the new API, see Print Document Package
API.
The Windows Print Driver Inbox Program makes sure that Windows 8 includes
support for a high percentage of the popular printers.
XPS Information about the XPS Document API an XPS Digital Signatures.
Documents
XPS Document API
The XPS Document API is a native Windows API that supports the XPS OM.
The XPS Document API was introduced in Windows 7 and can be used in
user-mode programs and XPSDrv printer drivers.
XPS Digital Signature API
XPS Digital Signatures enable document signing, verification of the signer's
identity, and indication of whether an XPS document has changed since it
was signed.
Printing Information about the printing features supported by Windows. These features
include:
- Print Document Package API
Provides apps with an interface that allows the management of the
PrintDocument package.
- Print Spooler API
Provides an interface to the print spooler so that applications can manage printers
and print jobs.
- Print Ticket API
Provides applications with functions to manage and convert print tickets.
- GDI Print API
Provides applications with a device-independent printing interface.
-
XPS Print API
Provides an interface to the print spooler that applications can use to send XPS
documents to a printer.
Topic Description
Note: The XPS Print API is not supported and may be altered or unavailable in the
future. Client applications should use the Print Document Package API instead.
Print The Print Schema and related technologies describe a printer's features and
Schema specify the printing preferences of a document to printers and viewing
applications. The Print Schema Specification is a downloadable document that
contains information about the Print Schema and how to use it in documents and
printing. The online information that is found in this section is provided for your
information only and might not accurately reflect the current version of the Print
Schema Specification .
Refer to the Print Schema Specification for the most current design information.
Additional resources
The Print Sample sample app demonstrates how to print from a Windows Store app
starting with Windows 8.
The features described in this section are for native Windows programming. To use
similar features in .NET (managed) programming, see Windows Presentation Foundation
Documents.
XPS documents are built on the Packaging API. See the Packaging API, for lower level
access to the contents of an XPS document.
Related topics
Bidirectional printer communications (Hardware Dev Center)
Feedback
Was this page helpful? Yes No
Windows provides APIs and components that support graphics, gaming, and imaging.
In this section
Topic Description
DirectX Graphics DirectX graphics provides a set of APIs that you can use to create games and
and Gaming other high-performance multimedia applications.
Composition This API is the initial public release of the composition swapchain API. It
swapchain allows applications using Composition APIs (such as
Windows.UI.Composition and DirectComposition) to host content that can
be independently rendered and presented to.
Game Mode The Game Mode APIs for the Universal Windows Platform (UWP) allow you
to produce the most optimized gaming experience by taking advantage of
Game Mode in Windows 10.
Gaming Device The Gaming Device Information APIs allow UWP game developers to
Information determine the type of console the game is running on, in order to make run-
time choices on how to best use the hardware.
Windows Imaging The Windows Imaging Component (WIC) is an extensible platform that
Component (WIC) provides low-level API for digital images. WIC supports the standard web
image formats, high dynamic range images, and raw camera data.
Win2D (External Win2D is an easy-to-use Windows Runtime API for immediate mode 2D
Site) graphics rendering with GPU acceleration. It is available to C# and C++
developers writing Windows apps for Windows 8.1, Windows Phone 8.1 and
Windows 10. It utilizes the power of Direct2D, and integrates seamlessly with
XAML and CoreWindow.
ANGLE for ANGLE for Windows Store is an open-source project that allows developers
Windows Store to run OpenGL ES content on Windows by translating OpenGL ES API calls to
(External Site) DirectX 11 API calls. ANGLE for Windows Store supports Windows 8.1,
Windows Phone 8.1, and Windows 10.
7 Note
As of Windows 10, version 1809 (10.0; Build 17763), TruePlay is removed from
Windows. TruePlay documentation is not published.
Related topics
Audio and Video
Feedback
Was this page helpful? ツ Yes ト No
This content focuses on using DirectX in a Win32 application. For information on using
DirectX in a UWP application, see the Windows game development guide (UWP).
Tip
For descriptions of and links to DirectX components in active development, see the
blog post DirectX Landing Page .
In this section
Topic Description
Getting Started with Microsoft DirectX graphics provides a set of APIs that you can use to
DirectX graphics create games and other high-performance multimedia apps. DirectX
graphics includes support for high-performance 2D and 3D graphics.
Direct3D Direct3D enables you to create 3D graphics for games and scientific
apps.
WindowsNumerics.h The windowsnumerics.h header file defines C++ vector and matrix types
APIs in the Windows.Foundation.Numerics namespace. It extends the structs
from Windows.Foundation.Numerics with a range of SIMD-accelerated
mathematical operators and functions for compatible hardware.
Classic DirectX Microsoft DirectX graphics technologies that are currently minimally
Graphics used. We do not recommend using these classic DirectX graphics
technologies for new apps.
XAudio2 APIs Provides a signal processing and mixing foundation for games. XAudio2
replaces DirectSound.
XInput game XInput is a game controller API that enables Windows applications to
controller APIs process controller interactions (including controller rumble effects and
voice input and output). XInput replaces DirectInput. We don't
recommend using these classic DirectX input technologies; and newer
apps should use the latest GameInput API instead. To learn more about
the GameInput API, see GameInput introduction.
Related topics
Audio and Video
Graphics and Gaming
Feedback
Was this page helpful? Yes No
Getting started with DirectX Graphics
Article • 06/13/2022
Microsoft DirectX graphics provides a set of APIs that you can use to create games and
other high-performance multimedia applications. DirectX graphics includes support for
high-performance 2-D and 3-D graphics.
For 3-D graphics, use the Microsoft Direct3D 11 API. Even if you have Microsoft
Direct3D 9-level or Microsoft Direct3D 10-level hardware, you can use the Direct3D 11
API and target a feature level 9_x or feature level 10_x device. For info about how to
develop 3-D graphics with DirectX, see Create 3D graphics with DirectX.
For 2-D graphics and text, use Direct2D and DirectWrite rather than Windows Graphics
Device Interface (GDI).
To learn about how to create a Windows Store app that uses DirectX, see Create your
first Windows Store app using DirectX. You can use the
Windows.UI::Xaml::Controls::SwapChainPanel class to create high-performance DirectX
apps with a XAML UI overlay. For more info about combining XAML and DirectX in a
Windows app, see DirectX and XAML interop.
To learn about how to build a display driver for Windows 8, see Roadmap for the
Windows Display Driver Model (WDDM).
If you need the documentation for previous DirectX versions, see Classic DirectX
Graphics.
Feedback
Was this page helpful? ツ Yes ト No
7 Note
The topic Consume COM components with C++/WinRT shows how to consume
DirectX APIs (and any COM API, for that matter) by using C++/WinRT. That's by far
the most convenient and recommended technology to use.
Alternatively, you can use raw COM, and that's what this topic is about. You'll need a
basic understanding of the principles and programming techniques involved in
consuming COM APIs. Although COM has a reputation for being difficult and complex,
the COM programming required by most DirectX applications is straightforward. In part,
this is because you'll be consuming the COM objects provided by DirectX. There's no
need for you to author your own COM objects, which is typically where the complexity
arises.
A traditional DLL exports free functions. A COM server can do the same. But the COM
components inside the COM server expose COM interfaces and member methods
belonging to those interfaces. Your application creates instances of COM components,
retrieves interfaces from them, and calls methods on those interfaces in order to benefit
from the features implemented in the COM components.
In practice, this feels similar to calling methods on a regular C++ object. But there are
some differences.
A COM object enforces stricter encapsulation than a C++ object does. You can't
just create the object, and then call any public method. Instead, a COM
component's public methods are grouped into one or more COM interfaces. To call
a method, you create the object and retrieve from the object the interface that
implements the method. An interface typically implements a related set of
methods that provide access to a particular feature of the object. For example, the
ID3D12Device interface represents a virtual graphics adapter, and it contains
methods that enable you create resources, for example, and many other adapter-
related tasks.
A COM object is not created in the same way as a C++ object. There are several
ways to create a COM object, but all involve COM-specific techniques. The DirectX
API includes a variety of helper functions and methods that simplify creating most
of the DirectX COM objects.
You must use COM-specific techniques to control the lifetime of a COM object.
The COM server (typically a DLL) doesn't need to be explicitly loaded. Nor do you
link to a static library in order to use a COM component. Each COM component
has a unique registered identifier (a globally-unique identifier, or GUID), which
your application uses to identify the COM object. Your application identifies the
component, and the COM runtime automatically loads the correct COM server DLL.
COM is a binary specification. COM objects can be written in and accessed from a
variety of languages. You don't need to know anything about the object's source
code. For example, Visual Basic applications routinely use COM objects that were
written in C++.
To use a particular interface method, you must not only instantiate an object, you must
also obtain the correct interface from it.
In addition, more than one component might implement the same interface. An
interface is a group of methods that perform a logically-related set of operations. The
interface definition specifies only the syntax of the methods and their general
functionality. Any COM component that needs to support a particular set of operations
can do so by implementing a suitable interface. Some interfaces are highly specialized,
and are implemented only by a single component; others are useful in a variety of
circumstances, and are implemented by many components.
If a component implements an interface, it must support every method in the interface
definition. In other words, you must be able to call any method and be confident that it
exists. However, the details of how a particular method is implemented may vary from
one component to another. For example, different components may use different
algorithms to arrive at the final result. There is also no guarantee that a method will be
supported in a nontrivial way. Sometimes, a component implements a commonly-used
interface, but it needs to support only a subset of the methods. You will still be able to
call the remaining methods successfully, but they will return an HRESULT (which is a
standard COM type representing a result code) containing the value E_NOTIMPL. You
should refer to its documentation to see how an interface is implemented by any
particular component.
The COM standard requires that an interface definition must not change once it has
been published. The author cannot, for example, add a new method to an existing
interface. The author must instead create a new interface. While there are no restrictions
on what methods must be in that interface, a common practice is to have the next-
generation interface include all the of the old interface's methods, plus any new
methods.
It's not unusual for an interface to have several generations. Typically, all generations
perform essentially the same overall task, but they're different in specifics. Often, a COM
component implements every current and prior generation of a given interface's
lineage. Doing so allows older applications to continue using the object's older
interfaces, while newer applications can take advantage of the features of the newer
interfaces. Typically, a descent group of interfaces all have the same name, plus an
integer that indicates the generation. For example, if the original interface were named
IMyInterface (implying generation 1), then the next two generations would be called
IMyInterface2 and IMyInterface3. In the case of DirectX interfaces, successive
generations are typically named for the version number of DirectX.
GUIDs
GUIDs are a key part of the COM programming model. At its most basic, a GUID is a
128-bit structure. However, GUIDs are created in such a way as to guarantee that no two
GUIDs are the same. COM uses GUIDs extensively for two primary purposes.
So, the only unambiguous way to refer to a particular object or interface is by its GUID.
Although a GUID is a structure, a GUID is often expressed in equivalent string form. The
general format of the string form of a GUID is 32 hexadecimal digits, in the format 8-4-
4-4-12. That is, {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}, where each x corresponds to a
hexadecimal digit. For example, the string form of the IID for the ID3D12Device interface
is {189819F1-1DB6-4B57-BE54-1821339B85F7}.
Because the actual GUID is somewhat clumsy to use and easy to mistype, an equivalent
name is usually provided as well. In your code, you can use this name instead of the
actual structure when you call functions, for example when you pass an argument for
the riid parameter to D3D12CreateDevice. The customary naming convention is to
prepend either IID_ or CLSID_ to the descriptive name of the interface or object,
respectively. For example, the name of the ID3D12Device interface's IID is
IID_ID3D12Device.
7 Note
HRESULT values
Most COM methods return a 32-bit integer called an HRESULT. With most methods, the
HRESULT is essentially a structure that contains two primary pieces of information.
Some methods return a HRESULT value from the standard set defined in Winerror.h .
However, a method is free to return a custom HRESULT value with more specialized
information. These values are normally documented on the method's reference page.
The list of HRESULT values that you find on a method's reference page is often only a
subset of the possible values that may be returned. The list typically covers only those
values that are specific to the method, as well as those standard values that have some
method-specific meaning. You should assume that a method may return a variety of
standard HRESULT values, even if they're not explicitly documented.
While HRESULT values are often used to return error information, you should not think
of them as error codes. The fact that the bit that indicates success or failure is stored
separately from the bits that contain the detailed information allows HRESULT values to
have any number of success and failure codes. By convention, the names of success
codes are prefixed by S_ and failure codes by E_. For example, the two most commonly
used codes are S_OK and E_FAIL, which indicate simple success or failure, respectively.
The fact that COM methods may return a variety of success or failure codes means that
you have to be careful how you test the HRESULT value. For example, consider a
hypothetical method with documented return values of S_OK if successful and E_FAIL if
not. However, remember that the method may also return other failure or success
codes. The following code fragment illustrates the danger of using a simple test, where
hr contains the HRESULT value returned by the method.
C++
if (hr == E_FAIL)
{
// Handle the failure case.
}
else
{
// Handle the success case.
}
As long as, in the failure case, this method only ever return E_FAIL (and not some other
failure code), then this test works. However, it's more realistic that a given method is
implemented to return a set of specific failure codes, perhaps E_NOTIMPL or
E_INVALIDARG. With the code above, those values would be incorrectly interpreted as a
success.
If you need detailed information about the outcome of the method call, you need to
test each relevant HRESULT value. However, you may be interested only in whether the
method succeeded or failed. A robust way to test whether an HRESULT value indicates
success or failure is to pass the value to the one of the following macros, defined in
Winerror.h.
The SUCCEEDED macro returns TRUE for a success code, and FALSE for a failure
code.
The FAILED macro returns TRUE for a failure code, and FALSE for a success code.
So, you can fix the preceding code fragment by using the FAILED macro, as shown in
the following code.
C++
if (FAILED(hr))
{
// Handle the failure case.
}
else
{
// Handle the success case.
}
This corrected code fragment properly treats E_NOTIMPL and E_INVALIDARG as failures.
Although most COM methods return structured HRESULT values, a small number use
the HRESULT to return a simple integer. Implicitly, these methods are always successful.
If you pass an HRESULT of this sort to the SUCCEEDED macro, then the macro always
returns TRUE. An example of a commonly-called method that doesn't return an
HRESULT is the IUnknown::Release method, which returns a ULONG. This method
decrements an object's reference count by one and returns the current reference count.
See Managing a COM object's lifetime for a discussion of reference counting.
C++
HRESULT D3D12CreateDevice(
IUnknown *pAdapter,
D3D_FEATURE_LEVEL MinimumFeatureLevel,
REFIID riid,
void **ppDevice
);
While a normal pointer is quite familiar to any C/C++ developer, COM often uses an
additional level of indirection. This second level of indirection is indicated by two
asterisks, ** , following the type declaration, and the variable name typically has a prefix
of pp . For the function above, the ppDevice parameter is typically referred to as the
address of a pointer to a void. In practice, in this example, ppDevice is the address of a
pointer to an ID3D12Device interface.
Unlike a C++ object, you don't access a COM object's methods directly. Instead, you
must obtain a pointer to an interface that exposes the method. To invoke the method,
you use essentially the same syntax as you would to invoke a pointer to a C++ method.
For example, to invoke the IMyInterface::DoSomething method, you would use the
following syntax.
C++
The need for a second level of indirection comes from the fact that you don't create
interface pointers directly. You must call one of a variety of methods, such as the
D3D12CreateDevice method shown above. To use such a method to obtain an interface
pointer, you declare a variable as a pointer to the desired interface, and then you pass
the address of that variable to the method. In other words, you pass the address of a
pointer to the method. When the method returns, the variable points to the requested
interface, and you can use that pointer to call any of the interface's methods.
C++
Indirectly, by calling a DirectX method or function that creates the object for you.
The method creates the object, and returns an interface on the object. When you
create an object this way, sometimes you can specify which interface should be
returned, other times the interface is implied. The code example above shows how
to indirectly create a Direct3D 12 device COM object.
Directly, by passing the object's CLSID to the CoCreateInstance function. The
function creates an instance of the object, and it returns a pointer to an interface
that you specify.
One time, before you create any COM objects, you must initialize COM by calling the
CoInitializeEx function. If you're creating objects indirectly, then the object creation
method handles this task. But, if you need to create an object with CoCreateInstance,
then you must call CoInitializeEx explicitly. When you're finished, COM must be
uninitialized by calling CoUninitialize. If you make a call to CoInitializeEx then you must
match it with a call to CoUninitialize. Typically, applications that need to explicitly
initialize COM do so in their startup routine, and they uninitialize COM in their cleanup
routine.
To create a new instance of a COM object with CoCreateInstance, you must have the
object's CLSID. If this CLSID is publicly available, you will find it in the reference
documentation or the appropriate header file. If the CLSID is not publicly available, then
you can't create the object directly.
The CoCreateInstance function has five parameters. For the COM objects you will be
using with DirectX, you can normally set the parameters as follows.
rclsid Set this to the CLSID of the object that you want to create.
pUnkOuter Set to nullptr . This parameter is used only if you are aggregating objects. A
discussion of COM aggregation is outside the scope of this topic.
riid Set to the IID of the interface that you would like to have returned. The function will
create the object and return the requested interface pointer in the ppv parameter.
ppv Set this to the address of a pointer that will be set to the interface specified by riid
when the function returns. This variable should be declared as a pointer to the
requested interface, and the reference to the pointer in the parameter list should be cast
as (LPVOID *).
Creating an object indirectly is usually much simpler, as we saw in the code example
above. You pass the object creation method the address of an interface pointer, and the
method then creates the object and returns an interface pointer. When you create an
object indirectly, even if you can't choose which interface the method returns, often you
can still specify a variety of things about how the object should be created.
For example, you can pass to D3D12CreateDevice a value specifying the minimum D3D
feature level that the returned device should support, as shown in the code example
above.
If you create your object with CoCreateInstance, then you can request an IUnknown
interface pointer and then call IUnknown::QueryInterface to request every interface you
need. However, this approach is inconvenient if you need only a single interface, and it
doesn't work at all if you use an object creation method that doesn't allow you to
specify which interface pointer should be returned. In practice, you usually don't need to
obtain an explicit IUnknown pointer, because all COM interfaces extend the IUnknown
interface.
Extending an interface is conceptually similar to inheriting from a C++ class. The child
interface exposes all of the parent interface's methods, plus one or more of its own. In
fact, you will often see "inherits from" used instead of "extends". What you need to
remember is that the inheritance is internal to the object. Your application can't inherit
from or extend an object's interface. However, you can use the child interface to call any
of the methods of the child or parent.
Because all interfaces are children of IUnknown, you can call QueryInterface on any of
the interface pointers that you already have for the object. When you do so, you must
provide the IID of the interface that you're requesting and the address of a pointer that
will contain the interface pointer when the method returns.
C++
HRESULT hr = S_OK;
7 Note
In C++ you can make use of the IID_PPV_ARGS macro rather than the explicit IID
and cast pointer: pDXGISwapChain1-
>QueryInterface(IID_PPV_ARGS(&pDXGISwapChain3)); . This is often used for creation
An object's reference count is the number of times one of its interfaces has been
requested. Each time that an interface is requested, the reference count is incremented.
An application releases an interface when that interface is no longer needed,
decrementing the reference count. As long as the reference count is greater than zero,
the object remains in memory. When the reference count reaches zero, the object
destroys itself. You don't need to know anything about the reference count of an object.
As long as you obtain and release an object's interfaces properly, the object will have
the appropriate lifetime.
7 Note
Direct3D 10 or later has slightly modified lifetime rules for objects. In particular,
objects that are derived from ID3DxxDeviceChild never outlive their parent device
(that is, if the owning ID3DxxDevice hits a 0 refcount, then all child objects are
immediately invalid as well). Also, when you use Set methods to bind objects to the
render pipeline, these references don't increase the reference count (that is, they
are weak references). In practice, this is best handled by ensuring that you release
all device child objects fully before you release the device.
You must release all interface pointers, regardless of whether you or the object
incremented the reference count. When you no longer need an interface pointer, call
IUnknown::Release to decrement the reference count. A common practice is to initialize
all interface pointers to nullptr , and then to set them back to nullptr when they are
released. That convention allows you to test all interface pointers in your cleanup code.
Those that are not nullptr are still active, and you need to release them before you
terminate the application.
The following code fragment extends the sample shown earlier to illustrate how to
handle reference counting.
C++
HRESULT hr = S_OK;
CComPtr is a smart pointer provided by the Active Template Library (ATL). The
Microsoft::WRL::ComPtr is a newer version of this implementation that addresses
a number of subtle usage issues, so use of this smart pointer is not recommended
for new projects. For more information, see How to create and use CComPtr and
CComQIPtr.
You'll know if you don't redefine the interfaces for ATL, because you'll see the following
error message.
The following code sample shows how to define the IDirectXFileData interface.
C++
// Explicit declaration
struct __declspec(uuid("{3D82AB44-62DA-11CF-AB39-0020AF71E433}"))
IDirectXFileData;
// Macro method
#define RT_IID(iid_, name_) struct __declspec(uuid(iid_)) name_
RT_IID("{1DD9E8DA-1C77-4D40-B0CF-98FEFDFF9512}", IDirectXFileData);
After redefining the interface, you must use the Attach method to attach the interface to
the interface pointer returned by ::Direct3DCreate9. If you don't, then the IDirect3D9
interface won't be properly released by the smart pointer class.
The CComPtr class internally calls IUnknown::AddRef on the interface pointer when the
object is created and when an interface is assigned to the CComPtr class. To avoid
leaking the interface pointer, don't call **IUnknown::AddRef on the interface returned
from ::Direct3DCreate9.
The following code properly releases the interface without calling IUnknown::AddRef.
C++
CComPtr<IDirect3D9> d3d;
d3d.Attach(::Direct3DCreate9(D3D_SDK_VERSION));
Use the previous code. Don't use the following code, which calls IUnknown::AddRef
followed by IUnknown::Release, and doesn't release the reference added by
::Direct3DCreate9.
C++
CComPtr<IDirect3D9> d3d = ::Direct3DCreate9(D3D_SDK_VERSION);
Note that this is the only place in Direct3D 9 where you'll have to use the Attach
method in this manner.
For more information about the CComPTR and CComQIPtr classes, see their definitions
in the Atlbase.h header file.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Direct2D is a hardware-accelerated, immediate-mode, 2-D graphics API that provides
high performance and high-quality rendering for 2-D geometry, bitmaps, and text. The
Direct2D API is designed to interoperate well with GDI, GDI+, and Direct3D.
Developer audience
Direct2D is designed primarily for use by the following classes of developers:
Run-time requirements
Windows 7 or Windows Vista with Service Pack 2 (SP2) and Platform Update for
Windows Vista and later.
Windows Server 2008 R2 or Windows Server 2008 with Service Pack 2 (SP2) and
Platform Update for Windows Server 2008 and later.
7 Note
The Platform Update for Windows Vista and Platform Update for Windows Server
2008 are a set of run-time libraries that enables developers to target applications to
Windows 7, Windows Vista, Windows Server 2008 R2, and Windows Server 2008.
These updates will be available to all Windows Vista and Windows Server 2008
customers through Windows Update. Third-party applications that require Platform
Update for Windows Vista or Platform Update for Windows Server 2008 can have
Windows Update detect whether the required updated is installed; if it is not,
Windows Update will download and install it in the background.
In this section
Topic Description
About Direct2D Introduces Direct2D, an API that provides Win32 developers with the ability to
perform 2-D graphics rendering tasks with superior performance and visual
quality.
Direct2D Summarizes the steps required to draw with Direct2D and provides example
quickstart for code.
Windows 8
Getting Started Describes how to get started creating Direct2D applications and provides
with Direct2D example code.
Programming This section contains conceptual programming topics that describe how to use
Guide the Direct2D API.
Additional resources
DirectX Graphics and Gaming
DirectWrite
Feedback
Was this page helpful? ツ Yes ト No
Direct3D is a low-level API for drawing primitives with the rendering pipeline, or for
performing parallel operations with the compute shader. See the content below for
more information.
For info about obtaining and installing Direct3D, see Direct3D 12 programming
environment setup.
In this section
Topic Description
Getting Discusses Direct3D in more depth, different application models, different versions,
started rendering, and compute.
with
Direct3D
Direct3D Direct3D 12 provides an API and platform that allows your application to take
12 advantage of the graphics and computing capabilities of PCs equipped with one or
graphics more Direct3D 12-compatible GPUs.
Direct3D You can use Microsoft Direct3D 11 graphics to create 3-D graphics for games and
11 scientific and desktop applications.
Graphics
DXGI DXGI handles enumerating graphics adapters, enumerating display modes, selecting
buffer formats, sharing resources between processes, and presenting rendered
frames to a window or monitor for display.
HLSL HLSL is the high-level shader language for DirectX. Using HLSL, you can create C-like
programmable shaders for the Direct3D pipeline.
DDS The DirectDraw surface file format (DDS) supports uncompressed and compressed
(DXTn) textures, mipmaps, cube maps, and volume maps. It's supported by
DirectXTex, DirectXTK, legacy D3DX, and other DirectX tools.
Feedback
Was this page helpful? ツ Yes ト No
Direct3D is a low-level API for drawing primitives with the rendering pipeline, or for
performing parallel operations with the compute shader.
What is Direct3D?
Direct3D is a low-level API that you can use to draw triangles, lines, or points per frame,
or to start highly parallel operations on the GPU.
Direct3D:
Hides different GPU implementations behind a coherent abstraction. But you still
need to know how to draw 3D graphics.
Is designed to drive a separate graphics-specific processor. Newer GPUs have
hundreds or thousands of parallel processors.
Emphasizes parallel processing. You set up a bunch of rendering or compute state
and then start an operation. You don't wait for immediate feedback from the
operation. You don't mix CPU and GPU operations.
If you want to write a UWP app, use a subset of Direct3D 11, DXGI, and HLSL APIs.
For a list of these APIs, see Win32 and COM APIs for UWP apps. To learn how to
write a Direct3D 11 Windows Store app, see Create 3D graphics with DirectX.
If you write a desktop app, you can use the full set of Direct3D 11, DXGI, and HLSL
APIs.
Starting with Windows 8, we no longer actively support the XNA framework for
desktop apps. But Windows Store apps, UWP apps, and desktop apps can use the
full set of the XAudio2 and DirectXMath APIs. Desktop apps can use the full set of
the XInput APIs, while Windows Store apps and UWP apps can use most of the
XInput APIs; for more info, see XInput Versions.
Feedback
Was this page helpful? ツ Yes ト No
This programming guide contains information about how to use the Direct3D 12
programmable pipeline to create a customized graphics engine.
The Direct3D 12 headers and libraries are part of the Windows 10 SDK. There is no
separate download or installation required to use Direct3D 12.
In this section
Topic Description
Direct3D 12 Direct3D 12 provides an API and platform that allows apps to take advantage of
programming the graphics and computing capabilities of PCs equipped with one or more
guide Direct3D 12-compatible GPUs.
Direct3D 12 This section covers APIs for Direct3D 12-based graphics programming.
reference
Feedback
Was this page helpful? ツ Yes ト No
You can use Microsoft Direct3D 11 graphics to create 3-D graphics for games and
scientific and desktop applications.
Supported
Topic Description
How to Use This section demonstrates how to use the Direct3D 11 API to accomplish several
Direct3D 11 common tasks.
What's new in This section describes features added in Direct3D 11, Direct3D 11.1, and Direct3D
Direct3D 11 11.2.
Programming The programming guide contains information about how to use the Direct3D 11
Guide for programmable pipeline to create realtime 3D graphics for games as well as
Direct3D 11 scientific and desktop applications.
Direct3D 11 This section contains the reference pages for Direct3D 11-based graphics
Reference programming.
For info about new Direct3D 11.1 features that are included with Windows 8, Windows
Server 2012, and are partially available on Windows 7 and Windows Server 2008 R2 via
the Platform Update for Windows 7 , see Direct3D 11.1 Features and the Platform
Update for Windows 7.
Feedback
Was this page helpful? ツ Yes ト No
Though most graphics programming is done using Direct3D, you can use DXGI to
present frames to a window, monitor, or other graphics component for eventual
composition and display. You can also use DXGI to read the contents on a monitor.
Requirement Value
Feedback
Was this page helpful? ツ Yes ト No
HLSL is the C-like high-level shader language that you use with programmable shaders
in DirectX.
For example, you can use HLSL to write a vertex shader, or a pixel shader, and use those
shaders in the implementation of the renderer in your Direct3D application.
Or you could use HLSL to write a compute shader, perhaps to implement a physics
simulation. However, if for example you're inclined to write your own convolution
operator (for image processing) as HLSL in a compute shader, then you'll get better
performance in that scenario if you use Direct Machine Learning (DirectML) instead.
HLSL was created (starting with DirectX 9) to set up the programmable 3D pipeline. You
can program the entire pipeline with HLSL instructions.
Where to go next
Programming guide for HLSL
Reference for HLSL
The programming guide discusses the different kinds of shader stages, and how to
create, compile, optimize, bind, and link shaders.
There you'll also find overviews of, and release notes about, the successive generations
of shader model version that have been released, going back as far as HLSL shader
model 5.
The reference section has a complete listing of the language syntax and of the intrinsic
functions that are built into HLSL in order to simplify your coding requirements.
There also you'll find a discussion of shader models versus profiles, and shader model
reference content going back as far as HLSL shader model 1. There's also content
covering assembly instructions, the D3DCompiler tool, and info about the errors and
warnings that a shader can return.
Feedback
Was this page helpful? Yes No
DDS
Article • 08/19/2020
The DirectDraw Surface file format (.dds) was introduced with DirectX 7 to store
uncompressed and compressed (DXTn) textures. The file format supports mipmaps, cube
maps, and volume maps. The DDS file format is supported by DirectXTex , DirectXTK ,
legacy D3DX, and other DirectX tools. Starting with Direct3D 10, DDS files support
texture arrays.
7 Note
The D3DX (D3DX 9, D3DX 10, and D3DX 11) utility library is deprecated for
Windows 8 and is not supported for Windows Store apps. We recommended that
you make use of DirectXTex , DirectXTK , or both.
Feedback
Was this page helpful? ツ Yes ト No
DXCore is an adapter enumeration API for graphics and compute devices, so some of its
facilities overlap with those of DXGI. DXCore is used by Direct3D 12.
This documentation set contains information about programming with DXCore, as well
as the DXCore reference.
Requirements
Minimum supported client Windows 10, version 2004 (10.0; Build 19041)
Library dxcore.lib
DLL dxcore.dll
In this section
Topic Description
DXCore reference This section covers DXCore APIs declared in dxcore.h and
dxcore_interface.h.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Today's applications must support high-quality text rendering, resolution-independent
outline fonts, and full Unicode text and layout support. DirectWrite, a DirectX API,
provides these features and more.
The API supports measuring, drawing, and hit-testing of multi-format text. DirectWrite
handles text in all supported languages for global and localized applications, building
on the key language infrastructure found in Windows 7. DirectWrite also provides a low-
level glyph rendering API for developers who want to perform their own layout and
Unicode-to-glyph processing.
7 Note
Run-time requirements
Windows 7 or Windows Vista with Service Pack 2 (SP2) and Platform Update for
Windows Vista
Windows Server 2008 R2 or Windows Server 2008 with Service Pack 2 (SP2) and
Platform Update for Windows Server 2008
In this section
Topic Description
Programming Guide The following topics provide an overview of the DirectWrite API.
Sample Code This section contains information about sample programs for
DirectWrite.
Feedback
Was this page helpful? ツ Yes ト No
In this section
Topic Description
DirectStorage API This section is a reference for APIs declared in dstorage.h for
reference DirectStorage-based programming.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The DirectXMath API provides SIMD-friendly C++ types and functions for common
linear algebra and graphics math operations common to DirectX applications. The
library provides optimized versions for Windows 32-bit (x86), Windows 64-bit (x64), and
Windows on ARM/ARM64 through SSE, AVX, and ARM-NEON intrinsics support in the
Visual C++ compiler.
For developers new to DirectXMath, you may want to consider using the SimpleMath
wrapper in the DirectX Tool Kit for DirectX 11 / DirectX12 as a starting point.
In this section
Topic Description
DirectXMath Programming This section contains reference material for the DirectXMath
Reference Library.
Developer audience
The DirectXMath library is designed for C++ developers working on games and DirectX
graphics in Universal Windows Platform apps, Xbox games, and traditional desktop apps
for Windows.
Obtaining DirectXMath
The DirectXMath headers ship in the Windows SDK that comes with Visual Studio 2012
or later, and as an all inline header there is no DLL or static library to link against. It is
also available as a package on NuGet .
The windowsnumerics.h header file defines C++ vector and matrix types in the
Windows.Foundation.Numerics namespace. It extends the structs from
Windows.Foundation.Numerics with a range of mathematical operators and functions.
In this section
Topic Description
plane structure This structure represents a plane using a 3D vector normal and a
distance value.
Feedback
Was this page helpful? ツ Yes ト No
This content focuses on using DirectX in a Win32 application. For information on using
DirectX in a UWP application, see the Windows game development guide (UWP).
Tip
For descriptions of and links to DirectX components in active development, see the
blog post DirectX Landing Page .
In this section
Topic Description
Getting Started with Microsoft DirectX graphics provides a set of APIs that you can use to
DirectX graphics create games and other high-performance multimedia apps. DirectX
graphics includes support for high-performance 2D and 3D graphics.
Direct3D Direct3D enables you to create 3D graphics for games and scientific
apps.
WindowsNumerics.h The windowsnumerics.h header file defines C++ vector and matrix types
APIs in the Windows.Foundation.Numerics namespace. It extends the structs
from Windows.Foundation.Numerics with a range of SIMD-accelerated
mathematical operators and functions for compatible hardware.
Classic DirectX Microsoft DirectX graphics technologies that are currently minimally
Graphics used. We do not recommend using these classic DirectX graphics
technologies for new apps.
XAudio2 APIs Provides a signal processing and mixing foundation for games. XAudio2
replaces DirectSound.
XInput game XInput is a game controller API that enables Windows applications to
controller APIs process controller interactions (including controller rumble effects and
voice input and output). XInput replaces DirectInput. We don't
recommend using these classic DirectX input technologies; and newer
apps should use the latest GameInput API instead. To learn more about
the GameInput API, see GameInput introduction.
Related topics
Audio and Video
Graphics and Gaming
Feedback
Was this page helpful? Yes No
Direct3D 10 Graphics
Article • 01/06/2021
This section contains information about programming with Microsoft Direct3D 10.
In This Section
Item Description
Reference for This section contains the reference pages for the graphics components
Direct3D 10 including the syntax for the API methods, functions, and data structures.
Feedback
Was this page helpful? ツ Yes ト No
This section contains the reference pages for the Direct3D API. Information is contained
in the following sections:
Direct3D Reference
D3DX Reference
Effect Reference
X File Reference
Related topics
Direct3D 9 Graphics
Feedback
Was this page helpful? ツ Yes ト No
This section contains information about programming with the DirectDraw component
of the DirectX application programming interface (API).
DirectDraw is no longer recommended for use. With the release of Direct3D 9.0, all two-
dimensional functionality is contained within Direct3D, its associated helper functions in
D3DX, and the DirectX 11 technology Direct2D. However, the DirectDraw reference
documentation is still available in this section.
In This Section
This section contains the DirectDraw Reference documentation.
Feedback
Was this page helpful? ツ Yes ト No
This section contains a series of technical articles about developing games for Microsoft
Windows.
In this section
Topic Description
64-bit programming This article addresses compatibility and porting issues and helps
for Game Developers developers ease their transition to 64-bit platforms.
Authenticode Signing This article discusses how to get started with authenticating your game
for Game Developers and how to integrate authentication into a daily build process.
Best Security This article discusses best practices to use in game development.
Practices in Game
Development
Cascaded Shadow Cascaded shadow maps (CSMs) are the best way to combat one of the
Maps most prevalent errors with shadowing: perspective aliasing.
Coding For Multiple This topic gives some advice on how to get started with multithreaded
Cores on Xbox 360 programming.
and Microsoft
Windows
Common Techniques This technical article provides an overview of some common shadow
to Improve Shadow depth map algorithms and common artifacts, and explains several
Depth Maps techniques ranging in difficulty from basic to intermediate that can be
used to increase the quality of standard shadow maps.
Crash Dump Analysis This technical article provides info about how to write and use a
minidump.
Debugging with This article provides a high level overview of how to best use symbols in
Symbols your debugging process.
Direct3D 10 This article contains some of the frequently asked questions surrounding
Frequently Asked Direct3D 10 from the point of view of a developer who is porting an
Questions existing application from Direct3D 9 (D3D9) to Direct3D 10 (D3D10).
DirectX Frequently This article contains a collection of Frequently Asked Questions (FAQ)
Asked Questions about Microsoft DirectX.
Topic Description
DirectX Installation This article is intended to address some of the common questions about
for Game Developers the DirectX runtime, and using DirectSetup to install DirectX.
Disabling Shortcut This articles describes how to temporarily disable keyboard shortcuts in
Keys in Games Microsoft Windows to prevent disruption of game play for full screen
games.
Game Timing and This article suggests a more accurate, reliable solution to obtain high-
Multicore Processors resolution CPU timings by using the Windows APIs
QueryPerformanceCounter and QueryPerformanceFrequency.
Games for Windows This article provides technical requirements and best practices for games
Technical that run on Windows.
Requirements
Games for Windows This article provides test cases for games for Windows.
Test Cases
Gaming with Least- This article describes how games developers can author Microsoft
Privileged User Windows games that work well with least-privileged user accounts (also
Accounts known as limited-user accounts).
Installation and This article describes a set of best practices that can help reduce user
Maintenance of frustration about the time required to install a game, prevent unnecessary
Games support calls, and allow users to start playing your game as quickly and
painlessly as possible.
Lockless This article gives an overview of some of the issues to consider when
Programming trying to use lockless programming techniques.
Considerations for
Xbox 360 and
Microsoft Windows
Installation Best This article describes creating a chain of trust design for Massively
Practices for Multiplayer Online Games (MMOG) client installation and custom game
Massively Multiplayer update systems that work well with Windows and the security model of
Online Games Windows Vista and Windows 7.
Installing and Using This article offers a tutorial for how to install and use the standard
Input Method Editors Windows Input Method Editor (IME).
Introduction to the This article introduces the 10-foot experience and explores the list of
10-Foot Experience things that you should consider first about this new interaction pattern,
for Windows Game even if you aren't expecting your game to be played this way.
Developers
Topic Description
Making Video Games This article is for game content developers and producers who want to
Accessible: Business reach the accessibility community market by adding basic accessibility
Justifications and features to help people with disabilities or impairments.
Design
Considerations
Optimizing DVD This article discusses how to optimize DVD performance for Windows
performance for games.
Windows Games
Patching Game This article examines some methods of patching that will work well in
Software in Windows Windows Vista and Windows 7, as well as Windows XP.
XP, Windows Vista,
and Windows 7
Resource This article discusses best practices for dealing with resources generally,
Management Best how managed and unmanaged resources behave, and provides some
Practices detail on how resources are typically handled by the runtime and drivers.
Simplifying Game This article outlines some concepts that developers of games for
Installation Windows can and should implement to improve the overall experience.
Taking Advantage of This article focuses on the best way to optimize the performance of high-
High-Definition definition mouse input in a game like a first-person shooter.
Mouse Movement
The Direct3D This article provides a technical explanation for Direct3D application
Transformation developers on how to set the parameters of the Direct3D Transformation
Pipeline Pipeline by the direct manipulation of Direct3D matrices.
Top Issues for This article highlights many of the common issues we've seen in current-
Windows Titles generation PC games.
Top Tools and This articles describes tools and techniques that you can use to help
Techniques for reduce the number of support calls you receive.
Making More Robust
Windows Games
User Account Control This article describes the guidelines and best practices for game
for Game Developers developers to work effectively with the User Account Control (UAC)
security feature introduced in Windows Vista.
Using an Input This article explains how you can implement a basic IME edit control in a
Method Editor in a full-screen DirectX application.
Game
Windows Firewall for This article describes the Windows Firewall - why it exists, what it
Game Developers accomplishes, and how it does so. Most importantly, it describes how to
configure your game to work well with the firewall.
Topic Description
Windows Games This article outlines the process of registering a game with Games
Explorer for Game Explorer and parental controls on Windows Vista and Windows 7 by
Developers using the new GDF schema.
Windows Installer for This article gives an overview of Windows Installer, specifically targeted to
Game Developers game developers. For detailed documentation on the features and APIs
mentioned in this article, please refer to the Windows Platform SDK.
Feedback
Was this page helpful? ツ Yes ト No
Starting with Windows 8, the DirectX SDK is included as part of the Windows SDK.
Because the Windows SDK is the primary developer SDK for Windows, DirectX is now
included in it. You can now use the Windows SDK to build great games for Windows. To
download the Windows 11 SDK, Windows 10 SDK, or Windows 8.x SDK see Windows
SDK and emulator archive.
The following technologies and tools, formerly part of the DirectX SDK, are now part of
the Windows SDK.
Technology or Description
tool
Windows The headers and libraries for Direct3D and other Windows graphics APIs, like
Graphics Direct2D, are available in the Windows SDK.
Components Note: The deprecated D3DX9/D3DX10/D3DX11 utility libraries are available
via NuGet , but there are also a number of open source alternatives . The
D3DCSX DirectCompute utility library and redistributable DLL is available in
the Windows SDK. D3DX12 is available on GitHub .
HLSL compiler The HLSL compiler is a tool in the appropriate architecture subdirectory
(FXC.EXE) under the bin folder in the Windows SDK.
Note: The D3DCompiler API and redistributable DLL is available in the
Windows SDK.
For DirectX 12 development, use the DXCompiler in the Windows SDK and
hosted on GitHub .
PIX for Windows A replacement for the PIX for Windows tool is now a feature in Microsoft
Visual Studio, called Visual Studio Graphics Debugger. This feature has
greatly improved usability, support for Windows 8, and Direct3D 11.1, and
integration with traditional Microsoft Visual Studio features such as call
stacks and debugging windows for HLSL debugging. For more info about
this new feature, see Debugging DirectX Graphics.
XAudio2 for The XAudio2 API is now a system component in Windows 11, Windows 10,
Windows and Windows 8.x. The headers and libraries for XAudio2 are available in the
Windows SDK. For Windows 7 support, see XAudio2Redist.
XInput for The XInput 1.4 API is now a system component in Windows 11, Windows 10,
Windows and Windows 8.x. The headers and libraries for XInput are available in the
Windows SDK.
Note: Legacy XInput 9.1.0 is also available as part of Windows 7 or later.
XNAMATH The most recent version of XNAMATH, which is updated for new instruction
sets as well as ARM/ARM64, is now DirectXMath. The headers for
DirectXMath are available in the Windows SDK and on GitHub .
DirectX Control The DirectX Control Panel and DirectX Capabilities Viewer utilities are
Panel and DirectX included in the appropriate architecture subdirectory under the bin folder in
Capabilities the Windows SDK. DirectX Capabilities Viewer is also available on GitHub .
Viewer
XACT The Xbox Audio Cross Platform Tool (XACT) is no longer supported for use
on Windows.
Games Explorer The Games Explorer API presents games to users of Windows. The Games
and GDFMAKER Explorer API is supported only on Windows Vista and Windows 7. Use the
Games Definition File Maker tool (GDFMAKER.EXE) to declare game ratings
for Windows Store apps.
The Game Definition File Maker tool (GDFMaker.exe) is included in the x86
subdirectory under the bin folder in the Windows SDK, and supports both
Windows Store apps and Win32 desktop applications.
Samples You can find sample applications that highlight DirectX 12 technologies on
Windows in the DirectX samples repo. Most samples for older versions of
Direct3D are also available online. For more info about these samples, see
DirectX SDK Samples Catalog .
Managed DirectX The .NET DirectX assemblies are deprecated and are not recommended for
1.1 use by new applications. There are a number of alternatives available. See
DirectX and .NET .
The legacy DirectX SDK is available for download from Microsoft Download Center if
required, but use for new projects is not recommended.
7 Note
The DirectX SDK fails to install if you have a certain version of the Visual C++ 2010
Redistributable Package already installed. For more info about and a solution to fix
this issue, see "S1023" error when you install the DirectX SDK (June 2010) .
These steps also apply to your own projects that are dependent on the DirectX SDK.
1. Ensure that the June 2010 release of the DirectX SDK is installed on your
development computer. If you install onto a computer running Windows 8 and
later, you will be prompted and required to enable .NET 3.5 as a prerequisite
installation to the DirectX SDK.
7 Note
The DirectX SDK fails to install if you have a certain version of the Visual C++
2010 Redistributable Package already installed. For more info about and a
solution to fix this issue, see "S1023" error when you install the DirectX SDK
(June 2010) .
2. Make sure that you are using one of the premium Visual Studio SKUs. Microsoft
Visual Studio Express 2012 for Windows 8 or Microsoft Visual Studio Express 2013
for Windows won't build Windows 8 and later desktop applications such as the
DirectX SDK samples. To install one of the premium Visual Studio SKUs, go to:
Visual Studio downloads and follow the instructions.
3. Use the DirectX SDK Sample Browser to install the project files for the desired
sample. Open the sample’s Microsoft Visual Studio 2010 compatible solution file
(suffixed with _2010).
4. If you are opening the sample on a system that only has Microsoft Visual
Studio 2012 or Microsoft Visual Studio 2013 installed, you get the following
message: "This solution contains one or more projects using an earlier version of
VC++ compiler and libraries. Each project can be updated to use the VC++
compiler and libraries (v110)." Choose the Update option from this dialog box to
update before you open the project.
Otherwise, you can update to the Visual Studio 2012 or Visual Studio 2013 C++ 11
compiler and libraries after they have loaded by right-clicking on the solution and
choosing Update VC++ projects.
5. D3DX is not considered the canonical API for using Direct3D in Windows 8 and
later and therefore isn't included with the corresponding Windows SDK. Investigate
alternate solutions for working with the Direct3D API. For legacy projects, such as
the Windows 7 (and earlier) DirectX SDK samples, the following steps are necessary
to build applications with D3DX using the DirectX SDK:
a. Modify the project’s VC++ directories as follows to use the right order for SDK
headers and libraries.
i. Open **Properties** for the project and select the **VC++ Directories** page.
ii. Select **All Configurations and All Platforms**. iii. Set these directories as
follows:
d. All D3DX DLLs are installed onto your development computer by the DirectX
SDK installation. Ensure that the necessary D3DX dependencies are redistributed
with any sample or with your application if it is moved to another machine.
6. Ensure that you are using the new version of the HLSL shader compiler by
observing the following conditions:
a. Changing the executable directory as per step 5 will cause project builds to use
FXC from the Windows SDK install. Be aware that HLSL files are now officially
recognized by Visual Studio. You can add them as project files and set compiler
options through the project system.
b. Invoking run-time compilation through the legacy D3DX DLL will use the
incorrect older version of the HLSL compiler. Replace all references to
D3DXCompile*, D3DX10Compile*, and D3DX11Compile* APIs in your code with
the D3DCompile function in D3DCOMPILER_46.DLL or D3DCOMPILER_47.DLL.
7. Any project that uses the XInput API and is intended to run on Windows 7 or older
versions of Windows need to use either the legacy version (9.1.0) or will need to
explicitly include the headers and libraries for this component from the DirectX
SDK. The XInput header and XINPUT.LIB that are included in the Windows SDK
target only the version (1.4) that ship as part of Windows 8 and later. The same
header can be used with XINPUT9_1_0.LIB to use the legacy version, which is
included with older versions of Windows. The legacy version of XInput doesn't
detect full capabilities or support controller-integrated audio, so if support for
these features is required, you must use the DirectX SDK version (1.3).
To use the full-featured down-level XInput API, you should #include the specific
XInput headers from the DirectX SDK directly:
#include <%DXSDK_DIR%Include\xinput.h>
...and in your linker options for Additional Dependencies, link directly to the
DirectX SDK XInput library:
%DXSDK_DIR%Include\<arch>\xinput.lib
8. Any project that uses the XAudio2 API and is intended to run on Windows 7 or
older versions of Windows need to use either the older version (9.1.0) or explicitly
include the headers and libraries for this component from the DirectX SDK. The
XAudio2 headers and libraries that are included with the Windows SDK target only
the version (2.8) that is included as part of Windows 8.
For example, with XAudio2, you should #include the specific XAudio2 headers
from the DirectX SDK directly:
#include <%DXSDK_DIR%Include\xaudio2.h>
...and in your linker options for Additional Dependencies, link directly to the
DirectX SDK XAudio2 library:
%DXSDK_DIR%Include\<arch>\xaudio2.lib
9. If you’ve used the DirectX SDK with past versions of Visual Studio, the Visual
Studio 2010 upgrade might have migrated the DirectX SDK path into your default
project settings. It is recommended that you remove these settings to prevent
future build errors. In the
%USERPROFILE%\AppData\Local\Microsoft\MSBuild\v4.0 directory, modify the
Microsoft.Cpp.Win32.user and Microsoft.Cpp.x64.user files to remove all
references to DXSDK_DIR paths. Alternatively, you can remove the entire
<PropertyGroup> node that contains the Path entries such as <ExecutablePath>
and <IncludePath> to revert to standard defaults. If you don’t see references to
DXSDK_DIR in these files, no changes are necessary.
10. If the resulting app supports Windows Vista with Service Pack 2 (SP2) as well as
Windows 7 and Windows 8 and later, set the Preprocessor Definition named
_WIN32_WINNT to 0x600. If it only supports Windows 7 and Windows 8 and later,
set it to 0x601.
For example:
a. Open Properties for the project and select C/C++ > Preprocessor.
b. Select All Configurations and All Platforms.
c. Go to the Preprocessor Definitions section and set _WIN32_WINNT=0x600.
d. Click Apply.
Related topics
Games for Windows and the DirectX SDK
Feedback
Was this page helpful? ツ Yes ト No
This section lists tools and utilities provided for DirectX graphics.
In this section
Topic Description
Debugging DirectX apps You can use Visual Studio and the Windows 8 SDK to debug DirectX
remotely apps remotely.
Effect-Compiler Tool FXC (fxc.exe) is an offline tool for compiling HLSL shaders for all
versions of Direct3D. The tool is located at: (SDK
root)\Utilities\Bin\x86\
Direct3D Diagnostics This section covers APIs for the Direct3D graphics diagnostics capture
Capture Interface interface.
Reference
Feedback
Was this page helpful? ツ Yes ト No
Purpose
This section contains technical articles that describe WARP and Windows 7's newly
added support for Flip Mode Present and its associated Present Statistics in Direct3D
9Ex and Desktop Window Manager. This section also contains technical articles about
Windows graphics APIs, porting Direct3D 9 APIs to Microsoft DirectX Graphics
Infrastructure (DXGI) APIs, and how to deploy Direct3D 11.
Developer audience
These technical articles are for DirectX graphics application developers.
In this section
Topic Description
Platform Describes what components of the Windows 8 graphics stack become available,
Update for and to what extent, through the Platform Update for Windows 7 .
Windows 7
Direct3D 9Ex Describes Windows 7's newly added support for Flip Mode Present and its
Improvements associated Present Statistics in Direct3D 9Ex and Desktop Window Manager.
Target applications include video or framerate-based presentation applications.
Applications using Direct3D 9Ex Flip Mode Present reduce the system resource
load when DWM is enabled. Present Statistics enhancements associated with Flip
Mode Present enable Direct3D 9Ex applications to better control the rate of
presentation by providing real-time feedback and correction mechanisms.
Detailed explanations and pointers to sample resources are included.
WARP Guide Provides a guide of Windows Advanced Rasterization Platform (WARP), a high
speed software rasterizer.
Topic Description
DirectX Discusses issues about porting Direct3D 9 APIs to DXGI APIs and features of
Graphics various versions of DXGI.
Infrastructure
(DXGI): Best
Practices
Using DirectX This topic provides a technical overview of rendering high dynamic range
with high Direct3D 11 and Direct3D 12 content to an HDR10 display using Windows 10
dynamic advanced color support.
range displays
and advanced
color
Feedback
Was this page helpful? ツ Yes ト No
Purpose
XAudio2 is a low-level audio API that provides signal processing and mixing foundation
for developing high performance audio engines for games.
In this section
Topic Description
Programming This section lists the overview topics for the XAudio2 application
Guide programming interface (API).
Programming This section contains reference topics for the Microsoft XAudio2 application
Reference programming interface (API).
Developer audience
XAudio2 APIs are designed for use by game developers who want to improve
performance in their games.
Feedback
Was this page helpful? ツ Yes ト No
) Important
Purpose
XInput Game Controller API enables applications to receive input from a controller.
In this section
Topic Description
Programming This guide contains information on how to use the XInput API to interact
Guide with a controller when it is connected to a Windows PC.
Developer audience
XInput Game Controller APIs is designed for use by developers who want to use a
controller for their Windows applications.
Feedback
Was this page helpful? Yes No
DirectComposition
Article • 08/23/2019
7 Note
Purpose
Microsoft DirectComposition is a Windows component that enables high-performance
bitmap composition with transforms, effects, and animations. Application developers
can use the DirectComposition API to create visually engaging user interfaces that
feature rich and fluid animated transitions from one visual to another.
Developer audience
The DirectComposition API is intended for experienced and highly-capable graphics
developers who know C/C++, have a solid understanding of the Component Object
Model (COM), and are familiar with Windows programming concepts.
Run-time requirements
DirectComposition was introduced in Windows 8. It is included in 32-bit, 64-bit, and
ARM platforms.
In this section
Topic Description
Why use This topic describes the capabilities and benefits of DirectComposition.
DirectComposition?
How to Use This section describes best practices for using the DirectComposition API,
DirectComposition and demonstrates how to use the API to accomplish several common tasks.
DirectComposition This section provides detailed reference information for the elements that
reference make up the DirectComposition API.
DirectComposition The following sample applications show how to use the DirectComposition
samples API and demonstrate its capabilities.
Feedback
Was this page helpful? ツ Yes ト No
Overview
This API is the initial public release of the composition swapchain API. It allows
applications using Composition APIs (such as Windows.UI.Composition and
DirectComposition) to host content that can be independently rendered and presented
to. In many ways, this type of presented content is conceptually similar to a DXGI
swapchain. Both offer the ability to render to a buffer, and then present that buffer to
the screen. However, the composition swapchain API offers the ability for presents to
target a specific time to appear (the PresentAt time), whereas DXGI doesn't, and the
composition swapchain API offers more freedom than DXGI around the ordering of
buffers available to be presented.
The focus of the initial version of this API is to enable media frameworks, such as
Windows Media Foundation, to effectively use timed presentation.
In this section
Topic Description
Composition swapchain This API is a spiritual successor to the DXGI swapchain, which allows
programming guide applications to render and present content to the screen.
Related topics
Composition Swapchain API Reference
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Windows GDI+ is a class-based API for C/C++ programmers. It enables applications to
use graphics and formatted text on both the video display and the printer. Applications
based on the Microsoft Win32 API do not access graphics hardware directly. Instead,
GDI+ interacts with device drivers on behalf of applications. GDI+ is also supported by
Microsoft Win64.
Where applicable
GDI+ functions and classes are not supported for use within a Windows service.
Attempting to use these functions and classes from a Windows service may produce
unexpected problems, such as diminished service performance and run-time exceptions
or errors.
7 Note
When you use the GDI+ API, you must never allow your application to download
arbitrary fonts from untrusted sources. The operating system requires elevated
privileges to assure that all installed fonts are trusted.
Developer audience
The GDI+ C++ class-based interface is designed for use by C/C++ programmers.
Familiarity with the Windows graphical user interface and message-driven architecture is
required.
Run-time requirements
GDI+ can be used in all Windows-based applications. GDI+ was introduced in
Windows XP and Windows Server 2003. For information about which operating systems
are required to use a particular class or method, see the More Information section of the
documentation for the class or method.
In this section
Topic Description
Related topics
Windows GDI
DirectX
OpenGL
Windows Multimedia
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Microsoft Windows graphics device interface (GDI) enables applications to use
graphics and formatted text on both the video display and the printer. Windows-based
applications do not access the graphics hardware directly. Instead, GDI interacts with
device drivers on behalf of applications.
Where applicable
GDI can be used in all Windows-based applications.
Developer audience
This API is designed for use by C/C++ programmers. Familiarity with the Windows
message-driven architecture is required.
Run-time requirements
For information on which operating systems are required to use a particular function,
see the Requirements section of the documentation for the function.
In this section
Bitmaps
Brushes
Clipping
Colors
Coordinate Spaces and Transformations
Device Contexts
Filled Shapes
Fonts and Text
Lines and Curves
Metafiles
Multiple Display Monitors
Painting and Drawing
Paths
Pens
Printing and Print Spooler
Rectangles
Regions
Related topics
DirectX
GDI+
OpenGL
Feedback
Was this page helpful? ツ Yes ト No
You can use the monitor configuration functions to get information from a monitor and
to change a monitor's settings. You can use these functions to :
Change a monitor's geometry settings, such as the width and height of the display.
Change image settings, such as brightness and contrast.
Reset a monitor's settings to their factory defaults.
Degauss the monitor.
Internally, the monitor configuration functions use the Display Data Channel Command
Interface (DDC/CI) to send commands to the monitor.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
As a software interface for graphics hardware, OpenGL renders multidimensional objects
into a framebuffer. The Microsoft implementation of OpenGL for the Windows operating
system is industry-standard graphics software with which programmers can create high-
quality still and animated three-dimensional color images. The version of OpenGL
described in this section is 1.1.
For information about OpenGL ES running on Windows, see ANGLE for Windows
Store .
Where applicable
OpenGL is built for compatibility across hardware and operating systems. This
architecture makes it easy to port OpenGL programs from one system to another. While
each operating system has unique requirements, the OpenGL code in many programs
can be used as is.
Developer audience
Designed for use by C/C++ programmers, OpenGL requires familiarity with the
Windows graphical user interface as well as message-driven architecture.
Run-time requirements
For more information on which operating systems are required for a particular function,
see the Requirements section of the documentation for the function.
In this section
Topic Description
Related topics
DirectX Graphics and Gaming
Still Image
Windows GDI
Windows Multimedia
Windows API
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Windows Imaging Component (WIC) is an extensible platform that provides low-
level API for digital images. WIC supports the standard web image formats, high
dynamic range images, and raw camera data. WIC also supports additional features
such as:
Developer Audience
WIC is designed to meet the needs of the following classes of developers:
In this section
Topic Description
Learn about the Desktop APIs for Windows Mixed Reality devices. For more information,
see the Mixed Reality Dev Center or the Windows.Graphics.Holographic Windows
Runtime API reference content.
In this section
Topic Description
Windows Mixed Reality The topics contained in this section provide the reference
COM Interfaces specifications for Windows Mixed Reality interfaces.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Color management schemes are implemented in Microsoft Windows operating systems
to improve the rendering of color content in all forms of digital communication.
The color management scheme that's used starting with Windows 2000, Windows XP,
and Windows Server 2003 is called Image Color Management (ICM) 2.0. The color
management scheme that's used starting with Windows Vista is called Windows Color
System (WCS) 1.0. The WCS 1.0 color management scheme is a superset of ICM 2.0 APIs
and functionality.
Where applicable
ICM can be used in all applications on Windows 2000 and later operating systems. WCS
can be used in all applications on Windows Vista and later operating systems.
Developer audience
The WCS API is designed for use by C/C++ programmers. Familiarity with the Windows
graphical user interface, message-driven architecture, and a working knowledge of color
management concepts are required.
Run-time requirements
Applications that use the ICM API require Windows 2000 or later. Applications that use
the WCS API require Windows Vista or later. For specific run-time information on a
function, see the Requirements section of the reference page for that function.
In this section
Security Considerations: Windows Color System
Basic color management concepts
Windows Color System Schemas and Algorithms
About Windows Color System Version 1.0
Using WCS 1.0
Reference
WCS 1.0 Glossary
Related topics
OpenGL
Windows Multimedia
Windows GDI
Feedback
Was this page helpful? ツ Yes ト No
Windows has APIs, components, and services that support your desktop apps' use of
networking and the Internet. They provide:
HTTP APIs.
Network and network management.
DNS and DHCP.
Networking capabilities that are independent of particular network
implementations.
Remote Access Service.
Telephony and fax.
In this section
Topic Description
Fax Service The fax service provides fax functionality for clients on a local area network.
Get The Get Connected Wizard application programming interface (API) allows
Connected developers to create network, Internet and virtual private network (VPN)
Wizard API connections, determine whether Internet connectivity is present, and register
wizard pages for capturing required user information for specific connection
types.
Topic Description
HTTP Server The HTTP Server API enables applications to communicate over HTTP without
API using Microsoft Internet Information Server (IIS).
IP Helper The Internet Protocol Helper (IP Helper) API enables the retrieval and
modification of network configuration settings for the local computer.
Management The Management Information Base (MIB) API provides a set of structures used to
Information contain network and network management data for a number of technologies,
Base including Remote Access Routing Services, Internet Protocol (IP) Helper, and
Simple Network Management Protocol (SNMP).
Multicast The Multicast Address Dynamic Client Allocation Protocol (MADCAP) enables
Address applications to obtain, renew, and release multicast addresses.
Dynamic
Client
Allocation
Protocol
(MADCAP)
Network This topic describes high-level network interface concepts on Windows, including
interfaces the ways they can be identified in code and their properties.
Network List The Network List Manager API enables applications to retrieve a list of available
Manager network connections. Applications can filter networks, based on attributes and
signatures, and choose the networks best suited to their task. The Network List
Manager infrastructure notifies applications of changes in the network
environment, thus enabling applications to dynamically update network
connections.
Network The network management functions provide the ability to manage user accounts
Management and network resources.
Quality of Quality of Service (QOS), an industry-wide initiative, enables more efficient use of
Service (QOS) the network.
Topic Description
Remote Microsoft Remote Procedure Call (RPC) defines a powerful technology for
Procedure creating distributed client/server programs. The RPC run-time stubs and libraries
Call (RPC) manage most of the processes relating to network protocols and communication.
This enables you to focus on the details of the application rather than the details
of the network.
Routing and Remote Access Service (RAS) can be used to create client applications. These
Remote applications display RAS common dialog boxes, manage remote access
Access connections and devices, and manipulate phone-book entries.
Service
SMB The SMB Management API provides WMI classes and methods to manage shares
Management and share access.
API
Teredo Teredo is an IPv6 transition technology that provides address assignment and
host-to-host automatic tunneling for unicast IPv6 traffic when IPv6/IPv4 hosts are
located behind one or multiple IPv4 network address translators (NATs).
Windows Windows Filtering Platform (WFP) is a set of API and system services that provide
Filtering a platform for creating network filtering applications. The WFP API allows
Platform developers to write code that interacts with the packet processing that takes
place at several layers in the networking stack of the operating system. Network
data can be filtered and modified before it reaches its destination.
Windows Windows Firewall with Advanced Security and related firewall technologies enable
Firewall developers to share Internet connections, protect connections using a firewall,
Technologies and provide Network Address Translation (NAT).
Windows The Windows networking (WNet) functions allow you to implement networking
Networking capabilities in your application without making allowances for a particular
(WNet) network provider or physical network implementation.
Topic Description
Windows RSS The Windows RSS Platform is an API that enables applications to access and
Platform manipulate the Common Feed List, a collection of Really Simple Syndication (RSS)
feeds to which the user has subscribed.
Windows Microsoft Windows HTTP Services (WinHTTP) provides developers with an HTTP
HTTP client application programming interface (API) to send requests through the HTTP
Services protocol to other HTTP servers.
(WinHTTP)
XML HTTP The XML HTTP Request 2 interfaces allow application to conduct HTTP request
Request 2 operations in multithreaded apartments (MTA) and use callbacks to receive
notification of required information during response processing.
Related topics
Internet
Wireless Networking
Feedback
Was this page helpful? ツ Yes ト No
See Configure Delivery Optimization for Windows 10 updates for more information.
In this section
Topic Description
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Domain Name System (DNS), a locator service in Microsoft Windows, is an industry-
standard protocol that locates computers on an IP-based network. IP networks, such as
the Internet and Windows networks, rely on number-based addresses to process data.
Users however, can more easily remember name addresses, so it is necessary to
translate user-friendly names (such as www.microsoft.com ) into addresses that the
network can recognize (such as 207.46.131.137).
Where applicable
Windows and Active Directory use DNS. DNS is the primary locator service for the
Internet and Active Directory, and therefore, DNS is considered a base service for
Windows and Active Directory.
Developer audience
Windows provides functions that enable application programmers to use DNS, such as
programmatic DNS query, record compare, and name lookup.
Run-time requirements
DNS is used on all IP networks that require an Internet-compatible locator service.
However, the DNS API requires Windows 2000 or later.
In this section
Topic Description
DNS WMI Provider General information and reference documentation for the DNS WMI
provider.
Related topics
DHCP
Directory Services
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The HTTP Server API enables applications to communicate over HTTP without using
Microsoft Internet Information Server (IIS). Applications can register to receive HTTP
requests for particular URLs, receive HTTP requests, and send HTTP responses. The HTTP
Server API includes SSL support so that applications can exchange data over secure
HTTP connections without IIS. It is also designed to work with I/O completion ports.
Developer audience
This API is designed for use by C/C++ programmers.
Run-time requirements
The HTTP Server API is supported on Windows Server 2003 operating systems and on
Windows XP with Service Pack 2 (SP2). Be aware that Microsoft IIS 5 running on
Windows XP with SP2 is not able to share port 80 with other HTTP applications running
simultaneously.
In this section
Topic Description
HTTP Server API Documentation of specific functions, structures, and enumeration types
Reference available in HTTP.
HTTP Server Sample A sample application that shows how to use the HTTP Server API to
Application perform server-side tasks.
Related topics
Windows HTTP Services (WinHTTP)
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Internet Protocol Helper (IP Helper) API enables the retrieval and modification of
network configuration settings for the local computer.
Where applicable
The IP Helper API is applicable in any computing environment where programmatically
manipulating network and TCP/IP configuration is useful. Typical applications include IP
routing protocols and Simple Network Management Protocol (SNMP) agents.
Developer audience
The IP Helper API is designed for use by C/C++ programmers. Programmers should also
be familiar with Windows networking and TCP/IP networking concepts.
Run-time requirements
The IP Helper API can be used on all Windows platforms. Not all operating systems
support all functions. Where certain implementations or capabilities of Windows Sockets
2 platform restrictions do exist, they are clearly noted in the documentation. If an IP
Helper function is called on a platform that does not support the function,
ERROR_NOT_SUPPORTED is returned. For more specific information about which
operating systems support a particular function, refer to the Requirements sections in
the documentation.
In this section
Topic Description
Using IP Procedures and programming techniques used with IP Helper. This section includes
Helper basic IP Helper programming techniques, such as Getting Started With IP Helper.
IP Helper Reference documentation for the IP Helper functions, structures, and enumerations.
reference
Related topics
Windows Sockets 2
Feedback
Was this page helpful? ツ Yes ト No
This topic describes high-level network interface concepts on Windows, including the ways they can be
identified in code and their properties.
) Important
This topic is intended for a developer audience, both for Windows desktop networking apps and kernel
mode networking drivers. Nevertheless, some of the information presented here can also be useful for
system administrators managing network interfaces through PowerShell cmdlets.
Overview
A network interface is the point where two pieces of network equipment or protocol layers connect. Typically,
this is represented by a physical Network Interface Card (NIC) for connection between a computer and a private
or public network. However, it can also take the form of a software-only component such as the loopback
interface ( 127.0.0.1 for IPv4 or ::1 for IPv6).
Network interfaces are defined by the Internet Engineering Task Force (IETF) in RFC 2863 and are not meant
to be defined by Windows. For detailed questions about the meaning of network interface identifiers such as
ifIndex, see the IETF's definitions of them. The rest of this topic discusses Windows-specific implementation
details.
In code, a network interface can be identified in many ways. The following table details the ways a network
interface can be identified along with associated properties. We recommend using the interface GUID (ifGuid)
for programming unless a specific API requires a different network interface identifier.
7 Note
In the following table, bolded cells represent a property that is desirable for networking programmers.
ifAlias 514 Yes for No Sometimes5 Yes Yes Yes No Yes Usually4
bytes NICs4
1. IfIndexes are not guaranteed to be stable across reboots, even though they often receive the same value
as the previous boot. Therefore, it is not recommended that drivers use ifIndex except where required by
an API.
2. Some netsh commands take ifIndex , or index , as an input. Therefore, some administrative users are
familiar with the ifIndex property if they use the netsh command frequently.
3. If a machine is cloned or imaged, then some of the GUIDs might be the same. Also, certain special network
interfaces such as the built-in Teredo interface might have the same GUID on all machines.
4. NetCfg enforces that an ifAlias is a non-empty string and is unique among all NICs. However, the NDIS
interface provider does not. Thererfore, it is possible to find special network interfaces with duplicate or
empty names. This is most commonly seen with LBFO teams.
5. Only if the firmware supports Consistent Device Naming. Typcically, servers have this feature.
6. NetCfg assigns unique ifDescrs to all network interfaces. However, drivers can call an API to change the
ifDescr to anything, including something that is not unique. Some 3rd party software packages do this.
7. Not all media types have a "MAC address." For example, some tunnels do not have this concept and
simply advertise a zero-length byte array as their network address.
8. Only present on network interfaces that are backed by a PnP device. For example, loopback interfaces,
light weight filter interfaces, interfaces provided by an NDIS interface provider, and certain special built-in
NICs don't have PnP devices backing them.
9. Only some PnP buses support a PnP location ID. The built-in PCI and USB buses do, while root-
enumerated devices do not.
Visibility to developers
In the preceding table, all properties except for the Plug and Play (PnP) properties are visible to user mode
desktop apps and kernel mode drivers via a shared header (Netioapi.h). The PnP properties are visible via the
Devpkey.h header and are used by both user mode desktop apps and kernel mode drivers. For example, see the
DEVPKEY documentation.
The IP Helper API is also available for both user mode desktop apps and kernel mode drivers.
The UWP API surface only exposes the ifGuid property directly. However, it is possible for a UWP app
developers to import the GetIfTable2 function using P/Invoke if they are required to access other network
interface properties.
Related topics
For management information base (MIB) definitions for network interfaces, see RFC 2863 .
For NDIS network interfaces in network drivers, see NDIS Network Interfaces.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Network List Manager API enables applications to retrieve a list of available network
connections. Applications can filter networks, based on attributes and signatures, and
choose the networks best suited to their task. The Network List Manager infrastructure
notifies applications of changes in the network environment, thus enabling applications
to dynamically update network connections.
Developer audience
Network List Manager is designed for use by COM programmers.
Run-time requirements
The Network List Manager API is supported starting with Windows Vista.
In this section
Topic Description
About the Network List Manager API General information about the Network List Manager API.
Network List Manager API Reference Reference information for the Network List Manager API.
Feedback
Was this page helpful? Yes No
Network Management
Article • 08/23/2019
Purpose
The network management functions provide the ability to manage user accounts and
network resources. Many of the capabilities provided by the network management
functions are not provided by other networking functions. However, if the capabilities
are provided by another set of functions, the documentation for the network
management functions will refer you to other functions you can use for the same task.
Developer audience
The network management functions are designed for use by C/C++ programmers.
Programmers should also be familiar with Windows networking concepts
Run-time requirements
The network management functions can be used on all Windows platforms. Where
certain implementations or capabilities of network management platform restrictions do
exist, they are clearly noted in the documentation.
In this section
What's New in Network Management
About Network Management
Using Network Management
Network Management Reference
Feedback
Was this page helpful? ツ Yes ト No
Get help at Microsoft Q&A
Network Share Management
Article • 01/07/2021
In this section
About Network Share Management
Network Share Management Reference
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Peer-to-peer technologies are used to facilitate real-time communication and
collaboration across distributed networks.
In the peer-to-peer model, without using Internet servers, each PC user can do the
following:
Exchange data
Share resources
Locate other users
Communicate
Collaborate directly in real time
Where applicable
Developers can use the Peer Infrastructure to create a wide range of distributed, ad-hoc,
and peer-to-peer applications.
Developer audience
Developers using the Peer Infrastructure should be familiar with C programming
concepts. Developers using the PNRP Winsock Namespace Provider should be familiar
with the Winsock API.
Run-time requirements
The Peer Infrastructure is supported in Windows Vista, Windows XP with Service Pack 2
(SP2) and later as well the Advanced Networking Pack for Windows XP available for
Windows XP with Service Pack 1 (SP1). The Peer-to-Peer Infrastructure requires that IPv6
be installed and initiated to allow peer networking applications to function. Use of Peer-
to-Peer Collaboration is only supported in Windows Vista .
In this section
Topic Description
Peer Information about the Peer Infrastructure and the Peer Name Resolution
Infrastructure Protocol (PNRP).
Peer Information and reference material specific to the Peer Collaboration API.
Collaboration
Peer Information and reference material specific to the Peer Distribution API.
Distribution
Additional resources
Further information regarding Peer-to-Peer technologies can be found at the following
locations:
Topic Description
Microsoft Peer Networking Blog Read the latest blog entries from Microsoft's Peer
Networking Team.
MSDN Peer Networking Forum Discuss Peer technologies and collaborate with other
developers.
Feedback
Was this page helpful? ツ Yes ト No
Microsoft Remote Procedure Call (RPC) defines a powerful technology for creating
distributed client/server programs. The RPC run-time stubs and libraries manage most
of the processes relating to network protocols and communication. This enables you to
focus on the details of the application rather than the details of the network.
Where is it applicable?
You can use RPC in all client/server applications based on Windows operating systems. It
can also be used to create client and server programs for heterogeneous network
environments that include such operating systems as Unix and Apple.
Developer audience
RPC is designed to be used by C/C++ programmers. Familiarity with the Microsoft
Interface Definition Language (MIDL) and the MIDL compiler are required.
Run-time requirements
The RPC run-time libraries are included with Windows. The components of the RPC
development environment are installed when you install the Microsoft Windows
Software Development Kit (SDK). For details, see Installing the RPC programming
environment.
In this section
ノ Expand table
Topic Description
RPC programming best Guidance on RPC programming practices that help create the best
practices possible RPC applications.
RPC NDR engine Documentation of the marshaling engine for RPC and DCOM
components, the RPC Network Data Representation (NDR) Engine.
Related topics
Microsoft Interface Definition Language (MIDL)
Feedback
Was this page helpful? Yes No
Routing and Remote Access Service
Article • 04/27/2021
Purpose
Remote Access Service (RAS) can be used to create client applications. These
applications display RAS common dialog boxes, manage remote access connections and
devices, and manipulate phone-book entries.
The Routing APIs make it possible to create applications to administer the routing
capabilities of the operating system.
Developers can use the Routing Protocol APIs to implement routing protocols.
Developer audience
The Routing and Remote Access Service APIs are designed for use by C/C++
programmers. Programmers should also be familiar with networking concepts.
Run-time requirements
For more specific information about which operating systems support a particular
function, refer to the Requirements sections in the documentation.
In this section
Topic Description
Routing and Remote Access Overview of the Routing and Remote Access Services architecture.
Services Architecture
Routing and Remote Access An example registry layout for the router service
Registry Layout
Routing and Remote Access List of all routing and remote access error codes.
Error Codes
Glossary Definitions for terms used in the Routing and Remote Access
Service documentation.
Feedback
Was this page helpful? ツ Yes ト No
[SNMP is available for use in the operating systems specified in the Requirements
section. It may be altered or unavailable in subsequent versions. Instead, use Windows
Remote Management, which is the Microsoft implementation of WS-Man.]
Purpose
The Microsoft Windows implementation of the Simple Network Management Protocol
(SNMP) is used to configure remote devices, monitor network performance, audit
network usage, and detect network faults or inappropriate access.
) Important
The Microsoft Windows SNMP API only supports protocol versions up to SNMPv2C.
It does not support any later versions of the protocol.
Where applicable
SNMP uses a distributed architecture consisting of management applications and agent
applications. The SNMP service implements an SNMP agent. To use the information the
SNMP service provides, you must have at least one host that is running an SNMP
management application. You can use third-party SNMP management software, or you
can develop your own SNMP management software application. The following APIs are
available for this purpose:
SNMP Management API, a set of functions that can be used to quickly develop
basic SNMP management systems
WinSNMP API, version 2.0, a set of functions for encoding, decoding, sending, and
receiving SNMP messages
Additionally, the SNMP Extension Agent API defines the interface between the SNMP
service and third-party SNMP extension agent DLLs. The SNMP Utility API functions can
be used to simplify the processing of SNMP messages.
Developer audience
The APIs listed in the preceding section are designed for use by C/C++ programmers.
Familiarity with SNMP and SNMPv2C, as well as a working knowledge of networking and
network management concepts, are required.
Run-time requirements
For more information about the operating system required to use a particular function,
see the Requirements section of the reference page for that function.
In this section
Topic Description
Simple Network Information and API reference for SNMP, including the SNMP
Management Protocol Management API, SNMP Extension Agent API, and SNMP Utility API
(SNMP) functions.
WinSNMP API Information and API reference for the Microsoft Windows SNMP
Application Programming Interface (WinSNMP API).
Related topics
Dynamic Host Configuration Protocol (DHCP)
Network Management
Feedback
Was this page helpful? ツ Yes ト No
Interface Description
TAPI 2.x A C-programming language based API that enables you to implement
communications applications ranging from basic modem control to call centers with
multiple agents and switches.
TSPI A telephony service provider (TSP) is a dynamic-link library (DLL) that supports
communications device control through a set of exported service functions. A TAPI
application uses standardized commands, TAPI passes information to the telephony
service provider, and the TSP handles the specific commands that must be exchanged
with the device.
MSPI A media service provider (MSP) allows an application considerable control over the
media for a particular transport mechanism. An MSP is always paired with a telephony
service provider (TSP).
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Teredo is an IPv6 transition technology that provides address assignment and host-to-
host automatic tunneling for unicast IPv6 traffic when IPv6/IPv4 hosts are located
behind one or multiple IPv4 network address translators (NATs). To traverse IPv4 NATs,
IPv6 packets are sent as IPv4 User Datagram Protocol (UDP) messages.
Developer audience
Teredo is designed for use by C/C++ developers with IPv6 network programming
experience.
Run-time requirements
The Teredo interface is primarily supported by Windows Vista and Windows Server 2008.
The limited functionality of the Teredo Interface supported by Windows XP with Service
Pack 2 (SP2) and Windows Server 2003 is detailed in Receiving Solicited Traffic Over
Teredo.
In this section
Topic Description
Using Teredo Information about the implementation and general usage of the Teredo Interface.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The WebSocket Protocol Component API enables asynchronous, bi-directional
communication channels over HTTP that work across existing network intermediaries.
With the WebSocket Protocol Component API, a client uses HTTP to communicate with
a server, and then both sides switch to using the underlying protocol that HTTP was
layered on (such as TCP or SSL). The goal is to first use HTTP to traverse over network
intermediaries, and then use the established end-to-end underlying TCP/SSL channel for
bi-directional application communication. The WebSocket protocol [WSPROTO ] is
defined at the IETF, while an associated Javascript API (WebSockets ) is defined at the
WHATWG.
In this section
Topic Description
WebSocket Protocol Component API The WebSocket Protocol Component API defines these
Data Types data types.
WebSocket Protocol Component API The WebSocket Protocol Component API defines these
Enumerations enumerations.
WebSocket Protocol Component API The WebSocket Protocol Component API defines these
Functions functions.
WebSocket Protocol Component API The WebSocket Protocol Component API defines these
Structures structures.
Developer audience
The WebSocket Protocol Component API is designed for use by use by C/C++
programmers. Familiarity with HTTP and Windows networking is required.
7 Note
The preferred way to use the WebSocket protocol on Windows is through the
Windows HTTP Services (WinHTTP) API or the Windows.Networking.Sockets
namespace.
Run-time requirements
The WebSocket Protocol Component API requires Windows 8 and later versions of the
Windows operating system. The APIs can be dynamically linked through websocket.dll.
7 Note
websocket.dll provides support for client and server handshake related HTTP
headers, verifies received handshake data, and parses the WebSocket data stream.
It does not handle any HTTP-specific operations (redirection, authentication, proxy
support) nor perform any I/O operations (sending or receiving WebSocket stream
bytes).
Related topics
HTTP
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Windows Filtering Platform (WFP) is a set of API and system services that provide a
platform for creating network filtering applications. The WFP API allows developers to
write code that interacts with the packet processing that takes place at several layers in
the networking stack of the operating system. Network data can be filtered and also
modified before it reaches its destination.
With the WFP API, developers can implement firewalls, intrusion detection systems,
antivirus programs, network monitoring tools, and parental controls. WFP integrates
with and provides support for firewall features such as authenticated communication
and dynamic firewall configuration based on applications' use of sockets API
(application-based policy). WFP also provides infrastructure for IPsec policy
management, change notifications, network diagnostics, and stateful filtering.
Windows Filtering Platform is a development platform and not a firewall itself. The
firewall application that is built into Windows Vista, Windows Server 2008, and later
operating systems Windows Firewall with Advanced Security (WFAS) is implemented
using WFP. Therefore, applications developed with the WFP API or the WFAS API use the
common filtering arbitration logic that is built into WFP.
The WFP API consists of a user-mode API and a kernel-mode API. This section provides
an overview of the entire WFP and describes in detail only the user-mode portion of the
WFP API. For a detailed description of the kernel-mode WFP API, see the Windows
Driver Kit online help.
Developer audience
The Windows Filtering Platform API is designed for use by programmers using C/C++
development software. Programmers should be familiar with networking concepts and
design of systems using user-mode and kernel-mode components.
Run-time requirements
The Windows Filtering Platform is supported on clients running Windows Vista and later,
and on servers running Windows Server 2008 and later. For information about the run-
time requirements for a specific programming element, see the Requirements section of
the reference page for that element.
In this section
Topic Description
What's New in Windows Information on new features and APIs in Windows Filtering
Filtering Platform Platform.
Using Windows Filtering Example code using the Windows Filtering Platform API.
Platform
Windows Filtering Platform Documentation for the Windows Filtering Platform functions,
API Reference structures, and constants.
Additional resources
To ask questions and have discussions about using the WFP API, visit the Windows
Filtering Platform Forum .
Related topics
Kernel-Mode Windows Filtering Platform API - Design Guide
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Windows Sockets 2 (Winsock) enables programmers to create advanced Internet,
intranet, and other network-capable applications to transmit application data across the
wire, independent of the network protocol being used. With Winsock, programmers are
provided access to advanced Microsoft® Windows® networking capabilities such as
multicast and Quality of Service (QoS).
Winsock follows the Windows Open System Architecture (WOSA) model; it defines a
standard service provider interface (SPI) between the application programming interface
(API), with its exported functions and the protocol stacks. It uses the sockets paradigm
that was first popularized by Berkeley Software Distribution (BSD) UNIX. It was later
adapted for Windows in Windows Sockets 1.1, with which Windows Sockets 2
applications are backward compatible. Winsock programming previously centered
around TCP/IP. Some programming practices that worked with TCP/IP do not work with
every protocol. As a result, the Windows Sockets 2 API adds functions where necessary
to handle several protocols.
Developer audience
Windows Sockets 2 is designed for use by C/C++ programmers. Familiarity with
Windows networking is required.
Run-time requirements
Windows Sockets 2 can be used on all Windows platforms. Where certain
implementations or capabilities of Windows Sockets 2 platform restrictions do exist,
they are clearly noted in the documentation.
In this section
Topic Description
Using Procedures and programming techniques used with Windows Sockets. This
Winsock section includes basic Winsock programming techniques, such as Getting Started
With Winsock, as well as advanced techniques useful for experienced Winsock
developers.
Related topics
IP Helper
Quality of Service
Feedback
Was this page helpful? ツ Yes ト No
In this section
Topic Description
Infrared Infrared Data Association (IrDA) is a protocol suite designed to provide wireless,
Data line-of-sight connectivity between devices.
Association
(IrDA)
Mobile The Mobile Broadband API is used to implement connectivity to cellular networks.
Broadband Applications should not communicate with such mobile broadband devices directly.
Instead, they must use the Mobile Broadband API.
Native Wifi The Native Wifi automatic configuration component configures, connects to, and
disconnects from wireless networks. Native Wifi can store profiles on the networks it
interacts with in the form of XML documents.
Windows Windows Connect Now (WCN) allows mobile and embedded devices, 802.11 access
Connect points (APs), and computers to securely connect, and exchange settings with each
Now other. WCN is designed for the home or small business user, providing a reasonable
compromise between ease-of-use and robust security.
Windows Windows Connection Manager (WCM) enables the creation and configuration of
Connection connection manager software.
Manager
Related topics
Internet
Networking
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Bluetooth is an industry-standard protocol that enables wireless connectivity for
computers, handheld devices, mobile phones, and other devices.
Where applicable
The Bluetooth application programming interface enables developers to use existing
network programming knowledge to quickly develop or port applications.
Developer audience
Bluetooth is designed for use by C/C++ programmers. Some Bluetooth features are
available with Windows Sockets. Familiarity with Microsoft Windows networking and
Windows Sockets programming is required.
Run-time requirements
Microsoft Bluetooth support begins with Windows XP with Service Pack 1 (SP1).
Support for Bluetooth 2.1 is offered in Windows Vista SP2 and Windows 7.
In this section
Topic Description
Additional resources
Resource Description
Bluetooth FAQ Info about Bluetooth wireless technology support for the Windows
family of operating systems.
Feedback
Was this page helpful? Yes No
Mobile Broadband
Article • 11/09/2023
Purpose
The Mobile Broadband API is used to implement connectivity to cellular networks.
Applications should not communicate with such mobile broadband devices directly.
Instead, they must use the Mobile Broadband API.
Developer audience
The Mobile Broadband API is designed for C++ developers.
The Mobile Broadband API can be used by third-party applications that need to control
and manage mobile broadband interfaces.
Run-time requirements
Mobile Broadband support begins with Windows 7.
In this section
Mobile Broadband API Best Practices
Mobile Broadband API Reference
Mobile Broadband Profile Schema Reference
Feedback
Was this page helpful? Yes No
Native Wifi
Article • 01/07/2021
Purpose
The Native Wifi automatic configuration component configures, connects to, and
disconnects from wireless networks. Native Wifi can store profiles on the networks it
interacts with in the form of XML documents.
Developer audience
The Native Wifi API is designed for C/C++ developers. Programmers should be familiar
with wireless networking concepts and terminology.
Run-time requirements
The Native Wifi component requires clients running Windows Vista, Windows XP with
Service Pack 3 (SP3), or Wireless LAN API for Windows XP with Service Pack 2 (SP2).
In this section
Topic Description
Using Native Wifi Procedures and programming techniques used with Native Wifi. This
section includes basic Native Wifi programming techniques, such as Native
Wifi API Sample, as well as more advanced techniques useful for
experienced Native Wifi developers.
Native Wifi Documentation of the Native Wifi API and the XML profile schema.
Reference
Wireless Ad Hoc Documentation of the Native Wifi Ad Hoc interfaces and enumerations.
Reference
Wireless Zero Documentation of the client programming interface for the Wireless Zero
Configuration Configuration module supported only on Windows XP .
Topic Description
Reference
Additional resources
For additional information on the Native Wifi API on older versions of Windows, visit the
Windows Vista Wireless SDK Forum or the Windows XP Wireless SDK Forum .
Related topics
Wireless Networking
Feedback
Was this page helpful? Yes No
Windows Connect Now
Article • 04/27/2021
Purpose
Windows Connect Now (WCN) allows mobile and embedded devices, 802.11 access
points (APs), and computers to securely connect and exchange settings with each other.
WCN is designed for the home or small business user, providing a reasonable
compromise between ease-of-use and robust security.
Developer audience
The Windows Connect Now API is designed for use with C/C++.
Run-time requirements
Windows Connect Now is supported starting with Windows 7.
In this section
Topic Description
Windows Connect Detailed descriptions of the programming elements that are included in
Now Reference the Windows Connect Now API (WCNAPI).
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Windows Connection Manager (WCM) enables the creation and configuration of
connection manager software.
Developer audience
Windows Connection Manager is designed for use by developers using C/C++
development software.
Run-time requirements
The Windows Connection Manager API is supported on Windows 8 and Windows Server
2012.
In this section
Topic Description
Windows Connection Manager Reference Reference documentation for the WCM API.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Web Distributed Authoring and Versioning (WebDAV) is an extension to Hypertext
Transfer Protocol (HTTP) that defines how basic file functions such as copy, move,
delete, and create are performed by using HTTP. The WebDAV API is a set of Win32
functions for creating and managing connections to WebDAV servers and performing
file I/O operations on remote files on WebDAV servers. WebDAV API functions are
designed to be used together with other Win32 API functions such as Windows
networking functions and file management functions.
Developer audience
The WebDAV API is designed for use by C and C++ developers.
Run-time requirements
The WebDAV API is in Windows Vista and later. For information about which operating
system versions are required to use a particular programming element, see the
Requirements section of the reference page for that element.
In this section
Topic Description
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Microsoft Windows HTTP Services (WinHTTP) provides developers with an HTTP client
application programming interface (API) to send requests through the HTTP protocol to
other HTTP servers.
Where applicable
WinHTTP supports desktop client applications, Windows services, and Windows server-
based applications.
For more information on how to use WinHTTP for applications built on the Microsoft
.NET Framework, see the WinHttpHandler API
Developer audience
WinHTTP offers both a C/C++ application programming interface (API) and a
Component Object Model (COM) automation component suitable for use in Active
Server Pages (ASP) based applications.
Run-time requirements
WinHTTP 5.1 offers improvements over version 5.0. It is included in the operating
system. For more information about new features, see What's New in WinHTTP 5.1 and
What's New in Windows Server 2008 and Windows Vista.
) Important
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Microsoft Windows Internet (WinINet) application programming interface (API)
enables applications to access standard Internet protocols, such as FTP and HTTP. For
ease of use, WinINet abstracts these protocols into a high-level interface.
Where applicable
WinINet does not support server implementations. In addition, it should not be used
from a service. For server implementations or services use Microsoft Windows HTTP
Services (WinHTTP).
Developer audience
WinINet is designed for use by C/C++ programmers. It requires a basic understanding
of the FTP and HTTP protocols.
Run-time requirements
Applications that use the WinINet API require Windows NT 4.0 or later, or Windows
Me/98/95. For more information about which operating systems or components are
required to use a particular programming element, see the Requirements section of the
documentation.
In this section
Topic Description
About Windows Internet General information about the Windows Internet API.
Using Windows Internet Programming guide for the Windows Internet API.
Windows Internet Reference Reference documentation for the Windows Internet API.
Related topics
Microsoft Windows HTTP Services (WinHTTP)
Feedback
Was this page helpful? ツ Yes ト No
Purpose
WWSAPI is a native-code implementation of SOAP which provides core network
communication functionality by supporting a set of the WS-* and .NET-* family of
protocols. WWSAPI is designed to be used by components/applications which fall into
one of the following categories:
Developer audience
Windows Web Services API (WWSAPI) offers C/C++ application programming interface
(API) for building SOAP based web services and clients to them. A basic understanding
of web services and protocol associated with them is important to use this API.
Run-time requirements
Windows Web Services API (WWSAPI) is an operating-system component of Windows 7
and Windows Server 2008 R2 or later versions of Microsoft Windows.
In this section
Topic Description
About Windows Web Services General information about the Windows Web Services API.
Using Windows Web Services Programming guide for the Windows Web Services API.
Windows Web Services Reference Reference documentation for the Windows Web Services API.
Feedback
Was this page helpful? ツ Yes ト No
Develop more secure desktop apps by using Windows APIs and services. These APIs
provide:
Authentication
Authorization
Cryptography
Directory, identity, and access services
Parental controls
Rights management
This section also provides best practices and other security articles.
In this section
Topic Description
Antimalware The Antimalware Scan Interface (AMSI) is a generic interface standard that allows
Scan Interface applications and services to integrate with any antimalware product present on a
machine. It provides enhanced malware protection for users and their data,
applications, and workloads.
Authentication Authentication is the process by which the system validates a user's logon
information. A user's name and password are compared to an authorized list,
and if the system detects a match, access is granted to the extent specified in
the permission list for that user.
Authorization Authorization is the right granted an individual to use the system and the data
stored on it. Authorization is typically set up by a system administrator and
verified by the computer based on some form of user identification, such as a
code number or password.
Best Practices Provides best practices for developing more secure applications.
for the
Security APIs
Certificate The Certificate Enrollment API can be used to create a client application to
Enrollment request a certificate and install a certificate response.
API
Control Flow Control Flow Guard (CFG) is a highly-optimized platform security feature that
Guard (CFG) was created to combat memory corruption vulnerabilities.
Topic Description
Cryptography Cryptography is the use of codes to convert data so that only a specific recipient
will be able to read it, using a key. CryptoAPI enables users to create and
exchange documents and other data in a secure environment, especially over
nonsecure media such as the Internet.
Cryptography Cryptography API: Next Generation (CNG) enable users to create and exchange
API: Next documents and other data in a secure environment, especially over nonsecure
Generation media such as the Internet.
MS-CHAP You can use the MS-CHAP Password Management API to create applications to
Password change the passwords of networked users on remote workstations.
Management
API
Topic Description
Network Network Access Protection (NAP) is a set of operating system components that
Access provide a platform for protected access to private networks. The NAP platform
Protection provides an integrated way of evaluating the system health state of a network
client that is attempting to connect to or communicate on a network and
restricting the access of the network client until health policy requirements have
been met.
Rights Three generations of Rights Management SDK are now available as well as an
Management all-up roadmap to Microsoft supplied RMS code samples and developer tools
across all supported operating systems; Android, iOS/OS X, Windows Phone and
Windows Desktop.
Security The security management technologies can be used to manage Local Security
Management Authority (LSA) policy and password filter policy, query the ability of programs
from external sources, and service attachments that extend the functionality of
the Security Configuration tool.
Security WMI The Security WMI providers enable administrators and programmers to
Providers configure BitLocker Drive Encryption (BDE) and the Trusted Platform Module
(TPM) using Windows Management Instrumentation (WMI).
TPM Base The Trusted Platform Module (TPM) Base Services (TBS) feature centralizes TPM
Services access across applications. The TBS feature uses priorities specified by calling
applications to cooperatively schedule TPM access.
Windows You can use the Windows Biometric Framework API to create client applications
Biometric that securely capture, save, and compare end-user biometric information.
Framework
API
Topic Description
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Windows Antimalware Scan Interface (AMSI) is a versatile interface standard that
allows your applications and services to integrate with any antimalware product that's
present on a machine. AMSI provides enhanced malware protection for your end-users
and their data, applications, and workloads.
AMSI is agnostic of antimalware vendor; it's designed to allow for the most common
malware scanning and protection techniques provided by today's antimalware products
that can be integrated into applications. It supports a calling structure allowing for file
and memory or stream scanning, content source URL/IP reputation checks, and other
techniques.
AMSI also supports the notion of a session so that antimalware vendors can correlate
different scan requests. For instance, the different fragments of a malicious payload can
be associated to reach a more informed decision, which would be much harder to reach
just by looking at those fragments in isolation.
User Account Control, or UAC (elevation of EXE, COM, MSI, or ActiveX installation)
PowerShell (scripts, interactive use, and dynamic code evaluation)
Windows Script Host (wscript.exe and cscript.exe)
JavaScript and VBScript
Office VBA macros
7 Note
Starting in Windows 10, version 1903, if your AMSI provider DLL is not
Authenticode-signed, then it may not be loaded (depending on how the host
machine is configured). For full details, see IAntimalwareProvider interface.
In this section
Topic Description
How AMSI As an application developer, you can actively participate in malware defense.
helps you Specifically, you can help protect your customers from dynamic script-based
defend against malware, and from non-traditional avenues of cyberattack.
malware
Developer This topic describes the groups of developers for whom the Antimalware Scan
audience, Interface is designed.
samples
Antimalware Enumerations, COM interfaces, and other programming elements of the AMSI
Scan Interface API.
Reference
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Authentication is the process by which the system validates a user's logon information.
A user's name and password are compared to an authorized list, and if the system
detects a match, access is granted to the extent specified in the permission list for that
user.
Developer audience
Microsoft authentication technologies are intended for use by developers of
applications that are based on the Windows Server, Windows Vista, and Windows
operating systems that authenticate clients. Developers should be familiar with
Windows-based programming. Although not required, an understanding of
authentication or security-related subjects is advised.
Run-time requirements
For information about run-time requirements for a particular programming element, see
the Requirements section of the reference page for that element.
In this section
Topic Description
Purpose
Authorization is the right granted an individual to use the system and the data stored on
it. Authorization is typically set up by a system administrator and verified by the
computer based on some form of user identification, such as a code number or
password.
Microsoft authorization technologies include Authorization Manager and the Authz API.
Developer audience
Microsoft authorization technologies are intended for use by developers of applications
based on the Windows Server and Windows operating systems that control access to
resources. Developers should be familiar with Windows-based programming. Although
not required, an understanding of authorization or security-related subjects is advised.
Run-time requirements
For information about run-time requirements for a particular programming element, see
the Requirements section of the reference page for that element.
In this section
Topic Description
To help develop secure software, we recommend that you use the following best
practices when developing applications. For more information, see Security Developer
Center .
For more information about the SDL, see the Microsoft Security Development
Lifecycle .
Threat Models
Conducting a threat model analysis can help you discover potential points of attack in
your code. For more information about threat model analysis, see Howard, Michael and
LeBlanc, David [2003], Writing Secure Code, 2d ed., ISBN 0-7356-1722-8, Microsoft Press,
Redmond, Washington. (This resource may not be available in some languages and
countries.)
Authorization
You should create applications that require the least possible privilege. Using the least
possible privilege reduces the risk of malicious code compromising your computer
system. For more information about running code in least possible privilege level, see
Running with Special Privileges.
More Information
For more information about best practices, see the following topics.
Topic Description
Creating a DACL Shows how to create a discretionary access control list (DACL) by
using the Security Descriptor Definition Language (SDDL).
How to Optimize Your Discusses options for searching Security SDK content on MSDN
MSDN Library Search Library.
Dynamic Access Control Basic orientation to some of the developer extensibility points for the
developer extensibility new Dynamic Access Control solutions.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Certificate Enrollment API can be used to create a client application to request a
certificate and install a certificate response. This API is implemented in CertEnroll.dll
beginning with Windows Vista; it replaces Xenroll.dll.
Developer audience
The Certificate Enrollment API is for use by developers of applications that will enable
users to create, request, and retrieve certificates over media, such as the Internet or an
intranet, that are not inherently secure. Developers should be familiar with the C and
C++ programming languages, the Component Object Model (COM), and the Windows-
based programming environment. Although not required, an understanding of
cryptography and public key infrastructure is advised.
Run-time requirements
The Certificate Enrollment API is supported beginning with Windows Server 2008 and
Windows Vista. For information about run-time requirements for a particular
programming element, see the Requirements section of the reference page for that
element.
In this section
Topic Description
Using the How to use the Certificate Enrollment API to extend the capabilities of Active
Certificate Directory Certificate Services.
Enrollment API
Purpose
Cryptography is the use of codes to convert data so that only a specific recipient will be
able to read it, using a key.
Developer audience
CryptoAPI is intended for use by developers of Windows-based applications that will
enable users to create and exchange documents and other data in a secure
environment, especially over nonsecure media such as the Internet. Developers should
be familiar with the C and C++ programming languages and the Windows
programming environment. Although not required, an understanding of cryptography
or security-related subjects is advised.
CAPICOM is a 32-bit only component that is intended for use by developers who are
creating applications using Visual Basic Scripting Edition (VBScript) programming
language or the C++ programming language. CAPICOM is available for use in the
operating systems specified in Run-Time Requirements. For future development, we
recommend that you use the .NET Framework to implement security features. For more
information, see Alternatives to Using CAPICOM.
Run-time requirements
For information about run-time requirements for a particular programming element, see
the Requirements section of the reference page for that element.
In this section
Topic Description
Using Cryptography processes, procedures, and extended samples of C and Visual Basic
Cryptography programs using CryptoAPI functions and CAPICOM objects.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Cryptography API: Next Generation (CNG) is the long-term replacement for the
CryptoAPI. CNG is designed to be extensible at many levels and cryptography agnostic
in behavior.
Developer audience
CNG is intended for use by developers of applications that will enable users to create
and exchange documents and other data in a secure environment, especially over
nonsecure media such as the Internet. Developers should be familiar with the C and
C++ programming languages and the Windows-based programming environment.
Although not required, an understanding of cryptography or security-related subjects is
advised.
If you are developing a CNG cryptographic algorithm provider or key storage provider,
you must download the Cryptographic Provider Development Kit from Microsoft.
Run-time requirements
CNG is supported beginning with Windows Server 2008 and Windows Vista. For
information about run-time requirements for a particular programming element, see the
Requirements section of the reference page for that element.
In this section
Topic Description
About Describes CNG features, cryptographic primitives, and key storage, retrieval, import,
CNG and export.
Using Explains how to use the cryptography configuration features of CNG and typical CNG
CNG programming.
CNG Detailed descriptions of the CNG programming elements. These pages include
Reference reference descriptions of the API for working with CNG.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Microsoft Active Directory Domain Services are the foundation for distributed networks
built on Windows 2000 Server, Windows Server 2003 and Microsoft Windows
Server 2008 operating systems that use domain controllers. Active Directory Domain
Services provide secure, structured, hierarchical data storage for objects in a network
such as users, computers, printers, and services. Active Directory Domain Services
provide support for locating and working with these objects.
This guide provides an overview of Active Directory Domain Services and sample code
for basic tasks, such as searching for objects and reading properties, to more advanced
tasks such as service publication.
Windows 2000 Server and later operating systems provide a user interface for users and
administrators to work with the objects and data in Active Directory Domain Services.
This guide describes how to extend and customize that user interface. It also describes
how to extend Active Directory Domain Services by defining new object classes and
attributes.
7 Note
Where applicable
Network administrators write scripts and applications that access Active Directory
Domain Services to automate common administrative tasks, such as adding users and
groups, managing printers, and setting permissions for network resources.
Independent software vendors and end-user developers can use Active Directory
Domain Services programming to directory-enable their products and applications.
Services can publish themselves in Active Directory Domain Services; clients can use
Active Directory Domain Services to find services, and both can use Active Directory
Domain Services to locate and work with other objects on a network.
Developer audience
Applications that access data in Active Directory Domain Services can be written using
the Active Directory Service Interfaces API, Lightweight Directory Access Protocol API, or
the System.DirectoryServices namespace.
Run-time requirements
Active Directory Domain Services run on Windows 2000 and later domain controllers.
However, client applications can be written for and run on Windows Vista, Windows
Server 2003, Windows XP, Windows 2000, Windows NT 4.0, Windows 98, and
Windows 95.
In this section
About Active Directory Domain Services
Feedback
Was this page helpful? ツ Yes ト No
The Microsoft Active Directory schema contains formal definitions of every object class
that can be created in an Active Directory forest. The schema also contains formal
definitions of every attribute that can exist in an Active Directory object. This section
provides the reference for each schema object and provides a brief explanation of the
attributes, classes, and other objects that make up the Active Directory schema.
7 Note
In each of the reference topics, there is a section for each operating system that the
topic applies to. The following operating systems are currently supported.
If an operating system is not listed in the topic, the topic is not supported on that
operating system. For example, if a topic only lists Windows Server 2003 and ADAM,
then the topic does not apply to Windows Server 2003 R2.
The following sections contain detailed information about the Active Directory schema
elements.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Active Directory Service Interfaces (ADSI) is a set of COM interfaces used to access the
features of directory services from different network providers. ADSI is used in a
distributed computing environment to present a single set of directory service interfaces
for managing network resources. Administrators and developers can use ADSI services
to enumerate and manage the resources in a directory service, no matter which network
environment contains the resource.
ADSI enables common administrative tasks, such as adding new users, managing
printers, and locating resources in a distributed computing environment.
7 Note
Where applicable
Network Administrators can use ADSI to automate common tasks, such as adding users
and groups, managing printers, and setting permissions on network resources.
Independent Software Vendors and end-user developers can use ADSI to "directory
enable" their products and applications. Services can publish themselves in a directory,
clients can use the directory to find the services, and both can use the directory to find
and manipulate other objects of interest. Because Active Directory Service Interfaces are
independent of the underlying directory service(s), directory-enabled products and
applications can operate successfully in multiple network and directory environments.
Developer audience
You can write ADSI client applications in many languages. For most administrative tasks,
ADSI defines interfaces and objects accessible from Automation-compliant languages
like Microsoft Visual Basic, Microsoft Visual Basic Scripting Edition (VBScript), and Java to
the more performance and efficiency-conscious languages such as C and C++. A good
foundation in COM programming is useful to the ADSI programmer.
Run-time requirements
Active Directory runs on Windows Server domain controllers. However, client
applications using ADSI may be written and run on Windows. In addition, developers will
want the Platform Software Development Kit (SDK), also available on the MSDN website.
To investigate the contents of Active Directory, use the Active Directory Users and
Computers MMC snap-in. This snap-in replaces the Adsvw tool that was available for
previous versions of Windows.
In this section
About ADSI
Using ADSI
ADSI Reference
Related topics
The Component Object Model
In this section
Active Directory Federation Services Overview
Related topics
Access Management Services
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Extensible Authentication Protocol (EAP) is a standard supported by several system
components. EAP is crucial for protecting the security of wireless (802.1X) and wired
LANs, Dial-up, and Virtual Private Networks (VPNs).
Where applicable
EAP improves on previous authentication protocols such as Password Authentication
Protocol (PAP) and Challenge Handshake Authentication Protocol (CHAP).
For new EAP method development, see Extensible Authentication Protocol Host.
Developer audience
The EAP API is designed for use by C/C++ programmers. Programmers should be
familiar with networking concepts.
7 Note
This API is intended for developers implementing EAP methods. It's not intended
for users consuming the EAP methods - see Extensible Authentication Protocol
(EAP) for network access.
Run-time requirements
EAP is supported on client and server computers running on Windows 2000 and later.
EAP is also supported on computers running on Windows 2000 Server and later if they
are running Network Policy Server (NPS), formerly Internet Authentication Service (IAS).
For more information about supported operating systems, see the Requirements section
in the documentation.
Related topics
Remote Access Service
Network Policy Server Extensions
Using Extensible Authentication Protocol
Extensible Authentication Protocol Reference
Extensible Authentication Protocol (EAP) for network access
Feedback
Was this page helpful? ツ Yes ト No
Purpose
EAPHost is a Microsoft Windows Networking component that provides an Extensible
Authentication Protocol (EAP) infrastructure for the authentication of "supplicant"
protocol implementations such as 802.1X. It also allows for authentication with
"authenticator" technologies such as the Microsoft Network Policy Server (NPS) and
other third-party servers.
The EAPHost APIs enable applications to authenticate using the EAPHost service, and
provide a template for the development of conformant authentication methods for use
with EAPHost.
Run-time requirements
The EAPHost APIs are supported only in Windows Vista and later operating systems.
Related topics
About EAPHost
Using EAPHost
EAPHost API Reference
Extensible Authentication Protocol (EAP) for network access
Feedback
Was this page helpful? ツ Yes ト No
Purpose
7 Note
The Network Access Protection platform is not available starting with Windows 10
Network Access Protection (NAP) is a set of operating system components that provide
a platform for protected access to private networks. The NAP platform provides an
integrated way of evaluating the system health state of a network client that is
attempting to connect to or communicate on a network and restricting the access of the
network client until health policy requirements have been met.
NAP is an extensible platform that provides an infrastructure and an API set for adding
components that store, report, validate, and correct a computer's system health state. By
itself, the NAP platform does not provide components to accumulate and evaluate
attributes of a computer's health state. Other components, known as system health
agents (SHAs) and system health validators (SHVs), provide network policy validation
and network policy compliance.
Where applicable
NAP is designed to be extensible. It can interoperate with any vendor software that
provides SHAs and SHVs or that recognizes its published API set. NAP helps provide a
solution for the following common scenarios:
Developer audience
The NAP API is designed for C/C++ developers. For the NAP enforcement methods,
programmers should be familiar with networking protocols and technologies such as
Remote Authentication Dial-in User Service (RADIUS), Dynamic Host Configuration
Protocol (DHCP), virtual private networks (VPNs), the IEEE 802.1X standard for wired and
wireless access, and Internet Protocol security (IPsec).
Run-time requirements
The NAP platform requires NAP infrastructure servers running Windows Server 2008 or
later and NAP clients running Windows XP with Service Pack 3 (SP3), Windows Vista, or
later operating systems. For specific information about which operating systems support
a particular programming element, refer to the Requirements sections of the NAP APIs
in the NAP Reference documentation.
In this section
Topic Description
NAP Reference Documentation for NAP interfaces, structures, and other code elements.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Network Policy Server (NPS) is the Microsoft implementation of a Remote
Authentication Dial-in User Service (RADIUS) server and proxy. It is the successor of
Internet Authentication Service (IAS).
NPS is also a health evaluator server for Network Access Protection (NAP). NPS performs
authentication and authorization of network connection attempts and, based on
configured system health policies, evaluates computer health compliance and
determines how to limit a noncompliant computer's network access or communication.
This is a new feature specific to NPS only; IAS does not support it. See Internet
Authentication Service and Network Policy Server for a complete list of features new to
NPS.
NPS includes two API sets: NPS Extensions API and Server Data Objects (SDO) API. Both
NPS Extensions API and SDO API are also supported by the precursor of NPS, the
Internet Authentication Service.
NPS Extensions API can be used to extend the authentication, authorization, and
accounting methods offered by NPS and previously by IAS.
Server Data Objects API can be used to manipulate the network policy configuration on
a computer that runs NPS or IAS.
7 Note
Developer audience
The NPS Extensions API is designed for use by programmers using C/C++ development
software. Programmers should be familiar with networking concepts and the RADIUS
protocol. RADIUS is documented in RFC 2865 and RFC 2866 .
The Server Data Objects API is designed for use by programmers using C/C++ or Visual
Basic development software. Programmers should be familiar with Remote Access
Service (RAS) and the RADIUS protocol.
Run-time requirements
NPS Extensions API is supported on Windows Server 2008 with the installation of the
Microsoft Commercial Internet Service (MCIS).
NPS is available on Windows Server 2008 with the installation of the Microsoft
Commercial Internet Service (MCIS).
In this section
General information regarding RADIUS, IAS, and NPS: Overview
API for implementing extension DLLs used for authentication, authorization, and
accounting: Network Policy Server Extensions API
API for managing the network policy configuration: Server Data Objects API
Samples of stored procedures used for managing NPS (IAS) logging: SQL
Programmability
Related topics
TechNet: Network Policy Server
Network Policy Server (NPS)
Extensible Authentication Protocol (EAP) for network access
Feedback
Was this page helpful? ツ Yes ト No
Purpose
As part of the Family Safety efforts of Microsoft, Windows provides Parental Controls
functionality to monitor and limit exposure of selected computer users to online
dangers and inappropriate content.
Developer audience
Independent software vendors (ISVs) of products that potentially expose users to safety
risks or that are currently working to protect users from such risks are encouraged to
integrate Parental Controls.
Run-time requirements
This functionality was introduced in Windows Vista. Parental Controls functionality is
only available on selected consumer operating systems; it is not designed for use with
versions of Windows Server. This functionality is not supported in Windows 10.
In this section
What's New in Windows 8 Parental Controls
What's New in Windows 7 Parental Controls
About Parental Controls
Using Parental Controls
Parental Controls Reference
Parental Controls Samples
Parental Controls Glossary
Feedback
Was this page helpful? ツ Yes ト No
Three generations of Rights Management SDK are now available: Rights Management
SDK 4.2, Microsoft Rights Management SDK 2.1 and Active Directory Rights
Management Services SDK, as well as a scripting API, Active Directory Rights
Management Services Scripting API, that enables custom administration of an RMS
server.
In this section
Code Samples and Tools
A collection of Microsoft supplied RMS code samples and developer support tools
across all supported operating systems; Android, iOS/OS X, Windows Phone and
Windows Desktop.
RMS SDK 4.2 is a simplified, next-generation tool set that provides a lightweight
development experience in enabling your Android, iOS, and Mac OS X device apps with
information protection via Microsoft Rights Management services.
RMS SDK 2.1 is a powerful SDK offering for Windows desktop application developers
and server based solution providers to enable their products with rights management.
7 Note
The Windows Active Directory Rights Management Services (AD RMS) Scripting API can
be used to create scripts to administer an AD RMS installation.
Feedback
Was this page helpful? ツ Yes ト No
This roadmap provides Microsoft supplied code samples that show you how it's done
and code snippets that you can use in your applications.
Read PFILE protected PDF Windows RMS SDK Read PFILE protected PDF is a simple
Desktop 2.1 and code example on our RMS Developer's
later Corner blog that uses the MSIPC File API
versions of to decrypt and open a PFILE protected
the 2.x SDK PDF document.
iOS/OS X usage scenarios iOS / OS X RMS SDK Objective C code examples representing
4.2 and important development scenarios to get
later you accustomed to the RMS SDK.
versions of Examples include use of Microsoft
the 4.x SDK Protected File format, custom protected
file formats, and custom UI controls.
UI Library and Sample iOS RMS SDK UI libraries and sample app for iOS at
app 4.2 and GitHub, so you can get started quickly
later and re-use our standard UI in your apps.
versions of
the 4.x SDK
UI Library and Sample Android RMS SDK UI libraries and sample app for Android
app 4.2 and at GitHub, so you can get started quickly
later and re-use our standard UI in your apps.
versions of
the 4.x SDK
Android usage scenarios Android RMS SDK Java code examples representing
4.2 and important development scenarios to get
later you accustomed to the RMS SDK.
versions of Examples include use of Microsoft
the 4.x SDK Protected File format, custom protected
file formats, and custom UI controls.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The security management technologies can be used to manage Local Security Authority
(LSA) policy and password filter policy, query the ability of programs from external
sources, and service attachments that extend the functionality of the Security
Configuration tool.
Microsoft security management technologies include the LSA Policy API, the Password
Filter API, the Safer API, and the Service Security Attachments API. These technologies
enable software developers to create applications that manage systems and
applications.
Developer audience
The LSA Policy API, the Password Filter API, the Safer API, and the Service Security
Attachments API are intended for use by developers of applications that enable
administrators to manage and secure their systems. Developers should be familiar with
the C and C++ programming languages and with Windows-based programming.
Run-time requirements
For information about run-time requirements for a particular programming element, see
the Requirements section of the reference page for that element.
In this section
Topic Description
Security Detailed information about the functions, structures, and other programming
Management elements used to implement security management.
Reference
Feedback
Was this page helpful? ツ Yes ト No
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Trusted Platform Module (TPM) Base Services (TBS) feature centralizes TPM access
across applications.
The TBS feature runs as a system service in Windows Server 2008, Windows Vista, or
newer operating systems. It provides services as an API exposed through remote
procedure calls (RPC). The TBS feature uses priorities specified by calling applications to
cooperatively schedule TPM access.
7 Note
The TPM can be used for key storage operations. However, developers are
encouraged to use the Key Storage APIs for these scenarios instead. The Key
Storage APIs provide the functionality to create, sign or encrypt with, and persist
cryptographic keys, and they are higher-level and easier to use than the TBS for
these targeted scenarios.
Developer audience
TBS is intended for use by developers of applications based on the Windows operating
systems. Developers should be familiar with the C and C++ programming languages
and the Microsoft Windows programming environment.
Run-time requirements
The TBS feature requires at least Windows Server 2008 or Windows Vista operating
system. For information about run-time requirements for a particular programming
element, see the Requirements section of the reference page for that element.
In this section
Topic Description
About TBS Key concepts and a high-level view of the TBS feature.
Topic Description
Using TBS TBS processes and procedures for using the TBS API.
TBS Reference Documentation about the TBS functions, structures, and return codes.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Windows WebAuthn API provides Win32 apps a way to register new phishing-
resistant credentials or sign in a user via the Windows Hello platform authenticator
and/or external FIDO2 security keys, leveraging the Web Authentication (WebAuthn)
and Client to Authenticator Protocol (CTAP) specifications.
Developer audience
The Windows WebAuthn API is designed for use by C/C++ developers of Windows
applications. Developers can use this Windows API to register new phishing-resistant
credentials or sign in a user using the Windows Hello platform authenticator and/or
external FIDO2 security keys, leveraging the Web Authentication (WebAuthn) and Client
to Authenticator Protocol (CTAP) specifications.
Runtime requirements
Requirement Value
Header webauthn.h
In this section
WebAuthn functions
WebAuthn structures
WebAuthn constants
Feedback
Was this page helpful? ツ Yes ト No
Get help at Microsoft Q&A
Windows Biometric Framework
Article • 08/23/2019
Purpose
You can use the Windows Biometric Framework API to create client applications that
securely capture, save, and compare end-user biometric information.
Developer audience
Developers who use this API should be familiar with the C and C++ programming
languages and the Windows-based programming environment.
Run-time requirements
The Windows Biometric Framework API is supported beginning with Windows Server
2008 R2 and Windows 7. For information about run-time requirements for a particular
programming element, see the Requirements section of the reference page for that
element.
In this section
Topic Description
Creating client You can use the client API to capture and use biometric information in
applications your applications.
Creating Adapter You can create engine adapters, sensor adapters, and storage adapters
Plug-ins using the topics in this section.
Creating a Private There are two types of sensor pools: private and system. This section
Sensor Pool describes each and explains how to create a private sensor pool.
This section contains the reference for the system APIs and services offered by Windows
for desktop apps. These include the traditionally available services for:
In this section
ノ Expand table
Topic Description
Help API The Help API allows the opening of help catalogs
and the retrieval of help content items.
Kernel Transaction Manager How to use transacted file and registry operations,
or define transactions for other resources.
Processes and Threads How to create and manage processes and threads.
Windows Subsystem for Linux Reference information for the Windows Subsystem
for Linux (WSL) programming interfaces.
Feedback
Was this page helpful? Yes No
Component Object Model (COM)
Article • 08/21/2020
Purpose
COM is a platform-independent, distributed, object-oriented system for creating binary
software components that can interact. COM is the foundation technology for
Microsoft's OLE (compound documents) and ActiveX (Internet-enabled components)
technologies.
Where applicable
COM objects can be created with a variety of programming languages. Object-oriented
languages, such as C++, provide programming mechanisms that simplify the
implementation of COM objects. These objects can be within a single process, in other
processes, even on remote computers.
Run-time requirements
For information on which operating systems are required to use a particular interface or
function, see the Requirements section of the documentation for the interface or
function.
In this section
Topic Description
COM Describes the differences between programming languages and describe how
Language to translate COM object syntax from one language to another.
Translations
Related documentation
Topic Description
COM Describes the differences between programming languages and describe how
Language to translate COM object syntax from one language to another.
Translations
Related topics
Topic Description
Automation Automation enables software packages to expose their unique features to scripting
tools and other applications. Automation uses the Component Object Model
(COM), but may be implemented independently from other OLE features, such as
in-place activation.
Microsoft The Microsoft Interface Definition Language (MIDL) defines interfaces between
Interface client and server programs. Microsoft includes the MIDL compiler with the Platform
Definition Software Development Kit (SDK) to enable developers to create the interface
Language definition language (IDL) files and application configuration files (ACF) required for
(MIDL) remote procedure call (RPC) interfaces and COM/DCOM interfaces. MIDL also
supports the generation of type libraries for OLE Automation.
Structured Structured Storage provides file and data persistence in COM by handling a single
Storage file as a structured collection of objects known as storages and streams.
COM+ COM+ is an evolution of Microsoft Component Object Model (COM) and Microsoft
Transaction Server (MTS). COM+ builds on and extends applications written using
COM, MTS, and other COM-based technologies.
Feedback
Was this page helpful? ツ Yes ト No
7 Note
This topic is about the classic MIDL used for creating RPC and COM interfaces. For
MIDL 3.0, which is used to create Windows Runtime (WinRT) types, see Microsoft
Interface Definition Language 3.0 reference.
Purpose
The Microsoft Interface Definition Language (MIDL) defines interfaces between client
and server programs. Microsoft includes the MIDL compiler with the Platform Software
Development Kit (SDK) to enable developers to create the interface definition language
(IDL) files and application configuration files (ACF) required for remote procedure call
(RPC) interfaces and COM/DCOM interfaces. MIDL also supports the generation of type
libraries for OLE Automation.
Where applicable
MIDL can be used in all client/server applications based on Windows operating systems.
It can also be used to create client and server programs for heterogeneous network
environments that include such operating systems as Unix and Apple. Microsoft
supports the Open Group (formerly known as the Open Software Foundation) DCE
standard for RPC interoperability.
Developer audience
When using MIDL with RPC, familiarity with C/C++ programming and the RPC paradigm
is required. When using MIDL with COM, familiarity with C++ programming and the RPC
paradigm as it applies to COM is required, or alternatively, familiarity with OLE
Automation model scripting and type libraries is required.
Run-time requirements
The appropriate run-time libraries for using MIDL are included with Windows. The MIDL
compiler and the components of the RPC development environment are installed when
you install the Windows SDK. For more information, see Using the MIDL Compiler and
Installing the RPC Programming Environment.
In this section
Topic Description
Using the MIDL Compiler Information about using the MIDL compilter to generate RPC
stubs.
Interface Definitions and Type Documentation of RPC-specific interface definitions and type
Libraries libraries.
Related topics
Remote Procedure Call (RPC)
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Structured Storage provides file and data persistence in COM by handling a single file as
a structured collection of objects known as storages and streams.
The purpose of Structured Storage is to reduce the performance penalties and overhead
associated with storing separate objects in a single file. Structured Storage provides a
solution by defining how to handle a single file entity as a structured collection of two
types of objects storages and streams through a standard implementation called
Compound Files. This enables the user to interact with, and manage, a compound file as
if it were a single file rather than a nested hierarchy of separate objects.
Where applicable
Structured Storage can be used on Microsoft COM-based operating systems.
Developer audience
The Structured Storage documentation is intended for experienced C and C++
programmers and COM-based system developers.
Structured Storage primarily supports C and C++ programming languages, however any
COM-based technology will also support any programming language that utilizes
interface pointers.
Run-time requirements
For more information about which operating systems are required to use a particular
API element, see the Requirements section of the documentation for the element.
In this section
Topic Description
Samples Code examples written in C++. For more information, see Names in IStorage,
Property Set Header, Section, Storing Property Sets, and Using Structured Storage.
Related topics
The Component Object Model
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Activity Coordinator API coordinates execution of deferrable tasks on a system.
Deferrable tasks are those tasks which don’t need to be run immediately. They can defer
their execution to a time when the system is in a desired state where running the task
does not interfere with other ongoing work.
Developer audience
The Activity Coordinator API is designed for use by professional C/C++ developers of
Windows applications. Developers can use the API to get notifications of when the
system is in the desired state to run a particular task.
Run-time requirements
The Activity Coordinator API is available beginning with Windows 11, version 22H2.
In this section
Activity Coordinator overview
Activity Coordinator API functions
Activity Coordinator API enumerations
Activity Coordinator example project
Feedback
Was this page helpful? ツ Yes ト No
Purpose
COM+ is an evolution of Microsoft Component Object Model (COM) and Microsoft
Transaction Server (MTS). COM+ builds on and extends applications written using COM,
MTS, and other COM-based technologies. COM+ handles many of the resource
management tasks that you previously had to program yourself, such as thread
allocation and security. COM+ also makes your applications more scalable by providing
thread pooling, object pooling, and just-in-time object activation. COM+ also helps
protect the integrity of your data by providing transaction support, even if a transaction
spans multiple databases over a network.
Where applicable
COM+ can be used to develop enterprise-wide, mission-critical, distributed applications
for Windows.
If you are a system administrator, you will be installing, deploying, and configuring
COM+ applications and their components. If you are an application programmer, you
will be writing components and integrating them as applications. If you are a tools
vendor, you will be developing or modifying tools to work in the COM+ environment.
Developer audience
COM+ is designed primarily for Microsoft Visual C++ and Microsoft Visual Basic
developers.
Run-time requirements
COM+ version 1.5 is included in Windows starting with Windows XP and Windows
Server 2003. COM+ version 1.0 is included in Windows 2000.
In this section
What's New in COM+ 1.5
COM+ Developers Overview
COM+ Services
COM+ General Tasks
COM+ Reference
Related topics
COM
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Compression API exposes the Windows MSZIP, XPRESS, XPRESS_HUFF, and LZMS
compression algorithms. This enables developers of Windows applications to manage
versions, service, and extend the exposed compression algorithms.
Developer audience
The Compression API is designed for use by professional C/C++ developers of Windows
applications. The Compression API exposes the lossless compression algorithms used by
Windows though a public interface and user-mode API. The Compression API is the
recommended method for Windows developers to control the compression algorithms.
This feature is 64-bit on 64-bit Windows and 32-bit on 32-bit Windows.
Run-time requirements
The Compression API is available beginning with the Windows 8 or Windows
Server 2012.
In this section
Using the Compression API
Compression API Functions
Compression API Structures
Compression API Enumerations
Feedback
Was this page helpful? ツ Yes ト No
Get help at Microsoft Q&A
Dynamic-Link Libraries (Dynamic-Link
Libraries)
Article • 05/31/2022
A dynamic-link library (DLL) is a module that contains functions and data that can be
used by another module (application or DLL).
A DLL can define two kinds of functions: exported and internal. The exported functions
are intended to be called by other modules, as well as from within the DLL where they
are defined. Internal functions are typically intended to be called only from within the
DLL where they are defined. Although a DLL can export data, its data is generally used
only by its functions. However, there is nothing to prevent another module from reading
or writing that address.
DLLs provide a way to modularize applications so that their functionality can be updated
and reused more easily. DLLs also help reduce memory overhead when several
applications use the same functionality at the same time, because although each
application receives its own copy of the DLL data, the applications share the DLL code.
7 Note
If you are a user experiencing difficulty with a DLL on your computer, you should
contact customer support for the software vendor that publishes the DLL. If you
feel you are in need of support for a Microsoft product (including Windows), please
go to our technical support site at support.microsoft.com .
Related topics
DLLs (Visual C++)
Feedback
Was this page helpful? ツ Yes ト No
The following enclave technologies (or enclave types) are currently supported:
In This Section
Enclave Reference
VBS Enclaves
APIs Available in VBS Enclaves
Feedback
Was this page helpful? Yes No
HWREQCHK API
Article • 06/01/2023
7 Note
) Important
Purpose
The Hardware Requirement Evaluator (HWREQCHK) library is a set of APIs that allows
callers to get information about a hardware device and determine if the machine is
eligible to run a specific version of Windows 11 (and new versions of the OS as they
become available). The API queries various hardware properties and evaluates rules to
determine eligibility.
Developer audience
The HWREQCHK API is designed for use by professional C/C++ developers of Windows
applications. Developers can use the API to get information about a hardware device
and determine if the machine is eligible to run a specific version of Windows.
Run-time requirements
The HWREQCHK API is available beginning with Windows 10, version xxxx and Windows
11, version xxxx.
In this section
HWREQCHK overview
HWREQCHK API functions
HWREQCHK API structures
HWREQCHK API enums
HWREQCHK examples
Feedback
Was this page helpful? ツ Yes ト No
After you decide that your application would benefit from IPC, you must decide which of
the available IPC methods to use. It is likely that an application will use several IPC
mechanisms. The answers to these questions determine whether an application can
benefit by using one or more IPC mechanisms.
Clipboard
COM
Data Copy
DDE
File Mapping
Mailslots
Pipes
RPC
Windows Sockets
Key point: All applications should support the clipboard for those data formats that they
understand. For example, a text editor or word processor should at least be able to
produce and accept clipboard data in pure text format. For more information, see
Clipboard.
The foundation of OLE is the Component Object Model (COM). A software component
that uses COM can communicate with a wide variety of other components, even those
that have not yet been written. The components interact as objects and clients.
Distributed COM extends the COM programming model so that it works across a
network.
Key point: OLE supports compound documents and enables an application to include
embedded or linked data that, when chosen, automatically starts another application for
data editing. This enables the application to be extended by any other application that
uses OLE. COM objects provide access to an object's data through one or more sets of
related functions, known as interfaces. For more information, see COM and ActiveX
Object Services.
Key point: Data copy can be used to quickly send information to another application
using Windows messaging. For more information, see Data Copy.
The data formats used by DDE are the same as those used by the clipboard. DDE can be
thought of as an extension of the clipboard mechanism. The clipboard is almost always
used for a one-time response to a user command, such as choosing the Paste command
from a menu. DDE is also usually initiated by a user command, but it often continues to
function without further user interaction. You can also define custom DDE data formats
for special-purpose IPC between applications with more tightly coupled
communications requirements.
DDE exchanges can occur between applications running on the same computer or on
different computers on a network.
Key point: DDE is not as efficient as newer technologies. However, you can still use DDE
if other IPC mechanisms are not suitable or if you must interface with an existing
application that only supports DDE. For more information, see Dynamic Data Exchange
and Dynamic Data Exchange Management Library.
You can use a special case of file mapping to provide named shared memory between
processes. If you specify the system swapping file when creating a file-mapping object,
the file-mapping object is treated as a shared memory block. Other processes can
access the same block of memory by opening the same file-mapping object.
Key point: File mapping is an efficient way for two or more processes on the same
computer to share data, but you must provide synchronization between the processes.
For more information, see File Mapping and Synchronization.
A mailslot client can send a message to a mailslot on its local computer, to a mailslot on
another computer, or to all mailslots with the same name on all computers in a specified
network domain. Messages broadcast to all mailslots on a domain can be no longer
than 400 bytes, whereas messages sent to a single mailslot are limited only by the
maximum message size specified by the mailslot server when it created the mailslot.
Key point: Mailslots offer an easy way for applications to send and receive short
messages. They also provide the ability to broadcast messages across all computers in a
network domain. For more information, see Mailslots.
Named pipes are used to transfer data between processes that are not related processes
and between processes on different computers. Typically, a named-pipe server process
creates a named pipe with a well-known name or a name that is to be communicated to
its clients. A named-pipe client process that knows the name of the pipe can open its
other end, subject to access restrictions specified by named-pipe server process. After
both the server and client have connected to the pipe, they can exchange data by
performing read and write operations on the pipe.
Key point: Anonymous pipes provide an efficient way to redirect standard input or
output to child processes on the same computer. Named pipes provide a simple
programming interface for transferring data between two processes, whether they
reside on the same computer or over a network. For more information, see Pipes.
The RPC provided by Windows is compliant with the Open Software Foundation (OSF)
Distributed Computing Environment (DCE). This means that applications that use RPC
are able to communicate with applications running with other operating systems that
support DCE. RPC automatically supports data conversion to account for different
hardware architectures and for byte-ordering between dissimilar environments.
RPC clients and servers are tightly coupled but still maintain high performance. The
system makes extensive use of RPC to facilitate a client/server relationship between
different parts of the operating system.
Key point: RPC is a function-level interface, with support for automatic data conversion
and for communications with other operating systems. Using RPC, you can create high-
performance, tightly coupled distributed applications. For more information, see
Microsoft RPC Components.
Windows Sockets are based on the sockets first popularized by Berkeley Software
Distribution (BSD). An application that uses Windows Sockets can communicate with
other socket implementation on other types of systems. However, not all transport
service providers support all available options.
Purpose
The Kernel Transaction Manager (KTM) enables the development of applications that
use transactions. The transaction engine itself is within the kernel, but transactions can
be developed for kernel- or user-mode transactions, and within a single host or among
distributed hosts.
The KTM is used to implement Transactional NTFS (TxF) and Transactional Registry (TxR).
TxF allows transacted file system operations within the NTFS file system. TxR allows
transacted registry operations. KTM enables client applications to coordinate file system
and registry operations with a transaction.
To develop an application that coordinates transactions with resources other than TxF or
TxR, you must first develop a Win32 transaction-aware service, also called a resource
manager.
Managed and COM+ applications should use their native transaction managers.
Where applicable
KTM can be used with applications and resource managers hosted on Windows Vista or
Windows Server 2008.
Developer audience
The KTM API is designed for use by C and C++ programmers.
Run-time requirements
KTM is supported starting with Windows Vista.
In this section
Topic Description
About General information about transactions and the capabilities provided by KTM.
Topic Description
Reference Documentation for the functions, data structures, enumerations, and other
programming elements of KTM.
Related topics
Common Log File System
Feedback
Was this page helpful? ツ Yes ト No
The memory manager implements virtual memory, provides a core set of services such
as memory mapped files, copy-on-write memory, large memory support, and underlying
support for the cache manager.
In This Section
About Memory Management
Using the Memory Management Functions
Memory Management Reference
Feedback
Was this page helpful? ツ Yes ト No
Purpose
This overview describes the power management support in the Windows operating
system and explains how to use it in your applications.
In this section
About Power Management
Using Power Management
Power Management Reference
Feedback
Was this page helpful? ツ Yes ト No
A job object allows groups of processes to be managed as a unit. Job objects are
namable, securable, sharable objects that control attributes of the processes associated
with them. Operations performed on the job object affect all processes associated with
the job object.
A fiber is a unit of execution that must be manually scheduled by the application. Fibers
run in the context of the threads that schedule them.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Windows Server 2012 R2, Windows Server 2012, Windows Server 2008 R2, or Windows
Server 2008 with Remote Desktop Services (formerly known as Terminal Services) allow a
server to host multiple, simultaneous client sessions. Remote Desktop uses Remote
Desktop Services technology to allow a single session to run remotely. A user can
connect to a Remote Desktop Session Host (RD Session Host) server (formerly known as
a terminal server) by using Remote Desktop Connection (RDC) client software. The
Remote Desktop Web Connection extends Remote Desktop Services technology to the
web.
7 Note
This topic is for software developers. If you are looking for user information for
Remote Desktop connections, See Remote Desktop Connection: frequently asked
questions .
Where applicable
A Remote Desktop Connection (RDC) client can exist in a variety of forms. Thin-client
hardware devices that run an embedded Windows-based operating system can run the
RDC client software to connect to an RD Session Host server. Windows-, Macintosh-, or
UNIX-based computers can run RDC client software to connect to an RD Session Host
server to display Windows-based applications. This combination of RDC clients provides
access to Windows-based applications from virtually any operating system.
Developer audience
Developers who use Remote Desktop Services should be familiar with the C and C++
programming languages and the Windows-based programming environment.
Familiarity with client/server architecture is required. The Remote Desktop Web
Connection includes scriptable interfaces to create and deploy scriptable virtual
channels within Remote Desktop Services web applications.
Run-time requirements
Applications that use Remote Desktop Services require Windows Server 2012 R2,
Windows 8.1, Windows Server 2012, Windows 8, Windows Server 2008 R2, Windows 7,
Windows Server 2008, or Windows Vista. To use Remote Desktop Web Connection
functionality, the Remote Desktop Services client application requires Internet Explorer
and a connection to the World Wide Web. For information about run-time requirements
for a particular programming element, see the Requirements section of the reference
page for that element.
In this section
Remote Desktop ActiveX control
You use the Remote Desktop Protocol Provider API to create a protocol to provide
communication between the Remote Desktop Services service and multiple clients.
Virtual channels are software extensions that can be used to add functional
enhancements to a Remote Desktop Services application.
The RemoteFX Media Redirection API is used in a Remote Desktop session to identify
areas of the server that are displaying fast changing content, such as video. This content
can then be video encoded and sent to the client in encoded format.
Describes how to use the Remote Desktop Connection Broker client API.
The personal desktop task agent API is used to handle scheduled updates to a personal
virtual desktop.
About Remote Desktop Services
The Remote Desktop Management Services (RDMS) Provider manages virtual desktop
infrastructure (VDI) environments.
Documentation of property methods that you can use to examine and configure
Remote Desktop Services user properties. Remote Desktop Services functions,
structures, and Remote Desktop Web Connection scriptable interfaces are also
documented.
The Remote Desktop Services WMI provider provides programmatic access to the
information and settings that are exposed by the Remote Desktop Services
Configuration/Connections Microsoft Management Console (MMC) snap-in.
How to program in the Remote Desktop Services environment and how to extend
Remote Desktop Services (formerly known as Terminal Services) technology to the web
by using Remote Desktop Web Connection.
Related topics
Terminal Services Is Now Remote Desktop Services
Feedback
Was this page helpful? ツ Yes ト No
A service application conforms to the interface rules of the Service Control Manager
(SCM). It can be started automatically at system boot, by a user through the Services
control panel applet, or by an application that uses the service functions. Services can
execute even when no user is logged on to the system.
Triggers can now be used to control service start. For more info, see Service
Configuration.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Setup API provides a set of functions that a setup application calls to perform
installation operations.
Where applicable
These setup functions are available to develop a setup application. Setup API should no
longer be used for installing applications. Instead, use the Windows Installerfor
developing application installers. Setup API continues to be used for installing device
drivers.
The Setup API is intended for the development of desktop style applications.
Developer audience
A developer can use the Setup API if their setup application requires the following
functionality:
Queuing of files.
Installation of files.
Handling of installation errors and prompting for media.
Updating registry entries.
Logging of files as they are installed.
Storage of the most recently used source paths.
Run-time requirements
For information about which operating systems are required to use a particular function,
see the Requirements section of the documentation for the function.
In this section
Topic Description
Topic Description
Reference Documentation of Setup API data types, structures, functions, and notifications.
Feedback
Was this page helpful? ツ Yes ト No
There are a variety of ways to coordinate multiple threads of execution. The functions
described in this overview provide mechanisms that threads can use to synchronize
access to a resource.
Feedback
Was this page helpful? ツ Yes ト No
Overview Description
Handles An object is a data structure that represents a system resource, such as a file, thread,
and or graphic image. An application cannot directly access object data or the system
Objects resource that an object represents. Instead, an application must obtain an object
handle, which it can use to examine or modify the system resource.
Registry A system-defined database in which applications and the system store and retrieve
configuration information.
Time Retrieves accurate time stamps from hardware or the network, and provides time
Provider stamps to other clients on the network.
Additional Resources
Item Description
General Windows Discuss Windows System Information and other general issues
Development Issues about developing applications for Windows.
Forum
Feedback
Was this page helpful? ツ Yes ト No
Feedback
Was this page helpful? ツ Yes ト No
Feedback
Was this page helpful? ツ Yes ト No
In this section
Directory Services
Identity Services
Access Management Services
Feedback
Was this page helpful? ツ Yes ト No
In this section
Directories
Directory Access Technologies
Feedback
Was this page helpful? ツ Yes ト No
In this section
Active Directory Domain Services
Active Directory Lightweight Directory Services
Active Directory Schema
Active Directory WMI Provider
Microsoft UDDI SDK
UDDI Class Library
Feedback
Was this page helpful? ツ Yes ト No
In this section
Active Directory Service Interfaces
Directory Services Data Exchange
DSML Services for Windows
Lightweight Directory Access Protocol
Feedback
Was this page helpful? ツ Yes ト No
In this section
Microsoft Identity Manager 2016 Developer Reference
Forefront Identity Manager 2010 R2 Developer Reference
Forefront Identity Manager 2010 Developer Reference
Identity Lifecycle Manager 2007
Identity Lifecycle Manager 2007, Feature Pack 1 Developer Reference
Feedback
Was this page helpful? ツ Yes ト No
In this section
Certificate Lifecycle Manager Overview
External Resources for CLM
Certificate Lifecycle Manager Managed Reference
Feedback
Was this page helpful? ツ Yes ト No
In this section
Active Directory Federation Services
Feedback
Was this page helpful? ツ Yes ト No
In this section
Active Directory Federation Services Overview
Related topics
Access Management Services
Feedback
Was this page helpful? ツ Yes ト No
Three generations of Rights Management SDK are now available: Rights Management
SDK 4.2, Microsoft Rights Management SDK 2.1 and Active Directory Rights
Management Services SDK, as well as a scripting API, Active Directory Rights
Management Services Scripting API, that enables custom administration of an RMS
server.
In this section
Code Samples and Tools
A collection of Microsoft supplied RMS code samples and developer support tools
across all supported operating systems; Android, iOS/OS X, Windows Phone and
Windows Desktop.
RMS SDK 4.2 is a simplified, next-generation tool set that provides a lightweight
development experience in enabling your Android, iOS, and Mac OS X device apps with
information protection via Microsoft Rights Management services.
RMS SDK 2.1 is a powerful SDK offering for Windows desktop application developers
and server based solution providers to enable their products with rights management.
7 Note
The Windows Active Directory Rights Management Services (AD RMS) Scripting API can
be used to create scripts to administer an AD RMS installation.
Feedback
Was this page helpful? ツ Yes ト No
This roadmap provides Microsoft supplied code samples that show you how it's done
and code snippets that you can use in your applications.
Read PFILE protected PDF Windows RMS SDK Read PFILE protected PDF is a simple
Desktop 2.1 and code example on our RMS Developer's
later Corner blog that uses the MSIPC File API
versions of to decrypt and open a PFILE protected
the 2.x SDK PDF document.
iOS/OS X usage scenarios iOS / OS X RMS SDK Objective C code examples representing
4.2 and important development scenarios to get
later you accustomed to the RMS SDK.
versions of Examples include use of Microsoft
the 4.x SDK Protected File format, custom protected
file formats, and custom UI controls.
UI Library and Sample iOS RMS SDK UI libraries and sample app for iOS at
app 4.2 and GitHub, so you can get started quickly
later and re-use our standard UI in your apps.
versions of
the 4.x SDK
UI Library and Sample Android RMS SDK UI libraries and sample app for Android
app 4.2 and at GitHub, so you can get started quickly
later and re-use our standard UI in your apps.
versions of
the 4.x SDK
Android usage scenarios Android RMS SDK Java code examples representing
4.2 and important development scenarios to get
later you accustomed to the RMS SDK.
versions of Examples include use of Microsoft
the 4.x SDK Protected File format, custom protected
file formats, and custom UI controls.
Feedback
Was this page helpful? ツ Yes ト No
7 Note
These topics are for software developers. For customer support issues, see Support
- Windows Help .
In this section
Boot Configuration Data WMI Provider
Group Policy
The Software Licensing API (SLAPI) can be used to determine a genuine Microsoft
Windows installation, install and log an asset management license, and retrieve
information about the licensing policy of a software component.
System Restore
System Restore automatically monitors and records key system changes on a user's
computer. It is designed to reduce support costs and increase customer satisfaction by
enabling a user to undo a change that may have caused a problem with the system, or
revert to a day when the system was performing optimally.
System Shutdown
The system shutdown functions and messages allow applications to log off the current
user, shut down the system, or lock the workstation.
Task Scheduler
The Task Scheduler enables you to automatically perform routine tasks on a chosen
computer. The Task Scheduler does this by monitoring whatever criteria you choose to
initiate the tasks (referred to as triggers) and then executing the tasks when the criteria
is met.
User Access Logging (UAL) is a common framework for Windows Server roles to report
their respective consumption metrics. This UAL framework is a foundational and critical
component of the larger licensing management solution.
Windows Deployment Services
The Windows Genuine Advantage API is used to determine whether the Windows
operating system that is running on the current system is a genuine copy.
Windows Defender WMI APIs can be used to manage malware protection through
scripts or applications.
Windows PowerShell
Windows Resource Protection (WRP) prevents the replacement of essential system files,
folders, and registry keys that are installed as part of the operating system.
Independent software vendors and end-user developers can integrate WSUS features
into computer management or update management software to provide a seamless
operating environment.
Work Folders
Work Folders allows users to store and access work files on personal computers and
devices.
Feedback
Was this page helpful? ツ Yes ト No
In this section
Group Policy
Group Policy Management Console
GPMC Class Library
Feedback
Was this page helpful? ツ Yes ト No
In this section
Microsoft Management Console 3.0
Microsoft Management Console 2.0
Feedback
Was this page helpful? ツ Yes ト No
In this section
Microsoft Management Console 3.0
MMC Class Library
Feedback
Was this page helpful? ツ Yes ト No
In this section
Windows Server Update Services 3.0 Class Library
Windows Server Update Services 2.0 Class Library
Windows Update Agent API
Feedback
Was this page helpful? ツ Yes ト No
In this section
Microsoft.UpdateServices.Administration Namespace (2.0)
WSUS Samples
Feedback
Was this page helpful? ツ Yes ト No
In this section
Microsoft Virtual Server
Microsoft Virtual Server 2005 allows you to create separate virtual machines on top of
your Microsoft Windows desktop, where you can install virtually any Intel-architecture
operating system. Each virtual machine emulates a complete hardware system—from
processor to network card—in a self-contained, isolated software environment, enabling
the simultaneous operation of otherwise incompatible systems.
Windows Virtual PC
Related topics
Hyper-V WMI Provider
Feedback
Was this page helpful? ツ Yes ト No
Active Directory
The Active Directory provider, also known as the Directory Services (DS) provider, maps
Active Directory objects to WMI. By accessing the Lightweight Directory Access Protocol
(LDAP) namespace in WMI, you can reference or make an object an alias in the Active
Directory.
Application Inventory
The WMI classes for Application Inventory enable discovery of the installed Win32
applications and Windows store applications on a Windows system.
Application Proxy
Application Proxy WMI Provider enables developers to access the Web Application
Proxy service so administrators can publish applications for external access. Web
Application Proxy is a reverse proxy for Active Directory Federation Services (AD FS).
Provides configuration and management for an area of storage on a hard disk drive,
represented by an instance of Win32_EncryptableVolume, that can be protected by
using encryption.
BITS
The Background Intelligent Transfer Service (BITS) Compact Server with BITS Remote
Management allows authenticated administrators or controller applications to create,
modify and manage BITS transfer jobs remotely without using the Internet Information
Services (IIS) service.
BizTalk
The Boot Event Collector WMI provider provides access to connection and configuration
information for the Setup and Boot Event Collection feature on Windows Server.
The CIMWin32 providers support the classes implemented in CimWin32.dll, and consist
of the core CIM classes, the Win32 implementation of those classes, and power
management events.
CIMWin32a
DcbQosCim
The DcbQosCim provider supports classes that describe Network QOS setting data,
control setting data, and traffic class setting data.
Creates tools for configuring and monitoring the Distributed File System (DFS) service.
For more information, see DFSR WMI Classes.
Dfsncimprov
The Dfsncimprov provider supports classes that implement DFS namespace access.
DhcpServerPSProvider
The DhcpServerPSProvider provider supports classes that interact with a dynamic host
configuration protocol (DHCP) server.
Disk Quota
The Windows Disk Quota provider allows administrators to control the amount of data
that each user stores on an NTFS file system.
DNS
The Dnsclientcim provider supports classes that interact with a Domain Name System
(DNS) client.
DnsClientPSProvider
The DnsClientPSProvider provider supports WMI classes that interact with a DNS client.
DnsServerPSProvider
The DnsServerPSProvider provider supports WMI classes that interact with a DNS server.
Event Log
The Event Log provider supplies access to data from the event log service, and
notification of events.
The Event Tracing Management provider provides access to Event Tracing for Windows
(ETW) autologger session configurations and trace events.
The Failover Cluster-Aware Updating (CAU) provider supports coordination with and
management of CAU.
The Failover Clustering Hyper-V provider provides management and reporting of Hyper-
V in a clustering environment.
The Failover Clustering Storage Quality of Service (QoS) provider provides management
and reporting of the clustering storage QoS policies.
The Gateway Health Monitor provider manages gateway health monitoring events and
information.
The Group Policy provider enables policy-based administration using Microsoft Active
Directory (AD) directory services.
The Host Guardian Service provider provides management of the Host Guardian Service
for shielded VMs.
Hyper-V
The Hyper-V provider allows you to manage and retrieve information about virtual
machines.
Hyper-V (V2)
Exposes programming interfaces that can be used to query and configure the IIS
metabase.
The IPAM Server Provider enables developers to manage IPAM through WMI.
IP Route Provider
The preinstalled IP Route provider supplies IPV4 network routing information, including
(but not limited to) the information available through the route print command.
Job Object
The Job Object provider supports access to data about named kernel job objects.
Kernel Trace
The preinstalled Kernel Trace event provider allows you to see kernel trace events on
Process creation, Process termination, Thread creation, Thread termination and module
load.
Provides classes that create, register, configure, manage custom Session Initiation
Protocol (SIP) applications with the Live Communications Server 2003.
The Management Tools Registry provider provides remote access to the registry.
The Management Tools Task Manager provider provides access and management of the
Task Manager data.
MDM Application
MDM Bridge
MDM Settings
The MDM Settings Provider enables management of settings on devices enrolled with a
MDM service.
MSFT_PCSVDevice
The MSFT_PCSVDevice provider exposes a class that defines a view class for a physical
computer system.
MsNetImPlatform
The MsNetImPlatform provider section provides reference information for
MsNetImPlatform provider classes implemented in NdisIMPlatCim.dll.
NetAdapterCim
NetDaCim
NetNcCim
NetPeerDist
The NetPeerDist provider supports classes that interact with the Branch Cache
infrastructure.
NetQosCim
The NetQosCim provider supplies data for network quality of service (QoS) and QoS
setting data.
NetSwitchTeam
This section provides reference information for NetSwitchTeam provider classes declared
in NetSwitchTeam.mof and implemented in NetSwitchTeamCim.dll.
NetTCPIP
The NetTCPIP provider supports classes that interact with TCPIP connections.
NetTtCim
This section provides reference information for NetTtCim provider classes defined in
NetTtCim.mof and implemented in NetTtCim.dll.
NetWNV
The NetWNV provider supports classes that interact with net virtualization technologies.
The Network Access Protection provider exposes a platform for protected access to
private networks.
Network Load Balancing
The Network Load Balancing (NLB) Provider enables management of a NLB cluster.
NetworkController Server
NFS
The provider for NFS allows you to create tools and scripts for configuring and
monitoring the Windows Network File System.
Ping
The Ping provider supplies access to the status information provided by the standard
ping command.
Policy
Power Meter
The Power Meter provider supports the Power Metering and Budgeting (PMB) interface.
These classes are the primary interface for the query of Power Meter Interface (PMI)
information from underlying power meters on the system.
Power Policy
The Power Policy provider provides classes the ability to remotely manage all the power
policy infrastructure.
RAMgmtPSProvider
RAServerPSProvider
The RAServerPSProvider provider provides classes to manage the Remote Access Server.
ReliabilityMetricsProvider
Reporting Services
Defines classes that allow you to write scripts and code to modify the settings of the
report server and the Report Manager.
Supplies methods to plan and debug policy settings in a what-if situation. These
methods allow administrators to determine easily the combination of policy settings
that apply to, or will apply to, a user or computer. This is known as the Resultant Set of
Policy (RSoP). For more information, see About the RSoP WMI Method Provider and
RSoP WMI Classes.
Security
Retrieves or changes security settings that control ownership, auditing, and access rights
to files, directories, and shares.
ServerManager.DeploymentProvider
Session
Shadow Copy
Supplies management functions for the Shadow Copies of the Shared Folders feature.
Shielded VM Provisioning
The Shielded VM Provisioning provider enables a fabric controller to start the secure
provisioning of a shielded VM on a Hyper-V host.
SMB Management
The SMB Management API provides classes and methods to manage shares and share
access.
SNMP
Maps Simple Network Management Protocol (SNMP) objects that are defined in
Management Information Base (MIB) schema objects to classes. For more information,
see Setting up the WMI SNMP Environment.
The Software Inventory Logging provider collects licensing data about software installed
on a Windows Server, and provides remote access to the data so it can be aggregated
easily by a datacenter.
Software License
Storage Volume
Storage Replica
System Registry
The System Registry provider enables management applications to retrieve and modify
data in the system registry, and receive notifications when changes occur.
System Restore
Supplies classes that configure and use System Restore functionality. For more
information, see Configuring System Restore and the System Restore WMI Classes.
Trustmon
The Trustmon provider is an instance provider that creates classes with information
about the trust relationships between domains.
UserProfileProvider
The UserProfileProvider provider exposes classes that provide information about a user
profile on a Windows system, as well as the health status of a redirected user folder.
The User State Management provider exposes a management and reporting API for
enterprise scenarios.
View
Creates new instances and methods based on instances of other classes. Two versions of
the View provider are available on 64-bit platforms.
VPNClientPSProvider
WDM
Provides access to the classes, instances, methods, and events of hardware drivers that
conform to the Windows Driver Model (WDM).
WFasCim
WhqlProvider
Win32ClockProvider
The Win32ClockProvider provider exposes the current, local, and UTC-based timestamps
on a computer system.
Windows Defender
The Windows Installer provider, also known as the MSI provider allows applications to
access information collected from Windows Installer compliant applications.
The provider enables access to and management of the configuration controlled by the
Server Manager application.
The StrgMgmt provider can be used to manage a wide range of storage configurations,
from tablets to external storage arrays on servers.
The Windows System Assessment Tool (WinSAT) exposes a number of classes that
assesses the performance characteristics and capabilities of a computer.
WMI Core
The WMI Core provider defines classes that compose the core functionality of WMI.
Msft_ProviderSubSystem
Win32_Perf
The Win32_Perf abstract class is the base class for the performance counter classes
Win32_PerfRawData and Win32_PerfFormattedData. It defines the required timestamp
and frequency properties used in the CounterType algorithms for the performance
counter classes.
Win32_PerfFormattedData
The performance counter class Win32_PerfRawData is the abstract base class for all
concrete raw performance counter classes. To appear in System Monitor, performance
counter classes must be added to the "Root\CIMv2" namespace and derived from
Win32_PerfRawData.
WMIPerfClass
Creates the WMI Performance Counter Classes. Data is dynamically supplied to these
performance classes by the WMIPerfInst provider.
WmiPerfInst
Supplies raw and formatted performance counter data dynamically from Performance
Counter Class definitions.
Work Folders
Work Folders is used to synchronize files with multiple PCs and mobile devices.
Feedback
Was this page helpful? ツ Yes ト No
Server Description
Version
Windows Emphasizes cloud support with features such as improved IP-addressing, updated
Server Hyper-V, and a new file system (ReFS). Windows Server 2012 R2 includes
2012 R2 enhancements to virtualization, management, storage, networking, virtual desktop
and infrastructure, access protection, information protection, web services, and
Windows application platform infrastructure.
Server
2012
Windows Includes a number of additional security and administrative features shared with
Server Windows Vista: a re-written networking stack, improved Firewall, additional .NET
2008 R2 Framework technology, and numerous improvements to the kernel, file, and
and memory systems.
Windows
Server
2008
Windows Integrates a number of features from Windows XP. Includes improved networking
Server installation and integration, improved web services, and increased capabilities for
2003 R2 DTFS.
and
Windows
Server
2003
Other Windows Server SKUs
The following table describes the specialized versions of Windows Server.
SKU Description
Windows Server Continuation of the Small Business Server line, and focuses on a tight
Essentials 2012 and integration with the unified Management Console. Based off of Windows
2012 R2 Server 2012 and Windows Server 2012 R2.
Windows Essential Designed for medium-sized businesses, for a maximum of 300 users, and
Business Server 2008 focused on integration with the Management Console. Based off of
Windows Server 2008.
Windows Home Designed for a home with multiple networked PCs, and emphasized file
Server and Windows sharing, remote access, and automated backups. Based off of Windows
Home Server 2011 Server 2003 and Windows Server 2008 R2.
Related topics
Windows Server Blog
Feedback
Was this page helpful? ツ Yes ト No
This article describes some of the new features in Windows Server 2022. Windows Server
2022 is built on the strong foundation of Windows Server 2019 and brings many
innovations on three key themes: security, Azure hybrid integration and management,
and application platform.
Azure Edition
Windows Server 2022 Datacenter: Azure Edition helps you use the benefits of cloud to
keep your VMs up to date while minimizing downtime. This section describes some of
the new features in Windows Server 2022 Datacenter: Azure Edition. Learn more about
how Azure Automanage for Windows Server brings these new capabilities to Windows
Server Azure Edition in the Azure Automanage for Windows Server services article.
Windows Server 2022 Datacenter: Azure Edition builds on Datacenter Edition to deliver a
VM-only operating system that helps to use the benefits of cloud, with advanced
features like SMB over QUIC, Hotpatch, and Azure Extended Networking. This section
describes some of these new features.
Compare the differences in the editions in Windows Server 2022. You can also learn
more about how Azure Automanage for Windows Server brings these new capabilities
to Windows Server Azure Edition in the Azure Automanage for Windows Server services
article.
April 2023
Hotpatching
Windows Server 2022 Datacenter: Azure Edition Hotpatching is now public preview for
the Desktop Experience both in Azure and as a supported guest VM on Azure Stack HCI
version 22H2.
September 2022
This section lists the features and improvements that are now available in Windows
Server Datacenter: Azure Edition beginning with the 2022-09 Cumulative Update for
Microsoft server operating system version 21H2 for x64-based Systems (KB5017381 ).
After you've install the Cumulative Update, the OS build number will be 20348.1070 or
higher.
New Storage Replica PowerShell parameters are available for existing commands, review
the Windows PowerShell StorageReplica reference to learn more. For more information
about Storage Replica, see the Storage Replica overview.
With this release you can run Windows Server 2022 Datacenter: Azure Edition as a
supported guest VM on Azure Stack HCI version 22H2. With Azure Edition running on
Azure Stack HCI, you'll be able to use all the existing features including Hotpatch for
Server Core and SMB over QUIC at your datacenter and edge locations.
Begin deploying Windows Server 2022 Datacenter: Azure Edition using the Azure
Marketplace on Arc-enabled Azure Stack HCI or using an ISO. You can download the ISO
from here:
Your Azure subscription permits you to use Windows Server Datacenter: Azure Edition
on any virtual machine instances running on Azure Stack HCI. For more information, see
your product terms Product Terms .
Learn more about the latest Azure Stack HCI features in our What's new in Azure Stack
HCI, version 22H2 article.
Deploy from Azure Marketplace on Arc-enabled Azure Stack HCI
(preview)
Windows Server 2022 Datacenter: Azure Edition images will be available in the Azure
Marketplace for Arc-enabled Azure Stack HCI, making it easy to try, buy, and deploy
using Azure certified images.
Learn more about the Azure Marketplace integration for Azure Arc-enabled Azure Stack
HCI features in our What's new in Azure Stack HCI, version 22H2 article.
SMB over QUIC updates the SMB 3.1.1 protocol to use the QUIC protocol instead of TCP
in Windows Server 2022 Datacenter: Azure Edition, Windows 11 and later, and third
party clients if they support it. By using SMB over QUIC along with TLS 1.3, users and
applications can securely and reliably access data from edge file servers running in
Azure. Mobile and telecommuter users no longer need a VPN to access their file servers
over SMB when on Windows. More information can be found at the SMB over QUIC
documentation and SMB over QUIC management with Automanage machine best
practices.
Azure Extended Network enables you to stretch an on-premises subnet into Azure to let
on-premises virtual machines keep their original on-premises private IP addresses when
migrating to Azure. To learn more, see Azure Extended Network.
All editions
This section describes some of the new features in Windows Server 2022 across all
editions. To learn more about the different editions, review the Comparison of Standard,
Datacenter, and Datacenter: Azure Edition editions of Windows Server 2022 article.
Security
The new security capabilities in Windows Server 2022 combine other security
capabilities in Windows Server across multiple areas to provide defense-in-depth
protection against advanced threats. Advanced multi-layer security in Windows Server
2022 provides the comprehensive protection that servers need today.
Secured-core server
Certified Secured-core server hardware from an OEM partner provides more security
protections that are useful against sophisticated attacks. Certified Secured-core server
hardware can provide increased assurance when handling mission critical data in some
of the most data sensitive industries. A Secured-core server uses hardware, firmware,
and driver capabilities to enable advanced Windows Server security features. Many of
these features are available in Windows Secured-core PCs and are now also available
with Secured-core server hardware and Windows Server 2022. For more information
about Secured-core server, see Secured-core server.
Hardware root-of-trust
Used by features such as BitLocker drive encryption, Trusted Platform Module 2.0 (TPM
2.0) secure crypto-processor chips provide a secure, hardware-based store for sensitive
cryptographic keys and data, including systems integrity measurements. TPM 2.0 can
verify that the server has been started with legitimate code and can be trusted by
subsequent code execution, known as a hardware root-of-trust.
Firmware protection
Firmware executes with high privileges and is often invisible to traditional anti-virus
solutions, which has led to a rise in the number of firmware-based attacks. Secured-core
servers measure and verify boot processes with Dynamic Root of Trust for Measurement
(DRTM) technology. Secured-core servers can also isolate of driver access to memory
with Direct Memory Access (DMA) protection.
HVCI uses VBS to significantly strengthen code integrity policy enforcement. Kernel
mode integrity prevents unsigned kernel mode drivers or system files from being loaded
into system memory.
Kernel Data Protection (KDP) provides read-only memory protection of kernel memory
containing non-executable data where memory pages are protected by Hypervisor. KDP
protects key structures in the Windows Defender System Guard runtime from being
tampered.
Secure connectivity
Secure connections are at the heart of today's interconnected systems. Transport Layer
Security (TLS) 1.3 is the latest version of the internet's most deployed security protocol,
which encrypts data to provide a secure communication channel between two
endpoints. HTTPS and TLS 1.3 is now enabled by default on Windows Server 2022,
protecting the data of clients connecting to the server. It eliminates obsolete
cryptographic algorithms, enhances security over older versions, and aims to encrypt as
much of the handshake as possible. Learn more about supported TLS versions and
about supported cipher suites.
Although TLS 1.3 in the protocol layer is now enabled by default, applications and
services also need to actively support it. The Microsoft Security blog has more detail in
the post Taking Transport Layer Security (TLS) to the next level with TLS 1.3 .
Secure DNS: Encrypted DNS name resolution requests with DNS-
over-HTTPS
DNS Client in Windows Server 2022 now supports DNS-over-HTTPS (DoH) which
encrypts DNS queries using the HTTPS protocol. DoH helps keep your traffic as private
as possible by preventing eavesdropping and your DNS data being manipulated. Learn
more about configuring the DNS client to use DoH.
Windows Server failover clusters now support granular control of encrypting and
signing intra-node storage communications for Cluster Shared Volumes (CSV) and the
storage bus layer (SBL). When using Storage Spaces Direct, you can now decide to
encrypt or sign east-west communications within the cluster itself for higher security.
SMB Direct and RDMA supply high bandwidth, low latency networking fabric for
workloads like Storage Spaces Direct, Storage Replica, Hyper-V, Scale-out File Server,
and SQL Server. SMB Direct in Windows Server 2022 now supports encryption.
Previously, enabling SMB encryption disabled direct data placement; this was
intentional, but seriously impacted performance. Now data is encrypted before data
placement, leading to far less performance degradation while adding AES-128 and AES-
256 protected packet privacy.
More information on SMB encryption, signing acceleration, secure RDMA, and cluster
support can be found at SMB security enhancements.
As of the KB5031364 update, you can now add Windows Servers with an easy, simple
process.
To add new Windows Servers, go to the Azure Arc icon in the bottom-right corner of the
taskbar and launch the Azure Arc Setup program to install and configure an Azure
Connected Machine Agent. Once installed, you can use the Azure Connected Machine
Agent at no extra charge to your Azure account. Once you've enabled Azure Arc on your
server, you can see the status information in the taskbar icon.
To learn more, see Connect Windows Server machines to Azure through Azure Arc
Setup.
Application platform
There are several platform improvements for Windows Containers, including application
compatibility and the Windows Container experience with Kubernetes.
Applications can now use Azure Active Directory with group Managed Services
Accounts (gMSA) without domain joining the container host. Windows Containers
now also support Microsoft Distributed Transaction Control (MSDTC) and Microsoft
Message Queuing (MSMQ).
There are several other enhancements that simplify the Windows Container
experience with Kubernetes. These enhancements include support for host-process
containers for node configuration, IPv6, and consistent network policy
implementation with Calico.
Windows Admin Center has been updated to make it easy to containerize .NET
applications. Once the application is in a container, you can host it on Azure
Container Registry to then deploy it to other Azure services, including Azure
Kubernetes Service.
With support for Intel Ice Lake processors, Windows Server 2022 supports
business-critical and large-scale applications that require up to 48 TB of memory
and 2,048 logical cores running on 64 physical sockets. Confidential computing
with Intel Secured Guard Extension (SGX) on Intel Ice Lake improves application
security by isolating applications from each other with protected memory.
To learn more about the new features, see What's new for Windows containers in
Windows Server 2022.
Networking performance
UDP is becoming a popular protocol carrying more network traffic due to the increasing
popularity of RTP and custom (UDP) streaming and gaming protocols. The QUIC
protocol, built on top of UDP, brings the performance of UDP to a level on par with TCP.
Significantly, Windows Server 2022 includes UDP Segmentation Offload (USO). USO
moves most of the work required to send UDP packets from the CPU to the network
adapter's specialized hardware. Complimenting USO is UDP Receive Side Coalescing
(UDP RSC), which coalesces packets and reduces CPU usage for UDP processing. In
addition, we have also made hundreds of improvements to the UDP data path both
transmit and receive. Windows Server 2022 and Windows 11 both have this new
capability.
Windows Server 2022 uses TCP HyStart++ to reduce packet loss during connection
start-up (especially in high-speed networks) and RACK to reduce Retransmit TimeOuts
(RTO). These features are enabled in the transport stack by default and provide a
smoother network data flow with better performance at high speeds. Windows Server
2022 and Windows 11 both have this new capability.
Virtual switches in Hyper-V have been enhanced with updated Receive Segment
Coalescing (RSC). RSC allows the hypervisor network to coalesce packets and process as
one larger segment. CPU cycles are reduced and segments will remain coalesced across
the entire data path until processed by the intended application. RSC results in
improved performance for both network traffic from an external host, received by a
virtual NIC, and from a virtual NIC to another virtual NIC on the same host.
Disk anomaly detection is a new capability that highlights when disks are behaving
differently than usual. While different isn't necessarily a bad thing, seeing these
anomalous moments can be helpful when troubleshooting issues on your systems. This
capability is also available for servers running Windows Server 2019.
This functionality requires the server to be using the Server Core installation option
option with a Windows Recovery Environment partition.
Storage
Storage bus cache is now available for standalone servers. It can significantly improve
read and write performance, while maintaining storage efficiency and keeping the
operational costs low. Similar to its implementation for Storage Spaces Direct, this
feature binds together faster media (for example, NVMe or SSD) with slower media (for
example, HDD) to create tiers. A portion of the faster media tier is reserved for the
cache. To learn more, see Enable storage bus cache with Storage Spaces on standalone
servers.
SMB compression
Enhancement to SMB in Windows Server 2022 and Windows 11 allows a user or
application to compress files as they transfer over the network. Users no longer have to
manually zip files in order to transfer much faster on slower or more congested
networks. For details, see SMB Compression.
Mobile Device Management (MDM)
registration
Article • 05/26/2021
Purpose
An industry trend has been developing in which employees connect their personal
mobile computing devices to the corporate network and resources (either on premise or
through the cloud) to perform workplace tasks. This trend requires support for easy
configuration of the network and resources, such that employees can register personal
devices with the company for work-related purposes. Applications and technology to
support easy configuration must also enable IT professionals to manage the risk
associated with having uncontrolled devices connected to the corporate network. The
Mobile Device Management (MDM) registration enrolls a device into a management
service.
In this section
MDM Registration reference
Developer audience
Mobile Device Management Registration is designed for use by companies developing
and deploying MDM services.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
System Restore automatically monitors and records key system changes on a user's
computer. It is designed to reduce support costs and increase customer satisfaction by
enabling a user to undo a change that may have caused a problem with the system, or
revert to a day when the system was performing optimally.
7 Note
Developer audience
The System Restore API is designed for use by C/C++ programmers. A familiarity with
Windows Management Instrumentation (WMI) is required to use the scripting interface.
Run-time requirements
The System Restore API is supported on client operating systems starting with Windows
XP. For information about which operating systems are required to use a particular API
element, see the Requirements section of its documentation.
In this section
Topic Description
Related topics
WMI
Feedback
Was this page helpful? ツ Yes ト No
The system shutdown functions and messages allow applications to log off the current
user, shut down the system, or lock the workstation:
Feedback
Was this page helpful? ツ Yes ト No
) Important
This topic and the other topics in this section are for a developer audience. For info
about using the Task Scheduler component in your capacity as an administrator, or
an IT Professional, see Task Scheduler in the Microsoft Dynamics 365
documentation.
The Task Scheduler enables you to automatically perform routine tasks on a chosen
computer. The Task Scheduler does so by monitoring whatever criteria you choose
(referred to as triggers) and then executing the tasks when those criteria are met.
Some examples of tasks that you can use the Task Scheduler to execute are: starting an
application; sending an email message; or displaying a message box. You can schedule a
task to execute in response to these triggers:
API information
The Task Scheduler provides APIs in these forms:
Task Scheduler 2.0: Interfaces and objects are provided for C++, and for scripting
development, respectively.
Task Scheduler 1.0: Interfaces are provided for C++ development only.
Run-time requirements
The Task Scheduler requires the following operating systems:
Task Scheduler 2.0: Client requires Windows Vista or later. Server requires Windows
Server 2008 or later.
Task Scheduler 1.0: Client requires Windows Vista or Windows XP. Server requires
Windows Server 2008 or Windows Server 2003.
In this section
Topic Description
What's new in Task Summary of new functionality introduced by the Task Scheduler.
Scheduler
About the Task General conceptual information about the Task Scheduler API.
Scheduler
Using the Task Code examples that show how to use the Task Scheduler APIs.
Scheduler
Task Scheduler Detailed reference information for Task Scheduler APIs and the Task
reference Scheduler schema.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Windows Deployment Services (WDS) is the revised version of Remote Installation
Services (RIS). WDS enables the deployment of Windows operating systems. You can use
WDS to set up new clients with a network-based installation without requiring that
administrators visit each computer or install directly from CD or DVD media.
Developer audience
The primary developer audience of the WDS API is for groups that develop custom tools
and processes for IT and other computer administration groups. In environments where
the standard Windows Deployment Services (WDS) solution cannot be used, the WDS
API enables programmatic access to some WDS components.
Run-time requirements
WDS is available as an add-on for Windows Server 2003 with Service Pack 1 (SP1) and is
included in the operating system starting with Windows Server 2003 with Service Pack 2
(SP2) and Windows Server 2008. The WDS PXE Server API requires the WDS server role
on the server to implement custom PXE providers. The WDS Client API requires the
Microsoft Windows Preinstallation Environment (Windows PE 2.0) phase of setup
processing. A RAMDISK bootable image of Windows PE 2.0 in the .WIM format must be
downloaded as part of the network boot process to implement custom WDS clients.
In this section
Topic Description
Topic Description
About the Windows Deployment General information about the WDS Server API and WDS
Services API Client API.
Feedback
Was this page helpful? ツ Yes ト No
7 Note
WMI is fully supported by Microsoft. The latest version of administrative scripting and
control is available through the Windows Management Infrastructure (MI). MI is fully
compatible with previous versions of WMI, and provides a host of features and benefits
that make designing and developing providers and clients easy. For more information,
see Windows Management Infrastructure.
Developer audience
WMI is designed for programmers who create C, C++, and Visual Basic applications, or
use a scripting language that has a Windows engine and handles Microsoft ActiveX
objects. Although some familiarity with COM programming is helpful, it's not required.
C++ developers can find examples for getting started at Create a WMI application using
C++.
Run-time requirements
For more information about which operating system is required to use a specific API
element or WMI class, see the Requirements section of each article in the WMI
documentation.
To create scripts or applications for WMI, developers don't need to download or install a
specific software development kit (SDK). However, certain WMI administrative tools
might be useful to use. For more information, see Downloads.
In this section
Article Description
Using Information about how to develop applications to use WMI, which includes
WMI information about tools.
WMI Documentation about the WMI classes, WMI C++ classes, WMI COM API, scripting
reference API, and other WMI reference material.
WMI A list of WMI terms. Many of these terms are familiar to developers, but have new or
glossary altered definitions in the WMI environment.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Boot Event Collector WMI provider provides access to connection and configuration
information for the Setup and Boot Event Collection feature on Windows Server. This
allows you to view a list of the current connections and the connection history between
a collector server and its target computers. In addition, this provider allows you to
manage the configuration of a collector server.
7 Note
In this section
TargetForwarding
TargetForwardingDestination
The known destinations containing the collected data. Available only if the collector is
running with the status log enabled.
TargetForwardingHistory
The recent history of changes to the forwarding data for a target computer.
Control
In this section
Topic Description
About Hyper-V management This section contains info for Hyper-V management.
Hyper-V management reference This section contains the reference for Hyper-V management.
Feedback
Was this page helpful? ツ Yes ト No
[Some information relates to pre-released product which may be substantially modified before it's commercially released.
Microsoft makes no warranties, express or implied, with respect to the information provided here.]
Purpose
MDM Bridge WMI Provider enables mobile device management of a network bridge. This provider is defined in
DMWmiBridgeProv.mof and implemented in DMWmiBridgeProv.dll.
In this section
Topic Description
MDM_EnterpriseModernAppManagement_AppManagement01_02 The
MDM_EnterpriseModernAppManagement_AppManagement01_02
class specifies whether you want to block a specific app from being
updated via auto-updates.
MDM_EnterpriseModernAppManagement_AppManagement01_03 The
MDM_EnterpriseModernAppManagement_AppManagement01_03
class provides specific information about the app, such as name,
version, and publisher.
MDM_Reporting_EnterpriseDataProtection01_RetrieveByTimeRange02 The
MDM_Reporting_EnterpriseDataProtection01_RetrieveByTimeRange02
class is used to retrieve the logs that exist within the StartTime and
StopTime.
MDM_Update The MDM_Update class is used to manage and control the rollout of
new updates.
MDM_Policy_Config01_ActiveXControls02 This policy setting determines which ActiveX installation sites standard
users in your organization can use to install ActiveX controls on their
computers. When this setting is enabled, the administrator can create a
list of approved Activex Install sites specified by host URL.
MDM_Personalization The MDM_Personalization class is used to set the lock screen and
desktop background images. Setting these policies also prevents the
user from changing the image.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
The Windows System Assessment Tool (WinSAT) exposes a number of classes that
assesses the performance characteristics and capabilities of a computer. Developers can
use this API to develop software that can access the performance and capability
information of a computer to determine the optimal application settings based on that
computer's performance capabilities.
Users can use the results of a formal assessment to determine which scenarios and
applications will perform well on a computer. For example, if a software package
contains a rating on its packaging, a user can use the rating to determine whether the
software will run well on the computer.
Developer audience
WinSAT is designed for C, C++, and Visual Basic developers and those who write scripts.
Run-time requirements
WinSAT is available on client computers starting with the Windows Vista operating
system.
In this section
Topic Description
Using WinSAT Procedural guide for initiating assessments, retrieving scores, and retrieving
assessment details.
WinSAT Reference information for the WinSAT API, samples, and schema.
Reference
Feedback
Was this page helpful? ツ Yes ト No
The WMI Core provider defines classes that compose the core functionality of WMI.
A majority of the WMI Core provider classes contain data supplied by the WDM
Provider, and describe display monitors. The classes are defined in Wmi.mof and are
located in the "Root\WMI" namespace.
In this section
Topic Description
Feedback
Was this page helpful? ツ Yes ト No
You can also obtain hardware and system data from WS-Management protocol
implementations running on operating systems other than Windows in your enterprise.
WinRM establishes a session with a remote computer through the SOAP-based WS-
Management protocol rather than a connection through DCOM, as WMI does. Data
returned using the WS-Management protocol is formatted in XML instead of as objects.
The Intelligent Platform Management Interface (IPMI) WMI provider is a standard WMI
provider with classes that obtain BMC sensor data from computers with the appropriate
hardware. You can access IPMI data by using: the WinRM scripting API; WMI scripting; or
COM APIs.
Run-time requirements
WinRM is part of the operating system. However, to obtain data from remote
computers, you must configure a WinRM listener. For more information, see Installation
and configuration for Windows Remote Management. If a BMC is detected at system
startup, then the IPMI provider loads; but even if not, the WinRM scripting objects and
the WinRM command-line tool are still available.
See also
About Windows Remote Management
A collection of articles about: the public Microsoft Web Services for Management
(WS-Management) protocol specification; WinRM architecture; relationship to
WMI; hardware management with the IPMI provider; and WinRM configuration
and installation.
A collection of articles about how to use the WinRM scripting API to manage
hardware.
Feedback
Was this page helpful? ツ Yes ト No
Purpose
Windows Resource Protection (WRP) prevents the replacement of essential system files,
folders, and registry keys that are installed as part of the operating system. It became
available starting with Windows Server 2008 and Windows Vista. Applications should
not overwrite these resources because they are used by the system and other
applications. Protecting these resources prevents application and operating system
failures. WRP is the new name for Windows File Protection (WFP). WRP protects registry
keys and folders as well as essential system files.
Where applicable
All Windows-based applications and their installation programs that run on Windows
Server 2008 or Windows Vista, and later operating systems, should be aware of WRP. All
Windows-based applications that run on Microsoft Windows Server 2003 or Windows
XP and their installation programs should be aware of WFP.
Developer audience
The WRP API is designed for use by C/C++ programmers. The WRP API has two
functions: SfcIsFileProtected and SfcIsKeyProtected.
Run-time requirements
Applications that use only the SfcIsFileProtected function require Windows Server 2008,
Windows Vista, Windows Server 2003, or Windows XP. Applications that use the
SfcIsKeyProtected function require Windows Server 2008 or Windows Vista.
In this section
Topic Description
This article provides links to reference documentation for APIs that can be used in
desktop Windows apps.
.NET
The .NET class libraries provide access to Windows system and UI features for managed
desktop apps, including WPF and Windows Forms apps.
.NET API
Feedback
Was this page helpful? ツ Yes ト No
In this section
Data types
Enumerations
Functions
Interfaces
Structures
Feedback
Was this page helpful? ツ Yes ト No
) Important
Certification for Win32 desktop apps is deprecated . Instead, submit files here .
Follow these steps to get your desktop app certified for Windows 7, Windows 8,
Windows 8.1, and Windows 10.
If you wish to convert your desktop app to be compatible with the Universal Windows
Platform and Windows Store, you will use the Windows Desktop Bridge, in which case
you should follow the Desktop Bridge guidance for certification steps.
If you are developing and certifying a UWP app from the start, see Guidance for
Windows App Certification in UWP for info on certification.
What are the Certifying your desktop app provides several benefits for you and your
benefits? customers.
Read the Review the technical requirements and eligibility qualifications that a desktop
requirements app must meet.
Get the Kit To certify your app, you have to install and run the Windows App Certification Kit
(included in the Windows SDK).
Using the Before you can submit your app, you must test it for readiness. You can also
Kit download a copy of the app certification white paper.
Review Get the list of the tests your app needs to pass to qualify for compatibility with the
test details latest Windows operating system.
Note: Filter drivers must also pass the Hardware Certification Kit . (See Certification
requirements for Windows desktop apps, section 6.2.)
Topic Description
Set up your If your company isn't already registered, you must register it through the
account Windows Certification Dashboard.
Get a code Before you can establish a Windows Certification Dashboard account, you
signing need to get a code signing certificate to secure your digital information.
certificate
Test locally and After your run the Windows App Certification Kit tests, upload the results to
upload the the Windows Certification Dashboard.
results
Manage your After you submit your app for certification, you can review your submission
submission through the Windows Certification Dashboard.
Check app If you are building an app for Windows 8.1, investigate compatibility
compatibility concerns.
Use the logo with Display the logo on packaging and in ads and other promotional materials
your app according to the guidelines. For Windows 7 only.
See also:
App compatibility forum : Find support from the community about compatibility and
logo certification.
Windows SDK blog : Find tips and news related to app certification.
Windows Server forum : Visit the Certification forum to get answers.
Compatibility cookbook: Get info about what's new or changed in the latest version of
Windows.
Feedback
Was this page helpful? ツ Yes ト No
Clone any of the repos listed in the sections below (or download the ZIP) to your
local file system.
Then Find in Files in Visual Studio. Set Look in to the folder you cloned or
downloaded into, and search for the name of the API you're interested in.
Checking Match case gives best results.
Be careful of checking Match whole word if the API can be called in various forms
—for example, CreateMutex, CreateMutexA, and CreateMutexW. In that case,
search for CreateMutex with Match whole word unchecked.
7 Note
You can install Visual Studio without expense. A Community edition is available
—it's free for students, open-source contributors, and individuals. Of course you
can do the same thing with any samples repo.
DirectX samples
See the DirectX-Graphics-Samples repo for DirectX 12 Graphics samples that
demonstrate how to build graphics-intensive applications for Windows 10.
Older samples
You can find some older Win32 sample apps in the MSDN Code Gallery Microsoft
samples repo.
See also
Code samples
Visual Studio
Windows classic samples
DirectX-Graphics-Samples
DirectX samples
MSDN Code Gallery Microsoft samples
Feedback
Was this page helpful? ツ Yes ト No