Blame libfreerdp/core/server.h

Packit 1fb8d4
/**
Packit 1fb8d4
 * FreeRDP: A Remote Desktop Protocol Implementation
Packit 1fb8d4
 * Server Channels
Packit 1fb8d4
 *
Packit 1fb8d4
 * Copyright 2014 Marc-Andre Moreau <marcandre.moreau@gmail.com>
Packit 1fb8d4
 * Copyright 2015 Copyright 2015 Thincast Technologies GmbH
Packit 1fb8d4
 *
Packit 1fb8d4
 * Licensed under the Apache License, Version 2.0 (the "License");
Packit 1fb8d4
 * you may not use this file except in compliance with the License.
Packit 1fb8d4
 * You may obtain a copy of the License at
Packit 1fb8d4
 *
Packit 1fb8d4
 *     http://www.apache.org/licenses/LICENSE-2.0
Packit 1fb8d4
 *
Packit 1fb8d4
 * Unless required by applicable law or agreed to in writing, software
Packit 1fb8d4
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit 1fb8d4
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit 1fb8d4
 * See the License for the specific language governing permissions and
Packit 1fb8d4
 * limitations under the License.
Packit 1fb8d4
 */
Packit 1fb8d4
Packit 1fb8d4
#ifndef FREERDP_LIB_CORE_SERVER_H
Packit 1fb8d4
#define FREERDP_LIB_CORE_SERVER_H
Packit 1fb8d4
Packit 1fb8d4
#include <freerdp/freerdp.h>
Packit 1fb8d4
#include <freerdp/api.h>
Packit 1fb8d4
#include <freerdp/channels/wtsvc.h>
Packit 1fb8d4
Packit 1fb8d4
#include <winpr/synch.h>
Packit 1fb8d4
#include <winpr/stream.h>
Packit 1fb8d4
#include <winpr/collections.h>
Packit 1fb8d4
Packit 1fb8d4
typedef struct rdp_peer_channel rdpPeerChannel;
Packit 1fb8d4
typedef struct WTSVirtualChannelManager WTSVirtualChannelManager;
Packit 1fb8d4
Packit 1fb8d4
#include "rdp.h"
Packit 1fb8d4
#include "mcs.h"
Packit 1fb8d4
Packit 1fb8d4
#define CREATE_REQUEST_PDU			0x01
Packit 1fb8d4
#define DATA_FIRST_PDU				0x02
Packit 1fb8d4
#define DATA_PDU				0x03
Packit 1fb8d4
#define CLOSE_REQUEST_PDU			0x04
Packit 1fb8d4
#define CAPABILITY_REQUEST_PDU			0x05
Packit 1fb8d4
Packit 1fb8d4
enum
Packit 1fb8d4
{
Packit 1fb8d4
	RDP_PEER_CHANNEL_TYPE_SVC = 0,
Packit 1fb8d4
	RDP_PEER_CHANNEL_TYPE_DVC = 1
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
enum
Packit 1fb8d4
{
Packit 1fb8d4
	DVC_OPEN_STATE_NONE = 0,
Packit 1fb8d4
	DVC_OPEN_STATE_SUCCEEDED = 1,
Packit 1fb8d4
	DVC_OPEN_STATE_FAILED = 2,
Packit 1fb8d4
	DVC_OPEN_STATE_CLOSED = 3
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
struct rdp_peer_channel
Packit 1fb8d4
{
Packit 1fb8d4
	WTSVirtualChannelManager* vcm;
Packit 1fb8d4
	freerdp_peer* client;
Packit 1fb8d4
Packit 1fb8d4
	void* extra;
Packit 1fb8d4
	UINT16 index;
Packit 1fb8d4
	UINT32 channelId;
Packit 1fb8d4
	UINT16 channelType;
Packit 1fb8d4
	UINT32 channelFlags;
Packit 1fb8d4
Packit 1fb8d4
	wStream* receiveData;
Packit 1fb8d4
	wMessageQueue* queue;
Packit 1fb8d4
Packit 1fb8d4
	BYTE dvc_open_state;
Packit 1fb8d4
	UINT32 dvc_total_length;
Packit 1fb8d4
	rdpMcsChannel* mcsChannel;
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
struct WTSVirtualChannelManager
Packit 1fb8d4
{
Packit 1fb8d4
	rdpRdp* rdp;
Packit 1fb8d4
	freerdp_peer* client;
Packit 1fb8d4
Packit 1fb8d4
	DWORD SessionId;
Packit 1fb8d4
	wMessageQueue* queue;
Packit 1fb8d4
Packit 1fb8d4
	rdpPeerChannel* drdynvc_channel;
Packit 1fb8d4
	BYTE drdynvc_state;
Packit 1fb8d4
	LONG dvc_channel_id_seq;
Packit 1fb8d4
Packit 1fb8d4
	wArrayList* dynamicVirtualChannels;
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSStartRemoteControlSessionW(
Packit 1fb8d4
    LPWSTR pTargetServerName, ULONG TargetLogonId, BYTE HotkeyVk,
Packit 1fb8d4
    USHORT HotkeyModifiers);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSStartRemoteControlSessionA(
Packit 1fb8d4
    LPSTR pTargetServerName, ULONG TargetLogonId, BYTE HotkeyVk,
Packit 1fb8d4
    USHORT HotkeyModifiers);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSStartRemoteControlSessionExW(
Packit 1fb8d4
    LPWSTR pTargetServerName, ULONG TargetLogonId, BYTE HotkeyVk,
Packit 1fb8d4
    USHORT HotkeyModifiers, DWORD flags);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSStartRemoteControlSessionExA(
Packit 1fb8d4
    LPSTR pTargetServerName, ULONG TargetLogonId, BYTE HotkeyVk,
Packit 1fb8d4
    USHORT HotkeyModifiers, DWORD flags);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSStopRemoteControlSession(ULONG LogonId);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSConnectSessionW(ULONG LogonId,
Packit 1fb8d4
        ULONG TargetLogonId, PWSTR pPassword, BOOL bWait);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSConnectSessionA(ULONG LogonId,
Packit 1fb8d4
        ULONG TargetLogonId, PSTR pPassword, BOOL bWait);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateServersW(LPWSTR pDomainName,
Packit 1fb8d4
        DWORD Reserved, DWORD Version, PWTS_SERVER_INFOW* ppServerInfo, DWORD* pCount);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateServersA(LPSTR pDomainName,
Packit 1fb8d4
        DWORD Reserved, DWORD Version, PWTS_SERVER_INFOA* ppServerInfo, DWORD* pCount);
Packit 1fb8d4
FREERDP_LOCAL HANDLE WINAPI FreeRDP_WTSOpenServerW(LPWSTR pServerName);
Packit 1fb8d4
FREERDP_LOCAL HANDLE WINAPI FreeRDP_WTSOpenServerA(LPSTR pServerName);
Packit 1fb8d4
FREERDP_LOCAL HANDLE WINAPI FreeRDP_WTSOpenServerExW(LPWSTR pServerName);
Packit 1fb8d4
FREERDP_LOCAL HANDLE WINAPI FreeRDP_WTSOpenServerExA(LPSTR pServerName);
Packit 1fb8d4
FREERDP_LOCAL VOID WINAPI FreeRDP_WTSCloseServer(HANDLE hServer);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateSessionsW(HANDLE hServer,
Packit 1fb8d4
        DWORD Reserved, DWORD Version, PWTS_SESSION_INFOW* ppSessionInfo,
Packit 1fb8d4
        DWORD* pCount);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateSessionsA(HANDLE hServer,
Packit 1fb8d4
        DWORD Reserved, DWORD Version, PWTS_SESSION_INFOA* ppSessionInfo,
Packit 1fb8d4
        DWORD* pCount);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateSessionsExW(HANDLE hServer,
Packit 1fb8d4
        DWORD* pLevel, DWORD Filter, PWTS_SESSION_INFO_1W* ppSessionInfo,
Packit 1fb8d4
        DWORD* pCount);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateSessionsExA(HANDLE hServer,
Packit 1fb8d4
        DWORD* pLevel, DWORD Filter, PWTS_SESSION_INFO_1A* ppSessionInfo,
Packit 1fb8d4
        DWORD* pCount);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateProcessesW(HANDLE hServer,
Packit 1fb8d4
        DWORD Reserved, DWORD Version, PWTS_PROCESS_INFOW* ppProcessInfo,
Packit 1fb8d4
        DWORD* pCount);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateProcessesA(HANDLE hServer,
Packit 1fb8d4
        DWORD Reserved, DWORD Version, PWTS_PROCESS_INFOA* ppProcessInfo,
Packit 1fb8d4
        DWORD* pCount);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSTerminateProcess(HANDLE hServer,
Packit 1fb8d4
        DWORD ProcessId, DWORD ExitCode);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSQuerySessionInformationW(HANDLE hServer,
Packit 1fb8d4
        DWORD SessionId, WTS_INFO_CLASS WTSInfoClass, LPWSTR* ppBuffer,
Packit 1fb8d4
        DWORD* pBytesReturned);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSQuerySessionInformationA(HANDLE hServer,
Packit 1fb8d4
        DWORD SessionId, WTS_INFO_CLASS WTSInfoClass, LPSTR* ppBuffer,
Packit 1fb8d4
        DWORD* pBytesReturned);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSQueryUserConfigW(LPWSTR pServerName,
Packit 1fb8d4
        LPWSTR pUserName, WTS_CONFIG_CLASS WTSConfigClass, LPWSTR* ppBuffer,
Packit 1fb8d4
        DWORD* pBytesReturned);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSQueryUserConfigA(LPSTR pServerName,
Packit 1fb8d4
        LPSTR pUserName, WTS_CONFIG_CLASS WTSConfigClass, LPSTR* ppBuffer,
Packit 1fb8d4
        DWORD* pBytesReturned);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSSetUserConfigW(LPWSTR pServerName,
Packit 1fb8d4
        LPWSTR pUserName, WTS_CONFIG_CLASS WTSConfigClass, LPWSTR pBuffer,
Packit 1fb8d4
        DWORD DataLength);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSSetUserConfigA(LPSTR pServerName,
Packit 1fb8d4
        LPSTR pUserName, WTS_CONFIG_CLASS WTSConfigClass, LPSTR pBuffer,
Packit 1fb8d4
        DWORD DataLength);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSSendMessageW(HANDLE hServer,
Packit 1fb8d4
        DWORD SessionId, LPWSTR pTitle, DWORD TitleLength,
Packit 1fb8d4
        LPWSTR pMessage, DWORD MessageLength, DWORD Style,
Packit 1fb8d4
        DWORD Timeout, DWORD* pResponse, BOOL bWait);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSSendMessageA(HANDLE hServer,
Packit 1fb8d4
        DWORD SessionId, LPSTR pTitle, DWORD TitleLength,
Packit 1fb8d4
        LPSTR pMessage, DWORD MessageLength, DWORD Style, DWORD Timeout,
Packit 1fb8d4
        DWORD* pResponse, BOOL bWait);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSDisconnectSession(HANDLE hServer,
Packit 1fb8d4
        DWORD SessionId, BOOL bWait);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSLogoffSession(HANDLE hServer,
Packit 1fb8d4
        DWORD SessionId, BOOL bWait);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSShutdownSystem(HANDLE hServer,
Packit 1fb8d4
        DWORD ShutdownFlag);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSWaitSystemEvent(HANDLE hServer,
Packit 1fb8d4
        DWORD EventMask, DWORD* pEventFlags);
Packit 1fb8d4
FREERDP_LOCAL HANDLE WINAPI FreeRDP_WTSVirtualChannelOpen(HANDLE hServer,
Packit 1fb8d4
        DWORD SessionId, LPSTR pVirtualName);
Packit 1fb8d4
FREERDP_LOCAL HANDLE WINAPI FreeRDP_WTSVirtualChannelOpenEx(DWORD SessionId,
Packit 1fb8d4
        LPSTR pVirtualName, DWORD flags);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSVirtualChannelClose(HANDLE hChannelHandle);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSVirtualChannelRead(HANDLE hChannelHandle,
Packit 1fb8d4
        ULONG TimeOut, PCHAR Buffer, ULONG BufferSize, PULONG pBytesRead);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSVirtualChannelWrite(HANDLE hChannelHandle,
Packit 1fb8d4
        PCHAR Buffer, ULONG Length, PULONG pBytesWritten);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSVirtualChannelPurgeInput(
Packit 1fb8d4
    HANDLE hChannelHandle);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSVirtualChannelPurgeOutput(
Packit 1fb8d4
    HANDLE hChannelHandle);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSVirtualChannelQuery(HANDLE hChannelHandle,
Packit 1fb8d4
        WTS_VIRTUAL_CLASS WtsVirtualClass, PVOID* ppBuffer, DWORD* pBytesReturned);
Packit 1fb8d4
FREERDP_LOCAL VOID WINAPI FreeRDP_WTSFreeMemory(PVOID pMemory);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSFreeMemoryExW(WTS_TYPE_CLASS WTSTypeClass,
Packit 1fb8d4
        PVOID pMemory, ULONG NumberOfEntries);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSFreeMemoryExA(WTS_TYPE_CLASS WTSTypeClass,
Packit 1fb8d4
        PVOID pMemory, ULONG NumberOfEntries);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSRegisterSessionNotification(HWND hWnd,
Packit 1fb8d4
        DWORD dwFlags);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSUnRegisterSessionNotification(HWND hWnd);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSRegisterSessionNotificationEx(
Packit 1fb8d4
    HANDLE hServer, HWND hWnd, DWORD dwFlags);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSUnRegisterSessionNotificationEx(
Packit 1fb8d4
    HANDLE hServer, HWND hWnd);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSQueryUserToken(ULONG SessionId,
Packit 1fb8d4
        PHANDLE phToken);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateProcessesExW(HANDLE hServer,
Packit 1fb8d4
        DWORD* pLevel, DWORD SessionId, LPWSTR* ppProcessInfo, DWORD* pCount);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateProcessesExA(HANDLE hServer,
Packit 1fb8d4
        DWORD* pLevel, DWORD SessionId, LPSTR* ppProcessInfo, DWORD* pCount);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateListenersW(HANDLE hServer,
Packit 1fb8d4
        PVOID pReserved, DWORD Reserved, PWTSLISTENERNAMEW pListeners, DWORD* pCount);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateListenersA(HANDLE hServer,
Packit 1fb8d4
        PVOID pReserved, DWORD Reserved, PWTSLISTENERNAMEA pListeners, DWORD* pCount);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSQueryListenerConfigW(HANDLE hServer,
Packit 1fb8d4
        PVOID pReserved, DWORD Reserved, LPWSTR pListenerName,
Packit 1fb8d4
        PWTSLISTENERCONFIGW pBuffer);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSQueryListenerConfigA(HANDLE hServer,
Packit 1fb8d4
        PVOID pReserved, DWORD Reserved, LPSTR pListenerName,
Packit 1fb8d4
        PWTSLISTENERCONFIGA pBuffer);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSCreateListenerW(HANDLE hServer,
Packit 1fb8d4
        PVOID pReserved, DWORD Reserved,
Packit 1fb8d4
        LPWSTR pListenerName, PWTSLISTENERCONFIGW pBuffer, DWORD flag);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSCreateListenerA(HANDLE hServer,
Packit 1fb8d4
        PVOID pReserved, DWORD Reserved,
Packit 1fb8d4
        LPSTR pListenerName, PWTSLISTENERCONFIGA pBuffer, DWORD flag);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSSetListenerSecurityW(HANDLE hServer,
Packit 1fb8d4
        PVOID pReserved, DWORD Reserved,
Packit 1fb8d4
        LPWSTR pListenerName, SECURITY_INFORMATION SecurityInformation,
Packit 1fb8d4
        PSECURITY_DESCRIPTOR pSecurityDescriptor);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSSetListenerSecurityA(HANDLE hServer,
Packit 1fb8d4
        PVOID pReserved, DWORD Reserved,
Packit 1fb8d4
        LPSTR pListenerName, SECURITY_INFORMATION SecurityInformation,
Packit 1fb8d4
        PSECURITY_DESCRIPTOR pSecurityDescriptor);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSGetListenerSecurityW(HANDLE hServer,
Packit 1fb8d4
        PVOID pReserved, DWORD Reserved,
Packit 1fb8d4
        LPWSTR pListenerName, SECURITY_INFORMATION SecurityInformation,
Packit 1fb8d4
        PSECURITY_DESCRIPTOR pSecurityDescriptor, DWORD nLength,
Packit 1fb8d4
        LPDWORD lpnLengthNeeded);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSGetListenerSecurityA(HANDLE hServer,
Packit 1fb8d4
        PVOID pReserved, DWORD Reserved,
Packit 1fb8d4
        LPSTR pListenerName, SECURITY_INFORMATION SecurityInformation,
Packit 1fb8d4
        PSECURITY_DESCRIPTOR pSecurityDescriptor, DWORD nLength,
Packit 1fb8d4
        LPDWORD lpnLengthNeeded);
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL BOOL CDECL FreeRDP_WTSEnableChildSessions(BOOL bEnable);
Packit 1fb8d4
FREERDP_LOCAL BOOL CDECL FreeRDP_WTSIsChildSessionsEnabled(PBOOL pbEnabled);
Packit 1fb8d4
FREERDP_LOCAL BOOL CDECL FreeRDP_WTSGetChildSessionId(PULONG pSessionId);
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL DWORD WINAPI FreeRDP_WTSGetActiveConsoleSessionId(void);
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSLogoffUser(HANDLE hServer);
Packit 1fb8d4
FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSLogonUser(HANDLE hServer, LPCSTR username,
Packit 1fb8d4
        LPCSTR password, LPCSTR domain);
Packit 1fb8d4
Packit 1fb8d4
#endif /* FREERDP_LIB_CORE_SERVER_H */