home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 May / PCFMay2001.iso / Xenon / C++ / FreeCommandLineTools.exe / Include / wtsapi32.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-31  |  20.7 KB  |  730 lines

  1. /*********************************************************************
  2. *
  3. * WTSAPI32.H
  4. *
  5. *   Windows Terminal Server public APIs
  6. *
  7. *   Copyright 1995-1999, Citrix Systems Inc.
  8. *   Copyright (c) 1997-1999  Microsoft Corporation
  9. *
  10. **********************************************************************/
  11.  
  12. #ifndef _INC_WTSAPI
  13. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  14. #define _INC_WTSAPI
  15.  
  16. #if _MSC_VER > 1000
  17. #pragma once
  18. #endif
  19.  
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23.  
  24.  
  25. /*===================================================================
  26. ==   Defines
  27. =====================================================================*/
  28.  
  29. /*
  30.  *  Specifies the current server
  31.  */
  32. #define WTS_CURRENT_SERVER         ((HANDLE)NULL)
  33. #define WTS_CURRENT_SERVER_HANDLE  ((HANDLE)NULL)
  34. #define WTS_CURRENT_SERVER_NAME    (NULL)
  35.  
  36. /*
  37.  *  Specifies the current session (SessionId)
  38.  */
  39. #define WTS_CURRENT_SESSION ((DWORD)-1)
  40.  
  41. /*
  42.  *  Possible pResponse values from WTSSendMessage()
  43.  */
  44. #ifndef IDTIMEOUT
  45. #define IDTIMEOUT 32000
  46. #endif
  47. #ifndef IDASYNC
  48. #define IDASYNC   32001
  49. #endif
  50.  
  51. /*
  52.  *  Shutdown flags
  53.  */
  54. #define WTS_WSD_LOGOFF      0x00000001  // log off all users except
  55.                                         // current user; deletes
  56.                                         // WinStations (a reboot is
  57.                                         // required to recreate the
  58.                                         // WinStations)
  59. #define WTS_WSD_SHUTDOWN    0x00000002  // shutdown system
  60. #define WTS_WSD_REBOOT      0x00000004  // shutdown and reboot
  61. #define WTS_WSD_POWEROFF    0x00000008  // shutdown and power off (on
  62.                                         // machines that support power
  63.                                         // off through software)
  64. #define WTS_WSD_FASTREBOOT  0x00000010  // reboot without logging users
  65.                                         // off or shutting down
  66.  
  67.  
  68. /*===================================================================
  69. ==   WTS_CONNECTSTATE_CLASS - Session connect state
  70. =====================================================================*/
  71.  
  72. typedef enum _WTS_CONNECTSTATE_CLASS {
  73.     WTSActive,              // User logged on to WinStation
  74.     WTSConnected,           // WinStation connected to client
  75.     WTSConnectQuery,        // In the process of connecting to client
  76.     WTSShadow,              // Shadowing another WinStation
  77.     WTSDisconnected,        // WinStation logged on without client
  78.     WTSIdle,                // Waiting for client to connect
  79.     WTSListen,              // WinStation is listening for connection
  80.     WTSReset,               // WinStation is being reset
  81.     WTSDown,                // WinStation is down due to error
  82.     WTSInit,                // WinStation in initialization
  83. } WTS_CONNECTSTATE_CLASS;
  84.  
  85.  
  86. /*=====================================================================
  87. ==   WTS_SERVER_INFO - returned by WTSEnumerateServers (version 1)
  88. =====================================================================*/
  89.  
  90. /*
  91.  *  WTSEnumerateServers() returns two variables: pServerInfo and Count.
  92.  *  The latter is the number of WTS_SERVER_INFO structures contained in
  93.  *  the former.  In order to read each server, iterate i from 0 to
  94.  *  Count-1 and reference the server name as
  95.  *  pServerInfo[i].pServerName; for example:
  96.  *
  97.  *  for ( i=0; i < Count; i++ ) {
  98.  *      _tprintf( TEXT("%s "), pServerInfo[i].pServerName );
  99.  *  }
  100.  *
  101.  *  The memory returned looks like the following.  P is a pServerInfo
  102.  *  pointer, and D is the string data for that pServerInfo:
  103.  *
  104.  *  P1 P2 P3 P4 ... Pn D1 D2 D3 D4 ... Dn
  105.  *
  106.  *  This makes it easier to iterate the servers, using code similar to
  107.  *  the above.
  108.  */
  109.  
  110. typedef struct _WTS_SERVER_INFOW {
  111.     LPWSTR pServerName;    // server name
  112. } WTS_SERVER_INFOW, * PWTS_SERVER_INFOW;
  113.  
  114. typedef struct _WTS_SERVER_INFOA {
  115.     LPSTR pServerName;     // server name
  116. } WTS_SERVER_INFOA, * PWTS_SERVER_INFOA;
  117.  
  118. #ifdef UNICODE
  119. #define WTS_SERVER_INFO  WTS_SERVER_INFOW
  120. #define PWTS_SERVER_INFO PWTS_SERVER_INFOW
  121. #else
  122. #define WTS_SERVER_INFO  WTS_SERVER_INFOA
  123. #define PWTS_SERVER_INFO PWTS_SERVER_INFOA
  124. #endif
  125.  
  126.  
  127. /*=====================================================================
  128. ==   WTS_SESSION_INFO - returned by WTSEnumerateSessions (version 1)
  129. =====================================================================*/
  130.  
  131. /*
  132.  *  WTSEnumerateSessions() returns data in a similar format to the above
  133.  *  WTSEnumerateServers().  It returns two variables: pSessionInfo and
  134.  *  Count.  The latter is the number of WTS_SESSION_INFO structures
  135.  *  contained in the former.  Iteration is similar, except that there
  136.  *  are three parts to each entry, so it would look like this:
  137.  *
  138.  *  for ( i=0; i < Count; i++ ) {
  139.  *      _tprintf( TEXT("%-5u  %-20s  %u\n"),
  140.                   pSessionInfo[i].SessionId,
  141.  *                pSessionInfo[i].pWinStationName,
  142.  *                pSessionInfo[i].State );
  143.  *  }
  144.  *
  145.  *  The memory returned is also segmented as the above, with all the
  146.  *  structures allocated at the start and the string data at the end.
  147.  *  We'll use S for the SessionId, P for the pWinStationName pointer
  148.  *  and D for the string data, and C for the connect State:
  149.  *
  150.  *  S1 P1 C1 S2 P2 C2 S3 P3 C3 S4 P4 C4 ... Sn Pn Cn D1 D2 D3 D4 ... Dn
  151.  *
  152.  *  As above, this makes it easier to iterate the sessions.
  153.  */
  154.  
  155. typedef struct _WTS_SESSION_INFOW {
  156.     DWORD SessionId;             // session id
  157.     LPWSTR pWinStationName;      // name of WinStation this session is
  158.                                  // connected to
  159.     WTS_CONNECTSTATE_CLASS State; // connection state (see enum)
  160. } WTS_SESSION_INFOW, * PWTS_SESSION_INFOW;
  161.  
  162. typedef struct _WTS_SESSION_INFOA {
  163.     DWORD SessionId;             // session id
  164.     LPSTR pWinStationName;       // name of WinStation this session is
  165.                                  // connected to
  166.     WTS_CONNECTSTATE_CLASS State; // connection state (see enum)
  167. } WTS_SESSION_INFOA, * PWTS_SESSION_INFOA;
  168.  
  169.  
  170. #ifdef UNICODE
  171. #define WTS_SESSION_INFO  WTS_SESSION_INFOW
  172. #define PWTS_SESSION_INFO PWTS_SESSION_INFOW
  173. #else
  174. #define WTS_SESSION_INFO  WTS_SESSION_INFOA
  175. #define PWTS_SESSION_INFO PWTS_SESSION_INFOA
  176. #endif
  177.  
  178.  
  179. /*=====================================================================
  180. ==   WTS_PROCESS_INFO - returned by WTSEnumerateProcesses (version 1)
  181. =====================================================================*/
  182.  
  183. /*
  184.  *  WTSEnumerateProcesses() also returns data similar to
  185.  *  WTSEnumerateServers().  It returns two variables: pProcessInfo and
  186.  *  Count.  The latter is the number of WTS_PROCESS_INFO structures
  187.  *  contained in the former.  Iteration is similar, except that there
  188.  *  are four parts to each entry, so it would look like this:
  189.  *
  190.  *  for ( i=0; i < Count; i++ ) {
  191.  *      GetUserNameFromSid( pProcessInfo[i].pUserSid, UserName,
  192.  *                          sizeof(UserName) );
  193.  *      _tprintf( TEXT("%-5u  %-20s  %-5u  %s\n"),
  194.  *              pProcessInfo[i].SessionId,
  195.  *              UserName,
  196.  *              pProcessInfo[i].ProcessId,
  197.  *              pProcessInfo[i].pProcessName );
  198.  *  }
  199.  *
  200.  *  The memory returned is also segmented as the above, with all the
  201.  *  structures allocated at the start and the string data at the end.
  202.  *  We'll use S for the SessionId, R for the ProcessId, P for the
  203.  *  pProcessName pointer and D for the string data, and U for pUserSid:
  204.  *
  205.  *  S1 R1 P1 U1 S2 R2 P2 U2 S3 R3 P3 U3 ... Sn Rn Pn Un D1 D2 D3 ... Dn
  206.  *
  207.  *  As above, this makes it easier to iterate the processes.
  208.  */
  209.  
  210. typedef struct _WTS_PROCESS_INFOW {
  211.     DWORD SessionId;     // session id
  212.     DWORD ProcessId;     // process id
  213.     LPWSTR pProcessName; // name of process
  214.     PSID pUserSid;       // user's SID
  215. } WTS_PROCESS_INFOW, * PWTS_PROCESS_INFOW;
  216.  
  217. typedef struct _WTS_PROCESS_INFOA {
  218.     DWORD SessionId;     // session id
  219.     DWORD ProcessId;     // process id
  220.     LPSTR pProcessName;  // name of process
  221.     PSID pUserSid;       // user's SID
  222. } WTS_PROCESS_INFOA, * PWTS_PROCESS_INFOA;
  223.  
  224. #ifdef UNICODE
  225. #define WTS_PROCESS_INFO  WTS_PROCESS_INFOW
  226. #define PWTS_PROCESS_INFO PWTS_PROCESS_INFOW
  227. #else
  228. #define WTS_PROCESS_INFO  WTS_PROCESS_INFOA
  229. #define PWTS_PROCESS_INFO PWTS_PROCESS_INFOA
  230. #endif
  231.  
  232.  
  233. /*=====================================================================
  234. ==   WTS_INFO_CLASS - WTSQuerySessionInformation
  235. ==    (See additional typedefs for more info on structures)
  236. =====================================================================*/
  237.  
  238. #define WTS_PROTOCOL_TYPE_CONSOLE         0    // Console
  239. #define WTS_PROTOCOL_TYPE_ICA             1    // ICA Protocol
  240. #define WTS_PROTOCOL_TYPE_RDP             2    // RDP Protocol
  241.  
  242. typedef enum _WTS_INFO_CLASS {
  243.     WTSInitialProgram,
  244.     WTSApplicationName,
  245.     WTSWorkingDirectory,
  246.     WTSOEMId,
  247.     WTSSessionId,
  248.     WTSUserName,
  249.     WTSWinStationName,
  250.     WTSDomainName,
  251.     WTSConnectState,
  252.     WTSClientBuildNumber,
  253.     WTSClientName,
  254.     WTSClientDirectory,
  255.     WTSClientProductId,
  256.     WTSClientHardwareId,
  257.     WTSClientAddress,
  258.     WTSClientDisplay,
  259.     WTSClientProtocolType,
  260. } WTS_INFO_CLASS;
  261.  
  262.  
  263. /*=====================================================================
  264. ==   WTSQuerySessionInformation - (WTSClientAddress)
  265. =====================================================================*/
  266.  
  267. typedef struct _WTS_CLIENT_ADDRESS {
  268.     DWORD AddressFamily;  // AF_INET, AF_IPX, AF_NETBIOS, AF_UNSPEC
  269.     BYTE  Address[20];    // client network address
  270. } WTS_CLIENT_ADDRESS, * PWTS_CLIENT_ADDRESS;
  271.  
  272.  
  273. /*=====================================================================
  274. ==   WTSQuerySessionInformation - (WTSClientDisplay)
  275. =====================================================================*/
  276.  
  277. typedef struct _WTS_CLIENT_DISPLAY {
  278.     DWORD HorizontalResolution; // horizontal dimensions, in pixels
  279.     DWORD VerticalResolution;   // vertical dimensions, in pixels
  280.     DWORD ColorDepth;           // 1=16, 2=256, 4=64K, 8=16M
  281. } WTS_CLIENT_DISPLAY, * PWTS_CLIENT_DISPLAY;
  282.  
  283.  
  284. /*=====================================================================
  285. ==   WTS_CONFIG_CLASS - WTSQueryUserConfig/WTSSetUserConfig
  286. =====================================================================*/
  287.  
  288.  
  289. typedef enum _WTS_CONFIG_CLASS {
  290.     //Initial program settings
  291.     WTSUserConfigInitialProgram,             // string returned/expected
  292.     WTSUserConfigWorkingDirectory,           // string returned/expected
  293.     WTSUserConfigfInheritInitialProgram,     // DWORD returned/expected
  294.     //
  295.     WTSUserConfigfAllowLogonTerminalServer,     //DWORD returned/expected
  296.     //Timeout settings
  297.     WTSUserConfigTimeoutSettingsConnections,     //DWORD returned/expected
  298.     WTSUserConfigTimeoutSettingsDisconnections, //DWORD returned/expected
  299.     WTSUserConfigTimeoutSettingsIdle,             //DWORD returned/expected
  300.     //Client device settings
  301.     WTSUserConfigfDeviceClientDrives,          //DWORD returned/expected
  302.     WTSUserConfigfDeviceClientPrinters,         //DWORD returned/expected
  303.     WTSUserConfigfDeviceClientDefaultPrinter,   //DWORD returned/expected
  304.     //Connection settings
  305.     WTSUserConfigBrokenTimeoutSettings,         //DWORD returned/expected
  306.     WTSUserConfigReconnectSettings,             //DWORD returned/expected
  307.     //Modem settings
  308.     WTSUserConfigModemCallbackSettings,         //DWORD returned/expected
  309.     WTSUserConfigModemCallbackPhoneNumber,      // string returned/expected
  310.     //Shadow settings
  311.     WTSUserConfigShadowingSettings,             //DWORD returned/expected
  312.     //User Profile settings
  313.     WTSUserConfigTerminalServerProfilePath,     // string returned/expected
  314.     //Terminal Server home directory
  315.     WTSUserConfigTerminalServerHomeDir,       // string returned/expected
  316.     WTSUserConfigTerminalServerHomeDirDrive,    // string returned/expected
  317.     WTSUserConfigfTerminalServerRemoteHomeDir,  // DWORD 0:LOCAL 1:REMOTE
  318.  
  319. } WTS_CONFIG_CLASS;
  320.  
  321.  
  322. typedef struct _WTS_USER_CONFIG_SET_NWSERVERW {
  323.     LPWSTR pNWServerName;
  324.     LPWSTR pNWDomainAdminName;
  325.     LPWSTR pNWDomainAdminPassword;
  326. } WTS_USER_CONFIG_SET_NWSERVERW, * PWTS_USER_CONFIG_SET_NWSERVERW;
  327.  
  328.  
  329. typedef struct _WTS_USER_CONFIG_SET_NWSERVERA {
  330.     LPSTR pNWServerName;
  331.     LPSTR pNWDomainAdminName;
  332.     LPSTR pNWDomainAdminPassword;
  333. } WTS_USER_CONFIG_SET_NWSERVERA, * PWTS_USER_CONFIG_SET_NWSERVERA;
  334.  
  335.  
  336. #ifdef UNICODE
  337. #define WTS_USER_CONFIG_SET_NWSERVER   WTS_USER_CONFIG_SET_NWSERVERW
  338. #define PWTS_USER_CONFIG_SET_NWSERVER  PWTS_USER_CONFIG_SET_NWSERVERW
  339. #else
  340. #define WTS_USER_CONFIG_SET_NWSERVER  WTS_USER_CONFIG_SET_NWSERVERA
  341. #define PWTS_USER_CONFIG_SET_NWSERVER  PWTS_USER_CONFIG_SET_NWSERVERA
  342. #endif
  343. /*=====================================================================
  344. ==   WTS_EVENT - Event flags for WTSWaitSystemEvent
  345. =====================================================================*/
  346.  
  347. #define WTS_EVENT_NONE         0x00000000 // return no event
  348. #define WTS_EVENT_CREATE       0x00000001 // new WinStation created
  349. #define WTS_EVENT_DELETE       0x00000002 // existing WinStation deleted
  350. #define WTS_EVENT_RENAME       0x00000004 // existing WinStation renamed
  351. #define WTS_EVENT_CONNECT      0x00000008 // WinStation connect to client
  352. #define WTS_EVENT_DISCONNECT   0x00000010 // WinStation logged on without
  353.                                           //     client
  354. #define WTS_EVENT_LOGON        0x00000020 // user logged on to existing
  355.                                           //     WinStation
  356. #define WTS_EVENT_LOGOFF       0x00000040 // user logged off from
  357.                                           //     existing WinStation
  358. #define WTS_EVENT_STATECHANGE  0x00000080 // WinStation state change
  359. #define WTS_EVENT_LICENSE      0x00000100 // license state change
  360. #define WTS_EVENT_ALL          0x7fffffff // wait for all event types
  361. #define WTS_EVENT_FLUSH        0x80000000 // unblock all waiters
  362.  
  363. /*=====================================================================
  364. ==   WTS_VIRTUAL_CLASS - WTSVirtualChannelQuery
  365. =====================================================================*/
  366. typedef enum _WTS_VIRTUAL_CLASS {
  367.     WTSVirtualClientData,  // Virtual channel client module data
  368.                            //     (C2H data)
  369. } WTS_VIRTUAL_CLASS;
  370.  
  371.  
  372. /*=====================================================================
  373. ==   Windows Terminal Server public APIs
  374. =====================================================================*/
  375.  
  376. BOOL
  377. WINAPI
  378. WTSEnumerateServersW(
  379.     IN LPWSTR pDomainName,
  380.     IN DWORD Reserved,
  381.     IN DWORD Version,
  382.     OUT PWTS_SERVER_INFOW * ppServerInfo,
  383.     OUT DWORD * pCount
  384.     );
  385.  
  386. BOOL
  387. WINAPI
  388. WTSEnumerateServersA(
  389.     IN LPSTR pDomainName,
  390.     IN DWORD Reserved,
  391.     IN DWORD Version,
  392.     OUT PWTS_SERVER_INFOA * ppServerInfo,
  393.     OUT DWORD * pCount
  394.     );
  395.  
  396. #ifdef UNICODE
  397. #define WTSEnumerateServers WTSEnumerateServersW
  398. #else
  399. #define WTSEnumerateServers WTSEnumerateServersA
  400. #endif
  401.  
  402. /*------------------------------------------------*/
  403.  
  404. HANDLE
  405. WINAPI
  406. WTSOpenServerW(
  407.     IN LPWSTR pServerName
  408.     );
  409.  
  410. HANDLE
  411. WINAPI
  412. WTSOpenServerA(
  413.     IN LPSTR pServerName
  414.     );
  415.  
  416. #ifdef UNICODE
  417. #define WTSOpenServer WTSOpenServerW
  418. #else
  419. #define WTSOpenServer WTSOpenServerA
  420. #endif
  421.  
  422. /*------------------------------------------------*/
  423.  
  424. VOID
  425. WINAPI
  426. WTSCloseServer(
  427.     IN HANDLE hServer
  428.     );
  429.  
  430. /*------------------------------------------------*/
  431.  
  432. BOOL
  433. WINAPI
  434. WTSEnumerateSessionsW(
  435.     IN HANDLE hServer,
  436.     IN DWORD Reserved,
  437.     IN DWORD Version,
  438.     OUT PWTS_SESSION_INFOW * ppSessionInfo,
  439.     OUT DWORD * pCount
  440.     );
  441.  
  442. BOOL
  443. WINAPI
  444. WTSEnumerateSessionsA(
  445.     IN HANDLE hServer,
  446.     IN DWORD Reserved,
  447.     IN DWORD Version,
  448.     OUT PWTS_SESSION_INFOA * ppSessionInfo,
  449.     OUT DWORD * pCount
  450.     );
  451.  
  452. #ifdef UNICODE
  453. #define WTSEnumerateSessions WTSEnumerateSessionsW
  454. #else
  455. #define WTSEnumerateSessions WTSEnumerateSessionsA
  456. #endif
  457.  
  458. /*------------------------------------------------*/
  459.  
  460. BOOL
  461. WINAPI
  462. WTSEnumerateProcessesW(
  463.     IN HANDLE hServer,
  464.     IN DWORD Reserved,
  465.     IN DWORD Version,
  466.     OUT PWTS_PROCESS_INFOW * ppProcessInfo,
  467.     OUT DWORD * pCount
  468.     );
  469.  
  470. BOOL
  471. WINAPI
  472. WTSEnumerateProcessesA(
  473.     IN HANDLE hServer,
  474.     IN DWORD Reserved,
  475.     IN DWORD Version,
  476.     OUT PWTS_PROCESS_INFOA * ppProcessInfo,
  477.     OUT DWORD * pCount
  478.     );
  479.  
  480. #ifdef UNICODE
  481. #define WTSEnumerateProcesses WTSEnumerateProcessesW
  482. #else
  483. #define WTSEnumerateProcesses WTSEnumerateProcessesA
  484. #endif
  485.  
  486. /*------------------------------------------------*/
  487.  
  488. BOOL
  489. WINAPI
  490. WTSTerminateProcess(
  491.     IN HANDLE hServer,
  492.     IN DWORD ProcessId,
  493.     IN DWORD ExitCode
  494.     );
  495.  
  496.  
  497. /*------------------------------------------------*/
  498.  
  499. BOOL
  500. WINAPI
  501. WTSQuerySessionInformationW(
  502.     IN HANDLE hServer,
  503.     IN DWORD SessionId,
  504.     IN WTS_INFO_CLASS WTSInfoClass,
  505.     OUT LPWSTR * ppBuffer,
  506.     OUT DWORD * pBytesReturned
  507.     );
  508.  
  509. BOOL
  510. WINAPI
  511. WTSQuerySessionInformationA(
  512.     IN HANDLE hServer,
  513.     IN DWORD SessionId,
  514.     IN WTS_INFO_CLASS WTSInfoClass,
  515.     OUT LPSTR * ppBuffer,
  516.     OUT DWORD * pBytesReturned
  517.     );
  518.  
  519. #ifdef UNICODE
  520. #define WTSQuerySessionInformation WTSQuerySessionInformationW
  521. #else
  522. #define WTSQuerySessionInformation WTSQuerySessionInformationA
  523. #endif
  524.  
  525. /*------------------------------------------------*/
  526.  
  527. BOOL
  528. WINAPI
  529. WTSQueryUserConfigW(
  530.     IN LPWSTR pServerName,
  531.     IN LPWSTR pUserName,
  532.     IN WTS_CONFIG_CLASS WTSConfigClass,
  533.     OUT LPWSTR * ppBuffer,
  534.     OUT DWORD * pBytesReturned
  535.     );
  536.  
  537. BOOL
  538. WINAPI
  539. WTSQueryUserConfigA(
  540.     IN LPSTR pServerName,
  541.     IN LPSTR pUserName,
  542.     IN WTS_CONFIG_CLASS WTSConfigClass,
  543.     OUT LPSTR * ppBuffer,
  544.     OUT DWORD * pBytesReturned
  545.     );
  546.  
  547. #ifdef UNICODE
  548. #define WTSQueryUserConfig WTSQueryUserConfigW
  549. #else
  550. #define WTSQueryUserConfig WTSQueryUserConfigA
  551. #endif
  552.  
  553. /*------------------------------------------------*/
  554.  
  555. BOOL
  556. WINAPI
  557. WTSSetUserConfigW(
  558.     IN LPWSTR pServerName,
  559.     IN LPWSTR pUserName,
  560.     IN WTS_CONFIG_CLASS WTSConfigClass,
  561.     IN LPWSTR pBuffer,
  562.     IN DWORD DataLength
  563.     );
  564.  
  565. BOOL
  566. WINAPI
  567. WTSSetUserConfigA(
  568.     IN LPSTR pServerName,
  569.     IN LPSTR pUserName,
  570.     IN WTS_CONFIG_CLASS WTSConfigClass,
  571.     IN LPSTR pBuffer,
  572.     IN DWORD DataLength
  573.     );
  574.  
  575. #ifdef UNICODE
  576. #define WTSSetUserConfig WTSSetUserConfigW
  577. #else
  578. #define WTSSetUserConfig WTSSetUserConfigA
  579. #endif
  580.  
  581. /*------------------------------------------------*/
  582.  
  583. BOOL
  584. WINAPI
  585. WTSSendMessageW(
  586.     IN HANDLE hServer,
  587.     IN DWORD SessionId,
  588.     IN LPWSTR pTitle,
  589.     IN DWORD TitleLength,
  590.     IN LPWSTR pMessage,
  591.     IN DWORD MessageLength,
  592.     IN DWORD Style,
  593.     IN DWORD Timeout,
  594.     OUT DWORD * pResponse,
  595.     IN BOOL bWait
  596.     );
  597.  
  598. BOOL
  599. WINAPI
  600. WTSSendMessageA(
  601.     IN HANDLE hServer,
  602.     IN DWORD SessionId,
  603.     IN LPSTR pTitle,
  604.     IN DWORD TitleLength,
  605.     IN LPSTR pMessage,
  606.     IN DWORD MessageLength,
  607.     IN DWORD Style,
  608.     IN DWORD Timeout,
  609.     OUT DWORD * pResponse,
  610.     IN BOOL bWait
  611.     );
  612.  
  613. #ifdef UNICODE
  614. #define WTSSendMessage WTSSendMessageW
  615. #else
  616. #define WTSSendMessage WTSSendMessageA
  617. #endif
  618.  
  619. /*------------------------------------------------*/
  620.  
  621. BOOL
  622. WINAPI
  623. WTSDisconnectSession(
  624.     IN HANDLE hServer,
  625.     IN DWORD SessionId,
  626.     IN BOOL bWait
  627.     );
  628.  
  629. /*------------------------------------------------*/
  630.  
  631. BOOL
  632. WINAPI
  633. WTSLogoffSession(
  634.     IN HANDLE hServer,
  635.     IN DWORD SessionId,
  636.     IN BOOL bWait
  637.     );
  638.  
  639. /*------------------------------------------------*/
  640.  
  641. BOOL
  642. WINAPI
  643. WTSShutdownSystem(
  644.     IN HANDLE hServer,
  645.     IN DWORD ShutdownFlag
  646.     );
  647.  
  648. /*------------------------------------------------*/
  649.  
  650. BOOL
  651. WINAPI
  652. WTSWaitSystemEvent(
  653.     IN HANDLE hServer,
  654.     IN DWORD EventMask,
  655.     OUT DWORD * pEventFlags
  656.     );
  657.  
  658. /*------------------------------------------------*/
  659.  
  660. HANDLE
  661. WINAPI
  662. WTSVirtualChannelOpen(
  663.     IN HANDLE hServer,
  664.     IN DWORD SessionId,
  665.     IN LPSTR pVirtualName   /* ascii name */
  666.     );
  667.  
  668. BOOL
  669. WINAPI
  670. WTSVirtualChannelClose(
  671.     IN HANDLE hChannelHandle
  672.     );
  673.  
  674. BOOL
  675. WINAPI
  676. WTSVirtualChannelRead(
  677.     IN HANDLE hChannelHandle,
  678.     IN ULONG TimeOut,
  679.     OUT PCHAR Buffer,
  680.     IN ULONG BufferSize,
  681.     OUT PULONG pBytesRead
  682.     );
  683.  
  684. BOOL
  685. WINAPI
  686. WTSVirtualChannelWrite(
  687.     IN HANDLE hChannelHandle,
  688.     IN PCHAR Buffer,
  689.     IN ULONG Length,
  690.     OUT PULONG pBytesWritten
  691.     );
  692.  
  693. BOOL
  694. WINAPI
  695. WTSVirtualChannelPurgeInput(
  696.     IN HANDLE hChannelHandle
  697.     );
  698.  
  699. BOOL
  700. WINAPI
  701. WTSVirtualChannelPurgeOutput(
  702.     IN HANDLE hChannelHandle
  703.     );
  704.  
  705.  
  706. BOOL
  707. WINAPI
  708. WTSVirtualChannelQuery(
  709.     IN HANDLE hChannelHandle,
  710.     IN WTS_VIRTUAL_CLASS,
  711.     OUT PVOID *ppBuffer,
  712.     OUT DWORD *pBytesReturned
  713.     );
  714.  
  715. /*------------------------------------------------*/
  716.  
  717. VOID
  718. WINAPI
  719. WTSFreeMemory(
  720.     IN PVOID pMemory
  721.     );
  722.  
  723. #ifdef __cplusplus
  724. }
  725. #endif
  726.  
  727. #pragma option pop /*P_O_Pop*/
  728. #endif  /* !_INC_WTSAPI */
  729.  
  730.