[WTSAPI32] Sync with Wine 3.0. CORE-14225

This commit is contained in:
Amine Khaldi 2018-01-21 22:01:34 +01:00
parent 161232c08b
commit 90f14ccef3
2 changed files with 10 additions and 87 deletions

View file

@ -28,9 +28,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(wtsapi); WINE_DEFAULT_DEBUG_CHANNEL(wtsapi);
/* FIXME: Inspect */
#define GetCurrentProcessToken() ((HANDLE)~(ULONG_PTR)3)
/************************************************************ /************************************************************
* WTSCloseServer (WTSAPI32.@) * WTSCloseServer (WTSAPI32.@)
@ -99,13 +96,8 @@ BOOL WINAPI WTSEnumerateProcessesA(HANDLE hServer, DWORD Reserved, DWORD Version
BOOL WINAPI WTSEnumerateProcessesW(HANDLE hServer, DWORD Reserved, DWORD Version, BOOL WINAPI WTSEnumerateProcessesW(HANDLE hServer, DWORD Reserved, DWORD Version,
PWTS_PROCESS_INFOW* ppProcessInfo, DWORD* pCount) PWTS_PROCESS_INFOW* ppProcessInfo, DWORD* pCount)
{ {
WTS_PROCESS_INFOW *processInfo; FIXME("Stub %p 0x%08x 0x%08x %p %p\n", hServer, Reserved, Version,
SYSTEM_PROCESS_INFORMATION *spi; ppProcessInfo, pCount);
ULONG size = 0x4000;
void *buf = NULL;
NTSTATUS status;
DWORD count;
WCHAR *name;
if (!ppProcessInfo || !pCount || Reserved != 0 || Version != 1) if (!ppProcessInfo || !pCount || Reserved != 0 || Version != 1)
{ {
@ -113,71 +105,9 @@ BOOL WINAPI WTSEnumerateProcessesW(HANDLE hServer, DWORD Reserved, DWORD Version
return FALSE; return FALSE;
} }
if (hServer != WTS_CURRENT_SERVER_HANDLE) *pCount = 0;
{ *ppProcessInfo = NULL;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
do
{
size *= 2;
HeapFree(GetProcessHeap(), 0, buf);
buf = HeapAlloc(GetProcessHeap(), 0, size);
if (!buf)
{
SetLastError(ERROR_OUTOFMEMORY);
return FALSE;
}
status = NtQuerySystemInformation(SystemProcessInformation, buf, size, NULL);
}
while (status == STATUS_INFO_LENGTH_MISMATCH);
if (status != STATUS_SUCCESS)
{
HeapFree(GetProcessHeap(), 0, buf);
SetLastError(RtlNtStatusToDosError(status));
return FALSE;
}
spi = buf;
count = size = 0;
for (;;)
{
size += sizeof(WTS_PROCESS_INFOW) + spi->ProcessName.Length + sizeof(WCHAR);
count++;
if (spi->NextEntryOffset == 0) break;
spi = (SYSTEM_PROCESS_INFORMATION *)(((PCHAR)spi) + spi->NextEntryOffset);
}
processInfo = HeapAlloc(GetProcessHeap(), 0, size);
if (!processInfo)
{
HeapFree(GetProcessHeap(), 0, buf);
SetLastError(ERROR_OUTOFMEMORY);
return FALSE;
}
name = (WCHAR *)&processInfo[count];
*ppProcessInfo = processInfo;
*pCount = count;
spi = buf;
while (count--)
{
processInfo->SessionId = 0;
processInfo->ProcessId = HandleToUlong(spi->UniqueProcessId);
processInfo->pProcessName = name;
processInfo->pUserSid = NULL;
memcpy( name, spi->ProcessName.Buffer, spi->ProcessName.Length );
name[ spi->ProcessName.Length/sizeof(WCHAR) ] = 0;
processInfo++;
name += (spi->ProcessName.Length + sizeof(WCHAR))/sizeof(WCHAR);
spi = (SYSTEM_PROCESS_INFORMATION *)(((PCHAR)spi) + spi->NextEntryOffset);
}
HeapFree(GetProcessHeap(), 0, buf);
return TRUE; return TRUE;
} }
@ -241,7 +171,9 @@ BOOL WINAPI WTSEnumerateSessionsW(HANDLE hServer, DWORD Reserved, DWORD Version,
*/ */
void WINAPI WTSFreeMemory(PVOID pMemory) void WINAPI WTSFreeMemory(PVOID pMemory)
{ {
HeapFree(GetProcessHeap(), 0, pMemory); static int once;
if (!once++) FIXME("Stub %p\n", pMemory);
} }
/************************************************************ /************************************************************
@ -314,16 +246,7 @@ BOOL WINAPI WTSQuerySessionInformationW(
BOOL WINAPI WTSQueryUserToken(ULONG session_id, PHANDLE token) BOOL WINAPI WTSQueryUserToken(ULONG session_id, PHANDLE token)
{ {
FIXME("%u %p\n", session_id, token); FIXME("%u %p\n", session_id, token);
return FALSE;
if (!token)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
return DuplicateHandle(GetCurrentProcess(), GetCurrentProcessToken(),
GetCurrentProcess(), token,
0, FALSE, DUPLICATE_SAME_ACCESS);
} }
/************************************************************ /************************************************************
@ -357,7 +280,7 @@ BOOL WINAPI WTSRegisterSessionNotification(HWND hWnd, DWORD dwFlags)
} }
/************************************************************ /************************************************************
* WTSRegisterSessionNotification (WTSAPI32.@) * WTSRegisterSessionNotificationEx (WTSAPI32.@)
*/ */
BOOL WINAPI WTSRegisterSessionNotificationEx(HANDLE hServer, HWND hWnd, DWORD dwFlags) BOOL WINAPI WTSRegisterSessionNotificationEx(HANDLE hServer, HWND hWnd, DWORD dwFlags)
{ {

View file

@ -212,7 +212,7 @@ reactos/dll/win32/wmi # Synced to WineStaging-2.9
reactos/dll/win32/wmiutils # Synced to WineStaging-2.9 reactos/dll/win32/wmiutils # Synced to WineStaging-2.9
reactos/dll/win32/wmvcore # Synced to Wine-3.0 reactos/dll/win32/wmvcore # Synced to Wine-3.0
reactos/dll/win32/wshom.ocx # Synced to Wine-3.0 reactos/dll/win32/wshom.ocx # Synced to Wine-3.0
reactos/dll/win32/wtsapi32 # Synced to WineStaging-2.9 reactos/dll/win32/wtsapi32 # Synced to Wine-3.0
reactos/dll/win32/wuapi # Synced to WineStaging-2.9 reactos/dll/win32/wuapi # Synced to WineStaging-2.9
reactos/dll/win32/xinput1_1 # Synced to WineStaging-2.9 reactos/dll/win32/xinput1_1 # Synced to WineStaging-2.9
reactos/dll/win32/xinput1_2 # Synced to WineStaging-2.9 reactos/dll/win32/xinput1_2 # Synced to WineStaging-2.9