#include "LPEL_Headers.h"


PIMAGE_DOS_HEADER DLLEXPORT LPEL_GetDOSHeader(HANDLE hBinary)
{
       PIMAGE_DOS_HEADER pDOSHeader = NULL;           
       
       pDOSHeader = (PIMAGE_DOS_HEADER) hBinary; //Récupération de l'entête DOS
       
       return pDOSHeader;
}
PIMAGE_NT_HEADERS DLLEXPORT LPEL_GetPEHeader(HANDLE hBinary)
{
       PIMAGE_DOS_HEADER pDOSHeader = NULL;           
       PIMAGE_NT_HEADERS pPEHeader = NULL;
       
       pDOSHeader = LPEL_GetDOSHeader(hBinary);
       pPEHeader = (PIMAGE_NT_HEADERS) ((PUCHAR)pDOSHeader + pDOSHeader->e_lfanew);//Récupération de l'entête PE           

       return pPEHeader;
}
PIMAGE_FILE_HEADER DLLEXPORT LPEL_GetCOFFHeader(HANDLE hBinary)
{        
       PIMAGE_NT_HEADERS pPEHeader = NULL;    
       PIMAGE_FILE_HEADER pCOFFHeader = NULL;
       
       pPEHeader = LPEL_GetPEHeader(hBinary);
       
       pCOFFHeader = (PIMAGE_FILE_HEADER)&pPEHeader->FileHeader;//Récupération de l'entête COFF
       
       return pCOFFHeader;
}
PIMAGE_OPTIONAL_HEADER DLLEXPORT LPEL_GetOptionalHeader(HANDLE hBinary)
{
       PIMAGE_NT_HEADERS pPEHeader = NULL;    
       PIMAGE_OPTIONAL_HEADER pOptionalHeader = NULL;
       
       pPEHeader = LPEL_GetPEHeader(hBinary);
       
       pOptionalHeader = (PIMAGE_OPTIONAL_HEADER)&pPEHeader->OptionalHeader;//Récupération de l'entête Optional
       
       return pOptionalHeader;
}                       
PIMAGE_SECTION_HEADER DLLEXPORT LPEL_GetSectionHeader(HANDLE hBinary)
{
       PIMAGE_NT_HEADERS pPEHeader = NULL;
       PIMAGE_SECTION_HEADER pSectionHeader = NULL;
       
       pPEHeader = LPEL_GetPEHeader(hBinary);
       pSectionHeader = (PIMAGE_SECTION_HEADER)IMAGE_FIRST_SECTION(pPEHeader);
       
       return pSectionHeader; 
}
BYTE DLLEXPORT LPEL_IsPEValid(HANDLE hBinary)
{
       PIMAGE_DOS_HEADER pDOSHeader = NULL;
       PIMAGE_NT_HEADERS pPEHeader = NULL;
       
       pDOSHeader = LPEL_GetDOSHeader(hBinary);
       pPEHeader = LPEL_GetPEHeader(hBinary);
       
       /* Vérification de la signature DOS ('MZ') */
       if(pDOSHeader->e_magic != IMAGE_DOS_SIGNATURE)
                                return 0x0;
       
       /* Vérification de la signature PE ('PE\0\0') */
       if(pPEHeader->Signature != IMAGE_NT_SIGNATURE)
                               return 0x0;
       
       return 0x1;
}