示例#1
0
    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()
示例#2
0
    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);
    }
示例#3
0
    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);
    }