schedsvc: Add ATSvc server side stubs.
Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
6af0e50f36
commit
10688c5f91
|
@ -2,7 +2,10 @@ MODULE = schedsvc.dll
|
|||
IMPORTS = rpcrt4 advapi32 ole32
|
||||
|
||||
C_SRCS = \
|
||||
atsvc.c \
|
||||
schedsvc.c \
|
||||
svc_main.c
|
||||
|
||||
IDL_SRCS = schrpc.idl
|
||||
IDL_SRCS = \
|
||||
atsvc.idl \
|
||||
schrpc.idl
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* ATSvc RPC API
|
||||
*
|
||||
* Copyright 2018 Dmitry Timoshkov
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "windef.h"
|
||||
#include "atsvc.h"
|
||||
#include "wine/debug.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(schedsvc);
|
||||
|
||||
DWORD __cdecl NetrJobAdd(ATSVC_HANDLE server_name, AT_INFO *info, DWORD *jobid)
|
||||
{
|
||||
FIXME("%s,%p,%p: stub\n", debugstr_w(server_name), info, jobid);
|
||||
return ERROR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
DWORD __cdecl NetrJobDel(ATSVC_HANDLE server_name, DWORD min_jobid, DWORD max_jobid)
|
||||
{
|
||||
FIXME("%s,%u,%u: stub\n", debugstr_w(server_name), min_jobid, max_jobid);
|
||||
return ERROR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
DWORD __cdecl NetrJobEnum(ATSVC_HANDLE server_name, AT_ENUM_CONTAINER *container,
|
||||
DWORD max_length, DWORD *total, DWORD *resume)
|
||||
{
|
||||
FIXME("%s,%p,%u,%p,%p: stub\n", debugstr_w(server_name), container, max_length, total, resume);
|
||||
return ERROR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
DWORD __cdecl NetrJobGetInfo(ATSVC_HANDLE server_name, DWORD jobid, AT_INFO **info)
|
||||
{
|
||||
FIXME("%s,%u,%p: stub\n", debugstr_w(server_name), jobid, info);
|
||||
return ERROR_NOT_SUPPORTED;
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
/*
|
||||
* Copyright 2018 Dmitry Timoshkov
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#pragma makedep server
|
||||
|
||||
#include "wine/atsvc.idl"
|
|
@ -24,6 +24,7 @@
|
|||
#include "winbase.h"
|
||||
#include "winsvc.h"
|
||||
#include "rpc.h"
|
||||
#include "atsvc.h"
|
||||
#include "schrpc.h"
|
||||
#include "wine/debug.h"
|
||||
|
||||
|
@ -123,22 +124,38 @@ static RPC_BINDING_VECTOR *sched_bindings;
|
|||
|
||||
static RPC_STATUS RPC_init(void)
|
||||
{
|
||||
WCHAR transport[] = SCHEDSVC_TRANSPORT;
|
||||
static WCHAR ncacn_npW[] = { 'n','c','a','c','n','_','n','p',0 };
|
||||
static WCHAR endpoint_npW[] = { '\\','p','i','p','e','\\','a','t','s','v','c',0 };
|
||||
static WCHAR ncalrpcW[] = { 'n','c','a','l','r','p','c',0 };
|
||||
static WCHAR endpoint_lrpcW[] = { 'a','t','s','v','c',0 };
|
||||
RPC_STATUS status;
|
||||
|
||||
TRACE("using %s\n", debugstr_w(transport));
|
||||
status = RpcServerRegisterIf(ITaskSchedulerService_v1_0_s_ifspec, NULL, NULL);
|
||||
if (status != RPC_S_OK)
|
||||
{
|
||||
ERR("RpcServerRegisterIf error %#x\n", status);
|
||||
return status;
|
||||
}
|
||||
|
||||
status = RpcServerUseProtseqEpW(transport, 0, NULL, NULL);
|
||||
status = RpcServerRegisterIf(atsvc_v1_0_s_ifspec, NULL, NULL);
|
||||
if (status != RPC_S_OK)
|
||||
{
|
||||
ERR("RpcServerRegisterIf error %#x\n", status);
|
||||
RpcServerUnregisterIf(ITaskSchedulerService_v1_0_s_ifspec, NULL, FALSE);
|
||||
return status;
|
||||
}
|
||||
|
||||
status = RpcServerUseProtseqEpW(ncacn_npW, RPC_C_PROTSEQ_MAX_REQS_DEFAULT, endpoint_npW, NULL);
|
||||
if (status != RPC_S_OK)
|
||||
{
|
||||
ERR("RpcServerUseProtseqEp error %#x\n", status);
|
||||
return status;
|
||||
}
|
||||
|
||||
status = RpcServerRegisterIf(ITaskSchedulerService_v1_0_s_ifspec, 0, 0);
|
||||
status = RpcServerUseProtseqEpW(ncalrpcW, RPC_C_PROTSEQ_MAX_REQS_DEFAULT, endpoint_lrpcW, NULL);
|
||||
if (status != RPC_S_OK)
|
||||
{
|
||||
ERR("RpcServerRegisterIf error %#x\n", status);
|
||||
ERR("RpcServerUseProtseqEp error %#x\n", status);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -156,6 +173,13 @@ static RPC_STATUS RPC_init(void)
|
|||
return status;
|
||||
}
|
||||
|
||||
status = RpcEpRegisterW(atsvc_v1_0_s_ifspec, sched_bindings, NULL, NULL);
|
||||
if (status != RPC_S_OK)
|
||||
{
|
||||
ERR("RpcEpRegister error %#x\n", status);
|
||||
return status;
|
||||
}
|
||||
|
||||
status = RpcServerListen(1, RPC_C_LISTEN_MAX_CALLS_DEFAULT, TRUE);
|
||||
if (status != RPC_S_OK)
|
||||
{
|
||||
|
@ -169,8 +193,10 @@ static void RPC_finish(void)
|
|||
{
|
||||
RpcMgmtStopServerListening(NULL);
|
||||
RpcEpUnregister(ITaskSchedulerService_v1_0_s_ifspec, sched_bindings, NULL);
|
||||
RpcEpUnregister(atsvc_v1_0_s_ifspec, sched_bindings, NULL);
|
||||
RpcBindingVectorFree(&sched_bindings);
|
||||
RpcServerUnregisterIf(NULL, NULL, FALSE);
|
||||
RpcServerUnregisterIf(ITaskSchedulerService_v1_0_s_ifspec, NULL, FALSE);
|
||||
RpcServerUnregisterIf(atsvc_v1_0_s_ifspec, NULL, FALSE);
|
||||
}
|
||||
|
||||
void WINAPI ServiceMain(DWORD argc, LPWSTR *argv)
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
* ATSvc Service definitions
|
||||
*
|
||||
* Copyright 2018 Dmitry Timoshkov
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
import "oaidl.idl";
|
||||
import "ocidl.idl";
|
||||
|
||||
[
|
||||
uuid(1ff70682-0a51-30e8-076d-740be8cee98b),
|
||||
implicit_handle(handle_t rpc_handle),
|
||||
version(1.0),
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface atsvc
|
||||
{
|
||||
typedef [handle] const WCHAR *ATSVC_HANDLE;
|
||||
|
||||
typedef struct _AT_ENUM
|
||||
{
|
||||
DWORD JobId;
|
||||
DWORD_PTR JobTime;
|
||||
DWORD DaysOfMonth;
|
||||
unsigned char DaysOfWeek;
|
||||
unsigned char Flags;
|
||||
[string] WCHAR *Command;
|
||||
} AT_ENUM, *PAT_ENUM, *LPAT_ENUM;
|
||||
|
||||
typedef struct _AT_INFO
|
||||
{
|
||||
DWORD_PTR JobTime;
|
||||
DWORD DaysOfMonth;
|
||||
unsigned char DaysOfWeek;
|
||||
unsigned char Flags;
|
||||
[string] WCHAR *Command;
|
||||
} AT_INFO, *PAT_INFO, *LPAT_INFO;
|
||||
|
||||
typedef struct _AT_ENUM_CONTAINER
|
||||
{
|
||||
DWORD EntriesRead;
|
||||
[size_is(EntriesRead)] LPAT_ENUM Buffer;
|
||||
} AT_ENUM_CONTAINER, *PAT_ENUM_CONTAINER, *LPAT_ENUM_CONTAINER;
|
||||
|
||||
DWORD NetrJobAdd([in,string,unique] ATSVC_HANDLE ServerName,
|
||||
[in] LPAT_INFO pAtInfo, [out] LPDWORD pJobId);
|
||||
|
||||
DWORD NetrJobDel([in,string,unique] ATSVC_HANDLE ServerName,
|
||||
[in] DWORD MinJobId, [in] DWORD MaxJobId);
|
||||
|
||||
DWORD NetrJobEnum([in,string,unique] ATSVC_HANDLE ServerName,
|
||||
[in,out] LPAT_ENUM_CONTAINER pEnumContainer, [in] DWORD PreferedMaximumLength,
|
||||
[out] LPDWORD pTotalEntries, [in,out,unique] LPDWORD pResumeHandle);
|
||||
|
||||
DWORD NetrJobGetInfo([in,string,unique] ATSVC_HANDLE ServerName,
|
||||
[in] DWORD JobId, [out] LPAT_INFO *ppAtInfo);
|
||||
}
|
Loading…
Reference in New Issue