Add stubs and declarations for WSAInstallServiceClassA/W.
diff --git a/dlls/winsock/socket.c b/dlls/winsock/socket.c
index 81049f0..5ac6f13 100644
--- a/dlls/winsock/socket.c
+++ b/dlls/winsock/socket.c
@@ -4207,3 +4207,21 @@
lpProtocolInfo->dwServiceFlags4 = 0xff00ff00; /* magic */
return 0;
}
+
+/***********************************************************************
+ * WSAInstallServiceClassA (WS2_32.48)
+ */
+int WINAPI WSAInstallServiceClassA(LPWSASERVICECLASSINFOA info)
+{
+ FIXME("Request to install service %s\n",debugstr_a(info->lpszServiceClassName));
+ return WSAEACCES;
+}
+
+/***********************************************************************
+ * WSAInstallServiceClassW (WS2_32.49)
+ */
+int WINAPI WSAInstallServiceClassW(LPWSASERVICECLASSINFOW info)
+{
+ FIXME("Request to install service %s\n",debugstr_w(info->lpszServiceClassName));
+ return WSAEACCES;
+}
diff --git a/dlls/winsock/ws2_32.spec b/dlls/winsock/ws2_32.spec
index c3017c0..ad75585 100644
--- a/dlls/winsock/ws2_32.spec
+++ b/dlls/winsock/ws2_32.spec
@@ -49,8 +49,8 @@
45 stub WSAGetServiceClassNameByClassIdW
46 stub WSAHtonl
47 stub WSAHtons
-48 stub WSAInstallServiceClassA
-49 stub WSAInstallServiceClassW
+48 stdcall WSAInstallServiceClassA(ptr) WSAInstallServiceClassA
+49 stdcall WSAInstallServiceClassW(ptr) WSAInstallServiceClassW
50 stdcall WSAIoctl(long long ptr long ptr long ptr ptr ptr) WSAIoctl
51 stdcall gethostbyaddr(ptr long long) WS_gethostbyaddr
52 stdcall gethostbyname(str) WS_gethostbyname
diff --git a/include/winsock2.h b/include/winsock2.h
index 89dc4c6..53798c9 100644
--- a/include/winsock2.h
+++ b/include/winsock2.h
@@ -213,6 +213,49 @@
int iErrorCode[FD_MAX_EVENTS];
} WSANETWORKEVENTS, *LPWSANETWORKEVENTS;
+typedef struct _WSANSClassInfoA
+{
+ LPSTR lpszName;
+ DWORD dwNameSpace;
+ DWORD dwValueType;
+ DWORD dwValueSize;
+ LPVOID lpValue;
+} WSANSCLASSINFOA, *PWSANSCLASSINFOA, *LPWSANSCLASSINFOA;
+
+typedef struct _WSANSClassInfoW
+{
+ LPSTR lpszName;
+ DWORD dwNameSpace;
+ DWORD dwValueType;
+ DWORD dwValueSize;
+ LPVOID lpValue;
+} WSANSCLASSINFOW, *PWSANSCLASSINFOW, *LPWSANSCLASSINFOW;
+
+DECL_WINELIB_TYPE_AW(WSANSCLASSINFO)
+DECL_WINELIB_TYPE_AW(PWSANSCLASSINFO)
+DECL_WINELIB_TYPE_AW(LPWSANSCLASSINFO)
+
+typedef struct _WSAServiceClassInfoA
+{
+ LPGUID lpServiceClassId;
+ LPSTR lpszServiceClassName;
+ DWORD dwCount;
+ LPWSANSCLASSINFOA lpClassInfos;
+} WSASERVICECLASSINFOA, *PWSASERVICECLASSINFOA, *LPWSASERVICECLASSINFOA;
+
+typedef struct _WSAServiceClassInfoW
+{
+ LPGUID lpServiceClassId;
+ LPWSTR lpszServiceClassName;
+ DWORD dwCount;
+ LPWSANSCLASSINFOW lpClassInfos;
+} WSASERVICECLASSINFOW, *PWSASERVICECLASSINFOW, *LPWSASERVICECLASSINFOW;
+
+
+DECL_WINELIB_TYPE_AW(WSASERVICECLASSINFO)
+DECL_WINELIB_TYPE_AW(PWSASERVICECLASSINFO)
+DECL_WINELIB_TYPE_AW(LPWSASERVICECLASSINFO)
+
typedef struct _WSABUF
{
ULONG len;
@@ -379,8 +422,9 @@
/* WSAGetServiceClassNameByClassIdW */
int WINAPI WSAHtonl(SOCKET,u_long,u_long*);
int WINAPI WSAHtons(SOCKET,u_short,u_short*);
-/* WSAInstallServiceClassA */
-/* WSAInstallServiceClassW */
+int WINAPI WSAInstallServiceClassA(LPWSASERVICECLASSINFOA);
+int WINAPI WSAInstallServiceClassW(LPWSASERVICECLASSINFOW);
+#define WSAInstallServiceClass WINELIB_NAME_AW(WSAInstallServiceClass)
int WINAPI WSAIoctl(SOCKET,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
/* WSAJoinLeaf */
/* WSALookupServiceBeginA */
@@ -444,8 +488,8 @@
/* WSAGetServiceClassNameByClassIdW */
typedef int (WINAPI *LPFN_WSAHTONL)(SOCKET,u_long,u_long*);
typedef int (WINAPI *LPFN_WSAHTONS)(SOCKET,u_short,u_short*);
-/* WSAInstallServiceClassA */
-/* WSAInstallServiceClassW */
+typedef int (WINAPI LPFN_WSAINSTALLSERVICECLASSA)(LPWSASERVICECLASSINFOA);
+typedef int (WINAPI LPFN_WSAINSTALLSERVICECLASSW)(LPWSASERVICECLASSINFOW);
typedef int (WINAPI *LPFN_WSAIOCTL)(SOCKET,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
/* WSAJoinLeaf */
/* WSALookupServiceBeginA */