[한글 2024 Automation] 공식 보안모듈 RegisterModule=false 및 최초 SaveAs 접근 승인창 발생
안녕하세요. Windows 한글 Automation을 이용하여 문서 열기·수정·저장·PDF 변환을 사용자 승인창 없이 처리하려고 합니다.
공식 예제 DLL과 등록 구조를 사용했는데 RegisterModule이 false이고 최초 SaveAs에서 승인창이 발생합니다. 무승인 자동화를 위한 공식 해결 방법과 추가 진단 방법을 알려 주십시오.
환경
| 항목 | 실제 확인 결과 |
|---|---|
| Windows | Microsoft Windows 11 Home, 25H2, 64비트, 빌드 26200.9445 |
| 한글 제품 | 한글 2024 |
| 한글 버전 | 13.0.0.2760 (COM Version: 13, 0, 0, 2760) |
| 한글 비트 수 | 32비트, PE Machine 0x014C |
| 한글 실행 파일 | C:\Program Files (x86)\HNC\Office 2024\HOffice130\Bin\Hwp.exe |
| 실행 계정 | 903ACADEMY\canu5 |
| 계정 SID | S-1-5-21-735489085-382134810-812652874-1001 |
| COM 객체 | HWPFrame.HwpObject 사용, 객체 생성 성공 |
| CLSID | {2291CF00-64A1-4877-A9B4-68CFE89612D6} |
| 진단 PowerShell | Windows PowerShell 5.1.26100.9444, 32비트 |
Windows 레지스트리의 ProductName에는 Windows 10 Home이 남아 있으나, CIM 운영체제 조회 결과는 Windows 11 Home입니다. COM 호출 프로세스와 새 한글 프로세스의 사용자 SID가 일치함을 별도 진단에서 확인했습니다.
공식 보안모듈과 등록
- 배포 안내: 개발 가이드 | 한컴디벨로퍼
- 공식 ZIP: https://raw.githubusercontent.com/hancom-io/devcenter-archive/main/hwp-automation/보안모듈(Automation).zip
- DLL 절대경로:
C:\Users\canu5\OneDrive\문서\ChatGPT\시험대비 책자 만들기\CONFIG\hancom\official-security\FilePathCheckerModuleExample.dll - SHA-256:
9ac5b97c47ac8aed1e8bca27a3eef39411361d8f68c262509f0c40a8f9d21bb6 - DLL 비트 수: 32비트, PE Machine
0x014c. LoadLibraryW및LoadLibraryA: 같은 사용자 계정의 32비트 프로세스에서 성공.GetProcAddress("IsAccessiblePath"): 성공.- DLL import:
KERNEL32.dll,USER32.dll. - DLL을 수정하거나 자체 구현 DLL로 교체하지 않았습니다.
등록 키는 HKCU\Software\HNC\HwpAutomation\Modules입니다. Exam903FreshOfficial 값은 REG_SZ이며 위 DLL의 절대경로가 들어 있습니다. 32비트·64비트 레지스트리 조회 결과가 일치했습니다. Modules\Uses의 동일 이름 DWORD 값은 1입니다.
첨부 HwpAutomation_Modules.reg는 문의 패키지 작성 시 실제 HKCU 키를 Windows reg export로 내보낸 원본입니다. 진단 과정에서 등록했던 다른 이름과 Uses 하위 키도 생략하지 않았습니다. 문의 패키지 작성 중 등록값이나 DLL은 변경하지 않았습니다.
재현 코드와 결과
아래는 마지막 시험에서 실행한 핵심 순서입니다. 최초 저장 직전까지 빈 문서이며, 기존 시험지나 다른 문서는 열지 않았습니다. RegisterModule은 객체 생성 직후 첫 COM 메서드로 호출했습니다.
$h = New-Object -ComObject HWPFrame.HwpObject
$reg = $h.RegisterModule('FilePathCheckDLL', 'Exam903FreshOfficial')
# 실제 반환값: False
$h.XHwpWindows.Item(0).Visible = $true
$file = 'C:\Users\canu5\OneDrive\문서\ChatGPT\시험대비 책자 만들기\TEMP_SECURITY_TEST\test.hwp'
$created = $h.SaveAs($file, 'HWP', '')
# 여기에서 파일 접근 승인창 발생. 저장 성공 반환은 확인하지 못함.
빈 문서를 최초 저장한 뒤 새 인스턴스에서 열기·TEST 입력·저장·닫기·재열기·PDF 변환을 시험할 계획이었으나, 준비 단계인 빈 문서 최초 SaveAs에서 접근 승인창이 발생하여 중단했습니다. 따라서 이후 열기·수정·재열기·PDF 변환은 이 시험에서 실행하지 않았습니다.
| 관찰 항목 | 결과 |
|---|---|
| RegisterModule 반환값 | false |
| 실패 단계 | CREATE_BLANK: 빈 문서 최초 SaveAs |
| 접근 승인창 횟수 | 1회 관찰 |
| 대화상자 제목 | 글 |
| 확인 시각 | 2026-09-16 00:32:43 +09:00 (관찰 시각이며 정확한 생성 시각은 미측정) |
| 표시 내용 | 해당 test.hwp에 접근하려는 시도가 있으며 정상적인 작업 과정에만 접근을 허용하라는 안내 |
| 버튼 | 접근 허용 / 모두 허용 / 허용 안 함 / 모두 안 함 |
| 승인창 조작 | 어떤 버튼도 클릭하지 않음 |
추가로 확인한 내용
- 새 한글 프로세스에서도 RegisterModule=false가 재현됩니다.
- 짧은 DLL 경로, 공백·한글 없는 임시 드라이브 경로에서도 false였습니다. 임시 경로 매핑은 해당 진단 후 해제했습니다.
- 공식 예제 이름
FilePathCheckerModuleExample으로도 false였습니다. - 직접 IDispatch 호출은 HRESULT=0이지만 반환 VARIANT_BOOL은 false이며 COM 예외는 없었습니다.
- 빈 문자열로 등록 해제하면 true이지만 이를 보안모듈 등록 성공으로 해석하지 않았습니다.
- 실패 호출 후 한글 프로세스의 로드 모듈 목록에는 해당 보안 DLL이 남아 있지 않았습니다. DLL이 거부된 정확한 내부 단계는 확인하지 못했습니다.
- 한글 COM 추가 기능 목록에는 등록 이름이 나타납니다. 다만 UI 자동화 도구가 해당 모달 창을 활성화하지 못해 설정 버튼 적용은 검증하지 못했습니다.
문의 사항
- 이 제품·빌드에서 공식 예제 DLL을 사용한 무승인 Automation을 위해 추가로 필요한 공식 등록 또는 설정 절차가 있습니까?
- RegisterModule이 COM 오류 없이 false를 반환하는 구체적인 원인을 확인할 수 있는 한컴 로그, 오류 코드 또는 공식 진단 방법이 있습니까?
- 단독 LoadLibrary와 IsAccessiblePath 조회는 성공하지만 RegisterModule은 false인 경우, 어떤 항목을 추가 점검해야 합니까?
- 해당 빌드에서 알려진 제한이나 수정 버전이 있다면 공식 안내를 부탁드립니다.
원본 시험지와 실제 문서 내용은 첨부하지 않습니다. 승인창을 자동 클릭하는 방식이 아닌 공식 보안모듈 등록을 통한 해결 방법을 요청합니다.