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 21-01-2008
alquimista alquimista is offline
Miembro
 
Registrado: ene 2008
Posts: 203
Poder: 17
alquimista Va por buen camino
Smile Grabar en registro y directorio Windows como usuario limitado

Muy buenas.

Soy nuevo en el foro...

Mi pregunta es la siguiente.

¿Es posible grabar en el registro de Windows y en el directorio de Windows siendo usuario limitado en delphi?
- Tengo desarrollado un mata procesos (preferentemente juegos) para instalar en una red de ordenadores sin mantenimiento. En cada puesto de trabajo pueden haber unos 10 usuarios algunos con privilegios de Admin (para instalar programas) y la mayoría como usuarios limitados.

- El programa se está preparando para actualizar desde web.
Y el programa está instalado en c:\Windows\prog\. Se instala desde una cuenta de Admin.
La idea es descargar la app desde web (primero comprobando versión), cerrar el programa ejecutandose y grabar la actualización en la carpeta anterior. En usuario limitado no graba ya que no tiene permiso para escribir en c:\Windows\xxx ni tampoco en el registro en la clave HKLM( LOCAL MACHINE) subclave la de mi programa.
- He buscado por ahí y he visto funciones como AdjustTokenPrivileges o algo parecido pero no entiendo muy bien el funcionamiento. Ademas el ejemplo que hay por los foros es para permitir apagar Windows y esto no me sirve.

A ver si alguien me puede ayudar...
Que quede claro que el programa no es un troyano o similar.

Gracias de antemano.
Responder Con Cita
  #2  
Antiguo 21-01-2008
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Hola alquimista.
Normalmente, la mayoría de los miembros no contestamos a preguntas que no le sabemos la respuesta. Cuando mucho solemos dar sugerencias y/o alternativas a lo que buscas. Dudo mucho que recibas gran ayuda acá o en cualquier lugar al respecto. Como te dije, mi respuesta es más bien una segurencia en vez de una respuesta directa a tu problema.

Seguramente lo que buscas, si no es imposible, es muy, muy díficil de hacerlo. A menos que tengas conocimientos de hacker sobre windows.
Lo más adecuado, sería que, antes de iniciar tu aplicación, comprobaras si el usuario tiene privilegios administrativos, sino los tiene, entonces mostrar una ventana donde un usuario con suficientes privilegios pueda darle permiso a tu aplicación para hacer las modificaciones necesarias.

Cita:
Empezado por alquimista Ver Mensaje
A ver si alguien me puede ayudar...
Que quede claro que el programa no es un troyano o similar.
Descuida, no somo mal pensados.
Cada quien es responsable de sus actos.

Saludos.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #3  
Antiguo 21-01-2008
alquimista alquimista is offline
Miembro
 
Registrado: ene 2008
Posts: 203
Poder: 17
alquimista Va por buen camino
Talking

La aplicación ya está en marcha y funcionando.
Ya tengo una rutina para saber si uno es administrador o no.
Si es imposible desactivaré la entrada a la aplicación o por lo menos el cambio de password y la actualización.

Mas que nada me interesaba para la actualización de la aplicación.

El ponerlo en Windows\nombreapp\ era para que no la borraran los user limitados y para que no fuese tan evidente como en c:\nombreapp o c:\Archivos de programa\...

La aplicación esta ejecutándose bajo XP y tenia oido de que era posible por lo menos no llegar a usuario administrador pero sí por lo menos activar privilegios para algunas cosas.

En un principio la aplicación se arranca al iniciar WINDOWS y está lo más oculta posible. Se utiliza para no permitir arrancar juegos u otras aplicaciones. No tiene una seguridad brutal pero funciona.

Bueno gracias por la pronta respuesta.
Estaré a la escucha por si alguien da alguna solución.
Responder Con Cita
  #4  
Antiguo 21-01-2008
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
ojo, la otra alternativa seía darle privilegios a usuarios limitados a que puedan hacer modificaciones en C:\miapp. de esa forma si te serviría la herramienta.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #5  
Antiguo 21-01-2008
alquimista alquimista is offline
Miembro
 
Registrado: ene 2008
Posts: 203
Poder: 17
alquimista Va por buen camino
Smile

