jwawtsapi32.pas 43 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300
  1. {******************************************************************************}
  2. { }
  3. { Terminal Services API interface Unit for Object Pascal }
  4. { }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
  6. { Corporation. All Rights Reserved. }
  7. { }
  8. { The original file is: wtsapi32.h, released June 2000. The original Pascal }
  9. { code is: WtsApi32.pas, released December 2000. The initial developer of the }
  10. { Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
  11. { }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
  13. { Marcel van Brakel. All Rights Reserved. }
  14. { }
  15. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
  16. { }
  17. { You may retrieve the latest version of this file at the Project JEDI }
  18. { APILIB home page, located at http://jedi-apilib.sourceforge.net }
  19. { }
  20. { The contents of this file are used with permission, subject to the Mozilla }
  21. { Public License Version 1.1 (the "License"); you may not use this file except }
  22. { in compliance with the License. You may obtain a copy of the License at }
  23. { http://www.mozilla.org/MPL/MPL-1.1.html }
  24. { }
  25. { Software distributed under the License is distributed on an "AS IS" basis, }
  26. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  27. { the specific language governing rights and limitations under the License. }
  28. { }
  29. { Alternatively, the contents of this file may be used under the terms of the }
  30. { GNU Lesser General Public License (the "LGPL License"), in which case the }
  31. { provisions of the LGPL License are applicable instead of those above. }
  32. { If you wish to allow use of your version of this file only under the terms }
  33. { of the LGPL License and not to allow others to use your version of this file }
  34. { under the MPL, indicate your decision by deleting the provisions above and }
  35. { replace them with the notice and other provisions required by the LGPL }
  36. { License. If you do not delete the provisions above, a recipient may use }
  37. { your version of this file under either the MPL or the LGPL License. }
  38. { }
  39. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  40. { }
  41. {******************************************************************************}
  42. // $Id: JwaWtsApi32.pas,v 1.10 2005/09/06 16:36:51 marquardt Exp $
  43. unit JwaWtsApi32;
  44. {$I jediapilib.inc}
  45. interface
  46. uses
  47. JwaWindows;
  48. // Windows Terminal Server public APIs
  49. //
  50. // Copyright 1995-1999, Citrix Systems Inc.
  51. // Copyright (c) 1997-1999 Microsoft Corporation
  52. //==============================================================================
  53. // Defines
  54. //==============================================================================
  55. //
  56. // Specifies the current server
  57. //
  58. const
  59. WTS_CURRENT_SERVER = HANDLE(0);
  60. {$EXTERNALSYM WTS_CURRENT_SERVER}
  61. WTS_CURRENT_SERVER_HANDLE = HANDLE(0);
  62. {$EXTERNALSYM WTS_CURRENT_SERVER_HANDLE}
  63. WTS_CURRENT_SERVER_NAME = '';
  64. {$EXTERNALSYM WTS_CURRENT_SERVER_NAME}
  65. //
  66. // Specifies the current session (SessionId)
  67. //
  68. WTS_CURRENT_SESSION = DWORD(-1);
  69. {$EXTERNALSYM WTS_CURRENT_SESSION}
  70. //
  71. // Possible pResponse values from WTSSendMessage()
  72. //
  73. IDTIMEOUT = 32000;
  74. {$EXTERNALSYM IDTIMEOUT}
  75. IDASYNC = 32001;
  76. {$EXTERNALSYM IDASYNC}
  77. //
  78. // Shutdown flags
  79. //
  80. WTS_WSD_LOGOFF = $00000001; // log off all users except
  81. {$EXTERNALSYM WTS_WSD_LOGOFF} // current user; deletes
  82. // WinStations (a reboot is
  83. // required to recreate the
  84. // WinStations)
  85. WTS_WSD_SHUTDOWN = $00000002; // shutdown system
  86. {$EXTERNALSYM WTS_WSD_SHUTDOWN}
  87. WTS_WSD_REBOOT = $00000004; // shutdown and reboot
  88. {$EXTERNALSYM WTS_WSD_REBOOT}
  89. WTS_WSD_POWEROFF = $00000008; // shutdown and power off (on
  90. {$EXTERNALSYM WTS_WSD_POWEROFF}
  91. // machines that support power
  92. // off through software)
  93. WTS_WSD_FASTREBOOT = $00000010; // reboot without logging users
  94. {$EXTERNALSYM WTS_WSD_FASTREBOOT} // off or shutting down
  95. //==============================================================================
  96. // WTS_CONNECTSTATE_CLASS - Session connect state
  97. //==============================================================================
  98. type
  99. _WTS_CONNECTSTATE_CLASS = (
  100. WTSActive, // User logged on to WinStation
  101. WTSConnected, // WinStation connected to client
  102. WTSConnectQuery, // In the process of connecting to client
  103. WTSShadow, // Shadowing another WinStation
  104. WTSDisconnected, // WinStation logged on without client
  105. WTSIdle, // Waiting for client to connect
  106. WTSListen, // WinStation is listening for connection
  107. WTSReset, // WinStation is being reset
  108. WTSDown, // WinStation is down due to error
  109. WTSInit); // WinStation in initialization
  110. {$EXTERNALSYM _WTS_CONNECTSTATE_CLASS}
  111. WTS_CONNECTSTATE_CLASS = _WTS_CONNECTSTATE_CLASS;
  112. {$EXTERNALSYM WTS_CONNECTSTATE_CLASS}
  113. TWtsConnectStateClass = WTS_CONNECTSTATE_CLASS;
  114. //==============================================================================
  115. // WTS_SERVER_INFO - returned by WTSEnumerateServers (version 1)
  116. //==============================================================================
  117. //
  118. // WTSEnumerateServers() returns two variables: pServerInfo and Count.
  119. // The latter is the number of WTS_SERVER_INFO structures contained in
  120. // the former. In order to read each server, iterate i from 0 to
  121. // Count-1 and reference the server name as
  122. // pServerInfo[i].pServerName; for example:
  123. //
  124. // for ( i=0; i < Count; i++ ) {
  125. // _tprintf( TEXT("%s "), pServerInfo[i].pServerName );
  126. // }
  127. //
  128. // The memory returned looks like the following. P is a pServerInfo
  129. // pointer, and D is the string data for that pServerInfo:
  130. //
  131. // P1 P2 P3 P4 ... Pn D1 D2 D3 D4 ... Dn
  132. //
  133. // This makes it easier to iterate the servers, using code similar to
  134. // the above.
  135. //
  136. type
  137. PWTS_SERVER_INFOW = ^WTS_SERVER_INFOW;
  138. {$EXTERNALSYM PWTS_SERVER_INFOW}
  139. _WTS_SERVER_INFOW = record
  140. pServerName: LPWSTR; // server name
  141. end;
  142. {$EXTERNALSYM _WTS_SERVER_INFOW}
  143. WTS_SERVER_INFOW = _WTS_SERVER_INFOW;
  144. {$EXTERNALSYM WTS_SERVER_INFOW}
  145. TWtsServerInfoW = WTS_SERVER_INFOW;
  146. PWtsServerInfoW = PWTS_SERVER_INFOW;
  147. PWTS_SERVER_INFOA = ^WTS_SERVER_INFOA;
  148. {$EXTERNALSYM PWTS_SERVER_INFOA}
  149. _WTS_SERVER_INFOA = record
  150. pServerName: LPSTR; // server name
  151. end;
  152. {$EXTERNALSYM _WTS_SERVER_INFOA}
  153. WTS_SERVER_INFOA = _WTS_SERVER_INFOA;
  154. {$EXTERNALSYM WTS_SERVER_INFOA}
  155. TWtsServerInfoA = WTS_SERVER_INFOA;
  156. PWtsServerInfoA = PWTS_SERVER_INFOA;
  157. {$IFDEF UNICODE}
  158. WTS_SERVER_INFO = WTS_SERVER_INFOW;
  159. {$EXTERNALSYM WTS_SERVER_INFO}
  160. PWTS_SERVER_INFO = PWTS_SERVER_INFOW;
  161. {$EXTERNALSYM PWTS_SERVER_INFO}
  162. TWtsServerInfo = TWtsServerInfoW;
  163. PWtsServerInfo = PWtsServerInfoW;
  164. {$ELSE}
  165. WTS_SERVER_INFO = WTS_SERVER_INFOA;
  166. {$EXTERNALSYM WTS_SERVER_INFO}
  167. PWTS_SERVER_INFO = PWTS_SERVER_INFOA;
  168. {$EXTERNALSYM PWTS_SERVER_INFO}
  169. TWtsServerInfo = TWtsServerInfoA;
  170. PWtsServerInfo = PWtsServerInfoA;
  171. {$ENDIF UNICODE}
  172. //==============================================================================
  173. // WTS_SESSION_INFO - returned by WTSEnumerateSessions (version 1)
  174. //==============================================================================
  175. //
  176. // WTSEnumerateSessions() returns data in a similar format to the above
  177. // WTSEnumerateServers(). It returns two variables: pSessionInfo and
  178. // Count. The latter is the number of WTS_SESSION_INFO structures
  179. // contained in the former. Iteration is similar, except that there
  180. // are three parts to each entry, so it would look like this:
  181. //
  182. // for ( i=0; i < Count; i++ ) {
  183. // _tprintf( TEXT("%-5u %-20s %u\n"),
  184. // pSessionInfo[i].SessionId,
  185. // pSessionInfo[i].pWinStationName,
  186. // pSessionInfo[i].State );
  187. // }
  188. //
  189. // The memory returned is also segmented as the above, with all the
  190. // structures allocated at the start and the string data at the end.
  191. // We'll use S for the SessionId, P for the pWinStationName pointer
  192. // and D for the string data, and C for the connect State:
  193. //
  194. // S1 P1 C1 S2 P2 C2 S3 P3 C3 S4 P4 C4 ... Sn Pn Cn D1 D2 D3 D4 ... Dn
  195. //
  196. // As above, this makes it easier to iterate the sessions.
  197. //
  198. type
  199. PWTS_SESSION_INFOW = ^WTS_SESSION_INFOW;
  200. {$EXTERNALSYM PWTS_SESSION_INFOW}
  201. _WTS_SESSION_INFOW = record
  202. SessionId: DWORD; // session id
  203. pWinStationName: LPWSTR; // name of WinStation this session is connected to
  204. State: WTS_CONNECTSTATE_CLASS; // connection state (see enum)
  205. end;
  206. {$EXTERNALSYM _WTS_SESSION_INFOW}
  207. WTS_SESSION_INFOW = _WTS_SESSION_INFOW;
  208. {$EXTERNALSYM WTS_SESSION_INFOW}
  209. TWtsSessionInfoW = WTS_SESSION_INFOW;
  210. PWtsSessionInfoW = PWTS_SESSION_INFOW;
  211. PWTS_SESSION_INFOA = ^WTS_SESSION_INFOA;
  212. {$EXTERNALSYM PWTS_SESSION_INFOA}
  213. _WTS_SESSION_INFOA = record
  214. SessionId: DWORD; // session id
  215. pWinStationName: LPSTR; // name of WinStation this session is connected to
  216. State: WTS_CONNECTSTATE_CLASS; // connection state (see enum)
  217. end;
  218. {$EXTERNALSYM _WTS_SESSION_INFOA}
  219. WTS_SESSION_INFOA = _WTS_SESSION_INFOA;
  220. {$EXTERNALSYM WTS_SESSION_INFOA}
  221. TWtsSessionInfoA = WTS_SESSION_INFOA;
  222. PWtsSessionInfoA = PWTS_SESSION_INFOA;
  223. {$IFDEF UNICODE}
  224. WTS_SESSION_INFO = WTS_SESSION_INFOW;
  225. PWTS_SESSION_INFO = PWTS_SESSION_INFOW;
  226. TWtsSessionInfo = TWtsSessionInfoW;
  227. PWtsSessionInfo = PWtsSessionInfoW;
  228. {$ELSE}
  229. WTS_SESSION_INFO = WTS_SESSION_INFOA;
  230. PWTS_SESSION_INFO = PWTS_SESSION_INFOA;
  231. TWtsSessionInfo = TWtsSessionInfoA;
  232. PWtsSessionInfo = PWtsSessionInfoA;
  233. {$ENDIF UNICODE}
  234. //==============================================================================
  235. // WTS_PROCESS_INFO - returned by WTSEnumerateProcesses (version 1)
  236. //==============================================================================
  237. //
  238. // WTSEnumerateProcesses() also returns data similar to
  239. // WTSEnumerateServers(). It returns two variables: pProcessInfo and
  240. // Count. The latter is the number of WTS_PROCESS_INFO structures
  241. // contained in the former. Iteration is similar, except that there
  242. // are four parts to each entry, so it would look like this:
  243. //
  244. // for ( i=0; i < Count; i++ ) {
  245. // GetUserNameFromSid( pProcessInfo[i].pUserSid, UserName,
  246. // sizeof(UserName) );
  247. // _tprintf( TEXT("%-5u %-20s %-5u %s\n"),
  248. // pProcessInfo[i].SessionId,
  249. // UserName,
  250. // pProcessInfo[i].ProcessId,
  251. // pProcessInfo[i].pProcessName );
  252. // }
  253. //
  254. // The memory returned is also segmented as the above, with all the
  255. // structures allocated at the start and the string data at the end.
  256. // We'll use S for the SessionId, R for the ProcessId, P for the
  257. // pProcessName pointer and D for the string data, and U for pUserSid:
  258. //
  259. // S1 R1 P1 U1 S2 R2 P2 U2 S3 R3 P3 U3 ... Sn Rn Pn Un D1 D2 D3 ... Dn
  260. //
  261. // As above, this makes it easier to iterate the processes.
  262. //
  263. type
  264. PWTS_PROCESS_INFOW = ^WTS_PROCESS_INFOW;
  265. {$EXTERNALSYM PWTS_PROCESS_INFOW}
  266. _WTS_PROCESS_INFOW = record
  267. SessionId: DWORD; // session id
  268. ProcessId: DWORD; // process id
  269. pProcessName: LPWSTR; // name of process
  270. pUserSid: PSID; // user's SID
  271. end;
  272. {$EXTERNALSYM _WTS_PROCESS_INFOW}
  273. WTS_PROCESS_INFOW = _WTS_PROCESS_INFOW;
  274. {$EXTERNALSYM WTS_PROCESS_INFOW}
  275. TWtsProcessInfoW = WTS_PROCESS_INFOW;
  276. PWtsProcessInfoW = PWTS_PROCESS_INFOW;
  277. PWTS_PROCESS_INFOA = ^WTS_PROCESS_INFOA;
  278. {$EXTERNALSYM PWTS_PROCESS_INFOA}
  279. _WTS_PROCESS_INFOA = record
  280. SessionId: DWORD; // session id
  281. ProcessId: DWORD; // process id
  282. pProcessName: LPSTR; // name of process
  283. pUserSid: PSID; // user's SID
  284. end;
  285. {$EXTERNALSYM _WTS_PROCESS_INFOA}
  286. WTS_PROCESS_INFOA = _WTS_PROCESS_INFOA;
  287. {$EXTERNALSYM WTS_PROCESS_INFOA}
  288. TWtsProcessInfoA = WTS_PROCESS_INFOA;
  289. PWtsProcessInfoA = PWTS_PROCESS_INFOA;
  290. {$IFDEF UNICODE}
  291. WTS_PROCESS_INFO = WTS_PROCESS_INFOW;
  292. {$EXTERNALSYM WTS_PROCESS_INFO}
  293. PWTS_PROCESS_INFO = PWTS_PROCESS_INFOW;
  294. {$EXTERNALSYM PWTS_PROCESS_INFO}
  295. TWtsProcessInfo = TWtsProcessInfoW;
  296. PWtsProcessInfo = PWtsProcessInfoW;
  297. {$ELSE}
  298. WTS_PROCESS_INFO = WTS_PROCESS_INFOA;
  299. {$EXTERNALSYM WTS_PROCESS_INFO}
  300. PWTS_PROCESS_INFO = PWTS_PROCESS_INFOA;
  301. {$EXTERNALSYM PWTS_PROCESS_INFO}
  302. TWtsProcessInfo = TWtsProcessInfoA;
  303. PWtsProcessInfo = PWtsProcessInfoA;
  304. {$ENDIF UNICODE}
  305. //==============================================================================
  306. // WTS_INFO_CLASS - WTSQuerySessionInformation
  307. // (See additional typedefs for more info on structures)
  308. //==============================================================================
  309. const
  310. WTS_PROTOCOL_TYPE_CONSOLE = 0; // Console
  311. {$EXTERNALSYM WTS_PROTOCOL_TYPE_CONSOLE}
  312. WTS_PROTOCOL_TYPE_ICA = 1; // ICA Protocol
  313. {$EXTERNALSYM WTS_PROTOCOL_TYPE_ICA}
  314. WTS_PROTOCOL_TYPE_RDP = 2; // RDP Protocol
  315. {$EXTERNALSYM WTS_PROTOCOL_TYPE_RDP}
  316. type
  317. _WTS_INFO_CLASS = (
  318. WTSInitialProgram,
  319. WTSApplicationName,
  320. WTSWorkingDirectory,
  321. WTSOEMId,
  322. WTSSessionId,
  323. WTSUserName,
  324. WTSWinStationName,
  325. WTSDomainName,
  326. WTSConnectState,
  327. WTSClientBuildNumber,
  328. WTSClientName,
  329. WTSClientDirectory,
  330. WTSClientProductId,
  331. WTSClientHardwareId,
  332. WTSClientAddress,
  333. WTSClientDisplay,
  334. WTSClientProtocolType);
  335. {$EXTERNALSYM _WTS_INFO_CLASS}
  336. WTS_INFO_CLASS = _WTS_INFO_CLASS;
  337. TWtsInfoClass = WTS_INFO_CLASS;
  338. //==============================================================================
  339. // WTSQuerySessionInformation - (WTSClientAddress)
  340. //==============================================================================
  341. type
  342. PWTS_CLIENT_ADDRESS = ^WTS_CLIENT_ADDRESS;
  343. {$EXTERNALSYM PWTS_CLIENT_ADDRESS}
  344. _WTS_CLIENT_ADDRESS = record
  345. AddressFamily: DWORD; // AF_INET, AF_IPX, AF_NETBIOS, AF_UNSPEC
  346. Address: array [0..19] of BYTE; // client network address
  347. end;
  348. {$EXTERNALSYM _WTS_CLIENT_ADDRESS}
  349. WTS_CLIENT_ADDRESS = _WTS_CLIENT_ADDRESS;
  350. {$EXTERNALSYM WTS_CLIENT_ADDRESS}
  351. TWtsClientAddress = WTS_CLIENT_ADDRESS;
  352. PWtsClientAddress = PWTS_CLIENT_ADDRESS;
  353. //==============================================================================
  354. // WTSQuerySessionInformation - (WTSClientDisplay)
  355. //==============================================================================
  356. type
  357. PWTS_CLIENT_DISPLAY = ^WTS_CLIENT_DISPLAY;
  358. {$EXTERNALSYM PWTS_CLIENT_DISPLAY}
  359. _WTS_CLIENT_DISPLAY = record
  360. HorizontalResolution: DWORD; // horizontal dimensions, in pixels
  361. VerticalResolution: DWORD; // vertical dimensions, in pixels
  362. ColorDepth: DWORD; // 1=16, 2=256, 4=64K, 8=16M
  363. end;
  364. {$EXTERNALSYM _WTS_CLIENT_DISPLAY}
  365. WTS_CLIENT_DISPLAY = _WTS_CLIENT_DISPLAY;
  366. {$EXTERNALSYM WTS_CLIENT_DISPLAY}
  367. TWtsClientDisplay = WTS_CLIENT_DISPLAY;
  368. PWtsClientDisplay = PWTS_CLIENT_DISPLAY;
  369. //==============================================================================
  370. // WTS_CONFIG_CLASS - WTSQueryUserConfig/WTSSetUserConfig
  371. //==============================================================================
  372. type
  373. _WTS_CONFIG_CLASS = (
  374. //Initial program settings
  375. WTSUserConfigInitialProgram, // string returned/expected
  376. WTSUserConfigWorkingDirectory, // string returned/expected
  377. WTSUserConfigfInheritInitialProgram, // DWORD returned/expected
  378. //
  379. WTSUserConfigfAllowLogonTerminalServer, //DWORD returned/expected
  380. //Timeout settings
  381. WTSUserConfigTimeoutSettingsConnections, //DWORD returned/expected
  382. WTSUserConfigTimeoutSettingsDisconnections, //DWORD returned/expected
  383. WTSUserConfigTimeoutSettingsIdle, //DWORD returned/expected
  384. //Client device settings
  385. WTSUserConfigfDeviceClientDrives, //DWORD returned/expected
  386. WTSUserConfigfDeviceClientPrinters, //DWORD returned/expected
  387. WTSUserConfigfDeviceClientDefaultPrinter, //DWORD returned/expected
  388. //Connection settings
  389. WTSUserConfigBrokenTimeoutSettings, //DWORD returned/expected
  390. WTSUserConfigReconnectSettings, //DWORD returned/expected
  391. //Modem settings
  392. WTSUserConfigModemCallbackSettings, //DWORD returned/expected
  393. WTSUserConfigModemCallbackPhoneNumber, // string returned/expected
  394. //Shadow settings
  395. WTSUserConfigShadowingSettings, //DWORD returned/expected
  396. //User Profile settings
  397. WTSUserConfigTerminalServerProfilePath, // string returned/expected
  398. //Terminal Server home directory
  399. WTSUserConfigTerminalServerHomeDir, // string returned/expected
  400. WTSUserConfigTerminalServerHomeDirDrive, // string returned/expected
  401. WTSUserConfigfTerminalServerRemoteHomeDir); // DWORD 0:LOCAL 1:REMOTE
  402. {$EXTERNALSYM _WTS_CONFIG_CLASS}
  403. WTS_CONFIG_CLASS = _WTS_CONFIG_CLASS;
  404. TWtsConfigClass = WTS_CONFIG_CLASS;
  405. {$IFDEF FALSE}
  406. // There we're remove in June 2001 PSDK (pre-release)
  407. PWTS_USER_CONFIG_SET_NWSERVERW = ^WTS_USER_CONFIG_SET_NWSERVERW;
  408. {$EXTERNALSYM PWTS_USER_CONFIG_SET_NWSERVERW}
  409. _WTS_USER_CONFIG_SET_NWSERVERW = record
  410. pNWServerName: LPWSTR;
  411. pNWDomainAdminName: LPWSTR;
  412. pNWDomainAdminPassword: LPWSTR;
  413. end;
  414. {$EXTERNALSYM _WTS_USER_CONFIG_SET_NWSERVERW}
  415. WTS_USER_CONFIG_SET_NWSERVERW = _WTS_USER_CONFIG_SET_NWSERVERW;
  416. {$EXTERNALSYM WTS_USER_CONFIG_SET_NWSERVERW}
  417. TWtsUserConfigSetNwserverW = WTS_USER_CONFIG_SET_NWSERVERW;
  418. PWtsUserConfigSetNwserverW = PWTS_USER_CONFIG_SET_NWSERVERW;
  419. PWTS_USER_CONFIG_SET_NWSERVERA = ^WTS_USER_CONFIG_SET_NWSERVERA;
  420. {$EXTERNALSYM PWTS_USER_CONFIG_SET_NWSERVERA}
  421. _WTS_USER_CONFIG_SET_NWSERVERA = record
  422. pNWServerName: LPSTR;
  423. pNWDomainAdminName: LPSTR;
  424. pNWDomainAdminPassword: LPSTR;
  425. end;
  426. {$EXTERNALSYM _WTS_USER_CONFIG_SET_NWSERVERA}
  427. WTS_USER_CONFIG_SET_NWSERVERA = _WTS_USER_CONFIG_SET_NWSERVERA;
  428. {$EXTERNALSYM WTS_USER_CONFIG_SET_NWSERVERA}
  429. TWtsUserConfigSetNwserverA = WTS_USER_CONFIG_SET_NWSERVERA;
  430. PWtsUserConfigSetNwserverA = PWTS_USER_CONFIG_SET_NWSERVERA;
  431. {$IFDEF UNICODE}
  432. WTS_USER_CONFIG_SET_NWSERVER = WTS_USER_CONFIG_SET_NWSERVERW;
  433. {$EXTERNALSYM WTS_USER_CONFIG_SET_NWSERVER}
  434. PWTS_USER_CONFIG_SET_NWSERVER = PWTS_USER_CONFIG_SET_NWSERVERW;
  435. {$EXTERNALSYM PWTS_USER_CONFIG_SET_NWSERVER}
  436. TWtsUserConfigSetNwserver = TWtsUserConfigSetNwserverW;
  437. PWtsUserConfigSetNwserver = PWtsUserConfigSetNwserverW;
  438. {$ELSE}
  439. WTS_USER_CONFIG_SET_NWSERVER = WTS_USER_CONFIG_SET_NWSERVERA;
  440. {$EXTERNALSYM WTS_USER_CONFIG_SET_NWSERVER}
  441. PWTS_USER_CONFIG_SET_NWSERVER = PWTS_USER_CONFIG_SET_NWSERVERA;
  442. {$EXTERNALSYM PWTS_USER_CONFIG_SET_NWSERVER}
  443. TWtsUserConfigSetNwserver = TWtsUserConfigSetNwserverA;
  444. PWtsUserConfigSetNwserver = PWtsUserConfigSetNwserverA;
  445. {$ENDIF UNICODE}
  446. {$ENDIF FALSE}
  447. //==============================================================================
  448. // WTS_EVENT - Event flags for WTSWaitSystemEvent
  449. //==============================================================================
  450. const
  451. WTS_EVENT_NONE = $00000000; // return no event
  452. {$EXTERNALSYM WTS_EVENT_NONE}
  453. WTS_EVENT_CREATE = $00000001; // new WinStation created
  454. {$EXTERNALSYM WTS_EVENT_CREATE}
  455. WTS_EVENT_DELETE = $00000002; // existing WinStation deleted
  456. {$EXTERNALSYM WTS_EVENT_DELETE}
  457. WTS_EVENT_RENAME = $00000004; // existing WinStation renamed
  458. {$EXTERNALSYM WTS_EVENT_RENAME}
  459. WTS_EVENT_CONNECT = $00000008; // WinStation connect to client
  460. {$EXTERNALSYM WTS_EVENT_CONNECT}
  461. WTS_EVENT_DISCONNECT = $00000010; // WinStation logged on without client
  462. {$EXTERNALSYM WTS_EVENT_DISCONNECT}
  463. WTS_EVENT_LOGON = $00000020; // user logged on to existing WinStation
  464. {$EXTERNALSYM WTS_EVENT_LOGON}
  465. WTS_EVENT_LOGOFF = $00000040; // user logged off from existing WinStation
  466. {$EXTERNALSYM WTS_EVENT_LOGOFF}
  467. WTS_EVENT_STATECHANGE = $00000080; // WinStation state change
  468. {$EXTERNALSYM WTS_EVENT_STATECHANGE}
  469. WTS_EVENT_LICENSE = $00000100; // license state change
  470. {$EXTERNALSYM WTS_EVENT_LICENSE}
  471. WTS_EVENT_ALL = $7fffffff; // wait for all event types
  472. {$EXTERNALSYM WTS_EVENT_ALL}
  473. WTS_EVENT_FLUSH = DWORD($80000000); // unblock all waiters
  474. {$EXTERNALSYM WTS_EVENT_FLUSH}
  475. //==============================================================================
  476. // WTS_VIRTUAL_CLASS - WTSVirtualChannelQuery
  477. //==============================================================================
  478. type
  479. _WTS_VIRTUAL_CLASS = (WTSVirtualClientData, WTSVirtualFileHandle);
  480. {$EXTERNALSYM _WTS_VIRTUAL_CLASS}
  481. WTS_VIRTUAL_CLASS = _WTS_VIRTUAL_CLASS;
  482. {$EXTERNALSYM WTS_VIRTUAL_CLASS}
  483. TWtsVirtualClass = WTS_VIRTUAL_CLASS;
  484. //==============================================================================
  485. // Windows Terminal Server public APIs
  486. //==============================================================================
  487. function WTSEnumerateServersA(pDomainName: LPSTR; Reserved, Version: DWORD;
  488. var ppServerInfo: PWTS_SERVER_INFOA; var pCount: DWORD): BOOL; stdcall;
  489. {$EXTERNALSYM WTSEnumerateServersA}
  490. function WTSEnumerateServersW(pDomainName: LPWSTR; Reserved, Version: DWORD;
  491. var ppServerInfo: PWTS_SERVER_INFOW; var pCount: DWORD): BOOL; stdcall;
  492. {$EXTERNALSYM WTSEnumerateServersW}
  493. function WTSEnumerateServers(pDomainName: LPTSTR; Reserved, Version: DWORD;
  494. var ppServerInfo: PWTS_SERVER_INFO; var pCount: DWORD): BOOL; stdcall;
  495. {$EXTERNALSYM WTSEnumerateServers}
  496. //------------------------------------------------------------------------------
  497. function WTSOpenServerA(pServerName: LPSTR): HANDLE; stdcall;
  498. {$EXTERNALSYM WTSOpenServerA}
  499. function WTSOpenServerW(pServerName: LPWSTR): HANDLE; stdcall;
  500. {$EXTERNALSYM WTSOpenServerW}
  501. function WTSOpenServer(pServerName: LPTSTR): HANDLE; stdcall;
  502. {$EXTERNALSYM WTSOpenServer}
  503. //------------------------------------------------------------------------------
  504. procedure WTSCloseServer(hServer: HANDLE); stdcall;
  505. {$EXTERNALSYM WTSCloseServer}
  506. //------------------------------------------------------------------------------
  507. function WTSEnumerateSessionsA(hServer: HANDLE; Reserved: DWORD; Version: DWORD;
  508. var ppSessionInfo: PWTS_SESSION_INFOA; var pCount: DWORD): BOOL; stdcall;
  509. {$EXTERNALSYM WTSEnumerateSessionsA}
  510. function WTSEnumerateSessionsW(hServer: HANDLE; Reserved: DWORD; Version: DWORD;
  511. var ppSessionInfo: PWTS_SESSION_INFOW; var pCount: DWORD): BOOL; stdcall;
  512. {$EXTERNALSYM WTSEnumerateSessionsW}
  513. function WTSEnumerateSessions(hServer: HANDLE; Reserved: DWORD; Version: DWORD;
  514. var ppSessionInfo: PWTS_SESSION_INFO; var pCount: DWORD): BOOL; stdcall;
  515. {$EXTERNALSYM WTSEnumerateSessions}
  516. //------------------------------------------------------------------------------
  517. function WTSEnumerateProcessesA(hServer: HANDLE; Reserved: DWORD; Version: DWORD;
  518. var ppProcessInfo: PWTS_PROCESS_INFOA; var pCount: DWORD): BOOL; stdcall;
  519. {$EXTERNALSYM WTSEnumerateProcessesA}
  520. function WTSEnumerateProcessesW(hServer: HANDLE; Reserved: DWORD; Version: DWORD;
  521. var ppProcessInfo: PWTS_PROCESS_INFOW; var pCount: DWORD): BOOL; stdcall;
  522. {$EXTERNALSYM WTSEnumerateProcessesW}
  523. function WTSEnumerateProcesses(hServer: HANDLE; Reserved: DWORD; Version: DWORD;
  524. var ppProcessInfo: PWTS_PROCESS_INFO; var pCount: DWORD): BOOL; stdcall;
  525. {$EXTERNALSYM WTSEnumerateProcesses}
  526. //------------------------------------------------------------------------------
  527. function WTSTerminateProcess(hServer: HANDLE; ProcessId, ExitCode: DWORD): BOOL; stdcall;
  528. {$EXTERNALSYM WTSTerminateProcess}
  529. //------------------------------------------------------------------------------
  530. function WTSQuerySessionInformationA(hServer: HANDLE; SessionId: DWORD;
  531. WTSInfoClass: WTS_INFO_CLASS; var ppBuffer: Pointer; var pBytesReturned: DWORD): BOOL; stdcall;
  532. {$EXTERNALSYM WTSQuerySessionInformationA}
  533. function WTSQuerySessionInformationW(hServer: HANDLE; SessionId: DWORD;
  534. WTSInfoClass: WTS_INFO_CLASS; var ppBuffer: Pointer; var pBytesReturned: DWORD): BOOL; stdcall;
  535. {$EXTERNALSYM WTSQuerySessionInformationW}
  536. function WTSQuerySessionInformation(hServer: HANDLE; SessionId: DWORD;
  537. WTSInfoClass: WTS_INFO_CLASS; var ppBuffer: Pointer; var pBytesReturned: DWORD): BOOL; stdcall;
  538. {$EXTERNALSYM WTSQuerySessionInformation}
  539. //------------------------------------------------------------------------------
  540. function WTSQueryUserConfigA(pServerName, pUserName: LPSTR; WTSConfigClass: WTS_CONFIG_CLASS;
  541. var ppBuffer: Pointer; var pBytesReturned: DWORD): BOOL; stdcall;
  542. {$EXTERNALSYM WTSQueryUserConfigA}
  543. function WTSQueryUserConfigW(pServerName, pUserName: LPWSTR; WTSConfigClass: WTS_CONFIG_CLASS;
  544. var ppBuffer: Pointer; var pBytesReturned: DWORD): BOOL; stdcall;
  545. {$EXTERNALSYM WTSQueryUserConfigW}
  546. function WTSQueryUserConfig(pServerName, pUserName: LPTSTR; WTSConfigClass: WTS_CONFIG_CLASS;
  547. var ppBuffer: Pointer; var pBytesReturned: DWORD): BOOL; stdcall;
  548. {$EXTERNALSYM WTSQueryUserConfig}
  549. //------------------------------------------------------------------------------
  550. function WTSSetUserConfigA(pServerName, pUserName: LPSTR; WTSConfigClass: WTS_CONFIG_CLASS;
  551. pBuffer: LPSTR; DataLength: DWORD): BOOL; stdcall;
  552. {$EXTERNALSYM WTSSetUserConfigA}
  553. function WTSSetUserConfigW(pServerName, pUserName: LPWSTR; WTSConfigClass: WTS_CONFIG_CLASS;
  554. pBuffer: LPWSTR; DataLength: DWORD): BOOL; stdcall;
  555. {$EXTERNALSYM WTSSetUserConfigW}
  556. function WTSSetUserConfig(pServerName, pUserName: LPTSTR; WTSConfigClass: WTS_CONFIG_CLASS;
  557. pBuffer: LPTSTR; DataLength: DWORD): BOOL; stdcall;
  558. {$EXTERNALSYM WTSSetUserConfig}
  559. //------------------------------------------------------------------------------
  560. function WTSSendMessageA(hServer: HANDLE; SessionId: DWORD; pTitle: LPSTR;
  561. TitleLength: DWORD; pMessage: LPSTR; MessageLength: DWORD; Style: DWORD;
  562. Timeout: DWORD; var pResponse: DWORD; bWait: BOOL): BOOL; stdcall;
  563. {$EXTERNALSYM WTSSendMessageA}
  564. function WTSSendMessageW(hServer: HANDLE; SessionId: DWORD; pTitle: LPWSTR;
  565. TitleLength: DWORD; pMessage: LPWSTR; MessageLength: DWORD; Style: DWORD;
  566. Timeout: DWORD; var pResponse: DWORD; bWait: BOOL): BOOL; stdcall;
  567. {$EXTERNALSYM WTSSendMessageW}
  568. function WTSSendMessage(hServer: HANDLE; SessionId: DWORD; pTitle: LPTSTR;
  569. TitleLength: DWORD; pMessage: LPTSTR; MessageLength: DWORD; Style: DWORD;
  570. Timeout: DWORD; var pResponse: DWORD; bWait: BOOL): BOOL; stdcall;
  571. {$EXTERNALSYM WTSSendMessage}
  572. //------------------------------------------------------------------------------
  573. function WTSDisconnectSession(hServer: HANDLE; SessionId: DWORD; bWait: BOOL): BOOL; stdcall;
  574. {$EXTERNALSYM WTSDisconnectSession}
  575. //------------------------------------------------------------------------------
  576. function WTSLogoffSession(hServer: HANDLE; SessionId: DWORD; bWait: BOOL): BOOL; stdcall;
  577. {$EXTERNALSYM WTSLogoffSession}
  578. //------------------------------------------------------------------------------
  579. function WTSShutdownSystem(hServer: HANDLE; ShutdownFlag: DWORD): BOOL; stdcall;
  580. {$EXTERNALSYM WTSShutdownSystem}
  581. //------------------------------------------------------------------------------
  582. function WTSWaitSystemEvent(hServer: HANDLE; EventMask: DWORD;
  583. var pEventFlags: DWORD): BOOL; stdcall;
  584. {$EXTERNALSYM WTSWaitSystemEvent}
  585. //------------------------------------------------------------------------------
  586. function WTSVirtualChannelOpen(hServer: HANDLE; SessionId: DWORD;
  587. pVirtualName: LPSTR): HANDLE; stdcall;
  588. {$EXTERNALSYM WTSVirtualChannelOpen}
  589. function WTSVirtualChannelClose(hChannelHandle: HANDLE): BOOL; stdcall;
  590. {$EXTERNALSYM WTSVirtualChannelClose}
  591. function WTSVirtualChannelRead(hChannelHandle: HANDLE; TimeOut: ULONG;
  592. Buffer: PCHAR; BufferSize: ULONG; var pBytesRead: ULONG): BOOL; stdcall;
  593. {$EXTERNALSYM WTSVirtualChannelRead}
  594. function WTSVirtualChannelWrite(hChannelHandle: HANDLE; Buffer: PCHAR;
  595. Length: ULONG; var pBytesWritten: ULONG): BOOL; stdcall;
  596. {$EXTERNALSYM WTSVirtualChannelWrite}
  597. function WTSVirtualChannelPurgeInput(hChannelHandle: HANDLE): BOOL; stdcall;
  598. {$EXTERNALSYM WTSVirtualChannelPurgeInput}
  599. function WTSVirtualChannelPurgeOutput(hChannelHandle: HANDLE): BOOL; stdcall;
  600. {$EXTERNALSYM WTSVirtualChannelPurgeOutput}
  601. function WTSVirtualChannelQuery(hChannelHandle: HANDLE; VirtualClass: WTS_VIRTUAL_CLASS;
  602. ppBuffer: PVOID; var pBytesReturned: DWORD): BOOL; stdcall;
  603. {$EXTERNALSYM WTSVirtualChannelQuery}
  604. //------------------------------------------------------------------------------
  605. procedure WTSFreeMemory(pMemory: PVOID); stdcall;
  606. {$EXTERNALSYM WTSFreeMemory}
  607. // Flags for Console Notification
  608. const
  609. NOTIFY_FOR_ALL_SESSIONS = 1;
  610. {$EXTERNALSYM NOTIFY_FOR_ALL_SESSIONS}
  611. NOTIFY_FOR_THIS_SESSION = 0;
  612. {$EXTERNALSYM NOTIFY_FOR_THIS_SESSION}
  613. function WTSRegisterSessionNotification(hWnd: HWND; dwFlags: DWORD): BOOL; stdcall;
  614. {$EXTERNALSYM WTSRegisterSessionNotification}
  615. function WTSUnRegisterSessionNotification(hWnd: HWND): BOOL; stdcall;
  616. {$EXTERNALSYM WTSUnRegisterSessionNotification}
  617. function WTSQueryUserToken(SessionId: ULONG; var phToken: HANDLE): BOOL; stdcall;
  618. {$EXTERNALSYM WTSQueryUserToken}
  619. implementation
  620. uses
  621. JwaWinDLLNames;
  622. {$IFDEF DYNAMIC_LINK}
  623. var
  624. _WTSEnumerateServersA: Pointer;
  625. function WTSEnumerateServersA;
  626. begin
  627. GetProcedureAddress(_WTSEnumerateServersA, wtsapi, 'WTSEnumerateServersA');
  628. asm
  629. MOV ESP, EBP
  630. POP EBP
  631. JMP [_WTSEnumerateServersA]
  632. end;
  633. end;
  634. var
  635. _WTSEnumerateServersW: Pointer;
  636. function WTSEnumerateServersW;
  637. begin
  638. GetProcedureAddress(_WTSEnumerateServersW, wtsapi, 'WTSEnumerateServersW');
  639. asm
  640. MOV ESP, EBP
  641. POP EBP
  642. JMP [_WTSEnumerateServersW]
  643. end;
  644. end;
  645. var
  646. _WTSEnumerateServers: Pointer;
  647. function WTSEnumerateServers;
  648. begin
  649. GetProcedureAddress(_WTSEnumerateServers, wtsapi, 'WTSEnumerateServers' + AWSuffix);
  650. asm
  651. MOV ESP, EBP
  652. POP EBP
  653. JMP [_WTSEnumerateServers]
  654. end;
  655. end;
  656. var
  657. _WTSOpenServerA: Pointer;
  658. function WTSOpenServerA;
  659. begin
  660. GetProcedureAddress(_WTSOpenServerA, wtsapi, 'WTSOpenServerA');
  661. asm
  662. MOV ESP, EBP
  663. POP EBP
  664. JMP [_WTSOpenServerA]
  665. end;
  666. end;
  667. var
  668. _WTSOpenServerW: Pointer;
  669. function WTSOpenServerW;
  670. begin
  671. GetProcedureAddress(_WTSOpenServerW, wtsapi, 'WTSOpenServerW');
  672. asm
  673. MOV ESP, EBP
  674. POP EBP
  675. JMP [_WTSOpenServerW]
  676. end;
  677. end;
  678. var
  679. _WTSOpenServer: Pointer;
  680. function WTSOpenServer;
  681. begin
  682. GetProcedureAddress(_WTSOpenServer, wtsapi, 'WTSOpenServer' + AWSuffix);
  683. asm
  684. MOV ESP, EBP
  685. POP EBP
  686. JMP [_WTSOpenServer]
  687. end;
  688. end;
  689. var
  690. _WTSCloseServer: Pointer;
  691. procedure WTSCloseServer;
  692. begin
  693. GetProcedureAddress(_WTSCloseServer, wtsapi, 'WTSCloseServer');
  694. asm
  695. MOV ESP, EBP
  696. POP EBP
  697. JMP [_WTSCloseServer]
  698. end;
  699. end;
  700. var
  701. _WTSEnumerateSessionsA: Pointer;
  702. function WTSEnumerateSessionsA;
  703. begin
  704. GetProcedureAddress(_WTSEnumerateSessionsA, wtsapi, 'WTSEnumerateSessionsA');
  705. asm
  706. MOV ESP, EBP
  707. POP EBP
  708. JMP [_WTSEnumerateSessionsA]
  709. end;
  710. end;
  711. var
  712. _WTSEnumerateSessionsW: Pointer;
  713. function WTSEnumerateSessionsW;
  714. begin
  715. GetProcedureAddress(_WTSEnumerateSessionsW, wtsapi, 'WTSEnumerateSessionsW');
  716. asm
  717. MOV ESP, EBP
  718. POP EBP
  719. JMP [_WTSEnumerateSessionsW]
  720. end;
  721. end;
  722. var
  723. _WTSEnumerateSessions: Pointer;
  724. function WTSEnumerateSessions;
  725. begin
  726. GetProcedureAddress(_WTSEnumerateSessions, wtsapi, 'WTSEnumerateSessions' + AWSuffix);
  727. asm
  728. MOV ESP, EBP
  729. POP EBP
  730. JMP [_WTSEnumerateSessions]
  731. end;
  732. end;
  733. var
  734. _WTSEnumerateProcessesA: Pointer;
  735. function WTSEnumerateProcessesA;
  736. begin
  737. GetProcedureAddress(_WTSEnumerateProcessesA, wtsapi, 'WTSEnumerateProcessesA');
  738. asm
  739. MOV ESP, EBP
  740. POP EBP
  741. JMP [_WTSEnumerateProcessesA]
  742. end;
  743. end;
  744. var
  745. _WTSEnumerateProcessesW: Pointer;
  746. function WTSEnumerateProcessesW;
  747. begin
  748. GetProcedureAddress(_WTSEnumerateProcessesW, wtsapi, 'WTSEnumerateProcessesW');
  749. asm
  750. MOV ESP, EBP
  751. POP EBP
  752. JMP [_WTSEnumerateProcessesW]
  753. end;
  754. end;
  755. var
  756. _WTSEnumerateProcesses: Pointer;
  757. function WTSEnumerateProcesses;
  758. begin
  759. GetProcedureAddress(_WTSEnumerateProcesses, wtsapi, 'WTSEnumerateProcesses' + AWSuffix);
  760. asm
  761. MOV ESP, EBP
  762. POP EBP
  763. JMP [_WTSEnumerateProcesses]
  764. end;
  765. end;
  766. var
  767. _WTSTerminateProcess: Pointer;
  768. function WTSTerminateProcess;
  769. begin
  770. GetProcedureAddress(_WTSTerminateProcess, wtsapi, 'WTSTerminateProcess');
  771. asm
  772. MOV ESP, EBP
  773. POP EBP
  774. JMP [_WTSTerminateProcess]
  775. end;
  776. end;
  777. var
  778. _WTSQuerySessionInformationA: Pointer;
  779. function WTSQuerySessionInformationA;
  780. begin
  781. GetProcedureAddress(_WTSQuerySessionInformationA, wtsapi, 'WTSQuerySessionInformationA');
  782. asm
  783. MOV ESP, EBP
  784. POP EBP
  785. JMP [_WTSQuerySessionInformationA]
  786. end;
  787. end;
  788. var
  789. _WTSQuerySessionInformationW: Pointer;
  790. function WTSQuerySessionInformationW;
  791. begin
  792. GetProcedureAddress(_WTSQuerySessionInformationW, wtsapi, 'WTSQuerySessionInformationW');
  793. asm
  794. MOV ESP, EBP
  795. POP EBP
  796. JMP [_WTSQuerySessionInformationW]
  797. end;
  798. end;
  799. var
  800. _WTSQuerySessionInformation: Pointer;
  801. function WTSQuerySessionInformation;
  802. begin
  803. GetProcedureAddress(_WTSQuerySessionInformation, wtsapi, 'WTSQuerySessionInformation' + AWSuffix);
  804. asm
  805. MOV ESP, EBP
  806. POP EBP
  807. JMP [_WTSQuerySessionInformation]
  808. end;
  809. end;
  810. var
  811. _WTSQueryUserConfigA: Pointer;
  812. function WTSQueryUserConfigA;
  813. begin
  814. GetProcedureAddress(_WTSQueryUserConfigA, wtsapi, 'WTSQueryUserConfigA');
  815. asm
  816. MOV ESP, EBP
  817. POP EBP
  818. JMP [_WTSQueryUserConfigA]
  819. end;
  820. end;
  821. var
  822. _WTSQueryUserConfigW: Pointer;
  823. function WTSQueryUserConfigW;
  824. begin
  825. GetProcedureAddress(_WTSQueryUserConfigW, wtsapi, 'WTSQueryUserConfigW');
  826. asm
  827. MOV ESP, EBP
  828. POP EBP
  829. JMP [_WTSQueryUserConfigW]
  830. end;
  831. end;
  832. var
  833. _WTSQueryUserConfig: Pointer;
  834. function WTSQueryUserConfig;
  835. begin
  836. GetProcedureAddress(_WTSQueryUserConfig, wtsapi, 'WTSQueryUserConfig' + AWSuffix);
  837. asm
  838. MOV ESP, EBP
  839. POP EBP
  840. JMP [_WTSQueryUserConfig]
  841. end;
  842. end;
  843. var
  844. _WTSSetUserConfigA: Pointer;
  845. function WTSSetUserConfigA;
  846. begin
  847. GetProcedureAddress(_WTSSetUserConfigA, wtsapi, 'WTSSetUserConfigA');
  848. asm
  849. MOV ESP, EBP
  850. POP EBP
  851. JMP [_WTSSetUserConfigA]
  852. end;
  853. end;
  854. var
  855. _WTSSetUserConfigW: Pointer;
  856. function WTSSetUserConfigW;
  857. begin
  858. GetProcedureAddress(_WTSSetUserConfigW, wtsapi, 'WTSSetUserConfigW');
  859. asm
  860. MOV ESP, EBP
  861. POP EBP
  862. JMP [_WTSSetUserConfigW]
  863. end;
  864. end;
  865. var
  866. _WTSSetUserConfig: Pointer;
  867. function WTSSetUserConfig;
  868. begin
  869. GetProcedureAddress(_WTSSetUserConfig, wtsapi, 'WTSSetUserConfig' + AWSuffix);
  870. asm
  871. MOV ESP, EBP
  872. POP EBP
  873. JMP [_WTSSetUserConfig]
  874. end;
  875. end;
  876. var
  877. _WTSSendMessageA: Pointer;
  878. function WTSSendMessageA;
  879. begin
  880. GetProcedureAddress(_WTSSendMessageA, wtsapi, 'WTSSendMessageA');
  881. asm
  882. MOV ESP, EBP
  883. POP EBP
  884. JMP [_WTSSendMessageA]
  885. end;
  886. end;
  887. var
  888. _WTSSendMessageW: Pointer;
  889. function WTSSendMessageW;
  890. begin
  891. GetProcedureAddress(_WTSSendMessageW, wtsapi, 'WTSSendMessageW');
  892. asm
  893. MOV ESP, EBP
  894. POP EBP
  895. JMP [_WTSSendMessageW]
  896. end;
  897. end;
  898. var
  899. _WTSSendMessage: Pointer;
  900. function WTSSendMessage;
  901. begin
  902. GetProcedureAddress(_WTSSendMessage, wtsapi, 'WTSSendMessage' + AWSuffix);
  903. asm
  904. MOV ESP, EBP
  905. POP EBP
  906. JMP [_WTSSendMessage]
  907. end;
  908. end;
  909. var
  910. _WTSDisconnectSession: Pointer;
  911. function WTSDisconnectSession;
  912. begin
  913. GetProcedureAddress(_WTSDisconnectSession, wtsapi, 'WTSDisconnectSession');
  914. asm
  915. MOV ESP, EBP
  916. POP EBP
  917. JMP [_WTSDisconnectSession]
  918. end;
  919. end;
  920. var
  921. _WTSLogoffSession: Pointer;
  922. function WTSLogoffSession;
  923. begin
  924. GetProcedureAddress(_WTSLogoffSession, wtsapi, 'WTSLogoffSession');
  925. asm
  926. MOV ESP, EBP
  927. POP EBP
  928. JMP [_WTSLogoffSession]
  929. end;
  930. end;
  931. var
  932. _WTSShutdownSystem: Pointer;
  933. function WTSShutdownSystem;
  934. begin
  935. GetProcedureAddress(_WTSShutdownSystem, wtsapi, 'WTSShutdownSystem');
  936. asm
  937. MOV ESP, EBP
  938. POP EBP
  939. JMP [_WTSShutdownSystem]
  940. end;
  941. end;
  942. var
  943. _WTSWaitSystemEvent: Pointer;
  944. function WTSWaitSystemEvent;
  945. begin
  946. GetProcedureAddress(_WTSWaitSystemEvent, wtsapi, 'WTSWaitSystemEvent');
  947. asm
  948. MOV ESP, EBP
  949. POP EBP
  950. JMP [_WTSWaitSystemEvent]
  951. end;
  952. end;
  953. var
  954. _WTSVirtualChannelOpen: Pointer;
  955. function WTSVirtualChannelOpen;
  956. begin
  957. GetProcedureAddress(_WTSVirtualChannelOpen, wtsapi, 'WTSVirtualChannelOpen');
  958. asm
  959. MOV ESP, EBP
  960. POP EBP
  961. JMP [_WTSVirtualChannelOpen]
  962. end;
  963. end;
  964. var
  965. _WTSVirtualChannelClose: Pointer;
  966. function WTSVirtualChannelClose;
  967. begin
  968. GetProcedureAddress(_WTSVirtualChannelClose, wtsapi, 'WTSVirtualChannelClose');
  969. asm
  970. MOV ESP, EBP
  971. POP EBP
  972. JMP [_WTSVirtualChannelClose]
  973. end;
  974. end;
  975. var
  976. _WTSVirtualChannelRead: Pointer;
  977. function WTSVirtualChannelRead;
  978. begin
  979. GetProcedureAddress(_WTSVirtualChannelRead, wtsapi, 'WTSVirtualChannelRead');
  980. asm
  981. MOV ESP, EBP
  982. POP EBP
  983. JMP [_WTSVirtualChannelRead]
  984. end;
  985. end;
  986. var
  987. _WTSVirtualChannelWrite: Pointer;
  988. function WTSVirtualChannelWrite;
  989. begin
  990. GetProcedureAddress(_WTSVirtualChannelWrite, wtsapi, 'WTSVirtualChannelWrite');
  991. asm
  992. MOV ESP, EBP
  993. POP EBP
  994. JMP [_WTSVirtualChannelWrite]
  995. end;
  996. end;
  997. var
  998. _WTSVirtualChannelPurgeInput: Pointer;
  999. function WTSVirtualChannelPurgeInput;
  1000. begin
  1001. GetProcedureAddress(_WTSVirtualChannelPurgeInput, wtsapi, 'WTSVirtualChannelPurgeInput');
  1002. asm
  1003. MOV ESP, EBP
  1004. POP EBP
  1005. JMP [_WTSVirtualChannelPurgeInput]
  1006. end;
  1007. end;
  1008. var
  1009. _WTSVirtualChannelPurgeOutput: Pointer;
  1010. function WTSVirtualChannelPurgeOutput;
  1011. begin
  1012. GetProcedureAddress(_WTSVirtualChannelPurgeOutput, wtsapi, 'WTSVirtualChannelPurgeOutput');
  1013. asm
  1014. MOV ESP, EBP
  1015. POP EBP
  1016. JMP [_WTSVirtualChannelPurgeOutput]
  1017. end;
  1018. end;
  1019. var
  1020. _WTSVirtualChannelQuery: Pointer;
  1021. function WTSVirtualChannelQuery;
  1022. begin
  1023. GetProcedureAddress(_WTSVirtualChannelQuery, wtsapi, 'WTSVirtualChannelQuery');
  1024. asm
  1025. MOV ESP, EBP
  1026. POP EBP
  1027. JMP [_WTSVirtualChannelQuery]
  1028. end;
  1029. end;
  1030. var
  1031. _WTSFreeMemory: Pointer;
  1032. procedure WTSFreeMemory;
  1033. begin
  1034. GetProcedureAddress(_WTSFreeMemory, wtsapi, 'WTSFreeMemory');
  1035. asm
  1036. MOV ESP, EBP
  1037. POP EBP
  1038. JMP [_WTSFreeMemory]
  1039. end;
  1040. end;
  1041. var
  1042. _WTSRegisterSessionNotification: Pointer;
  1043. function WTSRegisterSessionNotification;
  1044. begin
  1045. GetProcedureAddress(_WTSRegisterSessionNotification, wtsapi, 'WTSRegisterSessionNotification');
  1046. asm
  1047. MOV ESP, EBP
  1048. POP EBP
  1049. JMP [_WTSRegisterSessionNotification]
  1050. end;
  1051. end;
  1052. var
  1053. _WTSUnRegisterSessionNot: Pointer;
  1054. function WTSUnRegisterSessionNotification;
  1055. begin
  1056. GetProcedureAddress(_WTSUnRegisterSessionNot, wtsapi, 'WTSUnRegisterSessionNotification');
  1057. asm
  1058. MOV ESP, EBP
  1059. POP EBP
  1060. JMP [_WTSUnRegisterSessionNot]
  1061. end;
  1062. end;
  1063. var
  1064. _WTSQueryUserToken: Pointer;
  1065. function WTSQueryUserToken;
  1066. begin
  1067. GetProcedureAddress(_WTSQueryUserToken, wtsapi, 'WTSQueryUserToken');
  1068. asm
  1069. MOV ESP, EBP
  1070. POP EBP
  1071. JMP [_WTSQueryUserToken]
  1072. end;
  1073. end;
  1074. {$ELSE}
  1075. function WTSEnumerateServersA; external wtsapi name 'WTSEnumerateServersA';
  1076. function WTSEnumerateServersW; external wtsapi name 'WTSEnumerateServersW';
  1077. function WTSEnumerateServers; external wtsapi name 'WTSEnumerateServers' + AWSuffix;
  1078. function WTSOpenServerA; external wtsapi name 'WTSOpenServerA';
  1079. function WTSOpenServerW; external wtsapi name 'WTSOpenServerW';
  1080. function WTSOpenServer; external wtsapi name 'WTSOpenServer' + AWSuffix;
  1081. procedure WTSCloseServer; external wtsapi name 'WTSCloseServer';
  1082. function WTSEnumerateSessionsA; external wtsapi name 'WTSEnumerateSessionsA';
  1083. function WTSEnumerateSessionsW; external wtsapi name 'WTSEnumerateSessionsW';
  1084. function WTSEnumerateSessions; external wtsapi name 'WTSEnumerateSessions' + AWSuffix;
  1085. function WTSEnumerateProcessesA; external wtsapi name 'WTSEnumerateProcessesA';
  1086. function WTSEnumerateProcessesW; external wtsapi name 'WTSEnumerateProcessesW';
  1087. function WTSEnumerateProcesses; external wtsapi name 'WTSEnumerateProcesses' + AWSuffix;
  1088. function WTSTerminateProcess; external wtsapi name 'WTSTerminateProcess';
  1089. function WTSQuerySessionInformationA; external wtsapi name 'WTSQuerySessionInformationA';
  1090. function WTSQuerySessionInformationW; external wtsapi name 'WTSQuerySessionInformationW';
  1091. function WTSQuerySessionInformation; external wtsapi name 'WTSQuerySessionInformation' + AWSuffix;
  1092. function WTSQueryUserConfigA; external wtsapi name 'WTSQueryUserConfigA';
  1093. function WTSQueryUserConfigW; external wtsapi name 'WTSQueryUserConfigW';
  1094. function WTSQueryUserConfig; external wtsapi name 'WTSQueryUserConfig' + AWSuffix;
  1095. function WTSSetUserConfigA; external wtsapi name 'WTSSetUserConfigA';
  1096. function WTSSetUserConfigW; external wtsapi name 'WTSSetUserConfigW';
  1097. function WTSSetUserConfig; external wtsapi name 'WTSSetUserConfig' + AWSuffix;
  1098. function WTSSendMessageA; external wtsapi name 'WTSSendMessageA';
  1099. function WTSSendMessageW; external wtsapi name 'WTSSendMessageW';
  1100. function WTSSendMessage; external wtsapi name 'WTSSendMessage' + AWSuffix;
  1101. function WTSDisconnectSession; external wtsapi name 'WTSDisconnectSession';
  1102. function WTSLogoffSession; external wtsapi name 'WTSLogoffSession';
  1103. function WTSShutdownSystem; external wtsapi name 'WTSShutdownSystem';
  1104. function WTSWaitSystemEvent; external wtsapi name 'WTSWaitSystemEvent';
  1105. function WTSVirtualChannelOpen; external wtsapi name 'WTSVirtualChannelOpen';
  1106. function WTSVirtualChannelClose; external wtsapi name 'WTSVirtualChannelClose';
  1107. function WTSVirtualChannelRead; external wtsapi name 'WTSVirtualChannelRead';
  1108. function WTSVirtualChannelWrite; external wtsapi name 'WTSVirtualChannelWrite';
  1109. function WTSVirtualChannelPurgeInput; external wtsapi name 'WTSVirtualChannelPurgeInput';
  1110. function WTSVirtualChannelPurgeOutput; external wtsapi name 'WTSVirtualChannelPurgeOutput';
  1111. function WTSVirtualChannelQuery; external wtsapi name 'WTSVirtualChannelQuery';
  1112. procedure WTSFreeMemory; external wtsapi name 'WTSFreeMemory';
  1113. function WTSRegisterSessionNotification; external wtsapi name 'WTSRegisterSessionNotification';
  1114. function WTSUnRegisterSessionNotification; external wtsapi name 'WTSUnRegisterSessionNotification';
  1115. function WTSQueryUserToken; external wtsapi name 'WTSQueryUserToken';
  1116. {$ENDIF DYNAMIC_LINK}
  1117. end.