windows-nt/Source/XPSP1/NT/public/internal/termsrv/inc/wstmsg.h
2020-09-26 16:20:57 +08:00

346 lines
10 KiB
C

/*************************************************************************
*
* wstmsg.h
*
* Session Manager Window Station API Messages
*
* copyright notice: Copyright 1998, Microsoft Corporation
*
*
*************************************************************************/
#ifndef WINAPI
#define WINAPI __stdcall
#endif
#define CITRIX_WINSTATIONAPI_VERSION 1
#define WINSTATIONAPI_PORT_MEMORY_SIZE 0x2000 // 8K will hold everything
/*
* Define WinStation control port name
*/
#define WINSTATION_CTRL_PORT_NAME L"\\WinStationCtrlPort"
#define DR_RECONNECT_DEVICE_NAMEW L"\\Device\\Video0"
#define DR_RECONNECT_DEVICE_NAMEA "\\Device\\Video0"
//
// This is the ConnectInfo structure passed at NtConnectPort() time
// so that the server can verify our access rights.
//
typedef struct _WINSTATIONAPI_CONNECT_INFO {
ULONG Version;
ULONG RequestedAccess;
NTSTATUS AcceptStatus;
} WINSTATIONAPI_CONNECT_INFO, *PWINSTATIONAPI_CONNECT_INFO;
/*
* WinStation APIs
* The following APIs are processed by ICASRV or WIN32
* depending on the API. If you make any changes to this
* table, be sure to update the corresponding API dispatch table
* in both ICASRV and in Win32.
*/
typedef enum _WINSTATION_APINUMBER {
SMWinStationCreate,
SMWinStationReset,
SMWinStationDisconnect,
SMWinStationWCharLog,
SMWinStationGetSMCommand,
SMWinStationBrokenConnection,
SMWinStationIcaReplyMessage,
SMWinStationIcaShadowHotkey,
SMWinStationDoConnect,
SMWinStationDoDisconnect,
SMWinStationDoReconnect,
SMWinStationExitWindows,
SMWinStationTerminate,
SMWinStationNtSecurity,
SMWinStationDoMessage,
SMWinStationDoBreakPoint,
SMWinStationThinwireStats,
SMWinStationShadowSetup,
SMWinStationShadowStart,
SMWinStationShadowStop,
SMWinStationShadowCleanup,
SMWinStationPassthruEnable,
SMWinStationPassthruDisable,
SMWinStationSetTimeZone,
SMWinStationInitialProgram,
SMWinStationNtsdDebug,
SMWinStationBroadcastSystemMessage, // API for using Window's BroadcastSystemMessage()
SMWinStationSendWindowMessage, // API for using WIndows's SendMessage()
SMWinStationNotify,
SMWinStationWindowInvalid,
SMWinStationMaxApiNumber
} WINSTATION_APINUMBER;
/*
* API function specific messages for WinStations
*/
typedef struct _WINSTATIONCREATEMSG {
WINSTATIONNAME WinStationName;
ULONG LogonId;
} WINSTATIONCREATEMSG;
typedef struct _WINSTATIONRESETMSG {
ULONG LogonId;
} WINSTATIONRESETMSG;
typedef struct _WINSTATIONDISCONNECTMSG {
ULONG LogonId;
} WINSTATIONDISCONNECTMSG;
typedef struct _WINSTATIONDODISCONNECTMSG {
BOOLEAN ConsoleShadowFlag;
ULONG NotUsed;
} WINSTATIONDODISCONNECTMSG;
typedef struct _WINSTATIONDOCONNECTMSG {
BOOLEAN ConsoleShadowFlag;
BOOLEAN fMouse;
BOOLEAN fINetClient;
BOOLEAN fInitialProgram;
BOOLEAN fHideTitleBar;
BOOLEAN fMaximize;
HANDLE hIcaVideoChannel;
HANDLE hIcaMouseChannel;
HANDLE hIcaKeyboardChannel;
HANDLE hIcaBeepChannel;
HANDLE hIcaCommandChannel;
HANDLE hIcaThinwireChannel;
HANDLE hDisplayChangeEvent;
WINSTATIONNAME WinStationName;
WCHAR DisplayDriverName[9];
WCHAR ProtocolName[9];
WCHAR AudioDriverName[9];
USHORT HRes; // are for dynamically changing
USHORT VRes; // display resolution at reconnection.
USHORT ColorDepth;
USHORT ProtocolType; // PROTOCOL_ICA or PROTOCOL_RDP
BOOLEAN fClientDoubleClickSupport;
BOOLEAN fEnableWindowsKey;
ULONG KeyboardType;
ULONG KeyboardSubType;
ULONG KeyboardFunctionKey;
} WINSTATIONDOCONNECTMSG;
typedef struct _WINSTATIONDORECONNECTMSG {
BOOLEAN fMouse;
BOOLEAN fINetClient;
BOOLEAN fClientDoubleClickSupport;
BOOLEAN fEnableWindowsKey;
BOOLEAN fDynamicReconnect; // Session can resize Display at reconnect
WINSTATIONNAME WinStationName;
WCHAR AudioDriverName[9];
WCHAR DisplayDriverName[9];
WCHAR ProtocolName[9];
USHORT HRes; // are for dynamically changing
USHORT VRes; // display resolution at reconnection.
USHORT ColorDepth;
USHORT ProtocolType; // PROTOCOL_ICA or PROTOCOL_RDP
ULONG KeyboardType;
ULONG KeyboardSubType;
ULONG KeyboardFunctionKey;
} WINSTATIONDORECONNECTMSG;
typedef enum _WINSTATIONNOTIFYEVENT {
WinStation_Notify_Disconnect,
WinStation_Notify_Reconnect,
WinStation_Notify_PreReconnect,
WinStation_Notify_SyncDisconnect,
WinStation_Notify_DisableScrnSaver,
WinStation_Notify_EnableScrnSaver,
WinStation_Notify_PreReconnectDesktopSwitch,
WinStation_Notify_HelpAssistantShadowStart,
WinStation_Notify_HelpAssistantShadowFinish,
WinStation_Notify_DisconnectPipe
} WINSTATIONNOTIFYEVENT;
typedef struct _WINSTATIONWINDOWINVALIDMSG {
ULONG hWnd;
ULONG SessionId;
} WINSTATIONWINDOWINVALIDMSG;
typedef struct _WINSTATIONDONOTIFYMSG {
WINSTATIONNOTIFYEVENT NotifyEvent;
} WINSTATIONDONOTIFYMSG;
typedef struct _WINSTATIONTHINWIRESTATSMSG {
CACHE_STATISTICS Stats;
} WINSTATIONTHINWIRESTATSMSG;
typedef struct _WINSTATIONEXITWINDOWSMSG {
ULONG Flags;
} WINSTATIONEXITWINDOWSMSG;
typedef struct _WINSTATIONSENDMESSAGEMSG {
LPWSTR pTitle;
ULONG TitleLength;
LPWSTR pMessage;
ULONG MessageLength;
ULONG Style;
ULONG Timeout;
ULONG Response;
PULONG pResponse;
BOOLEAN DoNotWait;
HANDLE hEvent;
} WINSTATIONSENDMESSAGEMSG;
typedef struct _WINSTATIONREPLYMESSAGEMSG {
ULONG Response;
PULONG pResponse;
HANDLE hEvent;
} WINSTATIONREPLYMESSAGEMSG;
typedef struct _WINSTATIONTERMINATEMSG {
ULONG NotUsed;
} WINSTATIONTERMINATEMSG;
typedef struct _WINSTATIONNTSDDEBUGMSG {
ULONG LogonId;
LONG ProcessId;
CLIENT_ID ClientId;
PVOID AttachCompletionRoutine;
} WINSTATIONNTSDDEBUGMSG, *PWINSTATIONNTSDDEBUGMSG;
typedef struct _WINSTATIONBREAKPOINTMSG {
BOOLEAN KernelFlag;
} WINSTATIONBREAKPOINTMSG;
typedef struct _WINSTATIONSHADOWSETUPMSG {
ULONG NotUsed;
} WINSTATIONSHADOWSETUPMSG;
typedef struct _WINSTATIONSHADOWSTARTMSG {
PVOID pThinwireData;
ULONG ThinwireDataLength;
} WINSTATIONSHADOWSTARTMSG;
typedef struct _WINSTATIONSHADOWSTOPMSG {
ULONG NotUsed;
} WINSTATIONSHADOWSTOPMSG;
typedef struct _WINSTATIONSHADOWCLEANUPMSG {
PVOID pThinwireData;
ULONG ThinwireDataLength;
} WINSTATIONSHADOWCLEANUPMSG;
typedef struct _WINSTATIONBROKENCONNECTIONMSG {
ULONG Reason; // reason for broken connection (BROKENCLASS)
ULONG Source; // source for broken connection (BROKENSOURCECLASS)
} WINSTATIONBROKENCONNECTIONMSG;
typedef struct _WINSTATIONWCHARLOG {
WCHAR Buffer[100];
} WINSTATIONWCHARLOG;
// This data structure included all params used by window's BroadcastSystemMessage
// Use this APIto send a message to all windows of a winstation.
typedef struct _WINSTATIONBROADCASTSYSTEMMSG {
DWORD dwFlags;
DWORD dwRecipients;
UINT uiMessage;
WPARAM wParam;
LPARAM lParam;
PVOID dataBuffer;
ULONG bufferSize;
HANDLE hEvent;
ULONG Response;
} WINSTATIONBROADCASTSYSTEMMSG;
// This data structure has all the params used by window's standard SendMessage()API.
// Use this API to send a message to a specific hwnd of a winstation ( you need to know that the appropriate hwnd was)
typedef struct _WINSTATIONSENDWINDOWMSG {
HWND hWnd; // handle of destination window
UINT Msg; // message to send
WPARAM wParam; // first message parameter
LPARAM lParam; // second message parameter
PCHAR dataBuffer;
ULONG bufferSize;
HANDLE hEvent;
ULONG Response;
} WINSTATIONSENDWINDOWMSG;
typedef struct _WINSTATIONSETTIMEZONE {
TS_TIME_ZONE_INFORMATION TimeZone;
} WINSTATIONSETTIMEZONE;
typedef struct _WINSTATION_APIMSG {
PORT_MESSAGE h;
ULONG MessageId;
WINSTATION_APINUMBER ApiNumber;
BOOLEAN WaitForReply;
NTSTATUS ReturnedStatus;
union {
WINSTATIONCREATEMSG Create;
WINSTATIONRESETMSG Reset;
WINSTATIONDISCONNECTMSG Disconnect;
WINSTATIONWCHARLOG WCharLog;
WINSTATIONREPLYMESSAGEMSG ReplyMessage;
WINSTATIONDODISCONNECTMSG DoDisconnect;
WINSTATIONDOCONNECTMSG DoConnect;
WINSTATIONEXITWINDOWSMSG ExitWindows;
WINSTATIONTERMINATEMSG Terminate;
WINSTATIONSENDMESSAGEMSG SendMessage;
WINSTATIONBREAKPOINTMSG BreakPoint;
WINSTATIONDORECONNECTMSG DoReconnect;
WINSTATIONTHINWIRESTATSMSG ThinwireStats;
WINSTATIONSHADOWSETUPMSG ShadowSetup;
WINSTATIONSHADOWSTARTMSG ShadowStart;
WINSTATIONSHADOWSTOPMSG ShadowStop;
WINSTATIONSHADOWCLEANUPMSG ShadowCleanup;
WINSTATIONBROKENCONNECTIONMSG Broken;
WINSTATIONNTSDDEBUGMSG NtsdDebug;
WINSTATIONBROADCASTSYSTEMMSG bMsg; // API for Window's BroadcastSystemMessage()
WINSTATIONSENDWINDOWMSG sMsg; // API for WIndows's SendMessage()
WINSTATIONSETTIMEZONE SetTimeZone;
WINSTATIONDONOTIFYMSG DoNotify;
WINSTATIONWINDOWINVALIDMSG WindowInvalid;
} u;
} WINSTATION_APIMSG, *PWINSTATION_APIMSG;
/*
* WinStation Kernel object interface routines. These provide a common
* interface to the Nt* API's for the object that can be used by the
* Session manager, the WinStation client DLL, and the CSRSS subsystem.
*/
/*
* WinStation kernel object root directory name
*/
#define CITRIX_WINSTATION_OBJECT_DIRECTORY L"\\WinStations"
/*
* OpenWinStationObject
*
* Open the WinStation Kernel Object of the given Name.
*
* ENTRY:
* Id
* Id of the WinStation Kernel Object to open. It will be under the path
* of "\WinStations\xxx" in the kernel object name space when
* created.
*
* pHandle (output)
* Pointer to variable to place the handle if the object was created.
*
* EXIT:
* Returns the NTSTATUS code from the operation.
*/
NTSTATUS
OpenWinStationObject( ULONG,
PHANDLE,
ULONG );