Pedir autorización de administrador de windows

Post Reply
User avatar
quique
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am
Contact:

Pedir autorización de administrador de windows

Post by quique »

¿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
Contact:

Re: Pedir autorización de administrador de windows

Post by quique »

¿entonces no se puede con fivewin?
Saludos
Quique
User avatar
Antonio Linares
Site Admin
Posts: 42520
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 75 times
Contact:

Re: Pedir autorización de administrador de windows

Post by Antonio Linares »

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

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
quique
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am
Contact:

Re: Pedir autorización de administrador de windows

Post by quique »

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


//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


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
Post Reply