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(
91 PsGetThreadHardErrorsAreDisabled(
98 PsSetThreadHardErrorsAreDisabled(
106 PsEstablishWin32Callouts(
107 PWIN32_CALLOUTS_FPNS CalloutData
113 PsReturnProcessNonPagedPoolQuota(
114 IN PEPROCESS Process
,
119 // Process Impersonation Functions
124 PsRevertThreadToSelf(
134 PsLookupProcessThreadByCid(
136 OUT PEPROCESS
*Process OPTIONAL
,
142 PsIsProtectedProcess(
160 IN PEPROCESS Process
,
161 IN POOL_TYPE PoolType
,
168 PsChargeProcessNonPagedPoolQuota(
169 IN PEPROCESS Process
,
176 PsChargeProcessPagedPoolQuota(
177 IN PEPROCESS Process
,
184 PsChargeProcessPoolQuota(
185 IN PEPROCESS Process
,
186 IN POOL_TYPE PoolType
,
194 IN PEPROCESS Process
,
195 IN POOL_TYPE PoolType
,
202 PsReturnProcessNonPagedPoolQuota(
203 IN PEPROCESS Process
,
210 PsReturnProcessPagedPoolQuota(
211 IN PEPROCESS Process
,
224 IN HANDLE ThreadHandle
,
225 OUT PULONG SuspendCount
228 typedef ULONG APPHELPCACHESERVICECLASS
;
232 NtApphelpCacheControl(
233 IN APPHELPCACHESERVICECLASS Service
,
241 IN HANDLE ThreadHandle
247 NtAssignProcessToJobObject(
257 ACCESS_MASK DesiredAccess
,
258 POBJECT_ATTRIBUTES ObjectAttributes
265 IN PJOB_SET_ARRAY UserJobSet
,
273 OUT PHANDLE ProcessHandle
,
274 IN ACCESS_MASK DesiredAccess
,
275 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
276 IN HANDLE ParentProcess
,
277 IN BOOLEAN InheritObjectTable
,
278 IN HANDLE SectionHandle OPTIONAL
,
279 IN HANDLE DebugPort OPTIONAL
,
280 IN HANDLE ExceptionPort OPTIONAL
287 OUT PHANDLE ProcessHandle
,
288 IN ACCESS_MASK DesiredAccess
,
289 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
290 IN HANDLE ParentProcess
,
292 IN HANDLE SectionHandle OPTIONAL
,
293 IN HANDLE DebugPort OPTIONAL
,
294 IN HANDLE ExceptionPort OPTIONAL
,
302 OUT PHANDLE ThreadHandle
,
303 IN ACCESS_MASK DesiredAccess
,
304 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
305 IN HANDLE ProcessHandle
,
306 OUT PCLIENT_ID ClientId
,
307 IN PCONTEXT ThreadContext
,
308 IN PINITIAL_TEB UserStack
,
309 IN BOOLEAN CreateSuspended
312 #ifndef NTOS_MODE_USER
319 return (PTEB
)(ULONG_PTR
)__readfsdword(0x18);
323 __asm__
__volatile__ (
324 "movl %%fs:0x18, %0\n"
332 #elif defined (_M_AMD64)
333 FORCEINLINE
struct _TEB
* NtCurrentTeb(VOID
)
335 return (struct _TEB
*)__readgsqword(FIELD_OFFSET(NT_TIB
, Self
));
339 struct _TEB
* NtCurrentTeb(void);
346 IN HANDLE ThreadHandle
,
347 IN HANDLE ThreadToImpersonate
,
348 IN PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService
355 IN HANDLE ProcessHandle
,
356 IN HANDLE JobHandle OPTIONAL
363 OUT PHANDLE ProcessHandle
,
364 IN ACCESS_MASK DesiredAccess
,
365 IN POBJECT_ATTRIBUTES ObjectAttributes
,
366 IN PCLIENT_ID ClientId
373 OUT PHANDLE ThreadHandle
,
374 IN ACCESS_MASK DesiredAccess
,
375 IN POBJECT_ATTRIBUTES ObjectAttributes
,
376 IN PCLIENT_ID ClientId
383 IN HANDLE ThreadHandle
,
384 IN ACCESS_MASK DesiredAccess
,
385 IN BOOLEAN OpenAsSelf
,
386 OUT PHANDLE TokenHandle
393 IN HANDLE ThreadHandle
,
394 IN ACCESS_MASK DesiredAccess
,
395 IN BOOLEAN OpenAsSelf
,
396 IN ULONG HandleAttributes
,
397 OUT PHANDLE TokenHandle
403 NtQueryInformationJobObject(
405 JOBOBJECTINFOCLASS JobInformationClass
,
406 PVOID JobInformation
,
407 ULONG JobInformationLength
,
415 NtQueryInformationProcess(
416 IN HANDLE ProcessHandle
,
417 IN PROCESSINFOCLASS ProcessInformationClass
,
418 OUT PVOID ProcessInformation
,
419 IN ULONG ProcessInformationLength
,
420 OUT PULONG ReturnLength OPTIONAL
427 NtQueryInformationThread(
428 IN HANDLE ThreadHandle
,
429 IN THREADINFOCLASS ThreadInformationClass
,
430 OUT PVOID ThreadInformation
,
431 IN ULONG ThreadInformationLength
,
432 OUT PULONG ReturnLength
438 NtRegisterThreadTerminatePort(
439 HANDLE TerminationPort
446 IN HANDLE ThreadHandle
,
447 OUT PULONG SuspendCount
454 IN HANDLE ProcessHandle
460 NtSetInformationJobObject(
462 JOBOBJECTINFOCLASS JobInformationClass
,
463 PVOID JobInformation
,
464 ULONG JobInformationLength
470 NtSetInformationProcess(
471 IN HANDLE ProcessHandle
,
472 IN PROCESSINFOCLASS ProcessInformationClass
,
473 IN PVOID ProcessInformation
,
474 IN ULONG ProcessInformationLength
480 NtSetInformationThread(
481 IN HANDLE ThreadHandle
,
482 IN THREADINFOCLASS ThreadInformationClass
,
483 IN PVOID ThreadInformation
,
484 IN ULONG ThreadInformationLength
491 IN HANDLE ProcessHandle
498 IN HANDLE ThreadHandle
,
499 IN PULONG PreviousSuspendCount
506 IN HANDLE ProcessHandle
,
507 IN NTSTATUS ExitStatus
514 IN HANDLE ThreadHandle
,
515 IN NTSTATUS ExitStatus
521 NtTerminateJobObject(
530 IN HANDLE ThreadHandle
,
531 OUT PULONG SuspendCount
538 IN HANDLE ThreadHandle
544 ZwAssignProcessToJobObject(
554 ACCESS_MASK DesiredAccess
,
555 POBJECT_ATTRIBUTES ObjectAttributes
562 OUT PHANDLE ProcessHandle
,
563 IN ACCESS_MASK DesiredAccess
,
564 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
565 IN HANDLE ParentProcess
,
566 IN BOOLEAN InheritObjectTable
,
567 IN HANDLE SectionHandle OPTIONAL
,
568 IN HANDLE DebugPort OPTIONAL
,
569 IN HANDLE ExceptionPort OPTIONAL
576 OUT PHANDLE ThreadHandle
,
577 IN ACCESS_MASK DesiredAccess
,
578 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
579 IN HANDLE ProcessHandle
,
580 OUT PCLIENT_ID ClientId
,
581 IN PCONTEXT ThreadContext
,
582 IN PINITIAL_TEB UserStack
,
583 IN BOOLEAN CreateSuspended
590 IN HANDLE ThreadHandle
,
591 IN HANDLE ThreadToImpersonate
,
592 IN PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService
599 IN HANDLE ProcessHandle
,
600 IN HANDLE JobHandle OPTIONAL
607 OUT PHANDLE ProcessHandle
,
608 IN ACCESS_MASK DesiredAccess
,
609 IN POBJECT_ATTRIBUTES ObjectAttributes
,
610 IN PCLIENT_ID ClientId
617 OUT PHANDLE ThreadHandle
,
618 IN ACCESS_MASK DesiredAccess
,
619 IN POBJECT_ATTRIBUTES ObjectAttributes
,
620 IN PCLIENT_ID ClientId
627 IN HANDLE ThreadHandle
,
628 IN ACCESS_MASK DesiredAccess
,
629 IN BOOLEAN OpenAsSelf
,
630 OUT PHANDLE TokenHandle
637 IN HANDLE ThreadHandle
,
638 IN ACCESS_MASK DesiredAccess
,
639 IN BOOLEAN OpenAsSelf
,
640 IN ULONG HandleAttributes
,
641 OUT PHANDLE TokenHandle
647 ZwQueryInformationJobObject(
649 JOBOBJECTINFOCLASS JobInformationClass
,
650 PVOID JobInformation
,
651 ULONG JobInformationLength
,
659 ZwQueryInformationProcess(
660 IN HANDLE ProcessHandle
,
661 IN PROCESSINFOCLASS ProcessInformationClass
,
662 OUT PVOID ProcessInformation
,
663 IN ULONG ProcessInformationLength
,
664 OUT PULONG ReturnLength OPTIONAL
671 ZwQueryInformationThread(
672 IN HANDLE ThreadHandle
,
673 IN THREADINFOCLASS ThreadInformationClass
,
674 OUT PVOID ThreadInformation
,
675 IN ULONG ThreadInformationLength
,
676 OUT PULONG ReturnLength
682 ZwRegisterThreadTerminatePort(
683 HANDLE TerminationPort
690 IN HANDLE ThreadHandle
,
691 OUT PULONG SuspendCount
698 IN HANDLE ProcessHandle
704 ZwSetInformationJobObject(
706 JOBOBJECTINFOCLASS JobInformationClass
,
707 PVOID JobInformation
,
708 ULONG JobInformationLength
714 ZwSetInformationProcess(
715 IN HANDLE ProcessHandle
,
716 IN PROCESSINFOCLASS ProcessInformationClass
,
717 IN PVOID ProcessInformation
,
718 IN ULONG ProcessInformationLength
724 ZwSetInformationThread(
725 IN HANDLE ThreadHandle
,
726 IN THREADINFOCLASS ThreadInformationClass
,
727 IN PVOID ThreadInformation
,
728 IN ULONG ThreadInformationLength
735 IN HANDLE ProcessHandle
742 IN HANDLE ThreadHandle
,
743 IN PULONG PreviousSuspendCount
750 IN HANDLE ProcessHandle
,
751 IN NTSTATUS ExitStatus
758 IN HANDLE ThreadHandle
,
759 IN NTSTATUS ExitStatus
765 ZwTerminateJobObject(