crt: Add namedpipe APIs

Based on:
https://docs.microsoft.com/en-us/uwp/win32-and-com/win32-apis#apis-from-api-ms-win-core-namedpipe-l1-1-0dll
https://docs.microsoft.com/en-us/uwp/win32-and-com/win32-apis#apis-from-api-ms-win-core-namedpipe-ansi-l1-1-0dll
and the various associated versions
This also introduces a minimal kernel32-legacy for CreateNamedPipeA in
order to avoid declaring it without an associated definition

Signed-off-by: Liu Hao <lh_mouse@126.com>
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index f97b9fc..a79d3e2 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -1681,6 +1681,11 @@
 		%/libapi-ms-win-core-localization-l2-1-0.a \
 		%/libapi-ms-win-core-memory-l1-1-2.a \
 		%/libapi-ms-win-core-memory-l1-1-3.a \
+		%/libapi-ms-win-core-namedpipe-ansi-l1-1-0.a \
+		%/libapi-ms-win-core-namedpipe-ansi-l1-1-1.a \
+		%/libapi-ms-win-core-namedpipe-l1-1-0.a \
+		%/libapi-ms-win-core-namedpipe-l1-2-1.a \
+		%/libapi-ms-win-core-namedpipe-l1-2-2.a \
 		%/libapi-ms-win-core-processenvironment-l1-1-0.a \
 		%/libapi-ms-win-core-processenvironment-l1-2-0.a \
 		%/libapi-ms-win-core-processthreads-l1-1-0.a \
@@ -1762,6 +1767,7 @@
 		%/libapi-ms-win-core-heap-l1-2-0.a \
 		%/libapi-ms-win-core-interlocked-l1-2-0.a \
 		%/libapi-ms-win-core-io-l1-1-1.a \
+		%/libapi-ms-win-core-kernel32-legacy-l1-1-0.a \
 		%/libapi-ms-win-core-kernel32-legacy-l1-1-1.a \
 		%/libapi-ms-win-core-largeinteger-l1-1-0.a \
 		%/libapi-ms-win-core-libraryloader-l1-2-0.a \
@@ -1772,6 +1778,11 @@
 		%/libapi-ms-win-core-localization-l2-1-0.a \
 		%/libapi-ms-win-core-memory-l1-1-2.a \
 		%/libapi-ms-win-core-memory-l1-1-3.a \
+		%/libapi-ms-win-core-namedpipe-ansi-l1-1-0.a \
+		%/libapi-ms-win-core-namedpipe-ansi-l1-1-1.a \
+		%/libapi-ms-win-core-namedpipe-l1-1-0.a \
+		%/libapi-ms-win-core-namedpipe-l1-2-1.a \
+		%/libapi-ms-win-core-namedpipe-l1-2-2.a \
 		%/libapi-ms-win-core-normalization-l1-1-0.a \
 		%/libapi-ms-win-core-processenvironment-l1-1-0.a \
 		%/libapi-ms-win-core-processenvironment-l1-2-0.a \
