
Originally Posted by
pceumel
0o why not hooking TerminateThread and returning true xD ?
hooking NtTerminateThread looks like going to make better results
you will need to use NtQueryInformationThread to check the thread id..
http://msdn.microsof*****m/en-us/libr...(v=vs.85).aspx
some useful shit:
Code:
typedef LONG NTSTATUS, CLIENT_ID, KAFFINITY, KPRIORITY;
Code:
typedef enum _THREADINFOCLASS {
ThreadBasicInformation,
ThreadTimes,
ThreadPriority,
ThreadBasePriority,
ThreadAffinityMask,
ThreadImpersonationToken,
ThreadDescriptorTableEntry,
ThreadEnableAlignmentFaultFixup,
ThreadEventPair,
ThreadQuerySetWin32StartAddress,
ThreadZeroTlsCell,
ThreadPerformanceCount,
ThreadAmILastThread,
ThreadIdealProcessor,
ThreadPriorityBoost,
ThreadSetTlsArrayAddress,
ThreadIsIoPending,
ThreadHideFromDebugger
} THREADINFOCLASS, *PTHREADINFOCLASS;
Code:
typedef struct _THREAD_BASIC_INFORMATION {
NTSTATUS ExitStatus;
PVOID TebBaseAddress;
CLIENT_ID ClientId;
KAFFINITY AffinityMask;
KPRIORITY Priority;
KPRIORITY BasePriority;
Code:
NTSTATUS WINAPI NtQueryInformationThread(
_In_ HANDLE ThreadHandle,
_In_ THREADINFOCLASS ThreadInformationClass,
_Inout_ PVOID ThreadInformation,
_In_ ULONG ThreadInformationLength,
_Out_opt_ PULONG ReturnLength
)
{
typedef NTSTATUS (WINAPI* __NtQueryInformationThread)(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
static __NtQueryInformationThread _NtQueryInformationThread = NULL;
if (!_NtQueryInformationThread)
{
HMODULE NtDll = LoadLibrary(TEXT("NTDLL.DLL"));
if (NtDll)
{
_NtQueryInformationThread = (__NtQueryInformationThread)GetProcAddress(NtDll, "NtQueryInformationThread");
if (!_NtQueryInformationThread) return 0;
}
}
return _NtQueryInformationThread(ThreadHandle, ThreadInformationClass, ThreadInformation, ThreadInformationLength, ReturnLength);
}