ReactOS 0.4.16-dev-1106-g00b5dc8
service.c File Reference
#include "lsasrv.h"
#include <winsvc.h>
#include <winsvc_undoc.h>
Include dependency graph for service.c:

Go to the source code of this file.

Typedefs

typedef VOID(WINAPIPNETLOGONMAIN) (INT ArgCount, PWSTR *ArgVector)
 

Functions

static VOID WINAPI NetlogonServiceMain (DWORD dwArgc, PWSTR *pszArgv)
 
static VOID WINAPI SamSsServiceMain (DWORD dwArgc, PWSTR *pszArgv)
 
static VOID WINAPI NetlogonServiceMain (_In_ DWORD dwArgc, _In_ PWSTR *pszArgv)
 
static VOID WINAPI SamSsControlHandler (_In_ DWORD fdwControl)
 
static VOID WINAPI SamSsServiceMain (_In_ DWORD dwArgc, _In_ PWSTR *pszArgv)
 
static DWORD WINAPI DispatcherThread (_In_ PVOID pParameter)
 
NTSTATUS WINAPI ServiceInit (VOID)
 

Variables

SERVICE_TABLE_ENTRYW ServiceTable []
 

Typedef Documentation

◆ PNETLOGONMAIN

typedef VOID(WINAPI * PNETLOGONMAIN) (INT ArgCount, PWSTR *ArgVector)

Definition at line 15 of file service.c.

Function Documentation

◆ DispatcherThread()

static DWORD WINAPI DispatcherThread ( _In_ PVOID  pParameter)
static

Definition at line 111 of file service.c.

113{
115 DWORD dwError;
116
117 TRACE("DispatcherThread(%p)\n", pParameter);
118
119 /* Create or open the SECURITY_SERVICES_STARTED event */
121 TRUE,
122 FALSE,
123 L"SECURITY_SERVICES_STARTED");
124 if (hEvent == NULL)
125 {
126 dwError = GetLastError();
127 if (dwError != ERROR_ALREADY_EXISTS)
128 return dwError;
129
131 FALSE,
132 L"SECURITY_SERVICES_STARTED");
133 if (hEvent == NULL)
134 return GetLastError();
135 }
136
137 /* Wait for the SECURITY_SERVICES_STARTED event to be signaled */
138 TRACE("Waiting for the SECURITY_SERVICES_STARTED event!\n");
140 TRACE("WaitForSingleObject returned %lu\n", dwError);
141
142 /* Close the event handle */
144
145 /* Fail, if the event was not signaled */
146 if (dwError != WAIT_OBJECT_0)
147 {
148 ERR("Wait failed!\n");
149 return dwError;
150 }
151
152 /* This is the security process */
154
155 /* Start the services */
156 TRACE("Start the security services!\n");
158 return GetLastError();
159
160 TRACE("Done!\n");
161
162 return ERROR_SUCCESS;
163}
#define ERR(fmt,...)
Definition: precomp.h:57
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define CloseHandle
Definition: compat.h:739
SERVICE_TABLE_ENTRYW ServiceTable[]
Definition: service.c:20
#define INFINITE
Definition: serial.h:102
unsigned long DWORD
Definition: ntddk_ex.h:95
#define ERROR_ALREADY_EXISTS
Definition: disk.h:80
static HANDLE hEvent
Definition: comm.c:54
#define SYNCHRONIZE
Definition: nt_native.h:61
#define L(x)
Definition: ntvdm.h:50
VOID WINAPI I_ScIsSecurityProcess(VOID)
Definition: sctrl.c:853
BOOL WINAPI StartServiceCtrlDispatcherW(const SERVICE_TABLE_ENTRYW *lpServiceStartTable)
Definition: sctrl.c:1134
#define TRACE(s)
Definition: solgame.cpp:4
HANDLE WINAPI DECLSPEC_HOTPATCH OpenEventW(IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN LPCWSTR lpName)
Definition: synch.c:682
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
Definition: synch.c:651
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define WAIT_OBJECT_0
Definition: winbase.h:432

Referenced by ServiceInit().

◆ NetlogonServiceMain() [1/2]

static VOID WINAPI NetlogonServiceMain ( _In_ DWORD  dwArgc,
_In_ PWSTR pszArgv 
)
static

Definition at line 33 of file service.c.

