/*
 *  cfgmgr32.h  Configuration manager functions
 *
 * =========================================================================
 *
 *                          Open Watcom Project
 *
 * Copyright (c) 2004-2026 The Open Watcom Contributors. All Rights Reserved.
 *
 *    This file is automatically generated. Do not edit directly.
 *
 * =========================================================================
 */

#ifndef _CFGMGR32_H_
#define _CFGMGR32_H_

#ifndef _ENABLE_AUTODEPEND
 #pragma read_only_file
#endif

#include <cfg.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Macro to specify configuration manager functions */
#define CMAPI   DECLSPEC_IMPORT

/* Primitive data types */
typedef CONST VOID      *PCVOID;
typedef DWORD           RETURN_TYPE;
typedef RETURN_TYPE     CONFIGRET;
typedef DWORD           DEVNODE;
typedef DWORD           DEVINST;
typedef DEVNODE         *PDEVNODE;
typedef DEVNODE         *PDEVINST;
typedef DWORD_PTR       LOG_CONF;
typedef LOG_CONF        *PLOG_CONF;
typedef DWORD_PTR       RES_DES;
typedef RES_DES         *PRES_DES;
typedef ULONG           RESOURCEID;
typedef RESOURCEID      *PRESOURCEID;
typedef ULONG           PRIORITY;
typedef PRIORITY        *PPRIORITY;
typedef DWORD_PTR       RANGE_LIST;
typedef RANGE_LIST      *PRANGE_LIST;
typedef DWORD_PTR       RANGE_ELEMENT;
typedef RANGE_ELEMENT   *PRANGE_ELEMENT;
typedef HANDLE          HMACHINE;
typedef HMACHINE        *PHMACHINE;
typedef ULONG_PTR       CONFLICT_LIST;
typedef CONFLICT_LIST   *PCONFLICT_LIST;
typedef ULONG           REGDISPOSITION;

/* String data types */
typedef CHAR        *DEVNODEID_A;
typedef CHAR        *DEVINSTID_A;
typedef WCHAR       *DEVNODEID_W;
typedef WCHAR       *DEVINSTID_W;
#ifdef UNICODE
typedef DEVNODEID_W DEVNODEID;
typedef DEVINSTID_W DEVINSTID;
#else
typedef DEVNODEID_A DEVNODEID;
typedef DEVINSTID_A DEVINSTID;
#endif

/* Maximum values */
#define MAX_DEVICE_ID_LEN   200
#define MAX_DEVNODE_ID_LEN  MAX_DEVICE_ID_LEN
#define MAX_GUID_STRING_LEN 39
#define MAX_CLASS_NAME_LEN  32
#define MAX_PROFILE_LEN     80
#define MAX_CONFIG_VALUE    9999
#define MAX_INSTANCE_VALUE  9999
#define MAX_MEM_REGISTERS   9
#define MAX_IO_PORTS        20
#define MAX_IRQS            7
#define MAX_DMA_CHANNELS    7
#define DWORD_MAX           0xFFFFFFFFL
#define DWORDLONG_MAX       0xFFFFFFFFFFFFFFFFLL

/* Configuration manager version */
#define CONFIGMG_VERSION    0x0400

/* Conflict details masks */
#define CM_CDMASK_DEVINST       0x00000001L
#define CM_CDMASK_RESDES        0x00000002L
#define CM_CDMASK_FLAGS         0x00000004L
#define CM_CDMASK_DESCRIPTION   0x00000008L
#define CM_CDMASK_VALID         0x0000000FL

/* Conflict details flags */
#define CM_CDFLAGS_DRIVER       0x00000001L
#define CM_CDFLAGS_ROOT_OWNED   0x00000002L

/* Memory range attribute flags */
#define mMD_MemoryType              0x00000001L
#define fMD_MemoryType              mMD_MemoryType
#define fMD_ROM                     0x00000000L
#define fMD_RAM                     0x00000001L
#define mMD_32_24                   0x00000002L
#define fMD_32_24                   mMD_32_24
#define fMD_24                      0x00000000L
#define fMD_32                      0x00000002L
#define mMD_Prefetchable            0x00000004L
#define fMD_Prefetchable            mMD_Prefetchable
#define fMD_Pref                    mMD_Prefetchable
#define fMD_PrefetchDisallowed      0x00000000L
#define fMD_PrefetchAllowed         0x00000004L
#define mMD_Readable                0x00000008L
#define fMD_Readable                mMD_Readable
#define fMD_ReadAllowed             0x00000000L
#define fMD_ReadDisallowed          0x00000008L
#define mMD_CombinedWrite           0x00000010L
#define fMD_CombinedWrite           mMD_CombinedWrite
#define fMD_CombinedWriteDisallowed 0x00000000L
#define fMD_CombinedWriteAllowed    0x00000010L
#define mMD_Cacheable               0x00000020L
#define fMD_NonCacheable            0x00000000L
#define fMD_Cacheable               0x00000020L
#define fMD_WINDOW_DECODE           0x00000040L
#define fMD_MEMORY_BAR              0x00000080L

/* I/O descriptor flags */
#define fIOD_PortType           0x00000001L
#define fIOD_Memory             0x00000000L
#define fIOD_IO                 0x00000001L
#define fIOD_DECODE             0x000000FCL
#define fIOD_10_BIT_DECODE      0x00000004L
#define fIOD_12_BIT_DECODE      0x00000008L
#define fIOD_16_BIT_DECODE      0x00000010L
#define fIOD_POSITIVE_DECODE    0x00000020L
#define fIOD_PASSIVE_DECODE     0x00000040L
#define fIOD_WINDOW_DECODE      0x00000080L
#define fIOD_PORT_BAR           0x00000100L

/* I/O alias flags */
#define IO_ALIAS_10_BIT_DECODE      0x00000004L
#define IO_ALIAS_12_BIT_DECODE      0x00000010L
#define IO_ALIAS_16_BIT_DECODE      0x00000000L
#define IO_ALIAS_POSITIVE_DECODE    0x000000FFL

/* I/O local */
#define IOA_Local   0x000000FFL

/* DMA range flags */
#define mDD_Width           0x00000003L
#define fDD_BYTE            0x00000000L
#define fDD_WORD            0x00000001L
#define fDD_DWORD           0x00000002L
#define fDD_BYTE_AND_WORD   0x00000003L
#define mDD_BusMaster       0x00000004L
#define fDD_NoBusMaster     0x00000000L
#define fDD_BusMaster       0x00000004L
#define mDD_Type            0x00000018L
#define fDD_TypeStandard    0x00000000L
#define fDD_TypeA           0x00000008L
#define fDD_TypeB           0x00000010L
#define fDD_TypeF           0x00000018L

/* IRQ descriptor flags */
#define mIRQD_Share         0x00000001L
#define fIRQD_Exclusive     0x00000000L
#define fIRQD_Share         0x00000001L
#define fIRQD_Share_Bit     0
#define fIRQD_Level_Bit     1
#define mIRQD_Edge_Level    0x00000002L
#define fIRQD_Level         0x00000000L
#define fIRQD_Edge          0x00000002L

/* Resource descriptor flags */
#if (_WIN32_WINNT >= 0x0501)
    #define CM_RESDES_WIDTH_DEFAULT 0x00000000L
    #define CM_RESDES_WIDTH_32      0x00000001L
    #define CM_RESDES_WIDTH_64      0x00000002L
    #define CM_RESDES_WIDTH_BITS    0x00000003L
#endif

/* PC card configuration attribute flags */
#define mPCD_IO_8_16                    0x00000001L
#define fPCD_IO_8                       0x00000000L
#define fPCD_IO_16                      0x00000001L
#define mPCD_MEM_8_16                   0x00000002L
#define fPCD_MEM_8                      0x00000000L
#define fPCD_MEM_16                     0x00000002L
#define mPCD_MEM_A_C                    0x0000000CL
#define fPCD_MEM1_A                     0x00000004L
#define fPCD_MEM2_A                     0x00000008L
#define fPCD_IO_ZW_8                    0x00000010L
#define fPCD_IO_SRC_16                  0x00000020L
#define fPCD_IO_WS_16                   0x00000040L
#define mPCD_MEM_WS                     0x00000300L
#define fPCD_MEM_WS_ONE                 0x00000100L
#define fPCD_MEM_WS_TWO                 0x00000200L
#define fPCD_MEM_WS_THREE               0x00000300L
#if (WINVER >= 0x0501)
    #define fPCD_MEM_A                  0x00000004L
    #define fPCD_ATTRIBUTES_PER_WINDOW  0x00008000L
    #define fPCD_IO1_16                 0x00010000L
    #define fPCD_IO1_ZW_8               0x00020000L
    #define fPCD_IO1_SRC_16             0x00040000L
    #define fPCD_IO1_WS_16              0x00080000L
    #define fPCD_IO2_16                 0x00100000L
    #define fPCD_IO2_ZW_8               0x00200000L
    #define fPCD_IO2_SRC_16             0x00400000L
    #define fPCD_IO2_WS_16              0x00800000L
    #define mPCD_MEM1_WS                0x03000000L
    #define fPCD_MEM1_WS_ONE            0x01000000L
    #define fPCD_MEM1_WS_TWO            0x02000000L
    #define fPCD_MEM1_WS_THREE          0x03000000L
    #define fPCD_MEM1_16                0x04000000L
    #define mPCD_MEM2_WS                0x30000000L
    #define fPCD_MEM2_WS_ONE            0x10000000L
    #define fPCD_MEM2_WS_TWO            0x20000000L
    #define fPCD_MEM2_WS_THREE          0x30000000L
    #define fPCD_MEM2_16                0x40000000L
#endif

/* PC card maximum values */
#if (WINVER >= 0x0501)
    #define PCD_MAX_MEMORY  2
    #define PCD_MAX_IO      2
#endif

/* Multifunction PC card attribute flags */
#define mPMF_AUDIO_ENABLE   0x00000008L
#define fPMF_AUDIO_ENABLE   0x00000008L

