Declare port functions and fix prototypes.

diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
index b1de3fe..5acad5a 100644
--- a/dlls/ntdll/nt.c
+++ b/dlls/ntdll/nt.c
@@ -40,41 +40,6 @@
 /* FIXME: fixed at 2005/2/22 */
 static LONGLONG boottime = (LONGLONG)1275356510 * 100000000;
 
-/* Structures used by NtConnectPort */
-
-typedef struct LpcSectionInfo
-{
-  DWORD Length;
-  HANDLE SectionHandle;
-  DWORD Param1;
-  DWORD SectionSize;
-  DWORD ClientBaseAddress;
-  DWORD ServerBaseAddress;
-} LPCSECTIONINFO, *PLPCSECTIONINFO;
-
-typedef struct LpcSectionMapInfo
-{
-  DWORD Length;
-  DWORD SectionSize;
-  DWORD ServerBaseAddress;
-} LPCSECTIONMAPINFO, *PLPCSECTIONMAPINFO;
-
-/* Structure used by NtAcceptConnectPort, NtReplyWaitReceivePort */
-
-#define MAX_MESSAGE_DATA 328
-
-typedef struct LpcMessage
-{
-  WORD ActualMessageLength;
-  WORD TotalMessageLength;
-  DWORD MessageType;
-  DWORD ClientProcessId;
-  DWORD ClientThreadId;
-  DWORD MessageId;
-  DWORD SharedSectionSize;
-  BYTE MessageData[MAX_MESSAGE_DATA];
-} LPCMESSAGE, *PLPCMESSAGE;
-
 /*
  *	Token
  */
@@ -443,22 +408,30 @@
  *  NtConnectPort		[NTDLL.@]
  *  ZwConnectPort		[NTDLL.@]
  */
-NTSTATUS WINAPI NtConnectPort(PHANDLE PortHandle,PUNICODE_STRING PortName,PVOID Unknown1,
-                              PLPCSECTIONINFO sectionInfo,PLPCSECTIONMAPINFO mapInfo,PVOID Unknown2,
-                              PVOID ConnectInfo,PDWORD pConnectInfoLength)
+NTSTATUS WINAPI NtConnectPort(
+        PHANDLE PortHandle,
+        PUNICODE_STRING PortName,
+        PSECURITY_QUALITY_OF_SERVICE SecurityQos,
+        PLPC_SECTION_WRITE WriteSection,
+        PLPC_SECTION_READ ReadSection,
+        PULONG MaximumMessageLength,
+        PVOID ConnectInfo,
+        PULONG pConnectInfoLength)
 {
-  FIXME("(%p,%s,%p,%p,%p,%p,%p,%p (%ld)),stub!\n",PortHandle,debugstr_w(PortName->Buffer),Unknown1,
-        sectionInfo,mapInfo,Unknown2,ConnectInfo,pConnectInfoLength,pConnectInfoLength?*pConnectInfoLength:-1);
-  if(ConnectInfo && pConnectInfoLength)
-    TRACE("\tMessage = %s\n",debugstr_an(ConnectInfo,*pConnectInfoLength));
-  return 0;
+    FIXME("(%p,%s,%p,%p,%p,%p,%p,%p),stub!\n",
+          PortHandle,debugstr_w(PortName->Buffer),SecurityQos,
+          WriteSection,ReadSection,MaximumMessageLength,ConnectInfo,
+          pConnectInfoLength);
+    if (ConnectInfo && pConnectInfoLength)
+        TRACE("\tMessage = %s\n",debugstr_an(ConnectInfo,*pConnectInfoLength));
+    return 0;
 }
 
 /******************************************************************************
  *  NtListenPort		[NTDLL.@]
  *  ZwListenPort		[NTDLL.@]
  */
