997 lines
37 KiB
Plaintext
997 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
|
|
dbkNone : AddEnt(pNode, RS_CdCut, 'OFF');
|
|
dbkBlock : AddEnt(pNode, RS_CdCut, 'ON');
|
|
_dbkPopup : AddEnt(pNode, RS_CdCut, RS_PopupOnly);
|
|
dbkLog : 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.
|