281 lines
7.7 KiB
Plaintext
281 lines
7.7 KiB
Plaintext
unit DriveControlForm;
|
||
|
||
interface
|
||
|
||
uses
|
||
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
|
||
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, DeviceGuard.Logic;
|
||
|
||
type
|
||
TDriveControlForm = class(TForm)
|
||
Label1: TLabel;
|
||
Label2: TLabel;
|
||
Label3: TLabel;
|
||
Label4: TLabel;
|
||
Label5: TLabel;
|
||
cbRemovable: TComboBox;
|
||
cbExternalHDD: TComboBox;
|
||
cbNetworkIn: TComboBox;
|
||
cbNetworkOut: TComboBox;
|
||
cbCDROM: TComboBox;
|
||
cbFloppy: TComboBox;
|
||
btnSave: TButton;
|
||
btnClose: TButton;
|
||
Label6: TLabel;
|
||
cbRemovableLog: TComboBox;
|
||
cbExternalHDDLog: TComboBox;
|
||
cbNetworkInLog: TComboBox;
|
||
cbNetworkOutLog: TComboBox;
|
||
cbCDROMLog: TComboBox;
|
||
cbFloppyLog: TComboBox;
|
||
btnStartStop: TButton;
|
||
edtExceptProcessName: TEdit;
|
||
btnExceptProcessNameAdd: TButton;
|
||
btnExceptProcessNameDel: TButton;
|
||
grpProcessNameExcept: TGroupBox;
|
||
lblProcessNameExcept: TLabel;
|
||
lblUsbDriveExcept: TLabel;
|
||
lblVid: TLabel;
|
||
edtVid: TEdit;
|
||
lblPid: TLabel;
|
||
edtPid: TEdit;
|
||
lblSerial: TLabel;
|
||
edtSerial: TEdit;
|
||
btnUsbDriveAdd: TButton;
|
||
btnUsbDriveDel: TButton;
|
||
btnUsbDiskExcept: TButton;
|
||
|
||
procedure FormCreate(Sender: TObject);
|
||
procedure btnCloseClick(Sender: TObject);
|
||
procedure btnSaveClick(Sender: TObject);
|
||
procedure btnStartStopClick(Sender: TObject);
|
||
procedure btnExceptProcessNameAddClick(Sender: TObject);
|
||
procedure btnExceptProcessNameDelClick(Sender: TObject);
|
||
procedure btnUsbDriveAddClick(Sender: TObject);
|
||
procedure btnUsbDriveDelClick(Sender: TObject);
|
||
procedure btnUsbDiskExceptClick(Sender: TObject);
|
||
private
|
||
FEngine: TDeviceGuardEngine;
|
||
FOnLog: TLogEvent;
|
||
procedure InitCombo(CB: TComboBox; CBLog: TComboBox);
|
||
procedure ApplySettings;
|
||
|
||
public
|
||
property Engine: TDeviceGuardEngine read FEngine write FEngine;
|
||
property OnLog: TLogEvent read FOnLog write FOnLog;
|
||
procedure LoadSettings;
|
||
end;
|
||
|
||
var
|
||
DriveControlForm_: TDriveControlForm;
|
||
|
||
implementation
|
||
|
||
{$R *.dfm}
|
||
|
||
uses
|
||
Bs1FltCtrl, Bs1PolicyUnit;
|
||
|
||
procedure TDriveControlForm.LoadSettings;
|
||
procedure ApplyPolicyToUI(Policy: TPolicyItem; cbState, cbLog: TComboBox);
|
||
begin
|
||
if Policy.state_ = dsEnable then
|
||
cbState.ItemIndex := 0
|
||
else if Policy.state_ = dsDisable then
|
||
cbState.ItemIndex := 1
|
||
else
|
||
cbState.ItemIndex := 2;
|
||
|
||
if Policy.isLog_ then
|
||
cbLog.ItemIndex := 0
|
||
else
|
||
cbLog.ItemIndex := 1;
|
||
end;
|
||
begin
|
||
|
||
// Engine<6E><65> <20>Ҵ<EFBFBD><D2B4><EFBFBD><EFBFBD><EFBFBD> <20>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⼭ <20>ߴ<EFBFBD> (FormCreate <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> nil<69><6C> <20><> <20><><EFBFBD><EFBFBD>)
|
||
if not Assigned(FEngine) then Exit;
|
||
|
||
// <20><>å <20><><EFBFBD><EFBFBD>
|
||
for var Policy in gBs1Policy.Policies do
|
||
begin
|
||
// Flag<61><67> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DEBA>ڽ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
case TDeviceType(Policy.flag_) of
|
||
BDC_CDROM: ApplyPolicyToUI(Policy, cbCDROM, cbCDROMLog);
|
||
BDC_FLOOPY: ApplyPolicyToUI(Policy, cbFloppy, cbFloppyLog);
|
||
BDC_USB_DISK: ApplyPolicyToUI(Policy, cbRemovable, cbRemovableLog);
|
||
BDC_NETWORKDRIVEOUT: ApplyPolicyToUI(Policy, cbNetworkOut, cbNetworkOutLog);
|
||
BDC_NETWORKDRIVEIN: ApplyPolicyToUI(Policy, cbNetworkIn, cbNetworkInLog);
|
||
BDC_EXTERNALHDD: ApplyPolicyToUI(Policy, cbExternalHDD, cbExternalHDDLog);
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
|
||
procedure TDriveControlForm.FormCreate(Sender: TObject);
|
||
var
|
||
LExceptionList: TStringList;
|
||
begin
|
||
Caption := '<27><><EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>';
|
||
BorderStyle := bsDialog;
|
||
Position := poOwnerFormCenter;
|
||
|
||
InitCombo(cbRemovable, cbRemovableLog);
|
||
InitCombo(cbExternalHDD, cbExternalHDDLog);
|
||
InitCombo(cbNetworkIn, cbNetworkInLog);
|
||
InitCombo(cbNetworkOut, cbNetworkOutLog);
|
||
InitCombo(cbCDROM, cbCDROMLog);
|
||
InitCombo(cbFloppy, cbFloppyLog);
|
||
|
||
btnStartStop.Caption := '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>';
|
||
btnStartStop.Tag := 1; // <20><><EFBFBD>¸<EFBFBD> '<27><><EFBFBD><EFBFBD> <20><>'<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
|
||
LExceptionList:= TStringList.Create;
|
||
gBs1Policy.LoadDeviceControlExceptProcessConfig(LExceptionList);
|
||
|
||
LExceptionList.Free;
|
||
|
||
end;
|
||
|
||
|
||
procedure TDriveControlForm.InitCombo(CB: TComboBox; CBLog: TComboBox);
|
||
begin
|
||
CB.Items.Clear;
|
||
CB.Items.AddObject('<27><><EFBFBD><EFBFBD>', TObject(dsEnable));
|
||
CB.Items.AddObject('<27><><EFBFBD><EFBFBD>', TObject(dsDisable));
|
||
CB.Items.AddObject('<27>б<EFBFBD> <20><><EFBFBD><EFBFBD>', TObject(dsReadOnly));
|
||
CB.ItemIndex := 0; // Default
|
||
|
||
CBLog.Items.Clear;
|
||
CBLog.Items.AddObject('<27><><EFBFBD><EFBFBD> ', TObject(lsUse));
|
||
CBLog.Items.AddObject('<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>', TObject(lsNoneUse));
|
||
CBLog.ItemIndex := 0;
|
||
end;
|
||
|
||
|
||
procedure TDriveControlForm.ApplySettings;
|
||
// <20>ݺ<EFBFBD><DDBA>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
|
||
procedure ApplyDevicePolicy(DeviceType: TDeviceType; cbState, cbLog: TComboBox);
|
||
var
|
||
StateVal: TDeviceState;
|
||
LogVal: Boolean;
|
||
begin
|
||
if (cbState.ItemIndex < 0) or (cbLog.ItemIndex < 0) then
|
||
Exit;
|
||
|
||
StateVal := TDeviceState(cbState.Items.Objects[cbState.ItemIndex]);
|
||
LogVal := Boolean(cbLog.Items.Objects[cbLog.ItemIndex]);
|
||
|
||
gBs1Policy.UpdatePolicyState(DWORD(DeviceType), StateVal, LogVal);
|
||
if DeviceType = BDC_NETWORKDRIVEOUT then
|
||
gBs1FltControl.SetPolicy(DWORD(BDC_NETWORKSHAREOUT), DWORD(StateVal), DWORD(LogVal));
|
||
|
||
gBs1FltControl.SetPolicy(DWORD(DeviceType), DWORD(StateVal), DWORD(LogVal));
|
||
|
||
FOnLog(Format('ApplySettings, DeviceType(%d), StateVal(%d), LogVal(%d)', [DWORD(DeviceType), DWORD(StateVal), DWORD(LogVal)]));
|
||
end;
|
||
|
||
begin
|
||
if not Assigned(FEngine) then Exit;
|
||
|
||
ApplyDevicePolicy(BDC_USB_DISK, cbRemovable, cbRemovableLog);
|
||
ApplyDevicePolicy(BDC_EXTERNALHDD, cbExternalHDD, cbExternalHDDLog);
|
||
ApplyDevicePolicy(BDC_NETWORKDRIVEIN, cbNetworkIn, cbNetworkInLog);
|
||
ApplyDevicePolicy(BDC_NETWORKDRIVEOUT, cbNetworkOut, cbNetworkOutLog);
|
||
ApplyDevicePolicy(BDC_CDROM, cbCDROM, cbCDROMLog);
|
||
ApplyDevicePolicy(BDC_FLOOPY, cbFloppy, cbFloppyLog);
|
||
//
|
||
//gBs1Policy.SaveDeviceControlExceptProcessConfig(lstExceptProcessName.Items);
|
||
gBs1Policy.SavePolicyToFile; // <20><><EFBFBD><EFBFBD>
|
||
// FEngine.TriggerScan; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
end;
|
||
|
||
procedure TDriveControlForm.btnSaveClick(Sender: TObject);
|
||
begin
|
||
ApplySettings;
|
||
|
||
FOnLog('<27><><EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>å<EFBFBD><C3A5> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>.');
|
||
ModalResult := mrOk;
|
||
end;
|
||
|
||
procedure TDriveControlForm.btnStartStopClick(Sender: TObject);
|
||
begin
|
||
if btnStartStop.Tag = 0 then
|
||
begin
|
||
if Assigned(gBs1FltControl) then
|
||
gBs1FltControl.SetDeviceProtect(1);
|
||
|
||
btnStartStop.Caption := '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>';
|
||
btnStartStop.Tag := 1;
|
||
end
|
||
else
|
||
begin
|
||
if Assigned(gBs1FltControl) then
|
||
gBs1FltControl.SetDeviceProtect(0);
|
||
|
||
btnStartStop.Caption := '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>';
|
||
btnStartStop.Tag := 0;
|
||
end;
|
||
end;
|
||
|
||
procedure TDriveControlForm.btnUsbDiskExceptClick(Sender: TObject);
|
||
begin
|
||
gBs1FltControl.ClearUsbException();
|
||
end;
|
||
|
||
procedure TDriveControlForm.btnUsbDriveAddClick(Sender: TObject);
|
||
var
|
||
LPid: string;
|
||
LVid: string;
|
||
LSerial: string;
|
||
begin
|
||
LVid:= edtVid.Text;
|
||
LPid:= edtPid.Text;
|
||
LSerial:= edtSerial.Text;
|
||
|
||
gBs1FltControl.SetUsbException(PChar(LVid), PChar(LPid), 0, PChar(LSerial));
|
||
end;
|
||
|
||
procedure TDriveControlForm.btnUsbDriveDelClick(Sender: TObject);
|
||
var
|
||
LPid: string;
|
||
LVid: string;
|
||
LSerial: string;
|
||
begin
|
||
LVid:= edtVid.Text;
|
||
LPid:= edtPid.Text;
|
||
LSerial:= edtSerial.Text;
|
||
|
||
gBs1FltControl.DelUsbException(PChar(LVid), PChar(LPid), 0, PChar(LSerial));
|
||
end;
|
||
|
||
procedure TDriveControlForm.btnCloseClick(Sender: TObject);
|
||
begin
|
||
Close;
|
||
end;
|
||
|
||
procedure TDriveControlForm.btnExceptProcessNameAddClick(Sender: TObject);
|
||
var
|
||
LProcessName: string;
|
||
begin
|
||
LProcessName:= edtExceptProcessName.Text;
|
||
if LProcessName = '' then Exit;
|
||
|
||
if Assigned(gBs1FltControl) then
|
||
gBs1FltControl.SetProcessPath(DWORD(PG_PID_ALLOW), PChar(LProcessName));
|
||
|
||
end;
|
||
|
||
procedure TDriveControlForm.btnExceptProcessNameDelClick(Sender: TObject);
|
||
var
|
||
Idx: Integer;
|
||
LDeletedText: string;
|
||
begin
|
||
|
||
if Assigned(gBs1FltControl) then
|
||
gBs1FltControl.SetProcessPath(DWORD(PG_PID_ALLOW), PChar(LDeletedText));
|
||
|
||
end;
|
||
|
||
end.
|