3 Copyright (c) Alex Ionescu. All rights reserved.
11 Function definitions for the Process Manager
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
32 #ifndef NTOS_MODE_USER
35 // Win32K Process/Thread Functions
40 PsGetCurrentThreadWin32Thread(
47 PsGetCurrentProcessWin32Process(
54 PsGetProcessWin32Process(
55 _In_ PEPROCESS Process
61 PsSetProcessWin32Process(
62 _Inout_ PEPROCESS Process
,
63 _In_opt_ PVOID Win32Process
,
64 _In_opt_ PVOID OldWin32Process
70 PsSetThreadWin32Thread(
71 _Inout_ PETHREAD Thread
,
72 _In_ PVOID Win32Thread
,
73 _In_ PVOID OldWin32Thread
79 PsGetThreadWin32Thread(
86 PsGetProcessWin32WindowStation(
87 _In_ PEPROCESS Process
93 PsSetProcessWindowStation(
94 _Inout_ PEPROCESS Process
,
95 _In_ PVOID WindowStation
115 PsGetThreadHardErrorsAreDisabled(
122 PsSetThreadHardErrorsAreDisabled(
123 _Inout_ PETHREAD Thread
,
124 _In_ BOOLEAN Disabled
130 PsEstablishWin32Callouts(
131 _In_ PWIN32_CALLOUTS_FPNS CalloutData
137 PsReturnProcessNonPagedPoolQuota(
138 _In_ PEPROCESS Process
,
145 PsGetCurrentProcessSessionId(
150 // Process Impersonation Functions
155 PsIsThreadImpersonating(
162 PsRevertThreadToSelf(
163 _Inout_ PETHREAD Thread
172 PsLookupProcessThreadByCid(
174 _Out_opt_ PEPROCESS
*Process
,
175 _Out_ PETHREAD
*Thread
180 PsIsProtectedProcess(
181 _In_ PEPROCESS Process
188 _In_ PEPROCESS Process
193 PsSetProcessPriorityByClass(
194 _In_ PEPROCESS Process
,
195 _In_ PSPROCESSPRIORITYMODE Type
200 PsGetProcessInheritedFromUniqueProcessId(
201 _In_ PEPROCESS Process
207 PsGetProcessExitStatus(
208 _In_ PEPROCESS Process
214 PsGetProcessSessionId(
215 _In_ PEPROCESS Process
221 PsGetProcessExitProcessCalled(
222 _In_ PEPROCESS Process
232 _In_ PEPROCESS Process
,
233 _In_ POOL_TYPE PoolType
,
240 PsChargeProcessNonPagedPoolQuota(
241 _In_ PEPROCESS Process
,
248 PsChargeProcessPagedPoolQuota(
249 _In_ PEPROCESS Process
,
256 PsChargeProcessPoolQuota(
257 _In_ PEPROCESS Process
,
258 _In_ POOL_TYPE PoolType
,
266 _In_ PEPROCESS Process
,
267 _In_ POOL_TYPE PoolType
,
274 PsReturnProcessNonPagedPoolQuota(
275 _In_ PEPROCESS Process
,
282 PsReturnProcessPagedPoolQuota(
283 _In_ PEPROCESS Process
,
290 PsGetProcessSecurityPort(
291 _In_ PEPROCESS Process
297 PsSetProcessSecurityPort(
298 _Inout_ PEPROCESS Process
,
299 _In_ PVOID SecurityPort
305 PsGetCurrentThreadProcessId(
318 _In_ HANDLE ThreadHandle
,
319 _Out_opt_ PULONG SuspendCount
322 typedef ULONG APPHELPCACHESERVICECLASS
;
326 NtApphelpCacheControl(
327 _In_ APPHELPCACHESERVICECLASS Service
,
328 _In_ PVOID ServiceData
335 _In_ HANDLE ThreadHandle
341 NtAssignProcessToJobObject(
342 _In_ HANDLE JobHandle
,
343 _In_ HANDLE ProcessHandle
350 _Out_ PHANDLE JobHandle
,
351 _In_ ACCESS_MASK DesiredAccess
,
352 _In_ POBJECT_ATTRIBUTES ObjectAttributes
359 _In_ PJOB_SET_ARRAY UserJobSet
,
367 _Out_ PHANDLE ProcessHandle
,
368 _In_ ACCESS_MASK DesiredAccess
,
369 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
370 _In_ HANDLE ParentProcess
,
371 _In_ BOOLEAN InheritObjectTable
,
372 _In_opt_ HANDLE SectionHandle
,
373 _In_opt_ HANDLE DebugPort
,
374 _In_opt_ HANDLE ExceptionPort
381 _Out_ PHANDLE ProcessHandle
,
382 _In_ ACCESS_MASK DesiredAccess
,
383 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
384 _In_ HANDLE ParentProcess
,
386 _In_opt_ HANDLE SectionHandle
,
387 _In_opt_ HANDLE DebugPort
,
388 _In_opt_ HANDLE ExceptionPort
,
396 _Out_ PHANDLE ThreadHandle
,
397 _In_ ACCESS_MASK DesiredAccess
,
398 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
399 _In_ HANDLE ProcessHandle
,
400 _Out_ PCLIENT_ID ClientId
,
401 _In_ PCONTEXT ThreadContext
,
402 _In_ PINITIAL_TEB UserStack
,
403 _In_ BOOLEAN CreateSuspended
407 #ifndef NTOS_MODE_USER
408 FORCEINLINE
struct _TEB
* NtCurrentTeb(VOID
)
411 return (PTEB
)__readfsdword(0x18);
412 #elif defined (_M_AMD64)
413 return (struct _TEB
*)__readgsqword(FIELD_OFFSET(NT_TIB
, Self
));
417 struct _TEB
* NtCurrentTeb(void);
425 _In_ HANDLE ThreadHandle
,
426 _In_ HANDLE ThreadToImpersonate
,
427 _In_ PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService
434 _In_ HANDLE ProcessHandle
,
435 _In_opt_ HANDLE JobHandle
443 _Out_ PHANDLE ProcessHandle
,
444 _In_ ACCESS_MASK DesiredAccess
,
445 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
446 _In_opt_ PCLIENT_ID ClientId
449 _Must_inspect_result_
455 _In_ HANDLE ProcessHandle
,
456 _In_ ACCESS_MASK DesiredAccess
,
457 _Out_ PHANDLE TokenHandle
464 _Out_ PHANDLE ThreadHandle
,
465 _In_ ACCESS_MASK DesiredAccess
,
466 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
467 _In_ PCLIENT_ID ClientId
474 _In_ HANDLE ThreadHandle
,
475 _In_ ACCESS_MASK DesiredAccess
,
476 _In_ BOOLEAN OpenAsSelf
,
477 _Out_ PHANDLE TokenHandle
484 _In_ HANDLE ThreadHandle
,
485 _In_ ACCESS_MASK DesiredAccess
,
486 _In_ BOOLEAN OpenAsSelf
,
487 _In_ ULONG HandleAttributes
,
488 _Out_ PHANDLE TokenHandle
494 NtQueryInformationJobObject(
495 _In_ HANDLE JobHandle
,
496 _In_ JOBOBJECTINFOCLASS JobInformationClass
,
497 _Out_bytecap_(JobInformationLength
) PVOID JobInformation
,
498 _In_ ULONG JobInformationLength
,
499 _Out_ PULONG ReturnLength
506 NtQueryInformationProcess(
507 _In_ HANDLE ProcessHandle
,
508 _In_ PROCESSINFOCLASS ProcessInformationClass
,
509 _Out_ PVOID ProcessInformation
,
510 _In_ ULONG ProcessInformationLength
,
511 _Out_opt_ PULONG ReturnLength OPTIONAL
518 NtQueryInformationThread(
519 _In_ HANDLE ThreadHandle
,
520 _In_ THREADINFOCLASS ThreadInformationClass
,
521 _Out_ PVOID ThreadInformation
,
522 _In_ ULONG ThreadInformationLength
,
523 _Out_opt_ PULONG ReturnLength
529 NtRegisterThreadTerminatePort(
530 _In_ HANDLE TerminationPort
537 _In_ HANDLE ThreadHandle
,
538 _Out_opt_ PULONG SuspendCount
545 _In_ HANDLE ProcessHandle
551 NtSetInformationJobObject(
552 _In_ HANDLE JobHandle
,
553 _In_ JOBOBJECTINFOCLASS JobInformationClass
,
554 _In_bytecount_(JobInformationLength
) PVOID JobInformation
,
555 _In_ ULONG JobInformationLength
561 NtSetInformationProcess(
562 _In_ HANDLE ProcessHandle
,
563 _In_ PROCESSINFOCLASS ProcessInformationClass
,
564 _In_ PVOID ProcessInformation
,
565 _In_ ULONG ProcessInformationLength
572 NtSetInformationThread(
573 _In_ HANDLE ThreadHandle
,
574 _In_ THREADINFOCLASS ThreadInformationClass
,
575 _In_reads_bytes_(ThreadInformationLength
) PVOID ThreadInformation
,
576 _In_ ULONG ThreadInformationLength
583 _In_ HANDLE ProcessHandle
590 _In_ HANDLE ThreadHandle
,
591 _In_ PULONG PreviousSuspendCount
598 _In_ HANDLE ProcessHandle
,
599 _In_ NTSTATUS ExitStatus
606 _In_ HANDLE ThreadHandle
,
607 _In_ NTSTATUS ExitStatus
613 NtTerminateJobObject(
614 _In_ HANDLE JobHandle
,
615 _In_ NTSTATUS ExitStatus
622 _In_ HANDLE ThreadHandle
,
623 _Out_opt_ PULONG SuspendCount
630 _In_ HANDLE ThreadHandle
636 ZwAssignProcessToJobObject(
637 _In_ HANDLE JobHandle
,
638 _In_ HANDLE ProcessHandle
645 _Out_ PHANDLE JobHandle
,
646 _In_ ACCESS_MASK DesiredAccess
,
647 _In_ POBJECT_ATTRIBUTES ObjectAttributes
654 _Out_ PHANDLE ProcessHandle
,
655 _In_ ACCESS_MASK DesiredAccess
,
656 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
657 _In_ HANDLE ParentProcess
,
658 _In_ BOOLEAN InheritObjectTable
,
659 _In_opt_ HANDLE SectionHandle
,
660 _In_opt_ HANDLE DebugPort
,
661 _In_opt_ HANDLE ExceptionPort
668 _Out_ PHANDLE ThreadHandle
,
669 _In_ ACCESS_MASK DesiredAccess
,
670 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
671 _In_ HANDLE ProcessHandle
,
672 _Out_ PCLIENT_ID ClientId
,
673 _In_ PCONTEXT ThreadContext
,
674 _In_ PINITIAL_TEB UserStack
,
675 _In_ BOOLEAN CreateSuspended
682 _In_ HANDLE ThreadHandle
,
683 _In_ HANDLE ThreadToImpersonate
,
684 _In_ PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService
691 _In_ HANDLE ProcessHandle
,
692 _In_opt_ HANDLE JobHandle
695 _IRQL_requires_max_(PASSIVE_LEVEL
)
699 ZwOpenProcessTokenEx(
700 _In_ HANDLE ProcessHandle
,
701 _In_ ACCESS_MASK DesiredAccess
,
702 _In_ ULONG HandleAttributes
,
703 _Out_ PHANDLE TokenHandle
710 _Out_ PHANDLE ThreadHandle
,
711 _In_ ACCESS_MASK DesiredAccess
,
712 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
713 _In_ PCLIENT_ID ClientId
720 _In_ HANDLE ThreadHandle
,
721 _In_ ACCESS_MASK DesiredAccess
,
722 _In_ BOOLEAN OpenAsSelf
,
723 _Out_ PHANDLE TokenHandle
730 _In_ HANDLE ThreadHandle
,
731 _In_ ACCESS_MASK DesiredAccess
,
732 _In_ BOOLEAN OpenAsSelf
,
733 _In_ ULONG HandleAttributes
,
734 _Out_ PHANDLE TokenHandle
740 ZwQueryInformationJobObject(
741 _In_ HANDLE JobHandle
,
742 _In_ JOBOBJECTINFOCLASS JobInformationClass
,
743 _Out_bytecap_(JobInformationLength
) PVOID JobInformation
,
744 _In_ ULONG JobInformationLength
,
745 _Out_ PULONG ReturnLength
752 ZwQueryInformationProcess(
753 _In_ HANDLE ProcessHandle
,
754 _In_ PROCESSINFOCLASS ProcessInformationClass
,
755 _Out_ PVOID ProcessInformation
,
756 _In_ ULONG ProcessInformationLength
,
757 _Out_opt_ PULONG ReturnLength
764 ZwQueryInformationThread(
765 _In_ HANDLE ThreadHandle
,
766 _In_ THREADINFOCLASS ThreadInformationClass
,
767 _Out_ PVOID ThreadInformation
,
768 _In_ ULONG ThreadInformationLength
,
769 _Out_opt_ PULONG ReturnLength
775 ZwRegisterThreadTerminatePort(
776 _In_ HANDLE TerminationPort
783 _In_ HANDLE ThreadHandle
,
784 _Out_opt_ PULONG SuspendCount
791 _In_ HANDLE ProcessHandle
797 ZwSetInformationJobObject(
798 _In_ HANDLE JobHandle
,
799 _In_ JOBOBJECTINFOCLASS JobInformationClass
,
800 _In_ PVOID JobInformation
,
801 _In_ ULONG JobInformationLength
807 ZwSetInformationProcess(
808 _In_ HANDLE ProcessHandle
,
809 _In_ PROCESSINFOCLASS ProcessInformationClass
,
810 _In_ PVOID ProcessInformation
,
811 _In_ ULONG ProcessInformationLength
814 _IRQL_requires_max_(PASSIVE_LEVEL
)
818 ZwSetInformationThread(
819 _In_ HANDLE ThreadHandle
,
820 _In_ THREADINFOCLASS ThreadInformationClass
,
821 _In_reads_bytes_(ThreadInformationLength
) PVOID ThreadInformation
,
822 _In_ ULONG ThreadInformationLength
829 _In_ HANDLE ProcessHandle
836 _In_ HANDLE ThreadHandle
,
837 _In_ PULONG PreviousSuspendCount
840 _IRQL_requires_max_(PASSIVE_LEVEL
)
845 _In_opt_ HANDLE ProcessHandle
,
846 _In_ NTSTATUS ExitStatus
853 _In_ HANDLE ThreadHandle
,
854 _In_ NTSTATUS ExitStatus
860 ZwTerminateJobObject(
861 _In_ HANDLE JobHandle
,
862 _In_ NTSTATUS ExitStatus