libintrovirt v0.57.4
IntroVirt introspection library
Loading...
Searching...
No Matches
THREAD.hh
Go to the documentation of this file.
1/*
2 * Copyright 2021 Assured Information Security, Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16#pragma once
17
18#include "DISPATCHER_OBJECT.hh"
19
24
25#include <cstdint>
26#include <memory>
27
28namespace introvirt {
29namespace windows {
30namespace nt {
31
45
49class THREAD : public DISPATCHER_OBJECT {
50 public:
52 public:
53 //
54 // Cross Thread Flags
55 //
56 bool CT_TERMINATED_BIT() const;
57 bool CT_DEAD_THREAD_BIT() const;
67 uint32_t value() const;
68
69 CrossThreadFlags(uint32_t value) : value_(value) {}
70
71 private:
72 uint32_t value_;
73 };
74
78 virtual TEB* Teb() = 0;
79 virtual const TEB* Teb() const = 0;
80
84 virtual const CLIENT_ID& Cid() const = 0;
85
89 virtual const PROCESS& Process() const = 0;
90 virtual PROCESS& Process() = 0;
91
92 virtual int8_t BasePriority() const = 0;
93 virtual void BasePriority(int8_t priority) = 0;
94
95 virtual int8_t Priority() const = 0;
96 virtual void Priority(int8_t priority) = 0;
97
98 virtual uint64_t Affinity() const = 0;
99 virtual void Affinity(uint64_t affinity) = 0;
100
101 virtual uint64_t UserAffinity() const = 0;
102 virtual void UserAffinity(uint64_t affinity) = 0;
103
104 virtual uint32_t IdealProcessor() const = 0;
105 virtual void IdealProcessor(uint32_t processor) = 0;
106
107 virtual uint32_t UserIdealProcessor() const = 0;
108 virtual void UserIdealProcessor(uint32_t processor) = 0;
109
110 virtual int16_t KernelApcDisable() const = 0;
111 virtual void KernelApcDisable(int16_t value) = 0;
112
113 virtual int16_t SpecialApcDisable() const = 0;
114 virtual void SpecialApcDisable(int16_t value) = 0;
115
116 virtual uint8_t PreviousMode() const = 0;
117 virtual void PreviousMode(uint8_t mode) = 0;
118
123
124 /*
125 * Retrieve the state of the thread
126 *
127 * @returns A value in the KTHREAD_STATE enum
128 */
129 virtual KTHREAD_STATE State() const = 0;
130
131 /*
132 * the state of the thread (dangerous)
133 *
134 * @param State A value from the KTHREAD_STATE enum
135 */
136 virtual void State(KTHREAD_STATE State) = 0;
137
138 virtual bool Preempted() const = 0;
139
140 virtual void Preempted(bool Preempted) = 0;
141
145 virtual uint32_t CrossThreadFlags() const = 0;
146
147 /*
148 * @param CrossThreadFlags A bitmask of CT_* flags
149 */
150 virtual void CrossThreadFlags(uint32_t CrossThreadFlags) = 0;
151
152 virtual int8_t Saturation() const = 0;
153 virtual void Saturation(int8_t saturation) = 0;
154
155 virtual bool DisableDynamicCodeOptOut() const = 0;
156
158
159 virtual uint64_t InitialStack() const = 0;
160 virtual uint64_t StackBase() const = 0;
161 virtual uint64_t StackLimit() const = 0;
162 virtual uint64_t KernelStack() const = 0;
163
164 virtual WindowsTime CreateTime() const = 0;
165 virtual void CreateTime(const WindowsTime& time) = 0;
166
167 static std::shared_ptr<THREAD> make_shared(const NtKernel& kernel, const guest_ptr<void>& ptr);
168 static std::shared_ptr<THREAD> make_shared(const NtKernel& kernel,
169 std::unique_ptr<OBJECT_HEADER>&& header);
170};
171
172} /* namespace nt */
173} /* namespace windows */
174} /* namespace introvirt */
Definition guest_ptr.hh:88
Helper class for the Windows time format.
Definition WindowsTime.hh:33
Class for handling the Windows NT CLIENT_ID structure.
Definition CLIENT_ID.hh:37
Definition DISPATCHER_OBJECT.hh:26
Abstraction for the Windows NT kernel.
Definition NtKernel.hh:37
virtual const OBJECT_HEADER & header() const =0
Get the OBJECT_HEADER for this object.
virtual guest_ptr< void > ptr() const =0
Definition PROCESS.hh:32
Definition TEB.hh:33
CrossThreadFlags(uint32_t value)
Definition THREAD.hh:69
Definition THREAD.hh:49
virtual uint32_t IdealProcessor() const =0
virtual PROCESS & Process()=0
virtual uint32_t UserIdealProcessor() const =0
virtual bool DisableDynamicCodeOptOut() const =0
virtual uint64_t StackLimit() const =0
virtual void CrossThreadFlags(uint32_t CrossThreadFlags)=0
virtual void Saturation(int8_t saturation)=0
virtual uint64_t Affinity() const =0
virtual int8_t Priority() const =0
virtual const TEB * Teb() const =0
virtual void CreateTime(const WindowsTime &time)=0
static std::shared_ptr< THREAD > make_shared(const NtKernel &kernel, std::unique_ptr< OBJECT_HEADER > &&header)
virtual void IdealProcessor(uint32_t processor)=0
virtual uint64_t InitialStack() const =0
virtual const PROCESS & Process() const =0
virtual void DisableDynamicCodeOptOut(bool DisableDynamicCodeOptOut)=0
virtual int16_t SpecialApcDisable() const =0
virtual void Preempted(bool Preempted)=0
virtual uint64_t UserAffinity() const =0
virtual WindowsTime CreateTime() const =0
virtual int8_t Saturation() const =0
virtual KTHREAD_STATE State() const =0
virtual int8_t BasePriority() const =0
virtual void SpecialApcDisable(int16_t value)=0
virtual void BasePriority(int8_t priority)=0
virtual uint8_t PreviousMode() const =0
virtual uint64_t StackBase() const =0
virtual uint32_t CrossThreadFlags() const =0
virtual void State(KTHREAD_STATE State)=0
virtual void Priority(int8_t priority)=0
virtual void UserAffinity(uint64_t affinity)=0
virtual int16_t KernelApcDisable() const =0
virtual void PreviousMode(uint8_t mode)=0
virtual uint64_t KernelStack() const =0
virtual bool Preempted() const =0
virtual void UserIdealProcessor(uint32_t processor)=0
virtual guest_ptr< void > Win32StartAddress() const =0
virtual void Affinity(uint64_t affinity)=0
virtual void KernelApcDisable(int16_t value)=0
static std::shared_ptr< THREAD > make_shared(const NtKernel &kernel, const guest_ptr< void > &ptr)
virtual const CLIENT_ID & Cid() const =0
Get the PID/TID for this THREAD.
Type-safe guest virtual address pointer and guest_ptr template.
KTHREAD_STATE
Definition KTHREAD_STATE.hh:25
CT_FLAGS
Definition THREAD.hh:32
@ CT_SKIP_TERMINATION_MSG_BIT
Definition THREAD.hh:41
@ CT_DISABLE_DYNAMIC_CODE_OPT_OUT
Definition THREAD.hh:43
@ CT_INDIRECT_CPU_SETS
Definition THREAD.hh:42
@ CT_DEAD_THREAD_BIT
Definition THREAD.hh:34
@ CT_TERMINATED_BIT
Definition THREAD.hh:33
@ CT_HARD_ERRORS_ARE_DISABLED_BIT
Definition THREAD.hh:38
@ CT_HIDE_FROM_DEBUGGER_BIT
Definition THREAD.hh:35
@ CT_SYSTEM_THREAD_BIT
Definition THREAD.hh:37
@ CT_SKIP_CREATION_MSG_BIT
Definition THREAD.hh:40
@ CT_BREAK_ON_TERMINATION_BIT
Definition THREAD.hh:39
@ CT_ACTIVE_IMPERSONATION_INFO_BIT
Definition THREAD.hh:36
Core IntroVirt classes.
Definition Cr0.hh:20