• 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