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 12-01-2007
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
Question Api CreateProcessAsUser

hola colegas del club, ante todo mis especiales saludos y un tremendo FELICIDADES por este nuevo año, y para iniciar con mis preguntaderas quisera saber si alguien me puede decir como trabajar con la API CreateProcessAsUser, si pueden y no es mucha molestia, me pueden mostrar algun ejemplito???

gracias antemano

salu2!!!
Responder Con Cita
  #2  
Antiguo 12-01-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Espero que te sea de utilidad:
Código Delphi [-]
procedure RunAs(ACommandLine, AUserName, ADomain, APassword: PAnsiChar);
var
  hToken: Cardinal;
  ProcessInfo: TProcessInformation;
  StartupInfo: TStartupInfo;

  function SetUserObjectFullAccess(hUserObject: THandle): Boolean;
  var
    Sd: PSecurity_Descriptor;
    Si: Security_Information;
  begin
    Sd := Ptr(LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH));
    InitializeSecurityDescriptor(Sd, SECURITY_DESCRIPTOR_REVISION);
    SetSecurityDescriptorDacl(Sd, True, nil, False);

    Si := DACL_SECURITY_INFORMATION;
    Result := SetUserObjectSecurity(hUserObject, Si, Sd);

    LocalFree(HLOCAL(Sd));
  end;
begin
  Win32Check(LogonUser(AUserName, ADomain, APassword, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hToken));
  try
    ImpersonateLoggedOnUser(hToken);
    try
      SetUserObjectFullAccess(GetThreadDesktop(GetCurrentThreadId));
      SetUserObjectFullAccess(GetProcessWindowStation);

      ZeroMemory(@StartupInfo, SizeOf(TStartupInfo));
      StartupInfo.cb := SizeOf(TStartupInfo);
      StartupInfo.wShowWindow := SW_SHOW;


      if not CreateProcessAsUser(hToken, nil, ACommandLine, nil, nil,
                         False, CREATE_NEW_CONSOLE or CREATE_NEW_PROCESS_GROUP,
                         nil, nil, StartupInfo, ProcessInfo) then
        RaiseLastOsError;
    finally
      RevertToSelf;
    end;
  finally
    CloseHandle(hToken);
  end;
end;

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 12-01-2007
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
hmmmmmmm!!!

no se si es problema de no entender los parámetros pero no me funciona,
mira el ejemplo dellamada que tomé:

RunAs('C:\WINDOWS\regedit.exe','Alberto',nil, 'nra885');

que crees???

gracias de antemano
Responder Con Cita
  #4  
Antiguo 12-01-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
¿Te produce algún error?.. ¿No hace nada?... ¿Que windows utilizas?...
Ese código yo lo utilizo en una aplicación mía, pero esta plagado de compilación condicional, así que lo limpié un poco.
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 12-01-2007
fdelamo fdelamo is offline
Miembro
 
Registrado: oct 2005
Ubicación: Sotoca de Tajo - Guadalajara (ESP)
Posts: 86
Poder: 19
fdelamo Va por buen camino
Yo eso lo usé hace algún tiempo (no tengo el código aquí), pero recuerdo que además el usuario debía tener dos permisos especiales (uno era asignar memoria para otro usuario y el otro no recuerdo), no se si irán por ahí los tiros

A ver si tengo un poco de tiempo y busco el código

Un saludo
Responder Con Cita
  #6  
Antiguo 12-01-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Bueno si.. es importante que el usuario tenga los permisos suficientes inlcusive los del file system. Por el ejemplo que da aeff no creo que venga por ahí el problema, pero no esta de mas aclararlo.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #7  
Antiguo 12-01-2007
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
Cool bueeeno

mira, en una de las líneas tu pones esto "RaiseLastOsError;", es ahí donde único me presenta errores, lo pongo en comentarios "//" y continuo con la ejecución del programa, y cuando hago la llamada a la función RunAS, no sucede nada, uso Windows XP

saludos!!!
Responder Con Cita
  #8  
Antiguo 12-01-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Te presenta errores de compilación o errores en ejecución???...
Si es errores en ejecución, para eso esta esa línea y si sería buenísimo que nos digas que error.
Si no compila, porque no encuentra esa función, posiblemente tienes una versión de Delphi antigua, cambia esa función por RaiseLastWin32Error.

Si quieres una mano, sería bueno un poco mas de empeño en tus respuestas!!!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #9  
Antiguo 15-01-2007
fdelamo fdelamo is offline
Miembro
 
Registrado: oct 2005
Ubicación: Sotoca de Tajo - Guadalajara (ESP)
Posts: 86
Poder: 19
fdelamo Va por buen camino
Al fin encontré el código. Te aseguro que funcionaba, pero usaba la función CreateProcAsUserEx de JEDI, de la forma
Código Delphi [-]
CreateProcAsUserEx('DOMINIO', 'USUARIO', 'PASSWORDDELUSUARIO',
    'miprograma.exe con sus parametros');

y los permisos que debe tener el usuario son:

Herramientas administrativas->Directiva de seguridad local->Directivas locales->Asignacion de derechos de usuarios
- Ajustar cuotas de memoria para un proceso y
- Reemplazar un testigo a nivel de proceso

Ten en cuenta que el segundo permiso no viene por defecto ni al administrador (por lo menos en mi instalación), así que habrá que ponerlos para cada usuario.

Espero que te sirva de algo

Un saludo
Responder Con Cita
  #10  
Antiguo 19-01-2007
SOAD_ SOAD_ is offline
Miembro
 
Registrado: ene 2007
Ubicación: sdfs
Posts: 13
Poder: 0
SOAD_ Va por buen camino
Espero q te sirva

hola:
Las funciones CreateProcessAsUser y CreateProcessAsUserEx sin dudas funcionan pero requieren una serie de privilegios q las hacen algo inconvenientes en algunos casos(por no decir la mayoria de los casos)....

Te recomiendo q uses CreateProcessWithLogon la cual se encuentra en una dll del sistema a partir de Win 2000, con la cual no es necesario q el usuario tenga ningun pivilegio fuera de los q tiene por defecto, aki un corto segmento de codigo:
Código:
function CreateProcessWithLogon; external advapi32 name 'CreateProcessWithLogonW';
 
info_ini.cb := SizeOf(TStartupInfo);
 
CreateProcessWithLogon( 'user@domain',
'',
'pass',
1, //cargar o no el profile del usuario
'iexplore.exe',
nil,
CREATE_DEFAULT_ERROR_MODE,
nil,
nil,
info_ini, //de tipo Tstartupinfo
process_info)// de tipo PROCESS_INFORMATION
El codigo no es nada completo por razones de tiempo pero espero q te fucione cualquier duda o error planteala aki para ver q se hace...

Por cierto soy nuevo aki en el Club espero poder ayudar en algo y lo mas importante aprender mucho....
Saludos SOAD
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


La franja horaria es GMT +2. Ahora son las 14:12:35.


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