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

Windows编程

开发平台:

Delphi

  1. {******************************************************************************}
  2. {                                                                       }
  3. { SSPI Context Management 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: secext.h, released August 2001. The original Pascal    }
  9. { code is: SecExt.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 JwaSecExt;
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include "secext.h"'}
  47. {$HPPEMIT ''}
  48. {$I WINDEFINES.INC}
  49. interface
  50. uses
  51.   JwaSSPI, JwaWinType;
  52. //
  53. // Extended Name APIs for ADS
  54. //
  55. const
  56.   // Examples for the following formats assume a fictitous company
  57.   // which hooks into the global X.500 and DNS name spaces as follows.
  58.   //
  59.   // Enterprise root domain in DNS is
  60.   //
  61.   //      widget.com
  62.   //
  63.   // Enterprise root domain in X.500 (RFC 1779 format) is
  64.   //
  65.   //      O=Widget, C=US
  66.   //
  67.   // There exists the child domain
  68.   //
  69.   //      engineering.widget.com
  70.   //
  71.   // equivalent to
  72.   //
  73.   //      OU=Engineering, O=Widget, C=US
  74.   //
  75.   // There exists a container within the Engineering domain
  76.   //
  77.   //      OU=Software, OU=Engineering, O=Widget, C=US
  78.   //
  79.   // There exists the user
  80.   //
  81.   //      CN=John Doe, OU=Software, OU=Engineering, O=Widget, C=US
  82.   //
  83.   // And this user's downlevel (pre-ADS) user name is
  84.   //
  85.   //      EngineeringJohnDoe
  86.   // unknown name type
  87.   NameUnknown = 0;
  88.   {$EXTERNALSYM NameUnknown}
  89.   // CN=John Doe, OU=Software, OU=Engineering, O=Widget, C=US
  90.   NameFullyQualifiedDN = 1;
  91.   {$EXTERNALSYM NameFullyQualifiedDN}
  92.   // EngineeringJohnDoe
  93.   NameSamCompatible = 2;
  94.   {$EXTERNALSYM NameSamCompatible}
  95.   // Probably "John Doe" but could be something else.  I.e. The
  96.   // display name is not necessarily the defining RDN.
  97.   NameDisplay = 3;
  98.   {$EXTERNALSYM NameDisplay}
  99.   // String-ized GUID as returned by IIDFromString().
  100.   // eg: {4fa050f0-f561-11cf-bdd9-00aa003a77b6}
  101.   NameUniqueId = 6;
  102.   {$EXTERNALSYM NameUniqueId}
  103.   // engineering.widget.com/software/John Doe
  104.   NameCanonical = 7;
  105.   {$EXTERNALSYM NameCanonical}
  106.   // johndoe@engineering.com
  107.   NameUserPrincipal = 8;
  108.   {$EXTERNALSYM NameUserPrincipal}
  109.   // Same as NameCanonical except that rightmost '/' is
  110.   // replaced with 'n' - even in domain-only case.
  111.   // eg: engineering.widget.com/softwarenJohn Doe
  112.   NameCanonicalEx = 9;
  113.   {$EXTERNALSYM NameCanonicalEx}
  114.   // www/srv.engineering.com/engineering.com
  115.   NameServicePrincipal = 10;
  116.   {$EXTERNALSYM NameServicePrincipal}
  117.   // DNS domain name + SAM username
  118.   // eg: engineering.widget.comJohnDoe
  119.   NameDnsDomain = 12;
  120.   {$EXTERNALSYM NameDnsDomain}
  121. type
  122.   EXTENDED_NAME_FORMAT = DWORD;
  123.   {$EXTERNALSYM EXTENDED_NAME_FORMAT}
  124.   PEXTENDED_NAME_FORMAT = ^EXTENDED_NAME_FORMAT;
  125.   {$EXTERNALSYM PEXTENDED_NAME_FORMAT}
  126.   TExtendedNameFormat = EXTENDED_NAME_FORMAT;
  127.   PExtendedNameFormat = PEXTENDED_NAME_FORMAT;
  128. function GetUserNameExA(NameFormat: EXTENDED_NAME_FORMAT; lpNameBuffer: LPSTR;
  129.   var nSize: ULONG): ByteBool; stdcall;
  130. {$EXTERNALSYM GetUserNameExA}
  131. function GetUserNameExW(NameFormat: EXTENDED_NAME_FORMAT; lpNameBuffer: LPWSTR;
  132.   var nSize: ULONG): ByteBool; stdcall;
  133. {$EXTERNALSYM GetUserNameExW}
  134. {$IFDEF UNICODE}
  135. function GetUserNameEx(NameFormat: EXTENDED_NAME_FORMAT; lpNameBuffer: LPWSTR;
  136.   var nSize: ULONG): ByteBool; stdcall;
  137. {$EXTERNALSYM GetUserNameEx}
  138. {$ELSE}
  139. function GetUserNameEx(NameFormat: EXTENDED_NAME_FORMAT; lpNameBuffer: LPSTR;
  140.   var nSize: ULONG): ByteBool; stdcall;
  141. {$EXTERNALSYM GetUserNameEx}
  142. {$ENDIF}
  143. function GetComputerObjectNameA(NameFormat: EXTENDED_NAME_FORMAT;
  144.   lpNameBuffer: LPSTR; var nSize: ULONG): ByteBool; stdcall;
  145. {$EXTERNALSYM GetComputerObjectNameA}
  146. function GetComputerObjectNameW(NameFormat: EXTENDED_NAME_FORMAT;
  147.   lpNameBuffer: LPWSTR; var nSize: ULONG): ByteBool; stdcall;
  148. {$EXTERNALSYM GetComputerObjectNameW}
  149. {$IFDEF UNICODE}
  150. function GetComputerObjectName(NameFormat: EXTENDED_NAME_FORMAT;
  151.   lpNameBuffer: LPWSTR; var nSize: ULONG): ByteBool; stdcall;
  152. {$EXTERNALSYM GetComputerObjectName}
  153. {$ELSE}
  154. function GetComputerObjectName(NameFormat: EXTENDED_NAME_FORMAT;
  155.   lpNameBuffer: LPSTR; var nSize: ULONG): ByteBool; stdcall;
  156. {$EXTERNALSYM GetComputerObjectName}
  157. {$ENDIF}
  158. function TranslateNameA(lpAccountName: LPCSTR; AccountNameFormat,
  159.   DesiredNameFormat: EXTENDED_NAME_FORMAT; lpTranslatedName: LPSTR;
  160.   var nSize: ULONG): ByteBool; stdcall;
  161. {$EXTERNALSYM TranslateNameA}
  162. function TranslateNameW(lpAccountName: LPCWSTR; AccountNameFormat,
  163.   DesiredNameFormat: EXTENDED_NAME_FORMAT; lpTranslatedName: LPWSTR;
  164.   var nSize: ULONG): ByteBool; stdcall;
  165. {$EXTERNALSYM TranslateNameW}
  166. {$IFDEF UNICODE}
  167. function TranslateName(lpAccountName: LPCWSTR; AccountNameFormat,
  168.   DesiredNameFormat: EXTENDED_NAME_FORMAT; lpTranslatedName: LPWSTR;
  169.   var nSize: ULONG): ByteBool; stdcall;
  170. {$EXTERNALSYM TranslateName}
  171. {$ELSE}
  172. function TranslateName(lpAccountName: LPCSTR; AccountNameFormat,
  173.   DesiredNameFormat: EXTENDED_NAME_FORMAT; lpTranslatedName: LPSTR;
  174.   var nSize: ULONG): ByteBool; stdcall;
  175. {$EXTERNALSYM TranslateName}
  176. {$ENDIF}
  177. implementation
  178. const
  179.   secur32 = 'secur32.dll';
  180. {$IFDEF DYNAMIC_LINK}
  181. var
  182.   _GetUserNameExA: Pointer;
  183. function GetUserNameExA;
  184. begin
  185.   GetProcedureAddress(_GetUserNameExA, secur32, 'GetUserNameExA');
  186.   asm
  187.     mov esp, ebp
  188.     pop ebp
  189.     jmp [_GetUserNameExA]
  190.   end;
  191. end;
  192. {$ELSE}
  193. function GetUserNameExA; external secur32 name 'GetUserNameExA';
  194. {$ENDIF DYNAMIC_LINK}
  195. {$IFDEF DYNAMIC_LINK}
  196. var
  197.   _GetUserNameExW: Pointer;
  198. function GetUserNameExW;
  199. begin
  200.   GetProcedureAddress(_GetUserNameExW, secur32, 'GetUserNameExW');
  201.   asm
  202.     mov esp, ebp
  203.     pop ebp
  204.     jmp [_GetUserNameExW]
  205.   end;
  206. end;
  207. {$ELSE}
  208. function GetUserNameExW; external secur32 name 'GetUserNameExW';
  209. {$ENDIF DYNAMIC_LINK}
  210. {$IFDEF UNICODE}
  211. {$IFDEF DYNAMIC_LINK}
  212. var
  213.   _GetUserNameEx: Pointer;
  214. function GetUserNameEx;
  215. begin
  216.   GetProcedureAddress(_GetUserNameEx, secur32, 'GetUserNameExW');
  217.   asm
  218.     mov esp, ebp
  219.     pop ebp
  220.     jmp [_GetUserNameEx]
  221.   end;
  222. end;
  223. {$ELSE}
  224. function GetUserNameEx; external secur32 name 'GetUserNameExW';
  225. {$ENDIF DYNAMIC_LINK}
  226. {$ELSE}
  227. {$IFDEF DYNAMIC_LINK}
  228. var
  229.   _GetUserNameEx: Pointer;
  230. function GetUserNameEx;
  231. begin
  232.   GetProcedureAddress(_GetUserNameEx, secur32, 'GetUserNameExA');
  233.   asm
  234.     mov esp, ebp
  235.     pop ebp
  236.     jmp [_GetUserNameEx]
  237.   end;
  238. end;
  239. {$ELSE}
  240. function GetUserNameEx; external secur32 name 'GetUserNameExA';
  241. {$ENDIF DYNAMIC_LINK}
  242. {$ENDIF}
  243. {$IFDEF DYNAMIC_LINK}
  244. var
  245.   _GetComputerObjectNameA: Pointer;
  246. function GetComputerObjectNameA;
  247. begin
  248.   GetProcedureAddress(_GetComputerObjectNameA, secur32, 'GetComputerObjectNameA');
  249.   asm
  250.     mov esp, ebp
  251.     pop ebp
  252.     jmp [_GetComputerObjectNameA]
  253.   end;
  254. end;
  255. {$ELSE}
  256. function GetComputerObjectNameA; external secur32 name 'GetComputerObjectNameA';
  257. {$ENDIF DYNAMIC_LINK}
  258. {$IFDEF DYNAMIC_LINK}
  259. var
  260.   _GetComputerObjectNameW: Pointer;
  261. function GetComputerObjectNameW;
  262. begin
  263.   GetProcedureAddress(_GetComputerObjectNameW, secur32, 'GetComputerObjectNameW');
  264.   asm
  265.     mov esp, ebp
  266.     pop ebp
  267.     jmp [_GetComputerObjectNameW]
  268.   end;
  269. end;
  270. {$ELSE}
  271. function GetComputerObjectNameW; external secur32 name 'GetComputerObjectNameW';
  272. {$ENDIF DYNAMIC_LINK}
  273. {$IFDEF UNICODE}
  274. {$IFDEF DYNAMIC_LINK}
  275. var
  276.   _GetComputerObjectName: Pointer;
  277. function GetComputerObjectName;
  278. begin
  279.   GetProcedureAddress(_GetComputerObjectName, secur32, 'GetComputerObjectNameW');
  280.   asm
  281.     mov esp, ebp
  282.     pop ebp
  283.     jmp [_GetComputerObjectName]
  284.   end;
  285. end;
  286. {$ELSE}
  287. function GetComputerObjectName; external secur32 name 'GetComputerObjectNameW';
  288. {$ENDIF DYNAMIC_LINK}
  289. {$ELSE}
  290. {$IFDEF DYNAMIC_LINK}
  291. var
  292.   _GetComputerObjectName: Pointer;
  293. function GetComputerObjectName;
  294. begin
  295.   GetProcedureAddress(_GetComputerObjectName, secur32, 'GetComputerObjectNameA');
  296.   asm
  297.     mov esp, ebp
  298.     pop ebp
  299.     jmp [_GetComputerObjectName]
  300.   end;
  301. end;
  302. {$ELSE}
  303. function GetComputerObjectName; external secur32 name 'GetComputerObjectNameA';
  304. {$ENDIF DYNAMIC_LINK}
  305. {$ENDIF}
  306. {$IFDEF DYNAMIC_LINK}
  307. var
  308.   _TranslateNameA: Pointer;
  309. function TranslateNameA;
  310. begin
  311.   GetProcedureAddress(_TranslateNameA, secur32, 'TranslateNameA');
  312.   asm
  313.     mov esp, ebp
  314.     pop ebp
  315.     jmp [_TranslateNameA]
  316.   end;
  317. end;
  318. {$ELSE}
  319. function TranslateNameA; external secur32 name 'TranslateNameA';
  320. {$ENDIF DYNAMIC_LINK}
  321. {$IFDEF DYNAMIC_LINK}
  322. var
  323.   _TranslateNameW: Pointer;
  324. function TranslateNameW;
  325. begin
  326.   GetProcedureAddress(_TranslateNameW, secur32, 'TranslateNameW');
  327.   asm
  328.     mov esp, ebp
  329.     pop ebp
  330.     jmp [_TranslateNameW]
  331.   end;
  332. end;
  333. {$ELSE}
  334. function TranslateNameW; external secur32 name 'TranslateNameW';
  335. {$ENDIF DYNAMIC_LINK}
  336. {$IFDEF UNICODE}
  337. {$IFDEF DYNAMIC_LINK}
  338. var
  339.   _TranslateName: Pointer;
  340. function TranslateName;
  341. begin
  342.   GetProcedureAddress(_TranslateName, secur32, 'TranslateNameW');
  343.   asm
  344.     mov esp, ebp
  345.     pop ebp
  346.     jmp [_TranslateName]
  347.   end;
  348. end;
  349. {$ELSE}
  350. function TranslateName; external secur32 name 'TranslateNameW';
  351. {$ENDIF DYNAMIC_LINK}
  352. {$ELSE}
  353. {$IFDEF DYNAMIC_LINK}
  354. var
  355.   _TranslateName: Pointer;
  356. function TranslateName;
  357. begin
  358.   GetProcedureAddress(_TranslateName, secur32, 'TranslateNameA');
  359.   asm
  360.     mov esp, ebp
  361.     pop ebp
  362.     jmp [_TranslateName]
  363.   end;
  364. end;
  365. {$ELSE}
  366. function TranslateName; external secur32 name 'TranslateNameA';
  367. {$ENDIF DYNAMIC_LINK}
  368. {$ENDIF}
  369. end.