60 ordenadores por unos 10 usuarios o mas.
Son muchos creo...

La idea es tal y como están los pcs que funcione con lo que quería hacer.

Gracias de nuevo..

Un saludo.
Responder Con Cita
  #6  
Antiguo 21-01-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Bueno; si tienes acceso a dichos ordenadores, y por consiguiente a sus cuentas puedes usar la API: CreateProcessAsUser para "correrte a ti mismo" (que tu proceso se corra a si mismo), con los privilegios de un administrador.

Tambien hay otras alternativas; pero entre todas la anterior es la más aconsejable.

Saludos
Responder Con Cita
  #7  
Antiguo 22-01-2008
alquimista alquimista is offline
Miembro
 
Registrado: ene 2008
Posts: 203
Poder: 17
alquimista Va por buen camino
Smile

El problema es que las contraseñas de Administrador no son siempre las mismas, yo se algunas pero no la de todos los pcs, y creo que la función CreateProcessAsUser tiene de parámetros usuario, password, dominio , etc...
Vamos que es un lio. Se trata de aulas con poco mantenimiento.
Viendo que parece mu complicado optaré por deshabilitar las opciones del programa en modo user limitado.
Gracias... Anima que la gente responda en muy poco tiempo.
Responder Con Cita
  #8  
Antiguo 22-01-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Entiendo; pero no veo mayor problema... en todo caso podrías darle los privilegios de escritura a los usuarios restringidos para que tu aplicacion guardara tus LOGs o INIs en alguna carpeta como comentabas anteriormente.

Click derecho en la carpeta->Propiedades->Seguridad->Avanzadas->Seleccionar "Usuarios"->Modificar->Seleccionas los privilegios->Aplicar->Aceptar

Incisto pues es una buena opción dejar a los usuarios como restringidos.

Suerte
Responder Con Cita
  #9  
Antiguo 22-01-2008
alquimista alquimista is offline
Miembro
 
Registrado: ene 2008
Posts: 203
Poder: 17
alquimista Va por buen camino
La idea es no tocar la configuración de los Pcs (son muchos) , sino que el programa sea capaz de tomar el control y realizar las acciones necesarias.

He visto por ahí otra funcion llamada CreateProcessWithLogon pero creo que tambien hay que ponerle user y pass, aparte no consigo entenderla muy bien (debe ser por que he leido en inglés).
Responder Con Cita
  #10  
Antiguo 22-01-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Si tu programa no tiene permisos de administrador es lógico que no pueda hacer cosas de nivel Administrador.
Puedes probar a grabar en la clave de registro CURRENTUSER en lugar de LOCALMACHINE; Eso afectará sólo a tu usuario, no al resto (cosa normal que no te deje hacer cosas que afecten al resto si no tienes permisos de Admin).

Puedes ejecutar procesos con nivel administrador, pero para eso deberás conocer usuario y contraseña del administrador. Es lógico, sino sería un caos.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #11  
Antiguo 22-01-2008
alquimista alquimista is offline
Miembro
 
Registrado: ene 2008
Posts: 203
Poder: 17
alquimista Va por buen camino
Bueno....
Visto que no es posible deshabilitaré la entrada a configurar la app al usuario limitado y que el programa grabe la actualización cuando inicie sesión un administrador.

Para la actualización (todavía no está implementada) había pensado
colocar en web la aplicación y un fichero de texto con la versión nueva.
Descargar el txt y comparar versión de APP con la descargada. si es asi descargar la app de web.
Luego ejecutar desde mi app un exe que copie la nueva y machaque la vieja. Para ello antes cierro la app.
Esto es un poco lioso.
¿Sabe alguien si hay un tema sobre esto o abro otro tema?

Ya tengo implementada la descarga de los archivos web y funciona bien.

Un saludo a todos

Última edición por alquimista fecha: 22-01-2008 a las 12:11:57.
Responder Con Cita
  #12  
Antiguo 22-01-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por alquimista Ver Mensaje
Esto es un poco lioso.
¿Sabe alguien si hay un tema sobre esto o abro otro tema?
Es lioso, pero básicamente es lo que hay que hacer; No te queda otra.

