Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

334 lines
7.1 KiB

/*++
Copyright (c) 1993 Microsoft Corporation
Module Name:
OsverP.c
Abstract:
This module contains support for the OS Version.
Author:
Scott B. Suhy (ScottSu) 6/1/93
Environment:
User Mode
--*/
#include <windows.h>
#include "osverp.h"
#include "regp.h"
#include "dialogsp.h"
#include "winmsdp.h"
#include "msgp.h"
#include "printp.h"
#include <stdio.h>
#include <time.h>
int EditControlIds[ ] = {
//version
IDC_EDIT_INSTALL_DATE,
IDC_EDIT_REGISTERED_OWNER,
IDC_EDIT_REGISTERED_ORGANIZATION,
IDC_EDIT_VERSION_NUMBER,
IDC_EDIT_BUILD_NUMBER,
IDC_EDIT_BUILD_TYPE,
IDC_EDIT_SYSTEM_ROOT,
};
//
// Names of Registry values that are to be displayed by the OS Version dialog.
//
VALUE
Values[ ] = {
MakeValue( InstallDate, DWORD ),
MakeValue( RegisteredOwner, SZ ),
MakeValue( RegisteredOrganization, SZ ),
MakeValue( CurrentVersion, SZ ),
MakeValue( CurrentBuildNumber, SZ ),
MakeValue( CurrentType, SZ ),
MakeValue( SystemRoot, SZ )
};
//
// Location of values to be displayed by the OS Version dialog.
//
MakeKey(
Key,
HKEY_LOCAL_MACHINE,
TEXT("Software\\Microsoft\\Windows Nt\\CurrentVersion") ,
NumberOfEntries( Values ),
Values
);
//
// Name of Registry value that's to be displayed by the OS Version dialog.
//
VALUE
SSOValue[ ] = {
MakeValue( SystemStartOptions, SZ )
};
//
// Location of value to be displayed by the OS Version dialog.
//
MakeKey(
SSOKey,
HKEY_LOCAL_MACHINE,
TEXT( "System\\CurrentControlSet\\Control" ),
NumberOfEntries( SSOValue ),
SSOValue
);
BOOL OsVer(void){
BOOL Success;
int i;
HREGKEY hRegKey;
WCHAR szVersion[128];
WCHAR szVersionF1[] = L"CSD00%u";
WCHAR szVersionF2[] = L"%u%c";
LONG dwCSDVer;
LONG dwSPNum;
DWORD dwBuildNumber;
BYTE bSPRev;
WCHAR cSPRev;
//
// Ensure that data structures are synchronized.
//
//
DbgAssert(
NumberOfEntries( EditControlIds )
== Key.CountOfValues
);
//
// Open the registry key that contains the OS Version data.
//
hRegKey = OpenRegistryKey( &Key );
DbgHandleAssert( hRegKey );
if( hRegKey == NULL ) {
return FALSE;
}
//
// For each value of interest, query the Registry, determine its
// type and display it in its associated edit field.
//
for( i = 0; i < NumberOfEntries( EditControlIds ); i++ ) {
//
// Get the next value of interest.
//
Success = QueryNextValue( hRegKey );
DbgAssert( Success );
if( Success == FALSE ) {
continue;
}
//
// If the queried value is the installation date, convert it
// to a string and then display it, otherwise just display
// the queried string.
//
switch(EditControlIds[i]){
case IDC_EDIT_INSTALL_DATE:
{
//
// BUGBUG No Unicode ctime() so use ANSI type and APIs.
//
LPSTR Ctime;
//
// Convert the time to a string, overwrite the newline
// character and display the installation date.
//
Ctime = ctime(( const time_t* ) hRegKey->Data );
Ctime[ 24 ] = '\0';
PrintToFile((LPCTSTR)Ctime,IDC_EDIT_INSTALL_DATE,FALSE);
break;
}
case IDC_EDIT_REGISTERED_OWNER:
PrintToFile((LPCTSTR)hRegKey->Data,IDC_EDIT_REGISTERED_OWNER,TRUE);
break;
case IDC_EDIT_REGISTERED_ORGANIZATION:
PrintToFile((LPCTSTR)hRegKey->Data,IDC_EDIT_REGISTERED_ORGANIZATION,TRUE);
break;
case IDC_EDIT_VERSION_NUMBER:
PrintToFile((LPCTSTR)hRegKey->Data,IDC_EDIT_VERSION_NUMBER,TRUE);
break;
case IDC_EDIT_BUILD_NUMBER:
if ( !swscanf ((const unsigned short *)hRegKey->Data, L"%d", &dwBuildNumber)) {
dwBuildNumber = 0;
}
PrintToFile((LPCTSTR)hRegKey->Data,IDC_EDIT_BUILD_NUMBER,TRUE);
break;
case IDC_EDIT_BUILD_TYPE:
PrintToFile((LPCTSTR)hRegKey->Data,IDC_EDIT_BUILD_TYPE,TRUE);
break;
case IDC_EDIT_SYSTEM_ROOT:
PrintToFile((LPCTSTR)hRegKey->Data,IDC_EDIT_SYSTEM_ROOT,TRUE);
break;
}//end switch
}//end for
//
// Close the registry key.
//
Success = CloseRegistryKey( hRegKey );
DbgAssert( Success );
//start of GreggA code.
//
// Ensure that the SystemStartOptions data structure is synchronized.
//
DbgAssert(
SSOKey.CountOfValues
== 1
);
//
// Open the registry key that contains the SystemStartInfo.
//
hRegKey = OpenRegistryKey( &SSOKey );
DbgHandleAssert( hRegKey );
if( hRegKey == NULL ) {
return FALSE;
}
//
// Query the Registry for the value
// display it in its associated edit field.
//
Success = QueryNextValue( hRegKey );
DbgAssert( Success );
if( Success == FALSE ) {
return FALSE;
}
PrintToFile(( LPCTSTR ) hRegKey->Data,IDC_EDIT_START_OPTS,TRUE);
//
// Close the registry key.
//
Success = CloseRegistryKey( hRegKey );
DbgAssert( Success );
//
// Get the Current CSDVersion and display it in the dialog box
//
dwCSDVer = GetCSDVersion ( dwBuildNumber );
if ((dwSPNum = (dwCSDVer >> 8)) || (dwCSDVer == 0)){
if (bSPRev = (dwCSDVer & 0xFF)) {
cSPRev = 'A' + (bSPRev-1);
} else {
cSPRev = ' ';
}
wsprintf(szVersion, szVersionF2, dwSPNum, cSPRev);
} else {
wsprintf(szVersion, szVersionF1, dwCSDVer);
}
PrintToFile( szVersion, IDC_EDIT_CSD_NUMBER, TRUE );
return TRUE;
}//end function
DWORD
GetCSDVersion (
IN DWORD dwCurrentBuildNumber
)
/*++
Routine Description:
GetCSDVersion queries the registry for the current CSDVersion. If this value
does not exits, the CSDVersion is set to zero.
Arguments:
None.
Return Value:
DWORD Current CSDVersion.
--*/
{
LPTSTR lpsz31RegName = L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
LPTSTR lpsz35RegName = L"System\\ControlSet001\\Control\\ProductOptions";
HKEY hsubkey = NULL;
DWORD dwZero = 0;
DWORD dwRegValueType;
DWORD dwRegValue;
DWORD cbRegValue;
DWORD dwCSDVersion;
cbRegValue = sizeof(dwRegValue);
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
dwCurrentBuildNumber >= 807 ? lpsz35RegName : lpsz31RegName,
dwZero,
KEY_QUERY_VALUE,
&hsubkey) ||
RegQueryValueEx(hsubkey, L"CSDVersion", NULL,
&dwRegValueType, (LPBYTE)&dwRegValue, &cbRegValue) ||
dwRegValueType != REG_DWORD
) {
dwCSDVersion = 0;
} else {
dwCSDVersion = dwRegValue;
}
if (hsubkey != NULL) {
RegCloseKey (hsubkey);
}
return dwCSDVersion ;
}