информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыПортрет посетителяСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Google заблокировала 2 с лишним... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[win32] можно ли зная handle для нити чужого процесса получить ее id 11.08.02 23:43  
Автор: Xan Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Чтобы попытаться отослать PostThreadMessage например.
[win32] можно ли зная handle для нити чужого процесса получить ее id 12.08.02 23:21  
Автор: ih8u <i hate you> Статус: Member
<"чистая" ссылка>
можно,
перебирай все процессы через PROCESSENTRY32
и когда твой Handle будет равен найденному, вытаскивай id из этой структуры
[win32] можно ли зная handle для нити чужого процесса получить ее id 13.08.02 01:29  
Автор: Biasha <Бяша> Статус: Member
<"чистая" ссылка>
> можно,
> перебирай все процессы через PROCESSENTRY32
> и когда твой Handle будет равен найденному, вытаскивай id
> из этой структуры

Покажи мне найденный

typedef struct tagPROCESSENTRY32 { 
  DWORD dwSize; 
  DWORD cntUsage; 
  DWORD th32ProcessID; 
  ULONG_PTR th32DefaultHeapID; 
  DWORD th32ModuleID; 
  DWORD cntThreads; 
  DWORD th32ParentProcessID; 
  LONG  pcPriClassBase; 
  DWORD dwFlags; 
  TCHAR szExeFile[MAX_PATH]; 
} PROCESSENTRY32; 
typedef PROCESSENTRY32 *PPROCESSENTRY32; 

---
Кроме того, идея не верна в корне - может быть два разных хендела одного и того же об'єкта.
[win32] можно ли зная handle для нити чужого процесса получить ее id 12.08.02 04:39  
Автор: beetle <beetle> Статус: Member
Отредактировано 12.08.02 04:44  Количество правок: 1
<"чистая" ссылка>
NtQueryInformationThread ( IN HANDLE ThreadHandle,//даешь сюда свой хендл
IN THREADINFOCLASS tic,//тип нужной инфы
OUT PVOID Info,//возвращаемая инфа
IN ULONG ThreadInfoLength,//размер передаваемого буфера
OUT PULONG Returnlength OPTIONAL);
вот перечесление,єлементі которого задают класс инфы.который можно запросить у NtQueryInformationThread :
typedef enum _THREADINFOCLASS {
ThreadBasicInformation,
ThreadTimes,
ThreadPriority,
ThreadBasePriority,
ThreadAffinityMask,
ThreadImpersonationToken,
ThreadDescriptorTableEntry,
ThreadEnableAlignmentFaultFixup,
ThreadEventPair_Reusable,
ThreadQuerySetWin32StartAddress,
ThreadZeroTlsCell,
ThreadPerformanceCount,
ThreadAmILastThread,
ThreadIdealProcessor,
ThreadPriorityBoost,
ThreadSetTlsArrayAddress,
ThreadIsIoPending,
ThreadHideFromDebugger,
MaxThreadInfoClass
} THREADINFOCLASS;
тебе достаточно ThreadBasicInformation
получишь структкру на выходе
THREAD_BASIC_INFORMATION
typedef struct _THREAD_BASIC_INFORMATION {
NTSTATUS ExitStatus;
PTEB TebBaseAddress;
CLIENT_ID ClientID;
KAFFINITY AffinityMask;
KPRIORITY BasePriority;
KPRIORITY Priority;
} THREAD_BASIC_INFORMATION;
ну а далее структура CLIENT_ID содержит искомую инфу:
typedef struct _CLIENT_ID {
HANDLE UniqueProcess;//идентификатор процесса
HANDLE UniqueThread;//идентификатор потока
} CLIENT_ID;
typedef CLIENT_ID *PCLIENT_ID;
[win32] можно ли зная handle для нити чужого процесса получить ее id 12.08.02 11:56  
Автор: cb <cb> Статус: Member
<"чистая" ссылка>
> NtQueryInformationThread ( IN HANDLE ThreadHandle,//даешь
> сюда свой хендл
> IN THREADINFOCLASS tic,//тип нужной инфы
> OUT PVOID Info,//возвращаемая инфа
> IN ULONG ThreadInfoLength,//размер передаваемого буфера
> OUT PULONG Returnlength OPTIONAL);

я уже изрядно подзабыл все это - но такой вариант на мой взгляд не прокатит - HANDLE воспримется в контексте того процесса откуда будет вызвана ф-я NtQueryInformationThread соответственно ее надо вызывать из того процесса кому принадлежит этот HANDLE.

cb.
[win32] можно ли зная handle для нити чужого процесса получить ее id 13.08.02 01:42  
Автор: Biasha <Бяша> Статус: Member
<"чистая" ссылка>
> я уже изрядно подзабыл все это - но такой вариант на мой
> взгляд не прокатит - HANDLE воспримется в контексте того
> процесса откуда будет вызвана ф-я NtQueryInformationThread
> соответственно ее надо вызывать из того процесса кому
> принадлежит этот HANDLE.

Так оно и есть. HANDLE - индекс в некоторой таблице, которая хранится в адресном пространстве процесса. Для каждого процесса таблица своя. А псевдо-хендел, это вообще совсем не хендел, а оптимизация.

Но мне казалось HANDLE, о котором идёт речь - это именно хендел в адресном пространстве процесса, в котором и нужно получить ID. Так что всё должно работать.
Только вот что это за NtQueryInformationThread?
Я думал имеется ввиду пользовательский режим.
[win32] можно ли зная handle для нити чужого процесса получить ее id 13.08.02 05:43  
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
> Так оно и есть. HANDLE - индекс в некоторой таблице,
> которая хранится в адресном пространстве процесса. Для
> каждого процесса таблица своя. А псевдо-хендел, это вообще
> совсем не хендел, а оптимизация.
> Но мне казалось HANDLE, о котором идёт речь - это именно
> хендел в адресном пространстве процесса, в котором и нужно
> получить ID. Так что всё должно работать.

описатель (он же HANDLE ) - это индекс определенной записи в таблице описателей объектов ядра некоторого процесса.Существуют механизмы совместного использования объектов ядра несколькими РАЗНЫМИ процессами.В таком случае запись из таблицы описателей объктов одного процесса копируется в соответствующую таблицу друго процесса.При этом значения хендлов могут различаться.В данном случае если есть описатель объекта ядра "поток", то он будет валидным для потока в другом процессе,если хендл получен с помощью механизма дублирования хендлов к примеру либо иного корректного механизма. Потому ентот хендл может быть абсолютно нормально использован к примеру для получения информации о потоке,на объект которого он указывает.

> Только вот что это за NtQueryInformationThread?
> Я думал имеется ввиду пользовательский режим.
функция из библиотеки ntdll.dll- ядра системы.Функционирует в пользовательском режиме.А вот из нее уже при трассировке попадаешь в нулевое кольцо
[Win32] ежели это псевдохендл,тогда согласен. А ежели нормальный, то не вижу повода. 12.08.02 17:39  
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
[Win32] ежели это псевдохендл,тогда согласен. А ежели нормальный, то не вижу повода. 12.08.02 18:02  
Автор: cb <cb> Статус: Member
<"чистая" ссылка>
а что есть "нормальный" HANDLE, если я ничего не путаю то HANDLE всегда принадлежит процессу его создавшему, и не важно в UserMode это делается или в KernelMode - контекст процесса есть всегда. Во всяком случае в ядре при открытии TCP соединения мне не удавалось использовать HANDLE открытый в контексте SYSTEM в произвольном процессе, пришлось всю работу затолкать в SystemThread.

cb.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach