146 service_ok(!
r,
"GetMonitorInfo with NULL HMONITOR succeeded.\n");
152 "Unexpected monitor rcMonitor values: {%d,%d,%d,%d}\n",
156 "Unexpected monitor rcWork values: {%d,%d,%d,%d}\n",
160 "Unexpected szDevice received: %s\n",
mi.szDevice);
183 status.dwWin32ExitCode = 0;
184 status.dwServiceSpecificExitCode = 0;
194 status.dwControlsAccepted = 0;
224 service_ok(
buf[0],
"did not find PATHEXT environment variable\n");
234 status.dwWin32ExitCode = 0;
235 status.dwServiceSpecificExitCode = 0;
237 status.dwWaitHint = 10000;
246 status.dwControlsAccepted = 0;
291 status.dwWin32ExitCode = 0;
292 status.dwServiceSpecificExitCode = 0;
302 status.dwControlsAccepted = 0;
329 status.dwWin32ExitCode = 0;
330 status.dwServiceSpecificExitCode = 0;
332 status.dwWaitHint = 10000;
365 trace(
"service_cmd \"%s\"\n", service_cmd);
371 skip(
"Not enough access right to create service\n");
384 trace(
"waiting for %s\n", event_name);
396 ok(!
strcmp(evt, event_name),
"Unexpected event: %s, expected %s\n", evt, event_name);
420 ok(1,
"service: %s",
ptr+3);
422 ok(0,
"service: %s",
ptr+5);
424 trace(
"service event: %s\n",
ptr+6);
431 ok(0,
"malformed service message: %s\n",
ptr);
437 trace(
"pipe disconnected\n");
443 static const char *
argv[2] = {
"param1",
"param2"};
453 trace(
"starting...\n");
468 "status.dwControlsAccepted = %x\n",
status.dwControlsAccepted);
469 ok(
status.dwWin32ExitCode == 0,
"status.dwExitCode = %d\n",
status.dwWin32ExitCode);
470 ok(
status.dwServiceSpecificExitCode == 0,
"status.dwServiceSpecificExitCode = %d\n",
471 status.dwServiceSpecificExitCode);
472 ok(
status.dwCheckPoint == 0,
"status.dwCheckPoint = %d\n",
status.dwCheckPoint);
477 ok(status2.dwCurrentState ==
SERVICE_RUNNING,
"status2.dwCurrentState = %x\n", status2.dwCurrentState);
478 ok(status2.dwProcessId != 0,
"status2.dwProcessId = %d\n", status2.dwProcessId);
505 trace(
"starting...\n");
523 "status.dwControlsAccepted = %x\n",
status.dwControlsAccepted);
524 ok(
status.dwWin32ExitCode == 0,
"status.dwExitCode = %d\n",
status.dwWin32ExitCode);
525 ok(
status.dwServiceSpecificExitCode == 0,
"status.dwServiceSpecificExitCode = %d\n",
526 status.dwServiceSpecificExitCode);
527 ok(
status.dwCheckPoint == 0,
"status.dwCheckPoint = %d\n",
status.dwCheckPoint);
532 ok(status2.dwCurrentState ==
SERVICE_RUNNING,
"status2.dwCurrentState = %x\n", status2.dwCurrentState);
533 ok(status2.dwProcessId != 0,
"status2.dwProcessId = %d\n", status2.dwProcessId);
543 "status.dwCurrentState = %x\n",
status.dwCurrentState);
544 ok(
status.dwControlsAccepted == 0,
"status.dwControlsAccepted = %x\n",
status.dwControlsAccepted);
545 ok(
status.dwWin32ExitCode == 0,
"status.dwExitCode = %d\n",
status.dwWin32ExitCode);
546 ok(
status.dwServiceSpecificExitCode == 0,
"status.dwServiceSpecificExitCode = %d\n",
547 status.dwServiceSpecificExitCode);
548 ok(
status.dwCheckPoint == 0,
"status.dwCheckPoint = %d\n",
status.dwCheckPoint);
549 ok(
status.dwWaitHint == 0,
"status.dwWaitHint = %d\n",
status.dwWaitHint);
553 ok(status2.dwProcessId == 0 ||
broken(status2.dwProcessId != 0),
554 "status2.dwProcessId = %d\n", status2.dwProcessId);
563 "status.dwCurrentState = %x\n",
status.dwCurrentState);
564 ok(
status.dwControlsAccepted == 0,
"status.dwControlsAccepted = %x\n",
status.dwControlsAccepted);
565 ok(
status.dwWin32ExitCode == 0,
"status.dwExitCode = %d\n",
status.dwWin32ExitCode);
566 ok(
status.dwServiceSpecificExitCode == 0,
"status.dwServiceSpecificExitCode = %d\n",
567 status.dwServiceSpecificExitCode);
568 ok(
status.dwCheckPoint == 0,
"status.dwCheckPoint = %d\n",
status.dwCheckPoint);
569 ok(
status.dwWaitHint == 0,
"status.dwWaitHint = %d\n",
status.dwWaitHint);
573 ok(status2.dwProcessId == 0 ||
broken(status2.dwProcessId != 0),
574 "status2.dwProcessId = %d\n", status2.dwProcessId);
579 ok(!
res,
"QueryServiceStatus should have failed\n");
623 if(!pRegisterServiceCtrlHandlerExA) {
624 win_skip(
"RegisterServiceCtrlHandlerExA not available, skipping tests\n");
631 skip(
"OpenSCManager failed, skipping tests\n");
static SC_HANDLE register_service(const char *test_name)
struct _WNDCLASSEXA WNDCLASSEXA
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
#define SERVICE_ERROR_IGNORE
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
_In_ int _Inout_ LPRECT lprc
BOOL WINAPI IsWindow(_In_opt_ HWND)
BOOL WINAPI EnumDisplayMonitors(_In_opt_ HDC, _In_opt_ LPCRECT, _In_ MONITORENUMPROC, _In_ LPARAM)
#define PIPE_TYPE_MESSAGE
ACPI_SIZE strlen(const char *String)
GLdouble GLdouble GLdouble r
static LPHANDLER_FUNCTION_EX
HANDLE WINAPI CreateNamedPipeA(LPCSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD nMaxInstances, DWORD nOutBufferSize, DWORD nInBufferSize, DWORD nDefaultTimeOut, LPSECURITY_ATTRIBUTES lpSecurityAttributes)
static char named_pipe_name[100]
#define ERROR_INVALID_HANDLE
#define SERVICE_ACCEPT_STOP
DWORD WINAPI GetTickCount(VOID)
static void service_event(const char *event)
VOID WINAPI service_main(DWORD dwArgc, LPTSTR *lpszArgv)
static char service_name[100]
#define INVALID_HANDLE_VALUE
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
DWORD WINAPI GetLastError(VOID)
#define NMPWAIT_USE_DEFAULT_WAIT
BOOL WINAPI QueryServiceStatusEx(SC_HANDLE hService, SC_STATUS_TYPE InfoLevel, LPBYTE lpBuffer, DWORD cbBufSize, LPDWORD pcbBytesNeeded)
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
BOOL WINAPI DeleteService(SC_HANDLE hService)
BOOL WINAPI DestroyWindow(_In_ HWND)
SC_HANDLE WINAPI CreateServiceA(SC_HANDLE hSCManager, LPCSTR lpServiceName, LPCSTR lpDisplayName, DWORD dwDesiredAccess, DWORD dwServiceType, DWORD dwStartType, DWORD dwErrorControl, LPCSTR lpBinaryPathName, LPCSTR lpLoadOrderGroup, LPDWORD lpdwTagId, LPCSTR lpDependencies, LPCSTR lpServiceStartName, LPCSTR lpPassword)
BOOL WINAPI StartServiceCtrlDispatcherA(const SERVICE_TABLE_ENTRYA *lpServiceStartTable)
DWORD WINAPI GetModuleFileNameA(HINSTANCE hModule, LPSTR lpFilename, DWORD nSize)
BOOL WINAPI WaitNamedPipeA(LPCSTR lpNamedPipeName, DWORD nTimeOut)
BOOL WINAPI SetServiceStatus(SERVICE_STATUS_HANDLE hServiceStatus, LPSERVICE_STATUS lpServiceStatus)
#define sprintf(buf, format,...)
GLenum GLuint GLenum GLsizei const GLchar * buf
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
static void test_no_stop(void)
static unsigned char bytes[4]
SC_HANDLE WINAPI OpenSCManagerA(LPCSTR lpMachineName, LPCSTR lpDatabaseName, DWORD dwDesiredAccess)
#define ERROR_ACCESS_DENIED
static void test_create_window(void)
#define ERROR_INVALID_MONITOR_HANDLE
DWORD WINAPI GetFileAttributesA(LPCSTR lpFileName)
static UINT WPARAM LPARAM lparam
#define CreateWindowA(a, b, c, d, e, f, g, h, i, j, k)
BOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject)
LONG WINAPI GetWindowLongW(_In_ HWND, _In_ int)
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)
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
HWND WINAPI GetDesktopWindow(void)
static DWORD WINAPI service_handler(DWORD ctrl, DWORD event_type, void *event_data, void *context)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventA(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCSTR lpName OPTIONAL)
#define SERVICE_WIN32_OWN_PROCESS
BOOL WINAPI StartServiceA(SC_HANDLE hService, DWORD dwNumServiceArgs, LPCSTR *lpServiceArgVectors)
static HANDLE service_stop_event
#define SERVICE_ACCEPT_SHUTDOWN
static HANDLE event_handle
static CRITICAL_SECTION event_cs
#define GetEnvironmentVariableA(x, y, z)
static BOOL CALLBACK monitor_enum_proc(HMONITOR hmon, HDC hdc, LPRECT lprc, LPARAM lparam)
int strncmp(const char *String1, const char *String2, ACPI_SIZE Count)
static void WINAPI no_stop_main(DWORD argc, char **argv)
#define ERROR_BROKEN_PIPE
static void test_monitors(void)
static void service_ok(int cnd, const char *msg,...)
BOOL WINAPI QueryServiceStatus(SC_HANDLE hService, LPSERVICE_STATUS lpServiceStatus)
#define INVALID_FILE_ATTRIBUTES
int winetest_get_mainargs(char ***pargv)
static void send_msg(const char *type, const char *msg)
#define FILE_ATTRIBUTE_NORMAL
#define ERROR_PIPE_CONNECTED
BOOL WINAPI DisconnectNamedPipe(HANDLE hNamedPipe)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
ATOM WINAPI RegisterClassExA(_In_ CONST WNDCLASSEXA *)
#define PIPE_READMODE_MESSAGE
static const char * test_name
static void test_winstation(void)
static void service_trace(const char *msg)
static DWORD WINAPI no_stop_handler(DWORD ctrl, DWORD event_type, void *event_data, void *context)
BOOL WINAPI GetMonitorInfoA(_In_ HMONITOR, _Inout_ LPMONITORINFO)
static void expect_event(const char *event_name)
static void service_process(void(WINAPI *p_service_main)(DWORD, char **))
int __cdecl vsprintf(char *_Dest, const char *_Format, va_list _Args)
#define PIPE_ACCESS_INBOUND
#define ReadFile(a, b, c, d, e)
BOOL WINAPI ControlService(SC_HANDLE hService, DWORD dwControl, LPSERVICE_STATUS lpServiceStatus)
HWINSTA WINAPI GetProcessWindowStation(void)
static char current_event[32]
static void test_runner(void(*p_run_test)(void))
char * strcpy(char *DstString, const char *SrcString)
BOOL WINAPI GetUserObjectInformationA(_In_ HANDLE hObj, _In_ int nIndex, _Out_writes_bytes_opt_(nLength) PVOID pvInfo, _In_ DWORD nLength, _Out_opt_ LPDWORD lpnLengthNeeded)
#define WS_OVERLAPPEDWINDOW
int strcmp(const char *String1, const char *String2)
static void test_service(void)
#define GetProcAddress(x, y)
#define SERVICE_CONTROL_STOP
static __ms_va_list valist
static SC_HANDLE scm_handle
static SERVICE_STATUS_HANDLE service_handle
GLuint GLuint GLsizei GLenum type
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
#define CreateFileA(a, b, c, d, e, f, g)
#define SERVICE_DEMAND_START
static SERVICE_STATUS_HANDLE(WINAPI *pRegisterServiceCtrlHandlerExA)(LPCSTR
static SERVICE_STATUS status
static DWORD WINAPI pipe_thread(void *arg)
BOOL WINAPI ConnectNamedPipe(IN HANDLE hNamedPipe, IN LPOVERLAPPED lpOverlapped)
#define SERVICE_STOP_PENDING
_CRTIMP int __cdecl read(_In_ int _FileHandle, _Out_writes_bytes_(_MaxCharCount) void *_DstBuf, _In_ unsigned int _MaxCharCount)
static HANDLE pipe_handle
#define SERVICE_CONTROL_SHUTDOWN