/*
* PeHeader.cpp - Part of the PeLib library.
*
* Copyright (c) 2004 - 2005 Sebastian Porst (webmaster@the-interweb.com)
* All rights reserved.
*
* This software is licensed under the zlib/libpng License.
* For more details see http://www.opensource.org/licenses/zlib-license.php
* or the license information file (license.htm) in the root directory 
* of PeLib.
*/

#include "PeLibInc.h"
#include "PeHeader.h"

namespace PeLib
{
	template<>
	void PeHeaderT<32>::readBaseOfData(InputBuffer& ibBuffer, PELIB_IMAGE_NT_HEADERS<32>& header) const
	{
		ibBuffer >> header.OptionalHeader.BaseOfData;
	}
	
	template<>
	void PeHeaderT<64>::readBaseOfData(InputBuffer&, PELIB_IMAGE_NT_HEADERS<64>&) const
	{
	}
	
	template<>
	void PeHeaderT<32>::rebuildBaseOfData(OutputBuffer& obBuffer) const
	{
		obBuffer << m_inthHeader.OptionalHeader.BaseOfData;
	}
	
	template<>
	void PeHeaderT<64>::rebuildBaseOfData(OutputBuffer&) const
	{
	}
	
    template<>
    bool PeHeaderT<32>::isValid() const
    {
		return true;
    }
    
    template<>
    bool PeHeaderT<64>::isValid() const
    {
		return true;
    }
    
    template<>
    bool PeHeaderT<32>::isValid(unsigned int pehf) const
    {
    /*
        if (pehf == NtSignature)
        {
            return m_inthHeader.Signature == IMAGE_NT_SIGNATURE;
        }
        else if (pehf == NumberOfSections)
        {
            return getNumberOfSections() == calcNumberOfSections();
        }      */
        return false;
    }

    template<>
    bool PeHeaderT<64>::isValid(unsigned int pehf) const
    {
        return false;
    }

	/**
	* @return The BaseOfData value from the PE header.
	**/
	dword PeHeader32::getBaseOfData() const
	{
		return m_inthHeader.OptionalHeader.BaseOfData;
	}

	/**
	* Changes the file's BaseOfData.
	* @param dwValue New value.
	**/
	void PeHeader32::setBaseOfData(dword dwValue)
	{
		m_inthHeader.OptionalHeader.BaseOfData = dwValue;
	}

}
