svn path=/trunk/; revision=17275
30 files changed:
#ifndef _LPCTYPES_H
#define _LPCTYPES_H
#ifndef _LPCTYPES_H
#define _LPCTYPES_H
-#define PORT_MESSAGE_TYPE(m) ((m).Header.MessageType)
+#define LPC_MESSAGE_TYPE(m) ((m).Header.u2.s2.Type)
/* DEPENDENCIES **************************************************************/
/* DEPENDENCIES **************************************************************/
/* CONSTANTS *****************************************************************/
#define LPC_MESSAGE_BASE_SIZE 24
#define MAX_MESSAGE_DATA (0x130)
/* CONSTANTS *****************************************************************/
#define LPC_MESSAGE_BASE_SIZE 24
#define MAX_MESSAGE_DATA (0x130)
-#define PORT_MAX_DATA_LENGTH 0x104
-#define PORT_MAX_MESSAGE_LENGTH 0x148
+#define LPC_MAX_DATA_LENGTH 0x104
+#define LPC_MAX_MESSAGE_LENGTH 0x148
/* ENUMERATIONS **************************************************************/
/* ENUMERATIONS **************************************************************/
/* TYPES *********************************************************************/
/* TYPES *********************************************************************/
-/* FIXME: USE REAL DEFINITION */
-typedef struct _LPC_MESSAGE
+#if defined(USE_LPC6432)
+#define LPC_CLIENT_ID CLIENT_ID64
+#define LPC_SIZE_T ULONGLONG
+#define LPC_PVOID ULONGLONG
+#define LPC_HANDLE ULONGLONG
+#else
+#define LPC_CLIENT_ID CLIENT_ID
+#define LPC_SIZE_T SIZE_T
+#define LPC_PVOID PVOID
+#define LPC_HANDLE HANDLE
+#endif
+
+typedef struct _PORT_MESSAGE
- USHORT DataSize;
- USHORT MessageSize;
- USHORT MessageType;
- USHORT VirtualRangesOffset;
- CLIENT_ID ClientId;
- ULONG MessageId;
- ULONG SectionSize;
-} LPC_MESSAGE, *PLPC_MESSAGE;
+ union
+ {
+ struct
+ {
+ CSHORT DataLength;
+ CSHORT TotalLength;
+ } s1;
+ ULONG Length;
+ } u1;
+ union
+ {
+ struct
+ {
+ CSHORT Type;
+ CSHORT DataInfoOffset;
+ } s2;
+ ULONG ZeroInit;
+ } u2;
+ union
+ {
+ LPC_CLIENT_ID ClientId;
+ double DoNotUseThisField;
+ };
+ ULONG MessageId;
+ union
+ {
+ LPC_SIZE_T ClientViewSize;
+ ULONG CallbackId;
+ };
+} PORT_MESSAGE, *PPORT_MESSAGE;
/* FIXME: USE REAL DEFINITION */
typedef struct _LPC_SECTION_WRITE
/* FIXME: USE REAL DEFINITION */
typedef struct _LPC_SECTION_WRITE
/* FIXME: USE REAL DEFINITION */
typedef struct _LPC_MAX_MESSAGE
{
/* FIXME: USE REAL DEFINITION */
typedef struct _LPC_MAX_MESSAGE
{
BYTE Data[MAX_MESSAGE_DATA];
} LPC_MAX_MESSAGE, *PLPC_MAX_MESSAGE;
BYTE Data[MAX_MESSAGE_DATA];
} LPC_MAX_MESSAGE, *PLPC_MAX_MESSAGE;
NtAcceptConnectPort(
PHANDLE PortHandle,
HANDLE NamedPortHandle,
NtAcceptConnectPort(
PHANDLE PortHandle,
HANDLE NamedPortHandle,
- PLPC_MESSAGE ServerReply,
+ PPORT_MESSAGE ServerReply,
BOOLEAN AcceptIt,
PLPC_SECTION_WRITE WriteMap,
PLPC_SECTION_READ ReadMap
BOOLEAN AcceptIt,
PLPC_SECTION_WRITE WriteMap,
PLPC_SECTION_READ ReadMap
STDCALL
NtImpersonateClientOfPort(
HANDLE PortHandle,
STDCALL
NtImpersonateClientOfPort(
HANDLE PortHandle,
- PLPC_MESSAGE ClientMessage
+ PPORT_MESSAGE ClientMessage
);
NTSTATUS
STDCALL
ZwImpersonateClientOfPort(
HANDLE PortHandle,
);
NTSTATUS
STDCALL
ZwImpersonateClientOfPort(
HANDLE PortHandle,
- PLPC_MESSAGE ClientMessage
+ PPORT_MESSAGE ClientMessage
NTSTATUS
STDCALL
NtListenPort(HANDLE PortHandle,
NTSTATUS
STDCALL
NtListenPort(HANDLE PortHandle,
- PLPC_MESSAGE LpcMessage
+ PPORT_MESSAGE LpcMessage
);
NTSTATUS
STDCALL
ZwListenPort(HANDLE PortHandle,
);
NTSTATUS
STDCALL
ZwListenPort(HANDLE PortHandle,
- PLPC_MESSAGE LpcMessage
+ PPORT_MESSAGE LpcMessage
STDCALL
NtReadRequestData(
HANDLE PortHandle,
STDCALL
NtReadRequestData(
HANDLE PortHandle,
ULONG Index,
PVOID Buffer,
ULONG BufferLength,
ULONG Index,
PVOID Buffer,
ULONG BufferLength,
STDCALL
ZwReadRequestData(
HANDLE PortHandle,
STDCALL
ZwReadRequestData(
HANDLE PortHandle,
ULONG Index,
PVOID Buffer,
ULONG BufferLength,
ULONG Index,
PVOID Buffer,
ULONG BufferLength,
STDCALL
NtReplyPort(
HANDLE PortHandle,
STDCALL
NtReplyPort(
HANDLE PortHandle,
);
NTSTATUS
STDCALL
ZwReplyPort(
HANDLE PortHandle,
);
NTSTATUS
STDCALL
ZwReplyPort(
HANDLE PortHandle,
NtReplyWaitReceivePort(
HANDLE PortHandle,
PULONG PortId,
NtReplyWaitReceivePort(
HANDLE PortHandle,
PULONG PortId,
- PLPC_MESSAGE MessageReply,
- PLPC_MESSAGE MessageRequest
+ PPORT_MESSAGE MessageReply,
+ PPORT_MESSAGE MessageRequest
ZwReplyWaitReceivePort(
HANDLE PortHandle,
PULONG PortId,
ZwReplyWaitReceivePort(
HANDLE PortHandle,
PULONG PortId,
- PLPC_MESSAGE MessageReply,
- PLPC_MESSAGE MessageRequest
+ PPORT_MESSAGE MessageReply,
+ PPORT_MESSAGE MessageRequest
);
NTSTATUS
STDCALL
NtReplyWaitReplyPort(
HANDLE PortHandle,
);
NTSTATUS
STDCALL
NtReplyWaitReplyPort(
HANDLE PortHandle,
- PLPC_MESSAGE ReplyMessage
+ PPORT_MESSAGE ReplyMessage
);
NTSTATUS
STDCALL
ZwReplyWaitReplyPort(
HANDLE PortHandle,
);
NTSTATUS
STDCALL
ZwReplyWaitReplyPort(
HANDLE PortHandle,
- PLPC_MESSAGE ReplyMessage
+ PPORT_MESSAGE ReplyMessage
);
NTSTATUS
STDCALL
NtRequestPort(
HANDLE PortHandle,
);
NTSTATUS
STDCALL
NtRequestPort(
HANDLE PortHandle,
- PLPC_MESSAGE LpcMessage);
+ PPORT_MESSAGE LpcMessage);
NTSTATUS
STDCALL
ZwRequestPort(
HANDLE PortHandle,
NTSTATUS
STDCALL
ZwRequestPort(
HANDLE PortHandle,
- PLPC_MESSAGE LpcMessage
+ PPORT_MESSAGE LpcMessage
);
NTSTATUS
STDCALL
NtRequestWaitReplyPort(
HANDLE PortHandle,
);
NTSTATUS
STDCALL
NtRequestWaitReplyPort(
HANDLE PortHandle,
- PLPC_MESSAGE LpcReply,
- PLPC_MESSAGE LpcRequest
+ PPORT_MESSAGE LpcReply,
+ PPORT_MESSAGE LpcRequest
);
NTSTATUS
STDCALL
ZwRequestWaitReplyPort(
HANDLE PortHandle,
);
NTSTATUS
STDCALL
ZwRequestWaitReplyPort(
HANDLE PortHandle,
- PLPC_MESSAGE LpcReply,
- PLPC_MESSAGE LpcRequest
+ PPORT_MESSAGE LpcReply,
+ PPORT_MESSAGE LpcRequest
STDCALL
NtWriteRequestData(
HANDLE PortHandle,
STDCALL
NtWriteRequestData(
HANDLE PortHandle,
ULONG Index,
PVOID Buffer,
ULONG BufferLength,
ULONG Index,
PVOID Buffer,
ULONG BufferLength,
STDCALL
ZwWriteRequestData(
HANDLE PortHandle,
STDCALL
ZwWriteRequestData(
HANDLE PortHandle,
ULONG Index,
PVOID Buffer,
ULONG BufferLength,
ULONG Index,
PVOID Buffer,
ULONG BufferLength,
struct
{
BYTE HeaderReserved[LPC_MESSAGE_BASE_SIZE];
struct
{
BYTE HeaderReserved[LPC_MESSAGE_BASE_SIZE];
typedef union _LSASS_REQUEST
{
typedef union _LSASS_REQUEST
{
struct {
UCHAR LpcHeader[LPC_MESSAGE_BASE_SIZE];
ULONG Type;
struct {
UCHAR LpcHeader[LPC_MESSAGE_BASE_SIZE];
ULONG Type;
typedef struct _LSASS_REPLY
{
typedef struct _LSASS_REPLY
{
typedef union _SM_PORT_MESSAGE
{
/*** LPC common header ***/
typedef union _SM_PORT_MESSAGE
{
/*** LPC common header ***/
struct {
UCHAR LpcHeader[LPC_MESSAGE_BASE_SIZE];
/*** SM common header ***/
struct {
UCHAR LpcHeader[LPC_MESSAGE_BASE_SIZE];
/*** SM common header ***/
/*** MACRO ***********************************************************/
/*** MACRO ***********************************************************/
-#define SM_CONNECT_DATA_SIZE(m) ((m).Header.DataSize-sizeof(USHORT)-sizeof(WORD))
+#define SM_CONNECT_DATA_SIZE(m) ((m).Header.u1.s1.DataLength-sizeof(USHORT)-sizeof(WORD))
#define SM_PORT_DATA_SIZE(c) (sizeof(DWORD)+sizeof(NTSTATUS)+sizeof(c))
#define SM_PORT_MESSAGE_SIZE (sizeof(SM_PORT_MESSAGE))
#define SM_PORT_DATA_SIZE(c) (sizeof(DWORD)+sizeof(NTSTATUS)+sizeof(c))
#define SM_PORT_MESSAGE_SIZE (sizeof(SM_PORT_MESSAGE))
DPRINT("Received message\n");
DPRINT("Received message\n");
- if (Request.Header.MessageType == LPC_PORT_CLOSED)
+ if (Request.Header.u2.s2.Type == LPC_PORT_CLOSED)
{
DPRINT("Port closed\n");
// return STATUS_UNSUCCESSFUL;
}
{
DPRINT("Port closed\n");
// return STATUS_UNSUCCESSFUL;
}
- if (Request.Header.MessageType == LPC_REQUEST)
+ if (Request.Header.u2.s2.Type == LPC_REQUEST)
{
DPRINT("Received request\n");
}
{
DPRINT("Received request\n");
}
- else if (Request.Header.MessageType == LPC_DATAGRAM)
+ else if (Request.Header.u2.s2.Type == LPC_DATAGRAM)
{
DPRINT("Received datagram\n");
{
DPRINT("Received datagram\n");
/* Fill out the header */
Request->Type = ApiNumber;
/* Fill out the header */
Request->Type = ApiNumber;
- Request->Header.DataSize = RequestLength - LPC_MESSAGE_BASE_SIZE;
- Request->Header.MessageSize = RequestLength;
- DPRINT("CSR: API: %x, DataSize: %x, MessageSize: %x\n",
+ Request->Header.u1.s1.DataLength = RequestLength - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = RequestLength;
+ DPRINT("CSR: API: %x, u1.s1.DataLength: %x, u1.s1.TotalLength: %x\n",
- Request->Header.DataSize,
- Request->Header.MessageSize);
+ Request->Header.u1.s1.DataLength,
+ Request->Header.u1.s1.TotalLength);
/* Send the LPC Message */
Status = NtRequestWaitReplyPort(WindowsApiPort,
/* Send the LPC Message */
Status = NtRequestWaitReplyPort(WindowsApiPort,
typedef struct _LPC_DBGSS_MESSAGE
{
typedef struct _LPC_DBGSS_MESSAGE
{
ULONG Unknown1;
ULONG Unknown2;
ULONG Unknown3;
ULONG Unknown1;
ULONG Unknown2;
ULONG Unknown3;
Status = NtReplyWaitReceivePort (DbgSsApiPort,
NULL,
NULL,
Status = NtReplyWaitReceivePort (DbgSsApiPort,
NULL,
NULL,
- (PLPC_MESSAGE)&Message);
+ (PPORT_MESSAGE)&Message);
if (!NT_SUCCESS(Status))
{
DbgPrint ("DbgSs: NtReplyWaitReceivePort failed - Status == %lx\n",
if (!NT_SUCCESS(Status))
{
DbgPrint ("DbgSs: NtReplyWaitReceivePort failed - Status == %lx\n",
LSASS_REPLY Reply;
NTSTATUS Status;
LSASS_REPLY Reply;
NTSTATUS Status;
- Request.Header.DataSize = 0;
- Request.Header.MessageSize = sizeof(LSASS_REQUEST);
+ Request.Header.u1.s1.DataLength = 0;
+ Request.Header.u1.s1.TotalLength = sizeof(LSASS_REQUEST);
Request.Type = LSASS_REQUEST_DEREGISTER_LOGON_PROCESS;
Status = NtRequestWaitReplyPort(LsaHandle,
&Request.Header,
Request.Type = LSASS_REQUEST_DEREGISTER_LOGON_PROCESS;
Status = NtRequestWaitReplyPort(LsaHandle,
&Request.Header,
Request = (PLSASS_REQUEST)RawRequest;
Reply = (PLSASS_REPLY)RawReply;
Request = (PLSASS_REQUEST)RawRequest;
Reply = (PLSASS_REPLY)RawReply;
- Request->Header.DataSize = sizeof(LSASS_REQUEST) + SubmitBufferLength -
+ Request->Header.u1.s1.DataLength = sizeof(LSASS_REQUEST) + SubmitBufferLength -
- Request->Header.MessageSize =
- Request->Header.DataSize + LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength =
+ Request->Header.u1.s1.DataLength + LPC_MESSAGE_BASE_SIZE;
Request->Type = LSASS_REQUEST_CALL_AUTHENTICATION_PACKAGE;
Request->d.CallAuthenticationPackageRequest.AuthenticationPackage =
AuthenticationPackage;
Request->Type = LSASS_REQUEST_CALL_AUTHENTICATION_PACKAGE;
Request->d.CallAuthenticationPackageRequest.AuthenticationPackage =
AuthenticationPackage;
LSASS_REPLY Reply;
Request = (PLSASS_REQUEST)RawRequest;
LSASS_REPLY Reply;
Request = (PLSASS_REQUEST)RawRequest;
- Request->Header.DataSize = sizeof(LSASS_REQUEST) + PackageName->Length -
+ Request->Header.u1.s1.DataLength = sizeof(LSASS_REQUEST) + PackageName->Length -
- Request->Header.MessageSize = Request->Header.DataSize +
+ Request->Header.u1.s1.TotalLength = Request->Header.u1.s1.DataLength +
LPC_MESSAGE_BASE_SIZE;
Request->Type = LSASS_REQUEST_LOOKUP_AUTHENTICATION_PACKAGE;
LPC_MESSAGE_BASE_SIZE;
Request->Type = LSASS_REQUEST_LOOKUP_AUTHENTICATION_PACKAGE;
Request->d.LogonUserRequest.SourceContext = *SourceContext;
Request->Type = LSASS_REQUEST_LOGON_USER;
Request->d.LogonUserRequest.SourceContext = *SourceContext;
Request->Type = LSASS_REQUEST_LOGON_USER;
- Request->Header.DataSize = RequestLength - LPC_MESSAGE_BASE_SIZE;
- Request->Header.MessageSize = RequestLength + LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.DataLength = RequestLength - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = RequestLength + LPC_MESSAGE_BASE_SIZE;
Reply = (PLSASS_REPLY)RawReply;
Reply = (PLSASS_REPLY)RawReply;
}
Request.Type = LSASS_REQUEST_REGISTER_LOGON_PROCESS;
}
Request.Type = LSASS_REQUEST_REGISTER_LOGON_PROCESS;
- Request.Header.DataSize = sizeof(LSASS_REQUEST) -
+ Request.Header.u1.s1.DataLength = sizeof(LSASS_REQUEST) -
- Request.Header.MessageSize = sizeof(LSASS_REQUEST);
+ Request.Header.u1.s1.TotalLength = sizeof(LSASS_REQUEST);
Request.d.RegisterLogonProcessRequest.Length = LsaLogonProcessName->Length;
memcpy(Request.d.RegisterLogonProcessRequest.LogonProcessNameBuffer,
Request.d.RegisterLogonProcessRequest.Length = LsaLogonProcessName->Length;
memcpy(Request.d.RegisterLogonProcessRequest.LogonProcessNameBuffer,
SmReqMsg.SmHeader.ApiIndex = SM_API_QUERY_INFORMATION;
/* Prepare the port request message */
SmReqMsg.SmHeader.ApiIndex = SM_API_QUERY_INFORMATION;
/* Prepare the port request message */
- SmReqMsg.Header.MessageType = LPC_NEW_MESSAGE;
- SmReqMsg.Header.DataSize = SM_PORT_DATA_SIZE(SmReqMsg.Request);
- SmReqMsg.Header.MessageSize = SM_PORT_MESSAGE_SIZE;
- Status = NtRequestWaitReplyPort (hSmApiPort, (PLPC_MESSAGE) & SmReqMsg, (PLPC_MESSAGE) & SmReqMsg);
+ SmReqMsg.Header.u2.s2.Type = LPC_NEW_MESSAGE;
+ SmReqMsg.Header.u1.s1.DataLength = SM_PORT_DATA_SIZE(SmReqMsg.Request);
+ SmReqMsg.Header.u1.s1.TotalLength = SM_PORT_MESSAGE_SIZE;
+ Status = NtRequestWaitReplyPort (hSmApiPort, (PPORT_MESSAGE) & SmReqMsg, (PPORT_MESSAGE) & SmReqMsg);
if (NT_SUCCESS(Status))
{
/* Unmarshal data */
if (NT_SUCCESS(Status))
{
/* Unmarshal data */
SmReqMsg.SmHeader.ApiIndex = SM_API_COMPLETE_SESSION;
/* Port message */
SmReqMsg.SmHeader.ApiIndex = SM_API_COMPLETE_SESSION;
/* Port message */
- SmReqMsg.Header.MessageType = LPC_NEW_MESSAGE;
- SmReqMsg.Header.DataSize = SM_PORT_DATA_SIZE(SmReqMsg.Request);
- SmReqMsg.Header.MessageSize = SM_PORT_MESSAGE_SIZE;
- Status = NtRequestWaitReplyPort (hSmApiPort, (PLPC_MESSAGE) & SmReqMsg, (PLPC_MESSAGE) & SmReqMsg);
+ SmReqMsg.Header.u2.s2.Type = LPC_NEW_MESSAGE;
+ SmReqMsg.Header.u1.s1.DataLength = SM_PORT_DATA_SIZE(SmReqMsg.Request);
+ SmReqMsg.Header.u1.s1.TotalLength = SM_PORT_MESSAGE_SIZE;
+ Status = NtRequestWaitReplyPort (hSmApiPort, (PPORT_MESSAGE) & SmReqMsg, (PPORT_MESSAGE) & SmReqMsg);
if (NT_SUCCESS(Status))
{
return SmReqMsg.SmHeader.Status;
if (NT_SUCCESS(Status))
{
return SmReqMsg.SmHeader.Status;
SmReqMsg.SmHeader.ApiIndex = SM_API_EXECUTE_PROGRAMME;
/* LPC message */
SmReqMsg.SmHeader.ApiIndex = SM_API_EXECUTE_PROGRAMME;
/* LPC message */
- SmReqMsg.Header.MessageType = LPC_NEW_MESSAGE;
- SmReqMsg.Header.DataSize = SM_PORT_DATA_SIZE(SmReqMsg.Request);
- SmReqMsg.Header.MessageSize = SM_PORT_MESSAGE_SIZE;
+ SmReqMsg.Header.u2.s2.Type = LPC_NEW_MESSAGE;
+ SmReqMsg.Header.u1.s1.DataLength = SM_PORT_DATA_SIZE(SmReqMsg.Request);
+ SmReqMsg.Header.u1.s1.TotalLength = SM_PORT_MESSAGE_SIZE;
- " MessageType = %d\n"
- " DataSize = %d\n"
- " MessageSize = %d\n"
- " sizeof(LPC_MESSAGE)==%d\n",
+ " u2.s2.Type = %d\n"
+ " u1.s1.DataLength = %d\n"
+ " u1.s1.TotalLength = %d\n"
+ " sizeof(PORT_MESSAGE)==%d\n",
- SmReqMsg.Header.MessageType,
- SmReqMsg.Header.DataSize,
- SmReqMsg.Header.MessageSize,
- sizeof(LPC_MESSAGE));
+ SmReqMsg.Header.u2.s2.Type,
+ SmReqMsg.Header.u1.s1.DataLength,
+ SmReqMsg.Header.u1.s1.TotalLength,
+ sizeof(PORT_MESSAGE));
/* Call SM and wait for a reply */
/* Call SM and wait for a reply */
- Status = NtRequestWaitReplyPort (hSmApiPort, (PLPC_MESSAGE) & SmReqMsg, (PLPC_MESSAGE) & SmReqMsg);
+ Status = NtRequestWaitReplyPort (hSmApiPort, (PPORT_MESSAGE) & SmReqMsg, (PPORT_MESSAGE) & SmReqMsg);
if (NT_SUCCESS(Status))
{
return SmReqMsg.SmHeader.Status;
if (NT_SUCCESS(Status))
{
return SmReqMsg.SmHeader.Status;
typedef struct _EPORT_CONNECT_REQUEST_MESSAGE
{
typedef struct _EPORT_CONNECT_REQUEST_MESSAGE
{
- LPC_MESSAGE MessageHeader;
+ PORT_MESSAGE MessageHeader;
PEPROCESS ConnectingProcess;
struct _SECTION_OBJECT* SendSectionObject;
LARGE_INTEGER SendSectionOffset;
PEPROCESS ConnectingProcess;
struct _SECTION_OBJECT* SendSectionObject;
LARGE_INTEGER SendSectionOffset;
typedef struct _EPORT_CONNECT_REPLY_MESSAGE
{
typedef struct _EPORT_CONNECT_REPLY_MESSAGE
{
- LPC_MESSAGE MessageHeader;
+ PORT_MESSAGE MessageHeader;
PVOID SendServerViewBase;
ULONG ReceiveClientViewSize;
PVOID ReceiveClientViewBase;
PVOID SendServerViewBase;
ULONG ReceiveClientViewSize;
PVOID ReceiveClientViewBase;
NTSTATUS STDCALL
LpcRequestPort (PEPORT Port,
NTSTATUS STDCALL
LpcRequestPort (PEPORT Port,
- PLPC_MESSAGE LpcMessage);
+ PPORT_MESSAGE LpcMessage);
NTSTATUS
STDCALL
LpcSendTerminationPort (PEPORT Port,
NTSTATUS
STDCALL
LpcSendTerminationPort (PEPORT Port,
{
PEPORT Sender;
LIST_ENTRY QueueListEntry;
{
PEPORT Sender;
LIST_ENTRY QueueListEntry;
UCHAR MessageData [MAX_MESSAGE_DATA];
} QUEUEDMESSAGE, *PQUEUEDMESSAGE;
typedef struct _LPC_DBG_MESSAGE
{
UCHAR MessageData [MAX_MESSAGE_DATA];
} QUEUEDMESSAGE, *PQUEUEDMESSAGE;
typedef struct _LPC_DBG_MESSAGE
{
ULONG Type;
ULONG Status;
union
ULONG Type;
ULONG Status;
union
typedef struct _LPC_TERMINATION_MESSAGE
{
typedef struct _LPC_TERMINATION_MESSAGE
{
LARGE_INTEGER CreationTime;
} LPC_TERMINATION_MESSAGE, *PLPC_TERMINATION_MESSAGE;
LARGE_INTEGER CreationTime;
} LPC_TERMINATION_MESSAGE, *PLPC_TERMINATION_MESSAGE;
NTSTATUS STDCALL
EiReplyOrRequestPort (IN PEPORT Port,
NTSTATUS STDCALL
EiReplyOrRequestPort (IN PEPORT Port,
- IN PLPC_MESSAGE LpcReply,
+ IN PPORT_MESSAGE LpcReply,
IN ULONG MessageType,
IN PEPORT Sender);
IN ULONG MessageType,
IN PEPORT Sender);
/* Initialize the log message */
Message = (PIO_ERROR_LOG_MESSAGE)Request->Data;
/* Initialize the log message */
Message = (PIO_ERROR_LOG_MESSAGE)Request->Data;
- Message->Type = 0xC; //IO_TYPE_ERROR_MESSAGE;
+ Message->Type = IO_TYPE_ERROR_MESSAGE;
Message->Size =
sizeof(IO_ERROR_LOG_MESSAGE) - sizeof(IO_ERROR_LOG_PACKET) +
LogEntry->PacketSize + DriverNameLength;
Message->Size =
sizeof(IO_ERROR_LOG_MESSAGE) - sizeof(IO_ERROR_LOG_PACKET) +
LogEntry->PacketSize + DriverNameLength;
DPRINT ("SequenceNumber %lx\n", Packet->SequenceNumber);
DPRINT ("SequenceNumber %lx\n", Packet->SequenceNumber);
- Request->Header.DataSize = Message->Size;
- Request->Header.MessageSize =
- Request->Header.DataSize + sizeof(LPC_MESSAGE);
+ Request->Header.u1.s1.DataLength = Message->Size;
+ Request->Header.u1.s1.TotalLength =
+ Request->Header.u1.s1.DataLength + sizeof(PPORT_MESSAGE);
/* Send the error message to the log port */
Status = ZwRequestPort (IopLogPort,
/* Send the error message to the log port */
Status = ZwRequestPort (IopLogPort,
LpcpClosePort (PVOID ObjectBody, ULONG HandleCount)
{
PEPORT Port = (PEPORT)ObjectBody;
LpcpClosePort (PVOID ObjectBody, ULONG HandleCount)
{
PEPORT Port = (PEPORT)ObjectBody;
/* FIXME Race conditions here! */
/* FIXME Race conditions here! */
if (HandleCount == 1 && Port->State == EPORT_CONNECTED_CLIENT)
{
DPRINT("Informing server\n");
if (HandleCount == 1 && Port->State == EPORT_CONNECTED_CLIENT)
{
DPRINT("Informing server\n");
- Message.MessageSize = sizeof(LPC_MESSAGE);
- Message.DataSize = 0;
+ Message.u1.s1.TotalLength = sizeof(PORT_MESSAGE);
+ Message.u1.s1.DataLength = 0;
EiReplyOrRequestPort (Port->OtherPort,
&Message,
LPC_PORT_CLOSED,
EiReplyOrRequestPort (Port->OtherPort,
&Message,
LPC_PORT_CLOSED,
/*
* Initialize the request message.
*/
/*
* Initialize the request message.
*/
- RequestMessage->MessageHeader.DataSize =
+ RequestMessage->MessageHeader.u1.s1.DataLength =
sizeof(EPORT_CONNECT_REQUEST_MESSAGE) + RequestConnectDataLength -
sizeof(EPORT_CONNECT_REQUEST_MESSAGE) + RequestConnectDataLength -
- sizeof(LPC_MESSAGE);
- RequestMessage->MessageHeader.MessageSize =
+ sizeof(PORT_MESSAGE);
+ RequestMessage->MessageHeader.u1.s1.TotalLength =
sizeof(EPORT_CONNECT_REQUEST_MESSAGE) + RequestConnectDataLength;
DPRINT("RequestMessageSize %d\n",
sizeof(EPORT_CONNECT_REQUEST_MESSAGE) + RequestConnectDataLength;
DPRINT("RequestMessageSize %d\n",
- RequestMessage->MessageHeader.MessageSize);
- RequestMessage->MessageHeader.SectionSize = 0;
+ RequestMessage->MessageHeader.u1.s1.TotalLength);
+ RequestMessage->MessageHeader.ClientViewSize = 0;
RequestMessage->ConnectingProcess = PsGetCurrentProcess();
ObReferenceObjectByPointer(RequestMessage->ConnectingProcess,
PROCESS_VM_OPERATION,
RequestMessage->ConnectingProcess = PsGetCurrentProcess();
ObReferenceObjectByPointer(RequestMessage->ConnectingProcess,
PROCESS_VM_OPERATION,
/*
* Check for connection refusal.
*/
/*
* Check for connection refusal.
*/
- if (CReply->MessageHeader.MessageType == LPC_CONNECTION_REFUSED)
+ if (CReply->MessageHeader.u2.s2.Type == LPC_CONNECTION_REFUSED)
{
ObDereferenceObject(OurPort);
ExFreePool(Reply);
{
ObDereferenceObject(OurPort);
ExFreePool(Reply);
/*EXPORTED*/ NTSTATUS STDCALL
NtAcceptConnectPort (PHANDLE ServerPortHandle,
HANDLE NamedPortHandle,
/*EXPORTED*/ NTSTATUS STDCALL
NtAcceptConnectPort (PHANDLE ServerPortHandle,
HANDLE NamedPortHandle,
- PLPC_MESSAGE LpcMessage,
+ PPORT_MESSAGE LpcMessage,
BOOLEAN AcceptIt,
PLPC_SECTION_WRITE WriteMap,
PLPC_SECTION_READ ReadMap)
BOOLEAN AcceptIt,
PLPC_SECTION_WRITE WriteMap,
PLPC_SECTION_READ ReadMap)
Size = sizeof(EPORT_CONNECT_REPLY_MESSAGE);
if (LpcMessage)
{
Size = sizeof(EPORT_CONNECT_REPLY_MESSAGE);
if (LpcMessage)
{
- Size += LpcMessage->DataSize;
+ Size += LpcMessage->u1.s1.DataLength;
}
CReply = ExAllocatePool(NonPagedPool, Size);
}
CReply = ExAllocatePool(NonPagedPool, Size);
*/
if (LpcMessage != NULL)
{
*/
if (LpcMessage != NULL)
{
- memcpy(&CReply->MessageHeader, LpcMessage, sizeof(LPC_MESSAGE));
+ memcpy(&CReply->MessageHeader, LpcMessage, sizeof(PORT_MESSAGE));
memcpy(&CReply->ConnectData, (PVOID)(LpcMessage + 1),
memcpy(&CReply->ConnectData, (PVOID)(LpcMessage + 1),
- LpcMessage->DataSize);
- CReply->MessageHeader.MessageSize =
- sizeof(EPORT_CONNECT_REPLY_MESSAGE) + LpcMessage->DataSize;
- CReply->MessageHeader.DataSize = CReply->MessageHeader.MessageSize -
- sizeof(LPC_MESSAGE);
- CReply->ConnectDataLength = LpcMessage->DataSize;
+ LpcMessage->u1.s1.DataLength);
+ CReply->MessageHeader.u1.s1.TotalLength =
+ sizeof(EPORT_CONNECT_REPLY_MESSAGE) + LpcMessage->u1.s1.DataLength;
+ CReply->MessageHeader.u1.s1.DataLength = CReply->MessageHeader.u1.s1.TotalLength -
+ sizeof(PORT_MESSAGE);
+ CReply->ConnectDataLength = LpcMessage->u1.s1.DataLength;
- CReply->MessageHeader.MessageSize = sizeof(EPORT_CONNECT_REPLY_MESSAGE);
- CReply->MessageHeader.DataSize = sizeof(EPORT_CONNECT_REPLY_MESSAGE) -
- sizeof(LPC_MESSAGE);
+ CReply->MessageHeader.u1.s1.TotalLength = sizeof(EPORT_CONNECT_REPLY_MESSAGE);
+ CReply->MessageHeader.u1.s1.DataLength = sizeof(EPORT_CONNECT_REPLY_MESSAGE) -
+ sizeof(PORT_MESSAGE);
CReply->ConnectDataLength = 0;
}
if (!AcceptIt)
CReply->ConnectDataLength = 0;
}
if (!AcceptIt)
{
CReply->ReceiveClientViewBase = WriteMap->TargetViewBase;
}
{
CReply->ReceiveClientViewBase = WriteMap->TargetViewBase;
}
- CReply->MaximumMessageSize = PORT_MAX_MESSAGE_LENGTH;
+ CReply->MaximumMessageSize = LPC_MAX_MESSAGE_LENGTH;
OurPort->OtherPort = ConnectionRequest->Sender;
OurPort->OtherPort->OtherPort = OurPort;
EiReplyOrRequestPort(ConnectionRequest->Sender,
OurPort->OtherPort = ConnectionRequest->Sender;
OurPort->OtherPort->OtherPort = OurPort;
EiReplyOrRequestPort(ConnectionRequest->Sender,
LPC_REPLY,
OurPort);
ExFreePool(ConnectionRequest);
LPC_REPLY,
OurPort);
ExFreePool(ConnectionRequest);
{
return (STATUS_INVALID_PORT_ATTRIBUTES);
}
{
return (STATUS_INVALID_PORT_ATTRIBUTES);
}
- if (MaxConnectInfoLength > PORT_MAX_DATA_LENGTH)
+ if (MaxConnectInfoLength > LPC_MAX_DATA_LENGTH)
{
return (STATUS_INVALID_PARAMETER_3);
}
{
return (STATUS_INVALID_PARAMETER_3);
}
- if (MaxDataLength > PORT_MAX_MESSAGE_LENGTH)
+ if (MaxDataLength > LPC_MAX_MESSAGE_LENGTH)
{
return (STATUS_INVALID_PARAMETER_4);
}
{
return (STATUS_INVALID_PARAMETER_4);
}
}
Status = LpcpInitializePort (Port, EPORT_TYPE_SERVER_RQST_PORT, NULL);
}
Status = LpcpInitializePort (Port, EPORT_TYPE_SERVER_RQST_PORT, NULL);
- Port->MaxConnectInfoLength = PORT_MAX_DATA_LENGTH;
- Port->MaxDataLength = PORT_MAX_MESSAGE_LENGTH;
+ Port->MaxConnectInfoLength = LPC_MAX_DATA_LENGTH;
+ Port->MaxDataLength = LPC_MAX_MESSAGE_LENGTH;
Port->MaxPoolUsage = MaxPoolUsage;
ObDereferenceObject (Port);
Port->MaxPoolUsage = MaxPoolUsage;
ObDereferenceObject (Port);
*/
/*EXPORTED*/ NTSTATUS STDCALL
NtListenPort (IN HANDLE PortHandle,
*/
/*EXPORTED*/ NTSTATUS STDCALL
NtListenPort (IN HANDLE PortHandle,
- IN PLPC_MESSAGE ConnectMsg)
+ IN PPORT_MESSAGE ConnectMsg)
* Drop any other message.
*/
if (!NT_SUCCESS(Status) ||
* Drop any other message.
*/
if (!NT_SUCCESS(Status) ||
- LPC_CONNECTION_REQUEST == ConnectMsg->MessageType)
+ LPC_CONNECTION_REQUEST == ConnectMsg->u2.s2.Type)
{
DPRINT("Got message (type %x)\n", LPC_CONNECTION_REQUEST);
break;
}
{
DPRINT("Got message (type %x)\n", LPC_CONNECTION_REQUEST);
break;
}
- DPRINT("Got message (type %x)\n", ConnectMsg->MessageType);
+ DPRINT("Got message (type %x)\n", ConnectMsg->u2.s2.Type);
*/
NTSTATUS STDCALL
NtImpersonateClientOfPort (HANDLE PortHandle,
*/
NTSTATUS STDCALL
NtImpersonateClientOfPort (HANDLE PortHandle,
- PLPC_MESSAGE ClientMessage)
+ PPORT_MESSAGE ClientMessage)
{
UNIMPLEMENTED;
return(STATUS_NOT_IMPLEMENTED);
{
UNIMPLEMENTED;
return(STATUS_NOT_IMPLEMENTED);
*/
NTSTATUS STDCALL
NtReadRequestData (HANDLE PortHandle,
*/
NTSTATUS STDCALL
NtReadRequestData (HANDLE PortHandle,
ULONG Index,
PVOID Buffer,
ULONG BufferLength,
ULONG Index,
PVOID Buffer,
ULONG BufferLength,
*/
NTSTATUS STDCALL
EiReplyOrRequestPort (IN PEPORT Port,
*/
NTSTATUS STDCALL
EiReplyOrRequestPort (IN PEPORT Port,
- IN PLPC_MESSAGE LpcReply,
+ IN PPORT_MESSAGE LpcReply,
IN ULONG MessageType,
IN PEPORT Sender)
{
IN ULONG MessageType,
IN PEPORT Sender)
{
- memcpy(&MessageReply->Message, LpcReply, LpcReply->MessageSize);
+ memcpy(&MessageReply->Message, LpcReply, LpcReply->u1.s1.TotalLength);
}
MessageReply->Message.ClientId.UniqueProcess = PsGetCurrentProcessId();
MessageReply->Message.ClientId.UniqueThread = PsGetCurrentThreadId();
}
MessageReply->Message.ClientId.UniqueProcess = PsGetCurrentProcessId();
MessageReply->Message.ClientId.UniqueThread = PsGetCurrentThreadId();
- MessageReply->Message.MessageType = MessageType;
+ MessageReply->Message.u2.s2.Type = MessageType;
MessageReply->Message.MessageId = InterlockedIncrementUL(&LpcpNextMessageId);
KeAcquireSpinLock(&Port->Lock, &oldIrql);
MessageReply->Message.MessageId = InterlockedIncrementUL(&LpcpNextMessageId);
KeAcquireSpinLock(&Port->Lock, &oldIrql);
*/
NTSTATUS STDCALL
NtReplyPort (IN HANDLE PortHandle,
*/
NTSTATUS STDCALL
NtReplyPort (IN HANDLE PortHandle,
- IN PLPC_MESSAGE LpcReply)
+ IN PPORT_MESSAGE LpcReply)
{
NTSTATUS Status;
PEPORT Port;
{
NTSTATUS Status;
PEPORT Port;
NTSTATUS STDCALL
NtReplyWaitReceivePortEx(IN HANDLE PortHandle,
OUT PULONG PortId,
NTSTATUS STDCALL
NtReplyWaitReceivePortEx(IN HANDLE PortHandle,
OUT PULONG PortId,
- IN PLPC_MESSAGE LpcReply,
- OUT PLPC_MESSAGE LpcMessage,
+ IN PPORT_MESSAGE LpcReply,
+ OUT PPORT_MESSAGE LpcMessage,
IN PLARGE_INTEGER Timeout)
{
PEPORT Port;
IN PLARGE_INTEGER Timeout)
{
PEPORT Port;
_SEH_TRY
{
ProbeForWrite(LpcMessage,
_SEH_TRY
{
ProbeForWrite(LpcMessage,
Request = EiDequeueMessagePort(Port);
KeReleaseSpinLock(&Port->Lock, oldIrql);
Request = EiDequeueMessagePort(Port);
KeReleaseSpinLock(&Port->Lock, oldIrql);
- if (Request->Message.MessageType == LPC_CONNECTION_REQUEST)
+ if (Request->Message.u2.s2.Type == LPC_CONNECTION_REQUEST)
PEPORT_CONNECT_REQUEST_MESSAGE CRequest;
CRequest = (PEPORT_CONNECT_REQUEST_MESSAGE)&Request->Message;
PEPORT_CONNECT_REQUEST_MESSAGE CRequest;
CRequest = (PEPORT_CONNECT_REQUEST_MESSAGE)&Request->Message;
- memcpy(&Header, &Request->Message, sizeof(LPC_MESSAGE));
- Header.DataSize = CRequest->ConnectDataLength;
- Header.MessageSize = Header.DataSize + sizeof(LPC_MESSAGE);
+ memcpy(&Header, &Request->Message, sizeof(PORT_MESSAGE));
+ Header.u1.s1.DataLength = CRequest->ConnectDataLength;
+ Header.u1.s1.TotalLength = Header.u1.s1.DataLength + sizeof(PORT_MESSAGE);
if (PreviousMode != KernelMode)
{
if (PreviousMode != KernelMode)
{
RtlCopyMemory(LpcMessage,
&Header,
RtlCopyMemory(LpcMessage,
&Header,
RtlCopyMemory((PVOID)(LpcMessage + 1),
CRequest->ConnectData,
CRequest->ConnectDataLength);
RtlCopyMemory((PVOID)(LpcMessage + 1),
CRequest->ConnectData,
CRequest->ConnectDataLength);
{
RtlCopyMemory(LpcMessage,
&Header,
{
RtlCopyMemory(LpcMessage,
&Header,
RtlCopyMemory((PVOID)(LpcMessage + 1),
CRequest->ConnectData,
CRequest->ConnectDataLength);
RtlCopyMemory((PVOID)(LpcMessage + 1),
CRequest->ConnectData,
CRequest->ConnectDataLength);
_SEH_TRY
{
ProbeForWrite(LpcMessage,
_SEH_TRY
{
ProbeForWrite(LpcMessage,
- Request->Message.MessageSize,
+ Request->Message.u1.s1.TotalLength,
1);
RtlCopyMemory(LpcMessage,
&Request->Message,
1);
RtlCopyMemory(LpcMessage,
&Request->Message,
- Request->Message.MessageSize);
+ Request->Message.u1.s1.TotalLength);
{
RtlCopyMemory(LpcMessage,
&Request->Message,
{
RtlCopyMemory(LpcMessage,
&Request->Message,
- Request->Message.MessageSize);
+ Request->Message.u1.s1.TotalLength);
}
}
if (!NT_SUCCESS(Status))
}
}
if (!NT_SUCCESS(Status))
ObDereferenceObject(Port);
return(Status);
}
ObDereferenceObject(Port);
return(Status);
}
- if (Request->Message.MessageType == LPC_CONNECTION_REQUEST)
+ if (Request->Message.u2.s2.Type == LPC_CONNECTION_REQUEST)
{
KeAcquireSpinLock(&Port->Lock, &oldIrql);
EiEnqueueConnectMessagePort(Port, Request);
{
KeAcquireSpinLock(&Port->Lock, &oldIrql);
EiEnqueueConnectMessagePort(Port, Request);
NTSTATUS STDCALL
NtReplyWaitReceivePort (IN HANDLE PortHandle,
OUT PULONG PortId,
NTSTATUS STDCALL
NtReplyWaitReceivePort (IN HANDLE PortHandle,
OUT PULONG PortId,
- IN PLPC_MESSAGE LpcReply,
- OUT PLPC_MESSAGE LpcMessage)
+ IN PPORT_MESSAGE LpcReply,
+ OUT PPORT_MESSAGE LpcMessage)
{
return(NtReplyWaitReceivePortEx (PortHandle,
PortId,
{
return(NtReplyWaitReceivePortEx (PortHandle,
PortId,
*/
NTSTATUS STDCALL
NtReplyWaitReplyPort (HANDLE PortHandle,
*/
NTSTATUS STDCALL
NtReplyWaitReplyPort (HANDLE PortHandle,
- PLPC_MESSAGE ReplyMessage)
+ PPORT_MESSAGE ReplyMessage)
{
UNIMPLEMENTED;
return(STATUS_NOT_IMPLEMENTED);
{
UNIMPLEMENTED;
return(STATUS_NOT_IMPLEMENTED);
STDCALL
LpcRequestWaitReplyPort (
IN PEPORT Port,
STDCALL
LpcRequestWaitReplyPort (
IN PEPORT Port,
- IN PLPC_MESSAGE LpcMessageRequest,
- OUT PLPC_MESSAGE LpcMessageReply
+ IN PPORT_MESSAGE LpcMessageRequest,
+ OUT PPORT_MESSAGE LpcMessageReply
LPC_TERMINATION_MESSAGE Msg;
#ifdef __USE_NT_LPC__
LPC_TERMINATION_MESSAGE Msg;
#ifdef __USE_NT_LPC__
- Msg.Header.MessageType = LPC_NEW_MESSAGE;
+ Msg.Header.u2.s2.Type = LPC_NEW_MESSAGE;
#endif
Msg.CreationTime = CreationTime;
Status = LpcRequestPort (Port, &Msg.Header);
#endif
Msg.CreationTime = CreationTime;
Status = LpcRequestPort (Port, &Msg.Header);
KeAcquireSpinLock(&Port->Lock, &oldIrql);
ReplyMessage = EiDequeueMessagePort(Port);
KeReleaseSpinLock(&Port->Lock, oldIrql);
KeAcquireSpinLock(&Port->Lock, &oldIrql);
ReplyMessage = EiDequeueMessagePort(Port);
KeReleaseSpinLock(&Port->Lock, oldIrql);
- memcpy(Reply, &ReplyMessage->Message, ReplyMessage->Message.MessageSize);
+ memcpy(Reply, &ReplyMessage->Message, ReplyMessage->Message.u1.s1.TotalLength);
ExFreePool(ReplyMessage);
return(STATUS_SUCCESS);
ExFreePool(ReplyMessage);
return(STATUS_SUCCESS);
* @implemented
*/
NTSTATUS STDCALL LpcRequestPort (IN PEPORT Port,
* @implemented
*/
NTSTATUS STDCALL LpcRequestPort (IN PEPORT Port,
- IN PLPC_MESSAGE LpcMessage)
+ IN PPORT_MESSAGE LpcMessage)
#ifdef __USE_NT_LPC__
/* Check the message's type */
#ifdef __USE_NT_LPC__
/* Check the message's type */
- if (LPC_NEW_MESSAGE == LpcMessage->MessageType)
+ if (LPC_NEW_MESSAGE == LpcMessage->u2.s2.Type)
- LpcMessage->MessageType = LPC_DATAGRAM;
+ LpcMessage->u2.s2.Type = LPC_DATAGRAM;
- else if (LPC_DATAGRAM == LpcMessage->MessageType)
+ else if (LPC_DATAGRAM == LpcMessage->u2.s2.Type)
{
return STATUS_INVALID_PARAMETER;
}
{
return STATUS_INVALID_PARAMETER;
}
- else if (LpcMessage->MessageType > LPC_CLIENT_DIED)
+ else if (LpcMessage->u2.s2.Type > LPC_CLIENT_DIED)
{
return STATUS_INVALID_PARAMETER;
}
{
return STATUS_INVALID_PARAMETER;
}
* @implemented
*/
NTSTATUS STDCALL NtRequestPort (IN HANDLE PortHandle,
* @implemented
*/
NTSTATUS STDCALL NtRequestPort (IN HANDLE PortHandle,
- IN PLPC_MESSAGE LpcMessage)
+ IN PPORT_MESSAGE LpcMessage)
{
NTSTATUS Status;
PEPORT Port;
{
NTSTATUS Status;
PEPORT Port;
*/
NTSTATUS STDCALL
NtRequestWaitReplyPort (IN HANDLE PortHandle,
*/
NTSTATUS STDCALL
NtRequestWaitReplyPort (IN HANDLE PortHandle,
- PLPC_MESSAGE UnsafeLpcRequest,
- PLPC_MESSAGE UnsafeLpcReply)
+ PPORT_MESSAGE UnsafeLpcRequest,
+ PPORT_MESSAGE UnsafeLpcReply)
{
PETHREAD CurrentThread;
struct _KPROCESS *AttachedProcess;
PEPORT Port;
PQUEUEDMESSAGE Message;
KIRQL oldIrql;
{
PETHREAD CurrentThread;
struct _KPROCESS *AttachedProcess;
PEPORT Port;
PQUEUEDMESSAGE Message;
KIRQL oldIrql;
- PLPC_MESSAGE LpcRequest;
+ PPORT_MESSAGE LpcRequest;
USHORT LpcRequestMessageSize = 0, LpcRequestDataSize = 0;
KPROCESSOR_MODE PreviousMode;
NTSTATUS Status = STATUS_SUCCESS;
USHORT LpcRequestMessageSize = 0, LpcRequestDataSize = 0;
KPROCESSOR_MODE PreviousMode;
NTSTATUS Status = STATUS_SUCCESS;
_SEH_TRY
{
ProbeForRead(UnsafeLpcRequest,
_SEH_TRY
{
ProbeForRead(UnsafeLpcRequest,
1);
ProbeForWrite(UnsafeLpcReply,
1);
ProbeForWrite(UnsafeLpcReply,
- LpcRequestMessageSize = UnsafeLpcRequest->MessageSize;
+ LpcRequestMessageSize = UnsafeLpcRequest->u1.s1.TotalLength;
- LpcRequestMessageSize = UnsafeLpcRequest->MessageSize;
+ LpcRequestMessageSize = UnsafeLpcRequest->u1.s1.TotalLength;
}
DPRINT("NtRequestWaitReplyPort(PortHandle %x, LpcRequest %x, "
}
DPRINT("NtRequestWaitReplyPort(PortHandle %x, LpcRequest %x, "
- if (LpcRequestMessageSize > (sizeof(LPC_MESSAGE) + MAX_MESSAGE_DATA))
+ if (LpcRequestMessageSize > (sizeof(PORT_MESSAGE) + MAX_MESSAGE_DATA))
{
if (NULL != AttachedProcess)
{
{
if (NULL != AttachedProcess)
{
RtlCopyMemory(LpcRequest,
UnsafeLpcRequest,
LpcRequestMessageSize);
RtlCopyMemory(LpcRequest,
UnsafeLpcRequest,
LpcRequestMessageSize);
- LpcRequestMessageSize = LpcRequest->MessageSize;
- LpcRequestDataSize = LpcRequest->DataSize;
+ LpcRequestMessageSize = LpcRequest->u1.s1.TotalLength;
+ LpcRequestDataSize = LpcRequest->u1.s1.DataLength;
RtlCopyMemory(LpcRequest,
UnsafeLpcRequest,
LpcRequestMessageSize);
RtlCopyMemory(LpcRequest,
UnsafeLpcRequest,
LpcRequestMessageSize);
- LpcRequestMessageSize = LpcRequest->MessageSize;
- LpcRequestDataSize = LpcRequest->DataSize;
+ LpcRequestMessageSize = LpcRequest->u1.s1.TotalLength;
+ LpcRequestDataSize = LpcRequest->u1.s1.DataLength;
- if (LpcRequestMessageSize > (sizeof(LPC_MESSAGE) + MAX_MESSAGE_DATA))
+ if (LpcRequestMessageSize > (sizeof(PORT_MESSAGE) + MAX_MESSAGE_DATA))
{
ExFreePool(LpcRequest);
if (NULL != AttachedProcess)
{
ExFreePool(LpcRequest);
if (NULL != AttachedProcess)
ObDereferenceObject(Port);
return(STATUS_PORT_MESSAGE_TOO_LONG);
}
ObDereferenceObject(Port);
return(STATUS_PORT_MESSAGE_TOO_LONG);
}
- if (LpcRequestDataSize != (LpcRequestMessageSize - sizeof(LPC_MESSAGE)))
+ if (LpcRequestDataSize != (LpcRequestMessageSize - sizeof(PORT_MESSAGE)))
{
ExFreePool(LpcRequest);
if (NULL != AttachedProcess)
{
ExFreePool(LpcRequest);
if (NULL != AttachedProcess)
KeReleaseSpinLock(&Port->Lock, oldIrql);
if (Message)
{
KeReleaseSpinLock(&Port->Lock, oldIrql);
if (Message)
{
- DPRINT("Message->Message.MessageSize %d\n",
- Message->Message.MessageSize);
+ DPRINT("Message->Message.u1.s1.TotalLength %d\n",
+ Message->Message.u1.s1.TotalLength);
if (PreviousMode != KernelMode)
{
_SEH_TRY
{
RtlCopyMemory(UnsafeLpcReply,
&Message->Message,
if (PreviousMode != KernelMode)
{
_SEH_TRY
{
RtlCopyMemory(UnsafeLpcReply,
&Message->Message,
- Message->Message.MessageSize);
+ Message->Message.u1.s1.TotalLength);
{
RtlCopyMemory(UnsafeLpcReply,
&Message->Message,
{
RtlCopyMemory(UnsafeLpcReply,
&Message->Message,
- Message->Message.MessageSize);
+ Message->Message.u1.s1.TotalLength);
* REVISIONS
*/
NTSTATUS STDCALL NtWriteRequestData (HANDLE PortHandle,
* REVISIONS
*/
NTSTATUS STDCALL NtWriteRequestData (HANDLE PortHandle,
ULONG Index,
PVOID Buffer,
ULONG BufferLength,
ULONG Index,
PVOID Buffer,
ULONG BufferLength,
PCSRSS_PROCESS_DATA NewProcessData;
NTSTATUS Status;
PCSRSS_PROCESS_DATA NewProcessData;
NTSTATUS Status;
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
NewProcessData = CsrCreateProcessData(Request->Data.CreateProcessRequest.NewProcessId);
if (NewProcessData == NULL)
NewProcessData = CsrCreateProcessData(Request->Data.CreateProcessRequest.NewProcessId);
if (NewProcessData == NULL)
CSR_API(CsrTerminateProcess)
{
CSR_API(CsrTerminateProcess)
{
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE);
if (ProcessData == NULL)
{
if (ProcessData == NULL)
{
CSR_API(CsrConnectProcess)
{
CSR_API(CsrConnectProcess)
{
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Request->Status = STATUS_SUCCESS;
Request->Status = STATUS_SUCCESS;
CSR_API(CsrGetShutdownParameters)
{
CSR_API(CsrGetShutdownParameters)
{
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
if (ProcessData == NULL)
{
if (ProcessData == NULL)
{
CSR_API(CsrSetShutdownParameters)
{
CSR_API(CsrSetShutdownParameters)
{
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
if (ProcessData == NULL)
{
if (ProcessData == NULL)
{
CSR_API(CsrGetInputHandle)
{
CSR_API(CsrGetInputHandle)
{
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
if (ProcessData == NULL)
{
if (ProcessData == NULL)
{
CSR_API(CsrGetOutputHandle)
{
CSR_API(CsrGetOutputHandle)
{
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
if (ProcessData == NULL)
{
if (ProcessData == NULL)
{
CSR_API(CsrCloseHandle)
{
CSR_API(CsrCloseHandle)
{
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
if (ProcessData == NULL)
{
if (ProcessData == NULL)
{
CSR_API(CsrVerifyHandle)
{
CSR_API(CsrVerifyHandle)
{
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Request->Status = CsrVerifyObject(ProcessData, Request->Data.VerifyHandleRequest.Handle);
if (!NT_SUCCESS(Request->Status))
Request->Status = CsrVerifyObject(ProcessData, Request->Data.VerifyHandleRequest.Handle);
if (!NT_SUCCESS(Request->Status))
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
ProcessData = CsrGetProcessData(Request->Data.DuplicateHandleRequest.ProcessId);
Request->Status = CsrGetObject(ProcessData, Request->Data.DuplicateHandleRequest.Handle, &Object);
ProcessData = CsrGetProcessData(Request->Data.DuplicateHandleRequest.ProcessId);
Request->Status = CsrGetObject(ProcessData, Request->Data.DuplicateHandleRequest.Handle, &Object);
CSR_API(CsrGetInputWaitHandle)
{
CSR_API(CsrGetInputWaitHandle)
{
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
if (ProcessData == NULL)
{
if (ProcessData == NULL)
{
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
if (ServicesProcessIdValid == TRUE)
{
if (ServicesProcessIdValid == TRUE)
{
{
if (ApiDefinitions[DefIndex].Type == Type)
{
{
if (ApiDefinitions[DefIndex].Type == Type)
{
- if (Request->Header.DataSize < ApiDefinitions[DefIndex].MinRequestSize)
+ if (Request->Header.u1.s1.DataLength < ApiDefinitions[DefIndex].MinRequestSize)
{
DPRINT1("Request type %d min request size %d actual %d\n",
Type, ApiDefinitions[DefIndex].MinRequestSize,
{
DPRINT1("Request type %d min request size %d actual %d\n",
Type, ApiDefinitions[DefIndex].MinRequestSize,
- Request->Header.DataSize);
+ Request->Header.u1.s1.DataLength);
Request->Status = STATUS_INVALID_PARAMETER;
}
else
Request->Status = STATUS_INVALID_PARAMETER;
}
else
if (! Found)
{
DPRINT1("CSR: Unknown request type 0x%x\n", Request->Type);
if (! Found)
{
DPRINT1("CSR: Unknown request type 0x%x\n", Request->Type);
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Request->Status = STATUS_INVALID_SYSTEM_SERVICE;
}
}
Request->Status = STATUS_INVALID_SYSTEM_SERVICE;
}
}
}
/* If the connection was closed, handle that */
}
/* If the connection was closed, handle that */
- if (LpcRequest.Header.MessageType == LPC_PORT_CLOSED)
+ if (LpcRequest.Header.u2.s2.Type == LPC_PORT_CLOSED)
{
CsrFreeProcessData( LpcRequest.Header.ClientId.UniqueProcess );
break;
{
CsrFreeProcessData( LpcRequest.Header.ClientId.UniqueProcess );
break;
if (ProcessData == NULL)
{
DPRINT1("CSR: Message %d: Unable to find data for process 0x%x\n",
if (ProcessData == NULL)
{
DPRINT1("CSR: Message %d: Unable to find data for process 0x%x\n",
- LpcRequest.Header.MessageType,
+ LpcRequest.Header.u2.s2.Type,
LpcRequest.Header.ClientId.UniqueProcess);
break;
}
LpcRequest.Header.ClientId.UniqueProcess);
break;
}
{
HANDLE hSbApiPortListen = * (PHANDLE) PortHandle;
HANDLE hConnectedPort = (HANDLE) 0;
{
HANDLE hSbApiPortListen = * (PHANDLE) PortHandle;
HANDLE hConnectedPort = (HANDLE) 0;
- LPC_MAX_MESSAGE Request = {{0}};
+ LPC_MAX_MESSAGE Request;
PVOID Context = NULL;
NTSTATUS Status = STATUS_SUCCESS;
DPRINT("CSR: %s called\n", __FUNCTION__);
PVOID Context = NULL;
NTSTATUS Status = STATUS_SUCCESS;
DPRINT("CSR: %s called\n", __FUNCTION__);
+ RtlZeroMemory(&Request, sizeof(LPC_MAX_MESSAGE));
Status = NtListenPort (hSbApiPortListen, & Request.Header);
if (!NT_SUCCESS(Status))
{
Status = NtListenPort (hSbApiPortListen, & Request.Header);
if (!NT_SUCCESS(Status))
{
__FUNCTION__, Status);
} else {
DPRINT("-- 3\n");
__FUNCTION__, Status);
} else {
DPRINT("-- 3\n");
- PLPC_MESSAGE Reply = NULL;
+ PPORT_MESSAGE Reply = NULL;
/*
* Tell the init thread the SM gave the
* green light for boostrapping.
/*
* Tell the init thread the SM gave the
* green light for boostrapping.
__FUNCTION__, Status);
break;
}
__FUNCTION__, Status);
break;
}
- switch (Request.Header.MessageType)//fix .h PORT_MESSAGE_TYPE(Request))
+ switch (Request.Header.u2.s2.Type)//fix .h PORT_MESSAGE_TYPE(Request))
{
/* TODO */
default:
DPRINT1("CSR: %s received message (type=%d)\n",
{
/* TODO */
default:
DPRINT1("CSR: %s received message (type=%d)\n",
- __FUNCTION__, Request.Header.MessageType);
+ __FUNCTION__, Request.Header.u2.s2.Type);
DPRINT("CsrAllocConsole\n");
DPRINT("CsrAllocConsole\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
if (ProcessData == NULL)
{
if (ProcessData == NULL)
{
DPRINT("CsrFreeConsole\n");
DPRINT("CsrFreeConsole\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
if (ProcessData == NULL || ProcessData->Console == NULL)
{
if (ProcessData == NULL || ProcessData->Console == NULL)
{
/* truncate length to CSRSS_MAX_READ_CONSOLE_REQUEST */
nNumberOfCharsToRead = min(Request->Data.ReadConsoleRequest.NrCharactersToRead, CSRSS_MAX_READ_CONSOLE / CharSize);
/* truncate length to CSRSS_MAX_READ_CONSOLE_REQUEST */
nNumberOfCharsToRead = min(Request->Data.ReadConsoleRequest.NrCharactersToRead, CSRSS_MAX_READ_CONSOLE / CharSize);
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = Request->Header.MessageSize - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = Request->Header.u1.s1.TotalLength - LPC_MESSAGE_BASE_SIZE;
Buffer = Request->Data.ReadConsoleRequest.Buffer;
UnicodeBuffer = (PWCHAR)Buffer;
Buffer = Request->Data.ReadConsoleRequest.Buffer;
UnicodeBuffer = (PWCHAR)Buffer;
{
Console->EchoCount = 0; /* if the client is no longer waiting on input, do not echo */
}
{
Console->EchoCount = 0; /* if the client is no longer waiting on input, do not echo */
}
- Request->Header.MessageSize += i * CharSize;
+ Request->Header.u1.s1.TotalLength += i * CharSize;
ConioUnlockConsole(Console);
return Request->Status;
ConioUnlockConsole(Console);
return Request->Status;
DPRINT("CsrWriteConsole\n");
DPRINT("CsrWriteConsole\n");
- if (Request->Header.DataSize
+ if (Request->Header.u1.s1.DataLength
< sizeof(CSRSS_WRITE_CONSOLE) - 1
+ (Request->Data.WriteConsoleRequest.NrCharactersToWrite * CharSize))
{
DPRINT1("Invalid request size\n");
< sizeof(CSRSS_WRITE_CONSOLE) - 1
+ (Request->Data.WriteConsoleRequest.NrCharactersToWrite * CharSize))
{
DPRINT1("Invalid request size\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
return Request->Status = STATUS_INVALID_PARAMETER;
}
Status = ConioConsoleFromProcessData(ProcessData, &Console);
return Request->Status = STATUS_INVALID_PARAMETER;
}
Status = ConioConsoleFromProcessData(ProcessData, &Console);
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
if (! NT_SUCCESS(Status))
{
if (! NT_SUCCESS(Status))
{
DPRINT("CsrGetScreenBufferInfo\n");
DPRINT("CsrGetScreenBufferInfo\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Status = ConioLockScreenBuffer(ProcessData, Request->Data.ScreenBufferInfoRequest.ConsoleHandle, &Buff);
if (! NT_SUCCESS(Status))
Status = ConioLockScreenBuffer(ProcessData, Request->Data.ScreenBufferInfoRequest.ConsoleHandle, &Buff);
if (! NT_SUCCESS(Status))
return Request->Status = Status;
}
return Request->Status = Status;
}
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Status = ConioLockScreenBuffer(ProcessData, Request->Data.SetCursorRequest.ConsoleHandle, &Buff);
if (! NT_SUCCESS(Status))
Status = ConioLockScreenBuffer(ProcessData, Request->Data.SetCursorRequest.ConsoleHandle, &Buff);
if (! NT_SUCCESS(Status))
CharSize = (Request->Data.WriteConsoleOutputCharRequest.Unicode ? sizeof(WCHAR) : sizeof(CHAR));
CharSize = (Request->Data.WriteConsoleOutputCharRequest.Unicode ? sizeof(WCHAR) : sizeof(CHAR));
- if (Request->Header.DataSize
+ if (Request->Header.u1.s1.DataLength
< sizeof(CSRSS_WRITE_CONSOLE_OUTPUT_CHAR) - 1
+ (Request->Data.WriteConsoleOutputCharRequest.Length * CharSize))
{
DPRINT1("Invalid request size\n");
< sizeof(CSRSS_WRITE_CONSOLE_OUTPUT_CHAR) - 1
+ (Request->Data.WriteConsoleOutputCharRequest.Length * CharSize))
{
DPRINT1("Invalid request size\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
return Request->Status = STATUS_INVALID_PARAMETER;
}
Status = ConioConsoleFromProcessData(ProcessData, &Console);
return Request->Status = STATUS_INVALID_PARAMETER;
}
Status = ConioConsoleFromProcessData(ProcessData, &Console);
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
if (NT_SUCCESS(Status))
{
if(Request->Data.WriteConsoleOutputCharRequest.Unicode)
if (NT_SUCCESS(Status))
{
if(Request->Data.WriteConsoleOutputCharRequest.Unicode)
DPRINT("CsrFillOutputChar\n");
DPRINT("CsrFillOutputChar\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Status = ConioConsoleFromProcessData(ProcessData, &Console);
if (! NT_SUCCESS(Status))
Status = ConioConsoleFromProcessData(ProcessData, &Console);
if (! NT_SUCCESS(Status))
DPRINT("CsrReadInputEvent\n");
DPRINT("CsrReadInputEvent\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Request->Data.ReadInputRequest.Event = ProcessData->ConsoleEvent;
Status = ConioLockConsole(ProcessData, Request->Data.ReadInputRequest.ConsoleHandle, &Console);
Request->Data.ReadInputRequest.Event = ProcessData->ConsoleEvent;
Status = ConioLockConsole(ProcessData, Request->Data.ReadInputRequest.ConsoleHandle, &Console);
DPRINT("CsrWriteConsoleOutputAttrib\n");
DPRINT("CsrWriteConsoleOutputAttrib\n");
- if (Request->Header.DataSize
+ if (Request->Header.u1.s1.DataLength
< sizeof(CSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB) - 1
+ Request->Data.WriteConsoleOutputAttribRequest.Length)
{
DPRINT1("Invalid request size\n");
< sizeof(CSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB) - 1
+ Request->Data.WriteConsoleOutputAttribRequest.Length)
{
DPRINT1("Invalid request size\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
return Request->Status = STATUS_INVALID_PARAMETER;
}
Status = ConioConsoleFromProcessData(ProcessData, &Console);
return Request->Status = STATUS_INVALID_PARAMETER;
}
Status = ConioConsoleFromProcessData(ProcessData, &Console);
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
if (! NT_SUCCESS(Status))
{
return Request->Status = Status;
if (! NT_SUCCESS(Status))
{
return Request->Status = Status;
return Request->Status = Status;
}
return Request->Status = Status;
}
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Status = ConioLockScreenBuffer(ProcessData, Request->Data.FillOutputAttribRequest.ConsoleHandle, &Buff);
if (! NT_SUCCESS(Status))
{
Status = ConioLockScreenBuffer(ProcessData, Request->Data.FillOutputAttribRequest.ConsoleHandle, &Buff);
if (! NT_SUCCESS(Status))
{
DPRINT("CsrGetCursorInfo\n");
DPRINT("CsrGetCursorInfo\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Status = ConioLockScreenBuffer(ProcessData, Request->Data.GetCursorInfoRequest.ConsoleHandle, &Buff);
if (! NT_SUCCESS(Status))
Status = ConioLockScreenBuffer(ProcessData, Request->Data.GetCursorInfoRequest.ConsoleHandle, &Buff);
if (! NT_SUCCESS(Status))
DPRINT("CsrSetCursorInfo\n");
DPRINT("CsrSetCursorInfo\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Status = ConioConsoleFromProcessData(ProcessData, &Console);
if (! NT_SUCCESS(Status))
Status = ConioConsoleFromProcessData(ProcessData, &Console);
if (! NT_SUCCESS(Status))
DPRINT("CsrSetConsoleMode\n");
DPRINT("CsrSetConsoleMode\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Status = Win32CsrGetObject(ProcessData,
Request->Data.SetConsoleModeRequest.ConsoleHandle,
(Object_t **) &Console);
Status = Win32CsrGetObject(ProcessData,
Request->Data.SetConsoleModeRequest.ConsoleHandle,
(Object_t **) &Console);
DPRINT("CsrGetConsoleMode\n");
DPRINT("CsrGetConsoleMode\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Status = Win32CsrGetObject(ProcessData, Request->Data.GetConsoleModeRequest.ConsoleHandle,
(Object_t **) &Console);
if (! NT_SUCCESS(Status))
Status = Win32CsrGetObject(ProcessData, Request->Data.GetConsoleModeRequest.ConsoleHandle,
(Object_t **) &Console);
if (! NT_SUCCESS(Status))
return Request->Status = STATUS_INVALID_HANDLE;
}
return Request->Status = STATUS_INVALID_HANDLE;
}
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Buff = HeapAlloc(Win32CsrApiHeap, 0, sizeof(CSRSS_SCREEN_BUFFER));
if (NULL == Buff)
Buff = HeapAlloc(Win32CsrApiHeap, 0, sizeof(CSRSS_SCREEN_BUFFER));
if (NULL == Buff)
return Request->Status = STATUS_INVALID_HANDLE;
}
return Request->Status = STATUS_INVALID_HANDLE;
}
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Status = ConioLockScreenBuffer(ProcessData, Request->Data.SetScreenBufferRequest.OutputHandle, &Buff);
if (! NT_SUCCESS(Status))
Status = ConioLockScreenBuffer(ProcessData, Request->Data.SetScreenBufferRequest.OutputHandle, &Buff);
if (! NT_SUCCESS(Status))
- if (Request->Header.DataSize
+ if (Request->Header.u1.s1.DataLength
< sizeof(CSRSS_SET_TITLE) - 1
+ Request->Data.SetTitleRequest.Length)
{
DPRINT1("Invalid request size\n");
< sizeof(CSRSS_SET_TITLE) - 1
+ Request->Data.SetTitleRequest.Length)
{
DPRINT1("Invalid request size\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
return Request->Status = STATUS_INVALID_PARAMETER;
}
Status = ConioLockConsole(ProcessData, Request->Data.SetTitleRequest.Console, &Console);
return Request->Status = STATUS_INVALID_PARAMETER;
}
Status = ConioLockConsole(ProcessData, Request->Data.SetTitleRequest.Console, &Console);
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
if(! NT_SUCCESS(Status))
{
Request->Status = Status;
if(! NT_SUCCESS(Status))
{
Request->Status = Status;
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Status = ConioLockConsole(ProcessData,
Request->Data.GetTitleRequest.ConsoleHandle,
&Console);
Status = ConioLockConsole(ProcessData,
Request->Data.GetTitleRequest.ConsoleHandle,
&Console);
Request->Data.GetTitleRequest.ConsoleHandle = Request->Data.GetTitleRequest.ConsoleHandle;
Request->Data.GetTitleRequest.Length = Console->Title.Length;
wcscpy (Request->Data.GetTitleRequest.Title, Console->Title.Buffer);
Request->Data.GetTitleRequest.ConsoleHandle = Request->Data.GetTitleRequest.ConsoleHandle;
Request->Data.GetTitleRequest.Length = Console->Title.Length;
wcscpy (Request->Data.GetTitleRequest.Title, Console->Title.Buffer);
- Request->Header.MessageSize += Console->Title.Length;
- Request->Header.DataSize += Console->Title.Length;
+ Request->Header.u1.s1.TotalLength += Console->Title.Length;
+ Request->Header.u1.s1.DataLength += Console->Title.Length;
Request->Status = STATUS_SUCCESS;
ConioUnlockConsole(Console);
Request->Status = STATUS_SUCCESS;
ConioUnlockConsole(Console);
return Request->Status = Status;
}
return Request->Status = Status;
}
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Status = ConioLockScreenBuffer(ProcessData,
Request->Data.WriteConsoleOutputRequest.ConsoleHandle,
&Buff);
Status = ConioLockScreenBuffer(ProcessData,
Request->Data.WriteConsoleOutputRequest.ConsoleHandle,
&Buff);
DPRINT("CsrFlushInputBuffer\n");
DPRINT("CsrFlushInputBuffer\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Status = ConioLockConsole(ProcessData,
Request->Data.FlushInputBufferRequest.ConsoleInput,
&Console);
Status = ConioLockConsole(ProcessData,
Request->Data.FlushInputBufferRequest.ConsoleInput,
&Console);
return Request->Status = Status;
}
return Request->Status = Status;
}
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Status = ConioLockScreenBuffer(ProcessData, ConsoleHandle, &Buff);
if (! NT_SUCCESS(Status))
{
Status = ConioLockScreenBuffer(ProcessData, ConsoleHandle, &Buff);
if (! NT_SUCCESS(Status))
{
DPRINT("CsrReadConsoleOutputChar\n");
DPRINT("CsrReadConsoleOutputChar\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = Request->Header.MessageSize - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = Request->Header.u1.s1.TotalLength - LPC_MESSAGE_BASE_SIZE;
ReadBuffer = Request->Data.ReadConsoleOutputCharRequest.String;
CharSize = (Request->Data.ReadConsoleOutputCharRequest.Unicode ? sizeof(WCHAR) : sizeof(CHAR));
ReadBuffer = Request->Data.ReadConsoleOutputCharRequest.String;
CharSize = (Request->Data.ReadConsoleOutputCharRequest.Unicode ? sizeof(WCHAR) : sizeof(CHAR));
Request->Status = STATUS_SUCCESS;
Request->Data.ReadConsoleOutputCharRequest.EndCoord.X = Xpos - Buff->ShowX;
Request->Data.ReadConsoleOutputCharRequest.EndCoord.Y = (Ypos - Buff->ShowY + Buff->MaxY) % Buff->MaxY;
Request->Status = STATUS_SUCCESS;
Request->Data.ReadConsoleOutputCharRequest.EndCoord.X = Xpos - Buff->ShowX;
Request->Data.ReadConsoleOutputCharRequest.EndCoord.Y = (Ypos - Buff->ShowY + Buff->MaxY) % Buff->MaxY;
- Request->Header.MessageSize += Request->Data.ReadConsoleOutputCharRequest.NumCharsToRead;
- Request->Header.DataSize += Request->Data.ReadConsoleOutputCharRequest.NumCharsToRead;
+ Request->Header.u1.s1.TotalLength += Request->Data.ReadConsoleOutputCharRequest.NumCharsToRead;
+ Request->Header.u1.s1.DataLength += Request->Data.ReadConsoleOutputCharRequest.NumCharsToRead;
ConioUnlockScreenBuffer(Buff);
if (NULL != Console)
ConioUnlockScreenBuffer(Buff);
if (NULL != Console)
DPRINT("CsrReadConsoleOutputAttrib\n");
DPRINT("CsrReadConsoleOutputAttrib\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = Request->Header.MessageSize - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = Request->Header.u1.s1.TotalLength - LPC_MESSAGE_BASE_SIZE;
ReadBuffer = Request->Data.ReadConsoleOutputAttribRequest.String;
Status = ConioLockScreenBuffer(ProcessData, Request->Data.ReadConsoleOutputAttribRequest.ConsoleHandle, &Buff);
ReadBuffer = Request->Data.ReadConsoleOutputAttribRequest.String;
Status = ConioLockScreenBuffer(ProcessData, Request->Data.ReadConsoleOutputAttribRequest.ConsoleHandle, &Buff);
Request->Status = STATUS_SUCCESS;
Request->Data.ReadConsoleOutputAttribRequest.EndCoord.X = Xpos - Buff->ShowX;
Request->Data.ReadConsoleOutputAttribRequest.EndCoord.Y = (Ypos - Buff->ShowY + Buff->MaxY) % Buff->MaxY;
Request->Status = STATUS_SUCCESS;
Request->Data.ReadConsoleOutputAttribRequest.EndCoord.X = Xpos - Buff->ShowX;
Request->Data.ReadConsoleOutputAttribRequest.EndCoord.Y = (Ypos - Buff->ShowY + Buff->MaxY) % Buff->MaxY;
- Request->Header.MessageSize += Request->Data.ReadConsoleOutputAttribRequest.NumAttrsToRead;
- Request->Header.DataSize += Request->Data.ReadConsoleOutputAttribRequest.NumAttrsToRead;
+ Request->Header.u1.s1.TotalLength += Request->Data.ReadConsoleOutputAttribRequest.NumAttrsToRead;
+ Request->Header.u1.s1.DataLength += Request->Data.ReadConsoleOutputAttribRequest.NumAttrsToRead;
ConioUnlockScreenBuffer(Buff);
ConioUnlockScreenBuffer(Buff);
DPRINT("CsrGetNumberOfConsoleInputEvents\n");
DPRINT("CsrGetNumberOfConsoleInputEvents\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = Request->Header.MessageSize - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = Request->Header.u1.s1.TotalLength - LPC_MESSAGE_BASE_SIZE;
Status = ConioLockConsole(ProcessData, Request->Data.GetNumInputEventsRequest.ConsoleHandle, &Console);
if (! NT_SUCCESS(Status))
Status = ConioLockConsole(ProcessData, Request->Data.GetNumInputEventsRequest.ConsoleHandle, &Console);
if (! NT_SUCCESS(Status))
DPRINT("CsrPeekConsoleInput\n");
DPRINT("CsrPeekConsoleInput\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Status = ConioLockConsole(ProcessData, Request->Data.GetNumInputEventsRequest.ConsoleHandle, &Console);
if(! NT_SUCCESS(Status))
Status = ConioLockConsole(ProcessData, Request->Data.GetNumInputEventsRequest.ConsoleHandle, &Console);
if(! NT_SUCCESS(Status))
DPRINT("CsrReadConsoleOutput\n");
DPRINT("CsrReadConsoleOutput\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Status = ConioLockScreenBuffer(ProcessData, Request->Data.ReadConsoleOutputRequest.ConsoleHandle, &Buff);
if (! NT_SUCCESS(Status))
Status = ConioLockScreenBuffer(ProcessData, Request->Data.ReadConsoleOutputRequest.ConsoleHandle, &Buff);
if (! NT_SUCCESS(Status))
DPRINT("CsrWriteConsoleInput\n");
DPRINT("CsrWriteConsoleInput\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Status = ConioLockConsole(ProcessData, Request->Data.WriteConsoleInputRequest.ConsoleHandle, &Console);
if (! NT_SUCCESS(Status))
Status = ConioLockConsole(ProcessData, Request->Data.WriteConsoleInputRequest.ConsoleHandle, &Console);
if (! NT_SUCCESS(Status))
DPRINT("CsrHardwareStateProperty\n");
DPRINT("CsrHardwareStateProperty\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Status = ConioLockConsole(ProcessData,
Request->Data.ConsoleHardwareStateRequest.ConsoleHandle,
Status = ConioLockConsole(ProcessData,
Request->Data.ConsoleHardwareStateRequest.ConsoleHandle,
DPRINT("CsrGetConsoleWindow\n");
DPRINT("CsrGetConsoleWindow\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Status = ConioConsoleFromProcessData(ProcessData, &Console);
if (! NT_SUCCESS(Status))
Status = ConioConsoleFromProcessData(ProcessData, &Console);
if (! NT_SUCCESS(Status))
DPRINT("CsrSetConsoleIcon\n");
DPRINT("CsrSetConsoleIcon\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Status = ConioConsoleFromProcessData(ProcessData, &Console);
if (! NT_SUCCESS(Status))
Status = ConioConsoleFromProcessData(ProcessData, &Console);
if (! NT_SUCCESS(Status))
return Request->Status = Status;
}
return Request->Status = Status;
}
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Request->Data.GetConsoleCodePage.CodePage = Console->CodePage;
ConioUnlockConsole(Console);
return Request->Status = STATUS_SUCCESS;
Request->Data.GetConsoleCodePage.CodePage = Console->CodePage;
ConioUnlockConsole(Console);
return Request->Status = STATUS_SUCCESS;
return Request->Status = Status;
}
return Request->Status = Status;
}
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
if (IsValidCodePage(Request->Data.SetConsoleCodePage.CodePage))
{
Console->CodePage = Request->Data.SetConsoleCodePage.CodePage;
if (IsValidCodePage(Request->Data.SetConsoleCodePage.CodePage))
{
Console->CodePage = Request->Data.SetConsoleCodePage.CodePage;
return Request->Status = Status;
}
return Request->Status = Status;
}
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
Request->Data.GetConsoleOutputCodePage.CodePage = Console->OutputCodePage;
ConioUnlockConsole(Console);
return Request->Status = STATUS_SUCCESS;
Request->Data.GetConsoleOutputCodePage.CodePage = Console->OutputCodePage;
ConioUnlockConsole(Console);
return Request->Status = STATUS_SUCCESS;
return Request->Status = Status;
}
return Request->Status = Status;
}
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
if (IsValidCodePage(Request->Data.SetConsoleOutputCodePage.CodePage))
{
Console->OutputCodePage = Request->Data.SetConsoleOutputCodePage.CodePage;
if (IsValidCodePage(Request->Data.SetConsoleOutputCodePage.CodePage))
{
Console->OutputCodePage = Request->Data.SetConsoleOutputCodePage.CodePage;
DPRINT("CsrGetProcessList\n");
Buffer = Request->Data.GetProcessListRequest.ProcessId;
DPRINT("CsrGetProcessList\n");
Buffer = Request->Data.GetProcessListRequest.ProcessId;
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = Request->Header.MessageSize - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = Request->Header.u1.s1.TotalLength - LPC_MESSAGE_BASE_SIZE;
nItems = nCopied = 0;
Request->Data.GetProcessListRequest.nProcessIdsCopied = 0;
nItems = nCopied = 0;
Request->Data.GetProcessListRequest.nProcessIdsCopied = 0;
DPRINT("CsrCreateDesktop\n");
DPRINT("CsrCreateDesktop\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
PRIVATE_NOTIFY_DESKTOP nmh;
DPRINT("CsrShowDesktop\n");
PRIVATE_NOTIFY_DESKTOP nmh;
DPRINT("CsrShowDesktop\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
nmh.hdr.hwndFrom = Request->Data.ShowDesktopRequest.DesktopWindow;
nmh.hdr.idFrom = 0;
nmh.hdr.hwndFrom = Request->Data.ShowDesktopRequest.DesktopWindow;
nmh.hdr.idFrom = 0;
PRIVATE_NOTIFY_DESKTOP nmh;
DPRINT("CsrHideDesktop\n");
PRIVATE_NOTIFY_DESKTOP nmh;
DPRINT("CsrHideDesktop\n");
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
nmh.hdr.hwndFrom = Request->Data.ShowDesktopRequest.DesktopWindow;
nmh.hdr.idFrom = 0;
nmh.hdr.hwndFrom = Request->Data.ShowDesktopRequest.DesktopWindow;
nmh.hdr.idFrom = 0;
CSR_API(CsrRegisterLogonProcess)
{
CSR_API(CsrRegisterLogonProcess)
{
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
if (Request->Data.RegisterLogonProcessRequest.Register)
{
if (Request->Data.RegisterLogonProcessRequest.Register)
{
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
if (0 == GetWindowThreadProcessId(Request->Data.SetLogonNotifyWindowRequest.LogonNotifyWindow,
&WindowCreator))
if (0 == GetWindowThreadProcessId(Request->Data.SetLogonNotifyWindowRequest.LogonNotifyWindow,
&WindowCreator))
CSR_API(CsrExitReactos)
{
CSR_API(CsrExitReactos)
{
- Request->Header.MessageSize = sizeof(CSR_API_MESSAGE);
- Request->Header.DataSize = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
+ Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE);
+ Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - LPC_MESSAGE_BASE_SIZE;
if (NULL == LogonNotifyWindow)
{
if (NULL == LogonNotifyWindow)
{
DbgSsApiPortThread (PVOID dummy)
{
NTSTATUS Status = STATUS_SUCCESS;
DbgSsApiPortThread (PVOID dummy)
{
NTSTATUS Status = STATUS_SUCCESS;
- LPC_MAX_MESSAGE Request = {{0}};
+ LPC_MAX_MESSAGE Request ;
+ RtlZeroMemory(&Request, sizeof(LPC_MAX_MESSAGE));
while (TRUE)
{
Status = NtListenPort (DbgSsApiPort, & Request.Header);
while (TRUE)
{
Status = NtListenPort (DbgSsApiPort, & Request.Header);
DbgUiApiPortThread (PVOID dummy)
{
NTSTATUS Status = STATUS_SUCCESS;
DbgUiApiPortThread (PVOID dummy)
{
NTSTATUS Status = STATUS_SUCCESS;
- LPC_MAX_MESSAGE Request = {{0}};
+ LPC_MAX_MESSAGE Request;
+ RtlZeroMemory(&Request, sizeof(LPC_MAX_MESSAGE));
while (TRUE)
{
Status = NtListenPort (DbgUiApiPort, & Request.Header);
while (TRUE)
{
Status = NtListenPort (DbgUiApiPort, & Request.Header);
{
NTSTATUS Status = STATUS_SUCCESS;
PVOID Unknown = NULL;
{
NTSTATUS Status = STATUS_SUCCESS;
PVOID Unknown = NULL;
- PLPC_MESSAGE Reply = NULL;
- SM_PORT_MESSAGE Request = {{0}};
+ PPORT_MESSAGE Reply = NULL;
+ SM_PORT_MESSAGE Request;
HANDLE ConnectedPort = * (PHANDLE) pConnectedPort;
DPRINT("SM: %s called\n", __FUNCTION__);
HANDLE ConnectedPort = * (PHANDLE) pConnectedPort;
DPRINT("SM: %s called\n", __FUNCTION__);
+ RtlZeroMemory(&Request, sizeof(SM_PORT_MESSAGE));
Status = NtReplyWaitReceivePort(ConnectedPort,
(PULONG) & Unknown,
Reply,
Status = NtReplyWaitReceivePort(ConnectedPort,
(PULONG) & Unknown,
Reply,
- (PLPC_MESSAGE) & Request);
+ (PPORT_MESSAGE) & Request);
if (NT_SUCCESS(Status))
{
DPRINT("SM: %s: message received (type=%d)\n",
__FUNCTION__,
if (NT_SUCCESS(Status))
{
DPRINT("SM: %s: message received (type=%d)\n",
__FUNCTION__,
- PORT_MESSAGE_TYPE(Request));
+ LPC_MESSAGE_TYPE(Request));
- switch (Request.Header.MessageType)
+ switch (Request.Header.u2.s2.Type)
{
case LPC_CONNECTION_REQUEST:
SmpHandleConnectionRequest (&Request);
{
case LPC_CONNECTION_REQUEST:
SmpHandleConnectionRequest (&Request);
(Request.SmHeader.ApiIndex < (sizeof SmApi / sizeof SmApi[0])))
{
Status = SmApi[Request.SmHeader.ApiIndex](&Request);
(Request.SmHeader.ApiIndex < (sizeof SmApi / sizeof SmApi[0])))
{
Status = SmApi[Request.SmHeader.ApiIndex](&Request);
- Reply = (PLPC_MESSAGE) & Request;
+ Reply = (PPORT_MESSAGE) & Request;
} else {
Request.SmHeader.Status = STATUS_NOT_IMPLEMENTED;
} else {
Request.SmHeader.Status = STATUS_NOT_IMPLEMENTED;
- Reply = (PLPC_MESSAGE) & Request;
+ Reply = (PPORT_MESSAGE) & Request;
DPRINT("SM: %s called:\n SubSystemID=%d\n SbName=\"%S\"\n",
__FUNCTION__, ConnectData->SubSystemId, ConnectData->SbName);
DPRINT("SM: %s called:\n SubSystemID=%d\n SbName=\"%S\"\n",
__FUNCTION__, ConnectData->SubSystemId, ConnectData->SbName);
- if(sizeof (SM_CONNECT_DATA) == Request->Header.DataSize)
+ if(sizeof (SM_CONNECT_DATA) == Request->Header.u1.s1.DataLength)
{
if(IMAGE_SUBSYSTEM_UNKNOWN == ConnectData->SubSystemId)
{
{
if(IMAGE_SUBSYSTEM_UNKNOWN == ConnectData->SubSystemId)
{
#if defined(__USE_NT_LPC__)
Status = NtAcceptConnectPort (ClientDataApiPort,
Context,
#if defined(__USE_NT_LPC__)
Status = NtAcceptConnectPort (ClientDataApiPort,
Context,
- (PLPC_MESSAGE) Request,
+ (PPORT_MESSAGE) Request,
SmpApiThread (HANDLE ListeningPort)
{
NTSTATUS Status = STATUS_SUCCESS;
SmpApiThread (HANDLE ListeningPort)
{
NTSTATUS Status = STATUS_SUCCESS;
- LPC_MAX_MESSAGE Request = {{0}};
+ LPC_MAX_MESSAGE Request;
DPRINT("SM: %s called\n", __FUNCTION__);
DPRINT("SM: %s called\n", __FUNCTION__);
+ RtlZeroMemory(&Request, sizeof(LPC_MAX_MESSAGE));