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()
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); }
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); }