a0909746d0adf5a336d040c2b867e635cae4f62d
[reactos.git] / reactos / subsys / win32k / include / msgqueue.h
1 #ifndef __WIN32K_MSGQUEUE_H
2 #define __WIN32K_MSGQUEUE_H
3
4 #include <windows.h>
5
6 typedef struct _USER_MESSAGE
7 {
8 LIST_ENTRY ListEntry;
9 MSG Msg;
10 } USER_MESSAGE, *PUSER_MESSAGE;
11
12 struct _USER_MESSAGE_QUEUE;
13
14 typedef struct _USER_SENT_MESSAGE
15 {
16 LIST_ENTRY ListEntry;
17 MSG Msg;
18 PKEVENT CompletionEvent;
19 LRESULT* Result;
20 struct _USER_MESSAGE_QUEUE* CompletionQueue;
21 SENDASYNCPROC CompletionCallback;
22 ULONG_PTR CompletionCallbackContext;
23 } USER_SENT_MESSAGE, *PUSER_SENT_MESSAGE;
24
25 typedef struct _USER_SENT_MESSAGE_NOTIFY
26 {
27 SENDASYNCPROC CompletionCallback;
28 ULONG_PTR CompletionCallbackContext;
29 LRESULT Result;
30 HWND hWnd;
31 UINT Msg;
32 LIST_ENTRY ListEntry;
33 } USER_SENT_MESSAGE_NOTIFY, *PUSER_SENT_MESSAGE_NOTIFY;
34
35 typedef struct _USER_MESSAGE_QUEUE
36 {
37 LIST_ENTRY SentMessagesListHead;
38 LIST_ENTRY PostedMessagesListHead;
39 LIST_ENTRY HardwareMessagesListHead;
40 LIST_ENTRY NotifyMessagesListHead;
41 FAST_MUTEX Lock;
42 BOOLEAN QuitPosted;
43 ULONG QuitExitCode;
44 KEVENT NewMessages;
45 ULONG QueueStatus;
46 HWND FocusWindow;
47 } USER_MESSAGE_QUEUE, *PUSER_MESSAGE_QUEUE;
48
49 VOID
50 MsqSendMessage(PUSER_MESSAGE_QUEUE MessageQueue,
51 PUSER_SENT_MESSAGE Message);
52 VOID
53 MsqInitializeMessage(PUSER_MESSAGE Message,
54 LPMSG Msg);
55 PUSER_MESSAGE
56 MsqCreateMessage(LPMSG Msg);
57 VOID
58 MsqDestroyMessage(PUSER_MESSAGE Message);
59 VOID
60 MsqPostMessage(PUSER_MESSAGE_QUEUE MessageQueue,
61 PUSER_MESSAGE Message,
62 BOOLEAN Hardware);
63 BOOLEAN
64 MsqFindMessage(IN PUSER_MESSAGE_QUEUE MessageQueue,
65 IN BOOLEAN Hardware,
66 IN BOOLEAN Remove,
67 IN HWND Wnd,
68 IN UINT MsgFilterLow,
69 IN UINT MsgFilterHigh,
70 OUT PUSER_MESSAGE* Message);
71 VOID
72 MsqInitializeMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue);
73 VOID
74 MsqFreeMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue);
75 PUSER_MESSAGE_QUEUE
76 MsqCreateMessageQueue(VOID);
77 VOID
78 MsqDestroyMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue);
79 PUSER_MESSAGE_QUEUE
80 MsqGetHardwareMessageQueue(VOID);
81 NTSTATUS
82 MsqWaitForNewMessage(PUSER_MESSAGE_QUEUE MessageQueue);
83 NTSTATUS
84 MsqInitializeImpl(VOID);
85
86 #define MAKE_LONG(x, y) ((((y) & 0xFFFF) << 16) | ((x) & 0xFFFF))
87
88 #endif /* __WIN32K_MSGQUEUE_H */
89
90 /* EOF */