windows-nt/Source/XPSP1/NT/public/ddk/inc/cfg.h
2020-09-26 16:20:57 +08:00

218 lines
11 KiB
C

/*++
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
cfg.h
Abstract:
This module contains the common Configuration Manager definitions for
both user mode and kernel mode code.
Author:
Paula Tomlinson (paulat) 06/19/1995
Revision History:
--*/
#ifndef _CFG_INCLUDED_
#define _CFG_INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif
//
// The following definitions are also used by kernel mode code to
// set up the registry.
//
//
// VetoType used in
// CM_Disable_DevNode
// CM_Uninstall_DevNode
// CM_Query_And_Remove_SubTree
//
typedef enum _PNP_VETO_TYPE {
PNP_VetoTypeUnknown, // Name is unspecified
PNP_VetoLegacyDevice, // Name is an Instance Path
PNP_VetoPendingClose, // Name is an Instance Path
PNP_VetoWindowsApp, // Name is a Module
PNP_VetoWindowsService, // Name is a Service
PNP_VetoOutstandingOpen, // Name is an Instance Path
PNP_VetoDevice, // Name is an Instance Path
PNP_VetoDriver, // Name is a Driver Service Name
PNP_VetoIllegalDeviceRequest, // Name is an Instance Path
PNP_VetoInsufficientPower, // Name is unspecified
PNP_VetoNonDisableable, // Name is an Instance Path
PNP_VetoLegacyDriver, // Name is a Service
PNP_VetoInsufficientRights // Name is unspecified
} PNP_VETO_TYPE, *PPNP_VETO_TYPE;
//
// DevInst problem values, returned by call to CM_Get_DevInst_Status
//
#define CM_PROB_NOT_CONFIGURED (0x00000001) // no config for device
#define CM_PROB_DEVLOADER_FAILED (0x00000002) // service load failed
#define CM_PROB_OUT_OF_MEMORY (0x00000003) // out of memory
#define CM_PROB_ENTRY_IS_WRONG_TYPE (0x00000004) //
#define CM_PROB_LACKED_ARBITRATOR (0x00000005) //
#define CM_PROB_BOOT_CONFIG_CONFLICT (0x00000006) // boot config conflict
#define CM_PROB_FAILED_FILTER (0x00000007) //
#define CM_PROB_DEVLOADER_NOT_FOUND (0x00000008) // Devloader not found
#define CM_PROB_INVALID_DATA (0x00000009) //
#define CM_PROB_FAILED_START (0x0000000A) //
#define CM_PROB_LIAR (0x0000000B) //
#define CM_PROB_NORMAL_CONFLICT (0x0000000C) // config conflict
#define CM_PROB_NOT_VERIFIED (0x0000000D) //
#define CM_PROB_NEED_RESTART (0x0000000E) // requires restart
#define CM_PROB_REENUMERATION (0x0000000F) //
#define CM_PROB_PARTIAL_LOG_CONF (0x00000010) //
#define CM_PROB_UNKNOWN_RESOURCE (0x00000011) // unknown res type
#define CM_PROB_REINSTALL (0x00000012) //
#define CM_PROB_REGISTRY (0x00000013) //
#define CM_PROB_VXDLDR (0x00000014) // WINDOWS 95 ONLY
#define CM_PROB_WILL_BE_REMOVED (0x00000015) // devinst will remove
#define CM_PROB_DISABLED (0x00000016) // devinst is disabled
#define CM_PROB_DEVLOADER_NOT_READY (0x00000017) // Devloader not ready
#define CM_PROB_DEVICE_NOT_THERE (0x00000018) // device doesn't exist
#define CM_PROB_MOVED (0x00000019) //
#define CM_PROB_TOO_EARLY (0x0000001A) //
#define CM_PROB_NO_VALID_LOG_CONF (0x0000001B) // no valid log config
#define CM_PROB_FAILED_INSTALL (0x0000001C) // install failed
#define CM_PROB_HARDWARE_DISABLED (0x0000001D) // device disabled
#define CM_PROB_CANT_SHARE_IRQ (0x0000001E) // can't share IRQ
#define CM_PROB_FAILED_ADD (0x0000001F) // driver failed add
#define CM_PROB_DISABLED_SERVICE (0x00000020) // service's Start = 4
#define CM_PROB_TRANSLATION_FAILED (0x00000021) // resource translation failed
#define CM_PROB_NO_SOFTCONFIG (0x00000022) // no soft config
#define CM_PROB_BIOS_TABLE (0x00000023) // device missing in BIOS table
#define CM_PROB_IRQ_TRANSLATION_FAILED (0x00000024) // IRQ translator failed
#define CM_PROB_FAILED_DRIVER_ENTRY (0x00000025) // DriverEntry() failed.
#define CM_PROB_DRIVER_FAILED_PRIOR_UNLOAD (0x00000026) // Driver should have unloaded.
#define CM_PROB_DRIVER_FAILED_LOAD (0x00000027) // Driver load unsuccessful.
#define CM_PROB_DRIVER_SERVICE_KEY_INVALID (0x00000028) // Error accessing driver's service key
#define CM_PROB_LEGACY_SERVICE_NO_DEVICES (0x00000029) // Loaded legacy service created no devices
#define CM_PROB_DUPLICATE_DEVICE (0x0000002A) // Two devices were discovered with the same name
#define CM_PROB_FAILED_POST_START (0x0000002B) // The drivers set the device state to failed
#define CM_PROB_HALTED (0x0000002C) // This device was failed post start via usermode
#define CM_PROB_PHANTOM (0x0000002D) // The devinst currently exists only in the registry
#define CM_PROB_SYSTEM_SHUTDOWN (0x0000002E) // The system is shutting down
#define CM_PROB_HELD_FOR_EJECT (0x0000002F) // The device is offline awaiting removal
#define CM_PROB_DRIVER_BLOCKED (0x00000030) // One or more drivers is blocked from loading
#define CM_PROB_REGISTRY_TOO_LARGE (0x00000031) // System hive has grown too large
#define NUM_CM_PROB (0x00000032)
//
// Configuration Manager Global State Flags (returned by CM_Get_Global_State)
//
#define CM_GLOBAL_STATE_CAN_DO_UI (0x00000001) // Can do UI?
#define CM_GLOBAL_STATE_ON_BIG_STACK (0x00000002) // WINDOWS 95 ONLY
#define CM_GLOBAL_STATE_SERVICES_AVAILABLE (0x00000004) // CM APIs available?
#define CM_GLOBAL_STATE_SHUTTING_DOWN (0x00000008) // CM shutting down
#define CM_GLOBAL_STATE_DETECTION_PENDING (0x00000010) // detection pending
//
// Device Instance status flags, returned by call to CM_Get_DevInst_Status
//
#define DN_ROOT_ENUMERATED (0x00000001) // Was enumerated by ROOT
#define DN_DRIVER_LOADED (0x00000002) // Has Register_Device_Driver
#define DN_ENUM_LOADED (0x00000004) // Has Register_Enumerator
#define DN_STARTED (0x00000008) // Is currently configured
#define DN_MANUAL (0x00000010) // Manually installed
#define DN_NEED_TO_ENUM (0x00000020) // May need reenumeration
#define DN_NOT_FIRST_TIME (0x00000040) // Has received a config
#define DN_HARDWARE_ENUM (0x00000080) // Enum generates hardware ID
#define DN_LIAR (0x00000100) // Lied about can reconfig once
#define DN_HAS_MARK (0x00000200) // Not CM_Create_DevInst lately
#define DN_HAS_PROBLEM (0x00000400) // Need device installer
#define DN_FILTERED (0x00000800) // Is filtered
#define DN_MOVED (0x00001000) // Has been moved
#define DN_DISABLEABLE (0x00002000) // Can be rebalanced
#define DN_REMOVABLE (0x00004000) // Can be removed
#define DN_PRIVATE_PROBLEM (0x00008000) // Has a private problem
#define DN_MF_PARENT (0x00010000) // Multi function parent
#define DN_MF_CHILD (0x00020000) // Multi function child
#define DN_WILL_BE_REMOVED (0x00040000) // DevInst is being removed
//
// Windows 4 OPK2 Flags
//
#define DN_NOT_FIRST_TIMEE 0x00080000 // S: Has received a config enumerate
#define DN_STOP_FREE_RES 0x00100000 // S: When child is stopped, free resources
#define DN_REBAL_CANDIDATE 0x00200000 // S: Don't skip during rebalance
#define DN_BAD_PARTIAL 0x00400000 // S: This devnode's log_confs do not have same resources
#define DN_NT_ENUMERATOR 0x00800000 // S: This devnode's is an NT enumerator
#define DN_NT_DRIVER 0x01000000 // S: This devnode's is an NT driver
//
// Windows 4.1 Flags
//
#define DN_NEEDS_LOCKING 0x02000000 // S: Devnode need lock resume processing
#define DN_ARM_WAKEUP 0x04000000 // S: Devnode can be the wakeup device
#define DN_APM_ENUMERATOR 0x08000000 // S: APM aware enumerator
#define DN_APM_DRIVER 0x10000000 // S: APM aware driver
#define DN_SILENT_INSTALL 0x20000000 // S: Silent install
#define DN_NO_SHOW_IN_DM 0x40000000 // S: No show in device manager
#define DN_BOOT_LOG_PROB 0x80000000 // S: Had a problem during preassignment of boot log conf
//
// Windows NT Flags
//
// These are overloaded on top of unused Win 9X flags
//
//#define DN_LIAR (0x00000100) // Lied about can reconfig once
#define DN_NEED_RESTART DN_LIAR // System needs to be restarted for this Devnode to work properly
// #define DN_NOT_FIRST_TIME (0x00000040) // Has Register_Enumerator
#define DN_DRIVER_BLOCKED DN_NOT_FIRST_TIME // One or more drivers are blocked from loading for this Devnode
//#define DN_MOVED (0x00001000) // Has been moved
#define DN_LEGACY_DRIVER DN_MOVED // This device is using a legacy driver
//#define DN_HAS_MARK (0x00000200) // Not CM_Create_DevInst lately
#define DN_CHILD_WITH_INVALID_ID DN_HAS_MARK // One or more children have invalid ID(s)
#define DN_CHANGEABLE_FLAGS (DN_NOT_FIRST_TIME+\
DN_HARDWARE_ENUM+\
DN_HAS_MARK+\
DN_DISABLEABLE+\
DN_REMOVABLE+\
DN_MF_CHILD+\
DN_MF_PARENT+\
DN_NOT_FIRST_TIMEE+\
DN_STOP_FREE_RES+\
DN_REBAL_CANDIDATE+\
DN_NT_ENUMERATOR+\
DN_NT_DRIVER+\
DN_SILENT_INSTALL+\
DN_NO_SHOW_IN_DM)
//
// Logical configuration Priority values
//
// These priority values are used in user-mode calls to CM_Add_Empty_Log_Conf.
// Drivers may also specify priority values for a given IO_RESOURCE_LIST
// structure by including a ConfigData member union as the first
// IO_RESOURCE_DESCRIPTOR in the IO_RESOURCE_LIST. In this case, the descriptor
// type would be CmResourceTypeConfigData.
//
#define LCPRI_FORCECONFIG (0x00000000) // Coming from a forced config
#define LCPRI_BOOTCONFIG (0x00000001) // Coming from a boot config
#define LCPRI_DESIRED (0x00002000) // Preferable (better performance)
#define LCPRI_NORMAL (0x00003000) // Workable (acceptable performance)
#define LCPRI_LASTBESTCONFIG (0x00003FFF) // CM only--do not use
#define LCPRI_SUBOPTIMAL (0x00005000) // Not desired, but will work
#define LCPRI_LASTSOFTCONFIG (0x00007FFF) // CM only--do not use
#define LCPRI_RESTART (0x00008000) // Need to restart
#define LCPRI_REBOOT (0x00009000) // Need to reboot
#define LCPRI_POWEROFF (0x0000A000) // Need to shutdown/power-off
#define LCPRI_HARDRECONFIG (0x0000C000) // Need to change a jumper
#define LCPRI_HARDWIRED (0x0000E000) // Cannot be changed
#define LCPRI_IMPOSSIBLE (0x0000F000) // Impossible configuration
#define LCPRI_DISABLED (0x0000FFFF) // Disabled configuration
#define MAX_LCPRI (0x0000FFFF) // Maximum known LC Priority
#endif // _CFG_INCLUDED_