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

Windows编程

开发平台:

Delphi

  1. {******************************************************************************}
  2. {                                                                       }
  3. { Single-Instance Store 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: sisbkup.h, released August 2001. The original Pascal   }
  9. { code is: SisBkUp.pas, released December 2001. 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 JwaSisBkUp;
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include "sisbkup.h"'}
  47. {$HPPEMIT ''}
  48. {$I WINDEFINES.INC}
  49. interface
  50. uses
  51.   JwaWinNT, JwaWinType;
  52. function SisCreateBackupStructure(volumeRoot: PWCHAR; var sisBackupStructure: PVOID; var commonStoreRootPathname: PWCHAR;
  53.   countOfCommonStoreFilesToBackup: PULONG; var commonStoreFilesToBackup: PWCHAR): BOOL; stdcall;
  54. {$EXTERNALSYM SisCreateBackupStructure}
  55. function SisCSFilesToBackupForLink(sisBackupStructure, reparseData: PVOID; reparseDataSize: ULONG; thisFileContext: PVOID;
  56.   matchingFileContext: PPVOID; countOfCommonStoreFilesToBackup: PULONG; var commonStoreFilesToBackup: PWCHAR): BOOL; stdcall;
  57. {$EXTERNALSYM SisCSFilesToBackupForLink}
  58. function SisFreeBackupStructure(sisBackupStructure: PVOID): BOOL; stdcall;
  59. {$EXTERNALSYM SisFreeBackupStructure}
  60. function SisCreateRestoreStructure(volumeRoot: PWCHAR; var sisRestoreStructure: PVOID; var commonStoreRootPathname: PWCHAR;
  61.   countOfCommonStoreFilesToRestore: PULONG; var commonStoreFilesToRestore: PWCHAR): BOOL; stdcall;
  62. {$EXTERNALSYM SisCreateRestoreStructure}
  63. function SisRestoredLink(sisRestoreStructure: PVOID; restoredFileName: PWCHAR; reparseData: PVOID; reparseDataSize: ULONG;
  64.   countOfCommonStoreFilesToRestore: PULONG; var commonStoreFilesToRestore: PWCHAR): BOOL; stdcall;
  65. {$EXTERNALSYM SisRestoredLink}
  66. function SisRestoredCommonStoreFile(sisRestoreStructure: PVOID; commonStoreFileName: PWCHAR): BOOL; stdcall;
  67. {$EXTERNALSYM SisRestoredCommonStoreFile}
  68. function SisFreeRestoreStructure(sisRestoreStructure: PVOID): BOOL; stdcall;
  69. {$EXTERNALSYM SisFreeRestoreStructure}
  70. function SisFreeAllocatedMemory(allocatedSpace: PVOID): BOOL; stdcall;
  71. {$EXTERNALSYM SisFreeAllocatedMemory}
  72. //
  73. // SIS entry function typedefs
  74. //
  75. type
  76.   PF_SISCREATEBACKUPSTRUCTURE = function (volumeRoot: PWCHAR; var sisBackupStructure: PVOID; var commonStoreRootPathname: PWCHAR;
  77.     countOfCommonStoreFilesToBackup: PULONG; var commonStoreFilesToBackup: PWCHAR): BOOL; stdcall;
  78.   {$EXTERNALSYM PF_SISCREATEBACKUPSTRUCTURE}
  79.   TSisCreateBackupStructure = PF_SISCREATEBACKUPSTRUCTURE;
  80.   PF_SISCSFILESTOBACKUPFORLINK = function (sisBackupStructure, reparseData: PVOID; reparseDataSize: ULONG; thisFileContext: PVOID;
  81.     matchingFileContext: PPVOID; countOfCommonStoreFilesToBackup: PULONG; var commonStoreFilesToBackup: PWCHAR): BOOL; stdcall;
  82.   {$EXTERNALSYM PF_SISCSFILESTOBACKUPFORLINK}
  83.   TSisCSFilesToBackupForLink = PF_SISCSFILESTOBACKUPFORLINK;
  84.   PF_SISFREEBACKUPSTRUCTURE = function (sisBackupStructure: PVOID): BOOL; stdcall;
  85.   {$EXTERNALSYM PF_SISFREEBACKUPSTRUCTURE}
  86.   TSusFreeBackupStructure = PF_SISFREEBACKUPSTRUCTURE;
  87.   PF_SISCREATERESTORESTRUCTURE = function (volumeRoot: PWCHAR; var sisRestoreStructure: PVOID; var commonStoreRootPathname: PWCHAR;
  88.     countOfCommonStoreFilesToRestore: PULONG; var commonStoreFilesToRestore: PWCHAR): BOOL; stdcall;
  89.   {$EXTERNALSYM PF_SISCREATERESTORESTRUCTURE}
  90.   TSisCreateRestoreStructure = PF_SISCREATERESTORESTRUCTURE;
  91.   PF_SISRESTOREDLINK = function (sisRestoreStructure: PVOID; restoredFileName: PWCHAR; reparseData: PVOID; reparseDataSize: ULONG;
  92.     countOfCommonStoreFilesToRestore: PULONG; var commonStoreFilesToRestore: PWCHAR): BOOL; stdcall;
  93.   {$EXTERNALSYM PF_SISRESTOREDLINK}
  94.   TSisRestoredLink = PF_SISRESTOREDLINK;
  95.   PF_SISRESTOREDCOMMONSTOREFILE = function (sisRestoreStructure: PVOID; commonStoreFileName: PWCHAR): BOOL; stdcall;
  96.   {$EXTERNALSYM PF_SISRESTOREDCOMMONSTOREFILE}
  97.   TSisRestoredCommonStoreFile = PF_SISRESTOREDCOMMONSTOREFILE;
  98.   PF_SISFREERESTORESTRUCTURE = function (sisRestoreStructure: PVOID): BOOL; stdcall;
  99.   {$EXTERNALSYM PF_SISFREERESTORESTRUCTURE}
  100.   TSisFreeRestoreStructure = PF_SISFREERESTORESTRUCTURE;
  101.   PF_SISFREEALLOCATEDMEMORY = function (allocatedSpace: PVOID): BOOL; stdcall;
  102.   {$EXTERNALSYM PF_SISFREEALLOCATEDMEMORY}
  103.   TSisFreeAllocatedMemory = PF_SISFREEALLOCATEDMEMORY;
  104. implementation
  105. const
  106.   sisbkup = 'sisbkup.dll';
  107. {$IFDEF DYNAMIC_LINK}
  108. var
  109.   _SisCreateBackupStructure: Pointer;
  110. function SisCreateBackupStructure;
  111. begin
  112.   GetProcedureAddress(_SisCreateBackupStructure, sisbkup, 'SisCreateBackupStructure');
  113.   asm
  114.     mov esp, ebp
  115.     pop ebp
  116.     jmp [_SisCreateBackupStructure]
  117.   end;
  118. end;
  119. {$ELSE}
  120. function SisCreateBackupStructure; external sisbkup name 'SisCreateBackupStructure';
  121. {$ENDIF DYNAMIC_LINK}
  122. {$IFDEF DYNAMIC_LINK}
  123. var
  124.   _SisCSFilesToBackupForLink: Pointer;
  125. function SisCSFilesToBackupForLink;
  126. begin
  127.   GetProcedureAddress(_SisCSFilesToBackupForLink, sisbkup, 'SisCSFilesToBackupForLink');
  128.   asm
  129.     mov esp, ebp
  130.     pop ebp
  131.     jmp [_SisCSFilesToBackupForLink]
  132.   end;
  133. end;
  134. {$ELSE}
  135. function SisCSFilesToBackupForLink; external sisbkup name 'SisCSFilesToBackupForLink';
  136. {$ENDIF DYNAMIC_LINK}
  137. {$IFDEF DYNAMIC_LINK}
  138. var
  139.   _SisFreeBackupStructure: Pointer;
  140. function SisFreeBackupStructure;
  141. begin
  142.   GetProcedureAddress(_SisFreeBackupStructure, sisbkup, 'SisFreeBackupStructure');
  143.   asm
  144.     mov esp, ebp
  145.     pop ebp
  146.     jmp [_SisFreeBackupStructure]
  147.   end;
  148. end;
  149. {$ELSE}
  150. function SisFreeBackupStructure; external sisbkup name 'SisFreeBackupStructure';
  151. {$ENDIF DYNAMIC_LINK}
  152. {$IFDEF DYNAMIC_LINK}
  153. var
  154.   _SisCreateRestoreStructure: Pointer;
  155. function SisCreateRestoreStructure;
  156. begin
  157.   GetProcedureAddress(_SisCreateRestoreStructure, sisbkup, 'SisCreateRestoreStructure');
  158.   asm
  159.     mov esp, ebp
  160.     pop ebp
  161.     jmp [_SisCreateRestoreStructure]
  162.   end;
  163. end;
  164. {$ELSE}
  165. function SisCreateRestoreStructure; external sisbkup name 'SisCreateRestoreStructure';
  166. {$ENDIF DYNAMIC_LINK}
  167. {$IFDEF DYNAMIC_LINK}
  168. var
  169.   _SisRestoredLink: Pointer;
  170. function SisRestoredLink;
  171. begin
  172.   GetProcedureAddress(_SisRestoredLink, sisbkup, 'SisRestoredLink');
  173.   asm
  174.     mov esp, ebp
  175.     pop ebp
  176.     jmp [_SisRestoredLink]
  177.   end;
  178. end;
  179. {$ELSE}
  180. function SisRestoredLink; external sisbkup name 'SisRestoredLink';
  181. {$ENDIF DYNAMIC_LINK}
  182. {$IFDEF DYNAMIC_LINK}
  183. var
  184.   _SisRestoredCommonStoreFile: Pointer;
  185. function SisRestoredCommonStoreFile;
  186. begin
  187.   GetProcedureAddress(_SisRestoredCommonStoreFile, sisbkup, 'SisRestoredCommonStoreFile');
  188.   asm
  189.     mov esp, ebp
  190.     pop ebp
  191.     jmp [_SisRestoredCommonStoreFile]
  192.   end;
  193. end;
  194. {$ELSE}
  195. function SisRestoredCommonStoreFile; external sisbkup name 'SisRestoredCommonStoreFile';
  196. {$ENDIF DYNAMIC_LINK}
  197. {$IFDEF DYNAMIC_LINK}
  198. var
  199.   _SisFreeRestoreStructure: Pointer;
  200. function SisFreeRestoreStructure;
  201. begin
  202.   GetProcedureAddress(_SisFreeRestoreStructure, sisbkup, 'SisFreeRestoreStructure');
  203.   asm
  204.     mov esp, ebp
  205.     pop ebp
  206.     jmp [_SisFreeRestoreStructure]
  207.   end;
  208. end;
  209. {$ELSE}
  210. function SisFreeRestoreStructure; external sisbkup name 'SisFreeRestoreStructure';
  211. {$ENDIF DYNAMIC_LINK}
  212. {$IFDEF DYNAMIC_LINK}
  213. var
  214.   _SisFreeAllocatedMemory: Pointer;
  215. function SisFreeAllocatedMemory;
  216. begin
  217.   GetProcedureAddress(_SisFreeAllocatedMemory, sisbkup, 'SisFreeAllocatedMemory');
  218.   asm
  219.     mov esp, ebp
  220.     pop ebp
  221.     jmp [_SisFreeAllocatedMemory]
  222.   end;
  223. end;
  224. {$ELSE}
  225. function SisFreeAllocatedMemory; external sisbkup name 'SisFreeAllocatedMemory';
  226. {$ENDIF DYNAMIC_LINK}
  227. end.