Paul Vriens : advapi32/tests: Add tests for QueryServiceStatus.

Alexandre Julliard julliard at winehq.org
Fri Aug 22 04:44:02 CDT 2008


Module: wine
Branch: master
Commit: 9d906d0df89f33a5dd80ff18382449dca75600bf
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9d906d0df89f33a5dd80ff18382449dca75600bf

Author: Paul Vriens <paul.vriens.wine at gmail.com>
Date:   Wed Aug 20 20:27:34 2008 +0200

advapi32/tests: Add tests for QueryServiceStatus.

---

 dlls/advapi32/tests/service.c |   59 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 59 insertions(+), 0 deletions(-)

diff --git a/dlls/advapi32/tests/service.c b/dlls/advapi32/tests/service.c
index 306f000..746530a 100644
--- a/dlls/advapi32/tests/service.c
+++ b/dlls/advapi32/tests/service.c
@@ -797,6 +797,64 @@ static void test_get_servicekeyname(void)
     CloseServiceHandle(scm_handle);
 }
 
+static void test_query_svc(void)
+{
+    SC_HANDLE scm_handle, svc_handle;
+    BOOL ret;
+    SERVICE_STATUS status;
+
+    /* All NULL or wrong  */
+    SetLastError(0xdeadbeef);
+    ret = QueryServiceStatus(NULL, NULL);
+    ok(!ret, "Expected failure\n");
+    ok(GetLastError() == ERROR_INVALID_HANDLE,
+       "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
+
+    scm_handle = OpenSCManagerA(NULL, NULL, SC_MANAGER_CONNECT);
+
+    /* Check if 'Spooler' exists.
+     * Open with not enough rights to query the status.
+     */
+    svc_handle = OpenServiceA(scm_handle, spooler, STANDARD_RIGHTS_READ);
+    if (!svc_handle)
+    {
+        skip("Spooler service doesn't exist\n");
+        CloseServiceHandle(scm_handle);
+        return;
+    }
+
+    SetLastError(0xdeadbeef);
+    ret = QueryServiceStatus(svc_handle, NULL);
+    ok(!ret, "Expected failure\n");
+    todo_wine
+    ok(GetLastError() == ERROR_INVALID_ADDRESS ||
+       GetLastError() == ERROR_INVALID_PARAMETER /* NT4 */,
+       "Unexpected last error %d\n", GetLastError());
+
+    SetLastError(0xdeadbeef);
+    ret = QueryServiceStatus(svc_handle, &status);
+    ok(!ret, "Expected failure\n");
+    ok(GetLastError() == ERROR_ACCESS_DENIED,
+       "Expected ERROR_ACCESS_DENIED, got %d\n", GetLastError());
+
+    /* Open the service with just enough rights.
+     * (Verified with 'SERVICE_ALL_ACCESS &~ SERVICE_QUERY_STATUS')
+     */
+    CloseServiceHandle(svc_handle);
+    svc_handle = OpenServiceA(scm_handle, spooler, SERVICE_QUERY_STATUS);
+
+    SetLastError(0xdeadbeef);
+    ret = QueryServiceStatus(svc_handle, &status);
+    ok(ret, "Expected success\n");
+    ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ ||
+       GetLastError() == 0xdeadbeef /* NT4, XP and Vista */ ||
+       GetLastError() == ERROR_IO_PENDING /* W2K */,
+       "Unexpected last error %d\n", GetLastError());
+
+    CloseServiceHandle(svc_handle);
+    CloseServiceHandle(scm_handle);
+}
+
 static void test_close(void)
 {
     SC_HANDLE handle;
@@ -1265,6 +1323,7 @@ START_TEST(service)
     test_create_delete_svc();
     test_get_displayname();
     test_get_servicekeyname();
+    test_query_svc();
     test_close();
     /* Test the creation, querying and deletion of a service */
     test_sequence();




More information about the wine-cvs mailing list