Ver Mensaje Individual
  #5  
Antiguo 05-06-2006
leonelpereda leonelpereda is offline
Miembro
 
Registrado: may 2006
Posts: 11
Reputación: 0
leonelpereda Va por buen camino
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 [-]
// (c) Alex Konshin mailto:[email protected] 20 jul 2000
program NativeApp;
// PURPOSE: Simple Windows NT/2000 console application that calls Native API functions
{$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
    //
    // Initialize some heap
    //
    FillChar(HeapParams, SizeOf(TRTL_Heap_Definition), 0);
    HeapParams.Length := SizeOf(TRTL_Heap_Definition);
    Heap              := RtlCreateHeap( 2, 0, $100000, $1000, 0, @heapParams );

    //
    // Point at command line
    //
    CommandLine := @(Argument^.Environment.CommandLine);
    //
    // Locate the argument
    //
    ArgPtr := CommandLine.Buffer;
    while (ArgPtr[0] <> ' ') do Inc(ArgPtr);
    Inc(ArgPtr);
    //
    // Print out the argument
    //
    StringBuffer := RtlAllocateHeap( Heap, 0, 256 );
    //swprintf( stringBuffer, L"\n%s", argPtr );
    HelloWorld.Buffer        := stringBuffer;
    HelloWorld.Length        := Length(StringBuffer) * SizeOf(WideCHAR);
    HelloWorld.MaximumLength := HelloWorld.Length + SizeOf(WideCHAR);
    RtlDisplayString( @helloWorld );
    //
    // Free heap
    //
    RtlFreeHeap( Heap, 0, stringBuffer );
    //
    // Terminate
    //
    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.

Última edición por dec fecha: 05-06-2006 a las 21:44:12.
Responder Con Cita