mirror of
https://github.com/reactos/reactos.git
synced 2024-12-29 10:35:28 +00:00
Implemented NtUserRegisterWindowMessage
svn path=/trunk/; revision=4634
This commit is contained in:
parent
8eaabc5146
commit
6644846375
3 changed files with 82 additions and 8 deletions
|
@ -1116,7 +1116,7 @@ NtUserRegisterTasklist(
|
||||||
DWORD Unknown0);
|
DWORD Unknown0);
|
||||||
|
|
||||||
UINT STDCALL
|
UINT STDCALL
|
||||||
NtUserRegisterWindowMessage(LPCWSTR MessageName);
|
NtUserRegisterWindowMessage(PUNICODE_STRING MessageName);
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
STDCALL
|
STDCALL
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: message.c,v 1.12 2003/03/06 23:57:00 gvg Exp $
|
/* $Id: message.c,v 1.13 2003/05/02 07:52:33 gvg Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS user32.dll
|
* PROJECT: ReactOS user32.dll
|
||||||
|
@ -483,7 +483,7 @@ RegisterWindowMessageA(LPCSTR lpString)
|
||||||
{
|
{
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
Atom = RegisterWindowMessageW(String.Buffer);
|
Atom = NtUserRegisterWindowMessage(&String);
|
||||||
RtlFreeUnicodeString(&String);
|
RtlFreeUnicodeString(&String);
|
||||||
return(Atom);
|
return(Atom);
|
||||||
}
|
}
|
||||||
|
@ -491,7 +491,10 @@ RegisterWindowMessageA(LPCSTR lpString)
|
||||||
UINT STDCALL
|
UINT STDCALL
|
||||||
RegisterWindowMessageW(LPCWSTR lpString)
|
RegisterWindowMessageW(LPCWSTR lpString)
|
||||||
{
|
{
|
||||||
return(NtUserRegisterWindowMessage(lpString));
|
UNICODE_STRING String;
|
||||||
|
|
||||||
|
RtlInitUnicodeString(&String, lpString);
|
||||||
|
return(NtUserRegisterWindowMessage(&String));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: window.c,v 1.40 2003/03/28 18:59:18 rcampbell Exp $
|
/* $Id: window.c,v 1.41 2003/05/02 07:52:33 gvg Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -30,6 +30,17 @@
|
||||||
|
|
||||||
#define TAG_WNAM TAG('W', 'N', 'A', 'M')
|
#define TAG_WNAM TAG('W', 'N', 'A', 'M')
|
||||||
|
|
||||||
|
typedef struct _REGISTERED_MESSAGE
|
||||||
|
{
|
||||||
|
LIST_ENTRY ListEntry;
|
||||||
|
WCHAR MessageName[1];
|
||||||
|
} REGISTERED_MESSAGE, *PREGISTERED_MESSAGE;
|
||||||
|
|
||||||
|
static LIST_ENTRY RegisteredMessageListHead;
|
||||||
|
|
||||||
|
#define REGISTERED_MESSAGE_MIN 0xc000
|
||||||
|
#define REGISTERED_MESSAGE_MAX 0xffff
|
||||||
|
|
||||||
/* FUNCTIONS *****************************************************************/
|
/* FUNCTIONS *****************************************************************/
|
||||||
|
|
||||||
HWND STDCALL
|
HWND STDCALL
|
||||||
|
@ -299,6 +310,8 @@ W32kGetWindowProc(HWND Wnd)
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
InitWindowImpl(VOID)
|
InitWindowImpl(VOID)
|
||||||
{
|
{
|
||||||
|
InitializeListHead(&RegisteredMessageListHead);
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
return(STATUS_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -947,11 +960,69 @@ NtUserRedrawWindow(HWND hWnd, CONST RECT *lprcUpdate, HRGN hrgnUpdate, UINT flag
|
||||||
}
|
}
|
||||||
|
|
||||||
UINT STDCALL
|
UINT STDCALL
|
||||||
NtUserRegisterWindowMessage(LPCWSTR MessageName)
|
NtUserRegisterWindowMessage(PUNICODE_STRING MessageNameUnsafe)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED
|
PLIST_ENTRY Current;
|
||||||
|
PREGISTERED_MESSAGE NewMsg, RegMsg;
|
||||||
|
UINT Msg = REGISTERED_MESSAGE_MIN;
|
||||||
|
UNICODE_STRING MessageName;
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
return(0);
|
Status = MmCopyFromCaller(&MessageName, MessageNameUnsafe, sizeof(UNICODE_STRING));
|
||||||
|
if (! NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
SetLastNtError(Status);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
NewMsg = ExAllocatePoolWithTag(PagedPool,
|
||||||
|
sizeof(REGISTERED_MESSAGE) +
|
||||||
|
MessageName.Length,
|
||||||
|
TAG_WNAM);
|
||||||
|
if (NULL == NewMsg)
|
||||||
|
{
|
||||||
|
SetLastNtError(STATUS_NO_MEMORY);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = MmCopyFromCaller(NewMsg->MessageName, MessageName.Buffer, MessageName.Length);
|
||||||
|
if (! NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
ExFreePool(NewMsg);
|
||||||
|
SetLastNtError(Status);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
NewMsg->MessageName[MessageName.Length / sizeof(WCHAR)] = L'\0';
|
||||||
|
if (wcslen(NewMsg->MessageName) != MessageName.Length / sizeof(WCHAR))
|
||||||
|
{
|
||||||
|
ExFreePool(NewMsg);
|
||||||
|
SetLastNtError(STATUS_INVALID_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Current = RegisteredMessageListHead.Flink;
|
||||||
|
while (Current != &RegisteredMessageListHead)
|
||||||
|
{
|
||||||
|
RegMsg = CONTAINING_RECORD(Current, REGISTERED_MESSAGE, ListEntry);
|
||||||
|
if (0 == wcscmp(NewMsg->MessageName, RegMsg->MessageName))
|
||||||
|
{
|
||||||
|
ExFreePool(NewMsg);
|
||||||
|
return Msg;
|
||||||
|
}
|
||||||
|
Msg++;
|
||||||
|
Current = Current->Flink;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (REGISTERED_MESSAGE_MAX < Msg)
|
||||||
|
{
|
||||||
|
ExFreePool(NewMsg);
|
||||||
|
SetLastNtError(STATUS_INSUFFICIENT_RESOURCES);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
InsertTailList(&RegisteredMessageListHead, &(NewMsg->ListEntry));
|
||||||
|
|
||||||
|
return Msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD STDCALL
|
DWORD STDCALL
|
||||||
|
|
Loading…
Reference in a new issue