2 * PROJECT: ReactOS Native Headers
3 * FILE: include/ndk/lpctypes.h
4 * PURPOSE: Definitions for Local Procedure Call Types not defined in DDK/IFS
5 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
12 /* DEPENDENCIES **************************************************************/
14 /* EXPORTED DATA *************************************************************/
16 /* ENUMERATIONS **************************************************************/
18 typedef enum _LPC_TYPE
30 LPC_CONNECTION_REQUEST
,
31 LPC_CONNECTION_REFUSED
,
35 typedef enum _PORT_INFORMATION_CLASS
38 } PORT_INFORMATION_CLASS
;
40 /* TYPES *********************************************************************/
44 #if defined(USE_LPC6432)
45 #define LPC_CLIENT_ID CLIENT_ID64
46 #define LPC_SIZE_T ULONGLONG
47 #define LPC_PVOID ULONGLONG
48 #define LPC_HANDLE ULONGLONG
50 #define LPC_CLIENT_ID CLIENT_ID
51 #define LPC_SIZE_T SIZE_T
52 #define LPC_PVOID PVOID
53 #define LPC_HANDLE HANDLE
56 typedef struct _PORT_MESSAGE
72 CSHORT DataInfoOffset
;
78 LPC_CLIENT_ID ClientId
;
79 double DoNotUseThisField
;
84 LPC_SIZE_T ClientViewSize
;
87 } PORT_MESSAGE
, *PPORT_MESSAGE
;
89 typedef struct _PORT_VIEW
92 LPC_HANDLE SectionHandle
;
96 LPC_PVOID ViewRemoteBase
;
97 } PORT_VIEW
, *PPORT_VIEW
;
99 typedef struct _REMOTE_PORT_VIEW
104 } REMOTE_PORT_VIEW
, *PREMOTE_PORT_VIEW
;
106 typedef struct _LPCP_MESSAGE
109 PORT_MESSAGE Request
;
112 typedef struct _LPCP_CONNECTION_MESSAGE
115 } LPCP_CONNECTION_MESSAGE
;
117 /* Kernel-Mode Structures */
120 typedef struct _LPCP_NONPAGED_PORT_QUEUE
122 KSEMAPHORE Semaphore
;
123 struct _LPCP_PORT_OBJECT
*BackPointer
;
124 } LPCP_NONPAGED_PORT_QUEUE
, *PLPCP_NONPAGED_PORT_QUEUE
;
126 typedef struct _LPCP_PORT_QUEUE
128 PLPCP_NONPAGED_PORT_QUEUE NonPagedPortQueue
;
129 KSEMAPHORE Semaphore
;
130 LIST_ENTRY ReceiveHead
;
131 } LPCP_PORT_QUEUE
, *PLPCP_PORT_QUEUE
;
133 typedef struct _LPCP_PORT_OBJECT
137 struct _LPCP_PORT_OBJECT
*ConnectionPort
;
138 struct _LPCP_PORT_OBJECT
*ConnectedPort
;
139 LPCP_PORT_QUEUE MsgQueue
;
141 PVOID ClientSectionBase
;
142 PVOID ServerSectionBase
;
144 ULONG MaxMessageLength
;
145 ULONG MaxConnectionInfoLength
;
146 PETHREAD ClientThread
;
147 SECURITY_QUALITY_OF_SERVICE SecurityQos
;
148 SECURITY_CLIENT_CONTEXT StaticSecurity
;
149 LIST_ENTRY LpcReplyChainHead
;
150 LIST_ENTRY LpcDataInfoChainHead
;
151 } LPCP_PORT_OBJECT
, *PLPCP_PORT_OBJECT
;
153 typedef struct _LPCP_MESSAGE
160 SINGLE_LIST_ENTRY FreeEntry
;
164 PLPCP_PORT_OBJECT SenderPort
;
165 PETHREAD RepliedToThread
;
167 PORT_MESSAGE Request
;
168 } LPCP_MESSAGE
, *PLPCP_MESSAGE
;
170 typedef struct _LPCP_CONNECTION_MESSAGE
172 PORT_VIEW ClientView
;
173 PLPCP_PORT_OBJECT ClientPort
;
175 REMOTE_PORT_VIEW ServerView
;
176 } LPCP_CONNECTION_MESSAGE
, *PLPCP_CONNECTION_MESSAGE
;
179 typedef struct _HARDERROR_MSG
183 LARGE_INTEGER ErrorTime
;
184 ULONG ValidResponseOptions
;
186 ULONG NumberOfParameters
;
187 ULONG UnicodeStringParameterMask
;
188 ULONG Parameters
[MAXIMUM_HARDERROR_PARAMETERS
];
189 } HARDERROR_MSG
, *PHARDERROR_MSG
;
191 typedef struct _CLIENT_DIED_MSG
194 LARGE_INTEGER CreateTime
;
195 } CLIENT_DIED_MSG
, *PCLIENT_DIED_MSG
;
197 /* CONSTANTS *****************************************************************/
199 #define PORT_MAXIMUM_MESSAGE_LENGTH 256
201 #define LPCP_MAX_MESSAGE_SIZE \
202 ROUND_UP(PORT_MAXIMUM_MESSAGE_LENGTH + \
203 sizeof(LPCP_MESSAGE) + \
204 sizeof(LPCP_CONNECTION_MESSAGE), 16)
206 #define LPC_MAX_MESSAGE_LENGTH \
207 (LPCP_MAX_MESSAGE_SIZE - \
208 FIELD_OFFSET(LPCP_MESSAGE, Request))
210 #define LPC_MAX_DATA_LENGTH \
211 (LPC_MAX_MESSAGE_LENGTH - \
212 sizeof(PORT_MESSAGE) - \
213 sizeof(LPCP_CONNECTION_MESSAGE))