JwaActiveDS.pas
上传用户:davidchvip
上传日期:2009-07-28
资源大小:1749k
文件大小:36k
源码类别:

Windows编程

开发平台:

Delphi

  1. {******************************************************************************}
  2. {                                                                       }
  3. { Active Directory 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: activeds.h, released June 2000. The original Pascal    }
  9. { code is: ActiveDS.pas, released December 2000. The initial developer of the  }
  10. { Pascal code is Marcel van Brakel (brakelm@chello.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 home    }
  18. { page, located at http://delphi-jedi.org or my personal homepage located at   }
  19. { http://members.chello.nl/m.vanbrakel2                                        }
  20. {                }
  21. { The contents of this file are used with permission, subject to the Mozilla   }
  22. { Public License Version 1.1 (the "License"); you may not use this file except }
  23. { in compliance with the License. You may obtain a copy of the License at      }
  24. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  25. {                                                                              }
  26. { Software distributed under the License is distributed on an "AS IS" basis,   }
  27. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  28. { the specific language governing rights and limitations under the License.    }
  29. {                                                                              }
  30. { Alternatively, the contents of this file may be used under the terms of the  }
  31. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  32. { provisions of the LGPL License are applicable instead of those above.        }
  33. { If you wish to allow use of your version of this file only under the terms   }
  34. { of the LGPL License and not to allow others to use your version of this file }
  35. { under the MPL, indicate your decision by deleting  the provisions above and  }
  36. { replace  them with the notice and other provisions required by the LGPL      }
  37. { License.  If you do not delete the provisions above, a recipient may use     }
  38. { your version of this file under either the MPL or the LGPL License.          }
  39. {                 }
  40. { For more information about the LGPL: http://www.gn.org/copyleft/lesser.html }
  41. {      u                }
  42. {******************************************************************************}
  43. unit JwaActiveDS;
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include "activeds.h"'}
  47. {$HPPEMIT ''}
  48. {$HPPEMIT 'typedef GUID REFIID'}
  49. {$HPPEMIT ''}
  50. {$I WINDEFINES.INC}
  51. interface
  52. uses
  53.   ActiveX {TODO}, JwaAdsTLB, JwaWinNT, JwaWinType, JwaWinUser;
  54. type
  55.   REFIID = GUID;
  56.   {$NODEFINE REFIID}
  57. type
  58.   // imports of a type library sometimes are missing a few decls, these are just
  59.   // a few of them to make this file compile at all. I really should do all of
  60.   // them one day.
  61.   PADSVALUE = ^_adsvalue;
  62.   {$EXTERNALSYM PADSVALUE}
  63.   PADS_ATTR_INFO = ^_ads_attr_info;
  64.   {$EXTERNALSYM PADS_ATTR_INFO}
  65. //  Contents:   Master include file for Ole Ds
  66. //
  67. //  Notes:      All Ole Ds client applications must include this file. This
  68. //              provides access to the primary Ole Ds interfaces, the error
  69. //              codes, and function prototypes for the Ole Ds helper apis.
  70. //
  71. // Interface definitions and well known GUIDS for Ole Ds
  72. //
  73. //#include "iads.h"  >> AdsTLB from activeds.dll
  74. //
  75. // Helper function prototypes for Ole Ds
  76. //
  77. //#include "adshlp.h"
  78. function ADsGetObject(lpszPathName: LPCWSTR; const riid: REFIID; out ppObject: Pointer): HRESULT; stdcall;
  79. {$EXTERNALSYM ADsGetObject}
  80. function ADsBuildEnumerator(pADsContainer: IADsContainer; out ppEnumVariant: IEnumVARIANT): HRESULT; stdcall;
  81. {$EXTERNALSYM ADsBuildEnumerator}
  82. function ADsFreeEnumerator(var pEnumVariant: IEnumVARIANT): HRESULT;
  83. {$EXTERNALSYM ADsFreeEnumerator}
  84. function ADsEnumerateNext(pEnumVariant: IEnumVARIANT; cElements: ULONG;
  85.   var pvar: OleVariant; var pcElementsFetched: ULONG): HRESULT; stdcall;
  86. {$EXTERNALSYM ADsEnumerateNext}
  87. function ADsBuildVarArrayStr(lppPathNames: LPWSTR; dwPathNames: DWORD;
  88.   var pVar: OleVariant): HRESULT; stdcall;
  89. {$EXTERNALSYM ADsBuildVarArrayStr}
  90. function ADsBuildVarArrayInt(lpdwObjectTypes: LPDWORD; dwObjectTypes: DWORD;
  91.   var pVar: OleVariant): HRESULT; stdcall;
  92. {$EXTERNALSYM ADsBuildVarArrayInt}
  93. function ADsOpenObject(lpszPathName, lpszUserName, lpszPassword: LPCWSTR;
  94.   dwReserved: DWORD; const riid: REFIID; out ppObject: Pointer): HRESULT; stdcall;
  95. {$EXTERNALSYM ADsOpenObject}
  96. //
  97. // Helper functions for extended error support
  98. //
  99. function ADsGetLastError(var lpError: DWORD; lpErrorBuf: LPWSTR;
  100.   dwErrorBufLen: DWORD; lpNameBuf: LPWSTR; dwNameBufLen: DWORD): HRESULT; stdcall;
  101. {$EXTERNALSYM ADsGetLastError}
  102. procedure ADsSetLastError(dwErr: DWORD; pszError, pszProvider: LPCWSTR); stdcall;
  103. {$EXTERNALSYM ADsSetLastError}
  104. //procedure ADsFreeAllErrorRecords; stdcall;
  105. //{$EXTERNALSYM ADsFreeAllErrorRecords}
  106. function AllocADsMem(cb: DWORD): LPVOID; stdcall;
  107. {$EXTERNALSYM AllocADsMem}
  108. function FreeADsMem(pMem: LPVOID): BOOL; stdcall;
  109. {$EXTERNALSYM FreeADsMem}
  110. function ReallocADsMem(pOldMem: LPVOID; cbOld, cbNew: DWORD): LPVOID; stdcall;
  111. {$EXTERNALSYM ReallocADsMem}
  112. function AllocADsStr(pStr: LPCWSTR): LPWSTR; stdcall;
  113. {$EXTERNALSYM AllocADsStr}
  114. function FreeADsStr(pStr: LPWSTR): BOOL; stdcall;
  115. {$EXTERNALSYM FreeADsStr}
  116. function ReallocADsStr(var ppStr: LPWSTR; pStr: LPWSTR): BOOL; stdcall;
  117. {$EXTERNALSYM ReallocADsStr}
  118. function ADsEncodeBinaryData(pbSrcData: PBYTE; dwSrcLen: DWORD;
  119.   var ppszDestData: LPWSTR): HRESULT; stdcall;
  120. {$EXTERNALSYM ADsEncodeBinaryData}
  121. function ADsDecodeBinaryData(szSrcData: LPCWSTR; var ppbDestData: PBYTE;
  122.   var pdwDestLen: ULONG): HRESULT; stdcall;
  123. {$EXTERNALSYM ADsDecodeBinaryData}
  124. function PropVariantToAdsType(var pVariant: OleVariant; dwNumVariant: DWORD;
  125.   var ppAdsValues: PADSVALUE; pdwNumValues: PDWORD): HRESULT; stdcall;
  126. {$EXTERNALSYM PropVariantToAdsType}
  127. function AdsTypeToPropVariant(pAdsValues: PADSVALUE; dwNumValues: DWORD;
  128.   var pVariant: OleVariant): HRESULT; stdcall;
  129. {$EXTERNALSYM AdsTypeToPropVariant}
  130. procedure AdsFreeAdsValues(pAdsValues: PADSVALUE; dwNumValues: DWORD); stdcall;
  131. {$EXTERNALSYM AdsFreeAdsValues}
  132. //
  133. // Error codes for Ole Ds - generated from ....errmsg
  134. //
  135. //#include "adserr.h"
  136. // ---------------------- HRESULT value definitions -----------------
  137. //
  138. // HRESULT definitions
  139. //
  140. //
  141. //  Values are 32 bit values layed out as follows:
  142. //
  143. //   3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  144. //   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  145. //  +---+-+-+-----------------------+-------------------------------+
  146. //  |Sev|C|R|     Facility          |               Code            |
  147. //  +---+-+-+-----------------------+-------------------------------+
  148. //
  149. //  where
  150. //
  151. //      Sev - is the severity code
  152. //
  153. //          00 - Success
  154. //          01 - Informational
  155. //          10 - Warning
  156. //          11 - Error
  157. //
  158. //      C - is the Customer code flag
  159. //
  160. //      R - is a reserved bit
  161. //
  162. //      Facility - is the facility code
  163. //
  164. //      Code - is the facility's status code
  165. //
  166. //
  167. // Define the facility codes
  168. //
  169. const
  170.   FACILITY_WINDOWS  = 8;
  171.   {$EXTERNALSYM FACILITY_WINDOWS}
  172.   FACILITY_STORAGE  = 3;
  173.   {$EXTERNALSYM FACILITY_STORAGE}
  174.   FACILITY_RPC      = 1;
  175.   {$EXTERNALSYM FACILITY_RPC}
  176.   FACILITY_SSPI     = 9;
  177.   {$EXTERNALSYM FACILITY_SSPI}
  178.   FACILITY_WIN32    = 7;
  179.   {$EXTERNALSYM FACILITY_WIN32}
  180.   FACILITY_CONTROL  = 10;
  181.   {$EXTERNALSYM FACILITY_CONTROL}
  182.   FACILITY_NULL     = 0;
  183.   {$EXTERNALSYM FACILITY_NULL}
  184.   FACILITY_ITF      = 4;
  185.   {$EXTERNALSYM FACILITY_ITF}
  186.   FACILITY_DISPATCH = 2;
  187.   {$EXTERNALSYM FACILITY_DISPATCH}
  188. //
  189. // Define the severity codes
  190. //
  191. //
  192. // MessageId: E_ADS_BAD_PATHNAME
  193. //
  194. // MessageText:
  195. //
  196. //  An invalid Active Directory pathname was passed
  197. //
  198.   E_ADS_BAD_PATHNAME               = HRESULT($80005000);
  199.   {$EXTERNALSYM E_ADS_BAD_PATHNAME}
  200. //
  201. // MessageId: E_ADS_INVALID_DOMAIN_OBJECT
  202. //
  203. // MessageText:
  204. //
  205. //  An unknown Active Directory domain object was requested
  206. //
  207.   E_ADS_INVALID_DOMAIN_OBJECT      = HRESULT($80005001);
  208.   {$EXTERNALSYM  E_ADS_INVALID_DOMAIN_OBJECT}
  209. //
  210. // MessageId: E_ADS_INVALID_USER_OBJECT
  211. //
  212. // MessageText:
  213. //
  214. //  An unknown Active Directory user object was requested
  215. //
  216.   E_ADS_INVALID_USER_OBJECT        = HRESULT($80005002);
  217.   {$EXTERNALSYM E_ADS_INVALID_USER_OBJECT}
  218. //
  219. // MessageId: E_ADS_INVALID_COMPUTER_OBJECT
  220. //
  221. // MessageText:
  222. //
  223. //  An unknown Active Directory computer object was requested
  224. //
  225.   E_ADS_INVALID_COMPUTER_OBJECT    = HRESULT($80005003);
  226.   {$EXTERNALSYM E_ADS_INVALID_COMPUTER_OBJECT}
  227. //
  228. // MessageId: E_ADS_UNKNOWN_OBJECT
  229. //
  230. // MessageText:
  231. //
  232. //  An unknown Active Directory object was requested
  233. //
  234.   E_ADS_UNKNOWN_OBJECT             = HRESULT($80005004);
  235.   {$EXTERNALSYM E_ADS_UNKNOWN_OBJECT}
  236. //
  237. // MessageId: E_ADS_PROPERTY_NOT_SET
  238. //
  239. // MessageText:
  240. //
  241. //  The specified Active Directory property was not set
  242. //
  243.   E_ADS_PROPERTY_NOT_SET           = HRESULT($80005005);
  244.   {$EXTERNALSYM E_ADS_PROPERTY_NOT_SET}
  245. //
  246. // MessageId: E_ADS_PROPERTY_NOT_SUPPORTED
  247. //
  248. // MessageText:
  249. //
  250. //  The specified Active Directory property is not supported
  251. //
  252.   E_ADS_PROPERTY_NOT_SUPPORTED     = HRESULT($80005006);
  253.   {$EXTERNALSYM E_ADS_PROPERTY_NOT_SUPPORTED}
  254. //
  255. // MessageId: E_ADS_PROPERTY_INVALID
  256. //
  257. // MessageText:
  258. //
  259. //  The specified Active Directory property is invalid
  260. //
  261.   E_ADS_PROPERTY_INVALID           = HRESULT($80005007);
  262.   {$EXTERNALSYM E_ADS_PROPERTY_INVALID}
  263. //
  264. // MessageId: E_ADS_BAD_PARAMETER
  265. //
  266. // MessageText:
  267. //
  268. //  One or more input parameters are invalid
  269. //
  270.   E_ADS_BAD_PARAMETER              = HRESULT($80005008);
  271.   {$EXTERNALSYM E_ADS_BAD_PARAMETER}
  272. //
  273. // MessageId: E_ADS_OBJECT_UNBOUND
  274. //
  275. // MessageText:
  276. //
  277. //  The specified Active Directory object is not bound to a remote resource
  278. //
  279.   E_ADS_OBJECT_UNBOUND             = HRESULT($80005009);
  280.   {$EXTERNALSYM E_ADS_OBJECT_UNBOUND}
  281. //
  282. // MessageId: E_ADS_PROPERTY_NOT_MODIFIED
  283. //
  284. // MessageText:
  285. //
  286. //  The specified Active Directory object has not been modified
  287. //
  288.   E_ADS_PROPERTY_NOT_MODIFIED      = HRESULT($8000500A);
  289.   {$EXTERNALSYM E_ADS_PROPERTY_NOT_MODIFIED}
  290. //
  291. // MessageId: E_ADS_PROPERTY_MODIFIED
  292. //
  293. // MessageText:
  294. //
  295. //  The specified Active Directory object has not been modified
  296. //
  297.   E_ADS_PROPERTY_MODIFIED          = HRESULT($8000500B);
  298.   {$EXTERNALSYM E_ADS_PROPERTY_MODIFIED}
  299. //
  300. // MessageId: E_ADS_CANT_CONVERT_DATATYPE
  301. //
  302. // MessageText:
  303. //
  304. //  The Active Directory datatype cannot be converted to/from a native DS datatype
  305. //
  306.   E_ADS_CANT_CONVERT_DATATYPE      = HRESULT($8000500C);
  307.   {$EXTERNALSYM E_ADS_CANT_CONVERT_DATATYPE}
  308. //
  309. // MessageId: E_ADS_PROPERTY_NOT_FOUND
  310. //
  311. // MessageText:
  312. //
  313. //  The Active Directory property cannot be found in the cache.
  314. //
  315.   E_ADS_PROPERTY_NOT_FOUND         = HRESULT($8000500D);
  316.   {$EXTERNALSYM E_ADS_PROPERTY_NOT_FOUND}
  317. //
  318. // MessageId: E_ADS_OBJECT_EXISTS
  319. //
  320. // MessageText:
  321. //
  322. //  The Active Directory object exists.
  323. //
  324.   E_ADS_OBJECT_EXISTS              = HRESULT($8000500E);
  325.   {$EXTERNALSYM E_ADS_OBJECT_EXISTS}
  326. //
  327. // MessageId: E_ADS_SCHEMA_VIOLATION
  328. //
  329. // MessageText:
  330. //
  331. //  The attempted action violates the DS schema rules.
  332. //
  333.   E_ADS_SCHEMA_VIOLATION           = HRESULT($8000500F);
  334.   {$EXTERNALSYM E_ADS_SCHEMA_VIOLATION}
  335. //
  336. // MessageId: E_ADS_COLUMN_NOT_SET
  337. //
  338. // MessageText:
  339. //
  340. //  The specified column in the Active Directory was not set.
  341. //
  342.   E_ADS_COLUMN_NOT_SET             = HRESULT($80005010);
  343.   {$EXTERNALSYM E_ADS_COLUMN_NOT_SET}
  344. //
  345. // MessageId: S_ADS_ERRORSOCCURRED
  346. //
  347. // MessageText:
  348. //
  349. //  One or more errors occurred
  350. //
  351.   S_ADS_ERRORSOCCURRED             = HRESULT($00005011);
  352.   {$EXTERNALSYM S_ADS_ERRORSOCCURRED}
  353. //
  354. // MessageId: S_ADS_NOMORE_ROWS
  355. //
  356. // MessageText:
  357. //
  358. //  No more rows to be obatained by the search result.
  359. //
  360.   S_ADS_NOMORE_ROWS                = HRESULT($00005012);
  361.   {$EXTERNALSYM S_ADS_NOMORE_ROWS}
  362. //
  363. // MessageId: S_ADS_NOMORE_COLUMNS
  364. //
  365. // MessageText:
  366. //
  367. //  No more columns to be obatained for the current row.
  368. //
  369.   S_ADS_NOMORE_COLUMNS             = HRESULT($00005013);
  370.   {$EXTERNALSYM S_ADS_NOMORE_COLUMNS}
  371. //
  372. // MessageId: E_ADS_INVALID_FILTER
  373. //
  374. // MessageText:
  375. //
  376. //  The search filter specified is invalid
  377. //
  378.   E_ADS_INVALID_FILTER             = HRESULT($80005014);
  379.   {$EXTERNALSYM E_ADS_INVALID_FILTER}
  380. //
  381. // Globally accessible GUIDS
  382. //
  383. //#include "adsiid.h" -> adstlb from activeds.dll
  384. //
  385. // Status codes for ads objects
  386. //
  387. //#include "adssts.h"
  388. const
  389.   ADS_PRINTER_PAUSED            = $00000001;
  390.   {$EXTERNALSYM ADS_PRINTER_PAUSED}
  391.   ADS_PRINTER_PENDING_DELETION  = $00000002;
  392.   {$EXTERNALSYM ADS_PRINTER_PENDING_DELETION}
  393.   ADS_PRINTER_ERROR             = $00000003;
  394.   {$EXTERNALSYM ADS_PRINTER_ERROR}
  395.   ADS_PRINTER_PAPER_JAM         = $00000004;
  396.   {$EXTERNALSYM ADS_PRINTER_PAPER_JAM}
  397.   ADS_PRINTER_PAPER_OUT         = $00000005;
  398.   {$EXTERNALSYM ADS_PRINTER_PAPER_OUT}
  399.   ADS_PRINTER_MANUAL_FEED       = $00000006;
  400.   {$EXTERNALSYM ADS_PRINTER_MANUAL_FEED}
  401.   ADS_PRINTER_PAPER_PROBLEM     = $00000007;
  402.   {$EXTERNALSYM ADS_PRINTER_PAPER_PROBLEM}
  403.   ADS_PRINTER_OFFLINE           = $00000008;
  404.   {$EXTERNALSYM ADS_PRINTER_OFFLINE}
  405.   ADS_PRINTER_IO_ACTIVE         = $00000100;
  406.   {$EXTERNALSYM ADS_PRINTER_IO_ACTIVE}
  407.   ADS_PRINTER_BUSY              = $00000200;
  408.   {$EXTERNALSYM ADS_PRINTER_BUSY}
  409.   ADS_PRINTER_PRINTING          = $00000400;
  410.   {$EXTERNALSYM ADS_PRINTER_PRINTING}
  411.   ADS_PRINTER_OUTPUT_BIN_FULL   = $00000800;
  412.   {$EXTERNALSYM ADS_PRINTER_OUTPUT_BIN_FULL}
  413.   ADS_PRINTER_NOT_AVAILABLE     = $00001000;
  414.   {$EXTERNALSYM ADS_PRINTER_NOT_AVAILABLE}
  415.   ADS_PRINTER_WAITING           = $00002000;
  416.   {$EXTERNALSYM ADS_PRINTER_WAITING}
  417.   ADS_PRINTER_PROCESSING        = $00004000;
  418.   {$EXTERNALSYM ADS_PRINTER_PROCESSING}
  419.   ADS_PRINTER_INITIALIZING      = $00008000;
  420.   {$EXTERNALSYM ADS_PRINTER_INITIALIZING}
  421.   ADS_PRINTER_WARMING_UP        = $00010000;
  422.   {$EXTERNALSYM ADS_PRINTER_WARMING_UP}
  423.   ADS_PRINTER_TONER_LOW         = $00020000;
  424.   {$EXTERNALSYM ADS_PRINTER_TONER_LOW}
  425.   ADS_PRINTER_NO_TONER          = $00040000;
  426.   {$EXTERNALSYM ADS_PRINTER_NO_TONER}
  427.   ADS_PRINTER_PAGE_PUNT         = $00080000;
  428.   {$EXTERNALSYM ADS_PRINTER_PAGE_PUNT}
  429.   ADS_PRINTER_USER_INTERVENTION = $00100000;
  430.   {$EXTERNALSYM ADS_PRINTER_USER_INTERVENTION}
  431.   ADS_PRINTER_OUT_OF_MEMORY     = $00200000;
  432.   {$EXTERNALSYM ADS_PRINTER_OUT_OF_MEMORY}
  433.   ADS_PRINTER_DOOR_OPEN         = $00400000;
  434.   {$EXTERNALSYM ADS_PRINTER_DOOR_OPEN}
  435.   ADS_PRINTER_SERVER_UNKNOWN    = $00800000;
  436.   {$EXTERNALSYM ADS_PRINTER_SERVER_UNKNOWN}
  437.   ADS_PRINTER_POWER_SAVE        = $01000000;
  438.   {$EXTERNALSYM ADS_PRINTER_POWER_SAVE}
  439. //
  440. // job status values
  441. //
  442.   ADS_JOB_PAUSED   = $00000001;
  443.   {$EXTERNALSYM ADS_JOB_PAUSED}
  444.   ADS_JOB_ERROR    = $00000002;
  445.   {$EXTERNALSYM ADS_JOB_ERROR}
  446.   ADS_JOB_DELETING = $00000004;
  447.   {$EXTERNALSYM ADS_JOB_DELETING}
  448.   ADS_JOB_SPOOLING = $00000008;
  449.   {$EXTERNALSYM ADS_JOB_SPOOLING}
  450.   ADS_JOB_PRINTING = $00000010;
  451.   {$EXTERNALSYM ADS_JOB_PRINTING}
  452.   ADS_JOB_OFFLINE  = $00000020;
  453.   {$EXTERNALSYM ADS_JOB_OFFLINE}
  454.   ADS_JOB_PAPEROUT = $00000040;
  455.   {$EXTERNALSYM ADS_JOB_PAPEROUT}
  456.   ADS_JOB_PRINTED  = $00000080;
  457.   {$EXTERNALSYM ADS_JOB_PRINTED}
  458.   ADS_JOB_DELETED  = $00000100;
  459.   {$EXTERNALSYM ADS_JOB_DELETED}
  460. //
  461. // service status values
  462. //
  463.   ADS_SERVICE_STOPPED          = $00000001;
  464.   {$EXTERNALSYM ADS_SERVICE_STOPPED}
  465.   ADS_SERVICE_START_PENDING    = $00000002;
  466.   {$EXTERNALSYM ADS_SERVICE_START_PENDING }
  467.   ADS_SERVICE_STOP_PENDING     = $00000003;
  468.   {$EXTERNALSYM ADS_SERVICE_STOP_PENDING}
  469.   ADS_SERVICE_RUNNING          = $00000004;
  470.   {$EXTERNALSYM ADS_SERVICE_RUNNING }
  471.   ADS_SERVICE_CONTINUE_PENDING = $00000005;
  472.   {$EXTERNALSYM ADS_SERVICE_CONTINUE_PENDING}
  473.   ADS_SERVICE_PAUSE_PENDING    = $00000006;
  474.   {$EXTERNALSYM ADS_SERVICE_PAUSE_PENDING }
  475.   ADS_SERVICE_PAUSED           = $00000007;
  476.   {$EXTERNALSYM ADS_SERVICE_PAUSED}
  477.   ADS_SERVICE_ERROR            = $00000008;
  478.   {$EXTERNALSYM ADS_SERVICE_ERROR}
  479. //---------------------------------------------------------------------
  480. //
  481. // Service Type Valid Values
  482. //
  483.   ADS_SERVICE_OWN_PROCESS        = $00000010;
  484.   {$EXTERNALSYM ADS_SERVICE_OWN_PROCESS}
  485.   ADS_SERVICE_SHARE_PROCESS      = $00000020;
  486.   {$EXTERNALSYM ADS_SERVICE_SHARE_PROCESS}
  487.   ADS_SERVICE_KERNEL_DRIVER      = $00000001;
  488.   {$EXTERNALSYM ADS_SERVICE_KERNEL_DRIVER}
  489.   ADS_SERVICE_FILE_SYSTEM_DRIVER = $00000002;
  490.   {$EXTERNALSYM ADS_SERVICE_FILE_SYSTEM_DRIVER}
  491. //
  492. // Start Type Valid Values
  493. //
  494.   ADS_SERVICE_BOOT_START   = SERVICE_BOOT_START;
  495.   {$EXTERNALSYM ADS_SERVICE_BOOT_START}
  496.   ADS_SERVICE_SYSTEM_START = SERVICE_SYSTEM_START;
  497.   {$EXTERNALSYM ADS_SERVICE_SYSTEM_START}
  498.   ADS_SERVICE_AUTO_START   = SERVICE_AUTO_START;
  499.   {$EXTERNALSYM ADS_SERVICE_AUTO_START}
  500.   ADS_SERVICE_DEMAND_START = SERVICE_DEMAND_START;
  501.   {$EXTERNALSYM ADS_SERVICE_DEMAND_START}
  502.   ADS_SERVICE_DISABLED     = SERVICE_DISABLED;
  503.   {$EXTERNALSYM ADS_SERVICE_DISABLED}
  504. //
  505. // Error Control Values
  506. //
  507.   ADS_SERVICE_ERROR_IGNORE   = 0;
  508.   {$EXTERNALSYM ADS_SERVICE_ERROR_IGNORE}
  509.   ADS_SERVICE_ERROR_NORMAL   = 1;
  510.   {$EXTERNALSYM ADS_SERVICE_ERROR_NORMAL}
  511.   ADS_SERVICE_ERROR_SEVERE   = 2;
  512.   {$EXTERNALSYM ADS_SERVICE_ERROR_SEVERE}
  513.   ADS_SERVICE_ERROR_CRITICAL = 3;
  514.   {$EXTERNALSYM ADS_SERVICE_ERROR_CRITICAL}
  515. //
  516. // Schema class names and other schema related definitions
  517. //
  518. //#include "adsnms.h"
  519. const
  520.   NAMESPACE_CLASS_NAME        = 'Namespace';
  521.   {$EXTERNALSYM NAMESPACE_CLASS_NAME}
  522.   COUNTRY_CLASS_NAME          = 'Country';
  523.   {$EXTERNALSYM COUNTRY_CLASS_NAME}
  524.   LOCALITY_CLASS_NAME         = 'Locality';
  525.   {$EXTERNALSYM LOCALITY_CLASS_NAME}
  526.   ORGANIZATION_CLASS_NAME     = 'Organization';
  527.   {$EXTERNALSYM ORGANIZATION_CLASS_NAME}
  528.   ORGANIZATIONUNIT_CLASS_NAME = 'Organizational Unit';
  529.   {$EXTERNALSYM ORGANIZATIONUNIT_CLASS_NAME}
  530.   DOMAIN_CLASS_NAME           = 'Domain';
  531.   {$EXTERNALSYM DOMAIN_CLASS_NAME}
  532.   COMPUTER_CLASS_NAME         = 'Computer';
  533.   {$EXTERNALSYM COMPUTER_CLASS_NAME}
  534.   USER_CLASS_NAME             = 'User';
  535.   {$EXTERNALSYM USER_CLASS_NAME}
  536.   GROUP_CLASS_NAME            = 'Group';
  537.   {$EXTERNALSYM GROUP_CLASS_NAME}
  538.   GLOBALGROUP_CLASS_NAME      = 'GlobalGroup';
  539.   {$EXTERNALSYM GLOBALGROUP_CLASS_NAME}
  540.   LOCALGROUP_CLASS_NAME       = 'LocalGroup';
  541.   {$EXTERNALSYM LOCALGROUP_CLASS_NAME}
  542.   SERVICE_CLASS_NAME          = 'Service';
  543.   {$EXTERNALSYM SERVICE_CLASS_NAME}
  544.   FILESERVICE_CLASS_NAME      = 'FileService';
  545.   {$EXTERNALSYM FILESERVICE_CLASS_NAME}
  546.   SESSION_CLASS_NAME          = 'Session';
  547.   {$EXTERNALSYM SESSION_CLASS_NAME}
  548.   RESOURCE_CLASS_NAME         = 'Resource';
  549.   {$EXTERNALSYM RESOURCE_CLASS_NAME}
  550.   FILESHARE_CLASS_NAME        = 'FileShare';
  551.   {$EXTERNALSYM FILESHARE_CLASS_NAME}
  552.   PRINTER_CLASS_NAME          = 'PrintQueue';
  553.   {$EXTERNALSYM PRINTER_CLASS_NAME}
  554.   PRINTJOB_CLASS_NAME         = 'PrintJob';
  555.   {$EXTERNALSYM PRINTJOB_CLASS_NAME}
  556.   SCHEMA_CLASS_NAME           = 'Schema';
  557.   {$EXTERNALSYM SCHEMA_CLASS_NAME}
  558.   CLASS_CLASS_NAME            = 'Class';
  559.   {$EXTERNALSYM CLASS_CLASS_NAME}
  560.   PROPERTY_CLASS_NAME         = 'Property';
  561.   {$EXTERNALSYM PROPERTY_CLASS_NAME}
  562.   SYNTAX_CLASS_NAME           = 'Syntax';
  563.   {$EXTERNALSYM SYNTAX_CLASS_NAME}
  564.   ROOTDSE_CLASS_NAME          = 'RootDSE';
  565.   {$EXTERNALSYM ROOTDSE_CLASS_NAME}
  566.   NO_SCHEMA                    = '';
  567.   {$EXTERNALSYM NO_SCHEMA}
  568.   DOMAIN_SCHEMA_NAME           = 'Domain';
  569.   {$EXTERNALSYM DOMAIN_SCHEMA_NAME}
  570.   COMPUTER_SCHEMA_NAME         = 'Computer';
  571.   {$EXTERNALSYM COMPUTER_SCHEMA_NAME}
  572.   USER_SCHEMA_NAME             = 'User';
  573.   {$EXTERNALSYM USER_SCHEMA_NAME}
  574.   GROUP_SCHEMA_NAME            = 'Group';
  575.   {$EXTERNALSYM GROUP_SCHEMA_NAME}
  576.   GLOBALGROUP_SCHEMA_NAME      = 'GlobalGroup';
  577.   {$EXTERNALSYM GLOBALGROUP_SCHEMA_NAME}
  578.   LOCALGROUP_SCHEMA_NAME       = 'LocalGroup';
  579.   {$EXTERNALSYM LOCALGROUP_SCHEMA_NAME}
  580.   SERVICE_SCHEMA_NAME          = 'Service';
  581.   {$EXTERNALSYM SERVICE_SCHEMA_NAME}
  582.   PRINTER_SCHEMA_NAME          = 'PrintQueue';
  583.   {$EXTERNALSYM PRINTER_SCHEMA_NAME}
  584.   PRINTJOB_SCHEMA_NAME         = 'PrintJob';
  585.   {$EXTERNALSYM PRINTJOB_SCHEMA_NAME}
  586.   FILESERVICE_SCHEMA_NAME      = 'FileService';
  587.   {$EXTERNALSYM FILESERVICE_SCHEMA_NAME}
  588.   SESSION_SCHEMA_NAME          = 'Session';
  589.   {$EXTERNALSYM SESSION_SCHEMA_NAME}
  590.   RESOURCE_SCHEMA_NAME         = 'Resource';
  591.   {$EXTERNALSYM RESOURCE_SCHEMA_NAME}
  592.   FILESHARE_SCHEMA_NAME        = 'FileShare';
  593.   {$EXTERNALSYM FILESHARE_SCHEMA_NAME}
  594.   FPNW_FILESERVICE_SCHEMA_NAME = 'FPNWFileService';
  595.   {$EXTERNALSYM FPNW_FILESERVICE_SCHEMA_NAME}
  596.   FPNW_SESSION_SCHEMA_NAME     = 'FPNWSession';
  597.   {$EXTERNALSYM FPNW_SESSION_SCHEMA_NAME}
  598.   FPNW_RESOURCE_SCHEMA_NAME    = 'FPNWResource';
  599.   {$EXTERNALSYM FPNW_RESOURCE_SCHEMA_NAME}
  600.   FPNW_FILESHARE_SCHEMA_NAME   = 'FPNWFileShare';
  601.   {$EXTERNALSYM FPNW_FILESHARE_SCHEMA_NAME}
  602. //
  603. // Definitions in the OLE DB provider for ADSI
  604. //
  605. //#include "adsdb.h"
  606. //
  607. // printer status values
  608. //
  609. // Most of the constants have been moved into an enum in adstype.h and
  610. // are available publicly in iads.h. This file has been left here so that
  611. // old references to adsdb.h do not break compiles.
  612. const
  613.   DBPROPFLAGS_ADSISEARCH        = $0000C000;
  614.   {$EXTERNALSYM DBPROPFLAGS_ADSISEARCH}
  615. //#include "adsprop.h"
  616. //  Windows NT Active Directory Service Property Pages
  617. //
  618. //  Contents:   Functions and definitions used in the creation of AD property
  619. //              sheets.
  620. const
  621.   WM_ADSPROP_NOTIFY_PAGEINIT   = (WM_USER + 1101); // where LPARAM is the PADSPROPINITPARAMS pointer.
  622.   {$EXTERNALSYM WM_ADSPROP_NOTIFY_PAGEINIT}
  623.   WM_ADSPROP_NOTIFY_PAGEHWND   = (WM_USER + 1102); // where WPARAM => page's HWND
  624.   {$EXTERNALSYM WM_ADSPROP_NOTIFY_PAGEHWND}
  625.   WM_ADSPROP_NOTIFY_CHANGE     = (WM_USER + 1103); // used to send a change notification to a parent sheet
  626.   {$EXTERNALSYM WM_ADSPROP_NOTIFY_CHANGE}
  627.   WM_ADSPROP_NOTIFY_APPLY      = (WM_USER + 1104); // pages send this to the notification object.
  628.   {$EXTERNALSYM WM_ADSPROP_NOTIFY_APPLY}
  629.   WM_ADSPROP_NOTIFY_SETFOCUS   = (WM_USER + 1105); // used internally by the notification object.
  630.   {$EXTERNALSYM WM_ADSPROP_NOTIFY_SETFOCUS}
  631.   WM_ADSPROP_NOTIFY_FOREGROUND = (WM_USER + 1106); // used internally by the notification object.
  632.   {$EXTERNALSYM WM_ADSPROP_NOTIFY_FOREGROUND}
  633.   WM_ADSPROP_NOTIFY_EXIT       = (WM_USER + 1107); // sent on page release
  634.   {$EXTERNALSYM WM_ADSPROP_NOTIFY_EXIT}
  635. //+----------------------------------------------------------------------------
  636. //
  637. //  Structure:  ADSPROPINITPARAMS
  638. //
  639. //  Usage:      Used to pass page initialization information to new pages from
  640. //              the notify object.
  641. //
  642. //-----------------------------------------------------------------------------
  643. type
  644.   PADSPROPINITPARAMS = ^ADSPROPINITPARAMS;
  645.   {$EXTERNALSYM PADSPROPINITPARAMS}
  646.   _ADSPROPINITPARAMS = record
  647.     dwSize: DWORD;            // Set this to the size of the struct.
  648.     dwFlags: DWORD;           // Reserved for future use.
  649.     hr: HRESULT;              // If this is non-zero, then the others
  650.     pDsObj: IDirectoryObject; // should be ignored.
  651.     pwzCN: LPWSTR;
  652.     pWritableAttrs: PADS_ATTR_INFO;
  653.   end;
  654.   {$EXTERNALSYM _ADSPROPINITPARAMS}
  655.   ADSPROPINITPARAMS = _ADSPROPINITPARAMS;
  656.   {$EXTERNALSYM ADSPROPINITPARAMS}
  657.   TAdsPropInitParams = ADSPROPINITPARAMS;
  658. //+----------------------------------------------------------------------------
  659. //
  660. //  Function:   ADsPropCreateNotifyObj
  661. //
  662. //  Synopsis:   Checks to see if the notification window/object exists for this
  663. //              sheet instance and if not creates it.
  664. //
  665. //  Arguments:  [pAppThdDataObj] - the unmarshalled data object pointer.
  666. //              [pwzADsObjName]  - object path name.
  667. //              [phNotifyObj]    - to return the notificion window handle.
  668. //
  669. //  Returns:    HRESULTs.
  670. //
  671. //-----------------------------------------------------------------------------
  672. function ADsPropCreateNotifyObj(pAppThdDataObj: Pointer; {LPDATAOBJECT}
  673.   pwzADsObjName: PWSTR; var phNotifyObj: HWND): HRESULT; stdcall;
  674. {$EXTERNALSYM ADsPropCreateNotifyObj}
  675. //+----------------------------------------------------------------------------
  676. //
  677. //  Function:   ADsPropGetInitInfo
  678. //
  679. //  Synopsis:   Pages call this at their init time to retreive DS object info.
  680. //
  681. //  Arguments:  [hNotifyObj]  - the notificion window handle.
  682. //              [pInitParams] - struct filled in with DS object info. This
  683. //                              struct must be allocated by the caller before
  684. //                              the call.
  685. //
  686. //  Returns:    FALSE if the notify window has gone away for some reason or
  687. //              if the parameters are invalid.
  688. //
  689. //  Notes:      This call results in the sending of the
  690. //              WM_ADSPROP_NOTIFY_PAGEINIT message to the notify window.
  691. //              pInitParams->pWritableAttrs can be NULL if there are no
  692. //              writable attributes.
  693. //
  694. //-----------------------------------------------------------------------------
  695. function ADsPropGetInitInfo(hNotifyObj: HWND; pInitParams: PADSPROPINITPARAMS): BOOL; stdcall;
  696. {$EXTERNALSYM ADsPropGetInitInfo}
  697. //+----------------------------------------------------------------------------
  698. //
  699. //  Function:   ADsPropSetHwnd
  700. //
  701. //  Synopsis:   Pages call this at their dialog init time to send their hwnd.
  702. //
  703. //  Arguments:  [hNotifyObj]  - the notificion window handle.
  704. //              [hPage]       - the page's window handle.
  705. //
  706. //  Returns:    FALSE if the notify window has gone away for some reason.
  707. //
  708. //  Notes:      Sends the WM_ADSPROP_NOTIFY_PAGEHWND message to the notify
  709. //              window.
  710. //
  711. //-----------------------------------------------------------------------------
  712. function ADsPropSetHwnd(hNotifyObj: HWND; hPage: HWND): BOOL; stdcall;
  713. {$EXTERNALSYM ADsPropSetHwnd}
  714. //+----------------------------------------------------------------------------
  715. //
  716. //  function:   ADsPropCheckIfWritable
  717. //
  718. //  Synopsis:   See if the attribute is writable by checking if it is in
  719. //              the allowedAttributesEffective array.
  720. //
  721. //  Arguments:  [pwzAttr]        - the attribute name.
  722. //              [pWritableAttrs] - the array of writable attributes.
  723. //
  724. //  Returns:    FALSE if the attribute name is not found in the writable-attrs
  725. //              array or if the array pointer is NULL.
  726. //
  727. //-----------------------------------------------------------------------------
  728. function ADsPropCheckIfWritable(pwzAttr: PWSTR; pWritableAttrs: PADS_ATTR_INFO): BOOL; stdcall;
  729. {$EXTERNALSYM ADsPropCheckIfWritable}
  730. implementation
  731. const
  732.   adslib = 'activeds.dll';
  733.   dsprop = 'dsprop.dll';
  734. // adshlp.h
  735. {$IFDEF DYNAMIC_LINK}
  736. var
  737.   _ADsGetObject: Pointer;
  738. function ADsGetObject;
  739. begin
  740.   GetProcedureAddress(_ADsGetObject, adslib, 'ADsGetObject');
  741.   asm
  742.     mov esp, ebp
  743.     pop ebp
  744.     jmp [_ADsGetObject]
  745.   end;
  746. end;
  747. {$ELSE}
  748. function ADsGetObject; external adslib name 'ADsGetObject';
  749. {$ENDIF DYNAMIC_LINK}
  750. {$IFDEF DYNAMIC_LINK}
  751. var
  752.   _ADsBuildEnumerator: Pointer;
  753. function ADsBuildEnumerator;
  754. begin
  755.   GetProcedureAddress(_ADsBuildEnumerator, adslib, 'ADsBuildEnumerator');
  756.   asm
  757.     mov esp, ebp
  758.     pop ebp
  759.     jmp [_ADsBuildEnumerator]
  760.   end;
  761. end;
  762. {$ELSE}
  763. function ADsBuildEnumerator; external adslib name 'ADsBuildEnumerator';
  764. {$ENDIF DYNAMIC_LINK}
  765. function _ADsFreeEnumerator(pEnumVariant: IEnumVARIANT): HRESULT; stdcall; external adslib name 'ADsFreeEnumerator';
  766. function ADsFreeEnumerator(var pEnumVariant: IEnumVARIANT): HRESULT;
  767. begin
  768.   Result := _ADsFreeEnumerator(pEnumVariant);
  769.   // ADsFreeEnumerator doesn't set pEnumVariant to nil causing Delphi to call
  770.   // Release() again when pEnumVariant leaves scope. Result would be an access
  771.   // violation, explicitly setting the interface to nil prevents this.
  772.   if Result = 0{S_OK} then Pointer(pEnumVariant) := nil;
  773. end;
  774. {$IFDEF DYNAMIC_LINK}
  775. var
  776.   _ADsEnumerateNext: Pointer;
  777. function ADsEnumerateNext;
  778. begin
  779.   GetProcedureAddress(_ADsEnumerateNext, adslib, 'ADsEnumerateNext');
  780.   asm
  781.     mov esp, ebp
  782.     pop ebp
  783.     jmp [_ADsEnumerateNext]
  784.   end;
  785. end;
  786. {$ELSE}
  787. function ADsEnumerateNext; external adslib name 'ADsEnumerateNext';
  788. {$ENDIF DYNAMIC_LINK}
  789. {$IFDEF DYNAMIC_LINK}
  790. var
  791.   _ADsBuildVarArrayStr: Pointer;
  792. function ADsBuildVarArrayStr;
  793. begin
  794.   GetProcedureAddress(_ADsBuildVarArrayStr, adslib, 'ADsBuildVarArrayStr');
  795.   asm
  796.     mov esp, ebp
  797.     pop ebp
  798.     jmp [_ADsBuildVarArrayStr]
  799.   end;
  800. end;
  801. {$ELSE}
  802. function ADsBuildVarArrayStr; external adslib name 'ADsBuildVarArrayStr';
  803. {$ENDIF DYNAMIC_LINK}
  804. {$IFDEF DYNAMIC_LINK}
  805. var
  806.   _ADsBuildVarArrayInt: Pointer;
  807. function ADsBuildVarArrayInt;
  808. begin
  809.   GetProcedureAddress(_ADsBuildVarArrayInt, adslib, 'ADsBuildVarArrayInt');
  810.   asm
  811.     mov esp, ebp
  812.     pop ebp
  813.     jmp [_ADsBuildVarArrayInt]
  814.   end;
  815. end;
  816. {$ELSE}
  817. function ADsBuildVarArrayInt; external adslib name 'ADsBuildVarArrayInt';
  818. {$ENDIF DYNAMIC_LINK}
  819. {$IFDEF DYNAMIC_LINK}
  820. var
  821.   _ADsOpenObject: Pointer;
  822. function ADsOpenObject;
  823. begin
  824.   GetProcedureAddress(_ADsOpenObject, adslib, 'ADsOpenObject');
  825.   asm
  826.     mov esp, ebp
  827.     pop ebp
  828.     jmp [_ADsOpenObject]
  829.   end;
  830. end;
  831. {$ELSE}
  832. function ADsOpenObject; external adslib name 'ADsOpenObject';
  833. {$ENDIF DYNAMIC_LINK}
  834. {$IFDEF DYNAMIC_LINK}
  835. var
  836.   _ADsGetLastError: Pointer;
  837. function ADsGetLastError;
  838. begin
  839.   GetProcedureAddress(_ADsGetLastError, adslib, 'ADsGetLastError');
  840.   asm
  841.     mov esp, ebp
  842.     pop ebp
  843.     jmp [_ADsGetLastError]
  844.   end;
  845. end;
  846. {$ELSE}
  847. function ADsGetLastError; external adslib name 'ADsGetLastError';
  848. {$ENDIF DYNAMIC_LINK}
  849. {$IFDEF DYNAMIC_LINK}
  850. var
  851.   _ADsSetLastError: Pointer;
  852. procedure ADsSetLastError;
  853. begin
  854.   GetProcedureAddress(_ADsSetLastError, adslib, 'ADsSetLastError');
  855.   asm
  856.     mov esp, ebp
  857.     pop ebp
  858.     jmp [_ADsSetLastError]
  859.   end;
  860. end;
  861. {$ELSE}
  862. procedure ADsSetLastError; external adslib name 'ADsSetLastError';
  863. {$ENDIF DYNAMIC_LINK}
  864. //procedure ADsFreeAllErrorRecords
  865. {$IFDEF DYNAMIC_LINK}
  866. var
  867.   _AllocADsMem: Pointer;
  868. function AllocADsMem;
  869. begin
  870.   GetProcedureAddress(_AllocADsMem, adslib, 'AllocADsMem');
  871.   asm
  872.     mov esp, ebp
  873.     pop ebp
  874.     jmp [_AllocADsMem]
  875.   end;
  876. end;
  877. {$ELSE}
  878. function AllocADsMem; external adslib name 'AllocADsMem';
  879. {$ENDIF DYNAMIC_LINK}
  880. {$IFDEF DYNAMIC_LINK}
  881. var
  882.   _FreeADsMem: Pointer;
  883. function FreeADsMem;
  884. begin
  885.   GetProcedureAddress(_FreeADsMem, adslib, 'FreeADsMem');
  886.   asm
  887.     mov esp, ebp
  888.     pop ebp
  889.     jmp [_FreeADsMem]
  890.   end;
  891. end;
  892. {$ELSE}
  893. function FreeADsMem; external adslib name 'FreeADsMem';
  894. {$ENDIF DYNAMIC_LINK}
  895. {$IFDEF DYNAMIC_LINK}
  896. var
  897.   _ReallocADsMem: Pointer;
  898. function ReallocADsMem;
  899. begin
  900.   GetProcedureAddress(_ReallocADsMem, adslib, 'ReallocADsMem');
  901.   asm
  902.     mov esp, ebp
  903.     pop ebp
  904.     jmp [_ReallocADsMem]
  905.   end;
  906. end;
  907. {$ELSE}
  908. function ReallocADsMem; external adslib name 'ReallocADsMem';
  909. {$ENDIF DYNAMIC_LINK}
  910. {$IFDEF DYNAMIC_LINK}
  911. var
  912.   _AllocADsStr: Pointer;
  913. function AllocADsStr;
  914. begin
  915.   GetProcedureAddress(_AllocADsStr, adslib, 'AllocADsStr');
  916.   asm
  917.     mov esp, ebp
  918.     pop ebp
  919.     jmp [_AllocADsStr]
  920.   end;
  921. end;
  922. {$ELSE}
  923. function AllocADsStr; external adslib name 'AllocADsStr';
  924. {$ENDIF DYNAMIC_LINK}
  925. {$IFDEF DYNAMIC_LINK}
  926. var
  927.   _FreeADsStr: Pointer;
  928. function FreeADsStr;
  929. begin
  930.   GetProcedureAddress(_FreeADsStr, adslib, 'FreeADsStr');
  931.   asm
  932.     mov esp, ebp
  933.     pop ebp
  934.     jmp [_FreeADsStr]
  935.   end;
  936. end;
  937. {$ELSE}
  938. function FreeADsStr; external adslib name 'FreeADsStr';
  939. {$ENDIF DYNAMIC_LINK}
  940. {$IFDEF DYNAMIC_LINK}
  941. var
  942.   _ReallocADsStr: Pointer;
  943. function ReallocADsStr;
  944. begin
  945.   GetProcedureAddress(_ReallocADsStr, adslib, 'ReallocADsStr');
  946.   asm
  947.     mov esp, ebp
  948.     pop ebp
  949.     jmp [_ReallocADsStr]
  950.   end;
  951. end;
  952. {$ELSE}
  953. function ReallocADsStr; external adslib name 'ReallocADsStr';
  954. {$ENDIF DYNAMIC_LINK}
  955. {$IFDEF DYNAMIC_LINK}
  956. var
  957.   _ADsEncodeBinaryData: Pointer;
  958. function ADsEncodeBinaryData;
  959. begin
  960.   GetProcedureAddress(_ADsEncodeBinaryData, adslib, 'ADsEncodeBinaryData');
  961.   asm
  962.     mov esp, ebp
  963.     pop ebp
  964.     jmp [_ADsEncodeBinaryData]
  965.   end;
  966. end;
  967. {$ELSE}
  968. function ADsEncodeBinaryData; external adslib name 'ADsEncodeBinaryData';
  969. {$ENDIF DYNAMIC_LINK}
  970. {$IFDEF DYNAMIC_LINK}
  971. var
  972.   _ADsDecodeBinaryData: Pointer;
  973. function ADsDecodeBinaryData;
  974. begin
  975.   GetProcedureAddress(_ADsDecodeBinaryData, adslib, 'ADsDecodeBinaryData');
  976.   asm
  977.     mov esp, ebp
  978.     pop ebp
  979.     jmp [_ADsDecodeBinaryData]
  980.   end;
  981. end;
  982. {$ELSE}
  983. function ADsDecodeBinaryData; external adslib name 'ADsDecodeBinaryData';
  984. {$ENDIF DYNAMIC_LINK}
  985. {$IFDEF DYNAMIC_LINK}
  986. var
  987.   _PropVariantToAdsType: Pointer;
  988. function PropVariantToAdsType;
  989. begin
  990.   GetProcedureAddress(_PropVariantToAdsType, adslib, 'PropVariantToAdsType');
  991.   asm
  992.     mov esp, ebp
  993.     pop ebp
  994.     jmp [_PropVariantToAdsType]
  995.   end;
  996. end;
  997. {$ELSE}
  998. function PropVariantToAdsType; external adslib name 'PropVariantToAdsType';
  999. {$ENDIF DYNAMIC_LINK}
  1000. {$IFDEF DYNAMIC_LINK}
  1001. var
  1002.   _AdsTypeToPropVariant: Pointer;
  1003. function AdsTypeToPropVariant;
  1004. begin
  1005.   GetProcedureAddress(_AdsTypeToPropVariant, adslib, 'AdsTypeToPropVariant');
  1006.   asm
  1007.     mov esp, ebp
  1008.     pop ebp
  1009.     jmp [_AdsTypeToPropVariant]
  1010.   end;
  1011. end;
  1012. {$ELSE}
  1013. function AdsTypeToPropVariant; external adslib name 'AdsTypeToPropVariant';
  1014. {$ENDIF DYNAMIC_LINK}
  1015. {$IFDEF DYNAMIC_LINK}
  1016. var
  1017.   _AdsFreeAdsValues: Pointer;
  1018. procedure AdsFreeAdsValues;
  1019. begin
  1020.   GetProcedureAddress(_AdsFreeAdsValues, adslib, 'AdsFreeAdsValues');
  1021.   asm
  1022.     mov esp, ebp
  1023.     pop ebp
  1024.     jmp [_AdsFreeAdsValues]
  1025.   end;
  1026. end;
  1027. {$ELSE}
  1028. procedure AdsFreeAdsValues; external adslib name 'AdsFreeAdsValues';
  1029. {$ENDIF DYNAMIC_LINK}
  1030. // adsprop.h
  1031. {$IFDEF DYNAMIC_LINK}
  1032. var
  1033.   _ADsPropCreateNotifyObj: Pointer;
  1034. function ADsPropCreateNotifyObj;
  1035. begin
  1036.   GetProcedureAddress(_ADsPropCreateNotifyObj, dsprop, 'ADsPropCreateNotifyObj');
  1037.   asm
  1038.     mov esp, ebp
  1039.     pop ebp
  1040.     jmp [_ADsPropCreateNotifyObj]
  1041.   end;
  1042. end;
  1043. {$ELSE}
  1044. function ADsPropCreateNotifyObj; external dsprop name 'ADsPropCreateNotifyObj';
  1045. {$ENDIF DYNAMIC_LINK}
  1046. {$IFDEF DYNAMIC_LINK}
  1047. var
  1048.   _ADsPropGetInitInfo: Pointer;
  1049. function ADsPropGetInitInfo;
  1050. begin
  1051.   GetProcedureAddress(_ADsPropGetInitInfo, dsprop, 'ADsPropGetInitInfo');
  1052.   asm
  1053.     mov esp, ebp
  1054.     pop ebp
  1055.     jmp [_ADsPropGetInitInfo]
  1056.   end;
  1057. end;
  1058. {$ELSE}
  1059. function ADsPropGetInitInfo; external dsprop name 'ADsPropGetInitInfo';
  1060. {$ENDIF DYNAMIC_LINK}
  1061. {$IFDEF DYNAMIC_LINK}
  1062. var
  1063.   _ADsPropSetHwnd: Pointer;
  1064. function ADsPropSetHwnd;
  1065. begin
  1066.   GetProcedureAddress(_ADsPropSetHwnd, dsprop, 'ADsPropSetHwnd');
  1067.   asm
  1068.     mov esp, ebp
  1069.     pop ebp
  1070.     jmp [_ADsPropSetHwnd]
  1071.   end;
  1072. end;
  1073. {$ELSE}
  1074. function ADsPropSetHwnd; external dsprop name 'ADsPropSetHwnd';
  1075. {$ENDIF DYNAMIC_LINK}
  1076. {$IFDEF DYNAMIC_LINK}
  1077. var
  1078.   _ADsPropCheckIfWritable: Pointer;
  1079. function ADsPropCheckIfWritable;
  1080. begin
  1081.   GetProcedureAddress(_ADsPropCheckIfWritable, dsprop, 'ADsPropCheckIfWritable');
  1082.   asm
  1083.     mov esp, ebp
  1084.     pop ebp
  1085.     jmp [_ADsPropCheckIfWritable]
  1086.   end;
  1087. end;
  1088. {$ELSE}
  1089. function ADsPropCheckIfWritable; external dsprop name 'ADsPropCheckIfWritable';
  1090. {$ENDIF DYNAMIC_LINK}
  1091. end.