2 * PROJECT: ReactOS Shell Extensions
3 * LICENSE: LGPL - See COPYING in the top level directory
4 * FILE: dll\win32\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
"";
95 WCHAR szCurrentMhz
[10];
97 SYSTEM_INFO SystemInfo
;
98 PROCESSOR_POWER_INFORMATION PowerInfo
;
100 if (IsProcessorFeaturePresent(PF_MMX_INSTRUCTIONS_AVAILABLE
))
101 AddFeature(szFeatures
, sizeof(szFeatures
), L
"MMX", &bFirst
);
102 if (IsProcessorFeaturePresent(PF_XMMI_INSTRUCTIONS_AVAILABLE
))
103 AddFeature(szFeatures
, sizeof(szFeatures
), L
"SSE", &bFirst
);
104 if (IsProcessorFeaturePresent(PF_XMMI64_INSTRUCTIONS_AVAILABLE
))
105 AddFeature(szFeatures
, sizeof(szFeatures
), L
"SSE2", &bFirst
);
106 /*if (IsProcessorFeaturePresent(PF_SSE3_INSTRUCTIONS_AVAILABLE))
107 AddFeature(szFeatures, sizeof(szFeatures), L"SSE3", &bFirst); */
108 if (IsProcessorFeaturePresent(PF_3DNOW_INSTRUCTIONS_AVAILABLE
))
109 AddFeature(szFeatures
, sizeof(szFeatures
), L
"3DNOW", &bFirst
);
111 SetDlgItemTextW(hDlg
, IDC_FEATURES
, szFeatures
);
113 GetSystemInfo(&SystemInfo
);
115 StringCbPrintfW(szModel
, sizeof(szModel
), L
"%x", HIBYTE(SystemInfo
.wProcessorRevision
));
116 StringCbPrintfW(szStepping
, sizeof(szStepping
), L
"%d", LOBYTE(SystemInfo
.wProcessorRevision
));
118 SetDlgItemTextW(hDlg
, IDC_MODEL
, szModel
);
119 SetDlgItemTextW(hDlg
, IDC_STEPPING
, szStepping
);
121 CallNtPowerInformation(11, NULL
, 0, &PowerInfo
, sizeof(PowerInfo
));
122 StringCbPrintfW(szCurrentMhz
, sizeof(szCurrentMhz
), L
"%ld %s", PowerInfo
.CurrentMhz
, L
"MHz");
123 SetDlgItemTextW(hDlg
, IDC_CORESPEED
, szCurrentMhz
);