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

Windows编程

开发平台:

Delphi

  1. {******************************************************************************}
  2. {                                                                       }
  3. { Active Directory Helper Functions 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: adshlp.h, released June 2000. The original Pascal      }
  9. { code is: AdsHlp.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.gnu.org/copyleft/lesser.html }
  41. {                 }
  42. {******************************************************************************}
  43. unit JwaAdsHlp;
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include "adshlp.h"'}
  47. {$HPPEMIT ''}
  48. {$I WINDEFINES.INC}
  49. interface
  50. uses
  51.   ActiveX {TODO}, JwaAdsTLB, JwaWinType, JwaWinNT;
  52. function ADsGetObject(lpszPathName: LPCWSTR; const riid: TGUID; out ppObject: Pointer): HRESULT; stdcall;
  53. {$EXTERNALSYM ADsGetObject}
  54. function ADsBuildEnumerator(pADsContainer: IADsContainer; out ppEnumVariant: IEnumVARIANT): HRESULT; stdcall;
  55. {$EXTERNALSYM ADsBuildEnumerator}
  56. function ADsFreeEnumerator(pEnumVariant: IEnumVARIANT): HRESULT; stdcall;
  57. {$EXTERNALSYM ADsFreeEnumerator}
  58. function ADsEnumerateNext(pEnumVariant: IEnumVARIANT; cElements: ULONG;
  59.   var pvar: OleVariant; var pcElementsFetched: ULONG): HRESULT; stdcall;
  60. {$EXTERNALSYM ADsEnumerateNext}
  61. function ADsBuildVarArrayStr(lppPathNames: LPWSTR; dwPathNames: DWORD;
  62.   var pVar: OleVariant): HRESULT; stdcall;
  63. {$EXTERNALSYM ADsBuildVarArrayStr}
  64. function ADsBuildVarArrayInt(lpdwObjectTypes: LPDWORD; dwObjectTypes: DWORD;
  65.   var pVar: OleVariant): HRESULT; stdcall;
  66. {$EXTERNALSYM ADsBuildVarArrayInt}
  67. function ADsOpenObject(lpszPathName, lpszUserName, lpszPassword: LPCWSTR;
  68.   dwReserved: DWORD; const riid: TGUID; out ppObject: Pointer): HRESULT; stdcall;
  69. {$EXTERNALSYM ADsOpenObject}
  70. //
  71. // Helper functions for extended error support
  72. //
  73. function ADsGetLastError(var lpError: DWORD; lpErrorBuf: LPWSTR;
  74.   dwErrorBufLen: DWORD; lpNameBuf: LPWSTR; dwNameBufLen: DWORD): HRESULT; stdcall;
  75. {$EXTERNALSYM ADsGetLastError}
  76. procedure ADsSetLastError(dwErr: DWORD; pszError, pszProvider: LPCWSTR); stdcall;
  77. {$EXTERNALSYM ADsSetLastError}
  78. //procedure ADsFreeAllErrorRecords; stdcall;
  79. //{$EXTERNALSYM ADsFreeAllErrorRecords}
  80. function AllocADsMem(cb: DWORD): LPVOID; stdcall;
  81. {$EXTERNALSYM AllocADsMem}
  82. function FreeADsMem(pMem: LPVOID): BOOL; stdcall;
  83. {$EXTERNALSYM FreeADsMem}
  84. function ReallocADsMem(pOldMem: LPVOID; cbOld, cbNew: DWORD): LPVOID; stdcall;
  85. {$EXTERNALSYM ReallocADsMem}
  86. function AllocADsStr(pStr: LPCWSTR): LPWSTR; stdcall;
  87. {$EXTERNALSYM AllocADsStr}
  88. function FreeADsStr(pStr: LPWSTR): BOOL; stdcall;
  89. {$EXTERNALSYM FreeADsStr}
  90. function ReallocADsStr(var ppStr: LPWSTR; pStr: LPWSTR): BOOL; stdcall;
  91. {$EXTERNALSYM ReallocADsStr}
  92. function ADsEncodeBinaryData(pbSrcData: PBYTE; dwSrcLen: DWORD;
  93.   var ppszDestData: LPWSTR): HRESULT; stdcall;
  94. {$EXTERNALSYM ADsEncodeBinaryData}
  95. function ADsDecodeBinaryData(szSrcData: LPCWSTR; var ppbDestData: PBYTE;
  96.   var pdwDestLen: ULONG): HRESULT; stdcall;
  97. {$EXTERNALSYM ADsDecodeBinaryData}
  98. type
  99.   // imports of a type library sometimes are missing a few decls, these are just
  100.   // a few of them to make this file compile at all. I really should do all of
  101.   // them one day.
  102.   PADSVALUE = ^_adsvalue;
  103.   {$EXTERNALSYM PADSVALUE}
  104.   PADS_ATTR_INFO = ^_ads_attr_info;
  105.   {$EXTERNALSYM PADS_ATTR_INFO}
  106. function PropVariantToAdsType(var pVariant: OleVariant; dwNumVariant: DWORD;
  107.   var ppAdsValues: PADSVALUE; pdwNumValues: PDWORD): HRESULT; stdcall;
  108. {$EXTERNALSYM PropVariantToAdsType}
  109. function AdsTypeToPropVariant(pAdsValues: PADSVALUE; dwNumValues: DWORD;
  110.   var pVariant: OleVariant): HRESULT; stdcall;
  111. {$EXTERNALSYM AdsTypeToPropVariant}
  112. procedure AdsFreeAdsValues(pAdsValues: PADSVALUE; dwNumValues: DWORD); stdcall;
  113. {$EXTERNALSYM AdsFreeAdsValues}
  114. //
  115. // Helper routines to convert IADsSecurityDescriptor to a binary
  116. // security descriptor and also to convert a binary SD to 
  117. // IADsSecurityDescriptor.
  118. //
  119. // TODO VARIANT!
  120. function BinarySDToSecurityDescriptor(pSecurityDescriptor: PSECURITY_DESCRIPTOR;
  121.   var pVarsec: VARIANT; pszServerName, userName, passWord: LPCWSTR; dwFlags: DWORD): HRESULT; stdcall;
  122. {$EXTERNALSYM BinarySDToSecurityDescriptor}
  123. function SecurityDescriptorToBinarySD(vVarSecDes: VARIANT;
  124.   var ppSecurityDescriptor: PSECURITY_DESCRIPTOR; pdwSDLength: PDWORD;
  125.   pszServerName, userName, passWord: LPCWSTR; dwFlags: DWORD): HRESULT; stdcall;
  126. {$EXTERNALSYM SecurityDescriptorToBinarySD}
  127. implementation
  128. const
  129.   adslib = 'activeds.dll';
  130. {$IFDEF DYNAMIC_LINK}
  131. var
  132.   _ADsGetObject: Pointer;
  133. function ADsGetObject;
  134. begin
  135.   GetProcedureAddress(_ADsGetObject, adslib, 'ADsGetObject');
  136.   asm
  137.     mov esp, ebp
  138.     pop ebp
  139.     jmp [_ADsGetObject]
  140.   end;
  141. end;
  142. {$ELSE}
  143. function ADsGetObject; external adslib name 'ADsGetObject';
  144. {$ENDIF DYNAMIC_LINK}
  145. {$IFDEF DYNAMIC_LINK}
  146. var
  147.   _ADsBuildEnumerator: Pointer;
  148. function ADsBuildEnumerator;
  149. begin
  150.   GetProcedureAddress(_ADsBuildEnumerator, adslib, 'ADsBuildEnumerator');
  151.   asm
  152.     mov esp, ebp
  153.     pop ebp
  154.     jmp [_ADsBuildEnumerator]
  155.   end;
  156. end;
  157. {$ELSE}
  158. function ADsBuildEnumerator; external adslib name 'ADsBuildEnumerator';
  159. {$ENDIF DYNAMIC_LINK}
  160. {$IFDEF DYNAMIC_LINK}
  161. var
  162.   _ADsFreeEnumerator: Pointer;
  163. function ADsFreeEnumerator;
  164. begin
  165.   GetProcedureAddress(_ADsFreeEnumerator, adslib, 'ADsFreeEnumerator');
  166.   asm
  167.     mov esp, ebp
  168.     pop ebp
  169.     jmp [_ADsFreeEnumerator]
  170.   end;
  171. end;
  172. {$ELSE}
  173. function ADsFreeEnumerator; external adslib name 'ADsFreeEnumerator';
  174. {$ENDIF DYNAMIC_LINK}
  175. {$IFDEF DYNAMIC_LINK}
  176. var
  177.   _ADsEnumerateNext: Pointer;
  178. function ADsEnumerateNext;
  179. begin
  180.   GetProcedureAddress(_ADsEnumerateNext, adslib, 'ADsEnumerateNext');
  181.   asm
  182.     mov esp, ebp
  183.     pop ebp
  184.     jmp [_ADsEnumerateNext]
  185.   end;
  186. end;
  187. {$ELSE}
  188. function ADsEnumerateNext; external adslib name 'ADsEnumerateNext';
  189. {$ENDIF DYNAMIC_LINK}
  190. {$IFDEF DYNAMIC_LINK}
  191. var
  192.   _ADsBuildVarArrayStr: Pointer;
  193. function ADsBuildVarArrayStr;
  194. begin
  195.   GetProcedureAddress(_ADsBuildVarArrayStr, adslib, 'ADsBuildVarArrayStr');
  196.   asm
  197.     mov esp, ebp
  198.     pop ebp
  199.     jmp [_ADsBuildVarArrayStr]
  200.   end;
  201. end;
  202. {$ELSE}
  203. function ADsBuildVarArrayStr; external adslib name 'ADsBuildVarArrayStr';
  204. {$ENDIF DYNAMIC_LINK}
  205. {$IFDEF DYNAMIC_LINK}
  206. var
  207.   _ADsBuildVarArrayInt: Pointer;
  208. function ADsBuildVarArrayInt;
  209. begin
  210.   GetProcedureAddress(_ADsBuildVarArrayInt, adslib, 'ADsBuildVarArrayInt');
  211.   asm
  212.     mov esp, ebp
  213.     pop ebp
  214.     jmp [_ADsBuildVarArrayInt]
  215.   end;
  216. end;
  217. {$ELSE}
  218. function ADsBuildVarArrayInt; external adslib name 'ADsBuildVarArrayInt';
  219. {$ENDIF DYNAMIC_LINK}
  220. {$IFDEF DYNAMIC_LINK}
  221. var
  222.   _ADsOpenObject: Pointer;
  223. function ADsOpenObject;
  224. begin
  225.   GetProcedureAddress(_ADsOpenObject, adslib, 'ADsOpenObject');
  226.   asm
  227.     mov esp, ebp
  228.     pop ebp
  229.     jmp [_ADsOpenObject]
  230.   end;
  231. end;
  232. {$ELSE}
  233. function ADsOpenObject; external adslib name 'ADsOpenObject';
  234. {$ENDIF DYNAMIC_LINK}
  235. {$IFDEF DYNAMIC_LINK}
  236. var
  237.   _ADsGetLastError: Pointer;
  238. function ADsGetLastError;
  239. begin
  240.   GetProcedureAddress(_ADsGetLastError, adslib, 'ADsGetLastError');
  241.   asm
  242.     mov esp, ebp
  243.     pop ebp
  244.     jmp [_ADsGetLastError]
  245.   end;
  246. end;
  247. {$ELSE}
  248. function ADsGetLastError; external adslib name 'ADsGetLastError';
  249. {$ENDIF DYNAMIC_LINK}
  250. {$IFDEF DYNAMIC_LINK}
  251. var
  252.   _ADsSetLastError: Pointer;
  253. procedure ADsSetLastError;
  254. begin
  255.   GetProcedureAddress(_ADsSetLastError, adslib, 'ADsSetLastError');
  256.   asm
  257.     mov esp, ebp
  258.     pop ebp
  259.     jmp [_ADsSetLastError]
  260.   end;
  261. end;
  262. {$ELSE}
  263. procedure ADsSetLastError; external adslib name 'ADsSetLastError';
  264. {$ENDIF DYNAMIC_LINK}
  265. //procedure ADsFreeAllErrorRecords
  266. {$IFDEF DYNAMIC_LINK}
  267. var
  268.   _AllocADsMem: Pointer;
  269. function AllocADsMem;
  270. begin
  271.   GetProcedureAddress(_AllocADsMem, adslib, 'AllocADsMem');
  272.   asm
  273.     mov esp, ebp
  274.     pop ebp
  275.     jmp [_AllocADsMem]
  276.   end;
  277. end;
  278. {$ELSE}
  279. function AllocADsMem; external adslib name 'AllocADsMem';
  280. {$ENDIF DYNAMIC_LINK}
  281. {$IFDEF DYNAMIC_LINK}
  282. var
  283.   _FreeADsMem: Pointer;
  284. function FreeADsMem;
  285. begin
  286.   GetProcedureAddress(_FreeADsMem, adslib, 'FreeADsMem');
  287.   asm
  288.     mov esp, ebp
  289.     pop ebp
  290.     jmp [_FreeADsMem]
  291.   end;
  292. end;
  293. {$ELSE}
  294. function FreeADsMem; external adslib name 'FreeADsMem';
  295. {$ENDIF DYNAMIC_LINK}
  296. {$IFDEF DYNAMIC_LINK}
  297. var
  298.   _ReallocADsMem: Pointer;
  299. function ReallocADsMem;
  300. begin
  301.   GetProcedureAddress(_ReallocADsMem, adslib, 'ReallocADsMem');
  302.   asm
  303.     mov esp, ebp
  304.     pop ebp
  305.     jmp [_ReallocADsMem]
  306.   end;
  307. end;
  308. {$ELSE}
  309. function ReallocADsMem; external adslib name 'ReallocADsMem';
  310. {$ENDIF DYNAMIC_LINK}
  311. {$IFDEF DYNAMIC_LINK}
  312. var
  313.   _AllocADsStr: Pointer;
  314. function AllocADsStr;
  315. begin
  316.   GetProcedureAddress(_AllocADsStr, adslib, 'AllocADsStr');
  317.   asm
  318.     mov esp, ebp
  319.     pop ebp
  320.     jmp [_AllocADsStr]
  321.   end;
  322. end;
  323. {$ELSE}
  324. function AllocADsStr; external adslib name 'AllocADsStr';
  325. {$ENDIF DYNAMIC_LINK}
  326. {$IFDEF DYNAMIC_LINK}
  327. var
  328.   _FreeADsStr: Pointer;
  329. function FreeADsStr;
  330. begin
  331.   GetProcedureAddress(_FreeADsStr, adslib, 'FreeADsStr');
  332.   asm
  333.     mov esp, ebp
  334.     pop ebp
  335.     jmp [_FreeADsStr]
  336.   end;
  337. end;
  338. {$ELSE}
  339. function FreeADsStr; external adslib name 'FreeADsStr';
  340. {$ENDIF DYNAMIC_LINK}
  341. {$IFDEF DYNAMIC_LINK}
  342. var
  343.   _ReallocADsStr: Pointer;
  344. function ReallocADsStr;
  345. begin
  346.   GetProcedureAddress(_ReallocADsStr, adslib, 'ReallocADsStr');
  347.   asm
  348.     mov esp, ebp
  349.     pop ebp
  350.     jmp [_ReallocADsStr]
  351.   end;
  352. end;
  353. {$ELSE}
  354. function ReallocADsStr; external adslib name 'ReallocADsStr';
  355. {$ENDIF DYNAMIC_LINK}
  356. {$IFDEF DYNAMIC_LINK}
  357. var
  358.   _ADsEncodeBinaryData: Pointer;
  359. function ADsEncodeBinaryData;
  360. begin
  361.   GetProcedureAddress(_ADsEncodeBinaryData, adslib, 'ADsEncodeBinaryData');
  362.   asm
  363.     mov esp, ebp
  364.     pop ebp
  365.     jmp [_ADsEncodeBinaryData]
  366.   end;
  367. end;
  368. {$ELSE}
  369. function ADsEncodeBinaryData; external adslib name 'ADsEncodeBinaryData';
  370. {$ENDIF DYNAMIC_LINK}
  371. {$IFDEF DYNAMIC_LINK}
  372. var
  373.   _ADsDecodeBinaryData: Pointer;
  374. function ADsDecodeBinaryData;
  375. begin
  376.   GetProcedureAddress(_ADsDecodeBinaryData, adslib, 'ADsDecodeBinaryData');
  377.   asm
  378.     mov esp, ebp
  379.     pop ebp
  380.     jmp [_ADsDecodeBinaryData]
  381.   end;
  382. end;
  383. {$ELSE}
  384. function ADsDecodeBinaryData; external adslib name 'ADsDecodeBinaryData';
  385. {$ENDIF DYNAMIC_LINK}
  386. {$IFDEF DYNAMIC_LINK}
  387. var
  388.   _PropVariantToAdsType: Pointer;
  389. function PropVariantToAdsType;
  390. begin
  391.   GetProcedureAddress(_PropVariantToAdsType, adslib, 'PropVariantToAdsType');
  392.   asm
  393.     mov esp, ebp
  394.     pop ebp
  395.     jmp [_PropVariantToAdsType]
  396.   end;
  397. end;
  398. {$ELSE}
  399. function PropVariantToAdsType; external adslib name 'PropVariantToAdsType';
  400. {$ENDIF DYNAMIC_LINK}
  401. {$IFDEF DYNAMIC_LINK}
  402. var
  403.   _AdsTypeToPropVariant: Pointer;
  404. function AdsTypeToPropVariant;
  405. begin
  406.   GetProcedureAddress(_AdsTypeToPropVariant, adslib, 'AdsTypeToPropVariant');
  407.   asm
  408.     mov esp, ebp
  409.     pop ebp
  410.     jmp [_AdsTypeToPropVariant]
  411.   end;
  412. end;
  413. {$ELSE}
  414. function AdsTypeToPropVariant; external adslib name 'AdsTypeToPropVariant';
  415. {$ENDIF DYNAMIC_LINK}
  416. {$IFDEF DYNAMIC_LINK}
  417. var
  418.   _AdsFreeAdsValues: Pointer;
  419. procedure AdsFreeAdsValues;
  420. begin
  421.   GetProcedureAddress(_AdsFreeAdsValues, adslib, 'AdsFreeAdsValues');
  422.   asm
  423.     mov esp, ebp
  424.     pop ebp
  425.     jmp [_AdsFreeAdsValues]
  426.   end;
  427. end;
  428. {$ELSE}
  429. procedure AdsFreeAdsValues; external adslib name 'AdsFreeAdsValues';
  430. {$ENDIF DYNAMIC_LINK}
  431. {$IFDEF DYNAMIC_LINK}
  432. var
  433.   _BinarySDToSecurityDescriptor: Pointer;
  434. function BinarySDToSecurityDescriptor;
  435. begin
  436.   GetProcedureAddress(_BinarySDToSecurityDescriptor, adslib, 'BinarySDToSecurityDescriptor');
  437.   asm
  438.     mov esp, ebp
  439.     pop ebp
  440.     jmp [_BinarySDToSecurityDescriptor]
  441.   end;
  442. end;
  443. {$ELSE}
  444. function BinarySDToSecurityDescriptor; external adslib name 'BinarySDToSecurityDescriptor';
  445. {$ENDIF DYNAMIC_LINK}
  446. {$IFDEF DYNAMIC_LINK}
  447. var
  448.   _SecurityDescriptorToBinarySD: Pointer;
  449. function SecurityDescriptorToBinarySD;
  450. begin
  451.   GetProcedureAddress(_SecurityDescriptorToBinarySD, adslib, 'SecurityDescriptorToBinarySD');
  452.   asm
  453.     mov esp, ebp
  454.     pop ebp
  455.     jmp [_SecurityDescriptorToBinarySD]
  456.   end;
  457. end;
  458. {$ELSE}
  459. function SecurityDescriptorToBinarySD; external adslib name 'SecurityDescriptorToBinarySD';
  460. {$ENDIF DYNAMIC_LINK}
  461. end.