3 * Copyright (C) 2002 ReactOS Team
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 * COPYRIGHT: See COPYING in the top level directory
22 * PROJECT: ReactOS kernel
23 * FILE: ntoskrnl/ps/win32.c
24 * PURPOSE: win32k support
25 * PROGRAMMER: Eric Kohl (ekohl@rz-online.de)
30 /* INCLUDES ****************************************************************/
32 #include <ddk/ntddk.h>
33 #include <internal/ps.h>
34 #include <napi/win32.h>
36 /* TYPES *******************************************************************/
38 /* GLOBALS ******************************************************************/
40 static PW32_PROCESS_CALLBACK PspWin32ProcessCallback = NULL;
41 static PW32_THREAD_CALLBACK PspWin32ThreadCallback = NULL;
42 static ULONG PspWin32ProcessSize = 0;
43 static ULONG PspWin32ThreadSize = 0;
45 /* FUNCTIONS ***************************************************************/
48 PsGetWin32Thread(VOID)
50 return(PsGetCurrentThread()->Win32Thread);
54 PsGetWin32Process(VOID)
56 return(PsGetCurrentProcess()->Win32Process);
60 PsCreateWin32Process(PEPROCESS Process)
62 if (Process->Win32Process != NULL)
63 return(STATUS_SUCCESS);
65 Process->Win32Process = ExAllocatePool(NonPagedPool,
67 if (Process->Win32Process == NULL)
68 return(STATUS_NO_MEMORY);
70 RtlZeroMemory(Process->Win32Process,
73 return(STATUS_SUCCESS);
81 PsEstablishWin32Callouts (PW32_PROCESS_CALLBACK W32ProcessCallback,
82 PW32_THREAD_CALLBACK W32ThreadCallback,
88 PspWin32ProcessCallback = W32ProcessCallback;
89 PspWin32ThreadCallback = W32ThreadCallback;
91 PspWin32ProcessSize = W32ProcessSize;
92 PspWin32ThreadSize = W32ThreadSize;
97 PsInitWin32Thread (PETHREAD Thread)
101 Process = Thread->ThreadsProcess;
103 if (Process->Win32Process == NULL)
105 Process->Win32Process = ExAllocatePool (NonPagedPool,
106 PspWin32ProcessSize);
107 if (Process->Win32Process == NULL)
108 return STATUS_NO_MEMORY;
110 RtlZeroMemory (Process->Win32Process,
111 PspWin32ProcessSize);
113 if (PspWin32ProcessCallback != NULL)
115 PspWin32ProcessCallback (Process, TRUE);
119 if (Thread->Win32Thread == NULL)
121 Thread->Win32Thread = ExAllocatePool (NonPagedPool,
123 if (Thread->Win32Thread == NULL)
124 return STATUS_NO_MEMORY;
126 RtlZeroMemory (Thread->Win32Thread,
129 if (PspWin32ThreadCallback != NULL)
131 PspWin32ThreadCallback (Thread, TRUE);
135 return(STATUS_SUCCESS);
140 PsTerminateWin32Process (PEPROCESS Process)
142 if (Process->Win32Process == NULL)
145 if (PspWin32ProcessCallback != NULL)
147 PspWin32ProcessCallback (Process, FALSE);
150 ExFreePool (Process->Win32Process);
155 PsTerminateWin32Thread (PETHREAD Thread)
157 if (Thread->Win32Thread == NULL)
160 if (PspWin32ThreadCallback != NULL)
162 PspWin32ThreadCallback (Thread, FALSE);
165 ExFreePool (Thread->Win32Thread);