Platform Software Development Kit

Start Page

February 2001 Edition

Welcome to the February 2001 Edition of the Microsoft® Platform Software Development Kit (SDK) documentation. This documentation provides information about the new technologies supported by Whistler, as well as technologies supported by previously released platforms.

The Platform SDK includes corresponding header files, import libraries, and code samples. For more information, see Obtaining the Complete SDK.

Run-time Requirements

This edition of the Platform SDK documentation provides the information you need to develop code for the following target platforms:

Whistler Beta 2
Microsoft Windows Millennium Edition
Microsoft Windows 2000
Microsoft Windows NT® versions 3.51 and 4.0
Microsoft Windows 95 and Windows 98
Microsoft BackOffice® Server products
Microsoft Internet Explorer version 3.x, 4.x, 5, and 5.5

What's New

Release notes describing features introduced in this release.

Contents of the Platform SDK

Alphabetical listing of the technologies covered in this documentation.

Technical Support

Describes the technical support options available from Microsoft.

Feedback

Make error reports and feature requests directly to the Platform SDK team.

Microsoft Platform SDK, February 2001 Edition.
This content last built on Thursday, February 08, 2001.


Legal Information

Microsoft Platform
Software Development Kit

This is a preliminary document and may be changed substantially prior to final commercial release. This document is provided for informational purposes only and Microsoft makes no warranties, either express or implied, in this document. Information in this document, including URL and other Internet Web site references, is subject to change without notice. The entire risk of the use or the results of the use of this document remains with the user. Unless otherwise noted, the example companies, organizations, products, people and events depicted herein are fictitious and no association with any real company, organization, product, person or event is intended or should be inferred. Complying with all applicable copyright laws is the responsibility of the user. Without limiting the rights under copyright, no part of this document may be reproduced, stored in or introduced into a retrieval system, or transmitted in any form or by any means (electronic, mechanical, photocopying, recording, or otherwise), or for any purpose, without the express written permission of Microsoft Corporation.

Microsoft may have patents, patent applications, trademarks, copyrights, or other intellectual property rights covering subject matter in this document. Except as expressly provided in any written license agreement from Microsoft, the furnishing of this document does not give you any license to these patents, trademarks, copyrights, or other intellectual property.

Unpublished work. © 1985-2001 Microsoft Corporation. All rights reserved.

Active Directory, ActiveMovie, ActiveX, BackOffice, Developer Studio, Direct3D, Direct Animation, DirectDraw, DirectInput, DirectMusic, DirectPlay, DirectShow, DirectSound, DirectX, JScript, Microsoft, Microsoft Press, MSDN, MS-DOS, Natural, NetMeeting, NetShow, Sidewalk, Visual Basic, Visual C++, Visual J++, WebTV, Win32, Win32s, Win64, Windows, and Windows NT are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries.

International CorrectSpell™ spelling correction system © 1993 Lernout & Hauspie Speech Products N.V. All rights reserved.

Kodak is a registered trademark of Eastman Kodak Company. All rights reserved.

Macintosh is a trademark of Apple Computer, Inc. used under license.

© 1990 Massachusetts Institute of Technology. All rights reserved.

© 1996 Massachusetts Institute of Technology. All rights reserved.

For terms of use of materials contributed by the Massachusetts Institute of Technology, see license terms accompanying such materials.

© 1994 OpenVision Technologies, Inc. All rights reserved.

© 1996 OpenVision Technologies, Inc. All rights reserved.

For terms of use of materials contributed by OpenVision Technologies, Inc., see license terms accompanying such materials.

The names of actual companies and products mentioned herein may be the trademarks of their respective owners.


What's New for Whistler Beta 2

The Microsoft® Platform SDK February 2001 Edition introduces new features in Whistler Beta 2 and provides corrections for problems reported with Windows® 2000. The following table describes some of the documentation changes for Whistler. For a complete list of new functions and interfaces, see Win32API.csv, which is available on the Platform SDK CD-ROM. For a list of what's new in other releases, see What's New for Whistler Beta 1 and Using Released Content.

Technology | Description
Active Accessibility | Microsoft Active Accessibility (MSAA) 2.0 provides Dynamic Annotation and Text Services features. Dynamic Annotation allows developers to overwrite one property in an IAccessible interface pointer without having to provide new values for the remaining properties. The IAccessible interface pointer retains the values for the remaining properties so developers do not have to provide new ones. MSAA Text Services provides a way to navigate large bodies of text programmatically using a COM interface, ITextStore. ITextStore communicates text style information, such as whether the text is bold or italic, or whether an item in a bulleted list. MSAA Text Services provides these features in applications such as Microsoft Word.
Active Directory, ADSI, and LDAP Active Directory provides a new security utility for the latest Whistler beta. This new utility allows ADSI users to programmatically retrieve, add, or change security descriptors on files, file shares, and registry keys. This is useful if you need to create a file system for an enterprise. You can use this utility to set access-control lists (ACLs) on the file share and all the files within the system. As users add new files, you can modify ACLs on individual files, as needed. For more information, see Retrieving, Setting, or Modifying Security Descriptors on File Systems, File Shares, and Registry Keys.

Active Directory also provides object change notification. If the IDsAdminNotifyHandler interface is implemented, then whenever an object in Active Directory is created, deleted, moved, or modified, the new object information is sent to the Active Directory Users and Computers snap-in.
Application Compatibility | The Application Compatibility Guide provides information to developers writing new applications for the Windows 2000 and Whistler operating systems as well as to application developers who want to ensure that existing applications run well on these operating systems.
Background Intelligent Transfer Service | Microsoft Background Intelligent Transfer Service (BITS), a new Whistler feature, provides the documentation to write client applications that transfer files asynchronously between a client and server. Use BITS to transfer files in the foreground or background; BITS automatically resumes file transfers after network disconnects and machine reboots.
BizTalk Server 2000 | The latest release in the .NET Enterprise Server family, BizTalk Server 2000 is Microsoft's XML-based business process orchestration server. Designed to make it fundamentally easier to build the next-generation of Internet-based solutions, BizTalk unites in a single product Enterprise Application Integration (EAI), Business to Business Integration and the much anticipated BizTalk Orchestration technology to allow companies to easily build dynamic business processes that span applications, platforms, and businesses over the Internet.
Commerce Server 2000 | Microsoft Commerce Server 2000 is about effective online business. To be effective, your solution needs to empower business owners with both sophisticated decision support and the ability to take action in real-time to provide customers and partners with the best Web experience. With Commerce Server 2000, every element of each interaction between your site and customers feeds into your business analysis system, providing insight to business managers and enabling them to be drive optimal change on the Web site, a process called closing the loop.
COM+ (Component Services) | COM+ provides many new services, such as application partitions, process recycling, public/private components, configurable isolation levels, applications as NT services, memory gates, component aliasing, and pausing/disabling applications. For details on these and other new features, see What's New In COM+.
CryptoAPI | CAPICOM, a new COM client, provides Microsoft ActiveX® and COM objects that use CryptoAPI and public key infrastructure (PKI) to perform fundamental cryptographic operations. These include signing data digitally, verifying digital signatures, encrypting data for one or more specific receivers, encrypting data using a key based upon a secret password, and managing digital certificates.
DirectX 8.0 Some of the new features supported by Microsoft DirectX® 8.0 include:

Complete integration of Microsoft DirectDraw® and Microsoft Direct3D®. DirectDraw and Direct3D are merged into a single DirectX Graphics component. The API has been updated to make it easier to use and to support the latest graphics hardware.

Microsoft DirectMusic® and Microsoft DirectSound® more integrated. DirectMusic and DirectSound are more tightly integrated than with DirectX 7.0. Wave files or resources can be loaded by the DirectMusic loader and played through the DirectMusic performance, synchronized with MIDI notes.

Microsoft DirectPlay® updated. The DirectPlay component has been updated to increase its capabilities and improve its ease-of-use. DirectPlay now supports voice communication between players.

Microsoft DirectInput® updated. DirectInput introduces a major new feature–action mapping. Action mapping enables you to establish a connection between input actions and input devices that does not depend on the existence of particular device objects. It simplifies the input loop and reduces the need for custom game drivers, custom device profilers, and custom configuration user interfaces in games.

DirectShow included in DirectX

Microsoft DirectShow® is now part of DirectX and has been updated for this release.

DirectShow DirectShow offers new and improved features such as Video Mixing Renderer, Microsoft TV Technologies, Video Control, and Guide Store.

The new Video Mixing Renderer improves video playback performance and provides enhanced video features to application developers of television and DVD applications. It also enables video applications to utilize the 3D capabilities in graphics hardware.

Microsoft TV Technologies includes support for the new Broadcast Driver Architecture (BDA) and the Microsoft Tuning Model. The Broadcast Driver Architecture defines a framework that supports various component topologies for receiving digital and analog television. It includes software components for network configuration and control, demultiplexing, table parsing and IP Data delivery for the main digital TV standards including DVB and ATSC. The Tuning Model is a set of objects that enables applications to easily tune across various network types in a simple and uniform manner.

The Video Control is an ActiveX® control that provides a scripting API for digital and analog TV applications. It greatly simplifies the integration of TV features into applications including Enhanced TV and Conditional Access.

The Guide Store enables the storage and retrieval of information about programs, schedules and tuning. It supports multiple guide data providers, and is flexible and extensible.

Fast user switching | In Window NT/2000, each user of a computer has a separate user account. Whistler allows users to switch quickly between accounts, without requiring them to log off. All personal data and network connections are preserved, providing simultaneous use of the computer by multiple users.
Fax Service Now Fax Service is a shared service, which allows you to run the fax server and fax clients on separate computers supporting a variety of operating systems. The Fax Service for Whistler includes an extended COM API that gives full access to old and new fax features through standard COM interfaces. The security model for the fax service includes more specific access rights, and features easier administration. Fax Service also provides an extensible MMC Administration console for UI customization.

