diff --git a/reactos/lib/setupapi/devinst.c b/reactos/lib/setupapi/devinst.c index da423c9d504..645dbb92574 100644 --- a/reactos/lib/setupapi/devinst.c +++ b/reactos/lib/setupapi/devinst.c @@ -20,7 +20,7 @@ #include "config.h" #include "wine/port.h" - + #include #include "windef.h" @@ -38,6 +38,8 @@ #include "rpc.h" #include "rpcdce.h" +#include "setupapi_private.h" + WINE_DEFAULT_DEBUG_CHANNEL(setupapi); @@ -90,8 +92,26 @@ BOOL WINAPI SetupDiBuildClassInfoListExA( 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 @@ BOOL WINAPI SetupDiClassGuidsFromNameA( DWORD ClassGuidListSize, PDWORD RequiredSize) { - return SetupDiClassGuidsFromNameExA(ClassName, ClassGuidList, - ClassGuidListSize, RequiredSize, - NULL, NULL); + return SetupDiClassGuidsFromNameExA(ClassName, ClassGuidList, + ClassGuidListSize, RequiredSize, + NULL, NULL); } /*********************************************************************** @@ -251,9 +271,9 @@ BOOL WINAPI SetupDiClassGuidsFromNameW( DWORD ClassGuidListSize, PDWORD RequiredSize) { - return SetupDiClassGuidsFromNameExW(ClassName, ClassGuidList, - ClassGuidListSize, RequiredSize, - NULL, NULL); + return SetupDiClassGuidsFromNameExW(ClassName, ClassGuidList, + ClassGuidListSize, RequiredSize, + NULL, NULL); } /*********************************************************************** @@ -267,8 +287,36 @@ BOOL WINAPI SetupDiClassGuidsFromNameExA( 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 @@ SetupDiCreateDeviceInfoListExA(const GUID *ClassGuid, 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 @@ BOOL WINAPI SetupDiGetActualSectionToInstallW( 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 @@ HKEY WINAPI SetupDiOpenClassRegKeyExA( 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 @@ HKEY WINAPI SetupDiOpenClassRegKeyExW( } /*********************************************************************** - * SetupDiOpenDeviceInterfaceA (SETUPAPI.@) + * SetupDiOpenDeviceInterfaceW (SETUPAPI.@) */ BOOL WINAPI SetupDiOpenDeviceInterfaceW( HDEVINFO DeviceInfoSet, diff --git a/reactos/lib/setupapi/setupapi_private.h b/reactos/lib/setupapi/setupapi_private.h index 7cd40e4f146..80d1f5559c2 100644 --- a/reactos/lib/setupapi/setupapi_private.h +++ b/reactos/lib/setupapi/setupapi_private.h @@ -54,4 +54,6 @@ UINT CALLBACK QUEUE_callback_WtoA( void *context, UINT notification, UINT_PTR, U #define _S_IWRITE 0x0080 #define _S_IREAD 0x0100 +extern OSVERSIONINFOW OsVersionInfo; + #endif /* __SETUPAPI_PRIVATE_H */ diff --git a/reactos/lib/setupapi/setupcab.c b/reactos/lib/setupapi/setupcab.c index 84625bfefca..9c1081337a9 100644 --- a/reactos/lib/setupapi/setupcab.c +++ b/reactos/lib/setupapi/setupcab.c @@ -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 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) switch (fdwReason) { case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls(hinstDLL); + OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW); + if (!GetVersionExW(&OsVersionInfo)) + return FALSE; break; case DLL_PROCESS_DETACH: UnloadCABINETDll();