diff --git a/mingw-w64-crt/lib-common/api-ms-win-core-kernel32-legacy-l1-1-0.def b/mingw-w64-crt/lib-common/api-ms-win-core-kernel32-legacy-l1-1-0.def
new file mode 100644
index 0000000..91c1be3
--- /dev/null
+++ b/mingw-w64-crt/lib-common/api-ms-win-core-kernel32-legacy-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-0
+
+EXPORTS
+
+CreateNamedPipeA
diff --git a/mingw-w64-crt/lib-common/api-ms-win-core-namedpipe-ansi-l1-1-0.def b/mingw-w64-crt/lib-common/api-ms-win-core-namedpipe-ansi-l1-1-0.def
new file mode 100644
index 0000000..cab65a5
--- /dev/null
+++ b/mingw-w64-crt/lib-common/api-ms-win-core-namedpipe-ansi-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-namedpipe-ansi-l1-1-0
+
+EXPORTS
+
+GetNamedPipeClientComputerNameA
+GetNamedPipeHandleStateA
+WaitNamedPipeA
diff --git a/mingw-w64-crt/lib-common/api-ms-win-core-namedpipe-ansi-l1-1-1.def b/mingw-w64-crt/lib-common/api-ms-win-core-namedpipe-ansi-l1-1-1.def
new file mode 100644
index 0000000..f220819
--- /dev/null
+++ b/mingw-w64-crt/lib-common/api-ms-win-core-namedpipe-ansi-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-namedpipe-ansi-l1-1-1
+
+EXPORTS
+
+CallNamedPipeA
diff --git a/mingw-w64-crt/lib-common/api-ms-win-core-namedpipe-l1-1-0.def b/mingw-w64-crt/lib-common/api-ms-win-core-namedpipe-l1-1-0.def
new file mode 100644
index 0000000..2c7b2aa
--- /dev/null
+++ b/mingw-w64-crt/lib-common/api-ms-win-core-namedpipe-l1-1-0.def
@@ -0,0 +1,13 @@
+LIBRARY api-ms-win-core-namedpipe-l1-1-0
+
+EXPORTS
+
+ConnectNamedPipe
+CreateNamedPipeW
+CreatePipe
+DisconnectNamedPipe
+GetNamedPipeClientComputerNameW
+PeekNamedPipe
+SetNamedPipeHandleState
+TransactNamedPipe
+WaitNamedPipeW
diff --git a/mingw-w64-crt/lib-common/api-ms-win-core-namedpipe-l1-2-1.def b/mingw-w64-crt/lib-common/api-ms-win-core-namedpipe-l1-2-1.def
new file mode 100644
index 0000000..f2c2339
--- /dev/null
+++ b/mingw-w64-crt/lib-common/api-ms-win-core-namedpipe-l1-2-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-namedpipe-l1-2-1
+
+EXPORTS
+
+GetNamedPipeHandleStateW
+GetNamedPipeInfo
diff --git a/mingw-w64-crt/lib-common/api-ms-win-core-namedpipe-l1-2-2.def b/mingw-w64-crt/lib-common/api-ms-win-core-namedpipe-l1-2-2.def
new file mode 100644
index 0000000..b194275
--- /dev/null
+++ b/mingw-w64-crt/lib-common/api-ms-win-core-namedpipe-l1-2-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-namedpipe-l1-2-2
+
+EXPORTS
+
+CallNamedPipeW
diff --git a/mingw-w64-crt/lib-common/mincore.mri b/mingw-w64-crt/lib-common/mincore.mri
index 99cf86c..4c62b66 100644
--- a/mingw-w64-crt/lib-common/mincore.mri
+++ b/mingw-w64-crt/lib-common/mincore.mri
@@ -52,9 +52,11 @@
 ADDLIB libapi-ms-win-core-memory-l1-1-3.a
 ; FIXME libapi-ms-win-core-memory-l1-1-4.a
 ; FIXME libapi-ms-win-core-memory-l1-1-5.a
-; FIXME libapi-ms-win-core-namedpipe-l1-1-0.a
-; FIXME libapi-ms-win-core-namedpipe-l1-2-1.a
-; FIXME libapi-ms-win-core-namedpipe-l1-2-2.a
+ADDLIB libapi-ms-win-core-namedpipe-ansi-l1-1-0.a
+ADDLIB libapi-ms-win-core-namedpipe-ansi-l1-1-1.a
+ADDLIB libapi-ms-win-core-namedpipe-l1-1-0.a
+ADDLIB libapi-ms-win-core-namedpipe-l1-2-1.a
+ADDLIB libapi-ms-win-core-namedpipe-l1-2-2.a
 ; FIXME libapi-ms-win-core-namespace-l1-1-0.a
 ; FIXME libapi-ms-win-core-path-l1-1-0.a
 ADDLIB libapi-ms-win-core-processenvironment-l1-1-0.a
diff --git a/mingw-w64-crt/lib-common/windowsapp.mri b/mingw-w64-crt/lib-common/windowsapp.mri
index d9da0d6..aefadef 100644
--- a/mingw-w64-crt/lib-common/windowsapp.mri
+++ b/mingw-w64-crt/lib-common/windowsapp.mri
@@ -18,6 +18,7 @@
 ADDLIB libapi-ms-win-core-heap-l1-2-0.a
 ADDLIB libapi-ms-win-core-interlocked-l1-2-0.a
 ADDLIB libapi-ms-win-core-io-l1-1-1.a
+ADDLIB libapi-ms-win-core-kernel32-legacy-l1-1-0.a
 ADDLIB libapi-ms-win-core-kernel32-legacy-l1-1-1.a
 ADDLIB libapi-ms-win-core-largeinteger-l1-1-0.a
 ADDLIB libapi-ms-win-core-libraryloader-l1-2-0.a
