[NTOS:LPC]: Code formatting, with hardocded_flags--;

svn path=/trunk/; revision=59965
This commit is contained in:
Hermès Bélusca-Maïto 2013-09-02 21:09:56 +00:00
parent cdb303dc54
commit f475efbd85
4 changed files with 59 additions and 45 deletions

View file

@ -57,6 +57,12 @@
#define LPCP_THREAD_FLAGS (LPCP_THREAD_FLAG_IS_PORT | \ #define LPCP_THREAD_FLAGS (LPCP_THREAD_FLAG_IS_PORT | \
LPCP_THREAD_FLAG_NO_IMPERSONATION) LPCP_THREAD_FLAG_NO_IMPERSONATION)
//
// LPC Locking Flags
//
#define LPCP_LOCK_OWNED 1
#define LPCP_LOCK_RELEASE 2
// //
// Internal Port Management // Internal Port Management
// //
@ -86,7 +92,7 @@ VOID
NTAPI NTAPI
LpcpFreeToPortZone( LpcpFreeToPortZone(
IN PLPCP_MESSAGE Message, IN PLPCP_MESSAGE Message,
IN ULONG Flags IN ULONG LockFlags
); );
VOID VOID
@ -104,7 +110,7 @@ NTAPI
LpcpSaveDataInfoMessage( LpcpSaveDataInfoMessage(
IN PLPCP_PORT_OBJECT Port, IN PLPCP_PORT_OBJECT Port,
IN PLPCP_MESSAGE Message, IN PLPCP_MESSAGE Message,
IN ULONG LockHeld IN ULONG LockFlags
); );
// //

View file

@ -50,14 +50,17 @@ LpcExitThread(IN PETHREAD Thread)
VOID VOID
NTAPI NTAPI
LpcpFreeToPortZone(IN PLPCP_MESSAGE Message, LpcpFreeToPortZone(IN PLPCP_MESSAGE Message,
IN ULONG Flags) IN ULONG LockFlags)
{ {
PLPCP_CONNECTION_MESSAGE ConnectMessage; PLPCP_CONNECTION_MESSAGE ConnectMessage;
PLPCP_PORT_OBJECT ClientPort = NULL; PLPCP_PORT_OBJECT ClientPort = NULL;
PETHREAD Thread = NULL; PETHREAD Thread = NULL;
BOOLEAN LockHeld = Flags & 1, ReleaseLock = Flags & 2; BOOLEAN LockHeld = (LockFlags & LPCP_LOCK_OWNED);
BOOLEAN ReleaseLock = (LockFlags & LPCP_LOCK_RELEASE);
PAGED_CODE(); PAGED_CODE();
LPCTRACE(LPC_CLOSE_DEBUG, "Message: %p. Flags: %lx\n", Message, Flags);
LPCTRACE(LPC_CLOSE_DEBUG, "Message: %p. LockFlags: %lx\n", Message, LockFlags);
/* Acquire the lock if not already */ /* Acquire the lock if not already */
if (!LockHeld) KeAcquireGuardedMutex(&LpcpLock); if (!LockHeld) KeAcquireGuardedMutex(&LpcpLock);
@ -183,7 +186,7 @@ LpcpDestroyPortQueue(IN PLPCP_PORT_OBJECT Port,
Thread->LpcReplyMessage = NULL; Thread->LpcReplyMessage = NULL;
/* And remove the message from the port zone */ /* And remove the message from the port zone */
LpcpFreeToPortZone(Message, 1); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED);
NextEntry = Port->LpcReplyChainHead.Flink; NextEntry = Port->LpcReplyChainHead.Flink;
} }
@ -210,7 +213,7 @@ LpcpDestroyPortQueue(IN PLPCP_PORT_OBJECT Port,
InitializeListHead(&Message->Entry); InitializeListHead(&Message->Entry);
/* Remove it from the port zone */ /* Remove it from the port zone */
LpcpFreeToPortZone(Message, 1); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED);
} }
/* Release the lock */ /* Release the lock */
@ -404,7 +407,7 @@ LpcpDeletePort(IN PVOID ObjectBody)
/* Free queued messages */ /* Free queued messages */
RemoveEntryList(&Message->Entry); RemoveEntryList(&Message->Entry);
InitializeListHead(&Message->Entry); InitializeListHead(&Message->Entry);
LpcpFreeToPortZone(Message, 1); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED);
/* Restart at the head */ /* Restart at the head */
NextEntry = ListHead->Flink; NextEntry = ListHead->Flink;
@ -417,7 +420,7 @@ LpcpDeletePort(IN PVOID ObjectBody)
/* Remove it */ /* Remove it */
RemoveEntryList(&Message->Entry); RemoveEntryList(&Message->Entry);
InitializeListHead(&Message->Entry); InitializeListHead(&Message->Entry);
LpcpFreeToPortZone(Message, 1); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED);
/* Restart at the head */ /* Restart at the head */
NextEntry = ListHead->Flink; NextEntry = ListHead->Flink;

