- Add registry property constants. - Finish CM_Set_DevNode_Registry_Property_ExW. Modified: trunk/reactos/include/wine/cfgmgr32.h Modified: trunk/reactos/lib/setupapi/cfgmgr.c Modified: trunk/reactos/services/umpnpmgr/umpnpmgr.c Modified: trunk/reactos/w32api/include/ddk/cfgmgr32.h _____
Modified: trunk/reactos/include/wine/cfgmgr32.h --- trunk/reactos/include/wine/cfgmgr32.h 2005-08-03 19:34:29 UTC (rev 17029) +++ trunk/reactos/include/wine/cfgmgr32.h 2005-08-03 20:10:32 UTC (rev 17030) @@ -95,7 +95,36 @@
#define CM_SET_DEVINST_PROBLEM_OVERRIDE CM_SET_DEVNODE_PROBLEM_OVERRIDE #define CM_SET_DEVINST_PROBLEM_BITS CM_SET_DEVNODE_PROBLEM_BITS
+/* Properties for CM_Get/Set_DevNode_Registry_Property[_Ex]A/W */ +#define CM_DRP_DEVICEDESC 0x00000001 +#define CM_DRP_HARDWAREID 0x00000002 +#define CM_DRP_COMPATIBLEIDS 0x00000003 +#define CM_DRP_UNUSED0 0x00000004 +#define CM_DRP_SERVICE 0x00000005 +#define CM_DRP_UNUSED1 0x00000006 +#define CM_DRP_UNUSED2 0x00000007 +#define CM_DRP_CLASS 0x00000008 +#define CM_DRP_CLASSGUID 0x00000009 +#define CM_DRP_DRIVER 0x0000000A +#define CM_DRP_CONFIGFLAGS 0x0000000B +#define CM_DRP_MFG 0x0000000C +#define CM_DRP_FRIENDLYNAME 0x0000000D +#define CM_DRP_LOCATION_INFORMATION 0x0000000E +#define CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME 0x0000000F +#define CM_DRP_CAPABILITIES 0x00000010 +#define CM_DRP_UI_NUMBER 0x00000011 +#define CM_DRP_UPPERFILTERS 0x00000012 +#define CM_DRP_LOWERFILTERS 0x00000013 +#define CM_DRP_BUSTYPEGUID 0x00000014 +#define CM_DRP_LEGACYBUSTYPE 0x00000015 +#define CM_DRP_BUSNUMBER 0x00000016 +#define CM_DRP_ENUMERATOR_NAME 0x00000017
+#define CM_DRP_MIN 0x00000001 +#define CM_DRP_MAX 0x00000017 + + + CONFIGRET WINAPI CM_Connect_MachineA( PCSTR, PHMACHINE ); CONFIGRET WINAPI CM_Connect_MachineW( PCWSTR, PHMACHINE ); #define CM_Connect_Machine WINELIB_NAME_AW(CM_Connect_Machine) _____
Modified: trunk/reactos/lib/setupapi/cfgmgr.c --- trunk/reactos/lib/setupapi/cfgmgr.c 2005-08-03 19:34:29 UTC (rev 17029) +++ trunk/reactos/lib/setupapi/cfgmgr.c 2005-08-03 20:10:32 UTC (rev 17030) @@ -440,7 +440,7 @@
if (dnDevInst == 0) return CR_INVALID_DEVNODE;
- if (ulProperty < 1 /* CM_DRP_MIN */ || ulProperty > 0x17 /* CM_DRP_MAX */) + if (ulProperty < CM_DRP_MIN || ulProperty > CM_DRP_MAX) return CR_INVALID_PROPERTY;
/* pulRegDataType is optional */ @@ -1356,7 +1356,7 @@ if (dnDevInst == 0) return CR_INVALID_DEVNODE;
- if (ulProperty < 1 /* CM_DRP_MIN */ || ulProperty > 0x17 /* CM_DRP_MAX */) + if (ulProperty < CM_DRP_MIN || ulProperty > CM_DRP_MAX) return CR_INVALID_PROPERTY;
if (Buffer != NULL && ulLength == 0) @@ -1385,8 +1385,64 @@ if (lpDevInst == NULL) return CR_INVALID_DEVNODE;
- ulType = REG_SZ; /* FIXME */ + switch (ulProperty) + { + case CM_DRP_DEVICEDESC: + ulType = REG_SZ; + break;
+ case CM_DRP_HARDWAREID: + ulType = REG_MULTI_SZ; + break; + + case CM_DRP_COMPATIBLEIDS: + ulType = REG_MULTI_SZ; + break; + + case CM_DRP_SERVICE: + ulType = REG_SZ; + break; + + case CM_DRP_CLASS: + ulType = REG_SZ; + break; + + case CM_DRP_CLASSGUID: + ulType = REG_SZ; + break; + + case CM_DRP_DRIVER: + ulType = REG_SZ; + break; + + case CM_DRP_CONFIGFLAGS: + ulType = REG_DWORD; + break; + + case CM_DRP_MFG: + ulType = REG_SZ; + break; + + case CM_DRP_FRIENDLYNAME: + ulType = REG_SZ; + break; + + case CM_DRP_LOCATION_INFORMATION: + ulType = REG_SZ; + break; + + case CM_DRP_UPPERFILTERS: + ulType = REG_MULTI_SZ; + break; + + case CM_DRP_LOWERFILTERS: + ulType = REG_MULTI_SZ; + break; + + default: + return CR_INVALID_PROPERTY; + } + return PNP_SetDeviceRegProp(BindingHandle, lpDevInst, ulProperty, _____
Modified: trunk/reactos/services/umpnpmgr/umpnpmgr.c --- trunk/reactos/services/umpnpmgr/umpnpmgr.c 2005-08-03 19:34:29 UTC (rev 17029) +++ trunk/reactos/services/umpnpmgr/umpnpmgr.c 2005-08-03 20:10:32 UTC (rev 17030) @@ -345,20 +345,104 @@
unsigned long Flags) { CONFIGRET ret = CR_SUCCESS; -// ULONG Data; + LPWSTR lpValueName = NULL; + HKEY hKey = 0;
- DPRINT1("PNP_SetDeviceRegProp() called\n"); + DPRINT("PNP_SetDeviceRegProp() called\n");
- DPRINT1("DeviceId: %S\n", DeviceId); + DPRINT("DeviceId: %S\n", DeviceId); + DPRINT("Property: %lu\n", Property); + DPRINT("DataType: %lu\n", DataType); + DPRINT("Length: %lu\n", Length);
- DPRINT1("Property: %lu\n", Property); - DPRINT1("DataType: %lu\n", DataType); - DPRINT1("Length: %lu\n", Length); + switch (Property) + { + case CM_DRP_DEVICEDESC: + lpValueName = L"DeviceDesc"; + break;
- DPRINT1("Data: %lx\n", *((PULONG)Buffer)); + case CM_DRP_HARDWAREID: + lpValueName = L"HardwareID"; + break;
- DPRINT1("PNP_SetDeviceRegProp() done (returns %lx)\n", ret); + case CM_DRP_COMPATIBLEIDS: + lpValueName = L"CompatibleIDs"; + break;
+ case CM_DRP_SERVICE: + lpValueName = L"Service"; + break; + + case CM_DRP_CLASS: + lpValueName = L"Class"; + break; + + case CM_DRP_CLASSGUID: + lpValueName = L"ClassGUID"; + break; + + case CM_DRP_DRIVER: + lpValueName = L"Driver"; + break; + + case CM_DRP_CONFIGFLAGS: + lpValueName = L"ConfigFlags"; + break; + + case CM_DRP_MFG: + lpValueName = L"Mfg"; + break; + + case CM_DRP_FRIENDLYNAME: + lpValueName = L"FriendlyName"; + break; + + case CM_DRP_LOCATION_INFORMATION: + lpValueName = L"LocationInformation"; + break; + + case CM_DRP_UPPERFILTERS: + lpValueName = L"UpperFilters"; + break; + + case CM_DRP_LOWERFILTERS: + lpValueName = L"LowerFilters"; + break; + + default: + return CR_INVALID_PROPERTY; + } + + DPRINT("Value name: %S\n", lpValueName); + + if (RegOpenKeyExW(hEnumKey, + DeviceId, + 0, + KEY_ALL_ACCESS, + &hKey)) + return CR_INVALID_DEVNODE; + + if (Length == 0) + { + if (RegDeleteValueW(hKey, + lpValueName)) + ret = CR_REGISTRY_ERROR; + } + else + { + if (RegSetValueExW(hKey, + lpValueName, + 0, + DataType, + Buffer, + Length)) + ret = CR_REGISTRY_ERROR; + } + + RegCloseKey(hKey); + + DPRINT("PNP_SetDeviceRegProp() done (returns %lx)\n", ret); + return ret; }
@@ -374,10 +458,106 @@ DWORD Flags) { CONFIGRET ret = CR_SUCCESS; + LPWSTR lpValueName = NULL; ULONG Data;
DPRINT1("PNP_GetDeviceRegProp() called\n");
+ switch (Property) + { + case CM_DRP_DEVICEDESC: + lpValueName = L"DeviceDesc"; + break; + + case CM_DRP_HARDWAREID: + lpValueName = L"HardwareID"; + break; + + case CM_DRP_COMPATIBLEIDS: + lpValueName = L"CompatibleIDs"; + break; + + case CM_DRP_SERVICE: + lpValueName = L"Service"; + break; + + case CM_DRP_CLASS: + lpValueName = L"Class"; + break; + + case CM_DRP_CLASSGUID: + lpValueName = L"ClassGUID"; + break; + + case CM_DRP_DRIVER: + lpValueName = L"Driver"; + break; + + case CM_DRP_CONFIGFLAGS: + lpValueName = L"ConfigFlags"; + break; + + case CM_DRP_MFG: + lpValueName = L"Mfg"; + break; + + case CM_DRP_FRIENDLYNAME: + lpValueName = L"FriendlyName"; + break; + + case CM_DRP_LOCATION_INFORMATION: + lpValueName = L"LocationInformation"; + break; + + case CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME: + lpValueName = NULL; + break; + + case CM_DRP_CAPABILITIES: + lpValueName = L"Capabilities"; + break; + + case CM_DRP_UI_NUMBER: + break; + + case CM_DRP_UPPERFILTERS: + lpValueName = L"UpperFilters"; + break; + + case CM_DRP_LOWERFILTERS: + lpValueName = L"LowerFilters"; + break; + + case CM_DRP_BUSTYPEGUID: + break; + + case CM_DRP_LEGACYBUSTYPE: + break; + + case CM_DRP_BUSNUMBER: + break; + + case CM_DRP_ENUMERATOR_NAME: + break; + + default: + return CR_INVALID_PROPERTY; + } + + DPRINT1("Value name: %S\n", lpValueName); + + if (lpValueName) + { + /* Retrieve information from the Registry */ + + } + else + { + /* Retrieve information from the Device Node */ + + } + + Data = 0xbaadf00d; memcpy(Buffer, &Data, sizeof(ULONG)); *Length = sizeof(ULONG); _____
Modified: trunk/reactos/w32api/include/ddk/cfgmgr32.h --- trunk/reactos/w32api/include/ddk/cfgmgr32.h 2005-08-03 19:34:29 UTC (rev 17029) +++ trunk/reactos/w32api/include/ddk/cfgmgr32.h 2005-08-03 20:10:32 UTC (rev 17030) @@ -197,7 +197,34 @@
#define CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES 0x00000001 #define CM_GET_DEVICE_INTERFACE_LIST_BITS 0x00000001
+#define CM_DRP_DEVICEDESC 0x00000001 +#define CM_DRP_HARDWAREID 0x00000002 +#define CM_DRP_COMPATIBLEIDS 0x00000003 +#define CM_DRP_UNUSED0 0x00000004 +#define CM_DRP_SERVICE 0x00000005 +#define CM_DRP_UNUSED1 0x00000006 +#define CM_DRP_UNUSED2 0x00000007 +#define CM_DRP_CLASS 0x00000008 +#define CM_DRP_CLASSGUID 0x00000009 +#define CM_DRP_DRIVER 0x0000000A +#define CM_DRP_CONFIGFLAGS 0x0000000B +#define CM_DRP_MFG 0x0000000C +#define CM_DRP_FRIENDLYNAME 0x0000000D +#define CM_DRP_LOCATION_INFORMATION 0x0000000E +#define CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME 0x0000000F +#define CM_DRP_CAPABILITIES 0x00000010 +#define CM_DRP_UI_NUMBER 0x00000011 +#define CM_DRP_UPPERFILTERS 0x00000012 +#define CM_DRP_LOWERFILTERS 0x00000013 +#define CM_DRP_BUSTYPEGUID 0x00000014 +#define CM_DRP_LEGACYBUSTYPE 0x00000015 +#define CM_DRP_BUSNUMBER 0x00000016 +#define CM_DRP_ENUMERATOR_NAME 0x00000017
+#define CM_DRP_MIN 0x00000001 +#define CM_DRP_MAX 0x00000017 + + typedef struct BusNumber_Des_s { DWORD BUSD_Count; DWORD BUSD_Type;