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
--- 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)
--- 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,
--- 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);
--- 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;