информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Все любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





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

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

Но мне казалось HANDLE, о котором идёт речь - это именно хендел в адресном пространстве процесса, в котором и нужно получить ID. Так что всё должно работать.
Только вот что это за NtQueryInformationThread?
Я думал имеется ввиду пользовательский режим.
<programming>
[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-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach