Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-06-2006
leonelpereda leonelpereda is offline
Miembro
 
Registrado: may 2006
Posts: 11
Poder: 0
leonelpereda Va por buen camino
Aplicacion en delphi que se ejecute en el bootexecute

Hola a todos

Necesito hacer una aplicacion que se ejecute en el bootexecute, segun estuve leyendo en ese momento solo pueden ejecutarse aplicaciones "nativa", pero no se como generar una en delphi. Me descargue un ejemplo http://www.sysinternals.com/Files/Native.zip y la explicacion. Incluso lo rescribi en delphi pero no logro que se ejecute en el HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\bootexecute

Alguien me puede ayudar, Gracias

Saludos,
Leonel Pereda
Responder Con Cita
  #2  
Antiguo 05-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

He estado echando un vistazo al código fuente que enlazas, por cierto, de mi admirado Mark Russinovich. A me llaman muchas cosas la atención, pero, para empezar, una de ellas.

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?

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.

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".

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.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 05-06-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Delphi no puede generar ese tipo de ejecutables por si mismo, pero puede que en esta pagina encuentres algo de informacion http://hxdef.org/download.php En ella puedes encontrar una serie de "trucos" y herramientas para crear un driver utilizando Delphi. Ya se que no quieres hacer un driver pero leyendo el articulo de Russinovich parece que utiliza el DDK (Driver Development Kit) para construir su ejecutable, asi que por ahi debe de estar la clave.

Asi lo describen en la pagina:
Cita:
Fourth release of DDDK. Still just proof of concept showing the possibility of making working Delphi driver. There are several improvements in this version that made possible to rewrite hook1, hook2 and hook3 from Driver coding tutorial to Delphi.
PD: La pagina es del mismo programador que creo el "Hacker Defender" un famoso RootKit, es interesante echarle un vistazo aunque solo sea para ver las tecnicas que usan estos "bichitos"
Responder Con Cita
  #4  
Antiguo 05-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Así es como dice Seoane. Es posible que pueda lograrse algo a partir de eso. Suena interesante eso de las "aplicaciones nativas", lo malo es que como dice Russinovich la documentación sea poca e incompleta.

En todo caso me quedo con lo que al final del artículo de Russinovich (que por cierto, es este) se dice, y es que "If you want to build Native you must have the Windows NT Device Driver Kit. Copy the makefile.def included with Native's sources to \ddk\inc and then you can run Build.".

O sea, que lo que dice Seoane tiene buena pinta, en lo que toca a Delphi. Y, por otro lado, tal vez para lo que se pretenda hacer baste y sobre con el "Windows NT Device Driver Kit" ese, del que, por cierto, no sabía nada hasta esta tarde.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 05-06-2006 a las 21:29:03.
Responder Con Cita
  #5  
Antiguo 05-06-2006
leonelpereda leonelpereda is offline
Miembro
 
Registrado: may 2006
Posts: 11
Poder: 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:alexk@mtgroup.ru 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
  #6  
Antiguo 05-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
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,
Así lo entendí yo también, pero...

Cita:
De hecho apesar de que trae extension ".exe" no es una aplicacion Win32, incluso si la tratas de ejecutar directamente te marca error.
Pues no sé qué decirte. El código que muestras comienza con un "program ...", lo que da a entender que no resultará en un archivo "DLL", sino en un archivo ejecutable... me temo que para Win32. ¿O me estoy perdiendo algo?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 05-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Me llama la atención del código que has expuesto el comentario siguiente:

Cita:
PURPOSE: Simple Windows NT/2000 console application that calls Native API functions
Es decir, se deja claro que es una aplicación de "consola" para Windows, que va a utilizar ciertas funciones del API "nativa" (de NT, supongo), pero, no se puede extrapolar de ahí que lo que se vaya a producir sea una aplicación "nativa" propiamente dicha. ¿O me equivoco?

O sea, que:

Cita:
Si de hecho si traduje el codigo de sysinternals a delphi,
No puede considerarse correcto (si no me equivoco), puesto que el código de más arriba hace uso de funciones de que también se hace uso en el ejemplo de Russinovich, pero el ejemplo de Russinovich es, propiamente, una aplicación "nativa" para Windows NT, y el código de ejemplo que tú has expuesto es el de una aplicación de tipo "consola" para Win32.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 05-06-2006 a las 21:50:40.
Responder Con Cita
  #8  
Antiguo 05-06-2006
leonelpereda leonelpereda is offline
Miembro
 
Registrado: may 2006
Posts: 11
Poder: 0
leonelpereda Va por buen camino
Cita:
Empezado por dec
No puede considerarse correcto (si no me equivoco), puesto que el código de más arriba hace uso de funciones de que también se hace uso en el ejemplo de Russinovich, pero el ejemplo de Russinovich es, propiamente, una aplicación "nativa" para Windows NT, y el código de ejemplo que tú has expuesto es el de una aplicación de tipo "consola" para Win32.
Por supuesto que el codigo que les he enviado es solo un intento que evidentemente no esta correcto o esta incompleto, de hecho es el tema del hilo, en ese ejemplo solo traduje "literalmente" a delphi el ejemplo de sysinternal. Pero como explicaba en mi mensaje inicial cuando compilo esto en delphi me genera una aplicacion win32 y no una nativa.

Última edición por leonelpereda fecha: 05-06-2006 a las 22:02:14.
Responder Con Cita
  #9  
Antiguo 05-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Pero como explicaba en mi mensaje inicial cuando compilo esto en delphi me genera una aplicacion win32 y no una nativa.
Pues entonces habrá que concluir que con Delphi no pueden generarse este tipo de aplicaciones "nativas". Vamos, ni con Delphi ni con Visual Studio 2005 con ninguno de los lenguajes que soporta. Estos son los entornos en que he podido "intentar" crear una aplicación "nativa" y no lo he conseguido.

Habría que seguir la pista sobre la que nos pone Seoane, o, en su defecto, utilizar el Windows "NT Device Driver Kit". Vamos, digo yo, ¿eh? Se adminten otras sugerencias.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #10  
Antiguo 05-06-2006
leonelpereda leonelpereda is offline
Miembro
 
Registrado: may 2006
Posts: 11
Poder: 0
leonelpereda Va por buen camino
Gracias David por tus aportes
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cómo hacer que se ejecute mi aplicación cuando se abra Internet Explorer? JuanErasmo API de Windows 3 19-04-2006 19:12:33
No pemitir que se ejecute una aplicación barrauda API de Windows 12 18-11-2005 22:07:15
solo se ejecute una sola vez la aplicacion.... uper Varios 1 16-03-2005 18:49:40
Alguien sabe como hacer que tu aplicacion se ejecute... Supra Varios 7 05-02-2005 21:10:09
Que se ejecute mi aplicación a una hora GliceMan Varios 6 04-02-2005 11:07:42


La franja horaria es GMT +2. Ahora son las 04:30:28.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi