| 1 | #ifndef _WTSAPI32_H | 
 
 
 
 
 | 2 | #define _WTSAPI32_H | 
 
 
 
 
 | 3 | #if __GNUC__ >= 3 | 
 
 
 
 
 | 4 | #pragma GCC system_header | 
 
 
 
 
 | 5 | #endif | 
 
 
 
 
 | 6 |  | 
 
 
 
 
 | 7 | #ifdef __cplusplus | 
 
 
 
 
 | 8 | extern "C" { | 
 
 
 
 
 | 9 | #endif | 
 
 
 
 
 | 10 |  | 
 
 
 
 
 | 11 | #if (_WIN32_WINNT >= 0x0501) | 
 
 
 
 
 | 12 | // session notification message | 
 
 
 
 
 | 13 | #define WM_WTSSESSION_CHANGE            0x02B1 | 
 
 
 
 
 | 14 |  | 
 
 
 
 
 | 15 | typedef enum _WTS_INFO_CLASS { | 
 
 
 
 
 | 16 | WTSInitialProgram       = 0, | 
 
 
 
 
 | 17 | WTSApplicationName      = 1, | 
 
 
 
 
 | 18 | WTSWorkingDirectory     = 2, | 
 
 
 
 
 | 19 | WTSOEMId                = 3, | 
 
 
 
 
 | 20 | WTSSessionId            = 4, | 
 
 
 
 
 | 21 | WTSUserName             = 5, | 
 
 
 
 
 | 22 | WTSWinStationName       = 6, | 
 
 
 
 
 | 23 | WTSDomainName           = 7, | 
 
 
 
 
 | 24 | WTSConnectState         = 8, | 
 
 
 
 
 | 25 | WTSClientBuildNumber    = 9, | 
 
 
 
 
 | 26 | WTSClientName           = 10, | 
 
 
 
 
 | 27 | WTSClientDirectory      = 11, | 
 
 
 
 
 | 28 | WTSClientProductId      = 12, | 
 
 
 
 
 | 29 | WTSClientHardwareId     = 13, | 
 
 
 
 
 | 30 | WTSClientAddress        = 14, | 
 
 
 
 
 | 31 | WTSClientDisplay        = 15, | 
 
 
 
 
 | 32 | WTSClientProtocolType   = 16, | 
 
 
 
 
 | 33 | WTSIdleTime             = 17, | 
 
 
 
 
 | 34 | WTSLogonTime            = 18, | 
 
 
 
 
 | 35 | WTSIncomingBytes        = 19, | 
 
 
 
 
 | 36 | WTSOutgoingBytes        = 20, | 
 
 
 
 
 | 37 | WTSIncomingFrames       = 21, | 
 
 
 
 
 | 38 | WTSOutgoingFrames       = 22, | 
 
 
 
 
 | 39 | WTSClientInfo           = 23, | 
 
 
 
 
 | 40 | WTSSessionInfo          = 24 | 
 
 
 
 
 | 41 | } WTS_INFO_CLASS; | 
 
 
 
 
 | 42 |  | 
 
 
 
 
 | 43 | typedef enum _WTS_CONNECTSTATE_CLASS { | 
 
 
 
 
 | 44 | WTSActive, | 
 
 
 
 
 | 45 | WTSConnected, | 
 
 
 
 
 | 46 | WTSConnectQuery, | 
 
 
 
 
 | 47 | WTSShadow, | 
 
 
 
 
 | 48 | WTSDisconnected, | 
 
 
 
 
 | 49 | WTSIdle, | 
 
 
 
 
 | 50 | WTSListen, | 
 
 
 
 
 | 51 | WTSReset, | 
 
 
 
 
 | 52 | WTSDown, | 
 
 
 
 
 | 53 | WTSInit | 
 
 
 
 
 | 54 | } WTS_CONNECTSTATE_CLASS; | 
 
 
 
 
 | 55 |  | 
 
 
 
 
 | 56 | // session notification message flags | 
 
 
 
 
 | 57 | #define WTS_CONSOLE_CONNECT                     0x1 | 
 
 
 
 
 | 58 | #define WTS_CONSOLE_DISCONNECT          0x2 | 
 
 
 
 
 | 59 | #define WTS_REMOTE_CONNECT                      0x3 | 
 
 
 
 
 | 60 | #define WTS_REMOTE_DISCONNECT           0x4 | 
 
 
 
 
 | 61 | #define WTS_SESSION_LOGON                       0x5 | 
 
 
 
 
 | 62 | #define WTS_SESSION_LOGOFF                      0x6 | 
 
 
 
 
 | 63 | #define WTS_SESSION_LOCK                        0x7 | 
 
 
 
 
 | 64 | #define WTS_SESSION_UNLOCK                      0x8 | 
 
 
 
 
 | 65 | #define WTS_SESSION_REMOTE_CONTROL      0x9 | 
 
 
 
 
 | 66 |  | 
 
 
 
 
 | 67 | // WTSRegisterSessionNotifiction flags | 
 
 
 
 
 | 68 | #define NOTIFY_FOR_THIS_SESSION         0 | 
 
 
 
 
 | 69 | #define NOTIFY_FOR_ALL_SESSIONS         1 | 
 
 
 
 
 | 70 |  | 
 
 
 
 
 | 71 | BOOL WINAPI WTSRegisterSessionNotification(HWND hWnd, DWORD dwFlags); | 
 
 
 
 
 | 72 | BOOL WINAPI WTSUnRegisterSessionNotification(HWND hWnd); | 
 
 
 
 
 | 73 | BOOL WINAPI WTSQueryUserToken(ULONG SessionId, PHANDLE pToken); | 
 
 
 
 
 | 74 |  | 
 
 
 
 
 | 75 | #endif /* _WIN32_WINNT >= 0x0501 */ | 
 
 
 
 
 | 76 |  | 
 
 
 
 
 | 77 | #if (_WIN32_WINNT >= 0x0500) | 
 
 
 
 
 | 78 |  | 
 
 
 
 
 | 79 | typedef struct _WTS_SESSION_INFOW { | 
 
 
 
 
 | 80 | DWORD SessionId; | 
 
 
 
 
 | 81 | LPWSTR pWinStationName; | 
 
 
 
 
 | 82 | WTS_CONNECTSTATE_CLASS State; | 
 
 
 
 
 | 83 | } WTS_SESSION_INFOW, *PWTS_SESSION_INFOW; | 
 
 
 
 
 | 84 |  | 
 
 
 
 
 | 85 | typedef struct _WTS_SESSION_INFOA { | 
 
 
 
 
 | 86 | DWORD SessionId; | 
 
 
 
 
 | 87 | LPSTR pWinStationName; | 
 
 
 
 
 | 88 | WTS_CONNECTSTATE_CLASS State; | 
 
 
 
 
 | 89 | } WTS_SESSION_INFOA, *PWTS_SESSION_INFOA; | 
 
 
 
 
 | 90 |  | 
 
 
 
 
 | 91 | #ifdef UNICODE | 
 
 
 
 
 | 92 | #define WTS_SESSION_INFO        WTS_SESSION_INFOW | 
 
 
 
 
 | 93 | #define PWTS_SESSION_INFO       PWTS_SESSION_INFOW | 
 
 
 
 
 | 94 | #else | 
 
 
 
 
 | 95 | #define WTS_SESSION_INFO        WTS_SESSION_INFOA | 
 
 
 
 
 | 96 | #define PWTS_SESSION_INFO       PWTS_SESSION_INFOA | 
 
 
 
 
 | 97 | #endif | 
 
 
 
 
 | 98 |  | 
 
 
 
 
 | 99 | // WTSWaitSystemEvent local server handle | 
 
 
 
 
 | 100 | #define WTS_CURRENT_SERVER_HANDLE 0 | 
 
 
 
 
 | 101 | #define WTS_CURRENT_SESSION       ((DWORD)-1) | 
 
 
 
 
 | 102 |  | 
 
 
 
 
 | 103 | // WTSWaitSystemEvent flags | 
 
 
 
 
 | 104 | #define WTS_EVENT_NONE                          0x00000000 | 
 
 
 
 
 | 105 | #define WTS_EVENT_CREATE                        0x00000001 | 
 
 
 
 
 | 106 | #define WTS_EVENT_DELETE                        0x00000002 | 
 
 
 
 
 | 107 | #define WTS_EVENT_RENAME                        0x00000004 | 
 
 
 
 
 | 108 | #define WTS_EVENT_CONNECT                       0x00000008 | 
 
 
 
 
 | 109 | #define WTS_EVENT_DISCONNECT            0x00000010 | 
 
 
 
 
 | 110 | #define WTS_EVENT_LOGON                         0x00000020 | 
 
 
 
 
 | 111 | #define WTS_EVENT_LOGOFF                        0x00000040 | 
 
 
 
 
 | 112 | #define WTS_EVENT_STATECHANGE           0x00000080 | 
 
 
 
 
 | 113 | #define WTS_EVENT_LICENSE                       0x00000100 | 
 
 
 
 
 | 114 | #define WTS_EVENT_ALL                           0x7FFFFFFF | 
 
 
 
 
 | 115 | #define WTS_EVENT_FLUSH                         0x80000000 | 
 
 
 
 
 | 116 |  | 
 
 
 
 
 | 117 | BOOL WINAPI WTSQuerySessionInformationA(HANDLE hServer, DWORD SessionId, WTS_INFO_CLASS WTSInfoClass, | 
 
 
 
 
 | 118 | LPSTR *ppBuffer, DWORD *pBytesReturned); | 
 
 
 
 
 | 119 | BOOL WINAPI WTSQuerySessionInformationW(HANDLE hServer, DWORD SessionId, WTS_INFO_CLASS WTSInfoClass, | 
 
 
 
 
 | 120 | LPTSTR *ppBuffer, DWORD *pBytesReturned); | 
 
 
 
 
 | 121 | BOOL WINAPI WTSWaitSystemEvent(HANDLE hServer, DWORD EventMask, DWORD* pEventFlags); | 
 
 
 
 
 | 122 | BOOL WINAPI WTSDisconnectSession(HANDLE hServer, DWORD SessionId, BOOL bWait); | 
 
 
 
 
 | 123 | BOOL WINAPI WTSEnumerateSessionsW(HANDLE hServer, DWORD Reserved, DWORD Version, | 
 
 
 
 
 | 124 | PWTS_SESSION_INFOW *ppSessionInfo, | 
 
 
 
 
 | 125 | PDWORD pCount); | 
 
 
 
 
 | 126 | BOOL WINAPI WTSEnumerateSessionsA(HANDLE hServer, DWORD Reserved, DWORD Version, | 
 
 
 
 
 | 127 | PWTS_SESSION_INFOA *ppSessionInfo, | 
 
 
 
 
 | 128 | PDWORD pCount); | 
 
 
 
 
 | 129 | void WINAPI WTSFreeMemory(PVOID pMemory); | 
 
 
 
 
 | 130 |  | 
 
 
 
 
 | 131 | #ifdef UNICODE | 
 
 
 
 
 | 132 | #define WTSEnumerateSessions WTSEnumerateSessionsW | 
 
 
 
 
 | 133 | #define WTSQuerySessionInformation WTSQuerySessionInformationW | 
 
 
 
 
 | 134 | #else | 
 
 
 
 
 | 135 | #define WTSEnumerateSessions WTSEnumerateSessionsA | 
 
 
 
 
 | 136 | #define WTSQuerySessionInformation WTSQuerySessionInformationA | 
 
 
 
 
 | 137 | #endif | 
 
 
 
 
 | 138 |  | 
 
 
 
 
 | 139 | BOOL WTSSendMessageA( | 
 
 
 
 
 | 140 | HANDLE hServer, | 
 
 
 
 
 | 141 | DWORD SessionId, | 
 
 
 
 
 | 142 | LPSTR pTitle, | 
 
 
 
 
 | 143 | DWORD TitleLength, | 
 
 
 
 
 | 144 | LPSTR pMessage, | 
 
 
 
 
 | 145 | DWORD MessageLength, | 
 
 
 
 
 | 146 | DWORD Style, | 
 
 
 
 
 | 147 | DWORD Timeout, | 
 
 
 
 
 | 148 | DWORD *pResponse, | 
 
 
 
 
 | 149 | BOOL bWait | 
 
 
 
 
 | 150 | ); | 
 
 
 
 
 | 151 |  | 
 
 
 
 
 | 152 | BOOL WTSSendMessageW( | 
 
 
 
 
 | 153 | HANDLE hServer, | 
 
 
 
 
 | 154 | DWORD SessionId, | 
 
 
 
 
 | 155 | LPWSTR pTitle, | 
 
 
 
 
 | 156 | DWORD TitleLength, | 
 
 
 
 
 | 157 | LPWSTR pMessage, | 
 
 
 
 
 | 158 | DWORD MessageLength, | 
 
 
 
 
 | 159 | DWORD Style, | 
 
 
 
 
 | 160 | DWORD Timeout, | 
 
 
 
 
 | 161 | DWORD *pResponse, | 
 
 
 
 
 | 162 | BOOL bWait | 
 
 
 
 
 | 163 | ); | 
 
 
 
 
 | 164 |  | 
 
 
 
 
 | 165 | #ifdef UNICODE | 
 
 
 
 
 | 166 | #define WTSSendMessage WTSSendMessageW | 
 
 
 
 
 | 167 | #else | 
 
 
 
 
 | 168 | #define WTSSendMessage WTSSendMessageA | 
 
 
 
 
 | 169 | #endif | 
 
 
 
 
 | 170 |  | 
 
 
 
 
 | 171 | BOOL WTSVirtualChannelClose( | 
 
 
 
 
 | 172 | HANDLE hChannelHandle | 
 
 
 
 
 | 173 | ); | 
 
 
 
 
 | 174 |  | 
 
 
 
 
 | 175 | HANDLE WTSVirtualChannelOpen( | 
 
 
 
 
 | 176 | HANDLE hServer, | 
 
 
 
 
 | 177 | DWORD SessionId, | 
 
 
 
 
 | 178 | LPSTR pVirtualName | 
 
 
 
 
 | 179 | ); | 
 
 
 
 
 | 180 |  | 
 
 
 
 
 | 181 | #if (_WIN32_WINNT >= 0x600) | 
 
 
 
 
 | 182 | HANDLE WTSVirtualChannelOpenEx( | 
 
 
 
 
 | 183 | DWORD SessionId, | 
 
 
 
 
 | 184 | LPSTR pVirtualName, | 
 
 
 
 
 | 185 | DWORD flags | 
 
 
 
 
 | 186 | ); | 
 
 
 
 
 | 187 | #endif | 
 
 
 
 
 | 188 |  | 
 
 
 
 
 | 189 | BOOL WTSVirtualChannelPurgeInput( | 
 
 
 
 
 | 190 | HANDLE hChannelHandle | 
 
 
 
 
 | 191 | ); | 
 
 
 
 
 | 192 |  | 
 
 
 
 
 | 193 | BOOL WTSVirtualChannelPurgeOutput( | 
 
 
 
 
 | 194 | HANDLE hChannelHandle | 
 
 
 
 
 | 195 | ); | 
 
 
 
 
 | 196 |  | 
 
 
 
 
 | 197 | #if (_WIN32_WINNT >= 0x501) | 
 
 
 
 
 | 198 | BOOL WTSVirtualChannelQuery( | 
 
 
 
 
 | 199 | HANDLE hChannelHandle, | 
 
 
 
 
 | 200 | WTS_VIRTUAL_CLASS WtsVirtualClass, | 
 
 
 
 
 | 201 | PVOID *ppBuffer, | 
 
 
 
 
 | 202 | DWORD *pBytesReturned | 
 
 
 
 
 | 203 | ); | 
 
 
 
 
 | 204 | #endif | 
 
 
 
 
 | 205 |  | 
 
 
 
 
 | 206 | BOOL WTSVirtualChannelRead( | 
 
 
 
 
 | 207 | HANDLE hChannelHandle, | 
 
 
 
 
 | 208 | ULONG TimeOut, | 
 
 
 
 
 | 209 | PCHAR Buffer, | 
 
 
 
 
 | 210 | ULONG BufferSize, | 
 
 
 
 
 | 211 | PULONG pBytesRead | 
 
 
 
 
 | 212 | ); | 
 
 
 
 
 | 213 |  | 
 
 
 
 
 | 214 | BOOL WTSVirtualChannelWrite( | 
 
 
 
 
 | 215 | HANDLE hChannelHandle, | 
 
 
 
 
 | 216 | PCHAR Buffer, | 
 
 
 
 
 | 217 | ULONG Length, | 
 
 
 
 
 | 218 | PULONG pBytesWritten | 
 
 
 
 
 | 219 | ); | 
 
 
 
 
 | 220 |  | 
 
 
 
 
 | 221 | #endif /* _WIN32_WINNT >= 0x0500 */ | 
 
 
 
 
 | 222 |  | 
 
 
 
 
 | 223 | #ifdef __cplusplus | 
 
 
 
 
 | 224 | } | 
 
 
 
 
 | 225 | #endif | 
 
 
 
 
 | 226 |  | 
 
 
 
 
 | 227 | #endif /* _WTSAPI32_H */ |