@@ -28,6 +29,11 @@
 ADDLIB libapi-ms-win-core-localization-l2-1-0.a
 ADDLIB libapi-ms-win-core-memory-l1-1-2.a
 ADDLIB libapi-ms-win-core-memory-l1-1-3.a
+ADDLIB libapi-ms-win-core-namedpipe-ansi-l1-1-0.a
+ADDLIB libapi-ms-win-core-namedpipe-ansi-l1-1-1.a
+ADDLIB libapi-ms-win-core-namedpipe-l1-1-0.a
+ADDLIB libapi-ms-win-core-namedpipe-l1-2-1.a
+ADDLIB libapi-ms-win-core-namedpipe-l1-2-2.a
 ADDLIB libapi-ms-win-core-normalization-l1-1-0.a
 ADDLIB libapi-ms-win-core-processenvironment-l1-1-0.a
 ADDLIB libapi-ms-win-core-processenvironment-l1-2-0.a
diff --git a/mingw-w64-crt/lib32/api-ms-win-core-kernel32-legacy-l1-1-0.def b/mingw-w64-crt/lib32/api-ms-win-core-kernel32-legacy-l1-1-0.def
new file mode 100644
index 0000000..888ddab
--- /dev/null
+++ b/mingw-w64-crt/lib32/api-ms-win-core-kernel32-legacy-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-0
+
+EXPORTS
+
+CreateNamedPipeA@32
diff --git a/mingw-w64-crt/lib32/api-ms-win-core-namedpipe-ansi-l1-1-0.def b/mingw-w64-crt/lib32/api-ms-win-core-namedpipe-ansi-l1-1-0.def
new file mode 100644
index 0000000..0c231f9
--- /dev/null
+++ b/mingw-w64-crt/lib32/api-ms-win-core-namedpipe-ansi-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-namedpipe-ansi-l1-1-0
+
+EXPORTS
+
+GetNamedPipeClientComputerNameA@12
+GetNamedPipeHandleStateA@28
+WaitNamedPipeA@8
diff --git a/mingw-w64-crt/lib32/api-ms-win-core-namedpipe-ansi-l1-1-1.def b/mingw-w64-crt/lib32/api-ms-win-core-namedpipe-ansi-l1-1-1.def
new file mode 100644
index 0000000..cfb9f0a
--- /dev/null
+++ b/mingw-w64-crt/lib32/api-ms-win-core-namedpipe-ansi-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-namedpipe-ansi-l1-1-1
+
+EXPORTS
+
+CallNamedPipeA@28
diff --git a/mingw-w64-crt/lib32/api-ms-win-core-namedpipe-l1-1-0.def b/mingw-w64-crt/lib32/api-ms-win-core-namedpipe-l1-1-0.def
new file mode 100644
index 0000000..b560d4d
--- /dev/null
+++ b/mingw-w64-crt/lib32/api-ms-win-core-namedpipe-l1-1-0.def
@@ -0,0 +1,13 @@
+LIBRARY api-ms-win-core-namedpipe-l1-1-0
+
+EXPORTS
+
+ConnectNamedPipe@8
+CreateNamedPipeW@32
+CreatePipe@16
+DisconnectNamedPipe@4
+GetNamedPipeClientComputerNameW@12
+PeekNamedPipe@24
+SetNamedPipeHandleState@16
+TransactNamedPipe@28
+WaitNamedPipeW@8
diff --git a/mingw-w64-crt/lib32/api-ms-win-core-namedpipe-l1-2-1.def b/mingw-w64-crt/lib32/api-ms-win-core-namedpipe-l1-2-1.def
new file mode 100644
index 0000000..f34e3d4
--- /dev/null
+++ b/mingw-w64-crt/lib32/api-ms-win-core-namedpipe-l1-2-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-namedpipe-l1-2-1
+
+EXPORTS
+
+GetNamedPipeHandleStateW@28
+GetNamedPipeInfo@20
diff --git a/mingw-w64-crt/lib32/api-ms-win-core-namedpipe-l1-2-2.def b/mingw-w64-crt/lib32/api-ms-win-core-namedpipe-l1-2-2.def
new file mode 100644
index 0000000..2a5d489
--- /dev/null
+++ b/mingw-w64-crt/lib32/api-ms-win-core-namedpipe-l1-2-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-namedpipe-l1-2-2
+
+EXPORTS
+
+CallNamedPipeW@28
diff --git a/mingw-w64-headers/include/namedpipeapi.h b/mingw-w64-headers/include/namedpipeapi.h
index f5b2971..0b59c37 100644
--- a/mingw-w64-headers/include/namedpipeapi.h
+++ b/mingw-w64-headers/include/namedpipeapi.h
@@ -16,6 +16,9 @@
 
 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
   WINADVAPI WINBOOL WINAPI ImpersonateNamedPipeClient (HANDLE hNamedPipe);
