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(
61 PsSetProcessWin32Process(
69 PsSetThreadWin32Thread(
77 PsGetThreadWin32Thread(
84 PsGetProcessWin32WindowStation(
91 PsSetProcessWindowStation(
113 PsGetThreadHardErrorsAreDisabled(
120 PsSetThreadHardErrorsAreDisabled(
128 PsEstablishWin32Callouts(
129 PWIN32_CALLOUTS_FPNS CalloutData
135 PsReturnProcessNonPagedPoolQuota(
136 IN PEPROCESS Process
,
143 PsGetCurrentProcessSessionId(
148 // Process Impersonation Functions
153 PsRevertThreadToSelf(
163 PsLookupProcessThreadByCid(
165 OUT PEPROCESS
*Process OPTIONAL
,
171 PsIsProtectedProcess(
184 PsSetProcessPriorityByClass(
185 IN PEPROCESS Process
,
186 IN PSPROCESSPRIORITYMODE Type
191 PsGetProcessInheritedFromUniqueProcessId(
198 PsGetProcessExitStatus(
204 PsGetProcessSessionId(
211 PsGetProcessExitProcessCalled(
222 IN PEPROCESS Process
,
223 IN POOL_TYPE PoolType
,
230 PsChargeProcessNonPagedPoolQuota(
231 IN PEPROCESS Process
,
238 PsChargeProcessPagedPoolQuota(
239 IN PEPROCESS Process
,
246 PsChargeProcessPoolQuota(
247 IN PEPROCESS Process
,
248 IN POOL_TYPE PoolType
,
256 IN PEPROCESS Process
,
257 IN POOL_TYPE PoolType
,
264 PsReturnProcessNonPagedPoolQuota(
265 IN PEPROCESS Process
,
272 PsReturnProcessPagedPoolQuota(
273 IN PEPROCESS Process
,
286 IN HANDLE ThreadHandle
,
287 OUT PULONG SuspendCount
290 typedef ULONG APPHELPCACHESERVICECLASS
;
294 NtApphelpCacheControl(
295 IN APPHELPCACHESERVICECLASS Service
,
303 IN HANDLE ThreadHandle
309 NtAssignProcessToJobObject(
319 ACCESS_MASK DesiredAccess
,
320 POBJECT_ATTRIBUTES ObjectAttributes
327 IN PJOB_SET_ARRAY UserJobSet
,
335 OUT PHANDLE ProcessHandle
,
336 IN ACCESS_MASK DesiredAccess
,
337 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
338 IN HANDLE ParentProcess
,
339 IN BOOLEAN InheritObjectTable
,
340 IN HANDLE SectionHandle OPTIONAL
,
341 IN HANDLE DebugPort OPTIONAL
,
342 IN HANDLE ExceptionPort OPTIONAL
349 OUT PHANDLE ProcessHandle
,
350 IN ACCESS_MASK DesiredAccess
,
351 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
352 IN HANDLE ParentProcess
,
354 IN HANDLE SectionHandle OPTIONAL
,
355 IN HANDLE DebugPort OPTIONAL
,
356 IN HANDLE ExceptionPort OPTIONAL
,
364 OUT PHANDLE ThreadHandle
,
365 IN ACCESS_MASK DesiredAccess
,
366 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
367 IN HANDLE ProcessHandle
,
368 OUT PCLIENT_ID ClientId
,
369 IN PCONTEXT ThreadContext
,
370 IN PINITIAL_TEB UserStack
,
371 IN BOOLEAN CreateSuspended
375 #ifndef NTOS_MODE_USER
376 FORCEINLINE
struct _TEB
* NtCurrentTeb(VOID
)
379 return (PTEB
)__readfsdword(0x18);
380 #elif defined (_M_AMD64)
381 return (struct _TEB
*)__readgsqword(FIELD_OFFSET(NT_TIB
, Self
));
385 struct _TEB
* NtCurrentTeb(void);
393 IN HANDLE ThreadHandle
,
394 IN HANDLE ThreadToImpersonate
,
395 IN PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService
402 IN HANDLE ProcessHandle
,
403 IN HANDLE JobHandle OPTIONAL
410 OUT PHANDLE ProcessHandle
,
411 IN ACCESS_MASK DesiredAccess
,
412 IN POBJECT_ATTRIBUTES ObjectAttributes
,
413 IN PCLIENT_ID ClientId
420 OUT PHANDLE ThreadHandle
,
421 IN ACCESS_MASK DesiredAccess
,
422 IN POBJECT_ATTRIBUTES ObjectAttributes
,
423 IN PCLIENT_ID ClientId
430 IN HANDLE ThreadHandle
,
431 IN ACCESS_MASK DesiredAccess
,
432 IN BOOLEAN OpenAsSelf
,
433 OUT PHANDLE TokenHandle
440 IN HANDLE ThreadHandle
,
441 IN ACCESS_MASK DesiredAccess
,
442 IN BOOLEAN OpenAsSelf
,
443 IN ULONG HandleAttributes
,
444 OUT PHANDLE TokenHandle
450 NtQueryInformationJobObject(
452 JOBOBJECTINFOCLASS JobInformationClass
,
453 PVOID JobInformation
,
454 ULONG JobInformationLength
,
462 NtQueryInformationProcess(
463 IN HANDLE ProcessHandle
,
464 IN PROCESSINFOCLASS ProcessInformationClass
,
465 OUT PVOID ProcessInformation
,
466 IN ULONG ProcessInformationLength
,
467 OUT PULONG ReturnLength OPTIONAL
474 NtQueryInformationThread(
475 IN HANDLE ThreadHandle
,
476 IN THREADINFOCLASS ThreadInformationClass
,
477 OUT PVOID ThreadInformation
,
478 IN ULONG ThreadInformationLength
,
479 OUT PULONG ReturnLength
485 NtRegisterThreadTerminatePort(
486 HANDLE TerminationPort
493 IN HANDLE ThreadHandle
,
494 OUT PULONG SuspendCount
501 IN HANDLE ProcessHandle
507 NtSetInformationJobObject(
509 JOBOBJECTINFOCLASS JobInformationClass
,
510 PVOID JobInformation
,
511 ULONG JobInformationLength
517 NtSetInformationProcess(
518 IN HANDLE ProcessHandle
,
519 IN PROCESSINFOCLASS ProcessInformationClass
,
520 IN PVOID ProcessInformation
,
521 IN ULONG ProcessInformationLength
527 NtSetInformationThread(
528 IN HANDLE ThreadHandle
,
529 IN THREADINFOCLASS ThreadInformationClass
,
530 IN PVOID ThreadInformation
,
531 IN ULONG ThreadInformationLength
538 IN HANDLE ProcessHandle
545 IN HANDLE ThreadHandle
,
546 IN PULONG PreviousSuspendCount
553 IN HANDLE ProcessHandle
,
554 IN NTSTATUS ExitStatus
561 IN HANDLE ThreadHandle
,
562 IN NTSTATUS ExitStatus
568 NtTerminateJobObject(
577 IN HANDLE ThreadHandle
,
578 OUT PULONG SuspendCount
585 IN HANDLE ThreadHandle
591 ZwAssignProcessToJobObject(
601 ACCESS_MASK DesiredAccess
,
602 POBJECT_ATTRIBUTES ObjectAttributes
609 OUT PHANDLE ProcessHandle
,
610 IN ACCESS_MASK DesiredAccess
,
611 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
612 IN HANDLE ParentProcess
,
613 IN BOOLEAN InheritObjectTable
,
614 IN HANDLE SectionHandle OPTIONAL
,
615 IN HANDLE DebugPort OPTIONAL
,
616 IN HANDLE ExceptionPort OPTIONAL
623 OUT PHANDLE ThreadHandle
,
624 IN ACCESS_MASK DesiredAccess
,
625 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
626 IN HANDLE ProcessHandle
,
627 OUT PCLIENT_ID ClientId
,
628 IN PCONTEXT ThreadContext
,
629 IN PINITIAL_TEB UserStack
,
630 IN BOOLEAN CreateSuspended
637 IN HANDLE ThreadHandle
,
638 IN HANDLE ThreadToImpersonate
,
639 IN PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService
646 IN HANDLE ProcessHandle
,
647 IN HANDLE JobHandle OPTIONAL
654 OUT PHANDLE ProcessHandle
,
655 IN ACCESS_MASK DesiredAccess
,
656 IN POBJECT_ATTRIBUTES ObjectAttributes
,
657 IN PCLIENT_ID ClientId
664 OUT PHANDLE ThreadHandle
,
665 IN ACCESS_MASK DesiredAccess
,
666 IN POBJECT_ATTRIBUTES ObjectAttributes
,
667 IN PCLIENT_ID ClientId
674 IN HANDLE ThreadHandle
,
675 IN ACCESS_MASK DesiredAccess
,
676 IN BOOLEAN OpenAsSelf
,
677 OUT PHANDLE TokenHandle
684 IN HANDLE ThreadHandle
,
685 IN ACCESS_MASK DesiredAccess
,
686 IN BOOLEAN OpenAsSelf
,
687 IN ULONG HandleAttributes
,
688 OUT PHANDLE TokenHandle
694 ZwQueryInformationJobObject(
696 JOBOBJECTINFOCLASS JobInformationClass
,
697 PVOID JobInformation
,
698 ULONG JobInformationLength
,
706 ZwQueryInformationProcess(
707 IN HANDLE ProcessHandle
,
708 IN PROCESSINFOCLASS ProcessInformationClass
,
709 OUT PVOID ProcessInformation
,
710 IN ULONG ProcessInformationLength
,
711 OUT PULONG ReturnLength OPTIONAL
718 ZwQueryInformationThread(
719 IN HANDLE ThreadHandle
,
720 IN THREADINFOCLASS ThreadInformationClass
,
721 OUT PVOID ThreadInformation
,
722 IN ULONG ThreadInformationLength
,
723 OUT PULONG ReturnLength
729 ZwRegisterThreadTerminatePort(
730 HANDLE TerminationPort
737 IN HANDLE ThreadHandle
,
738 OUT PULONG SuspendCount
745 IN HANDLE ProcessHandle
751 ZwSetInformationJobObject(
753 JOBOBJECTINFOCLASS JobInformationClass
,
754 PVOID JobInformation
,
755 ULONG JobInformationLength
761 ZwSetInformationProcess(
762 IN HANDLE ProcessHandle
,
763 IN PROCESSINFOCLASS ProcessInformationClass
,
764 IN PVOID ProcessInformation
,
765 IN ULONG ProcessInformationLength
771 ZwSetInformationThread(
772 IN HANDLE ThreadHandle
,
773 IN THREADINFOCLASS ThreadInformationClass
,
774 IN PVOID ThreadInformation
,
775 IN ULONG ThreadInformationLength
782 IN HANDLE ProcessHandle
789 IN HANDLE ThreadHandle
,
790 IN PULONG PreviousSuspendCount
797 IN HANDLE ProcessHandle
,
798 IN NTSTATUS ExitStatus
805 IN HANDLE ThreadHandle
,
806 IN NTSTATUS ExitStatus
812 ZwTerminateJobObject(