ReactOS  0.4.15-dev-2996-gf777e6b
wkssvc.c File Reference
#include "precomp.h"
Include dependency graph for wkssvc.c:

Go to the source code of this file.

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (wkssvc)
 
static VOID UpdateServiceStatus (DWORD dwState)
 
static DWORD ServiceInit (VOID)
 
static VOID ServiceShutdown (VOID)
 
static DWORD WINAPI ServiceControlHandler (DWORD dwControl, DWORD dwEventType, LPVOID lpEventData, LPVOID lpContext)
 
VOID WINAPI ServiceMain (DWORD argc, LPTSTR *argv)
 
BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
 

Variables

static WCHAR ServiceName [] = L"lanmanworkstation"
 
static SERVICE_STATUS_HANDLE ServiceStatusHandle
 
static SERVICE_STATUS ServiceStatus
 
OSVERSIONINFOW VersionInfo
 
HANDLE LsaHandle = NULL
 
ULONG LsaAuthenticationPackage = 0
 

Function Documentation

◆ DllMain()

BOOL WINAPI DllMain ( HINSTANCE  hinstDLL,
DWORD  fdwReason,
LPVOID  lpvReserved 
)

Definition at line 233 of file wkssvc.c.

236 {
237  switch (fdwReason)
238  {
239  case DLL_PROCESS_ATTACH:
240  DisableThreadLibraryCalls(hinstDLL);
241  break;
242 
243  case DLL_PROCESS_DETACH:
244  break;
245  }
246 
247  return TRUE;
248 }
#define TRUE
Definition: types.h:120
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define DLL_PROCESS_DETACH
Definition: compat.h:130

◆ ServiceControlHandler()

static DWORD WINAPI ServiceControlHandler ( DWORD  dwControl,
DWORD  dwEventType,
LPVOID  lpEventData,
LPVOID  lpContext 
)
static

Definition at line 149 of file wkssvc.c.

153 {
154  TRACE("ServiceControlHandler() called\n");
155 
156  switch (dwControl)
157  {
159  TRACE(" SERVICE_CONTROL_STOP received\n");
161  /* Stop listening to incoming RPC messages */
163  ServiceShutdown();
165  return ERROR_SUCCESS;
166 
168  TRACE(" SERVICE_CONTROL_PAUSE received\n");
170  return ERROR_SUCCESS;
171 
173  TRACE(" SERVICE_CONTROL_CONTINUE received\n");
175  return ERROR_SUCCESS;
176 
178  TRACE(" SERVICE_CONTROL_INTERROGATE received\n");
180  &ServiceStatus);
181  return ERROR_SUCCESS;
182 
184  TRACE(" SERVICE_CONTROL_SHUTDOWN received\n");
186  /* Stop listening to incoming RPC messages */
188  ServiceShutdown();
190  return ERROR_SUCCESS;
191 
192  default :
193  TRACE(" Control %lu received\n", dwControl);
195  }
196 }
RPC_STATUS WINAPI RpcMgmtStopServerListening(RPC_BINDING_HANDLE Binding)
Definition: rpc_server.c:1596
#define ERROR_SUCCESS
Definition: deptool.c:10
#define SERVICE_PAUSED
Definition: winsvc.h:27
static SERVICE_STATUS ServiceStatus
Definition: wkssvc.c:38
BOOL WINAPI SetServiceStatus(SERVICE_STATUS_HANDLE hServiceStatus, LPSERVICE_STATUS lpServiceStatus)
Definition: sctrl.c:997
#define SERVICE_STOPPED
Definition: winsvc.h:21
static VOID ServiceShutdown(VOID)
Definition: wkssvc.c:133
#define SERVICE_RUNNING
Definition: winsvc.h:24
#define SERVICE_CONTROL_INTERROGATE
Definition: winsvc.h:39
#define TRACE(s)
Definition: solgame.cpp:4
#define SERVICE_CONTROL_PAUSE
Definition: winsvc.h:37
static VOID UpdateServiceStatus(DWORD dwState)
Definition: wkssvc.c:47
#define SERVICE_CONTROL_CONTINUE
Definition: winsvc.h:38
#define NULL
Definition: types.h:112
static SERVICE_STATUS_HANDLE ServiceStatusHandle
Definition: wkssvc.c:37
#define ERROR_CALL_NOT_IMPLEMENTED
Definition: compat.h:102
#define SERVICE_CONTROL_STOP
Definition: winsvc.h:36
#define SERVICE_STOP_PENDING
Definition: winsvc.h:23
#define SERVICE_CONTROL_SHUTDOWN
Definition: winsvc.h:40

Referenced by ServiceMain().

◆ ServiceInit()