/* Hardware profile information flags */
#define CM_HWPI_NOT_DOCKABLE    0x00000000L
#define CM_HWPI_UNDOCKED        0x00000001L
#define CM_HWPI_DOCKED          0x00000002L

/* Resource types */
#define ResType_All             0x00000000L
#define ResType_None            0x00000000L
#define ResType_Mem             0x00000001L
#define ResType_IO              0x00000002L
#define ResType_DMA             0x00000003L
#define ResType_IRQ             0x00000004L
#define ResType_DoNotUse        0x00000005L
#define ResType_BusNumber       0x00000006L
#define ResType_MemLarge        0x00000007L
#define ResType_MAX             0x00000007L
#define ResType_Ignored_Bit     0x00008000L
#define ResType_ClassSpecific   0x0000FFFFL
#define ResType_DevicePrivate   0x00008001L
#define ResType_PcCardConfig    0x00008002L
#define ResType_MfCardConfig    0x00008003L

/* CM_Add_Range() flags */
#define CM_ADD_RANGE_ADDIFCONFLICT      0x00000000L
#define CM_ADD_RANGE_DONOTADDIFCONFLICT 0x00000001L
#define CM_ADD_RANGE_BITS               0x00000001L

/* CM_Get_First_Log_Conf() flags */
#define BASIC_LOG_CONF      0x00000000L
#define FILTERED_LOG_CONF   0x00000001L
#define ALLOC_LOG_CONF      0x00000002L
#define BOOT_LOG_CONF       0x00000003L
#define FORCED_LOG_CONF     0x00000004L
#define OVERRIDE_LOG_CONF   0x00000005L
#define NUM_LOG_CONF        0x00000006L
#define LOG_CONF_BITS       0x00000007L

/* Priority values */
#define PRIORITY_EQUAL_FIRST    0x00000008L
#define PRIORITY_EQUAL_LAST     0x00000000L
#define PRIORITY_BIT            0x00000008L

/* Registry dispositions */
#define RegDisposition_OpenAlways   0x00000000L
#define RegDisposition_OpenExisting 0x00000001L
#define RegDisposition_Bits         0x00000001L

/* CM_Add_ID() flags */
#define CM_ADD_ID_HARDWARE      0x00000000L
#define CM_ADD_ID_COMPATIBLE    0x00000001L
#define CM_ADD_ID_BITS          0x00000001L

/* Device node creation flags */
#define CM_CREATE_DEVNODE_NORMAL            0x00000000L
#define CM_CREATE_DEVNODE_NO_WAIT_INSTALL   0x00000001L
#define CM_CREATE_DEVNODE_PHANTOM           0x00000002L
#define CM_CREATE_DEVNODE_GENERATE_ID       0x00000004L
#define CM_CREATE_DEVNODE_DO_NOT_INSTALL    0x00000008L
#define CM_CREATE_DEVNODE_BITS              0x0000000FL
#define CM_CREATE_DEVINST_NORMAL            CM_CREATE_DEVNODE_NORMAL
#define CM_CREATE_DEVINST_NO_WAIT_INSTALL   CM_CREATE_DEVNODE_NO_WAIT_INSTALL
#define CM_CREATE_DEVINST_PHANTOM           CM_CREATE_DEVNODE_PHANTOM
#define CM_CREATE_DEVINST_GENERATE_ID       CM_CREATE_DEVNODE_GENERATE_ID
#define CM_CREATE_DEVINST_DO_NOT_INSTALL    CM_CREATE_DEVNODE_DO_NOT_INSTALL
#define CM_CREATE_DEVINST_BITS              CM_CREATE_DEVNODE_BITS

/* CM_Delete_Class_Key() flags */
#define CM_DELETE_CLASS_ONLY            0x00000000L
#define CM_DELETE_CLASS_SUBKEYS         0x00000001L
#if (WINVER >= 0x0600)
    #define CM_DELETE_CLASS_INTERFACE   0x00000002L
#endif
#define CM_DELETE_CLASS_BITS            0x00000003L

/* CM_Run_Detection() flags */
#define CM_DETECT_NEW_PROFILE       0x00000001L
#define CM_DETECT_CRASHED           0x00000002L
#define CM_DETECT_HWPROF_FIRST_BOOT 0x00000004L
#define CM_DETECT_RUN               0x80000000L
#define CM_DETECT_BITS              0x80000007L
#define CM_DISABLE_POLITE           0x00000000L
#define CM_DISABLE_ABSOLUTE         0x00000001L
#define CM_DISABLE_HARDWARE         0x00000002L
#define CM_DISABLE_UI_NOT_OK        0x00000004L
#define CM_DISABLE_BITS             0x00000007L

/* CM_Get_Device_ID_List() flags */
#define CM_GETIDLIST_FILTER_NONE                    0x00000000L
#define CM_GETIDLIST_FILTER_ENUMERATOR              0x00000001L
#define CM_GETIDLIST_FILTER_SERVICE                 0x00000002L
#define CM_GETIDLIST_FILTER_EJECTRELATIONS          0x00000004L
#define CM_GETIDLIST_FILTER_REMOVALRELATIONS        0x00000008L
#define CM_GETIDLIST_FILTER_POWERRELATIONS          0x00000010L
#define CM_GETIDLIST_FILTER_BUSRELATIONS            0x00000020L
#define CM_GETIDLIST_DONOTGENERATE                  0x10000040L
#if (WINVER >= 0x0601)
    #define CM_GETIDLIST_FILTER_TRANSPORTRELATIONS  0x00000080L
    #define CM_GETIDLIST_FILTER_PRESENT             0x00000100L
    #define CM_GETIDLIST_FILTER_CLASS               0x00000200L
    #define CM_GETIDLIST_FILTER_BITS                0x100003FFL
#else
    #define CM_GETIDLIST_FILTER_BITS                0x1000007FL
#endif

/* CM_Get_Device_Interface_List() flags */
#define CM_GET_DEVICE_INTERFACE_LIST_PRESENT        0x00000000L
#define CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES    0x00000001L
#define CM_GET_DEVICE_INTERFACE_LIST_BITS           0x00000001L

/* CM_Get_DevInst_Registry_Property() flags */
#define CM_DRP_DEVICEDESC                       0x00000001L
#define CM_DRP_HARDWAREID                       0x00000002L
#define CM_DRP_COMPATIBLEIDS                    0x00000003L
#define CM_DRP_SERVICE                          0x00000005L
#define CM_DRP_CLASS                            0x00000008L
#define CM_DRP_CLASSGUID                        0x00000009L
#define CM_DRP_DRIVER                           0x0000000AL
#define CM_DRP_CONFIGFLAGS                      0x0000000BL
#define CM_DRP_MFG                              0x0000000CL
#define CM_DRP_FRIENDLYNAME                     0x0000000DL
#define CM_DRP_LOCATION_INFORMATION             0x0000000EL
#define CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME      0x0000000FL
#define CM_DRP_CAPABILITIES                     0x00000010L
#define CM_DRP_UI_NUMBER                        0x00000011L
#define CM_DRP_UPPERFILTERS                     0x00000012L
#define CM_DRP_LOWERFILTERS                     0x00000013L
#define CM_DRP_BUSTYPEGUID                      0x00000014L
#define CM_DRP_LEGACYBUSTYPE                    0x00000015L
#define CM_DRP_BUSNUMBER                        0x00000016L
#define CM_DRP_ENUMERATOR_NAME                  0x00000017L
#define CM_DRP_SECURITY                         0x00000018L
#define CM_DRP_SECURITY_SDS                     0x00000019L
#define CM_DRP_DEVTYPE                          0x0000001AL
#define CM_DRP_EXCLUSIVE                        0x0000001BL
#define CM_DRP_CHARACTERISTICS                  0x0000001CL
#define CM_DRP_ADDRESS                          0x0000001DL
#define CM_DRP_UI_NUMBER_DESC_FORMAT            0x0000001EL
#if (_WIN32_WINNT >= 0x0501)
    #define CM_DRP_DEVICE_POWER_DATA            0x0000001FL
    #define CM_DRP_REMOVAL_POLICY               0x00000020L
    #define CM_DRP_REMOVAL_POLICY_HW_DEFAULT    0x00000021L
    #define CM_DRP_REMOVAL_POLICY_OVERRIDE      0x00000022L
    #define CM_DRP_INSTALL_STATE                0x00000023L
#endif
#if (WINVER >= 0x0502)
    #define CM_DRP_LOCATION_PATHS               0x00000024L
#endif
#if (WINVER >= 0x0601)
    #define CM_DRP_BASE_CONTAINERID             0x00000025L
#endif
#define CM_DRP_MIN                              0x00000001L
#define CM_DRP_MAX                              0x00000025L

/* CM_Get_Class_Registry_Property() flags */
#if (_WIN32_WINNT >= 0x0600)
    #define CM_CRP_UPPERFILTERS CM_DRP_UPPERFILTERS
    #define CM_CRP_LOWERFILTERS CM_DRP_LOWERFILTERS
#endif
#define CM_CRP_SECURITY         CM_DRP_SECURITY
#define CM_CRP_SECURITY_SDS     CM_DRP_SECURITY_SDS
#define CM_CRP_DEVTYPE          CM_DRP_DEVTYPE
#define CM_CRP_EXCLUSIVE        CM_DRP_EXCLUSIVE
#define CM_CRP_CHARACTERISTICS  CM_DRP_CHARACTERISTICS
#define CM_CRP_MIN              CM_DRP_MIN
#define CM_CRP_MAX              CM_DRP_MAX