-NTSTATUS WINAPI NtListenPort(HANDLE PortHandle,PLPCMESSAGE pLpcMessage)
+NTSTATUS WINAPI NtListenPort(HANDLE PortHandle,PLPC_MESSAGE pLpcMessage)
 {
   FIXME("(%p,%p),stub!\n",PortHandle,pLpcMessage);
   return 0;
@@ -468,10 +441,16 @@
  *  NtAcceptConnectPort	[NTDLL.@]
  *  ZwAcceptConnectPort	[NTDLL.@]
  */
-NTSTATUS WINAPI NtAcceptConnectPort(PHANDLE PortHandle,DWORD Unknown,PLPCMESSAGE pLpcMessage,
-                                    DWORD acceptIt,DWORD Unknown2,PLPCSECTIONMAPINFO mapInfo)
+NTSTATUS WINAPI NtAcceptConnectPort(
+        PHANDLE PortHandle,
+        ULONG PortIdentifier,
+        PLPC_MESSAGE pLpcMessage,
+        BOOLEAN Accept,
+        PLPC_SECTION_WRITE WriteSection,
+        PLPC_SECTION_READ ReadSection)
 {
-  FIXME("(%p,0x%08lx,%p,0x%08lx,0x%08lx,%p),stub!\n",PortHandle,Unknown,pLpcMessage,acceptIt,Unknown2,mapInfo);
+  FIXME("(%p,%lu,%p,%d,%p,%p),stub!\n",
+        PortHandle,PortIdentifier,pLpcMessage,Accept,WriteSection,ReadSection);
   return 0;
 }
 
@@ -499,20 +478,25 @@
  *  NtRequestWaitReplyPort		[NTDLL.@]
  *  ZwRequestWaitReplyPort		[NTDLL.@]
  */
-NTSTATUS WINAPI NtRequestWaitReplyPort(HANDLE PortHandle,PLPCMESSAGE pLpcMessageIn,PLPCMESSAGE pLpcMessageOut)
+NTSTATUS WINAPI NtRequestWaitReplyPort(
+        HANDLE PortHandle,
+        PLPC_MESSAGE pLpcMessageIn,
+        PLPC_MESSAGE pLpcMessageOut)
 {
   FIXME("(%p,%p,%p),stub!\n",PortHandle,pLpcMessageIn,pLpcMessageOut);
   if(pLpcMessageIn)
   {
     TRACE("Message to send:\n");
-    TRACE("\tActualMessageLength = %d\n",pLpcMessageIn->ActualMessageLength);
-    TRACE("\tTotalMessageLength  = %d\n",pLpcMessageIn->TotalMessageLength);
-    TRACE("\tMessageType         = %ld\n",pLpcMessageIn->MessageType);
-    TRACE("\tClientProcessId     = %ld\n",pLpcMessageIn->ClientProcessId);
-    TRACE("\tClientThreadId      = %ld\n",pLpcMessageIn->ClientThreadId);
-    TRACE("\tMessageId           = %ld\n",pLpcMessageIn->MessageId);
-    TRACE("\tSharedSectionSize   = %ld\n",pLpcMessageIn->SharedSectionSize);
-    TRACE("\tMessageData         = %s\n",debugstr_an(pLpcMessageIn->MessageData,pLpcMessageIn->ActualMessageLength));
+    TRACE("\tDataSize            = %u\n",pLpcMessageIn->DataSize);
+    TRACE("\tMessageSize         = %u\n",pLpcMessageIn->MessageSize);
+    TRACE("\tMessageType         = %u\n",pLpcMessageIn->MessageType);
+    TRACE("\tVirtualRangesOffset = %u\n",pLpcMessageIn->VirtualRangesOffset);
+    TRACE("\tClientId.UniqueProcess = %p\n",pLpcMessageIn->ClientId.UniqueProcess);
+    TRACE("\tClientId.UniqueThread  = %p\n",pLpcMessageIn->ClientId.UniqueThread);
+    TRACE("\tMessageId           = %lu\n",pLpcMessageIn->MessageId);
+    TRACE("\tSectionSize         = %lu\n",pLpcMessageIn->SectionSize);
+    TRACE("\tData                = %s\n",
+      debugstr_an(pLpcMessageIn->Data,pLpcMessageIn->DataSize));
   }
   return 0;
 }
@@ -521,9 +505,13 @@
  *  NtReplyWaitReceivePort	[NTDLL.@]
  *  ZwReplyWaitReceivePort	[NTDLL.@]
  */
-NTSTATUS WINAPI NtReplyWaitReceivePort(HANDLE PortHandle,PDWORD Unknown,PLPCMESSAGE pLpcMessageOut,PLPCMESSAGE pLpcMessageIn)
+NTSTATUS WINAPI NtReplyWaitReceivePort(
+        HANDLE PortHandle,
+        PULONG PortIdentifier,
+        PLPC_MESSAGE ReplyMessage,
+        PLPC_MESSAGE Message)
 {
-  FIXME("(%p,%p,%p,%p),stub!\n",PortHandle,Unknown,pLpcMessageOut,pLpcMessageIn);
+  FIXME("(%p,%p,%p,%p),stub!\n",PortHandle,PortIdentifier,ReplyMessage,Message);
   return 0;
 }
 
diff --git a/include/winternl.h b/include/winternl.h
index ade75ad..fb7a384 100644
--- a/include/winternl.h
+++ b/include/winternl.h
@@ -1497,6 +1497,32 @@
   ULONG Unknown2[3];
 } SECTION_IMAGE_INFORMATION, *PSECTION_IMAGE_INFORMATION;
 
