mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
410 lines
8.6 KiB
410 lines
8.6 KiB
/*++
|
|
|
|
Copyright (c) 1993 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
Hardwp.c
|
|
|
|
Abstract:
|
|
|
|
This module contains support for displaying the Hardware.
|
|
|
|
Author:
|
|
|
|
Scott B. Suhy (ScottSu) 6/1/93
|
|
|
|
Environment:
|
|
|
|
User Mode
|
|
|
|
--*/
|
|
|
|
#include "dialogsp.h"
|
|
#include "hardwp.h"
|
|
#include "msgp.h"
|
|
#include "regp.h"
|
|
#include "strtabp.h"
|
|
#include "winmsdp.h"
|
|
|
|
#include "printp.h"
|
|
|
|
#include <string.h>
|
|
#include <tchar.h>
|
|
|
|
//
|
|
// Name of CPU stepping value in the Registry.
|
|
//
|
|
|
|
VALUE
|
|
CpuValues[ ] = {
|
|
|
|
MakeValue( Identifier, SZ )
|
|
};
|
|
|
|
//
|
|
// Object used to pass information around about the System.
|
|
//
|
|
|
|
SYSTEM_INFO SystemInfo;
|
|
|
|
//
|
|
// Location of CPU stepping values in the registry.
|
|
//
|
|
|
|
MakeKey(
|
|
CpuKey,
|
|
HKEY_LOCAL_MACHINE,
|
|
TEXT( "Hardware\\Description\\System\\CentralProcessor" ),
|
|
NumberOfEntries( CpuValues ),
|
|
CpuValues
|
|
);
|
|
|
|
//
|
|
// Value names of system and video BIOS information in the Registry.
|
|
// Order of BIOS values must be the same as the ids in the BiosControlIds
|
|
// array below.
|
|
//
|
|
|
|
VALUE
|
|
BiosValues[ ] = {
|
|
|
|
MakeValue( SystemBiosDate, SZ ),
|
|
MakeValue( SystemBiosVersion, MULTI_SZ ),
|
|
MakeValue( VideoBiosDate, SZ ),
|
|
MakeValue( VideoBiosVersion, MULTI_SZ )
|
|
|
|
};
|
|
|
|
//
|
|
// Location of system and video BIOS information values in the registry.
|
|
//
|
|
|
|
MakeKey(
|
|
BiosKey,
|
|
HKEY_LOCAL_MACHINE,
|
|
TEXT( "Hardware\\Description\\System" ),
|
|
NumberOfEntries( BiosValues ),
|
|
BiosValues
|
|
);
|
|
|
|
BOOL
|
|
HardwareProc( )
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
HardwareProc supports the display of basic information about the
|
|
hardware characteristics that Winmsd is being run on.
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
Return Value:
|
|
|
|
BOOL - Depending on input message and processing options.
|
|
|
|
--*/
|
|
|
|
{
|
|
BOOL Success;
|
|
HREGKEY hRegKey;
|
|
DWORD i;
|
|
WCHAR Buffer[ MAX_PATH ];
|
|
//GreggA code
|
|
HDC hDC;
|
|
int iHorzRes;
|
|
int iVertRes;
|
|
int iColors;
|
|
//end GreggA code
|
|
|
|
int BiosControlIds[ ] = {
|
|
IDC_EDIT_SYSTEM_BIOS_DATE,
|
|
IDC_DROP_DOWN_SYSTEM_BIOS_VERSION,
|
|
IDC_EDIT_VIDEO_BIOS_DATE,
|
|
IDC_DROP_DOWN_VIDEO_BIOS_VERSION
|
|
|
|
};
|
|
|
|
UINT ProcessorId[ ] = {
|
|
IDC_EDIT_P00,
|
|
IDC_EDIT_P01,
|
|
IDC_EDIT_P02,
|
|
IDC_EDIT_P03,
|
|
IDC_EDIT_P04,
|
|
IDC_EDIT_P05,
|
|
IDC_EDIT_P06,
|
|
IDC_EDIT_P07,
|
|
IDC_EDIT_P08,
|
|
IDC_EDIT_P09,
|
|
IDC_EDIT_P10,
|
|
IDC_EDIT_P11,
|
|
IDC_EDIT_P12,
|
|
IDC_EDIT_P13,
|
|
IDC_EDIT_P14,
|
|
IDC_EDIT_P15,
|
|
IDC_EDIT_P16,
|
|
IDC_EDIT_P17,
|
|
IDC_EDIT_P18,
|
|
IDC_EDIT_P19,
|
|
IDC_EDIT_P20,
|
|
IDC_EDIT_P21,
|
|
IDC_EDIT_P22,
|
|
IDC_EDIT_P23,
|
|
IDC_EDIT_P24,
|
|
IDC_EDIT_P25,
|
|
IDC_EDIT_P26,
|
|
IDC_EDIT_P27,
|
|
IDC_EDIT_P28,
|
|
IDC_EDIT_P29,
|
|
IDC_EDIT_P30,
|
|
IDC_EDIT_P31
|
|
};
|
|
|
|
|
|
//
|
|
// Open the root key where the BIOS information resides.
|
|
//
|
|
|
|
hRegKey = OpenRegistryKey( &BiosKey );
|
|
DbgHandleAssert( hRegKey );
|
|
if( hRegKey == NULL ) {
|
|
return FALSE;
|
|
}
|
|
|
|
//
|
|
// For each BIOS value, query the Registry, and display it value(s)
|
|
// in the appropriate control.
|
|
//
|
|
|
|
for( i = 0; i < NumberOfEntries( BiosControlIds ); i++ ) {
|
|
|
|
//
|
|
// Get the next value of interest. It may fail if the value
|
|
// isn't available (i.e. i.e. running on a MIPS box).
|
|
//
|
|
|
|
Success = QueryNextValue( hRegKey );
|
|
if( Success == FALSE ) {
|
|
continue;
|
|
}
|
|
|
|
//
|
|
// Put the data in the appropriate control.
|
|
//
|
|
|
|
switch( BiosControlIds[ i ]) {
|
|
|
|
case IDC_EDIT_SYSTEM_BIOS_DATE:
|
|
case IDC_EDIT_VIDEO_BIOS_DATE:
|
|
{
|
|
//
|
|
// Display the BIOS date in the appropriate edit field.
|
|
//
|
|
|
|
|
|
PrintToFile((LPCTSTR)hRegKey->Data,BiosControlIds[i],TRUE);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_DROP_DOWN_SYSTEM_BIOS_VERSION:
|
|
case IDC_DROP_DOWN_VIDEO_BIOS_VERSION:
|
|
{
|
|
|
|
LONG RetVal;
|
|
LPTSTR BiosVersion;
|
|
POINT Point;
|
|
|
|
|
|
//
|
|
// Walk the list of BIOS version strings and display
|
|
// all of them in their appropriate list box.
|
|
//
|
|
|
|
BiosVersion = ( LPTSTR ) hRegKey->Data;
|
|
while(( BiosVersion != NULL ) && ( BiosVersion[ 0 ] != TEXT( '\0' ))) {
|
|
|
|
PrintToFile((LPCTSTR)BiosVersion,BiosControlIds[i],TRUE);
|
|
|
|
BiosVersion += _tcslen( BiosVersion ) + 1;
|
|
}
|
|
|
|
break;
|
|
}//end case IDC_DROP_DOWN_VIDEO_BIOS_VERSION:
|
|
}//end switch
|
|
}//end for
|
|
|
|
//
|
|
// Close the BIOS information key.
|
|
//
|
|
|
|
Success = CloseRegistryKey( hRegKey );
|
|
DbgAssert( Success );
|
|
|
|
// Begin GreggA addition
|
|
|
|
//
|
|
// Get the hDC for calling GetDeviceCaps
|
|
//
|
|
|
|
hDC = GetDC( NULL );
|
|
DbgAssert( hDC );
|
|
|
|
//
|
|
// Get the Horiz Resolution
|
|
//
|
|
|
|
iHorzRes = GetDeviceCaps( hDC, HORZRES );
|
|
|
|
//
|
|
// Get the Vertical Resolution
|
|
//
|
|
|
|
iVertRes = GetDeviceCaps( hDC, VERTRES );
|
|
|
|
//
|
|
// Get the number of colors
|
|
//
|
|
|
|
iColors = 1 << (GetDeviceCaps( hDC, PLANES ) * GetDeviceCaps( hDC, BITSPIXEL ));
|
|
|
|
//
|
|
// Return the DC
|
|
//
|
|
|
|
DbgAssert( ReleaseDC( NULL, hDC ) );
|
|
|
|
//
|
|
// Format the resolution data and put it into the control
|
|
//
|
|
|
|
wsprintfW( Buffer, L"%d x %d x %d",iHorzRes, iVertRes, iColors ) ;
|
|
|
|
PrintToFile((LPCTSTR)Buffer,IDC_EDIT_CURR_VIDEO_RES,TRUE);
|
|
|
|
|
|
// End GreggA code
|
|
|
|
|
|
|
|
//
|
|
// Retrieve the basic information about the system.
|
|
//
|
|
|
|
GetSystemInfo( &SystemInfo );
|
|
|
|
//
|
|
// Display the OEM id, page size minimum and maximum application
|
|
// address and processor type.
|
|
//
|
|
|
|
|
|
PrintDwordToFile(0,IDC_EDIT_OEM_ID); // obsolete
|
|
|
|
_tcscpy(
|
|
Buffer,
|
|
FormatBigInteger(
|
|
SystemInfo.dwPageSize >> 10,
|
|
FALSE
|
|
)
|
|
);
|
|
|
|
|
|
PrintToFile((LPCTSTR)Buffer,IDC_EDIT_PAGE_SIZE,TRUE);
|
|
|
|
//changed per Gregga from Dword to hex
|
|
PrintHexToFile(( UINT ) SystemInfo.lpMinimumApplicationAddress,IDC_EDIT_MIN_APP_ADDRESS);
|
|
//changed per Gregga from Dword to hex
|
|
PrintHexToFile(( UINT ) SystemInfo.lpMaximumApplicationAddress,IDC_EDIT_MAX_APP_ADDRESS);
|
|
|
|
PrintDwordToFile(SystemInfo.dwNumberOfProcessors,IDC_EDIT_NUMBER_OF_PROCESSORS);
|
|
|
|
PrintDwordToFile(SystemInfo.wProcessorArchitecture,IDC_EDIT_PROCESSOR_TYPE);
|
|
|
|
|
|
//
|
|
// Open the root key where the CPU stepping information resides.
|
|
//
|
|
|
|
hRegKey = OpenRegistryKey( &CpuKey );
|
|
DbgHandleAssert( hRegKey );
|
|
if( hRegKey == NULL ) {
|
|
return TRUE;
|
|
}
|
|
|
|
//
|
|
// For each processor in the system, display its stepping value.
|
|
// Further, if the processor is not active, disable the display.
|
|
//
|
|
|
|
for( i = 0;
|
|
i < SystemInfo.dwNumberOfProcessors;
|
|
SystemInfo.dwActiveProcessorMask >>= 1, i++ ) {
|
|
|
|
BOOL RegSuccess;
|
|
HREGKEY hRegSubkey;
|
|
|
|
//
|
|
// Open the processor key.
|
|
//
|
|
|
|
hRegSubkey = QueryNextSubkey( hRegKey );
|
|
DbgHandleAssert( hRegSubkey );
|
|
if( hRegKey == NULL ) {
|
|
continue;
|
|
}
|
|
|
|
//
|
|
// Retreive the CPU stepping value.
|
|
//
|
|
|
|
Success = QueryNextValue( hRegSubkey );
|
|
DbgAssert( Success );
|
|
|
|
//
|
|
// If the CPU identifier was available, display just the
|
|
// stepping value and enable the edit control.
|
|
//
|
|
|
|
if( Success == TRUE ) {
|
|
|
|
LPCTSTR Stepping;
|
|
|
|
Stepping = _tcschr(
|
|
( LPCTSTR ) hRegSubkey->Data,
|
|
TEXT( '-' )
|
|
);
|
|
if( Stepping == NULL ) {
|
|
Stepping = ( LPCTSTR ) hRegSubkey->Data;
|
|
} else {
|
|
Stepping++;
|
|
}
|
|
|
|
PrintToFile((LPCTSTR)Stepping,ProcessorId[i],TRUE);
|
|
|
|
|
|
|
|
}
|
|
|
|
//
|
|
// Close the processor key.
|
|
//
|
|
|
|
RegSuccess = CloseRegistryKey( hRegSubkey );
|
|
DbgAssert( RegSuccess );
|
|
|
|
|
|
//
|
|
// Close the root key.
|
|
//
|
|
|
|
Success = CloseRegistryKey( hRegKey );
|
|
DbgAssert( Success );
|
|
|
|
}//end for
|
|
|
|
return TRUE;
|
|
}
|