Уважаемые, проблема. Есть структура: Код (Text): typedef struct _CLIENT_ID { PVOID UniqueProcess; PVOID UniqueThread; } CLIENT_ID, *PCLIENT_ID; Есть функция проверки ИД процесса-хозяина потока: Код (Text): NTSTATUS NewNtTerminateThread ( IN HANDLE ThreadHandle, IN NTSTATUS ExitStatus ) { PVOID ProcessId; THREAD_BASIC_INFORMATION threadbuff; NtQueryInformationThread(ThreadHandle,0,&threadbuff,sizeof(THREAD_BASIC_INFORMATION),0); ProcessId=threadbuff.ClientId.UniqueProcess; }; В чем проблема:мне нужно узнать ИД процесса (к примеру, 443). Указатель на ИД лежит в UniqueProcess. Как мне найти само значение, на которое ссылается указатель? Пытался делать так: Код (Text): ULONG id=*ProcessId; Не то.
нет... там лежит PID... http://undocumented.ntinternals.net/UserMode/Structures/THREAD_BASIC_INFORMATION.html ЗЫ PID - это ИД процесса в твоей терминологии... ЗЗЫ с чего ты взял вообще, что это - указатель?
Вернее, как. Вы путаетесь. Есть структура THREAD_BASIC_INFORMATION. В ней-структура ClientId. А вот в самой клиентИД есть два поля:UniqueProcess+UniqueThread. Так вот, UniqueProcess-указатель на ИД процесса, разве нет? Как тогда понимать PVOID?
я путаюсь?))) выведи значение этого "указателя" и посмотри равно ли оно значению идентификатору потока, или является указателем на него... я тебе в хедере напишу (для 32-битной ос): Код (Text): typedef struct _CLIENT_ID { DWORD UniqueProcess; DWORD UniqueThread; } CLIENT_ID, *PCLIENT_ID; тебе от этого будет легче? для x86 - это 32-битное число, для x64 - это 64-битное число, как и тип PVOID... так что все правильно... если хочешь обращаться с ним как с указателем, делай это так: Код (Text): ULONG id=*(ULONG*)ProcessId; и приятных бсодов тебе)))
Ладно, простите, я путаюсь) А БСОДы уже надоели. Так как правильно? ProcessId=threadbuff.ClientId.UniqueProcess; Так, что ли?