Delphi - Visszaállítási pont létrehozása

forráskód letöltése
A Windows Millennium operációs rendszerben elhelyeztek egy System Restore funkciót, amely az XP-be is bele került. A funkció segítségével az operációs rendszer „pillanatfelvételt” készít fontosabb adatairól és beállításairól. Ehhez a pillanatfelvételhez később, ha valamilyen hiba történne, vissza tud térni. Ebben a példában megnézzük, hogy hogyan lehet egy visszaállítási pont létrehozását Delphi-ből kieszközölni. Számos program ezt a lehetőséget használja ki telepítés során.
Az operációs rendszer Rendszer-visszaállítás funkcióját a Start – Programok – Kellékek – Rendszereszközök – Rendszer-visszaállítás menüpontjával érhetjük el. Ha elindítjuk ezt a programot, akkor egy varázsló segítségével kezelhetjük a visszaállítási pontokat. Létrehozhatunk újakat, vagy visszatérhetünk egy korábbi állapothoz.
Lehetőségünk van arra is, hogy egy ilyen visszaállítási pontot Delphi-ből hozzunk létre. Ezt a műveletet az SrClient.dll állomány SRSetRestorePointA függvényével hajthatjuk végre. A DLL a System32 könyvtárban található.
function SRSetRestorePoint(pRestorePtSpec: PRESTOREPOINTINFOA; pSMgrStatus: PSTATEMGRSTATUS): Bool;
  stdcall; external 'SrClient.dll' Name 'SRSetRestorePointA';
A függvény két olyan struktúra használatát igényli, amelyet nekünk kell létrehoznunk. Az egyik a _RESTOREPTINFOA, amely a visszaállítási pontról tartalmaz információkat.
_RESTOREPTINFOA = packed record
  dwEventType: DWORD;
  dwRestorePtType: DWORD;
  llSequenceNumber: INT64;
  szDescription: array [0..MAX_DESC] of CHAR;
end;
A dwEventType értéke BEGIN_SYSTEM_CHANGE = 100, vagy END_SYSTEM_CHANGE = 101 lehet.
A dwRestorePtType értéke a visszaállítási pont típusát határozza meg. A következő értékeket használhatjuk: APPLICATION_INSTALL = 0, APPLICATION_UNINSTALL = 1, DEVICE_DRIVER_INSTALL = 10, MODIFY_SETTINGS = 12, CANCELLED_OPERATION = 13.
Az llSequenceNumber tag a visszaállítási pont számát tárolja el.
Az szDescription megadott szöveg a visszaállítási pont leírása lesz. Ez a szöveg jelenik meg a Rendszer-visszaállítás varázslóban is.
A másik struktúra amire szükségünk van az _SMGRSTATUS. Ebben a struktúrában kapjuk vissza az SRSetRestorePoint függvény futásának adatait.
_SMGRSTATUS = packed record
  nStatus: DWORD;
  llSequenceNumber: INT64;
end;
Ha az SRSetRestorePoint függvény futása során valamilyen hiba történne, akkor a hiba kódját ebben a tagban kapjuk meg.
Az llSequenceNumber tag a visszaállítási pont számát adja meg.
SRSetRestorePoint
function SRSetRestorePoint(
pRestorePtSpec: PRESTOREPOINTINFOA;
pSMgrStatus: PSTATEMGRSTATUS
): Bool;
Visszaállítási pont létrehozására és törlésére szolgál. Csak akkor használható, ha a visszaállítás engedélyezve van a rendszerben.
Paraméterek
pRestorePtSpec: PRESTOREPOINTINFOA
A létrejövő visszaállítási pont paramétereit ebben a struktúrában kell beállítanunk.
pSMgrStatus: PSTATEMGRSTATUS
Ebbe a struktúrába kerül a függvény futásának eredménye.
Visszatérési érték
Igaz, ha a visszaállítási pont létrehozása sikeres volt. Ha a függvény hamis értékkel tér vissza, akkor a hibát a pSMgrStatus paraméter nStatus tagjából olvashatjuk ki.