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, Bs1FltCtrl, bs1PolicyUnit,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} 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ÀÌ ÇÒ´çµÇÁö ¾Ê¾ÒÀ¸¸é ¿©±â¼­ Áß´Ü (FormCreate ½ÃÁ¡¿¡´Â nilÀÏ ¼ö ÀÖÀ½) if not Assigned(FEngine) then Exit; // Á¤Ã¥ ·çÇÁ for var Policy in gBs1Policy.Policies do begin // Flag¿¡ µû¶ó ÀûÀýÇÑ ÄÞº¸¹Ú½º ¸ÅÇÎ 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 := 'µå¶óÀÌºê º¸¾È Á¦¾î ¼³Á¤'; BorderStyle := bsDialog; Position := poOwnerFormCenter; InitCombo(cbRemovable, cbRemovableLog); InitCombo(cbExternalHDD, cbExternalHDDLog); InitCombo(cbNetworkIn, cbNetworkInLog); InitCombo(cbNetworkOut, cbNetworkOutLog); InitCombo(cbCDROM, cbCDROMLog); InitCombo(cbFloppy, cbFloppyLog); btnStartStop.Caption := 'Á¦¾î ÁßÁö'; btnStartStop.Tag := 1; // »óŸ¦ '½ÇÇà Áß'À¸·Î º¯°æ LExceptionList:= TStringList.Create; gBs1Policy.LoadDeviceControlExceptProcessConfig(LExceptionList); LExceptionList.Free; end; procedure TDriveControlForm.InitCombo(CB: TComboBox; CBLog: TComboBox); begin CB.Items.Clear; CB.Items.AddObject('»ç¿ë', TObject(dsEnable)); CB.Items.AddObject('Â÷´Ü', TObject(dsDisable)); CB.Items.AddObject('Àбâ Àü¿ë', TObject(dsReadOnly)); CB.ItemIndex := 0; // Default CBLog.Items.Clear; CBLog.Items.AddObject('»ç¿ë ', TObject(lsUse)); CBLog.Items.AddObject('»ç¿ë ¾ÈÇÔ', TObject(lsNoneUse)); CBLog.ItemIndex := 0; end; procedure TDriveControlForm.ApplySettings; // ¹Ýº¹µÇ´Â ·ÎÁ÷À» ó¸®ÇÏ´Â ³»ºÎ ÇÔ¼ö 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; // ÀúÀå // FEngine.TriggerScan; // Áï½Ã Àû¿ë end; procedure TDriveControlForm.btnSaveClick(Sender: TObject); begin ApplySettings; FOnLog('µå¶óÀÌºê º¸¾È Á¤Ã¥ÀÌ ÀúÀåµÇ¾ú½À´Ï´Ù.'); ModalResult := mrOk; end; procedure TDriveControlForm.btnStartStopClick(Sender: TObject); begin if btnStartStop.Tag = 0 then begin if Assigned(gBs1FltControl) then gBs1FltControl.SetDeviceProtect(1); btnStartStop.Caption := 'Á¦¾îÁßÁö'; btnStartStop.Tag := 1; end else begin if Assigned(gBs1FltControl) then gBs1FltControl.SetDeviceProtect(0); btnStartStop.Caption := 'Á¦¾î ½ÃÀÛ'; 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.