+#endif
+
+#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || _WIN32_WINNT >= _WIN32_WINNT_WIN10
   WINBASEAPI WINBOOL WINAPI CreatePipe (PHANDLE hReadPipe, PHANDLE hWritePipe, LPSECURITY_ATTRIBUTES lpPipeAttributes, DWORD nSize);
   WINBASEAPI WINBOOL WINAPI ConnectNamedPipe (HANDLE hNamedPipe, LPOVERLAPPED lpOverlapped);
   WINBASEAPI WINBOOL WINAPI DisconnectNamedPipe (HANDLE hNamedPipe);
diff --git a/mingw-w64-headers/include/winbase.h b/mingw-w64-headers/include/winbase.h
index 1154cdd..cdae61d 100644
--- a/mingw-w64-headers/include/winbase.h
+++ b/mingw-w64-headers/include/winbase.h
@@ -2161,6 +2161,23 @@
 #define MOVEFILE_FAIL_IF_NOT_TRACKABLE 0x00000020
 #endif
 
+#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || _WIN32_WINNT >= _WIN32_WINNT_WIN10
+  WINBASEAPI WINBOOL WINAPI GetNamedPipeClientComputerNameA (HANDLE Pipe, LPSTR ClientComputerName, ULONG ClientComputerNameLength);
+  WINBASEAPI WINBOOL WINAPI GetNamedPipeHandleStateA (HANDLE hNamedPipe, LPDWORD lpState, LPDWORD lpCurInstances, LPDWORD lpMaxCollectionCount, LPDWORD lpCollectDataTimeout, LPSTR lpUserName, DWORD nMaxUserNameSize);
+  WINBASEAPI WINBOOL WINAPI WaitNamedPipeA (LPCSTR lpNamedPipeName, DWORD nTimeOut);
+  WINBASEAPI WINBOOL WINAPI CallNamedPipeA (LPCSTR lpNamedPipeName, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesRead, DWORD nTimeOut);
+  WINBASEAPI WINBOOL WINAPI CallNamedPipeW (LPCWSTR lpNamedPipeName, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesRead, DWORD nTimeOut);
+  WINBASEAPI HANDLE WINAPI CreateNamedPipeA (LPCSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD nMaxInstances, DWORD nOutBufferSize, DWORD nInBufferSize, DWORD nDefaultTimeOut, LPSECURITY_ATTRIBUTES lpSecurityAttributes);
+
+#ifdef UNICODE
+#define WaitNamedPipe WaitNamedPipeA
+#define CreateNamedPipe CreateNamedPipeA
+#endif
+
+#define CallNamedPipe __MINGW_NAME_AW(CallNamedPipe)
+
+#endif
+
 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
   WINBASEAPI WINBOOL WINAPI ReplaceFileA (LPCSTR lpReplacedFileName, LPCSTR lpReplacementFileName, LPCSTR lpBackupFileName, DWORD dwReplaceFlags, LPVOID lpExclude, LPVOID lpReserved);
   WINBASEAPI WINBOOL WINAPI ReplaceFileW (LPCWSTR lpReplacedFileName, LPCWSTR lpReplacementFileName, LPCWSTR lpBackupFileName, DWORD dwReplaceFlags, LPVOID lpExclude, LPVOID lpReserved);
@@ -2194,7 +2211,6 @@
   WINBASEAPI HANDLE WINAPI FindFirstFileNameW (LPCWSTR lpFileName, DWORD dwFlags, LPDWORD StringLength, PWSTR LinkName);
   WINBASEAPI WINBOOL APIENTRY FindNextFileNameW (HANDLE hFindStream, LPDWORD StringLength, PWSTR LinkName);
   WINBASEAPI HANDLE WINAPI FindFirstFileNameTransactedW (LPCWSTR lpFileName, DWORD dwFlags, LPDWORD StringLength, PWSTR LinkName, HANDLE hTransaction);