+typedef struct _LPC_SECTION_WRITE {
+  ULONG Length;
+  HANDLE SectionHandle;
+  ULONG SectionOffset;
+  ULONG ViewSize;
+  PVOID ViewBase;
+  PVOID TargetViewBase;
+} LPC_SECTION_WRITE, *PLPC_SECTION_WRITE;
+
+typedef struct _LPC_SECTION_READ {
+  ULONG Length;
+  ULONG ViewSize;
+  PVOID ViewBase;
+} LPC_SECTION_READ, *PLPC_SECTION_READ;
+
+typedef struct _LPC_MESSAGE {
+  USHORT DataSize;
+  USHORT MessageSize;
+  USHORT MessageType;
+  USHORT VirtualRangesOffset;
+  CLIENT_ID ClientId;
+  ULONG MessageId;
+  ULONG SectionSize;
+  UCHAR Data[ANYSIZE_ARRAY];
+} LPC_MESSAGE, *PLPC_MESSAGE;
+
 /***********************************************************************
  * Function declarations
  */
@@ -1523,6 +1549,7 @@
 NTSTATUS  WINAPI LdrLoadDll(LPCWSTR, DWORD, const UNICODE_STRING*, HMODULE*);
 void      WINAPI LdrShutdownProcess(void);
 void      WINAPI LdrShutdownThread(void);
+NTSTATUS  WINAPI NtAcceptConnectPort(PHANDLE,ULONG,PLPC_MESSAGE,BOOLEAN,PLPC_SECTION_WRITE,PLPC_SECTION_READ);
 NTSTATUS  WINAPI NtAccessCheck(PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,PGENERIC_MAPPING,PPRIVILEGE_SET,PULONG,PULONG,NTSTATUS*);
 NTSTATUS  WINAPI NtAddAtom(const WCHAR*,ULONG,RTL_ATOM*);
 NTSTATUS  WINAPI NtAdjustGroupsToken(HANDLE,BOOLEAN,PTOKEN_GROUPS,ULONG,PTOKEN_GROUPS,PULONG);
@@ -1534,6 +1561,8 @@
 NTSTATUS  WINAPI NtCancelTimer(HANDLE, BOOLEAN*);
 NTSTATUS  WINAPI NtClearEvent(HANDLE);
 NTSTATUS  WINAPI NtClose(HANDLE);
+NTSTATUS  WINAPI NtCompleteConnectPort(HANDLE);
+NTSTATUS  WINAPI NtConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PLPC_SECTION_READ,PULONG,PVOID,PULONG);
 NTSTATUS  WINAPI NtCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,BOOLEAN,BOOLEAN);
 NTSTATUS  WINAPI NtCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
 NTSTATUS  WINAPI NtCreateIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,ULONG);
@@ -1567,6 +1596,7 @@
 NTSTATUS  WINAPI NtImpersonateClientOfPort(HANDLE,PPORT_MESSAGE);
 NTSTATUS  WINAPI NtImpersonateThread(HANDLE,HANDLE,PSECURITY_QUALITY_OF_SERVICE);
 NTSTATUS  WINAPI NtInitiatePowerAction(POWER_ACTION,SYSTEM_POWER_STATE,ULONG,BOOLEAN);
+NTSTATUS  WINAPI NtListenPort(HANDLE,PLPC_MESSAGE); 
 NTSTATUS  WINAPI NtLoadDriver(const UNICODE_STRING *);
 NTSTATUS  WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,OBJECT_ATTRIBUTES *);
 NTSTATUS  WINAPI NtLockFile(HANDLE,HANDLE,PIO_APC_ROUTINE,void*,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,ULONG*,BOOLEAN,BOOLEAN);
@@ -1623,6 +1653,9 @@
 NTSTATUS  WINAPI NtReleaseSemaphore(HANDLE,ULONG,PULONG);
 NTSTATUS  WINAPI NtRemoveIoCompletion(HANDLE,PULONG,PULONG,PIO_STATUS_BLOCK,PLARGE_INTEGER);
 NTSTATUS  WINAPI NtReplaceKey(POBJECT_ATTRIBUTES,HKEY,POBJECT_ATTRIBUTES);
+NTSTATUS  WINAPI NtReplyWaitReceivePort(HANDLE,PULONG,PLPC_MESSAGE,PLPC_MESSAGE);
+NTSTATUS  WINAPI NtReplyWaitReplyPort(HANDLE,PLPC_MESSAGE);
+NTSTATUS  WINAPI NtRequestWaitReplyPort(HANDLE,PLPC_MESSAGE,PLPC_MESSAGE);
 NTSTATUS  WINAPI NtResetEvent(HANDLE,PULONG);
 NTSTATUS  WINAPI NtRestoreKey(HKEY,HANDLE,ULONG);
 NTSTATUS  WINAPI NtResumeThread(HANDLE,PULONG);