- Implement SetupDiBuildClassInfoListExA,

SetupDiClassGuidsFromNameExA, SetupDiCreateDeviceInfoListExA and
  SetupDiOpenClassRegKeyExA using MultiByteToUnicode.
- Retrieve OS version upon process attach.
This commit is contained in:
Eric Kohl 2005-02-03 13:34:50 +00:00 committed by Alexandre Julliard
parent c2c87daf4a
commit 69d3afc99e
3 changed files with 97 additions and 16 deletions

View File

@ -38,6 +38,8 @@
#include "rpc.h"
#include "rpcdce.h"
#include "setupapi_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(setupapi);
@ -90,8 +92,25 @@ 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;
}
/***********************************************************************
@ -267,8 +286,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 +549,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 +651,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 +1105,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 +1199,7 @@ HKEY WINAPI SetupDiOpenClassRegKeyExW(
}
/***********************************************************************
* SetupDiOpenDeviceInterfaceA (SETUPAPI.@)
* SetupDiOpenDeviceInterfaceW (SETUPAPI.@)
*/
BOOL WINAPI SetupDiOpenDeviceInterfaceW(
HDEVINFO DeviceInfoSet,

View File

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

View File

@ -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();