Author: ion Date: Fri May 26 00:03:13 2006 New Revision: 22044
URL: http://svn.reactos.ru/svn/reactos?rev=22044&view=rev Log: - Convert all Win32k Object callback functions to the correct NT prototypes. - Get rid of ROS-internal WIN32_CALLOUT_DATA and use the real WIN32_CALLOUTS_FPNS type. - Get rid of the callout.h hack.
Removed: trunk/reactos/include/reactos/win32k/callout.h Modified: trunk/reactos/include/ndk/pstypes.h trunk/reactos/ntoskrnl/ex/win32k.c trunk/reactos/ntoskrnl/ps/win32.c trunk/reactos/subsystems/win32/win32k/include/desktop.h trunk/reactos/subsystems/win32/win32k/include/winsta.h trunk/reactos/subsystems/win32/win32k/main/dllmain.c trunk/reactos/subsystems/win32/win32k/ntuser/desktop.c trunk/reactos/subsystems/win32/win32k/ntuser/winsta.c
Modified: trunk/reactos/include/ndk/pstypes.h URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/include/ndk/pstypes.h?rev=22... ============================================================================== --- trunk/reactos/include/ndk/pstypes.h (original) +++ trunk/reactos/include/ndk/pstypes.h Fri May 26 00:03:13 2006 @@ -334,7 +334,7 @@ struct _WIN32_POWERSTATE_PARAMETERS; struct _WIN32_JOBCALLOUT_PARAMETERS; struct _WIN32_OPENMETHOD_PARAMETERS; -struct _WIN32_OKTOCLOSEMETHOD_PARAMETERS; +struct _WIN32_OKAYTOCLOSEMETHOD_PARAMETERS; struct _WIN32_CLOSEMETHOD_PARAMETERS; struct _WIN32_DELETEMETHOD_PARAMETERS; struct _WIN32_PARSEMETHOD_PARAMETERS; @@ -342,69 +342,82 @@ // // Win32K Process and Thread Callbacks // -typedef NTSTATUS +typedef +NTSTATUS (NTAPI *PKWIN32_PROCESS_CALLOUT)( struct _EPROCESS *Process, BOOLEAN Create );
-typedef NTSTATUS +typedef +NTSTATUS (NTAPI *PKWIN32_THREAD_CALLOUT)( struct _ETHREAD *Thread, PSW32THREADCALLOUTTYPE Type );
-typedef NTSTATUS +typedef +NTSTATUS (NTAPI *PKWIN32_GLOBALATOMTABLE_CALLOUT)( VOID );
-typedef NTSTATUS +typedef +NTSTATUS (NTAPI *PKWIN32_POWEREVENT_CALLOUT)( struct _WIN32_POWEREVENT_PARAMETERS *Parameters );
-typedef NTSTATUS +typedef +NTSTATUS (NTAPI *PKWIN32_POWERSTATE_CALLOUT)( struct _WIN32_POWERSTATE_PARAMETERS *Parameters );
-typedef NTSTATUS +typedef +NTSTATUS (NTAPI *PKWIN32_JOB_CALLOUT)( struct _WIN32_JOBCALLOUT_PARAMETERS *Parameters );
-typedef NTSTATUS +typedef +NTSTATUS (NTAPI *PGDI_BATCHFLUSH_ROUTINE)( VOID );
-typedef NTSTATUS +typedef +NTSTATUS (NTAPI *PKWIN32_OPENMETHOD_CALLOUT)( struct _WIN32_OPENMETHOD_PARAMETERS *Parameters );
-typedef NTSTATUS +typedef +NTSTATUS (NTAPI *PKWIN32_OKTOCLOSEMETHOD_CALLOUT)( - struct _WIN32_OKTOCLOSEMETHOD_PARAMETERS *Parameters + struct _WIN32_OKAYTOCLOSEMETHOD_PARAMETERS *Parameters );
-typedef NTSTATUS +typedef +NTSTATUS (NTAPI *PKWIN32_CLOSEMETHOD_CALLOUT)( struct _WIN32_CLOSEMETHOD_PARAMETERS *Parameters );
-typedef NTSTATUS +typedef +VOID (NTAPI *PKWIN32_DELETEMETHOD_CALLOUT)( struct _WIN32_DELETEMETHOD_PARAMETERS *Parameters );
-typedef NTSTATUS +typedef +NTSTATUS (NTAPI *PKWIN32_PARSEMETHOD_CALLOUT)( struct _WIN32_PARSEMETHOD_PARAMETERS *Parameters );
-typedef NTSTATUS +typedef +NTSTATUS (NTAPI *PKWIN32_WIN32DATACOLLECTION_CALLOUT)( struct _EPROCESS *Process, PVOID Callback,
Removed: trunk/reactos/include/reactos/win32k/callout.h URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/include/reactos/win32k/callo... ============================================================================== --- trunk/reactos/include/reactos/win32k/callout.h (original) +++ trunk/reactos/include/reactos/win32k/callout.h (removed) @@ -1,18 +1,0 @@ -#ifndef _CALLOUT_ -#define _CALLOUT_ - -#include <internal/ob.h> - -typedef struct _W32_CALLOUT_DATA -{ - PKWIN32_PROCESS_CALLOUT W32ProcessCallout; - PKWIN32_THREAD_CALLOUT W32ThreadCallout; - OB_OPEN_METHOD DesktopOpen; - OB_DELETE_METHOD DesktopDelete; - OB_DELETE_METHOD WinStaDelete; - OB_PARSE_METHOD WinStaParse; - OB_OPEN_METHOD WinStaOpen; - OB_PARSE_METHOD DesktopParse; -} W32_CALLOUT_DATA, *PW32_CALLOUT_DATA; - -#endif
Modified: trunk/reactos/ntoskrnl/ex/win32k.c URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/ntoskrnl/ex/win32k.c?rev=220... ============================================================================== --- trunk/reactos/ntoskrnl/ex/win32k.c (original) +++ trunk/reactos/ntoskrnl/ex/win32k.c Fri May 26 00:03:13 2006 @@ -19,7 +19,7 @@ POBJECT_TYPE ExWindowStationObjectType = NULL; POBJECT_TYPE ExDesktopObjectType = NULL;
-static GENERIC_MAPPING ExpWindowStationMapping = +GENERIC_MAPPING ExpWindowStationMapping = { STANDARD_RIGHTS_READ, STANDARD_RIGHTS_WRITE, @@ -27,7 +27,7 @@ STANDARD_RIGHTS_REQUIRED };
-static GENERIC_MAPPING ExpDesktopMapping = +GENERIC_MAPPING ExpDesktopMapping = { STANDARD_RIGHTS_READ, STANDARD_RIGHTS_WRITE, @@ -35,11 +35,10 @@ STANDARD_RIGHTS_REQUIRED };
-OB_OPEN_METHOD ExpWindowStationObjectOpen = NULL; -OB_PARSE_METHOD ExpWindowStationObjectParse = NULL; -OB_DELETE_METHOD ExpWindowStationObjectDelete = NULL; -OB_PARSE_METHOD ExpDesktopObjectParse = NULL; -OB_DELETE_METHOD ExpDesktopObjectDelete = NULL; +PKWIN32_OPENMETHOD_CALLOUT ExpWindowStationObjectOpen = NULL; +PKWIN32_PARSEMETHOD_CALLOUT ExpWindowStationObjectParse = NULL; +PKWIN32_DELETEMETHOD_CALLOUT ExpWindowStationObjectDelete = NULL; +PKWIN32_DELETEMETHOD_CALLOUT ExpDesktopObjectDelete = NULL;
/* FUNCTIONS ****************************************************************/
@@ -51,20 +50,30 @@ ACCESS_MASK GrantedAccess, ULONG HandleCount) { + WIN32_OPENMETHOD_PARAMETERS Parameters; + + /* Fill out the callback structure */ + Parameters.OpenReason = Reason; + Parameters.Process = Process; + Parameters.Object = ObjectBody; + Parameters.GrantedAccess = GrantedAccess; + Parameters.HandleCount = HandleCount; + /* Call the Registered Callback */ - return ExpWindowStationObjectOpen(Reason, - Process, - ObjectBody, - GrantedAccess, - HandleCount); + return ExpWindowStationObjectOpen(&Parameters); }
VOID STDCALL ExpWinStaObjectDelete(PVOID DeletedObject) { + WIN32_DELETEMETHOD_PARAMETERS Parameters; + + /* Fill out the callback structure */ + Parameters.Object = DeletedObject; + /* Call the Registered Callback */ - ExpWindowStationObjectDelete(DeletedObject); + ExpWindowStationObjectDelete(&Parameters); }
NTSTATUS @@ -80,24 +89,34 @@ IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL, OUT PVOID *Object) { + WIN32_PARSEMETHOD_PARAMETERS Parameters; + + /* Fill out the callback structure */ + Parameters.ParseObject = ParseObject; + Parameters.ObjectType = ObjectType; + Parameters.AccessState = AccessState; + Parameters.AccessMode = AccessMode; + Parameters.Attributes = Attributes; + Parameters.CompleteName = CompleteName; + Parameters.RemainingName = RemainingName; + Parameters.Context = Context; + Parameters.SecurityQos = SecurityQos; + Parameters.Object = Object; + /* Call the Registered Callback */ - return ExpWindowStationObjectParse(ParseObject, - ObjectType, - AccessState, - AccessMode, - Attributes, - CompleteName, - RemainingName, - Context, - SecurityQos, - Object); + return ExpWindowStationObjectParse(&Parameters); } VOID STDCALL ExpDesktopDelete(PVOID DeletedObject) { + WIN32_DELETEMETHOD_PARAMETERS Parameters; + + /* Fill out the callback structure */ + Parameters.Object = DeletedObject; + /* Call the Registered Callback */ - ExpDesktopObjectDelete(DeletedObject); + ExpDesktopObjectDelete(&Parameters); }
VOID
Modified: trunk/reactos/ntoskrnl/ps/win32.c URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/ntoskrnl/ps/win32.c?rev=2204... ============================================================================== --- trunk/reactos/ntoskrnl/ps/win32.c (original) +++ trunk/reactos/ntoskrnl/ps/win32.c Fri May 26 00:03:13 2006 @@ -13,18 +13,15 @@ #include <ntoskrnl.h> #define NDEBUG #include <internal/debug.h> -#include <win32k/callout.h>
/* GLOBALS ******************************************************************/
static PKWIN32_PROCESS_CALLOUT PspWin32ProcessCallback = NULL; static PKWIN32_THREAD_CALLOUT PspWin32ThreadCallback = NULL; - -extern OB_OPEN_METHOD ExpWindowStationObjectOpen; -extern OB_PARSE_METHOD ExpWindowStationObjectParse; -extern OB_DELETE_METHOD ExpWindowStationObjectDelete; -extern OB_PARSE_METHOD ExpDesktopObjectParse; -extern OB_DELETE_METHOD ExpDesktopObjectDelete; +extern PKWIN32_OPENMETHOD_CALLOUT ExpWindowStationObjectOpen; +extern PKWIN32_PARSEMETHOD_CALLOUT ExpWindowStationObjectParse; +extern PKWIN32_DELETEMETHOD_CALLOUT ExpWindowStationObjectDelete; +extern PKWIN32_DELETEMETHOD_CALLOUT ExpDesktopObjectDelete;
#ifndef ALEX_CB_REWRITE typedef struct _NTW32CALL_SAVED_STATE @@ -55,16 +52,14 @@ */ VOID STDCALL -PsEstablishWin32Callouts(PWIN32_CALLOUTS_FPNS calloutData) -{ - PW32_CALLOUT_DATA CalloutData = (PW32_CALLOUT_DATA)calloutData; - PspWin32ProcessCallback = CalloutData->W32ProcessCallout; - PspWin32ThreadCallback = CalloutData->W32ThreadCallout; - ExpWindowStationObjectOpen = CalloutData->WinStaOpen; - ExpWindowStationObjectParse = CalloutData->WinStaParse; - ExpWindowStationObjectDelete = CalloutData->WinStaDelete; - ExpDesktopObjectParse = CalloutData->DesktopParse; - ExpDesktopObjectDelete = CalloutData->DesktopDelete; +PsEstablishWin32Callouts(PWIN32_CALLOUTS_FPNS CalloutData) +{ + PspWin32ProcessCallback = CalloutData->ProcessCallout; + PspWin32ThreadCallback = CalloutData->ThreadCallout; + ExpWindowStationObjectOpen = CalloutData->WindowStationOpenProcedure; + ExpWindowStationObjectParse = CalloutData->WindowStationParseProcedure; + ExpWindowStationObjectDelete = CalloutData->WindowStationDeleteProcedure; + ExpDesktopObjectDelete = CalloutData->DesktopDeleteProcedure; }
NTSTATUS
Modified: trunk/reactos/subsystems/win32/win32k/include/desktop.h URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/subsystems/win32/win32k/incl... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/include/desktop.h (original) +++ trunk/reactos/subsystems/win32/win32k/include/desktop.h Fri May 26 00:03:13 2006 @@ -61,7 +61,7 @@ OUT PVOID *Object);
VOID STDCALL -IntDesktopObjectDelete(PVOID DeletedObject); +IntDesktopObjectDelete(PWIN32_DELETEMETHOD_PARAMETERS Parameters);
VOID FASTCALL IntGetDesktopWorkArea(PDESKTOP_OBJECT Desktop, PRECT Rect);
Modified: trunk/reactos/subsystems/win32/win32k/include/winsta.h URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/subsystems/win32/win32k/incl... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/include/winsta.h (original) +++ trunk/reactos/subsystems/win32/win32k/include/winsta.h Fri May 26 00:03:13 2006 @@ -54,32 +54,14 @@
NTSTATUS STDCALL -IntWinStaObjectOpen(IN OB_OPEN_REASON Reason, - IN PEPROCESS Process OPTIONAL, - IN PVOID ObjectBody, - IN ACCESS_MASK GrantedAccess, - IN ULONG HandleCount); +IntWinStaObjectOpen(PWIN32_OPENMETHOD_PARAMETERS Parameters);
VOID STDCALL -IntWinStaObjectDelete(PVOID DeletedObject); - -PVOID STDCALL -IntWinStaObjectFind(PVOID Object, - PWSTR Name, - ULONG Attributes); +IntWinStaObjectDelete(PWIN32_DELETEMETHOD_PARAMETERS Parameters);
NTSTATUS STDCALL -IntWinStaObjectParse(IN PVOID ParseObject, - IN PVOID ObjectType, - IN OUT PACCESS_STATE AccessState, - IN KPROCESSOR_MODE AccessMode, - IN ULONG Attributes, - IN OUT PUNICODE_STRING CompleteName, - IN OUT PUNICODE_STRING RemainingName, - IN OUT PVOID Context OPTIONAL, - IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL, - OUT PVOID *Object); +IntWinStaObjectParse(PWIN32_PARSEMETHOD_PARAMETERS Parameters);
NTSTATUS FASTCALL IntValidateWindowStationHandle(
Modified: trunk/reactos/subsystems/win32/win32k/main/dllmain.c URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/subsystems/win32/win32k/main... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/main/dllmain.c (original) +++ trunk/reactos/subsystems/win32/win32k/main/dllmain.c Fri May 26 00:03:13 2006 @@ -23,7 +23,6 @@
#include <w32k.h> #include <include/napi.h> -#include <win32k/callout.h>
#define NDEBUG #include <debug.h> @@ -360,7 +359,7 @@ { NTSTATUS Status; BOOLEAN Result; - W32_CALLOUT_DATA CalloutData; + WIN32_CALLOUTS_FPNS CalloutData; PVOID GlobalUserHeapBase = NULL;
/* @@ -381,13 +380,12 @@ /* * Register Object Manager Callbacks */ - CalloutData.WinStaOpen = IntWinStaObjectOpen; - CalloutData.WinStaParse = IntWinStaObjectParse; - CalloutData.WinStaDelete = IntWinStaObjectDelete; - CalloutData.DesktopParse = IntDesktopObjectParse; - CalloutData.DesktopDelete = IntDesktopObjectDelete; - CalloutData.W32ProcessCallout = Win32kProcessCallback; - CalloutData.W32ThreadCallout = Win32kThreadCallback; + CalloutData.WindowStationOpenProcedure = IntWinStaObjectOpen; + CalloutData.WindowStationParseProcedure = IntWinStaObjectParse; + CalloutData.WindowStationDeleteProcedure = IntWinStaObjectDelete; + CalloutData.DesktopDeleteProcedure = IntDesktopObjectDelete; + CalloutData.ProcessCallout = Win32kProcessCallback; + CalloutData.ThreadCallout = Win32kThreadCallback;
/* * Register our per-process and per-thread structures.
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/desktop.c URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntus... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/desktop.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/desktop.c Fri May 26 00:03:13 2006 @@ -93,7 +93,6 @@ PUNICODE_STRING DesktopName;
/* Set the list pointers and loop the window station */ - DPRINT1("Creating desktop(%wZ)\n", RemainingName); ListHead = &WinStaObject->DesktopListHead; NextEntry = ListHead->Flink; while (NextEntry != ListHead) @@ -174,9 +173,9 @@ }
VOID STDCALL -IntDesktopObjectDelete(PVOID DeletedObject) -{ - PDESKTOP_OBJECT Desktop = (PDESKTOP_OBJECT)DeletedObject; +IntDesktopObjectDelete(PWIN32_DELETEMETHOD_PARAMETERS Parameters) +{ + PDESKTOP_OBJECT Desktop = (PDESKTOP_OBJECT)Parameters->Object;
DPRINT("Deleting desktop (0x%X)\n", Desktop);
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/winsta.c URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntus... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/winsta.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/winsta.c Fri May 26 00:03:13 2006 @@ -96,15 +96,11 @@
NTSTATUS STDCALL -IntWinStaObjectOpen(OB_OPEN_REASON Reason, - PEPROCESS Process, - PVOID ObjectBody, - ACCESS_MASK GrantedAccess, - ULONG HandleCount) -{ - PWINSTATION_OBJECT WinSta = (PWINSTATION_OBJECT)ObjectBody; - NTSTATUS Status; - +IntWinStaObjectOpen(PWIN32_OPENMETHOD_PARAMETERS Parameters) +{ + PWINSTATION_OBJECT WinSta = (PWINSTATION_OBJECT)Parameters->Object; + OB_OPEN_REASON Reason = Parameters->OpenReason; + NTSTATUS Status;
if (Reason == ObCreateHandle) { @@ -125,9 +121,9 @@ }
VOID STDCALL -IntWinStaObjectDelete(PVOID DeletedObject) -{ - PWINSTATION_OBJECT WinSta = (PWINSTATION_OBJECT)DeletedObject; +IntWinStaObjectDelete(PWIN32_DELETEMETHOD_PARAMETERS Parameters) +{ + PWINSTATION_OBJECT WinSta = (PWINSTATION_OBJECT)Parameters->Object;
DPRINT("Deleting window station (0x%X)\n", WinSta);
@@ -138,27 +134,18 @@
NTSTATUS STDCALL -IntWinStaObjectParse(IN PVOID Object, - IN PVOID ObjectType, - IN OUT PACCESS_STATE AccessState, - IN KPROCESSOR_MODE AccessMode, - IN ULONG Attributes, - IN OUT PUNICODE_STRING FullPath, - IN OUT PUNICODE_STRING RemainingName, - IN OUT PVOID Context OPTIONAL, - IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL, - OUT PVOID *NextObject) -{ - DPRINT("Object (0x%X) Path (0x%X) *Path (%wZ)\n", Object, RemainingName, RemainingName); +IntWinStaObjectParse(PWIN32_PARSEMETHOD_PARAMETERS Parameters) +{ + PUNICODE_STRING RemainingName = Parameters->RemainingName;
/* Assume we don't find anything */ - *NextObject = NULL; + *Parameters->Object = NULL;
/* Check for an empty name */ if (!RemainingName->Length) { /* Make sure this is a window station, can't parse a desktop now */ - if (ObjectType != ExWindowStationObjectType) + if (Parameters->ObjectType != ExWindowStationObjectType) { /* Fail */ return STATUS_OBJECT_TYPE_MISMATCH; @@ -191,19 +178,19 @@ * FIXME: ROS Sends the wrong Object Type. The parsed object's type * should be sent, not the parsed parent's. */ - if (ObjectType == ExWindowStationObjectType) + if (Parameters->ObjectType == ExWindowStationObjectType) { /* Then call the desktop parse routine */ - return IntDesktopObjectParse(Object, - ObjectType, - AccessState, - AccessMode, - Attributes, - FullPath, + return IntDesktopObjectParse(Parameters->ParseObject, + Parameters->ObjectType, + Parameters->AccessState, + Parameters->AccessMode, + Parameters->Attributes, + Parameters->CompleteName, RemainingName, - Context, - SecurityQos, - NextObject); + Parameters->Context, + Parameters->SecurityQos, + Parameters->Object); }
/* Should hopefully never get here */