From 7e7378f7c928311363658152f57575826652821c Mon Sep 17 00:00:00 2001 From: Christoph von Wittich Date: Mon, 27 May 2013 18:33:18 +0000 Subject: [PATCH] [devmgr] add "update driver" button not functional due to unimplemented DiShowUpdateDevice svn path=/trunk/; revision=59090 --- reactos/dll/win32/devmgr/CMakeLists.txt | 1 + reactos/dll/win32/devmgr/advprop.c | 50 +++++++++++++++++++++++++ reactos/dll/win32/devmgr/lang/de-DE.rc | 4 +- reactos/dll/win32/devmgr/lang/en-US.rc | 4 +- reactos/dll/win32/devmgr/precomp.h | 3 ++ reactos/dll/win32/devmgr/resource.h | 1 + reactos/dll/win32/newdev/stubs.c | 22 +++++++---- 7 files changed, 75 insertions(+), 10 deletions(-) diff --git a/reactos/dll/win32/devmgr/CMakeLists.txt b/reactos/dll/win32/devmgr/CMakeLists.txt index af6aa323785..ffe276b6029 100644 --- a/reactos/dll/win32/devmgr/CMakeLists.txt +++ b/reactos/dll/win32/devmgr/CMakeLists.txt @@ -18,6 +18,7 @@ target_link_libraries(devmgr uuid wine) add_importlibs(devmgr setupapi advapi32 + newdev user32 version msvcrt diff --git a/reactos/dll/win32/devmgr/advprop.c b/reactos/dll/win32/devmgr/advprop.c index b4d483461e3..dfc8d35807b 100644 --- a/reactos/dll/win32/devmgr/advprop.c +++ b/reactos/dll/win32/devmgr/advprop.c @@ -558,6 +558,56 @@ AdvProcDriverDlgProc(IN HWND hwndDlg, (ULONG_PTR)dap); break; } + case IDC_UPDATEDRIVER: + { + if (dap->CurrentDeviceInfoSet != INVALID_HANDLE_VALUE) + { + BOOL NeedReboot; + if (DiShowUpdateDevice(hwndDlg, dap->CurrentDeviceInfoSet, &dap->CurrentDeviceInfoData, 0, &NeedReboot)) + { + if (NeedReboot) + { + //FIXME: load text from resource file + if(MessageBoxW(hwndDlg, L"Reboot now?", L"Reboot required", MB_YESNO | MB_ICONQUESTION) == IDYES) + { + HANDLE hToken; + TOKEN_PRIVILEGES Privileges; + + if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) + { + DPRINT("OpenProcessToken failed\n"); + break; + } + + /* Get the LUID for the Shutdown privilege */ + if (!LookupPrivilegeValueW(NULL, SE_SHUTDOWN_NAME, &Privileges.Privileges[0].Luid)) + { + DPRINT("LookupPrivilegeValue failed\n"); + break; + } + + /* Assign the Shutdown privilege to our process */ + Privileges.PrivilegeCount = 1; + Privileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; + + if (!AdjustTokenPrivileges(hToken, FALSE, &Privileges, 0, NULL, NULL)) + { + DPRINT("AdjustTokenPrivileges failed\n"); + break; + } + + /* Finally shut down the system */ + if(!ExitWindowsEx(EWX_POWEROFF, SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER | SHTDN_REASON_FLAG_PLANNED)) + { + DPRINT("ExitWindowsEx failed\n"); + break; + } + } + } + } + } + break; + } } break; } diff --git a/reactos/dll/win32/devmgr/lang/de-DE.rc b/reactos/dll/win32/devmgr/lang/de-DE.rc index b674d2b52eb..d8c7d20cdc5 100644 --- a/reactos/dll/win32/devmgr/lang/de-DE.rc +++ b/reactos/dll/win32/devmgr/lang/de-DE.rc @@ -172,8 +172,10 @@ BEGIN EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY LTEXT "Signaturgeber:", -1, 37, 81, 60, 8, SS_NOPREFIX EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY - PUSHBUTTON "&Treiberdetails...", IDC_DRIVERDETAILS, 7, 106, 70, 15 + PUSHBUTTON "&Treiberdetails...", IDC_DRIVERDETAILS, 7, 106, 75, 15 LTEXT "Einzelheiten über die Treiberdateien anzeigen.", -1, 91, 110, 154, 17, SS_NOPREFIX + PUSHBUTTON "Treiber &aktualisieren...", IDC_UPDATEDRIVER, 7, 126, 75, 15 + LTEXT "Aktualisiert den Gerätetreiber.", -1, 91, 130, 154, 17, SS_NOPREFIX END IDD_DRIVERDETAILS DIALOGEX DISCARDABLE 0, 0, 224, 230 diff --git a/reactos/dll/win32/devmgr/lang/en-US.rc b/reactos/dll/win32/devmgr/lang/en-US.rc index ac8af431007..6a1a891ad30 100644 --- a/reactos/dll/win32/devmgr/lang/en-US.rc +++ b/reactos/dll/win32/devmgr/lang/en-US.rc @@ -172,8 +172,10 @@ BEGIN EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY LTEXT "Digital Signer:", -1, 37, 81, 60, 8, SS_NOPREFIX EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY - PUSHBUTTON "&Driver Details...", IDC_DRIVERDETAILS, 7, 106, 70, 15 + PUSHBUTTON "&Driver Details", IDC_DRIVERDETAILS, 7, 106, 75, 15 LTEXT "To view details about the driver files.", -1, 91, 110, 154, 17, SS_NOPREFIX + PUSHBUTTON "&Update Driver...", IDC_UPDATEDRIVER, 7, 126, 75, 15 + LTEXT "Update the device driver.", -1, 91, 130, 154, 17, SS_NOPREFIX END IDD_DRIVERDETAILS DIALOGEX DISCARDABLE 0, 0, 224, 230 diff --git a/reactos/dll/win32/devmgr/precomp.h b/reactos/dll/win32/devmgr/precomp.h index 6bffcfd0b89..f403bf59e8f 100644 --- a/reactos/dll/win32/devmgr/precomp.h +++ b/reactos/dll/win32/devmgr/precomp.h @@ -8,6 +8,9 @@ #include #include #include +#undef WINVER +#define WINVER _WIN32_WINNT_VISTA +#include #include #include "resource.h" diff --git a/reactos/dll/win32/devmgr/resource.h b/reactos/dll/win32/devmgr/resource.h index 4c038b2665c..a2b2039df95 100644 --- a/reactos/dll/win32/devmgr/resource.h +++ b/reactos/dll/win32/devmgr/resource.h @@ -40,6 +40,7 @@ #define IDC_FILECOPYRIGHT 0x595 #define IDC_DETAILSPROPNAME 0x596 #define IDC_DETAILSPROPVALUE 0x597 +#define IDC_UPDATEDRIVER 0x598 #define IDS_NAME 0x100 #define IDS_TYPE 0x101 diff --git a/reactos/dll/win32/newdev/stubs.c b/reactos/dll/win32/newdev/stubs.c index 4c1164e6a1c..ba846aa20b5 100644 --- a/reactos/dll/win32/newdev/stubs.c +++ b/reactos/dll/win32/newdev/stubs.c @@ -57,13 +57,19 @@ InstallSelectedDriverW( */ BOOL WINAPI DiShowUpdateDevice( - IN HWND hwndParent OPTIONAL, - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, - IN DWORD Flags, - OUT PBOOL NeedReboot OPTIONAL) + IN HWND hwndParent OPTIONAL, + IN HDEVINFO DeviceInfoSet, + IN PSP_DEVINFO_DATA DeviceInfoData, + IN DWORD Flags, + OUT PBOOL NeedReboot OPTIONAL) { - UNIMPLEMENTED; - SetLastError(ERROR_GEN_FAILURE); - return FALSE; + if (Flags != 0) + { + SetLastError(ERROR_INVALID_FLAGS); + return FALSE; + } + + UNIMPLEMENTED; + SetLastError(ERROR_GEN_FAILURE); + return FALSE; } -- 2.17.1