/* Device instance capability flags */
#define CM_DEVCAP_LOCKSUPPORTED     0x00000001L
#define CM_DEVCAP_EJECTSUPPORTED    0x00000002L
#define CM_DEVCAP_REMOVABLE         0x00000004L
#define CM_DEVCAP_DOCKDEVICE        0x00000008L
#define CM_DEVCAP_UNIQUEID          0x00000010L
#define CM_DEVCAP_SILENTINSTALL     0x00000020L
#define CM_DEVCAP_RAWDEVICEOK       0x00000040L
#define CM_DEVCAP_SURPRISEREMOVALOK 0x00000080L
#define CM_DEVCAP_HARDWAREDISABLED  0x00000100L
#define CM_DEVCAP_NONDYNAMIC        0x00000200L

/* Removal policies */
#if (WINVER >= 0x0501)
    #define CM_REMOVAL_POLICY_EXPECT_NO_REMOVAL         1
    #define CM_REMOVAL_POLICY_EXPECT_ORDERLY_REMOVAL    2
    #define CM_REMOVAL_POLICY_EXPECT_SURPRISE_REMOVAL   3
#endif

/* Install states */
#if (WINVER >= 0x0501)
    #define CM_INSTALL_STATE_INSTALLED          0
    #define CM_INSTALL_STATE_NEEDS_REINSTALL    1
    #define CM_INSTALL_STATE_FAILED_INSTALL     2
    #define CM_INSTALL_STATE_FINISH_INSTALL     3
#endif

/* CM_Locate_DevNode() flags */
#define CM_LOCATE_DEVNODE_NORMAL        0x00000000L
#define CM_LOCATE_DEVNODE_PHANTOM       0x00000001L
#define CM_LOCATE_DEVNODE_CANCELREMOVE  0x00000002L
#define CM_LOCATE_DEVNODE_NOVALIDATION  0x00000004L
#define CM_LOCATE_DEVNODE_BITS          0x00000007L
#define CM_LOCATE_DEVINST_NORMAL        CM_LOCATE_DEVNODE_NORMAL
#define CM_LOCATE_DEVINST_PHANTOM       CM_LOCATE_DEVNODE_PHANTOM
#define CM_LOCATE_DEVINST_CANCELREMOVE  CM_LOCATE_DEVNODE_CANCELREMOVE
#define CM_LOCATE_DEVINST_NOVALIDATION  CM_LOCATE_DEVNODE_NOVALIDATION
#define CM_LOCATE_DEVINST_BITS          CM_LOCATE_DEVNODE_BITS

/* CM_Open_Class_Key() flags */
#define CM_OPEN_CLASS_KEY_INSTALLER 0x00000000L
#define CM_OPEN_CLASS_KEY_INTERFACE 0x00000001L
#define CM_OPEN_CLASS_KEY_BITS      0x00000001L

/* CM_Query_And_Remove_SubTree() flags */
#define CM_REMOVE_UI_OK             0x00000000L
#define CM_REMOVE_UI_NOT_OK         0x00000001L
#define CM_REMOVE_NO_RESTART        0x00000002L
#define CM_REMOVE_BITS              0x00000003L
#define CM_QUERY_REMOVE_UI_OK       CM_REMOVE_UI_OK
#define CM_QUERY_REMOVE_UI_NOT_OK   CM_REMOVE_UI_NOT_OK
#define CM_QUERY_REMOVE_BITS        (CM_QUERY_REMOVE_UI_OK | CM_QUERY_REMOVE_UI_NOT_OK)

/* CM_Reenumerate_DevNode() flags */
#define CM_REENUMERATE_NORMAL                   0x00000000L
#define CM_REENUMERATE_SYNCHRONOUS              0x00000001L
#if (WINVER >= 0x0501)
    #define CM_REENUMERATE_RETRY_INSTALLATION   0x00000002L
    #define CM_REENUMERATE_ASYNCHRONOUS         0x00000004L
#endif
#define CM_REENUMERATE_BITS                     0x00000007L

/* CM_Register_Device_Driver() flags */
#define CM_REGISTER_DEVICE_DRIVER_STATIC        0x00000000L
#define CM_REGISTER_DEVICE_DRIVER_DISABLEABLE   0x00000001L
#define CM_REGISTER_DEVICE_DRIVER_REMOVABLE     0x00000002L
#define CM_REGISTER_DEVICE_DRIVER_BITS          0x00000003L

/* Registry branch locations */
#define CM_REGISTRY_HARDWARE    0x00000000L
#define CM_REGISTRY_SOFTWARE    0x00000001L
#define CM_REGISTRY_USER        0x00000100L
#define CM_REGISTRY_CONFIG      0x00000200L
#define CM_REGISTRY_BITS        0x00000301L

/* CM_Set_DevNode_Problem() flags */
#define CM_SET_DEVNODE_PROBLEM_NORMAL   0x00000000L
#define CM_SET_DEVNODE_PROBLEM_OVERRIDE 0x00000001L
#define CM_SET_DEVNODE_PROBLEM_BITS     0x00000001L
#define CM_SET_DEVINST_PROBLEM_NORMAL   CM_SET_DEVNODE_PROBLEM_NORMAL
#define CM_SET_DEVINST_PROBLEM_OVERRIDE CM_SET_DEVNODE_PROBLEM_OVERRIDE
#define CM_SET_DEVINST_PROBLEM_BITS     CM_SET_DEVNODE_PROBLEM_BITS

/* CM_Set_HW_Prof_Flags() flags */
#define CM_SET_HW_PROF_FLAGS_UI_NOT_OK  0x00000001L
#define CM_SET_HW_PROF_FLAGS_BITS       0x00000001L

/* CM_Setup_DevInst() actions */
#define CM_SETUP_DEVNODE_READY      0x00000000L
#define CM_SETUP_DEVINST_READY      CM_SETUP_DEVNODE_READY
#define CM_SETUP_DOWNLOAD           0x00000001L
#define CM_SETUP_WRITE_LOG_CONFS    0x00000002L
#define CM_SETUP_PROP_CHANGE        0x00000003L
#if (WINVER >= 0x0501)
    #define CM_SETUP_DEVNODE_RESET  0x00000004L
    #define CM_SETUP_DEVINST_RESET  CM_SETUP_DEVNODE_RESET
#endif
#define CM_SETUP_BITS               0x00000007L

/* CM_Query_Arbitrator_Free_Data() flags */
#define CM_QUERY_ARBITRATOR_RAW         0x00000000L
#define CM_QUERY_ARBITRATOR_TRANSLATED  0x00000001L
#define CM_QUERY_ARBITRATOR_BITS        0x00000001L

/* CM_Get_DevNode_Custom_Property() flags */
#if (WINVER >= 0x0501)
    #define CM_CUSTOMDEVPROP_MERGE_MULTISZ  0x00000001L
    #define CM_CUSTOMDEVPROP_BITS           0x00000001L
#endif

/* Name attributes */
#define CM_NAME_ATTRIBUTE_NAME_RETRIEVED_FROM_DEVICE    0x00000001L
#define CM_NAME_ATTRIBUTE_USER_ASSIGNED_NAME            0x00000002L

/* Global states */
#define CM_GLOBAL_STATE_CAN_DO_UI           0x00000001L
#define CM_GLOBAL_STATE_ON_BIG_STACK        0x00000002L
#define CM_GLOBAL_STATE_SERVICES_AVAILABLE  0x00000004L
#define CM_GLOBAL_STATE_SHUTTING_DOWN       0x00000008L
#define CM_GLOBAL_STATE_DETECTION_PENDING   0x00000010L
#if (WINVER >= 0x0601)
    #define CM_GLOBAL_STATE_REBOOT_REQUIRED 0x00000020L
#endif

/* Configuration manager return codes */
#define CR_SUCCESS                  0x00000000L
#define CR_DEFAULT                  0x00000001L
#define CR_OUT_OF_MEMORY            0x00000002L
#define CR_INVALID_POINTER          0x00000003L
#define CR_INVALID_FLAG             0x00000004L
#define CR_INVALID_DEVNODE          0x00000005L
#define CR_INVALID_DEVINST          CR_INVALID_DEVNODE
#define CR_INVALID_RES_DES          0x00000006L
#define CR_INVALID_LOG_CONF         0x00000007L
#define CR_INVALID_ARBITRATOR       0x00000008L
#define CR_INVALID_NODELIST         0x00000009L
#define CR_DEVNODE_HAS_REQS         0x0000000AL
#define CR_DEVINST_HAS_REQS         CR_DEVNODE_HAS_REQS
#define CR_INVALID_RESOURCEID       0x0000000BL
#define CR_DLVXD_NOT_FOUND          0x0000000CL
#define CR_NO_SUCH_DEVNODE          0x0000000DL
#define CR_NO_SUCH_DEVINST          CR_NO_SUCH_DEVNODE
#define CR_NO_MORE_LOG_CONF         0x0000000EL
#define CR_NO_MORE_RES_DES          0x0000000FL
#define CR_ALREADY_SUCH_DEVNODE     0x00000010L
#define CR_ALREADY_SUCH_DEVINST     CR_ALREADY_SUCH_DEVNODE
#define CR_INVALID_RANGE_LIST       0x00000011L
#define CR_INVALID_RANGE            0x00000012L
#define CR_FAILURE                  0x00000013L
#define CR_NO_SUCH_LOGICAL_DEV      0x00000014L
#define CR_CREATE_BLOCKED           0x00000015L
#define CR_NOT_SYSTEM_VM            0x00000016L
#define CR_REMOTE_VETOED            0x00000017L
#define CR_APM_VETOED               0x00000018L
#define CR_INVALID_LOAD_TYPE        0x00000019L
#define CR_BUFFER_SMALL             0x0000001AL
#define CR_NO_ARBITRATOR            0x0000001BL
#define CR_NO_REGISTRY_HANDLE       0x0000001CL
#define CR_REGISTRY_ERROR           0x0000001DL
#define CR_INVALID_DEVICE_ID        0x0000001EL
#define CR_INVALID_DATA             0x0000001FL
#define CR_INVALID_API              0x00000020L
#define CR_DEVLOADER_NOT_READY      0x00000021L
#define CR_NEED_RESTART             0x00000022L
#define CR_NO_MORE_HW_PROFILES      0x00000023L
#define CR_DEVICE_NOT_THERE         0x00000024L
#define CR_NO_SUCH_VALUE            0x00000025L
#define CR_WRONG_TYPE               0x00000026L
#define CR_INVALID_PRIORITY         0x00000027L
#define CR_NOT_DISABLEABLE          0x00000028L
#define CR_FREE_RESOURCES           0x00000029L
#define CR_QUERY_VETOED             0x0000002AL
#define CR_CANT_SHARE_IRQ           0x0000002BL
#define CR_NO_DEPENDENT             0x0000002CL
#define CR_SAME_RESOURCES           0x0000002DL
#define CR_NO_SUCH_REGISTRY_KEY     0x0000002EL
#define CR_INVALID_MACHINENAME      0x0000002FL
#define CR_REMOTE_COMM_FAILURE      0x00000030L
#define CR_MACHINE_UNAVAILABLE      0x00000031L
#define CR_NO_CM_SERVICES           0x00000032L
#define CR_ACCESS_DENIED            0x00000033L
#define CR_CALL_NOT_IMPLEMENTED     0x00000034L
#define CR_INVALID_PROPERTY         0x00000035L
#define CR_DEVICE_INTERFACE_ACTIVE  0x00000036L
#define CR_NO_SUCH_DEVICE_INTERFACE 0x00000037L
#define CR_INVALID_REFERENCE_STRING 0x00000038L
#define CR_INVALID_CONFLICT_LIST    0x00000039L
#define CR_INVALID_INDEX            0x0000003AL
#define CR_INVALID_STRUCTURE_SIZE   0x0000003BL
#define NUM_CR_RESULTS              0x0000003CL

