unit DNotice; interface uses {$IFDEF _HE_} DReqDevExcept, ManagerModel, {$ENDIF} Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.Imaging.pngimage, Vcl.StdCtrls, System.ImageList, Vcl.ImgList, PngImageList, Tocsg.Win32, Define, Vcl.WinXPanels, superobject; const PARAM_GO_SETPASS = '/c explorer ms-settings:signinoptions'; // '/c control userpasswords'; PARAM_GO_ANTIVIRUS = '/c explorer windowsdefender:'; PARAM_GO_FIREWALL = '/c control firewall.cpl'; PARAM_GO_FIREWALL2 = '/c explorer windowsdefender://network/'; PARAM_GO_WINUPDATE = '/c explorer ms-settings:windowsupdate'; PARAM_GO_SETSAVER = '/c rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1'; PARAM_GO_SYSTEMINFO = '/c control /name Microsoft.System'; PARAM_GO_UNINSTALL = '/c appwiz.cpl'; type {$IFNDEF _HE_} TNotifyKind = (nfkNone, nfkAll, nfkVul, nfkPol); TNotifyType = (nftNormal, nftMin, nftACenter); PLogInfo = ^TLogInfo; TLogInfo = record sCode, sBody, sOcrBody, sDevName, sDevSerial, sDevClassId, sResInfo, sSummary, sAppName, sAppPath, sThumbIds, sSender, sRecipient, sSubject, sPath, sFileCompId, sDestIpUrl, sDestPort, sComment: String; OVio: ISuperObject; end; {$ENDIF} TDlgNotice = class(TForm) imgTop: TImage; lbTitle: TLabel; imgBtnList: TPngImageList; tInit: TTimer; btnClose: TButton; imgTitles: TPngImageCollection; cpMain: TCardPanel; cdDef: TCard; imgOk: TImage; imgSet: TImage; lbOk: TLabel; mmMsg: TMemo; lbSet: TLabel; cdPI: TCard; Label2: TLabel; lbGrade: TLabel; Label5: TLabel; lbPiCnt: TLabel; lbMsgEx: TLabel; tClose: TTimer; pnTop: TPanel; lbMode: TLabel; procedure imgOkMouseEnter(Sender: TObject); procedure imgOkMouseLeave(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure imgOkClick(Sender: TObject); procedure imgSetClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); procedure imgTopMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure tInitTimer(Sender: TObject); procedure btnCloseClick(Sender: TObject); procedure lbPiCntMouseEnter(Sender: TObject); procedure lbPiCntMouseLeave(Sender: TObject); procedure lbPiCntClick(Sender: TObject); procedure tCloseTimer(Sender: TObject); private { Private declarations } sCmdParam_, sNotiCenterMsg_: String; Mutex_: TTgMutex; {$IFDEF _HE_} ReqDevExceptInfo_: TReqDevExceptInfo; {$ENDIF} procedure SetNotiForm(aNotiType: TNotifyType); procedure SetImgBtn(imgBtn: TImage; nImgIdx: Integer); procedure SetOneButtion; procedure SetPiResult4HEC(nRstCnt: Integer); public { Public declarations } Constructor Create(aOwner: TComponent); override; procedure CreateParams(var Params: TCreateParams); override; // 작업표시줄에 표시 Destructor Destroy; override; function CM_RS_TitlePreventSimple: String; function CM_RS_DevExcept: String; function CM_RS_BlockMsg(sDef: String): String; function CM_RS_MonMsg(sDef: String): String; procedure PopupMessage(sJsonData: String); property NotiCenterMsg: String read sNotiCenterMsg_; end; var DlgNotice: TDlgNotice; resourcestring RS_SecuViol = '보안 정책 위반'; RS_Vul = '취약점 발생'; RS_Noti = '공지 사항'; RS_Info = '정보 알림'; RS_SetVul = '조치'; RS_DevExcept = '예외'; implementation uses {$IFDEF _HE_} ManagerService, License, DeCrmHeMain, DViewCttSchResult, DefineHelper, GlobalOutAddInDefine, KDL.Localizer, ManagerPrint, DDecryptDrm, {$ENDIF} Tocsg.Exception, Tocsg.Safe, Tocsg.Shell, GlobalDefine, Tocsg.Strings, Vcl.Clipbrd, Condition, Tocsg.Path, Tocsg.Trace, Tocsg.WTS, Tocsg.Process, Tocsg.Json, Tocsg.Hash, Tocsg.Convert, Winapi.MultiMon, ManagerCampaign, Tocsg.Url, Tocsg.Files; resourcestring RS_TitleVul = '보안 취약점이 발견되었습니다.'; RS_TitlePrevent = '보안 정책 관련 활동이 탐지되었습니다'; // '보안정책 위반 행위가 탐지되었습니다.'; RS_TitlePreventSimple = '보안정책 위반 행위 탐지'; // 텍스트 변경 시 CM_RS_TitlePreventSimple() 확인 필요 RS_SafeCompleted = '보안 취약점이 조치되었습니다.'; // '취약점 점검 대상 항목 조치가 완료되었습니다.'; RS_SafeCompletedSimple = '보안 취약점 조치 완료'; RS_InitRemoteConn = '보안 취약점이 모두 조치 되어서' + #13#10 + '보안모드를 사용할 수 있습니다.'; // '이제 원격접속을 시작할 수 있습니다.'; RS_UnsafeOS = '사용하시는 OS는 안전하지 않습니다.'; RS_EOSVersion = '(End-of-Service 버전)'; RS_NoAllVulCheck = '특정 취약점검은 동작하지 않을 수 있습니다.'; RS_NoUpToDateOS = '윈도우 보안 패치가 최신이 아닙니다.'; RS_OSPatchAction1 = ' 조치 버튼 클릭 후 "업데이트 확인"을 통해 패치를'; RS_OSPatchAction2 = ' 진행하세요.'; RS_OSPatchAction3 = ' 보안 패치에 따라 PC재부팅이 필요합니다.'; RS_VulPW1 = '사용자 계정 암호가 설정되어 있지 않습니다.'; RS_VulPW2 = ' 조치 버튼 클릭 후 "PC설정에서 내 계정 변경"'; RS_VulPW3 = ' -> "로그인옵션"'; RS_VulPW4 = ' -> "비밀번호"에서 암호를 설정하세요.'; RS_LastChangePw = '마지막으로 암호 설정한 날짜 :'; RS_VulPwDate1 = '사용자 계정 암호가 오래되었습니다.'; RS_VulPwDate2 = ' 조치 버튼 클릭 후 "다른 계정 관리"'; RS_VulPwDate3 = ' -> "계정 클릭"'; RS_VulPwDate4 = ' -> "암호 변경"에서 새암호를 설정하세요.'; RS_VulAV1 = '백신 프로그램이 설정되어 있지 않습니다.'; RS_VulAV2 = ' 조치 버튼 클릭 후 "Windows 보안센터"'; RS_VulAV3 = ' -> "바이러스 및 위협 방지"에서'; RS_VulAV4 = ' 백신을 활성화 하세요.'; RS_VulFW1 = '방화벽 설정이 되어있지 않습니다.'; RS_VulFW2 = ' 조치 버튼 클릭 후 "권장 설정 사용"을'; RS_VulFW3 = ' 눌러 방화벽을 활성화하세요.'; RS_VulScreen1 = '화면 보호기가 설정되어 있지 않습니다.'; RS_VulScreen2 = ' 조치 버튼 클릭 후 "다시 시작할 때 로그온 화면 표시'; RS_VulScreen3 = ' 체크박스"를 활성화 하세요.'; RS_VulEmpNo1 = '서버에서 검증되지 않은 사번입니다.'; RS_VulEmpNo2 = '조치 버튼 클릭 후 검증된 사번을 입력하거나'; RS_VulEmpNo3 = '관리자에게 검증을 요청 해주십시오.'; RS_InvalidEmpNo = ' 미검증 사번 : '; RS_VulAllow1 = '접속 승인이 되지 않았습니다.'; RS_VulAllow2 = '접속 승인 여부를 확인 후 재시도하세요.'; RS_NoAccessMAC = '현재 PC의 MAC이 접속허용되지 않았습니다.'; RS_RequestManager = '관리자에게 문의하세요.'; RS_ExpireConnDate = '접속 승인 기간이 만료되었습니다.'; RS_PersonalInfoOver = '개인정보 임계치가 초과 되었습니다.'; RS_PersonalInfoOver1 = '검출출된 개인정보 결과를 확인 / 조치 후'; RS_PersonalInfoOver2 = '개인정보 검사를 수행해 주십시오.'; RS_UpdateCompleted = '업데이트 완료'; RS_MsgUpdateCompleted = '프로그램이 업데이트 되었습니다.'; RS_FMT_Version = ' - 버전 : %s'; RS_WriteReport = '사용 보고서 작성'; RS_MsgWriteReport1 = '다시 보안 모드에 진입하기 전에'; RS_MsgWriteReport2 = '사용 보고서를 작성 해주십시오.'; RS_ClipCut = '클립보드 (복사, 캡쳐) 사용이 차단 되었습니다.'; RS_FMT_ClipCutApp = '사용 프로그램 : %s'; RS_USBCut = '외부 저장소 연결이 해제 되었습니다.'; RS_USB_RO = '외부 저장소의 쓰기가 금지됩니다.'; RS_CDROMCut = 'CD/DVD 저장소 연결이 해제 되었습니다.'; RS_RouteCut = '라우팅 테이블 변경이 차단 되었습니다.'; RS_FWater = '워터마크가 적용되었습니다.'; RS_FWatch = '로컬 파일 변경이 탐지되었습니다.'; RS_FDelAfter = '만약 사용 중이면, 사용 후 삭제됩니다.'; RS_HecBlockMsg = '보안 정책에 의해 차단되었습니다.'; RS_HecMonMsg = '보안 정책 관련 활동이 탐지되었습니다.'; RS_HecHelp = '문의지원(보안지원센터) : 02-2134-0112' + #13#10 + '기술지원(보안지원센터) : 윤동용 책임'; RS_FCut = '파일 생성이 차단 되었습니다.'; RS_TempConnect = '임시 접속이 허용되었습니다. (Unsafe Mode)'; RS_TempConnectExit = '본 연결은 %d분 뒤 강제 종료됩니다.'; RS_TerminateApp = 'APP 종료가 감지되었습니다.'; RS_MonitorApp = 'APP 실행이 감지되었습니다.'; RS_ExeWhiteApp1 = '다음 필수 앱이 실행되고 있지 않습니다.'; RS_ExeWhiteApp2 = '연결이 초기화됩니다.'; RS_FMask = '파일이 마스킹 되었습니다.'; RS_URLCut = 'URL 연결이 차단 되었습니다.'; RS_URLMon = 'URL 연결이 감지 되었습니다.'; RS_FMT_URLCut = ' - URL : %s'; RS_FMT_URLInfo = ' - URL 평판 : %s'; RS_DetectAppInstSankyo = '비인가 소프트웨어 설치 행위가 탐지되었습니다.'; RS_DetectAppInstSankyo2 = '비인가 프로그램 설치가 감지되었습니다.'; RS_DetectAppInst = '프로그램 설치가 감지되었습니다.'; RS_DetectAppInst1 = '아래 ''조치'' 버튼을 눌러 제어판에서 해당 프로그램을'; RS_DetectAppInst2 = '삭제 해주시기 바랍니다.'; RS_DetectWIFI = '무선 네트워크 접속(WIFI)이 감지되었습니다.'; RS_AfterCut = '네트워크가 차단되었습니다.';//'잠시 후 차단됩니다.'; RS_DetectBlue = '블루투스 연결이 감지되었습니다.'; RS_BlueCut = '블루투스 연결을 차단합니다.'; RS_DetectMTP = 'MTP 연결이 감지되었습니다.'; RS_MTPCut = 'MTP 연결을 차단합니다.'; RS_DetectPrinter = '프린터 사용이 감지되었습니다.'; RS_NotSupportWT = '워터마크를 지원하지 않는 프로그램입니다.'; RS_NotSupportPTR = '승인되지 않은 프린터 입니다.'; RS_NotSupportPTR_IP = '승인되지 않은 프린터 IP 입니다.'; RS_SharePcPrintBlock = '공유PC를 통한 출력 차단'; RS_WsdPrintBlock = 'WSD Port로 연결된 프린터 차단'; RS_NoTcpIpPrintBlock = 'TCP/IP로 설정이 안된 프린터 차단'; RS_PwSavingPrintBlock = '절전모드 상태 프린터 차단'; RS_NotSupportAPP = '승인되지 않은 APP : '; RS_NotSupportURL = '승인되지 않은 URL : '; RS_FoundCtt = '개인정보 검출됨 : '; RS_PrinterCut = '프린터 사용을 차단합니다.'; RS_MsgCopyClipboard = '메시지가 클립보드에 복사 되었습니다.'; RS_PerInfoCheck = '사용자 등록 확인'; RS_NotFoundPerInfo = '사용자 정보를 찾을 수 없습니다.'; RS_RegPerInfo = '사용자 정보를 등록해주세요.'; RS_CTTSCH = '개인정보 검사'; RS_CTTSCH_START = '개인정보 검사가 시작되었습니다.'; RS_CTTSCH_COMPLETE = '개인정보 검사를 완료했습니다.'; RS_CTTSCH_TILE = '검사 시간'; RS_CTTSCH_RESULT_COUNT = '검출된 파일 수'; RS_CttSchVulModeMsg1 = '많은 수의 개인정보가 추출 되었습니다.'; RS_CttSchVulModeMsg2 = '개인정보 검사 결과를 확인하고 조치 후'; RS_CttSchVulModeMsg3 = '개인정보 검사를 다시 수행해 주십시오.'; RS_DetectCopyCapture = '- 복사, 캡쳐가 감지 되었습니다.'; RS_DetectCB = '클립보드 (복사, 캡쳐) 사용이 감지 되었습니다.'; RS_DetectRemoveableDev = '외부 저장소 연결이 감지 되었습니다.'; RS_UsbBLockNoti1 = '%d년 %d월 %d일부터 USB 사용이 차단됩니다.'; RS_UsbBLockNoti2 = '일시적 사용 : 직책자 결재 필요'; RS_UsbBLockNoti3 = '장기적 사용 : 정보보안 담당자에게 USB 정책 예외 요청'; RS_DetectCdrom = 'CD/DVD 연결이 감지 되었습니다.'; RS_DetectDevice = '장치 연결이 감지 되었습니다.'; RS_DeleteInstApp = '설치된 프로그램을 삭제합니다.'; RS_DeleteInstAppMsg1 = '아래 ''조치'' 버튼을 눌러 삭제를 확인하고,'; RS_DeleteInstAppMsg2 = '삭제가 되지 않았다면 삭제해주십시오.'; RS_PrintWater1 = '프린트 워터마크 적용'; RS_PrintWater2 = '프린트 워터마크가 적용 되었습니다.'; RS_DetectFileUse = '파일 첨부, 사용이 감지 되었습니다.'; RS_DetectFileBlock = '파일 첨부, 사용이 차단 되었습니다.'; RS_Program = '프로그램 : '; RS_FileName = '파일 이름 : '; RS_FilePath = '파일 경로 : '; RS_FileTag = '파일 태그 : '; RS_OpenDrm1 = 'DRM 문서 열람'; RS_OpenDrm2 = 'DRM 문서를 확인합니다.'; RS_OpenDrm3 = 'DRM 문서를 수정할 수 없습니다..'; RS_BlockDrm1 = 'DRM 문서를 열람할 수 없습니다.'; RS_BlockDrm2 = '관리자에게 열람 권한을 문의해 주십시오.'; RS_BlockDrm3 = '다른 환경에서 만들어진 DRM 문서입니다.'; RS_EncDrm1 = 'DRM 문서 암호화'; RS_EncDrm2 = 'DRM 문서 암호화가 적용됩니다.'; RS_DocName = '문서이름 : '; RS_DetectFRename = '파일 이름변경이 감지 되었습니다.'; RS_BlockFRename = '파일 이름변경이 차단 되었습니다.'; RS_OrgName = '원본 이름 : '; RS_ChgName = '변경 이름 : '; RS_BlockShareFolder = '공유 폴더 설정이 차단 되었습니다.'; RS_DetectShareFolder = '공유 폴더 설정이 감지 되었습니다.'; RS_BlockCappApp = '캡쳐 APP이 차단 되었습니다.'; RS_DetectCappApp = '캡쳐 APP이 감지 되었습니다.'; RS_DetectCappAppHec = '허용된 캡쳐 App 이 아닙니다'; RS_MsgVul1_ABL = '%s 설정이 되어 있지 않습니다.'; RS_MsgVul2_ABL = '[취약상태]로 되어 있는 버튼을 클릭하여 설정을 변경하세요.'; RS_ScrSv_ABL = '[화면 보호기]'; RS_AV_ABL = '[Anti-Virus]'; RS_UserPw_ABL = '[계정 비밀번호]'; RS_FW_ABL = '[방화벽]'; RS_OsVer_ABL = '[OS 버전]'; RS_OsPatch_ABL = '[OS 패치]'; RS_TITLE = '제목 : '; RS_CC = '참조 : '; RS_TO = '수신자 : '; RS_OutlookMonMsg = '아웃룩 메일 전송이 감지 되었습니다.'; RS_OutlookMaskMsg = '아웃룩 전송 메일이 마스킹 되었습니다.'; RS_OutlookBlockMsg = '아웃룩 메일 전송이 차단 되었습니다.'; RS_OutlookBlockApp = '아웃룩이 보안 정책으로 차단 되었습니다.'; // RS_OutlookBlockAppMsg1 = '아래 "조치" 버튼을 눌러서'; // RS_OutlookBlockAppMsg2 = '아웃룩 보안 모듈을 적용 후 다시 실행 해주십시오.'; RS_OutlookBlockAppMsg1 = 'BSOne이 아웃룩 메일을 안전하게 관리할 수 있도록 추가 기능을 설치해야 합니다.'; RS_OutlookBlockAppMsg2 = '"조치" 버튼을 클릭하여 기능을 설치해 주세요.'; RS_OutlookSecu = '아웃룩 보안 적용'; RS_OutlookSecuMsg = '아웃룩 보안이 적용되었습니다.'; RS_BLOCK_MTP_WRITE = 'MTP 장치에서 파일쓰기가 차단 되었습니다.'; RS_RELEASE_QUARANTINE = '검역소에 격리된 파일이 해제 되었습니다.'; RS_RELEASE_FILE_QUARANTINE = '파일 격리 해제'; RS_ChangeMode = '모드 변경'; RS_BlockTethering = '네트워크가 차단 되었습니다.'; RS_MsgAppScrRcd = 'APP 사용이 감지되어 화면 녹화를 시작합니다.'; RS_DetectApp = '사용 감지 APP : '; RS_MsgModeSleep = '[수면 모드 입니다]'; RS_MsgModeSecu = '[보안 모드 입니다]'; RS_MsgModeVul = '[취약 모드 입니다. 취약점을 조치해주세요]'; RS_RS_MsgModeNoId = '[미인증 모드 입니다. ID 인증이 필요합니다]'; RS_MsgModeOff = '[오프라인 모드 입니다]'; RS_MsgModeExpt = '[예외 모드 입니다]'; RS_ReqApproval = '결재 승인 요청'; RS_Confirm = '승인'; RS_MsgConfirm = '확인하시고 승인 바랍니다.'; RS_MsgConfirm_SH = '검토해주시기 바랍니다.'; RS_PrtApproval = '출력 요청'; RS_MsgPrtApproval = '출력이 요청 되었습니다.'; RS_MsgPrtApproval_SH = '개인(신용)정보가 포함된 출력 요청이 있습니다.'; RS_UsbExcept = 'USB 매체 예외'; RS_MsgUsbExcept = 'USB 매체 예외가 요청 되었습니다.'; RS_UrlExcept = '브라우저 접근 예외'; RS_MsgUrlExcept = '브라우저 접근 예외가 요청 되었습니다.'; RS_DecExcept = 'DRM 해제 요청'; RS_MsgDecExcept = 'DRM 해제가 요청 되었습니다.'; RS_FileExpExcept = '파일 반출 요청'; RS_MsgFileExpExcept = '파일 반출이 요청 되었습니다.'; RS_MtpExcept = 'MTP 매체 예외'; RS_MtpUrlExcept = 'MTP 매체 예외 요청 되었습니다.'; RS_BtExcept = 'Bluetooth 매체 예외'; RS_BtUrlExcept = 'Bluetooth 매체 예외 요청 되었습니다.'; RS_CdExcept = 'CD/DVD 매체 예외'; RS_CdUrlExcept = 'CD/DVD 매체 예외 요청 되었습니다.'; RS_PrtWaterExcept = '프린트 워터마크 예외'; RS_MsgPrtWaterExcept = '프린트 워터마크가 예외 요청 되었습니다.'; RS_CapAppExcept = '캡처 APP 차단 예외'; RS_MsgCapAppExcept = '캡처 APP 차단이 예외 요청 되었습니다.'; RS_ApprovalResult = '결재 확인'; RS_NotFoundPrintInfo = '출력 정보를 찾을 수 없습니다. (%s)'; RS_PrintPass = '출력 요청이 승인 되었습니다.'; RS_PrintReqReject = '출력 요청이 반려 되었습니다.'; RS_MsgError = '오류가 발생했습니다'; RS_UsbReqPass = 'USB 매체 예외가 승인 되었습니다.'; RS_UsbReqReject = 'USB 매체 예외 요청이 반려 되었습니다.'; RS_UrlReqPass = '브라우저 접근 예외가 승인 되었습니다.'; RS_DrmReqPass = 'DRM 해제 요청이 승인 되었습니다.'; RS_DrmReqReject = 'DRM 해제 요청이 반려 되었습니다.'; RS_FileExpReqPass = '파일 반출 요청이 승인 되었습니다.'; RS_FileExpReqReject = '파일 반출 요청이 반려 되었습니다.'; RS_UrlReqReject = '브라우저 접근 예외 요청이 반려 되었습니다.'; RS_MtpReqPass = 'MTP 매체 예외가 승인 되었습니다.'; RS_MtpReqReject = 'MTP 매체 예외 요청이 반려 되었습니다.'; RS_BtReqPass = 'Bluetooth 매체 예외가 승인 되었습니다.'; RS_BtReqReject = 'Bluetooth 매체 예외 요청이 반려 되었습니다.'; RS_CdReqPass = 'CD/DVD 매체 예외가 승인 되었습니다.'; RS_PrtWaterReqPass = '프린트 워터마크 예외가 승인 되었습니다.'; RS_CapAppReqPass = '캡처 APP 차단 예외가 승인 되었습니다.'; RS_CdReqReject = 'CD/DVD 매체 예외 요청이 반려 되었습니다.'; RS_PrtWaterReject = '프린트 워터마크 예외 요청이 반려 되었습니다.'; RS_CapAppReject = '캡처 APP 차단 예외 요청이 반려 되었습니다.'; RS_ApprovalReason = '결재 처리 사유'; RS_NoApprovalInfo = '결재자 정보를 가져올 수 없습니다.'; RS_UpdateReboot = '업데이트 기능 적용을 위해 PC를 재부팅해야 합니다.'; RS_NoRegPerInfoUrl = '사용자 정보 등록 URL을 가져올 수 없습니다.'; RS_Hold = '보류'; RS_FileCreateMon = '파일 생성이 감지 되었습니다.'; RS_FileCopyMon = '파일 복사가 감지 되었습니다.'; RS_FileMoveMon = '파일 이동이 감지 되었습니다.'; RS_FileDeleteMon = '파일 삭제가 감지 되었습니다.'; RS_FileRenameMon = '파일 이름변경이 감지 되었습니다.'; RS_FileCreateBlk = '파일 생성이 차단 되었습니다.'; RS_FileCopyBlk = '파일 복사가 차단 되었습니다.'; RS_FileMoveBlk = '파일 이동이 차단 되었습니다.'; RS_FileDeleteBlk = '파일 삭제가 차단 되었습니다.'; RS_FileRenameBlk = '파일 이름변경이 차단 되었습니다.'; RS_ShFolder = '[공유폴더]'; RS_AllowDateTime = '사용 허용 기간 : '; {$R *.dfm} var _nNotiCnt: Integer = 0; function GetSystemPrimaryMonitorRect: TRect; var i: Integer; begin // 기본값으로 Screen.Monitors[]에서 Primary인 모니터 찾기 for i := 0 to Screen.MonitorCount - 1 do begin if Screen.Monitors[i].Primary then begin // Result := Screen.Monitors[i].WorkareaRect; // or BoundsRect Result := Screen.Monitors[i].BoundsRect; exit; end; end; // fallback: 그냥 전체 화면 Result := Rect(0, 0, Screen.Width, Screen.Height); end; //var // hMon: HMONITOR; // mi: TMonitorInfo; //begin // hMon := MonitorFromPoint(Point(0, 0), MONITOR_DEFAULTTOPRIMARY); // mi.cbSize := SizeOf(TMonitorInfo); // if GetMonitorInfo(hMon, @mi) then // Result := mi.rcWork // else // Result := Rect(0, 0, Screen.Width, Screen.Height); //end; Constructor TDlgNotice.Create(aOwner: TComponent); var hTarkBar: HWND; r, rPM: TRect; nVCnt, nHPos: Integer; begin Inherited Create(aOwner); Caption := APP_TITLE; {$IFDEF _HE_} if (CUSTOMER_TYPE = CUSTOMER_DEV) or IsCJ_Affiliates then begin case gMgSvc.HeModeKind of hmkSleep : begin lbMode.Caption := RS_MsgModeSleep; // lbMode.Font.Color := clGray; end; hmkSecurity : begin lbMode.Caption := RS_MsgModeSecu; lbMode.Font.Color := clBlue; end; hmkVulnerability : begin lbMode.Caption := RS_MsgModeVul; lbMode.Font.Color := clRed; end; hmkOffline : begin if IsCJ_Affiliates then begin lbMode.Caption := RS_RS_MsgModeNoId; lbMode.Font.Color := clRed; end else begin lbMode.Caption := RS_MsgModeOff; lbMode.Font.Color := clGray; end; end; hmkException : begin lbMode.Caption := RS_MsgModeExpt; lbMode.Font.Color := clGray; end; end; pnTop.Visible := true; end; {$ENDIF} case CUSTOMER_TYPE of CUSTOMER_TMAP, CUSTOMER_SOSLAB : _nNotiCnt := 1; // 팝업 위치 고정 else Inc(_nNotiCnt); end; sCmdParam_ := ''; sNotiCenterMsg_ := ''; Mutex_ := nil; {$IFDEF _HE_} ZeroMemory(@ReqDevExceptInfo_, SizeOf(ReqDevExceptInfo_)); {$ENDIF} rPM := GetSystemPrimaryMonitorRect; hTarkBar := FindWindow('Shell_TrayWnd', ''); if hTarkBar <> 0 then begin {$IFDEF _HE_} SetNotiForm(gMgSvc.ModePolicy.NotifyType); {$ELSE} SetNotiForm(nftNormal); {$ENDIF} GetWindowRect(hTarkBar, r); // Top가 0이면 위, 왼쪽 아님 오른쪽 if (r.Left <= 0) and (r.Right < rPM.Width) then begin // 왼쪽 Top := rPM.Height; Left := rPM.Width; end else if (r.Left <= 0) and (r.Top = 0) and (r.Bottom < rPM.Height) then begin // 위쪽 Top := rPM.Height; Left := rPM.Width; end else if (r.Left <= 0) and (r.Top > 0) then begin // 아래쪽 Top := rPM.Height - (r.Bottom - r.Top); Left := rPM.Width;// - Width; end else begin // 오른쪽 Top := rPM.Height; Left := rPM.Width - (r.Right - r.Left);// - Width - (r.Right - r.Left); end; // if CUSTOMER_TYPE = CUSTOMER_TMAP then // begin // nVCnt := 1; // 티맵은 위치 고정 // nHPos := 0; // end else begin // // end; nVCnt := rPM.Height div Height; nHPos := _nNotiCnt mod nVCnt; if nHPos = 0 then begin Left := Left - (_nNotiCnt div nVCnt) * Width; nHPos := nVCnt; end else Left := Left - ((_nNotiCnt div nVCnt) + 1) * Width; Top := Top - (nHPos * Height); end; tInit.Enabled := true; {$IFDEF _HE_} nHPos := gMgSvc.ModePolicy.NotiCloseSec; if nHPos > 0 then begin tClose.Interval := nHPos * 1000;; tClose.Enabled := true; end else if IsHD then begin tClose.Interval := 5000; tClose.Enabled := true; end; {$ENDIF} end; procedure TDlgNotice.CreateParams(var Params: TCreateParams); begin Inherited CreateParams(Params); Params.ExStyle := WS_EX_APPWINDOW; end; Destructor TDlgNotice.Destroy; begin if Mutex_ <> nil then FreeAndNil(Mutex_); Inherited; end; // 고객사별 커스텀 메시지... 아 하기싫다 25_0423 13:45:13 kku function TDlgNotice.CM_RS_TitlePreventSimple: String; begin Result := RS_TitlePreventSimple; case CUSTOMER_TYPE of CUSTOMER_LOTTEMART : begin if RS_TitlePreventSimple = '보안정책 위반 행위 탐지' then Result := '관리자 승인 필요 활동 탐지'; // 언어가 한국어 일때만 end; end; end; function TDlgNotice.CM_RS_DevExcept: String; begin Result := RS_DevExcept; case CUSTOMER_TYPE of CUSTOMER_LOTTEMART : begin if RS_DevExcept = '예외' then Result := '승인 요청'; // 언어가 한국어 일때만 end; end; end; function TDlgNotice.CM_RS_BlockMsg(sDef: String): String; begin // case CUSTOMER_TYPE of // CUSTOMER_HDENG : Result := RS_HecBlockMsg; // else Result := sDef; // end; // 위에꺼가 아니라고 해서.... 일단 아래처럼 땜빵... // 나중에 정리하자.... 25_1013 16:42:12 kku Result := sDef; if CUSTOMER_TYPE = CUSTOMER_HDENG then lbTitle.Caption := RS_HecBlockMsg; end; function TDlgNotice.CM_RS_MonMsg(sDef: String): String; begin // case CUSTOMER_TYPE of // CUSTOMER_HDENG : Result := RS_HecMonMsg; // else Result := sDef; // end; // 위에꺼가 아니라고 해서.... 일단 아래처럼 땜빵... // 나중에 정리하자.... 25_1013 16:42:12 kku Result := sDef; if CUSTOMER_TYPE = CUSTOMER_HDENG then lbTitle.Caption := RS_HecMonMsg; end; procedure TDlgNotice.SetNotiForm(aNotiType: TNotifyType); begin cpMain.ActiveCard := cdDef; if aNotiType = nftNormal then begin if (CUSTOMER_TYPE = CUSTOMER_SKEC) and (FreeLocalizer <> nil) and ( (FreeLocalizer.LanguageFile = '') or FreeLocalizer.LanguageFile.Contains('412') ) then begin lbTitle.Caption := '보안 정책 알림'; end else lbTitle.Caption := RS_TitleVul; imgTop.Picture.Assign(imgTitles.Items[0].PngImage); Width := 454; Height := 461; lbTitle.Top := 193; lbTitle.Left := 31; mmMsg.Top := 44; mmMsg.Left := 31; mmMsg.Height := 100; lbMode.Left := 31; lbOk.Top := 187; lbOk.Left := 31; imgOk.Top := 187; imgOk.Left := 31; lbSet.Top := 187; lbSet.Left := 243; imgSet.Top := 187; imgSet.Left := 243; lbMsgEx.Top := 163; if pnTop.Visible then begin Height := Height + pnTop.Height; lbTitle.Top := lbTitle.Top + pnTop.Height; mmMsg.Top := mmMsg.Top + pnTop.Height; // lbOk.Top := lbOk.Top + pnTop.Height; // imgOk.Top := imgOk.Top + pnTop.Height; // lbSet.Top := lbSet.Top + pnTop.Height; // imgSet.Top := imgSet.Top + pnTop.Height; lbMsgEx.Top := lbMsgEx.Top + pnTop.Height; end; end else begin if not pnTop.Visible then Height := Height - pnTop.Height; end; end; procedure TDlgNotice.PopupMessage(sJsonData: String); var O: ISuperObject; MsgList: TStringList; sTemp: String; NotiKind: TNotifyKind; NotiType: TNotifyType; StrList: TStringList; LogInfo: TLogInfo; procedure SetOneNomal(bShowTitle: Boolean = false); begin SetOneButtion; lbTitle.Visible := bShowTitle; mmMsg.Font.Color := $635653; mmMsg.Font.Style := mmMsg.Font.Style + [fsBold]; // if not bShowTitle and (NotiType <> nftMin) then // mmMsg.Top := lbTitle.Top; end; procedure SetPrevent(bOneButton: Boolean = true; bReqDevExcept: Boolean = false); begin if bOneButton then begin SetOneButtion; end else if bReqDevExcept then begin imgSet.Tag := 4; SetImgBtn(imgSet, imgSet.Tag); sCmdParam_ := 'RegDevExcept'; end; if NotiType = nftMin then lbTitle.Caption := CM_RS_TitlePreventSimple else lbTitle.Caption := RS_TitlePrevent; mmMsg.Font.Color := $635653; mmMsg.Font.Style := mmMsg.Font.Style + [fsBold]; // MsgList.Add(APP_TITLE); // MsgList.Add('보안정책 위반행위가 탐지되었습니다.'); // MsgList.Add(''); end; var nType: Integer; {$IFDEF _HE_} PO: TPrefModel; {$ENDIF} begin try {$IFDEF _HE_} PO := gMgSvc.ModePolicy; NotiKind := PO.NotifyKind; NotiType := PO.NotifyType; {$ELSE} NotiKind := nfkAll; NotiType := nftNormal; {$ENDIF} // 중복 팝업 방지 25_0923 14:42:19 kku case nType of // 취약 팝업 TYPE_MSG_VUL_OS, TYPE_MSG_VUL_PW, TYPE_MSG_VUL_PW_LAST_CHANGE, TYPE_MSG_VUL_SCAN, TYPE_MSG_VUL_AV, TYPE_MSG_VUL_FW, TYPE_MSG_VUL_SCREEN, TYPE_MSG_VUL_ALLOWACCESS, TYPE_MSG_OLD_WINDOWS : begin Mutex_ := TTgMutex.Create('Global\POP_' + IntToStr(nType)); if Mutex_.MutexState <> msCreateOk then begin Close; exit; end; end; end; ZeroMemory(@LogInfo, SizeOf(LogInfo)); Guard(StrList, TStringList.Create); O := SO(sJsonData); nType := O.I['T']; Guard(MsgList, TStringList.Create); // TTgTrace.T('PopupMessage() .. Type=%d', [O.I['T']]); case nType of TYPE_MSG_SAFEAPPLIED : begin if NotiType = nftMin then lbTitle.Caption := RS_SafeCompletedSimple else lbTitle.Caption := RS_SafeCompleted; MsgList.Add(RS_InitRemoteConn); SetOneNomal(true); end; TYPE_MSG_OLD_WINDOWS : begin if (NotiType = nftACenter) and (CUSTOMER_TYPE = CUSTOMER_ABL) then begin MsgList.Add(Format(RS_MsgVul1_ABL, [RS_OsVer_ABL])); MsgList.Add(RS_MsgVul2_ABL); end else begin MsgList.Add(RS_UnsafeOS); if NotiType <> nftMin then begin MsgList.Add(RS_EOSVersion); MsgList.Add(''); MsgList.Add(RS_NoAllVulCheck); end; SetOneButtion; end; end; TYPE_MSG_VUL_OS : begin if (NotiType = nftACenter) and (CUSTOMER_TYPE = CUSTOMER_ABL) then begin MsgList.Add(Format(RS_MsgVul1_ABL, [RS_OsPatch_ABL])); MsgList.Add(RS_MsgVul2_ABL); end else begin MsgList.Add(RS_NoUpToDateOS); if NotiType <> nftMin then begin if NotiType <> nftACenter then begin MsgList.Add(RS_OSPatchAction1); MsgList.Add(RS_OSPatchAction2); MsgList.Add(RS_OSPatchAction3); end; end; sCmdParam_ := PARAM_GO_WINUPDATE; end; end; TYPE_MSG_VUL_PW : begin if (NotiType = nftACenter) and (CUSTOMER_TYPE = CUSTOMER_ABL) then begin MsgList.Add(Format(RS_MsgVul1_ABL, [RS_UserPw_ABL])); MsgList.Add(RS_MsgVul2_ABL); end else begin MsgList.Add(RS_VulPW1); if NotiType <> nftMin then begin if NotiType <> nftACenter then begin MsgList.Add(RS_VulPW2); MsgList.Add(RS_VulPW3); MsgList.Add(RS_VulPW4); end; end; sCmdParam_ := PARAM_GO_SETPASS; end; end; TYPE_MSG_VUL_PW_LAST_CHANGE : begin MsgList.Add(RS_VulPwDate1); MsgList.Add(''); MsgList.Add(RS_LastChangePw); {$IFDEF _HE_} MsgList.Add(DateTimeToStr(GetLastChangePasswordDT(gMgSvc.ComName, ExtractFileName(gMgSvc.Domain)))); {$ENDIF} if (NotiType <> nftMin) and (NotiType <> nftACenter) then begin MsgList.Add(''); MsgList.Add(RS_VulPwDate2); MsgList.Add(RS_VulPwDate3); MsgList.Add(RS_VulPwDate4); end; sCmdParam_ := PARAM_GO_SETPASS; end; TYPE_MSG_VUL_AV : begin if (NotiType = nftACenter) and (CUSTOMER_TYPE = CUSTOMER_ABL) then begin MsgList.Add(Format(RS_MsgVul1_ABL, [RS_AV_ABL])); MsgList.Add(RS_MsgVul2_ABL); end else begin MsgList.Add(RS_VulAV1); if NotiType <> nftMin then begin if NotiType <> nftACenter then begin MsgList.Add(RS_VulAV2); MsgList.Add(RS_VulAV3); MsgList.Add(RS_VulAV4); end; end; sCmdParam_ := PARAM_GO_ANTIVIRUS; end; end; TYPE_MSG_VUL_FW : begin if (NotiType = nftACenter) and (CUSTOMER_TYPE = CUSTOMER_ABL) then begin MsgList.Add(Format(RS_MsgVul1_ABL, [RS_FW_ABL])); MsgList.Add(RS_MsgVul2_ABL); end else begin MsgList.Add(RS_VulFW1); if NotiType <> nftMin then begin if NotiType <> nftACenter then begin MsgList.Add(RS_VulFW2); MsgList.Add(RS_VulFW3); end; end; {$IFDEF _HE_} if StrToIntDef(gMgSvc.HandleConfig.OsVersion, 7) >= 10 then sCmdParam_ := PARAM_GO_FIREWALL2 else sCmdParam_ := PARAM_GO_FIREWALL; {$ENDIF} end; end; TYPE_MSG_VUL_SCREEN : begin if (NotiType = nftACenter) and (CUSTOMER_TYPE = CUSTOMER_ABL) then begin MsgList.Add(Format(RS_MsgVul1_ABL, [RS_ScrSv_ABL])); MsgList.Add(RS_MsgVul2_ABL); end else begin MsgList.Add(RS_VulScreen1); if NotiType <> nftMin then begin if NotiType <> nftACenter then begin MsgList.Add(RS_VulScreen2); MsgList.Add(RS_VulScreen3); end; end; sCmdParam_ := PARAM_GO_SETSAVER; end; end; TYPE_MSG_VUL_EMPNO : begin MsgList.Add(RS_VulEmpNo1); if NotiType <> nftMin then begin MsgList.Add(RS_VulEmpNo2); MsgList.Add(RS_VulEmpNo3); end; {$IFDEF _HE_} MsgList.Add(RS_InvalidEmpNo + gMgSvc.EmpNo); {$ENDIF} sCmdParam_ := 'ChangeEmpNo'; end; TYPE_MSG_VUL_ALLOWACCESS : begin MsgList.Add(RS_VulAllow1); if NotiType <> nftMin then begin MsgList.Add(RS_VulAllow2); {$IFDEF _HE_} if gMgSvc.IsRestricMac then begin MsgList.Add(''); MsgList.Add(RS_NoAccessMAC); MsgList.Add(RS_RequestManager); end else if gMgSvc.IsRestricDate then begin MsgList.Add(''); MsgList.Add(RS_ExpireConnDate); end; {$ENDIF} MsgList.Add(''); end; SetOneNomal; end; TYPE_MSG_VUL_SCAN : begin MsgList.Add(RS_PersonalInfoOver); MsgList.Add(''); MsgList.Add(RS_PersonalInfoOver1); MsgList.Add(RS_PersonalInfoOver2); sCmdParam_ := 'CttSch'; end; TYPE_MSG_NOTIFICATION : begin SetOneButtion; lbTitle.Caption := RS_Noti; MsgList.Text := StringReplace(O.S['D'], 'ㅄ', #13#10, [rfReplaceAll]); end; TYPE_MSG_UPDATE : begin // tClose.Enabled := false; SetOneButtion; lbTitle.Caption := RS_UpdateCompleted; MsgList.Add(RS_MsgUpdateCompleted); {$IFDEF _HE_} MsgList.Add(Format(RS_FMT_Version, [SdkVersion])); {$ENDIF} // MsgList.Add(''); // MsgList.Add(RS_UpdateReboot); end; TYPE_MSG_AFTERREPORT : begin SetOneButtion; lbTitle.Caption := RS_WriteReport; MsgList.Add(RS_MsgWriteReport1); MsgList.Add(RS_MsgWriteReport2); end; TYPE_MSG_CTTSCH_START : begin SetOneButtion; lbTitle.Caption := RS_CTTSCH; MsgList.Text := RS_CTTSCH_START; end; TYPE_MSG_CTTSCH_COMPLETE : begin SetOneButtion; lbTitle.Caption := RS_CTTSCH; MsgList.Add(RS_CTTSCH_COMPLETE); MsgList.Add(''); SplitString(O.S['D'], '|', StrList, true); if StrList.Count > 1 then begin MsgList.Add(RS_CTTSCH_TILE + ' : ' + StrList[0]); MsgList.Add(RS_CTTSCH_RESULT_COUNT + ' : ' + StrList[1]); if IsHD then begin var nCnt: Integer := StrToIntDef(StrList[1], 0); if nCnt > 0 then SetPiResult4HEC(nCnt); end; end; end; TYPE_EMPTY_PERSONAL_INFO : begin Mutex_ := TTgMutex.Create('Global\EPI_250412'); if Mutex_.MutexState <> msCreateOk then begin Close; exit; end; sCmdParam_ := 'PersonalInfo'; SetPrevent(false); lbTitle.Caption := RS_PerInfoCheck; MsgList.Add(RS_NotFoundPerInfo); MsgList.Add(''); MsgList.Add(RS_RegPerInfo); end; TYPE_MSG_CTTSCH_VULMODE : begin sCmdParam_ := 'CttSch'; SetPrevent(false); lbTitle.Caption := RS_CTTSCH; MsgList.Add(RS_CttSchVulModeMsg1); MsgList.Add(RS_CttSchVulModeMsg2); MsgList.Add(RS_CttSchVulModeMsg3); end; TYPE_MSG_PREVENT_CLIPBOARD : begin SetPrevent; SplitString(O.S['D'], '|', StrList, true); // Req // 여기서부터 IDE가 이상해진다. SplitString() 이후 25_0219 15:54:59 kku if (StrList.Count > 1) and (StrList[1] = 'M') then MsgList.Add(CM_RS_MonMsg(RS_DetectCB)) else MsgList.Add(CM_RS_BlockMsg(RS_ClipCut)); if StrList.Count > 0 then begin MsgList.Add(''); case StrList.Count of 2 : if (StrList[1] <> 'M') and (StrList[1] <> '') then MsgList.Add(RS_FoundCtt + StrList[1]); 3 : if StrList[2] <> '' then MsgList.Add(RS_FoundCtt + StrList[2]); end; MsgList.Add(Format(RS_FMT_ClipCutApp, [StrList[0]])); end; end; TYPE_MSG_MONITOR_USB : begin SetOneButtion; SplitString(O.S['D'], '|', StrList, true); MsgList.Add(CM_RS_MonMsg(RS_DetectRemoveableDev)); if CUSTOMER_TYPE = CUSTOMER_LOTTEMART then begin // todo : 2025년 12월 이후에 삭제 필요 25_0911 14:38:57 kku var wYear, wMonth, wDay: WORD; DecodeDate(Now, wYear, wMonth, wDay); if (wYear < 2026) and (wMonth < 12) then begin var CompModel: TCompanyModel; Guard(CompModel, TCompanyModel.Create); CompModel.Load; if CompModel.SvrDestList.Count > 0 then begin if Pos('https://10.167.1.168:8443', CompModel.SvrDestList[0]) = 1 then begin MsgList.Add(''); MsgList.Add(Format(RS_UsbBLockNoti1, [2025, 12, 1])); MsgList.Add(RS_UsbBLockNoti2); MsgList.Add(RS_UsbBLockNoti3); end; end; end; end; if StrList.Count > 1 then begin MsgList.Add(''); MsgList.Add('Drive : ' + StrList[0]); MsgList.Add('Type : ' + StrList[1]); end; end; TYPE_MSG_PREVENT_USBDISCONN : begin // 중복 팝업 차단 23_1023 15:29:39 kku sTemp := StringReplace(O.S['D'], ':', '_', [rfReplaceAll]); sTemp := StringReplace(sTemp, '\', '_', [rfReplaceAll]); sTemp := 'Global\PV_' + sTemp; Mutex_ := TTgMutex.Create(sTemp); if Mutex_.MutexState <> msCreateOk then begin Close; exit; end; {$IFDEF _HE_} if IsApproveSupport and gMgSvc.UseApproval then SetPrevent(gMgSvc.IsNewApi and (not PO.AbleUsbExceptReq and not PO.UsbApproval), true) else SetPrevent(gMgSvc.IsNewApi and not PO.AbleUsbExceptReq, true); {$ELSE} SetOneButtion; {$ENDIF} SplitString(O.S['D'], '*9*', StrList, true); // 구분자 주의 if StrList.Count > 4 then begin {$IFDEF _HE_} ReqDevExceptInfo_.sDevName := Format('%s, Drive=%s (%s), Type=%s', [StrList[2], StrList[0], StrList[1], StrList[3]]); ReqDevExceptInfo_.sSerial := StrList[4]; ReqDevExceptInfo_.ReqDevType := rdtUsbDrive; {$ENDIF} end; {$IFDEF _HE_} case PO.UsbBlockKind of ubkNone : ; ubkBlock : begin MsgList.Add(CM_RS_BlockMsg(RS_USBCut)); MsgList.Add(''); MsgList.Add('Serial : ' + ReqDevExceptInfo_.sSerial); end; ubkReadOnly : MsgList.Add(RS_USB_RO); end; {$ENDIF} if NotiType <> nftMin then begin MsgList.Add(''); if StrList.Count > 4 then begin MsgList.Add('Name : ' + StrList[2]); if not IsHD then MsgList.Add('Type : ' + StrList[3]); MsgList.Add(Format('Drive : %s (%s)', [StrList[0], StrList[1]])); end; end; end; TYPE_MSG_PREVENT_ROUTERCHANGE : begin SetPrevent; MsgList.Add(CM_RS_BlockMsg(RS_RouteCut)); if NotiType <> nftMin then begin SplitString(O.S['D'], '|', StrList); if StrList.Count > 2 then begin MsgList.Add(''); MsgList.Add('- DestIP : ' + StrList[0]); MsgList.Add(Format('- IP Info : %s (%s)', [StrList[1], StrList[2]])); end; end; end; TYPE_MSG_PREVENT_WARTERMARK : begin SetPrevent; MsgList.Add(RS_FWater); MsgList.Add(Format(' - File : %s', [ExtractFileName(O.S['D'])])); if NotiType <> nftMin then MsgList.Add(Format(' - Path : %s', [ExtractFilePath(O.S['D'])])); end; TYPE_MSG_PREVENT_FILECHANGE : begin sTemp := StringReplace(O.S['D'], ':', '_', [rfReplaceAll]); sTemp := StringReplace(sTemp, '\', '_', [rfReplaceAll]); sTemp := 'Global\PV_' + sTemp; Mutex_ := TTgMutex.Create(sTemp); if Mutex_.MutexState <> msCreateOk then begin Close; exit; end; SetPrevent; MsgList.Add(RS_FWatch); MsgList.Add(''); SplitString(O.S['D'], '|', StrList); if (StrList.Count > 2) and (StrList[1] <> '') then begin MsgList.Add(RS_FoundCtt + StrList[1]); // 전체 검출 수 ?? StrList[2] end; if StrList.Count > 0 then begin if Pos('[', StrList[0]) > 0 then begin // 새로운 형식 추가 var nPos: Integer := Pos(']', StrList[0]); if nPos > 0 then sTemp := Copy(StrList[0], nPos + 2, Length(StrList[0]) - nPos); // sTemp := Trim(ExtrLastDelimiterStr(StrList[0], ']')); MsgList.Add(Format(' File : %s', [ExtrLastDelimiterStr(sTemp, '\')])); if NotiType <> nftMin then MsgList.Add(Format(' Path : %s', [ExtractFilePath(sTemp)])); MsgList.Add(Format(' Event : %s', [GetCapsuleStr('[', ']', StrList[0])])); end else begin MsgList.Add(Format(' File : %s', [ExtractFileName(StrList[0])])); if NotiType <> nftMin then MsgList.Add(Format(' Path : %s', [ExtractFilePath(StrList[0])])); end; end; end; TYPE_MSG_PREVENT_FILEWRITE : begin sTemp := StringReplace(O.S['D'], ':', '_', [rfReplaceAll]); sTemp := StringReplace(sTemp, '\', '_', [rfReplaceAll]); sTemp := 'Global\PV_' + sTemp; Mutex_ := TTgMutex.Create(sTemp); if Mutex_.MutexState <> msCreateOk then begin Close; exit; end; SetPrevent; MsgList.Add(CM_RS_BlockMsg(RS_FCut)); MsgList.Add(''); SplitString(O.S['D'], '|', StrList); if (StrList.Count > 2) and (StrList[1] <> '') then begin MsgList.Add(RS_FoundCtt + StrList[1]); // 전체 검출 수 ?? StrList[2] end; if StrList.Count > 0 then begin MsgList.Add(Format(' File : %s', [ExtractFileName(StrList[0])])); if NotiType <> nftMin then begin MsgList.Add(Format(' Path : %s', [ExtractFilePath(StrList[0])])); MsgList.Add(RS_FDelAfter); end; end; end; TYPE_MSG_PREVENT_TEMPCONN : begin SetPrevent; MsgList.Add(RS_TempConnect); if NotiType <> nftMin then MsgList.Add(''); {$IFDEF _HE_} MsgList.Add(Format(RS_TempConnectExit, [gMgSvc.PrefModel.TemporaryConnMin])); {$ENDIF} end; TYPE_MSG_PREVENT_BLACKAPP : begin SetPrevent; SplitString(O.S['D'], '|', StrList); if StrList.Count > 0 then begin MsgList.Add(Format('%s', [StrList[0]])); if NotiType <> nftMin then MsgList.Add(''); if StrList.Count > 1 then MsgList.Add(CM_RS_BlockMsg(RS_TerminateApp)) else MsgList.Add(CM_RS_MonMsg(RS_MonitorApp)); end; end; TYPE_MSG_PREVENT_WHITEAPP : begin SetPrevent; MsgList.Add(RS_ExeWhiteApp1); if NotiType <> nftMin then begin MsgList.Add(RS_ExeWhiteApp2); MsgList.Add(''); end; MsgList.Add(Format('%s', [O.S['D']])); end; TYPE_MSG_PREVENT_FILEMASK : begin SetPrevent; MsgList.Add(RS_FMask); MsgList.Add(Format(' - Path : %s', [O.S['D']])); if NotiType <> nftMin then MsgList.Add(RS_FDelAfter); end; TYPE_MSG_PREVENT_URL : begin SplitString(O.S['D'], '|', StrList); if StrList.Count > 1 then begin MsgList.Add(CM_RS_BlockMsg(RS_URLCut)); if CompareText(StrList[0], EMPTY_URL_MSG) = 0 then SetOneButtion else begin {$IFDEF _HE_} if IsApproveSupport and gMgSvc.UseApproval then SetPrevent(gMgSvc.IsNewApi and not PO.WebUrlApproval, true) else {$ENDIF} SetOneButtion; end; sCmdParam_ := 'RegUrlExcept'; ReqDevExceptInfo_.sSerial := StrList[0]; end else begin MsgList.Add(CM_RS_MonMsg(RS_URLMon)); SetPrevent; end; if StrList.Count > 0 then begin var sMtx: String := StringReplace(StrList[0], ':', '', [rfReplaceAll]); sMtx := StringReplace(sMtx, '/', '', [rfReplaceAll]); Mutex_ := TTgMutex.Create(sMtx); MsgList.Add(Format(RS_FMT_URLCut, [StrList[0]])); end; end; TYPE_MSG_PREVENT_INSTALL : begin SetPrevent(false); SplitString(O.S['D'], '|', StrList); if CUSTOMER_TYPE = CUSTOMER_SANKYO then begin lbTitle.Caption := RS_DetectAppInstSankyo; MsgList.Add(RS_DetectAppInstSankyo2); end else MsgList.Add(RS_DetectAppInst); if StrList.Count > 1 then MsgList.Add(RS_DeleteInstApp); if NotiType <> nftMin then begin if StrList.Count > 1 then begin MsgList.Add(''); MsgList.Add(RS_DeleteInstAppMsg1); MsgList.Add(RS_DeleteInstAppMsg2); end else begin MsgList.Add(''); MsgList.Add(RS_DetectAppInst1); MsgList.Add(RS_DetectAppInst2); end; end; if StrList.Count > 0 then MsgList.Add(Format(' - Name : %s', [StrList[0]])); sCmdParam_ := PARAM_GO_UNINSTALL; end; TYPE_MSG_PREVENT_WIFI : begin SetPrevent; MsgList.Add(CM_RS_MonMsg(RS_DetectWIFI)); SplitString(O.S['D'], '|', StrList); MsgList.Add(Format(' - Name : %s', [StrList[0]])); MsgList.Add(Format(' - IP : %s', [StrList[1]])); MsgList.Add(Format(' - MAC : %s', [StrList[2]])); {$IFDEF _HE_} if StrList.Count > 3 then begin if NotiType <> nftMin then MsgList.Add(''); MsgList.Add(CM_RS_BlockMsg(RS_AfterCut)); end; {$ENDIF} end; TYPE_MSG_PREVENT_BLUETOOTH : begin {$IFDEF _HE_} if IsApproveSupport and gMgSvc.UseApproval then SetPrevent((gMgSvc.IsNewApi and not PO.AbleBtExceptReq and not PO.BtApproval) or (CUSTOMER_TYPE = CUSTOMER_HDENG) or (CUSTOMER_TYPE = CUSTOMER_GEC), true) else SetPrevent((gMgSvc.IsNewApi and not PO.AbleBtExceptReq) or (CUSTOMER_TYPE = CUSTOMER_HDENG) or (CUSTOMER_TYPE = CUSTOMER_GEC), true); {$ELSE} SetPrevent(true, true); {$ENDIF} MsgList.Add(CM_RS_MonMsg(RS_DetectBlue)); SplitString2(O.S['D'], '|', StrList, true); {$IFDEF _HE_} ReqDevExceptInfo_.ReqDevType := rdtBluetooth; // ReqDevExceptInfo_.sDevName := Format('Ts (%s)', [StrList[0], StrList[1]]); // 이거 왜 이렇게 했는지 기억이 안남... 25_0218 08:50:41 kku ReqDevExceptInfo_.sDevName := Format('%s, %s', [StrList[0], StrList[1]]); try ReqDevExceptInfo_.sSerial := StrList[2]; except ReqDevExceptInfo_.sSerial := 'Unknown'; end; {$ENDIF} MsgList.Add(Format(' - Name : %s', [StrList[0]])); MsgList.Add(Format(' - Type : %s', [StrList[1]])); // if StrList.Count > 2 then // MsgList.Add(Format(' - Adress : %s', [StrList[2]])); if StrList.Count > 3 then MsgList.Add(CM_RS_BlockMsg(RS_BlueCut)); end; TYPE_MSG_PREVENT_MTP : begin {$IFDEF _HE_} if IsApproveSupport and gMgSvc.UseApproval then SetPrevent((gMgSvc.IsNewApi and not PO.AbleMtpExceptReq and not PO.MtpApproval) or (CUSTOMER_TYPE = CUSTOMER_HDENG) or (CUSTOMER_TYPE = CUSTOMER_GEC), true) else SetPrevent((gMgSvc.IsNewApi and not PO.AbleMtpExceptReq) or (CUSTOMER_TYPE = CUSTOMER_HDENG) or (CUSTOMER_TYPE = CUSTOMER_GEC), true); {$ELSE} SetPrevent(true, true); {$ENDIF} SplitString2(O.S['D'], '|', StrList, true); {$IFDEF _HE_} ReqDevExceptInfo_.ReqDevType := rdtMtp; ReqDevExceptInfo_.sDevName := Format('%s (%s)', [StrList[0], StrList[1]]); ReqDevExceptInfo_.sSerial := StrList[2]; if PO.MtpBlockKind = ubkReadOnly then MsgList.Add(CM_RS_MonMsg(RS_DetectMTP + ' (ReadOnly)')) else {$ENDIF} MsgList.Add(CM_RS_MonMsg(RS_DetectMTP)); SplitString(O.S['D'], '|', StrList, true); MsgList.Add(Format(' - Name : %s', [StrList[0]])); MsgList.Add(Format(' - Desc : %s', [StrList[1]])); if StrList.Count > 2 then MsgList.Add(Format(' - Serial : %s', [StrList[2]])); if StrList.Count > 3 then MsgList.Add(CM_RS_BlockMsg(RS_MTPCut)); end; TYPE_MSG_PREVENT_PRINTER : begin SetPrevent; SplitString(O.S['D'], '|', StrList, true); if StrList.Count > 3 then begin if StrList[3] = 'WT' then MsgList.Add(RS_NotSupportWT) else if StrList[3] = 'PTR' then MsgList.Add(RS_NotSupportPTR) else if StrList[3] = 'PTR_IP' then MsgList.Add(RS_NotSupportPTR_IP) else if StrList[3] = 'SHARE' then begin MsgList.Add(RS_SharePcPrintBlock); var sMtx: String := 'Global\' + StrsReplace(StrList[0], ['\', ' ', ':'], ''); Mutex_ := TTgMutex.Create(sMtx); if Mutex_.MutexState <> msCreateOk then begin Close; exit; end; end else if StrList[3] = 'WSD' then MsgList.Add(RS_WsdPrintBlock) else if StrList[3] = 'NoTCPIP' then MsgList.Add(RS_NoTcpIpPrintBlock) else if StrList[3] = 'PSAVING' then MsgList.Add(RS_PwSavingPrintBlock) else if (StrList[3] = 'APP') and (StrList.Count > 4) then MsgList.Add(RS_NotSupportAPP + StrList[4]) else if (StrList[3] = 'URL') and (StrList.Count > 4) then MsgList.Add(RS_NotSupportURL + StrList[4]) else if (StrList[3] = 'CTT') and (StrList.Count > 4) and (StrList[4] <> '') then MsgList.Add(RS_FoundCtt + StrList[4]); end else MsgList.Add(CM_RS_MonMsg(RS_DetectPrinter)); MsgList.Add(Format(' - Printer : %s', [StrList[0]])); MsgList.Add(Format(' - Document : %s', [StrList[1]])); if StrList.Count > 2 then begin MsgList.Add(''); MsgList.Add(CM_RS_BlockMsg(RS_PrinterCut)); end; end; TYPE_MSG_EVENT_PRINTWATER : begin SetOneButtion; Mutex_ := TTgMutex.Create('Global\' + StringReplace(O.S['D'], '\', '', [rfReplaceAll])); SplitString(O.S['D'], '|', StrList, true); lbTitle.Caption := RS_PrintWater1; MsgList.Add(RS_PrintWater2); if StrList.Count > 1 then begin MsgList.Add(''); MsgList.Add(Format(' - Printer : %s', [StrList[0]])); MsgList.Add(Format(' - Document : %s', [StrList[1]])); {$IFDEF _HE_} if not gMgSvc.IsNewApi then gMgSvc.SendEventLog(URI_USER_ACTION, PREVENT_PRINTER_WATERMARK, Format('Printer : %s, Document : %s', [StrList[0], StrList[1]])); {$ENDIF} // MsgList.Add('프로그램 : ' + StrList[0]); // MsgList.Add('문서이름 : ' + ExtractFileName(StrList[1])); // gMgSvc.SendEventLog(URI_USER_ACTION, PREVENT_PRINTER_WARTERMARK, Format('Process : %s, DocName : %s', [StrList[0], StrList[1]])) end; end; // TYPE_MSG_EVENT_ATTACHFILE : // 지금은 모니터링만 씀 22_1028 14:08:59 kku // begin // SetOneButtion; // Mutex_ := TTgMutex.Create('Global\' + StringReplace(O.S['D'], '\', '', [rfReplaceAll])); // SplitString(O.S['D'], '|', StrList, true); // // MsgList.Add('파일 첨부, 사용이 감지 되었습니다.'); // if StrList.Count > 1 then // begin // MsgList.Add(''); // MsgList.Add('프로그램 : ' + StrList[0]); // MsgList.Add('파일이름 : ' + ExtractFileName(StrList[1])); // end; // end; TYPE_MSG_PREVENT_ATTACHFILE : begin // SplitString(O.S['D'], '|', StrList, true); var OInfo: ISuperObject := SO(O.S['D']); var sPath: String := ''; sPath := OInfo.S['Path']; if IsApproveSupport and gMgSvc.UseApproval and not OInfo.B['M'] then SetPrevent((gMgSvc.IsNewApi and not PO.ExFApproval) or (CUSTOMER_TYPE = CUSTOMER_HDENG) or (CUSTOMER_TYPE = CUSTOMER_GEC), true) else SetOneButtion; ReqDevExceptInfo_.ReqDevType := rdtExpFile; var REnt: TRecentFnd; var OA: ISuperObject := TSuperObject.Create(stArray); var OFile := SO; OFile.S['filePath'] := sPath; OFile.S['hash'] := OInfo.S['Hash']; if OFile.S['hash'] = '' then OFile.S['hash'] := GetFileToSha1Str_BS1(sPath); if gMgSvc.GetRecentFnd(sPath, REnt) then OFile.S['ruleViolated'] := REnt.sFounds; if OInfo.S['OutDir'] <> '' then OFile.S['OD'] := OInfo.S['OutDir']; OA.AsArray.Add(OFile); ReqDevExceptInfo_.sSerial:= OA.AsJson; if OInfo.S['URL'] <> '' then ReqDevExceptInfo_.sDevName := OInfo.S['URL'] else ReqDevExceptInfo_.sDevName := OInfo.S['PName']; Mutex_ := TTgMutex.Create('Global\' + StringReplace(OInfo.S['PName'] + '|' + OInfo.S['Path'], '\', '', [rfReplaceAll])); if OInfo.B['M'] then begin // 음.. 지금 기분이 뇌를 쓰고 싶지 않음..22_1121 14:26:23 kku MsgList.Add(CM_RS_MonMsg(RS_DetectFileUse)); end else MsgList.Add(CM_RS_BlockMsg(RS_DetectFileBlock)); {$IFDEF _HE_} if gMgSvc.GetRecentFnd(sPath, REnt) then begin if (REnt.sFounds <> 'File size exceeded.') and (REnt.sFounds <> 'Blocked by file extension policy.') and (REnt.sFounds <> 'Blocked by file size policy.') then begin MsgList.Add(RS_FoundCtt + REnt.sFounds); end else begin MsgList.Add(''); MsgList.Add(REnt.sFounds); end; end; {$ENDIF} MsgList.Add(''); MsgList.Add(RS_Program + OInfo.S['PName']); MsgList.Add(RS_FileName + ExtractFileName(OInfo.S['Path'])); var sDir: String := ExtractFilePath(OInfo.S['Path']); if sDir <> '' then MsgList.Add(RS_FilePath + sDir); end; TYPE_MSG_EVENT_DRM_OPEN, TYPE_MSG_EVENT_DRM_OPEN_NO_MODIFY : begin SetOneButtion; Mutex_ := TTgMutex.Create('Global\' + StringReplace(O.S['D'], '\', '', [rfReplaceAll])); SplitString(O.S['D'], '|', StrList, true); lbTitle.Caption := RS_OpenDrm1; MsgList.Add(RS_OpenDrm2); if nType = TYPE_MSG_EVENT_DRM_OPEN_NO_MODIFY then MsgList.Add(RS_OpenDrm3); if StrList.Count > 1 then begin MsgList.Add(''); MsgList.Add(RS_Program + StrList[0]); MsgList.Add(RS_FileName + ExtractFileName(StrList[1])); if NotiType = nftNormal then MsgList.Add(RS_FilePath + ExtractFilePath(StrList[1])); // {$IFDEF _HE_} // gMgSvc.SendEventLog(URI_USER_ACTION, MONITOR_DRM_OPEN, Format('Process : %s, DocName : %s', [StrList[0], StrList[1]]), false) // {$ENDIF} end; end; TYPE_MSG_EVENT_DRM_BLOCK : begin SetOneButtion; Mutex_ := TTgMutex.Create('Global\' + StringReplace(O.S['D'], '\', '', [rfReplaceAll])); SplitString(O.S['D'], '|', StrList, true); lbTitle.Caption := RS_OpenDrm1; MsgList.Add(RS_BlockDrm1); MsgList.Add(RS_BlockDrm2); if StrList.Count > 1 then begin MsgList.Add(''); MsgList.Add(RS_Program + StrList[0]); MsgList.Add(RS_FileName + ExtractFileName(StrList[1])); if NotiType = nftNormal then MsgList.Add(RS_FilePath + ExtractFilePath(StrList[1])); {$IFDEF _HE_} gMgSvc.SendEventLog(URI_USER_ACTION, PREVENT_DRM_OPEN, Format('Process : %s, DocName : %s', [StrList[0], StrList[1]])) {$ENDIF} end; end; TYPE_MSG_EVENT_DRM_BLOCK_CT : begin SetOneButtion; Mutex_ := TTgMutex.Create('Global\' + StringReplace(O.S['D'], '\', '', [rfReplaceAll])); SplitString(O.S['D'], '|', StrList, true); lbTitle.Caption := RS_OpenDrm1; MsgList.Add(RS_BlockDrm1); MsgList.Add(RS_BlockDrm3); if StrList.Count > 1 then begin MsgList.Add(''); MsgList.Add(RS_Program + StrList[0]); MsgList.Add(RS_FileName + ExtractFileName(StrList[1])); if NotiType = nftNormal then MsgList.Add(RS_FilePath + ExtractFilePath(StrList[1])); {$IFDEF _HE_} gMgSvc.SendEventLog(URI_USER_ACTION, PREVENT_DRM_OPEN, Format('Process : %s, DocName : %s', [StrList[0], StrList[1]])) {$ENDIF} end; end; TYPE_MSG_PREVENT_FILEDRMENC : begin SetOneButtion; lbTitle.Caption := RS_EncDrm1; MsgList.Add(RS_EncDrm2); MsgList.Add(''); SplitString(O.S['D'], '|', StrList); if (StrList.Count > 2) and (StrList[1] <> '') then begin MsgList.Add(RS_FoundCtt + StrList[1]); // 전체 검출 수 ?? StrList[2] end; if StrList.Count > 0 then begin MsgList.Add(Format(' %s : %s', [RS_DocName, ExtractFileName(StrList[0])])); if NotiType <> nftMin then MsgList.Add(Format(' Path : %s', [ExtractFilePath(StrList[0])])); end; end; TYPE_MSG_PREVENT_FILERENAME : begin SetOneButtion; SplitString(O.S['D'], '|', StrList, true); if StrList.Count > 3 then MsgList.Add(CM_RS_MonMsg(RS_DetectFRename)) else MsgList.Add(CM_RS_BlockMsg(RS_BlockFRename)); MsgList.Add(''); if StrList.Count > 2 then begin MsgList.Add(RS_OrgName + StrList[0]); MsgList.Add(RS_ChgName + StrList[1]); MsgList.Add(RS_FilePath + StrList[2]); end; end; TYPE_MSG_PREVENT_SHAREDFOLDER : begin SetOneButtion; SplitString(O.S['D'], '|', StrList, true); if StrList.Count > 1 then MsgList.Add(CM_RS_BlockMsg(RS_BlockShareFolder)) else MsgList.Add(CM_RS_MonMsg(RS_DetectShareFolder)); MsgList.Add(''); if StrList.Count > 0 then MsgList.Add(StrList[0]); end; TYPE_MSG_PREVENT_CAPAPP : begin SplitString(O.S['D'], '|', StrList, true); if IsApproveSupport and gMgSvc.UseApproval and (StrList.Count > 1) then SetPrevent((gMgSvc.IsNewApi and not PO.CapApproval) or IsHD, true) else SetOneButtion; if IsHD then begin mmMsg.Font.Size := 11; mmMsg.Font.Style := mmMsg.Font.Style + [fsBold]; mmMsg.Height := 55; // lbMsgEx.Top := 84; lbTitle.Caption := ''; //'허용된 캡쳐 App 이 아닙니다'; MsgList.Add(''); MsgList.Add(RS_DetectCappAppHec); lbMsgEx.Visible := true; end else begin if StrList.Count > 1 then MsgList.Add(RS_BlockCappApp) else MsgList.Add(RS_DetectCappApp); MsgList.Add(''); if StrList.Count > 0 then MsgList.Add(StrList[0]); sCmdParam_ := 'CapAppExcept'; ReqDevExceptInfo_.sSerial := StrList[0]; end; end; TYPE_MSG_MONITOR_CDROM : begin SetOneButtion; MsgList.Add(CM_RS_MonMsg(RS_DetectCdrom)); MsgList.Add(''); MsgList.Add('Type : CD/DVD'); MsgList.Add('Drive : ' + O.S['D']); end; TYPE_MSG_MONITOR_HARDDISK : begin SetOneButtion; MsgList.Add(RS_DetectDevice); MsgList.Add(''); MsgList.Add('Type : Fixed Disk'); MsgList.Add('Name : ' + O.S['D']); end; TYPE_MSG_PREVENT_CDROM : begin {$IFDEF _HE_} if IsApproveSupport and gMgSvc.UseApproval then SetPrevent((gMgSvc.IsNewApi and not PO.AbleCdExceptReq and not PO.CdApproval) or (CUSTOMER_TYPE = CUSTOMER_HDENG) or (CUSTOMER_TYPE = CUSTOMER_GEC), true) else SetPrevent((gMgSvc.IsNewApi and not PO.AbleCdExceptReq) or (CUSTOMER_TYPE = CUSTOMER_HDENG) or (CUSTOMER_TYPE = CUSTOMER_GEC), true); {$ELSE} SetPrevent(true, true); {$ENDIF} SplitString(O.S['D'], '|', StrList, true); if StrList.Count > 2 then begin {$IFDEF _HE_} ReqDevExceptInfo_.sDevName := Format('%s, Drive=%s', [StrList[1], StrList[0]]); ReqDevExceptInfo_.sSerial := StrList[2]; ReqDevExceptInfo_.ReqDevType := rdtCdrom; {$ENDIF} end; MsgList.Add(CM_RS_BlockMsg(RS_CDROMCut)); if NotiType <> nftMin then begin MsgList.Add(''); if StrList.Count > 1 then begin MsgList.Add('Name : ' + StrList[1]); MsgList.Add('Type : CD/DVD'); MsgList.Add(Format('Drive : %s', [StrList[0]])); end; end; end; TYPE_MSG_OUTLOOK_CATCH : begin SetOneButtion; SplitString(O.S['D'], '|', StrList, true); if StrList.Count < 5 then begin MsgList.Add(CM_RS_MonMsg(RS_OutlookMonMsg)); end else begin if StrList[0] = PREVENT_OUTLOOK_BODY then MsgList.Add(CM_RS_BlockMsg(RS_OutlookBlockMsg)) else if StrList[0] = PREVENT_OUTLOOK_MASKING then MsgList.Add(CM_RS_MonMsg(RS_OutlookMaskMsg)) else if StrList[0] = MONITOR_OUTLOOK_BODY then MsgList.Add(CM_RS_MonMsg(RS_OutlookMonMsg)); MsgList.Add(''); if StrList[1] <> '' then MsgList.Add(RS_FoundCtt + StrList[1]); MsgList.Add(RS_TO + StrList[2]); if StrList[3] <> '' then MsgList.Add(RS_CC + StrList[3]); MsgList.Add(RS_TITLE + StrList[4]); end; end; TYPE_MSG_OUTLOOK_BLOCK : begin Mutex_ := TTgMutex.Create('Global\OutlookBlk'); if Mutex_.MutexState <> msCreateOk then begin Close; exit; end; sCmdParam_ := 'OutlookAddin'; lbTitle.Caption := RS_OutlookSecu; // MsgList.Add(RS_OutlookBlockApp); // MsgList.Add(''); MsgList.Add(CM_RS_MonMsg(RS_OutlookBlockAppMsg1)); MsgList.Add(RS_OutlookBlockAppMsg2); end; TYPE_MSG_OUTLOOK_ADDIN_OK : begin SetOneButtion; lbTitle.Caption := RS_OutlookSecu; MsgList.Add(CM_RS_MonMsg(RS_OutlookSecuMsg)); end; TYPE_MSG_RELEASE_QUARANTINE_FILE : begin SetOneButtion; lbTitle.Caption := RS_RELEASE_FILE_QUARANTINE; MsgList.Add(RS_RELEASE_QUARANTINE); MsgList.Add(''); MsgList.Add(O.S['D']); end; TYPE_MSG_MTP_WRITE_BLOCK : begin SetOneButtion; SplitString(O.S['D'], '|', StrList, true); if StrList.Count > 1 then begin MsgList.Add(RS_BLOCK_MTP_WRITE); // MsgList.Add(''); // MsgList.Add('Path : ' + StrList[1]); end; end; TYPE_CHANGE_MODE : begin SetOneButtion; lbTitle.Caption := RS_ChangeMode; MsgList.Add(''); MsgList.Add(O.S['D']); end; TYPE_MSG_MONITOR_FILEOPER : begin SetOneButtion; O := SO(O.S['D']); var sMsg: String; // TEvtType = (etCreate, etCopy, etMove, etDelete, etRename); case O.I['E'] of 0 : sMsg := RS_FileCreateMon; 1 : sMsg := RS_FileCopyMon; 2 : sMsg := RS_FileMoveMon; 3 : sMsg := RS_FileDeleteMon; // 4 : sMsg := '파일 이름변경이 감지 되었습니다.'; else sMsg := RS_FileRenameMon; end; if O.B['N'] then sMsg := RS_ShFolder + ' ' + sMsg; MsgList.Add(sMsg); MsgList.Add(''); MsgList.Add(' - File : ' + ExtractFileName(O.S['D'])); MsgList.Add(' - Path : ' + ExtractFilePath(O.S['D'])); end; TYPE_MSG_PREVENT_FILEOPER : begin SetOneButtion; O := SO(O.S['D']); var sMsg: String; // TEvtType = (etCreate, etCopy, etMove, etDelete, etRename); case O.I['E'] of 0 : sMsg := RS_FileCreateBlk; 1 : sMsg := RS_FileCopyBlk; 2 : sMsg := RS_FileMoveBlk; 3 : sMsg := RS_FileDeleteBlk; // 4 : sMsg := '파일 이름변경이 차단 되었습니다.'; else sMsg := RS_FileRenameBlk; end; if O.B['N'] then sMsg := RS_ShFolder + ' ' + sMsg; MsgList.Add(sMsg); MsgList.Add(''); MsgList.Add(' - File : ' + ExtractFileName(O.S['D'])); MsgList.Add(' - Path : ' + ExtractFilePath(O.S['D'])); end; TYPE_MSG_PREVENT_TETHERING : begin SetOneButtion; MsgList.Add(CM_RS_BlockMsg(RS_BlockTethering)); MsgList.Add(''); SplitString(O.S['D'], '|', StrList, true); if StrList.Count > 1 then begin MsgList.Add('Name : ' + StrList[0]); MsgList.Add('IP : ' + StrList[1]); end; end; TYPE_MSG_APP_SCREEN_RECORD : begin SetOneButtion; MsgList.Add(RS_MsgAppScrRcd); MsgList.Add(''); MsgList.Add(RS_DetectApp + O.S['D']); end; TYPE_MSG_MONITOR_APP : begin SetOneButtion; O := SO(O.S['D']); if O.B['E'] then MsgList.Add(RS_MonitorApp) else MsgList.Add(RS_TerminateApp); MsgList.Add(''); MsgList.Add('Name : ' + O.S['PName']); end; TYPE_REQ_APPROVAL : begin SetPrevent(false); lbTitle.Caption := RS_ReqApproval; case CUSTOMER_TYPE of CUSTOMER_SHSC, CUSTOMER_SHCI : lbOk.Caption := RS_Hold; end; SplitString(O.S['D'], '|', StrList, true); if StrList.Count > 1 then begin sCmdParam_ := gMgSvc.DestIPort + StrList[1]; lbSet.Caption := RS_Confirm; case StrToIntDef(StrList[0], -1) of 1, 12 : // 출력 begin case CUSTOMER_TYPE of CUSTOMER_SHSC, CUSTOMER_SHCI : begin MsgList.Add(RS_MsgPrtApproval_SH); MsgList.Add(''); end; else begin MsgList.Add(RS_PrtApproval); MsgList.Add(''); MsgList.Add(RS_MsgPrtApproval); end; end; end; 2 : begin MsgList.Add(RS_UsbExcept); MsgList.Add(''); MsgList.Add(RS_MsgUsbExcept); end; 3 : begin MsgList.Add(RS_UrlExcept); MsgList.Add(''); MsgList.Add(RS_MsgUrlExcept); end; 4 : // DRM 복호화 begin MsgList.Add(RS_DecExcept); MsgList.Add(''); MsgList.Add(RS_MsgDecExcept); end; 5, 11 : // 파일 반출 begin MsgList.Add(RS_FileExpExcept); MsgList.Add(''); MsgList.Add(RS_MsgFileExpExcept); end; 6 : // MTP begin MsgList.Add(RS_MtpExcept); MsgList.Add(''); MsgList.Add(RS_MtpUrlExcept); end; 7 : // Bluetooth begin MsgList.Add(RS_BtExcept); MsgList.Add(''); MsgList.Add(RS_BtUrlExcept); end; 8 : // CD/DVD begin MsgList.Add(RS_CdExcept); MsgList.Add(''); MsgList.Add(RS_CdUrlExcept); end; 9 : // 워터마크 1회 예외 begin MsgList.Add(RS_PrtWaterExcept); MsgList.Add(''); MsgList.Add(RS_MsgPrtWaterExcept); end; 10 : // 캡처 APP begin MsgList.Add(RS_CapAppExcept); MsgList.Add(''); MsgList.Add(RS_MsgCapAppExcept); end; end; end; case CUSTOMER_TYPE of CUSTOMER_SHSC, CUSTOMER_SHCI : MsgList.Add(RS_MsgConfirm_SH); else MsgList.Add(RS_MsgConfirm); end; end; TYPE_RES_APPROVAL : begin SetOneButtion; lbTitle.Caption := RS_ApprovalResult; SplitString(O.S['D'], '|', StrList, true); if StrList.Count > 1 then begin var OInfo: ISuperObject := nil; try OInfo := SO(StrList[1]); except // error end; if OInfo = nil then begin Close; exit; end; ZeroMemory(@LogInfo, SizeOf(LogInfo)); LogInfo.sCode := RESPONSE_APPROVAL; LogInfo.sDevName := OInfo.S['deviceName']; LogInfo.sDevSerial := OInfo.S['serial']; LogInfo.sSummary := Format('Approval Response : [%s] ', [BooleanToStr(OInfo.S['result'] = 'true', 'Approved', 'Rejected')]); var bApproval: Boolean := OInfo.S['result'] = 'true'; var nRes: Integer := StrToIntDef(StrList[0], -1); case nRes of 1, 12, 13 : // 1, 12 : 출력, 13 : 출력, 사후 결재 : 출력 요청 완료 begin var pEnt: PPrtEnt := nil; if bApproval or (nRes = 13) then begin // O.S['watermark'] pEnt := gMgSvc.MgPrt.GetPrintInfo(OInfo.S['taskId']); if pEnt = nil then begin Close; exit; end; LogInfo.sActionId := pEnt.WInfo.sPrtDocId; LogInfo.sDevName := pEnt.WInfo.sPtrName; LogInfo.sPath := pEnt.WInfo.sDocName; pEnt.WInfo.bUseWM := OInfo.S['watermark'] = 'true'; if pEnt.dtAprv = 0 then begin pEnt.dtAprv := Now; gMgSvc.MgPrt.Save; end; // todo : 재출력 확인 후 메시지 변경? // OInfo.S['printCnt'] > 1 gMgSvc.DoPrint(pEnt); if nRes = 13 then begin lbTitle.Caption := RS_PrtApproval; MsgList.Add(RS_MsgPrtApproval); end else MsgList.Add(RS_PrintPass); end else begin pEnt := gMgSvc.MgPrt.GetPrintInfo(OInfo.S['taskId']); if pEnt <> nil then begin LogInfo.sDevName := pEnt.WInfo.sPtrName; LogInfo.sPath := pEnt.WInfo.sDocName; gMgSvc.MgPrt.DelPrintInfo(pEnt.sId, true); end; MsgList.Add(RS_PrintReqReject); end; SumString(LogInfo.sSummary, 'Print'); end; 2 : // USB begin // MsgList.Add(RS_UsbExcept); // MsgList.Add(''); if bApproval then begin MsgList.Add(RS_UsbReqPass); MsgList.Add(''); MsgList.Add(OInfo.S['deviceName']); sTemp := OInfo.S['serial']; if sTemp <> '' then // 승인받은 날이 예외 시작일이 아니면 빈값으로 온다 25_0226 13:27:50 kku begin gMgSvc.PrefModel.IgrUsbSerials := gMgSvc.PrefModel.IgrUsbSerials + ';' + sTemp; gMgSvc.PrefModel.IgrUsbSerialList.Add(sTemp); gMgSvc.SleepPolicy.IgrUsbSerials := gMgSvc.SleepPolicy.IgrUsbSerials + ';' + sTemp; gMgSvc.SleepPolicy.IgrUsbSerialList.Add(sTemp); if gMgSvc.VulPolicy.Loaded then begin gMgSvc.VulPolicy.IgrUsbSerials := gMgSvc.VulPolicy.IgrUsbSerials + ';' + sTemp; gMgSvc.VulPolicy.IgrUsbSerialList.Add(sTemp); end; if gMgSvc.OffPolicy.Loaded then begin gMgSvc.OffPolicy.IgrUsbSerials := gMgSvc.OffPolicy.IgrUsbSerials + ';' + sTemp; gMgSvc.OffPolicy.IgrUsbSerialList.Add(sTemp); end; if gMgSvc.ExpPolicy.Loaded then begin gMgSvc.ExpPolicy.IgrUsbSerials := gMgSvc.ExpPolicy.IgrUsbSerials + ';' + sTemp; gMgSvc.ExpPolicy.IgrUsbSerialList.Add(sTemp); end; end; end else begin MsgList.Add(RS_UsbReqReject); MsgList.Add(''); MsgList.Add(OInfo.S['deviceName']); end; SumString(LogInfo.sSummary, 'USB'); end; 3 : // 브라우저 접근 차단 begin // MsgList.Add(RS_UrlExcept); // MsgList.Add(''); if bApproval then begin MsgList.Add(RS_UrlReqPass); MsgList.Add(''); MsgList.Add(OInfo.S['domain']); sTemp := OInfo.S['domain']; if sTemp <> '' then // 승인받은 날이 예외 시작일이 아니면 빈값으로 온다 25_0226 13:27:50 kku begin gMgSvc.PrefModel.UrlBlockExcpList := gMgSvc.PrefModel.UrlBlockExcpList + '|' + sTemp; gMgSvc.SleepPolicy.UrlBlockExcpList := gMgSvc.SleepPolicy.UrlBlockExcpList + '|' + sTemp; if gMgSvc.VulPolicy.Loaded then gMgSvc.VulPolicy.UrlBlockExcpList := gMgSvc.VulPolicy.UrlBlockExcpList + '|' + sTemp; if gMgSvc.OffPolicy.Loaded then gMgSvc.OffPolicy.UrlBlockExcpList := gMgSvc.OffPolicy.UrlBlockExcpList + '|' + sTemp; if gMgSvc.ExpPolicy.Loaded then gMgSvc.ExpPolicy.UrlBlockExcpList := gMgSvc.ExpPolicy.UrlBlockExcpList + '|' + sTemp; end; end else begin MsgList.Add(RS_UrlReqReject); MsgList.Add(''); MsgList.Add(OInfo.S['domain']); end; LogInfo.sDevSerial := ''; LogInfo.sDestIpUrl := OInfo.S['domain']; SumString(LogInfo.sSummary, 'URL'); end; 4 : // DRM 복호화 begin var OFiles: ISuperObject := OInfo.O['fileInfo']; var i: Integer; var sPath: String; if bApproval then begin MsgList.Add(RS_DrmReqPass); MsgList.Add(''); if (OFiles.DataType = stArray) and (OFiles.AsArray.Length > 0) then begin if CUSTOMER_TYPE = CUSTOMER_BLUECORNER then begin for i := 0 to OFiles.AsArray.Length - 1 do begin sPath := OFiles.AsArray.O[i].S['filePath']; if FileExists(sPath) and (OFiles.AsArray.O[i].S['hash'] = GetFileToSha1Str(sPath)) then begin if gMgSvc.ThdReact <> nil then gMgSvc.ThdReact.AddEncIgr(sPath); end; end; var sHlpExe: String := GetRunExePathDir + DIR_CONF + EXE_HLP; if FileExists(sHlpExe) then begin var OA: ISuperObject := O.O['Files']; O := SO; O.I['Cmd'] := HPCMD_REQ_DECRYPT; O.S['WinCap'] := APP_TITLE; O.I['RcvWnd'] := Handle; O.I['CT'] := CUSTOMER_TYPE; O.S['UName'] := gMgSvc.UName; O.S['Dept'] := gMgSvc.DeptName; O.B['AVAL'] := IsApproveSupport and gMgSvc.UseApproval and gMgSvc.ModePolicy.DrmApproval; if O.S['Dept'] = '' then O.S['Dept'] := PO.DeptName; O.S['EN'] := gMgSvc.EmpNo; O.S['PON'] := PO.PolicyName; O.O['DecFiles'] := OFiles; SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM); {$IFDEF DEBUG} ExecutePath(sHlpExe); {$ELSE} ExecuteAppAsUser('explorer.exe', sHlpExe, '', SW_SHOWNORMAL); {$ENDIF} // DeleteFile(sParam); end; end else begin var DecList: TStringList; Guard(DecList, TStringList.Create); for i := 0 to OFiles.AsArray.Length - 1 do begin sPath := OFiles.AsArray.O[i].S['filePath']; if FileExists(sPath) and (OFiles.AsArray.O[i].S['hash'] = GetFileToSha1Str(sPath)) then begin if gMgSvc.ThdReact <> nil then gMgSvc.ThdReact.AddEncIgr(sPath); DecList.Add(sPath); MsgList.Add(ExtractFileName(sPath)); end; end; if DecList.Count > 0 then begin var dlg: TDlgDecryptDrm := TDlgDecryptDrm.Create(nil); var n1, n2, n3: Integer; dlg.AddFiles(DecList); dlg.DoDecFiles(n1, n2, n3); dlg.SetReadOnly; dlg.Show; end; end; end; end else begin MsgList.Add(RS_DrmReqReject); MsgList.Add(''); if (OFiles.DataType = stArray) and (OFiles.AsArray.Length > 0) then begin for i := 0 to OFiles.AsArray.Length - 1 do MsgList.Add(ExtractFileName(OFiles.AsArray.O[i].S['filePath'])); end; end; if OFiles.AsArray.Length > 0 then begin SumString(LogInfo.sSummary, Format('File Decrypt (%d)', [OFiles.AsArray.Length])); if OFiles.AsArray.Length = 1 then LogInfo.sPath := OFiles.AsArray.O[0].S['filePath']; end else SumString(LogInfo.sSummary, 'File Decrypt'); end; 5, 11 : // 파일 반출 begin var OFiles: ISuperObject := OInfo.O['fileInfo']; var i: Integer; var sPath: String; if bApproval then begin MsgList.Add(RS_FileExpReqPass); MsgList.Add(''); if (OFiles.DataType = stArray) and (OFiles.AsArray.Length > 0) then begin for i := 0 to OFiles.AsArray.Length - 1 do begin sPath := OFiles.AsArray.O[i].S['filePath']; if FileExists(sPath) or (ExtractFilePath(sPath) = '') then // 아웃룩은 파일 이름만 있다. 25_1112 14:49:42 kku begin gMgSvc.AddFileExpEnt(sPath, OFiles.AsArray.O[i].S['hash']); MsgList.Add(ExtractFileName(sPath)); end; end; end; end else begin MsgList.Add(RS_FileExpReqReject); MsgList.Add(''); if (OFiles.DataType = stArray) and (OFiles.AsArray.Length > 0) then begin for i := 0 to OFiles.AsArray.Length - 1 do MsgList.Add(ExtractFileName(OFiles.AsArray.O[i].S['filePath'])); end; end; if OFiles.AsArray.Length > 0 then begin SumString(LogInfo.sSummary, Format('File Export (%d)', [OFiles.AsArray.Length])); if OFiles.AsArray.Length = 1 then LogInfo.sPath := OFiles.AsArray.O[0].S['filePath']; end else SumString(LogInfo.sSummary, 'File Export'); end; 6 : // MTP begin // MsgList.Add(RS_MtpExcept); // MsgList.Add(''); if bApproval then begin MsgList.Add(RS_MtpReqPass); MsgList.Add(''); MsgList.Add(OInfo.S['deviceName']); sTemp := OInfo.S['serial']; if sTemp <> '' then // 승인받은 날이 예외 시작일이 아니면 빈값으로 온다 25_0226 13:27:50 kku begin gMgSvc.PrefModel.MtpExcept := gMgSvc.PrefModel.MtpExcept + ';' + sTemp; gMgSvc.SleepPolicy.MtpExcept := gMgSvc.SleepPolicy.MtpExcept + ';' + sTemp; if gMgSvc.VulPolicy.Loaded then gMgSvc.VulPolicy.MtpExcept := gMgSvc.VulPolicy.MtpExcept + ';' + sTemp; if gMgSvc.OffPolicy.Loaded then gMgSvc.OffPolicy.MtpExcept := gMgSvc.OffPolicy.MtpExcept + ';' + sTemp; if gMgSvc.ExpPolicy.Loaded then gMgSvc.ExpPolicy.MtpExcept := gMgSvc.ExpPolicy.MtpExcept + ';' + sTemp; end; end else begin MsgList.Add(RS_MtpReqReject); MsgList.Add(''); MsgList.Add(OInfo.S['deviceName']); end; SumString(LogInfo.sSummary, 'MTP'); end; 7 : // 블루투스 begin // MsgList.Add(RS_BtExcept); // MsgList.Add(''); if bApproval then begin MsgList.Add(RS_BtReqPass); MsgList.Add(''); MsgList.Add(OInfo.S['deviceName']); sTemp := OInfo.S['serial']; if sTemp <> '' then // 승인받은 날이 예외 시작일이 아니면 빈값으로 온다 25_0226 13:27:50 kku begin gMgSvc.PrefModel.BlueExcept := gMgSvc.PrefModel.BlueExcept + ';' + sTemp; gMgSvc.SleepPolicy.BlueExcept := gMgSvc.SleepPolicy.BlueExcept + ';' + sTemp; if gMgSvc.VulPolicy.Loaded then gMgSvc.VulPolicy.BlueExcept := gMgSvc.VulPolicy.BlueExcept + ';' + sTemp; if gMgSvc.OffPolicy.Loaded then gMgSvc.OffPolicy.BlueExcept := gMgSvc.OffPolicy.BlueExcept + ';' + sTemp; if gMgSvc.ExpPolicy.Loaded then gMgSvc.ExpPolicy.BlueExcept := gMgSvc.ExpPolicy.BlueExcept + ';' + sTemp; end; end else begin MsgList.Add(RS_BtReqReject); MsgList.Add(''); MsgList.Add(OInfo.S['deviceName']); end; SumString(LogInfo.sSummary, 'Bluetooth'); end; 8 : // CD/DVD begin // MsgList.Add(RS_CdExcept); // MsgList.Add(''); if bApproval then begin MsgList.Add(RS_CdReqPass); MsgList.Add(''); MsgList.Add(OInfo.S['deviceName']); sTemp := OInfo.S['serial']; if sTemp <> '' then // 승인받은 날이 예외 시작일이 아니면 빈값으로 온다 25_0226 13:27:50 kku begin gMgSvc.PrefModel.CdromExcept := gMgSvc.PrefModel.CdromExcept + ';' + sTemp; gMgSvc.SleepPolicy.CdromExcept := gMgSvc.SleepPolicy.CdromExcept + ';' + sTemp; if gMgSvc.VulPolicy.Loaded then gMgSvc.VulPolicy.CdromExcept := gMgSvc.VulPolicy.CdromExcept + ';' + sTemp; if gMgSvc.OffPolicy.Loaded then gMgSvc.OffPolicy.CdromExcept := gMgSvc.OffPolicy.CdromExcept + ';' + sTemp; if gMgSvc.ExpPolicy.Loaded then gMgSvc.ExpPolicy.CdromExcept := gMgSvc.ExpPolicy.CdromExcept + ';' + sTemp; end; end else begin MsgList.Add(RS_CdReqReject); MsgList.Add(''); MsgList.Add(OInfo.S['deviceName']); end; SumString(LogInfo.sSummary, 'CD/DVD'); end; 9 : // 프린트 워터마크 1회 예외 begin if bApproval then begin MsgList.Add(RS_PrtWaterReqPass); gMgSvc.IsPrtWaterExcept := true; end else MsgList.Add(RS_PrtWaterReject); SumString(LogInfo.sSummary, 'Print watermark exception'); end; 10 : // 캡처 APP begin if bApproval then begin MsgList.Add(RS_CapAppReqPass); gMgSvc.IsPrtWaterExcept := true; end else MsgList.Add(RS_CapAppReject); SumString(LogInfo.sSummary, 'Capture APP exception'); end; end; gMgSvc.SendEventLogEx(@LogInfo, false); case nRes of 4, 9 : ; // 워터마크 1회, DRM 복호화 결재 제외 else begin if bApproval and (OInfo.S['endDt'] <> '') then begin MsgList.Add(''); MsgList.Add(RS_AllowDateTime + OInfo.S['endDt']); end; end; end; if OInfo.S['reason'] <> '' then begin MsgList.Add(''); MsgList.Add(RS_ApprovalReason + ':'); MsgList.Add(OInfo.S['reason']); end; end; end; end; {$IFDEF _HE_} if PO.NotifyType = nftACenter then begin _nNotiCnt := 0; // 알림센터에서 일반 팝업 으로 넘어갈때를 위함, 일단 여기에 넣음..22_0825 09:02:09 kku var sTitle: String := RS_SecuViol; case O.I['T'] of TYPE_MSG_SAFEAPPLIED : sTitle := RS_Info; TYPE_MSG_OLD_WINDOWS, TYPE_MSG_VUL_OS, TYPE_MSG_VUL_PW, TYPE_MSG_VUL_AV, TYPE_MSG_VUL_FW, TYPE_MSG_VUL_SCREEN, TYPE_MSG_VUL_ALLOWACCESS, TYPE_MSG_VUL_EMPNO : sTitle := RS_Vul; // TYPE_MSG_NOTIFICATION, TYPE_MSG_UPDATE, TYPE_MSG_AFTERREPORT : begin sTitle := RS_Info; end; TYPE_MSG_NOTIFICATION : sTitle := RS_Noti; end; sNotiCenterMsg_ := sTitle + ':' + MsgList.Text; end else {$ENDIF} begin mmMsg.Text := MsgList.Text; if CUSTOMER_TYPE = CUSTOMER_HDENG then begin mmMsg.Lines.Add(''); mmMsg.Lines.Add(RS_HecHelp); end; // if ((NotiType = nftNormal) and (mmMsg.Lines.Count > 9)) or // ((NotiType = nftMin) and (mmMsg.Lines.Count > 5)) then if mmMsg.Lines.Count > 5 then mmMsg.ScrollBars := TScrollStyle.ssVertical; {$IFNDEF _HE_} Show; {$ENDIF} end; except on E: Exception do ETgException.TraceException(Self, E, 'Fail .. PopupMessage()'); end; end; procedure TDlgNotice.FormClose(Sender: TObject; var Action: TCloseAction); begin try if _nNotiCnt > 0 then Dec(_nNotiCnt); Action := caFree; except on E: Exception do ETgException.TraceException(Self, E, 'Fail .. FormClose()'); end; end; procedure TDlgNotice.FormKeyPress(Sender: TObject; var Key: Char); begin if Key = #27 then begin try Close; except on E: Exception do ETgException.TraceException(Self, E, 'Fail .. FormKeyPress()'); end; end; end; procedure TDlgNotice.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ReleaseCapture; SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0); end; procedure TDlgNotice.FormShow(Sender: TObject); begin FormStyle := fsNormal; end; procedure TDlgNotice.imgOkClick(Sender: TObject); begin try Close; except on E: Exception do ETgException.TraceException(Self, E, 'Fail .. imgOkClick()'); end; end; procedure TDlgNotice.imgOkMouseEnter(Sender: TObject); var img: TImage; begin if Sender = nil then exit; if Sender is TImage then img := TImage(Sender) else if Sender = lbOk then img := imgOk else img := imgSet; SetImgBtn(img, img.Tag + 1); end; procedure TDlgNotice.imgOkMouseLeave(Sender: TObject); var img: TImage; begin if Sender = nil then exit; if Sender is TImage then img := TImage(Sender) else if Sender = lbOk then img := imgOk else img := imgSet; SetImgBtn(img, img.Tag); end; procedure TDlgNotice.imgSetClick(Sender: TObject); var sHlpExe, sUrl, sTemp: String; LogInfo: TLogInfo; bSendBin: Boolean; i, nMinMB, nLimitMB: Integer; llSize: LONGLONG; begin sUrl := ''; sHlpExe := GetRunExePathDir + DIR_CONF + EXE_HLP; {$IFDEF _HE_} if sCmdParam_ <> '' then begin if sCmdParam_ = 'ChangeEmpNo' then begin if gMain <> nil then begin gMain.imgChangeEmpNoClick(nil); end; end else if sCmdParam_ = 'RegDevExcept' then begin if (IsApproveSupport and gMgSvc.UseApproval and gMgSvc.ModePolicy.UsbApproval and (ReqDevExceptInfo_.ReqDevType = rdtUsbDrive)) or (IsApproveSupport and gMgSvc.UseApproval and gMgSvc.ModePolicy.CdApproval and (ReqDevExceptInfo_.ReqDevType = rdtCdrom)) or (IsApproveSupport and gMgSvc.UseApproval and gMgSvc.ModePolicy.MtpApproval and (ReqDevExceptInfo_.ReqDevType = rdtMtp)) or (IsApproveSupport and gMgSvc.UseApproval and gMgSvc.ModePolicy.BtApproval and (ReqDevExceptInfo_.ReqDevType = rdtBluetooth)) or (IsApproveSupport and gMgSvc.UseApproval and gMgSvc.ModePolicy.ExFApproval and (ReqDevExceptInfo_.ReqDevType = rdtExpFile)) then begin var nType: Integer := -1; ZeroMemory(@LogInfo, SizeOf(LogInfo)); LogInfo.sCode := REQUEST_APPROVAL; LogInfo.sDevName := ReqDevExceptInfo_.sDevName; LogInfo.sDevSerial := ReqDevExceptInfo_.sSerial; case ReqDevExceptInfo_.ReqDevType of rdtUsbDrive : begin nType := 1; LogInfo.sSummary := 'Approval Request : USB'; end; rdtExpFile : begin nType := 4; LogInfo.sDevSerial := ''; var O: ISuperObject := nil; try O := SO(ReqDevExceptInfo_.sSerial); except end; if (O <> nil) and (O.DataType = stArray) then begin LogInfo.sSummary := Format('Approval Request : File Export (%d)', [O.AsArray.Length]); if O.AsArray.Length = 1 then LogInfo.sPath := O.AsArray[0].S['filePath']; // 크기 체크해서 업로드 예외 nMinMB := gMgSvc.ModePolicy.AppABMinMB; nLimitMB := gMgSvc.ModePolicy.AppABLimitMB; for i := O.AsArray.Length - 1 downto 0 do begin sTemp := O.AsArray[i].S['filePath']; if O.AsArray.O[i].S['OD'] <> '' then // 아웃룩 파일 sTemp := O.AsArray.O[i].S['OD'] + sTemp; if FileExists(sTemp) then begin llSize := GetFileSize_path(sTemp); if (llSize < (LONGLONG(nMinMB) * 1048576)) or (llSize > (LONGLONG(nLimitMB) * 1048576)) then begin O.AsArray.Delete(i); TTgTrace.T('결재 요청 파일 업로드 예외 (Size), Path=%s, Size=%d', [sTemp, llSize], 1); end; end else begin O.AsArray.Delete(i); TTgTrace.T('결재 요청 파일 업로드 예외 (파일없음), Path=%s', [sTemp], 1); end; end; sUrl := gMgSvc.SendApproval(nType, @ReqDevExceptInfo_, O.AsArray.Length); var ORst: ISuperObject := nil; if (sUrl <> '') and (sUrl[1] = '{') then begin // 구 버전 서버 대비 25_1118 10:57:33 kku ORst := SO(sUrl); sUrl := ORst.S['url']; end; if ORst <> nil then begin var sUpUrl: String; for i := 0 to O.AsArray.Length - 1 do begin sTemp := O.AsArray.O[i].S['filePath']; bSendBin := false; sUpUrl := ORst.S['binFileUploadUrl' + IntToStr(i + 1)]; if sUpUrl = '' then begin sUpUrl := ORst.S['fileUploadUrl' + IntToStr(i + 1)]; if sUpUrl = '' then break; end else begin sUpUrl := sUpUrl + '&fileName=' + UrlEncodeUTF8(ExtractFileName(sTemp)); bSendBin := true; end; if sUpUrl <> '' then begin if sUpUrl[1] = '/' then Delete(sUpUrl, 1, 1); if O.AsArray.O[i].S['OD'] <> '' then // 아웃룩 파일 gMgSvc.SendFileNor(bSendBin, 'file', sUpUrl, O.AsArray.O[i].S['OD'] + sTemp, nMinMB, nLimitMB, crtDelete) else gMgSvc.SendFileNor(bSendBin, 'file', sUpUrl, sTemp, nMinMB, nLimitMB); TTgTrace.T('[차단] 반출 요청 파일 업로드 .. URL=%s', [sUpUrl], 2); // TTgTrace.T('반출 요청 파일 업로드 .. %s, %d : %s', [BooleanToStr(bResult, 'OK', 'Fail'), i + 1, sTemp], 2); TTgTrace.T('[차단] 반출 요청 파일 업로드 .. %d : %s', [i + 1, sTemp], 2); end else TTgTrace.T('[차단] 반출 요청 업로드를 위한 URL 가져오기 실패..', 2); end; end; end else LogInfo.sSummary := 'Approval Request : File Export'; end; rdtMtp : begin nType := 5; LogInfo.sSummary := 'Approval Request : MTP'; end; rdtBluetooth : begin nType := 6; LogInfo.sSummary := 'Approval Request : Bluetooth'; end; rdtCdrom : begin nType := 7; LogInfo.sSummary := 'Approval Request : CD/DVD'; end; end; if sUrl = '' then sUrl := gMgSvc.SendApproval(nType, @ReqDevExceptInfo_); if sUrl = '' then begin TTgTrace.T('Fail .. SendApproval(1)'); MessageBox(Handle, PChar(RS_NoApprovalInfo), PChar(APP_TITLE), MB_ICONWARNING or MB_OK); end else begin gMgSvc.SendEventLogEx(@LogInfo, false); // ExecutePath(gMgSvc.DestIPort + sUrl); if FileExists(sHlpExe) then begin var O: ISuperObject := SO; O.I['RcvWnd'] := Handle; O.I['Cmd'] := HPCMD_EXECUTE_FILE; O.S['Path'] := gMgSvc.DestIPort + sUrl; SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM); {$IFDEF DEBUG} ExecutePath(sHlpExe); {$ELSE} ExecuteAppAsUser('explorer.exe', sHlpExe, '', SW_SHOWNORMAL); {$ENDIF} end else ExecutePath(gMgSvc.DestIPort + sUrl); end; end else if Pos('412', FreeLocalizer.LanguageFile) = 0 then begin TDlgReqDevExcept.Create(nil, ReqDevExceptInfo_).Show; end else begin if FileExists(sHlpExe) then begin var O: ISuperObject := SO; O.I['RcvWnd'] := gMgSvc.RcvHwnd; O.I['Cmd'] := HPCMD_REQ_DEVICE_EXCEPT; O.S['WinCap'] := APP_TITLE; O.O['ReqInfo'] := TTgJson.ValueToJsonObject(ReqDevExceptInfo_); O.I['CT'] := CUSTOMER_TYPE; SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM); {$IFDEF DEBUG} ExecutePath(sHlpExe); {$ELSE} ExecuteAppAsUser('explorer.exe', sHlpExe, '', SW_SHOWNORMAL); {$ENDIF} end; end; end else if (sCmdParam_ = 'RegUrlExcept') and IsApproveSupport and gMgSvc.UseApproval and gMgSvc.ModePolicy.WebUrlApproval then begin sUrl := gMgSvc.SendApproval(2, @ReqDevExceptInfo_.sSerial[1]); if sUrl = '' then begin TTgTrace.T('Fail .. SendApproval(2)'); MessageBox(Handle, PChar(RS_NoApprovalInfo), PChar(APP_TITLE), MB_ICONWARNING or MB_OK); end else begin LogInfo.sCode := REQUEST_APPROVAL; LogInfo.sDestIpUrl := ReqDevExceptInfo_.sSerial; LogInfo.sSummary := 'Approval Request : URL'; gMgSvc.SendEventLogEx(@LogInfo, false); if FileExists(sHlpExe) then begin var O: ISuperObject := SO; O.I['RcvWnd'] := Handle; O.I['Cmd'] := HPCMD_EXECUTE_FILE; O.S['Path'] := gMgSvc.DestIPort + sUrl; SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM); {$IFDEF DEBUG} ExecutePath(sHlpExe); {$ELSE} ExecuteAppAsUser('explorer.exe', sHlpExe, '', SW_SHOWNORMAL); {$ENDIF} end else ExecutePath(gMgSvc.DestIPort + sUrl); end; end else if sCmdParam_ = 'CapAppExcept' then begin sUrl := gMgSvc.SendApproval(12, @ReqDevExceptInfo_); if sUrl = '' then begin TTgTrace.T('Fail .. SendApproval(2)'); MessageBox(Handle, PChar(RS_NoApprovalInfo), PChar(APP_TITLE), MB_ICONWARNING or MB_OK); end else begin LogInfo.sCode := REQUEST_APPROVAL; LogInfo.sAppName := ReqDevExceptInfo_.sSerial; LogInfo.sSummary := 'Approval Request : Capture APP'; gMgSvc.SendEventLogEx(@LogInfo, false); if FileExists(sHlpExe) then begin var O: ISuperObject := SO; O.I['RcvWnd'] := Handle; O.I['Cmd'] := HPCMD_EXECUTE_FILE; O.S['Path'] := gMgSvc.DestIPort + sUrl; SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM); {$IFDEF DEBUG} ExecutePath(sHlpExe); {$ELSE} ExecuteAppAsUser('explorer.exe', sHlpExe, '', SW_SHOWNORMAL); {$ENDIF} end else ExecutePath(gMgSvc.DestIPort + sUrl); end; end else if sCmdParam_ = 'CttSch' then begin gMain.lbCttSchRstClick(nil); // TDlgViewCustomCttSchResult.Create(nil).Show; end else if sCmdParam_ = 'PersonalInfo' then begin sUrl := gMgSvc.GetRegPerInfoUrl; if sUrl = '' then begin TTgTrace.T('Fail .. GetRegPerInfoUrl(2)'); MessageBox(Handle, PChar(RS_NoRegPerInfoUrl), PChar(APP_TITLE), MB_ICONWARNING or MB_OK); end else begin ZeroMemory(@LogInfo, SizeOf(LogInfo)); LogInfo.sCode := REQUEST_REG_PERINFO; LogInfo.sSummary := 'HR Information Registration'; gMgSvc.SendEventLogEx(@LogInfo, false); if FileExists(sHlpExe) then begin var O: ISuperObject := SO; O.I['RcvWnd'] := Handle; O.I['Cmd'] := HPCMD_EXECUTE_FILE; O.S['Path'] := gMgSvc.DestIPort + sUrl; SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM); {$IFDEF DEBUG} ExecutePath(sHlpExe); {$ELSE} ExecuteAppAsUser('explorer.exe', sHlpExe, '', SW_SHOWNORMAL); {$ENDIF} end else ExecutePath(gMgSvc.DestIPort + sUrl); end; end else if sCmdParam_ = 'OutlookAddin' then begin if FileExists(sHlpExe) then begin var O: ISuperObject := SO; O.I['RcvWnd'] := gMain.Handle; O.B['RunAs'] := true; O.I['Cmd'] := HPCMD_INSTALL_OUTLOOK_ADDIN; O.S['MdDir'] := GetRunExePathDir + DIR_CONF; SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM); {$IFDEF DEBUG} ExecutePath(sHlpExe); {$ELSE} ExecuteAppAsUser('explorer.exe', sHlpExe, '', SW_SHOWNORMAL); {$ENDIF} end; end else if sCmdParam_.StartsWith('http') then begin if FileExists(sHlpExe) then begin var O: ISuperObject := SO; O.I['RcvWnd'] := Handle; O.I['Cmd'] := HPCMD_EXECUTE_FILE; O.S['Path'] := sCmdParam_; SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM); {$IFDEF DEBUG} ExecutePath(sHlpExe); {$ELSE} ExecuteAppAsUser('explorer.exe', sHlpExe, '', SW_SHOWNORMAL); {$ENDIF} end else ExecutePath(sCmdParam_); end else if sCmdParam_.StartsWith('/c') then begin if FileExists(sHlpExe) then begin var O: ISuperObject := SO; O.I['RcvWnd'] := Handle; O.I['Cmd'] := HPCMD_EXECUTE_FILE; O.S['Path'] := 'cmd.exe'; O.S['Param'] := sCmdParam_; O.B['Hide'] := true; SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM); {$IFDEF DEBUG} ExecutePath(sHlpExe); {$ELSE} ExecuteAppAsUser('explorer.exe', sHlpExe, '', SW_SHOWNORMAL); {$ENDIF} end else ExecutePath_hide('cmd.exe', sCmdParam_) end; end; {$ENDIF} Close; end; procedure TDlgNotice.imgTopMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ReleaseCapture; SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0); end; procedure TDlgNotice.lbPiCntClick(Sender: TObject); begin {$IFDEF _HE_} gMain.lbCttSchRstClick(nil); {$ENDIF} end; procedure TDlgNotice.lbPiCntMouseEnter(Sender: TObject); begin lbPiCnt.Font.Style := lbPiCnt.Font.Style + [fsUnderline]; lbPiCnt.Font.Color := clBlue; end; procedure TDlgNotice.lbPiCntMouseLeave(Sender: TObject); begin lbPiCnt.Font.Style := lbPiCnt.Font.Style - [fsUnderline]; lbPiCnt.Font.Color := clBlack; end; procedure TDlgNotice.SetImgBtn(imgBtn: TImage; nImgIdx: Integer); begin try if imgBtnList.Count <= nImgIdx then exit; imgBtnList.GetIcon(nImgIdx, imgBtn.Picture.Icon); imgBtn.Repaint; case nImgIdx of 2, 3 : begin lbSet.Font.Color := clGreen; if lbSet.Caption <> RS_Confirm then // 음.. 깔끔하진 않지만 일단 이렇게 처리 25_0218 11:29:22 kku lbSet.Caption := RS_SetVul; end; 4, 5 : begin lbSet.Font.Color := clPurple; lbSet.Caption := CM_RS_DevExcept; end; end; except on E: Exception do ETgException.TraceException(Self, E, 'Fail .. SetImgBtn()'); end; end; procedure TDlgNotice.SetOneButtion; begin imgSet.Visible := false; lbSet.Visible := imgSet.Visible; imgOk.Left := (Width div 2) - (imgOk.Width div 2); lbOk.Left := imgOk.Left; end; procedure TDlgNotice.SetPiResult4HEC(nRstCnt: Integer); begin // lbTitle.Visible := false; if lbTitle.Top = 193 then begin // Label1.Left := Label1.Left + 25; Label2.Left := Label2.Left + 25; lbGrade.Left := lbGrade.Left + 25; lbPiCnt.Left := lbPiCnt.Left + 25; Label5.Left := Label5.Left + 25; end; lbPiCnt.Caption := Format('(%d)', [nRstCnt]); // if nRstCnt < gMgSvc.PrefModel.PersonalInfoFileMax then {$IFDEF _HE_} if (gMgSvc.ProcCampn <> nil) and (gMgSvc.ProcCampn.Info.nNotiWarIfCnt > nRstCnt) then begin lbGrade.Caption := '''양호'''; lbGrade.Font.Color := clBlue; end; {$ENDIF} cpMain.ActiveCard := cdPI; end; procedure TDlgNotice.tCloseTimer(Sender: TObject); begin tClose.Enabled := false; btnClose.Click; end; procedure TDlgNotice.tInitTimer(Sender: TObject); begin tInit.Enabled := false; SetImgBtn(imgOk, imgOk.Tag); SetImgBtn(imgSet, imgSet.Tag); Application.ProcessMessages; end; procedure TDlgNotice.btnCloseClick(Sender: TObject); begin Close; end; end.