+UpgradeRepairDlgProc(
+ IN HWND hwndDlg,
+ IN UINT uMsg,
+ IN WPARAM wParam,
+ IN LPARAM lParam)
+{
+ PSETUPDATA pSetupData;
+ HWND hList;
+
+ /* Retrieve pointer to the global setup data */
+ pSetupData = (PSETUPDATA)GetWindowLongPtrW(hwndDlg, GWL_USERDATA);
+
+ switch (uMsg)
+ {
+ case WM_INITDIALOG:
+ {
+ /* Save pointer to the global setup data */
+ pSetupData = (PSETUPDATA)((LPPROPSHEETPAGE)lParam)->lParam;
+ SetWindowLongPtrW(hwndDlg, GWL_USERDATA, (DWORD_PTR)pSetupData);
+
+ hList = GetDlgItem(hwndDlg, IDC_LIST1);
+
+ CreateListViewColumns(pSetupData->hInstance,
+ hList,
+ column_ids,
+ column_widths,
+ column_alignment,
+ MAX_LIST_COLUMNS);
+
+ break;
+ }
+
+ case WM_NOTIFY:
+ {
+ LPNMHDR lpnm = (LPNMHDR)lParam;
+
+ switch (lpnm->code)
+ {
+ case PSN_SETACTIVE:
+ PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_NEXT | PSWIZB_BACK);
+ break;
+
+ case PSN_QUERYCANCEL:
+ SetWindowLongPtrW(hwndDlg,
+ DWL_MSGRESULT,
+ MessageBox(GetParent(hwndDlg),
+ pSetupData->szAbortMessage,
+ pSetupData->szAbortTitle,
+ MB_YESNO | MB_ICONQUESTION) != IDYES);
+ return TRUE;
+
+ case PSN_WIZNEXT: // set the selected data
+ pSetupData->RepairUpdateFlag = !(SendMessageW(GetDlgItem(hwndDlg, IDC_INSTALL),
+ BM_GETCHECK,
+ (WPARAM) 0,
+ (LPARAM) 0) == BST_CHECKED);
+ return TRUE;
+
+ default:
+ break;
+ }
+ }
+ break;
+
+ default:
+ break;
+
+ }
+ return FALSE;
+}
+
+static INT_PTR CALLBACK
+DeviceDlgProc(
+ IN HWND hwndDlg,
+ IN UINT uMsg,
+ IN WPARAM wParam,
+ IN LPARAM lParam)