public static string GetCliVerFromPEHeader( string sCliBinaryFileName ) { PEReader pereadr = null; string sGottenVersion = null; try { pereadr = new PEReader( sCliBinaryFileName , false ); } catch ( Exception exc883 ) { Console.WriteLine( "Error_vep535: Unable to open PEReader, possible incorrect filename? fileName=" + sCliBinaryFileName ); Console.WriteLine( exc883.ToString() ); goto LABEL_gcv552_RETURN_LABEL; } // Take cli version from PE header. sGottenVersion = pereadr.GetSignatureVersion().Replace( "\0" ,"" ).Trim(); Console.WriteLine( "For {0}, existing CLI version found to be = {1}" ,sCliBinaryFileName ,sGottenVersion ); pereadr.Close(); LABEL_gcv552_RETURN_LABEL: return sGottenVersion; }
public static Boolean SetCliVerInPEHeader( string sCliBinaryFileName, string sRequestedNewVersion ) { PEReader pereadr = null; try { pereadr = new PEReader( sCliBinaryFileName , true ); } catch ( Exception exc883 ) { Console.WriteLine( "Error_vep535: Unable to open PEReader, possible incorrect filename? fileName=" + sCliBinaryFileName ); Console.WriteLine( exc883.ToString() ); return false; } pereadr.SetSignatureVersion( sRequestedNewVersion ); pereadr.Close(); Console.WriteLine( "For {0}, new CLI version set to = {1}" ,sCliBinaryFileName ,sRequestedNewVersion ); return true; }//SetCliVerInPEHeader()
static public int Main( string[] clargs ) { PEReader pereadr = null; int aa ,iReturnCode = 0; // 8=Fine ,128>=Problem bool bGetVersion = false ,bOpenPereadr = false ,bConfirmSet = false; // Safety versus speed. string sRequestedNewVersion = null ,sGetNewVersion = null ,sGottenVersion = null ,sCliBinaryFileName = "UserError No such filename"; // Edit the command line args. if ( clargs.Length < 1 ) { iReturnCode += 128 + 256; Console.WriteLine(); Console.WriteLine( "UserError_gar802: Insufficient number of arguments." ); Console.WriteLine( "File name is required."); GetCliVersion.PrintHelpUsage(); goto LABEL_yog552_RETURN_LABEL; } else if ( clargs.Length > 5 ) { iReturnCode += 128 + 256; Console.WriteLine( "UserError_gar713: Max number of command line args is 3, yet 4 or more were passed in." ); GetCliVersion.PrintHelpUsage(); goto LABEL_yog552_RETURN_LABEL; } for ( aa=0 ;aa<clargs.Length ;aa++ ) { if ( clargs[aa].ToLower().Substring( 0 ,1 ) != "/" ) { if ( aa == clargs.Length - 1 ) { sCliBinaryFileName = clargs[aa]; continue; } else { Console.WriteLine( "UserError_gar833: Param value unmatchable to a param /name. Name of cil binary file must come last, if given." ); GetCliVersion.PrintHelpUsage(); goto LABEL_yog552_RETURN_LABEL; } } if ( clargs[aa].ToLower() == "/?" || clargs[aa].ToLower() == "/help" ) { Console.WriteLine( "Here is the documentation you requested..." ); GetCliVersion.PrintHelpUsage(); goto LABEL_yog552_RETURN_LABEL; } else if ( clargs[aa].ToLower() == "/getver" ) { bGetVersion = true; } else if ( clargs[aa].ToLower() == "/setver" ) { ++aa; if ( aa >= clargs.Length ) { Console.WriteLine( "UserError_gar782: /setver requires subsequent value param." ); GetCliVersion.PrintHelpUsage(); goto LABEL_yog552_RETURN_LABEL; } sRequestedNewVersion = clargs[aa]; } else if ( clargs[aa].ToLower() == "/confirmset" ) { ++aa; if ( aa >= clargs.Length ) { Console.WriteLine( "UserError_gar783: /confirmset requires subsequent value param, true or false." ); GetCliVersion.PrintHelpUsage(); goto LABEL_yog552_RETURN_LABEL; } if ( clargs[aa].ToLower() == "true" ) { bConfirmSet = true; } else if ( clargs[aa].ToLower() == "false" ) { bConfirmSet = false; } else { Console.WriteLine( "UserError_gar784: Value following /confirmset unrecognized. Give true or false." ); GetCliVersion.PrintHelpUsage(); goto LABEL_yog552_RETURN_LABEL; } } else { iReturnCode += 128 + 256; Console.WriteLine( "UserError_gar624: Unrecognized command line arg name at {0}: {1}." ,aa.ToString() ,clargs[aa] ); GetCliVersion.PrintHelpUsage(); goto LABEL_yog552_RETURN_LABEL; } } // Edit the command line results status from the loop. if ( bGetVersion ) { if ( sRequestedNewVersion != null ) { iReturnCode += 128 + 256; Console.WriteLine( "UserError_gab501: Invalid command line arg combination." ); goto LABEL_yog552_RETURN_LABEL; } } else // No explicit GET. { if ( sRequestedNewVersion == null ) { bGetVersion = true; // Applying default when zero command line args. } } if ( sRequestedNewVersion == null ) { if ( bConfirmSet ) { iReturnCode += 128 + 256; Console.WriteLine( "UserError_gab478: Invalid command line arg combination." ); goto LABEL_yog552_RETURN_LABEL; } } else { sRequestedNewVersion = sRequestedNewVersion.Replace( "\0" ,"" ).Trim(); } // Instantiate a PEReader object. try { pereadr = new PEReader( sCliBinaryFileName, !bGetVersion ); bOpenPereadr = true; } catch ( Exception exc883 ) { iReturnCode += 128 + 512; Console.WriteLine( "Error_vep535: Unable to open PEReader, possible incorrect filename? exc=..." ); Console.WriteLine( exc883.ToString() ); goto LABEL_yog552_RETURN_LABEL; } // Take the action. if ( bGetVersion ) { sGottenVersion = pereadr.GetSignatureVersion().Replace( "\0" ,"" ).Trim(); Console.WriteLine( "For {0}, existing CLI version found to be = {1}" ,sCliBinaryFileName ,sGottenVersion ); } else // sRequestedNewVersion cannot possibly be null in here. { pereadr.SetSignatureVersion( sRequestedNewVersion ); if ( bConfirmSet ) { // Close, reopen. pereadr.Close(); // Persisting change is needed before Get can confirmset the Set. bOpenPereadr = false; // Reopen. pereadr = new PEReader( sCliBinaryFileName , false ); bOpenPereadr = true; sGetNewVersion = pereadr.GetSignatureVersion().Replace( "\0" ,"" ).Trim(); if ( sRequestedNewVersion != sGetNewVersion ) { iReturnCode += 128 + 1024; Console.WriteLine( "Error_vep433: Attempt to confirmset that new Set matches the requested version found a discrepancy, possible program error. NewVer = {0}." ,sGetNewVersion ); goto LABEL_yog552_RETURN_LABEL; } } Console.WriteLine( "For {0}, new CLI version set to = {1}" ,sCliBinaryFileName ,sRequestedNewVersion ); } LABEL_yog552_RETURN_LABEL:; if ( bOpenPereadr ) { pereadr.Close(); bOpenPereadr = false; } if ( iReturnCode < 128 ) iReturnCode += 8; return iReturnCode; }