mirror of
https://github.com/donnaskiez/ac.git
synced 2024-11-21 22:24:08 +01:00
57 lines
1.5 KiB
C
57 lines
1.5 KiB
C
|
#include "thread.h"
|
||
|
|
||
|
#include "pool.h"
|
||
|
#include "callbacks.h"
|
||
|
|
||
|
/*
|
||
|
* How this will work:
|
||
|
*
|
||
|
* 1. The KPCRB (processor control block) contains 3 pointers to 3 threads:
|
||
|
*
|
||
|
* +0x008 CurrentThread : Ptr64 _KTHREAD
|
||
|
* +0x010 NextThread : Ptr64 _KTHREAD
|
||
|
* +0x018 IdleThread : Ptr64 _KTHREAD
|
||
|
*
|
||
|
* 2. These threads are stored in a list that is seperate to the KTHREADs linked list.
|
||
|
* We know this because if you unlink a process, the threads are still scheduled by
|
||
|
* the OS, meaning the OS has a seperate list that it uses to schedule these threads.
|
||
|
*
|
||
|
* 3. Now from here, we can get thread ID and pass it to PsLookupThreadByThreadId which
|
||
|
* takes the thread ID and returns a pointer to the ETHREAD structure. It does this
|
||
|
* by indexing the PspCidTable using the TID we pass in.
|
||
|
*
|
||
|
* What we can potentially observer is that any threads that have been removed from the
|
||
|
* PspCidTable will return a null ptr from PsLookupThreadById. In addition to this, we
|
||
|
* can also check if the KTHREAD address referenced in the KPCRB is not in the KTHREAD
|
||
|
* linked list. Allowing us to find threads removed from both the PspCidTable and the
|
||
|
* KTHREAD linked list.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* IDEA: we can run a thread on each core to maximise the search, so it would be 3 * num procs
|
||
|
*/
|
||
|
|
||
|
BOOLEAN HasThreadBeenRemovedFromPspCidTable(
|
||
|
_In_ PETHREAD Thread
|
||
|
)
|
||
|
{
|
||
|
BOOLEAN result = TRUE;
|
||
|
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
BOOLEAN HasThreadBeenRemovedFromEThreadList(
|
||
|
_In_ PETHREAD Thread
|
||
|
)
|
||
|
{
|
||
|
BOOLEAN result = TRUE;
|
||
|
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
NTSTATUS ValidateKPCRBThreads(
|
||
|
//_In_ PIRP Irp
|
||
|
)
|
||
|
{
|
||
|
NTSTATUS status;
|
||
|
}
|