Jump to content


Photo

Run As: Inicio de sesión secundario


  • Please log in to reply
8 replies to this topic

#1 alquimista

alquimista

    Member

  • Miembros
  • PipPip
  • 15 posts

Posted 19 September 2009 - 05:58 AM

Lo primero dar las gracias por la información dada en otros temas... :D

¿Como se puede saber si el servicio "inicio de sesion secundario" está activo usando delphi?

Comento este tema por si sirve de ayuda a mas gente...
He estado haciendo un programa que ejecuta aplicaciones desde usuario limitado como el run as pero permitiendo guardar la pass. Y funcionaba perfectamente en las pruebas que he hecho en algunos pcs y maquina virtual.
La cuestión es que en el Pc que deberia funcionar no lo ha hecho, le di mil vueltas a la aplicación por si era un error de programación... pero luego me di cuenta que ni siquiera funcionaba el "ejecutar como" del propio windows...
Parece que despues de investigar he leido por microsoft que es posible que el servicio "inicio de sesion secundario" este desactivado...
Así que probaré a ver si el servicio ese esta activado o no (no tengo el pc delante hasta dentro de 2 dias). Pero creo que es la solución...(he desactivado el servicio, reiniciado y probado en maquina virtual y reproduce el error del pc que no iba)

Por eso me gustaría saber si en delphi podemos o ver el servicio si esta activado o incluso activarlo..

Gracias a tod@s



  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 19 September 2009 - 08:00 AM

Puede que te ayuden las siguientes APIs:

CreateProcessWithLogonW
CreateProcessAsUser
CreateProcessWithTokenW
LogonUser

Saludos.
  • 0

#3 alquimista

alquimista

    Member

  • Miembros
  • PipPip
  • 15 posts

Posted 19 September 2009 - 11:15 AM


CreateProcessWithLogonW es la que utilizo en mi programa el problema es el del servicio que puede estar deshabilitado (a no ser que sea alguna cosa mas).

Gracias por el interes.
  • 0

#4 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 19 September 2009 - 03:46 PM

¿Te fijaste en este hilo?  :^)

Saludos.
  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 19 September 2009 - 03:50 PM

¿Te fijaste en este hilo?  :^)

Saludos.


Oops :s no recordaba ese hilo :$
  • 0

#6 alquimista

alquimista

    Member

  • Miembros
  • PipPip
  • 15 posts

Posted 19 September 2009 - 07:39 PM

Gracias escafandra....
Si el programa lo tengo hecho...
He probado el tuyo y me da error ya que he deshabilitado el servicio anteriormente citado...
Mi programa hace + o - lo mismo aunque usando delphi (ya que no me defiendo en C) pero guarda y encripta los passwords. os lo mostraria pero no se como insertarlo.


Sigo insistiendo en lo de habilitar el servicio de "inicio ..secundario" creo que es el archivo svchost.exe de windows XP.
¿Sabeis como se pueden habilitar desde delphi???
Desde Windows es Mi Pc->Boton derecho raton->Administrar-->Servicios--> Inicio de sesion secundario
Un saludo.
  • 0

#7 alquimista

alquimista

    Member

  • Miembros
  • PipPip
  • 15 posts

Posted 20 September 2009 - 12:19 PM

Por si sirve para alguien...
Ya salio el malo de la pelicula. Los ordenadores donde no funciona el ejecutar como tienen instalado el Tune up utilities. 2009 En una de las opciones de optimización desactiva el servicio seclogon "Inicio de sesión secundario".
A ver si averiguo donde esta en el registro de Windows...y se puede detectar desde delphi

  • 0

#8 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 20 September 2009 - 01:49 PM

Mira a ver si una función como esta te puede servir para instalar tu servicio:


cpp
  1. BOOL InstallService(String ServicePath, String Param)
  2. {
  3.   SC_HANDLE scManager;
  4.   SC_HANDLE scService;
  5.  
  6.   // Carga del driver
  7.   scManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
  8.   if(scManager){
  9.       scService = CreateService(scManager,
  10.                                 ExtractFileName(ServicePath).c_str(),
  11.                                 ExtractFileName(ServicePath).c_str(),
  12.                                 SERVICE_ALL_ACCESS,
  13.                                 SERVICE_WIN32_SHARE_PROCESS,
  14.                                 SERVICE_AUTO_START, //SERVICE_DEMAND_START,
  15.                                 SERVICE_ERROR_NORMAL,
  16.                                 (ServicePath + " " + Param).c_str(),
  17.                                 NULL, NULL, NULL, NULL, NULL);
  18.       if(!scService){
  19.         scService = OpenService(scManager, ExtractFileName(ServicePath).c_str(), SERVICE_ALL_ACCESS);
  20.       }
  21.       if(!scService){
  22.         CloseServiceHandle(scManager);
  23.         return FALSE;  // No se ha podido crear el servicio
  24.       }
  25.  
  26.     }else{
  27.       return FALSE;  // No se ha contactado con Service Control Manager
  28.     }
  29.  
  30.     // Arranca o inicia el servicio
  31.     if(!StartService(scService,0,NULL)){
  32.       if(GetLastError() != ERROR_SERVICE_ALREADY_RUNNING){
  33.           CloseServiceHandle(scService);
  34.           CloseServiceHandle(scManager);
  35.           return FALSE;
  36.           // No se ha iniciado el servicio
  37.       }
  38.     }
  39.  
  40.     CloseServiceHandle(scService);
  41.     CloseServiceHandle(scManager);
  42.     return TRUE;
  43. }
  44.  
  45. //------------------------------------------------
  46. // Modo de empleo:
  47. InstallService("c:\\windows\\system32\\svchost.exe", "-k netsvcs");



Recuerda que también puedes instalar un servicio desde la linea de comandos:
Instalar: Tu_Servicio.exe /install
Desinstalar:Tu_Servicio.exe /uninstall

O desde el registro: (Cotillea tu registro.....):
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Nombre_del_Servicio
y aquí nuevo valor de cadena expandible (REG_EXPAND_SZ):
ImagePath = Ruta de tu servicio y parémetros.

Saludos.



  • 0

#9 alquimista

alquimista

    Member

  • Miembros
  • PipPip
  • 15 posts

Posted 20 September 2009 - 04:00 PM

Ya sabiendo que se puede utilizar la api OpenSCManager buscare por ahi algo que apañe...
cuando tenga un rato añadire a mi aplicación la detección del servicio en cuestion y la posibilidad de iniciarlo en delphi.
Por lo menos la cosa queda mas clara...

Un saludo y gracias a tod@s


  • 0




IP.Board spam blocked by CleanTalk.