Pedir autorización de administrador de windows

Pedir autorización de administrador de windows

Postby quique » Sun Apr 14, 2013 3:38 am

¿Que debo hacer para que un programa que no se está ejecutando como administrador pida la autorización para poder modificar el registro de windows?
Saludos
Quique
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

Re: Pedir autorización de administrador de windows

Postby quique » Wed Apr 17, 2013 12:50 am

¿entonces no se puede con fivewin?
Saludos
Quique
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

Re: Pedir autorización de administrador de windows

Postby Antonio Linares » Wed Apr 17, 2013 6:51 am

Quique,

Aqui parece estar la documentación necesaria de Windows:
http://msdn.microsoft.com/en-us/library/aa376389%28VS.85%29.aspx

Code: Select all  Expand view
BOOL IsUserAdmin(VOID)
/*++
Routine Description: This routine returns TRUE if the caller's
process is a member of the Administrators local group. Caller is NOT
expected to be impersonating anyone and is expected to be able to
open its own process and process token.
Arguments: None.
Return Value:
   TRUE - Caller has Administrators local group.
   FALSE - Caller does not have Administrators local group. --
*/

{
BOOL b;
SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
PSID AdministratorsGroup;
b = AllocateAndInitializeSid(
    &NtAuthority,
    2,
    SECURITY_BUILTIN_DOMAIN_RID,
    DOMAIN_ALIAS_RID_ADMINS,
    0, 0, 0, 0, 0, 0,
    &AdministratorsGroup);
if(b)
{
    if (!CheckTokenMembership( NULL, AdministratorsGroup, &b))
    {
         b = FALSE;
    }
    FreeSid(AdministratorsGroup);
}

return(b);
}
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41937
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Pedir autorización de administrador de windows

Postby quique » Wed Apr 17, 2013 6:40 pm

Disculpa Antonio, pero mi ignorancia de C es mayor de lo que cualquiera puede imaginar, pero se me hizo facil hacer lo siguiente:

Pegarla debajo de otra función que también tengo en C en el mismo programa cambiando la primera lína y agregando la linea hb_retc( b ); casi al final

Code: Select all  Expand view

//BOOL IsUserAdmin(VOID)
HB_FUNC( IsUserAdmin )
/*++
Routine Description: This routine returns TRUE if the caller's
process is a member of the Administrators local group. Caller is NOT
expected to be impersonating anyone and is expected to be able to
open its own process and process token.
Arguments: None.
Return Value:
   TRUE - Caller has Administrators local group.
   FALSE - Caller does not have Administrators local group. --
*/

{
BOOL b;
SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
PSID AdministratorsGroup;
b = AllocateAndInitializeSid(
    &NtAuthority,
    2,
    SECURITY_BUILTIN_DOMAIN_RID,
    DOMAIN_ALIAS_RID_ADMINS,
    0, 0, 0, 0, 0, 0,
    &AdministratorsGroup);
if(b)
{
    if (!CheckTokenMembership( NULL, AdministratorsGroup, &b))
    {
         b = FALSE;
    }
    FreeSid(AdministratorsGroup);
}

hb_retl( b );
return(b);
}
 


y no compiló :(

Code: Select all  Expand view

Warning W8061 ..\\fuentes\\main.prg 583: Initialization is only partially bracketed in function HB_FUN_IsUserAdmin
Warning W8081 ..\\fuentes\\main.prg 602: void functions may not return a value in function HB_FUN_IsUserAdmin

Error: Unresolved external '_HB_FUN_ISUSERADMIN' referenced from D:\QUIQUESOFT\IDE\.HBMK\WIN\BCC\MAIN.OBJ
 


Pero de cualquier manera, no estoy seguro que esa sea la respuesta, porque lo que necesito es que el programa pida la autorización de administrador como lo hace cualquier programa de instalación, aunque en este caso no es instalación, únicamente es para escribir en el registro de windows, y según entiendo, lo único que hace esta función es devolver si el usuario es administrador.
Saludos
Quique
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 40 guests