Other features include archives, activity logging, inbound and outbound routing, outgoing fax priority settings, and support for new types of receipts (delivery notifications), including message boxes and SMTP-based email receipts.
GDI+ | GDI+ is a class-based application programming interface (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 the 64-bit Windows operating system.
Group Policy | To facilitate diagnosis and planning of group policy, Whistler supports an enhanced group policy infrastructure using Windows Management Instrumentation (WMI). This structure provides public methods of exposing what each extension to group policy would do or has done, allowing someone to easily determine the Resultant Set of Policy (RSoP) for a given combination of policy settings.
Internet Connection Sharing | Internet Connection Sharing (ICS) makes it possible for home and small office users to create and manage private networks in which multiple computers share a single connection to the Internet. The ICS API features shared connections, Internet connection protection (personal firewall), and network address translation (NAT) application definitions.
Internet Explorer 6 | For details about what's new in Internet Explorer 6, see http://msdn.microsoft.com/workshop/essentials/whatsnew/whatsnew.asp.
IPv6 | Whistler provides an installable IPv6 TCP/IP stack that works side-by-side with the IPv4 TCP/IP stack. The Platform SDK includes a porting guide that describes how to enable applications to simultaneously handle IPv4 and IPv6 addresses. The porting guide makes extensive use of the new Windows Sockets 2 APIs available with Whistler.
Microsoft Data Access Components | All three Microsoft Data Access Components (MDAC) technologies, ActiveX Data Objects (ADO), OLE DB, and Open Database Connectivity (ODBC), now include support for 64-bit processors. For more information, see What's New in the MDAC SDK.
Shell and Common Controls The new interface in Whistler demonstrates the Microsoft commitment to visual quality and design aesthetics. To support the user interface, we have created the following Shell technologies:
  • A new common control set with a fresh look for all core controls as well as windows, and tool palettes.
  • Support for 32-bit color icons with an 8-bit alpha channel.
  • Common controls support for 32-bit color (toolbars and list views).
  • A new theme API, to help independent software vendors (ISV) adopt the new Whistler visuals.
  • New support to make it easier for ISVs to get the new visuals when using common controls.

In addition, the Whistler Shell introduces several other features, such as fast user switching, that allow multiple users to use one computer without closing applications. It also offers new control panels with categories to help users browse for tasks, and new hardware-based Autoplay, that allows you to register tasks when your hardware is inserted.
Speech Recognition | Speech Recognition is the collective term for a computer's ability to exchange spoken language and text interchangeably. The two components are speech recognition (SR), translating voice to text; and text-to-speech (TTS), reversing the process using text and creating a spoken voice. Whistler features built-in TTS support and may be used by any speech-enabled application without further software or hardware installation. Speech recognition must be installed by at least one application that requires it. In addition to speakers, a good-quality microphone is encouraged for optimal results.
System Restore | The System Restore feature in Whistler automatically monitors and records key system changes on users' computers. System Restore is designed to reduce support costs and increase customer satisfaction by enabling end users to undo a change that may have caused a problem with their system, or revert to a day when the system was performing optimally.
Terminal Services The Terminal Services Advanced Client (TSAC) extends current Terminal Services functionality to Web pages. With TSAC, all client-side virtual channel operations can be initiated by a Microsoft Visual Basic® script, considerably reducing the time necessary for deployment of Terminal Services clients.

The Terminal Services Windows Management Instrumentation (WMI) provider allows the user to administer one or more Terminal Services servers using standard WMI interfaces. This technology makes server administration uniform in Whistler by standardizing it under WMI.
Text Services Framework | Text Services Framework (TSF) is a simple and scaleable framework that enables advanced text input and natural language technologies for applications. TSF provides a device-neutral API that offers application access for text services including speech, handwriting, and Unicode character support. For more information, see Using Text Services Framework.
Win32 API | For a listing of the functions introduced in Whistler, see Whistler.
Windows Management Instrumentation With the Whistler release, several new features and improvements have been added to Windows Management Instrumentation (WMI). The following areas of functionality have been addressed:
  • Running providers out-of-process using the NetworkService security account eliminates the risk of a corrupted or compromised provider taking out the entire computer (or domain, in the case of a domain server). It also eliminates the risk of exposing privileged information to an unqualified user.
  • The XML encoder component provides the ability to generate XML representations of objects and classes.
  • The decoupled provider subsystem enables embedding a provider in a new application, controlling the lifespan of the embedded provider, and allowing it to coexist with other providers.

For a complete listing of the new WMI features in Whistler, see What's New in WMI.

Windows Messenger | Windows Messenger allows users to create voice and video, computer to computer, or computer-phone connections over an IP-based network. This service can be used on an e-commerce Internet Web page with a click-to-talk button that allows clients to speak directly to customer service agents. Business and residential users can make provisions with an Internet Telephony Service Provider (ITSP) to furnish the network transport for the call. The SDK includes the XML profile to provision a client for a single call along with the HTML parameters that are passed to the Windows Messenger ActiveX control on a Web page.
Windows Sockets 2 APIs | Whistler includes new Windows Sockets 2 APIs that make creating Windows Sockets applications easier and more efficient. These new Windows Sockets 2 functions and structures also enable transparent support for IP version 6 (IPv6), the next generation Internet Protocol. The Platform SDK includes a porting guide that facilitates porting Windows Sockets 2 applications from IPv4 to IPv6, enabling applications to transparently handle either IPv4 or IPv6 addresses. The porting guide makes extensive use of the new Windows Sockets 2 APIs available with Whistler.
XML | The XML 3.0 SDK now includes documentation for server-safe HTTP access, Extensible Stylesheet Language Transformations (XSLT)/XML Path Language (XPath), and Simple API for XML (SAX2). This SDK also provides several improvements over the XML 2.5 SDK, including improved code samples in Microsoft JScript®, Microsoft Visual Basic®, and C++; and links to utilities you can use for creating XML applications.


What's New for Whistler Beta 1

The Microsoft® Platform SDK for Whistler Beta 1 introduced new features and provided corrections for problems reported with Windows® 2000. The following table describes some of the documentation changes for Whistler Beta 1. For a complete list of new functions and interfaces, see Win32API.csv, which is available on the Platform SDK CD-ROM. For a list of what's new in other releases, see What's New for Whistler Beta 2 and Using Released Content.

Technology | Description
Access Control | The new Authz API provides a faster, more flexible set of functions for resource manager applications. These functions allow greater flexibility in deciding who has access to the resources, such as data and other objects, that a resource manager owns and maintains. The Authz functions and their related structures permit a resource manager to implement business-rule style access policy and dynamic group and role membership evaluation. Representing a caller's authorization attributes with user-mode security contexts, rather than kernel-level NT access tokens, improves the performance of access checking by avoiding kernel transitions.
Active Directory, ADSI, and LDAP Active Directory provides several new features for the Whistler release:
  • Dynamic objects, which are objects that have a specified lifetime, after which they are automatically deleted by Active Directory.
  • Dynamic auxiliary classes. Active Directory provides support for dynamically including auxiliary classes in individual objects, not just in entire classes of objects.
  • Application directory partitions, which are Active Directory partitions that can be configured to replicate to any set of DCs in the forest. By controlling the scope of replication, you can store dynamic data in Active Directory to get the benefit of Active Directory replication without significantly impacting network performance.
  • Virtual list view (VLV). Active Directory supports VLV searches in which you can retrieve a specified range of a sorted search result, rather than the entire result. You can use ADSI or LDAP APIs to perform VLV searches programmatically.
  • Attribute Scoped Query. Active Directory supports ASQ searches in which you specify the search base by specifying a directory object and an attribute of that object. The attribute must be a multi-value attribute that contains DNs. The search returns the objects listed in the multi-value attribute that match the specified search filter. For example, you could specify a group object and its member attribute to retrieve properties of all group members that match a specified filter. You can use ADSI or LDAP APIs to perform ASQ searches programmatically.
CryptoAPI | CryptoAPI version 2.0 provides two new functions, CryptBinaryToString and CryptStringToBinary. These functions convert to and from strings formatted for Base64, Base64Header, hexadecimal, or HexASCII.
Dynamic Host Configuration Protocol Whistler provides new access to developers during critical phases of DHCP protocol processing in DHCP Server. This access allows developers to register for notification of critical DHCP protocol processing, enabling developers to:
  • Create customized extensions to Microsoft DHCP Server.
  • Monitor statistics.
  • Create parallel lease databases.
  • Provide other customized solutions.

The new DHCP Server API includes an overview that explains how to access critical DHCP protocol processing, then provides detailed definitions for programmatic elements in the DHCP Server API.
Host Integration Server | COM Transaction Integrator for CICS and IMS (COMTI) is the new synchronous COM application integration solution in Microsoft Host Integration Server 2000. COMTI enables you to integrate mainframe-based transaction programs (TPs) with component-based Windows DNA 2000 applications when a synchronous or transactional solution is needed where both systems being integrated are up and running at all times. With COMTI, you can integrate existing mainframe-based transaction programs (TPs) with Windows-based COM or distributed COM (DCOM) applications.
Internet Explorer 5.5 | Internet Explorer 5.5 offers many enhancements, including improved printing and support for print preview functionality, enhancements to DHTML behaviors, improved editing, colored scroll-bars, transparent Iframes and support for vertical text layout. For details about new DHTML features in Internet Explorer, see http://www.msdn.microsoft.com/voices/ie55.asp.
Logon Authentication | Logon Authentication now includes Microsoft Digest, a new security support provider that supplies a light-weight authentication protocol for parties involved in Hypertext Transfer Protocol (HTTP) or Simple Authentication Security Layer (SASL) based communications. For more information, see Microsoft Digest.
Network Load Balancing | Network Load Balancing now supports multiple cluster adapters per node and provides configurable multicasting protocols to improve the performance of multihomed and multicast clusters. For information on programming interfaces for these new features, see Network Load Balancing Provider.
Network Protocol Support in Windows | With the release of Whistler, certain legacy networking protocols will no longer be supported. For more information, see Network Protocol Support in Windows.
Isolated Applications and Side-by-side Assembly Sharing | Isolated Applications and Side-by-side Assembly Sharing provides a solution to the problems inherent in code and resource sharing between applications. It does this by allowing application developers to determine the versions of the components used in the application.
Universal Plug and Play Universal Plug and Play (UPnP) enables dynamic networking of intelligent appliances, wireless devices, and PCs. The dynamic networking is available over a variety of physical media.

There are two Microsoft API implementations for UPnP. The UPnP Control Point API consists of a set of COM interfaces used to find and control UPnP devices. For example, a UPnP-capable VCR can be controlled from a Web page specifically designed for that purpose. To extend this concept, developers can control many appliances from a central, remote, or peer location.

The UPnP Device Host API consists of a set of COM interfaces used to implement UPnP devices that are hosted by a computer. Developers need only implement the functionality of UPnP devices and use the Device Host to manage the discovery, description, control, and eventing functions of a UPnP device.
Win32 API | For a listing of the functions introduced in Whistler, see Whistler.
Windows Installer | Windows Installer version 1.5 enables the installation of 64-bit Windows Installer Packages on Windows 2000 64-bit Edition operating systems. This latest version of the installer enables the installation and management of COM+ assemblies by the Windows Installer and provides better isolation of existing Windows applications using assemblies. It also enables the use of optional file hashing and supports configurable merge modules.
Windows Media Player 7 SDK | In addition to enhancing the Microsoft Windows Media™ Player ActiveX® control for embedding multimedia playback into Web pages, the Windows Media Player 7 SDK exposes two new technologies for creating exciting player applications, skins and visualizations. Based on a simple, yet powerful, XML schema, skin technology enables developers to easily customize the look and functionality of Windows Media Player 7. This SDK also enables the creation of custom visualizations, splashes of colors and geometric shapes that dance to the beat of the music.
Windows Media Format 7 SDK The Windows Media™ Format 7 SDK builds on the methods exposed by the Windows Media Audio SDK for writing Windows Media Format streams and files. This SDK focuses on adding enhanced Windows Media Format playback features. However, in addition to reading, writing, and rendering Windows Media Format content, the Windows Media Format 7 SDK adds support for a variety of new features including:
  • Integrated content packaging support for digital rights management.
  • Methods for collecting and logging client information.
  • Enhanced codec support.
  • The ability to stream static images, such as JPEG files.
  • Support for seeking and striding through Windows Media Format files.
Windows Media Rights Manager | The Microsoft Windows Media Rights Manager component of the Microsoft Windows Media 7 SDK is designed for anyone who wants to deliver digital media, such as music and videos, through the Internet in a protected and secure manner. This component provides tools that developers can use to protect digital files and issue licenses so those files can be distributed while maintaining copyright protection.
Windows Sockets 2 APIs | Whistler includes new Windows Sockets 2 APIs that make creating Windows Sockets applications easier and more efficient. These new Windows Sockets 2 functions and structures also enable transparent support for IP version 6 (IPv6), the next generation Internet Protocol. The Platform SDK includes a porting guide that facilitates porting Windows Sockets 2 applications from IPv4 to IPv6, enabling applications to transparently handle either IPv4 or IPv6 addresses. The porting guide makes extensive use of the new Windows Sockets 2 APIs available with Whistler.
Windows Script Host | Windows Script Host 5.6 includes improvements to the Windows Script Host object model, command line enhancements, extended support for spawned processes, and improved argument handling.


Contents of the Platform SDK

The following is an alphabetical listing of the technologies that are covered in the Platform SDK documentation. It is provided to help you quickly locate the information you need in the Platform SDK documentation.

Active Accessibility

Active Directory

Active Directory Services Interface (ADSI)

ADSI Exchange Programmer's Guide

Active Server Pages (ASP)

ActiveX Controls

ActiveX Data Objects (ADO)

ADO

ADSI

ASP

Authenticode

Automation

Background Intelligent Transfer Service

CAPICOM

CDO

Certificate Enrollment Control

Certificate Services

Chat

Collaboration Data Objects

COM

COM+

Commerce Server

Common Controls

CryptoAPI

CryptoAPI Tools

Cryptographic Service Providers

Data Access

Dfs

DHCP

DirectX 8.0

Distributed File System (Dfs)

DNS

Domain Name System (DNS)

Dynamic Host Configuration Protocol (DHCP)

EAP

Fax Service

Event Tracing

Exchange Client

Exchange Server

Extensible Authentication Protocol (EAP)

Extensible Markup Language (XML)

GDI+

Group Policy

Host Integration Server

IAS

ICM

Image Color Management (ICM)

Indexing Service

Internet Authentication Service

Internet Connection Sharing

Internet Information Services

Internet Protocol Helper

IP Helper Functions

Jet and Replication Objects (JRO)

LDAP

Lightweight Directory Access Protocol (LDAP)

LSA Authentication

LSA Policy

MADCAP

MAPI

MDAC

Message Queuing Services (MSMQ)

Messaging Application Programming Interface (MAPI)

Microsoft Agent

Microsoft BizTalk Server

Microsoft Data Access Components (MDAC)

Microsoft Interface Definition Language (MIDL)

Microsoft Management Console (MMC)

Microsoft Transaction Server (MTS)

MIDL

Migration-Extension Interface

MMC

MSMQ

MTS

Multicast Address Dynamic Client Allocation Protocol (MADCAP)

Multicast Group Manager

NetMeeting

Network Load Balancing Provider

Network Management

Network Monitor

Network Provider API

NTFS

ODBC

OLE Automation

OLE DB

OLE DB Provider for Internet Publishing

OnNow

Open Database Connectivity (ODBC)

OpenGL

Password Filters

Plug and Play

QOS

Quality of Service (QOS)

RAS

Remote Access Service (RAS)

Remote Procedure Call (RPC)

Removable Storage Manager (RSM)

Routing and Remote Access Service (RRAS)

Routing Table Manager Version 1 (RTMV1)

Routing Table Manager Version 2_(RTMV2)

RPC

RRAS

RSM

Security

Security Support Provider Interface (SSPI)

SENS

Server Cluster API

Server Data Objects

Service Security Attachments

Setup API

Shell

Side-by-side Assembly Sharing

Simple Network Management Protocol (SNMP)

Site Server

Smart Card

Smart Card Enrollment Control

SMS

SNMP

Speech API

SQL Server

SSPI

Still Image

Structured Storage

Synchronization Manager

System Event Notification Service (SENS)

System Restore

Systems Management Server (SMS)

TAPI version 2.2

TAPI version 3.0

Task Scheduler

Team Productivity Update (TPU)

Telephony Application Programming Interface (TAPI) version 2.2

Telephony Application Programming Interface (TAPI) version 3.0

Telephony Service Provider Interface (TSPI)

Terminal Services

Text Services Framework

TPU

TAPI Service Providers (TSPI and MSPI)

Unicode

Universal Plug and Play

Video for Windows

Web Telephony Engine

Win32 API

Windows Clustering

Windows File Protection

Windows Image Acquisition

Windows Installer

Windows Management Instrumentation (WMI)

Windows Media Services

Windows Media Encoder

Windows Media Player

Windows Media Format

Windows Media Rights Manager

Windows Messenger

Windows Multimedia

Windows Sockets

Winlogon (and Gina)

WinSNMP

WinTrust

WMI

XML


Document Conventions

The following topics explain various conventions used throughout the Platform SDK documentation.

  • Preliminary Information
  • Requirements
  • Implementation Differences
  • Topic Header
  • Syntax Block Popups
  • Typographic Conventions


Preliminary Information

Some topics in the Platform SDK documentation begin with the following text:

[This is preliminary documentation and subject to change.]

This text is used in the documentation for components that have been released as beta versions. This text is also used to indicate new features in existing components.


Requirements

Many topics that introduce the syntax of an API element contain information about the build and run-time requirements for using the element. The format is as follows:

Requirements

Windows NT/2000 or later: Requires Windows NT 3.1 or later.
Windows 95/98/Me: Requires Windows 95 or later.
Header: Declared in Winuser.h; include Windows.h.
Library: Use User32.lib.
Unicode: Implemented as Unicode and ANSI versions on Windows NT/2000.

The first line indicates the versions of Windows NT on which an element is supported. This information may include required service packs, option packs, or components such as Internet Explorer. If an element is not supported, the line reads "Windows NT/2000 or later: Unsupported."

The second line indicates whether an element is supported on Windows 95, Windows 98, or Windows Me. This information may include required OEM service releases, redistributables, or components such as Internet Explorer. If an element is not supported, the line reads "Windows 95/98/Me: Unsupported."

The third line indicates the file that defines an element. This value can be an .h file, .idl file, or .odl file. This line can indicate that your code should include a different header file (one that includes the header file in which the element is defined, plus other required headers or definitions). If the header file is supplied by the user, the line does not appear. For more information, see Using the SDK Headers.

The fourth line indicates the file used to resolve calls to a function or member. This value can be a .lib file, .dll file, or .tlb file. If the library is supplied by the user, the line does not appear. For element types that do not require a library, this line is omitted.

The fifth line indicates whether an element exists as both a Unicode (W) version and an ANSI (A) version. Otherwise, this line is omitted. For more information, see Win32 Function Prototypes.


Implementation Differences

Because there are architectural differences between Windows 95, Windows 98, Windows Millennium Edition (Windows Me) Windows NT, and Windows 2000, each system implements some elements differently. These differences are relatively few, and are noted in the Platform SDK. Each paragraph that notes a platform difference is preceded by one of the following tags:

Tag | Description
Windows NT/2000 or later: | The paragraph applies to Windows NT, Windows 2000, and Whistler, but not Windows 95, Windows 98, or Windows Me.
Windows 2000 or later: | The paragraph applies to Windows 2000 and Whistler, but not Windows NT, Windows 95, Windows 98, or Windows Me.
Windows 95: | The paragraph applies to Windows 95, but not Windows 98, Windows Me, Windows NT, Windows 2000, or Whistler.
Windows 98/Me: | The paragraph applies to Windows 98 and Windows Me, but not Windows 95, Windows NT, Windows 2000, or Whistler.
Windows 95/98/Me: | The paragraph applies to Windows 95, Windows 98, and Windows Me, but not Windows NT, Windows 2000, or Whistler.
Terminal Services: | The paragraph applies only to Terminal Services.
64-bit Windows: | The paragraph applies only to 64-bit Windows.

There are also differences between different versions of the same operating system. Most of these are due to the introduction of new constants. The following examples illustrate a function return value that varies by operating system version.

Windows 98/Me, Windows NT 4.0 and later: The return value is the resulting incremented value.

Windows 95, Windows NT 3.51 and earlier: If the result of the operation is zero, the return value is zero. If the result of the operation is less than zero, the return value is negative, but it is not necessarily equal to the result. If the result of the operation is greater than zero, the return value is positive, but it is not necessarily equal to the result.

There are also differences between localized versions of the operating system. The following example illustrates this type of tag.

Middle East language edition of Windows: The text is laid out in right to left reading order, as opposed to the default left to right order. This only applies when the font selected into the device context is either Hebrew or Arabic.

For information on platform detection, see Getting the System Version.


Topic Header

This version of the Platform SDK includes the following new header and button bar at the top of many of the topics.

The buttons appear only if the related feature is provided in the topic. The buttons indicate the following features.

The topic contains a See Also section.

To view the See Also links without scrolling to that section, click the button.

The topic contains a Requirements section.

To view the Requirements section without scrolling to that section, click the button.

The topic contains paragraphs that are specific to the programming language.

To view all language-specific paragraphs, click the button, then click Show All. To view the paragraphs for one language only, click the button, then click the preferred language (such as C/C++ or Visual Basic).


Syntax Block Popups

The Platform SDK documentation provides a new feature in the syntax block of selected reference topics. The return type and parameters are links to their descriptions later in the topic. These links are provided by a DHTML script that reads the information from the topic, so the pop-up windows contain text that is identical to that in the topic body. This feature provides one-click access to information to which you might otherwise have to scroll. The information is retained in the body of the topic for ease in printing.


Typographic Conventions

The Platform SDK documentation uses the following typographic conventions.

Convention | Description
monospace
 Indicates source code, structure syntax, examples, user input, and program output.
Bold | Indicates a function, structure, macro, interface, method, data type, or other keyword in the programming interface or programming language.
Italic | Indicates placeholders, most often function or method parameters; these placeholders represent the information that must be supplied by the implementation or the user. In addition, italics are used to highlight the first use of terms and to emphasize meaning.
UPPERCASE | Indicates a flag, return value, or property. In addition, uppercase letters may indicate file names, registers, and terms used at the operating-system command level.
[ ] Indicates optional syntax items. Type only the syntax within the brackets, not the brackets themselves.


Advanced Full-Text Search

Advanced full-text search in HTML Help allows you to search using Boolean, wildcard, and nested expressions. You can also limit the search to previous results, match similar words, or search topic titles only.

For more details about full-text search, see the following:

  • Focusing Your Search
  • Searching for Topics, Words or Phrases
  • Using Nested Expressions When Searching


Focusing Your Search

When the entire Platform SDK is accessible through HTML Help, searching can produce too many results. To narrow the index and search results, define a subset to your current collection.

To define a subset:

  1. On the View menu, choose Define Subset. The Define Subset dialog box is displayed.
  2. From the list of available items presented in the left pane, select those that you want to be included in the new subset. Use the Add and Remove buttons to build the subset.
  3. When your subset of help topics is complete, type in a name in the Save new subset as field and click Save.
  4. Return to HTML Help and select the subset in Active Subset.

You can modify a subset at any time by using Define Subset.


Searching for Topics, Words, or Phrases

To find a word or phrase, you can use wildcard expressions, nested expressions, Boolean operators, similar word matches, previous search results, or topic titles to further define your search.

The basic rules for formulating queries are as follows:

  • Searches are not case-sensitive.
  • You can search for any combination of letters (A-Z) and numbers (0-9).
  • Punctuation marks such as the period (except in numerical strings), colon, semicolon, and comma are ignored during a search.
  • Hyphens used in the search string are treated as a word break and return results differently than other punctuation remarks. For example, the search phrase "forward-only" returns results matching "forward-only" and "only" but not "forward". The phrase "-only" returns "-only" and "only".
  • The period, when used in a numeric string, is treated as a decimal and the number is returned. For example "2.6.2345.2", returns the instances of the number, and "version 2.6" returns only the quoted string. When mixing characters and numbers without quotation marks, all combinations are returned.
  • Group the elements of your search using double quotation marks or parentheses to set apart each element. You cannot search for quotation marks.

Note If you are searching for a file name with an extension, you should group the entire string in double quotes, for example, "file.ext". If you do not enclose the string in double quotes, the period breaks the file name into two separate terms.

To find information using advanced full-text search

  1. Click the Search tab, and then type the word or phrase you want to find. To return minor grammatical variations of a phrase, select Match similar words.
  2. Click the arrow button to the right of the combo box to add a Boolean operator (AND, OR, NEAR, NOT) to your search. Note that the |, &, and ! characters do not work as Boolean operators. You must use OR, AND, and NOT.
  3. Click List Topics and then double-click the topic you want to view, or select the desired topic and click Display.
  4. To sort the topic list, click the Title, Location, or Rank column heading.


Using Nested Expressions When Searching

Nested expressions allow you to create complex searches for information. For example, "control AND ((active OR visible) NEAR window)" finds topics containing the word "control" along with the words "active" and "window" close together, or containing "control" along with the terms "visible" and "window" close together.

The basic rules for searching help topics using nested expressions are as follows:

  • You can use parentheses to nest expressions within a query. The expressions in parentheses are evaluated before the rest of the query.
  • If a query does not contain a nested expression, it is evaluated from left to right. For example, "control NOT active OR visible" finds topics containing the word "control" without the word "active," or finds topics containing the term "visible." On the other hand, "control NOT (active OR visible)" finds topics containing the word "control" without either of the terms "active" or "visible."

You cannot nest expressions more than five levels deep.


Using the Platform SDK

The Microsoft® Platform Software Development Kit (SDK) includes both released content and beta content. For more information, see the following topics:

  • Using Released Content
  • Using Beta Content

The Platform SDK is released through MSDN®, Visual Studio®, and the Internet. The documentation is also available separately from the rest of the SDK. For more information, see the following:

  • Obtaining the Complete SDK
  • Installing the Platform SDK with Visual Studio 6

The Platform SDK contains header files, libraries, sample code, and tools. For more information, see the following:

  • Using the SDK Headers
  • Building the SDK Samples
  • Platform SDK Tools


Using Released Content

The Platform SDK is your source for the complete reference material for the application programming interfaces (API) supported by releases of Windows and Internet Explorer. You can use the Platform SDK headers and libraries to build applications that use any released function. Note that you must require your users to run the minimum required software that supports the function. The reference topic for each function indicates the minimum required software for the function.

The following are the released versions of Windows and Internet Explorer.

Windows NT

  • Windows 2000 SP1
  • Windows 2000
  • Windows NT 4.0 SP6
  • Windows NT 4.0 SP5
  • Windows NT 4.0 SP4
  • Windows NT 4.0 SP3
  • Windows NT 4.0 SP2
  • Windows NT 4.0 SP1
  • Windows NT 4.0
  • Windows NT 3.51
  • Windows NT 3.5
  • Windows NT 3.1

Windows

  • Windows Millennium Edition
  • Windows 98 SE
  • Windows 98
  • Windows 95 OSR2
  • Windows 95

Internet Explorer

  • Internet Explorer 5.5
  • Internet Explorer 5
  • Internet Explorer 4.x
  • Internet Explorer 3.x


Windows 2000 SP1

Microsoft® Windows® 2000 SP1 provides corrections for problems reported with Windows 2000 and introduces new features. The following table describes the new technologies documented for Windows 2000 SP1.

Technology | Description
Pluggable Terminals | The Windows 2000 SP1 release adds an initial version of pluggable terminals to the capabilities of the Telephony Application Programming Interface. The H323 to SDP bridge terminals give a conferencing server the ability to add non-Windows 2000 SP1 or non-multicast clients to TAPI 3.0 multiparty SDP/IP multicast conferences.


Windows 2000

Microsoft® Windows® 2000 provides corrections for problems reported with Windows NT® 4.0 and introduces new features. The following table describes the new technologies documented for Windows 2000. For a complete list of new functions and interfaces, see Win32API.csv, which is available on the Platform SDK CD-ROM.

Technology | Description
Asynchronous Remote Procedure Calls (RPC) | Asynchronous RPC allows your programs to handle multiple outstanding calls from a single-threaded client and prevent data transmission bottlenecks that can arise from slow or delayed clients or servers. With asynchronous pipe parameters, client/server applications can transfer large amounts of data incrementally, without blocking the client or server threads from performing other tasks.
Base Services The following topics have been added under the Base Services node:
battery information
disk quotas
dynamic-link library redirection
job objects
opportunistic locks
reparse points
sparse files
thread pooling
timer queues
CDO CDO for Windows 2000 is an OLE Automation-compatible COM component that you can use to add Internet-standard messaging functionality in your Windows 2000 applications. CDO supports construction and manipulation of messages formatted according to Internet standard formats such as those defined by the RFC 822 and Multipurpose Internet Mail Extensions (MIME) specifications. You can transmit messages using both the Simple Mail Transfer (SMTP) and Network News Transfer (NNTP) protocols, or local SMTP/NNTP service pickup directories.

CDO for Windows 2000 can also be used to implement SMTP/NNTP transport event sinks on Windows 2000. Such sinks can intercept messages as they arrive to the particular service, and the sink can possibly examine or modify the message, or block its further transmission altogether. CDO for Windows 2000 is not based in any way upon the Messaging API (MAPI).

Certificate Services | Certificate Services provides customizable services for issuing and managing certificates used in software security systems employing public-key cryptography. Certificate Services performs a central role in the management of software security systems to enable secure communications across the Internet, corporate Intranets, and other networks that are not secured.
Common Controls The following topics have been added under Windows Common Controls:

ComboBoxEx controls are an extension of the combo box control that provides native support for item images.

Custom draw is a service provided by many common controls to allow an application greater flexibility in customizing a control's appearance.

Date and time picker controls exchange date and time information with a user.

Flat scroll bars behave like normal scroll bars, but are not displayed three-dimensionally.

IP address controls allow the user to provide an IP address in an easily understood format.

Month calendar controls provide a calendar-like user interface.

Pager controls allow the user to scroll to the area of a window that is not currently in view.

Rebar controls act as containers for child windows.

Custom Scripting for Remote Access Connections | Remote Access Service (RAS) now supports custom-scripting DLLs. Custom-scripting DLLs run on the RAS client. A custom-scripting DLL can send and receive data over the port for the RAS connection. RAS provides the DLL with the phone-book entry that RAS dialed for the connection. As a result, the DLL can take "special-case" actions for particular phone-book entries. For more information, see RasCustomScriptExecute.
Device Management (Plug and Play) Applications and services can register to receive selected device change events.

For more information, see RegisterDeviceNotification
UnregisterDeviceNotification

Distributed link tracking | Distributed link tracking enables client applications to track link sources that have been moved. As a result, clients that subscribe to the link-tracking service can maintain the integrity of their references, and the objects referenced can be moved transparently. The link-tracking service in Windows 2000 tracks link sources for shell shortcuts and OLE links within NTFS version 5.0 volumes.
Domain Name System (DNS) | DNS is an industry-standard protocol used to locate computers on an IP-based network. It is the locator service of choice in Windows 2000.
Dynamic Host Configuration Protocol (DHCP) | The DHCP Application Programming Interface, also referred to as DHCP Client Options, enables Windows 2000 and Windows 98 clients to query specific options from DHCP Servers. Such capability enables vendor-specific options exposed through DHCP servers to be queried by Windows 2000 or Windows 98 DHCP clients.
Encrypted File System (EFS) | The encrypted file system supports encrypting and decrypting files or directories on NTFS volumes.
Event Tracing | The Event Tracing API is designed for tracing and logging very high-frequency events with minimal impact on system resources. This is useful for measuring demands on system resources.
Extensible Authentication Protocol (EAP) | You can now use Extensible Authentication Protocols (EAPs) to authenticate multilink and callback connections. The PPP_EAP_INPUT structure and the RasEapGetIdentity functions have been modified to support the new functionality. For more information, see Multilink and Callback Connections.
Group Policy | Group Policy uses the file system, directory services, and security group membership to support per-user and per-computer configuration settings.
Indexing Service 3.0 | Indexing Service 3.0 indexes the contents of all drives on the computer where it is installed, allowing the user to search for any word or phrase on those drives.
Internet Authentication Service (IAS) | This documentation enables software developers to write their own extensions to Windows Internet Authentication Service (IAS). IAS allows developers to implement session control and accounting plug-ins, add authorizations, or use network authentication methods for remote access. IAS supports, as a client and server, the Remote Authentication Dial-In User Service (RADIUS) protocol.
Internet Information Services | The documentation for Internet Information Services (IIS) 5.0 provides detailed information about creating interactive Web pages and developing powerful Web applications. IIS interfaces and methods enable you to create components for access by ISAPI, ASP components, and advanced ASP scripting techniques. The documentation also contains information on the metabase; a fast-access, memory-resident data store used by IIS.
Jet and Replication Objects (JRO) | JRO allows you to add features to your application that are specific to the Microsoft Jet Database Engine.
LSA Authentication | LSA Authentication describes those parts of the Local Security Authority (LSA) that applications can use to authenticate and log users on to the local system.
Microsoft Agent | Microsoft Agent is a set of programmable software services that supports interactive animated characters within the Microsoft Windows interface. You can use characters as interactive assistants to introduce, guide, entertain, or otherwise enhance Web pages or applications. Microsoft Agent enables you to add conversational interfaces, which leverage natural aspects of human social communication. Microsoft Agent also includes optional support for speech recognition so applications can respond to voice commands. Characters can respond using synthesized speech, recorded audio, or text in a cartoon word balloon.
Microsoft DirectX | Microsoft DirectX® 7.0 provides ease-of-use enhancements, expanded capabilities, and improved performance to Microsoft DirectDraw® and Microsoft Direct3D® Immediate Mode components of DirectX. The documentation throughout DirectX has been expanded to include new overviews and tutorials.
Microsoft Management Console (MMC) | The Microsoft Management Console is an extensible user interface that provides an environment for running systems management applications, which are structured as components called snap-ins.
Multicast Address Dynamic Client Allocation Protocol (MADCAP) | Multicast Address Dynamic Client Allocation Protocol (MADCAP) enables clients to query and request multicast addresses from multicast (MADCAP) servers. By using this set of client APIs, MADCAP clients can lease, renew, and release multicast addresses from qualifying MADCAP servers across the network.
Multicast Group Manager | The Multicast Group Manager (MGM) API makes it possible to access the multicast routing capabilities of Microsoft Windows 2000 Server. Using MGM, you can write routing protocols that interact with MGM to receive and forward multicast data using both calls to MGM and callbacks from MGM. You can also write administrative applications that track group membership.
Multiple display monitors | A single interactive window station can support multiple display monitors.
Network Load Balancing Provider | Network Load Balancing clusters balance TCP/IP connection loads across multiple ports and servers according to a configurable set of rules. The Network Load Balancing Provider allows developers to create customized, remote, scriptable administration tools for Network Load Balancing clusters.
Network Monitor | All new information on programming for Network Monitor 2.0. Information ranges from analyzing previously captured data in user-defined methods, to extracting data from defined protocol parsers, to real-time analysis of traffic on your network.
Network Provider API | The Network Provider API provides an interface between the Multiple Provider Router and network providers, including credential manager providers.
Password Filters | Password filters provide a way for you to implement password policy and change notification for passwords.
Power management | To save power and ensure that no data is lost when a computer or device is turned off or placed in a low power state, Windows provides power management support. Windows 2000 supports OnNow Power Management.
QOS | Quality of Service is fully functional in its implementation within Windows 2000. QOS also is available in Windows 98. However, Windows 98 does not implement all of the features found in Windows 2000. For information on functionality differences, see Windows 98/Me QOS Notes.
Removable Storage Manager | Removable Storage Manager facilitates communication among applications, robotic changers, and media libraries. It enables multiple applications to share local robotic media libraries and tape or disk drives, and manage removable media within a single-server system.
Routing Table Manager Version 2 | Routing Table Manager Version 2 (RTMv2) is a new version of the Routing Table Manager Version 1 (RTMv1) API. RTMv2 makes it possible to use the routing table manager for Microsoft Windows 2000 Server, and to develop routing protocols for the Internet Protocol (IP) transport. Routing protocols can modify and query the routing table, and they can use protocol-specific information to determine interoperability actions. RTMv2 can also be used to develop methods that are exported for other routing protocols to invoke.
RPC name service The RPC Name Service (Locator) uses the Active Directory as its database. This means that exported entries can be made persistent even when a server is rebooted.

For more information, see: RpcNsBindingExport
RpcNsBindingImportNext
RpcNsBindingLookupBegin
RpcNsBindingUnexport.

Smart Card Enrollment Control | Smart Card Enrollment Control enables Windows 2000 administrators to obtain certificates for smart card users.
TAPI 3.0 | Telephony Application Programming Interface (TAPI) 3.0 is based on the Component Object Model (COM) and uses Microsoft DirectShow® filters to provide access to the media.
Task Scheduler | The Task Scheduler lets you perform automated tasks on a chosen computer. The Task Scheduler monitors whatever criteria you set and executes the task when the criteria for executing the task have been met.
Team Productivity Update | The Team Productivity Update (TPU) for Microsoft BackOffice® Server 4.5 software development kit (SDK) contains conceptual information, method syntax, and parameter descriptions for the TPU programming model. It also describes how to write or modify applications so they can register with the Team Productivity Update and be deployed in a Team Workspace.
Web Telephony Engine | The Microsoft Web telephony engine is a Windows 2000 run-time service that renders web-based interactive voice response (IVR) applications. This service lets you use familiar web development tools such as HTML, Microsoft ActiveX® controls, scripting, and Active Server Pages (ASP) to create dual-access telephony applications — accessible by both telephone and Internet browser.
Windows File Protection | Windows File Protection (WFP) prevents the replacement of essential system files installed as part of Windows 2000. Protecting these files prevents application and operating system failures.
Windows GDI The following topics have been added under Windows GDI:

Alpha blending to display bitmaps that have transparent or semitransparent pixels.

Smooth shading to shade a region with a color gradient.

Setting and retrieving the color of the pen or brush selected into a device context.

Window layouts define how text and GDI objects are laid out in a window.
Windows Installer | Windows Installer supports installation-on-demand. As the user works, the required features and components are installed on the local hard drive only when needed.
Windows NetMeeting 3 | Windows NetMeeting 3 provides a software application programming interface (API) that lets programmers and Web-page designers include collaboration and conferencing for applications that are NetMeeting clients. Data conferencing includes application-sharing, chat, whiteboard, and file transfer features. Other features include remote-desktop sharing and gatekeeper support.
Windows User Interface The following have been added under Windows User Interface:
Special effects when showing or hiding windows.

The new Print Property Sheet common dialog box interface displays the Print property sheet available in Windows 2000.

Windows 2000 and Windows 98 have new restrictions on which applications can set the foreground window. For more information, see Foreground and Background Windows.

Layered windows enable you to create improved visual effects.

Improvements to support for flashing windows (see FlashWindowEx).

Retrieving the history of mouse and pen coordinates (see GetMouseMovePointsEx).
Winlogon and GINA | Winlogon provides interactive logon support. It is designed around an interactive logon model that consists of three components: the Winlogon executable, a Graphical Identification and Authentication dynamic-link library (referred to as the GINA ), and any number of network providers.
WMI | Windows Management Instrumentation (WMI) is the Microsoft implementation of Web-Based Enterprise Management (WBEM), which is an industry initiative to develop a standard technology for accessing management information in an enterprise environment. This release of WMI includes many optimizations and improvements.

The following table describes new features in existing technologies.

Technology | New feature
Common Controls | For information about updated common controls, see the following topics: Header Control Updates in Internet Explorer Image List Updates in Internet Explorer List View Updates in Internet Explorer Progress Bar Control Updates in Internet Explorer Status Bar Updates in Internet Explorer Tab Control Updates in Internet Explorer Toolbar Control Updates in Internet Explorer Tooltip Control Update in Internet Explorer Trackbar Control Updates in Internet Explorer Tree View Control Updates in Internet Explorer Up-Down Control Updates in Internet Explorer
Data Access Components SDK | The Data Access Components SDK has new content, new features, and other enhancements.
LSA Policy | The LSA Policy documentation, which was previously included with the Lsasamp sample as Lsaapi.hlp, has been updated and moved to the Platform SDK documentation.
MIDL | MIDL now supports DBCS, TLB file generation has been significantly improved, and all type library attributes are supported. For more information, see Type Library Attributes.
Printing and Print Spooler | Support for publishing printer configuration data in the directory service, and extended functions to provide greater flexibility in adding or upgrading printer drivers. For more information, see: AddPrinterDriverEx, DeletePrinterDataEx DeletePrinterDriverEx DeletePrinterKey EnumPrinterDataEx EnumPrinterKey GetPrinterDataEx SetPrinterDataEx
SNMP | The Microsoft SNMP service for Windows 2000 adds support for new SNMP extension agent and utility functions. For additional information, see SNMP Functions. The Microsoft implementation of the Windows SNMP Application Programming Interface (the WinSNMP API) adds support for the functionality documented in the WinSNMP version 2.0 Addendum. For more information, see About the WinSNMP 2.0 Addendum.
System Monitor automation interface | A Visual Basic API now allows you to change many aspects of the System Monitor's appearance, such as the color of the graph and the standard font, as well as automate many areas of System Monitor functionality, such as adding and removing counters for display.
Systems Management Server | All new information on programming for SMS 2.0. Programs can automate software distribution, extend the SMS user interface, and access or extend the hardware and software inventory of SMS.
Win32 API | The Win32 API has new functionality. For more information, see Windows 2000.


Windows NT 4.0 SP6

Microsoft® Windows NT® version 4.0 Service Pack 6 provides corrections for problems reported against earlier releases of Windows NT 4.0 and introduces new API elements. The following table describes the new elements documented for Windows NT 4.0 Service Pack 6.

Element | Description
Active Accessibility | Active Accessibility is now fully supported on Windows NT.
Win32 API | The Win32 API has new functionality. For more information, see Windows NT 4.0 SP6.


Windows NT 4.0 SP4

Microsoft® Windows NT® version 4.0 Service Pack 4 provides corrections for problems reported against earlier releases of Windows NT 4.0 and introduces new API elements. The following table describes the new elements documented for Windows NT 4.0 Service Pack 4.

Element | Description
CryptoAPI | CryptoAPI adds functionality and performance improvements to authentication, encoding, and encryption services. New features include support for additional cryptographic service providers, the addition of trust chain building functions and trust chain verification functions to improve and simplify certificate trust verification, and functions that use Key Identifiers to locate information from certificates. Certificate store capabilities now include collection and logical stores for improved digital certificate management. For more information, see Certificate Store Concepts.
IP Helper Functions | The IP helper functions programmatically retrieve and modify settings for the TCP/IP protocol suite running on the local computer. These functions allow you to accomplish tasks such as modifying the routing and ARP tables, retrieving protocol statistics, and releasing or renewing IP addresses obtained from DHCP.
Win32 API | The Win32 API has new functionality. For more information, see Windows NT 4.0 SP4.


Windows NT 4.0 SP3

Microsoft® Windows NT® version 4.0 Service Pack 3 provides corrections for problems reported against earlier releases of Windows NT 4.0 and introduces new API elements. The following table describes the new elements documented for Windows NT 4.0 Service Pack 3.

Element | Description
CryptoAPI | Contains the cryptographic functions of CryptoAPI 1.0, plus the functionality to manage and use certificates in secure communications, and to encode and decode PKCS#7 messages.
Disk-Space List (Setup API) | The disk-space list enables you to calculate the disk space required to complete the installation operations.
IGlobalInterfaceTable | A COM interface that allows one apartment to access an interface implemented on an object in any other apartment in the process.
Strings (Setup API) | The Strings section simplifies translation of strings for international markets by placing all strings that can be displayed at the user interface in a single section of the INF file.
Win32 API | The Win32 API has new functionality. For more information, see Windows NT 4.0 SP3.


Windows Millennium Edition

Microsoft® Windows® Millennium Edition provides corrections for problems reported with Windows 98 and introduces new features. The following table describes some of the changes documented for Windows Me. For a complete list of new functions and interfaces, see Win32API.csv, which is available on the Platform SDK CD-ROM.

Technology | Description
Internet Explorer 5.5 | Internet Explorer 5.5 offers many enhancements, including improved printing and support for print preview functionality, enhancements to DHTML behaviors, improved editing, colored scroll-bars, transparent Iframes and support for vertical text layout.
System Restore | System Restore automatically monitors and records key system changed on user's computers. System Restore is designed to reduce support costs and increase customer satisfaction by enabling end users to undo a change that may have causes a problem with their system, or revert to a day when the system was performing optimally.
Systems Management Server | The Systems Management Server (SMS) documentation for this release reflects changes in SMS Service Pack 2. It also documents the status MIF functions, including the new Visual Basic® control for creating a status MIF, and the new Visual Basic control for creating a discovery data record (DDR).
Universal Plug and Play | Universal Plug and Play (UPnP) enables dynamic networking of intelligent appliances, PCs, and other control points. The dynamic networking is available over a variety of physical media. The Microsoft implementation of the UPnP API consists of a set of COM objects used to write applications and Web pages to find and control UPnP devices. For example, a UPnP-capable VCR can be controlled from a Web page specifically designed to control it. To extend this concept, developers can control many appliances from a central, remote, or peer location. Applications created with the UPnP API range from scripts embedded in HTML pages to full-fledged C++ programs. UPnP supports Microsoft Visual Basic Scripting Edition (VBScript), Microsoft Visual Basic, and C++.
Win32 API | The Win32 API has new functionality. For more information, see Windows Millennium Edition.
Windows File Protection | Windows File Protection (WFP) prevents the replacement of essential system files installed as part of Windows Me. Protecting these files prevents application and operating system failures.
Windows Image Acquisition | The Windows Image Acquisition (WIA) application programming interface (API) is standardized for acquiring digital images from devices that are primarily used to capture still images, and for managing these devices. The WIA API is designed to allow robust and easy to use solutions for applications developers, and transparent interaction with imaging devices, such as digital cameras and scanners, for users.
Windows Installer 1.2 | Windows Millennium Edition implements its own version of system file protection using catalogs that describe protected files. Support for Windows File Protection on Windows Me is provided with Windows Installer version 1.2. Windows File Protection catalogs are provided to developers to enable their applications to update system components. Windows Installer version 1.2 installs and manages system file protection catalogs using a new InstallSFPCatalogFile action, FileSFPCatalog table, and SFPCatalog table.


Using Beta Content

The Platform SDK includes beta content so you can design your applications to take advantage of new features when they are released. The SDK documentation indicates beta content in two ways. Topics that consist entirely of beta material have the following text near the top of the page:

[This is preliminary documentation and subject to change.]

Topics that contain some beta content mark the beta content with a tag such as the following:

Whistler:

For example, in the following table, ICON_SMALL2 was added for Whistler.

Value | Meaning
ICON_BIG | Retrieve the large icon for the window.
ICON_SMALL | Retrieve the small icon for the window.
ICON_SMALL2 | Whistler: Retrieves the small icon provided by the application. If the application does not provide one, the system uses the system-generated icon for that window.

To build code that uses a beta feature, you must install the beta SDK for use with your development tools. For more information, see the following topics:

  • Obtaining the Complete SDK
  • Installing the Platform SDK with Visual Studio 6

For a list of Whistler beta content, see the following topics:

  • What's New for Whistler Beta 1
  • What's New for Whistler Beta 2


Obtaining the Complete SDK

The Platform SDK documentation you are currently reading is made available in several ways. The main distinction is whether the documentation is shipped as part of the entire SDK (headers, libraries, samples, and tools).

The Microsoft Developer Network (MSDN®) site and the MSDN Library subscription program include only the Platform SDK documentation. Therefore, it is possible to read about features you cannot use in your application without compiler errors because you lack the corresponding header files. In addition, you do not have the SDK sample code.

The complete Platform SDK is available as part of Visual C++®, an MSDN Professional subscription, an MSDN Universal subscription, or from the following download site, http://www.microsoft.com/msdownload/platformsdk/setuplauncher.htm. A low-cost SDK CD is available from the Developer Store at the following locations:

U.S.
International

For more information about Platform SDK content included with Visual C++ 6.0, see Installing the Platform SDK with Visual Studio 6. For more information about MSDN subscriptions, see http://msdn.microsoft.com/subscriptions.

Note To run applications that use a particular feature, you must be running an operating system that supports the feature.


Installing the Platform SDK with Visual Studio 6

Visual C++® 6.0 contains a snapshot of the Platform SDK at the time that the product was released. Therefore, the Platform SDK content included with Visual C++ 6.0 is not current. However, you can install the latest Platform SDK for use with Visual C++ 6.0.

To install the Platform SDK for use with Visual C++ 6.0

  1. Run the SDK setup program, installing the SDK into its own directory tree.
  2. Ensure that the SDK include directory is listed before the Visual C++ include directory. For command-line builds, check the INCLUDE environment variable using the set command. For builds within Visual Studio, go to the Tools menu, click Options, then Directories. Check the Include files list, and use the up and down arrows to change the order if necessary.
  3. Ensure that the SDK lib directory is listed before the Visual C++ lib directory. For command-line builds, check the LIB environment variable using the set command. For builds within Visual Studio, go to the Tools menu, click Options, then Directories. Check the Library files list, and use the up and down arrows to change the order if necessary.
  4. Define the proper macros when building your application. For more information, see Using the SDK Headers.


Using the SDK Headers

This version of the Platform SDK can be used to target applications for Microsoft® Windows® 95, Microsoft Windows NT® 4.0, Microsoft Windows® 98, and Microsoft Windows 2000 using the header file conventions below.

The makefiles generated by Microsoft Visual C++® 5.0 and 6.0 target Windows NT 3.51 by default. To use functions introduced in Windows NT 4.0 or later, which are protected by conditional code, you must define the appropriate macros. Otherwise, you will receive the following error message from the compiler: error C2065: undeclared identifier. You may also need to ensure that the INCLUDE environment variable has the path to the Platform SDK header files listed before the path to the Visual C++ header files. Otherwise, you will receive error C2065 for items that were introduced after Visual C++ was released.

The following table indicates the macros you must define to target each system using the SDK headers.

Minimum System Required | Macros to Define
Windows 95 and Windows NT 4.0 | WINVER=0x0400
Windows 98 and Windows NT 4.0 | _WIN32_WINDOWS=0x0410 and WINVER=0x0400
Windows NT 4.0 | _WIN32_WINNT=0x0400 and WINVER=0x0400
Windows 98 | _WIN32_WINDOWS=0x0410
Windows 2000 | _WIN32_WINNT=0x0500 and WINVER=0x0500
Windows Me | _WIN32_WINDOWS=0x0490
Whistler | _WIN32_WINNT=0x0501 and WINVER=0x0501
Internet Explorer 3.0, 3.01, 3.02 | _WIN32_IE=0x0300
Internet Explorer 4.0 | _WIN32_IE=0x0400
Internet Explorer 4.01 | _WIN32_IE=0x0401
Internet Explorer 5.0, 5.0a, 5.0b | _WIN32_IE=0x0500
Internet Explorer 5.01, 5.5 | _WIN32_IE=0x0501

If you are writing your own makefile, the macros in Win32.mak can help you use the correct conventions. The value of _WIN32_WINNT is set in Win32.mak, depending on the platform you choose to target. For more information, see Building Applications Using Win32.mak.

The Platform SDK headers use guard statements to determine the system on which each function is supported. The following table describes these statements.

Guard Statement | Meaning
#if _WIN32_WINNT >= 0x0400 | Windows NT 4.0 and later. It is not implemented in Windows 95.
#if _WIN32_WINDOWS >= 0x0410 | Windows 98. The image may not run on Windows 95.
#if _WIN32_WINDOWS >= 0x0490 | Windows Me. The image may not run on Windows 95/98, Windows NT, or Windows 2000.
#if _WIN32_WINNT >= 0x0500 | Windows 2000. The image may not run on Windows 95/98 or Windows NT.
#if _WIN32_WINNT >= 0x0501 | Whistler. The image may not run on Windows 95/98, Windows NT, Windows Me, or Windows 2000.
#if _WIN32_IE >= 0x0300 | Internet Explorer 3.0 and later.
#if _WIN32_IE >= 0x0400 | Internet Explorer 4.0 and later.
#if _WIN32_IE >= 0x0401 | Internet Explorer 4.01 and later.
#if _WIN32_IE >= 0x0500 | Internet Explorer 5.0 and later.
#if _WIN32_IE >= 0x0501 | Internet Explorer 5.01 and later.

For example, if you do not include Win32.mak in your makefile, you need to explicitly define _WIN32_WINNT as 0x0500 to use the Windows 2000-specific material in the header files.

There are functions in Windows 95 OEM Service Release 2 that are guarded by (_WIN32_WINNT >= 0x0400), such as the Cryptographic Application Programming Interface (CryptoAPI). If you are writing an application specifically for Windows 95 OEM Service Release 2, and you want the header files to provide compile time access to these functions, it is necessary to define _WIN32_WINNT as 0x0400. Note that an application using these functions does not run correctly on the retail release of Windows 95. In general, applications expected to run on Windows 95 should be built without defining _WIN32_WINNT.

This version of the Platform SDK can also be used to build applications for 64-bit Windows. The header files use new data types that allow 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.


Building the SDK Samples

The Platform SDK contains a rich set of sample code. These samples are designed to be built using Visual C++® 6.0 and the current Platform SDK headers and libraries. Before building the samples, make sure you follow the instructions for Installing the Platform SDK with Visual Studio 6.

Many samples contain Visual Studio® project files for use in building the sample. Other samples contain makefiles that can be used to build the sample.

To open a sample in the development environment using the .dsp file

  1. Select Open Workspace from the File menu.
  2. Make sure the Files of type list box is set to Projects (.dsp).
  3. Locate and open the .dsp for the sample.
  4. When you open a .dsp file for a sample that also has a .dsw file, Visual C++ attempts to open the .dsw file.

To open a sample in the development environment using a makefile

  1. From the File menu, click Open Workspace.
  2. Locate and open the makefile you want to build.
  3. Click Yes to the message that asks if you want to proceed.
  4. Select the platforms supported in the makefile.
  5. From the Project menu, click Settings.
  6. Type the name of the sample's executable name in the Output file name box of the General tab and, for debug builds, type the sample's executable name in the Executable for debug session box in the Debug tab. If you do not know the sample's executable name, you can either look in the makefile and search for the -out string or you can click Build Makefile.exe from the Build menu and then inspect the sample directory to see which executable has been created. Be aware that not all samples output a .exe file; for example, a sample might output a .dll file.
  7. From the Build menu, click Execute Makefile.exe.

To build a sample from a command line in a command prompt window

  1. Run the Vcvars32.bat file that Visual C++ installs in the Visual C++ bin directory. Run the Setenv.bat file that the SDK installs in the SDK root directory.
  2. Change to the subdirectory that contains the makefile.
  3. Issue the nmake command. NMake will look in the current directory and execute the file named makefile. If the makefile has a different name, use the following command: nmake /f filename.mak

For more information, see Building Applications Using Win32.mak.


Building Applications Using Win32.mak

The makefiles that accompany code samples in the Platform SDK give good examples of build processes that rely on NMake.exe. Each of them includes Win32.mak, which defines many common macros you can use to build 32-bit applications for Windows NT/Windows 2000 and Windows 95/98. You can learn a good deal by examining the contents of Win32.mak, which is located in the Platform SDK.

This section describes how 32-bit applications and dynamic-link libraries (DLLs) for Windows can be built using the Platform SDK and your development tools. It describes makefile components you may need and includes information on using the C run-time libraries.

Win32.mak

The Win32.mak file defines macros that can be used to simplify your own makefiles for use with Microsoft development tools. These macros help assure that you have chosen the correct options for the following tasks:

  • Setting Targets
  • Compiling Source Files
  • Linking
  • Building DLLs
  • Using the C Run-Time Library

Win32.mak should be included in your makefile as follows:

!include <win32.mak>

The following table summarizes the steps used to build a Win32-based application or DLL:

Step | Tool
Compile C and C++ source-language files into object files. | C/C++ compiler included with your development tools.
Create and edit resources. Doing so may also create include (.H) files which define useful constants. | Dialog Editor, Image Editor, and Font Editor included with the SDK or equivalent development tools.
Compile resource scripts into linkable resource files. | Resource Compiler included with the SDK or your development tools.
Create import libraries for each DLL. | Library manager included with your development tools.
Link the object modules, resources, standard libraries, and import libraries (for an executable using DLLs) to produce an executable module. | Linker included with your development tools.
Tune your application. | Performance tools and Working Set Tuner included with the SDK.


Setting Targets

Win32.mak includes the following macros that control the type of target that is built. Set these macros in your makefile prior to including Win32.mak or set them as environment variables.

  • APPVER

    Specifies the version of the application. The value includes major and minor versions, (i.e. 4.0, 5.0, or 5.1). It is used for checking version dependencies and for marking the executable with version information.

  • TARGETOS

    Specifies the operating system. The value can be WIN95, WINNT, or BOTH. It is used for checking platform dependencies.

  • TARGETLANG

    Specifies the language. The value can be LANG_JAPANESE, LANG_CHINESE, or LANG_KOREAN. The default value is the system locale.

In addition, you may set one of these values to 1 on the NMake command line or as an environment variable.

  • NODEBUG

    Specifies no debugging information should be included in the output files.

  • PROFILE

    Specifies that information for the profiler should be included in the output files.

  • TUNE

    Specifies that information for the working set tuner (WST) should be included in the output files.

For example, the following command line specifies that no debugging information should be included in the output files:

nmake NODEBUG=1


Compiling Source Files

Win32.mak includes the following macros to simplify compilation of C/C++ source files:

  • $(CC)

    Invokes the compiler. This macro expands to the following:

    cl
  • $(CFLAGS)

    Specifies common compiler options. It is platform dependent. On x86 computers, this macro specifies the following options:

    -c -W3 -D_X86=1 -DWIN32 -D_WIN32
  • $(CDEBUG)

    Specifies debugging, profiling, and tuning compiler options. When specifying debug, but no profiling or tuning, this macro expands to the following options:

    -Zi -Od

Use one of the following three macros if you are using the C run-time library (CRT):

  • $(CVARS)

    Specifies options for single-threaded applications. This macro expands to the following options:

    -DNULL=0 -ML
  • $(CVARSMT)

    Specifies options for multithreaded applications. This macro expands to the following options:

    -DNULL=0 -D_MT -MT
  • $(CVARSDLL)

    Specifies options for applications that use the CRT in a DLL. This macro expands to the following options:

    -DNULL=0 -D_MT -D_DLL -MDd

The following example shows how you can compile your source files using these macros:

generic.obj: generic.c
    $(cc) $(cdebug) $(cflags) $(cvarsdll) $*.c

Win32.mak includes the following macros to simplify compilation of resource-definition files:

  • $(RC)

    Invokes the resource compiler. This macro expands to the following:

    rc
  • $(RCFLAGS)

    Specifies common options. This macro expands to the following options:

    -r
  • $(RCVARS)

    Specifies additional options. This macro expands to the following options:

    -DWIN32 -D_WIN32 -DWINVER=0x0500

The following example shows how you can compile your resource-definition file using these macros:

generic.res: generic.rc generic.h generic.dlg
    $(rc) $(rcvars) $(rcflags) $*.rc


Linking

Win32.mak contains the following macros to simplify linking applications:

  • $(LINK)

    Invokes the linker. This macro expands to the following:

    link
  • $(LDEBUG)

    Specifies debugging, profiling, and tuning linker options. When specifying debug, but no profiling or tuning, it expands to the following options:

    -debug:full -debugtype:cv

Use one of the following options, depending on whether you are building a console application or a GUI application:

  • $(CONLFLAGS)

    Specifies options for console applications. This macro is platform dependent. On x86 computers, it expands to the following options:

    /INCREMENTAL:NO /NOLOGO -subsystem:console,5.0
  • $(GUIFLAGS)

    Specifies options for GUI applications. This macro is platform dependent. On x86 computers, it expands to the following options:

    /INCREMENTAL:NO /NOLOGO -subsystem:windows,5.0

Use one of the following options if you are using the single-threaded CRT:

  • $(CONLIBS)

    Specifies options for console applications that use Libc.lib. This macro expands to the following list of libraries:

    Kernel32.lib Advapi32.lib
  • $(GUILIBS)

    Specifies options for GUI applications that use Libc.lib. This macro expands to the following list of libraries:

    Kernel32.lib Advapi32.lib User32.lib GDI32.lib ComDlg32.lib WinSpool.lib

Use one of the following options if you are using the multithreaded CRT:

  • $(CONLIBSMT)

    Specifies options for console applications that use Libcmt.lib. This macro expands to the following list of libraries:

    Libcmt.lib OldNames.lib Kernel32.lib Advapi32.lib
  • $(GUILIBSMT)

    Specifies options for GUI applications that use Libcmt.lib. This macro expands to the following list of libraries:

    Libcmt.lib OldNames.lib Kernel32.lib Advapi32.lib User32.lib GDI32.lib ComDlg32.lib WinSpool.lib

The following example links the object files and libraries to produce the application executable file. Note that the resource file (Generic.res) is specified, as well as the object file (Generic.obj).

generic.exe : generic.obj generic.res
    $(link) $(ldebug) $(guilflags) generic.obj generic.res \
        $(guilibs) -out:generic.exe


Building DLLs

To build a DLL, use the macros defined for Linking. Win32.mak also includes the following macros to simplify linking DLLs:

  • $(IMPLIB)

    Invokes the library manager. This macro expands to the following:

    lib
  • $(DLLENTRY)

    Specifies a suffix for the entry-point function. This macro is platform dependent. On x86 computers, it expands to the following:

    @12
  • $(DLLLFLAGS)

    Specifies options for DLLs. This macro expands to the following options:

    /INCREMENTAL:NO /NOLOGO -entry:_DllMainCRTStartup$(DLLENTRY) -dll

The following example shows how to create the import library for a DLL. The import library is linked with the application that uses this DLL.

mydll.lib: mydll.def mydll.obj
    $(implib) -machine:$(CPU) -def:mydll.def mydll.obj -out:mydll.lib

The following example links the DLL:

mydll.dll : mydll.obj
    $(link) $(ldebug) $(dlllflags) -base:0x1C000000 mydll.obj \
        $(conlibs) -out:mydll.dll


Using the C Run-Time Library

C run-time (CRT) libraries are not distributed with the Platform SDK. Many vendors distribute forms of CRT libraries under different names. These name differences can be encapsulated in Win32.mak.

The following sections describe specifically how to use the different forms of Microsoft's C Run-time Library when building your application.

  • Calling the C Run-Time Library from a DLL
  • Mixing Library Types

Microsoft Visual C++ contains three forms of the CRT:

Libc.lib
Statically linked library for single-threaded applications.
Libcmt.lib
Statically linked library that supports multi-threaded applications.
Msvcrt.lib
Import library for the CRT in a DLL that also supports multi-threaded applications.

Note If you would like to avoid linking in the CRT, compile your source files with the -Qlfdiv- flag, do not call the CRT functions, do not call any math routines, and do not specify an entry point in the CRT with the -entry linker option.


Calling the C Run-Time Library from a DLL

When linking a DLL with any of the C run-time libraries, you must specify the following the entry point for the DLL.

-entry:_DllMainCRTStartup$(DLLENTRY)

This entry point is exported from the C run-time libraries and performs necessary initialization. The $(DLLFLAGS) macro in Win32.mak includes the -entry option shown above.

DllMainCRTStartup calls your entry point if you name it DllMain and export it from your DLL. Therefore, your DLL entry-point function will look something like the following:

BOOL WINAPI DllMain( HINSTANCE hinstDLL,
                     DWORD fdwReason,
                     LPVOID lpReserved )
{

   if( fdwReason==DLL_PROCESS_ATTACH || fdwReason==DLL_THREAD_ATTACH )
   ...
   if( fdwReason==DLL_PROCESS_DETACH || fdwReason==DLL_THREAD_DETACH )
   ...

   return( TRUE );

}

For more information, see DllMain.


Mixing Library Types

If your DLL is linked with Msvcrt.lib, any modules that call your DLL should also be linked with Msvcrt.lib. Otherwise, unpredictable results can occur, because the module and the DLL have separate copies of all CRT functions and global variables. To avoid problems, link both the executable and the DLL with Msvcrt.lib. This allows both the executable and the DLL to use the common set of functions and data contained in Msvcrt.dll. C run-time data such as stream handles can then be shared by both the executable and the DLL.

If you must mix library types, be sure to use the following guidelines:

  • CRT file handles may only be used by the module that created them.
  • File pointers may only be used by the module that created them.
  • Memory allocated with the CRT may only be freed or reallocated by the module that allocated.

If a DLL is linked with Libc.lib, and the DLL may be called by a multi-threaded application, multiple threads running in this DLL at the same time will not be supported. This may cause unpredictable results. Therefore, if there is a possibility that the DLL will be called by multi-threaded programs, be sure to link it with one of the libraries that support multi-threaded programs (Libcmt.lib or Msvcrt.lib).


Topic Not Found

No matching topic was found. Some possible reasons and remedies are as follows:

  • The file (.chm) that contains the destination topic is not in the expected location.

    Remedy: Rerun the MSDN Library Setup.

  • The file (.chm) that contains the current topic or destination topic is out-of-date and the link is no longer valid.

    Remedy: Install the latest version of the MSDN Library.

  • The MSDN Library CD is not in the CD-ROM drive.

    Remedy: Insert the MSDN Library CD into the CD-ROM drive.