static DWORD ServiceInit ( VOID  )
static

Definition at line 74 of file wkssvc.c.

75 {
76  LSA_STRING ProcessName = RTL_CONSTANT_STRING("Workstation");
81 
82  ERR("ServiceInit()\n");
83 
84  /* Get the OS version */
87 
88  Status = LsaRegisterLogonProcess(&ProcessName,
89  &LsaHandle,
90  &Mode);
91  if (!NT_SUCCESS(Status))
92  {
93  ERR("LsaRegisterLogonProcess() failed! (Status 0x%08lx)\n", Status);
94  return 1;
95  }
96 
98  &PackageName,
100  if (!NT_SUCCESS(Status))
101  {
102  ERR("LsaLookupAuthenticationPackage() failed! (Status 0x%08lx)\n", Status);
103  return 1;
104  }
105 
107  0,
109  NULL,
110  0,
111  NULL);
112 
113  if (!hThread)
114  {
115  ERR("Can't create PortThread\n");
116  return GetLastError();
117  }
118  else
120 
121  /* Report a running workstation service */
124  TRUE,
125  TRUE);
126 
127  return ERROR_SUCCESS;
128 }
#define SV_TYPE_WORKSTATION
Definition: lmserver.h:427
DWORD(WINAPI * LPTHREAD_START_ROUTINE)(LPVOID)
Definition: winbase.h:723
#define CloseHandle
Definition: compat.h:598
#define MSV1_0_PACKAGE_NAME
Definition: ntsecapi.h:42
DWORD WINAPI RpcThreadRoutine(LPVOID lpParameter)
Definition: rpcserver.c:20
#define ERROR_SUCCESS
Definition: deptool.c:10
_In_ ULONG Mode
Definition: hubbusif.h:303
#define TRUE
Definition: types.h:120
LONG NTSTATUS
Definition: precomp.h:26
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
BOOL WINAPI GetVersionExW(IN LPOSVERSIONINFOW lpVersionInformation)
Definition: version.c:37
ULONG LsaAuthenticationPackage
Definition: wkssvc.c:42
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition: thread.c:136
ULONG LSA_OPERATIONAL_MODE
Definition: ntsecapi.h:367
HANDLE LsaHandle
Definition: wkssvc.c:41
Status
Definition: gdiplustypes.h:24
BOOL WINAPI SetServiceBits(SERVICE_STATUS_HANDLE hServiceStatus, DWORD dwServiceBits, BOOL bSetBitsOn, BOOL bUpdateImmediately)
Definition: sctrl.c:975
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
ULONG dwOSVersionInfoSize
Definition: rtltypes.h:246
#define ERR(fmt,...)
Definition: debug.h:110
NTSTATUS NTAPI LsaLookupAuthenticationPackage(HANDLE, PLSA_STRING, PULONG)
#define NULL
Definition: types.h:112
HANDLE hThread
Definition: wizard.c:28
static SERVICE_STATUS_HANDLE ServiceStatusHandle
Definition: wkssvc.c:37
NTSTATUS NTAPI LsaRegisterLogonProcess(PLSA_STRING, PHANDLE, PLSA_OPERATIONAL_MODE)
OSVERSIONINFOW VersionInfo
Definition: wkssvc.c:40
#define RTL_CONSTANT_STRING(s)
Definition: tunneltest.c:14

Referenced by ServiceMain().

◆ ServiceMain()

VOID WINAPI ServiceMain ( DWORD  argc,
LPTSTR argv 
)

Definition at line 200 of file wkssvc.c.

201 {
202  DWORD dwError;
203 
206 
207  TRACE("ServiceMain() called\n");
208 
211  NULL);
212  if (!ServiceStatusHandle)
213  {
214  ERR("RegisterServiceCtrlHandlerExW() failed! (Error %lu)\n", GetLastError());
215  return;
216  }
217 
219 
220  dwError = ServiceInit();
221  if (dwError != ERROR_SUCCESS)
222  {
223  ERR("Service stopped (dwError: %lu\n", dwError);
225  return;
226  }
227 
229 }
static int argc
Definition: ServiceArgs.c:12
static DWORD WINAPI ServiceControlHandler(DWORD dwControl, DWORD dwEventType, LPVOID lpEventData, LPVOID lpContext)
Definition: wkssvc.c:149
#define ERROR_SUCCESS
Definition: deptool.c:10
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
#define SERVICE_START_PENDING
Definition: winsvc.h:22
#define argv
Definition: mplay32.c:18
static WCHAR ServiceName[]
Definition: wkssvc.c:35
#define SERVICE_STOPPED
Definition: winsvc.h:21
#define SERVICE_RUNNING
Definition: winsvc.h:24
#define TRACE(s)
Definition: solgame.cpp:4
unsigned long DWORD
Definition: ntddk_ex.h:95
SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExW(LPCWSTR lpServiceName, LPHANDLER_FUNCTION_EX lpHandlerProc, LPVOID lpContext)
Definition: sctrl.c:812
#define ERR(fmt,...)
Definition: debug.h:110
static VOID UpdateServiceStatus(DWORD dwState)
Definition: wkssvc.c:47
#define NULL
Definition: types.h:112
static SERVICE_STATUS_HANDLE ServiceStatusHandle
Definition: wkssvc.c:37
static DWORD ServiceInit(VOID)
Definition: wkssvc.c:74

