mstask: Implemented partial stub for (Set|Get)AccountInformation.
This commit is contained in:
parent
a597d9eaed
commit
f208025228
|
@ -62,6 +62,7 @@ typedef struct
|
||||||
LPWSTR parameters;
|
LPWSTR parameters;
|
||||||
LPWSTR comment;
|
LPWSTR comment;
|
||||||
DWORD maxRunTime;
|
DWORD maxRunTime;
|
||||||
|
LPWSTR accountName;
|
||||||
} TaskImpl;
|
} TaskImpl;
|
||||||
extern HRESULT TaskConstructor(LPCWSTR pwszTaskName, LPVOID *ppObj);
|
extern HRESULT TaskConstructor(LPCWSTR pwszTaskName, LPVOID *ppObj);
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@ static inline TaskImpl *impl_from_IPersistFile( IPersistFile *iface )
|
||||||
static void TaskDestructor(TaskImpl *This)
|
static void TaskDestructor(TaskImpl *This)
|
||||||
{
|
{
|
||||||
TRACE("%p\n", This);
|
TRACE("%p\n", This);
|
||||||
|
HeapFree(GetProcessHeap(), 0, This->accountName);
|
||||||
HeapFree(GetProcessHeap(), 0, This->comment);
|
HeapFree(GetProcessHeap(), 0, This->comment);
|
||||||
HeapFree(GetProcessHeap(), 0, This->parameters);
|
HeapFree(GetProcessHeap(), 0, This->parameters);
|
||||||
HeapFree(GetProcessHeap(), 0, This->taskName);
|
HeapFree(GetProcessHeap(), 0, This->taskName);
|
||||||
|
@ -355,17 +356,46 @@ static HRESULT WINAPI MSTASK_ITask_SetAccountInformation(
|
||||||
LPCWSTR pwszAccountName,
|
LPCWSTR pwszAccountName,
|
||||||
LPCWSTR pwszPassword)
|
LPCWSTR pwszPassword)
|
||||||
{
|
{
|
||||||
FIXME("(%p, %s, %s): stub\n", iface, debugstr_w(pwszAccountName),
|
DWORD n;
|
||||||
|
TaskImpl *This = (TaskImpl *)iface;
|
||||||
|
LPWSTR tmp_account_name;
|
||||||
|
|
||||||
|
TRACE("(%p, %s, %s): partial stub\n", iface, debugstr_w(pwszAccountName),
|
||||||
debugstr_w(pwszPassword));
|
debugstr_w(pwszPassword));
|
||||||
return E_NOTIMPL;
|
|
||||||
|
if (pwszPassword)
|
||||||
|
FIXME("Partial stub ignores passwords\n");
|
||||||
|
|
||||||
|
n = (lstrlenW(pwszAccountName) + 1);
|
||||||
|
tmp_account_name = HeapAlloc(GetProcessHeap(), 0, n * sizeof(WCHAR));
|
||||||
|
if (!tmp_account_name)
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
lstrcpyW(tmp_account_name, pwszAccountName);
|
||||||
|
HeapFree(GetProcessHeap(), 0, This->accountName);
|
||||||
|
This->accountName = tmp_account_name;
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI MSTASK_ITask_GetAccountInformation(
|
static HRESULT WINAPI MSTASK_ITask_GetAccountInformation(
|
||||||
ITask* iface,
|
ITask* iface,
|
||||||
LPWSTR *ppwszAccountName)
|
LPWSTR *ppwszAccountName)
|
||||||
{
|
{
|
||||||
FIXME("(%p, %p): stub\n", iface, ppwszAccountName);
|
DWORD n;
|
||||||
return E_NOTIMPL;
|
TaskImpl *This = (TaskImpl *)iface;
|
||||||
|
|
||||||
|
TRACE("(%p, %p): partial stub\n", iface, ppwszAccountName);
|
||||||
|
|
||||||
|
/* This implements the WinXP behavior when accountName has not yet
|
||||||
|
* set. Win2K behaves differently, returning SCHED_E_CANNOT_OPEN_TASK */
|
||||||
|
if (!This->accountName)
|
||||||
|
return HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND);
|
||||||
|
|
||||||
|
n = (lstrlenW(This->accountName) + 1);
|
||||||
|
*ppwszAccountName = CoTaskMemAlloc(n * sizeof(WCHAR));
|
||||||
|
if (!*ppwszAccountName)
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
lstrcpyW(*ppwszAccountName, This->accountName);
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI MSTASK_ITask_SetApplicationName(
|
static HRESULT WINAPI MSTASK_ITask_SetApplicationName(
|
||||||
|
@ -728,6 +758,7 @@ HRESULT TaskConstructor(LPCWSTR pwszTaskName, LPVOID *ppObj)
|
||||||
This->applicationName = NULL;
|
This->applicationName = NULL;
|
||||||
This->parameters = NULL;
|
This->parameters = NULL;
|
||||||
This->comment = NULL;
|
This->comment = NULL;
|
||||||
|
This->accountName = NULL;
|
||||||
|
|
||||||
/* Default time is 3 days = 259200000 ms */
|
/* Default time is 3 days = 259200000 ms */
|
||||||
This->maxRunTime = 259200000;
|
This->maxRunTime = 259200000;
|
||||||
|
|
|
@ -434,6 +434,8 @@ static void test_SetAccountInformation_GetAccountInformation(void)
|
||||||
LPWSTR account_name;
|
LPWSTR account_name;
|
||||||
const WCHAR dummy_account_name[] = {'N', 'o', 'S', 'u', 'c', 'h',
|
const WCHAR dummy_account_name[] = {'N', 'o', 'S', 'u', 'c', 'h',
|
||||||
'A', 'c', 'c', 'o', 'u', 'n', 't', 0};
|
'A', 'c', 'c', 'o', 'u', 'n', 't', 0};
|
||||||
|
const WCHAR dummy_account_name_b[] = {'N', 'o', 'S', 'u', 'c', 'h',
|
||||||
|
'A', 'c', 'c', 'o', 'u', 'n', 't', 'B', 0};
|
||||||
|
|
||||||
setup = setup_task();
|
setup = setup_task();
|
||||||
ok(setup, "Failed to setup test_task\n");
|
ok(setup, "Failed to setup test_task\n");
|
||||||
|
@ -447,20 +449,20 @@ static void test_SetAccountInformation_GetAccountInformation(void)
|
||||||
hres = ITask_GetAccountInformation(test_task, &account_name);
|
hres = ITask_GetAccountInformation(test_task, &account_name);
|
||||||
/* WinXP returns HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND): 0x80070002 but
|
/* WinXP returns HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND): 0x80070002 but
|
||||||
* Win2K returns SCHED_E_CANNOT_OPEN_TASK: 0x8004130d */
|
* Win2K returns SCHED_E_CANNOT_OPEN_TASK: 0x8004130d */
|
||||||
todo_wine ok(hres == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) ||
|
ok(hres == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) ||
|
||||||
hres == SCHED_E_CANNOT_OPEN_TASK,
|
hres == SCHED_E_CANNOT_OPEN_TASK,
|
||||||
"Unset account name generated: 0x%08x\n", hres);
|
"Unset account name generated: 0x%08x\n", hres);
|
||||||
|
|
||||||
/* Attempt to set to a dummy account without a password */
|
/* Attempt to set to a dummy account without a password */
|
||||||
/* This test passes on WinXP but fails on Win2K */
|
/* This test passes on WinXP but fails on Win2K */
|
||||||
hres = ITask_SetAccountInformation(test_task, dummy_account_name, NULL);
|
hres = ITask_SetAccountInformation(test_task, dummy_account_name, NULL);
|
||||||
todo_wine ok(hres == S_OK,
|
ok(hres == S_OK,
|
||||||
"Failed setting dummy account with no password: %08x\n", hres);
|
"Failed setting dummy account with no password: %08x\n", hres);
|
||||||
hres = ITask_GetAccountInformation(test_task, &account_name);
|
hres = ITask_GetAccountInformation(test_task, &account_name);
|
||||||
todo_wine ok(hres == S_OK, "GetAccountInformation failed: %08x\n", hres);
|
ok(hres == S_OK, "GetAccountInformation failed: %08x\n", hres);
|
||||||
if (hres == S_OK)
|
if (hres == S_OK)
|
||||||
{
|
{
|
||||||
todo_wine ok(!lstrcmpW(account_name, dummy_account_name),
|
ok(!lstrcmpW(account_name, dummy_account_name),
|
||||||
"Got %s, expected %s\n", dbgstr_w(account_name),
|
"Got %s, expected %s\n", dbgstr_w(account_name),
|
||||||
dbgstr_w(dummy_account_name));
|
dbgstr_w(dummy_account_name));
|
||||||
CoTaskMemFree(account_name);
|
CoTaskMemFree(account_name);
|
||||||
|
@ -468,28 +470,28 @@ static void test_SetAccountInformation_GetAccountInformation(void)
|
||||||
|
|
||||||
/* Attempt to set to a dummy account with a (invalid) password */
|
/* Attempt to set to a dummy account with a (invalid) password */
|
||||||
/* This test passes on WinXP but fails on Win2K */
|
/* This test passes on WinXP but fails on Win2K */
|
||||||
hres = ITask_SetAccountInformation(test_task, dummy_account_name,
|
hres = ITask_SetAccountInformation(test_task, dummy_account_name_b,
|
||||||
dummy_account_name);
|
dummy_account_name_b);
|
||||||
todo_wine ok(hres == S_OK,
|
ok(hres == S_OK,
|
||||||
"Failed setting dummy account with password: %08x\n", hres);
|
"Failed setting dummy account with password: %08x\n", hres);
|
||||||
hres = ITask_GetAccountInformation(test_task, &account_name);
|
hres = ITask_GetAccountInformation(test_task, &account_name);
|
||||||
todo_wine ok(hres == S_OK, "GetAccountInformation failed: %08x\n", hres);
|
ok(hres == S_OK, "GetAccountInformation failed: %08x\n", hres);
|
||||||
if (hres == S_OK)
|
if (hres == S_OK)
|
||||||
{
|
{
|
||||||
todo_wine ok(!lstrcmpW(account_name, dummy_account_name),
|
ok(!lstrcmpW(account_name, dummy_account_name_b),
|
||||||
"Got %s, expected %s\n", dbgstr_w(account_name),
|
"Got %s, expected %s\n", dbgstr_w(account_name),
|
||||||
dbgstr_w(dummy_account_name));
|
dbgstr_w(dummy_account_name_b));
|
||||||
CoTaskMemFree(account_name);
|
CoTaskMemFree(account_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Attempt to set to the local system account */
|
/* Attempt to set to the local system account */
|
||||||
hres = ITask_SetAccountInformation(test_task, empty, NULL);
|
hres = ITask_SetAccountInformation(test_task, empty, NULL);
|
||||||
todo_wine ok(hres == S_OK, "Failed setting system account: %08x\n", hres);
|
ok(hres == S_OK, "Failed setting system account: %08x\n", hres);
|
||||||
hres = ITask_GetAccountInformation(test_task, &account_name);
|
hres = ITask_GetAccountInformation(test_task, &account_name);
|
||||||
todo_wine ok(hres == S_OK, "GetAccountInformation failed: %08x\n", hres);
|
ok(hres == S_OK, "GetAccountInformation failed: %08x\n", hres);
|
||||||
if (hres == S_OK)
|
if (hres == S_OK)
|
||||||
{
|
{
|
||||||
todo_wine ok(!lstrcmpW(account_name, empty),
|
ok(!lstrcmpW(account_name, empty),
|
||||||
"Got %s, expected empty string\n", dbgstr_w(account_name));
|
"Got %s, expected empty string\n", dbgstr_w(account_name));
|
||||||
CoTaskMemFree(account_name);
|
CoTaskMemFree(account_name);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue