- Implement SetupDiBuildClassInfoListExA,
SetupDiClassGuidsFromNameExA, SetupDiCreateDeviceInfoListExA and SetupDiOpenClassRegKeyExA using MultiByteToUnicode. - Retrieve OS version upon process attach.
This commit is contained in:
parent
c2c87daf4a
commit
69d3afc99e
|
@ -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,
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue