feat : usb port에서 usb disk 차단 재 수정
feat : agent start 로그 시작 feat : RecoverService 시작 위치 변경 → ManagerService 시 feat : RecoverService에서 복원 누락된 파일 추가 feat : 인스톨 설치 시 IP 정보 입력 받을수 있도록 수정 eCrmHeInstaller.exe 설치본 설치 시 si.dat 입력받은 정보 기반으로 만들 수 있도록 수정 설치본 제작시 si.dat 제거
This commit is contained in:
parent
095c329b0e
commit
def1b99ef7
|
|
@ -1041,7 +1041,25 @@ begin
|
|||
|
||||
if bBlockIf then
|
||||
begin
|
||||
SetLastError(ERROR_ACCESS_DENIED);
|
||||
if appType_ = catLINKENGKM then
|
||||
begin
|
||||
// SetLastError(ERROR_DEV_NOT_EXIST);
|
||||
if (lpOutBuffer <> nil) and (nOutBufferSize >= 3) then
|
||||
begin
|
||||
PByte(NativeUInt(lpOutBuffer) + 2)^ := 0;
|
||||
end;
|
||||
|
||||
if lpBytesReturned <> nil then
|
||||
begin
|
||||
lpBytesReturned^ := nOutBufferSize;
|
||||
end;
|
||||
|
||||
SetLastError(ERROR_SUCCESS);
|
||||
Result := True;
|
||||
end
|
||||
else
|
||||
SetLastError(ERROR_ACCESS_DENIED);
|
||||
|
||||
Result:= False;
|
||||
Exit;
|
||||
end;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ ClassGuid = {b86dff51-a31e-4bac-b3cf-e8cfe75c9fc2} ;This value is determine
|
|||
;Class = "ActivityMonitor"
|
||||
;ClassGuid = {AE71EC8D-C1FD-4564-8AA9-D56ADE722321}
|
||||
Provider = %ManufacturerName%
|
||||
DriverVer = 03/13/2026,13.27.3.571
|
||||
DriverVer = 03/20/2026,17.0.19.906
|
||||
CatalogFile = bs1flt.cat
|
||||
PnpLockdown = 1
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ ClassGuid = {b86dff51-a31e-4bac-b3cf-e8cfe75c9fc2} ;This value is determine
|
|||
;Class = "ActivityMonitor"
|
||||
;ClassGuid = {AE71EC8D-C1FD-4564-8AA9-D56ADE722321}
|
||||
Provider = %ManufacturerName%
|
||||
DriverVer = 03/13/2026,13.27.3.571
|
||||
DriverVer = 03/20/2026,17.0.19.906
|
||||
CatalogFile = bs1flt.cat
|
||||
PnpLockdown = 1
|
||||
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -99,7 +99,7 @@ typedef struct _FLT_START_FOR_CUSTOM
|
|||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//장치별 타입
|
||||
enum enum_devicetype
|
||||
typedef enum
|
||||
{
|
||||
BDC_UNKNOWN_DEV = 0,
|
||||
BDC_CDROM,
|
||||
|
|
@ -133,15 +133,42 @@ enum enum_devicetype
|
|||
BDC_WEBCAM,
|
||||
BDC_MTP,
|
||||
BDC_MAX_DEVICE_TYPE
|
||||
}enum_devicetype;
|
||||
|
||||
};
|
||||
//USB ÀåÄ¡º° ŸÀÔ
|
||||
typedef enum {
|
||||
BDC_USB_CLASS_UNSPECIFIED = 0,
|
||||
BDC_USB_CLASS_AUDIO = 1,
|
||||
BDC_USB_CLASS_CDC = 2,
|
||||
BDC_USB_CLASS_HID = 3,
|
||||
BDC_USB_CLASS_RESERVED_4 = 4,
|
||||
BDC_USB_CLASS_PHYSICAL = 5,
|
||||
BDC_USB_CLASS_IMAGE = 6,
|
||||
BDC_USB_CLASS_PRINTER = 7,
|
||||
BDC_USB_CLASS_MSC = 8,
|
||||
BDC_USB_CLASS_HUB = 9,
|
||||
BDC_USB_CLASS_CDC_DATA = 10,
|
||||
BDC_USB_CLASS_SMART_CARD = 11,
|
||||
BDC_USB_CLASS_RESERVED_12 = 12,
|
||||
BDC_USB_CLASS_VENDOR_SPECIFIC = 0x13
|
||||
//BDC_USB_CLASS_CONTENT_SECURITY = 13,
|
||||
//BDC_USB_CLASS_VIDEO = 14,
|
||||
//BDC_USB_CLASS_PERSONAL_HEALTHCARE = 15,
|
||||
//BDC_USB_CLASS_AUDIO_VIDEO = 16,
|
||||
|
||||
//BDC_USB_CLASS_DIAGNOSTIC = 0xDC,
|
||||
//BDC_USB_CLASS_WIRELESS_CONTROLLER = 0xE0,
|
||||
//BDC_USB_CLASS_MISC = 0xEF,
|
||||
//BDC_USB_CLASS_APPLICATION_SPECIFIC = 0xFE,
|
||||
//BDC_USB_CLASS_VENDOR_SPECIFIC = 0xFF
|
||||
} enum_usb_device_type;
|
||||
|
||||
typedef enum{
|
||||
|
||||
enum enum_devicestate
|
||||
{
|
||||
ENABLE = 0,
|
||||
DISABLE,
|
||||
READONLY
|
||||
};
|
||||
}enum_devicestate;
|
||||
|
||||
enum enum_pb_kernel_comunicationid
|
||||
{
|
||||
|
|
@ -188,7 +215,8 @@ enum enum_pb_kernel_comunicationid
|
|||
|
||||
START_PROCESS_CREATE,
|
||||
SET_PROCESS_CREATE_BLOCK_RULE, //프로세스 차단 규칙 (프로세스명 + 파라미터)
|
||||
CLEAR_PROCESS_CREATE_BLOCK_RULE
|
||||
CLEAR_PROCESS_CREATE_BLOCK_RULE,
|
||||
SET_USB_POLICY
|
||||
};
|
||||
|
||||
typedef struct _LOG_MSG_DATA
|
||||
|
|
@ -352,8 +380,9 @@ typedef struct _BS1FLT_PROCESS_CREATE_BLOCK_RULE
|
|||
#pragma pack(push, 1)
|
||||
typedef struct _DEVICE_POLICY
|
||||
{
|
||||
enum enum_devicetype device_type;
|
||||
enum enum_devicestate state;
|
||||
enum_devicetype device_type;
|
||||
enum_usb_device_type usb_device_type;
|
||||
enum_devicestate state;
|
||||
ULONG islog;
|
||||
}DEVICE_POLICY, * PDEVICE_POLICY;
|
||||
#pragma pack(pop)
|
||||
|
|
|
|||
|
|
@ -394,6 +394,11 @@ Bs1FltMssageProc(
|
|||
SetPolicy(msg->device_policy_.device_type, msg->device_policy_.state, msg->device_policy_.islog);
|
||||
break;
|
||||
}
|
||||
case SET_USB_POLICY:
|
||||
{
|
||||
KLogEx(DEBUG_TRACE_INFO, "SET_USB_POLICY, usbdevicetype(%d), state(%d)\n", msg->device_policy_.usb_device_type, msg->device_policy_.state);
|
||||
SetUsbPolicy(msg->device_policy_.usb_device_type, msg->device_policy_.state);
|
||||
}
|
||||
case GET_LOG:
|
||||
{
|
||||
ULONG req = 0;
|
||||
|
|
|
|||
|
|
@ -3,11 +3,12 @@
|
|||
|
||||
|
||||
static DEVICE_POLICY s_policy[BDC_MAX_DEVICE_TYPE] = { 0, };
|
||||
|
||||
static ULONG s_usb_policy[BDC_USB_CLASS_VENDOR_SPECIFIC] = { 0, };
|
||||
|
||||
void Initpolicy()
|
||||
{
|
||||
RtlZeroMemory(s_policy, sizeof(s_policy));
|
||||
RtlZeroMemory(s_usb_policy, sizeof(s_usb_policy));
|
||||
}
|
||||
|
||||
void SetPolicy(ULONG device_type, ULONG state, ULONG islog)
|
||||
|
|
@ -36,6 +37,25 @@ ULONG IsPolicyLog(ULONG device_type)
|
|||
}
|
||||
|
||||
|
||||
void SetUsbPolicy(ULONG usb_classtype, ULONG state)
|
||||
{
|
||||
s_usb_policy[usb_classtype] = state;
|
||||
|
||||
}
|
||||
|
||||
BOOLEAN IsUsbPolicyDisable(ULONG usb_classtype)
|
||||
{
|
||||
if (usb_classtype >= BDC_USB_CLASS_VENDOR_SPECIFIC )
|
||||
return FALSE;
|
||||
|
||||
if (s_usb_policy[usb_classtype] == DISABLE)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//ULONG IsNetwork(PFLT_CALLBACK_DATA data, PCFLT_RELATED_OBJECTS fltobject)
|
||||
//{
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@ ULONG GetPolicyState(ULONG device_type);
|
|||
BOOLEAN IsPolicyDisable(ULONG device_type);
|
||||
ULONG IsPolicyLog(ULONG device_type);
|
||||
|
||||
void SetUsbPolicy(ULONG usb_classtype, ULONG state);
|
||||
BOOLEAN IsUsbPolicyDisable(ULONG usb_classtype);
|
||||
|
||||
|
||||
ULONG GetDeviceType(PFLT_CALLBACK_DATA data, PCFLT_RELATED_OBJECTS fltobject);
|
||||
|
|
|
|||
|
|
@ -8,31 +8,7 @@
|
|||
#pragma warning( disable : 4996 )
|
||||
|
||||
|
||||
typedef enum {
|
||||
TUSB_CLASS_UNSPECIFIED = 0,
|
||||
TUSB_CLASS_AUDIO = 1,
|
||||
TUSB_CLASS_CDC = 2,
|
||||
TUSB_CLASS_HID = 3,
|
||||
TUSB_CLASS_RESERVED_4 = 4,
|
||||
TUSB_CLASS_PHYSICAL = 5,
|
||||
TUSB_CLASS_IMAGE = 6,
|
||||
TUSB_CLASS_PRINTER = 7,
|
||||
TUSB_CLASS_MSC = 8,
|
||||
TUSB_CLASS_HUB = 9,
|
||||
TUSB_CLASS_CDC_DATA = 10,
|
||||
TUSB_CLASS_SMART_CARD = 11,
|
||||
TUSB_CLASS_RESERVED_12 = 12,
|
||||
TUSB_CLASS_CONTENT_SECURITY = 13,
|
||||
TUSB_CLASS_VIDEO = 14,
|
||||
TUSB_CLASS_PERSONAL_HEALTHCARE = 15,
|
||||
TUSB_CLASS_AUDIO_VIDEO = 16,
|
||||
|
||||
TUSB_CLASS_DIAGNOSTIC = 0xDC,
|
||||
TUSB_CLASS_WIRELESS_CONTROLLER = 0xE0,
|
||||
TUSB_CLASS_MISC = 0xEF,
|
||||
TUSB_CLASS_APPLICATION_SPECIFIC = 0xFE,
|
||||
TUSB_CLASS_VENDOR_SPECIFIC = 0xFF
|
||||
} usb_device_class_code;
|
||||
|
||||
enum
|
||||
{
|
||||
|
|
@ -216,15 +192,16 @@ NTSTATUS UDF_CallUSBDI(IN PDEVICE_OBJECT pDevObj, IN PVOID UrbEtc)
|
|||
}
|
||||
*/
|
||||
|
||||
BOOLEAN IsDefineDeviceClass(usb_device_class_code deviceclass)
|
||||
BOOLEAN IsDefineDeviceClass(enum_usb_device_type deviceclass)
|
||||
{
|
||||
//BOOLEAN state = FALSE;
|
||||
|
||||
if (deviceclass == TUSB_CLASS_HID
|
||||
|| deviceclass == TUSB_CLASS_PRINTER
|
||||
|| deviceclass == TUSB_CLASS_HUB
|
||||
|| deviceclass == TUSB_CLASS_AUDIO
|
||||
|| deviceclass == TUSB_CLASS_VIDEO
|
||||
if (
|
||||
//deviceclass == TUSB_CLASS_HID
|
||||
//|| deviceclass == TUSB_CLASS_PRINTER
|
||||
deviceclass == BDC_USB_CLASS_HUB
|
||||
//|| deviceclass == TUSB_CLASS_AUDIO
|
||||
//|| deviceclass == TUSB_CLASS_VIDEO
|
||||
)
|
||||
{
|
||||
return TRUE;
|
||||
|
|
@ -294,12 +271,6 @@ NTSTATUS USBPnpControl(PDRIVER_DISPATCH dispath, PDEVICE_OBJECT DeviceObject, PI
|
|||
KLogEx(DEBUG_TRACE_INFO, " Serial: %S\n", pUsbInfo->SerialNumberStr);
|
||||
}
|
||||
|
||||
if (IsUsbPortExceptionList(BDC_USB, pUsbInfo->DeviceDesc.idVendor, pUsbInfo->DeviceDesc.idProduct, pUsbInfo->DeviceDesc.bcdDevice, pUsbInfo->SerialNumberStr))
|
||||
{
|
||||
KLogEx(DEBUG_TRACE_INFO, "user usb policy exception\n");
|
||||
goto $USBCleanup;
|
||||
}
|
||||
|
||||
if (pUsbInfo->ConfigDesc && pUsbInfo->ConfigDescSize > 0)
|
||||
{
|
||||
PUSB_CONFIGURATION_DESCRIPTOR pConfigDesc = pUsbInfo->ConfigDesc;
|
||||
|
|
@ -391,9 +362,23 @@ NTSTATUS USBPnpControl(PDRIVER_DISPATCH dispath, PDEVICE_OBJECT DeviceObject, PI
|
|||
}
|
||||
}
|
||||
|
||||
if (state == DISABLE && pUsbInfo)
|
||||
{
|
||||
if(!IsUsbPolicyDisable(pUsbInfo->DeviceDesc.bDeviceClass))
|
||||
{
|
||||
KLogEx(DEBUG_TRACE_INFO, "usb policy disable\n");
|
||||
state = ENABLE;
|
||||
}
|
||||
else if (IsUsbPortExceptionList(BDC_USB, pUsbInfo->DeviceDesc.idVendor, pUsbInfo->DeviceDesc.idProduct, pUsbInfo->DeviceDesc.bcdDevice, pUsbInfo->SerialNumberStr))
|
||||
{
|
||||
KLogEx(DEBUG_TRACE_INFO, "user usb policy exception\n");
|
||||
state = ENABLE;
|
||||
//goto $USBCleanup;
|
||||
}
|
||||
}
|
||||
|
||||
if (policyLog)
|
||||
{
|
||||
|
||||
WCHAR notice[MAX_PATH] = { 0, };
|
||||
WCHAR processName[50] = { 0, };
|
||||
ULONG DeviceClass = 0;
|
||||
|
|
|
|||
|
|
@ -38,3 +38,4 @@ Bs1fltSetProcessCreateBlockRule @34 NONAME
|
|||
Bs1fltClearProcessCreateBlockRule @35 NONAME
|
||||
Bs1fltClearUsbPortException @36 NONAME
|
||||
Bs1fltOpen @37 NONAME
|
||||
Bs1fltSetUsbPolicy @38 NONAME
|
||||
|
|
@ -55,3 +55,4 @@ BS1FLT_API DWORD WINAPI Bs1fltSetProcessCreateBlockRule(LPCWSTR name, LPCWSTR cm
|
|||
BS1FLT_API DWORD WINAPI Bs1fltClearProcessCreateBlockRule();
|
||||
BS1FLT_API DWORD WINAPI Bs1fltClearUsbPortException();
|
||||
BS1FLT_API DWORD WINAPI Bs1fltOpen();
|
||||
BS1FLT_API DWORD WINAPI Bs1fltSetUsbPolicy(DWORD usb_device_type, DWORD state);
|
||||
|
|
@ -459,7 +459,6 @@ BS1FLT_API DWORD WINAPI Bs1fltClearUsbException()
|
|||
return interface_->SetUsbDiskException(STATE_CLEAR, NULL, NULL, NULL, NULL) ? BS1FLT_STATUS_SUCCESS : BS1FLT_STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
|
||||
BS1FLT_API DWORD WINAPI Bs1fltSetPolicy(DWORD devcie_type, DWORD state, DWORD islog)
|
||||
{
|
||||
if (!interface_)
|
||||
|
|
@ -598,4 +597,15 @@ BS1FLT_API DWORD WINAPI Bs1fltClearProcessCreateBlockRule()
|
|||
return interface_->SetProcessCreateBlockRule(STATE_CLEAR, NULL, NULL, NULL) ? BS1FLT_STATUS_SUCCESS : BS1FLT_STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
BS1FLT_API DWORD WINAPI Bs1fltSetUsbPolicy(DWORD usb_device_type, DWORD state)
|
||||
{
|
||||
if (!interface_)
|
||||
return BS1FLT_STATUS_UNSUCCESSFUL;
|
||||
|
||||
BSONE_DEBUG(_T("usb_device_type(%x), state(%x)\n"), usb_device_type, state);
|
||||
return interface_->SetUsbPolicy((enum_usb_device_type)usb_device_type, (enum_devicestate)state) ? BS1FLT_STATUS_SUCCESS : BS1FLT_STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//
|
||||
|
|
@ -919,6 +919,28 @@ BOOL CInterface::SetPolicy(enum_devicetype devcie_type, enum_devicestate state,
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL CInterface::SetUsbPolicy(enum_usb_device_type usb_device_type, enum_devicestate state)
|
||||
{
|
||||
BS1FLT_MESSAGE msg = { 0, };
|
||||
HRESULT result = 0;
|
||||
DWORD dwRet = 0;
|
||||
|
||||
msg.id_ = (ULONGLONG)SET_USB_POLICY;
|
||||
msg.device_policy_.usb_device_type = usb_device_type;
|
||||
msg.device_policy_.state = state;
|
||||
|
||||
result = pFilterSendMessage(m_hPort, &msg, sizeof(msg), NULL, 0, &dwRet);
|
||||
if (IS_ERROR(result))
|
||||
{
|
||||
BSONE_DEBUG(L"FilterSendMessage fail (%x)\n", result);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
BOOL CInterface::SetProcessProtect(BOOL enable)
|
||||
{
|
||||
BS1FLT_MESSAGE msg = { 0, };
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ public:
|
|||
HRESULT GetLog(LPVOID outbuff, SIZE_T outbuffsize, DWORD* pdwReturnSize);
|
||||
BOOL SetDeviceProtect(DWORD enable);
|
||||
BOOL SetPolicy(enum_devicetype devcie_type, enum_devicestate state, BOOL islog);
|
||||
|
||||
BOOL SetUsbPolicy(enum_usb_device_type usb_device_type, enum_devicestate state);
|
||||
BOOL SetProcessProtect(BOOL enable);
|
||||
BOOL SetProcessProtectName(DWORD type, LPCWSTR name);
|
||||
BOOL DelProcessProtectName(DWORD type, LPCWSTR name);
|
||||
|
|
|
|||
|
|
@ -3,5 +3,5 @@
|
|||
#include "pch.h"
|
||||
|
||||
// 미리 컴파일된 헤더를 사용하는 경우 컴파일이 성공하려면 이 소스 파일이 필요합니다.
|
||||
Log4cppLogger log4_("bslflt");
|
||||
Log4cppLogger log4_("bs1flt");
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ DWORD Bs1fltControl::Init(LPCTSTR path, fpCallBack logcb)
|
|||
return 1;
|
||||
}
|
||||
|
||||
PVOID fuc[37] = { NULL, };
|
||||
PVOID fuc[38] = { NULL, };
|
||||
|
||||
fuc[0] = Bs1FltCleanup = (fpCleanup)GetProcAddress(h_, (LPCSTR)MAKELONG(1, 0));
|
||||
fuc[1] = Bs1FltInit = (fpInit)GetProcAddress(h_, (LPCSTR)MAKELONG(2, 0));
|
||||
|
|
@ -72,6 +72,7 @@ DWORD Bs1fltControl::Init(LPCTSTR path, fpCallBack logcb)
|
|||
fuc[34] = Bs1fltClearProcessCreateBlockRule = (fpBs1fltClearProcessCreateBlockRule)GetProcAddress(h_, (LPCSTR)MAKELONG(35, 0));
|
||||
fuc[35] = Bs1fltClearUsbPortException = (fpBs1fltClearUsbPortException)GetProcAddress(h_, (LPCSTR)MAKELONG(36, 0));
|
||||
fuc[36] = Bs1fltOpen = (fpBs1fltOpen)GetProcAddress(h_, (LPCSTR)MAKELONG(37, 0));
|
||||
fuc[37] = Bs1fltSetUsbPolicy = (fpBs1fltSetUsbPolicy)GetProcAddress(h_, (LPCSTR)MAKELONG(38, 0));
|
||||
|
||||
for (DWORD i = 0; i < ARRAYSIZE(fuc); ++i)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ typedef DWORD(WINAPI* fpBs1fltSetProcessCreateBlockRule)(LPCWSTR name, LPCWSTR c
|
|||
typedef DWORD(WINAPI* fpBs1fltClearProcessCreateBlockRule)();
|
||||
typedef DWORD(WINAPI* fpBs1fltClearUsbPortException)();
|
||||
typedef DWORD(WINAPI* fpBs1fltOpen)();
|
||||
typedef DWORD(WINAPI* fpBs1fltSetUsbPolicy)(DWORD usb_device_type, DWORD state);
|
||||
class Bs1fltControl {
|
||||
|
||||
public:
|
||||
|
|
@ -102,5 +103,6 @@ public:
|
|||
|
||||
fpBs1fltClearUsbPortException Bs1fltClearUsbPortException;
|
||||
fpBs1fltOpen Bs1fltOpen;
|
||||
fpBs1fltSetUsbPolicy Bs1fltSetUsbPolicy;
|
||||
HMODULE h_;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
//#include "BSone_define.h"
|
||||
#include "../bs1flt/Bs1flt_common.h"
|
||||
#include "bs1fltctrl_helper.h"
|
||||
#include "devicesetup.h"
|
||||
#include "CDialogUsbException.h"
|
||||
#include "CDialogProtectProcess.h"
|
||||
#include "CDlgProcessCreateRule.h"
|
||||
|
|
|
|||
|
|
@ -205,6 +205,7 @@
|
|||
<ClInclude Include="CDialogUsbException.h" />
|
||||
<ClInclude Include="CDlgProcessCreateRule.h" />
|
||||
<ClInclude Include="CFolderProtectDlg.h" />
|
||||
<ClInclude Include="devicesetup.h" />
|
||||
<ClInclude Include="framework.h" />
|
||||
<ClInclude Include="pch.h" />
|
||||
<ClInclude Include="Resource.h" />
|
||||
|
|
@ -219,6 +220,7 @@
|
|||
<ClCompile Include="CDialogUsbException.cpp" />
|
||||
<ClCompile Include="CDlgProcessCreateRule.cpp" />
|
||||
<ClCompile Include="CFolderProtectDlg.cpp" />
|
||||
<ClCompile Include="devicesetup.cpp" />
|
||||
<ClCompile Include="pch.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||
|
|
|
|||
|
|
@ -54,6 +54,9 @@
|
|||
<ClInclude Include="CFolderProtectDlg.h">
|
||||
<Filter>헤더 파일</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="devicesetup.h">
|
||||
<Filter>헤더 파일</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="tool.cpp">
|
||||
|
|
@ -83,6 +86,9 @@
|
|||
<ClCompile Include="CFolderProtectDlg.cpp">
|
||||
<Filter>소스 파일</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="devicesetup.cpp">
|
||||
<Filter>소스 파일</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="tool.rc">
|
||||
|
|
|
|||
|
|
@ -631,7 +631,26 @@ void CtoolDlg::OnBnClickedButtonSetPolicy()
|
|||
|
||||
debug.Format(L"SetPolicy : Device Type %d State %d Islog %d", policy[i].device_type, policy[i].state, policy[i].islog);
|
||||
listLog_.AddString(debug);
|
||||
|
||||
|
||||
bs1flt_.Bs1FltSetPolicy((DWORD)policy[i].device_type, policy[i].state, policy[i].islog);
|
||||
|
||||
if ((DWORD)policy[i].device_type == BDC_USB && policy[i].state == DISABLE)
|
||||
{
|
||||
bs1flt_.Bs1fltSetUsbPolicy((DWORD)BDC_USB_CLASS_UNSPECIFIED, DISABLE);
|
||||
bs1flt_.Bs1fltSetUsbPolicy((DWORD)BDC_USB_CLASS_CDC, DISABLE);
|
||||
bs1flt_.Bs1fltSetUsbPolicy((DWORD)BDC_USB_CLASS_HID, ENABLE);
|
||||
bs1flt_.Bs1fltSetUsbPolicy((DWORD)BDC_USB_CLASS_AUDIO, DISABLE);
|
||||
bs1flt_.Bs1fltSetUsbPolicy((DWORD)BDC_USB_CLASS_PHYSICAL, DISABLE);
|
||||
bs1flt_.Bs1fltSetUsbPolicy((DWORD)BDC_USB_CLASS_IMAGE, DISABLE);
|
||||
bs1flt_.Bs1fltSetUsbPolicy((DWORD)BDC_USB_CLASS_PRINTER, DISABLE);
|
||||
bs1flt_.Bs1fltSetUsbPolicy((DWORD)BDC_USB_CLASS_MSC, DISABLE);
|
||||
bs1flt_.Bs1fltSetUsbPolicy((DWORD)BDC_USB_CLASS_CDC_DATA, DISABLE);
|
||||
bs1flt_.Bs1fltSetUsbPolicy((DWORD)BDC_USB_CLASS_SMART_CARD, DISABLE);
|
||||
|
||||
debug.Format(L"SetPolicy : ReStartUsb");
|
||||
CloseHandle(CreateThread(NULL, 0, ReStartUsb, NULL, 0, NULL));
|
||||
}
|
||||
}
|
||||
|
||||
/*debug.Format(L"SetPolicy : %d %d", state, islog);
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,22 +1,8 @@
|
|||
C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VC\v170\Microsoft.CppBuild.targets(524,5): warning MSB8004: Output 디렉터리가 슬래시로 끝나지 않습니다. Output 디렉터리의 적절한 평가를 허용하는 데 필요하므로 이 빌드 인스턴스에서 슬래시를 추가합니다.
|
||||
pch.cpp
|
||||
CDialogProtectProcess.cpp
|
||||
CDialogRegProtect.cpp
|
||||
CDialogUsbException.cpp
|
||||
C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\tool\CDialogUsbException.cpp(80,3): warning C4129: 'D': 인식할 수 없는 문자 이스케이프 시퀀스입니다.
|
||||
(소스 파일 '/CDialogUsbException.cpp'을(를) 컴파일하는 중)
|
||||
|
||||
C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\tool\CDialogUsbException.cpp(80,3): warning C4129: '8': 인식할 수 없는 문자 이스케이프 시퀀스입니다.
|
||||
(소스 파일 '/CDialogUsbException.cpp'을(를) 컴파일하는 중)
|
||||
|
||||
CDlgProcessCreateRule.cpp
|
||||
CFolderProtectDlg.cpp
|
||||
bs1fltctrl_helper.cpp
|
||||
tool.cpp
|
||||
toolDlg.cpp
|
||||
코드를 생성하고 있습니다.
|
||||
5 of 454 functions ( 1.1%) were compiled, the rest were copied from previous compilation.
|
||||
2 functions were new in current compilation
|
||||
1 of 459 functions ( 0.2%) were compiled, the rest were copied from previous compilation.
|
||||
0 functions were new in current compilation
|
||||
1 functions had inline decision re-evaluated but remain unchanged
|
||||
코드를 생성했습니다.
|
||||
tool.vcxproj -> C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\bin\bs1fltputool.exe
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -4,6 +4,7 @@ C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\tool\CDialogRegProtect.cpp;C:\mgk
|
|||
C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\tool\CDialogUsbException.cpp;C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\tool\x64\Release\CDialogUsbException.obj
|
||||
C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\tool\CDlgProcessCreateRule.cpp;C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\tool\x64\Release\CDlgProcessCreateRule.obj
|
||||
C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\tool\CFolderProtectDlg.cpp;C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\tool\x64\Release\CFolderProtectDlg.obj
|
||||
C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\tool\devicesetup.cpp;C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\tool\x64\Release\devicesetup.obj
|
||||
C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\tool\pch.cpp;C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\tool\x64\Release\pch.obj
|
||||
C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\tool\tool.cpp;C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\tool\x64\Release\tool.obj
|
||||
C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\tool\toolDlg.cpp;C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\tool\x64\Release\toolDlg.obj
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
|
|
@ -1,3 +1,3 @@
|
|||
^C:\MGKIM\8.BSONE\BSONE.SFC\TOCSG.MODULE\BS1FLT\TOOL\X64\RELEASE\BS1FLTCTRL_HELPER.OBJ|C:\MGKIM\8.BSONE\BSONE.SFC\TOCSG.MODULE\BS1FLT\TOOL\X64\RELEASE\CDIALOGPROTECTPROCESS.OBJ|C:\MGKIM\8.BSONE\BSONE.SFC\TOCSG.MODULE\BS1FLT\TOOL\X64\RELEASE\CDIALOGREGPROTECT.OBJ|C:\MGKIM\8.BSONE\BSONE.SFC\TOCSG.MODULE\BS1FLT\TOOL\X64\RELEASE\CDIALOGUSBEXCEPTION.OBJ|C:\MGKIM\8.BSONE\BSONE.SFC\TOCSG.MODULE\BS1FLT\TOOL\X64\RELEASE\CDLGPROCESSCREATERULE.OBJ|C:\MGKIM\8.BSONE\BSONE.SFC\TOCSG.MODULE\BS1FLT\TOOL\X64\RELEASE\CFOLDERPROTECTDLG.OBJ|C:\MGKIM\8.BSONE\BSONE.SFC\TOCSG.MODULE\BS1FLT\TOOL\X64\RELEASE\PCH.OBJ|C:\MGKIM\8.BSONE\BSONE.SFC\TOCSG.MODULE\BS1FLT\TOOL\X64\RELEASE\TOOL.OBJ|C:\MGKIM\8.BSONE\BSONE.SFC\TOCSG.MODULE\BS1FLT\TOOL\X64\RELEASE\TOOL.RES|C:\MGKIM\8.BSONE\BSONE.SFC\TOCSG.MODULE\BS1FLT\TOOL\X64\RELEASE\TOOLDLG.OBJ
|
||||
^C:\MGKIM\8.BSONE\BSONE.SFC\TOCSG.MODULE\BS1FLT\TOOL\X64\RELEASE\BS1FLTCTRL_HELPER.OBJ|C:\MGKIM\8.BSONE\BSONE.SFC\TOCSG.MODULE\BS1FLT\TOOL\X64\RELEASE\CDIALOGPROTECTPROCESS.OBJ|C:\MGKIM\8.BSONE\BSONE.SFC\TOCSG.MODULE\BS1FLT\TOOL\X64\RELEASE\CDIALOGREGPROTECT.OBJ|C:\MGKIM\8.BSONE\BSONE.SFC\TOCSG.MODULE\BS1FLT\TOOL\X64\RELEASE\CDIALOGUSBEXCEPTION.OBJ|C:\MGKIM\8.BSONE\BSONE.SFC\TOCSG.MODULE\BS1FLT\TOOL\X64\RELEASE\CDLGPROCESSCREATERULE.OBJ|C:\MGKIM\8.BSONE\BSONE.SFC\TOCSG.MODULE\BS1FLT\TOOL\X64\RELEASE\CFOLDERPROTECTDLG.OBJ|C:\MGKIM\8.BSONE\BSONE.SFC\TOCSG.MODULE\BS1FLT\TOOL\X64\RELEASE\DEVICESETUP.OBJ|C:\MGKIM\8.BSONE\BSONE.SFC\TOCSG.MODULE\BS1FLT\TOOL\X64\RELEASE\PCH.OBJ|C:\MGKIM\8.BSONE\BSONE.SFC\TOCSG.MODULE\BS1FLT\TOOL\X64\RELEASE\TOOL.OBJ|C:\MGKIM\8.BSONE\BSONE.SFC\TOCSG.MODULE\BS1FLT\TOOL\X64\RELEASE\TOOL.RES|C:\MGKIM\8.BSONE\BSONE.SFC\TOCSG.MODULE\BS1FLT\TOOL\X64\RELEASE\TOOLDLG.OBJ
|
||||
C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\tool\x64\Release\bs1fltputool.IPDB
|
||||
C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\tool\x64\Release\bs1fltputool.iobj
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -3,8 +3,8 @@ object AuthForm: TAuthForm
|
|||
Top = 0
|
||||
BorderIcons = [biMinimize, biMaximize]
|
||||
Caption = 'BSOne Login'
|
||||
ClientHeight = 171
|
||||
ClientWidth = 146
|
||||
ClientHeight = 199
|
||||
ClientWidth = 228
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
|
|
@ -15,30 +15,42 @@ object AuthForm: TAuthForm
|
|||
TextHeight = 15
|
||||
object Label1: TLabel
|
||||
Left = 8
|
||||
Top = 8
|
||||
Width = 11
|
||||
Height = 15
|
||||
Top = 16
|
||||
Width = 33
|
||||
Height = 17
|
||||
Caption = 'ID'
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -13
|
||||
Font.Name = 'Segoe UI'
|
||||
Font.Style = []
|
||||
ParentFont = False
|
||||
end
|
||||
object Label2: TLabel
|
||||
Left = 8
|
||||
Top = 58
|
||||
Width = 18
|
||||
Height = 15
|
||||
Top = 68
|
||||
Width = 41
|
||||
Height = 17
|
||||
Caption = 'PW'
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -13
|
||||
Font.Name = 'Segoe UI'
|
||||
Font.Style = []
|
||||
ParentFont = False
|
||||
end
|
||||
object EditID: TEdit
|
||||
Left = 8
|
||||
Top = 29
|
||||
Width = 129
|
||||
Top = 39
|
||||
Width = 212
|
||||
Height = 23
|
||||
TabOrder = 0
|
||||
TextHint = 'ID'#47484' '#51077#47141#54616#49464#50836
|
||||
end
|
||||
object EditPW: TEdit
|
||||
Left = 8
|
||||
Top = 79
|
||||
Width = 129
|
||||
Top = 91
|
||||
Width = 212
|
||||
Height = 23
|
||||
PasswordChar = '*'
|
||||
TabOrder = 1
|
||||
|
|
@ -46,9 +58,9 @@ object AuthForm: TAuthForm
|
|||
end
|
||||
object ButtonLogin: TButton
|
||||
Left = 8
|
||||
Top = 120
|
||||
Width = 129
|
||||
Height = 33
|
||||
Top = 128
|
||||
Width = 212
|
||||
Height = 49
|
||||
Caption = 'Login'
|
||||
Default = True
|
||||
TabOrder = 2
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -1,20 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<BorlandProject>
|
||||
<Transactions>
|
||||
<Transaction>1899-12-30 00:00:00.000.796,C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\BsoneDebug.pas=</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.471,=C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\BsoneDebug.pas</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.033,=C:\mgkim\8.bsone\BSOne.SFC\eCrmHE\DLL_eCrmHeHelper\WindowFinderThread.pas</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.246,=C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\BsoneDebug.pas</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.318,=C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\FileHandleListUnit.pas</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.894,C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\FileHandleListUnit.pas=</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.546,=C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\FileHandleListUnit.pas</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.934,C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\ObexParserUnit.pas=</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.283,=C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\BsoneUtil.pas</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.853,C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\BsoneUtil.pas=</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.508,=C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\BsoneUtil.pas</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.691,=C:\mgkim\8.bsone\BSOne.SFC\eCrmHE\DLL_eCrmHeHelper\Unit1.pas</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.581,=C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\ObexParserUnit.pas</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.934,C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\ObexParserUnit.pas=</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.033,=C:\mgkim\8.bsone\BSOne.SFC\eCrmHE\DLL_eCrmHeHelper\WindowFinderThread.pas</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.361,=C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\ObexParserUnit.pas</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.713,C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\ApiHookContents.pas=C:\mgkim\8.bsone\BSOne.SFC\eCrmHE\DLL_eCrmHeHelper\Unit1.pas</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.546,=C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\FileHandleListUnit.pas</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.894,C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\FileHandleListUnit.pas=</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.318,=C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\FileHandleListUnit.pas</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.246,=C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\BsoneDebug.pas</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.508,=C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\BsoneUtil.pas</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.853,C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\BsoneUtil.pas=</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.283,=C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\BsoneUtil.pas</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.691,=C:\mgkim\8.bsone\BSOne.SFC\eCrmHE\DLL_eCrmHeHelper\Unit1.pas</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.471,=C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\BsoneDebug.pas</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.796,C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\BsoneDebug.pas=</Transaction>
|
||||
<Transaction>1899-12-30 00:00:00.000.713,C:\mgkim\8.bsone\BSOne.SFC\eCrmHE\DLL_eCrmHeHelper\Unit1.pas=C:\mgkim\8.bsone\BSOne.SFC\Tocsg.Module\Bs1Flt\MTPMon\MTPControl\ApiHookContents.pas</Transaction>
|
||||
</Transactions>
|
||||
</BorlandProject>
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -2185,6 +2185,27 @@ object DlgeCrmHeInstMain: TDlgeCrmHeInstMain
|
|||
Caption = #51312#54924
|
||||
OnClick = btnInfoClick
|
||||
end
|
||||
object Label20: TLabel
|
||||
Left = 48
|
||||
Top = 122
|
||||
Width = 70
|
||||
Height = 17
|
||||
Alignment = taRightJustify
|
||||
Caption = 'IP '#51221#48372' '#51077#47141
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -13
|
||||
Font.Name = 'Segoe UI'
|
||||
Font.Style = []
|
||||
ParentFont = False
|
||||
end
|
||||
object Label21: TLabel
|
||||
Left = 321
|
||||
Top = 124
|
||||
Width = 33
|
||||
Height = 15
|
||||
Caption = #54252#53944' : '
|
||||
end
|
||||
object edEmpNo: TEdit
|
||||
Left = 150
|
||||
Top = 164
|
||||
|
|
@ -2215,6 +2236,31 @@ object DlgeCrmHeInstMain: TDlgeCrmHeInstMain
|
|||
State = cbChecked
|
||||
TabOrder = 2
|
||||
end
|
||||
object edtIPAddress: TEdit
|
||||
Left = 150
|
||||
Top = 120
|
||||
Width = 155
|
||||
Height = 23
|
||||
TabOrder = 3
|
||||
Text = '192.168.15.197'
|
||||
end
|
||||
object edtPort: TEdit
|
||||
Left = 360
|
||||
Top = 120
|
||||
Width = 63
|
||||
Height = 23
|
||||
TabOrder = 4
|
||||
Text = '8443'
|
||||
end
|
||||
object chkIPCheck: TCheckBox
|
||||
Left = 429
|
||||
Top = 120
|
||||
Width = 97
|
||||
Height = 17
|
||||
Caption = 'IP '#51217#49549' '#52404#53356
|
||||
TabOrder = 5
|
||||
OnClick = ClickiPCheck
|
||||
end
|
||||
end
|
||||
object cdInstall: TCard
|
||||
Left = 0
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ uses
|
|||
Vcl.Imaging.pngimage, PngImageList, System.ImageList, Vcl.ImgList,
|
||||
Vcl.WinXPanels, Vcl.ComCtrls, VirtualTrees, Vcl.Buttons,
|
||||
IdHTTP, IdSSLOpenSSL, IdIOHandler, System.Actions, Vcl.ActnList, AbArcTyp,
|
||||
AbUtils, Tocsg.Obj, superobject;
|
||||
AbUtils, Tocsg.Obj, superobject, System.Net.HttpClient, System.Net.URLClient;
|
||||
|
||||
//{$DEFINE _MOTRAS_}
|
||||
//{$DEFINE _SILENT_}
|
||||
|
|
@ -98,6 +98,11 @@ type
|
|||
acPrev: TAction;
|
||||
acComplete: TAction;
|
||||
acReinstall: TAction;
|
||||
Label20: TLabel;
|
||||
edtIPAddress: TEdit;
|
||||
edtPort: TEdit;
|
||||
Label21: TLabel;
|
||||
chkIPCheck: TCheckBox;
|
||||
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: Integer);
|
||||
procedure imgMinClick(Sender: TObject);
|
||||
|
|
@ -137,12 +142,18 @@ type
|
|||
procedure acCompleteExecute(Sender: TObject);
|
||||
procedure acNextExecute(Sender: TObject);
|
||||
procedure acPrevExecute(Sender: TObject);
|
||||
procedure clickIpCheck(Sender: TObject);
|
||||
private
|
||||
{ Private declarations }
|
||||
HTTP_: TIdHTTP;
|
||||
SSL_: TIdSSLIOHandlerSocketOpenSSL;
|
||||
sEmpNoVerifyOK_: String;
|
||||
|
||||
ip_: string;
|
||||
port_: string;
|
||||
serverInfo_: string;
|
||||
procedure InitHttp;
|
||||
function btnIpCheckClick: Boolean;
|
||||
function CheckEmpNo: Boolean;
|
||||
function LoadEmpNo: Boolean;
|
||||
procedure SetImgBtn(aImgList: TPngImageList; imgBtn: TImage; nImgIdx: Integer);
|
||||
|
|
@ -172,6 +183,13 @@ type
|
|||
procedure SaveFileInfo(sPath: String);
|
||||
end;
|
||||
|
||||
type
|
||||
TCertValidator = class
|
||||
public
|
||||
procedure DoValidateServerCertificate(const Sender: TObject; const ARequest: TURLRequest;
|
||||
const Certificate: TCertificate; var Accepted: Boolean);
|
||||
end;
|
||||
|
||||
function ProcessInstall(aInstForm: TDlgeCrmHeInstMain; bStartSvc: Boolean = false): Boolean;
|
||||
|
||||
var
|
||||
|
|
@ -259,20 +277,20 @@ begin
|
|||
if FileExists(FileList_[i]) then
|
||||
begin
|
||||
|
||||
if Pos('si.dat', FileList_[i]) > 0 then
|
||||
begin
|
||||
var sidat, encsidat: TStringStream;
|
||||
var siO:ISuperObject;
|
||||
|
||||
Guard(sidat, TStringStream.Create('', TEncoding.UTF8));
|
||||
sidat.LoadFromFile(FileList_[i]);
|
||||
// siO := SO(sidat.DataString);
|
||||
OutputDebugString(PChar(Format('[MGKIM] Encrypt ok : DataString : %s',[sidat.DataString])));
|
||||
Guard(encsidat, TStringStream.Create(
|
||||
EncStrToBinStr(ekAes256cbc, PASS_MODEL, sidat.DataString), TEncoding.UTF8));
|
||||
encsidat.SaveToFile(FileList_[i]);
|
||||
OutputDebugString(PChar(Format('[MGKIM] Encrypt ok : %s',[PChar(FileList_[i])])));
|
||||
end;
|
||||
// if Pos('si.dat', FileList_[i]) > 0 then
|
||||
// begin
|
||||
// var sidat, encsidat: TStringStream;
|
||||
// var siO:ISuperObject;
|
||||
//
|
||||
// Guard(sidat, TStringStream.Create('', TEncoding.UTF8));
|
||||
// sidat.LoadFromFile(FileList_[i]);
|
||||
//// siO := SO(sidat.DataString);
|
||||
// OutputDebugString(PChar(Format('[MGKIM] Encrypt ok : DataString : %s',[sidat.DataString])));
|
||||
// Guard(encsidat, TStringStream.Create(
|
||||
// EncStrToBinStr(ekAes256cbc, PASS_MODEL, sidat.DataString), TEncoding.UTF8));
|
||||
// encsidat.SaveToFile(FileList_[i]);
|
||||
// OutputDebugString(PChar(Format('[MGKIM] Encrypt ok : %s',[PChar(FileList_[i])])));
|
||||
// end;
|
||||
|
||||
sHash := GetFileToSha256(FileList_[i]);
|
||||
if sHash <> '' then
|
||||
|
|
@ -888,6 +906,18 @@ begin
|
|||
|
||||
if Result then
|
||||
begin
|
||||
var O: ISuperObject;
|
||||
var ss: TStringStream;
|
||||
|
||||
O := SO;
|
||||
O.S['SvrDest'] := DlgeCrmHeInstMain.serverInfo_;
|
||||
Guard(ss, TStringStream.Create(
|
||||
EncStrToBinStr(ekAes256cbc, PASS_MODEL, O.AsString), TEncoding.UTF8));
|
||||
|
||||
ss.SaveToFile(sInstDir + 'si.dat');
|
||||
OutputDebugString(PChar(Format('[MGKIM] si dat ok : %s, %s',[PChar(sInstDir + 'si.dat'), DlgeCrmHeInstMain.serverInfo_])));
|
||||
InstFileInfo.FileList_.Add(PChar(sInstDir + 'si.dat'));
|
||||
|
||||
InstFileInfo.SaveFileInfo(sBackDir + 'rst.00');
|
||||
end;
|
||||
|
||||
|
|
@ -1350,24 +1380,38 @@ begin
|
|||
|
||||
InitHttp;
|
||||
|
||||
Guard(SvrList, TStringList.Create);
|
||||
GetDestServerList(SvrList);
|
||||
ASSERT(SvrList.Count > 0);
|
||||
// Guard(SvrList, TStringList.Create);
|
||||
// GetDestServerList(SvrList);
|
||||
// ASSERT(SvrList.Count > 0);
|
||||
|
||||
for i := 0 to SvrList.Count - 1 do
|
||||
var serverInfo: string;
|
||||
serverInfo := 'https://' + edtIPAddress.Text + ':' + edtPort.Text + '/agentLogRequests.do';
|
||||
|
||||
sInfo := GetEmpNoInfo(serverInfo, HTTP_, edEmpNo.Text);
|
||||
if sInfo <> '' then
|
||||
begin
|
||||
sInfo := GetEmpNoInfo(SvrList[i], HTTP_, edEmpNo.Text);
|
||||
if sInfo <> '' then
|
||||
begin
|
||||
try
|
||||
O := SO(sInfo);
|
||||
break;
|
||||
except
|
||||
// ..
|
||||
end;
|
||||
try
|
||||
O := SO(sInfo);
|
||||
except
|
||||
// ..
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
// for i := 0 to SvrList.Count - 1 do
|
||||
// begin
|
||||
// sInfo := GetEmpNoInfo(SvrList[i], HTTP_, edEmpNo.Text);
|
||||
// if sInfo <> '' then
|
||||
// begin
|
||||
// try
|
||||
// O := SO(sInfo);
|
||||
// break;
|
||||
// except
|
||||
// // ..
|
||||
// end;
|
||||
// end;
|
||||
// end;
|
||||
|
||||
if (O <> nil) and (O.S['result'] <> 'false') then
|
||||
begin
|
||||
sEmpNoVerifyOK_ := edEmpNo.Text;
|
||||
|
|
@ -1390,6 +1434,115 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure TCertValidator.DoValidateServerCertificate(const Sender: TObject; const ARequest: TURLRequest;
|
||||
const Certificate: TCertificate; var Accepted: Boolean);
|
||||
begin
|
||||
// 핵심: 인증서가 만료되었거나 IP 주소라서 안 맞거나, 사설 인증서라도 무조건 통과(True) 시킴!
|
||||
Accepted := True;
|
||||
end;
|
||||
|
||||
function CheckServerConnection(const AUrl: string): Boolean;
|
||||
var
|
||||
Client: THTTPClient;
|
||||
Response: IHTTPResponse;
|
||||
Validator: TCertValidator; // 더미 클래스 변수 추가
|
||||
begin
|
||||
Result := False;
|
||||
Validator := TCertValidator.Create; // 이벤트 처리용 객체 생성
|
||||
// HTTP 클라이언트 객체 생성
|
||||
Client := THTTPClient.Create;
|
||||
try
|
||||
// [핵심] 연결 시도 중 UI가 영원히 멈추는 것을 방지하기 위한 타임아웃 설정 (밀리초)
|
||||
Client.ConnectionTimeout := 3000; // 3초 내에 연결 안 되면 포기
|
||||
Client.ResponseTimeout := 3000; // 연결 후 3초 내에 응답 없으면 포기
|
||||
|
||||
Client.OnValidateServerCertificate := Validator.DoValidateServerCertificate;
|
||||
|
||||
try
|
||||
// GET 방식 요청
|
||||
Response := Client.Get(AUrl);
|
||||
|
||||
// 서버가 정상적으로 응답했는지 상태 코드 확인 (200 = OK)
|
||||
// *참고: 웹 서버가 켜져있다는 것 자체만 확인하려면 Response가 돌아온 것만으로도 True를 줄 수 있습니다.
|
||||
if Response.StatusCode = 200 then
|
||||
Result := True
|
||||
else
|
||||
begin
|
||||
// 404(Not Found)나 500(Server Error) 등이 발생했을 때의 처리
|
||||
// _Trace(Format('서버 응답 오류: %d', [Response.StatusCode]));
|
||||
OutputDebugString(PChar(Format('[MGKIM] 서버 응답 오류: %d', [Response.StatusCode])));
|
||||
Result := False;
|
||||
end;
|
||||
except
|
||||
on E: Exception do
|
||||
begin
|
||||
// 타임아웃, 네트워크 단절, 서버 다운 등의 경우 이곳으로 빠집니다.
|
||||
// _Trace('접속 실패: ' + E.Message);
|
||||
OutputDebugString(PChar('[MGKIM] 접속 실패: ' + E.Message));
|
||||
Result := False;
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
Client.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TDlgeCrmHeInstMain.btnIpCheckClick: Boolean;
|
||||
var
|
||||
ip: string;
|
||||
port: string;
|
||||
begin
|
||||
|
||||
Result:= False;
|
||||
|
||||
// if chkIPCheck.Enabled then
|
||||
// exit;
|
||||
|
||||
ip:= edtIPAddress.Text;
|
||||
if ip = '' then
|
||||
begin
|
||||
ShowMessage('IP 정보를 입력해주세요');
|
||||
exit;
|
||||
end;
|
||||
|
||||
port:= edtPort.Text;
|
||||
if port = '' then
|
||||
begin
|
||||
ShowMessage('포트 정보를 입력해주세요');
|
||||
exit;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
var serverInfo: string;
|
||||
serverInfo := 'https://' + edtIPAddress.Text + ':' + edtPort.Text;
|
||||
|
||||
OutputDebugString(PChar(Format('[MGKIM] btnIpCheckClick ok .. (%s)(%d)(%s)',[ip, port.ToInteger(), serverInfo])));
|
||||
|
||||
// 마우스 커서를 모래시계(로딩) 상태로 변경 (사용자 UX 향상)
|
||||
Screen.Cursor := crHourGlass;
|
||||
try
|
||||
if CheckServerConnection(serverInfo) then
|
||||
begin
|
||||
ShowMessage('서버에 성공적으로 접속되었습니다.');
|
||||
Result:= True;
|
||||
// TODO: 접속 성공 시 다음 로직 수행
|
||||
end
|
||||
else
|
||||
begin
|
||||
ShowMessage('서버 접속에 실패했습니다.' + sLineBreak +
|
||||
'IP 주소와 포트 번호, 서버 상태를 확인해 주세요.');
|
||||
end;
|
||||
finally
|
||||
// 검사가 끝나면 마우스 커서 원상복구
|
||||
//Screen.Cursor := crDefault;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
|
||||
|
||||
function TDlgeCrmHeInstMain.CheckEmpNo: Boolean;
|
||||
var
|
||||
SvrList: TStringList;
|
||||
|
|
@ -1413,16 +1566,70 @@ begin
|
|||
GetDestServerList(SvrList);
|
||||
ASSERT(SvrList.Count > 0);
|
||||
|
||||
for i := 0 to SvrList.Count - 1 do
|
||||
begin
|
||||
if VerifyEmpNo(SvrList[i], HTTP_, edEmpNo.Text) then
|
||||
begin
|
||||
sEmpNoVerifyOK_ := edEmpNo.Text;
|
||||
//https://localhost:8443/agentLogRequests.do
|
||||
var serverInfo: string;
|
||||
serverInfo := 'https://' + edtIPAddress.Text + ':' + edtPort.Text + '/agentLogRequests.do';
|
||||
|
||||
Result := true;
|
||||
exit;
|
||||
end;
|
||||
if VerifyEmpNo(serverInfo, HTTP_, edEmpNo.Text) then
|
||||
begin
|
||||
sEmpNoVerifyOK_ := edEmpNo.Text;
|
||||
|
||||
Result := true;
|
||||
exit;
|
||||
end;
|
||||
|
||||
// for i := 0 to SvrList.Count - 1 do
|
||||
// begin
|
||||
// if VerifyEmpNo(SvrList[i], HTTP_, edEmpNo.Text) then
|
||||
// begin
|
||||
// sEmpNoVerifyOK_ := edEmpNo.Text;
|
||||
//
|
||||
// Result := true;
|
||||
// exit;
|
||||
// end;
|
||||
// end;
|
||||
end;
|
||||
|
||||
procedure TDlgeCrmHeInstMain.clickIpCheck(Sender: TObject);
|
||||
var
|
||||
state : Boolean;
|
||||
|
||||
begin
|
||||
if not chkIPCheck.Checked then
|
||||
begin
|
||||
|
||||
edtIPAddress.ReadOnly := False;
|
||||
edtPort.ReadOnly := False;
|
||||
edtIPAddress.Color := clWindow;
|
||||
edtPort.Color := clWindow;
|
||||
Exit;
|
||||
end;
|
||||
|
||||
try
|
||||
state := btnIpCheckClick;
|
||||
if state then
|
||||
begin
|
||||
edtIPAddress.ReadOnly := True;
|
||||
edtPort.ReadOnly := True;
|
||||
|
||||
edtIPAddress.Color := clBtnFace;
|
||||
edtPort.Color := clBtnFace;
|
||||
end
|
||||
else
|
||||
begin
|
||||
chkIPCheck.Checked := False;
|
||||
|
||||
edtIPAddress.ReadOnly := False;
|
||||
edtPort.ReadOnly := False;
|
||||
edtIPAddress.Color := clWindow;
|
||||
edtPort.Color := clWindow;
|
||||
end;
|
||||
|
||||
finally
|
||||
Screen.Cursor := crDefault;
|
||||
chkIPCheck.Checked := state;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
procedure TDlgeCrmHeInstMain.SetImgBtn(aImgList: TPngImageList; imgBtn: TImage; nImgIdx: Integer);
|
||||
|
|
@ -1779,6 +1986,28 @@ begin
|
|||
begin
|
||||
edEmpNo.Text := Trim(edEmpNo.Text);
|
||||
edVpnId.Text := Trim(edVpnId.Text);
|
||||
|
||||
if not chkIPCheck.Checked then
|
||||
begin
|
||||
MessageBox(Handle, '서버 접속 확인을 해주세요.', PChar(Caption), MB_ICONWARNING or MB_OK);
|
||||
end;
|
||||
|
||||
if edtIPAddress.Text = '' then
|
||||
begin
|
||||
MessageBox(Handle, 'IP 정보를 입력해주세요', PChar(Caption), MB_ICONWARNING or MB_OK);
|
||||
exit;
|
||||
end;
|
||||
|
||||
if edtPort.Text = '' then
|
||||
begin
|
||||
MessageBox(Handle, '포트 정보를 입력해주세요', PChar(Caption), MB_ICONWARNING or MB_OK);
|
||||
exit;
|
||||
end;
|
||||
|
||||
ip_:= edtIPAddress.Text;
|
||||
port_:= edtPort.Text;
|
||||
serverInfo_ := 'https://' + ip_ + ':' + port_ + '/agentLogRequests.do';
|
||||
|
||||
if edEmpNo.Text = '' then
|
||||
begin
|
||||
if IsCJ_Affiliates then
|
||||
|
|
@ -1796,6 +2025,8 @@ begin
|
|||
exit;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
// if edVpnId.Text = '' then
|
||||
// begin
|
||||
// MessageBox(Handle, PChar('"VPN 계정"을 입력해 주십시오.'), PChar(Caption), MB_ICONWARNING or MB_OK);
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -3,7 +3,7 @@
|
|||
interface
|
||||
|
||||
const
|
||||
BUILD_DT = '2026-03-18 20:12:14';
|
||||
BUILD_DT = '2026-03-24 16:04:51';
|
||||
|
||||
implementation
|
||||
|
||||
|
|
|
|||
|
|
@ -301,7 +301,7 @@ type
|
|||
DispLogos_,
|
||||
DispLogosST_: TDlgDispLogoList;
|
||||
KeyMonDll_: TKeyMonDLL;
|
||||
RecoverSvc_: TRecoverService;
|
||||
|
||||
|
||||
sSysDir_: String;
|
||||
{$IFDEF OLD_CB_MON}
|
||||
|
|
@ -1023,15 +1023,6 @@ begin
|
|||
|
||||
InitCtrls;
|
||||
|
||||
//mgkim 테스트를 위해 주석
|
||||
// if bExeRecover then
|
||||
// begin
|
||||
// RecoverSvc_ := TRecoverService.Create;
|
||||
// RecoverSvc_.StartService;
|
||||
// TTgTrace.T('[MGKIM] RecoverSvc.. start', 2);
|
||||
// end;
|
||||
|
||||
|
||||
if IsLogSendToWindbg then
|
||||
begin
|
||||
ProcW_ := TThdProcessWatch.Create;
|
||||
|
|
@ -1065,7 +1056,6 @@ begin
|
|||
|
||||
tMtx.Enabled := false;
|
||||
FreeAndNil(FileAbLogs_);
|
||||
FreeAndNil(RecoverSvc_);
|
||||
FreeAndNil(ThdWebOC_);
|
||||
FreeAndNil(KeyMonDll_);
|
||||
FreeAndNil(CbAbleAppList_);
|
||||
|
|
@ -2574,8 +2564,11 @@ begin
|
|||
OutputDebugString(PChar('[MGKIM] tMtxTimer ..in '));
|
||||
tMtx.Enabled := false;
|
||||
|
||||
if RecoverSvc_ <> nil then
|
||||
RecoverSvc_.StopService;
|
||||
if gMgSvc <> nil then
|
||||
begin
|
||||
if gMgSvc.RecoverSvc_ <> nil then
|
||||
gMgSvc.RecoverSvc_.StopService;
|
||||
end;
|
||||
|
||||
OutputDebugString(PChar('[MGKIM] tMtxTimer ..RecoverSvc_.StopService in '));
|
||||
|
||||
|
|
@ -5563,14 +5556,15 @@ end;
|
|||
|
||||
procedure TDlgeCrmHeMain.miIntegrityAultLogClick(Sender: TObject);
|
||||
begin
|
||||
if RecoverSvc_ <> nil then
|
||||
|
||||
if gMgSvc.RecoverSvc_ <> nil then
|
||||
begin
|
||||
RecoverSvc_.PerformInitialAudit;
|
||||
gMgSvc.RecoverSvc_.PerformInitialAudit;
|
||||
end
|
||||
else
|
||||
begin
|
||||
RecoverSvc_ := TRecoverService.Create;
|
||||
FreeAndNil(RecoverSvc_);
|
||||
gMgSvc.RecoverSvc_ := TRecoverService.Create;
|
||||
FreeAndNil(gMgSvc.RecoverSvc_);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
|
|||
|
|
@ -810,10 +810,11 @@ begin
|
|||
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);
|
||||
ubkNone : AddEnt(pNode, RS_CdCut, 'OFF');
|
||||
ubkBlock : AddEnt(pNode, RS_CdCut, 'ON');
|
||||
ubkReadOnly : AddEnt(pNode, RS_CdCut, RS_ReadOnly);
|
||||
_ubkPopup : AddEnt(pNode, RS_CdCut, RS_PopupOnly);
|
||||
ubkLog : AddEnt(pNode, RS_CdCut, RS_Log);
|
||||
end;
|
||||
AddEnt(pNode, RS_MonHardDrive, BooleanToStr(PO.DetectFixedDisk, 'ON', 'OFF'));
|
||||
|
||||
|
|
@ -936,6 +937,7 @@ begin
|
|||
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, '차단');
|
||||
|
|
|
|||
|
|
@ -444,8 +444,8 @@ type
|
|||
OutPo: TOutlookPolicy;
|
||||
|
||||
MtpBlockKind: TUsbBlockKind;
|
||||
BlueBlockKind,
|
||||
CdromBlockKind: TDevBlockKind;
|
||||
BlueBlockKind : TDevBlockKind;
|
||||
CdromBlockKind: TUsbBlockKind;
|
||||
WebbMonKind: TWebbMonKind;
|
||||
USBPopup,
|
||||
BTPopup,
|
||||
|
|
@ -1586,7 +1586,7 @@ begin
|
|||
UsbBlockKind := ubkNone;
|
||||
MtpBlockKind := ubkNone;
|
||||
BlueBlockKind := dbkNone;
|
||||
CdromBlockKind := dbkNone;
|
||||
CdromBlockKind := ubkNone;
|
||||
AppInstKind := aikNone;
|
||||
USBPopup := false;
|
||||
BTPopup := false;
|
||||
|
|
@ -2741,11 +2741,14 @@ begin
|
|||
CdAllowPopup := BooleanStr(aO.S[MgPo_.GetPoKey('int_cdAllowNotice', CP)]);
|
||||
sTemp := aO.S[MgPo_.GetPoKey('INT_CDBLOCKENABLE', CP)].ToLower;
|
||||
if sTemp = 'true' then
|
||||
CdromBlockKind := dbkBlock
|
||||
CdromBlockKind := ubkBlock
|
||||
else if sTemp = 'readonly' then
|
||||
CdromBlockKind := ubkReadOnly
|
||||
else if (sTemp = 'logonly') or (sTemp = 'log') then
|
||||
CdromBlockKind := dbkLog
|
||||
CdromBlockKind := ubkLog
|
||||
else
|
||||
CdromBlockKind := dbkNone;
|
||||
CdromBlockKind := ubkNone;
|
||||
|
||||
CdromExcept := StrListToCommaStr(aO.S[MgPo_.GetPoKey('INT_CDBLOCKEXCEPT', CP)], ';');
|
||||
AbleCdExceptReq := BooleanStr(aO.S[MgPo_.GetPoKey('INT_CDAPPROVE', CP)]); // CD/DVD 차단, 차단 시 예외 신청 허용
|
||||
|
||||
|
|
@ -3723,13 +3726,13 @@ begin
|
|||
BlueBlockKind := dbkNone;
|
||||
sTemp := Trim(S['KEY_CDROMBLOCK']).ToLower;
|
||||
if sTemp = 'true' then
|
||||
CdromBlockKind := dbkBlock
|
||||
CdromBlockKind := ubkBlock
|
||||
else if sTemp = 'popup' then
|
||||
CdromBlockKind := _dbkPopup
|
||||
CdromBlockKind := _ubkPopup
|
||||
else if sTemp = 'logonly' then
|
||||
CdromBlockKind := dbkLog
|
||||
CdromBlockKind := ubkLog
|
||||
else
|
||||
CdromBlockKind := dbkNone;
|
||||
CdromBlockKind := ubkNone;
|
||||
|
||||
AutoRunBlock := Trim(S['KEY_AUTORUNBLOCK']).ToLower = 'true';
|
||||
HostEnable := Trim(S['mwOKey_OPTIONC']).ToLower = 'true';
|
||||
|
|
@ -5009,7 +5012,7 @@ begin
|
|||
OutPo := TTgJson.GetDataAsType<TOutlookPolicy>(O['OutPo']);
|
||||
MtpBlockKind := TUsbBlockKind(I['MtpBlockKind']);
|
||||
BlueBlockKind := TDevBlockKind(I['BlueBlockKind']);
|
||||
CdromBlockKind := TDevBlockKind(I['CdromBlockKind']);
|
||||
CdromBlockKind := TUsbBlockKind(I['CdromBlockKind']);
|
||||
USBPopup := B['USBPopup'];
|
||||
BTPopup := B['BTPopup'];
|
||||
CDPopup := B['CDPopup'];
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ uses
|
|||
ThdUsbMon, ManagerHook, ThdSendFiles, ThdWinUpdateScan, ThdRouteMon,
|
||||
Tocsg.Process, HandleSecurity, AppCtrlDefine, Tocsg.WndUtil,
|
||||
ManagerCampaign, ManagerRule, superobject, Define, ThdReaction,
|
||||
Vcl.Graphics, DSchPiNoti, Tocsg.Win32, Tocsg.Fasoo, UserAuthentification,
|
||||
Vcl.Graphics, DSchPiNoti, Tocsg.Win32, Tocsg.Fasoo, UserAuthentification, RecoverService,
|
||||
ThdPrintWork, xPrintLogService, ManagerPrint, ThdScreenRecord, ProcessRecentDoc, Bs1FltCtrl, DeviceGuard.Logic;
|
||||
|
||||
{$I Define.inc}
|
||||
|
|
@ -440,6 +440,8 @@ type
|
|||
|
||||
bIsManualSecurityMode_: Boolean; // 로그인 성공시 보안모드 진입 플
|
||||
|
||||
|
||||
|
||||
procedure Lock;
|
||||
procedure Unlock;
|
||||
procedure DevLock;
|
||||
|
|
@ -507,7 +509,9 @@ type
|
|||
procedure SetModeKind(aKind: TBS1ModeKind);
|
||||
procedure SetModeName(sModeName: String);
|
||||
function GetModeName: String;
|
||||
procedure SendStartAgentAuditLog;
|
||||
public
|
||||
RecoverSvc_: TRecoverService;
|
||||
AgentInfo: TCheckAgentInfo;
|
||||
|
||||
UpdateTick: DWORD;
|
||||
|
|
@ -591,7 +595,7 @@ type
|
|||
function SendHwInfo: Boolean;
|
||||
procedure SendScreenRecord(sReason, sMp4Path: String; nMilSec: Integer);
|
||||
//mgkim
|
||||
procedure SendAuditLog(const JsonReport: string);
|
||||
procedure SendIntegrityAuditLog(const JsonReport: string);
|
||||
|
||||
function SendApproval(nType: Integer; pData: Pointer; bUpFileCnt: Integer = 0): String;
|
||||
procedure SendAgreeInfo;
|
||||
|
|
@ -817,7 +821,7 @@ uses
|
|||
var
|
||||
// _bmpWaterP: TBitmap = nil;
|
||||
_bmpST: TBitmap = nil;
|
||||
|
||||
backupCdromBlockKind: TUsbBlockKind;
|
||||
|
||||
//const
|
||||
// JSON_CONNCHECK = '{"Request : ConnectionCheck"}';
|
||||
|
|
@ -1708,8 +1712,10 @@ begin
|
|||
DcFltCtrlEnt_ := TDictionary<String,String>.Create;
|
||||
|
||||
// IgnoreDriverLoad
|
||||
_Trace('에이전트 시작 시간: %s',[agentStatTime_], 1);
|
||||
agentStatTime_:= FormatDateTime('yyyy-mm-dd"T"hh:nn:ss"+09:00"', Now);
|
||||
_Trace('에이전트 시작 시간: %s',[agentStatTime_], 1);
|
||||
SendStartAgentAuditLog;
|
||||
|
||||
if UseFltCtrl then
|
||||
begin
|
||||
var state : DWORD;
|
||||
|
|
@ -1745,6 +1751,8 @@ begin
|
|||
FltCtrl_.SetProcessPath(PG_PID_ALLOW, Pchar('tstxtract.exe'));
|
||||
FltCtrl_.SetProcessPath(PG_PID_ALLOW, Pchar('FilterTestDotNet.exe'));
|
||||
|
||||
FltCtrl_.SetFileName(PG_PID_ALLOW, Pchar('eCrmHomeEdition.exe'));
|
||||
FltCtrl_.SetFileName(PG_PID_ALLOW, Pchar('eCrmHomeEdition.ini'));
|
||||
FltCtrl_.SetFileName(PG_FILE_ALLOW, Pchar('Bs1ovi.dll'));
|
||||
FltCtrl_.SetFileName(PG_FILE_ALLOW, Pchar('Bs1ovm.dll'));
|
||||
FltCtrl_.SetFileName(PG_FILE_ALLOW, Pchar('eCrmHeHelper.dll'));
|
||||
|
|
@ -1910,6 +1918,23 @@ begin
|
|||
if NotUseUAC then
|
||||
InstallOutlookPlugIn_forHD(hRcvHwnd_);
|
||||
|
||||
var ini: TIniFile;
|
||||
var bExeRecover: Boolean;
|
||||
var sPath := GetProgramFilesDir + DIR_TG + INI_FORCEHE;
|
||||
if FileExists(sPath) then
|
||||
begin
|
||||
Guard(ini, TIniFile.Create(sPath));
|
||||
bExeRecover := ini.ReadBool('Force', 'RecoverFile', true);
|
||||
|
||||
if bExeRecover then
|
||||
begin
|
||||
RecoverSvc_ := TRecoverService.Create;
|
||||
RecoverSvc_.StartService;
|
||||
TTgTrace.T('[MGKIM] RecoverSvc.. start', 2);
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
|
||||
end;
|
||||
|
||||
|
|
@ -2002,6 +2027,7 @@ begin
|
|||
FreeAndNil(MgCampn_);
|
||||
FreeAndNil(CSDev_);
|
||||
FreeAndNil(CS_);
|
||||
FreeAndNil(RecoverSvc_);
|
||||
end;
|
||||
|
||||
procedure TManagerService.Lock;
|
||||
|
|
@ -2380,7 +2406,8 @@ var
|
|||
LogInfo: TLogInfo;
|
||||
begin
|
||||
try
|
||||
if ModePolicy.CdromBlockKind = dbkBlock then
|
||||
|
||||
if ModePolicy.CdromBlockKind = ubkBlock then
|
||||
begin
|
||||
Guard(IgrList, TStringList.Create);
|
||||
IgrList.CaseSensitive := false;
|
||||
|
|
@ -2392,8 +2419,6 @@ begin
|
|||
end;
|
||||
SplitString(sCdException_, ';', IgrList);
|
||||
|
||||
FltCtrl_.SetPolicy(DWORD(BDC_CDROM), DWORD(dsDisable), 0);
|
||||
|
||||
dwLogicalDrv := GetLogicalDrives;
|
||||
for i := 0 to 31 do
|
||||
begin
|
||||
|
|
@ -2537,11 +2562,11 @@ begin
|
|||
end;
|
||||
end;
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
FltCtrl_.SetPolicy(DWORD(BDC_CDROM), DWORD(dsEnable), 0);
|
||||
end;
|
||||
// else
|
||||
// begin
|
||||
// FltCtrl_.SetPolicy(DWORD(BDC_CDROM), DWORD(dsEnable), 0);
|
||||
// end;
|
||||
except
|
||||
on E: Exception do
|
||||
ETgException.TraceException(Self, E, 'Fail .. DoEjectCDROM()');
|
||||
|
|
@ -5430,11 +5455,11 @@ begin
|
|||
|
||||
_Trace('[MGKIM] Usb Disable!!!! .. (%s) <> (%s)',[sExceptUsbDevKn_, PO.IgrUsbSerialsKn]);
|
||||
|
||||
// FltCtrl_.SetPolicy(DWORD(BDC_USB_DISK), DWORD(dsDisable), 1);
|
||||
// FltCtrl_.SetPolicy(DWORD(BDC_EXTERNALHDD), DWORD(dsDisable), 1);
|
||||
FltCtrl_.SetPolicy(DWORD(BDC_USB), DWORD(dsDisable), DWORD(1));
|
||||
FltCtrl_.SetPolicy(DWORD(BDC_USB_DISK), DWORD(dsDisable), 1);
|
||||
FltCtrl_.SetPolicy(DWORD(BDC_EXTERNALHDD), DWORD(dsDisable), 1);
|
||||
// FltCtrl_.SetPolicy(DWORD(BDC_USB), DWORD(dsDisable), DWORD(1));
|
||||
//UsbRestart;
|
||||
DeviceGuard_.UsbReStart;
|
||||
// DeviceGuard_.UsbReStart;
|
||||
// DeviceGuard_.UsbPortApplyPolicy(dsDisable);
|
||||
FltCtrlPolicy_ := DWORD(dsDisable);
|
||||
|
||||
|
|
@ -5473,10 +5498,10 @@ begin
|
|||
begin
|
||||
sExceptUsbDevKn_ := '';
|
||||
FltCtrl_.ClearUsbException;
|
||||
// FltCtrl_.SetPolicy(DWORD(BDC_USB_DISK), DWORD(dsEnable), 0);
|
||||
// FltCtrl_.SetPolicy(DWORD(BDC_EXTERNALHDD), DWORD(dsEnable), 0);
|
||||
_Trace('Usb Enable!!!!');
|
||||
FltCtrl_.SetPolicy(DWORD(BDC_USB), DWORD(dsEnable), DWORD(1));
|
||||
FltCtrl_.SetPolicy(DWORD(BDC_USB_DISK), DWORD(dsEnable), 0);
|
||||
FltCtrl_.SetPolicy(DWORD(BDC_EXTERNALHDD), DWORD(dsEnable), 0);
|
||||
// _Trace('Usb Enable!!!!');
|
||||
// FltCtrl_.SetPolicy(DWORD(BDC_USB), DWORD(dsEnable), DWORD(1));
|
||||
// DeviceGuard_.UsbPortApplyPolicy(dsEnable);
|
||||
FltCtrlPolicy_ := DWORD(dsEnable);
|
||||
end;
|
||||
|
|
@ -6404,6 +6429,9 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
|
||||
procedure TManagerService.UpdatePolicyActive(aPrefModel: TPrefModel);
|
||||
var
|
||||
i: Integer;
|
||||
|
|
@ -7110,8 +7138,24 @@ begin
|
|||
// end;
|
||||
|
||||
// CD/DVD 차단
|
||||
if CdromBlockKind = dbkBlock then
|
||||
|
||||
// _Trace('[MGKIM] CdromBlockKind : %d', [DWORD(CdromBlockKind)]);
|
||||
if CdromBlockKind = ubkBlock then
|
||||
begin
|
||||
DoEjectCDROM;
|
||||
FltCtrl_.SetPolicy(DWORD(BDC_CDROM), DWORD(dsDisable), 0);
|
||||
end
|
||||
else if (CdromBlockKind = ubkReadOnly) and (backupCdromBlockKind <> ubkReadOnly) then
|
||||
begin
|
||||
|
||||
FltCtrl_.SetPolicy(DWORD(BDC_CDROM), DWORD(dsReadOnly), 0);
|
||||
if GetModePolicy.CDPopup then
|
||||
PopupMessage(TYPE_MSG_PREVENT_CDROM, 'ReadOnly');
|
||||
|
||||
backupCdromBlockKind := CdromBlockKind;
|
||||
end
|
||||
else
|
||||
FltCtrl_.SetPolicy(DWORD(BDC_CDROM), DWORD(dsEnable), 0);
|
||||
|
||||
// 라우팅테이블 변경 차단
|
||||
if RouteEnable then
|
||||
|
|
@ -7557,7 +7601,7 @@ var
|
|||
sMsg: String;
|
||||
llSize: LONGLONG;
|
||||
UsbBlockKind: TUsbBlockKind;
|
||||
DevBlockKind: TDevBlockKind;
|
||||
DevBlockKind: TUsbBlockKind;
|
||||
bCdrom: Boolean;
|
||||
DriveInfo: TDriveInfo;
|
||||
Label
|
||||
|
|
@ -7674,8 +7718,8 @@ begin
|
|||
LB_ProcCDROM :
|
||||
DevBlockKind := ModePolicy.CdromBlockKind;
|
||||
case DevBlockKind of
|
||||
_dbkPopup,
|
||||
dbkLog :
|
||||
_ubkPopup,
|
||||
ubkLog :
|
||||
begin
|
||||
var sDriveInfo: String := sDrive; // Format('%s (%s)', [sDrive, ByteSizeToStr(llSize)]);
|
||||
var sType: String := GetDriveTypeToStr(nType);
|
||||
|
|
@ -7685,7 +7729,7 @@ begin
|
|||
if ModePolicy.CdAllowPopup then
|
||||
PopupMessage(TYPE_MSG_MONITOR_CDROM, sDriveInfo);
|
||||
end else begin
|
||||
if DevBlockKind = _dbkPopup then
|
||||
if DevBlockKind = _ubkPopup then
|
||||
PopupMessage(TYPE_MSG_MONITOR_CDROM, sDriveInfo);
|
||||
end;
|
||||
|
||||
|
|
@ -10648,20 +10692,18 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
procedure TManagerService.SendAuditLog(const JsonReport: string);
|
||||
procedure TManagerService.SendIntegrityAuditLog(const JsonReport: string);
|
||||
var
|
||||
KeyPath, ExpectedHash, ActualHash, Reason: string;
|
||||
Root, FileObj, SuccessArray, FailArray: ISuperObject;
|
||||
JsonLog, sHostName, sEmpId: string;
|
||||
IsSuccess: Boolean;
|
||||
begin
|
||||
_Trace('[MGKIM] SendAuditLog.. 서버 전송: %s', [JsonReport]);
|
||||
try
|
||||
|
||||
Root := SO(JsonReport);
|
||||
if Root = nil then
|
||||
begin
|
||||
_Trace('[MGKIM] 파싱 오류: 전달받은 JsonReport가 올바른 포맷이 아닙니다.');
|
||||
Exit;
|
||||
end;
|
||||
|
||||
|
|
@ -10681,10 +10723,47 @@ begin
|
|||
ThdEvent_.Push(Root.AsString);
|
||||
except
|
||||
on E: Exception do
|
||||
ETgException.TraceException(Self, E, 'Fail .. SendAuditLog()');
|
||||
ETgException.TraceException(Self, E, 'Fail .. SendIntegrityAuditLog()');
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
procedure TManagerService.SendStartAgentAuditLog;
|
||||
var
|
||||
sHostName, sEmpId: string;
|
||||
O: ISuperObject;
|
||||
begin
|
||||
|
||||
try
|
||||
|
||||
O := SO;
|
||||
|
||||
{
|
||||
"startedAt": "2026-02-27T21:33:46Z",
|
||||
"type": "startedAgent",
|
||||
"empId": "test1234",
|
||||
"hostname": "DESKTOP-R14E1EI\tocsg",
|
||||
"loggedAt": "2026-02-27T21:35:46Z"
|
||||
}
|
||||
|
||||
sEmpId := gMgSvc.AgentModel.EmpNo;
|
||||
|
||||
if IsUseHostNameOnly then
|
||||
sHostName := gMgSvc.ComName
|
||||
else
|
||||
sHostName := gMgSvc.UserName;
|
||||
|
||||
O.S['type'] := 'startedAgent';
|
||||
O.S['hostname'] := sHostName;
|
||||
O.S['empId'] := sEmpId;
|
||||
O.S['loggedAt'] := FormatDateTime('yyyy-mm-dd"T"hh:nn:ss"+09:00"', Now);
|
||||
O.S['startedAt'] := agentStatTime_;
|
||||
_Trace('[MGKIM] SendStartAgentAuditLog.. %s',[O.AsString], 1);
|
||||
ThdEvent_.Push(O.AsString);
|
||||
except
|
||||
on E: Exception do
|
||||
ETgException.TraceException(Self, E, 'Fail .. SendStartAgentAuditLog()');
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ const
|
|||
CONF_FILES = 'eCrmHeHelper.dll|eCrmHeHelper.exe|eCrmHeHelper32.dll|eCrmInterCaller.exe|' +
|
||||
'BSWmcr.exe|Bs1out.dll|Bs1out64.dll|Bs1shl.dll|Bs1uef.dat|Bs1tri.dat';
|
||||
HEBIN_FILES = 'eCrmHomeEdition.exe|ielib64.dll|KvCttSch.exe|KvCttSchw.exe|libeay32.dll|' +
|
||||
'libkm64.dll|ptnsch.dat|ssleay32.dll|bs1flt_x64.sys|bs1fltctrl.dll|bsonex32.sys|bsonex64.sys';
|
||||
'libkm64.dll|ptnsch.dat|ssleay32.dll|bs1flt_x64.sys|bs1fltctrl.dll|bsonex32.sys|bsonex64.sys|colib64.dll';
|
||||
LANG_FILES = 'eCrmHomeEdition.409.dat|eCrmHomeEdition.412.dat|eCrmHomeEdition.411.dat|' +
|
||||
'eCrmHomeEdition.804.dat|eCrmHomeEdition.404.dat';
|
||||
SLCORE_FILES = 'slcore.exe';
|
||||
|
|
@ -355,7 +355,9 @@ begin
|
|||
(sFNameLower = '7z.dll') or (sFNameLower = 'bs1flt_x64.sys') or
|
||||
(sFNameLower = 'bs1fltctrl.dll') or (sFNameLower = 'bs1ugcp.dll') or
|
||||
(sFNameLower = 'bsonex32.sys') or (sFNameLower = 'bsonex64.sys') or
|
||||
(sFNameLower = 'ecrmhomeedition') or
|
||||
(sFNameLower = 'ecrmhomeedition.exe') or (sFNameLower = 'colib64.dll') or
|
||||
(sFNameLower = 'pdfium.dll') or (sFNameLower = 'ptnsch.dat') or
|
||||
(sFNameLower = 'si.dat') or
|
||||
(sFNameLower = 'ielib64.dll') or (sFNameLower = 'ecrmheserviced.dll') then
|
||||
sResFile := 'rst.01'
|
||||
else if (sFNameLower = 'ecrmintercaller.exe') or (sFNameLower = 'ecrmhehelper.dll') or // root
|
||||
|
|
@ -363,8 +365,10 @@ begin
|
|||
(sFNameLower = 'ecrmhehelper32f.dll') or (sFNameLower = 'ecrmhehelper.exe') or
|
||||
(sFNameLower = 'bswmcr.exe') or (sFNameLower = 'bs1out.dll') or
|
||||
(sFNameLower = 'bs1tri.exe') or (sFNameLower = 'bs1shl.dll') or
|
||||
(sFNameLower = 'Bs1ovi.dll') or (sFNameLower = 'Bs1ovm.dll') or
|
||||
(sFNameLower = 'Bs1out.dll') or (sFNameLower = 'bs1out64.dll') then
|
||||
(sFNameLower = 'bs1ovi.dll') or (sFNameLower = 'bs1ovm.dll') or
|
||||
(sFNameLower = 'bs1aip.dat') or (sFNameLower = 'bs1drm.dat') or
|
||||
(sFNameLower = 'bs1uef.dat') or
|
||||
(sFNameLower = 'bs1out.dll') or (sFNameLower = 'bs1out64.dll') then
|
||||
sResFile := 'rst.03'
|
||||
else if (Pos('ecrmhomeedition.4', sFNameLower) > 0) or (sFNameLower = 'eCrmHomeEdition.804.dat') then // 언어팩 dat 파일들
|
||||
sResFile := 'rst.04'
|
||||
|
|
@ -385,10 +389,8 @@ begin
|
|||
Exit;
|
||||
end;
|
||||
|
||||
|
||||
// 파일 복구 실행 (기존 CheckAndRecover + prfwork 로직)
|
||||
try
|
||||
// 원본 코드와 동일하게 prfwork.dat 에 파일 복사 시도
|
||||
|
||||
CopyFile(PChar(sResDir + sResFile), PChar(sResPath), False);
|
||||
|
||||
_Trace('[MGKIM] 파일 변경/삭제 복구 시도됨', 2);
|
||||
|
|
@ -498,10 +500,13 @@ begin
|
|||
|
||||
_Trace('[MGKIM] 생성된 JSON: %s', [JsonLog]);
|
||||
|
||||
gMgSvc.SendAuditLog(JsonLog);
|
||||
if( gMgSvc <> nil ) then
|
||||
gMgSvc.SendIntegrityAuditLog(JsonLog)
|
||||
else
|
||||
_Trace('[MGKIM] PerformInitialAudit gMgSvc.. not create ok!!');
|
||||
except
|
||||
on E: Exception do
|
||||
ETgException.TraceException(Self, E, 'Fail .. SendAuditLog()');
|
||||
ETgException.TraceException(Self, E, 'Fail .. PerformInitialAudit()');
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
@ -512,6 +517,7 @@ procedure TRecoverService.CheckAndRecover(sResPath, sPath: String);
|
|||
sDir,
|
||||
sFName: String;
|
||||
begin
|
||||
// exit;
|
||||
try
|
||||
sFName := ExtractFileName(sPath);
|
||||
Guard(zip, TAbUnzipper.Create(nil));
|
||||
|
|
@ -807,10 +813,10 @@ begin
|
|||
sExt := GetFileExt(sFName);
|
||||
|
||||
case pInfo.dwAction of
|
||||
1 : ; // Add
|
||||
2 : ;// Delete
|
||||
3 : ;
|
||||
4 : ;
|
||||
// 1 , // Add
|
||||
2 ,// Delete
|
||||
3 ,
|
||||
4 ,
|
||||
5 :
|
||||
begin
|
||||
if (KvBinFiles_.IndexOf(sFName) <> -1) or
|
||||
|
|
|
|||
|
|
@ -504,7 +504,15 @@ begin
|
|||
var sRequsetUrl : string;
|
||||
sRequsetUrl:= sSvrIport + Format('aapi/system-logs/agents/%s', [gMgSvc.AgentId]);
|
||||
bResult := HttpPostJson(sRequsetUrl, sData) <> '';
|
||||
_Trace('[MGKIM] Post .. system-logs/agents : %s, req=1 - * .. %s, sData : %s', [sRequsetUrl, BooleanToStr(bResult, 'Success', 'Fail'), sData], 3);
|
||||
_Trace('[MGKIM] Post .. integrity, system-logs/agents : %s, req=1 - * .. %s', [sRequsetUrl, BooleanToStr(bResult, 'Success', 'Fail')], 3);
|
||||
bResult := True;
|
||||
end
|
||||
else if sData.Contains('startedAgent') then
|
||||
begin
|
||||
var sRequsetUrl : string;
|
||||
sRequsetUrl:= sSvrIport + Format('aapi/system-logs/agents/%s', [gMgSvc.AgentId]);
|
||||
bResult := HttpPostJson(sRequsetUrl, sData) <> '';
|
||||
_Trace('[MGKIM] Post .. startedAgent, system-logs/agents : %s, req=1 - * .. %s', [sRequsetUrl, BooleanToStr(bResult, 'Success', 'Fail')], 3);
|
||||
bResult := True;
|
||||
end
|
||||
else if sData.Contains('@(!)_SF') then
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue