Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | | | |
IRP приходит в контексте процесса/потока который сделал запрос 30.01.06 15:04 Число просмотров: 2309
Автор: Killer{R} <Dmitry> Статус: Elderman
|
> а не известно, как преобразовать PACCESS_TOKEN в HANDLE, > потому что кроме варинта доступа через > currentIrpStack->Parameters.Create.SecurityContext->A > ccessState->SubjectSecurityContext.ClientToken > ничего не описано > и описание вызова функции SeQueryInformationToken нигде не > удалось найти :( Потому ZwOpenProcess/ThreadToken на KeGetCurrentXxx должен дать тебе хэндл на нужный тебе токен более-менее документированным способом.
А по поводу SeQueryInformationToken:
SeQueryInformationToken (
IN PACCESS_TOKEN AccessToken,
IN TOKEN_INFORMATION_CLASS TokenInformationClass,
OUT PVOID *TokenInformation
)
/*++
Routine Description:
Retrieve information about a specified token.
Arguments:
TokenHandle - Provides a handle to the token to operate on.
TokenInformationClass - The token information class about which
to retrieve information.
TokenInformation - Receives a pointer to the requested information.
The actual structures returned are dependent upon the information
class requested, as defined in the TokenInformationClass parameter
description.
TokenInformation Format By Information Class:
TokenUser => TOKEN_USER data structure. TOKEN_QUERY
access is needed to retrieve this information about a
token.
TokenGroups => TOKEN_GROUPS data structure. TOKEN_QUERY
access is needed to retrieve this information about a
token.
TokenPrivileges => TOKEN_PRIVILEGES data structure.
TOKEN_QUERY access is needed to retrieve this information
about a token.
TokenOwner => TOKEN_OWNER data structure. TOKEN_QUERY
access is needed to retrieve this information about a
token.
TokenPrimaryGroup => TOKEN_PRIMARY_GROUP data structure.
TOKEN_QUERY access is needed to retrieve this information
about a token.
TokenDefaultDacl => TOKEN_DEFAULT_DACL data structure.
TOKEN_QUERY access is needed to retrieve this information
about a token.
TokenSource => TOKEN_SOURCE data structure.
TOKEN_QUERY_SOURCE access is needed to retrieve this
information about a token.
TokenType => TOKEN_TYPE data structure.
TOKEN_QUERY access is needed to retrieve this information
about a token.
TokenStatistics => TOKEN_STATISTICS data structure.
TOKEN_QUERY access is needed to retrieve this
information about a token.
Return Value:
STATUS_SUCCESS - Indicates the operation was successful.
ЗЫ можно еще подождать местных гуру кернел-мода.
|
<programming>
|
[win32] помогите понять почему zwqueryinformationtoken выдавёт ошибку status_invalid_handle 30.01.06 12:10
Автор: mmb Статус: Незарегистрированный пользователь
|
фрагмент кода:
PIO_STACK_LOCATION currentIrpStack;
HANDLE hTokenUser = NULL;
ULONG dwSizeOfToken = 0;
//
currentIrpStack = IoGetCurrentIrpStackLocation(Irp);
case IRP_MJ_CREATE:
if( currentIrpStack == NULL ) {
return ...;
}
hTokenUser = currentIrpStack->Parameters.Create.SecurityContext->AccessState->Subje ctSecurityContext.ClientToken;
if( hTokenUser == NULL ) {
return ...;
}
Status = ZwQueryInformationToken( hTokenUser, TokenUser, NULL, 0, &dwSizeOfToken);
и в результате
Status == STATUS_INVALID_HANDLE
В чём может быть дело?
|
|
А кто сказал что currentirpstack->parameters.create.securitycontext->accessstate->subje ctsecuritycontext.clienttoken - это handle? 30.01.06 13:14
Автор: Killer{R} <Dmitry> Статус: Elderman Отредактировано 30.01.06 13:19 Количество правок: 1
|
ИМХО там указатель на чтото типа
typedef struct _PROCESS_ACCESS_TOKEN {
//
// Handle to Primary token to assign to the process.
// TOKEN_ASSIGN_PRIMARY access to this token is needed.
//
HANDLE Token;
//
// Handle to the initial thread of the process.
// A process's access token can only be changed if the process has
// no threads or one thread. If the process has no threads, this
// field must be set to NULL. Otherwise, it must contain a handle
// open to the process's only thread. THREAD_QUERY_INFORMATION access
// is needed via this handle.
HANDLE Thread;
} PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
ЗЫ а почему не воспользоваться ZwOpenProcessToken/ZwOpenThreadToken?
|
| |
[win32] а кто сказал что currentirpstack->parameters.create.securitycontext->accessstate->subje ctsecuritycontext.clienttoken - это handle? 30.01.06 13:34
Автор: mmb Статус: Незарегистрированный пользователь
|
> ИМХО там указатель на чтото типа > typedef struct _PROCESS_ACCESS_TOKEN { > > // > // Handle to Primary token to assign to the process. > // TOKEN_ASSIGN_PRIMARY access to this token is needed. > // > > HANDLE Token; > > // > // Handle to the initial thread of the process. > // A process's access token can only be changed if the > process has > // no threads or one thread. If the process has no > threads, this > // field must be set to NULL. Otherwise, it must > contain a handle > // open to the process's only thread. > THREAD_QUERY_INFORMATION access > // is needed via this handle. > > HANDLE Thread; > > } PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN; > > > ЗЫ а почему не воспользоваться > ZwOpenProcessToken/ZwOpenThreadToken?
В файле дано описание структур
Module Name: ntddk.h
typedef struct _SECURITY_SUBJECT_CONTEXT {
PACCESS_TOKEN ClientToken;
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
PACCESS_TOKEN PrimaryToken;
PVOID ProcessAuditId;
} SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT;
typedef PVOID PACCESS_TOKEN; // winnt
В файле и описание самой функции
Module Name: ntifs.h, release 53.
NTKERNELAPI
NTSTATUS
SeQueryInformationToken (
IN PACCESS_TOKEN Token,
IN TOKEN_INFORMATION_CLASS TokenInformationClass,
OUT PVOID *TokenInformation
);
|
| | |
ZwQueryInformationToken!=SeQueryInformationToken 30.01.06 13:41
Автор: Killer{R} <Dmitry> Статус: Elderman
|
|
| | | |
[Win32] Мне нужен токен пользователя, от имени которого запущен процесс, а взять его можно из ClientToken 30.01.06 14:41
Автор: mmb Статус: Незарегистрированный пользователь
|
а не известно, как преобразовать PACCESS_TOKEN в HANDLE, потому что кроме варинта доступа через
currentIrpStack->Parameters.Create.SecurityContext->AccessState->SubjectSecurityContext.ClientToken
ничего не описано
и описание вызова функции SeQueryInformationToken нигде не удалось найти :(
|
| | | | |
[Win32] Чтобы получить хендл, объект надо открыть [upd] 01.02.06 13:27
Автор: amirul <Serge> Статус: The Elderman Отредактировано 01.02.06 13:30 Количество правок: 1
|
> а не известно, как преобразовать PACCESS_TOKEN в HANDLE,
В данном конкртеном случае нужна функция ObOpenObjectByPointer
---------------
Только как по мне резолвить имя доменного юзера не выходя из нулевого кольца - гиблое дело. Как получить имя локального пользователя, я уже писал, а в домене скорее всего придется слать CIFS/SMB пакеты. Тогда уж действительно проще будет в каком нибудь юзерском процессе создать свой поток или в юзерский поток вставить APC. Ну в крайнем случае остается вариант - держать выделенный процесс (например сервис) специально для общения со своим драйвером.
|
| | | | |
IRP приходит в контексте процесса/потока который сделал запрос 30.01.06 15:04
Автор: Killer{R} <Dmitry> Статус: Elderman
|
> а не известно, как преобразовать PACCESS_TOKEN в HANDLE, > потому что кроме варинта доступа через > currentIrpStack->Parameters.Create.SecurityContext->A > ccessState->SubjectSecurityContext.ClientToken > ничего не описано > и описание вызова функции SeQueryInformationToken нигде не > удалось найти :( Потому ZwOpenProcess/ThreadToken на KeGetCurrentXxx должен дать тебе хэндл на нужный тебе токен более-менее документированным способом.
А по поводу SeQueryInformationToken:
SeQueryInformationToken (
IN PACCESS_TOKEN AccessToken,
IN TOKEN_INFORMATION_CLASS TokenInformationClass,
OUT PVOID *TokenInformation
)
/*++
Routine Description:
Retrieve information about a specified token.
Arguments:
TokenHandle - Provides a handle to the token to operate on.
TokenInformationClass - The token information class about which
to retrieve information.
TokenInformation - Receives a pointer to the requested information.
The actual structures returned are dependent upon the information
class requested, as defined in the TokenInformationClass parameter
description.
TokenInformation Format By Information Class:
TokenUser => TOKEN_USER data structure. TOKEN_QUERY
access is needed to retrieve this information about a
token.
TokenGroups => TOKEN_GROUPS data structure. TOKEN_QUERY
access is needed to retrieve this information about a
token.
TokenPrivileges => TOKEN_PRIVILEGES data structure.
TOKEN_QUERY access is needed to retrieve this information
about a token.
TokenOwner => TOKEN_OWNER data structure. TOKEN_QUERY
access is needed to retrieve this information about a
token.
TokenPrimaryGroup => TOKEN_PRIMARY_GROUP data structure.
TOKEN_QUERY access is needed to retrieve this information
about a token.
TokenDefaultDacl => TOKEN_DEFAULT_DACL data structure.
TOKEN_QUERY access is needed to retrieve this information
about a token.
TokenSource => TOKEN_SOURCE data structure.
TOKEN_QUERY_SOURCE access is needed to retrieve this
information about a token.
TokenType => TOKEN_TYPE data structure.
TOKEN_QUERY access is needed to retrieve this information
about a token.
TokenStatistics => TOKEN_STATISTICS data structure.
TOKEN_QUERY access is needed to retrieve this
information about a token.
Return Value:
STATUS_SUCCESS - Indicates the operation was successful.
ЗЫ можно еще подождать местных гуру кернел-мода.
|
| | | | | |
[Win32] При локальной работе это бы подошло, но у меня работа на сервере :( 30.01.06 15:15
Автор: mmb Статус: Незарегистрированный пользователь
|
> Потому ZwOpenProcess/ThreadToken на KeGetCurrentXxx должен > дать тебе хэндл на нужный тебе токен более-менее > документированным способом.
При локальной работе это бы подошло, но у меня работа на сервере :(
|
| | | | | | |
[UPD]В смысле lanman сетевые клиенты? 30.01.06 15:44
Автор: Killer{R} <Dmitry> Статус: Elderman Отредактировано 31.01.06 13:19 Количество правок: 1
|
А они через impersonating работают и ZwOpenThreadToken вернет правильный токен если OpenAsSelf установить в тру
[UPD]
Сорри, OpenAsSelf надо FALSE
|
| | | | | | | |
[Win32] Надо проверить... 30.01.06 15:45
Автор: mmb Статус: Незарегистрированный пользователь
|
|
|
|