[PSDK]
[reactos.git] / include / ndk / psfuncs.h
1 /*++ NDK Version: 0098
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4
5 Header Name:
6
7 psfuncs.h
8
9 Abstract:
10
11 Function definitions for the Process Manager
12
13 Author:
14
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
16
17 --*/
18
19 #ifndef _PSFUNCS_H
20 #define _PSFUNCS_H
21
22 //
23 // Dependencies
24 //
25 #include <umtypes.h>
26 #include <pstypes.h>
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 #ifndef NTOS_MODE_USER
33
34 //
35 // Win32K Process/Thread Functions
36 //
37 NTKERNELAPI
38 PVOID
39 NTAPI
40 PsGetCurrentThreadWin32Thread(
41 VOID
42 );
43
44 NTKERNELAPI
45 PVOID
46 NTAPI
47 PsGetCurrentProcessWin32Process(
48 VOID
49 );
50
51 NTKERNELAPI
52 PVOID
53 NTAPI
54 PsGetProcessWin32Process(
55 PEPROCESS Process
56 );
57
58 NTKERNELAPI
59 VOID
60 NTAPI
61 PsSetProcessWin32Process(
62 PEPROCESS Process,
63 PVOID Win32Process
64 );
65
66 NTKERNELAPI
67 VOID
68 NTAPI
69 PsSetThreadWin32Thread(
70 PETHREAD Thread,
71 PVOID Win32Thread
72 );
73
74 NTKERNELAPI
75 PVOID
76 NTAPI
77 PsGetThreadWin32Thread(
78 PETHREAD Thread
79 );
80
81 NTKERNELAPI
82 PTEB
83 NTAPI
84 PsGetThreadTeb(
85 IN PETHREAD Thread
86 );
87
88 NTKERNELAPI
89 HANDLE
90 NTAPI
91 PsGetThreadId(
92 IN PETHREAD Thread
93 );
94
95 NTKERNELAPI
96 BOOLEAN
97 NTAPI
98 PsGetThreadHardErrorsAreDisabled(
99 PETHREAD Thread
100 );
101
102 NTKERNELAPI
103 VOID
104 NTAPI
105 PsSetThreadHardErrorsAreDisabled(
106 PETHREAD Thread,
107 IN BOOLEAN Disabled
108 );
109
110 NTKERNELAPI
111 VOID
112 NTAPI
113 PsEstablishWin32Callouts(
114 PWIN32_CALLOUTS_FPNS CalloutData
115 );
116
117 NTKERNELAPI
118 VOID
119 NTAPI
120 PsReturnProcessNonPagedPoolQuota(
121 IN PEPROCESS Process,
122 IN SIZE_T Amount
123 );
124
125 //
126 // Process Impersonation Functions
127 //
128 NTKERNELAPI
129 VOID
130 NTAPI
131 PsRevertThreadToSelf(
132 IN PETHREAD Thread
133 );
134
135 //
136 // Misc. Functions
137 //
138 NTKERNELAPI
139 NTSTATUS
140 NTAPI
141 PsLookupProcessThreadByCid(
142 IN PCLIENT_ID Cid,
143 OUT PEPROCESS *Process OPTIONAL,
144 OUT PETHREAD *Thread
145 );
146
147 BOOLEAN
148 NTAPI
149 PsIsProtectedProcess(
150 IN PEPROCESS Process
151 );
152
153 NTKERNELAPI
154 BOOLEAN
155 NTAPI
156 PsIsSystemProcess(
157 IN PEPROCESS Process
158 );
159
160 VOID
161 NTAPI
162 PsSetProcessPriorityByClass(
163 IN PEPROCESS Process,
164 IN PSPROCESSPRIORITYMODE Type
165 );
166
167 HANDLE
168 NTAPI
169 PsGetProcessInheritedFromUniqueProcessId(
170 IN PEPROCESS Process
171 );
172
173 //
174 // Quota Functions
175 //
176 NTKERNELAPI
177 VOID
178 NTAPI
179 PsChargePoolQuota(
180 IN PEPROCESS Process,
181 IN POOL_TYPE PoolType,
182 IN SIZE_T Amount
183 );
184
185 NTKERNELAPI
186 NTSTATUS
187 NTAPI
188 PsChargeProcessNonPagedPoolQuota(
189 IN PEPROCESS Process,
190 IN SIZE_T Amount
191 );
192
193 NTKERNELAPI
194 NTSTATUS
195 NTAPI
196 PsChargeProcessPagedPoolQuota(
197 IN PEPROCESS Process,
198 IN SIZE_T Amount
199 );
200
201 NTKERNELAPI
202 NTSTATUS
203 NTAPI
204 PsChargeProcessPoolQuota(
205 IN PEPROCESS Process,
206 IN POOL_TYPE PoolType,
207 IN SIZE_T Amount
208 );
209
210 NTKERNELAPI
211 VOID
212 NTAPI
213 PsReturnPoolQuota(
214 IN PEPROCESS Process,
215 IN POOL_TYPE PoolType,
216 IN SIZE_T Amount
217 );
218
219 NTKERNELAPI
220 VOID
221 NTAPI
222 PsReturnProcessNonPagedPoolQuota(
223 IN PEPROCESS Process,
224 IN SIZE_T Amount
225 );
226
227 NTKERNELAPI
228 VOID
229 NTAPI
230 PsReturnProcessPagedPoolQuota(
231 IN PEPROCESS Process,
232 IN SIZE_T Amount
233 );
234
235 #endif
236
237 //
238 // Native Calls
239 //
240 NTSYSCALLAPI
241 NTSTATUS
242 NTAPI
243 NtAlertResumeThread(
244 IN HANDLE ThreadHandle,
245 OUT PULONG SuspendCount
246 );
247
248 typedef ULONG APPHELPCACHESERVICECLASS;
249 NTSYSCALLAPI
250 NTSTATUS
251 NTAPI
252 NtApphelpCacheControl(
253 IN APPHELPCACHESERVICECLASS Service,
254 IN PVOID ServiceData
255 );
256
257 NTSYSCALLAPI
258 NTSTATUS
259 NTAPI
260 NtAlertThread(
261 IN HANDLE ThreadHandle
262 );
263
264 NTSYSCALLAPI
265 NTSTATUS
266 NTAPI
267 NtAssignProcessToJobObject(
268 HANDLE JobHandle,
269 HANDLE ProcessHandle
270 );
271
272 NTSYSCALLAPI
273 NTSTATUS
274 NTAPI
275 NtCreateJobObject(
276 PHANDLE JobHandle,
277 ACCESS_MASK DesiredAccess,
278 POBJECT_ATTRIBUTES ObjectAttributes
279 );
280
281 NTSTATUS
282 NTAPI
283 NtCreateJobSet(
284 IN ULONG NumJob,
285 IN PJOB_SET_ARRAY UserJobSet,
286 IN ULONG Flags
287 );
288
289 NTSYSCALLAPI
290 NTSTATUS
291 NTAPI
292 NtCreateProcess(
293 OUT PHANDLE ProcessHandle,
294 IN ACCESS_MASK DesiredAccess,
295 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
296 IN HANDLE ParentProcess,
297 IN BOOLEAN InheritObjectTable,
298 IN HANDLE SectionHandle OPTIONAL,
299 IN HANDLE DebugPort OPTIONAL,
300 IN HANDLE ExceptionPort OPTIONAL
301 );
302
303 NTSYSCALLAPI
304 NTSTATUS
305 NTAPI
306 NtCreateProcessEx(
307 OUT PHANDLE ProcessHandle,
308 IN ACCESS_MASK DesiredAccess,
309 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
310 IN HANDLE ParentProcess,
311 IN ULONG Flags,
312 IN HANDLE SectionHandle OPTIONAL,
313 IN HANDLE DebugPort OPTIONAL,
314 IN HANDLE ExceptionPort OPTIONAL,
315 IN BOOLEAN InJob
316 );
317
318 NTSYSCALLAPI
319 NTSTATUS
320 NTAPI
321 NtCreateThread(
322 OUT PHANDLE ThreadHandle,
323 IN ACCESS_MASK DesiredAccess,
324 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
325 IN HANDLE ProcessHandle,
326 OUT PCLIENT_ID ClientId,
327 IN PCONTEXT ThreadContext,
328 IN PINITIAL_TEB UserStack,
329 IN BOOLEAN CreateSuspended
330 );
331
332 #ifndef NTOS_MODE_USER
333 #if defined(_M_IX86)
334 FORCEINLINE
335 PTEB
336 NtCurrentTeb(VOID)
337 {
338 #ifndef __GNUC__
339 return (PTEB)(ULONG_PTR)__readfsdword(0x18);
340 #else
341 struct _TEB *ret;
342
343 __asm__ __volatile__ (
344 "movl %%fs:0x18, %0\n"
345 : "=r" (ret)
346 : /* no inputs */
347 );
348
349 return ret;
350 #endif
351 }
352 #elif defined (_M_AMD64)
353 FORCEINLINE struct _TEB * NtCurrentTeb(VOID)
354 {
355 return (struct _TEB *)__readgsqword(FIELD_OFFSET(NT_TIB, Self));
356 }
357 #endif
358 #else
359 struct _TEB * NtCurrentTeb(void);
360 #endif
361
362 NTSYSCALLAPI
363 NTSTATUS
364 NTAPI
365 NtImpersonateThread(
366 IN HANDLE ThreadHandle,
367 IN HANDLE ThreadToImpersonate,
368 IN PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService
369 );
370
371 NTSYSCALLAPI
372 NTSTATUS
373 NTAPI
374 NtIsProcessInJob(
375 IN HANDLE ProcessHandle,
376 IN HANDLE JobHandle OPTIONAL
377 );
378
379 NTSYSCALLAPI
380 NTSTATUS
381 NTAPI
382 NtOpenProcess(
383 OUT PHANDLE ProcessHandle,
384 IN ACCESS_MASK DesiredAccess,
385 IN POBJECT_ATTRIBUTES ObjectAttributes,
386 IN PCLIENT_ID ClientId
387 );
388
389 NTSYSCALLAPI
390 NTSTATUS
391 NTAPI
392 NtOpenThread(
393 OUT PHANDLE ThreadHandle,
394 IN ACCESS_MASK DesiredAccess,
395 IN POBJECT_ATTRIBUTES ObjectAttributes,
396 IN PCLIENT_ID ClientId
397 );
398
399 NTSYSCALLAPI
400 NTSTATUS
401 NTAPI
402 NtOpenThreadToken(
403 IN HANDLE ThreadHandle,
404 IN ACCESS_MASK DesiredAccess,
405 IN BOOLEAN OpenAsSelf,
406 OUT PHANDLE TokenHandle
407 );
408
409 NTSYSCALLAPI
410 NTSTATUS
411 NTAPI
412 NtOpenThreadTokenEx(
413 IN HANDLE ThreadHandle,
414 IN ACCESS_MASK DesiredAccess,
415 IN BOOLEAN OpenAsSelf,
416 IN ULONG HandleAttributes,
417 OUT PHANDLE TokenHandle
418 );
419
420 NTSYSCALLAPI
421 NTSTATUS
422 NTAPI
423 NtQueryInformationJobObject(
424 HANDLE JobHandle,
425 JOBOBJECTINFOCLASS JobInformationClass,
426 PVOID JobInformation,
427 ULONG JobInformationLength,
428 PULONG ReturnLength
429 );
430
431 #ifndef _NTDDK_
432 NTSYSCALLAPI
433 NTSTATUS
434 NTAPI
435 NtQueryInformationProcess(
436 IN HANDLE ProcessHandle,
437 IN PROCESSINFOCLASS ProcessInformationClass,
438 OUT PVOID ProcessInformation,
439 IN ULONG ProcessInformationLength,
440 OUT PULONG ReturnLength OPTIONAL
441 );
442 #endif
443
444 NTSYSCALLAPI
445 NTSTATUS
446 NTAPI
447 NtQueryInformationThread(
448 IN HANDLE ThreadHandle,
449 IN THREADINFOCLASS ThreadInformationClass,
450 OUT PVOID ThreadInformation,
451 IN ULONG ThreadInformationLength,
452 OUT PULONG ReturnLength
453 );
454
455 NTSYSCALLAPI
456 NTSTATUS
457 NTAPI
458 NtRegisterThreadTerminatePort(
459 HANDLE TerminationPort
460 );
461
462 NTSYSCALLAPI
463 NTSTATUS
464 NTAPI
465 NtResumeThread(
466 IN HANDLE ThreadHandle,
467 OUT PULONG SuspendCount
468 );
469
470 NTSYSCALLAPI
471 NTSTATUS
472 NTAPI
473 NtResumeProcess(
474 IN HANDLE ProcessHandle
475 );
476
477 NTSYSCALLAPI
478 NTSTATUS
479 NTAPI
480 NtSetInformationJobObject(
481 HANDLE JobHandle,
482 JOBOBJECTINFOCLASS JobInformationClass,
483 PVOID JobInformation,
484 ULONG JobInformationLength
485 );
486
487 NTSYSCALLAPI
488 NTSTATUS
489 NTAPI
490 NtSetInformationProcess(
491 IN HANDLE ProcessHandle,
492 IN PROCESSINFOCLASS ProcessInformationClass,
493 IN PVOID ProcessInformation,
494 IN ULONG ProcessInformationLength
495 );
496
497 NTSYSCALLAPI
498 NTSTATUS
499 NTAPI
500 NtSetInformationThread(
501 IN HANDLE ThreadHandle,
502 IN THREADINFOCLASS ThreadInformationClass,
503 IN PVOID ThreadInformation,
504 IN ULONG ThreadInformationLength
505 );
506
507 NTSYSCALLAPI
508 NTSTATUS
509 NTAPI
510 NtSuspendProcess(
511 IN HANDLE ProcessHandle
512 );
513
514 NTSYSCALLAPI
515 NTSTATUS
516 NTAPI
517 NtSuspendThread(
518 IN HANDLE ThreadHandle,
519 IN PULONG PreviousSuspendCount
520 );
521
522 NTSYSCALLAPI
523 NTSTATUS
524 NTAPI
525 NtTerminateProcess(
526 IN HANDLE ProcessHandle,
527 IN NTSTATUS ExitStatus
528 );
529
530 NTSYSCALLAPI
531 NTSTATUS
532 NTAPI
533 NtTerminateThread(
534 IN HANDLE ThreadHandle,
535 IN NTSTATUS ExitStatus
536 );
537
538 NTSYSCALLAPI
539 NTSTATUS
540 NTAPI
541 NtTerminateJobObject(
542 HANDLE JobHandle,
543 NTSTATUS ExitStatus
544 );
545
546 NTSYSAPI
547 NTSTATUS
548 NTAPI
549 ZwAlertResumeThread(
550 IN HANDLE ThreadHandle,
551 OUT PULONG SuspendCount
552 );
553
554 NTSYSAPI
555 NTSTATUS
556 NTAPI
557 ZwAlertThread(
558 IN HANDLE ThreadHandle
559 );
560
561 NTSYSAPI
562 NTSTATUS
563 NTAPI
564 ZwAssignProcessToJobObject(
565 HANDLE JobHandle,
566 HANDLE ProcessHandle
567 );
568
569 NTSYSAPI
570 NTSTATUS
571 NTAPI
572 ZwCreateJobObject(
573 PHANDLE JobHandle,
574 ACCESS_MASK DesiredAccess,
575 POBJECT_ATTRIBUTES ObjectAttributes
576 );
577
578 NTSYSAPI
579 NTSTATUS
580 NTAPI
581 ZwCreateProcess(
582 OUT PHANDLE ProcessHandle,
583 IN ACCESS_MASK DesiredAccess,
584 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
585 IN HANDLE ParentProcess,
586 IN BOOLEAN InheritObjectTable,
587 IN HANDLE SectionHandle OPTIONAL,
588 IN HANDLE DebugPort OPTIONAL,
589 IN HANDLE ExceptionPort OPTIONAL
590 );
591
592 NTSYSAPI
593 NTSTATUS
594 NTAPI
595 ZwCreateThread(
596 OUT PHANDLE ThreadHandle,
597 IN ACCESS_MASK DesiredAccess,
598 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
599 IN HANDLE ProcessHandle,
600 OUT PCLIENT_ID ClientId,
601 IN PCONTEXT ThreadContext,
602 IN PINITIAL_TEB UserStack,
603 IN BOOLEAN CreateSuspended
604 );
605
606 NTSYSAPI
607 NTSTATUS
608 NTAPI
609 ZwImpersonateThread(
610 IN HANDLE ThreadHandle,
611 IN HANDLE ThreadToImpersonate,
612 IN PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService
613 );
614
615 NTSYSAPI
616 NTSTATUS
617 NTAPI
618 ZwIsProcessInJob(
619 IN HANDLE ProcessHandle,
620 IN HANDLE JobHandle OPTIONAL
621 );
622
623 NTSYSAPI
624 NTSTATUS
625 NTAPI
626 ZwOpenProcess(
627 OUT PHANDLE ProcessHandle,
628 IN ACCESS_MASK DesiredAccess,
629 IN POBJECT_ATTRIBUTES ObjectAttributes,
630 IN PCLIENT_ID ClientId
631 );
632
633 NTSYSAPI
634 NTSTATUS
635 NTAPI
636 ZwOpenThread(
637 OUT PHANDLE ThreadHandle,
638 IN ACCESS_MASK DesiredAccess,
639 IN POBJECT_ATTRIBUTES ObjectAttributes,
640 IN PCLIENT_ID ClientId
641 );
642
643 NTSYSAPI
644 NTSTATUS
645 NTAPI
646 ZwOpenThreadToken(
647 IN HANDLE ThreadHandle,
648 IN ACCESS_MASK DesiredAccess,
649 IN BOOLEAN OpenAsSelf,
650 OUT PHANDLE TokenHandle
651 );
652
653 NTSYSAPI
654 NTSTATUS
655 NTAPI
656 ZwOpenThreadTokenEx(
657 IN HANDLE ThreadHandle,
658 IN ACCESS_MASK DesiredAccess,
659 IN BOOLEAN OpenAsSelf,
660 IN ULONG HandleAttributes,
661 OUT PHANDLE TokenHandle
662 );
663
664 NTSYSAPI
665 NTSTATUS
666 NTAPI
667 ZwQueryInformationJobObject(
668 HANDLE JobHandle,
669 JOBOBJECTINFOCLASS JobInformationClass,
670 PVOID JobInformation,
671 ULONG JobInformationLength,
672 PULONG ReturnLength
673 );
674
675 #ifndef _NTDDK_
676 NTSYSAPI
677 NTSTATUS
678 NTAPI
679 ZwQueryInformationProcess(
680 IN HANDLE ProcessHandle,
681 IN PROCESSINFOCLASS ProcessInformationClass,
682 OUT PVOID ProcessInformation,
683 IN ULONG ProcessInformationLength,
684 OUT PULONG ReturnLength OPTIONAL
685 );
686 #endif
687
688 NTSYSAPI
689 NTSTATUS
690 NTAPI
691 ZwQueryInformationThread(
692 IN HANDLE ThreadHandle,
693 IN THREADINFOCLASS ThreadInformationClass,
694 OUT PVOID ThreadInformation,
695 IN ULONG ThreadInformationLength,
696 OUT PULONG ReturnLength
697 );
698
699 NTSYSAPI
700 NTSTATUS
701 NTAPI
702 ZwRegisterThreadTerminatePort(
703 HANDLE TerminationPort
704 );
705
706 NTSYSAPI
707 NTSTATUS
708 NTAPI
709 ZwResumeThread(
710 IN HANDLE ThreadHandle,
711 OUT PULONG SuspendCount
712 );
713
714 NTSYSAPI
715 NTSTATUS
716 NTAPI
717 ZwResumeProcess(
718 IN HANDLE ProcessHandle
719 );
720
721 NTSYSAPI
722 NTSTATUS
723 NTAPI
724 ZwSetInformationJobObject(
725 HANDLE JobHandle,
726 JOBOBJECTINFOCLASS JobInformationClass,
727 PVOID JobInformation,
728 ULONG JobInformationLength
729 );
730
731 NTSYSAPI
732 NTSTATUS
733 NTAPI
734 ZwSetInformationProcess(
735 IN HANDLE ProcessHandle,
736 IN PROCESSINFOCLASS ProcessInformationClass,
737 IN PVOID ProcessInformation,
738 IN ULONG ProcessInformationLength
739 );
740
741 NTSYSAPI
742 NTSTATUS
743 NTAPI
744 ZwSetInformationThread(
745 IN HANDLE ThreadHandle,
746 IN THREADINFOCLASS ThreadInformationClass,
747 IN PVOID ThreadInformation,
748 IN ULONG ThreadInformationLength
749 );
750
751 NTSYSAPI
752 NTSTATUS
753 NTAPI
754 ZwSuspendProcess(
755 IN HANDLE ProcessHandle
756 );
757
758 NTSYSAPI
759 NTSTATUS
760 NTAPI
761 ZwSuspendThread(
762 IN HANDLE ThreadHandle,
763 IN PULONG PreviousSuspendCount
764 );
765
766 NTSYSAPI
767 NTSTATUS
768 NTAPI
769 ZwTerminateProcess(
770 IN HANDLE ProcessHandle,
771 IN NTSTATUS ExitStatus
772 );
773
774 NTSYSAPI
775 NTSTATUS
776 NTAPI
777 ZwTerminateThread(
778 IN HANDLE ThreadHandle,
779 IN NTSTATUS ExitStatus
780 );
781
782 NTSYSAPI
783 NTSTATUS
784 NTAPI
785 ZwTerminateJobObject(
786 HANDLE JobHandle,
787 NTSTATUS ExitStatus
788 );
789
790 #ifdef __cplusplus
791 }
792 #endif
793
794 #endif