Signed-off-by: Hans Leidekker hans@codeweavers.com --- dlls/wtsapi32/Makefile.in | 1 + dlls/wtsapi32/tests/wtsapi.c | 16 ++++++++++++++++ dlls/wtsapi32/wtsapi32.c | 13 +++++++++++++ include/wtsapi32.h | 1 + 4 files changed, 31 insertions(+)
diff --git a/dlls/wtsapi32/Makefile.in b/dlls/wtsapi32/Makefile.in index 784a91c978..e54c088f21 100644 --- a/dlls/wtsapi32/Makefile.in +++ b/dlls/wtsapi32/Makefile.in @@ -1,5 +1,6 @@ MODULE = wtsapi32.dll IMPORTLIB = wtsapi32 +IMPORTS = advapi32
C_SRCS = \ wtsapi32.c diff --git a/dlls/wtsapi32/tests/wtsapi.c b/dlls/wtsapi32/tests/wtsapi.c index 3b7aa1bf09..341d9e605f 100644 --- a/dlls/wtsapi32/tests/wtsapi.c +++ b/dlls/wtsapi32/tests/wtsapi.c @@ -90,7 +90,23 @@ static void test_WTSEnumerateProcessesW(void) WTSFreeMemory(info); }
+static void test_WTSQuerySessionInformationW(void) +{ + BOOL ret; + WCHAR *buf; + DWORD count; + + count = 0; + buf = NULL; + ret = WTSQuerySessionInformationW(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSUserName, &buf, &count); + ok(ret, "got %u\n", GetLastError()); + ok(buf != NULL, "buf not set\n"); + ok(count == (lstrlenW(buf) + 1) * sizeof(WCHAR), "got %u\n", count); + WTSFreeMemory(buf); +} + START_TEST (wtsapi) { test_WTSEnumerateProcessesW(); + test_WTSQuerySessionInformationW(); } diff --git a/dlls/wtsapi32/wtsapi32.c b/dlls/wtsapi32/wtsapi32.c index 736e1995b6..5569502977 100644 --- a/dlls/wtsapi32/wtsapi32.c +++ b/dlls/wtsapi32/wtsapi32.c @@ -233,6 +233,19 @@ BOOL WINAPI WTSQuerySessionInformationW( FIXME("Stub %p 0x%08x %d %p %p\n", hServer, SessionId, WTSInfoClass, Buffer, BytesReturned);
+ if (WTSInfoClass == WTSUserName) + { + WCHAR *username; + DWORD count = 0; + + GetUserNameW(NULL, &count); + if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) return FALSE; + if (!(username = heap_alloc(count * sizeof(WCHAR)))) return FALSE; + GetUserNameW(username, &count); + *Buffer = username; + *BytesReturned = count * sizeof(WCHAR); + return TRUE; + } return FALSE; }
diff --git a/include/wtsapi32.h b/include/wtsapi32.h index 304a418726..f329bd5cf0 100644 --- a/include/wtsapi32.h +++ b/include/wtsapi32.h @@ -136,6 +136,7 @@ DECL_WINELIB_TYPE_AW(WTS_SERVER_INFO) DECL_WINELIB_TYPE_AW(PWTS_SERVER_INFO)
#define WTS_CURRENT_SERVER_HANDLE ((HANDLE)NULL) +#define WTS_CURRENT_SESSION (~0u)
void WINAPI WTSCloseServer(HANDLE); BOOL WINAPI WTSConnectSessionA(ULONG, ULONG, PSTR, BOOL);