ReactOS  0.4.13-dev-563-g0561610
hwresource.cpp
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS devmgr.dll
3  * FILE: dll/win32/devmgr/hwresource.c
4  * PURPOSE: ReactOS Device Manager
5  * PROGRAMMER: Johannes Anderwald <johannes.anderwald@reactos.org>
6  * UPDATE HISTORY:
7  * 2005/11/24 Created
8  */
9 
10 #include "precomp.h"
11 #include "properties.h"
12 #include "resource.h"
13 
14 
15 typedef struct
16 {
19 
20 
22 
23 /* Physical Addresses are always treated as 64-bit wide */
25 
26 #include <pshpack4.h>
31  union {
32  struct {
35  } Generic;
36  struct {
38  ULONG Length;
39  } Port;
40  struct {
41 #if defined(NT_PROCESSOR_GROUPS)
42  USHORT Level;
43  USHORT Group;
44 #else
46 #endif
49  } Interrupt;
50 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
51  struct {
52  union {
53  struct {
54 #if defined(NT_PROCESSOR_GROUPS)
55  USHORT Group;
56 #else
58 #endif
60  ULONG Vector;
62  } Raw;
63  struct {
64 #if defined(NT_PROCESSOR_GROUPS)
65  USHORT Level;
66  USHORT Group;
67 #else
68  ULONG Level;
69 #endif
70  ULONG Vector;
72  } Translated;
75 #endif
76  struct {
78  ULONG Length;
79  } Memory;
80  struct {
84  } Dma;
85  struct {
86  ULONG Data[3];
87  } DevicePrivate;
88  struct {
90  ULONG Length;
92  } BusNumber;
93  struct {
98 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
99  struct {
102  } Memory40;
103  struct {
106  } Memory48;
107  struct {
110  } Memory64;
111 #endif
112  } u;
114 #include <poppack.h>
121 
122 #define CmResourceTypeNull 0
123 #define CmResourceTypePort 1
124 #define CmResourceTypeInterrupt 2
125 #define CmResourceTypeMemory 3
126 #define CmResourceTypeDma 4
127 #define CmResourceTypeDeviceSpecific 5
128 #define CmResourceTypeBusNumber 6
129 #define CmResourceTypeNonArbitrated 128
130 #define CmResourceTypeConfigData 128
131 #define CmResourceTypeDevicePrivate 129
132 #define CmResourceTypePcCardConfig 130
133 #define CmResourceTypeMfCardConfig 131
134 
135 typedef enum _INTERFACE_TYPE {
156 
162 
163 typedef struct _CM_RESOURCE_LIST {
167 
168 
169 #define CX_TYPECOLUMN_WIDTH 120
170 
171 static VOID
173  IN HWND hWndDevList)
174 {
175  LVCOLUMN lvc;
176  RECT rcClient;
177  WCHAR szColName[255];
178  int iCol = 0;
179 
180  /* set the list view style */
183 
184  GetClientRect(hWndDevList,
185  &rcClient);
186 
187  /* add the list view columns */
188  lvc.mask = LVCF_TEXT | LVCF_WIDTH;
189  lvc.fmt = LVCFMT_LEFT;
190  lvc.pszText = szColName;
191 
194  szColName,
195  sizeof(szColName) / sizeof(szColName[0])))
196  {
197  lvc.cx = CX_TYPECOLUMN_WIDTH;
198  (void)ListView_InsertColumn(hWndDevList,
199  iCol++,
200  &lvc);
201  }
204  szColName,
205  sizeof(szColName) / sizeof(szColName[0])))
206  {
207  lvc.cx = rcClient.right - CX_TYPECOLUMN_WIDTH -
209 
210  (void)ListView_InsertColumn(hWndDevList,
211  iCol++,
212  &lvc);
213  }
214 }
215 
216 VOID
218  IN HWND hWndDevList,
219  IN INT ItemCount,
220  IN LPWSTR ResourceType,
221  IN LPWSTR ResourceDescription)
222 {
223  INT iItem;
224  LVITEM li = {0};
225 
226  li.mask = LVIF_STATE | LVIF_TEXT;
227  li.iItem = ItemCount;
228  li.pszText = ResourceType;
229  //li.iImage = ClassDevInfo->ImageIndex;
230  iItem = ListView_InsertItem(hWndDevList, &li);
231 
232  if (iItem != -1)
233  {
234  li.mask = LVIF_TEXT;
235  li.iItem = iItem;
236  li.iSubItem = 1;
237  li.pszText = ResourceDescription;
238  (void)ListView_SetItem(hWndDevList, &li);
239  }
240 }
241 
242 VOID
244  IN PDEVADVPROP_INFO dap,
245  IN HWND hWndDevList)
246 {
247  HKEY hKey;
248  WCHAR szBuffer[100];
249  WCHAR szDetail[100];
250  BYTE szData[512];
251  DWORD dwSize;
253  LONG Result;
254  ULONG ItemCount = 0, Index;
255 
256  wsprintf(szBuffer, L"SYSTEM\\CurrentControlSet\\Enum\\%s\\LogConf", dap->szDeviceID);
257  Result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, szBuffer, 0, KEY_READ, &hKey);
258  if (Result != ERROR_SUCCESS)
259  {
260  /* failed to open device instance log conf dir */
261  return;
262  }
263 
264  dwSize = sizeof(szData);
265  Result = RegQueryValueExW(hKey, L"BootConfig", NULL, NULL, szData, &dwSize);
266 
267  RegCloseKey(hKey);
268  if (Result != ERROR_SUCCESS)
269  {
270  /* failed to query resources */
271  return;
272  }
273 
275 
276  for (Index = 0; Index < ResourceList->List[0].PartialResourceList.Count; Index++)
277  {
278  PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor = &ResourceList->List[0].PartialResourceList.PartialDescriptors[Index];
279  if (Descriptor->Type == CmResourceTypeInterrupt)
280  {
281  if (LoadString(hDllInstance, IDS_RESOURCE_INTERRUPT, szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0])))
282  {
283  wsprintf(szDetail, L"0x%08x (%d)", Descriptor->u.Interrupt.Level, Descriptor->u.Interrupt.Vector);
284  InsertListItem(hWndDevList, ItemCount, szBuffer, szDetail);
285  ItemCount++;
286  }
287  }
288  else if (Descriptor->Type == CmResourceTypePort)
289  {
290  if (LoadString(hDllInstance, IDS_RESOURCE_PORT, szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0])))
291  {
292  wsprintf(szDetail, L"%08lx - %08lx", Descriptor->u.Port.Start.LowPart, Descriptor->u.Port.Start.LowPart + Descriptor->u.Port.Length - 1);
293  InsertListItem(hWndDevList, ItemCount, szBuffer, szDetail);
294  ItemCount++;
295  }
296  }
297  else if (Descriptor->Type == CmResourceTypeMemory)
298  {
299  if (LoadString(hDllInstance, IDS_RESOURCE_MEMORY_RANGE, szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0])))
300  {
301  wsprintf(szDetail, L"%08I64x - %08I64x", Descriptor->u.Memory.Start.QuadPart, Descriptor->u.Memory.Start.QuadPart + Descriptor->u.Memory.Length - 1);
302  InsertListItem(hWndDevList, ItemCount, szBuffer, szDetail);
303  ItemCount++;
304  }
305  }
306  else if (Descriptor->Type == CmResourceTypeDma)
307  {
308  if (LoadString(hDllInstance, IDS_RESOURCE_DMA, szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0])))
309  {
310  wsprintf(szDetail, L"%08ld", Descriptor->u.Dma.Channel);
311  InsertListItem(hWndDevList, ItemCount, szBuffer, szDetail);
312  ItemCount++;
313  }
314  }
315  }
316 }
317 
318 
319 static VOID
321  IN PDEVADVPROP_INFO dap)
322 {
323  /* set the device image */
324  SendDlgItemMessage(hwndDlg,
325  IDC_DEVICON,
326  STM_SETICON,
327  (WPARAM)dap->hDevIcon,
328  0);
329 
330  /* set the device name edit control text */
331  SetDlgItemText(hwndDlg,
332  IDC_DEVNAME,
333  dap->szDevName);
334 }
335 
336 INT_PTR
337 CALLBACK
339  IN UINT uMsg,
340  IN WPARAM wParam,
341  IN LPARAM lParam)
342 {
343  PDEVADVPROP_INFO hpd;
344  HWND hWndDevList;
345  INT_PTR Ret = FALSE;
346 
348 
349  if (hpd != NULL || uMsg == WM_INITDIALOG)
350  {
351  switch (uMsg)
352  {
353  case WM_INITDIALOG:
354  {
355  /* init list */
356  hWndDevList = GetDlgItem(hwndDlg, IDC_DRIVERRESOURCES);
357  InitializeDevicesList(hWndDevList);
358 
360  if (hpd != NULL)
361  {
362  SetWindowLongPtr(hwndDlg, DWLP_USER, (DWORD_PTR)hpd);
363 
364  UpdateDriverResourceDlg(hwndDlg, hpd);
365  AddResourceItems(hpd, hWndDevList);
366  }
367 
368  Ret = TRUE;
369  break;
370  }
371  }
372  }
373 
374  return Ret;
375 }
376 
struct _CM_PARTIAL_RESOURCE_LIST CM_PARTIAL_RESOURCE_LIST
struct _CM_RESOURCE_LIST * PCM_RESOURCE_LIST
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@369::@381 Memory64
#define STM_SETICON
Definition: winuser.h:2053
#define IN
Definition: typedefs.h:38
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR * PCM_PARTIAL_RESOURCE_DESCRIPTOR
#define TRUE
Definition: types.h:120
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
#define LVCF_WIDTH
Definition: commctrl.h:2559
enum _INTERFACE_TYPE INTERFACE_TYPE
#define ERROR_SUCCESS
Definition: deptool.c:10
INT_PTR CALLBACK ResourcesProcDriverDlgProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
Definition: hwresource.cpp:338
#define ListView_SetItem(hwnd, pitem)
Definition: commctrl.h:2373
struct _DEVADVPROP_INFO * PDEVADVPROP_INFO
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@369::@371 Port
#define LVCF_TEXT
Definition: commctrl.h:2560
struct _CM_PARTIAL_RESOURCE_LIST * PCM_PARTIAL_RESOURCE_LIST
#define IDC_DEVICON
Definition: resource.h:219
CM_FULL_RESOURCE_DESCRIPTOR List[1]
Definition: hwresource.cpp:165
#define KEY_READ
Definition: nt_native.h:1023
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@369::@380 Memory48
_In_opt_ PSID Group
Definition: rtlfuncs.h:1606
static const WCHAR szData[]
Definition: msipriv.h:1195
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@369::@376 DevicePrivate
#define CALLBACK
Definition: compat.h:27
#define LVS_EX_FULLROWSELECT
Definition: commctrl.h:2706
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@369 u
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@369::@375 Dma
#define LVCFMT_LEFT
Definition: commctrl.h:2570
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@369::@372 Interrupt
struct _CM_FULL_RESOURCE_DESCRIPTOR CM_FULL_RESOURCE_DESCRIPTOR
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@369::@374 Memory
UINT_PTR WPARAM
Definition: windef.h:207
#define SendDlgItemMessage
Definition: winuser.h:5708
enum _INTERFACE_TYPE * PINTERFACE_TYPE
#define ListView_InsertItem(hwnd, pitem)
Definition: commctrl.h:2380
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@369::@379 Memory40
int32_t INT_PTR
Definition: typedefs.h:62
LONG right
Definition: windef.h:293
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@369::@373::@382 DUMMYUNIONNAME
const MUI_LANGUAGE_RESOURCE ResourceList[]
Definition: muilanguages.h:414
int32_t INT
Definition: typedefs.h:56
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR CM_PARTIAL_RESOURCE_DESCRIPTOR
struct HARDWARE_RESOURCE_DATA * PHARDWARE_RESOURCE_DATA
#define SetWindowLongPtr
Definition: treelist.c:70
WPARAM wParam
Definition: combotst.c:138
#define CmResourceTypePort
Definition: hwresource.cpp:123
#define LVIF_TEXT
Definition: commctrl.h:2281
CM_PARTIAL_RESOURCE_LIST PartialResourceList
Definition: hwresource.cpp:160
static VOID InitializeDevicesList(IN HWND hWndDevList)
Definition: hwresource.cpp:172
#define LVCOLUMN
Definition: commctrl.h:2553
#define ListView_InsertColumn(hwnd, iCol, pcol)
Definition: commctrl.h:2608
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
long LONG
Definition: pedump.c:60
#define IDC_DRIVERRESOURCES
Definition: resource.h:249
#define IDS_RESOURCE_MEMORY_RANGE
Definition: resource.h:123
struct _CM_FULL_RESOURCE_DESCRIPTOR * PCM_FULL_RESOURCE_DESCRIPTOR
#define LPPROPSHEETPAGE
Definition: prsht.h:372
smooth NULL
Definition: ftsmooth.c:416
VOID AddResourceItems(IN PDEVADVPROP_INFO dap, IN HWND hWndDevList)
Definition: hwresource.cpp:243
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:426
LONG_PTR LPARAM
Definition: windef.h:208
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@369::@378 DeviceSpecificData
#define IDC_DEVNAME
Definition: resource.h:220
static HINSTANCE hDllInstance
Definition: clb.c:30
VOID InsertListItem(IN HWND hWndDevList, IN INT ItemCount, IN LPWSTR ResourceType, IN LPWSTR ResourceDescription)
Definition: hwresource.cpp:217
LARGE_INTEGER * PPHYSICAL_ADDRESS
Definition: hwresource.cpp:24
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4116
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define CX_TYPECOLUMN_WIDTH
Definition: hwresource.cpp:169
static const UCHAR Index[8]
Definition: usbohci.c:18
int WINAPI GetSystemMetrics(_In_ int)
unsigned long DWORD
Definition: ntddk_ex.h:95
#define IDS_RESOURCE_INTERRUPT
Definition: resource.h:124
#define ListView_SetExtendedListViewStyle(hwndLV, dw)
Definition: commctrl.h:2697
#define SetDlgItemText
Definition: winuser.h:5715
static VOID UpdateDriverResourceDlg(IN HWND hwndDlg, IN PDEVADVPROP_INFO dap)
Definition: hwresource.cpp:320
unsigned char UCHAR
Definition: xmlstorage.h:181
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
Definition: hwresource.cpp:119
static const WCHAR L[]
Definition: oid.c:1250
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@369::@373::@382::@384 Translated
#define DWLP_USER
Definition: winuser.h:866
unsigned char BYTE
Definition: mem.h:68
uint32_t DWORD_PTR
Definition: typedefs.h:63
struct _CM_RESOURCE_LIST CM_RESOURCE_LIST
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
LARGE_INTEGER PHYSICAL_ADDRESS
Definition: hwresource.cpp:24
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@369::@373::@382::@383 Raw
_INTERFACE_TYPE
Definition: hwresource.cpp:135
unsigned short USHORT
Definition: pedump.c:61
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@369::@373 MessageInterrupt
ULONG_PTR KAFFINITY
Definition: compat.h:75
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@369::@370 Generic
unsigned int UINT
Definition: ndis.h:50
#define SM_CXVSCROLL
Definition: winuser.h:951
#define CmResourceTypeInterrupt
Definition: hwresource.cpp:124
#define IDS_RESOURCE_PORT
Definition: resource.h:126
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@369::@377 BusNumber
#define LVITEM
Definition: commctrl.h:2347
unsigned int ULONG
Definition: retypes.h:1
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3366
#define GetWindowLongPtr
Definition: treelist.c:73
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define LVIF_STATE
Definition: commctrl.h:2284
#define CmResourceTypeMemory
Definition: hwresource.cpp:125
#define IDS_RESOURCE_DMA
Definition: resource.h:125
#define wsprintf
Definition: winuser.h:5731
#define IDS_RESOURCE_COLUMN
Definition: resource.h:121
#define WM_INITDIALOG
Definition: winuser.h:1715
LPARAM lParam
Definition: combotst.c:139
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:54
#define LoadString
Definition: winuser.h:5685
#define CmResourceTypeDma
Definition: hwresource.cpp:126
#define IDS_SETTING_COLUMN
Definition: resource.h:122
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
_In_ PSTORAGE_PROPERTY_ID _Outptr_ PSTORAGE_DESCRIPTOR_HEADER * Descriptor
Definition: classpnp.h:966