Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Вот блин, а я тебе такую статейку в интерналсах отгрохал 08.01.03 13:59 Число просмотров: 1380
Автор: amirul <Serge> Статус: The Elderman
|
Только сейчас заметил что ее там нету.
Наверное нет глюканул или штрафанули меня втихую :-)), хотя в скрапе вроде нету.
Ладно попробую восстановить по памяти. (Повторно детально копаться и описывать все структуры в лом - если чего не хватит - пиши)
Есть функции
ZwOpenProcessToken opens the token of a process.
NTSYSAPI
NTSTATUS
NTAPI
ZwOpenProcessToken(
IN HANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
OUT PHANDLE TokenHandle
);
Parameters
ProcessHandle
A handle to a process object. The handle must grant PROCESS_QUERY_INFORMATION access.
DesiredAccess
Specifies the type of access that the caller requires to the token object. This parameter can be
zero, or any combination of the following flags:
TOKEN_ASSIGN_PRIMARY Can be assigned as primary token
TOKEN_DUPLICATE Can be duplicated
TOKEN_IMPERSONATE Can be assigned as impersonation token
TOKEN_QUERY Can be queried
TOKEN_QUERY_SOURCE Can be queried for source
TOKEN_ADJUST_PRIVILEGES Token privileges can be adjusted
TOKEN_ADJUST_GROUPS Token groups can be adjusted
TOKEN_ADJUST_DEFAULT Token default ACL and owner can be adjusted
TOKEN_ADJUST_SESSIONID Token session id can be adjusted
TOKEN_ALL_ACCESS All of the preceding +
STANDARD_RIGHTS_REQUIRED
TokenHandle
Points to a variable that will receive the token object handle if the call is successful.
Return Value
Returns STATUS_SUCCESS or an error status, such as STATUS_ACCESS_DENIED or
STATUS_INVALID_HANDLE.
И ZwOpenThreadToken opens the token of a thread.
NTSYSAPI
NTSTATUS
NTAPI
ZwOpenThreadToken(
IN HANDLE ThreadHandle,
IN ACCESS_MASK DesiredAccess,
IN BOOLEAN OpenAsSelf,
OUT PHANDLE TokenHandle
);
Parameters
ThreadHandle
A handle to a thread. The handle must grant THREAD_QUERY_INFORMATION access.
DesiredAccess
Specifies the type of access that the caller requires to the token object. This parameter can be
zero, or any combination of the following flags:
TOKEN_ASSIGN_PRIMARY Can be assigned as primary token
TOKEN_DUPLICATE Can be duplicated
TOKEN_IMPERSONATE Can be assigned as impersonation token
TOKEN_QUERY Can be queried
TOKEN_QUERY_SOURCE Can be queried for source
TOKEN_ADJUST_PRIVILEGES Token privileges can be adjusted
TOKEN_ADJUST_GROUPS Token groups can be adjusted
TOKEN_ADJUST_DEFAULT Token default ACL and owner can be adjusted
TOKEN_ADJUST_SESSIONID Token session id can be adjusted
TOKEN_ALL_ACCESS All of the preceding +
STANDARD_RIGHTS_REQUIRED
OpenAsSelf
A boolean specifying whether the security context of the process should be used to check the access
to the token object. If OpenAsSelf is false, the security context of the thread is used, which
may be an impersonation context.
TokenHandle
Points to a variable that will receive the token object handle if the call is successful.
Return Value
Returns STATUS_SUCCESS or an error status, such as STATUS_ACCESS_DENIED,
STATUS_INVALID_HANDLE, or STATUS_NO_TOKEN.
Related Win32 Functions
OpenThreadToken.
Remarks
OpenThreadToken exposes the full functionality of ZwOpenThreadToken.
TOKEN_ADJUST_SESSIONID is only valid in Windows 2000.
Хотя я бы советовал открывать именно ZwThreadToken, так как он может открыть и глобальный для процесса токен и имперсонированный токен для отдельно взятого потока. В качестве хендлов можешь передавать NtOpenProcess() и NtOpenThread() (есть в DDK).
С открытым токеном можно сделать следующее:
1) Закрыть ZwClose() или NtClose() :-))))
2) ZwQweryInformationToken()
ZwQueryInformationToken retrieves information about a token object.
NTSYSAPI
NTSTATUS
NTAPI
ZwQueryInformationToken(
IN HANDLE TokenHandle,
IN TOKEN_INFORMATION_CLASS TokenInformationClass,
OUT PVOID TokenInformation,
IN ULONG TokenInformationLength,
OUT PULONG ReturnLength
);
Parameters
TokenHandle
A handle to a token object. The handle must grant TOKEN_QUERY access for most information
classes. To query the token source TOKEN_QUERY_SOURCE access must be granted.
TokenInformationClass
Specifies the type of token information to be queried. The permitted values are drawn from the
enumeration TOKEN_INFORMATION_CLASS, described in the following section.
TokenInformation
Points to a caller-allocated buffer or variable that receives the requested token information.
TokenInformationLength
Specifies the size in bytes of TokenInformation, which the caller should set according to the
given TokenInformationClass.
ReturnLength
Points to a variable that receives the number of bytes actually returned to TokenInformation; if
TokenInformationLength is too small to contain the available data, ReturnLength points to the
number of bytes required for the available data.
Return Value
Returns STATUS_SUCCESS or an error status, such as STATUS_ACCESS_DENIED,
STATUS_INVALID_HANDLE, STATUS_INVALID_INFO_CLASS, or
STATUS_BUFFER_TOO_SMALL.
Related Win32 Functions
GetTokenInformation.
Windows NT/2000 Native API 168
Remarks
GetTokenInformation exposes the full functionality of ZwQueryInformationToken.
typedef enum _TOKEN_INFORMATION_CLASS {
TokenUser = 1, // 1 Y N
TokenGroups, // 2 Y N
TokenPrivileges, // 3 Y N
TokenOwner, // 4 Y Y
TokenPrimaryGroup, // 5 Y Y
TokenDefaultDacl, // 6 Y Y
Windows NT/2000 Native API 169
TokenSource, // 7 Y N
TokenType, // 8 Y N
TokenImpersonationLevel, // 9 Y N
TokenStatistics, // 10 Y N
TokenRestrictedSids, // 11 Y N
TokenSessionld // 12 Y Y
} TOKEN_INFORMATION_CLASS;
Все классы описывать не буду - опять таки в лом, здесь нужон TokenUser - инфа возвращается в следующей структуре
typedef struct _TOKEN_USER {
// Information Class 1
SID_AND_ATTRIBUTES User;
} TOKEN_USER, *PTOKEN_USER;
SID_AND_ATTRIBUTES - описан в winnt.h, тебе оттуда нужен SID.
Для kernel-mode имя юзера тебе не надо - не встречал ни одной фунции, работающей с ним - всем нужен только ACCESS_TOKEN. Хотя как-нить можно использовать имя только из user-mode (вывести где-нить на экран), а уж после того, как из дривера передан sid - его можно преобразовать в имя: LookupAccountSid() - описан в MSDN-е, находится в advapi32.dll
Бест регардс - если чего - пиши
|
|
|