- Add registry property constants.

- Finish CM_Set_DevNode_Registry_Property_ExW.

svn path=/trunk/; revision=17030
This commit is contained in:
Eric Kohl 2005-08-03 20:10:32 +00:00
parent 1bbf906bf4
commit f86b5b132c
4 changed files with 303 additions and 11 deletions

View file

@ -95,6 +95,35 @@ DECL_WINELIB_CFGMGR32_TYPE_AW(DEVINSTID)
#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 );

View file

@ -440,7 +440,7 @@ CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExW(
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 @@ CONFIGRET WINAPI CM_Set_DevNode_Registry_Property_ExW(
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,7 +1385,63 @@ CONFIGRET WINAPI CM_Set_DevNode_Registry_Property_ExW(
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,

View file

@ -345,19 +345,103 @@ PNP_SetDeviceRegProp(handle_t BindingHandle,
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 @@ PNP_GetDeviceRegProp(handle_t BindingHandle,
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);

View file

@ -197,6 +197,33 @@ typedef RESOURCEID *PRESOURCEID;
#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;