jwalmshare.pas 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819
  1. {******************************************************************************}
  2. { }
  3. { Lan Manager Shares 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: lmshare.h, released November 2001. The original Pascal }
  9. { code is: LmShare.pas, released Februari 2002. 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: JwaLmShare.pas,v 1.10 2005/09/07 09:54:54 marquardt Exp $
  43. {$IFNDEF JWA_INCLUDEMODE}
  44. unit JwaLmShare;
  45. {$WEAKPACKAGEUNIT}
  46. {$I jediapilib.inc}
  47. interface
  48. uses
  49. JwaWindows, JwaLmCons;
  50. {$ENDIF !JWA_INCLUDEMODE}
  51. {$IFDEF JWA_INTERFACESECTION}
  52. {$HPPEMIT ''}
  53. {$HPPEMIT '#include "lmshare.h"'}
  54. {$HPPEMIT ''}
  55. //
  56. // Function Prototypes - Share
  57. //
  58. function NetShareAdd(servername: LMSTR; level: DWORD; buf: LPBYTE; parm_err: LPDWORD): NET_API_STATUS; stdcall;
  59. {$EXTERNALSYM NetShareAdd}
  60. function NetShareEnum(servername: LMSTR; level: DWORD; var bufptr: LPBYTE; prefmaxlen: DWORD; entriesread, totalentries, resume_handle: LPDWORD): NET_API_STATUS; stdcall;
  61. {$EXTERNALSYM NetShareEnum}
  62. function NetShareEnumSticky(servername: LMSTR; level: DWORD; var bufptr: LPBYTE; prefmaxlen: DWORD; entriesread, totalentries, resume_handle: LPDWORD): NET_API_STATUS; stdcall;
  63. {$EXTERNALSYM NetShareEnumSticky}
  64. function NetShareGetInfo(servername, netname: LMSTR; level: DWORD; var bufptr: LPBYTE): NET_API_STATUS; stdcall;
  65. {$EXTERNALSYM NetShareGetInfo}
  66. function NetShareSetInfo(servername, netname: LMSTR; level: DWORD; buf: LPBYTE; parm_err: LPDWORD): NET_API_STATUS; stdcall;
  67. {$EXTERNALSYM NetShareSetInfo}
  68. function NetShareDel(servername, netname: LMSTR; reserved: DWORD): NET_API_STATUS; stdcall;
  69. {$EXTERNALSYM NetShareDel}
  70. function NetShareDelSticky(servername, netname: LMSTR; reserved: DWORD): NET_API_STATUS; stdcall;
  71. {$EXTERNALSYM NetShareDelSticky}
  72. function NetShareCheck(servername, device: LMSTR; type_: LPDWORD): NET_API_STATUS; stdcall;
  73. {$EXTERNALSYM NetShareCheck}
  74. //
  75. // Data Structures - Share
  76. //
  77. type
  78. LPSHARE_INFO_0 = ^SHARE_INFO_0;
  79. {$EXTERNALSYM LPSHARE_INFO_0}
  80. PSHARE_INFO_0 = ^SHARE_INFO_0;
  81. {$EXTERNALSYM PSHARE_INFO_0}
  82. _SHARE_INFO_0 = record
  83. shi0_netname: LMSTR;
  84. end;
  85. {$EXTERNALSYM _SHARE_INFO_0}
  86. SHARE_INFO_0 = _SHARE_INFO_0;
  87. {$EXTERNALSYM SHARE_INFO_0}
  88. TShareInfo0 = SHARE_INFO_0;
  89. PShareInfo0 = PSHARE_INFO_0;
  90. LPSHARE_INFO_1 = ^SHARE_INFO_1;
  91. {$EXTERNALSYM LPSHARE_INFO_1}
  92. PSHARE_INFO_1 = ^SHARE_INFO_1;
  93. {$EXTERNALSYM PSHARE_INFO_1}
  94. _SHARE_INFO_1 = record
  95. shi1_netname: LMSTR;
  96. shi1_type: DWORD;
  97. shi1_remark: LMSTR;
  98. end;
  99. {$EXTERNALSYM _SHARE_INFO_1}
  100. SHARE_INFO_1 = _SHARE_INFO_1;
  101. {$EXTERNALSYM SHARE_INFO_1}
  102. TShareInfo1 = SHARE_INFO_1;
  103. PShareInfo1 = PSHARE_INFO_1;
  104. LPSHARE_INFO_2 = ^SHARE_INFO_2;
  105. {$EXTERNALSYM LPSHARE_INFO_2}
  106. PSHARE_INFO_2 = ^SHARE_INFO_2;
  107. {$EXTERNALSYM PSHARE_INFO_2}
  108. _SHARE_INFO_2 = record
  109. shi2_netname: LMSTR;
  110. shi2_type: DWORD;
  111. shi2_remark: LMSTR;
  112. shi2_permissions: DWORD;
  113. shi2_max_uses: DWORD;
  114. shi2_current_uses: DWORD;
  115. shi2_path: LMSTR;
  116. shi2_passwd: LMSTR;
  117. end;
  118. {$EXTERNALSYM _SHARE_INFO_2}
  119. SHARE_INFO_2 = _SHARE_INFO_2;
  120. {$EXTERNALSYM SHARE_INFO_2}
  121. TShareInfo2 = SHARE_INFO_2;
  122. PShareInfo2 = PSHARE_INFO_2;
  123. LPSHARE_INFO_501 = ^SHARE_INFO_501;
  124. {$EXTERNALSYM LPSHARE_INFO_501}
  125. PSHARE_INFO_501 = ^SHARE_INFO_501;
  126. {$EXTERNALSYM PSHARE_INFO_501}
  127. _SHARE_INFO_501 = record
  128. shi501_netname: LMSTR;
  129. shi501_type: DWORD;
  130. shi501_remark: LMSTR;
  131. shi501_flags: DWORD;
  132. end;
  133. {$EXTERNALSYM _SHARE_INFO_501}
  134. SHARE_INFO_501 = _SHARE_INFO_501;
  135. {$EXTERNALSYM SHARE_INFO_501}
  136. TShareInfo501 = SHARE_INFO_501;
  137. PShareInfo501 = PSHARE_INFO_501;
  138. LPSHARE_INFO_502 = ^SHARE_INFO_502;
  139. {$EXTERNALSYM LPSHARE_INFO_502}
  140. PSHARE_INFO_502 = ^SHARE_INFO_502;
  141. {$EXTERNALSYM PSHARE_INFO_502}
  142. _SHARE_INFO_502 = record
  143. shi502_netname: LMSTR;
  144. shi502_type: DWORD;
  145. shi502_remark: LMSTR;
  146. shi502_permissions: DWORD;
  147. shi502_max_uses: DWORD;
  148. shi502_current_uses: DWORD;
  149. shi502_path: LMSTR;
  150. shi502_passwd: LMSTR;
  151. shi502_reserved: DWORD;
  152. shi502_security_descriptor: PSECURITY_DESCRIPTOR;
  153. end;
  154. {$EXTERNALSYM _SHARE_INFO_502}
  155. SHARE_INFO_502 = _SHARE_INFO_502;
  156. {$EXTERNALSYM SHARE_INFO_502}
  157. TShareInfo502 = SHARE_INFO_502;
  158. PShareInfo502 = PSHARE_INFO_502;
  159. LPSHARE_INFO_1004 = ^SHARE_INFO_1004;
  160. {$EXTERNALSYM LPSHARE_INFO_1004}
  161. PSHARE_INFO_1004 = ^SHARE_INFO_1004;
  162. {$EXTERNALSYM PSHARE_INFO_1004}
  163. _SHARE_INFO_1004 = record
  164. shi1004_remark: LMSTR;
  165. end;
  166. {$EXTERNALSYM _SHARE_INFO_1004}
  167. SHARE_INFO_1004 = _SHARE_INFO_1004;
  168. {$EXTERNALSYM SHARE_INFO_1004}
  169. TShareInfo1004 = SHARE_INFO_1004;
  170. PShareInfo1004 = PSHARE_INFO_1004;
  171. LPSHARE_INFO_1005 = ^SHARE_INFO_1005;
  172. {$EXTERNALSYM LPSHARE_INFO_1005}
  173. PSHARE_INFO_1005 = ^SHARE_INFO_1005;
  174. {$EXTERNALSYM PSHARE_INFO_1005}
  175. _SHARE_INFO_1005 = record
  176. shi1005_flags: DWORD;
  177. end;
  178. {$EXTERNALSYM _SHARE_INFO_1005}
  179. SHARE_INFO_1005 = _SHARE_INFO_1005;
  180. {$EXTERNALSYM SHARE_INFO_1005}
  181. TShareInfo1005 = SHARE_INFO_1005;
  182. PShareInfo1005 = PSHARE_INFO_1005;
  183. LPSHARE_INFO_1006 = ^SHARE_INFO_1006;
  184. {$EXTERNALSYM LPSHARE_INFO_1006}
  185. PSHARE_INFO_1006 = ^SHARE_INFO_1006;
  186. {$EXTERNALSYM PSHARE_INFO_1006}
  187. _SHARE_INFO_1006 = record
  188. shi1006_max_uses: DWORD;
  189. end;
  190. {$EXTERNALSYM _SHARE_INFO_1006}
  191. SHARE_INFO_1006 = _SHARE_INFO_1006;
  192. {$EXTERNALSYM SHARE_INFO_1006}
  193. TShareInfo1006 = SHARE_INFO_1006;
  194. PShareInfo1006 = PSHARE_INFO_1006;
  195. LPSHARE_INFO_1501 = ^SHARE_INFO_1501;
  196. {$EXTERNALSYM LPSHARE_INFO_1501}
  197. PSHARE_INFO_1501 = ^SHARE_INFO_1501;
  198. {$EXTERNALSYM PSHARE_INFO_1501}
  199. _SHARE_INFO_1501 = record
  200. shi1501_reserved: DWORD;
  201. shi1501_security_descriptor: PSECURITY_DESCRIPTOR;
  202. end;
  203. {$EXTERNALSYM _SHARE_INFO_1501}
  204. SHARE_INFO_1501 = _SHARE_INFO_1501;
  205. {$EXTERNALSYM SHARE_INFO_1501}
  206. TShareInfo1501 = SHARE_INFO_1501;
  207. PShareInfo1501 = PSHARE_INFO_1501;
  208. //
  209. // Special Values and Constants - Share
  210. //
  211. //
  212. // Values for parm_err parameter.
  213. //
  214. const
  215. SHARE_NETNAME_PARMNUM = 1;
  216. {$EXTERNALSYM SHARE_NETNAME_PARMNUM}
  217. SHARE_TYPE_PARMNUM = 3;
  218. {$EXTERNALSYM SHARE_TYPE_PARMNUM}
  219. SHARE_REMARK_PARMNUM = 4;
  220. {$EXTERNALSYM SHARE_REMARK_PARMNUM}
  221. SHARE_PERMISSIONS_PARMNUM = 5;
  222. {$EXTERNALSYM SHARE_PERMISSIONS_PARMNUM}
  223. SHARE_MAX_USES_PARMNUM = 6;
  224. {$EXTERNALSYM SHARE_MAX_USES_PARMNUM}
  225. SHARE_CURRENT_USES_PARMNUM = 7;
  226. {$EXTERNALSYM SHARE_CURRENT_USES_PARMNUM}
  227. SHARE_PATH_PARMNUM = 8;
  228. {$EXTERNALSYM SHARE_PATH_PARMNUM}
  229. SHARE_PASSWD_PARMNUM = 9;
  230. {$EXTERNALSYM SHARE_PASSWD_PARMNUM}
  231. SHARE_FILE_SD_PARMNUM = 501;
  232. {$EXTERNALSYM SHARE_FILE_SD_PARMNUM}
  233. //
  234. // Single-field infolevels for NetShareSetInfo.
  235. //
  236. SHARE_REMARK_INFOLEVEL = PARMNUM_BASE_INFOLEVEL + SHARE_REMARK_PARMNUM;
  237. {$EXTERNALSYM SHARE_REMARK_INFOLEVEL}
  238. SHARE_MAX_USES_INFOLEVEL = PARMNUM_BASE_INFOLEVEL + SHARE_MAX_USES_PARMNUM;
  239. {$EXTERNALSYM SHARE_MAX_USES_INFOLEVEL}
  240. SHARE_FILE_SD_INFOLEVEL = PARMNUM_BASE_INFOLEVEL + SHARE_FILE_SD_PARMNUM;
  241. {$EXTERNALSYM SHARE_FILE_SD_INFOLEVEL}
  242. SHI1_NUM_ELEMENTS = 4;
  243. {$EXTERNALSYM SHI1_NUM_ELEMENTS}
  244. SHI2_NUM_ELEMENTS = 10;
  245. {$EXTERNALSYM SHI2_NUM_ELEMENTS}
  246. //
  247. // Share types (shi1_type and shi2_type fields).
  248. //
  249. STYPE_DISKTREE = 0;
  250. {$EXTERNALSYM STYPE_DISKTREE}
  251. STYPE_PRINTQ = 1;
  252. {$EXTERNALSYM STYPE_PRINTQ}
  253. STYPE_DEVICE = 2;
  254. {$EXTERNALSYM STYPE_DEVICE}
  255. STYPE_IPC = 3;
  256. {$EXTERNALSYM STYPE_IPC}
  257. STYPE_TEMPORARY = $40000000;
  258. {$EXTERNALSYM STYPE_TEMPORARY}
  259. STYPE_SPECIAL = DWORD($80000000);
  260. {$EXTERNALSYM STYPE_SPECIAL}
  261. SHI_USES_UNLIMITED = DWORD(-1);
  262. {$EXTERNALSYM SHI_USES_UNLIMITED}
  263. //
  264. // Flags values for the 501 and 1005 levels
  265. //
  266. SHI1005_FLAGS_DFS = $01; // Share is in the DFS
  267. {$EXTERNALSYM SHI1005_FLAGS_DFS}
  268. SHI1005_FLAGS_DFS_ROOT = $02; // Share is root of DFS
  269. {$EXTERNALSYM SHI1005_FLAGS_DFS_ROOT}
  270. CSC_MASK = $30; // Used to mask off the following states
  271. {$EXTERNALSYM CSC_MASK}
  272. CSC_CACHE_MANUAL_REINT = $00; // No automatic file by file reintegration
  273. {$EXTERNALSYM CSC_CACHE_MANUAL_REINT}
  274. CSC_CACHE_AUTO_REINT = $10; // File by file reintegration is OK
  275. {$EXTERNALSYM CSC_CACHE_AUTO_REINT}
  276. CSC_CACHE_VDO = $20; // no need to flow opens
  277. {$EXTERNALSYM CSC_CACHE_VDO}
  278. CSC_CACHE_NONE = $30; // no CSC for this share
  279. {$EXTERNALSYM CSC_CACHE_NONE}
  280. SHI1005_FLAGS_RESTRICT_EXCLUSIVE_OPENS = $0100; // Used to disallow read-deny read behavior
  281. {$EXTERNALSYM SHI1005_FLAGS_RESTRICT_EXCLUSIVE_OPENS}
  282. SHI1005_FLAGS_FORCE_SHARED_DELETE = $0200; // Used to allows force shared delete
  283. {$EXTERNALSYM SHI1005_FLAGS_FORCE_SHARED_DELETE}
  284. SHI1005_FLAGS_ALLOW_NAMESPACE_CACHING = $0400; // The clients may cache the namespace
  285. {$EXTERNALSYM SHI1005_FLAGS_ALLOW_NAMESPACE_CACHING}
  286. //
  287. // The subset of 1005 infolevel flags that can be set via the API
  288. //
  289. SHI1005_VALID_FLAGS_SET = CSC_MASK or SHI1005_FLAGS_RESTRICT_EXCLUSIVE_OPENS or SHI1005_FLAGS_FORCE_SHARED_DELETE or SHI1005_FLAGS_ALLOW_NAMESPACE_CACHING;
  290. {$EXTERNALSYM SHI1005_VALID_FLAGS_SET}
  291. //
  292. // SESSION API
  293. //
  294. //
  295. // Function Prototypes Session
  296. //
  297. function NetSessionEnum(servername, UncClientName, username: LMSTR; level: DWORD; var bufptr: LPBYTE; prefmaxlen: DWORD; entriesread, totalentries, resume_handle: LPDWORD): NET_API_STATUS; stdcall;
  298. {$EXTERNALSYM NetSessionEnum}
  299. function NetSessionDel(servername, UncClientName, username: LMSTR): NET_API_STATUS; stdcall;
  300. {$EXTERNALSYM NetSessionDel}
  301. function NetSessionGetInfo(servername, UncClientName, username: LMSTR; level: DWORD; var bufptr: LPBYTE): NET_API_STATUS; stdcall;
  302. {$EXTERNALSYM NetSessionGetInfo}
  303. //
  304. // Data Structures - Session
  305. //
  306. type
  307. LPSESSION_INFO_0 = ^SESSION_INFO_0;
  308. {$EXTERNALSYM LPSESSION_INFO_0}
  309. PSESSION_INFO_0 = ^SESSION_INFO_0;
  310. {$EXTERNALSYM PSESSION_INFO_0}
  311. _SESSION_INFO_0 = record
  312. sesi0_cname: LMSTR; // client name (no backslashes)
  313. end;
  314. {$EXTERNALSYM _SESSION_INFO_0}
  315. SESSION_INFO_0 = _SESSION_INFO_0;
  316. {$EXTERNALSYM SESSION_INFO_0}
  317. TSessionInfo0 = SESSION_INFO_0;
  318. PSessionInfo0 = PSESSION_INFO_0;
  319. LPSESSION_INFO_1 = ^SESSION_INFO_1;
  320. {$EXTERNALSYM LPSESSION_INFO_1}
  321. PSESSION_INFO_1 = ^SESSION_INFO_1;
  322. {$EXTERNALSYM PSESSION_INFO_1}
  323. _SESSION_INFO_1 = record
  324. sesi1_cname: LMSTR; // client name (no backslashes)
  325. sesi1_username: LMSTR;
  326. sesi1_num_opens: DWORD;
  327. sesi1_time: DWORD;
  328. sesi1_idle_time: DWORD;
  329. sesi1_user_flags: DWORD;
  330. end;
  331. {$EXTERNALSYM _SESSION_INFO_1}
  332. SESSION_INFO_1 = _SESSION_INFO_1;
  333. {$EXTERNALSYM SESSION_INFO_1}
  334. TSessionInfo1 = SESSION_INFO_1;
  335. PSessionInfo1 = PSESSION_INFO_1;
  336. LPSESSION_INFO_2 = ^SESSION_INFO_2;
  337. {$EXTERNALSYM LPSESSION_INFO_2}
  338. PSESSION_INFO_2 = ^SESSION_INFO_2;
  339. {$EXTERNALSYM PSESSION_INFO_2}
  340. _SESSION_INFO_2 = record
  341. sesi2_cname: LMSTR; // client name (no backslashes)
  342. sesi2_username: LMSTR;
  343. sesi2_num_opens: DWORD;
  344. sesi2_time: DWORD;
  345. sesi2_idle_time: DWORD;
  346. sesi2_user_flags: DWORD;
  347. sesi2_cltype_name: LMSTR;
  348. end;
  349. {$EXTERNALSYM _SESSION_INFO_2}
  350. SESSION_INFO_2 = _SESSION_INFO_2;
  351. {$EXTERNALSYM SESSION_INFO_2}
  352. TSessionInfo2 = SESSION_INFO_2;
  353. PSessionInfo2 = PSESSION_INFO_2;
  354. LPSESSION_INFO_10 = ^SESSION_INFO_10;
  355. {$EXTERNALSYM LPSESSION_INFO_10}
  356. PSESSION_INFO_10 = ^SESSION_INFO_10;
  357. {$EXTERNALSYM PSESSION_INFO_10}
  358. _SESSION_INFO_10 = record
  359. sesi10_cname: LMSTR; // client name (no backslashes)
  360. sesi10_username: LMSTR;
  361. sesi10_time: DWORD;
  362. sesi10_idle_time: DWORD;
  363. end;
  364. {$EXTERNALSYM _SESSION_INFO_10}
  365. SESSION_INFO_10 = _SESSION_INFO_10;
  366. {$EXTERNALSYM SESSION_INFO_10}
  367. TSessionInfo10 = SESSION_INFO_10;
  368. PSessionInfo10 = PSESSION_INFO_10;
  369. LPSESSION_INFO_502 = ^SESSION_INFO_502;
  370. {$EXTERNALSYM LPSESSION_INFO_502}
  371. PSESSION_INFO_502 = ^SESSION_INFO_502;
  372. {$EXTERNALSYM PSESSION_INFO_502}
  373. _SESSION_INFO_502 = record
  374. sesi502_cname: LMSTR; // client name (no backslashes)
  375. sesi502_username: LMSTR;
  376. sesi502_num_opens: DWORD;
  377. sesi502_time: DWORD;
  378. sesi502_idle_time: DWORD;
  379. sesi502_user_flags: DWORD;
  380. sesi502_cltype_name: LMSTR;
  381. sesi502_transport: LMSTR;
  382. end;
  383. {$EXTERNALSYM _SESSION_INFO_502}
  384. SESSION_INFO_502 = _SESSION_INFO_502;
  385. {$EXTERNALSYM SESSION_INFO_502}
  386. TSessionInfo502 = SESSION_INFO_502;
  387. PSessionInfo502 = PSESSION_INFO_502;
  388. //
  389. // Special Values and Constants - Session
  390. //
  391. //
  392. // Bits defined in sesi1_user_flags.
  393. //
  394. const
  395. SESS_GUEST = $00000001; // session is logged on as a guest
  396. {$EXTERNALSYM SESS_GUEST}
  397. SESS_NOENCRYPTION = $00000002; // session is not using encryption
  398. {$EXTERNALSYM SESS_NOENCRYPTION}
  399. SESI1_NUM_ELEMENTS = 8;
  400. {$EXTERNALSYM SESI1_NUM_ELEMENTS}
  401. SESI2_NUM_ELEMENTS = 9;
  402. {$EXTERNALSYM SESI2_NUM_ELEMENTS}
  403. //
  404. // CONNECTION API
  405. //
  406. //
  407. // Function Prototypes - CONNECTION
  408. //
  409. function NetConnectionEnum(servername, qualifier: LMSTR; level: DWORD; var bufptr: LPBYTE; prefmaxlen: DWORD; entriesread, totalentries, resume_handle: LPDWORD): NET_API_STATUS; stdcall;
  410. {$EXTERNALSYM NetConnectionEnum}
  411. //
  412. // Data Structures - CONNECTION
  413. //
  414. type
  415. LPCONNECTION_INFO_0 = ^CONNECTION_INFO_0;
  416. {$EXTERNALSYM LPCONNECTION_INFO_0}
  417. PCONNECTION_INFO_0 = ^CONNECTION_INFO_0;
  418. {$EXTERNALSYM PCONNECTION_INFO_0}
  419. _CONNECTION_INFO_0 = record
  420. coni0_id: DWORD;
  421. end;
  422. {$EXTERNALSYM _CONNECTION_INFO_0}
  423. CONNECTION_INFO_0 = _CONNECTION_INFO_0;
  424. {$EXTERNALSYM CONNECTION_INFO_0}
  425. TConnectionInfo0 = CONNECTION_INFO_0;
  426. PConnectionInfo0 = PCONNECTION_INFO_0;
  427. LPCONNECTION_INFO_1 = ^CONNECTION_INFO_1;
  428. {$EXTERNALSYM LPCONNECTION_INFO_1}
  429. PCONNECTION_INFO_1 = ^CONNECTION_INFO_1;
  430. {$EXTERNALSYM PCONNECTION_INFO_1}
  431. _CONNECTION_INFO_1 = record
  432. coni1_id: DWORD;
  433. coni1_type: DWORD;
  434. coni1_num_opens: DWORD;
  435. coni1_num_users: DWORD;
  436. coni1_time: DWORD;
  437. coni1_username: LMSTR;
  438. coni1_netname: LMSTR;
  439. end;
  440. {$EXTERNALSYM _CONNECTION_INFO_1}
  441. CONNECTION_INFO_1 = _CONNECTION_INFO_1;
  442. {$EXTERNALSYM CONNECTION_INFO_1}
  443. TConnectionInfo1 = CONNECTION_INFO_1;
  444. PConnectionInfo1 = PCONNECTION_INFO_1;
  445. //
  446. // FILE API
  447. //
  448. //
  449. // Function Prototypes - FILE
  450. //
  451. function NetFileClose(servername: LMSTR; fileid: DWORD): NET_API_STATUS; stdcall;
  452. {$EXTERNALSYM NetFileClose}
  453. function NetFileEnum(servername, basepath, username: LMSTR; level: DWORD; var bufptr: LPBYTE; prefmaxlen: DWORD; entriesread, totalentries, resume_handle: PDWORD_PTR): NET_API_STATUS; stdcall;
  454. {$EXTERNALSYM NetFileEnum}
  455. function NetFileGetInfo(servername: LMSTR; fileid, level: DWORD; var bufptr: LPBYTE): NET_API_STATUS; stdcall;
  456. {$EXTERNALSYM NetFileGetInfo}
  457. //
  458. // Data Structures - File
  459. //
  460. // File APIs are available at information levels 2 & 3 only. Levels 0 &
  461. // 1 are not supported.
  462. //
  463. type
  464. LPFILE_INFO_2 = ^FILE_INFO_2;
  465. {$EXTERNALSYM LPFILE_INFO_2}
  466. PFILE_INFO_2 = ^FILE_INFO_2;
  467. {$EXTERNALSYM PFILE_INFO_2}
  468. _FILE_INFO_2 = record
  469. fi2_id: DWORD;
  470. end;
  471. {$EXTERNALSYM _FILE_INFO_2}
  472. FILE_INFO_2 = _FILE_INFO_2;
  473. {$EXTERNALSYM FILE_INFO_2}
  474. TFileInfo2 = FILE_INFO_2;
  475. PFileInfo2 = PFILE_INFO_2;
  476. LPFILE_INFO_3 = ^FILE_INFO_3;
  477. {$EXTERNALSYM LPFILE_INFO_3}
  478. PFILE_INFO_3 = ^FILE_INFO_3;
  479. {$EXTERNALSYM PFILE_INFO_3}
  480. _FILE_INFO_3 = record
  481. fi3_id: DWORD;
  482. fi3_permissions: DWORD;
  483. fi3_num_locks: DWORD;
  484. fi3_pathname: LMSTR;
  485. fi3_username: LMSTR;
  486. end;
  487. {$EXTERNALSYM _FILE_INFO_3}
  488. FILE_INFO_3 = _FILE_INFO_3;
  489. {$EXTERNALSYM FILE_INFO_3}
  490. TFileInfo3 = FILE_INFO_3;
  491. PFileInfo3 = PFILE_INFO_3;
  492. //
  493. // Special Values and Constants - File
  494. //
  495. //
  496. // bit values for permissions
  497. //
  498. const
  499. PERM_FILE_READ = $1; // user has read access
  500. {$EXTERNALSYM PERM_FILE_READ}
  501. PERM_FILE_WRITE = $2; // user has write access
  502. {$EXTERNALSYM PERM_FILE_WRITE}
  503. PERM_FILE_CREATE = $4; // user has create access
  504. {$EXTERNALSYM PERM_FILE_CREATE}
  505. {$ENDIF JWA_INTERFACESECTION}
  506. {$IFNDEF JWA_INCLUDEMODE}
  507. implementation
  508. uses
  509. JwaWinDLLNames;
  510. {$ENDIF !JWA_INCLUDEMODE}
  511. {$IFDEF JWA_IMPLEMENTATIONSECTION}
  512. {$IFDEF DYNAMIC_LINK}
  513. var
  514. _NetShareAdd: Pointer;
  515. function NetShareAdd;
  516. begin
  517. GetProcedureAddress(_NetShareAdd, netapi32, 'NetShareAdd');
  518. asm
  519. MOV ESP, EBP
  520. POP EBP
  521. JMP [_NetShareAdd]
  522. end;
  523. end;
  524. var
  525. _NetShareEnum: Pointer;
  526. function NetShareEnum;
  527. begin
  528. GetProcedureAddress(_NetShareEnum, netapi32, 'NetShareEnum');
  529. asm
  530. MOV ESP, EBP
  531. POP EBP
  532. JMP [_NetShareEnum]
  533. end;
  534. end;
  535. var
  536. _NetShareEnumSticky: Pointer;
  537. function NetShareEnumSticky;
  538. begin
  539. GetProcedureAddress(_NetShareEnumSticky, netapi32, 'NetShareEnumSticky');
  540. asm
  541. MOV ESP, EBP
  542. POP EBP
  543. JMP [_NetShareEnumSticky]
  544. end;
  545. end;
  546. var
  547. _NetShareGetInfo: Pointer;
  548. function NetShareGetInfo;
  549. begin
  550. GetProcedureAddress(_NetShareGetInfo, netapi32, 'NetShareGetInfo');
  551. asm
  552. MOV ESP, EBP
  553. POP EBP
  554. JMP [_NetShareGetInfo]
  555. end;
  556. end;
  557. var
  558. _NetShareSetInfo: Pointer;
  559. function NetShareSetInfo;
  560. begin
  561. GetProcedureAddress(_NetShareSetInfo, netapi32, 'NetShareSetInfo');
  562. asm
  563. MOV ESP, EBP
  564. POP EBP
  565. JMP [_NetShareSetInfo]
  566. end;
  567. end;
  568. var
  569. _NetShareDel: Pointer;
  570. function NetShareDel;
  571. begin
  572. GetProcedureAddress(_NetShareDel, netapi32, 'NetShareDel');
  573. asm
  574. MOV ESP, EBP
  575. POP EBP
  576. JMP [_NetShareDel]
  577. end;
  578. end;
  579. var
  580. _NetShareDelSticky: Pointer;
  581. function NetShareDelSticky;
  582. begin
  583. GetProcedureAddress(_NetShareDelSticky, netapi32, 'NetShareDelSticky');
  584. asm
  585. MOV ESP, EBP
  586. POP EBP
  587. JMP [_NetShareDelSticky]
  588. end;
  589. end;
  590. var
  591. _NetShareCheck: Pointer;
  592. function NetShareCheck;
  593. begin
  594. GetProcedureAddress(_NetShareCheck, netapi32, 'NetShareCheck');
  595. asm
  596. MOV ESP, EBP
  597. POP EBP
  598. JMP [_NetShareCheck]
  599. end;
  600. end;
  601. var
  602. _NetSessionEnum: Pointer;
  603. function NetSessionEnum;
  604. begin
  605. GetProcedureAddress(_NetSessionEnum, netapi32, 'NetSessionEnum');
  606. asm
  607. MOV ESP, EBP
  608. POP EBP
  609. JMP [_NetSessionEnum]
  610. end;
  611. end;
  612. var
  613. _NetSessionDel: Pointer;
  614. function NetSessionDel;
  615. begin
  616. GetProcedureAddress(_NetSessionDel, netapi32, 'NetSessionDel');
  617. asm
  618. MOV ESP, EBP
  619. POP EBP
  620. JMP [_NetSessionDel]
  621. end;
  622. end;
  623. var
  624. _NetSessionGetInfo: Pointer;
  625. function NetSessionGetInfo;
  626. begin
  627. GetProcedureAddress(_NetSessionGetInfo, netapi32, 'NetSessionGetInfo');
  628. asm
  629. MOV ESP, EBP
  630. POP EBP
  631. JMP [_NetSessionGetInfo]
  632. end;
  633. end;
  634. var
  635. _NetConnectionEnum: Pointer;
  636. function NetConnectionEnum;
  637. begin
  638. GetProcedureAddress(_NetConnectionEnum, netapi32, 'NetConnectionEnum');
  639. asm
  640. MOV ESP, EBP
  641. POP EBP
  642. JMP [_NetConnectionEnum]
  643. end;
  644. end;
  645. var
  646. _NetFileClose: Pointer;
  647. function NetFileClose;
  648. begin
  649. GetProcedureAddress(_NetFileClose, netapi32, 'NetFileClose');
  650. asm
  651. MOV ESP, EBP
  652. POP EBP
  653. JMP [_NetFileClose]
  654. end;
  655. end;
  656. var
  657. _NetFileEnum: Pointer;
  658. function NetFileEnum;
  659. begin
  660. GetProcedureAddress(_NetFileEnum, netapi32, 'NetFileEnum');
  661. asm
  662. MOV ESP, EBP
  663. POP EBP
  664. JMP [_NetFileEnum]
  665. end;
  666. end;
  667. var
  668. _NetFileGetInfo: Pointer;
  669. function NetFileGetInfo;
  670. begin
  671. GetProcedureAddress(_NetFileGetInfo, netapi32, 'NetFileGetInfo');
  672. asm
  673. MOV ESP, EBP
  674. POP EBP
  675. JMP [_NetFileGetInfo]
  676. end;
  677. end;
  678. {$ELSE}
  679. function NetShareAdd; external netapi32 name 'NetShareAdd';
  680. function NetShareEnum; external netapi32 name 'NetShareEnum';
  681. function NetShareEnumSticky; external netapi32 name 'NetShareEnumSticky';
  682. function NetShareGetInfo; external netapi32 name 'NetShareGetInfo';
  683. function NetShareSetInfo; external netapi32 name 'NetShareSetInfo';
  684. function NetShareDel; external netapi32 name 'NetShareDel';
  685. function NetShareDelSticky; external netapi32 name 'NetShareDelSticky';
  686. function NetShareCheck; external netapi32 name 'NetShareCheck';
  687. function NetSessionEnum; external netapi32 name 'NetSessionEnum';
  688. function NetSessionDel; external netapi32 name 'NetSessionDel';
  689. function NetSessionGetInfo; external netapi32 name 'NetSessionGetInfo';
  690. function NetConnectionEnum; external netapi32 name 'NetConnectionEnum';
  691. function NetFileClose; external netapi32 name 'NetFileClose';
  692. function NetFileEnum; external netapi32 name 'NetFileEnum';
  693. function NetFileGetInfo; external netapi32 name 'NetFileGetInfo';
  694. {$ENDIF DYNAMIC_LINK}
  695. {$ENDIF JWA_IMPLEMENTATIONSECTION}
  696. {$IFNDEF JWA_INCLUDEMODE}
  697. end.
  698. {$ENDIF !JWA_INCLUDEMODE}