diff --git a/dll/win32/setupapi/CMakeLists.txt b/dll/win32/setupapi/CMakeLists.txt index 70063512fff..3e2b14205de 100644 --- a/dll/win32/setupapi/CMakeLists.txt +++ b/dll/win32/setupapi/CMakeLists.txt @@ -44,6 +44,6 @@ add_library(setupapi MODULE set_module_type(setupapi win32dll UNICODE) target_link_libraries(setupapi uuid wine ${PSEH_LIB} oldnames) add_delay_importlibs(setupapi comdlg32 shell32 winspool.drv wintrust) -add_importlibs(setupapi gdi32 comctl32 advapi32 user32 rpcrt4 version msvcrt kernel32 ntdll) +add_importlibs(setupapi gdi32 comctl32 advapi32 shell32 user32 rpcrt4 version msvcrt kernel32 ntdll) add_pch(setupapi setupapi_private.h "${PCH_SKIP_SOURCE}") add_cd_file(TARGET setupapi DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/setupapi/dialog.c b/dll/win32/setupapi/dialog.c index b1611dc32ba..9d65c7e3565 100644 --- a/dll/win32/setupapi/dialog.c +++ b/dll/win32/setupapi/dialog.c @@ -228,7 +228,7 @@ UINT WINAPI SetupPromptForDiskW(HWND hwndParent, PCWSTR DialogTitle, PCWSTR Disk debugstr_w(TagFile), DiskPromptStyle, PathBuffer, PathBufferSize, PathRequiredSize); - if(!FileSought) + if(!FileSought || noBrowse) { SetLastError(ERROR_INVALID_PARAMETER); return DPROMPT_CANCEL; diff --git a/dll/win32/setupapi/driver.c b/dll/win32/setupapi/driver.c index 3ead218522b..9596de69fb1 100644 --- a/dll/win32/setupapi/driver.c +++ b/dll/win32/setupapi/driver.c @@ -1998,6 +1998,60 @@ done: return ret; } +/*********************************************************************** + * SetupDiGetDriverInstallParamsW (SETUPAPI.@) + */ +BOOL WINAPI +SetupDiGetDriverInstallParamsA( + IN HDEVINFO DeviceInfoSet, + IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, + IN PSP_DRVINFO_DATA_A DriverInfoData, + OUT PSP_DRVINSTALL_PARAMS DriverInstallParams) +{ + BOOL ret = FALSE; + + TRACE("(%p %p %p %p)\n", DeviceInfoSet, DeviceInfoData, DriverInfoData, DriverInstallParams); + + if (!DeviceInfoSet || !DriverInfoData || !DriverInstallParams) + SetLastError(ERROR_INVALID_PARAMETER); + else if (DeviceInfoSet == (HDEVINFO)INVALID_HANDLE_VALUE) + SetLastError(ERROR_INVALID_HANDLE); + else if (((struct DeviceInfoSet *)DeviceInfoSet)->magic != SETUP_DEVICE_INFO_SET_MAGIC) + SetLastError(ERROR_INVALID_HANDLE); + else if (DeviceInfoData && DeviceInfoData->cbSize != sizeof(SP_DEVINFO_DATA)) + SetLastError(ERROR_INVALID_USER_BUFFER); + else if (DriverInfoData->cbSize != sizeof(SP_DRVINFO_DATA_V1_A) && DriverInfoData->cbSize != sizeof(SP_DRVINFO_DATA_V2_A)) + SetLastError(ERROR_INVALID_USER_BUFFER); + else if (DriverInstallParams->cbSize != sizeof(SP_DRVINSTALL_PARAMS)) + SetLastError(ERROR_INVALID_USER_BUFFER); + else + { + SP_DEVINSTALL_PARAMS_A InstallParams; + + InstallParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS_A); + if (SetupDiGetDeviceInstallParamsA(DeviceInfoSet, DeviceInfoData, &InstallParams)) + { + struct DriverInfoElement *driverInfo; + driverInfo = (struct DriverInfoElement *)InstallParams.ClassInstallReserved; + ERR("ret - driverInfo=%p\n",driverInfo); + if (driverInfo == NULL) + SetLastError(ERROR_NO_DRIVER_SELECTED); + else + { + ERR("ret - driverInfo->Params=0x%X DriverInstallParams->cbSize=%d\n",driverInfo->Params,DriverInstallParams->cbSize); + memcpy( + DriverInstallParams, + &driverInfo->Params, + DriverInstallParams->cbSize); + ret = TRUE; + } + } + } + + TRACE("SetupDiGetDeviceInstallParamsA - Returning %d\n", ret); + return ret; +} + /*********************************************************************** * SetupDiGetDriverInstallParamsW (SETUPAPI.@) */ diff --git a/dll/win32/setupapi/setupapi_private.h b/dll/win32/setupapi/setupapi_private.h index fb758142645..3b037fd405d 100644 --- a/dll/win32/setupapi/setupapi_private.h +++ b/dll/win32/setupapi/setupapi_private.h @@ -383,4 +383,9 @@ LPSTR WINAPI UnicodeToMultiByte(LPCWSTR lpUnicodeStr, UINT uCodePage); typedef BOOL (*FIND_CALLBACK)(LPCWSTR SectionName, PVOID Context); BOOL EnumerateSectionsStartingWith(HINF hInf, LPCWSTR pStr, FIND_CALLBACK Callback, PVOID Context); +PVOID* srclist_temporary_sources; +UINT srclist_temporary_sources_count; +static BOOLEAN noBrowse = FALSE; + + #endif /* __SETUPAPI_PRIVATE_H */ diff --git a/dll/win32/setupapi/stubs.c b/dll/win32/setupapi/stubs.c index 17ded50eeb3..520420d6320 100644 --- a/dll/win32/setupapi/stubs.c +++ b/dll/win32/setupapi/stubs.c @@ -56,25 +56,6 @@ BOOL WINAPI SetupAddToSourceListW(DWORD flags, PCWSTR source) return TRUE; } -/*********************************************************************** - * SetupSetSourceListA (SETUPAPI.@) - */ -BOOL WINAPI SetupSetSourceListA(DWORD flags, PCSTR *list, UINT count) -{ - FIXME("0x%08x %p %d\n", flags, list, count); - return FALSE; -} - -/*********************************************************************** - * SetupSetSourceListW (SETUPAPI.@) - */ -BOOL WINAPI SetupSetSourceListW(DWORD flags, PCWSTR *list, UINT count) -{ - FIXME("0x%08x %p %d\n", flags, list, count); - return FALSE; -} - - /*********************************************************************** * SetupDiRemoveDevice(SETUPAPI.@) */