36{
37 HINSTANCE hNetlogon = NULL;
38 PNETLOGONMAIN pNetlogonMain = NULL;
39
40 TRACE("NetlogonServiceMain(%lu %p)\n", dwArgc, pszArgv);
41
42 hNetlogon = LoadLibraryW(L"Netlogon.dll");
43 if (hNetlogon == NULL)
44 {
45 ERR("LoadLibrary() failed!\n");
46 return;
47 }
48
49 pNetlogonMain = (PNETLOGONMAIN)GetProcAddress(hNetlogon, "NlNetlogonMain");
50 if (pNetlogonMain == NULL)
51 {
52 ERR("GetProcAddress(NlNetlogonMain) failed!\n");
53 FreeLibrary(hNetlogon);
54 return;
55 }
56
57 TRACE("NlNetlogonMain %p\n", pNetlogonMain);
58
59 pNetlogonMain(dwArgc, pszArgv);
60}
#define GetProcAddress(x, y)
Definition: compat.h:753
#define FreeLibrary(x)
Definition: compat.h:748
#define LoadLibraryW(x)
Definition: compat.h:747
VOID(WINAPI * PNETLOGONMAIN)(INT ArgCount, PWSTR *ArgVector)
Definition: service.c:15

◆ NetlogonServiceMain() [2/2]

static VOID WINAPI NetlogonServiceMain ( DWORD  dwArgc,
PWSTR pszArgv 
)
static

◆ SamSsControlHandler()

static VOID WINAPI SamSsControlHandler ( _In_ DWORD  fdwControl)
static

Definition at line 66 of file service.c.

68{
69 TRACE("SamSsControlHandler(%lu)\n", fdwControl);
70}

Referenced by SamSsServiceMain().

◆ SamSsServiceMain() [1/2]

static VOID WINAPI SamSsServiceMain ( _In_ DWORD  dwArgc,
_In_ PWSTR pszArgv 
)
static

Definition at line 76 of file service.c.

79{
82
83 TRACE("SamSsServiceMain(%lu %p)\n", dwArgc, pszArgv);
84
87 if (hStatus == NULL)
88 return;
89
97
99
103
105}
static SERVICE_STATUS_HANDLE(WINAPI *pRegisterServiceCtrlHandlerExA)(LPCSTR
static SERVICE_STATUS ServiceStatus
Definition: browser.c:22
static VOID WINAPI SamSsControlHandler(_In_ DWORD fdwControl)
Definition: service.c:66
SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerW(LPCWSTR lpServiceName, LPHANDLER_FUNCTION lpHandlerProc)
Definition: sctrl.c:742
BOOL WINAPI SetServiceStatus(SERVICE_STATUS_HANDLE hServiceStatus, LPSERVICE_STATUS lpServiceStatus)
Definition: sctrl.c:997
DWORD dwServiceType
Definition: winsvc.h:99
DWORD dwWin32ExitCode
Definition: winsvc.h:102
DWORD dwControlsAccepted
Definition: winsvc.h:101
DWORD dwWaitHint
Definition: winsvc.h:105
DWORD dwCurrentState
Definition: winsvc.h:100
DWORD dwCheckPoint
Definition: winsvc.h:104
DWORD dwServiceSpecificExitCode
Definition: winsvc.h:103
SERVICE_STATUS_HANDLE hStatus
Definition: w32time.c:14
#define SERVICE_START_PENDING
Definition: winsvc.h:22
#define SERVICE_RUNNING
Definition: winsvc.h:24
#define SERVICE_WIN32_SHARE_PROCESS
Definition: cmtypes.h:963

◆ SamSsServiceMain() [2/2]

static VOID WINAPI SamSsServiceMain ( DWORD  dwArgc,
PWSTR pszArgv 
)
static

◆ ServiceInit()

NTSTATUS WINAPI ServiceInit ( VOID  )

Definition at line 168 of file service.c.

169{
172
173 TRACE("ServiceInit()\n");
174
176 0,
178 NULL,
179 0,
180 &dwThreadId);
181 if (hThread == NULL)
182 return (NTSTATUS)GetLastError();
183
184 return STATUS_SUCCESS;
185}
LONG NTSTATUS
Definition: precomp.h:26
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:137
static DWORD WINAPI DispatcherThread(_In_ PVOID pParameter)
Definition: service.c:111
DWORD dwThreadId
Definition: fdebug.c:31
HANDLE hThread
Definition: wizard.c:28
#define STATUS_SUCCESS
Definition: shellext.h:65

Variable Documentation

◆ ServiceTable

SERVICE_TABLE_ENTRYW ServiceTable[]
Initial value:
=
{
{L"NETLOGON", NetlogonServiceMain},
{L"SAMSS", SamSsServiceMain},
}
static VOID WINAPI NetlogonServiceMain(DWORD dwArgc, PWSTR *pszArgv)
static VOID WINAPI SamSsServiceMain(DWORD dwArgc, PWSTR *pszArgv)

Definition at line 20 of file service.c.

Referenced by DispatcherThread(), and START_TEST().