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

Windows编程

开发平台:

Delphi

  1. {******************************************************************************}
  2. {                                                                       }
  3. { Windows File Protection 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: sfc.h, released August 2001. The original Pascal       }
  9. { code is: Sfc.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 JwaSfc;
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include "sfc.h"'}
  47. {$HPPEMIT ''}
  48. {$I WINDEFINES.INC}
  49. interface
  50. uses
  51.   JwaWinType;
  52. const
  53.   SFC_DISABLE_NORMAL        = 0;
  54.   {$EXTERNALSYM SFC_DISABLE_NORMAL}
  55.   SFC_DISABLE_ASK           = 1;
  56.   {$EXTERNALSYM SFC_DISABLE_ASK}
  57.   SFC_DISABLE_ONCE          = 2;
  58.   {$EXTERNALSYM SFC_DISABLE_ONCE}
  59.   SFC_DISABLE_SETUP         = 3;
  60.   {$EXTERNALSYM SFC_DISABLE_SETUP}
  61.   SFC_DISABLE_NOPOPUPS      = 4;
  62.   {$EXTERNALSYM SFC_DISABLE_NOPOPUPS}
  63.   SFC_SCAN_NORMAL           = 0;
  64.   {$EXTERNALSYM SFC_SCAN_NORMAL}
  65.   SFC_SCAN_ALWAYS           = 1;
  66.   {$EXTERNALSYM SFC_SCAN_ALWAYS}
  67.   SFC_SCAN_ONCE             = 2;
  68.   {$EXTERNALSYM SFC_SCAN_ONCE}
  69.   SFC_SCAN_IMMEDIATE        = 3;
  70.   {$EXTERNALSYM SFC_SCAN_IMMEDIATE}
  71.   SFC_QUOTA_DEFAULT         = 50;
  72.   {$EXTERNALSYM SFC_QUOTA_DEFAULT}
  73.   SFC_QUOTA_ALL_FILES       = ULONG(-1);
  74.   {$EXTERNALSYM SFC_QUOTA_ALL_FILES}
  75.   SFC_IDLE_TRIGGER          = WideString('WFP_IDLE_TRIGGER');
  76.   {$EXTERNALSYM SFC_IDLE_TRIGGER}
  77. type
  78.   PPROTECTED_FILE_DATA = ^PROTECTED_FILE_DATA;
  79.   {$EXTERNALSYM PPROTECTED_FILE_DATA}
  80.   _PROTECTED_FILE_DATA = record
  81.     FileName: array [0..MAX_PATH - 1] of WCHAR;
  82.     FileNumber: DWORD;
  83.   end;
  84.   {$EXTERNALSYM _PROTECTED_FILE_DATA}
  85.   PROTECTED_FILE_DATA = _PROTECTED_FILE_DATA;
  86.   {$EXTERNALSYM PROTECTED_FILE_DATA}
  87.   TProtectedFileData = PROTECTED_FILE_DATA;
  88.   PProtectedFileData = PPROTECTED_FILE_DATA;
  89. function SfcGetNextProtectedFile(RpcHandle: HANDLE;
  90.   var ProtFileData: PROTECTED_FILE_DATA): BOOL; stdcall;
  91. {$EXTERNALSYM SfcGetNextProtectedFile}
  92. function SfcIsFileProtected(RpcHandle: HANDLE; ProtFileName: LPCWSTR): BOOL; stdcall;
  93. {$EXTERNALSYM SfcIsFileProtected}
  94. //
  95. // new APIs which are not currently supported, but are stubbed out
  96. //
  97. function SfpVerifyFile(pszFileName: LPCSTR; pszError: LPSTR; dwErrSize: DWORD): BOOL; stdcall;
  98. implementation
  99. const
  100.   SfcDll = 'sfc.dll';
  101. {$IFDEF DYNAMIC_LINK}
  102. var
  103.   _SfcGetNextProtectedFile: Pointer;
  104. function SfcGetNextProtectedFile;
  105. begin
  106.   GetProcedureAddress(_SfcGetNextProtectedFile, SfcDll, 'SfcGetNextProtectedFile');
  107.   asm
  108.     mov esp, ebp
  109.     pop ebp
  110.     jmp [_SfcGetNextProtectedFile]
  111.   end;
  112. end;
  113. {$ELSE}
  114. function SfcGetNextProtectedFile; external SfcDll name 'SfcGetNextProtectedFile';
  115. {$ENDIF DYNAMIC_LINK}
  116. {$IFDEF DYNAMIC_LINK}
  117. var
  118.   _SfcIsFileProtected: Pointer;
  119. function SfcIsFileProtected;
  120. begin
  121.   GetProcedureAddress(_SfcIsFileProtected, SfcDll, 'SfcIsFileProtected');
  122.   asm
  123.     mov esp, ebp
  124.     pop ebp
  125.     jmp [_SfcIsFileProtected]
  126.   end;
  127. end;
  128. {$ELSE}
  129. function SfcIsFileProtected; external SfcDll name 'SfcIsFileProtected';
  130. {$ENDIF DYNAMIC_LINK}
  131. {$IFDEF DYNAMIC_LINK}
  132. var
  133.   _SfpVerifyFile: Pointer;
  134. function SfpVerifyFile;
  135. begin
  136.   GetProcedureAddress(_SfpVerifyFile, SfcDll, 'SfpVerifyFile');
  137.   asm
  138.     mov esp, ebp
  139.     pop ebp
  140.     jmp [_SfpVerifyFile]
  141.   end;
  142. end;
  143. {$ELSE}
  144. function SfpVerifyFile; external SfcDll name 'SfpVerifyFile';
  145. {$ENDIF DYNAMIC_LINK}
  146. end.