Skip to content

Commit

Permalink
[HOTPLUG] **WIP** Implement "Stop a Hardware Device" dialog
Browse files Browse the repository at this point in the history
  • Loading branch information
TAN-Gaming committed Oct 27, 2023
1 parent ea4424c commit b6ab881
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 18 deletions.
1 change: 1 addition & 0 deletions dll/cpl/hotplug/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ spec2def(hotplug.dll hotplug.spec)

list(APPEND SOURCE
hotplug.c
eject.c
enum.c)

file(GLOB hotplug_rc_deps resources/*.*)
Expand Down
63 changes: 63 additions & 0 deletions dll/cpl/hotplug/eject.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/*
* PROJECT: ReactOS Safely Remove Hardware Applet
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Hardware safe removal support
* COPYRIGHT: Copyright 2023 Thamatip Chitpong <[email protected]>
*/

#include "hotplug.h"

static
VOID
SafeRemoveDevice(
_In_ DEVINST DevInst)
{
PNP_VETO_TYPE VetoType = PNP_VetoTypeUnknown;
CONFIGRET cr;

cr = CM_Request_Device_EjectW(DevInst, &VetoType, NULL, 0, 0);
if (cr != CR_SUCCESS && VetoType == PNP_VetoTypeUnknown)
{
WCHAR szError[64];
swprintf(szError, L"Failed to remove device (0x%x)", cr);
MessageBoxW(NULL, szError, NULL, MB_ICONEXCLAMATION | MB_OK);
}
}

INT_PTR
CALLBACK
ConfirmRemovalDlgProc(
HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
static DEVINST selectedDev;

switch (uMsg)
{
case WM_INITDIALOG:
selectedDev = lParam;
return TRUE;

case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDCANCEL:
case IDCLOSE:
EndDialog(hwndDlg, TRUE);
break;

case IDOK:
SafeRemoveDevice(selectedDev);
EndDialog(hwndDlg, TRUE);
break;
}

break;
}
}

return FALSE;
}
23 changes: 5 additions & 18 deletions dll/cpl/hotplug/hotplug.c
Original file line number Diff line number Diff line change
Expand Up @@ -407,23 +407,6 @@ ShowDeviceProperties(
HeapFree(GetProcessHeap(), 0, pszDevId);
}

static
VOID
SafeRemoveDevice(
_In_ DEVINST DevInst)
{
PNP_VETO_TYPE VetoType = PNP_VetoTypeUnknown;
CONFIGRET cr;

cr = CM_Request_Device_EjectW(DevInst, &VetoType, NULL, 0, 0);
if (cr != CR_SUCCESS && VetoType == PNP_VetoTypeUnknown)
{
WCHAR szError[64];
swprintf(szError, L"Failed to remove device (0x%x)", cr);
MessageBoxW(NULL, szError, NULL, MB_ICONEXCLAMATION | MB_OK);
}
}

INT_PTR
CALLBACK
SafeRemovalDlgProc(
Expand Down Expand Up @@ -527,7 +510,11 @@ SafeRemovalDlgProc(
case IDM_STOP:
{
HWND hwndDevTree = GetDlgItem(hwndDlg, IDC_SAFE_REMOVE_DEVICE_TREE);
SafeRemoveDevice(GetSelectedDeviceInst(hwndDevTree));
DialogBoxParamW(hApplet,
MAKEINTRESOURCEW(IDD_CONFIRM_STOP_HARDWARE_DIALOG),
hwndDlg,
ConfirmRemovalDlgProc,
(LPARAM)GetSelectedDeviceInst(hwndDevTree));
break;
}
}
Expand Down
8 changes: 8 additions & 0 deletions dll/cpl/hotplug/hotplug.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,14 @@ typedef struct
}APPLET, *PAPPLET;


// eject.c
INT_PTR
CALLBACK
ConfirmRemovalDlgProc(
HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);

// hotplug.c
LONG
Expand Down
12 changes: 12 additions & 0 deletions dll/cpl/hotplug/lang/en-US.rc
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,18 @@ BEGIN
PUSHBUTTON "&Close", IDCLOSE, 216, 224, 55, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END

IDD_CONFIRM_STOP_HARDWARE_DIALOG DIALOGEX 32, 10, 256, 148
CAPTION "Stop a Hardware Device"
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "ReactOS will attempt to stop the following devices. After the devices are stopped they may be removed safely.", IDC_STATIC, 7, 8, 240, 18, WS_CHILD | WS_VISIBLE | WS_GROUP
LTEXT "Choose OK to continue.", IDC_STATIC, 7, 32, 240, 18, WS_CHILD | WS_VISIBLE | WS_GROUP
CONTROL "", IDC_CONFIRM_STOP_DEVICE_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_GROUP | WS_TABSTOP, 8, 45, 240, 78
DEFPUSHBUTTON "OK", IDOK, 144, 127, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 198, 127, 50, 14
END


/* Menus */

Expand Down
1 change: 1 addition & 0 deletions dll/cpl/hotplug/resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#define IDC_SAFE_REMOVE_DISPLAY_COMPONENTS 306

#define IDD_CONFIRM_STOP_HARDWARE_DIALOG 310
#define IDC_CONFIRM_STOP_DEVICE_LIST 311

/* Menu IDs */
#define IDM_POPUP_DEVICE_TREE 500
Expand Down

0 comments on commit b6ab881

Please sign in to comment.