2 * PROJECT: ReactOS Shell Extensions
3 * LICENSE: LGPL - See COPYING in the top level directory
4 * FILE: dll/shellext/devcpux/processor.c
6 * COPYRIGHT: Copyright 2007 Christoph von Wittich <Christoph_vW@ReactOS.org>
10 #define WIN32_NO_STATUS
12 #define COM_NO_WINDOWS_H
24 HINSTANCE g_hInstance
= NULL
;
25 INT_PTR CALLBACK
ProcessorDlgProc (HWND hDlg
, UINT uMessage
, WPARAM wParam
, LPARAM lParam
);
29 DllMain (HANDLE hInstance
, DWORD dwReason
, LPVOID lpReserved
)
33 case DLL_THREAD_ATTACH
:
34 case DLL_THREAD_DETACH
:
35 case DLL_PROCESS_ATTACH
:
36 case DLL_PROCESS_DETACH
:
40 g_hInstance
= (HINSTANCE
) hInstance
;
47 PropSheetExtProc(PSP_PROPSHEETPAGE_REQUEST PropPageRequest
, LPFNADDPROPSHEETPAGE fAddFunc
, LPARAM lParam
)
49 PROPSHEETPAGE PropSheetPage
;
50 HPROPSHEETPAGE hPropSheetPage
;
52 if(PropPageRequest
->PageRequested
!= SPPSR_ENUM_ADV_DEVICE_PROPERTIES
)
55 if ((!PropPageRequest
->DeviceInfoSet
) || (!PropPageRequest
->DeviceInfoData
))
58 ZeroMemory(&PropSheetPage
, sizeof(PROPSHEETPAGE
));
59 PropSheetPage
.dwSize
= sizeof(PROPSHEETPAGE
);
60 PropSheetPage
.hInstance
= g_hInstance
;
61 PropSheetPage
.pszTemplate
= MAKEINTRESOURCE(DLG_PROCESSORINFO
);
62 PropSheetPage
.pfnDlgProc
= ProcessorDlgProc
;
64 hPropSheetPage
= CreatePropertySheetPage(&PropSheetPage
);
68 if(!(fAddFunc
)(hPropSheetPage
, lParam
)) {
69 DestroyPropertySheetPage (hPropSheetPage
);
77 AddFeature(WCHAR
* szFeatures
, size_t cbDest
, WCHAR
* Feature
, BOOL
* bFirst
)
80 StringCbCatW(szFeatures
, cbDest
, L
", ");
82 StringCbCatW(szFeatures
, cbDest
, Feature
);
87 ProcessorDlgProc (HWND hDlg
, UINT uMessage
, WPARAM wParam
, LPARAM lParam
)
92 WCHAR szFeatures
[MAX_PATH
] = L
"";
96 WCHAR szCurrentMhz
[10];
98 SYSTEM_INFO SystemInfo
;
99 PROCESSOR_POWER_INFORMATION PowerInfo
;
101 if (!LoadStringW(g_hInstance
, IDS_MEGAHERTZ
, szMhz
, ARRAYSIZE(szMhz
)))
103 StringCbCopyW(szMhz
, sizeof(szMhz
), L
"%ld MHz");
106 if (IsProcessorFeaturePresent(PF_MMX_INSTRUCTIONS_AVAILABLE
))
107 AddFeature(szFeatures
, sizeof(szFeatures
), L
"MMX", &bFirst
);
108 if (IsProcessorFeaturePresent(PF_XMMI_INSTRUCTIONS_AVAILABLE
))
109 AddFeature(szFeatures
, sizeof(szFeatures
), L
"SSE", &bFirst
);
110 if (IsProcessorFeaturePresent(PF_XMMI64_INSTRUCTIONS_AVAILABLE
))
111 AddFeature(szFeatures
, sizeof(szFeatures
), L
"SSE2", &bFirst
);
112 /*if (IsProcessorFeaturePresent(PF_SSE3_INSTRUCTIONS_AVAILABLE))
113 AddFeature(szFeatures, sizeof(szFeatures), L"SSE3", &bFirst); */
114 if (IsProcessorFeaturePresent(PF_3DNOW_INSTRUCTIONS_AVAILABLE
))
115 AddFeature(szFeatures
, sizeof(szFeatures
), L
"3DNOW", &bFirst
);
117 SetDlgItemTextW(hDlg
, IDC_FEATURES
, szFeatures
);
119 GetSystemInfo(&SystemInfo
);
121 StringCbPrintfW(szModel
, sizeof(szModel
), L
"%x", HIBYTE(SystemInfo
.wProcessorRevision
));
122 StringCbPrintfW(szStepping
, sizeof(szStepping
), L
"%d", LOBYTE(SystemInfo
.wProcessorRevision
));
124 SetDlgItemTextW(hDlg
, IDC_MODEL
, szModel
);
125 SetDlgItemTextW(hDlg
, IDC_STEPPING
, szStepping
);
127 CallNtPowerInformation(11, NULL
, 0, &PowerInfo
, sizeof(PowerInfo
));
128 StringCbPrintfW(szCurrentMhz
, sizeof(szCurrentMhz
), szMhz
, PowerInfo
.CurrentMhz
);
129 SetDlgItemTextW(hDlg
, IDC_CORESPEED
, szCurrentMhz
);