/* Conflict details */
typedef struct _CONFLICT_DETAILS_A {
    ULONG   CD_ulSize;
    ULONG   CD_ulMask;
    DEVINST CD_dnDevInst;
    RES_DES CD_rdResDes;
    ULONG   CD_ulFlags;
    CHAR    CD_szDescription[MAX_PATH];
} CONFLICT_DETAILS_A;
typedef CONFLICT_DETAILS_A  *PCONFLICT_DETAILS_A;
typedef struct _CONFLICT_DETAILS_W {
    ULONG   CD_ulSize;
    ULONG   CD_ulMas;
    DEVINST CD_dnDevInst;
    RES_DES CD_cdResDes;
    ULONG   CD_ulFlags;
    WCHAR   CD_szDescription[MAX_PATH];
} CONFLICT_DETAILS_W;
typedef CONFLICT_DETAILS_W  *PCONFLICT_DETAILS_W;
#ifdef UNICODE
typedef CONFLICT_DETAILS_W  CONFLICT_DETAILS;
typedef PCONFLICT_DETAILS_W PCONFLICT_DETAILS;
#else
typedef CONFLICT_DETAILS_A  CONFLICT_DETAILS;
typedef PCONFLICT_DETAILS_A PCONFLICT_DETAILS;
#endif

/* The following structures get one-byte packing. */
#pragma pack( __push, 1 )

/* Memory range */
typedef struct Mem_Range_s {
    DWORDLONG   MR_Align;
    ULONG       MR_nBytes;
    DWORDLONG   MR_Min;
    DWORDLONG   MR_Max;
    DWORD       MR_Flags;
    DWORD       MR_Reserved;
} MEM_RANGE;
typedef MEM_RANGE   *PMEM_RANGE;

/* Memory descriptor */
typedef struct Mem_Des_s {
    DWORD       MD_Count;
    DWORD       MD_Type;
    DWORDLONG   MD_Alloc_Base;
    DWORDLONG   MD_Alloc_End;
    DWORD       MD_Flags;
    DWORD       MD_Reserved;
} MEM_DES;
typedef MEM_DES *PMEM_DES;

/* Memory resource */
typedef struct Mem_Resource_s {
    MEM_DES     MEM_Header;
    MEM_RANGE   MEM_Data[ANYSIZE_ARRAY];
} MEM_RESOURCE;
typedef MEM_RESOURCE    *PMEM_RESOURCE;

/* Memory large range */
typedef struct Mem_Large_Range_s {
    DWORDLONG   MLR_Align;
    ULONGLONG   MLR_nBytes;
    DWORDLONG   MLR_Min;
    DWORDLONG   MLR_Max;
    DWORD       MLR_Flags;
    DWORD       MLR_Reserved;
} MEM_LARGE_RANGE;
typedef MEM_LARGE_RANGE *PMEM_LARGE_RANGE;

/* Memory large descriptor */
typedef struct Mem_Large_Des_s {
    DWORD       MLD_Count;
    DWORD       MLD_Type;
    DWORDLONG   MLD_Alloc_Base;
    DWORDLONG   MLD_Alloc_End;
    DWORD       MLD_Flags;
    DWORD       MLD_Reserved;
} MEM_LARGE_DES;
typedef MEM_LARGE_DES   *PMEM_LARGE_DES;

/* Memory large resource */
typedef struct Mem_Large_Resource_s {
    MEM_LARGE_DES   MEM_LARGE_Header;
    MEM_LARGE_RANGE MEM_LARGE_Data[ANYSIZE_ARRAY];
} MEM_LARGE_RESOURCE;
typedef MEM_LARGE_RESOURCE  *PMEM_LARGE_RESOURCE;

/* I/O range */
typedef struct IO_Range_s {
    DWORDLONG   IOR_Align;
    DWORD       IOR_nPorts;
    DWORDLONG   IOR_Min;
    DWORDLONG   IOR_Max;
    DWORD       IOR_RangeFlags;
    DWORDLONG   IOR_Alias;
} IO_RANGE;
typedef IO_RANGE    *PIO_RANGE;

/* I/O descriptor */
typedef struct IO_Des_s {
    DWORD       IOD_Count;
    DWORD       IOD_Type;
    DWORDLONG   IOD_Alloc_Base;
    DWORDLONG   IOD_Alloc_End;
    DWORD       IOD_DesFlags;
} IO_DES;
typedef IO_DES  *PIO_DES;

/* I/O resource */
typedef struct IO_Resource_s {
    IO_DES      IO_Header;
    IO_RANGE    IO_Data[ANYSIZE_ARRAY];
} IO_RESOURCE;
typedef IO_RESOURCE *PIO_RESOURCE;

/* DMA range */
typedef struct DMA_Range_s {
    ULONG   DR_Min;
    ULONG   DR_Max;
    ULONG   DR_Flags;
} DMA_RANGE;
typedef DMA_RANGE   *PDMA_RANGE;

/* DMA descriptor */
typedef struct DMA_Des_s {
    DWORD   DD_Count;
    DWORD   DD_Type;
    DWORD   DD_Flags;
    ULONG   DD_Alloc_Chan;
} DMA_DES;
typedef DMA_DES *PDMA_DES;

/* DMA resource */
typedef struct DMA_Resource_s {
    DMA_DES     DMA_Header;
    DMA_RANGE   DMA_Data[ANYSIZE_ARRAY];
} DMA_RESOURCE;
typedef DMA_RESOURCE    *PDMA_RESOURCE;

/* IRQ range */
typedef struct IRQ_Range_s {
    ULONG   IRQR_Min;
    ULONG   IRQR_Max;
#ifdef NT_PROCESSOR_GROUPS
    USHORT  IRQR_Flags;
    USHORT  IRQR_Rsvdz;
#else
    ULONG   IRQR_Flags;
#endif
} IRQ_RANGE;
typedef IRQ_RANGE   *PIRQ_RANGE;

/* IRQ descriptor (32-bit version) */
typedef struct IRQ_Des_32_s {
    DWORD   IRQD_Count;
    DWORD   IRQD_Type;
#ifdef NT_PROCESSOR_GROUPS
    USHORT  IRQD_Flags;
    USHORT  IRQD_Group;
#else
    DWORD   IRQD_Flags;
#endif
    ULONG   IRQD_Alloc_Num;
    ULONG32 IRQD_Affinity;
} IRQ_DES_32;
typedef IRQ_DES_32  *PIRQ_DES_32;

/* IRQ descriptor (64-bit version) */
typedef struct IRQ_Des_64_s {
    DWORD   IRQD_Count;
    DWORD   IRQD_Type;
#ifdef NT_PROCESSOR_GROUPS
    USHORT  IRQD_Flags;
    USHORT  IRQD_Group;
#else
    DWORD   IRQD_Flags;
#endif
    ULONG   IRQD_Alloc_Num;
    ULONG64 IRQD_Affinity;
} IRQ_DES_64;
typedef IRQ_DES_64  *PIRQ_DES_64;

/* IRQ descriptor */
typedef IRQ_DES_32  IRQ_DES;
typedef PIRQ_DES_32 PIRQ_DES;

/* IRQ resource (32-bit version) */
typedef struct IRQ_Resource_32_s {
    IRQ_DES_32  IRQ_Header;
    IRQ_RANGE   IRQ_Data[ANYSIZE_ARRAY];
} IRQ_RESOURCE_32;
typedef IRQ_RESOURCE_32 *PIRQ_RESOURCE_32;

/* IRQ resource (64-bit version) */
typedef struct IRQ_Resource_64_s {
    IRQ_DES_64  IRQ_Header;
    IRQ_RANGE   IRQ_Data[ANYSIZE_ARRAY];
} IRQ_RESOURCE_64;
typedef IRQ_RESOURCE_64 *PIRQ_RESOURCE_64;

/* IRQ resource */
typedef IRQ_RESOURCE_64     IRQ_RESOURCE;
typedef PIRQ_RESOURCE_64    PIRQ_RESOURCE;

/* Device private range */
typedef struct DevPrivate_Range_s {
    DWORD   PR_Data1;
    DWORD   PR_Data2;
    DWORD   PR_Data3;
} DEVPRIVATE_RANGE;
typedef DEVPRIVATE_RANGE    *PDEVPRIVATE_RANGE;

