-remove meaningless use of winstas

-move syscalls to end of file

svn path=/trunk/; revision=17914
This commit is contained in:
Gunnar Dalsnes 2005-09-18 16:56:33 +00:00
parent 45694d291d
commit 098082f49d

View file

@ -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);