- Replace the call to DevInstallW by InstallDevInst in the device properties.
- Also call InstallDevInst from the device problem wizard.
CORE-6350 #resolve

svn path=/trunk/; revision=64566
This commit is contained in:
Eric Kohl 2014-10-06 18:35:17 +00:00
parent d94795e842
commit 28dd65f7b6
3 changed files with 29 additions and 9 deletions

View file

@ -399,13 +399,6 @@ DriverDetailsDlgProc(IN HWND hwndDlg,
return Ret;
}
BOOL
WINAPI
DevInstallW(
IN HWND hWndParent,
IN HINSTANCE hInstance,
IN LPCWSTR InstanceId,
IN INT Show);
static
VOID
@ -415,6 +408,7 @@ UpdateDriver(
{
TOKEN_PRIVILEGES Privileges;
HANDLE hToken;
DWORD dwReboot;
BOOL NeedReboot = FALSE;
// Better use InstallDevInst:
@ -426,7 +420,8 @@ UpdateDriver(
// BOOL bUpdate,
// DWORD *dwReboot);
// See: http://comp.os.ms-windows.programmer.win32.narkive.com/J8FTd4KK/signature-of-undocumented-installdevinstex
if (!DevInstallW(hwndDlg, NULL, dap->szDeviceID, SW_SHOWNOACTIVATE))
if (!InstallDevInst(hwndDlg, dap->szDeviceID, TRUE, &dwReboot))
return;
if (NeedReboot == FALSE)
@ -1619,6 +1614,8 @@ UpdateDevInfo(IN HWND hwndDlg,
DWORD nDriverPages = 0;
BOOL RecalcPages = FALSE;
TRACE("UpdateDevInfo()\n");
hPropSheetDlg = GetParent(hwndDlg);
if (dap->PageInitialized)
@ -2014,6 +2011,7 @@ GetParentNode:
dap->PropertySheetType) &&
nDriverPages != 0 && GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
TRACE("Count %d additional pages!\n", nDriverPages);
dap->nDevPropSheets += nDriverPages;
}
else
@ -2035,6 +2033,7 @@ GetParentNode:
/* add the device property sheets */
if (dap->nDevPropSheets != 0)
{
TRACE("Show %d pages!\n", dap->nDevPropSheets);
dap->DevPropSheets = HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY,
dap->nDevPropSheets * sizeof(HPROPSHEETPAGE));
@ -2054,20 +2053,28 @@ GetParentNode:
{
/* add the property sheets */
for (iPage = 0;
iPage != nDriverPages;
iPage < nDriverPages;
iPage++)
{
TRACE("Add page %d\n", iPage);
TRACE("Sheet %p\n", dap->DevPropSheets[iPage]);
if (PropSheet_AddPage(hPropSheetDlg,
dap->DevPropSheets[iPage]))
{
RecalcPages = TRUE;
}
else
{
TRACE("PropSheet_AddPage() failed\n");
}
}
dap->FreeDevPropSheets = TRUE;
}
else
{
TRACE("SetupDiGetClassDevPropertySheets() failed\n");
/* cleanup, we were unable to get the device property sheets */
iPage = nDriverPages;
dap->nDevPropSheets -= nDriverPages;

View file

@ -34,10 +34,20 @@ ShowDeviceProblemWizard(IN HWND hWndParent OPTIONAL,
IN PSP_DEVINFO_DATA DevInfoData,
IN HMACHINE hMachine OPTIONAL)
{
WCHAR szDeviceInstanceId[256];
CONFIGRET cr;
ULONG Status, ProblemNumber;
DWORD dwReboot;
BOOL Ret = FALSE;
/* Get the device instance id */
if (!SetupDiGetDeviceInstanceId(hDevInfo,
DevInfoData,
szDeviceInstanceId,
256,
NULL))
return FALSE;
cr = CM_Get_DevNode_Status_Ex(&Status,
&ProblemNumber,
DevInfoData->DevInst,
@ -62,6 +72,7 @@ ShowDeviceProblemWizard(IN HWND hWndParent OPTIONAL,
case CM_PROB_UNKNOWN_RESOURCE:
{
/* FIXME - display the update driver wizard */
InstallDevInst(hWndParent, szDeviceInstanceId, TRUE, &dwReboot);
break;
}
@ -78,6 +89,7 @@ ShowDeviceProblemWizard(IN HWND hWndParent OPTIONAL,
case CM_PROB_FAILED_INSTALL:
{
/* FIXME - display the driver (re)installation wizard */
InstallDevInst(hWndParent, szDeviceInstanceId, TRUE, &dwReboot);
break;
}

View file

@ -13,6 +13,7 @@
#include <regstr.h>
#include <setupapi.h>
#include <cfgmgr32.h>
#include <dll/newdevp.h>
#include <dll/devmgr/devmgr.h>
#include <wine/debug.h>