803 lines
33 KiB
Plaintext
803 lines
33 KiB
Plaintext
unit EM.WtsApi32;
|
|
|
|
interface
|
|
uses Windows, Messages, SysUtils, Controls;
|
|
// Windows Terminal Server public APIs
|
|
//
|
|
// Copyright 1995-1999, Citrix Systems Inc.
|
|
// Copyright (c) 1997-1999 Microsoft Corporation
|
|
|
|
//==============================================================================
|
|
// Defines
|
|
//==============================================================================
|
|
|
|
//
|
|
// Specifies the current server
|
|
//
|
|
|
|
const
|
|
WTS_CURRENT_SERVER = THandle(0);
|
|
{$EXTERNALSYM WTS_CURRENT_SERVER}
|
|
WTS_CURRENT_SERVER_HANDLE = THandle(0);
|
|
{$EXTERNALSYM WTS_CURRENT_SERVER_HANDLE}
|
|
WTS_CURRENT_SERVER_NAME = '';
|
|
{$EXTERNALSYM WTS_CURRENT_SERVER_NAME}
|
|
|
|
//
|
|
// Specifies the current session (SessionId)
|
|
//
|
|
|
|
WTS_CURRENT_SESSION = DWORD(-1);
|
|
{$EXTERNALSYM WTS_CURRENT_SESSION}
|
|
|
|
//
|
|
// Possible pResponse values from WTSSendMessage()
|
|
//
|
|
|
|
IDTIMEOUT = 32000;
|
|
{$EXTERNALSYM IDTIMEOUT}
|
|
IDASYNC = 32001;
|
|
{$EXTERNALSYM IDASYNC}
|
|
|
|
//
|
|
// Shutdown flags
|
|
//
|
|
|
|
WTS_WSD_LOGOFF = $00000001; // log off all users except
|
|
{$EXTERNALSYM WTS_WSD_LOGOFF} // current user; deletes
|
|
// WinStations (a reboot is
|
|
// required to recreate the
|
|
// WinStations)
|
|
WTS_WSD_SHUTDOWN = $00000002; // shutdown system
|
|
{$EXTERNALSYM WTS_WSD_SHUTDOWN}
|
|
WTS_WSD_REBOOT = $00000004; // shutdown and reboot
|
|
{$EXTERNALSYM WTS_WSD_REBOOT}
|
|
WTS_WSD_POWEROFF = $00000008; // shutdown and power off (on
|
|
{$EXTERNALSYM WTS_WSD_POWEROFF}
|
|
// machines that support power
|
|
// off through software)
|
|
WTS_WSD_FASTREBOOT = $00000010; // reboot without logging users
|
|
{$EXTERNALSYM WTS_WSD_FASTREBOOT} // off or shutting down
|
|
|
|
//==============================================================================
|
|
// WTS_CONNECTSTATE_CLASS - Session connect state
|
|
//==============================================================================
|
|
|
|
type
|
|
_WTS_CONNECTSTATE_CLASS = (
|
|
WTSActive, // User logged on to WinStation
|
|
WTSConnected, // WinStation connected to client
|
|
WTSConnectQuery, // In the process of connecting to client
|
|
WTSShadow, // Shadowing another WinStation
|
|
WTSDisconnected, // WinStation logged on without client
|
|
WTSIdle, // Waiting for client to connect
|
|
WTSListen, // WinStation is listening for connection
|
|
WTSReset, // WinStation is being reset
|
|
WTSDown, // WinStation is down due to error
|
|
WTSInit); // WinStation in initialization
|
|
{$EXTERNALSYM _WTS_CONNECTSTATE_CLASS}
|
|
WTS_CONNECTSTATE_CLASS = _WTS_CONNECTSTATE_CLASS;
|
|
{$EXTERNALSYM WTS_CONNECTSTATE_CLASS}
|
|
TWtsConnectStateClass = WTS_CONNECTSTATE_CLASS;
|
|
|
|
HANDLE = THANDLE;
|
|
PVOID = Pointer;
|
|
|
|
//==============================================================================
|
|
// WTS_SERVER_INFO - returned by WTSEnumerateServers (version 1)
|
|
//==============================================================================
|
|
|
|
//
|
|
// WTSEnumerateServers() returns two variables: pServerInfo and Count.
|
|
// The latter is the number of WTS_SERVER_INFO structures contained in
|
|
// the former. In order to read each server, iterate i from 0 to
|
|
// Count-1 and reference the server name as
|
|
// pServerInfo[i].pServerName; for example:
|
|
//
|
|
// for ( i=0; i < Count; i++ ) {
|
|
// _tprintf( TEXT("%s "), pServerInfo[i].pServerName );
|
|
// }
|
|
//
|
|
// The memory returned looks like the following. P is a pServerInfo
|
|
// pointer, and D is the string data for that pServerInfo:
|
|
//
|
|
// P1 P2 P3 P4 ... Pn D1 D2 D3 D4 ... Dn
|
|
//
|
|
// This makes it easier to iterate the servers, using code similar to
|
|
// the above.
|
|
//
|
|
|
|
type
|
|
PWTS_SERVER_INFOW = ^WTS_SERVER_INFOW;
|
|
{$EXTERNALSYM PWTS_SERVER_INFOW}
|
|
_WTS_SERVER_INFOW = record
|
|
pServerName: LPWSTR; // server name
|
|
end;
|
|
{$EXTERNALSYM _WTS_SERVER_INFOW}
|
|
WTS_SERVER_INFOW = _WTS_SERVER_INFOW;
|
|
{$EXTERNALSYM WTS_SERVER_INFOW}
|
|
TWtsServerInfoW = WTS_SERVER_INFOW;
|
|
PWtsServerInfoW = PWTS_SERVER_INFOW;
|
|
|
|
PWTS_SERVER_INFOA = ^WTS_SERVER_INFOA;
|
|
{$EXTERNALSYM PWTS_SERVER_INFOA}
|
|
_WTS_SERVER_INFOA = record
|
|
pServerName: LPSTR; // server name
|
|
end;
|
|
{$EXTERNALSYM _WTS_SERVER_INFOA}
|
|
WTS_SERVER_INFOA = _WTS_SERVER_INFOA;
|
|
{$EXTERNALSYM WTS_SERVER_INFOA}
|
|
TWtsServerInfoA = WTS_SERVER_INFOA;
|
|
PWtsServerInfoA = PWTS_SERVER_INFOA;
|
|
|
|
{$IFDEF UNICODE}
|
|
WTS_SERVER_INFO = WTS_SERVER_INFOW;
|
|
{$EXTERNALSYM WTS_SERVER_INFO}
|
|
PWTS_SERVER_INFO = PWTS_SERVER_INFOW;
|
|
{$EXTERNALSYM PWTS_SERVER_INFO}
|
|
TWtsServerInfo = TWtsServerInfoW;
|
|
PWtsServerInfo = PWtsServerInfoW;
|
|
{$ELSE}
|
|
WTS_SERVER_INFO = WTS_SERVER_INFOA;
|
|
{$EXTERNALSYM WTS_SERVER_INFO}
|
|
PWTS_SERVER_INFO = PWTS_SERVER_INFOA;
|
|
{$EXTERNALSYM PWTS_SERVER_INFO}
|
|
TWtsServerInfo = TWtsServerInfoA;
|
|
PWtsServerInfo = PWtsServerInfoA;
|
|
{$ENDIF}
|
|
|
|
//==============================================================================
|
|
// WTS_SESSION_INFO - returned by WTSEnumerateSessions (version 1)
|
|
//==============================================================================
|
|
|
|
//
|
|
// WTSEnumerateSessions() returns data in a similar format to the above
|
|
// WTSEnumerateServers(). It returns two variables: pSessionInfo and
|
|
// Count. The latter is the number of WTS_SESSION_INFO structures
|
|
// contained in the former. Iteration is similar, except that there
|
|
// are three parts to each entry, so it would look like this:
|
|
//
|
|
// for ( i=0; i < Count; i++ ) {
|
|
// _tprintf( TEXT("%-5u %-20s %u\n"),
|
|
// pSessionInfo[i].SessionId,
|
|
// pSessionInfo[i].pWinStationName,
|
|
// pSessionInfo[i].State );
|
|
// }
|
|
//
|
|
// The memory returned is also segmented as the above, with all the
|
|
// structures allocated at the start and the string data at the end.
|
|
// We'll use S for the SessionId, P for the pWinStationName pointer
|
|
// and D for the string data, and C for the connect State:
|
|
//
|
|
// S1 P1 C1 S2 P2 C2 S3 P3 C3 S4 P4 C4 ... Sn Pn Cn D1 D2 D3 D4 ... Dn
|
|
//
|
|
// As above, this makes it easier to iterate the sessions.
|
|
//
|
|
|
|
type
|
|
PWTS_SESSION_INFOW = ^WTS_SESSION_INFOW;
|
|
{$EXTERNALSYM PWTS_SESSION_INFOW}
|
|
_WTS_SESSION_INFOW = record
|
|
SessionId: DWORD; // session id
|
|
pWinStationName: LPWSTR; // name of WinStation this session is connected to
|
|
State: WTS_CONNECTSTATE_CLASS; // connection state (see enum)
|
|
end;
|
|
{$EXTERNALSYM _WTS_SESSION_INFOW}
|
|
WTS_SESSION_INFOW = _WTS_SESSION_INFOW;
|
|
{$EXTERNALSYM WTS_SESSION_INFOW}
|
|
TWtsSessionInfoW = WTS_SESSION_INFOW;
|
|
PWtsSessionInfoW = PWTS_SESSION_INFOW;
|
|
|
|
PWTS_SESSION_INFOA = ^WTS_SESSION_INFOA;
|
|
{$EXTERNALSYM PWTS_SESSION_INFOA}
|
|
_WTS_SESSION_INFOA = record
|
|
SessionId: DWORD; // session id
|
|
pWinStationName: LPSTR; // name of WinStation this session is connected to
|
|
State: WTS_CONNECTSTATE_CLASS; // connection state (see enum)
|
|
end;
|
|
{$EXTERNALSYM _WTS_SESSION_INFOA}
|
|
WTS_SESSION_INFOA = _WTS_SESSION_INFOA;
|
|
{$EXTERNALSYM WTS_SESSION_INFOA}
|
|
TWtsSessionInfoA = WTS_SESSION_INFOA;
|
|
PWtsSessionInfoA = PWTS_SESSION_INFOA;
|
|
|
|
{$IFDEF UNICODE}
|
|
WTS_SESSION_INFO = WTS_SESSION_INFOW;
|
|
PWTS_SESSION_INFO = PWTS_SESSION_INFOW;
|
|
TWtsSessionInfo = TWtsSessionInfoW;
|
|
PWtsSessionInfo = PWtsSessionInfoW;
|
|
{$ELSE}
|
|
WTS_SESSION_INFO = WTS_SESSION_INFOA;
|
|
PWTS_SESSION_INFO = PWTS_SESSION_INFOA;
|
|
TWtsSessionInfo = TWtsSessionInfoA;
|
|
PWtsSessionInfo = PWtsSessionInfoA;
|
|
{$ENDIF}
|
|
|
|
//==============================================================================
|
|
// WTS_PROCESS_INFO - returned by WTSEnumerateProcesses (version 1)
|
|
//==============================================================================
|
|
|
|
//
|
|
// WTSEnumerateProcesses() also returns data similar to
|
|
// WTSEnumerateServers(). It returns two variables: pProcessInfo and
|
|
// Count. The latter is the number of WTS_PROCESS_INFO structures
|
|
// contained in the former. Iteration is similar, except that there
|
|
// are four parts to each entry, so it would look like this:
|
|
//
|
|
// for ( i=0; i < Count; i++ ) {
|
|
// GetUserNameFromSid( pProcessInfo[i].pUserSid, UserName,
|
|
// sizeof(UserName) );
|
|
// _tprintf( TEXT("%-5u %-20s %-5u %s\n"),
|
|
// pProcessInfo[i].SessionId,
|
|
// UserName,
|
|
// pProcessInfo[i].ProcessId,
|
|
// pProcessInfo[i].pProcessName );
|
|
// }
|
|
//
|
|
// The memory returned is also segmented as the above, with all the
|
|
// structures allocated at the start and the string data at the end.
|
|
// We'll use S for the SessionId, R for the ProcessId, P for the
|
|
// pProcessName pointer and D for the string data, and U for pUserSid:
|
|
//
|
|
// S1 R1 P1 U1 S2 R2 P2 U2 S3 R3 P3 U3 ... Sn Rn Pn Un D1 D2 D3 ... Dn
|
|
//
|
|
// As above, this makes it easier to iterate the processes.
|
|
//
|
|
|
|
type
|
|
PWTS_PROCESS_INFOW = ^WTS_PROCESS_INFOW;
|
|
{$EXTERNALSYM PWTS_PROCESS_INFOW}
|
|
_WTS_PROCESS_INFOW = record
|
|
SessionId: DWORD; // session id
|
|
ProcessId: DWORD; // process id
|
|
pProcessName: LPWSTR; // name of process
|
|
pUserSid: PSID; // user's SID
|
|
end;
|
|
{$EXTERNALSYM _WTS_PROCESS_INFOW}
|
|
WTS_PROCESS_INFOW = _WTS_PROCESS_INFOW;
|
|
{$EXTERNALSYM WTS_PROCESS_INFOW}
|
|
TWtsProcessInfoW = WTS_PROCESS_INFOW;
|
|
PWtsProcessInfoW = PWTS_PROCESS_INFOW;
|
|
|
|
PWTS_PROCESS_INFOA = ^WTS_PROCESS_INFOA;
|
|
{$EXTERNALSYM PWTS_PROCESS_INFOA}
|
|
_WTS_PROCESS_INFOA = record
|
|
SessionId: DWORD; // session id
|
|
ProcessId: DWORD; // process id
|
|
pProcessName: LPSTR; // name of process
|
|
pUserSid: PSID; // user's SID
|
|
end;
|
|
{$EXTERNALSYM _WTS_PROCESS_INFOA}
|
|
WTS_PROCESS_INFOA = _WTS_PROCESS_INFOA;
|
|
{$EXTERNALSYM WTS_PROCESS_INFOA}
|
|
TWtsProcessInfoA = WTS_PROCESS_INFOA;
|
|
PWtsProcessInfoA = PWTS_PROCESS_INFOA;
|
|
|
|
{$IFDEF UNICODE}
|
|
WTS_PROCESS_INFO = WTS_PROCESS_INFOW;
|
|
{$EXTERNALSYM WTS_PROCESS_INFO}
|
|
PWTS_PROCESS_INFO = PWTS_PROCESS_INFOW;
|
|
{$EXTERNALSYM PWTS_PROCESS_INFO}
|
|
TWtsProcessInfo = TWtsProcessInfoW;
|
|
PWtsProcessInfo = PWtsProcessInfoW;
|
|
{$ELSE}
|
|
WTS_PROCESS_INFO = WTS_PROCESS_INFOA;
|
|
{$EXTERNALSYM WTS_PROCESS_INFO}
|
|
PWTS_PROCESS_INFO = PWTS_PROCESS_INFOA;
|
|
{$EXTERNALSYM PWTS_PROCESS_INFO}
|
|
TWtsProcessInfo = TWtsProcessInfoA;
|
|
PWtsProcessInfo = PWtsProcessInfoA;
|
|
{$ENDIF}
|
|
|
|
//==============================================================================
|
|
// WTS_INFO_CLASS - WTSQuerySessionInformation
|
|
// (See additional typedefs for more info on structures)
|
|
//==============================================================================
|
|
|
|
const
|
|
WTS_PROTOCOL_TYPE_CONSOLE = 0; // Console
|
|
{$EXTERNALSYM WTS_PROTOCOL_TYPE_CONSOLE}
|
|
WTS_PROTOCOL_TYPE_ICA = 1; // ICA Protocol
|
|
{$EXTERNALSYM WTS_PROTOCOL_TYPE_ICA}
|
|
WTS_PROTOCOL_TYPE_RDP = 2; // RDP Protocol
|
|
{$EXTERNALSYM WTS_PROTOCOL_TYPE_RDP}
|
|
|
|
{$IFDEF false}
|
|
type
|
|
_WTS_INFO_CLASS = (
|
|
WTSInitialProgram,
|
|
WTSApplicationName,
|
|
WTSWorkingDirectory,
|
|
WTSOEMId,
|
|
WTSSessionId,
|
|
WTSUserName,
|
|
WTSWinStationName,
|
|
WTSDomainName,
|
|
WTSConnectState,
|
|
WTSClientBuildNumber,
|
|
WTSClientName,
|
|
WTSClientDirectory,
|
|
WTSClientProductId,
|
|
WTSClientHardwareId,
|
|
WTSClientAddress,
|
|
WTSClientDisplay,
|
|
WTSClientProtocolType);
|
|
{$EXTERNALSYM _WTS_INFO_CLASS}
|
|
WTS_INFO_CLASS = _WTS_INFO_CLASS;
|
|
TWtsInfoClass = WTS_INFO_CLASS;
|
|
{$ELSE}
|
|
// xe2에서 위처럼 선언하고 하면.. WTSQuerySessionInformation에서 자꾸 87에러 뱉는다 14_0319 16:26:01 sunk
|
|
const
|
|
WTSInitialProgram = 0;
|
|
WTSApplicationName = 1;
|
|
WTSWorkingDirectory = 2;
|
|
WTSOEMId = 3;
|
|
WTSSessionId = 4;
|
|
WTSUserName = 5;
|
|
WTSWinStationName = 6;
|
|
WTSDomainName = 7;
|
|
WTSConnectState = 8;
|
|
WTSClientBuildNumber = 9;
|
|
WTSClientName = 10;
|
|
WTSClientDirectory = 11;
|
|
WTSClientProductId = 12;
|
|
WTSClientHardwareId = 13;
|
|
WTSClientAddress = 14;
|
|
WTSClientDisplay = 15;
|
|
WTSClientProtocolType = 16;
|
|
type
|
|
WTS_INFO_CLASS = DWORD;
|
|
TWtsInfoClass = WTS_INFO_CLASS;
|
|
{$ENDIF}
|
|
|
|
//==============================================================================
|
|
// WTSQuerySessionInformation - (WTSClientAddress)
|
|
//==============================================================================
|
|
|
|
type
|
|
PWTS_CLIENT_ADDRESS = ^WTS_CLIENT_ADDRESS;
|
|
{$EXTERNALSYM PWTS_CLIENT_ADDRESS}
|
|
_WTS_CLIENT_ADDRESS = record
|
|
AddressFamily: DWORD; // AF_INET, AF_IPX, AF_NETBIOS, AF_UNSPEC
|
|
Address: array [0..19] of BYTE; // client network address
|
|
end;
|
|
{$EXTERNALSYM _WTS_CLIENT_ADDRESS}
|
|
WTS_CLIENT_ADDRESS = _WTS_CLIENT_ADDRESS;
|
|
{$EXTERNALSYM WTS_CLIENT_ADDRESS}
|
|
TWtsClientAddress = WTS_CLIENT_ADDRESS;
|
|
PWtsClientAddress = PWTS_CLIENT_ADDRESS;
|
|
|
|
//==============================================================================
|
|
// WTSQuerySessionInformation - (WTSClientDisplay)
|
|
//==============================================================================
|
|
|
|
type
|
|
PWTS_CLIENT_DISPLAY = ^WTS_CLIENT_DISPLAY;
|
|
{$EXTERNALSYM PWTS_CLIENT_DISPLAY}
|
|
_WTS_CLIENT_DISPLAY = record
|
|
HorizontalResolution: DWORD; // horizontal dimensions, in pixels
|
|
VerticalResolution: DWORD; // vertical dimensions, in pixels
|
|
ColorDepth: DWORD; // 1=16, 2=256, 4=64K, 8=16M
|
|
end;
|
|
{$EXTERNALSYM _WTS_CLIENT_DISPLAY}
|
|
WTS_CLIENT_DISPLAY = _WTS_CLIENT_DISPLAY;
|
|
{$EXTERNALSYM WTS_CLIENT_DISPLAY}
|
|
TWtsClientDisplay = WTS_CLIENT_DISPLAY;
|
|
PWtsClientDisplay = PWTS_CLIENT_DISPLAY;
|
|
|
|
//==============================================================================
|
|
// WTS_CONFIG_CLASS - WTSQueryUserConfig/WTSSetUserConfig
|
|
//==============================================================================
|
|
|
|
type
|
|
_WTS_CONFIG_CLASS = (
|
|
//Initial program settings
|
|
WTSUserConfigInitialProgram, // string returned/expected
|
|
WTSUserConfigWorkingDirectory, // string returned/expected
|
|
WTSUserConfigfInheritInitialProgram, // DWORD returned/expected
|
|
//
|
|
WTSUserConfigfAllowLogonTerminalServer, //DWORD returned/expected
|
|
//Timeout settings
|
|
WTSUserConfigTimeoutSettingsConnections, //DWORD returned/expected
|
|
WTSUserConfigTimeoutSettingsDisconnections, //DWORD returned/expected
|
|
WTSUserConfigTimeoutSettingsIdle, //DWORD returned/expected
|
|
//Client device settings
|
|
WTSUserConfigfDeviceClientDrives, //DWORD returned/expected
|
|
WTSUserConfigfDeviceClientPrinters, //DWORD returned/expected
|
|
WTSUserConfigfDeviceClientDefaultPrinter, //DWORD returned/expected
|
|
//Connection settings
|
|
WTSUserConfigBrokenTimeoutSettings, //DWORD returned/expected
|
|
WTSUserConfigReconnectSettings, //DWORD returned/expected
|
|
//Modem settings
|
|
WTSUserConfigModemCallbackSettings, //DWORD returned/expected
|
|
WTSUserConfigModemCallbackPhoneNumber, // string returned/expected
|
|
//Shadow settings
|
|
WTSUserConfigShadowingSettings, //DWORD returned/expected
|
|
//User Profile settings
|
|
WTSUserConfigTerminalServerProfilePath, // string returned/expected
|
|
//Terminal Server home directory
|
|
WTSUserConfigTerminalServerHomeDir, // string returned/expected
|
|
WTSUserConfigTerminalServerHomeDirDrive, // string returned/expected
|
|
WTSUserConfigfTerminalServerRemoteHomeDir); // DWORD 0:LOCAL 1:REMOTE
|
|
{$EXTERNALSYM _WTS_CONFIG_CLASS}
|
|
WTS_CONFIG_CLASS = _WTS_CONFIG_CLASS;
|
|
TWtsConfigClass = WTS_CONFIG_CLASS;
|
|
|
|
PWTS_USER_CONFIG_SET_NWSERVERW = ^WTS_USER_CONFIG_SET_NWSERVERW;
|
|
{$EXTERNALSYM PWTS_USER_CONFIG_SET_NWSERVERW}
|
|
_WTS_USER_CONFIG_SET_NWSERVERW = record
|
|
pNWServerName: LPWSTR;
|
|
pNWDomainAdminName: LPWSTR;
|
|
pNWDomainAdminPassword: LPWSTR;
|
|
end;
|
|
{$EXTERNALSYM _WTS_USER_CONFIG_SET_NWSERVERW}
|
|
WTS_USER_CONFIG_SET_NWSERVERW = _WTS_USER_CONFIG_SET_NWSERVERW;
|
|
{$EXTERNALSYM WTS_USER_CONFIG_SET_NWSERVERW}
|
|
TWtsUserConfigSetNwserverW = WTS_USER_CONFIG_SET_NWSERVERW;
|
|
PWtsUserConfigSetNwserverW = PWTS_USER_CONFIG_SET_NWSERVERW;
|
|
|
|
PWTS_USER_CONFIG_SET_NWSERVERA = ^WTS_USER_CONFIG_SET_NWSERVERA;
|
|
{$EXTERNALSYM PWTS_USER_CONFIG_SET_NWSERVERA}
|
|
_WTS_USER_CONFIG_SET_NWSERVERA = record
|
|
pNWServerName: LPSTR;
|
|
pNWDomainAdminName: LPSTR;
|
|
pNWDomainAdminPassword: LPSTR;
|
|
end;
|
|
{$EXTERNALSYM _WTS_USER_CONFIG_SET_NWSERVERA}
|
|
WTS_USER_CONFIG_SET_NWSERVERA = _WTS_USER_CONFIG_SET_NWSERVERA;
|
|
{$EXTERNALSYM WTS_USER_CONFIG_SET_NWSERVERA}
|
|
TWtsUserConfigSetNwserverA = WTS_USER_CONFIG_SET_NWSERVERA;
|
|
PWtsUserConfigSetNwserverA = PWTS_USER_CONFIG_SET_NWSERVERA;
|
|
|
|
{$IFDEF UNICODE}
|
|
WTS_USER_CONFIG_SET_NWSERVER = WTS_USER_CONFIG_SET_NWSERVERW;
|
|
{$EXTERNALSYM WTS_USER_CONFIG_SET_NWSERVER}
|
|
PWTS_USER_CONFIG_SET_NWSERVER = PWTS_USER_CONFIG_SET_NWSERVERW;
|
|
{$EXTERNALSYM PWTS_USER_CONFIG_SET_NWSERVER}
|
|
TWtsUserConfigSetNwserver = TWtsUserConfigSetNwserverW;
|
|
PWtsUserConfigSetNwserver = PWtsUserConfigSetNwserverW;
|
|
{$ELSE}
|
|
WTS_USER_CONFIG_SET_NWSERVER = WTS_USER_CONFIG_SET_NWSERVERA;
|
|
{$EXTERNALSYM WTS_USER_CONFIG_SET_NWSERVER}
|
|
PWTS_USER_CONFIG_SET_NWSERVER = PWTS_USER_CONFIG_SET_NWSERVERA;
|
|
{$EXTERNALSYM PWTS_USER_CONFIG_SET_NWSERVER}
|
|
TWtsUserConfigSetNwserver = TWtsUserConfigSetNwserverA;
|
|
PWtsUserConfigSetNwserver = PWtsUserConfigSetNwserverA;
|
|
{$ENDIF}
|
|
|
|
//==============================================================================
|
|
// WTS_EVENT - Event flags for WTSWaitSystemEvent
|
|
//==============================================================================
|
|
|
|
const
|
|
WTS_EVENT_NONE = $00000000; // return no event
|
|
{$EXTERNALSYM WTS_EVENT_NONE}
|
|
WTS_EVENT_CREATE = $00000001; // new WinStation created
|
|
{$EXTERNALSYM WTS_EVENT_CREATE}
|
|
WTS_EVENT_DELETE = $00000002; // existing WinStation deleted
|
|
{$EXTERNALSYM WTS_EVENT_DELETE}
|
|
WTS_EVENT_RENAME = $00000004; // existing WinStation renamed
|
|
{$EXTERNALSYM WTS_EVENT_RENAME}
|
|
WTS_EVENT_CONNECT = $00000008; // WinStation connect to client
|
|
{$EXTERNALSYM WTS_EVENT_CONNECT}
|
|
WTS_EVENT_DISCONNECT = $00000010; // WinStation logged on without client
|
|
{$EXTERNALSYM WTS_EVENT_DISCONNECT}
|
|
WTS_EVENT_LOGON = $00000020; // user logged on to existing WinStation
|
|
{$EXTERNALSYM WTS_EVENT_LOGON}
|
|
WTS_EVENT_LOGOFF = $00000040; // user logged off from existing WinStation
|
|
{$EXTERNALSYM WTS_EVENT_LOGOFF}
|
|
WTS_EVENT_STATECHANGE = $00000080; // WinStation state change
|
|
{$EXTERNALSYM WTS_EVENT_STATECHANGE}
|
|
WTS_EVENT_LICENSE = $00000100; // license state change
|
|
{$EXTERNALSYM WTS_EVENT_LICENSE}
|
|
WTS_EVENT_ALL = $7fffffff; // wait for all event types
|
|
{$EXTERNALSYM WTS_EVENT_ALL}
|
|
WTS_EVENT_FLUSH = DWORD($80000000); // unblock all waiters
|
|
{$EXTERNALSYM WTS_EVENT_FLUSH}
|
|
|
|
//==============================================================================
|
|
// WTS_VIRTUAL_CLASS - WTSVirtualChannelQuery
|
|
//==============================================================================
|
|
|
|
type
|
|
_WTS_VIRTUAL_CLASS = (WTSVirtualClientData); // Virtual channel client module data (C2H data)
|
|
{$EXTERNALSYM _WTS_VIRTUAL_CLASS}
|
|
WTS_VIRTUAL_CLASS = _WTS_VIRTUAL_CLASS;
|
|
{$EXTERNALSYM WTS_VIRTUAL_CLASS}
|
|
TWtsVirtualClass = WTS_VIRTUAL_CLASS;
|
|
|
|
//==============================================================================
|
|
// Windows Terminal Server public APIs
|
|
//==============================================================================
|
|
|
|
function WTSEnumerateServersA(pDomainName: LPSTR; Reserved, Version: DWORD;
|
|
var ppServerInfo: PWTS_SERVER_INFOA; var pCount: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSEnumerateServersA}
|
|
function WTSEnumerateServersW(pDomainName: LPWSTR; Reserved, Version: DWORD;
|
|
var ppServerInfo: PWTS_SERVER_INFOW; var pCount: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSEnumerateServersW}
|
|
|
|
{$IFDEF UNICODE}
|
|
function WTSEnumerateServers(pDomainName: LPWSTR; Reserved, Version: DWORD;
|
|
var ppServerInfo: PWTS_SERVER_INFOW; var pCount: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSEnumerateServers}
|
|
{$ELSE}
|
|
function WTSEnumerateServers(pDomainName: LPSTR; Reserved, Version: DWORD;
|
|
var ppServerInfo: PWTS_SERVER_INFOA; var pCount: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSEnumerateServers}
|
|
{$ENDIF}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function WTSOpenServerA(pServerName: LPSTR): HANDLE; stdcall;
|
|
{$EXTERNALSYM WTSOpenServerA}
|
|
function WTSOpenServerW(pServerName: LPWSTR): HANDLE; stdcall;
|
|
{$EXTERNALSYM WTSOpenServerW}
|
|
|
|
{$IFDEF UNICODE}
|
|
function WTSOpenServer(pServerName: LPWSTR): HANDLE; stdcall;
|
|
{$EXTERNALSYM WTSOpenServer}
|
|
{$ELSE}
|
|
function WTSOpenServer(pServerName: LPSTR): HANDLE; stdcall;
|
|
{$EXTERNALSYM WTSOpenServer}
|
|
{$ENDIF}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
procedure WTSCloseServer(hServer: HANDLE); stdcall;
|
|
{$EXTERNALSYM WTSCloseServer}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function WTSEnumerateSessionsA(hServer: HANDLE; Reserved: DWORD; Version: DWORD;
|
|
var ppSessionInfo: PWTS_SESSION_INFOA; var pCount: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSEnumerateSessionsA}
|
|
function WTSEnumerateSessionsW(hServer: HANDLE; Reserved: DWORD; Version: DWORD;
|
|
var ppSessionInfo: PWTS_SESSION_INFOW; var pCount: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSEnumerateSessionsW}
|
|
|
|
{$IFDEF UNICODE}
|
|
function WTSEnumerateSessions(hServer: HANDLE; Reserved: DWORD; Version: DWORD;
|
|
var ppSessionInfo: PWTS_SESSION_INFOW; var pCount: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSEnumerateSessions}
|
|
{$ELSE}
|
|
function WTSEnumerateSessions(hServer: HANDLE; Reserved: DWORD; Version: DWORD;
|
|
var ppSessionInfo: PWTS_SESSION_INFOA; var pCount: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSEnumerateSessions}
|
|
{$ENDIF}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function WTSEnumerateProcessesA(hServer: HANDLE; Reserved: DWORD; Version: DWORD;
|
|
var ppProcessInfo: PWTS_PROCESS_INFOA; var pCount: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSEnumerateProcessesA}
|
|
function WTSEnumerateProcessesW(hServer: HANDLE; Reserved: DWORD; Version: DWORD;
|
|
var ppProcessInfo: PWTS_PROCESS_INFOW; var pCount: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSEnumerateProcessesW}
|
|
|
|
{$IFDEF UNICODE}
|
|
function WTSEnumerateProcesses(hServer: HANDLE; Reserved: DWORD; Version: DWORD;
|
|
var ppProcessInfo: PWTS_PROCESS_INFOW; var pCount: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSEnumerateProcesses}
|
|
{$ELSE}
|
|
function WTSEnumerateProcesses(hServer: HANDLE; Reserved: DWORD; Version: DWORD;
|
|
var ppProcessInfo: PWTS_PROCESS_INFOA; var pCount: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSEnumerateProcesses}
|
|
{$ENDIF}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function WTSTerminateProcess(hServer: HANDLE; ProcessId, ExitCode: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSTerminateProcess}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function WTSQuerySessionInformationA(hServer: HANDLE; SessionId: DWORD;
|
|
WTSInfoClass: WTS_INFO_CLASS; var ppBuffer: Pointer; var pBytesReturned: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSQuerySessionInformationA}
|
|
function WTSQuerySessionInformationW(hServer: HANDLE; SessionId: DWORD;
|
|
WTSInfoClass: WTS_INFO_CLASS; var ppBuffer: Pointer; var pBytesReturned: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSQuerySessionInformationW}
|
|
|
|
{$IFDEF UNICODE}
|
|
function WTSQuerySessionInformation(hServer: HANDLE; SessionId: DWORD;
|
|
WTSInfoClass: WTS_INFO_CLASS; var ppBuffer: Pointer; var pBytesReturned: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSQuerySessionInformation}
|
|
{$ELSE}
|
|
function WTSQuerySessionInformation(hServer: HANDLE; SessionId: DWORD;
|
|
WTSInfoClass: WTS_INFO_CLASS; var ppBuffer: Pointer; var pBytesReturned: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSQuerySessionInformation}
|
|
{$ENDIF}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function WTSQueryUserConfigA(pServerName, pUserName: LPSTR; WTSConfigClass: WTS_CONFIG_CLASS;
|
|
var ppBuffer: Pointer; var pBytesReturned: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSQueryUserConfigA}
|
|
function WTSQueryUserConfigW(pServerName, pUserName: LPWSTR; WTSConfigClass: WTS_CONFIG_CLASS;
|
|
var ppBuffer: Pointer; var pBytesReturned: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSQueryUserConfigW}
|
|
|
|
{$IFDEF UNICODE}
|
|
function WTSQueryUserConfig(pServerName, pUserName: LPWSTR; WTSConfigClass: WTS_CONFIG_CLASS;
|
|
var ppBuffer: Pointer; var pBytesReturned: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSQueryUserConfig}
|
|
{$ELSE}
|
|
function WTSQueryUserConfig(pServerName, pUserName: LPSTR; WTSConfigClass: WTS_CONFIG_CLASS;
|
|
var ppBuffer: Pointer; var pBytesReturned: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSQueryUserConfig}
|
|
{$ENDIF}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function WTSSetUserConfigA(pServerName, pUserName: LPSTR; WTSConfigClass: WTS_CONFIG_CLASS;
|
|
pBuffer: LPSTR; DataLength: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSSetUserConfigA}
|
|
function WTSSetUserConfigW(pServerName, pUserName: LPWSTR; WTSConfigClass: WTS_CONFIG_CLASS;
|
|
pBuffer: LPWSTR; DataLength: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSSetUserConfigW}
|
|
|
|
{$IFDEF UNICODE}
|
|
function WTSSetUserConfig(pServerName, pUserName: LPWSTR; WTSConfigClass: WTS_CONFIG_CLASS;
|
|
pBuffer: LPWSTR; DataLength: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSSetUserConfig}
|
|
{$ELSE}
|
|
function WTSSetUserConfig(pServerName, pUserName: LPSTR; WTSConfigClass: WTS_CONFIG_CLASS;
|
|
pBuffer: LPSTR; DataLength: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSSetUserConfig}
|
|
{$ENDIF}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function WTSSendMessageA(hServer: HANDLE; SessionId: DWORD; pTitle: LPSTR;
|
|
TitleLength: DWORD; pMessage: LPSTR; MessageLength: DWORD; Style: DWORD;
|
|
Timeout: DWORD; var pResponse: DWORD; bWait: BOOL): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSSendMessageA}
|
|
function WTSSendMessageW(hServer: HANDLE; SessionId: DWORD; pTitle: LPWSTR;
|
|
TitleLength: DWORD; pMessage: LPWSTR; MessageLength: DWORD; Style: DWORD;
|
|
Timeout: DWORD; var pResponse: DWORD; bWait: BOOL): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSSendMessageW}
|
|
|
|
{$IFDEF UNICODE}
|
|
function WTSSendMessage(hServer: HANDLE; SessionId: DWORD; pTitle: LPWSTR;
|
|
TitleLength: DWORD; pMessage: LPWSTR; MessageLength: DWORD; Style: DWORD;
|
|
Timeout: DWORD; var pResponse: DWORD; bWait: BOOL): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSSendMessage}
|
|
{$ELSE}
|
|
function WTSSendMessage(hServer: HANDLE; SessionId: DWORD; pTitle: LPSTR;
|
|
TitleLength: DWORD; pMessage: LPSTR; MessageLength: DWORD; Style: DWORD;
|
|
Timeout: DWORD; var pResponse: DWORD; bWait: BOOL): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSSendMessage}
|
|
{$ENDIF}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function WTSDisconnectSession(hServer: HANDLE; SessionId: DWORD; bWait: BOOL): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSDisconnectSession}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function WTSLogoffSession(hServer: HANDLE; SessionId: DWORD; bWait: BOOL): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSLogoffSession}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function WTSShutdownSystem(hServer: HANDLE; ShutdownFlag: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSShutdownSystem}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function WTSWaitSystemEvent(hServer: HANDLE; EventMask: DWORD;
|
|
var pEventFlags: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSWaitSystemEvent}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function WTSVirtualChannelOpen(hServer: HANDLE; SessionId: DWORD;
|
|
pVirtualName: LPSTR): HANDLE; stdcall;
|
|
{$EXTERNALSYM WTSVirtualChannelOpen}
|
|
|
|
function WTSVirtualChannelClose(hChannelHandle: HANDLE): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSVirtualChannelClose}
|
|
|
|
function WTSVirtualChannelRead(hChannelHandle: HANDLE; TimeOut: ULONG;
|
|
Buffer: PCHAR; BufferSize: ULONG; var pBytesRead: ULONG): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSVirtualChannelRead}
|
|
|
|
function WTSVirtualChannelWrite(hChannelHandle: HANDLE; Buffer: PCHAR;
|
|
Length: ULONG; var pBytesWritten: ULONG): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSVirtualChannelWrite}
|
|
|
|
function WTSVirtualChannelPurgeInput(hChannelHandle: HANDLE): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSVirtualChannelPurgeInput}
|
|
|
|
function WTSVirtualChannelPurgeOutput(hChannelHandle: HANDLE): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSVirtualChannelPurgeOutput}
|
|
|
|
function WTSVirtualChannelQuery(hChannelHandle: HANDLE; VirtualClass: WTS_VIRTUAL_CLASS;
|
|
ppBuffer: PVOID; var pBytesReturned: DWORD): BOOL; stdcall;
|
|
{$EXTERNALSYM WTSVirtualChannelQuery}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
procedure WTSFreeMemory(pMemory: PVOID); stdcall;
|
|
{$EXTERNALSYM WTSFreeMemory}
|
|
|
|
implementation
|
|
|
|
const
|
|
wtsapi = 'wtsapi32.dll';
|
|
|
|
function WTSEnumerateServersA; external wtsapi name 'WTSEnumerateServersA';
|
|
function WTSEnumerateServersW; external wtsapi name 'WTSEnumerateServersW';
|
|
{$IFDEF UNICODE}
|
|
function WTSEnumerateServers; external wtsapi name 'WTSEnumerateServersW';
|
|
{$ELSE}
|
|
function WTSEnumerateServers; external wtsapi name 'WTSEnumerateServersA';
|
|
{$ENDIF}
|
|
function WTSOpenServerA; external wtsapi name 'WTSOpenServerA';
|
|
function WTSOpenServerW; external wtsapi name 'WTSOpenServerW';
|
|
{$IFDEF UNICODE}
|
|
function WTSOpenServer; external wtsapi name 'WTSOpenServerW';
|
|
{$ELSE}
|
|
function WTSOpenServer; external wtsapi name 'WTSOpenServerA';
|
|
{$ENDIF}
|
|
procedure WTSCloseServer; external wtsapi name 'WTSCloseServer';
|
|
function WTSEnumerateSessionsA; external wtsapi name 'WTSEnumerateSessionsA';
|
|
function WTSEnumerateSessionsW; external wtsapi name 'WTSEnumerateSessionsW';
|
|
{$IFDEF UNICODE}
|
|
function WTSEnumerateSessions; external wtsapi name 'WTSEnumerateSessionsW';
|
|
{$ELSE}
|
|
function WTSEnumerateSessions; external wtsapi name 'WTSEnumerateSessionsA';
|
|
{$ENDIF}
|
|
function WTSEnumerateProcessesA; external wtsapi name 'WTSEnumerateProcessesA';
|
|
function WTSEnumerateProcessesW; external wtsapi name 'WTSEnumerateProcessesW';
|
|
{$IFDEF UNICODE}
|
|
function WTSEnumerateProcesses; external wtsapi name 'WTSEnumerateProcessesW';
|
|
{$ELSE}
|
|
function WTSEnumerateProcesses; external wtsapi name 'WTSEnumerateProcessesA';
|
|
{$ENDIF}
|
|
function WTSTerminateProcess; external wtsapi name 'WTSTerminateProcess';
|
|
function WTSQuerySessionInformationA; external wtsapi name 'WTSQuerySessionInformationA';
|
|
function WTSQuerySessionInformationW; external wtsapi name 'WTSQuerySessionInformationW';
|
|
{$IFDEF UNICODE}
|
|
function WTSQuerySessionInformation; external wtsapi name 'WTSQuerySessionInformationW';
|
|
{$ELSE}
|
|
function WTSQuerySessionInformation; external wtsapi name 'WTSQuerySessionInformationA
|
|
{$ENDIF}
|
|
function WTSQueryUserConfigA; external wtsapi name 'WTSQueryUserConfigA';
|
|
function WTSQueryUserConfigW; external wtsapi name 'WTSQueryUserConfigW';
|
|
{$IFDEF UNICODE}
|
|
function WTSQueryUserConfig; external wtsapi name 'WTSQueryUserConfigW';
|
|
{$ELSE}
|
|
function WTSQueryUserConfig; external wtsapi name 'WTSQueryUserConfigA;
|
|
{$ENDIF}
|
|
function WTSSetUserConfigA; external wtsapi name 'WTSSetUserConfigA';
|
|
function WTSSetUserConfigW; external wtsapi name 'WTSSetUserConfigW';
|
|
{$IFDEF UNICODE}
|
|
function WTSSetUserConfig; external wtsapi name 'WTSSetUserConfigW';
|
|
{$ELSE}
|
|
function WTSSetUserConfig; external wtsapi name 'WTSSetUserConfigA;
|
|
{$ENDIF}
|
|
function WTSSendMessageA; external wtsapi name 'WTSSendMessageA';
|
|
function WTSSendMessageW; external wtsapi name 'WTSSendMessageW';
|
|
{$IFDEF UNICODE}
|
|
function WTSSendMessage; external wtsapi name 'WTSSendMessageW'
|
|
{$ELSE}
|
|
function WTSSendMessage; external wtsapi name 'WTSSendMessageA';
|
|
{$ENDIF}
|
|
function WTSDisconnectSession; external wtsapi name 'WTSDisconnectSession';
|
|
function WTSLogoffSession; external wtsapi name 'WTSLogoffSession';
|
|
function WTSShutdownSystem; external wtsapi name 'WTSShutdownSystem';
|
|
function WTSWaitSystemEvent; external wtsapi name 'WTSWaitSystemEvent';
|
|
function WTSVirtualChannelOpen; external wtsapi name 'WTSVirtualChannelOpen';
|
|
function WTSVirtualChannelClose; external wtsapi name 'WTSVirtualChannelClose';
|
|
function WTSVirtualChannelRead; external wtsapi name 'WTSVirtualChannelRead';
|
|
function WTSVirtualChannelWrite; external wtsapi name 'WTSVirtualChannelWrite';
|
|
function WTSVirtualChannelPurgeInput; external wtsapi name 'WTSVirtualChannelPurgeInput';
|
|
function WTSVirtualChannelPurgeOutput; external wtsapi name 'WTSVirtualChannelPurgeOutput';
|
|
function WTSVirtualChannelQuery; external wtsapi name 'WTSVirtualChannelQuery';
|
|
procedure WTSFreeMemory; external wtsapi name 'WTSFreeMemory';
|
|
|
|
end.
|