Repository URL to install this package:
Version:
3.0.0 ▾
|
{******************************************************************************}
{ }
{ Windows System Restore API interface Unit for Object Pascal }
{ }
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
{ Corporation. All Rights Reserved. }
{ }
{ The original file is: srrestoreptapi.h, released Match 2003. The original }
{ Pascal code is: SrRestorePtApi.pas, released December 2000. }
{ The initial developer of the Pascal code is Marcel van Brakel }
{ (brakelm att chello dott nl). }
{ }
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
{ Marcel van Brakel. All Rights Reserved. }
{ }
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
{ }
{ You may retrieve the latest version of this file at the Project JEDI }
{ APILIB home page, located at http://jedi-apilib.sourceforge.net }
{ }
{ The contents of this file are used with permission, subject to the Mozilla }
{ Public License Version 1.1 (the "License"); you may not use this file except }
{ in compliance with the License. You may obtain a copy of the License at }
{ http://www.mozilla.org/MPL/MPL-1.1.html }
{ }
{ Software distributed under the License is distributed on an "AS IS" basis, }
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
{ the specific language governing rights and limitations under the License. }
{ }
{ Alternatively, the contents of this file may be used under the terms of the }
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
{ provisions of the LGPL License are applicable instead of those above. }
{ If you wish to allow use of your version of this file only under the terms }
{ of the LGPL License and not to allow others to use your version of this file }
{ under the MPL, indicate your decision by deleting the provisions above and }
{ replace them with the notice and other provisions required by the LGPL }
{ License. If you do not delete the provisions above, a recipient may use }
{ your version of this file under either the MPL or the LGPL License. }
{ }
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
{ }
{******************************************************************************}
// $Id: JwaSrRestorePtApi.pas,v 1.9 2007/09/05 11:58:52 dezipaitor Exp $
{$IFNDEF JWA_OMIT_SECTIONS}
unit JwaSrRestorePtApi;
{$WEAKPACKAGEUNIT}
{$ENDIF JWA_OMIT_SECTIONS}
{$HPPEMIT ''}
{$HPPEMIT '#include "SrRestorePtApi.h"'}
{$HPPEMIT ''}
{$IFNDEF JWA_OMIT_SECTIONS}
{$I jediapilib.inc}
interface
uses
JwaWinNT, JwaWinType;
{$ENDIF JWA_OMIT_SECTIONS}
{$IFNDEF JWA_IMPLEMENTATIONSECTION}
//
// Type of Event
//
const
MIN_EVENT = 100;
{$EXTERNALSYM MIN_EVENT}
BEGIN_SYSTEM_CHANGE = 100;
{$EXTERNALSYM BEGIN_SYSTEM_CHANGE}
END_SYSTEM_CHANGE = 101;
{$EXTERNALSYM END_SYSTEM_CHANGE}
BEGIN_NESTED_SYSTEM_CHANGE = 102; // for Whistler only - use this to prevent nested restore pts
{$EXTERNALSYM BEGIN_NESTED_SYSTEM_CHANGE}
END_NESTED_SYSTEM_CHANGE = 103; // for Whistler only - use this to prevent nested restore pts
{$EXTERNALSYM END_NESTED_SYSTEM_CHANGE}
MAX_EVENT = 103;
{$EXTERNALSYM MAX_EVENT}
//
// Type of Restore Points
//
MIN_RPT = 0;
{$EXTERNALSYM MIN_RPT}
APPLICATION_INSTALL = 0;
{$EXTERNALSYM APPLICATION_INSTALL}
APPLICATION_UNINSTALL = 1;
{$EXTERNALSYM APPLICATION_UNINSTALL}
DESKTOP_SETTING = 2; // Not implemented
{$EXTERNALSYM DESKTOP_SETTING}
ACCESSIBILITY_SETTING = 3; // Not implemented
{$EXTERNALSYM ACCESSIBILITY_SETTING}
OE_SETTING = 4; // Not implemented
{$EXTERNALSYM OE_SETTING}
APPLICATION_RUN = 5; // Not implemented
{$EXTERNALSYM APPLICATION_RUN}
RESTORE = 6;
{$EXTERNALSYM RESTORE}
CHECKPOINT = 7;
{$EXTERNALSYM CHECKPOINT}
WINDOWS_SHUTDOWN = 8; // Not implemented
{$EXTERNALSYM WINDOWS_SHUTDOWN}
WINDOWS_BOOT = 9; // Not implemented
{$EXTERNALSYM WINDOWS_BOOT}
DEVICE_DRIVER_INSTALL = 10;
{$EXTERNALSYM DEVICE_DRIVER_INSTALL}
FIRSTRUN = 11;
{$EXTERNALSYM FIRSTRUN}
MODIFY_SETTINGS = 12;
{$EXTERNALSYM MODIFY_SETTINGS}
CANCELLED_OPERATION = 13; // Only valid for END_SYSTEM_CHANGE
{$EXTERNALSYM CANCELLED_OPERATION}
BACKUP_RECOVERY = 14;
{$EXTERNALSYM BACKUP_RECOVERY}
MAX_RPT = 14;
{$EXTERNALSYM MAX_RPT}
MAX_DESC = 64;
{$EXTERNALSYM MAX_DESC}
MAX_DESC_W = 256; // longer for Whistler
{$EXTERNALSYM MAX_DESC_W}
//
// for Millennium compatibility
//
//#pragma pack(push, srrestoreptapi_include)
//#pragma pack(1)
//
// Restore point information
//
type
_RESTOREPTINFOA = packed record
dwEventType: DWORD; // Type of Event - Begin or End
dwRestorePtType: DWORD; // Type of Restore Point - App install/uninstall
llSequenceNumber: Int64; // Sequence Number - 0 for begin
szDescription: array [0..MAX_DESC - 1] of Char; // Description - Name of Application / Operation
end;
{$EXTERNALSYM _RESTOREPTINFOA}
RESTOREPOINTINFOA = _RESTOREPTINFOA;
{$EXTERNALSYM RESTOREPOINTINFOA}
PRESTOREPOINTINFOA = ^RESTOREPOINTINFOA;
{$EXTERNALSYM PRESTOREPOINTINFOA}
TRestorePointInfoA = RESTOREPOINTINFOA;
_RESTOREPTINFOW = packed record
dwEventType: DWORD; // Type of Event - Begin or End
dwRestorePtType: DWORD; // Type of Restore Point - App install/uninstall
llSequenceNumber: Int64; // Sequence Number - 0 for begin
szDescription: array [0..MAX_DESC_W - 1] of WideChar; // Description - Name of Application / Operation
end;
{$EXTERNALSYM _RESTOREPTINFOW}
RESTOREPOINTINFOW = _RESTOREPTINFOW;
{$EXTERNALSYM RESTOREPOINTINFOW}
PRESTOREPOINTINFOW = ^RESTOREPOINTINFOW;
{$EXTERNALSYM PRESTOREPOINTINFOW}
TRestorePointInfoW = RESTOREPOINTINFOW;
{$IFDEF UNICODE}
RESTOREPOINTINFO = RESTOREPOINTINFOW;
{$EXTERNALSYM RESTOREPOINTINFO}
PRESTOREPOINTINFO = PRESTOREPOINTINFOW;
{$EXTERNALSYM PRESTOREPOINTINFO}
TRestorePointInfo = TRestorePointInfoW;
{$ELSE}
RESTOREPOINTINFO = RESTOREPOINTINFOA;
{$EXTERNALSYM RESTOREPOINTINFO}
PRESTOREPOINTINFO = PRESTOREPOINTINFOA;
{$EXTERNALSYM PRESTOREPOINTINFO}
TRestorePointInfo = TRestorePointInfoA;
{$ENDIF UNICODE}
//
// Status returned by System Restore
//
_SMGRSTATUS = packed record
nStatus: DWORD; // Status returned by State Manager Process
llSequenceNumber: Int64; // Sequence Number for the restore point
end;
{$EXTERNALSYM _SMGRSTATUS}
STATEMGRSTATUS = _SMGRSTATUS;
{$EXTERNALSYM STATEMGRSTATUS}
PSTATEMGRSTATUS = ^STATEMGRSTATUS;
{$EXTERNALSYM PSTATEMGRSTATUS}
TSMgrStatus = STATEMGRSTATUS;
//#pragma pack(pop, srrestoreptapi_include)
//
// RPC call to set a restore point
//
// Return value TRUE if the call was a success
// FALSE if the call failed
//
// If pSmgrStatus nStatus field is set as follows
//
// ERROR_SUCCESS If the call succeeded (return value will be TRUE)
//
// ERROR_TIMEOUT If the call timed out due to a wait on a mutex for
// for setting restore points.
//
// ERROR_INVALID_DATA If the cancel restore point is called with an invalid
// sequence number
//
// ERROR_INTERNAL_ERROR If there are internal failures.
//
// ERROR_BAD_ENVIRONMENT If the API is called in SafeMode
//
// ERROR_SERVICE_DISABLED If SystemRestore is Disabled.
//
// ERROR_DISK_FULL If System Restore is frozen (Windows Whistler only)
//
// ERROR_ALREADY_EXISTS If this is a nested restore point
function SRSetRestorePointA(pRestorePtSpec: PRESTOREPOINTINFOA; pSMgrStatus: PSTATEMGRSTATUS): BOOL stdcall;
{$EXTERNALSYM SRSetRestorePointA}
function SRSetRestorePointW(pRestorePtSpec: PRESTOREPOINTINFOW; pSMgrStatus: PSTATEMGRSTATUS): BOOL stdcall;
{$EXTERNALSYM SRSetRestorePointW}
function SRRemoveRestorePoint(dwRPNum: DWORD): DWORD; stdcall;
{$EXTERNALSYM SRRemoveRestorePoint}
function SRSetRestorePoint(pRestorePtSpec: PRESTOREPOINTINFO; pSMgrStatus: PSTATEMGRSTATUS): BOOL stdcall;
{$EXTERNALSYM SRSetRestorePoint}
{$ENDIF JWA_IMPLEMENTATIONSECTION}
{$IFNDEF JWA_OMIT_SECTIONS}
implementation
//uses ...
{$ENDIF JWA_OMIT_SECTIONS}
{$IFNDEF JWA_INTERFACESECTION}
{$IFNDEF JWA_INCLUDEMODE}
const
srclient = 'srclient.dll';
{$IFDEF UNICODE}
AWSuffix = 'W';
{$ELSE}
AWSuffix = 'A';
{$ENDIF UNICODE}
{$ENDIF JWA_INCLUDEMODE}
{$IFDEF DYNAMIC_LINK}
var
_SRSetRestorePointA: Pointer;
function SRSetRestorePointA;
begin
GetProcedureAddress(_SRSetRestorePointA, srclient, 'SRSetRestorePointA');
asm
MOV ESP, EBP
POP EBP
JMP [_SRSetRestorePointA]
end;
end;
var
_SRSetRestorePointW: Pointer;
function SRSetRestorePointW;
begin
GetProcedureAddress(_SRSetRestorePointW, srclient, 'SRSetRestorePointW');
asm
MOV ESP, EBP
POP EBP
JMP [_SRSetRestorePointW]
end;
end;
var
_SRSetRestorePoint: Pointer;
function SRSetRestorePoint;
begin
GetProcedureAddress(_SRSetRestorePoint, srclient, 'SRSetRestorePoint' + AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_SRSetRestorePoint]
end;
end;
var
_SRRemoveRestorePoint: Pointer;
function SRRemoveRestorePoint;
begin
GetProcedureAddress(_SRRemoveRestorePoint, srclient, 'SRRemoveRestorePoint');
asm
MOV ESP, EBP
POP EBP
JMP [_SRRemoveRestorePoint]
end;
end;
{$ELSE}
function SRSetRestorePointA; external srclient name 'SRSetRestorePointA';
function SRSetRestorePointW; external srclient name 'SRSetRestorePointW';
function SRSetRestorePoint; external srclient name 'SRSetRestorePointW' + AWSuffix;
function SRRemoveRestorePoint; external srclient name 'SRRemoveRestorePoint';
{$ENDIF DYNAMIC_LINK}
{$ENDIF JWA_INTERFACESECTION}
{$IFNDEF JWA_OMIT_SECTIONS}
end.
{$ENDIF JWA_OMIT_SECTIONS}