Si quieres hablar más del tema, yo te recomiendo que abras otro tema sobre las actualizaciones. de todas formas, busca antes, porque ya hemos hablado sobre ellovarias veces, incluso si no recuerdo mal, hay quien subió código/ejemplos sobre ello.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #13  
Antiguo 23-01-2008
alquimista alquimista is offline
Miembro
 
Registrado: ene 2008
Posts: 203
Poder: 17
alquimista Va por buen camino
Thumbs up

Ya he localizado el hilo de actualización de app por web.

He visto que lo que comentabas en esos hilos se parece a lo que decia, pero no se me habia ocurrido los de obtener la versión del exe en ejecución. Como la app mia es la que mira si se actualiza y lleva una const con la versión pos no me hace falta.
He visto tu web y trae código muy interesante sobre la descarga web. Lo he probado sobre delphi 2006 y he tenido que cambiar un par de cosas y ha funcionado correctamente.

Gracias por la ayuda.

Responder Con Cita
  #14  
Antiguo 24-01-2008
alquimista alquimista is offline
Miembro
 
Registrado: ene 2008
Posts: 203
Poder: 17
alquimista Va por buen camino
He estado haciendo pruebas con mi app.
Y por supuesto falla en cosas triviales.
¿Si creo un usuario fijo para todos los pcs desde mi programa y utilizo
CreateProcessWithLogonW, desde un usuario limitado podría funcionar?

¿Como puedo desde delphi crear un usuario fijo con privilegios de Admin desde cuenta Admin?

Al deshabilitar Ctrl+Alt+Supr desde la app (HKLM\....) me falla también en user limitado.
- mi appp cuando arranca lo cambia en registro y cuando finaliza vuelve a habilitar Ctrl+alt+supr. ¿Sirve también usar (HKCU\....)?

Me tiene frito es usuario limitado

Ya se que son muchas preguntas, pero en el fondo es por culpa de no poder escribir en el registro.


Gracias
Responder Con Cita
  #15  
Antiguo 24-01-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Desde una cuenta con privilegios de administrador SI puedes crear otra cuenta con privilegios de administrador; la cual la podrás utilizar desde una cuenta limitada con cualquier método "run as" como el que comentas.

Para crearla (puesto que lo harás casi manualmente; puedes utilizar un VBScript, acá te lo dejo; crea un usuario de nombre "admin" y password "HAclave". debes crear un archivo ".VBS" y copiar lo siguiente:

Código:
set o=createobject("shell.users").create("admin")
o.setting("AccountType")=3
o.changepassword "HAclave", ""
Ahora podrás realizar lo que necesitas... lo del Ctrl+Alt+Del (supongo que te refieres al "DisableTaskMgr"), es efectivo en todas las cuentas que tengan reg (HKCU)

Saludos

Última edición por cHackAll fecha: 26-01-2008 a las 02:35:47. Razón: Fallaba un parámetro
Responder Con Cita
  #16  
Antiguo 25-01-2008
alquimista alquimista is offline
Miembro
 
Registrado: ene 2008
Posts: 203
Poder: 17
alquimista Va por buen camino
Bueno me rindo. Se ve que me viene grande esto del delphi.

Tampoco me funciona DisableTaskManager en usuario limitado.
Voy a añadir taskmng.exe a la lista negra de mi app y que chequee la lista cada 10 segundos.
Y pasaré a un fichero codificado las password de la app y ciertas configuraciones del programa.

Creo que esto ya se puede cerrar.

Si alguien quiere ayudarme a pulir mi app.
¿En que hilo se puede poner?
-Es un matajuegos que utiliza un escaner de ficheros (usando un componente findfile), un ShellNotify para detectar creación de archivos y el mataprocesos con una lista negra de programas.

Gracias por las respuestas
Responder Con Cita
  #17  
Antiguo 26-01-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
No pudiste con esta clave?:

Código:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Policies\System]
Supongo que el código para crear un usuario en VBS te resultó algo "extraño", en tal caso te lo pongo en Delphi:

Código Delphi [-]
uses ComObj;
 
