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