mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-06 09:35:52 +00:00
taskschd: Implement IActionCollection_Create.
Signed-off-by: Hans Leidekker <hans@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
759ef6a4fa
commit
8d739937d3
|
@ -1634,6 +1634,181 @@ static HRESULT Principal_create(IPrincipal **obj)
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
IExecAction IExecAction_iface;
|
||||
LONG ref;
|
||||
} ExecAction;
|
||||
|
||||
static inline ExecAction *impl_from_IExecAction(IExecAction *iface)
|
||||
{
|
||||
return CONTAINING_RECORD(iface, ExecAction, IExecAction_iface);
|
||||
}
|
||||
|
||||
static ULONG WINAPI ExecAction_AddRef(IExecAction *iface)
|
||||
{
|
||||
ExecAction *action = impl_from_IExecAction(iface);
|
||||
return InterlockedIncrement(&action->ref);
|
||||
}
|
||||
|
||||
static ULONG WINAPI ExecAction_Release(IExecAction *iface)
|
||||
{
|
||||
ExecAction *action = impl_from_IExecAction(iface);
|
||||
LONG ref = InterlockedDecrement(&action->ref);
|
||||
|
||||
if (!ref)
|
||||
{
|
||||
TRACE("destroying %p\n", iface);
|
||||
heap_free(action);
|
||||
}
|
||||
|
||||
return ref;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ExecAction_QueryInterface(IExecAction *iface, REFIID riid, void **obj)
|
||||
{
|
||||
if (!riid || !obj) return E_INVALIDARG;
|
||||
|
||||
TRACE("%p,%s,%p\n", iface, debugstr_guid(riid), obj);
|
||||
|
||||
if (IsEqualGUID(riid, &IID_IExecAction) ||
|
||||
IsEqualGUID(riid, &IID_IAction) ||
|
||||
IsEqualGUID(riid, &IID_IDispatch) ||
|
||||
IsEqualGUID(riid, &IID_IUnknown))
|
||||
{
|
||||
IExecAction_AddRef(iface);
|
||||
*obj = iface;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
FIXME("interface %s is not implemented\n", debugstr_guid(riid));
|
||||
*obj = NULL;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ExecAction_GetTypeInfoCount(IExecAction *iface, UINT *count)
|
||||
{
|
||||
FIXME("%p,%p: stub\n", iface, count);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ExecAction_GetTypeInfo(IExecAction *iface, UINT index, LCID lcid, ITypeInfo **info)
|
||||
{
|
||||
FIXME("%p,%u,%u,%p: stub\n", iface, index, lcid, info);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ExecAction_GetIDsOfNames(IExecAction *iface, REFIID riid, LPOLESTR *names,
|
||||
UINT count, LCID lcid, DISPID *dispid)
|
||||
{
|
||||
FIXME("%p,%s,%p,%u,%u,%p: stub\n", iface, debugstr_guid(riid), names, count, lcid, dispid);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ExecAction_Invoke(IExecAction *iface, DISPID dispid, REFIID riid, LCID lcid, WORD flags,
|
||||
DISPPARAMS *params, VARIANT *result, EXCEPINFO *excepinfo, UINT *argerr)
|
||||
{
|
||||
FIXME("%p,%d,%s,%04x,%04x,%p,%p,%p,%p: stub\n", iface, dispid, debugstr_guid(riid), lcid, flags,
|
||||
params, result, excepinfo, argerr);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ExecAction_get_Id(IExecAction *iface, BSTR *id)
|
||||
{
|
||||
FIXME("%p,%p: stub\n", iface, id);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ExecAction_put_Id(IExecAction *iface, BSTR id)
|
||||
{
|
||||
FIXME("%p,%s: stub\n", iface, debugstr_w(id));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ExecAction_get_Type(IExecAction *iface, TASK_ACTION_TYPE *type)
|
||||
{
|
||||
TRACE("%p,%p\n", iface, type);
|
||||
|
||||
if (!type) return E_POINTER;
|
||||
|
||||
*type = TASK_ACTION_EXEC;
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ExecAction_get_Path(IExecAction *iface, BSTR *path)
|
||||
{
|
||||
FIXME("%p,%p: stub\n", iface, path);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ExecAction_put_Path(IExecAction *iface, BSTR path)
|
||||
{
|
||||
FIXME("%p,%s: stub\n", iface, debugstr_w(path));
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ExecAction_get_Arguments(IExecAction *iface, BSTR *arguments)
|
||||
{
|
||||
FIXME("%p,%p: stub\n", iface, arguments);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ExecAction_put_Arguments(IExecAction *iface, BSTR arguments)
|
||||
{
|
||||
FIXME("%p,%s: stub\n", iface, debugstr_w(arguments));
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ExecAction_get_WorkingDirectory(IExecAction *iface, BSTR *directory)
|
||||
{
|
||||
FIXME("%p,%p: stub\n", iface, directory);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ExecAction_put_WorkingDirectory(IExecAction *iface, BSTR directory)
|
||||
{
|
||||
FIXME("%p,%s: stub\n", iface, debugstr_w(directory));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static const IExecActionVtbl Action_vtbl =
|
||||
{
|
||||
ExecAction_QueryInterface,
|
||||
ExecAction_AddRef,
|
||||
ExecAction_Release,
|
||||
ExecAction_GetTypeInfoCount,
|
||||
ExecAction_GetTypeInfo,
|
||||
ExecAction_GetIDsOfNames,
|
||||
ExecAction_Invoke,
|
||||
ExecAction_get_Id,
|
||||
ExecAction_put_Id,
|
||||
ExecAction_get_Type,
|
||||
ExecAction_get_Path,
|
||||
ExecAction_put_Path,
|
||||
ExecAction_get_Arguments,
|
||||
ExecAction_put_Arguments,
|
||||
ExecAction_get_WorkingDirectory,
|
||||
ExecAction_put_WorkingDirectory
|
||||
};
|
||||
|
||||
static HRESULT ExecAction_create(IExecAction **obj)
|
||||
{
|
||||
ExecAction *action;
|
||||
|
||||
action = heap_alloc(sizeof(*action));
|
||||
if (!action) return E_OUTOFMEMORY;
|
||||
|
||||
action->IExecAction_iface.lpVtbl = &Action_vtbl;
|
||||
action->ref = 1;
|
||||
|
||||
*obj = &action->IExecAction_iface;
|
||||
|
||||
TRACE("created %p\n", *obj);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
IActionCollection IActionCollection_iface;
|
||||
|
@ -1744,8 +1919,17 @@ static HRESULT WINAPI Actions_put_XmlText(IActionCollection *iface, BSTR xml)
|
|||
|
||||
static HRESULT WINAPI Actions_Create(IActionCollection *iface, TASK_ACTION_TYPE type, IAction **action)
|
||||
{
|
||||
FIXME("%p,%u,%p: stub\n", iface, type, action);
|
||||
return E_NOTIMPL;
|
||||
TRACE("%p,%u,%p\n", iface, type, action);
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case TASK_ACTION_EXEC:
|
||||
return ExecAction_create((IExecAction **)action);
|
||||
|
||||
default:
|
||||
FIXME("unimplemented type %u\n", type);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
}
|
||||
|
||||
static HRESULT WINAPI Actions_Remove(IActionCollection *iface, VARIANT index)
|
||||
|
|
|
@ -1235,23 +1235,22 @@ static void create_action(ITaskDefinition *taskdef)
|
|||
IActionCollection *actions;
|
||||
IAction *action;
|
||||
IExecAction *exec_action;
|
||||
TASK_ACTION_TYPE type;
|
||||
|
||||
hr = ITaskDefinition_get_Actions(taskdef, &actions);
|
||||
ok(hr == S_OK, "get_Actions error %#x\n", hr);
|
||||
|
||||
hr = IActionCollection_Create(actions, TASK_ACTION_EXEC, &action);
|
||||
todo_wine
|
||||
ok(hr == S_OK, "Create action error %#x\n", hr);
|
||||
/* FIXME: Remove once implemented */
|
||||
if (hr != S_OK)
|
||||
{
|
||||
IActionCollection_Release(actions);
|
||||
return;
|
||||
}
|
||||
|
||||
hr = IAction_QueryInterface(action, &IID_IExecAction, (void **)&exec_action);
|
||||
ok(hr == S_OK, "QueryInterface error %#x\n", hr);
|
||||
|
||||
type = 0xdeadbeef;
|
||||
hr = IExecAction_get_Type(exec_action, &type);
|
||||
ok(hr == S_OK, "get_Type error %#x\n", hr);
|
||||
ok(type == TASK_ACTION_EXEC, "got %u\n", type );
|
||||
|
||||
hr = IExecAction_put_Path(exec_action, task1_exe);
|
||||
ok(hr == S_OK, "put_Path error %#x\n", hr);
|
||||
|
||||
|
|
Loading…
Reference in a new issue