setupapi: Add SetupDiGetActualSectionToInstallExA/W.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49130 Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
1e32463a45
commit
9a044007cc
|
@ -1845,18 +1845,18 @@ BOOL WINAPI SetupDiGetDeviceInstanceIdW(HDEVINFO devinfo, SP_DEVINFO_DATA *devic
|
|||
}
|
||||
|
||||
/***********************************************************************
|
||||
* SetupDiGetActualSectionToInstallA (SETUPAPI.@)
|
||||
* SetupDiGetActualSectionToInstallExA (SETUPAPI.@)
|
||||
*/
|
||||
BOOL WINAPI SetupDiGetActualSectionToInstallA(HINF hinf, const char *section,
|
||||
char *section_ext, DWORD size, DWORD *needed, char **extptr)
|
||||
BOOL WINAPI SetupDiGetActualSectionToInstallExA(HINF hinf, const char *section, SP_ALTPLATFORM_INFO *altplatform,
|
||||
char *section_ext, DWORD size, DWORD *needed, char **extptr, void *reserved)
|
||||
{
|
||||
WCHAR sectionW[LINE_LEN], section_extW[LINE_LEN], *extptrW;
|
||||
BOOL ret;
|
||||
|
||||
MultiByteToWideChar(CP_ACP, 0, section, -1, sectionW, ARRAY_SIZE(sectionW));
|
||||
|
||||
ret = SetupDiGetActualSectionToInstallW(hinf, sectionW, section_extW,
|
||||
ARRAY_SIZE(section_extW), NULL, &extptrW);
|
||||
ret = SetupDiGetActualSectionToInstallExW(hinf, sectionW, altplatform, section_extW,
|
||||
ARRAY_SIZE(section_extW), NULL, &extptrW, reserved);
|
||||
if (ret)
|
||||
{
|
||||
if (needed)
|
||||
|
@ -1879,72 +1879,93 @@ BOOL WINAPI SetupDiGetActualSectionToInstallA(HINF hinf, const char *section,
|
|||
}
|
||||
|
||||
/***********************************************************************
|
||||
* SetupDiGetActualSectionToInstallW (SETUPAPI.@)
|
||||
* SetupDiGetActualSectionToInstallA (SETUPAPI.@)
|
||||
*/
|
||||
BOOL WINAPI SetupDiGetActualSectionToInstallW(
|
||||
HINF InfHandle,
|
||||
PCWSTR InfSectionName,
|
||||
PWSTR InfSectionWithExt,
|
||||
DWORD InfSectionWithExtSize,
|
||||
PDWORD RequiredSize,
|
||||
PWSTR *Extension)
|
||||
BOOL WINAPI SetupDiGetActualSectionToInstallA(HINF hinf, const char *section, char *section_ext,
|
||||
DWORD size, DWORD *needed, char **extptr)
|
||||
{
|
||||
WCHAR szBuffer[MAX_PATH];
|
||||
DWORD dwLength;
|
||||
DWORD dwFullLength;
|
||||
LONG lLineCount = -1;
|
||||
return SetupDiGetActualSectionToInstallExA(hinf, section, NULL, section_ext, size,
|
||||
needed, extptr, NULL);
|
||||
}
|
||||
|
||||
lstrcpyW(szBuffer, InfSectionName);
|
||||
dwLength = lstrlenW(szBuffer);
|
||||
/***********************************************************************
|
||||
* SetupDiGetActualSectionToInstallExW (SETUPAPI.@)
|
||||
*/
|
||||
BOOL WINAPI SetupDiGetActualSectionToInstallExW(HINF hinf, const WCHAR *section, SP_ALTPLATFORM_INFO *altplatform,
|
||||
WCHAR *section_ext, DWORD size, DWORD *needed, WCHAR **extptr, void *reserved)
|
||||
{
|
||||
WCHAR buffer[MAX_PATH];
|
||||
DWORD len;
|
||||
DWORD full_len;
|
||||
LONG line_count = -1;
|
||||
|
||||
TRACE("hinf %p, section %s, altplatform %p, ext %p, size %d, needed %p, extptr %p, reserved %p.\n",
|
||||
hinf, debugstr_w(section), altplatform, section_ext, size, needed, extptr, reserved);
|
||||
|
||||
if (altplatform)
|
||||
FIXME("SP_ALTPLATFORM_INFO unsupported\n");
|
||||
|
||||
lstrcpyW(buffer, section);
|
||||
len = lstrlenW(buffer);
|
||||
|
||||
if (OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT)
|
||||
{
|
||||
/* Test section name with '.NTx86' extension */
|
||||
lstrcpyW(&szBuffer[dwLength], NtPlatformExtension);
|
||||
lLineCount = SetupGetLineCountW(InfHandle, szBuffer);
|
||||
lstrcpyW(&buffer[len], NtPlatformExtension);
|
||||
line_count = SetupGetLineCountW(hinf, buffer);
|
||||
|
||||
if (lLineCount == -1)
|
||||
if (line_count == -1)
|
||||
{
|
||||
/* Test section name with '.NT' extension */
|
||||
lstrcpyW(&szBuffer[dwLength], NtExtension);
|
||||
lLineCount = SetupGetLineCountW(InfHandle, szBuffer);
|
||||
lstrcpyW(&buffer[len], NtExtension);
|
||||
line_count = SetupGetLineCountW(hinf, buffer);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Test section name with '.Win' extension */
|
||||
lstrcpyW(&szBuffer[dwLength], WinExtension);
|
||||
lLineCount = SetupGetLineCountW(InfHandle, szBuffer);
|
||||
lstrcpyW(&buffer[len], WinExtension);
|
||||
line_count = SetupGetLineCountW(hinf, buffer);
|
||||
}
|
||||
|
||||
if (lLineCount == -1)
|
||||
szBuffer[dwLength] = 0;
|
||||
if (line_count == -1)
|
||||
buffer[len] = 0;
|
||||
|
||||
dwFullLength = lstrlenW(szBuffer);
|
||||
full_len = lstrlenW(buffer);
|
||||
|
||||
if (InfSectionWithExt != NULL && InfSectionWithExtSize != 0)
|
||||
if (section_ext != NULL && size != 0)
|
||||
{
|
||||
if (InfSectionWithExtSize < (dwFullLength + 1))
|
||||
if (size < (full_len + 1))
|
||||
{
|
||||
SetLastError(ERROR_INSUFFICIENT_BUFFER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
lstrcpyW(InfSectionWithExt, szBuffer);
|
||||
if (Extension != NULL)
|
||||
lstrcpyW(section_ext, buffer);
|
||||
if (extptr != NULL)
|
||||
{
|
||||
*Extension = (dwLength == dwFullLength) ? NULL : &InfSectionWithExt[dwLength];
|
||||
*extptr = (len == full_len) ? NULL : §ion_ext[len];
|
||||
}
|
||||
}
|
||||
|
||||
if (RequiredSize != NULL)
|
||||
if (needed != NULL)
|
||||
{
|
||||
*RequiredSize = dwFullLength + 1;
|
||||
*needed = full_len + 1;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* SetupDiGetActualSectionToInstallW (SETUPAPI.@)
|
||||
*/
|
||||
BOOL WINAPI SetupDiGetActualSectionToInstallW(HINF hinf, const WCHAR *section, WCHAR *section_ext,
|
||||
DWORD size, DWORD *needed, WCHAR **extptr)
|
||||
{
|
||||
return SetupDiGetActualSectionToInstallExW(hinf, section, NULL, section_ext, size,
|
||||
needed, extptr, NULL);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* SetupDiGetClassDescriptionA (SETUPAPI.@)
|
||||
*/
|
||||
|
|
|
@ -316,6 +316,8 @@
|
|||
@ stdcall SetupDiEnumDriverInfoA(ptr ptr long long ptr)
|
||||
@ stdcall SetupDiEnumDriverInfoW(ptr ptr long long ptr)
|
||||
@ stdcall SetupDiGetActualSectionToInstallA(long str str long ptr ptr)
|
||||
@ stdcall SetupDiGetActualSectionToInstallExA(long str ptr str long ptr ptr ptr)
|
||||
@ stdcall SetupDiGetActualSectionToInstallExW(long wstr ptr wstr long ptr ptr ptr)
|
||||
@ stdcall SetupDiGetActualSectionToInstallW(long wstr wstr long ptr ptr)
|
||||
@ stdcall SetupDiGetClassBitmapIndex(ptr ptr)
|
||||
@ stdcall SetupDiGetClassDescriptionA(ptr str long ptr)
|
||||
|
|
Loading…
Reference in New Issue