Cita:
|
Empezado por dec
Dices que incluso probaste a traducir el código fuente del ejemplo (en lenguaje C) a Delphi, pero que no logras que te funcione el asunto. Ahora bien, ¿cómo se supone que has traducido el código fuente?
|
Si de hecho si traduje el codigo de sysinternals a delphi,
Código Delphi
[-]
program NativeApp;
{$APPTYPE CONSOLE}
uses
Windows, SysUtils, ntdll;
var Heap : THANDLE;
procedure NtProcessStartup(Argument : PStartUp_Argument);
var
CommandLine : PNtUnicodeString;
StringBuffer,
ArgPtr : PWideChar;
HelloWorld : TNtUnicodeString;
HeapParams : TRTL_Heap_Definition;
begin
FillChar(HeapParams, SizeOf(TRTL_Heap_Definition), 0);
HeapParams.Length := SizeOf(TRTL_Heap_Definition);
Heap := RtlCreateHeap( 2, 0, $100000, $1000, 0, @heapParams );
CommandLine := @(Argument^.Environment.CommandLine);
ArgPtr := CommandLine.Buffer;
while (ArgPtr[0] <> ' ') do Inc(ArgPtr);
Inc(ArgPtr);
StringBuffer := RtlAllocateHeap( Heap, 0, 256 );
HelloWorld.Buffer := stringBuffer;
HelloWorld.Length := Length(StringBuffer) * SizeOf(WideCHAR);
HelloWorld.MaximumLength := HelloWorld.Length + SizeOf(WideCHAR);
RtlDisplayString( @helloWorld );
RtlFreeHeap( Heap, 0, stringBuffer );
RtlTerminateProcess( THandle(-1), 0 );
end;
end.
Cita:
|
Empezado por dec
Lo digo porque me llama la atención que en el código de Russinovich, en el tipo de proyecto "Aplicación nativa de Windows NT", no existe el punto de entrada "main" habitual en los programas escritos en el lenguaje C.
|
Si, a mi tambien me sorprendio, pero segun lo que entendi que explican en la pagina de sysinternal es que este tipo de aplicacion no necesita main que solo con la funcion NtProcessStartup la utilizan como entrada, parecido a una dll,
Cita:
|
Empezado por dec
De hecho, el resultado de la compilación del ejemplo (que también se adjunta), el archivo ejecutable, no lo es bajo Win32, quiere decirse, no parece un ejecutable "al uso".
|
De hecho apesar de que trae extension ".exe" no es una aplicacion Win32, incluso si la tratas de ejecutar directamente te marca error.
Cita:
|
Empezado por dec
Entonces, y sin saber absolutamente nada del tema, ¿cómo se supone que has tratado de traducir el código fuente? ¿Has creado una aplicación de "consola"? Pero esta no cuenta con el método "principal" conque cuenta el código fuente de Russinovich, y de hecho crea un ejecutable para Win32,... lo contrario que el código fuente de Russinovich.
En definitiva, lo que me gustaría saber es qué has intentado, más que nada por ver si a partir de ahí se puede aportar algo, y, por otro lado, me planteo si no será que con Delphi no se pueda llevar a cabo una "Aplicación nativa para Windows NT", simple y llanamente.
|
Arriba te relacione parte del fuente que traduje y ademas trate de contactar con
Mark Russinovich pero no obtuve mucha ayuda.