1 use core
::mem
::size_of
;
2 use crate::ntapi_base
::CLIENT_ID
;
3 use crate::ntpsapi
::{GDI_HANDLE_BUFFER, PPEB_LDR_DATA}
;
4 use crate::ntrtl
::PRTL_USER_PROCESS_PARAMETERS
;
5 use winapi
::shared
::basetsd
::{SIZE_T, ULONG_PTR}
;
6 use winapi
::shared
::guiddef
::GUID
;
7 use winapi
::shared
::ntdef
::{
8 BOOLEAN
, CHAR
, HANDLE
, LCID
, LIST_ENTRY
, LONG
, NTSTATUS
, PROCESSOR_NUMBER
, PSTR
, PVOID
, UCHAR
,
9 ULARGE_INTEGER
, ULONG
, ULONGLONG
, UNICODE_STRING
, USHORT
, WCHAR
,
11 use winapi
::um
::winnt
::{
12 ACTIVATION_CONTEXT
, FLS_MAXIMUM_AVAILABLE
, NT_TIB
, PRTL_CRITICAL_SECTION
, PSLIST_HEADER
,
14 STRUCT
!{struct RTL_ACTIVATION_CONTEXT_STACK_FRAME
{
15 Previous
: PRTL_ACTIVATION_CONTEXT_STACK_FRAME
,
16 ActivationContext
: *mut ACTIVATION_CONTEXT
,
19 pub type PRTL_ACTIVATION_CONTEXT_STACK_FRAME
= *mut RTL_ACTIVATION_CONTEXT_STACK_FRAME
;
20 STRUCT
!{struct ACTIVATION_CONTEXT_STACK
{
21 ActiveFrame
: *mut RTL_ACTIVATION_CONTEXT_STACK_FRAME
,
22 FrameListCache
: LIST_ENTRY
,
24 NextCookieSequenceNumber
: ULONG
,
27 pub type PACTIVATION_CONTEXT_STACK
= *mut ACTIVATION_CONTEXT_STACK
;
28 STRUCT
!{struct API_SET_NAMESPACE
{
37 pub type PAPI_SET_NAMESPACE
= *mut API_SET_NAMESPACE
;
38 STRUCT
!{struct API_SET_HASH_ENTRY
{
42 pub type PAPI_SET_HASH_ENTRY
= *mut API_SET_HASH_ENTRY
;
43 STRUCT
!{struct API_SET_NAMESPACE_ENTRY
{
51 pub type PAPI_SET_NAMESPACE_ENTRY
= *mut API_SET_NAMESPACE_ENTRY
;
52 STRUCT
!{struct API_SET_VALUE_ENTRY
{
59 pub type PAPI_SET_VALUE_ENTRY
= *mut API_SET_VALUE_ENTRY
;
61 KernelCallbackTable
: PVOID
,
62 UserSharedInfoPtr
: PVOID
,
65 pub struct LEAP_SECOND_DATA([u8; 0]); //fixme
67 InheritedAddressSpace
: BOOLEAN
,
68 ReadImageFileExecOptions
: BOOLEAN
,
69 BeingDebugged
: BOOLEAN
,
72 ImageBaseAddress
: PVOID
,
74 ProcessParameters
: PRTL_USER_PROCESS_PARAMETERS
,
77 FastPebLock
: PRTL_CRITICAL_SECTION
,
79 AtlThunkSListPtr
: PSLIST_HEADER
,
80 CrossProcessFlags
: ULONG
,
82 SystemReserved
: [ULONG
; 1],
83 AtlThunkSListPtr32
: ULONG
,
84 ApiSetMap
: PAPI_SET_NAMESPACE
,
85 TlsExpansionCounter
: ULONG
,
87 TlsBitmapBits
: [ULONG
; 2],
88 ReadOnlySharedMemoryBase
: PVOID
,
90 ReadOnlyStaticServerData
: *mut PVOID
,
91 AnsiCodePageData
: PVOID
,
92 OemCodePageData
: PVOID
,
93 UnicodeCaseTableData
: PVOID
,
94 NumberOfProcessors
: ULONG
,
96 CriticalSectionTimeout
: ULARGE_INTEGER
,
97 HeapSegmentReserve
: SIZE_T
,
98 HeapSegmentCommit
: SIZE_T
,
99 HeapDeCommitTotalFreeThreshold
: SIZE_T
,
100 HeapDeCommitFreeBlockThreshold
: SIZE_T
,
101 NumberOfHeaps
: ULONG
,
102 MaximumNumberOfHeaps
: ULONG
,
103 ProcessHeaps
: *mut PVOID
,
104 GdiSharedHandleTable
: PVOID
,
105 ProcessStarterHelper
: PVOID
,
106 GdiDCAttributeList
: ULONG
,
107 LoaderLock
: PRTL_CRITICAL_SECTION
,
108 OSMajorVersion
: ULONG
,
109 OSMinorVersion
: ULONG
,
110 OSBuildNumber
: USHORT
,
111 OSCSDVersion
: USHORT
,
113 ImageSubsystem
: ULONG
,
114 ImageSubsystemMajorVersion
: ULONG
,
115 ImageSubsystemMinorVersion
: ULONG
,
116 ActiveProcessAffinityMask
: ULONG_PTR
,
117 GdiHandleBuffer
: GDI_HANDLE_BUFFER
,
118 PostProcessInitRoutine
: PVOID
,
119 TlsExpansionBitmap
: PVOID
,
120 TlsExpansionBitmapBits
: [ULONG
; 32],
122 AppCompatFlags
: ULARGE_INTEGER
,
123 AppCompatFlagsUser
: ULARGE_INTEGER
,
125 AppCompatInfo
: PVOID
,
126 CSDVersion
: UNICODE_STRING
,
127 ActivationContextData
: PVOID
,
128 ProcessAssemblyStorageMap
: PVOID
,
129 SystemDefaultActivationContextData
: PVOID
,
130 SystemAssemblyStorageMap
: PVOID
,
131 MinimumStackCommit
: SIZE_T
,
132 FlsCallback
: *mut PVOID
,
133 FlsListHead
: LIST_ENTRY
,
135 FlsBitmapBits
: [ULONG
; FLS_MAXIMUM_AVAILABLE
as usize / (size_of
::<ULONG
>() * 8)],
137 WerRegistrationData
: PVOID
,
138 WerShipAssertPtr
: PVOID
,
140 pImageHeaderHash
: PVOID
,
142 CsrServerReadOnlySharedMemoryBase
: ULONGLONG
,
143 TppWorkerpListLock
: PRTL_CRITICAL_SECTION
,
144 TppWorkerpList
: LIST_ENTRY
,
145 WaitOnAddressHashTable
: [PVOID
; 128],
146 TelemetryCoverageHeader
: PVOID
,
147 CloudFileFlags
: ULONG
,
148 CloudFileDiagFlags
: ULONG
,
149 PlaceholderCompatibilityMode
: CHAR
,
150 PlaceholderCompatibilityModeReserved
: [CHAR
; 7],
151 LeapSecondData
: *mut LEAP_SECOND_DATA
,
152 LeapSecondFlags
: ULONG
,
153 NtGlobalFlag2
: ULONG
,
155 BITFIELD
!{PEB BitField
: BOOLEAN
[
156 ImageUsesLargePages set_ImageUsesLargePages
[0..1],
157 IsProtectedProcess set_IsProtectedProcess
[1..2],
158 IsImageDynamicallyRelocated set_IsImageDynamicallyRelocated
[2..3],
159 SkipPatchingUser32Forwarders set_SkipPatchingUser32Forwarders
[3..4],
160 IsPackagedProcess set_IsPackagedProcess
[4..5],
161 IsAppContainer set_IsAppContainer
[5..6],
162 IsProtectedProcessLight set_IsProtectedProcessLight
[6..7],
163 IsLongPathAwareProcess set_IsLongPathAwareProcess
[7..8],
165 BITFIELD
!{PEB CrossProcessFlags
: ULONG
[
166 ProcessInJob set_ProcessInJob
[0..1],
167 ProcessInitializing set_ProcessInitializing
[1..2],
168 ProcessUsingVEH set_ProcessUsingVEH
[2..3],
169 ProcessUsingVCH set_ProcessUsingVCH
[3..4],
170 ProcessUsingFTH set_ProcessUsingFTH
[4..5],
171 ProcessPreviouslyThrottled set_ProcessPreviouslyThrottled
[5..6],
172 ProcessCurrentlyThrottled set_ProcessCurrentlyThrottled
[6..7],
173 ProcessImagesHotPatched set_ProcessImagesHotPatched
[7..8],
174 ReservedBits0 set_ReservedBits0
[8..32],
176 BITFIELD
!{PEB TracingFlags
: ULONG
[
177 HeapTracingEnabled set_HeapTracingEnabled
[0..1],
178 CritSecTracingEnabled set_CritSecTracingEnabled
[1..2],
179 LibLoaderTracingEnabled set_LibLoaderTracingEnabled
[2..3],
180 SpareTracingBits set_SpareTracingBits
[3..32],
182 BITFIELD
!{PEB LeapSecondFlags
: ULONG
[
183 SixtySecondEnabled set_SixtySecondEnabled
[0..1],
184 Reserved set_Reserved
[1..32],
186 pub type PPEB
= *mut PEB
;
187 pub const GDI_BATCH_BUFFER_SIZE
: usize = 310;
188 STRUCT
!{struct GDI_TEB_BATCH
{
191 Buffer
: [ULONG
; GDI_BATCH_BUFFER_SIZE
],
193 pub type PGDI_TEB_BATCH
= *mut GDI_TEB_BATCH
;
194 STRUCT
!{struct TEB_ACTIVE_FRAME_CONTEXT
{
198 pub type PTEB_ACTIVE_FRAME_CONTEXT
= *mut TEB_ACTIVE_FRAME_CONTEXT
;
199 STRUCT
!{struct TEB_ACTIVE_FRAME
{
201 Previous
: *mut TEB_ACTIVE_FRAME
,
202 Context
: PTEB_ACTIVE_FRAME_CONTEXT
,
204 pub type PTEB_ACTIVE_FRAME
= *mut TEB_ACTIVE_FRAME
;
205 STRUCT
!{struct TEB_u_s
{
209 IdealProcessor
: UCHAR
,
212 CurrentIdealProcessor
: PROCESSOR_NUMBER
,
213 IdealProcessorValue
: ULONG
,
216 #[cfg(any(target_arch = "x86_64", target_arch = "aarch64"))]
219 EnvironmentPointer
: PVOID
,
221 ActiveRpcHandle
: PVOID
,
222 ThreadLocalStoragePointer
: PVOID
,
223 ProcessEnvironmentBlock
: PPEB
,
224 LastErrorValue
: ULONG
,
225 CountOfOwnedCriticalSections
: ULONG
,
226 CsrClientThread
: PVOID
,
227 Win32ThreadInfo
: PVOID
,
228 User32Reserved
: [ULONG
; 26],
229 UserReserved
: [ULONG
; 5],
230 WOW32Reserved
: PVOID
,
232 FpSoftwareStatusRegister
: ULONG
,
233 ReservedForDebuggerInstrumentation
: [PVOID
; 16],
234 SystemReserved1
: [PVOID
; 30],
235 PlaceholderCompatibilityMode
: CHAR
,
236 PlaceholderReserved
: [CHAR
; 11],
237 ProxiedProcessId
: ULONG
,
238 ActivationStack
: ACTIVATION_CONTEXT_STACK
,
239 WorkingOnBehalfTicket
: [UCHAR
; 8],
240 ExceptionCode
: NTSTATUS
,
241 ActivationContextStackPointer
: PACTIVATION_CONTEXT_STACK
,
242 InstrumentationCallbackSp
: ULONG_PTR
,
243 InstrumentationCallbackPreviousPc
: ULONG_PTR
,
244 InstrumentationCallbackPreviousSp
: ULONG_PTR
,
246 InstrumentationCallbackDisabled
: BOOLEAN
,
247 GdiTebBatch
: GDI_TEB_BATCH
,
248 RealClientId
: CLIENT_ID
,
249 GdiCachedProcessHandle
: HANDLE
,
252 GdiThreadLocalInfo
: PVOID
,
253 Win32ClientInfo
: [ULONG_PTR
; 62],
254 glDispatchTable
: [PVOID
; 233],
255 glReserved1
: [ULONG_PTR
; 29],
257 glSectionInfo
: PVOID
,
262 LastStatusValue
: NTSTATUS
,
263 StaticUnicodeString
: UNICODE_STRING
,
264 StaticUnicodeBuffer
: [WCHAR
; 261],
265 DeallocationStack
: PVOID
,
266 TlsSlots
: [PVOID
; 64],
267 TlsLinks
: LIST_ENTRY
,
269 ReservedForNtRpc
: PVOID
,
270 DbgSsReserved
: [PVOID
; 2],
271 HardErrorMode
: ULONG
,
272 Instrumentation
: [PVOID
; 11],
274 SubProcessTag
: PVOID
,
278 GdiBatchCount
: ULONG
,
280 GuaranteedStackBytes
: ULONG
,
281 ReservedForPerf
: PVOID
,
282 ReservedForOle
: PVOID
,
283 WaitingOnLoaderLock
: ULONG
,
284 SavedPriorityState
: PVOID
,
285 ReservedForCodeCoverage
: ULONG_PTR
,
286 ThreadPoolData
: PVOID
,
287 TlsExpansionSlots
: *mut PVOID
,
288 DeallocationBStore
: PVOID
,
290 MuiGeneration
: ULONG
,
291 IsImpersonating
: ULONG
,
294 HeapVirtualAffinity
: USHORT
,
295 LowFragHeapDataSlot
: USHORT
,
296 CurrentTransactionHandle
: HANDLE
,
297 ActiveFrame
: PTEB_ACTIVE_FRAME
,
299 PreferredLanguages
: PVOID
,
300 UserPrefLanguages
: PVOID
,
301 MergedPrefLanguages
: PVOID
,
302 MuiImpersonation
: ULONG
,
303 CrossTebFlags
: USHORT
,
304 SameTebFlags
: USHORT
,
305 TxnScopeEnterCallback
: PVOID
,
306 TxnScopeExitCallback
: PVOID
,
307 TxnScopeContext
: PVOID
,
310 ResourceRetValue
: PVOID
,
311 ReservedForWdf
: PVOID
,
312 ReservedForCrt
: ULONGLONG
,
313 EffectiveContainerId
: GUID
,
315 #[cfg(target_arch = "x86")]
318 EnvironmentPointer
: PVOID
,
320 ActiveRpcHandle
: PVOID
,
321 ThreadLocalStoragePointer
: PVOID
,
322 ProcessEnvironmentBlock
: PPEB
,
323 LastErrorValue
: ULONG
,
324 CountOfOwnedCriticalSections
: ULONG
,
325 CsrClientThread
: PVOID
,
326 Win32ThreadInfo
: PVOID
,
327 User32Reserved
: [ULONG
; 26],
328 UserReserved
: [ULONG
; 5],
329 WOW32Reserved
: PVOID
,
331 FpSoftwareStatusRegister
: ULONG
,
332 ReservedForDebuggerInstrumentation
: [PVOID
; 16],
333 SystemReserved1
: [PVOID
; 26],
334 PlaceholderCompatibilityMode
: CHAR
,
335 PlaceholderReserved
: [CHAR
; 11],
336 ProxiedProcessId
: ULONG
,
337 ActivationStack
: ACTIVATION_CONTEXT_STACK
,
338 WorkingOnBehalfTicket
: [UCHAR
; 8],
339 ExceptionCode
: NTSTATUS
,
340 ActivationContextStackPointer
: PACTIVATION_CONTEXT_STACK
,
341 InstrumentationCallbackSp
: ULONG_PTR
,
342 InstrumentationCallbackPreviousPc
: ULONG_PTR
,
343 InstrumentationCallbackPreviousSp
: ULONG_PTR
,
344 InstrumentationCallbackDisabled
: BOOLEAN
,
345 SpareBytes
: [UCHAR
; 23],
347 GdiTebBatch
: GDI_TEB_BATCH
,
348 RealClientId
: CLIENT_ID
,
349 GdiCachedProcessHandle
: HANDLE
,
352 GdiThreadLocalInfo
: PVOID
,
353 Win32ClientInfo
: [ULONG_PTR
; 62],
354 glDispatchTable
: [PVOID
; 233],
355 glReserved1
: [ULONG_PTR
; 29],
357 glSectionInfo
: PVOID
,
362 LastStatusValue
: NTSTATUS
,
363 StaticUnicodeString
: UNICODE_STRING
,
364 StaticUnicodeBuffer
: [WCHAR
; 261],
365 DeallocationStack
: PVOID
,
366 TlsSlots
: [PVOID
; 64],
367 TlsLinks
: LIST_ENTRY
,
369 ReservedForNtRpc
: PVOID
,
370 DbgSsReserved
: [PVOID
; 2],
371 HardErrorMode
: ULONG
,
372 Instrumentation
: [PVOID
; 9],
374 SubProcessTag
: PVOID
,
378 GdiBatchCount
: ULONG
,
380 GuaranteedStackBytes
: ULONG
,
381 ReservedForPerf
: PVOID
,
382 ReservedForOle
: PVOID
,
383 WaitingOnLoaderLock
: ULONG
,
384 SavedPriorityState
: PVOID
,
385 ReservedForCodeCoverage
: ULONG_PTR
,
386 ThreadPoolData
: PVOID
,
387 TlsExpansionSlots
: *mut PVOID
,
388 MuiGeneration
: ULONG
,
389 IsImpersonating
: ULONG
,
392 HeapVirtualAffinity
: USHORT
,
393 LowFragHeapDataSlot
: USHORT
,
394 CurrentTransactionHandle
: HANDLE
,
395 ActiveFrame
: PTEB_ACTIVE_FRAME
,
397 PreferredLanguages
: PVOID
,
398 UserPrefLanguages
: PVOID
,
399 MergedPrefLanguages
: PVOID
,
400 MuiImpersonation
: ULONG
,
401 CrossTebFlags
: USHORT
,
402 SameTebFlags
: USHORT
,
403 TxnScopeEnterCallback
: PVOID
,
404 TxnScopeExitCallback
: PVOID
,
405 TxnScopeContext
: PVOID
,
408 ResourceRetValue
: PVOID
,
409 ReservedForWdf
: PVOID
,
410 ReservedForCrt
: ULONGLONG
,
411 EffectiveContainerId
: GUID
,
413 BITFIELD
!{TEB SameTebFlags
: USHORT
[
414 SafeThunkCall set_SafeThunkCall
[0..1],
415 InDebugPrint set_InDebugPrint
[1..2],
416 HasFiberData set_HasFiberData
[2..3],
417 SkipThreadAttach set_SkipThreadAttach
[3..4],
418 WerInShipAssertCode set_WerInShipAssertCode
[4..5],
419 RanProcessInit set_RanProcessInit
[5..6],
420 ClonedThread set_ClonedThread
[6..7],
421 SuppressDebugMsg set_SuppressDebugMsg
[7..8],
422 DisableUserStackWalk set_DisableUserStackWalk
[8..9],
423 RtlExceptionAttached set_RtlExceptionAttached
[9..10],
424 InitialThread set_InitialThread
[10..11],
425 SessionAware set_SessionAware
[11..12],
426 LoadOwner set_LoadOwner
[12..13],
427 LoaderWorker set_LoaderWorker
[13..14],
428 SkipLoaderInit set_SkipLoaderInit
[14..15],
429 SpareSameTebBits set_SpareSameTebBits
[15..16],
431 pub type PTEB
= *mut TEB
;