Leaked source code of windows server 2003
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.
 
 
 
 
 
 

132 lines
2.7 KiB

// version.cpp : Defines the entry point for the console application.
//
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <ntverp.h>
#include <tchar.h>
static BOOL WriteToFile( HANDLE hFile, const char *psz );
static void PrintUsage();
int __cdecl
main( int argc, char **argv )
{
const char *pszOutFile = NULL;
if( 1 == argc )
{
PrintUsage();
return 1;
}
for( int i = 1; i < argc; i++ )
{
if( 0 == _stricmp( argv[ i ], "-outFile" ) && ( i + 1 < argc ) )
{
pszOutFile = argv[ i + 1 ];
break;
}
else
{
PrintUsage();
return 1;
}
}
const char *pszUsings = "using System.Reflection;\r\nusing System.Security.Permissions;\r\nusing System.Runtime.CompilerServices;\r\n\r\n";
const char *pszVersionTemplate = "[assembly: AssemblyVersion(\"%s\")]\r\n";
char szVersion[ 256 ];
char szBuf[ 32 ];
memset( szBuf, 0, 32 * sizeof( char ) );
memset( szVersion, 0, 256 * sizeof( char ) );
//
// VER_PRODUCTVERSION_STR is a preprocessor symbol, defined in ntverp.h.
// It contains the string-ized Windows version number.
//
char *psz = strncpy( szBuf, VER_PRODUCTVERSION_STR, 32 );
szBuf[ 31 ] = 0x00;
if( NULL == psz )
{
printf( "Preprocessor symbol VER_PRODUCTVERSION_STR is not defined. Giving up.\n" );
return -1;
}
sprintf( szVersion, pszVersionTemplate, szBuf );
HANDLE hFile = CreateFileA( pszOutFile,
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL );
if( NULL == hFile )
{
printf( "Could not create the following file: %s. Giving up.\n", pszOutFile );
return -1;
}
BOOL fSuccess = FALSE;
fSuccess = WriteToFile( hFile, pszUsings );
if( !fSuccess )
{
printf( "Error writing to file: %s. Giving up.\n", pszOutFile );
CloseHandle( hFile );
return -1;
}
fSuccess = WriteToFile( hFile, szVersion );
if( !fSuccess )
{
printf( "Error writing to file: %s. Giving up.\n", argv[ 1 ] );
CloseHandle( hFile );
return -1;
}
CloseHandle( hFile );
return 0;
}
BOOL
WriteToFile( HANDLE hFile, const char *psz )
{
if( ( NULL == hFile ) || ( NULL == psz ) )
{
return FALSE;
}
DWORD dwBytesToWrite = strlen( psz );
DWORD dwBytesWritten = 0;
BOOL fSuccess = FALSE;
fSuccess = WriteFile( hFile,
reinterpret_cast<const void *>( psz ),
dwBytesToWrite,
&dwBytesWritten,
NULL );
if( !fSuccess || ( dwBytesToWrite != dwBytesWritten ) )
{
return FALSE;
}
else
{
return TRUE;
}
}
void
PrintUsage()
{
printf( "Usage of version.exe:\r\n\r\n" );
printf( "version.exe <-outFile <path to output file> >\r\n" );
printf( "version.exe <-help>\r\n" );
}