ReactOS  0.4.14-dev-77-gd9e7c48
hdwwiz.c
Go to the documentation of this file.
1 /*
2  * ReactOS New devices installation
3  * Copyright (C) 2005, 2008 ReactOS Team
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18  */
19 /*
20  * PROJECT: ReactOS Add hardware control panel
21  * FILE: dll/cpl/hdwwiz/hdwwiz.c
22  * PURPOSE: ReactOS Add hardware control panel
23  * PROGRAMMER: Hervé Poussineau (hpoussin@reactos.org)
24  * Dmitry Chapyshev (dmitry@reactos.org)
25  */
26 
27 #include "resource.h"
28 #include "hdwwiz.h"
29 
30 /* GLOBALS ******************************************************************/
31 
38 
40 
41 
42 /* STATIC FUNCTIONS *********************************************************/
43 
44 static HFONT
46 {
47  NONCLIENTMETRICS ncm;
48  LOGFONT LogFont;
49  HDC hdc;
50  INT FontSize;
51  HFONT hFont;
52 
53  ncm.cbSize = sizeof(NONCLIENTMETRICS);
54  SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
55 
56  LogFont = ncm.lfMessageFont;
57  LogFont.lfWeight = FW_BOLD;
58  wcscpy(LogFont.lfFaceName, L"MS Shell Dlg");
59 
60  hdc = GetDC(NULL);
61  FontSize = 12;
62  LogFont.lfHeight = 0 - GetDeviceCaps (hdc, LOGPIXELSY) * FontSize / 72;
63  hFont = CreateFontIndirect(&LogFont);
64  ReleaseDC(NULL, hdc);
65 
66  return hFont;
67 }
68 
69 static INT_PTR CALLBACK
71 {
72  switch (uMsg)
73  {
74  case WM_INITDIALOG:
75  {
76  /* Set title font */
78  }
79  break;
80 
81  case WM_NOTIFY:
82  {
83  LPNMHDR lpnm = (LPNMHDR)lParam;
84 
85  switch (lpnm->code)
86  {
87  case PSN_SETACTIVE:
88  {
90  }
91  break;
92  }
93  }
94  break;
95  }
96 
97  return FALSE;
98 }
99 
100 static INT_PTR CALLBACK
102 {
103  switch (uMsg)
104  {
105  case WM_INITDIALOG:
106  {
107  /* TODO: PnP devices search */
108  }
109  break;
110 
111  case WM_NOTIFY:
112  {
113  LPNMHDR lpnm = (LPNMHDR)lParam;
114 
115  switch (lpnm->code)
116  {
117  case PSN_SETACTIVE:
118  {
120  }
121  break;
122  }
123  }
124  break;
125  }
126 
127  return FALSE;
128 }
129 
130 static INT_PTR CALLBACK
132 {
133  switch (uMsg)
134  {
135  case WM_COMMAND:
136  {
137  if(HIWORD(wParam) == BN_CLICKED)
138  {
139  if ((SendDlgItemMessage(hwndDlg, IDC_CONNECTED, BM_GETCHECK, 0, 0) == BST_CHECKED) ||
141  {
143  }
144  else
145  {
147  }
148  }
149  }
150  break;
151 
152  case WM_NOTIFY:
153  {
154  LPNMHDR lpnm = (LPNMHDR)lParam;
155 
156  switch (lpnm->code)
157  {
158  case PSN_SETACTIVE:
159  {
160  if ((SendDlgItemMessage(hwndDlg, IDC_CONNECTED, BM_GETCHECK, 0, 0) == BST_CHECKED) ||
162  {
164  }
165  else
166  {
168  }
169  }
170  break;
171 
172  case PSN_WIZNEXT:
173  {
176  else
178 
179  return TRUE;
180  }
181  }
182  }
183  break;
184  }
185 
186  return FALSE;
187 }
188 
189 static INT_PTR CALLBACK
191 {
192  switch (uMsg)
193  {
194  case WM_INITDIALOG:
195  {
196  /* Set title font */
198  }
199  break;
200 
201  case WM_NOTIFY:
202  {
203  LPNMHDR lpnm = (LPNMHDR)lParam;
204 
205  switch (lpnm->code)
206  {
207  case PSN_SETACTIVE:
208  {
209  /* Only "Finish" button */
211  }
212  break;
213  }
214  }
215  break;
216  }
217 
218  return FALSE;
219 }
220 
221 static INT_PTR CALLBACK
223 {
224  switch (uMsg)
225  {
226  case WM_INITDIALOG:
227  {
228  /* Set title font */
230  }
231  break;
232 
233  case WM_NOTIFY:
234  {
235  LPNMHDR lpnm = (LPNMHDR)lParam;
236 
237  switch (lpnm->code)
238  {
239  case PSN_SETACTIVE:
240  {
242  }
243  break;
244 
245  case PSN_WIZBACK:
246  {
248  return TRUE;
249  }
250  }
251  }
252  break;
253  }
254 
255  return FALSE;
256 }
257 
258 static VOID
259 TrimGuidString(LPWSTR szString, LPWSTR szNewString)
260 {
261  WCHAR szBuffer[39];
262  INT Index;
263 
264  if (wcslen(szString) == 38)
265  {
266  if ((szString[0] == L'{') && (szString[37] == L'}'))
267  {
268  for (Index = 0; Index < wcslen(szString); Index++)
269  szBuffer[Index] = szString[Index + 1];
270 
271  szBuffer[36] = L'\0';
272  wcscpy(szNewString, szBuffer);
273  return;
274  }
275  }
276  wcscpy(szNewString, L"\0");
277 }
278 
279 static VOID
281 {
282  LV_COLUMN Column;
283  LV_ITEM Item;
285  szTrimGuid[MAX_STR_SIZE], szStatusText[MAX_STR_SIZE];
286  HWND hList = GetDlgItem(hwndDlg, IDC_PROBELIST);
287  PWSTR pstrStatusText;
288  HDEVINFO hDevInfo;
289  SP_DEVINFO_DATA DevInfoData;
290  ULONG ulStatus, ulProblemNumber;
291  GUID ClassGuid;
292  RECT Rect;
293  DWORD Index;
294 
295  if (!hList) return;
296 
297  ZeroMemory(&Column, sizeof(LV_COLUMN));
298 
300 
301  Column.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;
302  Column.fmt = LVCFMT_LEFT;
303  Column.iSubItem = 0;
304  Column.pszText = NULL;
305  Column.cx = Rect.right - GetSystemMetrics(SM_CXVSCROLL);
306  (VOID) ListView_InsertColumn(hList, 0, &Column);
307 
308  ZeroMemory(&Item, sizeof(LV_ITEM));
309 
310  LoadString(hApplet, IDS_ADDNEWDEVICE, szBuffer, sizeof(szBuffer) / sizeof(WCHAR));
311 
312  Item.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE | LVIF_IMAGE;
313  Item.pszText = (LPWSTR) szBuffer;
314  Item.iItem = (INT) ListView_GetItemCount(hList);
315  Item.iImage = -1;
316  (VOID) ListView_InsertItem(hList, &Item);
317 
319 
320  if (hDevInfo == INVALID_HANDLE_VALUE) return;
321 
322  /* Get the device image List */
325 
326  DevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
327  for (Index = 0; TRUE; Index++)
328  {
329  szBuffer[0] = L'\0';
330 
331  if (!SetupDiEnumDeviceInfo(hDevInfo, Index, &DevInfoData)) break;
332 
333  if (CM_Get_DevNode_Status_Ex(&ulStatus, &ulProblemNumber, DevInfoData.DevInst, 0, NULL) == CR_SUCCESS)
334  {
335  if (ulStatus & DN_NO_SHOW_IN_DM) continue;
336  }
337 
338  /* Get the device's friendly name */
339  if (!SetupDiGetDeviceRegistryProperty(hDevInfo,
340  &DevInfoData,
342  0,
343  (BYTE*)szBuffer,
344  MAX_STR_SIZE,
345  NULL))
346  {
347  /* If the friendly name fails, try the description instead */
349  &DevInfoData,
351  0,
352  (BYTE*)szBuffer,
353  MAX_STR_SIZE,
354  NULL);
355  }
356 
358  &DevInfoData,
360  0,
361  (BYTE*)szGuid,
362  MAX_STR_SIZE,
363  NULL);
364 
365  TrimGuidString(szGuid, szTrimGuid);
366  UuidFromStringW(szTrimGuid, &ClassGuid);
367 
369  &ClassGuid,
370  &Item.iImage);
371 
373  DevInfoData.DevInst,
374  ulProblemNumber,
375  szStatusText,
376  sizeof(szStatusText) / sizeof(WCHAR));
377 
378  pstrStatusText = (PWSTR)HeapAlloc(hProcessHeap, 0, sizeof(szStatusText));
379  lstrcpy(pstrStatusText, szStatusText);
380 
381  if (szBuffer[0] != L'\0')
382  {
383  /* Set device name */
384  Item.pszText = (LPWSTR) szBuffer;
385  Item.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE | LVIF_IMAGE;
386  Item.lParam = (LPARAM) pstrStatusText;
387  Item.iItem = (INT) ListView_GetItemCount(hList);
388  (VOID) ListView_InsertItem(hList, &Item);
389  }
390 
391  DevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
392  }
393 
397 }
398 
399 static INT_PTR CALLBACK
401 {
402  INT Index;
403 
404  switch (uMsg)
405  {
406  case WM_INITDIALOG:
407  {
409  InitProbeListPage(hwndDlg);
410  }
411  break;
412 
413  case WM_NOTIFY:
414  {
415  LPNMHDR lpnm = (LPNMHDR)lParam;
416 
417  switch (lpnm->code)
418  {
419  case PSN_SETACTIVE:
420  {
422  }
423  break;
424 
425  case PSN_WIZNEXT:
426  {
428  if (Index == -1) Index = 0;
429 
430  if (Index == 0)
431  {
433  }
434  else
435  {
436  LVITEM Item;
437  PWSTR pts;
438 
439  ZeroMemory(&Item, sizeof(LV_ITEM));
440  Item.mask = LVIF_PARAM;
441  Item.iItem = Index;
442  (VOID) ListView_GetItem(GetDlgItem(hwndDlg, IDC_PROBELIST), &Item);
443  pts = (PWSTR) Item.lParam;
445 
447  }
448  return TRUE;
449  }
450  }
451  }
452  break;
453 
454  case WM_DESTROY:
455  {
456  INT Index;
457  LVITEM Item;
458 
459  for (Index = ListView_GetItemCount(GetDlgItem(hwndDlg, IDC_PROBELIST)); --Index > 0;)
460  {
461  ZeroMemory(&Item, sizeof(LV_ITEM));
462  Item.mask = LVIF_PARAM;
463  Item.iItem = Index;
464  (VOID) ListView_GetItem(GetDlgItem(hwndDlg, IDC_PROBELIST), &Item);
465  HeapFree(hProcessHeap, 0, (LPVOID) Item.lParam);
466  }
468  }
469  break;
470  }
471 
472  return FALSE;
473 }
474 
475 static INT_PTR CALLBACK
477 {
478  switch (uMsg)
479  {
480  case WM_NOTIFY:
481  {
482  LPNMHDR lpnm = (LPNMHDR)lParam;
483 
484  switch (lpnm->code)
485  {
486  case PSN_SETACTIVE:
487  {
491  else
492  {
495  }
496  }
497  break;
498 
499  case PSN_WIZNEXT:
500  {
503  else
505 
506  return TRUE;
507  }
508  }
509  }
510  break;
511  }
512 
513  return FALSE;
514 }
515 
516 static INT_PTR CALLBACK
518 {
519  switch (uMsg)
520  {
521  case WM_INITDIALOG:
522  {
523  /* Set title font */
525  }
526  break;
527 
528  case WM_NOTIFY:
529  {
530  LPNMHDR lpnm = (LPNMHDR)lParam;
531 
532  switch (lpnm->code)
533  {
534  case PSN_SETACTIVE:
535  {
536  /* Set status text */
538 
540  }
541  break;
542 
543  case PSN_WIZBACK:
544  {
546  return TRUE;
547  }
548  }
549  }
550  break;
551  }
552 
553  return FALSE;
554 }
555 
556 static INT
558  LPWSTR DevClassName,
559  LPWSTR DevClassDesc,
560  BOOL *DevPresent,
561  INT *ClassImage)
562 {
563  GUID ClassGuid;
564  HKEY KeyClass;
565  WCHAR ClassName[MAX_STR_SIZE];
567  UINT Ret;
568 
569  *DevPresent = FALSE;
570  *DevClassName = L'\0';
571 
572  Ret = CM_Enumerate_Classes(ClassIndex,
573  &ClassGuid,
574  0);
575  if (Ret != CR_SUCCESS)
576  {
577  /* All classes enumerated */
578  if(Ret == CR_NO_SUCH_VALUE)
579  {
581  return -1;
582  }
583 
584  if (Ret == CR_INVALID_DATA)
585  {
586  ; /* FIXME: What should we do here? */
587  }
588 
589  /* Handle other errors... */
590  }
591 
592  if (SetupDiClassNameFromGuid(&ClassGuid,
593  ClassName,
594  RequiredSize,
595  &RequiredSize))
596  {
597  lstrcpy(DevClassName, ClassName);
598  }
599 
601  &ClassGuid,
602  ClassImage))
603  {
604  /* FIXME: Can we do this?
605  * Set the blank icon: IDI_SETUPAPI_BLANK = 41
606  * It'll be image 24 in the imagelist */
607  *ClassImage = 24;
608  }
609 
610  /* Get device info for all devices of a particular class */
611  hDevInfoTypes = SetupDiGetClassDevs(&ClassGuid,
612  NULL,
613  NULL,
614  DIGCF_PRESENT);
616  {
618  return 0;
619  }
620 
621  KeyClass = SetupDiOpenClassRegKeyEx(&ClassGuid,
624  NULL,
625  0);
626  if (KeyClass != INVALID_HANDLE_VALUE)
627  {
628 
630 
631  if (RegQueryValue(KeyClass,
632  NULL,
633  DevClassDesc,
634  &dwSize) != ERROR_SUCCESS)
635  {
636  *DevClassDesc = L'\0';
637  }
638  }
639  else
640  {
641  return -3;
642  }
643 
644  *DevPresent = TRUE;
645 
646  RegCloseKey(KeyClass);
647 
648  return 0;
649 }
650 
651 static VOID
653 {
654  HWND hList = GetDlgItem(hwndDlg, IDC_HWTYPESLIST);
655  WCHAR DevName[MAX_STR_SIZE];
656  WCHAR DevDesc[MAX_STR_SIZE];
657  BOOL DevExist = FALSE;
658  INT ClassRet, DevImage, Index = 0;
659  LV_COLUMN Column;
660  LV_ITEM Item;
661  RECT Rect;
662 
663  if (!hList) return;
664 
665  ZeroMemory(&Column, sizeof(LV_COLUMN));
666 
668 
669  Column.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;
670  Column.fmt = LVCFMT_LEFT;
671  Column.iSubItem = 0;
672  Column.pszText = NULL;
673  Column.cx = Rect.right - GetSystemMetrics(SM_CXVSCROLL);
674  (VOID) ListView_InsertColumn(hList, 0, &Column);
675 
676  ZeroMemory(&Item, sizeof(LV_ITEM));
677 
678  do
679  {
680  ClassRet = EnumDeviceClasses(Index,
681  DevName,
682  DevDesc,
683  &DevExist,
684  &DevImage);
685 
686  if ((ClassRet != -1) && (DevExist))
687  {
688  Item.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE | LVIF_IMAGE;
689  Item.iItem = Index;
690  Item.iImage = DevImage;
691 
692  if (DevDesc[0] != L'\0')
693  Item.pszText = (LPWSTR) DevDesc;
694  else
695  Item.pszText = (LPWSTR) DevName;
696 
697  (VOID) ListView_InsertItem(hList, &Item);
698 
699  /* Kill InfoList initialized in EnumDeviceClasses */
700  if (hDevInfoTypes)
701  {
704  }
705  }
706  Index++;
707  }
708  while (ClassRet != -1);
709 
711 }
712 
713 static INT_PTR CALLBACK
715 {
716  switch (uMsg)
717  {
718  case WM_INITDIALOG:
719  {
720  InitHardWareTypesPage(hwndDlg);
721  }
722  break;
723 
724  case WM_NOTIFY:
725  {
726  LPNMHDR lpnm = (LPNMHDR)lParam;
727 
728  switch (lpnm->code)
729  {
730  case PSN_SETACTIVE:
731  {
733  }
734  break;
735 
736  case PSN_WIZBACK:
737  {
739  return TRUE;
740  }
741  }
742  }
743  break;
744  }
745 
746  return FALSE;
747 }
748 
749 static INT_PTR CALLBACK
751 {
752  switch (uMsg)
753  {
754  case WM_NOTIFY:
755  {
756  LPNMHDR lpnm = (LPNMHDR)lParam;
757 
758  switch (lpnm->code)
759  {
760  case PSN_SETACTIVE:
761  {
763  }
764  break;
765 
766  case PSN_WIZBACK:
767  {
769  return TRUE;
770  }
771  }
772  }
773  break;
774  }
775 
776  return FALSE;
777 }
778 
779 static int CALLBACK
781 {
782  // NOTE: This callback is needed to set large icon correctly.
783  HICON hIcon;
784  switch (uMsg)
785  {
786  case PSCB_INITIALIZED:
787  {
789  SendMessageW(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
790  break;
791  }
792  }
793  return 0;
794 }
795 
796 static VOID
798 {
799  HPROPSHEETPAGE ahpsp[10];
800  PROPSHEETPAGE psp = {0};
801  PROPSHEETHEADER psh;
802  UINT nPages = 0;
803 
804  /* Create the Start page, until setup is working */
805  psp.dwSize = sizeof(PROPSHEETPAGE);
806  psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER;
807  psp.hInstance = hApplet;
808  psp.lParam = 0;
809  psp.pfnDlgProc = StartPageDlgProc;
810  psp.pszTemplate = MAKEINTRESOURCE(IDD_STARTPAGE);
811  ahpsp[nPages++] = CreatePropertySheetPage(&psp);
812 
813  /* Create search page */
814  psp.dwSize = sizeof(PROPSHEETPAGE);
815  psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
816  psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_SEARCHTITLE);
817  psp.pszHeaderSubTitle = NULL;
818  psp.hInstance = hApplet;
819  psp.lParam = 0;
820  psp.pfnDlgProc = SearchPageDlgProc;
821  psp.pszTemplate = MAKEINTRESOURCE(IDD_SEARCHPAGE);
822  ahpsp[nPages++] = CreatePropertySheetPage(&psp);
823 
824  /* Create is connected page */
825  psp.dwSize = sizeof(PROPSHEETPAGE);
826  psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
827  psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_ISCONNECTED);
828  psp.pszHeaderSubTitle = NULL;
829  psp.hInstance = hApplet;
830  psp.lParam = 0;
831  psp.pfnDlgProc = IsConnectedPageDlgProc;
832  psp.pszTemplate = MAKEINTRESOURCE(IDD_ISCONNECTEDPAGE);
833  ahpsp[nPages++] = CreatePropertySheetPage(&psp);
834 
835  /* Create probe list page */
836  psp.dwSize = sizeof(PROPSHEETPAGE);
837  psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
838  psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_PROBELISTTITLE);
839  psp.pszHeaderSubTitle = NULL;
840  psp.hInstance = hApplet;
841  psp.lParam = 0;
842  psp.pfnDlgProc = ProbeListPageDlgProc;
843  psp.pszTemplate = MAKEINTRESOURCE(IDD_PROBELISTPAGE);
844  ahpsp[nPages++] = CreatePropertySheetPage(&psp);
845 
846  /* Create select search way page */
847  psp.dwSize = sizeof(PROPSHEETPAGE);
848  psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
849  psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_SELECTWAYTITLE);
850  psp.pszHeaderSubTitle = NULL;
851  psp.hInstance = hApplet;
852  psp.lParam = 0;
853  psp.pfnDlgProc = SelectWayPageDlgProc;
854  psp.pszTemplate = MAKEINTRESOURCE(IDD_SELECTWAYPAGE);
855  ahpsp[nPages++] = CreatePropertySheetPage(&psp);
856 
857  /* Create device status page */
858  psp.dwSize = sizeof(PROPSHEETPAGE);
859  psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER;
860  psp.hInstance = hApplet;
861  psp.lParam = 0;
862  psp.pfnDlgProc = DevStatusPageDlgProc;
863  psp.pszTemplate = MAKEINTRESOURCE(IDD_HWSTATUSPAGE);
864  ahpsp[nPages++] = CreatePropertySheetPage(&psp);
865 
866  /* Create hardware types page */
867  psp.dwSize = sizeof(PROPSHEETPAGE);
868  psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
869  psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_HDTYPESTITLE);
870  psp.pszHeaderSubTitle = NULL;
871  psp.hInstance = hApplet;
872  psp.lParam = 0;
873  psp.pfnDlgProc = HdTypesPageDlgProc;
874  psp.pszTemplate = MAKEINTRESOURCE(IDD_HWTYPESPAGE);
875  ahpsp[nPages++] = CreatePropertySheetPage(&psp);
876 
877  /* Create progress page */
878  psp.dwSize = sizeof(PROPSHEETPAGE);
879  psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
880  psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_SEARCHTITLE);
881  psp.pszHeaderSubTitle = NULL;
882  psp.hInstance = hApplet;
883  psp.lParam = 0;
884  psp.pfnDlgProc = ProgressPageDlgProc;
885  psp.pszTemplate = MAKEINTRESOURCE(IDD_PROGRESSPAGE);
886  ahpsp[nPages++] = CreatePropertySheetPage(&psp);
887 
888  /* Create finish page */
889  psp.dwSize = sizeof(PROPSHEETPAGE);
890  psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER;
891  psp.hInstance = hApplet;
892  psp.lParam = 0;
893  psp.pfnDlgProc = FinishPageDlgProc;
894  psp.pszTemplate = MAKEINTRESOURCE(IDD_FINISHPAGE);
895  ahpsp[nPages++] = CreatePropertySheetPage(&psp);
896 
897  /* Create not connected page */
898  psp.dwSize = sizeof(PROPSHEETPAGE);
899  psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER;
900  psp.hInstance = hApplet;
901  psp.lParam = 0;
902  psp.pfnDlgProc = NotConnectedPageDlgProc;
903  psp.pszTemplate = MAKEINTRESOURCE(IDD_NOTCONNECTEDPAGE);
904  ahpsp[nPages++] = CreatePropertySheetPage(&psp);
905 
906  /* Create the property sheet */
907  psh.dwSize = sizeof(PROPSHEETHEADER);
908  psh.dwFlags = PSH_WIZARD97 | PSH_WATERMARK | PSH_HEADER | PSH_USEICONID | PSH_USECALLBACK;
909  psh.hInstance = hApplet;
910  psh.pszIcon = MAKEINTRESOURCEW(IDI_CPLICON);
911  psh.hwndParent = hwnd;
912  psh.nPages = nPages;
913  psh.nStartPage = 0;
914  psh.phpage = ahpsp;
915  psh.pszbmWatermark = MAKEINTRESOURCE(IDB_WATERMARK);
916  psh.pszbmHeader = MAKEINTRESOURCE(IDB_HEADER);
917  psh.pfnCallback = PropSheetProc;
918 
919  /* Create title font */
921 
922  /* Display the wizard */
923  PropertySheet(&psh);
924 
926 }
927 
928 /* FUNCTIONS ****************************************************************/
929 
930 BOOL WINAPI
932 {
933  return FALSE;
934 }
935 
936 VOID WINAPI
938 {
939  if (lpName != NULL)
940  {
941  DPRINT1("No support of remote installation yet!\n");
942  return;
943  }
944 
946 }
947 
948 /* Control Panel Callback */
950 CPlApplet(HWND hwndCpl, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
951 {
952  switch (uMsg)
953  {
954  case CPL_INIT:
955  return TRUE;
956 
957  case CPL_GETCOUNT:
958  return 1;
959 
960  case CPL_INQUIRE:
961  {
962  CPLINFO *CPlInfo = (CPLINFO*)lParam2;
963  CPlInfo->lData = 0;
964  CPlInfo->idIcon = IDI_CPLICON;
965  CPlInfo->idName = IDS_CPLNAME;
966  CPlInfo->idInfo = IDS_CPLDESCRIPTION;
967  }
968  break;
969 
970  case CPL_DBLCLK:
971  AddHardwareWizard(hwndCpl, NULL);
972  break;
973  }
974 
975  return FALSE;
976 }
977 
978 BOOL WINAPI
980 {
982 
983  switch (dwReason)
984  {
985  case DLL_PROCESS_ATTACH:
986  hApplet = hinstDLL;
988  DisableThreadLibraryCalls(hinstDLL);
989  break;
990  }
991 
992  return TRUE;
993 }
BOOL WINAPI SetupDiEnumDeviceInfo(HDEVINFO devinfo, DWORD index, PSP_DEVINFO_DATA info)
Definition: devinst.c:1792
#define MAXIMUM_ALLOWED
Definition: nt_native.h:83
static INT_PTR CALLBACK SearchPageDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: hdwwiz.c:101
#define LV_ITEM
Definition: commctrl.h:2309
CONFIGRET WINAPI CM_Get_DevNode_Status_Ex(_Out_ PULONG pulStatus, _Out_ PULONG pulProblemNumber, _In_ DEVINST dnDevInst, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:3580
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define IDC_HWSTATUSEDIT
Definition: resource.h:52
#define MAKEINTRESOURCE
Definition: winuser.h:591
#define IDD_SELECTWAYPAGE
Definition: resource.h:31
PWSTR pDeviceStatusText
Definition: hdwwiz.c:35
static HICON
Definition: imagelist.c:84
#define TRUE
Definition: types.h:120
static int CALLBACK PropSheetProc(HWND hwndDlg, UINT uMsg, LPARAM lParam)
Definition: hdwwiz.c:780
static VOID TrimGuidString(LPWSTR szString, LPWSTR szNewString)
Definition: hdwwiz.c:259
#define LVCF_WIDTH
Definition: commctrl.h:2559
#define LVSIL_SMALL
Definition: commctrl.h:2271
Definition: cpl.h:24
#define IDS_PROBELISTTITLE
Definition: resource.h:15
#define ERROR_SUCCESS
Definition: deptool.c:10
static HFONT CreateTitleFont(VOID)
Definition: hdwwiz.c:45
#define IDD_STARTPAGE
Definition: resource.h:18
#define LVCF_TEXT
Definition: commctrl.h:2560
HDC WINAPI GetDC(_In_opt_ HWND)
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:323
uint16_t * PWSTR
Definition: typedefs.h:54
static INT_PTR CALLBACK DevStatusPageDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: hdwwiz.c:517
#define IDD_PROGRESSPAGE
Definition: resource.h:32
#define LV_COLUMN
Definition: commctrl.h:2519
#define INT
Definition: polytest.cpp:20
static HDC
Definition: imagelist.c:92
BOOL WINAPI InstallNewDevice(HWND hwndParent, LPGUID ClassGuid, PDWORD pReboot)
Definition: hdwwiz.c:931
CONFIGRET WINAPI CM_Enumerate_Classes(_In_ ULONG ulClassIndex, _Out_ LPGUID ClassGuid, _In_ ULONG ulFlags)
Definition: cfgmgr.c:1983
#define CALLBACK
Definition: compat.h:27
_In_ LPCSTR lpName
Definition: winbase.h:2729
#define SystemParametersInfo
Definition: winuser.h:5759
#define LVS_EX_FULLROWSELECT
Definition: commctrl.h:2706
int idInfo
Definition: cpl.h:27
#define PSWIZB_NEXT
Definition: prsht.h:154
HANDLE HWND
Definition: compat.h:13
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
#define LVCFMT_LEFT
Definition: commctrl.h:2570
#define INVALID_HANDLE_VALUE
Definition: compat.h:391
#define ZeroMemory
Definition: winbase.h:1635
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
#define IDC_MANUALLYINST
Definition: resource.h:43
#define SetupDiGetDeviceRegistryProperty
Definition: setupapi.h:2598
#define CR_NO_SUCH_VALUE
Definition: cfgmgr32.h:883
#define DLL_PROCESS_ATTACH
Definition: compat.h:120
UINT_PTR WPARAM
Definition: windef.h:207
static INT_PTR CALLBACK HdTypesPageDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: hdwwiz.c:714
#define IDD_HWSTATUSPAGE
Definition: resource.h:30
#define SendDlgItemMessage
Definition: winuser.h:5743
#define ListView_InsertItem(hwnd, pitem)
Definition: commctrl.h:2380
static INT_PTR CALLBACK FinishPageDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: hdwwiz.c:190
int32_t INT_PTR
Definition: typedefs.h:62
#define PSH_USECALLBACK
Definition: prsht.h:48
#define IDB_HEADER
Definition: resource.h:30
static INT_PTR CALLBACK SelectWayPageDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: hdwwiz.c:476
#define BOOL
Definition: nt_native.h:43
BOOL WINAPI SetupDiGetClassImageList(OUT PSP_CLASSIMAGELIST_DATA ClassImageListData)
Definition: devclass.c:441
#define PSN_SETACTIVE
Definition: prsht.h:115
int32_t INT
Definition: typedefs.h:56
#define SetWindowLongPtr
Definition: treelist.c:70
WPARAM wParam
Definition: combotst.c:138
static VOID InitHardWareTypesPage(HWND hwndDlg)
Definition: hdwwiz.c:652
HFONT hFont
Definition: main.c:53
static IN DWORD IN LPVOID lpvReserved
#define DWLP_MSGRESULT
Definition: winuser.h:864
struct tagNMHDR * LPNMHDR
static VOID InitProbeListPage(HWND hwndDlg)
Definition: hdwwiz.c:280
HFONT hTitleFont
Definition: hdwwiz.c:33
#define SPDRP_CLASSGUID
Definition: setupapi.h:510
static INT_PTR CALLBACK IsConnectedPageDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: hdwwiz.c:131
int idIcon
Definition: cpl.h:25
#define CPL_DBLCLK
Definition: cpl.h:16
#define LVIF_TEXT
Definition: commctrl.h:2281
UINT code
Definition: winuser.h:3133
DWORD dwReason
Definition: misc.cpp:154
#define IDS_CPLNAME
Definition: resource.h:8
#define ListView_InsertColumn(hwnd, iCol, pcol)
Definition: commctrl.h:2608
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
#define IDC_PROBELIST
Definition: resource.h:39
#define PSH_USEICONID
Definition: prsht.h:42
#define SetupDiGetClassDevsEx
Definition: setupapi.h:2589
RPC_STATUS WINAPI UuidFromStringW(RPC_WSTR s, UUID *uuid)
Definition: rpcrt4_main.c:615
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
#define IDC_CONNECTED
Definition: resource.h:55
LONG lfHeight
Definition: dimm.idl:42
#define IDS_ISCONNECTED
Definition: resource.h:21
struct _PSP * HPROPSHEETPAGE
Definition: mstask.idl:90
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define CR_SUCCESS
Definition: cfgmgr32.h:842
VOID WINAPI AddHardwareWizard(HWND hwnd, LPWSTR lpName)
Definition: hdwwiz.c:937
LONG lfWeight
Definition: dimm.idl:46
#define ListView_SetImageList(hwnd, himl, iImageList)
Definition: commctrl.h:2276
#define DIOCR_INSTALLER
Definition: setupapi.h:176
smooth NULL
Definition: ftsmooth.c:416
#define PROPSHEETHEADER
Definition: prsht.h:374
static HWND hwndParent
Definition: cryptui.c:300
UINT WINAPI DeviceProblemTextW(IN HMACHINE hMachine OPTIONAL, IN DEVINST dnDevInst, IN ULONG uProblemId, OUT LPWSTR lpString, IN UINT uMaxString)
Definition: devprblm.cpp:491
#define PSN_WIZNEXT
Definition: prsht.h:121
LONG_PTR LPARAM
Definition: windef.h:208
HINSTANCE hApplet
Definition: hdwwiz.c:32
#define ListView_GetItemCount(hwnd)
Definition: commctrl.h:2279
#define BM_GETCHECK
Definition: winuser.h:1900
#define LVNI_FOCUSED
Definition: commctrl.h:2395
#define DN_NO_SHOW_IN_DM
Definition: cfg.h:148
#define PropSheet_SetWizButtons(d, f)
Definition: prsht.h:339
_Inout_ PRTL_BUFFER _In_ SIZE_T RequiredSize
#define IDS_SELECTWAYTITLE
Definition: resource.h:18
#define CreatePropertySheetPage
Definition: prsht.h:381
#define WM_DESTROY
Definition: winuser.h:1591
#define IDC_HWTYPESLIST
Definition: resource.h:51
#define IDS_CPLDESCRIPTION
Definition: resource.h:9
struct _SP_DEVINFO_DATA SP_DEVINFO_DATA
#define IDC_FINISHTITLE
Definition: resource.h:60
#define MAX_STR_SIZE
Definition: hdwwiz.h:21
#define PSWIZB_FINISH
Definition: prsht.h:155
#define PSP_DEFAULT
Definition: prsht.h:22
BOOL(WINAPI * PINSTALL_NEW_DEVICE)(HWND, LPGUID, PDWORD)
Definition: hdwwiz.c:39
#define BM_SETCHECK
Definition: winuser.h:1903
#define SetupDiOpenClassRegKeyEx
Definition: setupapi.h:2608
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
HDEVINFO hDevInfoTypes
Definition: hdwwiz.c:37
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
static VOID HardwareWizardInit(HWND hwnd)
Definition: hdwwiz.c:797
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define PSWIZB_BACK
Definition: prsht.h:153
BOOL WINAPI SetupDiDestroyDeviceInfoList(HDEVINFO devinfo)
Definition: devinst.c:2898
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpvReserved)
Definition: hdwwiz.c:979
#define WINAPI
Definition: msvc.h:8
#define LVIF_IMAGE
Definition: commctrl.h:2282
static const UCHAR Index[8]
Definition: usbohci.c:18
#define IDC_AUTOINSTALL
Definition: resource.h:42
#define SPDRP_FRIENDLYNAME
Definition: setupapi.h:514
int WINAPI GetSystemMetrics(_In_ int)
#define BN_CLICKED
Definition: winuser.h:1907
unsigned long DWORD
Definition: ntddk_ex.h:95
#define IDI_CPLICON
Definition: resource.h:4
static INT_PTR CALLBACK ProbeListPageDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: hdwwiz.c:400
BOOL WINAPI SetupDiGetClassImageIndex(IN PSP_CLASSIMAGELIST_DATA ClassImageListData, IN CONST GUID *ClassGuid, OUT PINT ImageIndex)
Definition: devclass.c:396
#define IDD_SEARCHPAGE
Definition: resource.h:25
#define ListView_SetExtendedListViewStyle(hwndLV, dw)
Definition: commctrl.h:2697
#define CPL_INIT
Definition: cpl.h:12
#define CR_INVALID_DATA
Definition: cfgmgr32.h:877
#define DIGCF_ALLCLASSES
Definition: setupapi.h:172
static INT EnumDeviceClasses(INT ClassIndex, LPWSTR DevClassName, LPWSTR DevClassDesc, BOOL *DevPresent, INT *ClassImage)
Definition: hdwwiz.c:557
#define IDS_SEARCHTITLE
Definition: resource.h:17
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define CPL_INQUIRE
Definition: cpl.h:14
static const WCHAR L[]
Definition: oid.c:1250
HDC hdc
Definition: main.c:9
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
#define VOID
Definition: acefi.h:82
#define IDD_FINISHPAGE
Definition: resource.h:34
#define SetupDiClassNameFromGuid
Definition: setupapi.h:2572
static INT_PTR CALLBACK StartPageDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: hdwwiz.c:70
unsigned char BYTE
Definition: mem.h:68
#define SetupDiGetClassDevs
Definition: setupapi.h:2588
LONG_PTR lData
Definition: cpl.h:28
#define WM_COMMAND
Definition: winuser.h:1722
#define SPDRP_DEVICEDESC
Definition: setupapi.h:502
int idName
Definition: cpl.h:26
#define IDD_NOTCONNECTEDPAGE
Definition: resource.h:28
HWND hList
Definition: livecd.c:10
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define IDD_ISCONNECTEDPAGE
Definition: resource.h:27
HWND WINAPI GetParent(_In_ HWND)
#define LVCF_FMT
Definition: commctrl.h:2558
#define FW_BOLD
Definition: wingdi.h:377
#define PSCB_INITIALIZED
Definition: prsht.h:75
static INT_PTR CALLBACK ProgressPageDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: hdwwiz.c:750
static const WCHAR szGuid[]
Definition: rtlstr.c:1892
HICON hIcon
Definition: msconfig.c:44
LONG CALLBACK CPlApplet(HWND hwndCpl, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
Definition: hdwwiz.c:950
#define lstrcpy
Definition: winbase.h:3691
#define IDD_PROBELISTPAGE
Definition: resource.h:29
HANDLE hProcessHeap
Definition: hdwwiz.c:36
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define IDB_WATERMARK
Definition: resource.h:4
#define SetWindowText
Definition: winuser.h:5758
#define CreateFontIndirect
Definition: wingdi.h:4439
unsigned int UINT
Definition: ndis.h:50
#define SM_CXVSCROLL
Definition: winuser.h:951
#define IDD_HWTYPESPAGE
Definition: resource.h:35
DWORD * PDWORD
Definition: pedump.c:68
#define BST_CHECKED
Definition: winuser.h:197
#define WM_SETFONT
Definition: winuser.h:1632
#define DPRINT1
Definition: precomp.h:8
#define PSN_WIZBACK
Definition: prsht.h:120
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
#define IDC_NOTCONNECTED
Definition: resource.h:56
#define ListView_GetItem(hwnd, pitem)
Definition: commctrl.h:2366
#define SendMessage
Definition: winuser.h:5744
#define LVIF_PARAM
Definition: commctrl.h:2283
#define PropertySheet
Definition: prsht.h:382
#define LVITEM
Definition: commctrl.h:2347
#define RegQueryValue
Definition: winreg.h:523
#define HIWORD(l)
Definition: typedefs.h:246
unsigned int ULONG
Definition: retypes.h:1
CHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:55
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2044
static INT_PTR CALLBACK NotConnectedPageDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: hdwwiz.c:222
#define LOGPIXELSY
Definition: wingdi.h:718
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define IDS_HDTYPESTITLE
Definition: resource.h:19
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define LVIF_STATE
Definition: commctrl.h:2284
#define LVM_GETNEXTITEM
Definition: commctrl.h:2405
#define IDS_ADDNEWDEVICE
Definition: resource.h:20
#define WM_INITDIALOG
Definition: winuser.h:1721
LPARAM lParam
Definition: combotst.c:139
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define HeapFree(x, y, z)
Definition: compat.h:394
#define CPL_GETCOUNT
Definition: cpl.h:13
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:54
#define LoadString
Definition: winuser.h:5720
SP_CLASSIMAGELIST_DATA ImageListData
Definition: hdwwiz.c:34
#define PROPSHEETPAGE
Definition: prsht.h:371
#define WM_NOTIFY
Definition: richedit.h:61
struct Rect Rect
#define ICON_BIG
Definition: tnclass.cpp:51
#define DIGCF_PRESENT
Definition: setupapi.h:171
GUID * LPGUID
Definition: guiddef.h:81