| 1 | unit CfgMgr;
|
|---|
| 2 |
|
|---|
| 3 | {$MODE Delphi}
|
|---|
| 4 |
|
|---|
| 5 | interface
|
|---|
| 6 |
|
|---|
| 7 | uses
|
|---|
| 8 | LCLIntf{$IFDEF Windows}, Windows{$ENDIF};
|
|---|
| 9 |
|
|---|
| 10 | {$IFDEF Windows}
|
|---|
| 11 | const
|
|---|
| 12 | // Flags controlling what is included in the device information set built
|
|---|
| 13 | // by SetupDiGetClassDevs
|
|---|
| 14 | DIGCF_DEFAULT = $00000001; // only valid with DIGCF_DEVICEINTERFACE
|
|---|
| 15 | DIGCF_PRESENT = $00000002;
|
|---|
| 16 | DIGCF_ALLCLASSES = $00000004;
|
|---|
| 17 | DIGCF_PROFILE = $00000008;
|
|---|
| 18 | DIGCF_DEVICEINTERFACE = $00000010;
|
|---|
| 19 |
|
|---|
| 20 | // Device registry property codes
|
|---|
| 21 | // (Codes marked as read-only (R) may only be used for
|
|---|
| 22 | // SetupDiGetDeviceRegistryProperty)
|
|---|
| 23 | SPDRP_DEVICEDESC = $00000000; // DeviceDesc (R/W)
|
|---|
| 24 | SPDRP_HARDWAREID = $00000001; // HardwareID (R/W)
|
|---|
| 25 | SPDRP_COMPATIBLEIDS = $00000002; // CompatibleIDs (R/W)
|
|---|
| 26 | SPDRP_UNUSED0 = $00000003; // unused
|
|---|
| 27 | SPDRP_SERVICE = $00000004; // Service (R/W)
|
|---|
| 28 | SPDRP_UNUSED1 = $00000005; // unused
|
|---|
| 29 | SPDRP_UNUSED2 = $00000006; // unused
|
|---|
| 30 | SPDRP_CLASS = $00000007; // Class (R--tied to ClassGUID)
|
|---|
| 31 | SPDRP_CLASSGUID = $00000008; // ClassGUID (R/W)
|
|---|
| 32 | SPDRP_DRIVER = $00000009; // Driver (R/W)
|
|---|
| 33 | SPDRP_CONFIGFLAGS = $0000000A; // ConfigFlags (R/W)
|
|---|
| 34 | SPDRP_MFG = $0000000B; // Mfg (R/W)
|
|---|
| 35 | SPDRP_FRIENDLYNAME = $0000000C; // FriendlyName (R/W)
|
|---|
| 36 | SPDRP_LOCATION_INFORMATION = $0000000D; // LocationInformation (R/W)
|
|---|
| 37 | SPDRP_PHYSICAL_DEVICE_OBJECT_NAME = $0000000E; // PhysicalDeviceObjectName (R)
|
|---|
| 38 | SPDRP_CAPABILITIES = $0000000F; // Capabilities (R)
|
|---|
| 39 | SPDRP_UI_NUMBER = $00000010; // UiNumber (R)
|
|---|
| 40 | SPDRP_UPPERFILTERS = $00000011; // UpperFilters (R/W)
|
|---|
| 41 | SPDRP_LOWERFILTERS = $00000012; // LowerFilters (R/W)
|
|---|
| 42 | SPDRP_BUSTYPEGUID = $00000013; // BusTypeGUID (R)
|
|---|
| 43 | SPDRP_LEGACYBUSTYPE = $00000014; // LegacyBusType (R)
|
|---|
| 44 | SPDRP_BUSNUMBER = $00000015; // BusNumber (R)
|
|---|
| 45 | SPDRP_ENUMERATOR_NAME = $00000016; // Enumerator Name (R)
|
|---|
| 46 | SPDRP_SECURITY = $00000017; // Security (R/W, binary form)
|
|---|
| 47 | SPDRP_SECURITY_SDS = $00000018; // Security (W, SDS form)
|
|---|
| 48 | SPDRP_DEVTYPE = $00000019; // Device Type (R/W)
|
|---|
| 49 | SPDRP_EXCLUSIVE = $0000001A; // Device is exclusive-access (R/W)
|
|---|
| 50 | SPDRP_CHARACTERISTICS = $0000001B; // Device Characteristics (R/W)
|
|---|
| 51 | SPDRP_ADDRESS = $0000001C; // Device Address (R)
|
|---|
| 52 | SPDRP_UI_NUMBER_DESC_FORMAT = $0000001E; // UiNumberDescFormat (R/W)
|
|---|
| 53 | SPDRP_MAXIMUM_PROPERTY = $0000001F; // Upper bound on ordinals
|
|---|
| 54 |
|
|---|
| 55 | //
|
|---|
| 56 | // Configuration Manager return status codes
|
|---|
| 57 | //
|
|---|
| 58 | CR_SUCCESS = $00000000;
|
|---|
| 59 | CR_DEFAULT = $00000001;
|
|---|
| 60 | CR_OUT_OF_MEMORY = $00000002;
|
|---|
| 61 | CR_INVALID_POINTER = $00000003;
|
|---|
| 62 | CR_INVALID_FLAG = $00000004;
|
|---|
| 63 | CR_INVALID_DEVNODE = $00000005;
|
|---|
| 64 | CR_INVALID_DEVINST = CR_INVALID_DEVNODE;
|
|---|
| 65 | CR_INVALID_RES_DES = $00000006;
|
|---|
| 66 | CR_INVALID_LOG_CONF = $00000007;
|
|---|
| 67 | CR_INVALID_ARBITRATOR = $00000008;
|
|---|
| 68 | CR_INVALID_NODELIST = $00000009;
|
|---|
| 69 | CR_DEVNODE_HAS_REQS = $0000000A;
|
|---|
| 70 | CR_DEVINST_HAS_REQS = CR_DEVNODE_HAS_REQS;
|
|---|
| 71 | CR_INVALID_RESOURCEID = $0000000B;
|
|---|
| 72 | CR_DLVXD_NOT_FOUND = $0000000C; // WIN 95 ONLY
|
|---|
| 73 | CR_NO_SUCH_DEVNODE = $0000000D;
|
|---|
| 74 | CR_NO_SUCH_DEVINST = CR_NO_SUCH_DEVNODE;
|
|---|
| 75 | CR_NO_MORE_LOG_CONF = $0000000E;
|
|---|
| 76 | CR_NO_MORE_RES_DES = $0000000F;
|
|---|
| 77 | CR_ALREADY_SUCH_DEVNODE = $00000010;
|
|---|
| 78 | CR_ALREADY_SUCH_DEVINST = CR_ALREADY_SUCH_DEVNODE;
|
|---|
| 79 | CR_INVALID_RANGE_LIST = $00000011;
|
|---|
| 80 | CR_INVALID_RANGE = $00000012;
|
|---|
| 81 | CR_FAILURE = $00000013;
|
|---|
| 82 | CR_NO_SUCH_LOGICAL_DEV = $00000014;
|
|---|
| 83 | CR_CREATE_BLOCKED = $00000015;
|
|---|
| 84 | CR_NOT_SYSTEM_VM = $00000016; // WIN 95 ONLY
|
|---|
| 85 | CR_REMOVE_VETOED = $00000017;
|
|---|
| 86 | CR_APM_VETOED = $00000018;
|
|---|
| 87 | CR_INVALID_LOAD_TYPE = $00000019;
|
|---|
| 88 | CR_BUFFER_SMALL = $0000001A;
|
|---|
| 89 | CR_NO_ARBITRATOR = $0000001B;
|
|---|
| 90 | CR_NO_REGISTRY_HANDLE = $0000001C;
|
|---|
| 91 | CR_REGISTRY_ERROR = $0000001D;
|
|---|
| 92 | CR_INVALID_DEVICE_ID = $0000001E;
|
|---|
| 93 | CR_INVALID_DATA = $0000001F;
|
|---|
| 94 | CR_INVALID_API = $00000020;
|
|---|
| 95 | CR_DEVLOADER_NOT_READY = $00000021;
|
|---|
| 96 | CR_NEED_RESTART = $00000022;
|
|---|
| 97 | CR_NO_MORE_HW_PROFILES = $00000023;
|
|---|
| 98 | CR_DEVICE_NOT_THERE = $00000024;
|
|---|
| 99 | CR_NO_SUCH_VALUE = $00000025;
|
|---|
| 100 | CR_WRONG_TYPE = $00000026;
|
|---|
| 101 | CR_INVALID_PRIORITY = $00000027;
|
|---|
| 102 | CR_NOT_DISABLEABLE = $00000028;
|
|---|
| 103 | CR_FREE_RESOURCES = $00000029;
|
|---|
| 104 | CR_QUERY_VETOED = $0000002A;
|
|---|
| 105 | CR_CANT_SHARE_IRQ = $0000002B;
|
|---|
| 106 | CR_NO_DEPENDENT = $0000002C;
|
|---|
| 107 | CR_SAME_RESOURCES = $0000002D;
|
|---|
| 108 | CR_NO_SUCH_REGISTRY_KEY = $0000002E;
|
|---|
| 109 | CR_INVALID_MACHINENAME = $0000002F; // NT ONLY
|
|---|
| 110 | CR_REMOTE_COMM_FAILURE = $00000030; // NT ONLY
|
|---|
| 111 | CR_MACHINE_UNAVAILABLE = $00000031; // NT ONLY
|
|---|
| 112 | CR_NO_CM_SERVICES = $00000032; // NT ONLY
|
|---|
| 113 | CR_ACCESS_DENIED = $00000033; // NT ONLY
|
|---|
| 114 | CR_CALL_NOT_IMPLEMENTED = $00000034;
|
|---|
| 115 | CR_INVALID_PROPERTY = $00000035;
|
|---|
| 116 | CR_DEVICE_INTERFACE_ACTIVE = $00000036;
|
|---|
| 117 | CR_NO_SUCH_DEVICE_INTERFACE = $00000037;
|
|---|
| 118 | CR_INVALID_REFERENCE_STRING = $00000038;
|
|---|
| 119 | CR_INVALID_CONFLICT_LIST = $00000039;
|
|---|
| 120 | CR_INVALID_INDEX = $0000003A;
|
|---|
| 121 | CR_INVALID_STRUCTURE_SIZE = $0000003B;
|
|---|
| 122 | NUM_CR_RESULTS = $0000003C;
|
|---|
| 123 |
|
|---|
| 124 | //
|
|---|
| 125 | // Logical Config Flags (specified in call to CM_Get_First_Log_Conf
|
|---|
| 126 | //
|
|---|
| 127 | BASIC_LOG_CONF = $00000000; // Specifies the req list.
|
|---|
| 128 | FILTERED_LOG_CONF = $00000001; // Specifies the filtered req list.
|
|---|
| 129 | ALLOC_LOG_CONF = $00000002; // Specifies the Alloc Element.
|
|---|
| 130 | BOOT_LOG_CONF = $00000003; // Specifies the RM Alloc Element.
|
|---|
| 131 | FORCED_LOG_CONF = $00000004; // Specifies the Forced Log Conf
|
|---|
| 132 | OVERRIDE_LOG_CONF = $00000005; // Specifies the Override req list.
|
|---|
| 133 | NUM_LOG_CONF = $00000006; // Number of Log Conf type
|
|---|
| 134 | LOG_CONF_BITS = $00000007; // The bits of the log conf type.
|
|---|
| 135 |
|
|---|
| 136 | //
|
|---|
| 137 | // Resource types
|
|---|
| 138 | //
|
|---|
| 139 | ResType_All = $00000000; // Return all resource types
|
|---|
| 140 | ResType_None = $00000000; // Arbitration always succeeded
|
|---|
| 141 | ResType_Mem = $00000001; // Physical address resource
|
|---|
| 142 | ResType_IO = $00000002; // Physical I/O address resource
|
|---|
| 143 | ResType_DMA = $00000003; // DMA channels resource
|
|---|
| 144 | ResType_IRQ = $00000004; // IRQ resource
|
|---|
| 145 | ResType_DoNotUse = $00000005; // Used as spacer to sync subsequent ResTypes w/NT
|
|---|
| 146 | ResType_BusNumber = $00000006; // bus number resource
|
|---|
| 147 | ResType_MAX = $00000006; // Maximum known (arbitrated) ResType
|
|---|
| 148 | ResType_Ignored_Bit = $00008000; // Ignore this resource
|
|---|
| 149 | ResType_ClassSpecific = $0000FFFF; // class-specific resource
|
|---|
| 150 | ResType_Reserved = $00008000; // reserved for internal use
|
|---|
| 151 | ResType_DevicePrivate = $00008001; // device private data
|
|---|
| 152 | ResType_PcCardConfig = $00008002; // PC Card configuration data
|
|---|
| 153 | ResType_MfCardConfig = $00008003; // MF Card configuration data
|
|---|
| 154 |
|
|---|
| 155 |
|
|---|
| 156 | type
|
|---|
| 157 | HDEVINFO = DWORD;
|
|---|
| 158 | SP_DEVINFO_DATA = packed record
|
|---|
| 159 | cbSize:DWORD;
|
|---|
| 160 | ClassGuid:TGUID;
|
|---|
| 161 | DevInst:DWORD;
|
|---|
| 162 | Reserved:pointer;
|
|---|
| 163 | end;
|
|---|
| 164 | PSP_DEVINFO_DATA = ^SP_DEVINFO_DATA;
|
|---|
| 165 | DEVINST = DWORD;
|
|---|
| 166 | PDEVINST = ^DEVINST;
|
|---|
| 167 | CONFIGRET = DWORD;
|
|---|
| 168 | LOG_CONF = DWORD;
|
|---|
| 169 | PLOG_CONF = ^LOG_CONF;
|
|---|
| 170 | RES_DES = DWORD;
|
|---|
| 171 | PRES_DES = ^RES_DES;
|
|---|
| 172 | RESOURCEID = ULONG;
|
|---|
| 173 | PRESOURCEID = ^RESOURCEID;
|
|---|
| 174 | IO_DES = packed record
|
|---|
| 175 | IOD_Count:DWORD; // number of IO_RANGE structs in IO_RESOURCE
|
|---|
| 176 | IOD_Type:DWORD; // size (in bytes) of IO_RANGE (IOType_Range)
|
|---|
| 177 | IOD_Alloc_Base:LONGLONG; // base of allocated port range
|
|---|
| 178 | IOD_Alloc_End:LONGLONG; // end of allocated port range
|
|---|
| 179 | IOD_DesFlags:DWORD; // flags relating to allocated port range
|
|---|
| 180 | end;
|
|---|
| 181 | PIO_DES = ^IO_DES;
|
|---|
| 182 | IO_RANGE = packed record
|
|---|
| 183 | IOR_Align:LONGLONG; // mask for base alignment
|
|---|
| 184 | IOR_nPorts:DWORD; // number of ports
|
|---|
| 185 | IOR_Min:LONGLONG; // minimum port address
|
|---|
| 186 | IOR_Max:LONGLONG; // maximum port address
|
|---|
| 187 | IOR_RangeFlags:DWORD; // flags for this port range
|
|---|
| 188 | IOR_Alias:LONGLONG; // multiplier that generates aliases for port(s)
|
|---|
| 189 | end;
|
|---|
| 190 | PIO_RANGE = ^IO_RANGE;
|
|---|
| 191 | IO_RESOURCE = packed record
|
|---|
| 192 | IO_Header:IO_DES; // info about I/O port range list
|
|---|
| 193 | IO_Data:array[0..0] of IO_RANGE; // list of I/O port ranges
|
|---|
| 194 | end;
|
|---|
| 195 | PIO_RESOURCE = ^IO_RESOURCE;
|
|---|
| 196 |
|
|---|
| 197 | function SetupDiGetClassDevs(
|
|---|
| 198 | ClassGuid:PGUID;
|
|---|
| 199 | Enumerator:PChar;
|
|---|
| 200 | hwndParent:HWND;
|
|---|
| 201 | Flags:DWORD):HDEVINFO; stdcall;
|
|---|
| 202 |
|
|---|
| 203 | function SetupDiEnumDeviceInfo(
|
|---|
| 204 | DeviceInfoSet:HDEVINFO;
|
|---|
| 205 | MemberIndex:DWORD;
|
|---|
| 206 | DeviceInfoData:PSP_DEVINFO_DATA):BOOL; stdcall;
|
|---|
| 207 |
|
|---|
| 208 | function SetupDiGetDeviceRegistryProperty(
|
|---|
| 209 | DeviceInfoSet:HDEVINFO;
|
|---|
| 210 | DeviceInfoData:PSP_DEVINFO_DATA;
|
|---|
| 211 | PropertyId:DWORD;
|
|---|
| 212 | PropertyRegDataType:PDWORD;
|
|---|
| 213 | PropertyBuffer:pointer;
|
|---|
| 214 | PropertyBufferSize:DWORD;
|
|---|
| 215 | RequiredSize:PDWORD):BOOL; stdcall;
|
|---|
| 216 |
|
|---|
| 217 | function SetupDiDestroyDeviceInfoList(
|
|---|
| 218 | DeviceInfoSet:HDEVINFO):BOOL; stdcall;
|
|---|
| 219 |
|
|---|
| 220 | function CM_Get_DevNode_Status(
|
|---|
| 221 | pulStatus:PULONG;
|
|---|
| 222 | pulProblemNumber:PULONG;
|
|---|
| 223 | dnDevInst:DEVINST;
|
|---|
| 224 | ulFlags:ULONG):CONFIGRET; stdcall;
|
|---|
| 225 |
|
|---|
| 226 | function CM_Get_First_Log_Conf(
|
|---|
| 227 | plcLogConf:PLOG_CONF;
|
|---|
| 228 | dnDevInst:DEVINST;
|
|---|
| 229 | ulFlags:ULONG):CONFIGRET; stdcall;
|
|---|
| 230 |
|
|---|
| 231 | function CM_Get_Next_Res_Des(
|
|---|
| 232 | prdResDes:PRES_DES;
|
|---|
| 233 | rdResDes:RES_DES;
|
|---|
| 234 | ForResource:RESOURCEID;
|
|---|
| 235 | pResourceID:PRESOURCEID;
|
|---|
| 236 | ulFlags:ULONG):CONFIGRET; stdcall;
|
|---|
| 237 |
|
|---|
| 238 | function CM_Get_Res_Des_Data(
|
|---|
| 239 | rdResDes:RES_DES;
|
|---|
| 240 | Buffer:pointer;
|
|---|
| 241 | BufferLen:ULONG;
|
|---|
| 242 | ulFlags:ULONG):CONFIGRET; stdcall;
|
|---|
| 243 |
|
|---|
| 244 | function CM_Free_Log_Conf_Handle(
|
|---|
| 245 | lcLogConf:LOG_CONF):CONFIGRET; stdcall;
|
|---|
| 246 |
|
|---|
| 247 | {$ENDIF}
|
|---|
| 248 |
|
|---|
| 249 | implementation
|
|---|
| 250 |
|
|---|
| 251 | {$IFDEF Windows}
|
|---|
| 252 |
|
|---|
| 253 | const
|
|---|
| 254 | setupapi = 'setupapi.dll';
|
|---|
| 255 | cfgmgr32 = 'cfgmgr32.dll';
|
|---|
| 256 |
|
|---|
| 257 | function SetupDiGetClassDevs; external setupapi name 'SetupDiGetClassDevsA';
|
|---|
| 258 | function SetupDiEnumDeviceInfo; external setupapi name 'SetupDiEnumDeviceInfo';
|
|---|
| 259 | function SetupDiGetDeviceRegistryProperty; external setupapi name 'SetupDiGetDeviceRegistryPropertyA';
|
|---|
| 260 | function SetupDiDestroyDeviceInfoList; external setupapi name 'SetupDiDestroyDeviceInfoList';
|
|---|
| 261 |
|
|---|
| 262 | function CM_Get_DevNode_Status; external cfgmgr32 name 'CM_Get_DevNode_Status';
|
|---|
| 263 | function CM_Get_First_Log_Conf; external cfgmgr32 name 'CM_Get_First_Log_Conf';
|
|---|
| 264 | function CM_Get_Next_Res_Des; external cfgmgr32 name 'CM_Get_Next_Res_Des';
|
|---|
| 265 | function CM_Get_Res_Des_Data; external cfgmgr32 name 'CM_Get_Res_Des_Data';
|
|---|
| 266 | function CM_Free_Log_Conf_Handle; external cfgmgr32 name 'CM_Free_Log_Conf_Handle';
|
|---|
| 267 |
|
|---|
| 268 | {$ENDIF}
|
|---|
| 269 |
|
|---|
| 270 | end.
|
|---|