352 lines
17 KiB
ObjectPascal
352 lines
17 KiB
ObjectPascal
{******************************************************************}
|
|
{ }
|
|
{ Borland Delphi Runtime Library }
|
|
{ Config Manager API interface unit }
|
|
{ }
|
|
{ Portions created by Microsoft are }
|
|
{ Copyright (c) Microsoft Corporation. All rights reserved. }
|
|
{ }
|
|
{ The original file is: cfg.h, released August 2001. }
|
|
{ The original Pascal code is: Cfg.pas, released 5 Nov 2004. }
|
|
{ The initial developer of the Pascal code is Robert Marquardt }
|
|
{ (robert_marquardt att gmx dott de) }
|
|
{ }
|
|
{ Portions created by Robert Marquardt are }
|
|
{ Copyright (C) 2004 Robert Marquardt. }
|
|
{ }
|
|
{ Contributor(s): }
|
|
{ }
|
|
{ Obtained through: }
|
|
{ Joint Endeavour of Delphi Innovators (Project JEDI) }
|
|
{ }
|
|
{ You may retrieve the latest version of this file at the Project }
|
|
{ JEDI home page, located at http://delphi-jedi.org }
|
|
{ }
|
|
{ The contents of this file are used with permission, subject to }
|
|
{ the Mozilla Public License Version 1.1 (the "License"); you may }
|
|
{ not use this file except in compliance with the License. You may }
|
|
{ obtain a copy of the License at }
|
|
{ http://www.mozilla.org/MPL/MPL-1.1.html }
|
|
{ }
|
|
{ Software distributed under the License is distributed on an }
|
|
{ "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or }
|
|
{ implied. See the License for the specific language governing }
|
|
{ rights and limitations under the License. }
|
|
{ }
|
|
{******************************************************************}
|
|
|
|
unit Cfg;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows;
|
|
|
|
{$WEAKPACKAGEUNIT ON}
|
|
|
|
{$HPPEMIT '#include "cfg.h"'}
|
|
|
|
//
|
|
// 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
|
|
//
|
|
const
|
|
PNP_VetoTypeUnknown = 0; // Name is unspecified
|
|
{$EXTERNALSYM PNP_VetoTypeUnknown}
|
|
PNP_VetoLegacyDevice = 1; // Name is an Instance Path
|
|
{$EXTERNALSYM PNP_VetoLegacyDevice}
|
|
PNP_VetoPendingClose = 2; // Name is an Instance Path
|
|
{$EXTERNALSYM PNP_VetoPendingClose}
|
|
PNP_VetoWindowsApp = 3; // Name is a Module
|
|
{$EXTERNALSYM PNP_VetoWindowsApp}
|
|
PNP_VetoWindowsService = 4; // Name is a Service
|
|
{$EXTERNALSYM PNP_VetoWindowsService}
|
|
PNP_VetoOutstandingOpen = 5; // Name is an Instance Path
|
|
{$EXTERNALSYM PNP_VetoOutstandingOpen}
|
|
PNP_VetoDevice = 6; // Name is an Instance Path
|
|
{$EXTERNALSYM PNP_VetoDevice}
|
|
PNP_VetoDriver = 7; // Name is a Driver Service Name
|
|
{$EXTERNALSYM PNP_VetoDriver}
|
|
PNP_VetoIllegalDeviceRequest = 8; // Name is an Instance Path
|
|
{$EXTERNALSYM PNP_VetoIllegalDeviceRequest}
|
|
PNP_VetoInsufficientPower = 9; // Name is unspecified
|
|
{$EXTERNALSYM PNP_VetoInsufficientPower}
|
|
PNP_VetoNonDisableable = 10; // Name is an Instance Path
|
|
{$EXTERNALSYM PNP_VetoNonDisableable}
|
|
PNP_VetoLegacyDriver = 11; // Name is a Service
|
|
{$EXTERNALSYM PNP_VetoLegacyDriver}
|
|
PNP_VetoInsufficientRights = 12; // Name is unspecified
|
|
{$EXTERNALSYM PNP_VetoInsufficientRights}
|
|
type
|
|
PPNP_VETO_TYPE = ^PNP_VETO_TYPE;
|
|
{$EXTERNALSYM PPNP_VETO_TYPE}
|
|
PNP_VETO_TYPE = DWORD;
|
|
{$EXTERNALSYM PNP_VETO_TYPE}
|
|
|
|
const
|
|
//
|
|
// DevInst problem values, returned by call to CM_Get_DevInst_Status
|
|
//
|
|
CM_PROB_NOT_CONFIGURED = $00000001; // no config for device
|
|
{$EXTERNALSYM CM_PROB_NOT_CONFIGURED}
|
|
CM_PROB_DEVLOADER_FAILED = $00000002; // service load failed
|
|
{$EXTERNALSYM CM_PROB_DEVLOADER_FAILED}
|
|
CM_PROB_OUT_OF_MEMORY = $00000003; // out of memory
|
|
{$EXTERNALSYM CM_PROB_OUT_OF_MEMORY}
|
|
CM_PROB_ENTRY_IS_WRONG_TYPE = $00000004; //
|
|
{$EXTERNALSYM CM_PROB_ENTRY_IS_WRONG_TYPE}
|
|
CM_PROB_LACKED_ARBITRATOR = $00000005; //
|
|
{$EXTERNALSYM CM_PROB_LACKED_ARBITRATOR}
|
|
CM_PROB_BOOT_CONFIG_CONFLICT = $00000006; // boot config conflict
|
|
{$EXTERNALSYM CM_PROB_BOOT_CONFIG_CONFLICT}
|
|
CM_PROB_FAILED_FILTER = $00000007; //
|
|
{$EXTERNALSYM CM_PROB_FAILED_FILTER}
|
|
CM_PROB_DEVLOADER_NOT_FOUND = $00000008; // Devloader not found
|
|
{$EXTERNALSYM CM_PROB_DEVLOADER_NOT_FOUND}
|
|
CM_PROB_INVALID_DATA = $00000009; //
|
|
{$EXTERNALSYM CM_PROB_INVALID_DATA}
|
|
CM_PROB_FAILED_START = $0000000A; //
|
|
{$EXTERNALSYM CM_PROB_FAILED_START}
|
|
CM_PROB_LIAR = $0000000B; //
|
|
{$EXTERNALSYM CM_PROB_LIAR}
|
|
CM_PROB_NORMAL_CONFLICT = $0000000C; // config conflict
|
|
{$EXTERNALSYM CM_PROB_NORMAL_CONFLICT}
|
|
CM_PROB_NOT_VERIFIED = $0000000D; //
|
|
{$EXTERNALSYM CM_PROB_NOT_VERIFIED}
|
|
CM_PROB_NEED_RESTART = $0000000E; // requires restart
|
|
{$EXTERNALSYM CM_PROB_NEED_RESTART}
|
|
CM_PROB_REENUMERATION = $0000000F; //
|
|
{$EXTERNALSYM CM_PROB_REENUMERATION}
|
|
CM_PROB_PARTIAL_LOG_CONF = $00000010; //
|
|
{$EXTERNALSYM CM_PROB_PARTIAL_LOG_CONF}
|
|
CM_PROB_UNKNOWN_RESOURCE = $00000011; // unknown res type
|
|
{$EXTERNALSYM CM_PROB_UNKNOWN_RESOURCE}
|
|
CM_PROB_REINSTALL = $00000012; //
|
|
{$EXTERNALSYM CM_PROB_REINSTALL}
|
|
CM_PROB_REGISTRY = $00000013; //
|
|
{$EXTERNALSYM CM_PROB_REGISTRY}
|
|
CM_PROB_VXDLDR = $00000014; // WINDOWS 95 ONLY
|
|
{$EXTERNALSYM CM_PROB_VXDLDR}
|
|
CM_PROB_WILL_BE_REMOVED = $00000015; // devinst will remove
|
|
{$EXTERNALSYM CM_PROB_WILL_BE_REMOVED}
|
|
CM_PROB_DISABLED = $00000016; // devinst is disabled
|
|
{$EXTERNALSYM CM_PROB_DISABLED}
|
|
CM_PROB_DEVLOADER_NOT_READY = $00000017; // Devloader not ready
|
|
{$EXTERNALSYM CM_PROB_DEVLOADER_NOT_READY}
|
|
CM_PROB_DEVICE_NOT_THERE = $00000018; // device doesn't exist
|
|
{$EXTERNALSYM CM_PROB_DEVICE_NOT_THERE}
|
|
CM_PROB_MOVED = $00000019; //
|
|
{$EXTERNALSYM CM_PROB_MOVED}
|
|
CM_PROB_TOO_EARLY = $0000001A; //
|
|
{$EXTERNALSYM CM_PROB_TOO_EARLY}
|
|
CM_PROB_NO_VALID_LOG_CONF = $0000001B; // no valid log config
|
|
{$EXTERNALSYM CM_PROB_NO_VALID_LOG_CONF}
|
|
CM_PROB_FAILED_INSTALL = $0000001C; // install failed
|
|
{$EXTERNALSYM CM_PROB_FAILED_INSTALL}
|
|
CM_PROB_HARDWARE_DISABLED = $0000001D; // device disabled
|
|
{$EXTERNALSYM CM_PROB_HARDWARE_DISABLED}
|
|
CM_PROB_CANT_SHARE_IRQ = $0000001E; // can't share IRQ
|
|
{$EXTERNALSYM CM_PROB_CANT_SHARE_IRQ}
|
|
CM_PROB_FAILED_ADD = $0000001F; // driver failed add
|
|
{$EXTERNALSYM CM_PROB_FAILED_ADD}
|
|
CM_PROB_DISABLED_SERVICE = $00000020; // service's Start = 4
|
|
{$EXTERNALSYM CM_PROB_DISABLED_SERVICE}
|
|
CM_PROB_TRANSLATION_FAILED = $00000021; // resource translation failed
|
|
{$EXTERNALSYM CM_PROB_TRANSLATION_FAILED}
|
|
CM_PROB_NO_SOFTCONFIG = $00000022; // no soft config
|
|
{$EXTERNALSYM CM_PROB_NO_SOFTCONFIG}
|
|
CM_PROB_BIOS_TABLE = $00000023; // device missing in BIOS table
|
|
{$EXTERNALSYM CM_PROB_BIOS_TABLE}
|
|
CM_PROB_IRQ_TRANSLATION_FAILED = $00000024; // IRQ translator failed
|
|
{$EXTERNALSYM CM_PROB_IRQ_TRANSLATION_FAILED}
|
|
CM_PROB_FAILED_DRIVER_ENTRY = $00000025; // DriverEntry() failed.
|
|
{$EXTERNALSYM CM_PROB_FAILED_DRIVER_ENTRY}
|
|
CM_PROB_DRIVER_FAILED_PRIOR_UNLOAD = $00000026; // Driver should have unloaded.
|
|
{$EXTERNALSYM CM_PROB_DRIVER_FAILED_PRIOR_UNLOAD}
|
|
CM_PROB_DRIVER_FAILED_LOAD = $00000027; // Driver load unsuccessful.
|
|
{$EXTERNALSYM CM_PROB_DRIVER_FAILED_LOAD}
|
|
CM_PROB_DRIVER_SERVICE_KEY_INVALID = $00000028; // Error accessing driver's service key
|
|
{$EXTERNALSYM CM_PROB_DRIVER_SERVICE_KEY_INVALID}
|
|
CM_PROB_LEGACY_SERVICE_NO_DEVICES = $00000029; // Loaded legacy service created no devices
|
|
{$EXTERNALSYM CM_PROB_LEGACY_SERVICE_NO_DEVICES}
|
|
CM_PROB_DUPLICATE_DEVICE = $0000002A; // Two devices were discovered with the same name
|
|
{$EXTERNALSYM CM_PROB_DUPLICATE_DEVICE}
|
|
CM_PROB_FAILED_POST_START = $0000002B; // The drivers set the device state to failed
|
|
{$EXTERNALSYM CM_PROB_FAILED_POST_START}
|
|
CM_PROB_HALTED = $0000002C; // This device was failed post start via usermode
|
|
{$EXTERNALSYM CM_PROB_HALTED}
|
|
CM_PROB_PHANTOM = $0000002D; // The devinst currently exists only in the registry
|
|
{$EXTERNALSYM CM_PROB_PHANTOM}
|
|
CM_PROB_SYSTEM_SHUTDOWN = $0000002E; // The system is shutting down
|
|
{$EXTERNALSYM CM_PROB_SYSTEM_SHUTDOWN}
|
|
CM_PROB_HELD_FOR_EJECT = $0000002F; // The device is offline awaiting removal
|
|
{$EXTERNALSYM CM_PROB_HELD_FOR_EJECT}
|
|
CM_PROB_DRIVER_BLOCKED = $00000030; // One or more drivers is blocked from loading
|
|
{$EXTERNALSYM CM_PROB_DRIVER_BLOCKED}
|
|
CM_PROB_REGISTRY_TOO_LARGE = $00000031; // System hive has grown too large
|
|
{$EXTERNALSYM CM_PROB_REGISTRY_TOO_LARGE}
|
|
NUM_CM_PROB = $00000032;
|
|
{$EXTERNALSYM NUM_CM_PROB}
|
|
|
|
//
|
|
// Configuration Manager Global State Flags (returned by CM_Get_Global_State)
|
|
//
|
|
CM_GLOBAL_STATE_CAN_DO_UI = $00000001; // Can do UI?
|
|
{$EXTERNALSYM CM_GLOBAL_STATE_CAN_DO_UI}
|
|
CM_GLOBAL_STATE_ON_BIG_STACK = $00000002; // WINDOWS 95 ONLY
|
|
{$EXTERNALSYM CM_GLOBAL_STATE_ON_BIG_STACK}
|
|
CM_GLOBAL_STATE_SERVICES_AVAILABLE = $00000004; // CM APIs available?
|
|
{$EXTERNALSYM CM_GLOBAL_STATE_SERVICES_AVAILABLE}
|
|
CM_GLOBAL_STATE_SHUTTING_DOWN = $00000008; // CM shutting down
|
|
{$EXTERNALSYM CM_GLOBAL_STATE_SHUTTING_DOWN}
|
|
CM_GLOBAL_STATE_DETECTION_PENDING = $00000010; // detection pending
|
|
{$EXTERNALSYM CM_GLOBAL_STATE_DETECTION_PENDING}
|
|
|
|
//
|
|
// Device Instance status flags, returned by call to CM_Get_DevInst_Status
|
|
//
|
|
DN_ROOT_ENUMERATED = $00000001; // Was enumerated by ROOT
|
|
{$EXTERNALSYM DN_ROOT_ENUMERATED}
|
|
DN_DRIVER_LOADED = $00000002; // Has Register_Device_Driver
|
|
{$EXTERNALSYM DN_DRIVER_LOADED}
|
|
DN_ENUM_LOADED = $00000004; // Has Register_Enumerator
|
|
{$EXTERNALSYM DN_ENUM_LOADED}
|
|
DN_STARTED = $00000008; // Is currently configured
|
|
{$EXTERNALSYM DN_STARTED}
|
|
DN_MANUAL = $00000010; // Manually installed
|
|
{$EXTERNALSYM DN_MANUAL}
|
|
DN_NEED_TO_ENUM = $00000020; // May need reenumeration
|
|
{$EXTERNALSYM DN_NEED_TO_ENUM}
|
|
DN_NOT_FIRST_TIME = $00000040; // Has received a config
|
|
{$EXTERNALSYM DN_NOT_FIRST_TIME}
|
|
DN_HARDWARE_ENUM = $00000080; // Enum generates hardware ID
|
|
{$EXTERNALSYM DN_HARDWARE_ENUM}
|
|
DN_LIAR = $00000100; // Lied about can reconfig once
|
|
{$EXTERNALSYM DN_LIAR}
|
|
DN_HAS_MARK = $00000200; // Not CM_Create_DevInst lately
|
|
{$EXTERNALSYM DN_HAS_MARK}
|
|
DN_HAS_PROBLEM = $00000400; // Need device installer
|
|
{$EXTERNALSYM DN_HAS_PROBLEM}
|
|
DN_FILTERED = $00000800; // Is filtered
|
|
{$EXTERNALSYM DN_FILTERED}
|
|
DN_MOVED = $00001000; // Has been moved
|
|
{$EXTERNALSYM DN_MOVED}
|
|
DN_DISABLEABLE = $00002000; // Can be rebalanced
|
|
{$EXTERNALSYM DN_DISABLEABLE}
|
|
DN_REMOVABLE = $00004000; // Can be removed
|
|
{$EXTERNALSYM DN_REMOVABLE}
|
|
DN_PRIVATE_PROBLEM = $00008000; // Has a private problem
|
|
{$EXTERNALSYM DN_PRIVATE_PROBLEM}
|
|
DN_MF_PARENT = $00010000; // Multi function parent
|
|
{$EXTERNALSYM DN_MF_PARENT}
|
|
DN_MF_CHILD = $00020000; // Multi function child
|
|
{$EXTERNALSYM DN_MF_CHILD}
|
|
DN_WILL_BE_REMOVED = $00040000; // DevInst is being removed
|
|
{$EXTERNALSYM DN_WILL_BE_REMOVED}
|
|
|
|
//
|
|
// Windows 4 OPK2 Flags
|
|
//
|
|
DN_NOT_FIRST_TIMEE = $00080000; // S: Has received a config enumerate
|
|
{$EXTERNALSYM DN_NOT_FIRST_TIMEE}
|
|
DN_STOP_FREE_RES = $00100000; // S: When child is stopped, free resources
|
|
{$EXTERNALSYM DN_STOP_FREE_RES}
|
|
DN_REBAL_CANDIDATE = $00200000; // S: Don't skip during rebalance
|
|
{$EXTERNALSYM DN_REBAL_CANDIDATE}
|
|
DN_BAD_PARTIAL = $00400000; // S: This devnode's log_confs do not have same resources
|
|
{$EXTERNALSYM DN_BAD_PARTIAL}
|
|
DN_NT_ENUMERATOR = $00800000; // S: This devnode's is an NT enumerator
|
|
{$EXTERNALSYM DN_NT_ENUMERATOR}
|
|
DN_NT_DRIVER = $01000000; // S: This devnode's is an NT driver
|
|
{$EXTERNALSYM DN_NT_DRIVER}
|
|
//
|
|
// Windows 4.1 Flags
|
|
//
|
|
DN_NEEDS_LOCKING = $02000000; // S: Devnode need lock resume processing
|
|
{$EXTERNALSYM DN_NEEDS_LOCKING}
|
|
DN_ARM_WAKEUP = $04000000; // S: Devnode can be the wakeup device
|
|
{$EXTERNALSYM DN_ARM_WAKEUP}
|
|
DN_APM_ENUMERATOR = $08000000; // S: APM aware enumerator
|
|
{$EXTERNALSYM DN_APM_ENUMERATOR}
|
|
DN_APM_DRIVER = $10000000; // S: APM aware driver
|
|
{$EXTERNALSYM DN_APM_DRIVER}
|
|
DN_SILENT_INSTALL = $20000000; // S: Silent install
|
|
{$EXTERNALSYM DN_SILENT_INSTALL}
|
|
DN_NO_SHOW_IN_DM = $40000000; // S: No show in device manager
|
|
{$EXTERNALSYM DN_NO_SHOW_IN_DM}
|
|
DN_BOOT_LOG_PROB = $80000000; // S: Had a problem during preassignment of boot log conf
|
|
{$EXTERNALSYM DN_BOOT_LOG_PROB}
|
|
|
|
//
|
|
// Windows NT Flags
|
|
//
|
|
// These are overloaded on top of unused Win 9X flags
|
|
//
|
|
//DN_LIAR = $00000100; // Lied about can reconfig once
|
|
DN_NEED_RESTART = DN_LIAR; // System needs to be restarted for this Devnode to work properly
|
|
{$EXTERNALSYM DN_NEED_RESTART}
|
|
//DN_NOT_FIRST_TIME = $00000040; // Has Register_Enumerator
|
|
DN_DRIVER_BLOCKED = DN_NOT_FIRST_TIME; // One or more drivers are blocked from loading for this Devnode
|
|
{$EXTERNALSYM DN_DRIVER_BLOCKED}
|
|
//DN_MOVED = $00001000; // Has been moved
|
|
DN_LEGACY_DRIVER = DN_MOVED; // This device is using a legacy driver
|
|
{$EXTERNALSYM DN_LEGACY_DRIVER}
|
|
|
|
DN_CHANGEABLE_FLAGS = DWORD(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);
|
|
{$EXTERNALSYM DN_CHANGEABLE_FLAGS}
|
|
|
|
//
|
|
// 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.
|
|
//
|
|
LCPRI_FORCECONFIG = $00000000; // Coming from a forced config
|
|
{$EXTERNALSYM LCPRI_FORCECONFIG}
|
|
LCPRI_BOOTCONFIG = $00000001; // Coming from a boot config
|
|
{$EXTERNALSYM LCPRI_BOOTCONFIG}
|
|
LCPRI_DESIRED = $00002000; // Preferable (better performance)
|
|
{$EXTERNALSYM LCPRI_DESIRED}
|
|
LCPRI_NORMAL = $00003000; // Workable (acceptable performance)
|
|
{$EXTERNALSYM LCPRI_NORMAL}
|
|
LCPRI_LASTBESTCONFIG = $00003FFF; // CM only--do not use
|
|
{$EXTERNALSYM LCPRI_LASTBESTCONFIG}
|
|
LCPRI_SUBOPTIMAL = $00005000; // Not desired, but will work
|
|
{$EXTERNALSYM LCPRI_SUBOPTIMAL}
|
|
LCPRI_LASTSOFTCONFIG = $00007FFF; // CM only--do not use
|
|
{$EXTERNALSYM LCPRI_LASTSOFTCONFIG}
|
|
LCPRI_RESTART = $00008000; // Need to restart
|
|
{$EXTERNALSYM LCPRI_RESTART}
|
|
LCPRI_REBOOT = $00009000; // Need to reboot
|
|
{$EXTERNALSYM LCPRI_REBOOT}
|
|
LCPRI_POWEROFF = $0000A000; // Need to shutdown/power-off
|
|
{$EXTERNALSYM LCPRI_POWEROFF}
|
|
LCPRI_HARDRECONFIG = $0000C000; // Need to change a jumper
|
|
{$EXTERNALSYM LCPRI_HARDRECONFIG}
|
|
LCPRI_HARDWIRED = $0000E000; // Cannot be changed
|
|
{$EXTERNALSYM LCPRI_HARDWIRED}
|
|
LCPRI_IMPOSSIBLE = $0000F000; // Impossible configuration
|
|
{$EXTERNALSYM LCPRI_IMPOSSIBLE}
|
|
LCPRI_DISABLED = $0000FFFF; // Disabled configuration
|
|
{$EXTERNALSYM LCPRI_DISABLED}
|
|
MAX_LCPRI = $0000FFFF; // Maximum known LC Priority
|
|
{$EXTERNALSYM MAX_LCPRI}
|
|
|
|
implementation
|
|
|
|
end.
|
|
|