From 098082f49da52b2f27bc5c980aa6b32790445c16 Mon Sep 17 00:00:00 2001 From: Gunnar Dalsnes Date: Sun, 18 Sep 2005 16:56:33 +0000 Subject: [PATCH] -remove meaningless use of winstas -move syscalls to end of file svn path=/trunk/; revision=17914 --- reactos/subsys/win32k/ntuser/accelerator.c | 353 +++++++++------------ 1 file changed, 143 insertions(+), 210 deletions(-) diff --git a/reactos/subsys/win32k/ntuser/accelerator.c b/reactos/subsys/win32k/ntuser/accelerator.c index 55355904b48..a39bfb7a04b 100644 --- a/reactos/subsys/win32k/ntuser/accelerator.c +++ b/reactos/subsys/win32k/ntuser/accelerator.c @@ -91,194 +91,6 @@ PACCELERATOR_TABLE FASTCALL UserGetAccelObject(HACCEL hAccel) } - - -int -STDCALL -NtUserCopyAcceleratorTable( - HACCEL hAccel, - LPACCEL Entries, - int EntriesCount) -{ - PWINSTATION_OBJECT WindowStation; - PACCELERATOR_TABLE Accel; - NTSTATUS Status; - int Ret; - DECLARE_RETURN(int); - - DPRINT("Enter NtUserCopyAcceleratorTable\n"); - UserEnterShared(); - - Status = IntValidateWindowStationHandle(UserGetProcessWindowStation(), - UserMode, - 0, - &WindowStation); - - if (!NT_SUCCESS(Status)) - { - SetLastNtError(STATUS_ACCESS_DENIED); - RETURN(0); - } - - if (!(Accel = UserGetAccelObject(hAccel))) - { - ObDereferenceObject(WindowStation); - RETURN(0); - } - - if(Entries) - { - Ret = min(EntriesCount, Accel->Count); - Status = MmCopyToCaller(Entries, Accel->Table, Ret * sizeof(ACCEL)); - if (!NT_SUCCESS(Status)) - { - ObDereferenceObject(WindowStation); - SetLastNtError(Status); - RETURN(0); - } - } - else - { - Ret = Accel->Count; - } - - ObDereferenceObject(WindowStation); - - RETURN(Ret); - -CLEANUP: - DPRINT("Leave NtUserCopyAcceleratorTable, ret=%i\n",_ret_); - UserLeave(); - END_CLEANUP; -} - -HACCEL -STDCALL -NtUserCreateAcceleratorTable( - LPACCEL Entries, - SIZE_T EntriesCount) -{ - PWINSTATION_OBJECT WindowStation; - PACCELERATOR_TABLE Accel; - NTSTATUS Status; - HACCEL hAccel; - DECLARE_RETURN(HACCEL); - - DPRINT("Enter NtUserCreateAcceleratorTable(Entries %p, EntriesCount %d)\n", - Entries, EntriesCount); - UserEnterExclusive(); - - Status = IntValidateWindowStationHandle(UserGetProcessWindowStation(), - UserMode, - 0, - &WindowStation); - - if (!NT_SUCCESS(Status)) - { - SetLastNtError(STATUS_ACCESS_DENIED); - RETURN( FALSE ); - } - - Accel = ObmCreateObject(&gHandleTable, (PHANDLE)&hAccel, otAccel, sizeof(ACCELERATOR_TABLE)); - - if (Accel == NULL) - { - ObDereferenceObject(WindowStation); - SetLastNtError(STATUS_NO_MEMORY); - RETURN( (HACCEL) 0 ); - } - - Accel->Count = EntriesCount; - if (Accel->Count > 0) - { - Accel->Table = ExAllocatePoolWithTag(PagedPool, EntriesCount * sizeof(ACCEL), TAG_ACCEL); - if (Accel->Table == NULL) - { - ObmDeleteObject(hAccel, otAccel); - ObDereferenceObject(WindowStation); - SetLastNtError(Status); - RETURN( (HACCEL) 0); - } - - Status = MmCopyFromCaller(Accel->Table, Entries, EntriesCount * sizeof(ACCEL)); - if (!NT_SUCCESS(Status)) - { - ExFreePool(Accel->Table); - ObmDeleteObject(hAccel, otAccel); - ObDereferenceObject(WindowStation); - SetLastNtError(Status); - RETURN((HACCEL) 0); - } - } - - ObDereferenceObject(WindowStation); - - /* FIXME: Save HandleTable in a list somewhere so we can clean it up again */ - - RETURN(hAccel); - -CLEANUP: - DPRINT("Leave NtUserCreateAcceleratorTable(Entries %p, EntriesCount %d) = %x\n", - Entries, EntriesCount,_ret_); - UserLeave(); - END_CLEANUP; -} - - - -BOOLEAN -STDCALL -NtUserDestroyAcceleratorTable( - HACCEL hAccel) -{ - PWINSTATION_OBJECT WindowStation; - PACCELERATOR_TABLE Accel; - NTSTATUS Status; - DECLARE_RETURN(BOOLEAN); - - /* FIXME: If the handle table is from a call to LoadAcceleratorTable, decrement it's - usage count (and return TRUE). - FIXME: Destroy only tables created using CreateAcceleratorTable. - */ - - DPRINT("NtUserDestroyAcceleratorTable(Table %x)\n", hAccel); - UserEnterExclusive(); - - Status = IntValidateWindowStationHandle(UserGetProcessWindowStation(), - UserMode, - 0, - &WindowStation); - - if (!NT_SUCCESS(Status)) - { - SetLastNtError(STATUS_ACCESS_DENIED); - DPRINT1("E1\n"); - RETURN( FALSE); - } - - if (!(Accel = UserGetAccelObject(hAccel))) - { - ObDereferenceObject(WindowStation); - RETURN( FALSE); - } - - ObmDeleteObject(hAccel, otAccel); - - if (Accel->Table != NULL) - { - ExFreePool(Accel->Table); - } - - ObDereferenceObject(WindowStation); - - RETURN( TRUE); - -CLEANUP: - DPRINT("Leave NtUserDestroyAcceleratorTable(Table %x) = %i\n", hAccel,_ret_); - UserLeave(); - END_CLEANUP; -} - static BOOLEAN FASTCALL co_IntTranslateAccelerator( @@ -299,7 +111,6 @@ co_IntTranslateAccelerator( if (wParam != key) { - DPRINT("T0\n"); return FALSE; } @@ -469,6 +280,147 @@ found: return TRUE; } + +/* SYSCALLS *****************************************************************/ + + +int +STDCALL +NtUserCopyAcceleratorTable( + HACCEL hAccel, + LPACCEL Entries, + int EntriesCount) +{ + PACCELERATOR_TABLE Accel; + NTSTATUS Status; + int Ret; + DECLARE_RETURN(int); + + DPRINT("Enter NtUserCopyAcceleratorTable\n"); + UserEnterShared(); + + if (!(Accel = UserGetAccelObject(hAccel))) + { + RETURN(0); + } + + if(Entries) + { + Ret = min(EntriesCount, Accel->Count); + Status = MmCopyToCaller(Entries, Accel->Table, Ret * sizeof(ACCEL)); + if (!NT_SUCCESS(Status)) + { + SetLastNtError(Status); + RETURN(0); + } + } + else + { + Ret = Accel->Count; + } + + RETURN(Ret); + +CLEANUP: + DPRINT("Leave NtUserCopyAcceleratorTable, ret=%i\n",_ret_); + UserLeave(); + END_CLEANUP; +} + +HACCEL +STDCALL +NtUserCreateAcceleratorTable( + LPACCEL Entries, + SIZE_T EntriesCount) +{ + PACCELERATOR_TABLE Accel; + NTSTATUS Status; + HACCEL hAccel; + DECLARE_RETURN(HACCEL); + + DPRINT("Enter NtUserCreateAcceleratorTable(Entries %p, EntriesCount %d)\n", + Entries, EntriesCount); + UserEnterExclusive(); + + Accel = ObmCreateObject(&gHandleTable, (PHANDLE)&hAccel, otAccel, sizeof(ACCELERATOR_TABLE)); + + if (Accel == NULL) + { + SetLastNtError(STATUS_NO_MEMORY); + RETURN( (HACCEL) 0 ); + } + + Accel->Count = EntriesCount; + if (Accel->Count > 0) + { + Accel->Table = ExAllocatePoolWithTag(PagedPool, EntriesCount * sizeof(ACCEL), TAG_ACCEL); + if (Accel->Table == NULL) + { + ObmDeleteObject(hAccel, otAccel); + SetLastNtError(Status); + RETURN( (HACCEL) 0); + } + + Status = MmCopyFromCaller(Accel->Table, Entries, EntriesCount * sizeof(ACCEL)); + if (!NT_SUCCESS(Status)) + { + ExFreePool(Accel->Table); + ObmDeleteObject(hAccel, otAccel); + SetLastNtError(Status); + RETURN((HACCEL) 0); + } + } + + /* FIXME: Save HandleTable in a list somewhere so we can clean it up again */ + + RETURN(hAccel); + +CLEANUP: + DPRINT("Leave NtUserCreateAcceleratorTable(Entries %p, EntriesCount %d) = %x\n", + Entries, EntriesCount,_ret_); + UserLeave(); + END_CLEANUP; +} + + + +BOOLEAN +STDCALL +NtUserDestroyAcceleratorTable( + HACCEL hAccel) +{ + PACCELERATOR_TABLE Accel; + DECLARE_RETURN(BOOLEAN); + + /* FIXME: If the handle table is from a call to LoadAcceleratorTable, decrement it's + usage count (and return TRUE). + FIXME: Destroy only tables created using CreateAcceleratorTable. + */ + + DPRINT("NtUserDestroyAcceleratorTable(Table %x)\n", hAccel); + UserEnterExclusive(); + + if (!(Accel = UserGetAccelObject(hAccel))) + { + RETURN( FALSE); + } + + ObmDeleteObject(hAccel, otAccel); + + if (Accel->Table != NULL) + { + ExFreePool(Accel->Table); + } + + RETURN( TRUE); + +CLEANUP: + DPRINT("Leave NtUserDestroyAcceleratorTable(Table %x) = %i\n", hAccel,_ret_); + UserLeave(); + END_CLEANUP; +} + + int STDCALL NtUserTranslateAccelerator( @@ -476,10 +428,8 @@ NtUserTranslateAccelerator( HACCEL hAccel, LPMSG Message) { - PWINSTATION_OBJECT WindowStation = NULL; PWINDOW_OBJECT Window = NULL; PACCELERATOR_TABLE Accel = NULL; - NTSTATUS Status; ULONG i; DECLARE_RETURN(int); @@ -501,17 +451,6 @@ NtUserTranslateAccelerator( RETURN( 0); } - Status = IntValidateWindowStationHandle(UserGetProcessWindowStation(), - UserMode, - 0, - &WindowStation); - - if (!NT_SUCCESS(Status)) - { - SetLastNtError(STATUS_ACCESS_DENIED); - RETURN( 0); - } - if (!(Accel = UserGetAccelObject(hAccel))) { RETURN( 0); @@ -548,14 +487,8 @@ NtUserTranslateAccelerator( RETURN( 0); CLEANUP: - - if (Window) - UserDerefObjectCo(Window); - if (Accel) - UserDerefObjectCo(Accel); - - if (WindowStation) - ObDereferenceObject(WindowStation); + if (Window) UserDerefObjectCo(Window); + if (Accel) UserDerefObjectCo(Accel); DPRINT("NtUserTranslateAccelerator(hWnd %x, Table %x, Message %p) = %i end\n", hWnd, hAccel, Message, 0);