Es recomendable utilizar funciones Heap, debido a que las funciones Global fueron implementadas para compatibilidad con aplicaciones de 16 bits e internamente hacen llamadas a sus contrapartes Heap.
Pasando al resto del código, existen mejores formas de mapear un PE, y podrías definir algunas estructuras por lo menos. También me llama la atención que te interese liberar un handle, pero no liberar el buffer de memoria.
Leer el archivo entero en un solo ReadFile() es ineficaz en caso de que no sea PE, o si nos encontrásemos en algún contexto en el cual siempre recibiremos un PE, ¿para qué verificar los word 'MZ' o 'PE'?.
Pasando al resto del código, existen mejores formas de mapear un PE, y podrías definir algunas estructuras por lo menos. También me llama la atención que te interese liberar un handle, pero no liberar el buffer de memoria.
Leer el archivo entero en un solo ReadFile() es ineficaz en caso de que no sea PE, o si nos encontrásemos en algún contexto en el cual siempre recibiremos un PE, ¿para qué verificar los word 'MZ' o 'PE'?.