Implement CM_Get_DevNode_Registry_Property[_Ex]A/W and CM_Set_DevNode_Registry_Property[_Ex]A/W partially. Modified: trunk/reactos/include/idl/pnp.idl Modified: trunk/reactos/include/wine/cfgmgr32.h Modified: trunk/reactos/lib/setupapi/cfgmgr.c Modified: trunk/reactos/lib/setupapi/setupapi.spec Modified: trunk/reactos/services/umpnpmgr/umpnpmgr.c Modified: trunk/reactos/w32api/include/ddk/cfgmgr32.h _____
Modified: trunk/reactos/include/idl/pnp.idl --- trunk/reactos/include/idl/pnp.idl 2005-08-01 18:11:54 UTC (rev 16963) +++ trunk/reactos/include/idl/pnp.idl 2005-08-01 19:42:19 UTC (rev 16964) @@ -39,11 +39,36 @@
[in] DWORD Length, [in] DWORD Flags);
+ CONFIGRET PNP_EnumerateSubKeys(handle_t BindingHandle, + [in] unsigned long Branch, + [in] unsigned long Index, + [out, string, size_is(Length)] wchar_t *Buffer, + [in] unsigned long Length, + [out] unsigned long *RequiredLength, + [in] DWORD Flags); + CONFIGRET PNP_GetDepth(handle_t BindingHandle, [in, string] wchar_t *DeviceInstance, [out] unsigned long *Depth, [in] DWORD Flags);
+ CONFIGRET PNP_GetDeviceRegProp(handle_t BindingHandle, + [in, string] wchar_t *DeviceInstance, + [in] unsigned long Property, + [in, out] unsigned long *DataType, + [out, size_is(*TransferLen)] char *Buffer, + [in, out] unsigned long *TransferLen, + [in, out] unsigned long *Length, + [in] DWORD Flags); + + CONFIGRET PNP_SetDeviceRegProp(handle_t BindingHandle, + [in, string] wchar_t *DeviceId, + [in] unsigned long Property, + [in] unsigned long DataType, + [in, size_is(Length)] char *Buffer, + [in] unsigned long Length, + [in] unsigned long Flags); + CONFIGRET PNP_GetDeviceStatus(handle_t BindingHandle, [in, string] wchar_t *DeviceInstance, [out] unsigned long *Status, _____
Modified: trunk/reactos/include/wine/cfgmgr32.h --- trunk/reactos/include/wine/cfgmgr32.h 2005-08-01 18:11:54 UTC (rev 16963) +++ trunk/reactos/include/wine/cfgmgr32.h 2005-08-01 19:42:19 UTC (rev 16964) @@ -50,10 +50,12 @@
#define CR_REGISTRY_ERROR 0x0000001D #define CR_INVALID_DEVICE_ID 0x0000001E #define CR_INVALID_DATA 0x0000001F -#define CR_NO_SUCH_VALUE 0x00000025 +#define CR_NO_SUCH_VALUE 0x00000025 #define CR_NO_SUCH_REGISTRY_KEY 0x0000002E #define CR_INVALID_MACHINENAME 0x0000002F #define CR_ACCESS_DENIED 0x00000033 +#define CR_CALL_NOT_IMPLEMENTED 0x00000034 +#define CR_INVALID_PROPERTY 0x00000035
#define MAX_CLASS_NAME_LEN 32 #define MAX_GUID_STRING_LEN 39 @@ -105,6 +107,14 @@ CONFIGRET WINAPI CM_Get_Child_Ex( PDEVINST, DEVINST, ULONG, HMACHINE ); CONFIGRET WINAPI CM_Get_Depth( PULONG, DEVINST, ULONG ); CONFIGRET WINAPI CM_Get_Depth_Ex( PULONG, DEVINST, ULONG, HMACHINE ); +CONFIGRET WINAPI CM_Get_DevNode_Registry_PropertyA( DEVINST, ULONG, PULONG, PVOID, PULONG, ULONG ); +CONFIGRET WINAPI CM_Get_DevNode_Registry_PropertyW( DEVINST, ULONG, PULONG, PVOID, PULONG, ULONG ); +#define CM_Get_DevNode_Registry_Property WINELIB_NAME_AW(CM_Get_DevNode_Registry_Property) +CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExA( DEVINST, ULONG, PULONG, PVOID, PULONG, ULONG, HMACHINE ); +CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExW( DEVINST, ULONG, PULONG, PVOID, PULONG, ULONG, HMACHINE ); +#define CM_Get_DevNode_Registry_Property_Ex WINELIB_NAME_AW(CM_Get_DevNode_Registry_Property_Ex) +CONFIGRET WINAPI CM_Get_DevNode_Status( PULONG, PULONG, DEVINST, ULONG ); +CONFIGRET WINAPI CM_Get_DevNode_Status_Ex( PULONG, PULONG, DEVINST, ULONG, HMACHINE ); CONFIGRET WINAPI CM_Get_Device_IDA( DEVINST, PCHAR, ULONG, ULONG ); CONFIGRET WINAPI CM_Get_Device_IDW( DEVINST, PWCHAR, ULONG, ULONG ); #define CM_Get_Device_ID WINELIB_NAME_AW(CM_Get_Device_ID) @@ -125,8 +135,6 @@ #define CM_Get_Device_ID_List_Size_Ex WINELIB_NAME_AW(CM_Get_Device_ID_List_Size_Ex) CONFIGRET WINAPI CM_Get_Device_ID_Size( PULONG, DEVINST, ULONG ); CONFIGRET WINAPI CM_Get_Device_ID_Size_Ex( PULONG, DEVINST, ULONG, HMACHINE ); -CONFIGRET WINAPI CM_Get_DevNode_Status( PULONG, PULONG, DEVINST, ULONG ); -CONFIGRET WINAPI CM_Get_DevNode_Status_Ex( PULONG, PULONG, DEVINST, ULONG, HMACHINE ); CONFIGRET WINAPI CM_Get_Global_State( PULONG, ULONG ); CONFIGRET WINAPI CM_Get_Global_State_Ex( PULONG, ULONG, HMACHINE ); CONFIGRET WINAPI CM_Get_Parent( PDEVINST, DEVINST, ULONG ); @@ -152,5 +160,11 @@
CONFIGRET WINAPI CM_Set_DevNode_Problem( DEVINST, ULONG, ULONG ); CONFIGRET WINAPI CM_Set_DevNode_Problem_Ex( DEVINST, ULONG, ULONG, HMACHINE ); +CONFIGRET WINAPI CM_Set_DevNode_Registry_PropertyA( DEVINST, ULONG, PCVOID, ULONG, ULONG ); +CONFIGRET WINAPI CM_Set_DevNode_Registry_PropertyW( DEVINST, ULONG, PCVOID, ULONG, ULONG ); +#define CM_Set_DevNode_Registry_Property WINELIB_NAME_AW(CM_Set_DevNode_Registry_Property) +CONFIGRET WINAPI CM_Set_DevNode_Registry_Property_ExA( DEVINST, ULONG, PCVOID, ULONG, ULONG, HMACHINE ); +CONFIGRET WINAPI CM_Set_DevNode_Registry_Property_ExW( DEVINST, ULONG, PCVOID, ULONG, ULONG, HMACHINE ); +#define CM_Set_DevNode_Registry_Property_Ex WINELIB_NAME_AW(CM_Set_DevNode_Registry_Property_Ex)
#endif /* _CFGMGR32_H_ */ _____
Modified: trunk/reactos/lib/setupapi/cfgmgr.c --- trunk/reactos/lib/setupapi/cfgmgr.c 2005-08-01 18:11:54 UTC (rev 16963) +++ trunk/reactos/lib/setupapi/cfgmgr.c 2005-08-01 19:42:19 UTC (rev 16964) @@ -373,6 +373,128 @@
/*********************************************************************** + * CM_Get_DevNode_Registry_PropertyA [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_DevNode_Registry_PropertyA( + DEVINST dnDevInst, ULONG ulProperty, PULONG pulRegDataType, + PVOID Buffer, PULONG pulLength, ULONG ulFlags) +{ + TRACE("%lx %lu %p %p %p %lx\n", + dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength, ulFlags); + + return CM_Get_DevNode_Registry_Property_ExA(dnDevInst, ulProperty, + pulRegDataType, Buffer, + pulLength, ulFlags, NULL); +} + + +/********************************************************************** * + * CM_Get_DevNode_Registry_PropertyW [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_DevNode_Registry_PropertyW( + DEVINST dnDevInst, ULONG ulProperty, PULONG pulRegDataType, + PVOID Buffer, PULONG pulLength, ULONG ulFlags) +{ + TRACE("%lx %lu %p %p %p %lx\n", + dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength, ulFlags); + + return CM_Get_DevNode_Registry_Property_ExW(dnDevInst, ulProperty, + pulRegDataType, Buffer, + pulLength, ulFlags, NULL); +} + + +/********************************************************************** * + * CM_Get_DevNode_Registry_Property_ExA [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExA( + DEVINST dnDevInst, ULONG ulProperty, PULONG pulRegDataType, + PVOID Buffer, PULONG pulLength, ULONG ulFlags, HMACHINE hMachine) +{ + FIXME("%lx %lu %p %p %p %lx %lx\n", + dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength, + ulFlags, hMachine); + + return CR_CALL_NOT_IMPLEMENTED; +} + + +/********************************************************************** * + * CM_Get_DevNode_Registry_Property_ExW [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExW( + DEVINST dnDevInst, ULONG ulProperty, PULONG pulRegDataType, + PVOID Buffer, PULONG pulLength, ULONG ulFlags, HMACHINE hMachine) +{ + RPC_BINDING_HANDLE BindingHandle = NULL; + HSTRING_TABLE StringTable = NULL; + CONFIGRET ret = CR_SUCCESS; + LPWSTR lpDevInst; + ULONG ulDataType = 0; + ULONG ulTransferLength = 0; + + FIXME("%lx %lu %p %p %p %lx %lx\n", + dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength, + ulFlags, hMachine); + + if (dnDevInst == 0) + return CR_INVALID_DEVNODE; + + if (ulProperty < 1 /* CM_DRP_MIN */ || ulProperty > 0x17 /* CM_DRP_MAX */) + return CR_INVALID_PROPERTY; + + /* pulRegDataType is optional */ + + /* Buffer is optional */ + + if (pulLength == NULL) + return CR_INVALID_POINTER; + + if (*pulLength == 0) + return CR_INVALID_POINTER; + + if (ulFlags != 0) + return CR_INVALID_FLAG; + + if (hMachine != NULL) + { + BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle; + if (BindingHandle == NULL) + return CR_FAILURE; + + StringTable = ((PMACHINE_INFO)hMachine)->StringTable; + if (StringTable == 0) + return CR_FAILURE; + } + else + { + if (!PnpGetLocalHandles(&BindingHandle, &StringTable)) + return CR_FAILURE; + } + + lpDevInst = StringTableStringFromId(StringTable, dnDevInst); + if (lpDevInst == NULL) + return CR_INVALID_DEVNODE; + + ret = PNP_GetDeviceRegProp(BindingHandle, + lpDevInst, + ulProperty, + &ulDataType, + Buffer, + &ulTransferLength, + pulLength, + ulFlags); + if (ret == CR_SUCCESS) + { + if (pulRegDataType != NULL) + *pulRegDataType = ulDataType; + } + + return ret; +} + + +/********************************************************************** * * CM_Get_DevNode_Status [SETUPAPI.@] */ CONFIGRET WINAPI CM_Get_DevNode_Status( @@ -1171,3 +1293,105 @@ ulProblem, ulFlags); } + + +/********************************************************************** * + * CM_Set_DevNode_Registry_PropertyA [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Set_DevNode_Registry_PropertyA( + DEVINST dnDevInst, ULONG ulProperty, PCVOID Buffer, ULONG ulLength, + ULONG ulFlags) +{ + TRACE("%lx %lu %p %lx %lx\n", + dnDevInst, ulProperty, Buffer, ulLength, ulFlags); + return CM_Set_DevNode_Registry_Property_ExA(dnDevInst, ulProperty, + Buffer, ulLength, + ulFlags, NULL); +} + + +/********************************************************************** * + * CM_Set_DevNode_Registry_PropertyW [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Set_DevNode_Registry_PropertyW( + DEVINST dnDevInst, ULONG ulProperty, PCVOID Buffer, ULONG ulLength, + ULONG ulFlags) +{ + TRACE("%lx %lu %p %lx %lx\n", + dnDevInst, ulProperty, Buffer, ulLength, ulFlags); + return CM_Set_DevNode_Registry_Property_ExW(dnDevInst, ulProperty, + Buffer, ulLength, + ulFlags, NULL); +} + + +/********************************************************************** * + * CM_Set_DevNode_Registry_Property_ExA [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Set_DevNode_Registry_Property_ExA( + DEVINST dnDevInst, ULONG ulProperty, PCVOID Buffer, ULONG ulLength, + ULONG ulFlags, HMACHINE hMachine) +{ + FIXME("%lx %lu %p %lx %lx %lx\n", + dnDevInst, ulProperty, Buffer, ulLength, ulFlags, hMachine); + return CR_CALL_NOT_IMPLEMENTED; +} + + +/********************************************************************** * + * CM_Set_DevNode_Registry_Property_ExW [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Set_DevNode_Registry_Property_ExW( + DEVINST dnDevInst, ULONG ulProperty, PCVOID Buffer, ULONG ulLength, + ULONG ulFlags, HMACHINE hMachine) +{ + RPC_BINDING_HANDLE BindingHandle = NULL; + HSTRING_TABLE StringTable = NULL; + LPWSTR lpDevInst; + ULONG ulType; + + FIXME("%lx %lu %p %lx %lx %lx\n", + dnDevInst, ulProperty, Buffer, ulLength, ulFlags, hMachine); + + if (dnDevInst == 0) + return CR_INVALID_DEVNODE; + + if (ulProperty < 1 /* CM_DRP_MIN */ || ulProperty > 0x17 /* CM_DRP_MAX */) + return CR_INVALID_PROPERTY; + + if (Buffer != NULL && ulLength == 0) + return CR_INVALID_POINTER; + + if (ulFlags != 0) + return CR_INVALID_FLAG; + + if (hMachine != NULL) + { + BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle; + if (BindingHandle == NULL) + return CR_FAILURE; + + StringTable = ((PMACHINE_INFO)hMachine)->StringTable; + if (StringTable == 0) + return CR_FAILURE; + } + else + { + if (!PnpGetLocalHandles(&BindingHandle, &StringTable)) + return CR_FAILURE; + } + + lpDevInst = StringTableStringFromId(StringTable, dnDevInst); + if (lpDevInst == NULL) + return CR_INVALID_DEVNODE; + + ulType = REG_SZ; /* FIXME */ + + return PNP_SetDeviceRegProp(BindingHandle, + lpDevInst, + ulProperty, + ulType, + (char *)Buffer, + ulLength, + ulFlags); +} _____
Modified: trunk/reactos/lib/setupapi/setupapi.spec --- trunk/reactos/lib/setupapi/setupapi.spec 2005-08-01 18:11:54 UTC (rev 16963) +++ trunk/reactos/lib/setupapi/setupapi.spec 2005-08-01 19:42:19 UTC (rev 16964) @@ -65,10 +65,10 @@
@ stub CM_Get_Class_Name_ExW @ stdcall CM_Get_Depth(ptr long long) @ stdcall CM_Get_Depth_Ex(ptr long long long) -@ stub CM_Get_DevNode_Registry_PropertyA -@ stub CM_Get_DevNode_Registry_PropertyW -@ stub CM_Get_DevNode_Registry_Property_ExA -@ stub CM_Get_DevNode_Registry_Property_ExW +@ stdcall CM_Get_DevNode_Registry_PropertyA(long long ptr ptr ptr long) +@ stdcall CM_Get_DevNode_Registry_PropertyW(long long ptr ptr ptr long) +@ stdcall CM_Get_DevNode_Registry_Property_ExA(long long ptr ptr ptr long long) +@ stdcall CM_Get_DevNode_Registry_Property_ExW(long long ptr ptr ptr long long) @ stdcall CM_Get_DevNode_Status(ptr ptr long long) @ stdcall CM_Get_DevNode_Status_Ex(ptr ptr long long long) @ stdcall CM_Get_Device_IDA(long str long long) @@ -172,10 +172,10 @@ @ stub CM_Run_Detection_Ex @ stdcall CM_Set_DevNode_Problem(long long long) @ stdcall CM_Set_DevNode_Problem_Ex(long long long long) -@ stub CM_Set_DevNode_Registry_PropertyA -@ stub CM_Set_DevNode_Registry_PropertyW -@ stub CM_Set_DevNode_Registry_Property_ExA -@ stub CM_Set_DevNode_Registry_Property_ExW +@ stdcall CM_Set_DevNode_Registry_PropertyA(long long ptr long long) +@ stdcall CM_Set_DevNode_Registry_PropertyW(long long ptr long long) +@ stdcall CM_Set_DevNode_Registry_Property_ExA(long long ptr long long long) +@ stdcall CM_Set_DevNode_Registry_Property_ExW(long long ptr long long long) @ stub CM_Set_HW_Prof @ stub CM_Set_HW_Prof_Ex @ stub CM_Set_HW_Prof_FlagsA _____
Modified: trunk/reactos/services/umpnpmgr/umpnpmgr.c --- trunk/reactos/services/umpnpmgr/umpnpmgr.c 2005-08-01 18:11:54 UTC (rev 16963) +++ trunk/reactos/services/umpnpmgr/umpnpmgr.c 2005-08-01 19:42:19 UTC (rev 16964) @@ -54,6 +54,9 @@
static WCHAR szRootDeviceId[] = L"HTREE\ROOT\0";
+static HKEY hEnumKey = NULL; +static HKEY hClassKey = NULL; + /* FUNCTIONS *****************************************************************/
static DWORD WINAPI @@ -237,7 +240,7 @@ }
DPRINT("PNP_GetRelatedDeviceInstance() done (returns %lx)\n", ret); - if (ret == 0) + if (ret == CR_SUCCESS) { DPRINT("RelatedDevice: %wZ\n", &PlugPlayData.RelatedDeviceInstance); } @@ -247,6 +250,59 @@
CONFIGRET +PNP_EnumerateSubKeys(handle_t BindingHandle, + unsigned long Branch, + unsigned long Index, + wchar_t *Buffer, + unsigned long Length, + unsigned long *RequiredLength, + DWORD Flags) +{ + CONFIGRET ret = CR_SUCCESS; + HKEY hKey; + DWORD dwError; + + DPRINT1("PNP_EnumerateSubKeys() called\n"); + + switch (Branch) + { + case 1: + hKey = hEnumKey; + break; + + case 2: + hKey = hClassKey; + break; + + default: + return CR_FAILURE; + } + + *RequiredLength = Length; + dwError = RegEnumKeyExW(hKey, + Index, + Buffer, + RequiredLength, + NULL, + NULL, + NULL, + NULL); + if (dwError != ERROR_SUCCESS) + { + ret = CR_FAILURE; + } + + DPRINT1("PNP_EnumerateSubKeys() done (returns %lx)\n", ret); + if (ret == CR_SUCCESS) + { + DPRINT1("Sub key: %S\n", Buffer); + } + + return ret; +} + + +CONFIGRET PNP_GetDepth(handle_t BindingHandle, wchar_t *DeviceInstance, unsigned long *Depth, @@ -256,7 +312,7 @@ CONFIGRET ret = CR_SUCCESS; NTSTATUS Status;
- DPRINT1("PNP_GetDepth() called\n"); + DPRINT("PNP_GetDepth() called\n");
RtlInitUnicodeString(&PlugPlayData.DeviceInstance, DeviceInstance); @@ -273,13 +329,66 @@ ret = CR_FAILURE; /* FIXME */ }
- DPRINT1("PNP_GetDepth() done (returns %lx)\n", ret); + DPRINT("PNP_GetDepth() done (returns %lx)\n", ret);
return ret; }
CONFIGRET +PNP_SetDeviceRegProp(handle_t BindingHandle, + wchar_t *DeviceId, + unsigned long Property, + unsigned long DataType, + char *Buffer, + unsigned long Length, + unsigned long Flags) +{ + CONFIGRET ret = CR_SUCCESS; +// ULONG Data; + + DPRINT1("PNP_SetDeviceRegProp() called\n"); + + DPRINT1("DeviceId: %S\n", DeviceId); + + DPRINT1("Property: %lu\n", Property); + DPRINT1("DataType: %lu\n", DataType); + DPRINT1("Length: %lu\n", Length); + + DPRINT1("Data: %lx\n", *((PULONG)Buffer)); + + DPRINT1("PNP_SetDeviceRegProp() done (returns %lx)\n", ret); + + return ret; +} + + +CONFIGRET +PNP_GetDeviceRegProp(handle_t BindingHandle, + wchar_t *DeviceInstance, + unsigned long Property, + unsigned long *DataType, + char *Buffer, + unsigned long *TransferLen, + unsigned long *Length, + DWORD Flags) +{ + CONFIGRET ret = CR_SUCCESS; + ULONG Data; + + DPRINT1("PNP_GetDeviceRegProp() called\n"); + + Data = 0xbaadf00d; + memcpy(Buffer, &Data, sizeof(ULONG)); + *Length = sizeof(ULONG); + + DPRINT1("PNP_GetDeviceRegProp() done (returns %lx)\n", ret); + + return ret; +} + + +CONFIGRET PNP_GetDeviceStatus(handle_t BindingHandle, wchar_t *DeviceInstance, unsigned long *pStatus, @@ -290,7 +399,7 @@ CONFIGRET ret = CR_SUCCESS; NTSTATUS Status;
- DPRINT1("PNP_GetDeviceStatus() called\n"); + DPRINT("PNP_GetDeviceStatus() called\n");
RtlInitUnicodeString(&PlugPlayData.DeviceInstance, DeviceInstance); @@ -309,7 +418,7 @@ ret = CR_FAILURE; /* FIXME */ }
- DPRINT1("PNP_GetDeviceStatus() done (returns %lx)\n", ret); + DPRINT("PNP_GetDeviceStatus() done (returns %lx)\n", ret);
return ret; } @@ -424,8 +533,32 @@ int main(int argc, char *argv[]) { + DWORD dwError; + DPRINT("Umpnpmgr: main() started\n");
+ dwError = RegOpenKeyExW(HKEY_LOCAL_MACHINE, + L"System\CurrentControlSet\Enum", + 0, + KEY_ALL_ACCESS, + &hEnumKey); + if (dwError != ERROR_SUCCESS) + { + DPRINT1("Could not open the Enum Key! (Error %lu)\n", dwError); + return dwError; + } + + dwError = RegOpenKeyExW(HKEY_LOCAL_MACHINE, + L"System\CurrentControlSet\Control\Class", + 0, + KEY_ALL_ACCESS, + &hClassKey); + if (dwError != ERROR_SUCCESS) + { + DPRINT1("Could not open the Class Key! (Error %lu)\n", dwError); + return dwError; + } + StartServiceCtrlDispatcher(ServiceTable);
DPRINT("Umpnpmgr: main() done\n"); _____
Modified: trunk/reactos/w32api/include/ddk/cfgmgr32.h --- trunk/reactos/w32api/include/ddk/cfgmgr32.h 2005-08-01 18:11:54 UTC (rev 16963) +++ trunk/reactos/w32api/include/ddk/cfgmgr32.h 2005-08-01 19:42:19 UTC (rev 16964) @@ -1017,11 +1017,73 @@
/* FIXME: Obsolete CM_Get_Device_Interface_List_Size_Ex */ /* FIXME: Obsolete CM_Get_DevNode_Custom_Property */ /* FIXME: Obsolete CM_Get_DevNode_Custom_Property_Ex */ -/* FIXME: Obsolete CM_Get_DevNode_Registry_Property */
CMAPI CONFIGRET WINAPI +CM_Get_DevNode_Registry_PropertyA( + IN DEVINST dnDevInst, + IN ULONG ulProperty, + OUT PULONG pulRegDataType, OPTIONAL + OUT PVOID Buffer, OPTIONAL + IN OUT PULONG pulLength, + IN ULONG ulFlags); + +CMAPI +CONFIGRET +WINAPI +CM_Get_DevNode_Registry_PropertyW( + IN DEVINST dnDevInst, + IN ULONG ulProperty, + OUT PULONG pulRegDataType, OPTIONAL + OUT PVOID Buffer, OPTIONAL + IN OUT PULONG pulLength, + IN ULONG ulFlags); + +CMAPI +CONFIGRET +WINAPI +CM_Get_DevNode_Registry_Property_ExA( + IN DEVINST dnDevInst, + IN ULONG ulProperty, + OUT PULONG pulRegDataType, OPTIONAL + OUT PVOID Buffer, OPTIONAL + IN OUT PULONG pulLength, + IN ULONG ulFlags, + IN HMACHINE hMachine); + +CMAPI +CONFIGRET +WINAPI +CM_Get_DevNode_Registry_Property_ExW( + IN DEVINST dnDevInst, + IN ULONG ulProperty, + OUT PULONG pulRegDataType, OPTIONAL + OUT PVOID Buffer, OPTIONAL + IN OUT PULONG pulLength, + IN ULONG ulFlags, + IN HMACHINE hMachine); + +#define CM_Get_DevInst_Registry_PropertyW CM_Get_DevNode_Registry_PropertyW +#define CM_Get_DevInst_Registry_PropertyA CM_Get_DevNode_Registry_PropertyA +#define CM_Get_DevInst_Registry_Property_ExW CM_Get_DevNode_Registry_Property_ExW +#define CM_Get_DevInst_Registry_Property_ExA CM_Get_DevNode_Registry_Property_ExA + +#ifdef UNICODE +#define CM_Get_DevInst_Registry_Property CM_Get_DevNode_Registry_PropertyW +#define CM_Get_DevInst_Registry_Property_Ex CM_Get_DevNode_Registry_Property_ExW +#define CM_Get_DevNode_Registry_Property CM_Get_DevNode_Registry_PropertyW +#define CM_Get_DevNode_Registry_Property_Ex CM_Get_DevNode_Registry_Property_ExW +#else +#define CM_Get_DevInst_Registry_Property CM_Get_DevNode_Registry_PropertyA +#define CM_Get_DevInst_Registry_Property_Ex CM_Get_DevNode_Registry_Property_ExA +#define CM_Get_DevNode_Registry_Property CM_Get_DevNode_Registry_PropertyA +#define CM_Get_DevNode_Registry_Property_Ex CM_Get_DevNode_Registry_Property_ExA +#endif /* UNICODE */ + +CMAPI +CONFIGRET +WINAPI CM_Get_DevNode_Status( OUT PULONG pulStatus, OUT PULONG pulProblemNumber, @@ -1513,8 +1575,66 @@ /* FIXME: Obsolete CM_Set_Class_Registry_Property */ /* FIXME: Obsolete CM_Set_DevNode_Problem */ /* FIXME: Obsolete CM_Set_DevNode_Problem_Ex */ -/* FIXME: Obsolete CM_Set_DevNode_Registry_Property */ -/* FIXME: Obsolete CM_Set_DevNode_Registry_Property_Ex */ + +CMAPI +CONFIGRET +WINAPI +CM_Set_DevNode_Registry_PropertyA( + IN DEVINST dnDevInst, + IN ULONG ulProperty, + IN PCVOID Buffer, OPTIONAL + IN ULONG ulLength, + IN ULONG ulFlags); + +CMAPI +CONFIGRET +WINAPI +CM_Set_DevNode_Registry_PropertyW( + IN DEVINST dnDevInst, + IN ULONG ulProperty, + IN PCVOID Buffer, OPTIONAL + IN ULONG ulLength, + IN ULONG ulFlags); + +CMAPI +CONFIGRET +WINAPI +CM_Set_DevNode_Registry_Property_ExA( + IN DEVINST dnDevInst, + IN ULONG ulProperty, + IN PCVOID Buffer, OPTIONAL + IN ULONG ulLength, + IN ULONG ulFlags, + IN HMACHINE hMachine); + +CMAPI +CONFIGRET +WINAPI +CM_Set_DevNode_Registry_Property_ExW( + IN DEVINST dnDevInst, + IN ULONG ulProperty, + IN PCVOID Buffer, OPTIONAL + IN ULONG ulLength, + IN ULONG ulFlags, + IN HMACHINE hMachine); + +#define CM_Set_DevInst_Registry_PropertyW CM_Set_DevNode_Registry_PropertyW +#define CM_Set_DevInst_Registry_PropertyA CM_Set_DevNode_Registry_PropertyA +#define CM_Set_DevInst_Registry_Property_ExW CM_Set_DevNode_Registry_Property_ExW +#define CM_Set_DevInst_Registry_Property_ExA CM_Set_DevNode_Registry_Property_ExA + +#ifdef UNICODE +#define CM_Set_DevInst_Registry_Property CM_Set_DevNode_Registry_PropertyW +#define CM_Set_DevInst_Registry_Property_Ex CM_Set_DevNode_Registry_Property_ExW +#define CM_Set_DevNode_Registry_Property CM_Set_DevNode_Registry_PropertyW +#define CM_Set_DevNode_Registry_Property_Ex CM_Set_DevNode_Registry_Property_ExW +#else +#define CM_Set_DevInst_Registry_Property CM_Set_DevNode_Registry_PropertyA +#define CM_Set_DevInst_Registry_Property_Ex CM_Set_DevNode_Registry_Property_ExA +#define CM_Set_DevNode_Registry_Property CM_Set_DevNode_Registry_PropertyA +#define CM_Set_DevNode_Registry_Property_Ex CM_Set_DevNode_Registry_Property_ExA +#endif /* UNICODE */ + /* FIXME: Obsolete CM_Set_HW_Prof */ /* FIXME: Obsolete CM_Set_HW_Prof_Ex */ /* FIXME: Obsolete CM_Set_HW_Prof_Flags */