[FORMATTING] - Cleanup win32.c

[AUDIT] - Only function of interest is PsConverToGuiThread, heavily documented at:
http://www.windowsitlibrary.com/Content/356/07/1.html
http://www.osronline.com/lists_archive/ntdev/thread4614.html
http://www.i.u-tokyo.ac.jp/edu/training/ss/lecture/new-documents/Lectures/17-Win32K/Win32K.ppt

svn path=/trunk/; revision=23127
This commit is contained in:
Alex Ionescu 2006-07-17 17:32:58 +00:00
parent d0ba1357ee
commit 7ddd4aa708
2 changed files with 37 additions and 50 deletions

View file

@ -310,6 +310,13 @@ KeStartThread(
IN OUT PKTHREAD Thread IN OUT PKTHREAD Thread
); );
PVOID
NTAPI
KeSwitchKernelStack(
IN PVOID StackBase,
IN PVOID StackLimit
);
VOID VOID
STDCALL STDCALL
KeRundownThread(VOID); KeRundownThread(VOID);

View file

@ -1,11 +1,9 @@
/* $Id$ /*
* * PROJECT: ReactOS Kernel
* COPYRIGHT: See COPYING in the top level directory * LICENSE: GPL - See COPYING in the top level directory
* PROJECT: ReactOS kernel
* FILE: ntoskrnl/ps/win32.c * FILE: ntoskrnl/ps/win32.c
* PURPOSE: win32k support * PURPOSE: Process Manager: Win32K Initialization and Support
* * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
* PROGRAMMERS: Eric Kohl (ekohl@rz-online.de)
*/ */
/* INCLUDES ****************************************************************/ /* INCLUDES ****************************************************************/
@ -22,43 +20,7 @@ extern PKWIN32_PARSEMETHOD_CALLOUT ExpWindowStationObjectParse;
extern PKWIN32_DELETEMETHOD_CALLOUT ExpWindowStationObjectDelete; extern PKWIN32_DELETEMETHOD_CALLOUT ExpWindowStationObjectDelete;
extern PKWIN32_DELETEMETHOD_CALLOUT ExpDesktopObjectDelete; extern PKWIN32_DELETEMETHOD_CALLOUT ExpDesktopObjectDelete;
#ifndef ALEX_CB_REWRITE /* PRIVATE FUNCTIONS *********************************************************/
typedef struct _NTW32CALL_SAVED_STATE
{
ULONG_PTR SavedStackLimit;
PVOID SavedStackBase;
PVOID SavedInitialStack;
PVOID CallerResult;
PULONG CallerResultLength;
PNTSTATUS CallbackStatus;
PKTRAP_FRAME SavedTrapFrame;
PVOID SavedCallbackStack;
PVOID SavedExceptionStack;
} NTW32CALL_SAVED_STATE, *PNTW32CALL_SAVED_STATE;
#endif
PVOID
STDCALL
KeSwitchKernelStack(
IN PVOID StackBase,
IN PVOID StackLimit
);
/* FUNCTIONS ***************************************************************/
/*
* @implemented
*/
VOID
STDCALL
PsEstablishWin32Callouts(PWIN32_CALLOUTS_FPNS CalloutData)
{
PspW32ProcessCallout = CalloutData->ProcessCallout;
PspW32ThreadCallout = CalloutData->ThreadCallout;
ExpWindowStationObjectParse = CalloutData->WindowStationParseProcedure;
ExpWindowStationObjectDelete = CalloutData->WindowStationDeleteProcedure;
ExpDesktopObjectDelete = CalloutData->DesktopDeleteProcedure;
}
NTSTATUS NTSTATUS
NTAPI NTAPI
@ -134,6 +96,23 @@ PsConvertToGuiThread(VOID)
return Status; return Status;
} }
/* PUBLIC FUNCTIONS **********************************************************/
/*
* @implemented
*/
VOID
NTAPI
PsEstablishWin32Callouts(IN PWIN32_CALLOUTS_FPNS CalloutData)
{
/* Setup the callback pointers */
PspW32ProcessCallout = CalloutData->ProcessCallout;
PspW32ThreadCallout = CalloutData->ThreadCallout;
ExpWindowStationObjectParse = CalloutData->WindowStationParseProcedure;
ExpWindowStationObjectDelete = CalloutData->WindowStationDeleteProcedure;
ExpDesktopObjectDelete = CalloutData->DesktopDeleteProcedure;
}
NTSTATUS NTSTATUS
STDCALL STDCALL
NtW32Call(IN ULONG RoutineIndex, NtW32Call(IN ULONG RoutineIndex,
@ -145,24 +124,23 @@ NtW32Call(IN ULONG RoutineIndex,
PVOID RetResult; PVOID RetResult;
ULONG RetResultLength; ULONG RetResultLength;
NTSTATUS Status = STATUS_SUCCESS; NTSTATUS Status = STATUS_SUCCESS;
DPRINT("NtW32Call(RoutineIndex %d, Argument %p, ArgumentLength %d)\n",
RoutineIndex, Argument, ArgumentLength);
/* must not be called as KernelMode! */
ASSERT(KeGetPreviousMode() != KernelMode); ASSERT(KeGetPreviousMode() != KernelMode);
/* Enter SEH for probing */
_SEH_TRY _SEH_TRY
{ {
/* Probe arguments */
ProbeForWritePointer(Result); ProbeForWritePointer(Result);
ProbeForWriteUlong(ResultLength); ProbeForWriteUlong(ResultLength);
} }
_SEH_HANDLE _SEH_HANDLE
{ {
/* Get exception code */
Status = _SEH_GetExceptionCode(); Status = _SEH_GetExceptionCode();
} }
_SEH_END; _SEH_END;
/* Make sure we got success */
if (NT_SUCCESS(Status)) if (NT_SUCCESS(Status))
{ {
/* Call kernel function */ /* Call kernel function */
@ -171,16 +149,18 @@ NtW32Call(IN ULONG RoutineIndex,
ArgumentLength, ArgumentLength,
&RetResult, &RetResult,
&RetResultLength); &RetResultLength);
if (NT_SUCCESS(Status)) if (NT_SUCCESS(Status))
{ {
/* Enter SEH for write back */
_SEH_TRY _SEH_TRY
{ {
/* Return results to user mode */
*Result = RetResult; *Result = RetResult;
*ResultLength = RetResultLength; *ResultLength = RetResultLength;
} }
_SEH_HANDLE _SEH_HANDLE
{ {
/* Get the exception code */
Status = _SEH_GetExceptionCode(); Status = _SEH_GetExceptionCode();
} }
_SEH_END; _SEH_END;