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 */