-  WINBASEAPI WINBOOL WINAPI GetNamedPipeClientComputerNameA (HANDLE Pipe, LPSTR ClientComputerName, ULONG ClientComputerNameLength);
   WINBASEAPI WINBOOL WINAPI GetNamedPipeClientProcessId (HANDLE Pipe, PULONG ClientProcessId);
   WINBASEAPI WINBOOL WINAPI GetNamedPipeClientSessionId (HANDLE Pipe, PULONG ClientSessionId);
   WINBASEAPI WINBOOL WINAPI GetNamedPipeServerProcessId (HANDLE Pipe, PULONG ServerProcessId);
@@ -2202,12 +2218,7 @@
   WINBASEAPI WINBOOL WINAPI SetFileBandwidthReservation (HANDLE hFile, DWORD nPeriodMilliseconds, DWORD nBytesPerPeriod, WINBOOL bDiscardable, LPDWORD lpTransferSize, LPDWORD lpNumOutstandingRequests);
   WINBASEAPI WINBOOL WINAPI GetFileBandwidthReservation (HANDLE hFile, LPDWORD lpPeriodMilliseconds, LPDWORD lpBytesPerPeriod, LPBOOL pDiscardable, LPDWORD lpTransferSize, LPDWORD lpNumOutstandingRequests);
 #endif
-  WINBASEAPI HANDLE WINAPI CreateNamedPipeA (LPCSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD nMaxInstances, DWORD nOutBufferSize, DWORD nInBufferSize, DWORD nDefaultTimeOut, LPSECURITY_ATTRIBUTES lpSecurityAttributes);
-  WINBASEAPI WINBOOL WINAPI GetNamedPipeHandleStateA (HANDLE hNamedPipe, LPDWORD lpState, LPDWORD lpCurInstances, LPDWORD lpMaxCollectionCount, LPDWORD lpCollectDataTimeout, LPSTR lpUserName, DWORD nMaxUserNameSize);
   WINBASEAPI WINBOOL WINAPI GetNamedPipeHandleStateW (HANDLE hNamedPipe, LPDWORD lpState, LPDWORD lpCurInstances, LPDWORD lpMaxCollectionCount, LPDWORD lpCollectDataTimeout, LPWSTR lpUserName, DWORD nMaxUserNameSize);
-  WINBASEAPI WINBOOL WINAPI CallNamedPipeA (LPCSTR lpNamedPipeName, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesRead, DWORD nTimeOut);
-  WINBASEAPI WINBOOL WINAPI CallNamedPipeW (LPCWSTR lpNamedPipeName, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesRead, DWORD nTimeOut);
-  WINBASEAPI WINBOOL WINAPI WaitNamedPipeA (LPCSTR lpNamedPipeName, DWORD nTimeOut);
   WINBASEAPI WINBOOL WINAPI SetVolumeLabelA (LPCSTR lpRootPathName, LPCSTR lpVolumeName);
   WINBASEAPI WINBOOL WINAPI SetVolumeLabelW (LPCWSTR lpRootPathName, LPCWSTR lpVolumeName);
   WINBASEAPI VOID WINAPI SetFileApisToOEM (VOID);
@@ -2235,13 +2246,10 @@
   WINADVAPI WINBOOL WINAPI ReportEventW (HANDLE hEventLog, WORD wType, WORD wCategory, DWORD dwEventID, PSID lpUserSid, WORD wNumStrings, DWORD dwDataSize, LPCWSTR *lpStrings, LPVOID lpRawData);
 
 #ifndef UNICODE
-#define CreateNamedPipe CreateNamedPipeA
-#define WaitNamedPipe WaitNamedPipeA
 #define GetVolumeInformation GetVolumeInformationA
 #endif
 
 #define GetNamedPipeHandleState __MINGW_NAME_AW(GetNamedPipeHandleState)
-#define CallNamedPipe __MINGW_NAME_AW(CallNamedPipe)
 #define SetVolumeLabel __MINGW_NAME_AW(SetVolumeLabel)
 #define ClearEventLog __MINGW_NAME_AW(ClearEventLog)
 #define BackupEventLog __MINGW_NAME_AW(BackupEventLog)