BSOne.SFC/eCrmHE/EXE_eCrmHomeEdition/FPolicyView.pas

999 lines
37 KiB
Plaintext

unit FPolicyView;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, VirtualTrees,
System.ImageList, Vcl.ImgList, PngImageList, ManagerModel;
type
PPolicyEnt = ^TPolicyEnt;
TPolicyEnt = record
sName, sVal: String;
end;
TFrmPolicyView = class(TFrame)
vtList: TVirtualStringTree;
imgList: TPngImageList;
procedure vtListGetNodeDataSize(Sender: TBaseVirtualTree;
var NodeDataSize: Integer);
procedure vtListFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
procedure vtListGetHint(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle;
var HintText: string);
procedure vtListGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: string);
procedure vtListBeforeCellPaint(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
procedure vtListPaintText(Sender: TBaseVirtualTree;
const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
TextType: TVSTTextType);
procedure vtListNodeClick(Sender: TBaseVirtualTree;
const HitInfo: THitInfo);
procedure vtListGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode;
Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean;
var ImageIndex: TImageIndex);
private
{ Private declarations }
bDetail_: Boolean;
PrefModel_: TPrefModel;
sEulaContent_: String;
PoViewKind_: TPoViewKind;
function AddEnt(pParentNode: PVirtualNode; sName, sVal: String): PVirtualNode;
public
{ Public declarations }
Constructor Create(aOwner: TComponent); override;
procedure AddModePolicy(PO: TPrefModel; bClear: Boolean = false;
bDetail: Boolean = false; bIsDef: Boolean = false);
end;
implementation
uses
Tocsg.VTUtil, Tocsg.Convert, DLiteInfo, Tocsg.Safe,
ManagerService, superobject, GlobalDefine, Tocsg.Exception, Define, Condition;
resourcestring
RS_NetConnMg = '네트워크 접속 관리';
RS_OutBodyBlock = '아웃룩 본문 차단';
RS_SoftBlock = '소프트웨어 차단';
RS_IgrCaptureApp = '특정 캡쳐 APP 허용';
RS_CapBlockApps = '캡쳐 행위 차단';
RS_WBCapBLock = '브라우저 캡쳐 차단';
RS_CutList = '목록만 차단';
RS_AllowList = '목록만 허용';
RS_UseImgWater = '이미지 워터마크 사용';
RS_Info = '정보';
RS_NetSecuMg = '네트워크 보안 설정';
RS_UsbNetBlock = '유선/무선 외 네트워크 차단';
RS_HostChangeCut = '호스트 변경 차단';
RS_RouteChangeCut = '라우팅테이블 변경 차단';
RS_CollectDomainLog = '브라우저 접속 관리';
RS_DefPortCut = '기본 포트 차단';
RS_WIFIControl = '무선 접속 제한 (WIFI)';
// RS_Notify = '알림';
RS_Cut = '차단';
RS_CutAll = '차단 (전체)';
RS_CutAdd = '차단 (신규 생성)';
RS_PortExCut = '추가 포트 차단';
RS_WhiteApp = '지정된 APP만 허용';
RS_BlackApp = '지정된 APP 차단';
RS_WhiteIP = '지정된 접속만 허용';
RS_BlackIP = '지정된 접속 차단';
RS_AppSecuSet = '어플리케이션 보안 설정';
RS_AppInstCut = '소프트웨어 설치 감시';
RS_DeviceControl = '매체 제어';
RS_USBCut = 'USB 차단';
RS_MTPCut = 'MTP 차단';
RS_BlueCut = '블루투스 차단';
RS_CdCut = 'CD/DVD 차단';
RS_MonHardDrive = 'HARD-DRIVE 감시';
RS_PrinterCut = '프린터 차단';
RS_PrinterWater = '프린터 워터마크';
RS_Log = '로그';
RS_All = '전체';
RS_Dept = '부서';
RS_Person = '개인';
RS_UrlBlock = 'URL 차단';
RS_UrlAllow = 'URL 허용';
RS_InfoSecuSet = '정보 보안 설정';
RS_ClipCut = '클립보드 차단';
RS_UseFWater = '워터마크 사용';
RS_FWatch = '파일 변경 감시';
RS_FCut = '파일 생성 차단';
RS_FMask = '생성파일 마스크';
RS_DownCut = '다운로드 폴더 차단';
RS_WebAB = '브라우저 파일 차단';
RS_OutAB = '아웃룩 파일 차단';
RS_EtcProcAB = '프로세스 파일 차단';
RS_SharedFolderBlock = '공유폴더 차단';
RS_OpenDRM = 'DRM 열람 권한';
RS_DecDRM = 'DRM 복호화 허용';
RS_ModifyDRM = 'DRM 수정 권한';
RS_AttDRM = 'DRM 외 반출차단';
RS_BlockFdRename = '파일명 변경 차단 (경로)';
RS_BlockFRename = '파일명 변경 차단 (파일)';
RS_IncSub = '하위 폴더 포함';
RS_ExcSub = '하위 폴더 미포함';
RS_BlockExeOnly = '실행파일만 차단';
RS_BlockNoExeOnly = '비 실행파일만 차단';
RS_BlockAllFile = '모든 파일 차단';
RS_ScreenLogoSet = '화면 및 클립보드 설정';
RS_ScreenLogUse = '상시 로고 사용';
RS_NameCut = '특정 연결만 차단';
RS_NameAllow = '특정 연결만 허용';
RS_WIFIPublicBlock = '암호 미사용 WIFI 차단';
RS_ReadOnly = '읽기만';
RS_SecuModeIf = '보안모드 조건';
RS_AgentManager = '에이전트 관리';
RS_ProcessExecute = '프로세스 실행';
RS_VirtualNicActive = '가상 NIC 활성화';
RS_IpSite = 'IP 범위 진입';
RS_VideoMeet = '화상회의 연결';
RS_Always = '항상';
RS_ItHour = '특정 시간';
RS_SecuModeBlock = '보안모드 종료시 동작';
RS_ProcessTerminate = '프로세스 종료';
RS_VirtualNicTerminate = '가상 NIC 종료';
RS_NetRefresh = '네트워크 새로고침';
RS_VulCheckBlock = '취약점 점검 및 차단';
RS_EmpNoVerify = '사번 검증';
RS_OsUpdateCheck = 'OS 최신 패치 점검';
// RS_OsUpdateNoti = 'OS 최신 패치 알림';
RS_StartupLockScreen = '시작 시 화면 잠금';
RS_AfterTimeLock = '일정시간 뒤 잠금';
RS_LockDef = '윈도우 기본 잠금';
RS_LockCustom = 'QS-eCRM 잠금';
RS_LockCustom2 = 'BSOne 잠금';
RS_AfterTimeClose = '종료시 동작 대기 시간';
RS_ConnectionManager = '보안모드 관리';
RS_AllowAccess = '보안모드 허용';
RS_TempConn = '취약 PC 보안모드 허용';
RS_LongtTimeDisconn = '미접속 PC 차단 (90일)';
RS_SetNoti = '알림 및 잠금 설정';
RS_NotiPop = '알림 항목';
RS_AllActive = '전체 활성화';
RS_VulNoti = '취약 상태만 알림';
RS_PolNoti = '정책 위반만 알림';
RS_NotiCenter = '알림 센터 사용';
RS_AfterReport = '근무 보고서 징수';
RS_Eulasubmit = '보안서약서 징수';
RS_Eula = '보안서약서';
RS_DailyEula = '하루1회 서약 징구';
RS_NoticeNoti = '공지사항 알림';
RS_Min = '분';
RS_PopupOnly = '팝업';
RS_MustApp = '필수 사용 APP';
RS_AllExt = '전체 확장자';
RS_IncExt = '지정 확장자만';
RS_IgrExt = '확장자 예외';
RS_BlockAll = '전체 차단';
RS_AllowSome = '일부 허용';
RS_LogAll = '전체 로그';
RS_IncBlock = '특정 연결만 차단';
RS_IncAllow = '특정 연결만 허용';
RS_IncPopup = '특정 연결만 팝업';
RS_IncLog = '특정 연결만 로그';
RS_FileCollect = '파일 수집';
RS_IncFile = '지정 파일';
RS_IncOnPath = '지정 경로만';
RS_IncPath = '지정 경로 전체';
RS_FileCollectTerm = '파일 수집 주기';
RS_FileCollectOpt1 = '1회 수행';
RS_FileCollectOpt2 = '매주 (요일)';
RS_FileCollectOpt3 = '매주 (날짜)';
RS_FileCollectOpt4 = '매월 (요일)';
RS_FileCollectDate = '파일 수집 요청일';
RS_FileCollectPath = '파일 수집 경로';
RS_ExceptVpnNAllBlock = 'VPN 외 네트워크 차단';
RS_PersonalInfoVul = '개인정보 초과 시 취약';
RS_Gae = '개';
RS_PiAction = '개인정보 강제 대응';
RS_PiActionOpt1 = '보안모드 차단';
RS_PiActionOpt2 = '파일 완전 삭제';
RS_PiActionOpt3 = '파일 DRM 암호화';
RS_AlramKind = '알림 종류';
RS_AlramKind1 = '팝업 - 기본';
RS_AlramKind2 = '팝업 - 요약';
RS_AlramKind3 = '알림센터 사용';
RS_AfterShutdown = '일정시간 뒤 PC 종료';
RS_BlueToothFIleNew = '블루투스 파일 차단';
RS_UsbToothFIleNew = 'USB 파일 차단';
RS_UsbToUsbToothFIleNew = 'USB To Usb 파일 차단';
RS_CdromToothFIleNew = 'Cdrom 파일 차단';
RS_MtpToothFIleNew = 'MTP 파일 차단';
{$R *.dfm}
Constructor TFrmPolicyView.Create(aOwner: TComponent);
begin
Inherited Create(aOwner);
bDetail_ := false;
PrefModel_ := nil;
sEulaContent_ := '';
end;
procedure TFrmPolicyView.vtListBeforeCellPaint(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
begin
if (Sender.AbsoluteIndex(Node) mod 2) = 0 then
begin
TargetCanvas.Brush.Color := $F7F7F7;
TargetCanvas.FillRect(CellRect);
end;
end;
procedure TFrmPolicyView.vtListFreeNode(Sender: TBaseVirtualTree;
Node: PVirtualNode);
var
pData: PPolicyEnt;
begin
pData := Sender.GetNodeData(Node);
Finalize(pData^);
end;
procedure TFrmPolicyView.vtListGetHint(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex;
var LineBreakStyle: TVTTooltipLineBreakStyle; var HintText: string);
begin
HintText := vtList.Text[Node, Column];
end;
procedure TFrmPolicyView.vtListGetImageIndex(Sender: TBaseVirtualTree;
Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
var Ghosted: Boolean; var ImageIndex: TImageIndex);
var
pData: PPolicyEnt;
begin
try
if Column = 0 then
begin
case Kind of
ikNormal,
ikSelected :
begin
pData := Sender.GetNodeData(Node);
if (pData.sName = RS_NetConnMg) or
(pData.sName = RS_SoftBlock) or
(pData.sName = RS_MustApp) or
(pData.sName = RS_ProcessExecute) or
(pData.sName = RS_ProcessTerminate) or
(pData.sName = RS_IpSite) or
(pData.sName = RS_VideoMeet) or
(pData.sName = RS_ItHour) or
(pData.sName = RS_AfterTimeLock) or
(pData.sName = RS_AfterTimeClose) or
(pData.sName = RS_Eula) or
(pData.sName = RS_NoticeNoti) then
begin
ImageIndex := 0;
end else
if bDetail_ and (
(pData.sName = RS_USBCut) or
(pData.sName = RS_MTPCut) or
(pData.sName = RS_BlueCut) or
(pData.sName = RS_PrinterCut) or
(pData.sName = RS_ClipCut) or
(pData.sName = RS_PortExCut) or
(pData.sName = RS_TempConn) or
(pData.sName = RS_IgrCaptureApp) or
(pData.sName = RS_BlockFdRename) or
(pData.sName = RS_BlockFRename) or
(pData.sName = RS_EtcProcAB)
) then
begin
ImageIndex := 0;
end else
ImageIndex := -1;
end;
end;
end;
except
on E: Exception do
ETgException.TraceException(Self, E, 'Fail .. vtListGetImageIndex()');
end;
end;
procedure TFrmPolicyView.vtListGetNodeDataSize(Sender: TBaseVirtualTree;
var NodeDataSize: Integer);
begin
NodeDataSize := SizeOf(TPolicyEnt);
end;
procedure TFrmPolicyView.vtListGetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: string);
var
pData: PPolicyEnt;
begin
try
pData := Sender.GetNodeData(Node);
case Column of
0 : CellText := pData.sName;
1 : CellText := pData.sVal;
end;
except
on E: Exception do
ETgException.TraceException(Self, E, 'Fail .. vtListGetText()');
end;
end;
procedure TFrmPolicyView.vtListNodeClick(Sender: TBaseVirtualTree;
const HitInfo: THitInfo);
var
pData: PPolicyEnt;
StrList: TStringList;
i: Integer;
dlg: TDlgLiteInfo;
pt: TPoint;
sbInfo: TScrollBarInfo;
begin
try
if hiOnNormalIcon in HitInfo.HitPositions then
begin
if PrefModel_ = nil then
exit;
Guard(StrList, TStringList.Create);
pData := Sender.GetNodeData(HitInfo.HitNode);
if pData.sName = RS_NetConnMg then
begin
StrList.Text := PrefModel_.NetworkBlockList;
if (StrList.Text = '') or (pData.sVal = 'OFF') then
StrList.Text := '(none)';
end else
if pData.sName = RS_SoftBlock then
begin
if bDetail_ then
begin
StrList.Add(Format('Date : %s ~ %s',
[DateTimeToStr(PrefModel_.AppBlackDateB), DateTimeToStr(PrefModel_.AppBlackDateE)]));
if PrefModel_.IsAppBlackTime then
StrList.Add(Format('Hour : %d ~ %d', [PrefModel_.AppBlackTimeB, PrefModel_.AppBlackTimeE]));
end;
StrList.Add(PrefModel_.SoftwareListB);
end else
if pData.sName = RS_MustApp then
begin
StrList.Add(PrefModel_.SoftwareListW);
end else
if (pData.sName = RS_ProcessExecute) or (pData.sName = RS_ProcessTerminate) then
begin
StrList.Text := StringReplace(PrefModel_.VpnAppName, ';', #13#10, [rfReplaceAll]);
end else
if pData.sName = RS_IpSite then
begin
StrList.Text := PrefModel_.VpnIpList;
end else
if pData.sName = RS_VideoMeet then
begin
var sList := gMgSvc.PrefModel.VpnRcAppList;
if sList <> '' then
begin
if sList.Contains('zo') then
StrList.Add('ZOOM');
if sList.Contains('we') then
StrList.Add('Cisco WebEx');
if sList.Contains('wh') then
StrList.Add('Naver WhaleOn');
if sList.Contains('cu') then
StrList.Add('uPrism Curix');
end;
end else
if pData.sName = RS_ItHour then
begin
StrList.Text := PrefModel_.VpnHour;
end else
if pData.sName = RS_AfterTimeLock then
begin
StrList.Text := IntToStr(gMgSvc.PrefModel.ForceScreenLockMin) + ' ' + RS_Min;
end else
if pData.sName = RS_AfterTimeClose then
begin
StrList.Text := IntToStr(PrefModel_.UnsafeActionsMin) + ' ' + RS_Min;
end else
if pData.sName = RS_Eula then
begin
if sEulaContent_ = '' then
exit;
var O: ISuperObject;
try
O := SO(sEulaContent_);
if (O = nil) or (O.O['resultStr'] = nil) then
exit;
except
// ...
end;
StrList.Add(O.O['resultStr'].S['eulatitle']);
StrList.Add('');
StrList.Add(StringReplace(O.O['resultStr'].S['eulacontent'], '\r\n', #13#10, [rfReplaceAll]));
end else
if pData.sName = RS_NoticeNoti then
begin
StrList.Text := StringReplace(PrefModel_.NoticeContent, 'ㅄ', #13#10, [rfReplaceAll]);
end else
if pData.sName = RS_USBCut then
begin
StrList.Add('Except Serial :');
StrList.Add(PrefModel_.IgrUsbSerialList.Text);
StrList.Add('Except Vender :');
StrList.Add(PrefModel_.UsbExceptVender);
end else
if pData.sName = RS_BlueCut then
begin
StrList.Add('Except Serial, Type :');
StrList.Add(PrefModel_.BlueExcept);
StrList.Add('Except Vender :');
StrList.Add(PrefModel_.BlueExceptVender);
end else
if pData.sName = RS_MTPCut then
begin
StrList.Add('Except Serial :');
StrList.Add(PrefModel_.MtpExcept);
StrList.Add('Except Vender :');
StrList.Add(PrefModel_.MtpExceptVender);
end else
if pData.sName = RS_PrinterCut then
begin
StrList.Add('Except PrinterName :');
StrList.Add(PrefModel_.Print.sPrinterExcepts);
end else
if pData.sName = RS_ClipCut then
begin
StrList.Add('Except Process :');
StrList.Add(PrefModel_.ClipboardExceptApp);
end else
if pData.sName = RS_PortExCut then
begin
StrList.Add(PrefModel_.BlockPortList);
end else
if pData.sName = RS_TempConn then
begin
StrList.Text := IntToStr(PrefModel_.TemporaryConnMin) + ' ' + RS_Min;
end else
if pData.sName = RS_IgrCaptureApp then
begin
StrList.Add(PrefModel_.IgrCaptureApps);
end else
if pData.sName = RS_BlockFdRename then
begin
StrList.Add(PrefModel_.BlockDirFileRenames);
end else
if pData.sName = RS_BlockFRename then
begin
StrList.Add(PrefModel_.BlockFRenames);
end else
if pData.sName = RS_EtcProcAB then
begin
StrList.Add(PrefModel_.EtcABApps);
end;
StrList.Text := Trim(StrList.Text);
if StrList.Text = '' then
StrList.Text := '(none)';
dlg := TDlgLiteInfo.Create(Self);
dlg.SetInfo(pData.sName + ' ' + RS_Info, StrList);
pt := vtList.ClientToScreen(HitInfo.HitPoint);
dlg.Left := pt.X - dlg.Width;
dlg.Top := pt.Y - dlg.Height;
ZeroMemory(@sbInfo, SizeOf(sbInfo));
sbInfo.cbSize := SizeOf(sbInfo);
if GetScrollBarInfo(vtList.Handle, Integer(OBJID_VSCROLL), sbInfo) then
dlg.Top := dlg.Top - (sbInfo.xyThumbTop - sbInfo.dxyLineButton);
dlg.Show;
end;
except
on E: Exception do
ETgException.TraceException(Self, E, 'Fail .. vtListNodeClick()');
end;
end;
procedure TFrmPolicyView.vtListPaintText(Sender: TBaseVirtualTree;
const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
TextType: TVSTTextType);
var
pData: PPolicyEnt;
begin
try
case Column of
0 : if Node.Parent = Sender.RootNode then TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold];
1 :
begin
pData := Sender.GetNodeData(Node);
if pData.sVal <> 'OFF' then
TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold];
end;
end;
except
on E: Exception do
ETgException.TraceException(Self, E, 'Fail .. vtListPaintText()');
end;
end;
function TFrmPolicyView.AddEnt(pParentNode: PVirtualNode; sName, sVal: String): PVirtualNode;
var
pData: PPolicyEnt;
begin
case PoViewKind_ of
pvkAll : ;
pvkEnabled : if sVal = 'OFF' then exit;
pvkDisabled : if (sVal <> '') and (sVal <> 'OFF') then exit;
end;
pData := VT_AddChildDataN(vtList, Result, pParentNode);
pData.sName := sName;
pData.sVal := sVal;
end;
procedure TFrmPolicyView.AddModePolicy(PO: TPrefModel; bClear: Boolean = false;
bDetail: Boolean = false; bIsDef: Boolean = false);
var
pNode, pNode2: PVirtualNode;
sTemp: String;
MgPO: TPrefModel;
begin
if PO = nil then
exit;
try
vtList.BeginUpdate;
try
if bClear then
begin
PrefModel_ := PO;
VT_Clear(vtList);
end;
if gMgSvc.PrefModel <> nil then
PoViewKind_ := gMgSvc.PrefModel.PoViewKind
else
PoViewKind_ := pvkAll;
MgPO := gMgSvc.PrefModel;
bDetail_ := bDetail;
if bIsDef then
begin
sEulaContent_ := gMgSvc.EulaContent;
// 관리 정책 표시
pNode := AddEnt(nil, RS_AgentManager, '');
AddEnt(pNode, RS_VulCheckBlock, BooleanToStr(MgPO.IsEnableCheck, 'ON', 'OFF'));
AddEnt(pNode, RS_EmpNoVerify, BooleanToStr(MgPO.IsEmpVerify, 'ON', 'OFF'));
case MgPO.OsPatchCheck of
opcNone : AddEnt(pNode, RS_OsUpdateCheck, 'OFF');
opcCheck : AddEnt(pNode, RS_OsUpdateCheck, 'ON');
opcPopup : AddEnt(pNode, RS_OsUpdateCheck, RS_PopupOnly);
opcLog : AddEnt(pNode, RS_OsUpdateCheck, RS_Log);
end;
// AddEnt(pNode, RS_OsUpdateNoti, BooleanToStr(PO.IsOsPatchPopupOnly, RS_PopupOnly, '차단'));
AddEnt(pNode, RS_StartupLockScreen, BooleanToStr(MgPO.IsStartupScreenLock, 'ON', 'OFF'));
case MgPO.FileCollectKind of
fckNone : AddEnt(pNode, RS_FileCollect, 'OFF');
fckFile : AddEnt(pNode, RS_FileCollect, RS_IncFile);
fckFolder : AddEnt(pNode, RS_FileCollect, RS_IncOnPath);
fckFolderIncSub : AddEnt(pNode, RS_FileCollect, RS_IncPath);
end;
case MgPO.FileCollectPlan of
fcpNone : AddEnt(pNode, RS_FileCollectTerm, 'OFF');
fcpOnce : AddEnt(pNode, RS_FileCollectTerm, RS_FileCollectOpt1);
fcpWeek : AddEnt(pNode, RS_FileCollectTerm, RS_FileCollectOpt2);
fcpMonthDate : AddEnt(pNode, RS_FileCollectTerm, RS_FileCollectOpt3);
fcpMonthWeek : AddEnt(pNode, RS_FileCollectTerm, RS_FileCollectOpt4);
end;
AddEnt(pNode, RS_FileCollectDate, DateToStr(MgPO.FileCollectDate));
AddEnt(pNode, RS_FileCollectPath, MgPO.TgFileCollect);
pNode := AddEnt(nil, RS_ConnectionManager, '');
sTemp := MgPO.VpnMethod;
if (sTemp <> '') and not sTemp.Contains('false;false;false;false;false;false') then
begin
if MgPO.IsVpnAndCondition then
pNode2 := AddEnt(pNode, RS_SecuModeIf + ' (AND)', '')
else
pNode2 := AddEnt(pNode, RS_SecuModeIf + ' (OR)', '');
AddEnt(pNode2, RS_ProcessExecute, BooleanToStr(sTemp.Contains('app'), 'ON', 'OFF'));
AddEnt(pNode2, RS_VirtualNicActive, BooleanToStr(sTemp.Contains('nic'), 'ON', 'OFF'));
AddEnt(pNode2, RS_IpSite, BooleanToStr(sTemp.Contains('ip'), 'ON', 'OFF'));
AddEnt(pNode2, RS_VideoMeet, BooleanToStr(sTemp.Contains('rc'), 'ON', 'OFF'));
AddEnt(pNode2, RS_Always, BooleanToStr(sTemp.Contains('time'), 'ON', 'OFF'));
AddEnt(pNode2, RS_ItHour, BooleanToStr(sTemp.Contains('hour'), 'ON', 'OFF'));
end else
AddEnt(pNode, RS_SecuModeIf, 'OFF');
sTemp := MgPO.UnsafeActions;
if (sTemp <> '') and not sTemp.Contains('false;false;false') then
begin
pNode2 := AddEnt(pNode, RS_SecuModeBlock, '');
AddEnt(pNode2, RS_ProcessTerminate, BooleanToStr(sTemp.Contains('app'), 'ON', 'OFF'));
AddEnt(pNode2, RS_VirtualNicTerminate, BooleanToStr(sTemp.Contains('vnic'), 'ON', 'OFF'));
AddEnt(pNode2, RS_NetRefresh, BooleanToStr(sTemp.Contains('net'), 'ON', 'OFF'));
end else
AddEnt(pNode, RS_SecuModeBlock, 'OFF');
AddEnt(pNode, RS_AfterTimeClose, BooleanToStr(MgPO.UnsafeActionsMin > 0, 'ON', 'OFF'));
AddEnt(pNode, RS_AllowAccess, BooleanToStr(MgPO.IsAllowAccess, 'ON', 'OFF'));
AddEnt(pNode, RS_TempConn, BooleanToStr(MgPO.IsTemporaryConn, 'ON', 'OFF'));
AddEnt(pNode, RS_LongtTimeDisconn, BooleanToStr(MgPO.IsLongtimeDisconn, 'ON', 'OFF'));
AddEnt(pNode, RS_ExceptVpnNAllBlock, BooleanToStr(MgPO.EtcNicBlock, 'ON', 'OFF'));
if MgPO.PersonalInfoFileMax > 0 then
begin
AddEnt(pNode, RS_PersonalInfoVul, IntToStr(MgPO.PersonalInfoFileMax) + RS_Gae);
case MgPO.ScanBlockKind of
sbkNone : AddEnt(pNode, RS_PiAction, 'OFF');
sbkPopup : AddEnt(pNode, RS_PiAction, RS_PopupOnly);
sbkLog : AddEnt(pNode, RS_PiAction, RS_Log);
sbkDelete : AddEnt(pNode, RS_PiAction, RS_PiActionOpt2);
sbkDrmEnc : AddEnt(pNode, RS_PiAction, RS_PiActionOpt3);
end;
end else
AddEnt(pNode, RS_PiAction, 'OFF');
AddEnt(pNode, RS_MustApp, BooleanToStr(MgPO.IsMustSecuApp, 'ON', 'OFF'));
// AddEnt(pNode, RS_AfterReport, BooleanToStr(PO.IsUseAfterReport, 'ON', 'OFF'));
// AddEnt(pNode, RS_Eulasubmit, BooleanToStr(PO.IsEulaSubmit, 'ON', 'OFF'));
// if sEulaContent_ <> '' then
// begin
// var O: ISuperObject;
// try
// O := SO(sEulaContent_);
// if (O <> nil) and (O.O['resultStr'] <> nil) then
// AddEnt(pNode, RS_Eula, O.O['resultStr'].S['eulatitle']);
// except;
// // ..
// end;
// end else
// AddEnt(pNode, RS_Eula, '(none)');
// AddEnt(pNode, RS_DailyEula, BooleanToStr(PO.IsDailyEulaCheck, 'ON', 'OFF'));
// AddEnt(pNode, RS_NoticeNoti, BooleanToStr(PO.IsNoticeEnable, 'ON', 'OFF'));
exit;
end;
pNode := AddEnt(nil, RS_SetNoti, '');
case PO.NotifyKind of
nfkNone : AddEnt(pNode, RS_NotiPop, 'OFF');
nfkAll : AddEnt(pNode, RS_NotiPop, RS_AllActive);
nfkVul : AddEnt(pNode, RS_NotiPop, RS_VulNoti);
nfkPol : AddEnt(pNode, RS_NotiPop, RS_PolNoti);
end;
case PO.NotifyType of
nftNormal : AddEnt(pNode, RS_AlramKind,RS_AlramKind1);
nftMin : AddEnt(pNode, RS_AlramKind, RS_AlramKind2);
nftACenter : AddEnt(pNode, RS_AlramKind, RS_AlramKind3);
end;
case MgPO.ScreenLockKind of
slkNone : AddEnt(pNode, RS_AfterTimeLock, 'OFF');
slkDef : AddEnt(pNode, RS_AfterTimeLock, RS_LockDef);
slkBoth : AddEnt(pNode, RS_AfterTimeLock, RS_LockCustom2 + ', ' + RS_LockDef);
slkCustom :
begin
if IsBS1Display then
AddEnt(pNode, RS_AfterTimeLock, RS_LockCustom2)
else
AddEnt(pNode, RS_AfterTimeLock, RS_LockCustom);
end;
end;
if MgPO.IsForceShutdown then
AddEnt(pNode, RS_AfterShutdown, IntToStr(MgPO.ForceShutdownMin) + RS_Min)
else
AddEnt(pNode, RS_AfterShutdown, 'OFF');
pNode := AddEnt(nil, RS_NetSecuMg, '');
AddEnt(pNode, RS_WIFIPublicBlock, BooleanToStr(PO.IsWifiPublicBlock, 'ON', 'OFF'));
// TWifiCtrlKind = (wckNone, wckPopup, wckBlock, wckBlockName, wckWhiteName, wckLog);
case PO.WifiCtrlKind of
wckNone : AddEnt(pNode, RS_WIFIControl, 'OFF');
wckPopup : AddEnt(pNode, RS_WIFIControl, RS_PopupOnly);
wckBlock : AddEnt(pNode, RS_WIFIControl, RS_Cut);
wckBlockName : AddEnt(pNode, RS_WIFIControl, RS_NameCut);
wckWhiteName : AddEnt(pNode, RS_WIFIControl, RS_NameAllow);
wckLog : AddEnt(pNode, RS_WIFIControl, RS_Log);
end;
AddEnt(pNode, RS_UsbNetBlock, BooleanToStr(PO.EtcNicBlock, 'ON', 'OFF'));
AddEnt(pNode, RS_HostChangeCut, BooleanToStr(PO.HostEnable, 'ON', 'OFF'));
AddEnt(pNode, RS_RouteChangeCut, BooleanToStr(PO.RouteEnable, 'ON', 'OFF'));
AddEnt(pNode, RS_DefPortCut, BooleanToStr(PO.IsDefPortBlock, 'ON', 'OFF'));
case PO.ExtraPortEnableType of
PREF_PORTEX_FALSE : AddEnt(pNode, RS_PortExCut, 'OFF');
PREF_PORTEX_BLACK : AddEnt(pNode, RS_PortExCut, 'Black List');
PREF_PORTEX_WHITE : AddEnt(pNode, RS_PortExCut, 'White List');
end;
// AddEnt(pNode, RS_NetConnMg, BooleanToStr(PO.HostEnable, 'ON', 'OFF'));
case PO.WebbMonKind of
wmkNone : AddEnt(pNode, RS_CollectDomainLog, 'OFF');
wmkBlock : AddEnt(pNode, RS_CollectDomainLog, RS_BlockAll);
wmkLog : AddEnt(pNode, RS_CollectDomainLog, RS_LogAll);
wmkIncBlock : AddEnt(pNode, RS_CollectDomainLog, RS_IncBlock);
wmkIncAllow : AddEnt(pNode, RS_CollectDomainLog, RS_IncAllow);
wmkIncPop : AddEnt(pNode, RS_CollectDomainLog, RS_IncPopup);
wmkIncLog : AddEnt(pNode, RS_CollectDomainLog, RS_IncLog);
end;
if (PO.NetworkBlockType = '') or
(PO.NetworkBlockType.ToLower = 'false') then
begin
AddEnt(pNode, RS_NetConnMg, 'OFF');
end else
if PO.NetworkBlockType = PREF_NETAPP_WHITELIST then
begin
AddEnt(pNode, RS_NetConnMg, RS_WhiteApp);
end else
if PO.NetworkBlockType = PREF_NETAPP_BLACKLIST then
begin
AddEnt(pNode, RS_NetConnMg, RS_BlackApp);
end else
if PO.NetworkBlockType = PREF_NETIP_WHITELIST then
begin
AddEnt(pNode, RS_NetConnMg, RS_WhiteIP);
end else
if PO.NetworkBlockType = PREF_NETIP_BLACKLIST then
begin
AddEnt(pNode, RS_NetConnMg, RS_BlackIP);
end;
if PO.OutPo.bActive then
AddEnt(pNode, RS_OutBodyBlock, BooleanToStr(PO.OutPo.bBlock, RS_BlockAll, RS_Log))
else
AddEnt(pNode, RS_OutBodyBlock, 'OFF');
pNode := AddEnt(nil, RS_AppSecuSet, '');
case PO.AppInstKind of
aikNone : AddEnt(pNode, RS_AppInstCut, 'OFF');
aikBlock : AddEnt(pNode, RS_AppInstCut, 'ON');
aikPopup : AddEnt(pNode, RS_AppInstCut, RS_PopupOnly);
aikLog : AddEnt(pNode, RS_AppInstCut, RS_Log);
end;
AddEnt(pNode, RS_SoftBlock, BooleanToStr(PO.IsBlockApp, 'ON', 'OFF'));
pNode := AddEnt(nil, RS_DeviceControl, '');
case PO.Print.PrintKind of
pkNone : AddEnt(pNode, RS_PrinterCut, 'OFF');
pkBlock : AddEnt(pNode, RS_PrinterCut, 'ON');
pkLog :
begin
if PO.Print.bPopup then
AddEnt(pNode, RS_PrinterCut, RS_PopupOnly)
else
AddEnt(pNode, RS_PrinterCut, RS_Log);
end;
// pkWater : AddEnt(pNode, RS_PrinterCut, RS_UseFWater);
end;
AddEnt(pNode, RS_PrinterWater, BooleanToStr(PO.Print.PrintWater = pwActive, 'ON', 'OFF'));
case PO.UsbBlockKind of
ubkNone : AddEnt(pNode, RS_USBCut, 'OFF');
ubkBlock : AddEnt(pNode, RS_USBCut, 'ON');
ubkReadOnly : AddEnt(pNode, RS_USBCut, RS_ReadOnly);
ubkLog :
begin
if PO.USBPopup then
AddEnt(pNode, RS_USBCut, RS_PopupOnly)
else
AddEnt(pNode, RS_USBCut, RS_Log);
end;
end;
case PO.MtpBlockKind of
ubkNone : AddEnt(pNode, RS_MTPCut, 'OFF');
ubkBlock : AddEnt(pNode, RS_MTPCut, 'ON');
ubkReadOnly : AddEnt(pNode, RS_MTPCut, RS_ReadOnly);
ubkLog :
begin
if PO.MTPPopup then
AddEnt(pNode, RS_MTPCut, RS_PopupOnly)
else
AddEnt(pNode, RS_MTPCut, RS_Log);
end;
end;
case PO.BlueBlockKind of
dbkNone : AddEnt(pNode, RS_BlueCut, 'OFF');
dbkBlock : AddEnt(pNode, RS_BlueCut, 'ON');
dbkLog :
begin
if PO.BTPopup then
AddEnt(pNode, RS_BlueCut, RS_PopupOnly)
else
AddEnt(pNode, RS_BlueCut, RS_Log);
end;
end;
case PO.CdromBlockKind of
ubkNone : AddEnt(pNode, RS_CdCut, 'OFF');
ubkBlock : AddEnt(pNode, RS_CdCut, 'ON');
ubkReadOnly : AddEnt(pNode, RS_CdCut, RS_ReadOnly);
_ubkPopup : AddEnt(pNode, RS_CdCut, RS_PopupOnly);
ubkLog : AddEnt(pNode, RS_CdCut, RS_Log);
end;
AddEnt(pNode, RS_MonHardDrive, BooleanToStr(PO.DetectFixedDisk, 'ON', 'OFF'));
pNode := AddEnt(nil, RS_InfoSecuSet, '');
case PO.WebbAB.Kind of
abkNone : AddEnt(pNode, RS_WebAB, 'OFF');
abkBlock : AddEnt(pNode, RS_WebAB, 'ON');
// abkPopup : AddEnt(pNode, RS_WebAB, RS_PopupOnly);
abkLog :
begin
if PO.WebbAB.bPopup then
AddEnt(pNode, RS_WebAB, RS_PopupOnly)
else
AddEnt(pNode, RS_WebAB, RS_Log);
end;
abkUrlBlock : AddEnt(pNode, RS_WebAB, RS_UrlBlock);
abkUrlAllow : AddEnt(pNode, RS_WebAB, RS_UrlAllow);
end;
case PO.OutlookAB.Kind of
abkNone : AddEnt(pNode, RS_OutAB, 'OFF');
abkBlock : AddEnt(pNode, RS_OutAB, 'ON');
// abkPopup : AddEnt(pNode, RS_OutAB, RS_PopupOnly);
abkLog :
begin
if PO.OutlookAB.bPopup then
AddEnt(pNode, RS_OutAB, RS_PopupOnly)
else
AddEnt(pNode, RS_OutAB, RS_Log);
end;
end;
case PO.EtcAB.Kind of
abkNone : AddEnt(pNode, RS_EtcProcAB, 'OFF');
abkBlock : AddEnt(pNode, RS_EtcProcAB, 'ON');
// abkPopup : AddEnt(pNode, RS_EtcProcAB, RS_PopupOnly);
abkLog :
begin
if PO.EtcAB.bPopup then
AddEnt(pNode, RS_EtcProcAB, RS_PopupOnly)
else
AddEnt(pNode, RS_EtcProcAB, RS_Log);
end;
end;
case PO.BlockFdRename of
bdrFalse : AddEnt(pNode, RS_BlockFdRename, 'OFF');
bdrAll : AddEnt(pNode, RS_BlockFdRename, RS_IncSub);
bdrThis : AddEnt(pNode, RS_BlockFdRename, RS_ExcSub);
bdrPopup : AddEnt(pNode, RS_BlockFdRename, RS_PopupOnly);
bdrLog : AddEnt(pNode, RS_BlockFdRename, RS_Log);
end;
case PO.BlockFRename of
bfrFalse : AddEnt(pNode, RS_BlockFRename, 'OFF');
bfrAll : AddEnt(pNode, RS_BlockFRename, RS_BlockAllFile);
bfrExe : AddEnt(pNode, RS_BlockFRename, RS_BlockExeOnly);
bfrNoExe : AddEnt(pNode, RS_BlockFRename, RS_BlockNoExeOnly);
bfrPopup : AddEnt(pNode, RS_BlockFRename, RS_PopupOnly);
bfrLog : AddEnt(pNode, RS_BlockFRename, RS_Log);
end;
case PO.FileMon.Kind of
fmkNone : AddEnt(pNode, RS_FWatch, 'OFF');
fmkAll : AddEnt(pNode, RS_FWatch, RS_AllExt);
fmkIncExt : AddEnt(pNode, RS_FWatch, RS_IncExt);
fmkIgrExt : AddEnt(pNode, RS_FWatch, RS_IgrExt);
end;
case PO.FileBlock.Kind of
fmkNone : AddEnt(pNode, RS_FCut, 'OFF');
fmkAll : AddEnt(pNode, RS_FCut, RS_AllExt);
fmkIncExt : AddEnt(pNode, RS_FCut, RS_IncExt);
fmkIgrExt : AddEnt(pNode, RS_FCut, RS_IgrExt);
end;
AddEnt(pNode, RS_FMask, BooleanToStr(PO.IsMasking, 'ON', 'OFF'));
AddEnt(pNode, RS_DownCut, BooleanToStr(PO.IsPreventDownloads, 'ON', 'OFF'));
case PO.ShareFolder of
sfkNone : AddEnt(pNode, RS_SharedFolderBlock, 'OFF');
sfkAllBlock : AddEnt(pNode, RS_SharedFolderBlock, RS_CutAll);
sfkAddBlock : AddEnt(pNode, RS_SharedFolderBlock, RS_CutAdd);
sfkPopup : AddEnt(pNode, RS_SharedFolderBlock, RS_PopupOnly);
sfkLog : AddEnt(pNode, RS_SharedFolderBlock, RS_Log);
end;
//mgkim
// case PO.DrmAccessKind of
// dakNone : AddEnt(pNode, RS_OpenDRM, 'OFF');
// dakEmpNo : AddEnt(pNode, RS_OpenDRM, RS_Person);
// dakDept : AddEnt(pNode, RS_OpenDRM, RS_Dept);
// dakAll : AddEnt(pNode, RS_OpenDRM, RS_All);
// end;
// case PO.DrmModifyKind of
// dakNone : AddEnt(pNode, RS_ModifyDRM, 'OFF');
// dakEmpNo : AddEnt(pNode, RS_ModifyDRM, RS_Person);
// dakDept : AddEnt(pNode, RS_ModifyDRM, RS_Dept);
// dakAll : AddEnt(pNode, RS_ModifyDRM, RS_All);
// end;
AddEnt(pNode, RS_DecDRM, BooleanToStr(PO.IsDrmDecrypt, 'ON', 'OFF'));
AddEnt(pNode, RS_AttDRM, BooleanToStr(PO.IsDrmAttAble, 'ON', 'OFF'));
case PO.IntBtBlockNewFile.mode of
abkNone : AddEnt(pNode, RS_BlueToothFIleNew, 'OFF');
abkBlock : AddEnt(pNode, RS_BlueToothFIleNew, '차단');
abkLog : AddEnt(pNode, RS_BlueToothFIleNew, '로그 수집');
end;
case PO.IntUsbBlockNewFile.mode of
abkNone : AddEnt(pNode, RS_UsbToothFIleNew, 'OFF');
abkBlock : AddEnt(pNode, RS_UsbToothFIleNew, '차단');
abkLog : AddEnt(pNode, RS_UsbToothFIleNew, '로그 수집');
end;
case PO.IntUsbToUsbBlockNewFile.mode of
abkNone : AddEnt(pNode, RS_UsbToUsbToothFIleNew, 'OFF');
abkBlock : AddEnt(pNode, RS_UsbToUsbToothFIleNew, '차단');
abkLog : AddEnt(pNode, RS_UsbToUsbToothFIleNew, '로그 수집');
end;
case PO.IntCdromBlockNewFile.mode of
abkNone : AddEnt(pNode, RS_CdromToothFIleNew, 'OFF');
abkBlock : AddEnt(pNode, RS_CdromToothFIleNew, '차단');
abkLog : AddEnt(pNode, RS_CdromToothFIleNew, '로그 수집');
end;
case PO.IntMtpBlockNewFile.mode of
abkNone : AddEnt(pNode, RS_MtpToothFIleNew, 'OFF');
abkBlock : AddEnt(pNode, RS_MtpToothFIleNew, '차단');
abkLog : AddEnt(pNode, RS_MtpToothFIleNew, '로그 수집');
end;
// 화면 및 클립보드 설정
pNode := AddEnt(nil, RS_ScreenLogoSet, '');
case PO.ClipBlockKind of
cbkNone : AddEnt(pNode, RS_ClipCut, 'OFF');
cbkBlock : AddEnt(pNode, RS_ClipCut, 'ON');
cbkPopup : AddEnt(pNode, RS_ClipCut, RS_PopupOnly);
cbkLog : AddEnt(pNode, RS_ClipCut, RS_Log);
end;
case PO.CapAppMonKind of
camNone : AddEnt(pNode, RS_IgrCaptureApp, 'OFF');
camBlockAll : AddEnt(pNode, RS_IgrCaptureApp, RS_BlockAll);
camIncAllow : AddEnt(pNode, RS_IgrCaptureApp, RS_AllowSome);
camPopup : AddEnt(pNode, RS_IgrCaptureApp, RS_PopupOnly);
camLog : AddEnt(pNode, RS_IgrCaptureApp, RS_Log);
end;
AddEnt(pNode, RS_CapBlockApps, BooleanToStr(PO.bCaptureBlockApps_, 'ON', 'OFF'));
case PO.CaptureBlockUrlKind of
bkNone : AddEnt(pNode, RS_WBCapBLock, 'OFF');
bkBlack : AddEnt(pNode, RS_WBCapBLock, RS_CutList);
bkWhite : AddEnt(pNode, RS_WBCapBLock, RS_AllowList);
bkAll :
begin
AddEnt(pNode, RS_WBCapBLock, RS_Cut);
end;
end;
// AddEnt(pNode, RS_UseImgWater, BooleanToStr(PO.bCaptureBlockApps_, 'ON', 'OFF'));
AddEnt(pNode, RS_UseImgWater, BooleanToStr(PO.IsWaterMark, 'ON', 'OFF'));
AddEnt(pNode, RS_ScreenLogUse, BooleanToStr(PO.ScreenLogo <> askNone, 'ON', 'OFF'));
pNode := vtList.GetFirst;
while pNode <> nil do
begin
pNode2 := pNode;
pNode := pNode.NextSibling;
if pNode2.ChildCount = 0 then
vtList.DeleteNode(pNode2);
end;
finally
if bClear then
VT_ExpandAll(vtList, true);
vtList.EndUpdate;
end;
except
on E: Exception do
ETgException.TraceException(Self, E, 'Fail .. AddModePolicy()');
end;
end;
end.