diff --git a/dlls/mstask/tests/task.c b/dlls/mstask/tests/task.c
index b1f194c..7e9e831 100644
--- a/dlls/mstask/tests/task.c
+++ b/dlls/mstask/tests/task.c
@@ -427,6 +427,77 @@
     return;
 }
 
+static void test_SetAccountInformation_GetAccountInformation(void)
+{
+    BOOL setup;
+    HRESULT hres;
+    LPWSTR account_name;
+    const WCHAR dummy_account_name[] = {'N', 'o', 'S', 'u', 'c', 'h',
+            'A', 'c', 'c', 'o', 'u', 'n', 't', 0};
+
+    setup = setup_task();
+    ok(setup, "Failed to setup test_task\n");
+    if (!setup)
+    {
+        skip("Failed to create task.  Skipping tests.\n");
+        return;
+    }
+
+    /* Get account information before it is set */
+    hres = ITask_GetAccountInformation(test_task, &account_name);
+    /* WinXP returns HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND): 0x80070002 but
+     * Win2K returns SCHED_E_CANNOT_OPEN_TASK: 0x8004130d */
+    todo_wine ok(hres == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) ||
+            hres == SCHED_E_CANNOT_OPEN_TASK,
+            "Unset account name generated: 0x%08x\n", hres);
+
+    /* Attempt to set to a dummy account without a password */
+    /* This test passes on WinXP but fails on Win2K */
+    hres = ITask_SetAccountInformation(test_task, dummy_account_name, NULL);
+    todo_wine ok(hres == S_OK,
+            "Failed setting dummy account with no password: %08x\n", hres);
+    hres = ITask_GetAccountInformation(test_task, &account_name);
+    todo_wine ok(hres == S_OK, "GetAccountInformation failed: %08x\n", hres);
+    if (hres == S_OK)
+    {
+        todo_wine ok(!lstrcmpW(account_name, dummy_account_name),
+                "Got %s, expected %s\n", dbgstr_w(account_name),
+                dbgstr_w(dummy_account_name));
+        CoTaskMemFree(account_name);
+    }
+
+    /* Attempt to set to a dummy account with a (invalid) password */
+    /* This test passes on WinXP but fails on Win2K */
+    hres = ITask_SetAccountInformation(test_task, dummy_account_name,
+            dummy_account_name);
+    todo_wine ok(hres == S_OK,
+            "Failed setting dummy account with password: %08x\n", hres);
+    hres = ITask_GetAccountInformation(test_task, &account_name);
+    todo_wine ok(hres == S_OK, "GetAccountInformation failed: %08x\n", hres);
+    if (hres == S_OK)
+    {
+        todo_wine ok(!lstrcmpW(account_name, dummy_account_name),
+                "Got %s, expected %s\n", dbgstr_w(account_name),
+                dbgstr_w(dummy_account_name));
+        CoTaskMemFree(account_name);
+    }
+
+    /* Attempt to set to the local system account */
+    hres = ITask_SetAccountInformation(test_task, empty, NULL);
+    todo_wine ok(hres == S_OK, "Failed setting system account: %08x\n", hres);
+    hres = ITask_GetAccountInformation(test_task, &account_name);
+    todo_wine ok(hres == S_OK, "GetAccountInformation failed: %08x\n", hres);
+    if (hres == S_OK)
+    {
+        todo_wine ok(!lstrcmpW(account_name, empty),
+                "Got %s, expected empty string\n", dbgstr_w(account_name));
+        CoTaskMemFree(account_name);
+    }
+
+    cleanup_task();
+    return;
+}
+
 START_TEST(task)
 {
     CoInitialize(NULL);
@@ -435,5 +506,6 @@
     test_SetParameters_GetParameters();
     test_SetComment_GetComment();
     test_SetMaxRunTime_GetMaxRunTime();
+    test_SetAccountInformation_GetAccountInformation();
     CoUninitialize();
 }