/* Device private descriptor */
typedef struct DevPrivate_Des_s {
    DWORD   PD_Count;
    DWORD   PD_Type;
    DWORD   PD_Data1;
    DWORD   PD_Data2;
    DWORD   PD_Data3;
    DWORD   PD_Flags;
} DEVPRIVATE_DES;
typedef DEVPRIVATE_DES  *PDEVPRIVATE_DES;

/* Device private resource */
typedef struct DevPrivate_Resource_s {
    DEVPRIVATE_DES      PRV_Header;
    DEVPRIVATE_RANGE    PRV_Data[ANYSIZE_ARRAY];
} DEVPRIVATE_RESOURCE;
typedef DEVPRIVATE_RESOURCE *PDEVPRIVATE_RESOURCE;

/* Class-specific descriptor */
typedef struct CS_Des_s {
    DWORD   CSD_SignatureLength;
    DWORD   CSD_LegacyDataOffset;
    DWORD   CSD_LegacyDataSize;
    DWORD   CSD_Flags;
    GUID    CSD_ClassGuid;
    BYTE    CSD_Signature[ANYSIZE_ARRAY];
} CS_DES;
typedef CS_DES  *PCS_DES;

/* Class-specific resource */
typedef struct CS_Resource_s {
    CS_DES  CS_Header;
} CS_RESOURCE;
typedef CS_RESOURCE *PCS_RESOURCE;

/* PC card descriptor */
typedef struct PcCard_Des_s {
    DWORD   PCD_Count;
    DWORD   PCD_Type;
    DWORD   PCD_Flags;
    BYTE    PCD_ConfigIndex;
    BYTE    PCD_Reserved[4];
    DWORD   PCD_MemoryCardBase1;
    DWORD   PCD_MemoryCardBase2;
#if (WINVER >= 0x0501)
    DWORD   PCD_MemoryCardBase[PCD_MAX_MEMORY];
    WORD    PCD_MemoryFlags[PCD_MAX_MEMORY];
    BYTE    PCD_IoFlags[PCD_MAX_IO];
#endif
} PCCARD_DES;
typedef PCCARD_DES  *PPCCARD_DES;

/* PC card resource */
typedef struct PcCard_Resource_s {
    PCCARD_DES  PcCard_Header;
} PCCARD_RESOURCE;
typedef PCCARD_RESOURCE *PPCCARD_RESOURCE;

/* Multifunction PC card descriptor */
typedef struct MfCard_Des_s {
    DWORD   PMF_Count;
    DWORD   PMF_Type;
    DWORD   PMF_Flags;
    BYTE    PMF_ConfigOptions;
    BYTE    PMF_IoResourceIndex;
    BYTE    PMF_Reserved[2];
    DWORD   PMF_ConfigRegisterBase;
} MFCARD_DES;
typedef MFCARD_DES  *PMFCARD_DES;

/* Multifunction PC card resource */
typedef struct MfCard_Resource_s {
    MFCARD_DES  MfCard_Header;
} MFCARD_RESOURCE;
typedef MFCARD_RESOURCE *PMFCARD_RESOURCE;

/* Bus number range */
typedef struct BusNumber_Range_s {
    ULONG   BUSR_Min;
    ULONG   BUSR_Max;
    ULONG   BUSR_nBusNumbers;
    ULONG   BUSR_Flags;
} BUSNUMBER_RANGE;
typedef BUSNUMBER_RANGE *PBUSNUMBER_RANGE;

/* Bus number descriptor */
typedef struct BusNumber_Des_s {
    DWORD   BUSD_Count;
    DWORD   BUSD_Type;
    DWORD   BUSD_Flags;
    ULONG   BUSD_Alloc_Base;
    ULONG   BUSD_Alloc_End;
} BUSNUMBER_DES;
typedef BUSNUMBER_DES   *PBUSNUMBER_DES;

/* Bus number resource */
typedef struct BusNumber_Resource_s {
    BUSNUMBER_DES   BusNumber_Header;
    BUSNUMBER_RANGE BusNumber_Data[ANYSIZE_ARRAY];
} BUSNUMBER_RESOURCE;
typedef BUSNUMBER_RESOURCE  *PBUSNUMBER_RESOURCE;

/* Hardware profile information */
typedef struct HWProfileInfo_sA {
    ULONG   HWPI_ulHWProfile;
    CHAR    HWPI_szFriendlyName[MAX_PROFILE_LEN];
    DWORD   HWPI_dwFlags;
} HWPROFILEINFO_A;
typedef HWPROFILEINFO_A     *PHWPROFILEINFO_A;
typedef struct HWProfileInfo_sW {
    ULONG   HWPI_ulHWProfile;
    WCHAR   HWPI_szFriendlyName[MAX_PROFILE_LEN];
    DWORD   HWPI_dwFlags;
} HWPROFILEINFO_W;
typedef HWPROFILEINFO_W     *PHWPROFILEINFO_W;
#ifdef UNICODE
typedef HWPROFILEINFO_W     HWPROFILEINFO;
typedef PHWPROFILEINFO_W    PHWPROFILEINFO;
#else
typedef HWPROFILEINFO_A     HWPROFILEINFO;
typedef PHWPROFILEINFO_A    PHWPROFILEINFO;
#endif

/* Revert to default packing. */
#pragma pack( __pop )

