Unit DriverCommands;

{
  Tato jednotka obsahuje rutiny nutne pro prace s ovladacem
  registrymon.sys.
}

Interface

Uses
  RegEvents;

Function RegistrymonDriverInit:Boolean;
Procedure RegistrymonDriverFinit;
Function RegistrymonDriverLoad:Boolean;
Procedure RegistrymonDriverUnload;
Function RegistrymonDriverGetEvent(Event:PUM_EVENT; Size:Cardinal):Boolean;

Implementation

Uses
  SysUtils, Driver;

Const
  // IOCTl pro ziskani prvni udalosti ze seznamu ulozenem v ovladaci
  IOCTL_REGISTRYMON_GET_EVENT = $c07fc004;


Function RegistrymonDriverInit:Boolean;
{
  Nainstaluje ovladac registrymon.sys jako sluzbu a zapamatuje
  si jmeno jeho zarizeni.
}
begin
Result := DriverInit('registrymon', ExtractFilePath(Paramstr(0)) + 'registrymon.sys', 'registrymon', [IOCTL_REGISTRYMON_GET_EVENT]);
end;

Procedure RegistrymonDriverFinit;
{
  Odinstaluje ovladac registrymon.sys.
}
begin
DriverFinit;
end;

Function RegistrymonDriverLoad:Boolean;
{
  Pokusi se nacist ovladac registrymon.sys do pameti jadra.
  Pokud se toto podari, pripoji se k jeho zarizeni.
}
begin
Result := DriverLoad;
If Result Then
  begin
  Result := Driverconnect;
  If Not Result Then
    DriverUnload;
  end;
end;

Procedure RegistrymonDriverUnload;
{
  Odpoji se od komunikacniho zarizeni a uvolni ovladac
  registrymon.sys z pameti jadra.
}
begin
DriverDisconnect;
DriverUnload;
end;

Function RegistrymonDriverGetEvent(Event:PUM_EVENT; Size:Cardinal):Boolean;
{
  Zajisti zkopirovani obsahu prvni udalosti v seznamu ovladace
  do bufferu zacinajiciho na adrese Event o velikosti Size. Pokud
  se tam pozadovana udalost nevejde, vrati hodnotu ERROR_INSUFFICIENT_BUFFER.
  Pokud ovladac v seznamu nema zadne udalosti, vrati chybu
  ERROR_NO_MORE_ITEMS.
}
begin
Result := DriverIOCTL(0, Nil, 0, Event, Size);
end;

End.

