- Implement SetupDiBuildClassInfoListExA, SetupDiClassGuidsFromNameExA, SetupDiCreateDeviceInfoListExA and SetupDiOpenClassRegKeyExA using MultiByteToUnicode.
- Retrieve OS version upon process attach.
Modified: trunk/reactos/lib/setupapi/devinst.c
Modified: trunk/reactos/lib/setupapi/setupapi_private.h
Modified: trunk/reactos/lib/setupapi/setupcab.c

Modified: trunk/reactos/lib/setupapi/devinst.c
--- trunk/reactos/lib/setupapi/devinst.c	2005-01-31 23:58:10 UTC (rev 13374)
+++ trunk/reactos/lib/setupapi/devinst.c	2005-02-01 13:58:33 UTC (rev 13375)
@@ -20,7 +20,7 @@
 
 #include "config.h"
 #include "wine/port.h"
- 
+
 #include <stdarg.h>
 
 #include "windef.h"
@@ -38,7 +38,9 @@
 #include "rpc.h"
 #include "rpcdce.h"
 
+#include "setupapi_private.h"
 
+
 WINE_DEFAULT_DEBUG_CHANNEL(setupapi);
 
 /* Unicode constants */
@@ -90,8 +92,26 @@
         LPCSTR MachineName,
         PVOID Reserved)
 {
-    FIXME("\n");
-    return FALSE;
+    LPWSTR MachineNameW = NULL;
+    BOOL bResult;
+
+    TRACE("\n");
+
+    if (MachineName)
+    {
+        MachineNameW = MultiByteToUnicode(MachineName, CP_ACP);
+        if (MachineNameW == NULL)
+            return FALSE;
+    }
+
+    bResult = SetupDiBuildClassInfoListExW(Flags, ClassGuidList,
+                                           ClassGuidListSize, RequiredSize,
+                                           MachineNameW, Reserved);
+
+    if (MachineNameW)
+        MyFree(MachineNameW);
+
+    return bResult;
 }
 
 /***********************************************************************
@@ -237,9 +257,9 @@
         DWORD ClassGuidListSize,
         PDWORD RequiredSize)
 {
-  return SetupDiClassGuidsFromNameExA(ClassName, ClassGuidList,
-                                      ClassGuidListSize, RequiredSize,
-                                      NULL, NULL);
+    return SetupDiClassGuidsFromNameExA(ClassName, ClassGuidList,
+                                        ClassGuidListSize, RequiredSize,
+                                        NULL, NULL);
 }
 
 /***********************************************************************
@@ -251,9 +271,9 @@
         DWORD ClassGuidListSize,
         PDWORD RequiredSize)
 {
-  return SetupDiClassGuidsFromNameExW(ClassName, ClassGuidList,
-                                      ClassGuidListSize, RequiredSize,
-                                      NULL, NULL);
+    return SetupDiClassGuidsFromNameExW(ClassName, ClassGuidList,
+                                        ClassGuidListSize, RequiredSize,
+                                        NULL, NULL);
 }
 
 /***********************************************************************
@@ -267,8 +287,36 @@
         LPCSTR MachineName,
         PVOID Reserved)
 {
-  FIXME("\n");
-  return FALSE;
+    LPWSTR ClassNameW = NULL;
+    LPWSTR MachineNameW = NULL;
+    BOOL bResult;
+
+    FIXME("\n");
+
+    ClassNameW = MultiByteToUnicode(ClassName, CP_ACP);
+    if (ClassNameW == NULL)
+        return FALSE;
+
+    if (MachineNameW)
+    {
+        MachineNameW = MultiByteToUnicode(MachineName, CP_ACP);
+        if (MachineNameW == NULL)
+        {
+            MyFree(ClassNameW);
+            return FALSE;
+        }
+    }
+
+    bResult = SetupDiClassGuidsFromNameExW(ClassNameW, ClassGuidList,
+                                           ClassGuidListSize, RequiredSize,
+                                           MachineNameW, Reserved);
+
+    if (MachineNameW)
+        MyFree(MachineNameW);
+
+    MyFree(ClassNameW);
+
+    return bResult;
 }
 
 /***********************************************************************
@@ -502,8 +550,25 @@
 			       PCSTR MachineName,
 			       PVOID Reserved)
 {
-  FIXME("\n");
-  return (HDEVINFO)INVALID_HANDLE_VALUE;
+    LPWSTR MachineNameW = NULL;
+    HDEVINFO hDevInfo;
+
+    TRACE("\n");
+
+    if (MachineName)
+    {
+        MachineNameW = MultiByteToUnicode(MachineName, CP_ACP);
+        if (MachineNameW == NULL)
+              return (HDEVINFO)INVALID_HANDLE_VALUE;
+    }
+
+    hDevInfo = SetupDiCreateDeviceInfoListExW(ClassGuid, hwndParent,
+                                              MachineNameW, Reserved);
+
+    if (MachineNameW)
+        MyFree(MachineNameW);
+
+    return hDevInfo;
 }
 
 /***********************************************************************
@@ -587,17 +652,10 @@
         PWSTR *Extension)
 {
     WCHAR szBuffer[MAX_PATH];
-    OSVERSIONINFOW OsVersionInfo;
     DWORD dwLength;
     DWORD dwFullLength;
     LONG lLineCount = -1;
 
-    OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW);
-    if (!GetVersionExW(&OsVersionInfo))
-    {
-	return FALSE;
-    }
-
     lstrcpyW(szBuffer, InfSectionName);
     dwLength = lstrlenW(szBuffer);
 
@@ -1048,8 +1106,25 @@
         PCSTR MachineName,
         PVOID Reserved)
 {
-    FIXME("\n");
-    return INVALID_HANDLE_VALUE;
+    PWSTR MachineNameW = NULL;
+    HKEY hKey;
+
+    TRACE("\n");
+
+    if (MachineName)
+    {
+        MachineNameW = MultiByteToUnicode(MachineName, CP_ACP);
+        if (MachineNameW == NULL)
+            return INVALID_HANDLE_VALUE;
+    }
+
+    hKey = SetupDiOpenClassRegKeyExW(ClassGuid, samDesired,
+                                     Flags, MachineNameW, Reserved);
+
+    if (MachineNameW)
+        MyFree(MachineNameW);
+
+    return hKey;
 }
 
 
@@ -1125,7 +1200,7 @@
 }
 
 /***********************************************************************
- *		SetupDiOpenDeviceInterfaceA (SETUPAPI.@)
+ *		SetupDiOpenDeviceInterfaceW (SETUPAPI.@)
  */
 BOOL WINAPI SetupDiOpenDeviceInterfaceW(
        HDEVINFO DeviceInfoSet,

Modified: trunk/reactos/lib/setupapi/setupapi_private.h
--- trunk/reactos/lib/setupapi/setupapi_private.h	2005-01-31 23:58:10 UTC (rev 13374)
+++ trunk/reactos/lib/setupapi/setupapi_private.h	2005-02-01 13:58:33 UTC (rev 13375)
@@ -54,4 +54,6 @@
 #define _S_IWRITE 0x0080
 #define _S_IREAD  0x0100
 
+extern OSVERSIONINFOW OsVersionInfo;
+
 #endif /* __SETUPAPI_PRIVATE_H */

Modified: trunk/reactos/lib/setupapi/setupcab.c
--- trunk/reactos/lib/setupapi/setupcab.c	2005-01-31 23:58:10 UTC (rev 13374)
+++ trunk/reactos/lib/setupapi/setupcab.c	2005-02-01 13:58:33 UTC (rev 13375)
@@ -44,6 +44,8 @@
 
 #include "wine/debug.h"
 
+OSVERSIONINFOW OsVersionInfo;
+
 static HINSTANCE CABINET_hInstance = 0;
 
 static HFDI (__cdecl *sc_FDICreate)(PFNALLOC, PFNFREE, PFNOPEN,
@@ -674,6 +676,9 @@
     switch (fdwReason) {
     case DLL_PROCESS_ATTACH:
         DisableThreadLibraryCalls(hinstDLL);
+        OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW);
+        if (!GetVersionExW(&OsVersionInfo))
+            return FALSE;
         break;
     case DLL_PROCESS_DETACH:
         UnloadCABINETDll();