◆ ServiceShutdown()

static VOID ServiceShutdown ( VOID  )
static

Definition at line 133 of file wkssvc.c.

134 {
136 
137  ERR("ServiceShutdown()\n");
138 
140  if (!NT_SUCCESS(Status))
141  {
142  ERR("LsaDeRegisterLogonProcess() failed! (Status 0x%08lx)\n", Status);
143  return;
144  }
145 }
LONG NTSTATUS
Definition: precomp.h:26
HANDLE LsaHandle
Definition: wkssvc.c:41
Status
Definition: gdiplustypes.h:24
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
NTSTATUS NTAPI LsaDeregisterLogonProcess(HANDLE)
#define ERR(fmt,...)
Definition: debug.h:110

Referenced by ServiceControlHandler().

◆ UpdateServiceStatus()

static VOID UpdateServiceStatus ( DWORD  dwState)
static

Definition at line 47 of file wkssvc.c.

48 {
50  ServiceStatus.dwCurrentState = dwState;
55 
56  if (dwState == SERVICE_START_PENDING ||
57  dwState == SERVICE_STOP_PENDING ||
58  dwState == SERVICE_PAUSE_PENDING ||
59  dwState == SERVICE_CONTINUE_PENDING)
60  ServiceStatus.dwWaitHint = 10000;
61  else
63 
64  if (dwState == SERVICE_RUNNING)
66 
68  &ServiceStatus);
69 }
DWORD dwCurrentState
Definition: winsvc.h:100
#define SERVICE_PAUSE_PENDING
Definition: winsvc.h:26
#define SERVICE_ACCEPT_STOP
Definition: winsvc.h:28
#define SERVICE_START_PENDING
Definition: winsvc.h:22
DWORD dwServiceSpecificExitCode
Definition: winsvc.h:103
static SERVICE_STATUS ServiceStatus
Definition: wkssvc.c:38
BOOL WINAPI SetServiceStatus(SERVICE_STATUS_HANDLE hServiceStatus, LPSERVICE_STATUS lpServiceStatus)
Definition: sctrl.c:997
DWORD dwCheckPoint
Definition: winsvc.h:104
#define SERVICE_RUNNING
Definition: winsvc.h:24
#define SERVICE_WIN32_OWN_PROCESS
Definition: cmtypes.h:962
#define SERVICE_ACCEPT_SHUTDOWN
Definition: winsvc.h:30
DWORD dwWaitHint
Definition: winsvc.h:105
DWORD dwWin32ExitCode
Definition: winsvc.h:102
DWORD dwServiceType
Definition: winsvc.h:99
DWORD dwControlsAccepted
Definition: winsvc.h:101
#define SERVICE_CONTINUE_PENDING
Definition: winsvc.h:25
static SERVICE_STATUS_HANDLE ServiceStatusHandle
Definition: wkssvc.c:37
#define SERVICE_STOP_PENDING
Definition: winsvc.h:23

Referenced by ServiceControlHandler(), and ServiceMain().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( wkssvc  )

Variable Documentation

◆ LsaAuthenticationPackage

ULONG LsaAuthenticationPackage = 0

Definition at line 42 of file wkssvc.c.

Referenced by ServiceInit().

◆ LsaHandle

HANDLE LsaHandle = NULL

Definition at line 41 of file wkssvc.c.

Referenced by ServiceInit(), and ServiceShutdown().

◆ ServiceName

WCHAR ServiceName[] = L"lanmanworkstation"
static

Definition at line 35 of file wkssvc.c.

Referenced by ServiceMain().

◆ ServiceStatus

SERVICE_STATUS ServiceStatus
static

Definition at line 38 of file wkssvc.c.

Referenced by ServiceControlHandler(), and UpdateServiceStatus().

◆ ServiceStatusHandle

SERVICE_STATUS_HANDLE ServiceStatusHandle
static

Definition at line 37 of file wkssvc.c.

Referenced by ServiceControlHandler(), ServiceInit(), ServiceMain(), and UpdateServiceStatus().

◆ VersionInfo