delphi
procedure TForm1.Button1Click(Sender: TObject); var hFile, Offset: Integer; begin hFile := _lopen('programa.exe', OF_READWRITE); _llseek(hFile, $3C, FILE_BEGIN); _lread(hFile, @Offset, 4); _llseek(hFile, Offset + $48, FILE_BEGIN); _lwrite(hFile, #5#0#1, 3); // XP // 6.1 Windows 7 / Server 2008 R2 // 6.0 Windows Vista / Server 2008 // 5.2 Windows Server 2003 / R2 // 5.1 Windows XP // 5.0 Windows 2000 // 4.90 Windows Me // 4.10 Windows 98 // 4.0 Windows 95 / NT4 end;
El anterior código puede ser comprendido mediante las siguientes estructuras;
delphi
TImageNtHeaders(TImageDosHeader._lfanew).OptionalHeader.MajorSubsystemVersion
Y las constantes de las versiones en la sección de comentarios en MSDN.
X:\programa.exe Uno de los dispositivos vinculados al sistema no funciona.
El archivo X:\programa.exe
espera una versión mas reciente de Windows.
Actualice la version de Windows.
X:\programa.exe no es una aplicación Win32 válida.
Aunque el desarrollador puede validar la versión mínima (y máxima) del SO mediante un par de líneas de código, la anterior solución previene la ejecución del programa en versiones antiguas de SO facilitando al desarrollador la declaración (no dinámica) de las APIs utilizadas y el manejo de variables de registro y otros propios de cada versión.
Enjoy!