ReactOS 0.4.15-dev-5853-gcb454ef
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
15typedef struct
16{
19
20
22
23/* Physical Addresses are always treated as 64-bit wide */
25
26#include <pshpack4.h>
31 union {
32 struct {
36 struct {
40 struct {
41#if defined(NT_PROCESSOR_GROUPS)
44#else
46#endif
50#if (NTDDI_VERSION >= NTDDI_LONGHORN)
51 struct {
52 union {
53 struct {
54#if defined(NT_PROCESSOR_GROUPS)
56#else
58#endif
62 } Raw;
63 struct {
64#if defined(NT_PROCESSOR_GROUPS)
67#else
69#endif
75#endif
76 struct {
80 struct {
84 } Dma;
85 struct {
88 struct {
93 struct {
98#if (NTDDI_VERSION >= NTDDI_LONGHORN)
99 struct {
103 struct {
107 struct {
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
135typedef enum _INTERFACE_TYPE {
156
162
163typedef struct _CM_RESOURCE_LIST {
167
168
169#define CX_TYPECOLUMN_WIDTH 120
170
171static 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
216VOID
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
242VOID
245 IN HWND hWndDevList)
246{
247 WCHAR szBuffer[100];
248 WCHAR szDetail[100];
250 ULONG ItemCount = 0, Index;
251
252 ResourceList = (PCM_RESOURCE_LIST)dap->pResourceList;
253
254 for (Index = 0; Index < ResourceList->List[0].PartialResourceList.Count; Index++)
255 {
256 PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor = &ResourceList->List[0].PartialResourceList.PartialDescriptors[Index];
258 {
259 if (LoadString(hDllInstance, IDS_RESOURCE_INTERRUPT, szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0])))
260 {
261 wsprintf(szDetail, L"0x%08x (%d)", Descriptor->u.Interrupt.Level, Descriptor->u.Interrupt.Vector);
262 InsertListItem(hWndDevList, ItemCount, szBuffer, szDetail);
263 ItemCount++;
264 }
265 }
266 else if (Descriptor->Type == CmResourceTypePort)
267 {
268 if (LoadString(hDllInstance, IDS_RESOURCE_PORT, szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0])))
269 {
270 wsprintf(szDetail, L"%08lx - %08lx", Descriptor->u.Port.Start.LowPart, Descriptor->u.Port.Start.LowPart + Descriptor->u.Port.Length - 1);
271 InsertListItem(hWndDevList, ItemCount, szBuffer, szDetail);
272 ItemCount++;
273 }
274 }
275 else if (Descriptor->Type == CmResourceTypeMemory)
276 {
277 if (LoadString(hDllInstance, IDS_RESOURCE_MEMORY_RANGE, szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0])))
278 {
279 wsprintf(szDetail, L"%08I64x - %08I64x", Descriptor->u.Memory.Start.QuadPart, Descriptor->u.Memory.Start.QuadPart + Descriptor->u.Memory.Length - 1);
280 InsertListItem(hWndDevList, ItemCount, szBuffer, szDetail);
281 ItemCount++;
282 }
283 }
284 else if (Descriptor->Type == CmResourceTypeDma)
285 {
286 if (LoadString(hDllInstance, IDS_RESOURCE_DMA, szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0])))
287 {
288 wsprintf(szDetail, L"%08ld", Descriptor->u.Dma.Channel);
289 InsertListItem(hWndDevList, ItemCount, szBuffer, szDetail);
290 ItemCount++;
291 }
292 }
293 }
294}
295
296
297static VOID
300{
301 /* set the device image */
302 SendDlgItemMessage(hwndDlg,
305 (WPARAM)dap->hDevIcon,
306 0);
307
308 /* set the device name edit control text */
309 SetDlgItemText(hwndDlg,
311 dap->szDevName);
312}
313
317 IN UINT uMsg,
320{
322 HWND hWndDevList;
323 INT_PTR Ret = FALSE;
324
326
327 if (hpd != NULL || uMsg == WM_INITDIALOG)
328 {
329 switch (uMsg)
330 {
331 case WM_INITDIALOG:
332 {
333 /* init list */
334 hWndDevList = GetDlgItem(hwndDlg, IDC_DRIVERRESOURCES);
335 InitializeDevicesList(hWndDevList);
336
338 if (hpd != NULL)
339 {
340 SetWindowLongPtr(hwndDlg, DWLP_USER, (DWORD_PTR)hpd);
341
342 UpdateDriverResourceDlg(hwndDlg, hpd);
343 AddResourceItems(hpd, hWndDevList);
344 }
345
346 Ret = TRUE;
347 break;
348 }
349 }
350 }
351
352 return Ret;
353}
354
355
356PVOID
358 LPWSTR pszDeviceID)
359{
360 PCM_RESOURCE_LIST pResourceList = NULL;
361 HKEY hKey = NULL;
362 DWORD dwError, dwSize;
363
364 CStringW keyName = L"SYSTEM\\CurrentControlSet\\Enum\\";
365 keyName += pszDeviceID;
366 keyName += L"\\Control";
367
368 dwError = RegOpenKeyExW(HKEY_LOCAL_MACHINE, keyName, 0, KEY_READ, &hKey);
369 if (dwError != ERROR_SUCCESS)
370 {
371 /* failed to open device instance log conf dir */
372 return NULL;
373 }
374
375 dwSize = 0;
376 RegQueryValueExW(hKey, L"AllocConfig", NULL, NULL, NULL, &dwSize);
377 if (dwSize == 0)
378 goto done;
379
380 pResourceList = static_cast<PCM_RESOURCE_LIST>(HeapAlloc(GetProcessHeap(), 0, dwSize));
381 if (pResourceList == NULL)
382 goto done;
383
384 dwError = RegQueryValueExW(hKey, L"AllocConfig", NULL, NULL, (LPBYTE)pResourceList, &dwSize);
385 if (dwError != ERROR_SUCCESS)
386 {
387 HeapFree(GetProcessHeap(), 0, pResourceList);
388 pResourceList = NULL;
389 }
390
391done:
392 if (hKey != NULL)
394
395 return (PVOID)pResourceList;
396}
#define RegCloseKey(hKey)
Definition: registry.h:47
static HINSTANCE hDllInstance
Definition: clb.c:30
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3356
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4121
#define GetProcessHeap()
Definition: compat.h:736
ULONG_PTR KAFFINITY
Definition: compat.h:85
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define CALLBACK
Definition: compat.h:35
#define IDC_DEVNAME
Definition: resource.h:224
#define IDS_RESOURCE_INTERRUPT
Definition: resource.h:127
#define IDS_RESOURCE_MEMORY_RANGE
Definition: resource.h:126
#define IDS_RESOURCE_PORT
Definition: resource.h:129
#define IDC_DEVICON
Definition: resource.h:223
#define IDC_DRIVERRESOURCES
Definition: resource.h:253
#define IDS_SETTING_COLUMN
Definition: resource.h:125
#define IDS_RESOURCE_DMA
Definition: resource.h:128
#define IDS_RESOURCE_COLUMN
Definition: resource.h:124
unsigned long DWORD
Definition: ntddk_ex.h:95
FxAutoRegKey hKey
LARGE_INTEGER li
Definition: fxtimerapi.cpp:235
INT_PTR CALLBACK ResourcesProcDriverDlgProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
Definition: hwresource.cpp:316
enum _INTERFACE_TYPE * PINTERFACE_TYPE
static VOID UpdateDriverResourceDlg(IN HWND hwndDlg, IN PDEVADVPROP_INFO dap)
Definition: hwresource.cpp:298
LARGE_INTEGER PHYSICAL_ADDRESS
Definition: hwresource.cpp:24
PVOID GetResourceList(LPWSTR pszDeviceID)
Definition: hwresource.cpp:357
struct _CM_FULL_RESOURCE_DESCRIPTOR CM_FULL_RESOURCE_DESCRIPTOR
#define CX_TYPECOLUMN_WIDTH
Definition: hwresource.cpp:169
struct _CM_FULL_RESOURCE_DESCRIPTOR * PCM_FULL_RESOURCE_DESCRIPTOR
struct _CM_RESOURCE_LIST CM_RESOURCE_LIST
VOID InsertListItem(IN HWND hWndDevList, IN INT ItemCount, IN LPWSTR ResourceType, IN LPWSTR ResourceDescription)
Definition: hwresource.cpp:217
#define CmResourceTypeMemory
Definition: hwresource.cpp:125
struct _CM_RESOURCE_LIST * PCM_RESOURCE_LIST
struct _CM_PARTIAL_RESOURCE_LIST CM_PARTIAL_RESOURCE_LIST
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR * PCM_PARTIAL_RESOURCE_DESCRIPTOR
#define CmResourceTypeDma
Definition: hwresource.cpp:126
struct HARDWARE_RESOURCE_DATA * PHARDWARE_RESOURCE_DATA
VOID AddResourceItems(IN PDEVADVPROP_INFO dap, IN HWND hWndDevList)
Definition: hwresource.cpp:243
_INTERFACE_TYPE
Definition: hwresource.cpp:135
@ Eisa
Definition: hwresource.cpp:139
@ VMEBus
Definition: hwresource.cpp:143
@ MaximumInterfaceType
Definition: hwresource.cpp:154
@ InterfaceTypeUndefined
Definition: hwresource.cpp:136
@ CBus
Definition: hwresource.cpp:146
@ TurboChannel
Definition: hwresource.cpp:141
@ PNPBus
Definition: hwresource.cpp:152
@ PCIBus
Definition: hwresource.cpp:142
@ MPIBus
Definition: hwresource.cpp:147
@ Vmcs
Definition: hwresource.cpp:153
@ InternalPowerBus
Definition: hwresource.cpp:150
@ MPSABus
Definition: hwresource.cpp:148
@ Internal
Definition: hwresource.cpp:137
@ NuBus
Definition: hwresource.cpp:144
@ MicroChannel
Definition: hwresource.cpp:140
@ PNPISABus
Definition: hwresource.cpp:151
@ ProcessorInternal
Definition: hwresource.cpp:149
@ Isa
Definition: hwresource.cpp:138
@ PCMCIABus
Definition: hwresource.cpp:145
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR CM_PARTIAL_RESOURCE_DESCRIPTOR
enum _INTERFACE_TYPE INTERFACE_TYPE
LARGE_INTEGER * PPHYSICAL_ADDRESS
Definition: hwresource.cpp:24
static VOID InitializeDevicesList(IN HWND hWndDevList)
Definition: hwresource.cpp:172
#define CmResourceTypePort
Definition: hwresource.cpp:123
#define CmResourceTypeInterrupt
Definition: hwresource.cpp:124
struct _CM_PARTIAL_RESOURCE_LIST * PCM_PARTIAL_RESOURCE_LIST
#define for
Definition: utility.h:88
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
unsigned int UINT
Definition: ndis.h:50
_In_opt_ PSID Group
Definition: rtlfuncs.h:1646
#define KEY_READ
Definition: nt_native.h:1023
#define L(x)
Definition: ntvdm.h:50
unsigned short USHORT
Definition: pedump.c:61
struct _DEVADVPROP_INFO * PDEVADVPROP_INFO
#define LPPROPSHEETPAGE
Definition: prsht.h:390
#define ListView_InsertItem(hwnd, pitem)
Definition: commctrl.h:2408
#define ListView_InsertColumn(hwnd, iCol, pcol)
Definition: commctrl.h:2636
#define LVIF_STATE
Definition: commctrl.h:2312
#define LVCF_WIDTH
Definition: commctrl.h:2587
#define LVS_EX_FULLROWSELECT
Definition: commctrl.h:2734
#define ListView_SetExtendedListViewStyle(hwndLV, dw)
Definition: commctrl.h:2725
#define LVITEM
Definition: commctrl.h:2375
#define LVIF_TEXT
Definition: commctrl.h:2309
#define ListView_SetItem(hwnd, pitem)
Definition: commctrl.h:2401
#define LVCFMT_LEFT
Definition: commctrl.h:2598
#define LVCF_TEXT
Definition: commctrl.h:2588
#define LVCOLUMN
Definition: commctrl.h:2581
CM_PARTIAL_RESOURCE_LIST PartialResourceList
Definition: hwresource.cpp:160
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@388 DevicePrivate
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@387 Dma
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@390 DeviceSpecificData
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@386 Memory
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@385::@394 DUMMYUNIONNAME
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@382 Generic
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@385::@394::@395 Raw
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@391 Memory40
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@385::@394::@396 Translated
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@385 MessageInterrupt
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@392 Memory48
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381 u
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@383 Port
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@384 Interrupt
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@393 Memory64
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@389 BusNumber
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
Definition: hwresource.cpp:119
LONG right
Definition: windef.h:308
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
int32_t INT_PTR
Definition: typedefs.h:64
uint32_t DWORD_PTR
Definition: typedefs.h:65
unsigned char * LPBYTE
Definition: typedefs.h:53
int32_t INT
Definition: typedefs.h:58
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFIORESREQLIST _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFIORESLIST * ResourceList
Definition: wdfresource.h:309
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
Definition: wdfresource.h:342
_Must_inspect_result_ _In_ WDFCMRESLIST List
Definition: wdfresource.h:550
LONG_PTR LPARAM
Definition: windef.h:208
UINT_PTR WPARAM
Definition: windef.h:207
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define DWLP_USER
Definition: winuser.h:866
#define STM_SETICON
Definition: winuser.h:2082
#define SM_CXVSCROLL
Definition: winuser.h:955
#define WM_INITDIALOG
Definition: winuser.h:1729
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define wsprintf
Definition: winuser.h:5855
#define LoadString
Definition: winuser.h:5809
#define SendDlgItemMessage
Definition: winuser.h:5832
int WINAPI GetSystemMetrics(_In_ int)
#define SetDlgItemText
Definition: winuser.h:5839
enum _INTERFACE_TYPE INTERFACE_TYPE
unsigned char UCHAR
Definition: xmlstorage.h:181
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184