PDA

Ver la Versión Completa : Permisos de Administrador Para Dehabilitar Control + Alt + Suprimir


johnyague
19-09-2006, 23:16:00
Hola a Todos

Antes de hacer esta pregunta me base en lo siguiente para deshabilitar el COntrol + Alt +Suprimir, encontrada en este hilo (http://www.clubdelphi.com/foros/showthread.php?t=8589&highlight=DisableTaskMgr), como dicen aqui :D

procedure TForm1.Button1Click(Sender: TObject);
procedure DisableTaskMgr(bTF: Boolean);
var reg: TRegistry;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_CURRENT_USER;

reg.OpenKey('Software', True);
reg.OpenKey('Microsoft', True);
reg.OpenKey('Windows', True);
reg.OpenKey('CurrentVersion', True);
reg.OpenKey('Policies', True);
reg.OpenKey('System', True);
if bTF = True then
begin
reg.WriteString('DisableTaskMgr', '1');
end
else if bTF = False then
begin
reg.DeleteValue('DisableTaskMgr');
end;
reg.CloseKey;
end;
begin
//Desabilitamos el Ctrl-Alt-Del (Con False vuelve a estar habilitado)
DisableTaskMgr (True);
end;


Esta Funciona de maravilla pero solo cuando tengo permisos de adminsitrador :( y esta aplicacion esta corriendo bajo un usuario restringido de Dominio.

Revisando la pagina encontre, en este hilo (http://www.clubdelphi.com/foros/showthread.php?t=30396&highlight=Aplicacion+Administrador)

var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; begin FillChar (StartupInfo, SizeOf(StartupInfo), #0); StartupInfo.cb := SizeOf(StartupInfo); Win32Check( CreateProcessWithLogonW( StringToOleStr('UsuarioConPermisos'),StringToOleStr ('Dominio'), StringToOleStr('Password'),0, StringToOleStr('Exe'), nil, 0, nil, StringToOleStr('DirectorioTrabajo'), StartupInfo, ProcessInfo ) ); end;
[/delphi]


Pero no he podido, alguien me puede explicar o dar otra solucion...


De Antemano Muchas Gracias... :)

mahlon
20-09-2006, 00:32:47
Hola a Todos

Antes de hacer esta pregunta me base en lo siguiente para deshabilitar el COntrol + Alt +Suprimir, encontrada en este hilo (http://www.clubdelphi.com/foros/showthread.php?t=8589&highlight=DisableTaskMgr), como dicen aqui :D


Código Delphi [-] (http://clubdelphi.com/foros/#)procedure TForm1.Button1Click(Sender: TObject);
procedure DisableTaskMgr(bTF: Boolean);
var reg: TRegistry;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_CURRENT_USER;

reg.OpenKey('Software', True);
reg.OpenKey('Microsoft', True);
reg.OpenKey('Windows', True);
reg.OpenKey('CurrentVersion', True);
reg.OpenKey('Policies', True);
reg.OpenKey('System', True);
if bTF = True then
begin
reg.WriteString('DisableTaskMgr', '1');
end
else if bTF = False then
begin
reg.DeleteValue('DisableTaskMgr');
end;
reg.CloseKey;
end;
begin
//Desabilitamos el Ctrl-Alt-Del (Con False vuelve a estar habilitado)
DisableTaskMgr (True);
end;





Esta Funciona de maravilla pero solo cuando tengo permisos de adminsitrador :( y esta aplicacion esta corriendo bajo un usuario restringido de Dominio.

Revisando la pagina encontre, en este hilo (http://www.clubdelphi.com/foros/showthread.php?t=30396&highlight=Aplicacion+Administrador)

var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; begin FillChar (StartupInfo, SizeOf(StartupInfo), #0); StartupInfo.cb := SizeOf(StartupInfo); Win32Check( CreateProcessWithLogonW( StringToOleStr('UsuarioConPermisos'),StringToOleStr ('Dominio'), StringToOleStr('Password'),0, StringToOleStr('Exe'), nil, 0, nil, StringToOleStr('DirectorioTrabajo'), StartupInfo, ProcessInfo ) ); end;
[/delphi]


Pero no he podido, alguien me puede explicar o dar otra solucion...


De Antemano Muchas Gracias... :)



reviso tu post y el codigo pero no son iguales a los q estan en el hilo anterior o trataste de dar una solucion mejor?......

de cualquier manera .. has intentado deshabilitar los tres botones utilizando el codigo ASCII?

jachguate
20-09-2006, 01:46:39
Una solución es conectarte a la máquina como administrador y cambiar los permisos del registro para que el susodicho usuario (o todos los no-administradores) puedan cambiar el valor de la llave que te interesa.

Hasta luego.

;)

johnyague
20-09-2006, 06:54:51
Segui haciendo pruebas con:


Código Delphi [-] (http://www.clubdelphi.com/foros/#)
procedure TForm1.Button1Click(Sender: TObject);
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
FillChar (StartupInfo, SizeOf(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
Win32Check( CreateProcessWithLogonW( StringToOleStr('UsuarioConPermisos'),StringToOleStr ('Dominio'),
StringToOleStr('Password'),0, StringToOleStr('Exe'), nil, 0, nil, StringToOleStr('DirectorioTrabajo'),
StartupInfo, ProcessInfo ) );
end;





Pero siendoles sincero no se como usarlo luego de hacer este procedimiento ya todo procedimiento que realice tiene permisos de administrador?

Cuando compilo el codigo me sale:

[Warning] Unit1.pas(33): Symbol 'Win32Check' is specific to a platform
[Error] Unit1.pas(33): Undeclared identifier: 'CreateProcessWithLogonW'
[Fatal Error] Prueb.dpr(5): Could not compile used unit 'Unit1.pas'

Creeria que me hace falta:


Código Delphi [-] (http://www.clubdelphi.com/foros/#)
function CreateProcessWithLogon; external 'advapi32.dll' name 'CreateProcessWithLogonW';





Pero donde lo coloco...:( mejor dicho me queda asi y no funciona


Código Delphi [-] (http://www.clubdelphi.com/foros/#)

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function CreateProcessWithLogon; external 'advapi32.dll' name 'CreateProcessWithLogonW';
procedure TForm1.Button1Click(Sender: TObject);
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
FillChar (StartupInfo, SizeOf(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
Win32Check( CreateProcessWithLogonW( StringToOleStr('UsuarioConPermisos'),StringToOleStr ('Dominio'),
StringToOleStr('Password'),0, StringToOleStr('Exe'), nil, 0, nil, StringToOleStr('DirectorioTrabajo'),
StartupInfo, ProcessInfo ) );
end;
end.







Que hago...????

johnyague
20-09-2006, 07:15:22
Una solución es conectarte a la máquina como administrador y cambiar los permisos del registro para que el susodicho usuario (o todos los no-administradores) puedan cambiar el valor de la llave que te interesa.

Hasta luego.

;)

Dispulpa :confused: pero me podriad hechar una mano la verdad no soy muy ducho en esto de programar solo me acompaña un libreo de Delhi 4 en 1o minutos y el resto leyendo de ejemplo en Internet.

johnyague
20-09-2006, 07:17:09
reviso tu post y el codigo pero no son iguales a los q estan en el hilo anterior o trataste de dar una solucion mejor?......

de cualquier manera .. has intentado deshabilitar los tres botones utilizando el codigo ASCII?

La verdad no he podido darle una solucion mejor :( y lo que mensionas del Codigo ASCII tampoco lo he probado me podrias dar un ejemplo.

De antemano Gracias...

jachguate
20-09-2006, 15:39:50
Dispulpa :confused: pero me podriad hechar una mano la verdad no soy muy ducho en esto de programar solo me acompaña un libreo de Delhi 4 en 1o minutos y el resto leyendo de ejemplo en Internet.

Pues de lo que yo hablo no tiene que ver con programar, sino con cambiar los permisos de acceso al registro, que bien podrías hacerlo programáticamente o bien con el propio editor del registro del sistema (regedit), siempre que estes conectado como administrador, y seleccionando la opción "permisos" en el menú contextual de la llave que te interesa. Una vez hayas cambiado los permisos, el usuario no-administrador podrá cambiar valores en la llave con el algoritmo que ya tenías.

Hasta luego.

;)

roman
20-09-2006, 17:26:06
conectado como administrador, y seleccionando la opción "permisos" en el menú contextual de la llave que te interesa.


¡Vaya! Lo que es no ser administrador. No conocía esta opción a pesar de haber abierto treinta y cinco mil quinientas setenta y tres veces el RegEdit.

Gracias Juan Antonio, ahora sé algo más.

// Saludos

jachguate
20-09-2006, 18:00:13
a pesar de haber abierto treinta y cinco mil quinientas setenta y tres veces el RegEdit.
:eek: ¡sopas! :eek:

Suponiendo exageradamente que, sin ser administrador, abrís el regedit en promedio 1 vez por día (yo no lo hago mas de un par de veces al mes), podemos deducir que tenes unos 97 años y medio laborando en la plataforma windows.. :rolleyes:

Si yo decía que vos venías del futuro... como el invento ese del RegEdit tuvo que ser por allá por 1994, mínimo vos venis del 2091!!!!! :p

No seas egoista... contanos, ¿que tan lejos ha llegado la informática en aquellos tiempos? ¿sigue existiendo delphi? ¿turbo?

:D:D:D:D

johnyague
20-09-2006, 22:39:51
Pues de lo que yo hablo no tiene que ver con programar, sino con cambiar los permisos de acceso al registro, que bien podrías hacerlo programáticamente o bien con el propio editor del registro del sistema (regedit), siempre que estes conectado como administrador, y seleccionando la opción "permisos" en el menú contextual de la llave que te interesa. Una vez hayas cambiado los permisos, el usuario no-administrador podrá cambiar valores en la llave con el algoritmo que ya tenías.

Hasta luego.

;)

:eek: Compañero de respeto no tenia ni medio idea que esto se podia hacer, desde luego funciona y bien.

Agradezco mucho tu colaboración. :D

:p Aprovecho... los cambios que realizo en el registro solo los toma cuando reinicio la maquina, hay alguna forma que hacer como un " F5 " para recargar la informacion del mismo...