For non-English languages the Spooler display name may contain non-ASCII characters, typically a smart quote. On Windows 7 GetServiceKeyName() fails when it gets such characters.
Signed-off-by: Francois Gouget fgouget@codeweavers.com --- dlls/advapi32/tests/service.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)
diff --git a/dlls/advapi32/tests/service.c b/dlls/advapi32/tests/service.c index 38726660850..484167656f1 100644 --- a/dlls/advapi32/tests/service.c +++ b/dlls/advapi32/tests/service.c @@ -720,6 +720,17 @@ static void test_get_displayname(void) CloseServiceHandle(scm_handle); }
+static int is_printable_ascii_str(const char *s) +{ + while (*s) + { + if (*s < 32 || *s >= 127) + return 0; + s++; + } + return 1; +} + static void test_get_servicekeyname(void) { SC_HANDLE scm_handle, svc_handle; @@ -861,6 +872,14 @@ static void test_get_servicekeyname(void) servicesize = 0; ret = GetServiceKeyNameA(scm_handle, displayname, NULL, &servicesize); ok(!ret, "Expected failure\n"); + if (!is_printable_ascii_str(displayname) && + GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST) + { + win_skip("GetServiceKeyName() does not support non-ASCII display names: %s\n", displayname); /* Windows 7 */ + CloseServiceHandle(scm_handle); + return; /* All the tests that follow will fail too */ + } + ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError());