· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Как программе узнать права пользователя?

Посл.отвђт Сообщенiе


Дата: Окт 28, 2003 10:48:21

Как софтина может определить под администратором ее загрузили или нет? Чего-то в API не нашел.....


Дата: Окт 28, 2003 11:18:17

GetTokenInformation
и там смотри - есть ли группа админов у тебя в токене.


Дата: Окт 29, 2003 05:23:51

rst
ага, спасибо, примеры нашел и скачал...


Дата: Окт 29, 2003 18:12:45

Еще можно узнать админ или нет:

; Open a handle to the SC Manager database
invoke OpenSCManager, NULL, NULL, SC_MANAGER_ALL_ACCESS
or eax,eax
jnz admin

;... не администратор

jmp short next

admin:

;... у текущего пользователя права администратора

invoke CloseServiceHandle, eax

next:
...


Дата: Окт 30, 2003 14:24:05 · Поправил: Four-F

В MSDN в описании функции CheckTokenMembership есть пример IsUserAdmin. На асме так:
.386
.model flat, stdcall
option casemap:none

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
;                                  I N C L U D E   F I L E S                                        
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

include \masm32\include\windows.inc

include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\advapi32.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\advapi32.lib

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
;                                  R E A D O N L Y  D A T A                                         
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

.const

NtAuthority db 0    ; SID_IDENTIFIER_AUTHORITY  <0,0,0,0,0,5>
            db 0
            db 0
            db 0
            db 0
            db 5

szCaption       db "Is User Admin?", 0
szIsAdmin       db "YES. The caller's process is a member of the Administrators local group.", 0
szIsNotAdmin    db "NO. The caller's process is NOT a member of the Administrators local group.", 0

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
;                                       C O D E                                                     
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

.code

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
;                                         IsUserAdmin                                               
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

IsUserAdmin proc

; 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. 
;
; Return Value: 
;    TRUE - Caller has Administrators local group. 
;    FALSE - Caller does not have Administrators local group. --
 
local IsMember:BOOL
local psidAdministratorsGroup:PTR SID

    and IsMember, FALSE

    invoke AllocateAndInitializeSid, addr NtAuthority, 2, \
                    SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, \
                    0, 0, 0, 0, 0, 0, addr psidAdministratorsGroup
    .if eax != 0
        invoke CheckTokenMembership, NULL, psidAdministratorsGroup, addr IsMember
        .if eax == 0
            and IsMember, FALSE             ; for sure
        .endif
        invoke FreeSid, psidAdministratorsGroup
    .endif

    mov eax, IsMember
    ret

IsUserAdmin endp

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
;                                           start                                                   
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

start:

    invoke IsUserAdmin
    .if eax == TRUE
        lea eax, szIsAdmin
    .else
        lea eax, szIsNotAdmin   
    .endif
    invoke MessageBox, NULL, eax, offset szCaption, MB_ICONINFORMATION

    invoke ExitProcess, 0

end start


Дата: Окт 30, 2003 17:45:20

Можно ламерный вопросик, а существует ли понятие admin не admin под
9x виндами, или там все админы ;-) ??


Дата: Окт 30, 2003 18:19:26

Asterix
Там все юзвери, но с админскими правами :)


Дата: Окт 30, 2003 19:26:12

Asterix
ага и SCM API там нету ;-)


Дата: Окт 31, 2003 14:34:13

Four-F
Функция CheckTokenMembership существует только начиная с
Win2000. В NT4 ее нет. Поэтому правильнее будет получить
SID процесса и определить, входит ли туда группа админов.


Дата: Окт 31, 2003 15:43:13

Будем знать.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.082