Legal Information
April 1998 Draft - What's New
Introduction
Welcome
What Getting the Logo Means
What the Logo Does NOT Mean
The Right Microsoft Logo Program For You
Other Resources
Getting the Logo for Your Application
Meeting the Requirements
Roadmap to Logo Requirements
New Areas of Focus of the Logo Program
Supporting Networked and Managed Environments
Managed Software Installation
Avoiding DLL Version Conflicts
Upcoming COM+ Technology
Upcoming Directory Services Technology
Pretesting
Pretest the Install Process (Required)
Pretesting for Stability on Windows 98
Pretesting for Stability on Windows NT
Pretesting High-Contrast Support
Pretesting Exposure of Keyboard Focus
Pretesting UNC and LFN Support
Pretesting ACPI/OnNow Support
Paperwork
Testing
Notification
Using the Logo
Important Restrictions on International and Localized Versions
Logo Requirements, Recommendations, and Best Practices
Provide Consistent, Up-To-Date Windows Support
General
Meet All Requirements on the Latest Releases of Windows NT and Windows 98
Support Multiple Platforms
Make Your Application Stable and Fully Functional
Make Your Application 32-bit
Identify 16-Bit Legacy Versions Clearly
Support MultiTasking
Support Standard System Settings
Support Additional Standard System Settings
Use Standard System Settings for Multi-Monitor Support
Support Windows Sockets 2.0
Detect and Handle Slow or Dead Network Links
File System
Do Not Assume a Hard-Disk Size Limit of 2 GB
Support the Universal Naming Convention (UNC)
Support Long File Names for Files Exposed to Users
Support Long File Names for Files Exposed in Windows Explorer
Use Long File Names in User-Interface Elements
Test LFN Functionality on Windows NT FAT, NTFS, and Compressed NTFS Partitions
Make Your Application File-System Independent
Hide Program Files and Folders That Users Do Not Need To See
Operating-System Migration
Provide a Migration DLL Where Necessary
Migration DLLs Work Silently
Avoid Operating System Differences
Accessibility and User Interface
Be Compatible With the High Contrast Option
Provide Keyboard Access to All Features
Document the Keyboard User Interface
Provide Notifications of the Keyboard Focus Location
Do Not Rely on Sound Alone
Do Not Rely on Color Alone
Let Other Software Identify and Manipulate Screen Elements
Support Active Accessibility
Do Not Hard-Code Font Sizes Smaller Than 10 Points
Allow Users to Customize UI Timings
Support System Font and Resolution Changes
Allow Users to Set Font Names and Sizes
Handle Changes in Pointer or Keyboard Focus
Multi-Monitor Support
Test Using Multiple Displays
Internet
Digitally Sign ActiveX Controls
Support Authenticode Signing of Downloadable Code
Support Automatic Download of ActiveX Controls
Register an Internet Update Site When Installing
Register a Product Information Site When Installing
Support ModuleUsage Registration of DLLs
Expose Help Documentation as HTML
Support Saving to an FTP Site
Generate Browsable Output
OLE / COM and COM+
Provide an OLE Container or Object Server
Allow Users to Drag Objects to Any Container
Implement IDropTarget and/or IDropSource Interfaces in Containers
Test Object Servers for Basic OLE Functionality
Test Containers for Basic OLE Container Functionality
Place an Object Command on a Container's Insert Menu
Make Object Servers ActiveX Document Servers
Make Containers ActiveX Document Containers
Close Object Servers Automatically After Object Delivery
Support Active Accessibility in Containers
Support Modifier Keys in Containers
Provide Linking and In-place Activation in Containers
Support the Structured Storage Compound File Format in Containers
Use Component Categories
Use the System Property Set Implementation
Provide a Type Library for Public Automation Interfaces
Support Microsoft Transaction Server
Expose All New Object Servers as COM+ Objects
Support the COM+ Versioning and Configuration Model
Use COM+ Calling Conventions
Support COM+ Events Rather Than Custom Event Programming
Expose Standard COM+ Interfaces
Take Advantage of COM+ Run-Time Interfaces
Take Advantage of COM+ Run-Time DLL Functions
Do Not Write InprocServer32 Entries for Components Directly to HKCR
Support COM+ Declarative Attributes
Use COM+ Automatic Transaction Support, Persistence, and Data Binding as Necessary
Implement System Monitoring Or Call Monitoring And Management Using Interception
Use the COM+ Persistent Event Binding System
Use the COM+ Importer, Emitter, Portable Executable Format, and Run-Time System
Telephony
Use TAPI for Telephony
Use the Assisted Telephony Interface in Telephony-Enabled Applications
Implement the Full TAPI Interface in Telephony-centric Applications
Apply Dialing Properties to Numbers in Telephony-centric Applications
Allow a User to Select the Calling Device in Telephony-centric Applications
Share Serial Devices Properly in Telephony-centric Applications
Explicitly Link to a TAPI32 Library If Using TAPI 2.x
Gracefully Degrade to Work With TAPI 1.4 from TAPI 2.x
Use TAPI 2.1 Remote Service Provider for Client-Server Telephony
Use TAPI 2.1 Client Management Functions for Client-Server Telephony
Use TAPI 2.1 for Telephony As Soon As It Becomes Available
Use the Dialing Properties Current Location Settings in Telephony-Enabled Applications
Use the Canonical/International Form for the Number Dialed in Telephony-Enabled Applications
Provide Separate Fields with Defaults for Phone Number Entry
Handle the LINE_CREATE Message Properly in Telephony-centric Applications
Handle _REINIT Messages Properly in Telephony-centric Applications
OnNow / ACPI
Handle System Sleep-Wake Transitions Properly
Eliminate Even Minor Memory Leaks
Process Sleep or Query Messages Silently
Pause Play and Sound on Receiving a Sleep Message in a Game
Call SetThreadExecutionState in Event-Handling Applications
Call SetThreadExecutionState in Presentation Applications
Curtail Background Activities When Running On Batteries
Take No Action on Receiving a …RESUMEAUTOMATIC Message
Directory Services
Use a Product-Specific DS Object in the Configuration/Services Container
Use RpcNsBindingLookupBegin in RPC Clients to Find RPC Server Objects
Use WSALookupServiceBegin in Clients to Find Windows Sockets Server Objects
Locate COM Objects in the Class Store Transparently in COM and DCOM Clients
Publish Only Machine-Specific Parameters in the Registry
Install and Uninstall Easily
Installing and Removing Applications
Use Windows Installer
Provide Graphical 32-bit Setup
Provide a Fully Automated Uninstaller
Provide Attended and/or Silent Installation
Detect Versions When Installing
Maintain User Settings Across Version Changes
Create Working Shortcuts During Installation
Support AutoPlay of CD-ROMs
Support Add/Remove Programs If Not on CD-ROM
Check Operations in Advance When Installing
Avoid Rebooting the System
Register Uninstaller and Make It Appear in Add/Remove Programs
Uninstall from Add/Remove Programs
Remove All Application Files During Uninstall
Remove All References from the Start Menu During Uninstall
Remove Registry Entries During Uninstall
Remove Uninstaller During Uninstall
Installing and Removing Components
Do Not Write to Windows System Directories
Use Microsoft Update Packs to Upgrade System Components
Do Not Install Globally Shared DLLs
Do Not Overwrite Core Components
Do Not Decrement or Remove Core Components During Uninstall
Register All Shared Components During Installation
Do Not Register Self-Registering Components During Installation
Do Not Ref-Count Core Components During Installation
Decrement the Count on Shared Components While Uninstalling
Leave a Zero Count If Not Removing a Component During Uninstall
Set Count Correctly for Pre-existing Unregistered Shared Components During Installation
Use the Registry Correctly
Register Native Data File Types
Ask Before Reassigning File-Extension Associations
Do Not Add to Win.ini or System.ini
Support Informational Keys in the Registry
Use the Correct Access Mask When Opening a Registry Key
Register Classes on a Per-User Basis in HKCU
Do Not Write Default Profile Settings to the Registry
Do Not Register Hard-Coded Paths
Use REG_EXPAND_SZ Strings on WindowsNT 5.0
Do Not Register Strings As REG_BINARY
Register Policy Keys in a Standard Location
Store Hardware-Independent Machine Settings in HKEY_LOCAL_MACHINE
Store Hardware-Dependent Settings in HKEY_CURRENT_CONFIG
Save Data to the Best Locations
Install Applications to the \Program Files Directory
Do Not Install Executables or DLLs in the Root Directory
Separate User Data from Application Bits
Query the Registry for Directory Names
Store User Data Under the User's Profile Folder
Do Not Assume That Profile Settings Have Been Initialized
Cooperate with Administrators
Enable Policy Settings to Uninstall and Unadvertise Your Application
Provide an .ADM System Policy File for Your Application
Provide for Disabling Run and Find Dialogs
Support NoViewContextMenu in Shell Extensions
Call ShellExecute Instead of CreateProcess
Support Roaming Users
Do Not Collect Single-User Data During Installation
Support Administrative Additions During Network Install
Generate a Disk Image for Multiple Installs During Network Installation
Install Shared Files in Shared Locations During Network Installation
Support Silent Installs and Push Strategies During Network Installation
Do Not Require a Local Footprint During Network Install
Provide a Diagnostic Logging Option
Do Not Assume Write Access to a User's Machine
Support Dynamic Policy Changes by Handling WM_SETTINGCHANGE Messages
Expose Private Policy Keys Where Appropriate
Special Requirements
Development Tools
Make a Development Tool Capable of Generating Logo-Compliant Applications
Submit a Sample Application for Testing of Your Development Tool
Make It Easy to Create OLE Containers and/or Object Servers with Your Development Tool
Advise Customers of Potential Logo-Requirement Problems in Your Development Tool
Non-File-Based Applications
Utilities
Provide Meaningful Functionality on Both Windows 98 and Windows NT
Extensively Test Any Utility That Uses the Exclusive Volume Locking Function
Games and Multimedia Applications
Use Direct3D and DirectSound Compatibly with Windows NT 5.0 and Windows 98
Java Applications
Use and Redistribute the 32-bit Virtual Machine for Java Applications
Separate Add-On Products
Host an Add-On Product on 32-Bit Products That Are Logo-Compliant
Testing Rules
Bundled Applications Are Tested Individually
Add-On Products Included in a Suite Are Tested Both Individually and With the Suite
Pretest Application Installation
Quick-Reference Lists of Programming Guidelines
New Requirements
All Requirements
Provide Consistent, Up-To-Date Windows Support
Install and Uninstall Easily
Use the Registry Correctly
Save Data to the Best Locations
Cooperate with Administrators
Special Requirements
Testing Rules
Recommendations and Best Practices
Provide Consistent, Up-to-date Windows Support
Install and Uninstall Easily
Use the Registry Correctly
Save Data to the Best Locations
Cooperate with Administrators
Old Guidelines That Have Been Removed