From fdc0506420fa0ef63e63e883eb9356217913944f Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Tue, 14 Apr 2015 20:59:34 +0000 Subject: [PATCH] [SRVSVC] Add the Server service and its interface definition files. svn path=/trunk/; revision=67196 --- reactos/base/services/CMakeLists.txt | 1 + reactos/base/services/srvsvc/CMakeLists.txt | 16 + reactos/base/services/srvsvc/precomp.h | 22 + reactos/base/services/srvsvc/rpcserver.c | 797 +++++++++++ reactos/base/services/srvsvc/srvsvc.c | 184 +++ reactos/base/services/srvsvc/srvsvc.rc | 5 + reactos/base/services/srvsvc/srvsvc.spec | 1 + reactos/boot/bootdata/hivesft.inf | 2 +- reactos/boot/bootdata/hivesys.inf | 9 + reactos/include/reactos/idl/srvsvc.acf | 6 + reactos/include/reactos/idl/srvsvc.idl | 1408 +++++++++++++++++++ 11 files changed, 2450 insertions(+), 1 deletion(-) create mode 100644 reactos/base/services/srvsvc/CMakeLists.txt create mode 100644 reactos/base/services/srvsvc/precomp.h create mode 100644 reactos/base/services/srvsvc/rpcserver.c create mode 100644 reactos/base/services/srvsvc/srvsvc.c create mode 100644 reactos/base/services/srvsvc/srvsvc.rc create mode 100644 reactos/base/services/srvsvc/srvsvc.spec create mode 100644 reactos/include/reactos/idl/srvsvc.acf create mode 100644 reactos/include/reactos/idl/srvsvc.idl diff --git a/reactos/base/services/CMakeLists.txt b/reactos/base/services/CMakeLists.txt index 108dc5c2303..e909cfa9c2e 100644 --- a/reactos/base/services/CMakeLists.txt +++ b/reactos/base/services/CMakeLists.txt @@ -4,6 +4,7 @@ add_subdirectory(eventlog) add_subdirectory(rpcss) add_subdirectory(schedsvc) add_subdirectory(spoolsv) +add_subdirectory(srvsvc) add_subdirectory(svchost) add_subdirectory(tcpsvcs) add_subdirectory(telnetd) diff --git a/reactos/base/services/srvsvc/CMakeLists.txt b/reactos/base/services/srvsvc/CMakeLists.txt new file mode 100644 index 00000000000..2d62e3d3623 --- /dev/null +++ b/reactos/base/services/srvsvc/CMakeLists.txt @@ -0,0 +1,16 @@ + +include_directories(${REACTOS_SOURCE_DIR}/include/reactos/idl) +add_rpc_files(server ${REACTOS_SOURCE_DIR}/include/reactos/idl/srvsvc.idl) +spec2def(srvsvc.dll srvsvc.spec ADD_IMPORTLIB) + +add_library(srvsvc SHARED + rpcserver.c + srvsvc.c + srvsvc.rc + ${CMAKE_CURRENT_BINARY_DIR}/srvsvc_s.c + ${CMAKE_CURRENT_BINARY_DIR}/srvsvc.def) + +set_module_type(srvsvc win32dll UNICODE) +target_link_libraries(srvsvc wine) +add_importlibs(srvsvc advapi32 rpcrt4 msvcrt kernel32 ntdll) +add_cd_file(TARGET srvsvc DESTINATION reactos/system32 FOR all) diff --git a/reactos/base/services/srvsvc/precomp.h b/reactos/base/services/srvsvc/precomp.h new file mode 100644 index 00000000000..c933646c034 --- /dev/null +++ b/reactos/base/services/srvsvc/precomp.h @@ -0,0 +1,22 @@ +#ifndef _SRVSVC_PCH_ +#define _SRVSVC_PCH_ + +#define WIN32_NO_STATUS +#define _INC_WINDOWS +#define COM_NO_WINDOWS_H +#include +#include +#include +#include +#include + +#include + +#include + +DWORD +WINAPI +RpcThreadRoutine( + LPVOID lpParameter); + +#endif /* _SRVSVC_PCH_ */ diff --git a/reactos/base/services/srvsvc/rpcserver.c b/reactos/base/services/srvsvc/rpcserver.c new file mode 100644 index 00000000000..7e22f03f526 --- /dev/null +++ b/reactos/base/services/srvsvc/rpcserver.c @@ -0,0 +1,797 @@ +/* + * ReactOS Services + * Copyright (C) 2015 ReactOS Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Services + * FILE: base/services/srvsvc/rpcserver.c + * PURPOSE: Server service + * PROGRAMMER: Eric Kohl + */ + +/* INCLUDES *****************************************************************/ + +#include "precomp.h" + +#include "winerror.h" +#include "lmerr.h" + +WINE_DEFAULT_DEBUG_CHANNEL(srvsvc); + +/* FUNCTIONS *****************************************************************/ + +DWORD +WINAPI +RpcThreadRoutine( + LPVOID lpParameter) +{ + RPC_STATUS Status; + + Status = RpcServerUseProtseqEpW(L"ncacn_np", 20, L"\\pipe\\srvsvc", NULL); + if (Status != RPC_S_OK) + { + ERR("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status); + return 0; + } + + Status = RpcServerRegisterIf(srvsvc_v3_0_s_ifspec, NULL, NULL); + if (Status != RPC_S_OK) + { + ERR("RpcServerRegisterIf() failed (Status %lx)\n", Status); + return 0; + } + + Status = RpcServerListen(1, RPC_C_LISTEN_MAX_CALLS_DEFAULT, FALSE); + if (Status != RPC_S_OK) + { + ERR("RpcServerListen() failed (Status %lx)\n", Status); + } + + return 0; +} + + +void __RPC_FAR * __RPC_USER midl_user_allocate(SIZE_T len) +{ + return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len); +} + + +void __RPC_USER midl_user_free(void __RPC_FAR * ptr) +{ + HeapFree(GetProcessHeap(), 0, ptr); +} + + +void __RPC_USER SHARE_DEL_HANDLE_rundown(SHARE_DEL_HANDLE hClientHandle) +{ +} + + +/* Function 0 */ +void +__stdcall +Opnum0NotUsedOnWire(void) +{ + UNIMPLEMENTED; +} + + +/* Function 1 */ +void +__stdcall +Opnum1NotUsedOnWire(void) +{ + UNIMPLEMENTED; +} + + +/* Function 2 */ +void +__stdcall +Opnum2NotUsedOnWire(void) +{ + UNIMPLEMENTED; +} + + +/* Function 3 */ +void +__stdcall +Opnum3NotUsedOnWire(void) +{ + UNIMPLEMENTED; +} + + +/* Function 4 */ +void +__stdcall +Opnum4NotUsedOnWire(void) +{ + UNIMPLEMENTED; +} + +/* Function 5 */ +void +__stdcall +Opnum5NotUsedOnWire(void) +{ + UNIMPLEMENTED; +} + + +/* Function 6 */ +void +__stdcall +Opnum6NotUsedOnWire(void) +{ + UNIMPLEMENTED; +} + + +/* Function 7 */ +void +__stdcall +Opnum7NotUsedOnWire(void) +{ + UNIMPLEMENTED; +} + + +/* Function 8 */ +NET_API_STATUS +__stdcall +NetrConnectionEnum( + SRVSVC_HANDLE ServerName, + WCHAR *Qualifier, + LPCONNECT_ENUM_STRUCT InfoStruct, + DWORD PreferedMaximumLength, + DWORD *TotalEntries, + DWORD *ResumeHandle) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 9 */ +NET_API_STATUS +__stdcall +NetrFileEnum( + SRVSVC_HANDLE ServerName, + WCHAR *BasePath, + WCHAR *UserName, + PFILE_ENUM_STRUCT InfoStruct, + DWORD PreferedMaximumLength, + DWORD *TotalEntries, + DWORD *ResumeHandle) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 10 */ +NET_API_STATUS +__stdcall +NetrFileGetInfo( + SRVSVC_HANDLE ServerName, + DWORD FileId, + DWORD Level, + LPFILE_INFO InfoStruct) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 11 */ +NET_API_STATUS +__stdcall +NetrFileClose( + SRVSVC_HANDLE ServerName, + DWORD FileId) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 12 */ +NET_API_STATUS +__stdcall +NetrSessionEnum( + SRVSVC_HANDLE ServerName, + WCHAR *ClientName, + WCHAR *UserName, + PSESSION_ENUM_STRUCT InfoStruct, + DWORD PreferedMaximumLength, + DWORD *TotalEntries, + DWORD *ResumeHandle) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 13 */ +NET_API_STATUS +__stdcall +NetrSessionDel( + SRVSVC_HANDLE ServerName, + WCHAR *ClientName, + WCHAR *UserName) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 14 */ +NET_API_STATUS +__stdcall +NetrShareAdd( + SRVSVC_HANDLE ServerName, + DWORD Level, + LPSHARE_INFO InfoStruct, + DWORD *ParmErr) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 15 */ +NET_API_STATUS +__stdcall +NetrShareEnum( + SRVSVC_HANDLE ServerName, + LPSHARE_ENUM_STRUCT InfoStruct, + DWORD PreferedMaximumLength, + DWORD *TotalEntries, + DWORD *ResumeHandle) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 16 */ +NET_API_STATUS +__stdcall +NetrShareGetInfo( + SRVSVC_HANDLE ServerName, + WCHAR *NetName, + DWORD Level, + LPSHARE_INFO InfoStruct) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 17 */ +NET_API_STATUS +__stdcall +NetrShareSetInfo( + SRVSVC_HANDLE ServerName, + WCHAR *NetName, + DWORD Level, + LPSHARE_INFO ShareInfo, + DWORD *ParmErr) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 18 */ +NET_API_STATUS +__stdcall +NetrShareDel( + SRVSVC_HANDLE ServerName, + WCHAR *NetName, + DWORD Reserved) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 19 */ +NET_API_STATUS +__stdcall +NetrShareDelSticky( + SRVSVC_HANDLE ServerName, + WCHAR *NetName, + DWORD Reserved) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 20 */ +NET_API_STATUS +__stdcall +NetrShareCheck( + SRVSVC_HANDLE ServerName, + WCHAR *Device, + DWORD *Type) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 21 */ +NET_API_STATUS +__stdcall +NetrServerGetInfo( + SRVSVC_HANDLE ServerName, + DWORD Level, + LPSERVER_INFO InfoStruct) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 22 */ +NET_API_STATUS +__stdcall +NetrServerSetInfo( + SRVSVC_HANDLE ServerName, + DWORD Level, + LPSERVER_INFO ServerInfo, + DWORD *ParmErr) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 23 */ +NET_API_STATUS +__stdcall +NetrServerDiskEnum( + SRVSVC_HANDLE ServerName, + DWORD Level, + DISK_ENUM_CONTAINER *DiskInfoStruct, + DWORD PreferedMaximumLength, + DWORD *TotalEntries, + DWORD *ResumeHandle) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 24 */ +NET_API_STATUS +__stdcall +NetrServerStatisticsGet( + SRVSVC_HANDLE ServerName, + WCHAR *Service, + DWORD Level, + DWORD Options, + LPSTAT_SERVER_0 *InfoStruct) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 25 */ +NET_API_STATUS +__stdcall +NetrServerTransportAdd( + SRVSVC_HANDLE ServerName, + DWORD Level, + LPSERVER_TRANSPORT_INFO_0 Buffer) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 26 */ +NET_API_STATUS +__stdcall +NetrServerTransportEnum( + SRVSVC_HANDLE ServerName, + LPSERVER_XPORT_ENUM_STRUCT InfoStruct, + DWORD PreferedMaximumLength, + DWORD *TotalEntries, + DWORD *ResumeHandle) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 27 */ +NET_API_STATUS +__stdcall +NetrServerTransportDel( + SRVSVC_HANDLE ServerName, + DWORD Level, + LPSERVER_TRANSPORT_INFO_0 Buffer) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 28 */ +NET_API_STATUS +__stdcall +NetrRemoteTOD( + SRVSVC_HANDLE ServerName, + LPTIME_OF_DAY_INFO *BufferPtr) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 29 */ +void +__stdcall +Opnum29NotUsedOnWire(void) +{ + UNIMPLEMENTED; +} + + +/* Function 30 */ +NET_API_STATUS +__stdcall +NetprPathType( + SRVSVC_HANDLE ServerName, + WCHAR *PathName, + DWORD *PathType, + DWORD Flags) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 31 */ +NET_API_STATUS +__stdcall +NetprPathCanonicalize( + SRVSVC_HANDLE ServerName, + WCHAR *PathName, + unsigned char *Outbuf, + DWORD OutbufLen, + WCHAR *Prefix, + DWORD *PathType, + DWORD Flags) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 32 */ +long +__stdcall +NetprPathCompare( + SRVSVC_HANDLE ServerName, + WCHAR *PathName1, + WCHAR *PathName2, + DWORD PathType, + DWORD Flags) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 33 */ +NET_API_STATUS +__stdcall +NetprNameValidate( + SRVSVC_HANDLE ServerName, + WCHAR * Name, + DWORD NameType, + DWORD Flags) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 34 */ +NET_API_STATUS +__stdcall +NetprNameCanonicalize( + SRVSVC_HANDLE ServerName, + WCHAR *Name, + WCHAR *Outbuf, + DWORD OutbufLen, + DWORD NameType, + DWORD Flags) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 35 */ +long +__stdcall +NetprNameCompare( + SRVSVC_HANDLE ServerName, + WCHAR *Name1, + WCHAR *Name2, + DWORD NameType, + DWORD Flags) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 36 */ +NET_API_STATUS +__stdcall +NetrShareEnumSticky( + SRVSVC_HANDLE ServerName, + LPSHARE_ENUM_STRUCT InfoStruct, + DWORD PreferedMaximumLength, + DWORD *TotalEntries, + DWORD *ResumeHandle) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 37 */ +NET_API_STATUS +__stdcall +NetrShareDelStart( + SRVSVC_HANDLE ServerName, + WCHAR *NetName, + DWORD Reserved, + PSHARE_DEL_HANDLE ContextHandle) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 38 */ +NET_API_STATUS +__stdcall +NetrShareDelCommit( + PSHARE_DEL_HANDLE ContextHandle) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 39 */ +DWORD +__stdcall +NetrpGetFileSecurity( + SRVSVC_HANDLE ServerName, + WCHAR *ShareName, + WCHAR *lpFileName, + SECURITY_INFORMATION RequestedInformation, + PADT_SECURITY_DESCRIPTOR *SecurityDescriptor) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 40 */ +DWORD +__stdcall +NetrpSetFileSecurity( + SRVSVC_HANDLE ServerName, + WCHAR *ShareName, + WCHAR *lpFileName, + SECURITY_INFORMATION SecurityInformation, + PADT_SECURITY_DESCRIPTOR SecurityDescriptor) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 41 */ +NET_API_STATUS +__stdcall +NetrServerTransportAddEx( + SRVSVC_HANDLE ServerName, + DWORD Level, + LPTRANSPORT_INFO Buffer) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 42 */ +void +__stdcall +Opnum42NotUsedOnWire(void) +{ + UNIMPLEMENTED; +} + + +/* Function 43 */ +NET_API_STATUS +__stdcall +NetrDfsGetVersion( + SRVSVC_HANDLE ServerName, + DWORD *Version) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 44 */ +NET_API_STATUS +__stdcall +NetrDfsCreateLocalPartition( + SRVSVC_HANDLE ServerName, + WCHAR *ShareName, + GUID *EntryUid, + WCHAR *EntryPrefix, + WCHAR *ShortName, + LPNET_DFS_ENTRY_ID_CONTAINER RelationInfo, + int Force) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 45 */ +NET_API_STATUS +__stdcall +NetrDfsDeleteLocalPartition( + SRVSVC_HANDLE ServerName, + GUID *Uid, + WCHAR *Prefix) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 46 */ +NET_API_STATUS +__stdcall +NetrDfsSetLocalVolumeState( + SRVSVC_HANDLE ServerName, + GUID *Uid, + WCHAR *Prefix, + unsigned long State) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 47 */ +void +__stdcall +Opnum47NotUsedOnWire(void) +{ + UNIMPLEMENTED; +} + + +/* Function 48 */ +NET_API_STATUS +__stdcall +NetrDfsCreateExitPoint( + SRVSVC_HANDLE ServerName, + GUID *Uid, + WCHAR *Prefix, + unsigned long Type, + DWORD ShortPrefixLen, + WCHAR *ShortPrefix) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 49 */ +NET_API_STATUS +__stdcall +NetrDfsDeleteExitPoint( + SRVSVC_HANDLE ServerName, + GUID *Uid, + WCHAR *Prefix, + unsigned long Type) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 50 */ +NET_API_STATUS +__stdcall +NetrDfsModifyPrefix( + SRVSVC_HANDLE ServerName, + GUID *Uid, + WCHAR *Prefix) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 51 */ +NET_API_STATUS +__stdcall +NetrDfsFixLocalVolume( + SRVSVC_HANDLE ServerName, + WCHAR *VolumeName, + unsigned long EntryType, + unsigned long ServiceType, + WCHAR *StgId, + GUID *EntryUid, + WCHAR *EntryPrefix, + LPNET_DFS_ENTRY_ID_CONTAINER RelationInfo, + unsigned long CreateDisposition) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 52 */ +NET_API_STATUS +__stdcall +NetrDfsManagerReportSiteInfo( + SRVSVC_HANDLE ServerName, + LPDFS_SITELIST_INFO *ppSiteInfo) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* Function 53 */ +NET_API_STATUS +__stdcall +NetrServerTransportDelEx( + SRVSVC_HANDLE ServerName, + DWORD Level, + LPTRANSPORT_INFO Buffer) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/* EOF */ diff --git a/reactos/base/services/srvsvc/srvsvc.c b/reactos/base/services/srvsvc/srvsvc.c new file mode 100644 index 00000000000..c37072f13ee --- /dev/null +++ b/reactos/base/services/srvsvc/srvsvc.c @@ -0,0 +1,184 @@ +/* + * ReactOS Services + * Copyright (C) 2015 ReactOS Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Services + * FILE: base/services/srvsvc/srvsvc.c + * PURPOSE: Server service + * PROGRAMMER: Eric Kohl + */ + +/* INCLUDES *****************************************************************/ + +#include "precomp.h" + +WINE_DEFAULT_DEBUG_CHANNEL(srvsvc); + +/* GLOBALS ******************************************************************/ + +static WCHAR ServiceName[] = L"Lanmanserver"; + +static SERVICE_STATUS_HANDLE ServiceStatusHandle; +static SERVICE_STATUS ServiceStatus; + +/* FUNCTIONS *****************************************************************/ + +static VOID +UpdateServiceStatus(DWORD dwState) +{ + ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; + ServiceStatus.dwCurrentState = dwState; + ServiceStatus.dwControlsAccepted = 0; + ServiceStatus.dwWin32ExitCode = 0; + ServiceStatus.dwServiceSpecificExitCode = 0; + ServiceStatus.dwCheckPoint = 0; + + if (dwState == SERVICE_START_PENDING || + dwState == SERVICE_STOP_PENDING || + dwState == SERVICE_PAUSE_PENDING || + dwState == SERVICE_CONTINUE_PENDING) + ServiceStatus.dwWaitHint = 10000; + else + ServiceStatus.dwWaitHint = 0; + + SetServiceStatus(ServiceStatusHandle, + &ServiceStatus); +} + +static DWORD WINAPI +ServiceControlHandler(DWORD dwControl, + DWORD dwEventType, + LPVOID lpEventData, + LPVOID lpContext) +{ + TRACE("ServiceControlHandler() called\n"); + + switch (dwControl) + { + case SERVICE_CONTROL_STOP: + TRACE(" SERVICE_CONTROL_STOP received\n"); + /* Stop listening to incoming RPC messages */ + RpcMgmtStopServerListening(NULL); + UpdateServiceStatus(SERVICE_STOPPED); + return ERROR_SUCCESS; + + case SERVICE_CONTROL_PAUSE: + TRACE(" SERVICE_CONTROL_PAUSE received\n"); + UpdateServiceStatus(SERVICE_PAUSED); + return ERROR_SUCCESS; + + case SERVICE_CONTROL_CONTINUE: + TRACE(" SERVICE_CONTROL_CONTINUE received\n"); + UpdateServiceStatus(SERVICE_RUNNING); + return ERROR_SUCCESS; + + case SERVICE_CONTROL_INTERROGATE: + TRACE(" SERVICE_CONTROL_INTERROGATE received\n"); + SetServiceStatus(ServiceStatusHandle, + &ServiceStatus); + return ERROR_SUCCESS; + + case SERVICE_CONTROL_SHUTDOWN: + TRACE(" SERVICE_CONTROL_SHUTDOWN received\n"); + UpdateServiceStatus(SERVICE_STOPPED); + return ERROR_SUCCESS; + + default : + TRACE(" Control %lu received\n", dwControl); + return ERROR_CALL_NOT_IMPLEMENTED; + } +} + + +static +DWORD +ServiceInit(VOID) +{ + HANDLE hThread; + + hThread = CreateThread(NULL, + 0, + (LPTHREAD_START_ROUTINE)RpcThreadRoutine, + NULL, + 0, + NULL); + + if (!hThread) + { + ERR("Can't create PortThread\n"); + return GetLastError(); + } + else + CloseHandle(hThread); + + return ERROR_SUCCESS; +} + + +VOID +WINAPI +ServiceMain(DWORD argc, LPTSTR *argv) +{ + DWORD dwError; + + UNREFERENCED_PARAMETER(argc); + UNREFERENCED_PARAMETER(argv); + + TRACE("ServiceMain() called\n"); + + ServiceStatusHandle = RegisterServiceCtrlHandlerExW(ServiceName, + ServiceControlHandler, + NULL); + if (!ServiceStatusHandle) + { + ERR("RegisterServiceCtrlHandlerExW() failed! (Error %lu)\n", GetLastError()); + return; + } + + UpdateServiceStatus(SERVICE_START_PENDING); + + dwError = ServiceInit(); + if (dwError != ERROR_SUCCESS) + { + ERR("Service stopped (dwError: %lu\n", dwError); + UpdateServiceStatus(SERVICE_STOPPED); + return; + } + + UpdateServiceStatus(SERVICE_RUNNING); +} + + +BOOL WINAPI +DllMain(HINSTANCE hinstDLL, + DWORD fdwReason, + LPVOID lpvReserved) +{ + switch (fdwReason) + { + case DLL_PROCESS_ATTACH: + DisableThreadLibraryCalls(hinstDLL); + break; + + case DLL_PROCESS_DETACH: + break; + } + + return TRUE; +} diff --git a/reactos/base/services/srvsvc/srvsvc.rc b/reactos/base/services/srvsvc/srvsvc.rc new file mode 100644 index 00000000000..80b3b0c7132 --- /dev/null +++ b/reactos/base/services/srvsvc/srvsvc.rc @@ -0,0 +1,5 @@ +#define REACTOS_VERSION_DLL +#define REACTOS_STR_FILE_DESCRIPTION "Server Service" +#define REACTOS_STR_INTERNAL_NAME "srvsvc" +#define REACTOS_STR_ORIGINAL_FILENAME "srvsvc.dll" +#include diff --git a/reactos/base/services/srvsvc/srvsvc.spec b/reactos/base/services/srvsvc/srvsvc.spec new file mode 100644 index 00000000000..1b27fe53864 --- /dev/null +++ b/reactos/base/services/srvsvc/srvsvc.spec @@ -0,0 +1 @@ +@ stdcall ServiceMain(long ptr) diff --git a/reactos/boot/bootdata/hivesft.inf b/reactos/boot/bootdata/hivesft.inf index ee792c50fd3..c141b585b70 100644 --- a/reactos/boot/bootdata/hivesft.inf +++ b/reactos/boot/bootdata/hivesft.inf @@ -1609,7 +1609,7 @@ HKLM,"SOFTWARE\Microsoft\Ole","EnableRemoteConnect",0x00000000,"N" ; SvcHost services HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost",,0x00000012 HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost","DcomLaunch",0x00010000,"PlugPlay" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost","netsvcs",0x00010000,"DHCP","BITS","lanmanworkstation","Schedule","winmgmt" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost","netsvcs",0x00010000,"DHCP","BITS","lanmanserver","lanmanworkstation","Schedule","winmgmt" ; Win32 config HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows",,0x00000012 diff --git a/reactos/boot/bootdata/hivesys.inf b/reactos/boot/bootdata/hivesys.inf index fcd1fa8715e..86d1ba6c8ea 100644 --- a/reactos/boot/bootdata/hivesys.inf +++ b/reactos/boot/bootdata/hivesys.inf @@ -1437,6 +1437,15 @@ HKLM,"SYSTEM\CurrentControlSet\Services\Fs_Rec","ImagePath",0x00020000,"system32 HKLM,"SYSTEM\CurrentControlSet\Services\Fs_Rec","Start",0x00010001,0x00000001 HKLM,"SYSTEM\CurrentControlSet\Services\Fs_Rec","Type",0x00010001,0x00000008 +; Server service +HKLM,"SYSTEM\CurrentControlSet\Services\lanmanserver","DisplayName",0x00000000,"Server service" +HKLM,"SYSTEM\CurrentControlSet\Services\lanmanserver","ErrorControl",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\lanmanserver","ImagePath",0x00020000,"%SystemRoot%\system32\svchost.exe -k netsvcs" +HKLM,"SYSTEM\CurrentControlSet\Services\lanmanserver","ObjectName",0x00000000,"LocalSystem" +HKLM,"SYSTEM\CurrentControlSet\Services\lanmanserver","Start",0x00010001,0x00000002 +HKLM,"SYSTEM\CurrentControlSet\Services\lanmanserver","Type",0x00010001,0x00000020 +HKLM,"SYSTEM\CurrentControlSet\Services\lanmanserver\Parameters","ServiceDll",0x00020000,"%SystemRoot%\system32\srvsvc.dll" + ; Workstation service HKLM,"SYSTEM\CurrentControlSet\Services\lanmanworkstation","DisplayName",0x00000000,"Workstation service" HKLM,"SYSTEM\CurrentControlSet\Services\lanmanworkstation","ErrorControl",0x00010001,0x00000001 diff --git a/reactos/include/reactos/idl/srvsvc.acf b/reactos/include/reactos/idl/srvsvc.acf new file mode 100644 index 00000000000..822ee3bfcd3 --- /dev/null +++ b/reactos/include/reactos/idl/srvsvc.acf @@ -0,0 +1,6 @@ +[ + implicit_handle(handle_t hBinding) +] +interface srvsvc +{ +} \ No newline at end of file diff --git a/reactos/include/reactos/idl/srvsvc.idl b/reactos/include/reactos/idl/srvsvc.idl new file mode 100644 index 00000000000..70f17e6ea19 --- /dev/null +++ b/reactos/include/reactos/idl/srvsvc.idl @@ -0,0 +1,1408 @@ +/* + * Server Service interface definition + */ + +#include + +typedef [handle, string] wchar_t *SRVSVC_HANDLE; + +typedef struct _CONNECTION_INFO_0 +{ + DWORD coni0_id; +} CONNECTION_INFO_0, *PCONNECTION_INFO_0, *LPCONNECTION_INFO_0; + +typedef struct _CONNECT_INFO_0_CONTAINER +{ + DWORD EntriesRead; + [size_is(EntriesRead)] LPCONNECTION_INFO_0 Buffer; +} CONNECT_INFO_0_CONTAINER, *PCONNECT_INFO_0_CONTAINER, *LPCONNECT_INFO_0_CONTAINER; + +typedef struct _CONNECTION_INFO_1 +{ + DWORD coni1_id; + DWORD coni1_type; + DWORD coni1_num_opens; + DWORD coni1_num_users; + DWORD coni1_time; + [string] wchar_t *coni1_username; + [string] wchar_t *coni1_netname; +} CONNECTION_INFO_1, *PCONNECTION_INFO_1, *LPCONNECTION_INFO_1; + +typedef struct _CONNECT_INFO_1_CONTAINER +{ + DWORD EntriesRead; + [size_is(EntriesRead)] LPCONNECTION_INFO_1 Buffer; +} CONNECT_INFO_1_CONTAINER, *PCONNECT_INFO_1_CONTAINER, *LPCONNECT_INFO_1_CONTAINER; + +typedef [switch_type(DWORD)] union _CONNECT_ENUM_UNION +{ + [case(0)] CONNECT_INFO_0_CONTAINER *Level0; + [case(1)] CONNECT_INFO_1_CONTAINER *Level1; +} CONNECT_ENUM_UNION; + +typedef struct _CONNECT_ENUM_STRUCT +{ + DWORD Level; + [switch_is(Level)] CONNECT_ENUM_UNION ConnectInfo; +} CONNECT_ENUM_STRUCT, *PCONNECT_ENUM_STRUCT, *LPCONNECT_ENUM_STRUCT; + +typedef struct _FILE_INFO_2 +{ + DWORD fi2_id; +} FILE_INFO_2, *PFILE_INFO_2, *LPFILE_INFO_2; + +typedef struct _FILE_INFO_2_CONTAINER +{ + DWORD EntriesRead; + [size_is(EntriesRead)] LPFILE_INFO_2 Buffer; +} FILE_INFO_2_CONTAINER, *PFILE_INFO_2_CONTAINER, *LPFILE_INFO_2_CONTAINER; + +typedef struct _FILE_INFO_3 +{ + DWORD fi3_id; + DWORD fi3_permissions; + DWORD fi3_num_locks; + [string] wchar_t *fi3_pathname; + [string] wchar_t *fi3_username; +} FILE_INFO_3, *PFILE_INFO_3, *LPFILE_INFO_3; + +typedef struct _FILE_INFO_3_CONTAINER +{ + DWORD EntriesRead; + [size_is(EntriesRead)] LPFILE_INFO_3 Buffer; +} FILE_INFO_3_CONTAINER, *PFILE_INFO_3_CONTAINER, *LPFILE_INFO_3_CONTAINER; + +typedef [switch_type(DWORD)] union _FILE_ENUM_UNION +{ + [case(2)] FILE_INFO_2_CONTAINER* Level2; + [case(3)] FILE_INFO_3_CONTAINER* Level3; +} FILE_ENUM_UNION; + +typedef struct _FILE_ENUM_STRUCT +{ + DWORD Level; + [switch_is(Level)] FILE_ENUM_UNION FileInfo; +} FILE_ENUM_STRUCT, *PFILE_ENUM_STRUCT, *LPFILE_ENUM_STRUCT; + +typedef [switch_type(unsigned long)] union _FILE_INFO +{ + [case(2)] LPFILE_INFO_2 FileInfo2; + [case(3)] LPFILE_INFO_3 FileInfo3; +} FILE_INFO, *PFILE_INFO, *LPFILE_INFO; + +typedef struct _SESSION_INFO_0 +{ + [string] wchar_t *sesi0_cname; +} SESSION_INFO_0, *PSESSION_INFO_0, *LPSESSION_INFO_0; + +typedef struct _SESSION_INFO_0_CONTAINER +{ + DWORD EntriesRead; + [size_is(EntriesRead)] LPSESSION_INFO_0 Buffer; +} SESSION_INFO_0_CONTAINER, *PSESSION_INFO_0_CONTAINER, *LPSESSION_INFO_0_CONTAINER; + +typedef struct _SESSION_INFO_1 +{ + [string] wchar_t *sesi1_cname; + [string] wchar_t *sesi1_username; + DWORD sesi1_num_opens; + DWORD sesi1_time; + DWORD sesi1_idle_time; + DWORD sesi1_user_flags; +} SESSION_INFO_1, *PSESSION_INFO_1, *LPSESSION_INFO_1; + +typedef struct _SESSION_INFO_1_CONTAINER +{ + DWORD EntriesRead; + [size_is(EntriesRead)] LPSESSION_INFO_1 Buffer; +} SESSION_INFO_1_CONTAINER, *PSESSION_INFO_1_CONTAINER, *LPSESSION_INFO_1_CONTAINER; + +typedef struct _SESSION_INFO_2 +{ + [string] wchar_t *sesi2_cname; + [string] wchar_t *sesi2_username; + DWORD sesi2_num_opens; + DWORD sesi2_time; + DWORD sesi2_idle_time; + DWORD sesi2_user_flags; + [string] wchar_t *sesi2_cltype_name; +} SESSION_INFO_2, *PSESSION_INFO_2, *LPSESSION_INFO_2; + +typedef struct _SESSION_INFO_2_CONTAINER +{ + DWORD EntriesRead; + [size_is(EntriesRead)] LPSESSION_INFO_2 Buffer; +} SESSION_INFO_2_CONTAINER, *PSESSION_INFO_2_CONTAINER, *LPSESSION_INFO_2_CONTAINER; + +typedef struct _SESSION_INFO_10 +{ + [string] wchar_t *sesi10_cname; + [string] wchar_t *sesi10_username; + DWORD sesi10_time; + DWORD sesi10_idle_time; +} SESSION_INFO_10, *PSESSION_INFO_10, *LPSESSION_INFO_10; + +typedef struct _SESSION_INFO_10_CONTAINER +{ + DWORD EntriesRead; + [size_is(EntriesRead)] LPSESSION_INFO_10 Buffer; +} SESSION_INFO_10_CONTAINER, *PSESSION_INFO_10_CONTAINER, *LPSESSION_INFO_10_CONTAINER; + +typedef struct _SESSION_INFO_502 +{ + [string] wchar_t *sesi502_cname; + [string] wchar_t *sesi502_username; + DWORD sesi502_num_opens; + DWORD sesi502_time; + DWORD sesi502_idle_time; + DWORD sesi502_user_flags; + [string] wchar_t *sesi502_cltype_name; + [string] wchar_t *sesi502_transport; +} SESSION_INFO_502, *PSESSION_INFO_502, *LPSESSION_INFO_502; + +typedef struct _SESSION_INFO_502_CONTAINER +{ + DWORD EntriesRead; + [size_is(EntriesRead)] LPSESSION_INFO_502 Buffer; +} SESSION_INFO_502_CONTAINER, *PSESSION_INFO_502_CONTAINER, *LPSESSION_INFO_502_CONTAINER; + +typedef [switch_type(DWORD)] union _SESSION_ENUM_UNION +{ + [case(0)] SESSION_INFO_0_CONTAINER *Level0; + [case(1)] SESSION_INFO_1_CONTAINER *Level1; + [case(2)] SESSION_INFO_2_CONTAINER *Level2; + [case(10)] SESSION_INFO_10_CONTAINER *Level10; + [case(502)] SESSION_INFO_502_CONTAINER *Level502; +} SESSION_ENUM_UNION; + +typedef struct _SESSION_ENUM_STRUCT { + DWORD Level; + [switch_is(Level)] SESSION_ENUM_UNION SessionInfo; +} SESSION_ENUM_STRUCT, *PSESSION_ENUM_STRUCT, *LPSESSION_ENUM_STRUCT; + +typedef struct _SHARE_INFO_502_I +{ + [string] WCHAR *shi502_netname; + DWORD shi502_type; + [string] WCHAR *shi502_remark; + DWORD shi502_permissions; + DWORD shi502_max_uses; + DWORD shi502_current_uses; + [string] WCHAR *shi502_path; + [string] WCHAR *shi502_passwd; + DWORD shi502_reserved; + [size_is(shi502_reserved)] unsigned char *shi502_security_descriptor; +} SHARE_INFO_502_I, *PSHARE_INFO_502_I, *LPSHARE_INFO_502_I; + +typedef struct _SHARE_INFO_503_I +{ + [string] WCHAR *shi503_netname; + DWORD shi503_type; + [string] WCHAR *shi503_remark; + DWORD shi503_permissions; + DWORD shi503_max_uses; + DWORD shi503_current_uses; + [string] WCHAR *shi503_path; + [string] WCHAR *shi503_passwd; + [string] WCHAR *shi503_servername; + DWORD shi503_reserved; + [size_is(shi503_reserved)] PUCHAR shi503_security_descriptor; +} SHARE_INFO_503_I, *PSHARE_INFO_503_I, *LPSHARE_INFO_503_I; + +typedef struct _SHARE_INFO_503_CONTAINER +{ DWORD EntriesRead; + [size_is(EntriesRead)] LPSHARE_INFO_503_I Buffer; +} SHARE_INFO_503_CONTAINER, *PSHARE_INFO_503_CONTAINER, *LPSHARE_INFO_503_CONTAINER; + +typedef struct _SHARE_INFO_1501_I +{ + DWORD shi1501_reserved; + [size_is(shi1501_reserved)] unsigned char *shi1501_security_descriptor; +} SHARE_INFO_1501_I, *PSHARE_INFO_1501_I, *LPSHARE_INFO_1501_I; + +typedef struct _SHARE_INFO_0 +{ + [string] wchar_t *shi0_netname; +} SHARE_INFO_0, *PSHARE_INFO_0, *LPSHARE_INFO_0; + +typedef struct _SHARE_INFO_0_CONTAINER +{ + DWORD EntriesRead; + [size_is(EntriesRead)] LPSHARE_INFO_0 Buffer; +} SHARE_INFO_0_CONTAINER; + +typedef struct _SHARE_INFO_1 +{ + [string] wchar_t *shi1_netname; + DWORD shi1_type; + [string] wchar_t *shi1_remark; +} SHARE_INFO_1, *PSHARE_INFO_1, *LPSHARE_INFO_1; + +typedef struct _SHARE_INFO_1_CONTAINER +{ + DWORD EntriesRead; + [size_is(EntriesRead)] LPSHARE_INFO_1 Buffer; +} SHARE_INFO_1_CONTAINER; + +typedef struct _SHARE_INFO_2 +{ + [string] wchar_t *shi2_netname; + DWORD shi2_type; + [string] wchar_t *shi2_remark; + DWORD shi2_permissions; + DWORD shi2_max_uses; + DWORD shi2_current_uses; + [string] wchar_t *shi2_path; + [string] wchar_t *shi2_passwd; +} SHARE_INFO_2, *PSHARE_INFO_2, *LPSHARE_INFO_2; + +typedef struct _SHARE_INFO_2_CONTAINER +{ + DWORD EntriesRead; + [size_is(EntriesRead)] LPSHARE_INFO_2 Buffer; +} SHARE_INFO_2_CONTAINER, *PSHARE_INFO_2_CONTAINER, *LPSHARE_INFO_2_CONTAINER; + +typedef struct _SHARE_INFO_501 +{ + [string] wchar_t *shi501_netname; + DWORD shi501_type; + [string] wchar_t *shi501_remark; + DWORD shi501_flags; +} SHARE_INFO_501, *PSHARE_INFO_501, *LPSHARE_INFO_501; + +typedef struct _SHARE_INFO_501_CONTAINER +{ + DWORD EntriesRead; + [size_is(EntriesRead)] LPSHARE_INFO_501 Buffer; +} SHARE_INFO_501_CONTAINER, *PSHARE_INFO_501_CONTAINER, *LPSHARE_INFO_501_CONTAINER; + +typedef struct _SHARE_INFO_502_CONTAINER +{ + DWORD EntriesRead; + [size_is(EntriesRead)] LPSHARE_INFO_502_I Buffer; +} SHARE_INFO_502_CONTAINER, *PSHARE_INFO_502_CONTAINER, *LPSHARE_INFO_502_CONTAINER; + +typedef [switch_type(DWORD)] union _SHARE_ENUM_UNION +{ + [case(0)] SHARE_INFO_0_CONTAINER *Level0; + [case(1)] SHARE_INFO_1_CONTAINER *Level1; + [case(2)] SHARE_INFO_2_CONTAINER *Level2; + [case(501)] SHARE_INFO_501_CONTAINER *Level501; + [case(502)] SHARE_INFO_502_CONTAINER *Level502; + [case(503)] SHARE_INFO_503_CONTAINER *Level503; +} SHARE_ENUM_UNION; + +typedef struct _SHARE_ENUM_STRUCT +{ + DWORD Level; + [switch_is(Level)] SHARE_ENUM_UNION ShareInfo; +} SHARE_ENUM_STRUCT, *PSHARE_ENUM_STRUCT, *LPSHARE_ENUM_STRUCT; + +typedef struct _SHARE_INFO_1004 +{ + [string] wchar_t *shi1004_remark; +} SHARE_INFO_1004, *PSHARE_INFO_1004, *LPSHARE_INFO_1004; + +typedef struct _SHARE_INFO_1006 +{ + DWORD shi1006_max_uses; +} SHARE_INFO_1006, *PSHARE_INFO_1006, *LPSHARE_INFO_1006; + +typedef struct _SHARE_INFO_1005 +{ + DWORD shi1005_flags; +} SHARE_INFO_1005, *PSHARE_INFO_1005, *LPSHARE_INFO_1005; + +//JMP: order differs in documentation +typedef [switch_type(unsigned long)] union _SHARE_INFO +// for Get & Set info +{ + [case(0)] LPSHARE_INFO_0 ShareInfo0; + [case(1)] LPSHARE_INFO_1 ShareInfo1; + [case(2)] LPSHARE_INFO_2 ShareInfo2; + [case(502)] LPSHARE_INFO_502_I ShareInfo502; + [case(1004)] LPSHARE_INFO_1004 ShareInfo1004; + [case(1006)] LPSHARE_INFO_1006 ShareInfo1006; + [case(1501)] LPSHARE_INFO_1501_I ShareInfo1501; + [default] ; + [case(1005)] LPSHARE_INFO_1005 ShareInfo1005; + [case(501)] LPSHARE_INFO_501 ShareInfo501; + [case(503)] LPSHARE_INFO_503_I ShareInfo503; +} SHARE_INFO, *PSHARE_INFO, *LPSHARE_INFO; + +typedef struct _SERVER_INFO_100 +{ + DWORD sv100_platform_id; + [string] wchar_t *sv100_name; +} SERVER_INFO_100, *PSERVER_INFO_100, *LPSERVER_INFO_100; + +typedef struct _SERVER_INFO_101 +{ + DWORD sv101_platform_id; + [string] wchar_t *sv101_name; + DWORD sv101_version_major; + DWORD sv101_version_minor; + DWORD sv101_type; + [string] wchar_t *sv101_comment; +} SERVER_INFO_101, *PSERVER_INFO_101, *LPSERVER_INFO_101; + +typedef struct _SERVER_INFO_102 +{ + DWORD sv102_platform_id; + [string] wchar_t *sv102_name; + DWORD sv102_version_major; + DWORD sv102_version_minor; + DWORD sv102_type; + [string] wchar_t *sv102_comment; + DWORD sv102_users; + long sv102_disc; + int sv102_hidden; + DWORD sv102_announce; + DWORD sv102_anndelta; + DWORD sv102_licenses; + [string] wchar_t *sv102_userpath; +} SERVER_INFO_102, *PSERVER_INFO_102, *LPSERVER_INFO_102; + +typedef struct _SERVER_INFO_103 +{ + DWORD sv103_platform_id; + [string] wchar_t *sv103_name; + DWORD sv103_version_major; + DWORD sv103_version_minor; + DWORD sv103_type; + [string] wchar_t *sv103_comment; + DWORD sv103_users; + LONG sv103_disc; + BOOL sv103_hidden; + DWORD sv103_announce; + DWORD sv103_anndelta; + DWORD sv103_licenses; + [string] wchar_t* sv103_userpath; + DWORD sv103_capabilities; +} SERVER_INFO_103, *PSERVER_INFO_103, *LPSERVER_INFO_103; + +typedef struct _SERVER_INFO_502 +{ + DWORD sv502_sessopens; + DWORD sv502_sessvcs; + DWORD sv502_opensearch; + DWORD sv502_sizreqbuf; + DWORD sv502_initworkitems; + DWORD sv502_maxworkitems; + DWORD sv502_rawworkitems; + DWORD sv502_irpstacksize; + DWORD sv502_maxrawbuflen; + DWORD sv502_sessusers; + DWORD sv502_sessconns; + DWORD sv502_maxpagedmemoryusage; + DWORD sv502_maxnonpagedmemoryusage; + int sv502_enablesoftcompat; + int sv502_enableforcedlogoff; + int sv502_timesource; + int sv502_acceptdownlevelapis; + int sv502_lmannounce; +} SERVER_INFO_502, *PSERVER_INFO_502, *LPSERVER_INFO_502; + +typedef struct _SERVER_INFO_503 +{ + DWORD sv503_sessopens; + DWORD sv503_sessvcs; + DWORD sv503_opensearch; + DWORD sv503_sizreqbuf; + DWORD sv503_initworkitems; + DWORD sv503_maxworkitems; + DWORD sv503_rawworkitems; + DWORD sv503_irpstacksize; + DWORD sv503_maxrawbuflen; + DWORD sv503_sessusers; + DWORD sv503_sessconns; + DWORD sv503_maxpagedmemoryusage; + DWORD sv503_maxnonpagedmemoryusage; + int sv503_enablesoftcompat; + int sv503_enableforcedlogoff; + int sv503_timesource; + int sv503_acceptdownlevelapis; + int sv503_lmannounce; + [string] wchar_t *sv503_domain; + DWORD sv503_maxcopyreadlen; + DWORD sv503_maxcopywritelen; + DWORD sv503_minkeepsearch; + DWORD sv503_maxkeepsearch; + DWORD sv503_minkeepcomplsearch; + DWORD sv503_maxkeepcomplsearch; + DWORD sv503_threadcountadd; + DWORD sv503_numblockthreads; + DWORD sv503_scavtimeout; + DWORD sv503_minrcvqueue; + DWORD sv503_minfreeworkitems; + DWORD sv503_xactmemsize; + DWORD sv503_threadpriority; + DWORD sv503_maxmpxct; + DWORD sv503_oplockbreakwait; + DWORD sv503_oplockbreakresponsewait; + int sv503_enableoplocks; + int sv503_enableoplockforceclose; + int sv503_enablefcbopens; + int sv503_enableraw; + int sv503_enablesharednetdrives; + DWORD sv503_minfreeconnections; + DWORD sv503_maxfreeconnections; +} SERVER_INFO_503, *PSERVER_INFO_503, *LPSERVER_INFO_503; + +typedef struct _SERVER_INFO_599 +{ + DWORD sv599_sessopens; + DWORD sv599_sessvcs; + DWORD sv599_opensearch; + DWORD sv599_sizreqbuf; + DWORD sv599_initworkitems; + DWORD sv599_maxworkitems; + DWORD sv599_rawworkitems; + DWORD sv599_irpstacksize; + DWORD sv599_maxrawbuflen; + DWORD sv599_sessusers; + DWORD sv599_sessconns; + DWORD sv599_maxpagedmemoryusage; + DWORD sv599_maxnonpagedmemoryusage; + int sv599_enablesoftcompat; + int sv599_enableforcedlogoff; + int sv599_timesource; + int sv599_acceptdownlevelapis; + int sv599_lmannounce; + [string] wchar_t *sv599_domain; + DWORD sv599_maxcopyreadlen; + DWORD sv599_maxcopywritelen; + DWORD sv599_minkeepsearch; + DWORD sv599_maxkeepsearch; + DWORD sv599_minkeepcomplsearch; + DWORD sv599_maxkeepcomplsearch; + DWORD sv599_threadcountadd; + DWORD sv599_numblockthreads; + DWORD sv599_scavtimeout; + DWORD sv599_minrcvqueue; + DWORD sv599_minfreeworkitems; + DWORD sv599_xactmemsize; + DWORD sv599_threadpriority; + DWORD sv599_maxmpxct; + DWORD sv599_oplockbreakwait; + DWORD sv599_oplockbreakresponsewait; + int sv599_enableoplocks; + int sv599_enableoplockforceclose; + int sv599_enablefcbopens; + int sv599_enableraw; + int sv599_enablesharednetdrives; + DWORD sv599_minfreeconnections; + DWORD sv599_maxfreeconnections; + DWORD sv599_initsesstable; + DWORD sv599_initconntable; + DWORD sv599_initfiletable; + DWORD sv599_initsearchtable; + DWORD sv599_alertschedule; + DWORD sv599_errorthreshold; + DWORD sv599_networkerrorthreshold; + DWORD sv599_diskspacethreshold; + DWORD sv599_reserved; + DWORD sv599_maxlinkdelay; + DWORD sv599_minlinkthroughput; + DWORD sv599_linkinfovalidtime; + DWORD sv599_scavqosinfoupdatetime; + DWORD sv599_maxworkitemidletime; +} SERVER_INFO_599, *PSERVER_INFO_599, *LPSERVER_INFO_599; + +typedef struct _SERVER_INFO_1005 +{ + [string] wchar_t *sv1005_comment; +} SERVER_INFO_1005, *PSERVER_INFO_1005, *LPSERVER_INFO_1005; + +typedef struct _SERVER_INFO_1107 +{ + DWORD sv1107_users; +} SERVER_INFO_1107, *PSERVER_INFO_1107, *LPSERVER_INFO_1107; + +typedef struct _SERVER_INFO_1010 +{ + long sv1010_disc; +} SERVER_INFO_1010, *PSERVER_INFO_1010, *LPSERVER_INFO_1010; + +typedef struct _SERVER_INFO_1016 +{ + int sv1016_hidden; +} SERVER_INFO_1016, *PSERVER_INFO_1016, *LPSERVER_INFO_1016; + +typedef struct _SERVER_INFO_1017 +{ + DWORD sv1017_announce; +} SERVER_INFO_1017, *PSERVER_INFO_1017, *LPSERVER_INFO_1017; + +typedef struct _SERVER_INFO_1018 +{ + DWORD sv1018_anndelta; +} SERVER_INFO_1018, *PSERVER_INFO_1018, *LPSERVER_INFO_1018; + +typedef struct _SERVER_INFO_1501 +{ + DWORD sv1501_sessopens; +} SERVER_INFO_1501, *PSERVER_INFO_1501, *LPSERVER_INFO_1501; + +typedef struct _SERVER_INFO_1502 +{ + DWORD sv1502_sessvcs; +} SERVER_INFO_1502, *PSERVER_INFO_1502, *LPSERVER_INFO_1502; + +typedef struct _SERVER_INFO_1503 +{ + DWORD sv1503_opensearch; +} SERVER_INFO_1503, *PSERVER_INFO_1503, *LPSERVER_INFO_1503; + +typedef struct _SERVER_INFO_1506 +{ + DWORD sv1506_maxworkitems; +} SERVER_INFO_1506, *PSERVER_INFO_1506, *LPSERVER_INFO_1506; + +typedef struct _SERVER_INFO_1510 +{ + DWORD sv1510_sessusers; +} SERVER_INFO_1510, *PSERVER_INFO_1510, *LPSERVER_INFO_1510; + +typedef struct _SERVER_INFO_1511 +{ + DWORD sv1511_sessconns; +} SERVER_INFO_1511, *PSERVER_INFO_1511, *LPSERVER_INFO_1511; + +typedef struct _SERVER_INFO_1512 +{ + DWORD sv1512_maxnonpagedmemoryusage; +} SERVER_INFO_1512, *PSERVER_INFO_1512, *LPSERVER_INFO_1512; + +typedef struct _SERVER_INFO_1513 +{ + DWORD sv1513_maxpagedmemoryusage; +} SERVER_INFO_1513, *PSERVER_INFO_1513, *LPSERVER_INFO_1513; + +typedef struct _SERVER_INFO_1514 +{ + int sv1514_enablesoftcompat; +} SERVER_INFO_1514, *PSERVER_INFO_1514, *LPSERVER_INFO_1514; + +typedef struct _SERVER_INFO_1515 +{ + int sv1515_enableforcedlogoff; +} SERVER_INFO_1515, *PSERVER_INFO_1515, *LPSERVER_INFO_1515; + +typedef struct _SERVER_INFO_1516 +{ + int sv1516_timesource; +} SERVER_INFO_1516, *PSERVER_INFO_1516, *LPSERVER_INFO_1516; + +typedef struct _SERVER_INFO_1518 +{ + int sv1518_lmannounce; +} SERVER_INFO_1518, *PSERVER_INFO_1518, *LPSERVER_INFO_1518; + +typedef struct _SERVER_INFO_1523 +{ + DWORD sv1523_maxkeepsearch; +} SERVER_INFO_1523, *PSERVER_INFO_1523, *LPSERVER_INFO_1523; + +typedef struct _SERVER_INFO_1528 +{ + DWORD sv1528_scavtimeout; +} SERVER_INFO_1528, *PSERVER_INFO_1528, *LPSERVER_INFO_1528; + +typedef struct _SERVER_INFO_1529 +{ + DWORD sv1529_minrcvqueue; +} SERVER_INFO_1529, *PSERVER_INFO_1529, *LPSERVER_INFO_1529; + +typedef struct _SERVER_INFO_1530 +{ + DWORD sv1530_minfreeworkitems; +} SERVER_INFO_1530, *PSERVER_INFO_1530, *LPSERVER_INFO_1530; + +typedef struct _SERVER_INFO_1533 +{ + DWORD sv1533_maxmpxct; +} SERVER_INFO_1533, *PSERVER_INFO_1533, *LPSERVER_INFO_1533; + +typedef struct _SERVER_INFO_1534 +{ + DWORD sv1534_oplockbreakwait; +} SERVER_INFO_1534, *PSERVER_INFO_1534, *LPSERVER_INFO_1534; + +typedef struct _SERVER_INFO_1535 +{ + DWORD sv1535_oplockbreakresponsewait; +} SERVER_INFO_1535, *PSERVER_INFO_1535, *LPSERVER_INFO_1535; + +typedef struct _SERVER_INFO_1536 +{ + int sv1536_enableoplocks; +} SERVER_INFO_1536, *PSERVER_INFO_1536, *LPSERVER_INFO_1536; + +typedef struct _SERVER_INFO_1538 +{ + int sv1538_enablefcbopens; +} SERVER_INFO_1538, *PSERVER_INFO_1538, *LPSERVER_INFO_1538; + +typedef struct _SERVER_INFO_1539 +{ + int sv1539_enableraw; +} SERVER_INFO_1539, *PSERVER_INFO_1539, *LPSERVER_INFO_1539; + +typedef struct _SERVER_INFO_1540 +{ + int sv1540_enablesharednetdrives; +} SERVER_INFO_1540, *PSERVER_INFO_1540, *LPSERVER_INFO_1540; + +typedef struct _SERVER_INFO_1541 +{ + int sv1541_minfreeconnections; +} SERVER_INFO_1541, *PSERVER_INFO_1541, *LPSERVER_INFO_1541; + +typedef struct _SERVER_INFO_1542 +{ + int sv1542_maxfreeconnections; +} SERVER_INFO_1542, *PSERVER_INFO_1542, *LPSERVER_INFO_1542; + +typedef struct _SERVER_INFO_1543 +{ + DWORD sv1543_initsesstable; +} SERVER_INFO_1543, *PSERVER_INFO_1543, *LPSERVER_INFO_1543; + +typedef struct _SERVER_INFO_1544 +{ + DWORD sv1544_initconntable; +} SERVER_INFO_1544, *PSERVER_INFO_1544, *LPSERVER_INFO_1544; + +typedef struct _SERVER_INFO_1545 +{ + DWORD sv1545_initfiletable; +} SERVER_INFO_1545, *PSERVER_INFO_1545, *LPSERVER_INFO_1545; + +typedef struct _SERVER_INFO_1546 +{ + DWORD sv1546_initsearchtable; +} SERVER_INFO_1546, *PSERVER_INFO_1546, *LPSERVER_INFO_1546; + +typedef struct _SERVER_INFO_1547 +{ + DWORD sv1547_alertschedule; +} SERVER_INFO_1547, *PSERVER_INFO_1547, *LPSERVER_INFO_1547; + +typedef struct _SERVER_INFO_1548 +{ + DWORD sv1548_errorthreshold; +} SERVER_INFO_1548, *PSERVER_INFO_1548, *LPSERVER_INFO_1548; + +typedef struct _SERVER_INFO_1549 +{ + DWORD sv1549_networkerrorthreshold; +} SERVER_INFO_1549, *PSERVER_INFO_1549, *LPSERVER_INFO_1549; + +typedef struct _SERVER_INFO_1550 +{ + DWORD sv1550_diskspacethreshold; +} SERVER_INFO_1550, *PSERVER_INFO_1550, *LPSERVER_INFO_1550; + +typedef struct _SERVER_INFO_1552 +{ + DWORD sv1552_maxlinkdelay; +} SERVER_INFO_1552, *PSERVER_INFO_1552, *LPSERVER_INFO_1552; + +typedef struct _SERVER_INFO_1553 +{ + DWORD sv1553_minlinkthroughput; +} SERVER_INFO_1553, *PSERVER_INFO_1553, *LPSERVER_INFO_1553; + +typedef struct _SERVER_INFO_1554 +{ + DWORD sv1554_linkinfovalidtime; +} SERVER_INFO_1554, *PSERVER_INFO_1554, *LPSERVER_INFO_1554; + +typedef struct _SERVER_INFO_1555 +{ + DWORD sv1555_scavqosinfoupdatetime; +} SERVER_INFO_1555, *PSERVER_INFO_1555, *LPSERVER_INFO_1555; + +typedef struct _SERVER_INFO_1556 +{ + DWORD sv1556_maxworkitemidletime; +} SERVER_INFO_1556, *PSERVER_INFO_1556, *LPSERVER_INFO_1556; + +typedef [switch_type(unsigned long)] union _SERVER_INFO +{ + [case(100)] LPSERVER_INFO_100 ServerInfo100; + [case(101)] LPSERVER_INFO_101 ServerInfo101; + [case(102)] LPSERVER_INFO_102 ServerInfo102; + [case(103)] LPSERVER_INFO_103 ServerInfo103; + [case(502)] LPSERVER_INFO_502 ServerInfo502; + [case(503)] LPSERVER_INFO_503 ServerInfo503; + [case(599)] LPSERVER_INFO_599 ServerInfo599; + [case(1005)] LPSERVER_INFO_1005 ServerInfo1005; + [case(1107)] LPSERVER_INFO_1107 ServerInfo1107; + [case(1010)] LPSERVER_INFO_1010 ServerInfo1010; + [case(1016)] LPSERVER_INFO_1016 ServerInfo1016; + [case(1017)] LPSERVER_INFO_1017 ServerInfo1017; + [case(1018)] LPSERVER_INFO_1018 ServerInfo1018; + [case(1501)] LPSERVER_INFO_1501 ServerInfo1501; + [case(1502)] LPSERVER_INFO_1502 ServerInfo1502; + [case(1503)] LPSERVER_INFO_1503 ServerInfo1503; + [case(1506)] LPSERVER_INFO_1506 ServerInfo1506; + [case(1510)] LPSERVER_INFO_1510 ServerInfo1510; + [case(1511)] LPSERVER_INFO_1511 ServerInfo1511; + [case(1512)] LPSERVER_INFO_1512 ServerInfo1512; + [case(1513)] LPSERVER_INFO_1513 ServerInfo1513; + [case(1514)] LPSERVER_INFO_1514 ServerInfo1514; + [case(1515)] LPSERVER_INFO_1515 ServerInfo1515; + [case(1516)] LPSERVER_INFO_1516 ServerInfo1516; + [case(1518)] LPSERVER_INFO_1518 ServerInfo1518; + [case(1523)] LPSERVER_INFO_1523 ServerInfo1523; + [case(1528)] LPSERVER_INFO_1528 ServerInfo1528; + [case(1529)] LPSERVER_INFO_1529 ServerInfo1529; + [case(1530)] LPSERVER_INFO_1530 ServerInfo1530; + [case(1533)] LPSERVER_INFO_1533 ServerInfo1533; + [case(1534)] LPSERVER_INFO_1534 ServerInfo1534; + [case(1535)] LPSERVER_INFO_1535 ServerInfo1535; + [case(1536)] LPSERVER_INFO_1536 ServerInfo1536; + [case(1538)] LPSERVER_INFO_1538 ServerInfo1538; + [case(1539)] LPSERVER_INFO_1539 ServerInfo1539; + [case(1540)] LPSERVER_INFO_1540 ServerInfo1540; + [case(1541)] LPSERVER_INFO_1541 ServerInfo1541; + [case(1542)] LPSERVER_INFO_1542 ServerInfo1542; + [case(1543)] LPSERVER_INFO_1543 ServerInfo1543; + [case(1544)] LPSERVER_INFO_1544 ServerInfo1544; + [case(1545)] LPSERVER_INFO_1545 ServerInfo1545; + [case(1546)] LPSERVER_INFO_1546 ServerInfo1546; + [case(1547)] LPSERVER_INFO_1547 ServerInfo1547; + [case(1548)] LPSERVER_INFO_1548 ServerInfo1548; + [case(1549)] LPSERVER_INFO_1549 ServerInfo1549; + [case(1550)] LPSERVER_INFO_1550 ServerInfo1550; + [case(1552)] LPSERVER_INFO_1552 ServerInfo1552; + [case(1553)] LPSERVER_INFO_1553 ServerInfo1553; + [case(1554)] LPSERVER_INFO_1554 ServerInfo1554; + [case(1555)] LPSERVER_INFO_1555 ServerInfo1555; + [case(1556)] LPSERVER_INFO_1556 ServerInfo1556; +} SERVER_INFO, *PSERVER_INFO, *LPSERVER_INFO; + +typedef struct _DISK_INFO +{ + [string] WCHAR Disk[3]; +} DISK_INFO, *PDISK_INFO, *LPDISK_INFO; + +typedef struct _DISK_ENUM_CONTAINER +{ + DWORD EntriesRead; + [size_is(EntriesRead), length_is(EntriesRead)] LPDISK_INFO Buffer; +} DISK_ENUM_CONTAINER; + +typedef struct _SERVER_TRANSPORT_INFO_0 +{ + DWORD svti0_numberofvcs; + [string] wchar_t *svti0_transportname; + [size_is(svti0_transportaddresslength)] unsigned char *svti0_transportaddress; + DWORD svti0_transportaddresslength; + [string] wchar_t *svti0_networkaddress; +} SERVER_TRANSPORT_INFO_0, *PSERVER_TRANSPORT_INFO_0, *LPSERVER_TRANSPORT_INFO_0; + +typedef struct _SERVER_XPORT_INFO_0_CONTAINER +{ + DWORD EntriesRead; + [size_is(EntriesRead)] LPSERVER_TRANSPORT_INFO_0 Buffer; +} SERVER_XPORT_INFO_0_CONTAINER, *PSERVER_XPORT_INFO_0_CONTAINER; + +typedef struct _SERVER_TRANSPORT_INFO_1 +{ + DWORD svti1_numberofvcs; + [string] wchar_t *svti1_transportname; + [size_is(svti1_transportaddresslength)] unsigned char *svti1_transportaddress; + DWORD svti1_transportaddresslength; + [string] wchar_t *svti1_networkaddress; + [string] wchar_t *svti1_domain; +} SERVER_TRANSPORT_INFO_1, *PSERVER_TRANSPORT_INFO_1, *LPSERVER_TRANSPORT_INFO_1; + +typedef struct _SERVER_XPORT_INFO_1_CONTAINER +{ + DWORD EntriesRead; + [size_is(EntriesRead)] LPSERVER_TRANSPORT_INFO_1 Buffer; +} SERVER_XPORT_INFO_1_CONTAINER, *PSERVER_XPORT_INFO_1_CONTAINER; + +typedef struct _SERVER_TRANSPORT_INFO_2 +{ + DWORD svti2_numberofvcs; + [string] wchar_t *svti2_transportname; + [size_is(svti2_transportaddresslength)] unsigned char *svti2_transportaddress; + DWORD svti2_transportaddresslength; + [string] wchar_t *svti2_networkaddress; + [string] wchar_t *svti2_domain; + unsigned long svti2_flags; +} SERVER_TRANSPORT_INFO_2, *PSERVER_TRANSPORT_INFO_2, *LPSERVER_TRANSPORT_INFO_2; + +typedef struct _SERVER_XPORT_INFO_2_CONTAINER +{ + DWORD EntriesRead; + [size_is(EntriesRead)] LPSERVER_TRANSPORT_INFO_2 Buffer; +} SERVER_XPORT_INFO_2_CONTAINER, *PSERVER_XPORT_INFO_2_CONTAINER; + +typedef struct _SERVER_TRANSPORT_INFO_3 +{ + DWORD svti3_numberofvcs; + [string] wchar_t *svti3_transportname; + [size_is(svti3_transportaddresslength)] unsigned char *svti3_transportaddress; + DWORD svti3_transportaddresslength; + [string] wchar_t *svti3_networkaddress; + [string] wchar_t *svti3_domain; + unsigned long svti3_flags; + DWORD svti3_passwordlength; + unsigned char svti3_password[256]; +} SERVER_TRANSPORT_INFO_3, *PSERVER_TRANSPORT_INFO_3, *LPSERVER_TRANSPORT_INFO_3; + +typedef struct _SERVER_XPORT_INFO_3_CONTAINER +{ + DWORD EntriesRead; + [size_is(EntriesRead)] LPSERVER_TRANSPORT_INFO_3 Buffer; +} SERVER_XPORT_INFO_3_CONTAINER, *PSERVER_XPORT_INFO_3_CONTAINER; + +typedef [switch_type(unsigned long)] union _TRANSPORT_INFO +{ + [case(0)] SERVER_TRANSPORT_INFO_0 Transport0; + [case(1)] SERVER_TRANSPORT_INFO_1 Transport1; + [case(2)] SERVER_TRANSPORT_INFO_2 Transport2; + [case(3)] SERVER_TRANSPORT_INFO_3 Transport3; +} TRANSPORT_INFO, *PTRANSPORT_INFO, *LPTRANSPORT_INFO; + +typedef [switch_type(DWORD)] union _SERVER_XPORT_ENUM_UNION +{ + [case(0)] PSERVER_XPORT_INFO_0_CONTAINER Level0; + [case(1)] PSERVER_XPORT_INFO_1_CONTAINER Level1; + [case(2)] PSERVER_XPORT_INFO_2_CONTAINER Level2; + [case(3)] PSERVER_XPORT_INFO_3_CONTAINER Level3; +} SERVER_XPORT_ENUM_UNION; + +typedef struct _SERVER_XPORT_ENUM_STRUCT +{ + DWORD Level; + [switch_is(Level)] SERVER_XPORT_ENUM_UNION XportInfo; +} SERVER_XPORT_ENUM_STRUCT, *PSERVER_XPORT_ENUM_STRUCT, *LPSERVER_XPORT_ENUM_STRUCT; + +typedef [context_handle] void *SHARE_DEL_HANDLE; +typedef SHARE_DEL_HANDLE *PSHARE_DEL_HANDLE; + +typedef struct _ADT_SECURITY_DESCRIPTOR +{ + DWORD Length; + [size_is(Length)] unsigned char *Buffer; +} ADT_SECURITY_DESCRIPTOR, *PADT_SECURITY_DESCRIPTOR; + +typedef struct _STAT_SERVER_0 +{ + DWORD sts0_start; + DWORD sts0_fopens; + DWORD sts0_devopens; + DWORD sts0_jobsqueued; + DWORD sts0_sopens; + DWORD sts0_stimedout; + DWORD sts0_serrorout; + DWORD sts0_pwerrors; + DWORD sts0_permerrors; + DWORD sts0_syserrors; + DWORD sts0_bytessent_low; + DWORD sts0_bytessent_high; + DWORD sts0_bytesrcvd_low; + DWORD sts0_bytesrcvd_high; + DWORD sts0_avresponse; + DWORD sts0_reqbufneed; + DWORD sts0_bigbufneed; +} STAT_SERVER_0, *PSTAT_SERVER_0, *LPSTAT_SERVER_0; + +typedef struct _TIME_OF_DAY_INFO +{ + DWORD tod_elapsedt; + DWORD tod_msecs; + DWORD tod_hours; + DWORD tod_mins; + DWORD tod_secs; + DWORD tod_hunds; + long tod_timezone; + DWORD tod_tinterval; + DWORD tod_day; + DWORD tod_month; + DWORD tod_year; + DWORD tod_weekday; +} TIME_OF_DAY_INFO, *PTIME_OF_DAY_INFO, *LPTIME_OF_DAY_INFO; + +typedef struct _NET_DFS_ENTRY_ID +{ + GUID Uid; + [string] WCHAR *Prefix; +} NET_DFS_ENTRY_ID, *LPNET_DFS_ENTRY_ID; + +typedef struct _NET_DFS_ENTRY_ID_CONTAINER +{ + unsigned long Count; + [size_is(Count)] LPNET_DFS_ENTRY_ID Buffer; +} NET_DFS_ENTRY_ID_CONTAINER, *LPNET_DFS_ENTRY_ID_CONTAINER; + +typedef struct _DFS_SITENAME_INFO +{ + unsigned long SiteFlags; + [string,unique] WCHAR *SiteName; +} DFS_SITENAME_INFO, *PDFS_SITENAME_INFO, *LPDFS_SITENAME_INFO; + +typedef struct _DFS_SITELIST_INFO +{ + unsigned long cSites; + [size_is(cSites)] DFS_SITENAME_INFO Site[]; +} DFS_SITELIST_INFO, *PDFS_SITELIST_INFO, *LPDFS_SITELIST_INFO; + +typedef struct _SERVER_ALIAS_INFO_0 +{ + [string] LMSTR srvai0_alias; + [string] LMSTR srvai0_target; + BOOLEAN srvai0_default; + ULONG srvai0_reserved; +}SERVER_ALIAS_INFO_0, *PSERVER_ALIAS_INFO_0, *LPSERVER_ALIAS_INFO_0; + +typedef struct _SERVER_ALIAS_INFO_0_CONTAINER +{ + DWORD EntriesRead; + [size_is(EntriesRead)] LPSERVER_ALIAS_INFO_0 Buffer; +} SERVER_ALIAS_INFO_0_CONTAINER; + +typedef struct _SERVER_ALIAS_ENUM_STRUCT +{ + DWORD Level; + [switch_is(Level)] union SERVER_ALIAS_ENUM_UNION + { + [case(0)] SERVER_ALIAS_INFO_0_CONTAINER *Level0; + } ServerAliasInfo; +} SERVER_ALIAS_ENUM_STRUCT, *PSERVER_ALIAS_ENUM_STRUCT, *LPSERVER_ALIAS_ENUM_STRUCT; + +typedef [switch_type(unsigned long)] union _SERVER_ALIAS_INFO +{ + [case(0)] LPSERVER_ALIAS_INFO_0 ServerAliasInfo0; +} SERVER_ALIAS_INFO, *PSERVER_ALIAS_INFO, *LPSERVER_ALIAS_INFO; + + +[ + uuid(4B324FC8-1670-01D3-1278-5A47BF6EE188), + version(3.0), +// ms_union, + pointer_default(unique), + endpoint("ncacn_np:[\\pipe\\srvsvc]") +#ifndef __midl + ,implicit_handle(handle_t hBinding) +#endif +] +interface srvsvc +{ + // This method not used on the wire + void + __stdcall + Opnum0NotUsedOnWire(void); + + // This method not used on the wire + void + __stdcall + Opnum1NotUsedOnWire(void); + + // This method not used on the wire + void + __stdcall + Opnum2NotUsedOnWire(void); + + // This method not used on the wire + void + __stdcall + Opnum3NotUsedOnWire(void); + + // This method not used on the wire + void + __stdcall + Opnum4NotUsedOnWire(void); + + // This method not used on the wire + void + __stdcall + Opnum5NotUsedOnWire(void); + + // This method not used on the wire + void + __stdcall + Opnum6NotUsedOnWire(void); + + // This method not used on the wire + void + __stdcall + Opnum7NotUsedOnWire(void); + + NET_API_STATUS + __stdcall + NetrConnectionEnum( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, string, unique] WCHAR *Qualifier, + [in, out] LPCONNECT_ENUM_STRUCT InfoStruct, + [in] DWORD PreferedMaximumLength, + [out] DWORD *TotalEntries, + [in, out, unique] DWORD *ResumeHandle); + + NET_API_STATUS + __stdcall + NetrFileEnum( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, string, unique] WCHAR *BasePath, + [in, string, unique] WCHAR *UserName, + [in, out] PFILE_ENUM_STRUCT InfoStruct, + [in] DWORD PreferedMaximumLength, + [out] DWORD *TotalEntries, + [in, out, unique] DWORD *ResumeHandle); + + NET_API_STATUS + __stdcall + NetrFileGetInfo( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in] DWORD FileId, + [in] DWORD Level, + [out, switch_is(Level)] LPFILE_INFO InfoStruct); + + NET_API_STATUS + __stdcall + NetrFileClose( + [in,string,unique] SRVSVC_HANDLE ServerName, + [in] DWORD FileId); + + NET_API_STATUS + __stdcall + NetrSessionEnum( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, string, unique] WCHAR *ClientName, + [in, string, unique] WCHAR *UserName, + [in, out] PSESSION_ENUM_STRUCT InfoStruct, + [in] DWORD PreferedMaximumLength, + [out] DWORD *TotalEntries, + [in, out, unique] DWORD *ResumeHandle); + + NET_API_STATUS + __stdcall + NetrSessionDel( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, string, unique] WCHAR *ClientName, + [in, string, unique] WCHAR *UserName); + + NET_API_STATUS + __stdcall + NetrShareAdd( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in] DWORD Level, + [in, switch_is(Level)] LPSHARE_INFO InfoStruct, + [in, out, unique] DWORD *ParmErr); + + NET_API_STATUS + __stdcall + NetrShareEnum( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, out] LPSHARE_ENUM_STRUCT InfoStruct, + [in] DWORD PreferedMaximumLength, + [out] DWORD *TotalEntries, + [in, out, unique] DWORD *ResumeHandle); + + NET_API_STATUS + __stdcall + NetrShareGetInfo( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, string] WCHAR *NetName, + [in] DWORD Level, + [out, switch_is(Level)] LPSHARE_INFO InfoStruct); + + NET_API_STATUS + __stdcall + NetrShareSetInfo( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, string] WCHAR *NetName, + [in] DWORD Level, + [in, switch_is(Level)] LPSHARE_INFO ShareInfo, + [in, out, unique] DWORD *ParmErr); + + NET_API_STATUS + __stdcall + NetrShareDel ( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, string] WCHAR *NetName, + [in] DWORD Reserved); + + NET_API_STATUS + __stdcall + NetrShareDelSticky( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, string] WCHAR *NetName, + [in] DWORD Reserved); + + NET_API_STATUS + __stdcall + NetrShareCheck( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, string] WCHAR *Device, + [out] DWORD *Type); + + NET_API_STATUS + __stdcall + NetrServerGetInfo( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in] DWORD Level, + [out, switch_is(Level)] LPSERVER_INFO InfoStruct); + + NET_API_STATUS + __stdcall + NetrServerSetInfo( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in] DWORD Level, + [in, switch_is(Level)] LPSERVER_INFO ServerInfo, + [in, out, unique] DWORD *ParmErr); + + NET_API_STATUS + __stdcall + NetrServerDiskEnum( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in] DWORD Level, + [in, out] DISK_ENUM_CONTAINER *DiskInfoStruct, + [in] DWORD PreferedMaximumLength, + [out] DWORD *TotalEntries, + [in, out, unique] DWORD *ResumeHandle); + + NET_API_STATUS + __stdcall + NetrServerStatisticsGet( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, string, unique] WCHAR *Service, + [in] DWORD Level, + [in] DWORD Options, + [out] LPSTAT_SERVER_0 *InfoStruct); + + NET_API_STATUS + __stdcall + NetrServerTransportAdd( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in] DWORD Level, + [in] LPSERVER_TRANSPORT_INFO_0 Buffer); + + NET_API_STATUS + __stdcall + NetrServerTransportEnum( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, out] LPSERVER_XPORT_ENUM_STRUCT InfoStruct, + [in] DWORD PreferedMaximumLength, + [out] DWORD *TotalEntries, + [in, out, unique] DWORD *ResumeHandle); + + NET_API_STATUS + __stdcall + NetrServerTransportDel( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in] DWORD Level, + [in] LPSERVER_TRANSPORT_INFO_0 Buffer); + + NET_API_STATUS + __stdcall + NetrRemoteTOD( + [in, string, unique] SRVSVC_HANDLE ServerName, + [out] LPTIME_OF_DAY_INFO *BufferPtr); + + // This method not used on the wire + void + __stdcall + Opnum29NotUsedOnWire(void); + + NET_API_STATUS + __stdcall + NetprPathType( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, string] WCHAR *PathName, + [out] DWORD *PathType, + [in] DWORD Flags); + + NET_API_STATUS + __stdcall + NetprPathCanonicalize( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, string] WCHAR *PathName, + [out, size_is(OutbufLen)] unsigned char *Outbuf, + [in, range(0, 64000)] DWORD OutbufLen, + [in, string] WCHAR *Prefix, + [in, out] DWORD *PathType, + [in] DWORD Flags); + + long + __stdcall + NetprPathCompare( + [in, string,unique] SRVSVC_HANDLE ServerName, + [in, string] WCHAR *PathName1, + [in, string] WCHAR *PathName2, + [in] DWORD PathType, + [in] DWORD Flags); + + NET_API_STATUS + __stdcall + NetprNameValidate( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, string] WCHAR *Name, + [in] DWORD NameType, + [in] DWORD Flags); + + NET_API_STATUS + __stdcall + NetprNameCanonicalize( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, string] WCHAR *Name, + [out, size_is(OutbufLen)] WCHAR *Outbuf, + [in, range(0, 64000)] DWORD OutbufLen, + [in] DWORD NameType, + [in] DWORD Flags); + + long + __stdcall + NetprNameCompare( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, string] WCHAR *Name1, + [in, string] WCHAR *Name2, + [in] DWORD NameType, + [in] DWORD Flags); + + NET_API_STATUS + __stdcall + NetrShareEnumSticky( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, out] LPSHARE_ENUM_STRUCT InfoStruct, + [in] DWORD PreferedMaximumLength, + [out] DWORD *TotalEntries, + [in, out, unique] DWORD *ResumeHandle); + + NET_API_STATUS + __stdcall + NetrShareDelStart( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, string] WCHAR *NetName, + [in] DWORD Reserved, + [out] PSHARE_DEL_HANDLE ContextHandle); + + NET_API_STATUS + __stdcall + NetrShareDelCommit( + [in, out] PSHARE_DEL_HANDLE ContextHandle); + + DWORD + __stdcall + NetrpGetFileSecurity( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, string, unique] WCHAR *ShareName, + [in, string] WCHAR *lpFileName, + [in] SECURITY_INFORMATION RequestedInformation, + [out] PADT_SECURITY_DESCRIPTOR *SecurityDescriptor); + + DWORD + __stdcall + NetrpSetFileSecurity( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, string, unique] WCHAR *ShareName, + [in, string] WCHAR *lpFileName, + [in] SECURITY_INFORMATION SecurityInformation, + [in] PADT_SECURITY_DESCRIPTOR SecurityDescriptor); + + NET_API_STATUS + __stdcall + NetrServerTransportAddEx( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in] DWORD Level, + [in, switch_is(Level)] LPTRANSPORT_INFO Buffer); + + // This method not used on the wire + void + __stdcall + Opnum42NotUsedOnWire(void); + + NET_API_STATUS + __stdcall + NetrDfsGetVersion( + [in, string, unique] SRVSVC_HANDLE ServerName, + [out] DWORD *Version); + + NET_API_STATUS + __stdcall + NetrDfsCreateLocalPartition( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, string] WCHAR *ShareName, + [in] GUID *EntryUid, + [in, string] WCHAR *EntryPrefix, + [in, string] WCHAR *ShortName, + [in] LPNET_DFS_ENTRY_ID_CONTAINER RelationInfo, + [in] int Force); + + NET_API_STATUS + __stdcall + NetrDfsDeleteLocalPartition( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in] GUID *Uid, + [in, string] WCHAR *Prefix); + + NET_API_STATUS + __stdcall + NetrDfsSetLocalVolumeState( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in] GUID *Uid, + [in, string] WCHAR *Prefix, + [in] unsigned long State); + + // This method not used on the wire + void + __stdcall + Opnum47NotUsedOnWire(void); + + NET_API_STATUS + __stdcall + NetrDfsCreateExitPoint( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in] GUID *Uid, + [in, string] WCHAR *Prefix, + [in] unsigned long Type, + [in, range(0,32) ] DWORD ShortPrefixLen, + [out, size_is(ShortPrefixLen)] WCHAR *ShortPrefix); + + NET_API_STATUS + __stdcall + NetrDfsDeleteExitPoint( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in] GUID *Uid, + [in, string] WCHAR *Prefix, + [in] unsigned long Type); + + NET_API_STATUS + __stdcall + NetrDfsModifyPrefix( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in] GUID *Uid, + [in, string] WCHAR *Prefix); + + NET_API_STATUS + __stdcall + NetrDfsFixLocalVolume( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, string] WCHAR *VolumeName, + [in] unsigned long EntryType, + [in] unsigned long ServiceType, + [in, string] WCHAR *StgId, + [in] GUID *EntryUid, + [in, string] WCHAR *EntryPrefix, + [in] LPNET_DFS_ENTRY_ID_CONTAINER RelationInfo, + [in] unsigned long CreateDisposition); + + NET_API_STATUS + __stdcall + NetrDfsManagerReportSiteInfo( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in, out, unique] LPDFS_SITELIST_INFO *ppSiteInfo); + + NET_API_STATUS + __stdcall + NetrServerTransportDelEx( + [in, string, unique] SRVSVC_HANDLE ServerName, + [in] DWORD Level, + [in, switch_is(Level)] LPTRANSPORT_INFO Buffer); +} \ No newline at end of file