BSOne.SFC/Tocsg.Module/Bs1Flt/bs1dc_Delphi/DriveControlForm.pas

281 lines
7.7 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.