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

Windows编程

开发平台:

Delphi

  1. {******************************************************************************}
  2. {                                                                       }
  3. { Directory Backup and Restore 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: ntdsbcli.h, released June 2000. The original Pascal    }
  9. { code is: NtDsbCli.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 JwaNtDsbCli;
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include ":ntdsbcli.h"'}
  47. {$HPPEMIT ''}
  48. {$I WINDEFINES.INC}
  49. interface
  50. uses
  51.   JwaWinType;
  52. const
  53.   g_wszBackupAnnotation = 'NTDS Backup Interface';
  54.   {$EXTERNALSYM g_wszBackupAnnotation}
  55.   g_aszBackupAnnotation = 'NTDS Backup Interface';
  56.   {$EXTERNALSYM g_aszBackupAnnotation}
  57.   g_wszRestoreAnnotation = 'NTDS Restore Interface';
  58.   {$EXTERNALSYM g_wszRestoreAnnotation}
  59.   g_aszRestoreAnnotation = 'NTDS Restore Interface';
  60.   {$EXTERNALSYM g_aszRestoreAnnotation}
  61. {$IFDEF UNICODE}
  62.   g_szBackupAnnotation  = g_wszBackupAnnotation;
  63.   {$EXTERNALSYM g_szBackupAnnotation}
  64.   g_szRestoreAnnotation = g_wszRestoreAnnotation;
  65.   {$EXTERNALSYM g_szRestoreAnnotation}
  66. {$ELSE}
  67.   g_szBackupAnnotation  = g_aszBackupAnnotation;
  68.   {$EXTERNALSYM g_szBackupAnnotation}
  69.   g_szRestoreAnnotation = g_aszRestoreAnnotation;
  70.   {$EXTERNALSYM g_szRestoreAnnotation}
  71. {$ENDIF}
  72. // Type of Backup passed to DsBackupPrepare()
  73. // BACKUP_TYPE_FULL: Requesting backup of the complete DS (DIT, Log files, and Patch files)
  74. // BACKUP_TYPE_LOGS_ONLY: Requesting backup of only the log files
  75. // BACKUP_TYPE_INCREMENTAL: Requesting incremental backup i.e. backing up only changes that happened since last backup
  76.   BACKUP_TYPE_FULL        = $01;
  77.   {$EXTERNALSYM BACKUP_TYPE_FULL}
  78.   BACKUP_TYPE_LOGS_ONLY   = $02;
  79.   {$EXTERNALSYM BACKUP_TYPE_LOGS_ONLY}
  80.   BACKUP_TYPE_INCREMENTAL = $04; // not supported in product1
  81.   {$EXTERNALSYM BACKUP_TYPE_INCREMENTAL}
  82. // Type of Restore passed to DsRestorePrepare()
  83. // RESTORE_TYPE_AUTHORATATIVE: The restored version wins throughout the enterprise
  84. // RESTORE_TYPE_ONLINE: Restoration is done when NTDS is online.
  85. // RESTORE_TYPE_CATCHUP: The restored version is reconciled through the standard reconciliation logic so that the
  86. //                          restored DIT can catchup with the rest of the enterprise.
  87.   RESTORE_TYPE_AUTHORATATIVE = $01;
  88.   {$EXTERNALSYM RESTORE_TYPE_AUTHORATATIVE}
  89.   RESTORE_TYPE_ONLINE        = $02; // not supported in product1
  90.   {$EXTERNALSYM RESTORE_TYPE_ONLINE}
  91.   RESTORE_TYPE_CATCHUP       = $04; // this is the default restore mode
  92.   {$EXTERNALSYM RESTORE_TYPE_CATCHUP}
  93. // Setting the current log # to this value would disable incremental/differential backup
  94.   BACKUP_DISABLE_INCREMENTAL = DWORD($ffffffff);
  95.   {$EXTERNALSYM BACKUP_DISABLE_INCREMENTAL}
  96. // BFT is the bit flag used to represent file types (directory/dit/logfile/etc.)
  97. // We keep them as a character so that we can append/prepend them to the actual file
  98. // path. The code in the Backup API's rely on the fact that values 0-256 in 8 bit ascii
  99. // map to the values 0-256 in unicode.
  100. type
  101. {$IFDEF UNICODE}
  102.   BFT = WCHAR;
  103.   {$EXTERNALSYM BFT}
  104. {$ELSE}
  105.   BFT = CHAR;
  106.   {$EXTERNALSYM BFT}
  107. {$ENDIF}
  108. // Bit flags:
  109. //  BFT_DIRECTORY               - indicates path specified is a directory
  110. //  BFT_DATABASE_DIRECTORY      - indicates that file goes into database directory
  111. //  BFT_LOG_DIRECTORY           - indicates that the file goes into log directory
  112. const
  113.   BFT_DIRECTORY          = $80;
  114.   {$EXTERNALSYM BFT_DIRECTORY}
  115.   BFT_DATABASE_DIRECTORY = $40;
  116.   {$EXTERNALSYM BFT_DATABASE_DIRECTORY}
  117.   BFT_LOG_DIRECTORY      = $20;
  118.   {$EXTERNALSYM BFT_LOG_DIRECTORY}
  119. // Following combinations are defined for easy use of the filetype and the directory into
  120. // into which it goes
  121.   BFT_LOG            = BFT($01 or BFT_LOG_DIRECTORY);
  122.   BFT_LOG_DIR        = BFT($02 or BFT_DIRECTORY);
  123.   BFT_CHECKPOINT_DIR = BFT($03 or BFT_DIRECTORY);
  124.   BFT_NTDS_DATABASE  = BFT($04 or BFT_DATABASE_DIRECTORY);
  125.   BFT_PATCH_FILE     = BFT($05 or BFT_LOG_DIRECTORY);
  126.   BFT_UNKNOWN        = BFT($0F);
  127. // #include <ntdsbmsg.h>
  128. // Backup Context Handle
  129. type
  130.   HBC = Pointer;
  131.   {$EXTERNALSYM HBC}
  132.   PEDB_RSTMAPA = ^EDB_RSTMAPA;
  133.   {$EXTERNALSYM PEDB_RSTMAPA}
  134.   tagEDB_RSTMAPA = record
  135.     szDatabaseName: PChar;
  136.     szNewDtabaseName: PChar;
  137.   end;
  138.   {$EXTERNALSYM tagEDB_RSTMAPA}
  139.   EDB_RSTMAPA = tagEDB_RSTMAPA;
  140.   {$EXTERNALSYM EDB_RSTMAPA}
  141.   TEdbRstMapA = EDB_RSTMAPA;
  142.   PEdbRstMapA = PEDB_RSTMAPA;
  143. // required for NTDS unicode support.
  144. // UNDONE: NYI
  145.   PEDB_RSTMAPW = ^EDB_RSTMAPW;
  146.   {$EXTERNALSYM PEDB_RSTMAPW}
  147.   tagEDB_RSTMAPW = record
  148.     wszDatabaseName: PWCHAR;
  149.     wszNewDatabaseName: PWCHAR;
  150.   end;
  151.   {$EXTERNALSYM tagEDB_RSTMAPW}
  152.   EDB_RSTMAPW = tagEDB_RSTMAPW;
  153.   {$EXTERNALSYM EDB_RSTMAPW}
  154.   TEdbRstMapW = EDB_RSTMAPW;
  155.   PEdbRstMapW = PEDB_RSTMAPW;
  156. {$IFDEF UNICODE}
  157.   EDB_RSTMAP = EDB_RSTMAPW;
  158.   {$EXTERNALSYM EDB_RSTMAP}
  159.   PEDB_RSTMAP = PEDB_RSTMAPW;
  160.   {$EXTERNALSYM PEDB_RSTMAP}
  161.   TEdbRstMap = TEdbRstMapW;
  162.   PEdbRstMap = PEdbRstMapW;
  163. {$ELSE}
  164.   EDB_RSTMAP = EDB_RSTMAPA;
  165.   {$EXTERNALSYM EDB_RSTMAP}
  166.   PEDB_RSTMAP = PEDB_RSTMAPA;
  167.   {$EXTERNALSYM PEDB_RSTMAP}
  168.   TEdbRstMap = TEdbRstMapA;
  169.   PEdbRstMap = PEdbRstMapA;
  170. {$ENDIF}
  171. {*************************************************************************************
  172. Routine Description:
  173.       DsIsNTDSOnline
  174.         Checks to see if the NTDS is Online on the given server. This call is
  175.         guaranteed to return quickly.
  176.   Arguments:
  177.     [in] szServerName - UNC name of the server to check
  178.     [out] pfNTDSOnline - pointer to receive the bool result (TRUE if NTDS is
  179.                             online; FALSE, otherwise)
  180. Return Value:
  181.     ERROR_SUCCESS if the call executed successfully;
  182.     Failure code otherwise.
  183. **************************************************************************************}
  184. function DsIsNTDSOnlineA(szServerName: LPCSTR; var pfNTDSOnline: BOOL): HRESULT; stdcall;
  185. {$EXTERNALSYM DsIsNTDSOnlineA}
  186. function DsIsNTDSOnlineW(szServerName: LPCWSTR; var pfNTDSOnline: BOOL): HRESULT; stdcall;
  187. {$EXTERNALSYM DsIsNTDSOnlineW}
  188. {$IFDEF UNICODE}
  189. function DsIsNTDSOnline(szServerName: LPCWSTR; var pfNTDSOnline: BOOL): HRESULT; stdcall;
  190. {$EXTERNALSYM DsIsNTDSOnline}
  191. {$ELSE}
  192. function DsIsNTDSOnline(szServerName: LPCSTR; var pfNTDSOnline: BOOL): HRESULT; stdcall;
  193. {$EXTERNALSYM DsIsNTDSOnline}
  194. {$ENDIF}
  195. {*************************************************************************************
  196. Routine Description:
  197.       DsBackupPrepare
  198.         Prepares the DS for the online backup and returns a Backup Context Handle
  199.         which should be used in the subsequent calls to other backup functions.
  200.   Arguments:
  201.     [in]    szBackupServer - UNC name of the server to be prepared for online backup
  202.     [in]    grbit - flag to be passed to jet while backing up dbs
  203.     [in]    btFlag - BACKUP_TYPE_FULL or BACKUP_TYPE_LOGS_ONLY
  204.     [out]   ppvExpiryToken - pointer that will receive the pointer to the
  205.                 Expiry Token associated with this backup; Client should save
  206.                 this token and send it back through DsRestorePrepare() when
  207.                 attempting a restore; allocated memory should be freed using
  208.                 DsBackupFree() API by the caller when it is no longer needed.
  209.     [out]   pcbExpiryTokenSize - pointer to receive the size of the expiry token
  210.                 returned.
  211.     [out]   phbc - pointer that will receive the backup context handle
  212. Return Value:
  213.     One of the standard HRESULT success codes;
  214.     Failure code otherwise.
  215. **************************************************************************************}
  216. function DsBackupPrepareA(szBackupServer: LPCSTR; grbit: ULONG; btFlag: ULONG;
  217.   var ppvExpiryToken: PVOID; var pcbExpiryTokenSize: DWORD; var phbc: HBC): HRESULT; stdcall;
  218. {$EXTERNALSYM DsBackupPrepareA}
  219. function DsBackupPrepareW(szBackupServer: LPCWSTR; grbit: ULONG; btFlag: ULONG;
  220.   var ppvExpiryToken: PVOID; var pcbExpiryTokenSize: DWORD; var phbc: HBC): HRESULT; stdcall;
  221. {$EXTERNALSYM DsBackupPrepareW}
  222. {$IFDEF UNICODE}
  223. function DsBackupPrepare(szBackupServer: LPCWSTR; grbit: ULONG; btFlag: ULONG;
  224.   var ppvExpiryToken: PVOID; var pcbExpiryTokenSize: DWORD; var phbc: HBC): HRESULT; stdcall;
  225. {$EXTERNALSYM DsBackupPrepare}
  226. {$ELSE}
  227. function DsBackupPrepare(szBackupServer: LPCSTR; grbit: ULONG; btFlag: ULONG;
  228.   var ppvExpiryToken: PVOID; var pcbExpiryTokenSize: DWORD; var phbc: HBC): HRESULT; stdcall;
  229. {$EXTERNALSYM DsBackupPrepare}
  230. {$ENDIF}
  231. {*************************************************************************************
  232. Routine Description:
  233.       DsBackupGetDatabaseNames
  234.         Gives the list of data bases that need to be backed up for the given
  235.         backup context
  236.   Arguments:
  237.     [in]    hbc - backup context handle
  238.     [out]   pszAttachmentInfo - pointer that will receive the pointer to the attachment
  239.                 info; allocated memory should be freed using DsBackupFree() API by the
  240.                 caller when it is no longer needed; Attachment info is an array of
  241.                 null-terminated filenames and and the list is terminated by two-nulls.
  242.     [out]   pcbSize - will receive the number of bytes returned
  243. Return Value:
  244.     One of the standard HRESULT success codes;
  245.     Failure code otherwise.
  246. **************************************************************************************}
  247. function DsBackupGetDatabaseNamesA(hbc: HBC; var pszAttachmentInfo: LPSTR;
  248.   var pcbSize: DWORD): HRESULT; stdcall;
  249. {$EXTERNALSYM DsBackupGetDatabaseNamesA}
  250. function DsBackupGetDatabaseNamesW(hbc: HBC; var pszAttachmentInfo: LPWSTR;
  251.   var pcbSize: DWORD): HRESULT; stdcall;
  252. {$EXTERNALSYM DsBackupGetDatabaseNamesW}
  253. {$IFDEF UNICODE}
  254. function DsBackupGetDatabaseNames(hbc: HBC; var pszAttachmentInfo: LPWSTR;
  255.   var pcbSize: DWORD): HRESULT; stdcall;
  256. {$EXTERNALSYM DsBackupGetDatabaseNames}
  257. {$ELSE}
  258. function DsBackupGetDatabaseNames(hbc: HBC; var pszAttachmentInfo: LPSTR;
  259.   var pcbSize: DWORD): HRESULT; stdcall;
  260. {$EXTERNALSYM DsBackupGetDatabaseNames}
  261. {$ENDIF}
  262. {*************************************************************************************
  263. Routine Description:
  264.       DsBackupOpenFile
  265.         Opens the given attachment for read.
  266.   Arguments:
  267.     [in]    hbc - backup context handle
  268.     [in]    szAttachmentName - name of the attachment to be opened for read
  269.     [in]    cbReadHintSize - suggested size in bytes that might be used during the
  270.                 subsequent reads on this attachement
  271.     [out]   pliFileSize - pointer to a large integer that would receive the size in
  272.                 bytes of the given attachment
  273. Return Value:
  274.     One of the standard HRESULT success codes;
  275.     Failure code otherwise.
  276. **************************************************************************************}
  277. function DsBackupOpenFileA(hbc: HBC; szAttachmentName: LPCSTR; cbReadHintSize: DWORD;
  278.   var pliFileSize: LARGE_INTEGER): HRESULT; stdcall;
  279. {$EXTERNALSYM DsBackupOpenFileA}
  280. function DsBackupOpenFileW(hbc: HBC; szAttachmentName: LPCWSTR; cbReadHintSize: DWORD;
  281.   var pliFileSize: LARGE_INTEGER): HRESULT; stdcall;
  282. {$EXTERNALSYM DsBackupOpenFileW}
  283. {$IFDEF UNICODE}
  284. function DsBackupOpenFile(hbc: HBC; szAttachmentName: LPCWSTR; cbReadHintSize: DWORD;
  285.   var pliFileSize: LARGE_INTEGER): HRESULT; stdcall;
  286. {$EXTERNALSYM DsBackupOpenFile}
  287. {$ELSE}
  288. function DsBackupOpenFile(hbc: HBC; szAttachmentName: LPCSTR; cbReadHintSize: DWORD;
  289.   var pliFileSize: LARGE_INTEGER): HRESULT; stdcall;
  290. {$EXTERNALSYM DsBackupOpenFile}
  291. {$ENDIF}
  292. {*************************************************************************************
  293. Routine Description:
  294.       DsBackupRead
  295.         Reads the currently open attachment bytes into the given buffer. The client
  296.         application is expected to call this function repeatedly until it gets the
  297.         entire file (the application would have received the file size through the
  298.         DsBackupOpenFile() call before.
  299.   Arguments:
  300.     [in]    hbc - backup context handle
  301.     [in]    pvBuffer - pointer to the buffer that would receive the read data.
  302.     [in]    cbBuffer - specifies the size of the above buffer
  303.     [out]   pcbRead - pointer to receive the actual number of bytes read.
  304. Return Value:
  305.     One of the standard HRESULT success codes;
  306.     Failure code otherwise.
  307. **************************************************************************************}
  308. function DsBackupRead(hbc: HBC; pvBuffer: PVOID; cbBuffer: DWORD; var pcbRead: DWORD): HRESULT; stdcall;
  309. {$EXTERNALSYM DsBackupRead}
  310. {*************************************************************************************
  311. Routine Description:
  312.       DsBackupClose
  313.         To be called by the application after it completes reading all the data in
  314.         the currently opened attachement.
  315.   Arguments:
  316.     [in]    hbc - backup context handle
  317. Return Value:
  318.     One of the standard HRESULT success codes;
  319.     Failure code otherwise.
  320. **************************************************************************************}
  321. function DsBackupClose(hbc: HBC): HRESULT; stdcall;
  322. {$EXTERNALSYM DsBackupClose}
  323. {*************************************************************************************
  324. Routine Description:
  325.       DsBackupGetBackupLogs
  326.         Gives the list of log files that need to be backed up for the given
  327.         backup context
  328.   Arguments:
  329.     [in]    hbc - backup context handle
  330.     [out]   pszBackupLogFiles - pointer that will receive the pointer to the list of
  331.                 log files; allocated memory should be freed using DsBackupFree() API by the
  332.                 caller when it is no longer needed; Log files are returned in an array of
  333.                 null-terminated filenames and and the list is terminated by two-nulls.
  334.     [out]   pcbSize - will receive the number of bytes returned
  335. Return Value:
  336.     One of the standard HRESULT success codes;
  337.     Failure code otherwise.
  338. **************************************************************************************}
  339. function DsBackupGetBackupLogsA(hbc: HBC; var pszBackupLogFiles: LPSTR;
  340.   var pcbSize: DWORD): HRESULT; stdcall;
  341. {$EXTERNALSYM DsBackupGetBackupLogsA}
  342. function DsBackupGetBackupLogsW(hbc: HBC; var pszBackupLogFiles: LPWSTR;
  343.   var pcbSize: DWORD): HRESULT; stdcall;
  344. {$EXTERNALSYM DsBackupGetBackupLogsW}
  345. {$IFDEF UNICODE}
  346. function DsBackupGetBackupLogs(hbc: HBC; var pszBackupLogFiles: LPWSTR;
  347.   var pcbSize: DWORD): HRESULT; stdcall;
  348. {$EXTERNALSYM DsBackupGetBackupLogs}
  349. {$ELSE}
  350. function DsBackupGetBackupLogs(hbc: HBC; var pszBackupLogFiles: LPSTR;
  351.   var pcbSize: DWORD): HRESULT; stdcall;
  352. {$EXTERNALSYM DsBackupGetBackupLogs}
  353. {$ENDIF}
  354. {*************************************************************************************
  355. Routine Description:
  356.       DsBackupTruncateLogs
  357.         Called to truncate the already read backup logs.
  358.   Arguments:
  359.     [in]    hbc - backup context handle
  360. Return Value:
  361.     One of the standard HRESULT success codes;
  362.     Failure code otherwise.
  363. **************************************************************************************}
  364. function DsBackupTruncateLogs(hbc: HBC): HRESULT; stdcall;
  365. {$EXTERNALSYM DsBackupTruncateLogs}
  366. {*************************************************************************************
  367. Routine Description:
  368.       DsBackupEnd
  369.         Called to end the current backup session.
  370.   Arguments:
  371.     [in]    hbc - backup context handle of the backup session
  372. Return Value:
  373.     One of the standard HRESULT success codes;
  374.     Failure code otherwise.
  375. **************************************************************************************}
  376. function DsBackupEnd(hbc: HBC): HRESULT; stdcall;
  377. {$EXTERNALSYM DsBackupEnd}
  378. {*************************************************************************************
  379. Routine Description:
  380.       DsBackupFree
  381.         Should be used by the application to free any buffer allocated by the
  382.         NTDSBCLI dll.
  383.   Arguments:
  384.     [in]    pvBuffer - pointer to the buffer that is to be freed.
  385.   Return Value:
  386.     None.
  387. **************************************************************************************}
  388. procedure DsBackupFree(pvBuffer: PVOID); stdcall;
  389. {$EXTERNALSYM DsBackupFree}
  390. {*************************************************************************************
  391. Routine Description:
  392.       DsRestoreGetDatabaseLocations
  393.         Called both at backup time as well at restoration time to get the data base
  394.         locations for different types of files.
  395.   Arguments:
  396.     [in]    hbc - backup context handle which would have been obtained through
  397.                     DsBackupPrepare() in the backup case and through DsRestorePrepare()
  398.                     in the restore case.
  399.     [out]   pszDatabaseLocationList - pointer that will receive the pointer to the list of
  400.                 database locations; allocated memory should be freed using DsBackupFree() API by the
  401.                 caller when it is no longer needed; locations are returned in an array of
  402.                 null-terminated names and and the list is terminated by two-nulls.
  403.                 The first character of each name is the BFT character that indicates the type
  404.                 of the file and the rest of the name tells gives the path into which that
  405.                 particular type of file should be restored.
  406.     [out]   pcbSize - will receive the number of bytes returned
  407. Return Value:
  408.     One of the standard HRESULT success codes;
  409.     Failure code otherwise.
  410. **************************************************************************************}
  411. function DsRestoreGetDatabaseLocationsA(hbc: HBC; var pszDatabaseLocationList: LPSTR;
  412.   var pcbSize: DWORD): HRESULT; stdcall;
  413. {$EXTERNALSYM DsRestoreGetDatabaseLocationsA}
  414. function DsRestoreGetDatabaseLocationsW(hbc: HBC; var pszDatabaseLocationList: LPWSTR;
  415.   var pcbSize: DWORD): HRESULT; stdcall;
  416. {$EXTERNALSYM DsRestoreGetDatabaseLocationsW}
  417. {$IFDEF UNICODE}
  418. function DsRestoreGetDatabaseLocations(hbc: HBC; var pszDatabaseLocationList: LPWSTR;
  419.   var pcbSize: DWORD): HRESULT; stdcall;
  420. {$EXTERNALSYM DsRestoreGetDatabaseLocations}
  421. {$ELSE}
  422. function DsRestoreGetDatabaseLocations(hbc: HBC; var pszDatabaseLocationList: LPSTR;
  423.   var pcbSize: DWORD): HRESULT; stdcall;
  424. {$EXTERNALSYM DsRestoreGetDatabaseLocations}
  425. {$ENDIF}
  426. {*************************************************************************************
  427. Routine Description:
  428.       DsRestorePrepare
  429.         Called to indicate beginning of a restore session.
  430.   Arguments:
  431.     [in]    szServerName - UNC name of the server into which the restore operation is
  432.                             going to be performed.
  433.     [in]    rtFlag -  Or'ed combination of RESTORE_TYPE_* flags; 0 if no special flags
  434.                             are to be specified
  435.     [in]    pvExpiryToken - pointer to the expiry token associated with this
  436.                             backup. The client would have received this when they backed up the DS.
  437.     [in]    cbExpiryTokenSize - size of the expiry token.
  438.     [out]   phbc - pointer to receive the backup context handle which is to be passed
  439.                             to the subsequent restore APIs
  440. Return Value:
  441.     One of the standard HRESULT success codes;
  442.     Failure code otherwise.
  443. **************************************************************************************}
  444. function DsRestorePrepareA(szServerName: LPCSTR; rtFlag: ULONG; pvExpiryToken: PVOID;
  445.   cbExpiryTokenSize: DWORD; var phbc: HBC): HRESULT; stdcall;
  446. {$EXTERNALSYM DsRestorePrepareA}
  447. function DsRestorePrepareW(szServerName: LPCWSTR; rtFlag: ULONG; pvExpiryToken: PVOID;
  448.   cbExpiryTokenSize: DWORD; var phbc: HBC): HRESULT; stdcall;
  449. {$EXTERNALSYM DsRestorePrepareW}
  450. {$IFDEF UNICODE}
  451. function DsRestorePrepare(szServerName: LPCWSTR; rtFlag: ULONG; pvExpiryToken: PVOID;
  452.   cbExpiryTokenSize: DWORD; var phbc: HBC): HRESULT; stdcall;
  453. {$EXTERNALSYM DsRestorePrepare}
  454. {$ELSE}
  455. function DsRestorePrepare(szServerName: LPCSTR; rtFlag: ULONG; pvExpiryToken: PVOID;
  456.   cbExpiryTokenSize: DWORD; var phbc: HBC): HRESULT; stdcall;
  457. {$EXTERNALSYM DsRestorePrepare}
  458. {$ENDIF}
  459. {*************************************************************************************
  460. Routine Description:
  461.       DsRestoreRegister
  462.         This will register a restore operation. It will interlock all sbsequent restore
  463.         operations, and will prevent the restore target from starting until the call
  464.         to DsRestoreRegisterComplete() is made.
  465.   Arguments:
  466.     [in]    hbc - backup context handle for the restore session.
  467.     [in]    szCheckPointFilePath - path where the check point files are restored
  468.     [in]    szLogPath - path where the log files are restored
  469.     [in]    rgrstmap - restore map
  470.     [in]    crstmap - tells if ther is a new restore map
  471.     [in]    szBackupLogPath - path where the backup logs are located
  472.     [in]    genLow - Lowest log# that was restored in this restore session
  473.     [in]    genHigh - Highest log# that was restored in this restore session
  474.   Return Value:
  475.     One of the standard HRESULT success codes;
  476.     Failure code otherwise.
  477. **************************************************************************************}
  478. function DsRestoreRegisterA(hbc: HBC; szCheckPointFilePath, szLogPath: LPCSTR;
  479.   rgrstmap: PEDB_RSTMAPA; crstmap: LONG; szBackupLogPath: LPCSTR; genLow, genHigh: ULONG): HRESULT; stdcall;
  480. {$EXTERNALSYM DsRestoreRegisterA}
  481. function DsRestoreRegisterW(hbc: HBC; szCheckPointFilePath, szLogPath: LPCWSTR;
  482.   rgrstmap: PEDB_RSTMAPW; crstmap: LONG; szBackupLogPath: LPCWSTR; genLow, genHigh: ULONG): HRESULT; stdcall;
  483. {$EXTERNALSYM DsRestoreRegisterW}
  484. {$IFDEF UNICODE}
  485. function DsRestoreRegister(hbc: HBC; szCheckPointFilePath, szLogPath: LPCWSTR;
  486.   rgrstmap: PEDB_RSTMAPW; crstmap: LONG; szBackupLogPath: LPCWSTR; genLow, genHigh: ULONG): HRESULT; stdcall;
  487. {$EXTERNALSYM DsRestoreRegister}
  488. {$ELSE}
  489. function DsRestoreRegister(hbc: HBC; szCheckPointFilePath, szLogPath: LPCSTR;
  490.   rgrstmap: PEDB_RSTMAPA; crstmap: LONG; szBackupLogPath: LPCSTR; genLow, genHigh: ULONG): HRESULT; stdcall;
  491. {$EXTERNALSYM DsRestoreRegister}
  492. {$ENDIF}
  493. {*************************************************************************************
  494. Routine Description:
  495.       DsRestoreRegisterComplete
  496.         Called to indicate that a previously registered restore is complete.
  497.   Arguments:
  498.     [in]    hbc - backup context handle
  499.     [in]    hrRestoreState - success code if the restore was successful
  500. Return Value:
  501.     One of the standard HRESULT success codes;
  502.     Failure code otherwise.
  503. **************************************************************************************}
  504. function DsRestoreRegisterComplete(hbc: HBC; hrRestoreState: HRESULT): HRESULT; stdcall;
  505. {$EXTERNALSYM DsRestoreRegisterComplete}
  506. {*************************************************************************************
  507. Routine Description:
  508.       DsRestoreEnd
  509.         Called to end a restore session
  510.   Arguments:
  511.     [in]    hbc - backup context handle
  512. Return Value:
  513.     One of the standard HRESULT success codes;
  514.     Failure code otherwise.
  515. **************************************************************************************}
  516. function DsRestoreEnd(hbc: HBC): HRESULT; stdcall;
  517. {$EXTERNALSYM DsRestoreEnd}
  518. {*************************************************************************************
  519. Routine Description:
  520.       DsSetCurrentBackupLog
  521.         Called to set the current backup log number after a successful restore
  522.   Arguments:
  523.     [in]    szServerName - UNC name of the server for which the current backup log has
  524.                                 to be set
  525.     [in]    dwCurrentLog -  current log number
  526. Return Value:
  527.     One of the standard HRESULT success codes;
  528.     Failure code otherwise.
  529. **************************************************************************************}
  530. function DsSetCurrentBackupLogA(szServerName: LPCSTR; dwCurrentLog: DWORD): HRESULT; stdcall;
  531. {$EXTERNALSYM DsSetCurrentBackupLogA}
  532. function DsSetCurrentBackupLogW(szServerName: LPCWSTR; dwCurrentLog: DWORD): HRESULT; stdcall;
  533. {$EXTERNALSYM DsSetCurrentBackupLogW}
  534. {$IFDEF UNICODE}
  535. function DsSetCurrentBackupLog(szServerName: LPCWSTR; dwCurrentLog: DWORD): HRESULT; stdcall;
  536. {$EXTERNALSYM DsSetCurrentBackupLog}
  537. {$ELSE}
  538. function DsSetCurrentBackupLog(szServerName: LPCSTR; dwCurrentLog: DWORD): HRESULT; stdcall;
  539. {$EXTERNALSYM DsSetCurrentBackupLog}
  540. {$ENDIF}
  541. {*************************************************************************************
  542. Routine Description:
  543.       DsSetAuthIdentity
  544.         Used to set the security context under which the client APIs are to be
  545.         called. If this function is not called, security context of the current
  546.         process is assumed.
  547.   Arguments:
  548.     [in]    szUserName - name of the user
  549.     [in]    szDomainName -  name of the domain the user belongs to
  550.     [in]    szPassword - password of the user in the specified domain
  551. Return Value:
  552.     One of the standard HRESULT success codes;
  553.     Failure code otherwise.
  554. **************************************************************************************}
  555. function DsSetAuthIdentityA(szUserName, szDomainName, szPassword: LPCSTR): HRESULT; stdcall;
  556. {$EXTERNALSYM DsSetAuthIdentityA}
  557. function DsSetAuthIdentityW(szUserName, szDomainName, szPassword: LPCWSTR): HRESULT; stdcall;
  558. {$EXTERNALSYM DsSetAuthIdentityW}
  559. {$IFDEF UNICODE}
  560. function DsSetAuthIdentity(szUserName, szDomainName, szPassword: LPCWSTR): HRESULT; stdcall;
  561. {$EXTERNALSYM DsSetAuthIdentity}
  562. {$ELSE}
  563. function DsSetAuthIdentity(szUserName, szDomainName, szPassword: LPCSTR): HRESULT; stdcall;
  564. {$EXTERNALSYM DsSetAuthIdentity}
  565. {$ENDIF}
  566. implementation
  567. const
  568.   ntdsbclilib = 'ntdsbclilib.dll';
  569. {$IFDEF DYNAMIC_LINK}
  570. var
  571.   _DsIsNTDSOnlineA: Pointer;
  572. function DsIsNTDSOnlineA;
  573. begin
  574.   GetProcedureAddress(_DsIsNTDSOnlineA, ntdsbclilib, 'DsIsNTDSOnlineA');
  575.   asm
  576.     mov esp, ebp
  577.     pop ebp
  578.     jmp [_DsIsNTDSOnlineA]
  579.   end;
  580. end;
  581. {$ELSE}
  582. function DsIsNTDSOnlineA; external ntdsbclilib name 'DsIsNTDSOnlineA';
  583. {$ENDIF DYNAMIC_LINK}
  584. {$IFDEF DYNAMIC_LINK}
  585. var
  586.   _DsIsNTDSOnlineW: Pointer;
  587. function DsIsNTDSOnlineW;
  588. begin
  589.   GetProcedureAddress(_DsIsNTDSOnlineW, ntdsbclilib, 'DsIsNTDSOnlineW');
  590.   asm
  591.     mov esp, ebp
  592.     pop ebp
  593.     jmp [_DsIsNTDSOnlineW]
  594.   end;
  595. end;
  596. {$ELSE}
  597. function DsIsNTDSOnlineW; external ntdsbclilib name 'DsIsNTDSOnlineW';
  598. {$ENDIF DYNAMIC_LINK}
  599. {$IFDEF UNICODE}
  600. {$IFDEF DYNAMIC_LINK}
  601. var
  602.   _DsIsNTDSOnline: Pointer;
  603. function DsIsNTDSOnline;
  604. begin
  605.   GetProcedureAddress(_DsIsNTDSOnline, ntdsbclilib, 'DsIsNTDSOnlineW');
  606.   asm
  607.     mov esp, ebp
  608.     pop ebp
  609.     jmp [_DsIsNTDSOnline]
  610.   end;
  611. end;
  612. {$ELSE}
  613. function DsIsNTDSOnline; external ntdsbclilib name 'DsIsNTDSOnlineW';
  614. {$ENDIF DYNAMIC_LINK}
  615. {$ELSE}
  616. {$IFDEF DYNAMIC_LINK}
  617. var
  618.   _DsIsNTDSOnline: Pointer;
  619. function DsIsNTDSOnline;
  620. begin
  621.   GetProcedureAddress(_DsIsNTDSOnline, ntdsbclilib, 'DsIsNTDSOnlineA');
  622.   asm
  623.     mov esp, ebp
  624.     pop ebp
  625.     jmp [_DsIsNTDSOnline]
  626.   end;
  627. end;
  628. {$ELSE}
  629. function DsIsNTDSOnline; external ntdsbclilib name 'DsIsNTDSOnlineA';
  630. {$ENDIF DYNAMIC_LINK}
  631. {$ENDIF}
  632. {$IFDEF DYNAMIC_LINK}
  633. var
  634.   _DsBackupPrepareA: Pointer;
  635. function DsBackupPrepareA;
  636. begin
  637.   GetProcedureAddress(_DsBackupPrepareA, ntdsbclilib, 'DsBackupPrepareA');
  638.   asm
  639.     mov esp, ebp
  640.     pop ebp
  641.     jmp [_DsBackupPrepareA]
  642.   end;
  643. end;
  644. {$ELSE}
  645. function DsBackupPrepareA; external ntdsbclilib name 'DsBackupPrepareA';
  646. {$ENDIF DYNAMIC_LINK}
  647. {$IFDEF DYNAMIC_LINK}
  648. var
  649.   _DsBackupPrepareW: Pointer;
  650. function DsBackupPrepareW;
  651. begin
  652.   GetProcedureAddress(_DsBackupPrepareW, ntdsbclilib, 'DsBackupPrepareW');
  653.   asm
  654.     mov esp, ebp
  655.     pop ebp
  656.     jmp [_DsBackupPrepareW]
  657.   end;
  658. end;
  659. {$ELSE}
  660. function DsBackupPrepareW; external ntdsbclilib name 'DsBackupPrepareW';
  661. {$ENDIF DYNAMIC_LINK}
  662. {$IFDEF UNICODE}
  663. {$IFDEF DYNAMIC_LINK}
  664. var
  665.   _DsBackupPrepare: Pointer;
  666. function DsBackupPrepare;
  667. begin
  668.   GetProcedureAddress(_DsBackupPrepare, ntdsbclilib, 'DsBackupPrepareW');
  669.   asm
  670.     mov esp, ebp
  671.     pop ebp
  672.     jmp [_DsBackupPrepare]
  673.   end;
  674. end;
  675. {$ELSE}
  676. function DsBackupPrepare; external ntdsbclilib name 'DsBackupPrepareW';
  677. {$ENDIF DYNAMIC_LINK}
  678. {$ELSE}
  679. {$IFDEF DYNAMIC_LINK}
  680. var
  681.   _DsBackupPrepare: Pointer;
  682. function DsBackupPrepare;
  683. begin
  684.   GetProcedureAddress(_DsBackupPrepare, ntdsbclilib, 'DsBackupPrepareA');
  685.   asm
  686.     mov esp, ebp
  687.     pop ebp
  688.     jmp [_DsBackupPrepare]
  689.   end;
  690. end;
  691. {$ELSE}
  692. function DsBackupPrepare; external ntdsbclilib name 'DsBackupPrepareA';
  693. {$ENDIF DYNAMIC_LINK}
  694. {$ENDIF}
  695. {$IFDEF DYNAMIC_LINK}
  696. var
  697.   _DsBackupGetDatabaseNamesA: Pointer;
  698. function DsBackupGetDatabaseNamesA;
  699. begin
  700.   GetProcedureAddress(_DsBackupGetDatabaseNamesA, ntdsbclilib, 'DsBackupGetDatabaseNamesA');
  701.   asm
  702.     mov esp, ebp
  703.     pop ebp
  704.     jmp [_DsBackupGetDatabaseNamesA]
  705.   end;
  706. end;
  707. {$ELSE}
  708. function DsBackupGetDatabaseNamesA; external ntdsbclilib name 'DsBackupGetDatabaseNamesA';
  709. {$ENDIF DYNAMIC_LINK}
  710. {$IFDEF DYNAMIC_LINK}
  711. var
  712.   _DsBackupGetDatabaseNamesW: Pointer;
  713. function DsBackupGetDatabaseNamesW;
  714. begin
  715.   GetProcedureAddress(_DsBackupGetDatabaseNamesW, ntdsbclilib, 'DsBackupGetDatabaseNamesW');
  716.   asm
  717.     mov esp, ebp
  718.     pop ebp
  719.     jmp [_DsBackupGetDatabaseNamesW]
  720.   end;
  721. end;
  722. {$ELSE}
  723. function DsBackupGetDatabaseNamesW; external ntdsbclilib name 'DsBackupGetDatabaseNamesW';
  724. {$ENDIF DYNAMIC_LINK}
  725. {$IFDEF UNICODE}
  726. {$IFDEF DYNAMIC_LINK}
  727. var
  728.   _DsBackupGetDatabaseNames: Pointer;
  729. function DsBackupGetDatabaseNames;
  730. begin
  731.   GetProcedureAddress(_DsBackupGetDatabaseNames, ntdsbclilib, 'DsBackupGetDatabaseNamesW');
  732.   asm
  733.     mov esp, ebp
  734.     pop ebp
  735.     jmp [_DsBackupGetDatabaseNames]
  736.   end;
  737. end;
  738. {$ELSE}
  739. function DsBackupGetDatabaseNames; external ntdsbclilib name 'DsBackupGetDatabaseNamesW';
  740. {$ENDIF DYNAMIC_LINK}
  741. {$ELSE}
  742. {$IFDEF DYNAMIC_LINK}
  743. var
  744.   _DsBackupGetDatabaseNames: Pointer;
  745. function DsBackupGetDatabaseNames;
  746. begin
  747.   GetProcedureAddress(_DsBackupGetDatabaseNames, ntdsbclilib, 'DsBackupGetDatabaseNamesA');
  748.   asm
  749.     mov esp, ebp
  750.     pop ebp
  751.     jmp [_DsBackupGetDatabaseNames]
  752.   end;
  753. end;
  754. {$ELSE}
  755. function DsBackupGetDatabaseNames; external ntdsbclilib name 'DsBackupGetDatabaseNamesA';
  756. {$ENDIF DYNAMIC_LINK}
  757. {$ENDIF}
  758. {$IFDEF DYNAMIC_LINK}
  759. var
  760.   _DsBackupOpenFileA: Pointer;
  761. function DsBackupOpenFileA;
  762. begin
  763.   GetProcedureAddress(_DsBackupOpenFileA, ntdsbclilib, 'DsBackupOpenFileA');
  764.   asm
  765.     mov esp, ebp
  766.     pop ebp
  767.     jmp [_DsBackupOpenFileA]
  768.   end;
  769. end;
  770. {$ELSE}
  771. function DsBackupOpenFileA; external ntdsbclilib name 'DsBackupOpenFileA';
  772. {$ENDIF DYNAMIC_LINK}
  773. {$IFDEF DYNAMIC_LINK}
  774. var
  775.   _DsBackupOpenFileW: Pointer;
  776. function DsBackupOpenFileW;
  777. begin
  778.   GetProcedureAddress(_DsBackupOpenFileW, ntdsbclilib, 'DsBackupOpenFileW');
  779.   asm
  780.     mov esp, ebp
  781.     pop ebp
  782.     jmp [_DsBackupOpenFileW]
  783.   end;
  784. end;
  785. {$ELSE}
  786. function DsBackupOpenFileW; external ntdsbclilib name 'DsBackupOpenFileW';
  787. {$ENDIF DYNAMIC_LINK}
  788. {$IFDEF UNICODE}
  789. {$IFDEF DYNAMIC_LINK}
  790. var
  791.   _DsBackupOpenFile: Pointer;
  792. function DsBackupOpenFile;
  793. begin
  794.   GetProcedureAddress(_DsBackupOpenFile, ntdsbclilib, 'DsBackupOpenFileW');
  795.   asm
  796.     mov esp, ebp
  797.     pop ebp
  798.     jmp [_DsBackupOpenFile]
  799.   end;
  800. end;
  801. {$ELSE}
  802. function DsBackupOpenFile; external ntdsbclilib name 'DsBackupOpenFileW';
  803. {$ENDIF DYNAMIC_LINK}
  804. {$ELSE}
  805. {$IFDEF DYNAMIC_LINK}
  806. var
  807.   _DsBackupOpenFile: Pointer;
  808. function DsBackupOpenFile;
  809. begin
  810.   GetProcedureAddress(_DsBackupOpenFile, ntdsbclilib, 'DsBackupOpenFileA');
  811.   asm
  812.     mov esp, ebp
  813.     pop ebp
  814.     jmp [_DsBackupOpenFile]
  815.   end;
  816. end;
  817. {$ELSE}
  818. function DsBackupOpenFile; external ntdsbclilib name 'DsBackupOpenFileA';
  819. {$ENDIF DYNAMIC_LINK}
  820. {$ENDIF}
  821. {$IFDEF DYNAMIC_LINK}
  822. var
  823.   _DsBackupRead: Pointer;
  824. function DsBackupRead;
  825. begin
  826.   GetProcedureAddress(_DsBackupRead, ntdsbclilib, 'DsBackupRead');
  827.   asm
  828.     mov esp, ebp
  829.     pop ebp
  830.     jmp [_DsBackupRead]
  831.   end;
  832. end;
  833. {$ELSE}
  834. function DsBackupRead; external ntdsbclilib name 'DsBackupRead';
  835. {$ENDIF DYNAMIC_LINK}
  836. {$IFDEF DYNAMIC_LINK}
  837. var
  838.   _DsBackupClose: Pointer;
  839. function DsBackupClose;
  840. begin
  841.   GetProcedureAddress(_DsBackupClose, ntdsbclilib, 'DsBackupClose');
  842.   asm
  843.     mov esp, ebp
  844.     pop ebp
  845.     jmp [_DsBackupClose]
  846.   end;
  847. end;
  848. {$ELSE}
  849. function DsBackupClose; external ntdsbclilib name 'DsBackupClose';
  850. {$ENDIF DYNAMIC_LINK}
  851. {$IFDEF DYNAMIC_LINK}
  852. var
  853.   _DsBackupGetBackupLogsA: Pointer;
  854. function DsBackupGetBackupLogsA;
  855. begin
  856.   GetProcedureAddress(_DsBackupGetBackupLogsA, ntdsbclilib, 'DsBackupGetBackupLogsA');
  857.   asm
  858.     mov esp, ebp
  859.     pop ebp
  860.     jmp [_DsBackupGetBackupLogsA]
  861.   end;
  862. end;
  863. {$ELSE}
  864. function DsBackupGetBackupLogsA; external ntdsbclilib name 'DsBackupGetBackupLogsA';
  865. {$ENDIF DYNAMIC_LINK}
  866. {$IFDEF DYNAMIC_LINK}
  867. var
  868.   _DsBackupGetBackupLogsW: Pointer;
  869. function DsBackupGetBackupLogsW;
  870. begin
  871.   GetProcedureAddress(_DsBackupGetBackupLogsW, ntdsbclilib, 'DsBackupGetBackupLogsW');
  872.   asm
  873.     mov esp, ebp
  874.     pop ebp
  875.     jmp [_DsBackupGetBackupLogsW]
  876.   end;
  877. end;
  878. {$ELSE}
  879. function DsBackupGetBackupLogsW; external ntdsbclilib name 'DsBackupGetBackupLogsW';
  880. {$ENDIF DYNAMIC_LINK}
  881. {$IFDEF UNICODE}
  882. {$IFDEF DYNAMIC_LINK}
  883. var
  884.   _DsBackupGetBackupLogs: Pointer;
  885. function DsBackupGetBackupLogs;
  886. begin
  887.   GetProcedureAddress(_DsBackupGetBackupLogs, ntdsbclilib, 'DsBackupGetBackupLogsW');
  888.   asm
  889.     mov esp, ebp
  890.     pop ebp
  891.     jmp [_DsBackupGetBackupLogs]
  892.   end;
  893. end;
  894. {$ELSE}
  895. function DsBackupGetBackupLogs; external ntdsbclilib name 'DsBackupGetBackupLogsW';
  896. {$ENDIF DYNAMIC_LINK}
  897. {$ELSE}
  898. {$IFDEF DYNAMIC_LINK}
  899. var
  900.   _DsBackupGetBackupLogs: Pointer;
  901. function DsBackupGetBackupLogs;
  902. begin
  903.   GetProcedureAddress(_DsBackupGetBackupLogs, ntdsbclilib, 'DsBackupGetBackupLogsA');
  904.   asm
  905.     mov esp, ebp
  906.     pop ebp
  907.     jmp [_DsBackupGetBackupLogs]
  908.   end;
  909. end;
  910. {$ELSE}
  911. function DsBackupGetBackupLogs; external ntdsbclilib name 'DsBackupGetBackupLogsA';
  912. {$ENDIF DYNAMIC_LINK}
  913. {$ENDIF}
  914. {$IFDEF DYNAMIC_LINK}
  915. var
  916.   _DsBackupTruncateLogs: Pointer;
  917. function DsBackupTruncateLogs;
  918. begin
  919.   GetProcedureAddress(_DsBackupTruncateLogs, ntdsbclilib, 'DsBackupTruncateLogs');
  920.   asm
  921.     mov esp, ebp
  922.     pop ebp
  923.     jmp [_DsBackupTruncateLogs]
  924.   end;
  925. end;
  926. {$ELSE}
  927. function DsBackupTruncateLogs; external ntdsbclilib name 'DsBackupTruncateLogs';
  928. {$ENDIF DYNAMIC_LINK}
  929. {$IFDEF DYNAMIC_LINK}
  930. var
  931.   _DsBackupEnd: Pointer;
  932. function DsBackupEnd;
  933. begin
  934.   GetProcedureAddress(_DsBackupEnd, ntdsbclilib, 'DsBackupEnd');
  935.   asm
  936.     mov esp, ebp
  937.     pop ebp
  938.     jmp [_DsBackupEnd]
  939.   end;
  940. end;
  941. {$ELSE}
  942. function DsBackupEnd; external ntdsbclilib name 'DsBackupEnd';
  943. {$ENDIF DYNAMIC_LINK}
  944. {$IFDEF DYNAMIC_LINK}
  945. var
  946.   _DsBackupFree: Pointer;
  947. procedure DsBackupFree;
  948. begin
  949.   GetProcedureAddress(_DsBackupFree, ntdsbclilib, 'DsBackupFree');
  950.   asm
  951.     mov esp, ebp
  952.     pop ebp
  953.     jmp [_DsBackupFree]
  954.   end;
  955. end;
  956. {$ELSE}
  957. procedure DsBackupFree; external ntdsbclilib name 'DsBackupFree';
  958. {$ENDIF DYNAMIC_LINK}
  959. {$IFDEF DYNAMIC_LINK}
  960. var
  961.   _DsRestoreGetDatabaseLocationsA: Pointer;
  962. function DsRestoreGetDatabaseLocationsA;
  963. begin
  964.   GetProcedureAddress(_DsRestoreGetDatabaseLocationsA, ntdsbclilib, 'DsRestoreGetDatabaseLocationsA');
  965.   asm
  966.     mov esp, ebp
  967.     pop ebp
  968.     jmp [_DsRestoreGetDatabaseLocationsA]
  969.   end;
  970. end;
  971. {$ELSE}
  972. function DsRestoreGetDatabaseLocationsA; external ntdsbclilib name 'DsRestoreGetDatabaseLocationsA';
  973. {$ENDIF DYNAMIC_LINK}
  974. {$IFDEF DYNAMIC_LINK}
  975. var
  976.   _DsRestoreGetDatabaseLocationsW: Pointer;
  977. function DsRestoreGetDatabaseLocationsW;
  978. begin
  979.   GetProcedureAddress(_DsRestoreGetDatabaseLocationsW, ntdsbclilib, 'DsRestoreGetDatabaseLocationsW');
  980.   asm
  981.     mov esp, ebp
  982.     pop ebp
  983.     jmp [_DsRestoreGetDatabaseLocationsW]
  984.   end;
  985. end;
  986. {$ELSE}
  987. function DsRestoreGetDatabaseLocationsW; external ntdsbclilib name 'DsRestoreGetDatabaseLocationsW';
  988. {$ENDIF DYNAMIC_LINK}
  989. {$IFDEF UNICODE}
  990. {$IFDEF DYNAMIC_LINK}
  991. var
  992.   _DsRestoreGetDatabaseLocations: Pointer;
  993. function DsRestoreGetDatabaseLocations;
  994. begin
  995.   GetProcedureAddress(_DsRestoreGetDatabaseLocations, ntdsbclilib, 'DsRestoreGetDatabaseLocationsW');
  996.   asm
  997.     mov esp, ebp
  998.     pop ebp
  999.     jmp [_DsRestoreGetDatabaseLocations]
  1000.   end;
  1001. end;
  1002. {$ELSE}
  1003. function DsRestoreGetDatabaseLocations; external ntdsbclilib name 'DsRestoreGetDatabaseLocationsW';
  1004. {$ENDIF DYNAMIC_LINK}
  1005. {$ELSE}
  1006. {$IFDEF DYNAMIC_LINK}
  1007. var
  1008.   _DsRestoreGetDatabaseLocations: Pointer;
  1009. function DsRestoreGetDatabaseLocations;
  1010. begin
  1011.   GetProcedureAddress(_DsRestoreGetDatabaseLocations, ntdsbclilib, 'DsRestoreGetDatabaseLocationsA');
  1012.   asm
  1013.     mov esp, ebp
  1014.     pop ebp
  1015.     jmp [_DsRestoreGetDatabaseLocations]
  1016.   end;
  1017. end;
  1018. {$ELSE}
  1019. function DsRestoreGetDatabaseLocations; external ntdsbclilib name 'DsRestoreGetDatabaseLocationsA';
  1020. {$ENDIF DYNAMIC_LINK}
  1021. {$ENDIF}
  1022. {$IFDEF DYNAMIC_LINK}
  1023. var
  1024.   _DsRestorePrepareA: Pointer;
  1025. function DsRestorePrepareA;
  1026. begin
  1027.   GetProcedureAddress(_DsRestorePrepareA, ntdsbclilib, 'DsRestorePrepareA');
  1028.   asm
  1029.     mov esp, ebp
  1030.     pop ebp
  1031.     jmp [_DsRestorePrepareA]
  1032.   end;
  1033. end;
  1034. {$ELSE}
  1035. function DsRestorePrepareA; external ntdsbclilib name 'DsRestorePrepareA';
  1036. {$ENDIF DYNAMIC_LINK}
  1037. {$IFDEF DYNAMIC_LINK}
  1038. var
  1039.   _DsRestorePrepareW: Pointer;
  1040. function DsRestorePrepareW;
  1041. begin
  1042.   GetProcedureAddress(_DsRestorePrepareW, ntdsbclilib, 'DsRestorePrepareW');
  1043.   asm
  1044.     mov esp, ebp
  1045.     pop ebp
  1046.     jmp [_DsRestorePrepareW]
  1047.   end;
  1048. end;
  1049. {$ELSE}
  1050. function DsRestorePrepareW; external ntdsbclilib name 'DsRestorePrepareW';
  1051. {$ENDIF DYNAMIC_LINK}
  1052. {$IFDEF UNICODE}
  1053. {$IFDEF DYNAMIC_LINK}
  1054. var
  1055.   _DsRestorePrepare: Pointer;
  1056. function DsRestorePrepare;
  1057. begin
  1058.   GetProcedureAddress(_DsRestorePrepare, ntdsbclilib, 'DsRestorePrepareW');
  1059.   asm
  1060.     mov esp, ebp
  1061.     pop ebp
  1062.     jmp [_DsRestorePrepare]
  1063.   end;
  1064. end;
  1065. {$ELSE}
  1066. function DsRestorePrepare; external ntdsbclilib name 'DsRestorePrepareW';
  1067. {$ENDIF DYNAMIC_LINK}
  1068. {$ELSE}
  1069. {$IFDEF DYNAMIC_LINK}
  1070. var
  1071.   _DsRestorePrepare: Pointer;
  1072. function DsRestorePrepare;
  1073. begin
  1074.   GetProcedureAddress(_DsRestorePrepare, ntdsbclilib, 'DsRestorePrepareA');
  1075.   asm
  1076.     mov esp, ebp
  1077.     pop ebp
  1078.     jmp [_DsRestorePrepare]
  1079.   end;
  1080. end;
  1081. {$ELSE}
  1082. function DsRestorePrepare; external ntdsbclilib name 'DsRestorePrepareA';
  1083. {$ENDIF DYNAMIC_LINK}
  1084. {$ENDIF}
  1085. {$IFDEF DYNAMIC_LINK}
  1086. var
  1087.   _DsRestoreRegisterA: Pointer;
  1088. function DsRestoreRegisterA;
  1089. begin
  1090.   GetProcedureAddress(_DsRestoreRegisterA, ntdsbclilib, 'DsRestoreRegisterA');
  1091.   asm
  1092.     mov esp, ebp
  1093.     pop ebp
  1094.     jmp [_DsRestoreRegisterA]
  1095.   end;
  1096. end;
  1097. {$ELSE}
  1098. function DsRestoreRegisterA; external ntdsbclilib name 'DsRestoreRegisterA';
  1099. {$ENDIF DYNAMIC_LINK}
  1100. {$IFDEF DYNAMIC_LINK}
  1101. var
  1102.   _DsRestoreRegisterW: Pointer;
  1103. function DsRestoreRegisterW;
  1104. begin
  1105.   GetProcedureAddress(_DsRestoreRegisterW, ntdsbclilib, 'DsRestoreRegisterW');
  1106.   asm
  1107.     mov esp, ebp
  1108.     pop ebp
  1109.     jmp [_DsRestoreRegisterW]
  1110.   end;
  1111. end;
  1112. {$ELSE}
  1113. function DsRestoreRegisterW; external ntdsbclilib name 'DsRestoreRegisterW';
  1114. {$ENDIF DYNAMIC_LINK}
  1115. {$IFDEF UNICODE}
  1116. {$IFDEF DYNAMIC_LINK}
  1117. var
  1118.   _DsRestoreRegister: Pointer;
  1119. function DsRestoreRegister;
  1120. begin
  1121.   GetProcedureAddress(_DsRestoreRegister, ntdsbclilib, 'DsRestoreRegisterW');
  1122.   asm
  1123.     mov esp, ebp
  1124.     pop ebp
  1125.     jmp [_DsRestoreRegister]
  1126.   end;
  1127. end;
  1128. {$ELSE}
  1129. function DsRestoreRegister; external ntdsbclilib name 'DsRestoreRegisterW';
  1130. {$ENDIF DYNAMIC_LINK}
  1131. {$ELSE}
  1132. {$IFDEF DYNAMIC_LINK}
  1133. var
  1134.   _DsRestoreRegister: Pointer;
  1135. function DsRestoreRegister;
  1136. begin
  1137.   GetProcedureAddress(_DsRestoreRegister, ntdsbclilib, 'DsRestoreRegisterA');
  1138.   asm
  1139.     mov esp, ebp
  1140.     pop ebp
  1141.     jmp [_DsRestoreRegister]
  1142.   end;
  1143. end;
  1144. {$ELSE}
  1145. function DsRestoreRegister; external ntdsbclilib name 'DsRestoreRegisterA';
  1146. {$ENDIF DYNAMIC_LINK}
  1147. {$ENDIF}
  1148. {$IFDEF DYNAMIC_LINK}
  1149. var
  1150.   _DsRestoreRegisterComplete: Pointer;
  1151. function DsRestoreRegisterComplete;
  1152. begin
  1153.   GetProcedureAddress(_DsRestoreRegisterComplete, ntdsbclilib, 'DsRestoreRegisterComplete');
  1154.   asm
  1155.     mov esp, ebp
  1156.     pop ebp
  1157.     jmp [_DsRestoreRegisterComplete]
  1158.   end;
  1159. end;
  1160. {$ELSE}
  1161. function DsRestoreRegisterComplete; external ntdsbclilib name 'DsRestoreRegisterComplete';
  1162. {$ENDIF DYNAMIC_LINK}
  1163. {$IFDEF DYNAMIC_LINK}
  1164. var
  1165.   _DsRestoreEnd: Pointer;
  1166. function DsRestoreEnd;
  1167. begin
  1168.   GetProcedureAddress(_DsRestoreEnd, ntdsbclilib, 'DsRestoreEnd');
  1169.   asm
  1170.     mov esp, ebp
  1171.     pop ebp
  1172.     jmp [_DsRestoreEnd]
  1173.   end;
  1174. end;
  1175. {$ELSE}
  1176. function DsRestoreEnd; external ntdsbclilib name 'DsRestoreEnd';
  1177. {$ENDIF DYNAMIC_LINK}
  1178. {$IFDEF DYNAMIC_LINK}
  1179. var
  1180.   _DsSetCurrentBackupLogA: Pointer;
  1181. function DsSetCurrentBackupLogA;
  1182. begin
  1183.   GetProcedureAddress(_DsSetCurrentBackupLogA, ntdsbclilib, 'DsSetCurrentBackupLogA');
  1184.   asm
  1185.     mov esp, ebp
  1186.     pop ebp
  1187.     jmp [_DsSetCurrentBackupLogA]
  1188.   end;
  1189. end;
  1190. {$ELSE}
  1191. function DsSetCurrentBackupLogA; external ntdsbclilib name 'DsSetCurrentBackupLogA';
  1192. {$ENDIF DYNAMIC_LINK}
  1193. {$IFDEF DYNAMIC_LINK}
  1194. var
  1195.   _DsSetCurrentBackupLogW: Pointer;
  1196. function DsSetCurrentBackupLogW;
  1197. begin
  1198.   GetProcedureAddress(_DsSetCurrentBackupLogW, ntdsbclilib, 'DsSetCurrentBackupLogW');
  1199.   asm
  1200.     mov esp, ebp
  1201.     pop ebp
  1202.     jmp [_DsSetCurrentBackupLogW]
  1203.   end;
  1204. end;
  1205. {$ELSE}
  1206. function DsSetCurrentBackupLogW; external ntdsbclilib name 'DsSetCurrentBackupLogW';
  1207. {$ENDIF DYNAMIC_LINK}
  1208. {$IFDEF UNICODE}
  1209. {$IFDEF DYNAMIC_LINK}
  1210. var
  1211.   _DsSetCurrentBackupLog: Pointer;
  1212. function DsSetCurrentBackupLog;
  1213. begin
  1214.   GetProcedureAddress(_DsSetCurrentBackupLog, ntdsbclilib, 'DsSetCurrentBackupLogW');
  1215.   asm
  1216.     mov esp, ebp
  1217.     pop ebp
  1218.     jmp [_DsSetCurrentBackupLog]
  1219.   end;
  1220. end;
  1221. {$ELSE}
  1222. function DsSetCurrentBackupLog; external ntdsbclilib name 'DsSetCurrentBackupLogW';
  1223. {$ENDIF DYNAMIC_LINK}
  1224. {$ELSE}
  1225. {$IFDEF DYNAMIC_LINK}
  1226. var
  1227.   _DsSetCurrentBackupLog: Pointer;
  1228. function DsSetCurrentBackupLog;
  1229. begin
  1230.   GetProcedureAddress(_DsSetCurrentBackupLog, ntdsbclilib, 'DsSetCurrentBackupLogA');
  1231.   asm
  1232.     mov esp, ebp
  1233.     pop ebp
  1234.     jmp [_DsSetCurrentBackupLog]
  1235.   end;
  1236. end;
  1237. {$ELSE}
  1238. function DsSetCurrentBackupLog; external ntdsbclilib name 'DsSetCurrentBackupLogA';
  1239. {$ENDIF DYNAMIC_LINK}
  1240. {$ENDIF}
  1241. {$IFDEF DYNAMIC_LINK}
  1242. var
  1243.   _DsSetAuthIdentityA: Pointer;
  1244. function DsSetAuthIdentityA;
  1245. begin
  1246.   GetProcedureAddress(_DsSetAuthIdentityA, ntdsbclilib, 'DsSetAuthIdentityA');
  1247.   asm
  1248.     mov esp, ebp
  1249.     pop ebp
  1250.     jmp [_DsSetAuthIdentityA]
  1251.   end;
  1252. end;
  1253. {$ELSE}
  1254. function DsSetAuthIdentityA; external ntdsbclilib name 'DsSetAuthIdentityA';
  1255. {$ENDIF DYNAMIC_LINK}
  1256. {$IFDEF DYNAMIC_LINK}
  1257. var
  1258.   _DsSetAuthIdentityW: Pointer;
  1259. function DsSetAuthIdentityW;
  1260. begin
  1261.   GetProcedureAddress(_DsSetAuthIdentityW, ntdsbclilib, 'DsSetAuthIdentityW');
  1262.   asm
  1263.     mov esp, ebp
  1264.     pop ebp
  1265.     jmp [_DsSetAuthIdentityW]
  1266.   end;
  1267. end;
  1268. {$ELSE}
  1269. function DsSetAuthIdentityW; external ntdsbclilib name 'DsSetAuthIdentityW';
  1270. {$ENDIF DYNAMIC_LINK}
  1271. {$IFDEF UNICODE}
  1272. {$IFDEF DYNAMIC_LINK}
  1273. var
  1274.   _DsSetAuthIdentity: Pointer;
  1275. function DsSetAuthIdentity;
  1276. begin
  1277.   GetProcedureAddress(_DsSetAuthIdentity, ntdsbclilib, 'DsSetAuthIdentityW');
  1278.   asm
  1279.     mov esp, ebp
  1280.     pop ebp
  1281.     jmp [_DsSetAuthIdentity]
  1282.   end;
  1283. end;
  1284. {$ELSE}
  1285. function DsSetAuthIdentity; external ntdsbclilib name 'DsSetAuthIdentityW';
  1286. {$ENDIF DYNAMIC_LINK}
  1287. {$ELSE}
  1288. {$IFDEF DYNAMIC_LINK}
  1289. var
  1290.   _DsSetAuthIdentity: Pointer;
  1291. function DsSetAuthIdentity;
  1292. begin
  1293.   GetProcedureAddress(_DsSetAuthIdentity, ntdsbclilib, 'DsSetAuthIdentityA');
  1294.   asm
  1295.     mov esp, ebp
  1296.     pop ebp
  1297.     jmp [_DsSetAuthIdentity]
  1298.   end;
  1299. end;
  1300. {$ELSE}
  1301. function DsSetAuthIdentity; external ntdsbclilib name 'DsSetAuthIdentityA';
  1302. {$ENDIF DYNAMIC_LINK}
  1303. {$ENDIF}
  1304. end.