и в результате
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
В файле и описание самой функции
Module Name: ntifs.h, release 53.
NTKERNELAPI
NTSTATUS
SeQueryInformationToken (
IN PACCESS_TOKEN Token,
IN TOKEN_INFORMATION_CLASS TokenInformationClass,
OUT PVOID *TokenInformation
);
[Win32] Мне нужен токен пользователя, от имени которого запущен процесс, а взять его можно из ClientToken30.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 Статус: Незарегистрированный пользователь