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

Windows编程

开发平台:

Delphi

  1. {******************************************************************************}
  2. {                                                                       }
  3. { Lan Manager DFS 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: lmdfs.h, released November 2001. The original Pascal   }
  9. { code is: LmDfs.pas, released Februari 2002. 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 JwaLmDFS;
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include "lmdfs.h"'}
  47. {$HPPEMIT ''}
  48. {$I WINDEFINES.INC}
  49. interface
  50. uses
  51.   JwaLmCons, JwaWinType;
  52. //
  53. // DFS Volume state
  54. //
  55. const
  56.   DFS_VOLUME_STATES             = $F;
  57.   {$EXTERNALSYM DFS_VOLUME_STATES}
  58.   DFS_VOLUME_STATE_OK           = 1;
  59.   {$EXTERNALSYM DFS_VOLUME_STATE_OK}
  60.   DFS_VOLUME_STATE_INCONSISTENT = 2;
  61.   {$EXTERNALSYM DFS_VOLUME_STATE_INCONSISTENT}
  62.   DFS_VOLUME_STATE_OFFLINE      = 3;
  63.   {$EXTERNALSYM DFS_VOLUME_STATE_OFFLINE}
  64.   DFS_VOLUME_STATE_ONLINE       = 4;
  65.   {$EXTERNALSYM DFS_VOLUME_STATE_ONLINE}
  66. //
  67. // These are valid for setting the volume state on the root
  68. // These are available to force a resynchronize on the root
  69. // volume or to put it in a standby mode.
  70. //
  71.   DFS_VOLUME_STATE_RESYNCHRONIZE = $10;
  72.   {$EXTERNALSYM DFS_VOLUME_STATE_RESYNCHRONIZE}
  73.   DFS_VOLUME_STATE_STANDBY       = $20;
  74.   {$EXTERNALSYM DFS_VOLUME_STATE_STANDBY}
  75. //
  76. // These are valid on getting the volume state on the root
  77. // These are available to determine the flavor of DFS
  78. // A few bits are reserved to determine the flavor of the DFS root.
  79. // To get the flavor, and the state with DFS_VOLUME_FLAVORS.
  80. //
  81. // (_state & DFS_VOLUME_FLAVORS) will tell you the flavor of the dfs root.
  82. //
  83. //
  84.   DFS_VOLUME_FLAVORS = $0300;
  85.   {$EXTERNALSYM DFS_VOLUME_FLAVORS}
  86.   DFS_VOLUME_FLAVOR_UNUSED1    = $0000;
  87.   {$EXTERNALSYM DFS_VOLUME_FLAVOR_UNUSED1}
  88.   DFS_VOLUME_FLAVOR_STANDALONE = $0100;
  89.   {$EXTERNALSYM DFS_VOLUME_FLAVOR_STANDALONE}
  90.   DFS_VOLUME_FLAVOR_AD_BLOB    = $0200;
  91.   {$EXTERNALSYM DFS_VOLUME_FLAVOR_AD_BLOB}
  92.   DFS_STORAGE_FLAVOR_UNUSED2   = $0300;
  93.   {$EXTERNALSYM DFS_STORAGE_FLAVOR_UNUSED2}
  94. //
  95. // DFS Storage State
  96. //
  97.   DFS_STORAGE_STATES        = $F;
  98.   {$EXTERNALSYM DFS_STORAGE_STATES}
  99.   DFS_STORAGE_STATE_OFFLINE = 1;
  100.   {$EXTERNALSYM DFS_STORAGE_STATE_OFFLINE}
  101.   DFS_STORAGE_STATE_ONLINE  = 2;
  102.   {$EXTERNALSYM DFS_STORAGE_STATE_ONLINE}
  103.   DFS_STORAGE_STATE_ACTIVE  = 4;
  104.   {$EXTERNALSYM DFS_STORAGE_STATE_ACTIVE}
  105. //
  106. // Level 1:
  107. //
  108. type
  109.   LPDFS_INFO_1 = ^DFS_INFO_1;
  110.   {$EXTERNALSYM LPDFS_INFO_1}
  111.   PDFS_INFO_1 = ^DFS_INFO_1;
  112.   {$EXTERNALSYM PDFS_INFO_1}
  113.   _DFS_INFO_1 = record
  114.     EntryPath: LPWSTR; // Dfs name for the top of this piece of storage
  115.   end;
  116.   {$EXTERNALSYM _DFS_INFO_1}
  117.   DFS_INFO_1 = _DFS_INFO_1;
  118.   {$EXTERNALSYM DFS_INFO_1}
  119.   TDfsInfo1 = DFS_INFO_1;
  120.   PDfsInfo1 = PDFS_INFO_1;
  121. //
  122. // Level 2:
  123. //
  124.   LPDFS_INFO_2 = ^DFS_INFO_2;
  125.   {$EXTERNALSYM LPDFS_INFO_2}
  126.   PDFS_INFO_2 = ^DFS_INFO_2;
  127.   {$EXTERNALSYM PDFS_INFO_2}
  128.   _DFS_INFO_2 = record
  129.     EntryPath: LPWSTR; // Dfs name for the top of this volume
  130.     Comment: LPWSTR; // Comment for this volume
  131.     State: DWORD; // State of this volume, one of DFS_VOLUME_STATE_*
  132.     NumberOfStorages: DWORD; // Number of storages for this volume
  133.   end;
  134.   {$EXTERNALSYM _DFS_INFO_2}
  135.   DFS_INFO_2 = _DFS_INFO_2;
  136.   {$EXTERNALSYM DFS_INFO_2}
  137.   TDfsInfo2 = DFS_INFO_2;
  138.   PDfsInfo2 = PDFS_INFO_2;
  139.   LPDFS_STORAGE_INFO = ^DFS_STORAGE_INFO;
  140.   {$EXTERNALSYM LPDFS_STORAGE_INFO}
  141.   PDFS_STORAGE_INFO = ^DFS_STORAGE_INFO;
  142.   {$EXTERNALSYM PDFS_STORAGE_INFO}
  143.   _DFS_STORAGE_INFO = record
  144.     State: ULONG; // State of this storage, one of DFS_STORAGE_STATE_*
  145.     // possibly OR'd with DFS_STORAGE_STATE_ACTIVE
  146.     ServerName: LPWSTR; // Name of server hosting this storage
  147.     ShareName: LPWSTR; // Name of share hosting this storage
  148.   end;
  149.   {$EXTERNALSYM _DFS_STORAGE_INFO}
  150.   DFS_STORAGE_INFO = _DFS_STORAGE_INFO;
  151.   {$EXTERNALSYM DFS_STORAGE_INFO}
  152.   TDfsStorageInfo = DFS_STORAGE_INFO;
  153.   PDfsStorageInfo = PDFS_STORAGE_INFO;
  154. //
  155. // Level 3:
  156. //
  157.   LPDFS_INFO_3 = ^DFS_INFO_3;
  158.   {$EXTERNALSYM LPDFS_INFO_3}
  159.   PDFS_INFO_3 = ^DFS_INFO_3;
  160.   {$EXTERNALSYM PDFS_INFO_3}
  161.   _DFS_INFO_3 = record
  162.     EntryPath: LPWSTR; // Dfs name for the top of this volume
  163.     Comment: LPWSTR; // Comment for this volume
  164.     State: DWORD; // State of this volume, one of DFS_VOLUME_STATE_*
  165.     NumberOfStorages: DWORD; // Number of storage servers for this volume
  166.     Storage: LPDFS_STORAGE_INFO; // An array (of NumberOfStorages elements) of storage-specific information.
  167.   end;
  168.   {$EXTERNALSYM _DFS_INFO_3}
  169.   DFS_INFO_3 = _DFS_INFO_3;
  170.   {$EXTERNALSYM DFS_INFO_3}
  171.   TDfsInfo3 = DFS_INFO_3;
  172.   PDfsInfo3 = PDFS_INFO_3;
  173. //
  174. // Level 4:
  175. //
  176.   LPDFS_INFO_4 = ^DFS_INFO_4;
  177.   {$EXTERNALSYM LPDFS_INFO_4}
  178.   PDFS_INFO_4 = ^DFS_INFO_4;
  179.   {$EXTERNALSYM PDFS_INFO_4}
  180.   _DFS_INFO_4 = record
  181.     EntryPath: LPWSTR; // Dfs name for the top of this volume
  182.     Comment: LPWSTR; // Comment for this volume
  183.     State: DWORD; // State of this volume, one of DFS_VOLUME_STATE_*
  184.     Timeout: ULONG; // Timeout, in seconds, of this junction point
  185.     Guid: GUID; // Guid of this junction point
  186.     NumberOfStorages: DWORD; // Number of storage servers for this volume
  187.     Storage: LPDFS_STORAGE_INFO; // An array (of NumberOfStorages elements) of storage-specific information.
  188.   end;
  189.   {$EXTERNALSYM _DFS_INFO_4}
  190.   DFS_INFO_4 = _DFS_INFO_4;
  191.   {$EXTERNALSYM DFS_INFO_4}
  192.   TDfsInfo4 = DFS_INFO_4;
  193.   PDfsInfo4 = PDFS_INFO_4;
  194. //
  195. // Level 100:
  196. //
  197.   LPDFS_INFO_100 = ^DFS_INFO_100;
  198.   {$EXTERNALSYM LPDFS_INFO_100}
  199.   PDFS_INFO_100 = ^DFS_INFO_100;
  200.   {$EXTERNALSYM PDFS_INFO_100}
  201.   _DFS_INFO_100 = record
  202.     Comment: LPWSTR; // Comment for this volume or storage
  203.   end;
  204.   {$EXTERNALSYM _DFS_INFO_100}
  205.   DFS_INFO_100 = _DFS_INFO_100;
  206.   {$EXTERNALSYM DFS_INFO_100}
  207.   TDfsInfo100 = DFS_INFO_100;
  208.   PDfsInfo100 = PDFS_INFO_100;
  209. //
  210. // Level 101:
  211. //
  212.   LPDFS_INFO_101 = ^DFS_INFO_101;
  213.   {$EXTERNALSYM LPDFS_INFO_101}
  214.   PDFS_INFO_101 = ^DFS_INFO_101;
  215.   {$EXTERNALSYM PDFS_INFO_101}
  216.   _DFS_INFO_101 = record
  217.     State: DWORD; // State of this storage, one of DFS_STORAGE_STATE_*
  218.     // possibly OR'd with DFS_STORAGE_STATE_ACTIVE
  219.   end;
  220.   {$EXTERNALSYM _DFS_INFO_101}
  221.   DFS_INFO_101 = _DFS_INFO_101;
  222.   {$EXTERNALSYM DFS_INFO_101}
  223.   TDfsInfo101 = DFS_INFO_101;
  224.   PDfsInfo101 = PDFS_INFO_101;
  225. //
  226. // Level 102:
  227. //
  228.   LPDFS_INFO_102 = ^DFS_INFO_102;
  229.   {$EXTERNALSYM LPDFS_INFO_102}
  230.   PDFS_INFO_102 = ^DFS_INFO_102;
  231.   {$EXTERNALSYM PDFS_INFO_102}
  232.   _DFS_INFO_102 = record
  233.     Timeout: ULONG; // Timeout, in seconds, of the junction
  234.   end;
  235.   {$EXTERNALSYM _DFS_INFO_102}
  236.   DFS_INFO_102 = _DFS_INFO_102;
  237.   {$EXTERNALSYM DFS_INFO_102}
  238.   TDfsInfo102 = DFS_INFO_102;
  239.   PDfsInfo102 = PDFS_INFO_102;
  240. //
  241. // Level 200:
  242. //
  243.   LPDFS_INFO_200 = ^DFS_INFO_200;
  244.   {$EXTERNALSYM LPDFS_INFO_200}
  245.   PDFS_INFO_200 = ^DFS_INFO_200;
  246.   {$EXTERNALSYM PDFS_INFO_200}
  247.   _DFS_INFO_200 = record
  248.     FtDfsName: LPWSTR; // FtDfs name
  249.   end;
  250.   {$EXTERNALSYM _DFS_INFO_200}
  251.   DFS_INFO_200 = _DFS_INFO_200;
  252.   {$EXTERNALSYM DFS_INFO_200}
  253.   TDfsInfo200 = DFS_INFO_200;
  254.   PDfsInfo200 = PDFS_INFO_200;
  255. //
  256. // Level 300:
  257. //
  258.   LPDFS_INFO_300 = ^DFS_INFO_300;
  259.   {$EXTERNALSYM LPDFS_INFO_300}
  260.   PDFS_INFO_300 = ^DFS_INFO_300;
  261.   {$EXTERNALSYM PDFS_INFO_300}
  262.   _DFS_INFO_300 = record
  263.     Flags: DWORD;
  264.     DfsName: LPWSTR; // Dfs name
  265.   end;
  266.   {$EXTERNALSYM _DFS_INFO_300}
  267.   DFS_INFO_300 = _DFS_INFO_300;
  268.   {$EXTERNALSYM DFS_INFO_300}
  269.   TDfsInfo300 = DFS_INFO_300;
  270.   PDfsInfo300 = PDFS_INFO_300;
  271. //
  272. // Add a new volume or additional storage for an existing volume at
  273. // DfsEntryPath.
  274. //
  275. function NetDfsAdd(DfsEntryPath, ServerName, ShareName, Comment: LPWSTR; Flags: DWORD): NET_API_STATUS; stdcall;
  276. {$EXTERNALSYM NetDfsAdd}
  277. //
  278. // Flags:
  279. //
  280. const
  281.   DFS_ADD_VOLUME     = 1; // Add a new volume to the DFS if not already there
  282.   {$EXTERNALSYM DFS_ADD_VOLUME}
  283.   DFS_RESTORE_VOLUME = 2; // Volume/Replica is being restored - do not verify share etc.
  284.   {$EXTERNALSYM DFS_RESTORE_VOLUME}
  285. //
  286. // Setup/teardown API's for standard and FtDfs roots.
  287. //
  288. function NetDfsAddStdRoot(ServerName, RootShare, Comment: LPWSTR; Flags: DWORD): NET_API_STATUS; stdcall;
  289. {$EXTERNALSYM NetDfsAddStdRoot}
  290. function NetDfsRemoveStdRoot(ServerName, RootShare: LPWSTR; Flags: DWORD): NET_API_STATUS; stdcall;
  291. {$EXTERNALSYM NetDfsRemoveStdRoot}
  292. function NetDfsAddFtRoot(ServerName, RootShare, FtDfsName, Comment: LPWSTR; Flags: DWORD): NET_API_STATUS; stdcall;
  293. {$EXTERNALSYM NetDfsAddFtRoot}
  294. function NetDfsRemoveFtRoot(ServerName, RootShare, FtDfsName: LPWSTR; Flags: DWORD): NET_API_STATUS; stdcall;
  295. {$EXTERNALSYM NetDfsRemoveFtRoot}
  296. function NetDfsRemoveFtRootForced(DomainName, ServerName, RootShare, FtDfsName: LPWSTR; Flags: DWORD): NET_API_STATUS; stdcall;
  297. {$EXTERNALSYM NetDfsRemoveFtRootForced}
  298. //
  299. // Call to reinitialize the dfsmanager on a machine
  300. //
  301. function NetDfsManagerInitialize(ServerName: LPWSTR; Flags: DWORD): NET_API_STATUS; stdcall;
  302. {$EXTERNALSYM NetDfsManagerInitialize}
  303. function NetDfsAddStdRootForced(ServerName, RootShare, Comment, Store: LPWSTR): NET_API_STATUS; stdcall;
  304. {$EXTERNALSYM NetDfsAddStdRootForced}
  305. function NetDfsGetDcAddress(ServerName: LPWSTR; var DcIpAddress: LPWSTR; var IsRoot: BOOLEAN; Timeout: PULONG): NET_API_STATUS; stdcall;
  306. {$EXTERNALSYM NetDfsGetDcAddress}
  307. //
  308. // Flags for NetDfsSetDcAddress()
  309. //
  310. const
  311.   NET_DFS_SETDC_FLAGS   = $00000000;
  312.   {$EXTERNALSYM NET_DFS_SETDC_FLAGS}
  313.   NET_DFS_SETDC_TIMEOUT = $00000001;
  314.   {$EXTERNALSYM NET_DFS_SETDC_TIMEOUT}
  315.   NET_DFS_SETDC_INITPKT = $00000002;
  316.   {$EXTERNALSYM NET_DFS_SETDC_INITPKT}
  317. //
  318. // Structures used for site reporting
  319. //
  320. type
  321.   LPDFS_SITENAME_INFO = ^DFS_SITENAME_INFO;
  322.   {$EXTERNALSYM LPDFS_SITENAME_INFO}
  323.   PDFS_SITENAME_INFO = ^DFS_SITENAME_INFO;
  324.   {$EXTERNALSYM PDFS_SITENAME_INFO}
  325.   DFS_SITENAME_INFO = record
  326.     SiteFlags: ULONG; // Below
  327.     SiteName: LPWSTR;
  328.   end;
  329.   {$EXTERNALSYM DFS_SITENAME_INFO}
  330.   TDfsSiteNameInfo = DFS_SITENAME_INFO;
  331.   PDfsSiteNameInfo = PDFS_SITENAME_INFO;
  332. // SiteFlags
  333. const
  334.   DFS_SITE_PRIMARY = $1; // This site returned by DsGetSiteName()
  335.   {$EXTERNALSYM DFS_SITE_PRIMARY}
  336. type
  337.   LPDFS_SITELIST_INFO = ^DFS_SITELIST_INFO;
  338.   {$EXTERNALSYM LPDFS_SITELIST_INFO}
  339.   PDFS_SITELIST_INFO = ^DFS_SITELIST_INFO;
  340.   {$EXTERNALSYM PDFS_SITELIST_INFO}
  341.   DFS_SITELIST_INFO = record
  342.     cSites: ULONG;
  343.     Site: array [0..0] of DFS_SITENAME_INFO;
  344.   end;
  345.   {$EXTERNALSYM DFS_SITELIST_INFO}
  346.   TDfsSiteListInfo = DFS_SITELIST_INFO;
  347.   PDfsSiteListInfo = PDFS_SITELIST_INFO;
  348. //
  349. // Remove a volume or additional storage for volume from the Dfs at
  350. // DfsEntryPath. When applied to the last storage in a volume, removes
  351. // the volume from the DFS.
  352. //
  353. function NetDfsRemove(DfsEntryPath, ServerName, ShareName: LPWSTR): NET_API_STATUS; stdcall;
  354. {$EXTERNALSYM NetDfsRemove}
  355. //
  356. // Get information about all of the volumes in the Dfs. DfsName is
  357. // the "server" part of the UNC name used to refer to this particular Dfs.
  358. //
  359. // Valid levels are 1-4, 200
  360. //
  361. function NetDfsEnum(DfsName: LPWSTR; Level, PrefMaxLen: DWORD; var Buffer: LPBYTE; EntriesRead, ResumeHandle: LPDWORD): NET_API_STATUS; stdcall;
  362. {$EXTERNALSYM NetDfsEnum}
  363. //
  364. // Get information about the volume or storage.
  365. // If ServerName and ShareName are specified, the information returned
  366. // is specific to that server and share, else the information is specific
  367. // to the volume as a whole.
  368. //
  369. // Valid levels are 1-4, 100
  370. //
  371. function NetDfsGetInfo(DfsEntryPath, ServerName, ShareName: LPWSTR; Level: DWORD; var Buffer: LPBYTE): NET_API_STATUS; stdcall;
  372. {$EXTERNALSYM NetDfsGetInfo}
  373. //
  374. // Set info about the volume or storage.
  375. // If ServerName and ShareName are specified, the information set is
  376. // specific to that server and share, else the information is specific
  377. // to the volume as a whole.
  378. //
  379. // Valid levels are 100, 101 and 102
  380. //
  381. function NetDfsSetInfo(DfsEntryPath, ServerName, ShareName: LPWSTR; Level: DWORD; Buffer: LPBYTE): NET_API_STATUS; stdcall;
  382. {$EXTERNALSYM NetDfsSetInfo}
  383. //
  384. // Get client's cached information about the volume or storage.
  385. // If ServerName and ShareName are specified, the information returned
  386. // is specific to that server and share, else the information is specific
  387. // to the volume as a whole.
  388. //
  389. // Valid levels are 1-4
  390. //
  391. function NetDfsGetClientInfo(DfsEntryPath, ServerName, ShareName: LPWSTR; Level: DWORD; var Buffer: LPBYTE): NET_API_STATUS; stdcall;
  392. {$EXTERNALSYM NetDfsGetClientInfo}
  393. //
  394. // Set client's cached info about the volume or storage.
  395. // If ServerName and ShareName are specified, the information set is
  396. // specific to that server and share, else the information is specific
  397. // to the volume as a whole.
  398. //
  399. // Valid levels are 101 and 102.
  400. //
  401. function NetDfsSetClientInfo(DfsEntryPath, ServerName, ShareName: LPWSTR; Level: DWORD; Buffer: LPBYTE): NET_API_STATUS; stdcall;
  402. {$EXTERNALSYM NetDfsSetClientInfo}
  403. //
  404. // Move a DFS volume and all subordinate volumes from one place in the
  405. // DFS to another place in the DFS.
  406. //
  407. function NetDfsMove(DfsEntryPath: LPWSTR; DfsNewEntryPath: LPWSTR): NET_API_STATUS; stdcall;
  408. {$EXTERNALSYM NetDfsMove}
  409. function NetDfsRename(Path: LPWSTR; NewPath: LPWSTR): NET_API_STATUS; stdcall;
  410. {$EXTERNALSYM NetDfsRename}
  411. implementation
  412. {$IFDEF DYNAMIC_LINK}
  413. var
  414.   _NetDfsAdd: Pointer;
  415. function NetDfsAdd;
  416. begin
  417.   GetProcedureAddress(_NetDfsAdd, netapi32, 'NetDfsAdd');
  418.   asm
  419.     mov esp, ebp
  420.     pop ebp
  421.     jmp [_NetDfsAdd]
  422.   end;
  423. end;
  424. {$ELSE}
  425. function NetDfsAdd; external netapi32 name 'NetDfsAdd';
  426. {$ENDIF DYNAMIC_LINK}
  427. {$IFDEF DYNAMIC_LINK}
  428. var
  429.   _NetDfsAddStdRoot: Pointer;
  430. function NetDfsAddStdRoot;
  431. begin
  432.   GetProcedureAddress(_NetDfsAddStdRoot, netapi32, 'NetDfsAddStdRoot');
  433.   asm
  434.     mov esp, ebp
  435.     pop ebp
  436.     jmp [_NetDfsAddStdRoot]
  437.   end;
  438. end;
  439. {$ELSE}
  440. function NetDfsAddStdRoot; external netapi32 name 'NetDfsAddStdRoot';
  441. {$ENDIF DYNAMIC_LINK}
  442. {$IFDEF DYNAMIC_LINK}
  443. var
  444.   _NetDfsRemoveStdRoot: Pointer;
  445. function NetDfsRemoveStdRoot;
  446. begin
  447.   GetProcedureAddress(_NetDfsRemoveStdRoot, netapi32, 'NetDfsRemoveStdRoot');
  448.   asm
  449.     mov esp, ebp
  450.     pop ebp
  451.     jmp [_NetDfsRemoveStdRoot]
  452.   end;
  453. end;
  454. {$ELSE}
  455. function NetDfsRemoveStdRoot; external netapi32 name 'NetDfsRemoveStdRoot';
  456. {$ENDIF DYNAMIC_LINK}
  457. {$IFDEF DYNAMIC_LINK}
  458. var
  459.   _NetDfsAddFtRoot: Pointer;
  460. function NetDfsAddFtRoot;
  461. begin
  462.   GetProcedureAddress(_NetDfsAddFtRoot, netapi32, 'NetDfsAddFtRoot');
  463.   asm
  464.     mov esp, ebp
  465.     pop ebp
  466.     jmp [_NetDfsAddFtRoot]
  467.   end;
  468. end;
  469. {$ELSE}
  470. function NetDfsAddFtRoot; external netapi32 name 'NetDfsAddFtRoot';
  471. {$ENDIF DYNAMIC_LINK}
  472. {$IFDEF DYNAMIC_LINK}
  473. var
  474.   _NetDfsRemoveFtRoot: Pointer;
  475. function NetDfsRemoveFtRoot;
  476. begin
  477.   GetProcedureAddress(_NetDfsRemoveFtRoot, netapi32, 'NetDfsRemoveFtRoot');
  478.   asm
  479.     mov esp, ebp
  480.     pop ebp
  481.     jmp [_NetDfsRemoveFtRoot]
  482.   end;
  483. end;
  484. {$ELSE}
  485. function NetDfsRemoveFtRoot; external netapi32 name 'NetDfsRemoveFtRoot';
  486. {$ENDIF DYNAMIC_LINK}
  487. {$IFDEF DYNAMIC_LINK}
  488. var
  489.   _NetDfsRemoveFtRootForced: Pointer;
  490. function NetDfsRemoveFtRootForced;
  491. begin
  492.   GetProcedureAddress(_NetDfsRemoveFtRootForced, netapi32, 'NetDfsRemoveFtRootForced');
  493.   asm
  494.     mov esp, ebp
  495.     pop ebp
  496.     jmp [_NetDfsRemoveFtRootForced]
  497.   end;
  498. end;
  499. {$ELSE}
  500. function NetDfsRemoveFtRootForced; external netapi32 name 'NetDfsRemoveFtRootForced';
  501. {$ENDIF DYNAMIC_LINK}
  502. {$IFDEF DYNAMIC_LINK}
  503. var
  504.   _NetDfsManagerInitialize: Pointer;
  505. function NetDfsManagerInitialize;
  506. begin
  507.   GetProcedureAddress(_NetDfsManagerInitialize, netapi32, 'NetDfsManagerInitialize');
  508.   asm
  509.     mov esp, ebp
  510.     pop ebp
  511.     jmp [_NetDfsManagerInitialize]
  512.   end;
  513. end;
  514. {$ELSE}
  515. function NetDfsManagerInitialize; external netapi32 name 'NetDfsManagerInitialize';
  516. {$ENDIF DYNAMIC_LINK}
  517. {$IFDEF DYNAMIC_LINK}
  518. var
  519.   _NetDfsAddStdRootForced: Pointer;
  520. function NetDfsAddStdRootForced;
  521. begin
  522.   GetProcedureAddress(_NetDfsAddStdRootForced, netapi32, 'NetDfsAddStdRootForced');
  523.   asm
  524.     mov esp, ebp
  525.     pop ebp
  526.     jmp [_NetDfsAddStdRootForced]
  527.   end;
  528. end;
  529. {$ELSE}
  530. function NetDfsAddStdRootForced; external netapi32 name 'NetDfsAddStdRootForced';
  531. {$ENDIF DYNAMIC_LINK}
  532. {$IFDEF DYNAMIC_LINK}
  533. var
  534.   _NetDfsGetDcAddress: Pointer;
  535. function NetDfsGetDcAddress;
  536. begin
  537.   GetProcedureAddress(_NetDfsGetDcAddress, netapi32, 'NetDfsGetDcAddress');
  538.   asm
  539.     mov esp, ebp
  540.     pop ebp
  541.     jmp [_NetDfsGetDcAddress]
  542.   end;
  543. end;
  544. {$ELSE}
  545. function NetDfsGetDcAddress; external netapi32 name 'NetDfsGetDcAddress';
  546. {$ENDIF DYNAMIC_LINK}
  547. {$IFDEF DYNAMIC_LINK}
  548. var
  549.   _NetDfsRemove: Pointer;
  550. function NetDfsRemove;
  551. begin
  552.   GetProcedureAddress(_NetDfsRemove, netapi32, 'NetDfsRemove');
  553.   asm
  554.     mov esp, ebp
  555.     pop ebp
  556.     jmp [_NetDfsRemove]
  557.   end;
  558. end;
  559. {$ELSE}
  560. function NetDfsRemove; external netapi32 name 'NetDfsRemove';
  561. {$ENDIF DYNAMIC_LINK}
  562. {$IFDEF DYNAMIC_LINK}
  563. var
  564.   _NetDfsEnum: Pointer;
  565. function NetDfsEnum;
  566. begin
  567.   GetProcedureAddress(_NetDfsEnum, netapi32, 'NetDfsEnum');
  568.   asm
  569.     mov esp, ebp
  570.     pop ebp
  571.     jmp [_NetDfsEnum]
  572.   end;
  573. end;
  574. {$ELSE}
  575. function NetDfsEnum; external netapi32 name 'NetDfsEnum';
  576. {$ENDIF DYNAMIC_LINK}
  577. {$IFDEF DYNAMIC_LINK}
  578. var
  579.   _NetDfsGetInfo: Pointer;
  580. function NetDfsGetInfo;
  581. begin
  582.   GetProcedureAddress(_NetDfsGetInfo, netapi32, 'NetDfsGetInfo');
  583.   asm
  584.     mov esp, ebp
  585.     pop ebp
  586.     jmp [_NetDfsGetInfo]
  587.   end;
  588. end;
  589. {$ELSE}
  590. function NetDfsGetInfo; external netapi32 name 'NetDfsGetInfo';
  591. {$ENDIF DYNAMIC_LINK}
  592. {$IFDEF DYNAMIC_LINK}
  593. var
  594.   _NetDfsSetInfo: Pointer;
  595. function NetDfsSetInfo;
  596. begin
  597.   GetProcedureAddress(_NetDfsSetInfo, netapi32, 'NetDfsSetInfo');
  598.   asm
  599.     mov esp, ebp
  600.     pop ebp
  601.     jmp [_NetDfsSetInfo]
  602.   end;
  603. end;
  604. {$ELSE}
  605. function NetDfsSetInfo; external netapi32 name 'NetDfsSetInfo';
  606. {$ENDIF DYNAMIC_LINK}
  607. {$IFDEF DYNAMIC_LINK}
  608. var
  609.   _NetDfsGetClientInfo: Pointer;
  610. function NetDfsGetClientInfo;
  611. begin
  612.   GetProcedureAddress(_NetDfsGetClientInfo, netapi32, 'NetDfsGetClientInfo');
  613.   asm
  614.     mov esp, ebp
  615.     pop ebp
  616.     jmp [_NetDfsGetClientInfo]
  617.   end;
  618. end;
  619. {$ELSE}
  620. function NetDfsGetClientInfo; external netapi32 name 'NetDfsGetClientInfo';
  621. {$ENDIF DYNAMIC_LINK}
  622. {$IFDEF DYNAMIC_LINK}
  623. var
  624.   _NetDfsSetClientInfo: Pointer;
  625. function NetDfsSetClientInfo;
  626. begin
  627.   GetProcedureAddress(_NetDfsSetClientInfo, netapi32, 'NetDfsSetClientInfo');
  628.   asm
  629.     mov esp, ebp
  630.     pop ebp
  631.     jmp [_NetDfsSetClientInfo]
  632.   end;
  633. end;
  634. {$ELSE}
  635. function NetDfsSetClientInfo; external netapi32 name 'NetDfsSetClientInfo';
  636. {$ENDIF DYNAMIC_LINK}
  637. {$IFDEF DYNAMIC_LINK}
  638. var
  639.   _NetDfsMove: Pointer;
  640. function NetDfsMove;
  641. begin
  642.   GetProcedureAddress(_NetDfsMove, netapi32, 'NetDfsMove');
  643.   asm
  644.     mov esp, ebp
  645.     pop ebp
  646.     jmp [_NetDfsMove]
  647.   end;
  648. end;
  649. {$ELSE}
  650. function NetDfsMove; external netapi32 name 'NetDfsMove';
  651. {$ENDIF DYNAMIC_LINK}
  652. {$IFDEF DYNAMIC_LINK}
  653. var
  654.   _NetDfsRename: Pointer;
  655. function NetDfsRename;
  656. begin
  657.   GetProcedureAddress(_NetDfsRename, netapi32, 'NetDfsRename');
  658.   asm
  659.     mov esp, ebp
  660.     pop ebp
  661.     jmp [_NetDfsRename]
  662.   end;
  663. end;
  664. {$ELSE}
  665. function NetDfsRename; external netapi32 name 'NetDfsRename';
  666. {$ENDIF DYNAMIC_LINK}
  667. end.