procedure TForm1.Button1Click(Sender: TObject);
var user: OleVariant;
begin
 user := CreateOleObject('shell.users');
 user := user.create('admin');
 user.changepassword('HAclave', '');
 user.setting('AccountType') := 3;
end;

PD: no entiendo cual es el problema; en fin

Suerte
Responder Con Cita
  #18  
Antiguo 26-01-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Busca "EnditAll" por google, es un programa que hace exactamente eso y ofrece el código fuente.

Eso sí, el código es más raro que el escrito por cHackAll .

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #19  
Antiguo 26-01-2008
alquimista alquimista is offline
Miembro
 
Registrado: ene 2008
Posts: 203
Poder: 17
alquimista Va por buen camino
Me he rendido temporalmente, ya que dispongo de muy poco time para la app.

El problema solo lo tengo en usuarios limitados.
Voy a explicarlo con más detalles para que comprendáis mi problema.
Perdonad si me repito en alguna cosa.
Ya que en mi programa deshabilito ctr+alt+supr con lo del registro y cuando salgo de programa (al apagar Windows) vuelvo a habilitar ...
Esto va que ni pintado en Administrador. Pero como el user limitado no permite escribir en esa clave resulta que si que pueden ejecutar el admin de tareas y aparte no puedo grabar tampoco los fichero de log que tiene mi app, ni tampoco me permitiría actualizar la app desde user limitado.
El programa hace lo que tiene que hacer (matar procesos de aplicaciones en lista negra), pero claro si resulta que el user limitado puede matar el proceso la hemos fastidiado.

Como dije hay muchos Pcs con Winxp y una media de 10 user (variados admin y limitados).
La idea era crear en todos los usuarios una cuenta fija de admin para utilizar procedimientos de "run as" pero no estoy muy puesto y al intentallo con el Ceate..LogonW me ha pegado una peazo excepción, aparte de no saber que poner en el parámetro domain (puse el nombre de la máquina) ya que no estan en dominio los pcs.
He probado lo de los permisos del registro. pero no me funciona bien. Toqué el usuario restringido por si era general para todos los usuarios limitados.

El programa lo instalo con el NSIS (Instalador Nullsoft) y graba la app en C:\Windows\app\ desde una cuenta de Admin.

Espero haber aclarado un poco el problema.

Gracias
Responder Con Cita
  #20  
Antiguo 26-01-2008
alquimista alquimista is offline
Miembro
 
Registrado: ene 2008
Posts: 203
Poder: 17
alquimista Va por buen camino
Smile

Lo de Enditall lo he visto y ya no está disponible de forma gratuita.
Pero yo el problema de matar procesos no lo tengo. El programa mata procesos de forma automática y detecta grabaciones de archivos desde un disco al disco duro. Si dichos programas o archivos están en la lista los mata o los borra grabando en un log todo lo que ocurra. Esto está operativo y funciona. Se arranca al inicio de Windows y permite apagar la máquina.

Lo que me importa es la seguridad para evitar que borren la app o el proceso de la app. Desde Admin funcionan las medidad del Ctrl+Alt.. y la app esta protegida por una pass cifrada (guardada en el registro de Win) tanto para entrar como para salir (se accede solo en la tray windos), Se oculta de la barra de tareas y en taskmgr en la pestaña aplicaciones.
El primer problema que me encontre es que al desactivar Ctrl+... no podia ni siguiera reiniciar la maquina. Esto lo solucioné. Pero me sigue quedando el problema de los user limitados que no dejan escribir en HKCU\,,,\policies\system y no puedo deshabilitar ctrl+...

Perdón si me enrollo pero es para intentar dejar las cosas más claras.

salu2
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
como grabar todos los sonidos que reproduce windows gulder Windows 5 22-01-2011 02:16:08
Grabar datos definodos por el usuario en B.D frankmch Conexión con bases de datos 8 05-12-2007 18:46:58
Como modificar el registro de windows xp mediante delphi 7 kurono Varios 11 05-11-2007 15:24:24
Como averiguar el usuario de windows Telemaco PHP 8 26-07-2004 10:15:10
Como modificar el Registro de Windows Mariana Varios 3 08-10-2003 18:20:14


La franja horaria es GMT +2. Ahora son las 15:22:22.


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