/* Functions in CFGMGR32.DLL and SETUPAPI.DLL */
CMAPI CONFIGRET WINAPI  CM_Add_Empty_Log_Conf( PLOG_CONF, DEVINST, PRIORITY, ULONG );
CMAPI CONFIGRET WINAPI  CM_Add_Empty_Log_Conf_Ex( PLOG_CONF, DEVINST, PRIORITY, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Add_IDA( DEVINST, PSTR, ULONG );
CMAPI CONFIGRET WINAPI  CM_Add_IDW( DEVINST, PWSTR, ULONG );
CMAPI CONFIGRET WINAPI  CM_Add_ID_ExA( DEVINST, PSTR, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Add_ID_ExW( DEVINST, PWSTR, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Add_Range( DWORDLONG, DWORDLONG, RANGE_LIST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Add_Res_Des( PRES_DES, LOG_CONF, RESOURCEID, PCVOID, ULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Add_Res_Des_Ex( PRES_DES, LOG_CONF, RESOURCEID, PCVOID, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Connect_MachineA( PCSTR, PHMACHINE );
CMAPI CONFIGRET WINAPI  CM_Connect_MachineW( PCWSTR, PHMACHINE );
CMAPI CONFIGRET WINAPI  CM_Create_DevNodeA( PDEVINST, DEVINSTID_A, DEVINST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Create_DevNodeW( PDEVINST, DEVINSTID_W, DEVINST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Create_DevNode_ExA( PDEVINST, DEVINSTID_A, DEVINST, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Create_DevNode_ExW( PDEVINST, DEVINSTID_W, DEVINST, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Create_Range_List( PRANGE_LIST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Delete_Class_Key( LPGUID, ULONG );
CMAPI CONFIGRET WINAPI  CM_Delete_Class_Key_Ex( LPGUID, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Delete_DevNode_Key( DEVNODE, ULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Delete_DevNode_Key_Ex( DEVNODE, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Delete_Range( DWORDLONG, DWORDLONG, RANGE_LIST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Detect_Resource_Conflict( DEVINST, RESOURCEID, PCVOID, ULONG, PBOOL, ULONG );
CMAPI CONFIGRET WINAPI  CM_Detect_Resource_Conflict_Ex( DEVINST, RESOURCEID, PCVOID, ULONG, PBOOL, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Disable_DevNode( DEVINST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Disable_DevNode_Ex( DEVINST, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Disconnect_Machine( HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Dup_Range_List( RANGE_LIST, RANGE_LIST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Enable_DevNode( DEVINST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Enable_DevNode_Ex( DEVINST, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Enumerate_Classes( ULONG, LPGUID, ULONG );
CMAPI CONFIGRET WINAPI  CM_Enumerate_Classes_Ex( ULONG, LPGUID, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Enumerate_EnumeratorsA( ULONG, PSTR, PULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Enumerate_EnumeratorsW( ULONG, PWSTR, PULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Enumerate_Enumerators_ExA( ULONG, PSTR, PULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Enumerate_Enumerators_ExW( ULONG, PWSTR, PULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Find_Range( PDWORDLONG, DWORDLONG, ULONG, DWORDLONG, DWORDLONG, RANGE_LIST, ULONG );
CMAPI CONFIGRET WINAPI  CM_First_Range( RANGE_LIST, PDWORDLONG, PDWORDLONG, PRANGE_ELEMENT, ULONG );
CMAPI CONFIGRET WINAPI  CM_Free_Log_Conf( LOG_CONF, ULONG );
CMAPI CONFIGRET WINAPI  CM_Free_Log_Conf_Ex( LOG_CONF, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Free_Log_Conf_Handle( LOG_CONF );
CMAPI CONFIGRET WINAPI  CM_Free_Range_List( RANGE_LIST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Free_Res_Des( PRES_DES, RES_DES, ULONG );
CMAPI CONFIGRET WINAPI  CM_Free_Res_Des_Ex( PRES_DES, RES_DES, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Free_Res_Des_Handle( RES_DES );
CMAPI CONFIGRET WINAPI  CM_Free_Resource_Conflict_Handle( CONFLICT_LIST );
CMAPI CONFIGRET WINAPI  CM_Get_Child( PDEVINST, DEVINST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Child_Ex( PDEVINST, DEVINST, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Class_Key_NameA( LPGUID, LPSTR, PULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Class_Key_NameW( LPGUID, LPWSTR, PULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Class_Key_Name_ExA( LPGUID, LPSTR, PULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Class_Key_Name_ExW( LPGUID, LPWSTR, PULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Class_NameA( LPGUID, PSTR, PULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Class_NameW( LPGUID, PWSTR, PULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Class_Name_ExA( LPGUID, PSTR, PULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Class_Name_ExW( LPGUID, PWSTR, PULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Class_Registry_PropertyA( LPGUID, ULONG, PULONG, PVOID, PULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Class_Registry_PropertyW( LPGUID, ULONG, PULONG, PVOID, PULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Depth( PULONG, DEVINST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Depth_Ex( PULONG, DEVINST, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_DevNode_Registry_PropertyA( DEVINST, ULONG, PULONG, PVOID, PULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_DevNode_Registry_PropertyW( DEVINST, ULONG, PULONG, PVOID, PULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_DevNode_Registry_Property_ExA( DEVINST, ULONG, PULONG, PVOID, PULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_DevNode_Registry_Property_ExW( DEVINST, ULONG, PULONG, PVOID, PULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_DevNode_Status( PULONG, PULONG, DEVINST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_DevNode_Status_Ex( PULONG, PULONG, DEVINST, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Device_IDA( DEVINST, PSTR, ULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Device_IDW( DEVINST, PWSTR, ULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Device_ID_ExA( DEVINST, PSTR, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Device_ID_ExW( DEVINST, PWSTR, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Device_ID_ListA( PCSTR, PCHAR, ULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Device_ID_ListW( PCWSTR, PWCHAR, ULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Device_ID_List_ExA( PCSTR, PCHAR, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Device_ID_List_ExW( PCWSTR, PWCHAR, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Device_ID_List_SizeA( PULONG, PCSTR, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Device_ID_List_SizeW( PULONG, PCWSTR, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Device_ID_List_Size_ExA( PULONG, PCSTR, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Device_ID_List_Size_ExW( PULONG, PCWSTR, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Device_ID_Size( PULONG, DEVINST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Device_ID_Size_Ex( PULONG, DEVINST, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Device_Interface_AliasA( LPCSTR, LPGUID, LPSTR, PULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Device_Interface_AliasW( LPCWSTR, LPGUID, LPWSTR, PULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Device_Interface_Alias_ExA( LPCSTR, LPGUID, LPSTR, PULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Device_Interface_Alias_ExW( LPCWSTR, LPGUID, LPWSTR, PULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Device_Interface_ListA( LPGUID, DEVINSTID_A, PCHAR, ULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Device_Interface_ListW( LPGUID, DEVINSTID_W, PWCHAR, ULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Device_Interface_List_ExA( LPGUID, DEVINSTID_A, PCHAR, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Device_Interface_List_ExW( LPGUID, DEVINSTID_W, PWCHAR, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Device_Interface_List_SizeA( PULONG, LPGUID, DEVINSTID_A, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Device_Interface_List_SizeW( PULONG, LPGUID, DEVINSTID_W, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Device_Interface_List_Size_ExA( PULONG, LPGUID, DEVINSTID_A, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Device_Interface_List_Size_ExW( PULONG, LPGUID, DEVINSTID_W, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_First_Log_Conf( PLOG_CONF, DEVINST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_First_Log_Conf_Ex( PLOG_CONF, DEVINST, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Global_State( PULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Global_State_Ex( PULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_HW_Prof_FlagsA( DEVINSTID_A, ULONG, PULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_HW_Prof_FlagsW( DEVINSTID_W, ULONG, PULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_HW_Prof_Flags_ExA( DEVINSTID_A, ULONG, PULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_HW_Prof_Flags_ExW( DEVINSTID_W, ULONG, PULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Hardware_Profile_InfoA( ULONG, PHWPROFILEINFO_A, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Hardware_Profile_InfoW( ULONG, PHWPROFILEINFO_W, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Hardware_Profile_Info_ExA( ULONG, PHWPROFILEINFO_A, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Hardware_Profile_Info_ExW( ULONG, PHWPROFILEINFO_W, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Log_Conf_Priority( LOG_CONF, PPRIORITY, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Log_Conf_Priority_Ex( LOG_CONF, PPRIORITY, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Next_Res_Des( PRES_DES, RES_DES, RESOURCEID, PRESOURCEID, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Next_Res_Des_Ex( PRES_DES, RES_DES, RESOURCEID, PRESOURCEID, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Next_Log_Conf( PLOG_CONF, LOG_CONF, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Next_Log_Conf_Ex( PLOG_CONF, LOG_CONF, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Parent( PDEVINST, DEVINST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Parent_Ex( PDEVINST, DEVINST, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Res_Des_Data( RES_DES, PVOID, ULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Res_Des_Data_Ex( RES_DES, PVOID, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Res_Des_Data_Size( PULONG, RES_DES, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Res_Des_Data_Size_Ex( PULONG, RES_DES, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_Resource_Conflict_Count( CONFLICT_LIST, PULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Resource_Conflict_DetailsA( CONFLICT_LIST, ULONG, PCONFLICT_DETAILS_A );
CMAPI CONFIGRET WINAPI  CM_Get_Resource_Conflict_DetailsW( CONFLICT_LIST, ULONG, PCONFLICT_DETAILS_W );
CMAPI CONFIGRET WINAPI  CM_Get_Sibling( PDEVINST, DEVINST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_Sibling_Ex( PDEVINST, DEVINST, ULONG, HMACHINE );
CMAPI WORD WINAPI       CM_Get_Version( VOID );
CMAPI WORD WINAPI       CM_Get_Version_Ex( HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Intersect_Range_List( RANGE_LIST, RANGE_LIST, RANGE_LIST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Invert_Range_List( RANGE_LIST, RANGE_LIST, DWORDLONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Is_Dock_Station_Present( PBOOL );
CMAPI CONFIGRET WINAPI  CM_Is_Dock_Station_Present_Ex( PBOOL, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Locate_DevNodeA( PDEVINST, DEVINSTID_A, ULONG );
CMAPI CONFIGRET WINAPI  CM_Locate_DevNodeW( PDEVINST, DEVINSTID_W, ULONG );
CMAPI CONFIGRET WINAPI  CM_Locate_DevNode_ExA( PDEVINST, DEVINSTID_A, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Locate_DevNode_ExW( PDEVINST, DEVINSTID_W, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Merge_Range_List( RANGE_LIST, RANGE_LIST, RANGE_LIST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Modify_Res_Des( PRES_DES, RES_DES, RESOURCEID, PCVOID, ULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Modify_Res_Des_Ex( PRES_DES, RES_DES, RESOURCEID, PCVOID, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Move_DevNode( DEVINST, DEVINST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Move_DevNode_Ex( DEVINST, DEVINST, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Next_Range( PRANGE_ELEMENT, PDWORDLONG, PDWORDLONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Open_Class_KeyA( LPGUID, LPCSTR, REGSAM, REGDISPOSITION, PHKEY, ULONG );
CMAPI CONFIGRET WINAPI  CM_Open_Class_KeyW( LPGUID, LPCWSTR, REGSAM, REGDISPOSITION, PHKEY, ULONG );
CMAPI CONFIGRET WINAPI  CM_Open_Class_Key_ExA( LPGUID, LPCSTR, REGSAM, REGDISPOSITION, PHKEY, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Open_Class_Key_ExW( LPGUID, LPCWSTR, REGSAM, REGDISPOSITION, PHKEY, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Open_DevNode_Key( DEVINST, REGSAM, ULONG, REGDISPOSITION, PHKEY, ULONG );
CMAPI CONFIGRET WINAPI  CM_Open_DevNode_Key_Ex( DEVINST, REGSAM, ULONG, REGDISPOSITION, PHKEY, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Query_And_Remove_SubTreeA( DEVINST, PPNP_VETO_TYPE, LPSTR, ULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Query_And_Remove_SubTreeW( DEVINST, PPNP_VETO_TYPE, LPWSTR, ULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Query_And_Remove_SubTree_ExA( DEVINST, PPNP_VETO_TYPE, LPSTR, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Query_And_Remove_SubTree_ExW( DEVINST, PPNP_VETO_TYPE, LPWSTR, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Query_Arbitrator_Free_Data( PVOID, ULONG, DEVINST, RESOURCEID, ULONG );
CMAPI CONFIGRET WINAPI  CM_Query_Arbitrator_Free_Data_Ex( PVOID, ULONG, DEVINST, RESOURCEID, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Query_Arbitrator_Free_Size( PULONG, DEVINST, RESOURCEID, ULONG );
CMAPI CONFIGRET WINAPI  CM_Query_Arbitrator_Free_Size_Ex( PULONG, DEVINST, RESOURCEID, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Query_Remove_SubTree( DEVINST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Query_Remove_SubTree_Ex( DEVINST, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Query_Resource_Conflict_List( PCONFLICT_LIST, DEVINST, RESOURCEID, PCVOID, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Reenumerate_DevNode( DEVINST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Reenumerate_DevNode_Ex( DEVINST, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Register_Device_Driver( DEVINST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Register_Device_Driver_Ex( DEVINST, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Register_Device_InterfaceA( DEVINST, LPGUID, LPCSTR, LPSTR, PULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Register_Device_InterfaceW( DEVINST, LPGUID, LPCWSTR, LPWSTR, PULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Register_Device_Interface_ExA( DEVINST, LPGUID, LPCSTR, LPSTR, PULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Register_Device_Interface_ExW( DEVINST, LPGUID, LPCWSTR, LPWSTR, PULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Remove_SubTree( DEVINST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Remove_SubTree_Ex( DEVINST, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Request_Device_EjectA( DEVINST, PPNP_VETO_TYPE, LPSTR, ULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Request_Device_EjectW( DEVINST, PPNP_VETO_TYPE, LPWSTR, ULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Request_Device_Eject_ExA( DEVINST, PPNP_VETO_TYPE, LPSTR, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Request_Device_Eject_ExW( DEVINST, PPNP_VETO_TYPE, LPWSTR, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Request_Eject_PC( VOID );
CMAPI CONFIGRET WINAPI  CM_Request_Eject_PC_Ex( HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Run_Detection( ULONG );
CMAPI CONFIGRET WINAPI  CM_Run_Detection_Ex( ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Set_Class_Registry_PropertyA( LPGUID, ULONG, PCVOID, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Set_Class_Registry_PropertyW( LPGUID, ULONG, PCVOID, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Set_DevNode_Problem( DEVINST, ULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Set_DevNode_Problem_Ex( DEVINST, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Set_DevNode_Registry_PropertyA( DEVINST, ULONG, PCVOID, ULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Set_DevNode_Registry_PropertyW( DEVINST, ULONG, PCVOID, ULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Set_DevNode_Registry_Property_ExA( DEVINST, ULONG, PCVOID, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Set_DevNode_Registry_Property_ExW( DEVINST, ULONG, PCVOID, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Set_HW_Prof( ULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Set_HW_Prof_Ex( ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Set_HW_Prof_FlagsA( DEVINSTID_A, ULONG, ULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Set_HW_Prof_FlagsW( DEVINSTID_W, ULONG, ULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Set_HW_Prof_Flags_ExA( DEVINSTID_A, ULONG, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Set_HW_Prof_Flags_ExW( DEVINSTID_W, ULONG, ULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Setup_DevNode( DEVINST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Setup_DevNode_Ex( DEVINST, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Test_Range_Available( DWORDLONG, DWORDLONG, RANGE_LIST, ULONG );
CMAPI CONFIGRET WINAPI  CM_Uninstall_DevNode( DEVNODE, ULONG );
CMAPI CONFIGRET WINAPI  CM_Uninstall_DevNode_Ex( DEVNODE, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Unregister_Device_InterfaceA( LPCSTR, ULONG );
CMAPI CONFIGRET WINAPI  CM_Unregister_Device_InterfaceW( LPCWSTR, ULONG );
CMAPI CONFIGRET WINAPI  CM_Unregister_Device_Interface_ExA( LPCSTR, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Unregister_Device_Interface_ExW( LPCWSTR, ULONG, HMACHINE );
#if (WINVER >= 0x0500)
CMAPI DWORD WINAPI      CMP_WaitNoPendingInstallEvents( DWORD );
#endif
#if (WINVER >= 0x0501)
CMAPI CONFIGRET WINAPI  CM_Get_DevNode_Custom_PropertyA( DEVINST, PCSTR, PULONG, PVOID, PULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_DevNode_Custom_PropertyW( DEVINST, PCWSTR, PULONG, PVOID, PULONG, ULONG );
CMAPI CONFIGRET WINAPI  CM_Get_DevNode_Custom_Property_ExA( DEVINST, PCSTR, PULONG, PVOID, PULONG, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Get_DevNode_Custom_Property_ExW( DEVINST, PCWSTR, PULONG, PVOID, PULONG, ULONG, HMACHINE );
CMAPI BOOL WINAPI       CM_Is_Version_Available( WORD );
CMAPI BOOL WINAPI       CM_Is_Version_Available_Ex( WORD, HMACHINE );
#endif
#if (WINVER >= 0x0600)
CMAPI CONFIGRET WINAPI  CM_Delete_Device_Interface_KeyA( LPCSTR, ULONG );
CMAPI CONFIGRET WINAPI  CM_Delete_Device_Interface_KeyW( LPCWSTR, ULONG );
CMAPI CONFIGRET WINAPI  CM_Delete_Device_Interface_Key_ExA( LPCSTR, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Delete_Device_Interface_Key_ExW( LPCWSTR, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Open_Device_Interface_KeyA( LPCSTR, REGSAM, REGDISPOSITION, PHKEY, ULONG );
CMAPI CONFIGRET WINAPI  CM_Open_Device_Interface_KeyW( LPCWSTR, REGSAM, REGDISPOSITION, PHKEY, ULONG );
CMAPI CONFIGRET WINAPI  CM_Open_Device_Interface_Key_ExA( LPCSTR, REGSAM, REGDISPOSITION, PHKEY, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Open_Device_Interface_Key_ExW( LPCWSTR, REGSAM, REGDISPOSITION, PHKEY, ULONG, HMACHINE );
CMAPI CONFIGRET WINAPI  CM_Write_UserPowerKey( CONST GUID *, CONST GUID *, CONST GUID *, ULONG, ULONG, UCHAR *, DWORD, PDWORD );
#endif

/* Aliases */
#define CM_Create_DevInstA                      CM_Create_DevNodeA
#define CM_Create_DevInstW                      CM_Create_DevNodeW
#define CM_Create_DevInst_ExA                   CM_Create_DevNode_ExA
#define CM_Create_DevInst_ExW                   CM_Create_DevNode_ExW
#define CM_Delete_DevInst_Key                   CM_Delete_DevNode_Key
#define CM_Delete_DevInst_Key_Ex                CM_Delete_DevNode_Key_Ex
#define CM_Disable_DevInst                      CM_Disable_DevNode
#define CM_Disable_DevInst_Ex                   CM_Disable_DevNode_Ex
#define CM_Enable_DevInst                       CM_Enable_DevInst
#define CM_Enable_DevInst_Ex                    CM_Enable_DevInst_Ex
#define CM_Get_DevInst_Registry_PropertyA       CM_Get_DevNode_Registry_PropertyA
#define CM_Get_DevInst_Registry_PropertyW       CM_Get_DevNode_Registry_PropertyW
#define CM_Get_DevInst_Registry_Property_ExA    CM_Get_DevNode_Registry_Property_ExA
#define CM_Get_DevInst_Registry_Property_ExW    CM_Get_DevNode_Registry_Property_ExW
#define CM_Get_DevInst_Status                   CM_Get_DevNode_Status
#define CM_Get_DevInst_Status_Ex                CM_Get_DevNode_Status_Ex
#define CM_Locate_DevInstA                      CM_Locate_DevNodeA
#define CM_Locate_DevInstW                      CM_Locate_DevNodeW
#define CM_Locate_DevInst_ExA                   CM_Locate_DevNode_ExA
#define CM_Locate_DevInst_ExW                   CM_Locate_DevNode_ExW
#define CM_Move_DevInst                         CM_Move_DevNode
#define CM_Move_DevInst_Ex                      CM_Move_DevNode_Ex
#define CM_Open_DevInst_Key                     CM_Open_DevNode_Key
#define CM_Open_DevInst_Key_Ex                  CM_Open_DevNode_Key_Ex
#define CM_Reenumerate_DevInst                  CM_Reenumerate_DevNode
#define CM_Reenumerate_DevInst_Ex               CM_Reenumerate_DevNode_Ex
#define CM_Set_DevInst_Problem                  CM_Set_DevNode_Problem
#define CM_Set_DevInst_Problem_Ex               CM_Set_DevNode_Problem_Ex
#define CM_Set_DevInst_Registry_PropertyA       CM_Set_DevNode_Registry_PropertyA
#define CM_Set_DevInst_Registry_PropertyW       CM_Set_DevNode_Registry_PropertyW
#define CM_Set_DevInst_Registry_Property_ExA    CM_Set_DevNode_Registry_Property_ExA
#define CM_Set_DevInst_Registry_Property_ExW    CM_Set_DevNode_Registry_Property_ExW
#define CM_Setup_DevInst                        CM_Setup_DevNode
#define CM_Setup_DevInst_Ex                     CM_Setup_DevNode_Ex
#define CM_Uninstall_DevInst                    CM_Uninstall_DevNode
#define CM_Uninstall_DevInst_Ex                 CM_Uninstall_DevNode_Ex
#if (WINVER >= 0x0500)
    #define CM_WaitNoPendingInstallEvents       CMP_WaitNoPendingInstallEvents
#endif
#if (WINVER >= 0x0501)
    #define CM_Get_DevInst_Custom_PropertyA     CM_Get_DevNode_Custom_PropertyA
    #define CM_Get_DevInst_Custom_PropertyW     CM_Get_DevNode_Custom_PropertyW
    #define CM_Get_DevInst_Custom_Property_ExA  CM_Get_DevNode_Custom_Property_ExA
    #define CM_Get_DevInst_Custom_Property_ExW  CM_Get_DevNode_Custom_Property_ExW
#endif

/* Map generic function names to the appropriate ANSI or Unicode version. */
#ifdef UNICODE
    #define CM_Add_ID                               CM_Add_IDW
    #define CM_Add_ID_Ex                            CM_Add_ID_ExW
    #define CM_Connect_Machine                      CM_Connect_MachineW
    #define CM_Create_DevInst                       CM_Create_DevInstW
    #define CM_Create_DevInst_Ex                    CM_Create_DevInst_ExW
    #define CM_Create_DevNode                       CM_Create_DevNodeW
    #define CM_Create_DevNode_Ex                    CM_Create_DevNode_ExW
    #define CM_Enumerate_Enumerators                CM_Enumerate_EnumeratorsW
    #define CM_Enumerate_Enumerators_Ex             CM_Enumerate_Enumerators_ExW
    #define CM_Get_Class_Key_Name                   CM_Get_Class_Key_NameW
    #define CM_Get_Class_Key_Name_Ex                CM_Get_Class_Key_Name_ExW
    #define CM_Get_Class_Name                       CM_Get_Class_NameW
    #define CM_Get_Class_Name_Ex                    CM_Get_Class_Name_ExW
    #define CM_Get_Class_Registry_Property          CM_Get_Class_Registry_PropertyW
    #define CM_Get_DevInst_Registry_Property        CM_Get_DevInst_Registry_PropertyW
    #define CM_Get_DevInst_Registry_Property_Ex     CM_Get_DevInst_Registry_Property_ExW
    #define CM_Get_DevNode_Registry_Property        CM_Get_DevNode_Registry_PropertyW
    #define CM_Get_DevNode_Registry_Property_Ex     CM_Get_DevNode_Registry_Property_ExW
    #define CM_Get_Device_ID                        CM_Get_Device_IDW
    #define CM_Get_Device_ID_Ex                     CM_Get_Device_ID_ExW
    #define CM_Get_Device_ID_List                   CM_Get_Device_ID_ListW
    #define CM_Get_Device_ID_List_Ex                CM_Get_Device_ID_List_ExW
    #define CM_Get_Device_Interface_Alias           CM_Get_Device_Interface_AliasW
    #define CM_Get_Device_Interface_Alias_Ex        CM_Get_Device_Interface_Alias_ExW
    #define CM_Get_Device_Interface_List            CM_Get_Device_Interface_ListW
    #define CM_Get_Device_Interface_List_Ex         CM_Get_Device_Interface_List_ExW
    #define CM_Get_Device_Interface_List_Size       CM_Get_Device_Interface_List_SizeW
    #define CM_Get_Device_Interface_List_Size_Ex    CM_Get_Device_Interface_List_Size_ExW
    #define CM_Get_HW_Prof_Flags                    CM_Get_HW_Prof_FlagsW
    #define CM_Get_HW_Prof_Flags_Ex                 CM_Get_HW_Prof_Flags_ExW
    #define CM_Get_Hardware_Profile_Info            CM_Get_Hardware_Profile_InfoW
    #define CM_Get_Hardware_Profile_Info_Ex         CM_Get_Hardware_Profile_Info_ExW
    #define CM_Get_Resource_Conflict_Details        CM_Get_Resource_Conflict_DetailsW
    #define CM_Locate_DevInst                       CM_Locate_DevInstW
    #define CM_Locate_DevInst_Ex                    CM_Locate_DevInst_ExW
    #define CM_Locate_DevNode                       CM_Locate_DevNodeW
    #define CM_Locate_DevNode_Ex                    CM_Locate_DevNode_ExW
    #define CM_Open_Class_Key                       CM_Open_Class_KeyW
    #define CM_Open_Class_Key_Ex                    CM_Open_Class_Key_ExW
    #define CM_Query_And_Remove_SubTree             CM_Query_And_Remove_SubTreeW
    #define CM_Query_And_Remove_SubTree_Ex          CM_Query_And_Remove_SubTree_ExW
    #define CM_Register_Device_Interface            CM_Register_Device_InterfaceW
    #define CM_Register_Device_Interface_Ex         CM_Register_Device_Interface_ExW
    #define CM_Request_Device_Eject                 CM_Request_Device_EjectW
    #define CM_Request_Device_Eject_Ex              CM_Request_Device_Eject_ExW
    #define CM_Set_DevInst_Registry_Property        CM_Set_DevInst_Registry_PropertyW
    #define CM_Set_DevInst_Registry_Property_Ex     CM_Set_DevInst_Registry_Property_ExW
    #define CM_Set_DevNode_Registry_Property        CM_Set_DevNode_Registry_PropertyW
    #define CM_Set_DevNode_Registry_Property_Ex     CM_Set_DevNode_Registry_Property_ExW
    #define CM_Set_HW_Prof_Flags                    CM_Set_HW_Prof_FlagsW
    #define CM_Set_HW_Prof_Flags_Ex                 CM_Set_HW_Prof_Flags_ExW
    #define CM_Unregister_Device_Interface          CM_Unregister_Device_InterfaceW
    #define CM_Unregister_Device_Interface_Ex       CM_Unregister_Device_Interface_ExW
    #if (WINVER >= 0x0501)
        #define CM_Get_DevInst_Custom_Property      CM_Get_DevInst_Custom_PropertyW
        #define CM_Get_DevInst_Custom_Property_Ex   CM_Get_DevInst_Custom_Property_ExW
        #define CM_Get_DevNode_Custom_Property      CM_Get_DevNode_Custom_PropertyW
        #define CM_Get_DevNode_Custom_Property_Ex   CM_Get_DevNode_Custom_Property_ExW
    #endif
    #if (WINVER >= 0x0600)
        #define CM_Delete_Device_Interface_Key      CM_Delete_Device_Interface_KeyW
        #define CM_Delete_Device_Interface_Key_Ex   CM_Delete_Device_Interface_Key_ExW
        #define CM_Open_Device_Interface_Key        CM_Open_Device_Interface_KeyW
        #define CM_Open_Device_Interface_Key_Ex     CM_Open_Device_Interface_Key_ExW
    #endif
#else
    #define CM_Add_ID                               CM_Add_IDA
    #define CM_Add_ID_Ex                            CM_Add_ID_ExA
    #define CM_Connect_Machine                      CM_Connect_MachineA
    #define CM_Create_DevInst                       CM_Create_DevInstA
    #define CM_Create_DevInst_Ex                    CM_Create_DevInst_ExA
    #define CM_Create_DevNode                       CM_Create_DevNodeA
    #define CM_Create_DevNode_Ex                    CM_Create_DevNode_ExA
    #define CM_Enumerate_Enumerators                CM_Enumerate_EnumeratorsA
    #define CM_Enumerate_Enumerators_Ex             CM_Enumerate_Enumerators_ExA
    #define CM_Get_Class_Key_Name                   CM_Get_Class_Key_NameA
    #define CM_Get_Class_Key_Name_Ex                CM_Get_Class_Key_Name_ExA
    #define CM_Get_Class_Name                       CM_Get_Class_NameA
    #define CM_Get_Class_Name_Ex                    CM_Get_Class_Name_ExA
    #define CM_Get_DevInst_Registry_Property        CM_Get_DevInst_Registry_PropertyA
    #define CM_Get_DevInst_Registry_Property_Ex     CM_Get_DevInst_Registry_Property_ExA
    #define CM_Get_DevNode_Registry_Property        CM_Get_DevNode_Registry_PropertyA
    #define CM_Get_DevNode_Registry_Property_Ex     CM_Get_DevNode_Registry_Property_ExA
    #define CM_Get_Device_ID                        CM_Get_Device_IDA
    #define CM_Get_Device_ID_Ex                     CM_Get_Device_ID_ExA
    #define CM_Get_Device_ID_List                   CM_Get_Device_ID_ListA
    #define CM_Get_Device_ID_List_Ex                CM_Get_Device_ID_List_ExA
    #define CM_Get_Device_Interface_Alias           CM_Get_Device_Interface_AliasA
    #define CM_Get_Device_Interface_Alias_Ex        CM_Get_Device_Interface_Alias_ExA
    #define CM_Get_Device_Interface_List            CM_Get_Device_Interface_ListA
    #define CM_Get_Device_Interface_List_Ex         CM_Get_Device_Interface_List_ExA
    #define CM_Get_Device_Interface_List_Size       CM_Get_Device_Interface_List_SizeA
    #define CM_Get_Device_Interface_List_Size_Ex    CM_Get_Device_Interface_List_Size_ExA
    #define CM_Get_HW_Prof_Flags                    CM_Get_HW_Prof_FlagsA
    #define CM_Get_HW_Prof_Flags_Ex                 CM_Get_HW_Prof_Flags_ExA
    #define CM_Get_Hardware_Profile_Info            CM_Get_Hardware_Profile_InfoA
    #define CM_Get_Hardware_Profile_Info_Ex         CM_Get_Hardware_Profile_Info_ExA
    #define CM_Get_Resource_Conflict_Details        CM_Get_Resource_Conflict_DetailsA
    #define CM_Locate_DevInst                       CM_Locate_DevInstA
    #define CM_Locate_DevInst_Ex                    CM_Locate_DevInst_ExA
    #define CM_Locate_DevNode                       CM_Locate_DevNodeA
    #define CM_Locate_DevNode_Ex                    CM_Locate_DevNode_ExA
    #define CM_Open_Class_Key                       CM_Open_Class_KeyA
    #define CM_Open_Class_Key_Ex                    CM_Open_Class_Key_ExA
    #define CM_Query_And_Remove_SubTree             CM_Query_And_Remove_SubTreeA
    #define CM_Query_And_Remove_SubTree_Ex          CM_Query_And_Remove_SubTree_ExA
    #define CM_Register_Device_Interface            CM_Register_Device_InterfaceA
    #define CM_Register_Device_Interface_Ex         CM_Register_Device_Interface_ExA
    #define CM_Request_Device_Eject                 CM_Request_Device_EjectA
    #define CM_Request_Device_Eject_Ex              CM_Request_Device_Eject_ExA
    #define CM_Set_Class_Registry_Property          CM_Set_Class_Registry_PropertyA
    #define CM_Set_DevInst_Registry_Property        CM_Set_DevInst_Registry_PropertyA
    #define CM_Set_DevInst_Registry_Property_Ex     CM_Set_DevInst_Registry_Property_ExA
    #define CM_Set_DevNode_Registry_Property        CM_Set_DevNode_Registry_PropertyA
    #define CM_Set_DevNode_Registry_Property_Ex     CM_Set_DevNode_Registry_Property_ExA
    #define CM_Set_HW_Prof_Flags                    CM_Set_HW_Prof_FlagsA
    #define CM_Set_HW_Prof_Flags_Ex                 CM_Set_HW_Prof_Flags_ExA
    #define CM_Unregister_Device_Interface          CM_Unregister_Device_InterfaceA
    #define CM_Unregister_Device_Interface_Ex       CM_Unregister_Device_Interface_ExA
    #if (WINVER >= 0x0501)
        #define CM_Get_DevInst_Custom_Property      CM_Get_DevInst_Custom_PropertyA
        #define CM_Get_DevInst_Custom_Property_Ex   CM_Get_DevInst_Custom_Property_ExA
        #define CM_Get_DevNode_Custom_Property      CM_Get_DevNode_Custom_PropertyA
        #define CM_Get_DevNode_Custom_Property_Ex   CM_Get_DevNode_Custom_Property_ExA
    #endif
    #if (WINVER >= 0x0600)
        #define CM_Delete_Device_Interface_Key      CM_Delete_Device_Interface_KeyA
        #define CM_Delete_Device_Interface_Key_Ex   CM_Delete_Device_Interface_Key_ExA
        #define CM_Open_Device_Interface_Key        CM_Open_Device_Interface_KeyA
        #define CM_Open_Device_Interface_Key_Ex     CM_Open_Device_Interface_Key_ExA
    #endif
#endif

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif /* _CFGMGR32_H_ */