View file

@ -48,7 +48,7 @@ LpcpFreeDataInfoMessage(IN PLPCP_PORT_OBJECT Port,
/* Unlink and free it */ /* Unlink and free it */
RemoveEntryList(&Message->Entry); RemoveEntryList(&Message->Entry);
InitializeListHead(&Message->Entry); InitializeListHead(&Message->Entry);
LpcpFreeToPortZone(Message, 1); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED);
break; break;
} }
@ -61,8 +61,10 @@ VOID
NTAPI NTAPI
LpcpSaveDataInfoMessage(IN PLPCP_PORT_OBJECT Port, LpcpSaveDataInfoMessage(IN PLPCP_PORT_OBJECT Port,
IN PLPCP_MESSAGE Message, IN PLPCP_MESSAGE Message,
IN ULONG LockHeld) IN ULONG LockFlags)
{ {
BOOLEAN LockHeld = (LockFlags & LPCP_LOCK_OWNED);
PAGED_CODE(); PAGED_CODE();
/* Acquire the lock */ /* Acquire the lock */
@ -236,7 +238,7 @@ NtReplyPort(IN HANDLE PortHandle,
Request) != LPC_REQUEST))) Request) != LPC_REQUEST)))
{ {
/* It isn't, fail */ /* It isn't, fail */
LpcpFreeToPortZone(Message, 3); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
if (ConnectionPort) ObDereferenceObject(ConnectionPort); if (ConnectionPort) ObDereferenceObject(ConnectionPort);
ObDereferenceObject(WakeupThread); ObDereferenceObject(WakeupThread);
ObDereferenceObject(Port); ObDereferenceObject(Port);
@ -255,7 +257,7 @@ NtReplyPort(IN HANDLE PortHandle,
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{ {
/* Fail */ /* Fail */
LpcpFreeToPortZone(Message, 3); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
ObDereferenceObject(WakeupThread); ObDereferenceObject(WakeupThread);
ObDereferenceObject(Port); ObDereferenceObject(Port);
_SEH2_YIELD(return _SEH2_GetExceptionCode()); _SEH2_YIELD(return _SEH2_GetExceptionCode());
@ -480,7 +482,7 @@ NtReplyWaitReceivePortEx(IN HANDLE PortHandle,
Request) != LPC_REQUEST))) Request) != LPC_REQUEST)))
{ {
/* It isn't, fail */ /* It isn't, fail */
LpcpFreeToPortZone(Message, 3); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
if (ConnectionPort) ObDereferenceObject(ConnectionPort); if (ConnectionPort) ObDereferenceObject(ConnectionPort);
ObDereferenceObject(WakeupThread); ObDereferenceObject(WakeupThread);
ObDereferenceObject(Port); ObDereferenceObject(Port);
@ -637,7 +639,7 @@ NtReplyWaitReceivePortEx(IN HANDLE PortHandle,
if (Message->Request.u2.s2.DataInfoOffset) if (Message->Request.u2.s2.DataInfoOffset)
{ {
/* It does, save it, and don't free the message below */ /* It does, save it, and don't free the message below */
LpcpSaveDataInfoMessage(Port, Message, 1); LpcpSaveDataInfoMessage(Port, Message, LPCP_LOCK_OWNED);
Message = NULL; Message = NULL;
} }
} }
@ -659,7 +661,7 @@ NtReplyWaitReceivePortEx(IN HANDLE PortHandle,
if (Message) if (Message)
{ {
/* Free it and release the lock */ /* Free it and release the lock */
LpcpFreeToPortZone(Message, 3); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
} }
else else
{ {

View file

@ -26,7 +26,10 @@ LpcRequestPort(IN PVOID PortObject,
ULONG MessageType; ULONG MessageType;
PLPCP_MESSAGE Message; PLPCP_MESSAGE Message;
KPROCESSOR_MODE PreviousMode = KeGetPreviousMode(); KPROCESSOR_MODE PreviousMode = KeGetPreviousMode();
PETHREAD Thread = PsGetCurrentThread();
PAGED_CODE(); PAGED_CODE();
LPCTRACE(LPC_SEND_DEBUG, "Port: %p. Message: %p\n", Port, LpcMessage); LPCTRACE(LPC_SEND_DEBUG, "Port: %p. Message: %p\n", Port, LpcMessage);
/* Check if this is a non-datagram message */ /* Check if this is a non-datagram message */
@ -59,7 +62,7 @@ LpcRequestPort(IN PVOID PortObject,
/* Can't have data information on this type of call */ /* Can't have data information on this type of call */
if (LpcMessage->u2.s2.DataInfoOffset) return STATUS_INVALID_PARAMETER; if (LpcMessage->u2.s2.DataInfoOffset) return STATUS_INVALID_PARAMETER;
/* Validate message sizes */ /* Validate the message length */
if (((ULONG)LpcMessage->u1.s1.TotalLength > Port->MaxMessageLength) || if (((ULONG)LpcMessage->u1.s1.TotalLength > Port->MaxMessageLength) ||
((ULONG)LpcMessage->u1.s1.TotalLength <= (ULONG)LpcMessage->u1.s1.DataLength)) ((ULONG)LpcMessage->u1.s1.TotalLength <= (ULONG)LpcMessage->u1.s1.DataLength))
{ {
@ -80,7 +83,7 @@ LpcRequestPort(IN PVOID PortObject,
LpcMessage, LpcMessage,
LpcMessage + 1, LpcMessage + 1,
MessageType, MessageType,
&PsGetCurrentThread()->Cid); &Thread->Cid);
/* Acquire the LPC lock */ /* Acquire the LPC lock */
KeAcquireGuardedMutex(&LpcpLock); KeAcquireGuardedMutex(&LpcpLock);
@ -101,7 +104,7 @@ LpcRequestPort(IN PVOID PortObject,
if (!ConnectionPort) if (!ConnectionPort)
{ {
/* Fail */ /* Fail */
LpcpFreeToPortZone(Message, 3); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
return STATUS_PORT_DISCONNECTED; return STATUS_PORT_DISCONNECTED;
} }
} }
@ -112,7 +115,7 @@ LpcRequestPort(IN PVOID PortObject,
if (!ConnectionPort) if (!ConnectionPort)
{ {
/* Fail */ /* Fail */
LpcpFreeToPortZone(Message, 3); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
return STATUS_PORT_DISCONNECTED; return STATUS_PORT_DISCONNECTED;
} }
} }
@ -136,7 +139,7 @@ LpcRequestPort(IN PVOID PortObject,
Message->Request.CallbackId = 0; Message->Request.CallbackId = 0;
/* No Message ID for the thread */ /* No Message ID for the thread */
PsGetCurrentThread()->LpcReplyMessageId = 0; Thread->LpcReplyMessageId = 0;
/* Insert the message in our chain */ /* Insert the message in our chain */
InsertTailList(&QueuePort->MsgQueue.ReceiveHead, &Message->Entry); InsertTailList(&QueuePort->MsgQueue.ReceiveHead, &Message->Entry);
@ -161,7 +164,7 @@ LpcRequestPort(IN PVOID PortObject,
} }
/* If we got here, then free the message and fail */ /* If we got here, then free the message and fail */
LpcpFreeToPortZone(Message, 3); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
if (ConnectionPort) ObDereferenceObject(ConnectionPort); if (ConnectionPort) ObDereferenceObject(ConnectionPort);
return STATUS_PORT_DISCONNECTED; return STATUS_PORT_DISCONNECTED;
} }
@ -281,7 +284,7 @@ LpcRequestWaitReplyPort(IN PVOID PortObject,
if (!QueuePort) if (!QueuePort)
{ {
/* We have no connected port, fail */ /* We have no connected port, fail */
LpcpFreeToPortZone(Message, 3); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
return STATUS_PORT_DISCONNECTED; return STATUS_PORT_DISCONNECTED;
} }
@ -297,7 +300,7 @@ LpcRequestWaitReplyPort(IN PVOID PortObject,
if (!ConnectionPort) if (!ConnectionPort)
{ {
/* Fail */ /* Fail */
LpcpFreeToPortZone(Message, 3); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
return STATUS_PORT_DISCONNECTED; return STATUS_PORT_DISCONNECTED;
} }
} }
@ -309,7 +312,7 @@ LpcRequestWaitReplyPort(IN PVOID PortObject,
if (!ConnectionPort) if (!ConnectionPort)
{ {
/* Fail */ /* Fail */
LpcpFreeToPortZone(Message, 3); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
return STATUS_PORT_DISCONNECTED; return STATUS_PORT_DISCONNECTED;
} }
} }
@ -409,9 +412,8 @@ LpcRequestWaitReplyPort(IN PVOID PortObject,
Message->RepliedToThread = NULL; Message->RepliedToThread = NULL;
} }
/* Free the message */ /* Free the message */
LpcpFreeToPortZone(Message, 3); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
} }
else else
{ {
@ -444,15 +446,16 @@ NTAPI
NtRequestPort(IN HANDLE PortHandle, NtRequestPort(IN HANDLE PortHandle,
IN PPORT_MESSAGE LpcRequest) IN PPORT_MESSAGE LpcRequest)
{ {
PLPCP_PORT_OBJECT Port, QueuePort, ConnectionPort = NULL;
KPROCESSOR_MODE PreviousMode = KeGetPreviousMode();
NTSTATUS Status; NTSTATUS Status;
PLPCP_MESSAGE Message; PLPCP_PORT_OBJECT Port, QueuePort, ConnectionPort = NULL;
PETHREAD Thread = PsGetCurrentThread();
PKSEMAPHORE Semaphore;
ULONG MessageType; ULONG MessageType;
PLPCP_MESSAGE Message;
KPROCESSOR_MODE PreviousMode = KeGetPreviousMode();
PETHREAD Thread = PsGetCurrentThread();
PKSEMAPHORE Semaphore;
PAGED_CODE(); PAGED_CODE();
LPCTRACE(LPC_SEND_DEBUG, LPCTRACE(LPC_SEND_DEBUG,
"Handle: %p. Message: %p. Type: %lx\n", "Handle: %p. Message: %p. Type: %lx\n",
PortHandle, PortHandle,
@ -505,10 +508,10 @@ NtRequestPort(IN HANDLE PortHandle,
{ {
/* Copy it */ /* Copy it */
LpcpMoveMessage(&Message->Request, LpcpMoveMessage(&Message->Request,
LpcRequest, LpcRequest,
LpcRequest + 1, LpcRequest + 1,
MessageType, MessageType,
&Thread->Cid); &Thread->Cid);
} }
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{ {
@ -533,7 +536,7 @@ NtRequestPort(IN HANDLE PortHandle,
if (!QueuePort) if (!QueuePort)
{ {
/* We have no connected port, fail */ /* We have no connected port, fail */
LpcpFreeToPortZone(Message, 3); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
ObDereferenceObject(Port); ObDereferenceObject(Port);
return STATUS_PORT_DISCONNECTED; return STATUS_PORT_DISCONNECTED;
} }
@ -547,7 +550,7 @@ NtRequestPort(IN HANDLE PortHandle,
if (!ConnectionPort) if (!ConnectionPort)
{ {
/* Fail */ /* Fail */
LpcpFreeToPortZone(Message, 3); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
ObDereferenceObject(Port); ObDereferenceObject(Port);
return STATUS_PORT_DISCONNECTED; return STATUS_PORT_DISCONNECTED;
} }
@ -560,7 +563,7 @@ NtRequestPort(IN HANDLE PortHandle,
if (!ConnectionPort) if (!ConnectionPort)
{ {
/* Fail */ /* Fail */
LpcpFreeToPortZone(Message, 3); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
ObDereferenceObject(Port); ObDereferenceObject(Port);
return STATUS_PORT_DISCONNECTED; return STATUS_PORT_DISCONNECTED;
} }
@ -587,7 +590,7 @@ NtRequestPort(IN HANDLE PortHandle,
Message->Request.CallbackId = 0; Message->Request.CallbackId = 0;
/* No Message ID for the thread */ /* No Message ID for the thread */
PsGetCurrentThread()->LpcReplyMessageId = 0; Thread->LpcReplyMessageId = 0;
/* Insert the message in our chain */ /* Insert the message in our chain */
InsertTailList(&QueuePort->MsgQueue.ReceiveHead, &Message->Entry); InsertTailList(&QueuePort->MsgQueue.ReceiveHead, &Message->Entry);
@ -626,7 +629,7 @@ NtRequestPort(IN HANDLE PortHandle,
Status); Status);
/* The wait failed, free the message */ /* The wait failed, free the message */
if (Message) LpcpFreeToPortZone(Message, 3); if (Message) LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
ObDereferenceObject(Port); ObDereferenceObject(Port);
if (ConnectionPort) ObDereferenceObject(ConnectionPort); if (ConnectionPort) ObDereferenceObject(ConnectionPort);
@ -759,7 +762,7 @@ NtRequestWaitReplyPort(IN HANDLE PortHandle,
if (!QueuePort) if (!QueuePort)
{ {
/* We have no connected port, fail */ /* We have no connected port, fail */
LpcpFreeToPortZone(Message, 3); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
ObDereferenceObject(Port); ObDereferenceObject(Port);
return STATUS_PORT_DISCONNECTED; return STATUS_PORT_DISCONNECTED;
} }
@ -776,7 +779,7 @@ NtRequestWaitReplyPort(IN HANDLE PortHandle,
if (!ConnectionPort) if (!ConnectionPort)
{ {
/* Fail */ /* Fail */
LpcpFreeToPortZone(Message, 3); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
ObDereferenceObject(Port); ObDereferenceObject(Port);
return STATUS_PORT_DISCONNECTED; return STATUS_PORT_DISCONNECTED;
} }
@ -789,7 +792,7 @@ NtRequestWaitReplyPort(IN HANDLE PortHandle,
if (!ConnectionPort) if (!ConnectionPort)
{ {
/* Fail */ /* Fail */
LpcpFreeToPortZone(Message, 3); LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
ObDereferenceObject(Port); ObDereferenceObject(Port);
return STATUS_PORT_DISCONNECTED; return STATUS_PORT_DISCONNECTED;
} }