적용 대상:✅ Windows 11 빌드 26100.2314 이상 ✅ Windows Server 2025 이상
Enclave는 신뢰할 수 있는 실행 환경을 만드는 데 사용됩니다. 이러한 Vertdll API는 VBS Enclave의 개발자가 사용할 수 있습니다.
Vertdll.dll 내보낸 함수
Vertdll.dll 내보낸 다음 API는 VBS enclave에서 호출할 수 있습니다.
| 응용 프로그램 인터페이스 (API) | 헤더 | 설명 |
|---|---|---|
| IsProcessorFeaturePresent | processthreadsapi.h | 지정된 프로세서 기능이 현재 컴퓨터에서 지원되는지 여부를 확인합니다. |
| LdrDisableThreadCalloutsForDll | - | 스레드 연결 및 DLL에 대한 설명선 분리를 사용하지 않도록 설정합니다. |
|
NtTerminateProcess TerminateProcess 참조 |
processthreadsapi.h | 지정된 프로세스와 모든 해당 스레드를 종료합니다. |
| RtlCaptureContext | winnt.h | 호출자의 컨텍스트에서 컨텍스트 레코드를 검색합니다. |
|
RtlGetLastNtStatus GetLastError 참조 |
- | 마지막 NTSTATUS 값을 가져옵니다. |
| RtlLookupFunctionEntry | winnt.h | 활성 함수 테이블에서 지정된 PC 값에 해당하는 항목을 검색합니다. |
| RtlPcToFileHeader | winnt.h | 지정된 PC 값이 포함된 이미지의 기본 주소를 검색합니다. |
|
RtlRaiseStatus RaiseException 참조 |
- | dwExceptionCode 매개 변수만 사용하여 예외를 발생합니다. RtlRaiseStatus는 RaiseException을 호출하여 EXCEPTION_NONCONTINUABLE 전달하여 지속 불가능한 예외가 발생했음을 나타냅니다. |
| RtlTimeFieldsToTime |
wdm.h | TIME_FIELDS 정보를 시스템 시간 값으로 변환합니다. |
|
RtlUnhandledExceptionFilter UnhandledExceptionFilter 참조 |
- | 프로세스가 디버그되는 경우 처리되지 않은 예외를 디버거에 전달하는 애플리케이션 정의 함수입니다. |
| RtlUnwind | winnt.h | 프로시저 호출 프레임의 해제를 시작합니다. |
| RtlUnwindEx | winnt.h | 프로시저 호출 프레임의 해제를 시작합니다. |
| RtlVirtualUnwind | winnt.h | 지정된 함수 컨텍스트 앞에 오는 함수의 호출 컨텍스트를 검색합니다. |
| RtlGetSystemGlobalData | - | 시스템 전역 데이터 영역의 주소를 가져옵니다. |
| memcmp | memory.h 또는 string.h |
두 개의 버퍼에서 문자를 비교합니다. |
| memcpy | memory.h 또는 string.h |
버퍼 간에 바이트를 복사합니다. |
| memmove | string.h | 한 버퍼를 다른 버퍼로 이동합니다. |
| memset | memory.h 또는 string.h |
버퍼를 지정된 문자로 설정합니다. |
| OutputDebugStringW | debugapi.h | 표시할 문자열을 디버거에 보냅니다. |
| CallEnclave | enclaveapi.h | enclave 내에서 함수를 호출합니다. |
| EnclaveGetEnclaveInformation | winenclaveapi.h | 현재 실행 중인 enclave에 대한 정보를 가져옵니다. |
| GetCurrentProcess | processthreadsapi.h | 현재 프로세스에 대한 의사 핸들을 검색합니다. |
| TerminateEnclave | enclaveapi.h | enclave 내에서 실행되는 스레드의 실행을 종료합니다. |
| TerminateProcess | processthreadsapi.h | 지정된 프로세스와 모든 해당 스레드를 종료합니다. |
| GetLastError | errhandlingapi.h | 호출 스레드의 마지막 오류 코드 값을 검색합니다. |
| SetLastError | errhandlingapi.h | 호출 스레드에 대한 마지막 오류 코드를 설정합니다. |
| RaiseException | errhandlingapi.h | 호출 스레드에서 예외를 발생시킵니다. |
| SetUnhandledExceptionFilter | errhandlingapi.h | 애플리케이션이 프로세스의 각 스레드에 대한 최상위 예외 처리기를 대체하도록 설정합니다. |
| GetProcessHeap | heapapi.h | 호출 프로세스의 기본 힙에 대한 핸들을 검색합니다. |
| GetProcessHeaps | heapapi.h | 활성 힙 수를 반환하고 호출 프로세스에 대한 모든 활성 힙에 대한 핸들을 검색합니다. |
| HeapAlloc | heapapi.h | 힙에서 메모리 블록을 할당합니다. 할당된 메모리는 이동 가능하지 않습니다. |
| HeapCompact | heapapi.h | 지정된 힙에서 커밋된 최대 자유 블록의 크기를 반환합니다. |
| HeapCreate | heapapi.h | 호출 프로세스에서 사용할 수 있는 프라이빗 힙 개체를 만듭니다. |
| HeapDestroy | heapapi.h | 지정된 힙 개체를 제거합니다. 프라이빗 힙 개체의 모든 페이지를 커밋 해제하고 해제하고 힙에 대한 핸들을 무효화합니다. |
| HeapFree | heapapi.h | HeapAlloc 또는 HeapReAlloc 함수에 의해 힙에서 할당된 메모리 블록을 해제합니다. |
| HeapLock | heapapi.h | 지정된 힙과 연결된 중요한 섹션 개체 또는 잠금을 획득하려고 시도합니다. |
| HeapReAlloc | heapapi.h | 힙에서 메모리 블록을 다시 할당합니다. 이 함수를 사용하면 메모리 블록의 크기를 조정하고 다른 메모리 블록 속성을 변경할 수 있습니다. |
| HeapSize | heapapi.h | HeapAlloc 또는 HeapReAlloc 함수에 의해 힙에서 할당된 메모리 블록의 크기를 검색합니다. |
| HeapUnlock | heapapi.h | 지정된 힙과 연결된 중요한 섹션 개체 또는 잠금의 소유권을 해제합니다. HeapLock 함수의 동작을 반대로 바뀝니다. |
| InitializeSListHead | interlockedapi.h | 적절하게 연결된 목록의 헤드를 초기화합니다. |
| InterlockedFlushSList | interlockedapi.h | 자동으로 연결된 목록에서 모든 항목을 제거합니다. |
| InterlockedPopEntrySList | interlockedapi.h | 자동으로 연결된 목록의 맨 앞에서 항목을 제거합니다. |
| InterlockedPushEntrySList | interlockedapi.h | 자동으로 연결된 목록의 맨 앞에 항목을 삽입합니다. |
| InterlockedPushListSList | interlockedapi.h | 다른 Singly 연결된 목록의 맨 앞에 Singly 연결된 목록을 삽입합니다. |
| InterlockedPushListSListEx | interlockedapi.h | 다른 Singly 연결된 목록의 맨 앞에 Singly 연결된 목록을 삽입합니다. |
| QueryDepthSList | interlockedapi.h | 지정된 singly 연결된 목록의 항목 수를 검색합니다. |
| DisableThreadLibraryCalls | libloaderapi.h | 지정된 DLL에 대한 DLL_THREAD_ATTACH 및 DLL_THREAD_DETACH 알림을 사용하지 않도록 설정합니다. |
| GetModuleHandleExW | libloaderapi.h | 지정된 모듈에 대한 모듈 핸들을 검색하고 GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT 지정하지 않는 한 모듈의 참조 수를 증분합니다. |
| GetProcAddress | libloaderapi.h | 지정된 DLL에서 내보낸 함수 또는 변수의 주소를 검색합니다. |
| SetThreadStackGuarantee | processthreadsapi.h | 스택 오버플로 예외 중에 사용할 수 있는 호출 스레드 또는 파이버와 연결된 스택의 최소 크기를 설정합니다. |
| VirtualAlloc | memoryapi.h | 호출 프로세스의 가상 주소 공간에서 페이지 영역의 상태를 예약, 커밋 또는 변경합니다. |
| VirtualFree | memoryapi.h | 호출 프로세스의 가상 주소 공간 내에서 페이지 영역을 해제, 커밋 해제 또는 해제합니다. |
| VirtualProtect | memoryapi.h | 호출 프로세스의 가상 주소 공간에서 커밋된 페이지의 영역에 대한 보호를 변경합니다. |
| VirtualQuery | memoryapi.h | 호출 프로세스의 가상 주소 공간에서 페이지 범위에 대한 정보를 검색합니다. |
| AcquireSRWLockExclusive | synchapi.h | 전용 모드에서 SRW(슬림 판독기/기록기) 잠금을 획득합니다. |
| AcquireSRWLockShared | synchapi.h | 공유 모드에서 SRW(슬림 판독기/기록기) 잠금을 획득합니다. |
| DeleteCriticalSection | synchapi.h | 소유하지 않은 중요한 섹션 개체에서 사용하는 모든 리소스를 해제합니다. |
| DeleteSynchronizationBarrier | synchapi.h | 동기화 장벽을 삭제합니다. |
| EnterCriticalSection | synchapi.h | 지정된 임계 영역 개체의 소유권을 기다립니다. 함수가 호출 스레드가 소유권을 부여받는 시기를 반환합니다. |
| EnterSynchronizationBarrier | synchapi.h | 최대 스레드 수가 장벽에 들어갈 때까지 호출 스레드가 동기화 장벽에서 대기하도록 합니다. |
| InitializeConditionVariable | synchapi.h | 조건 변수를 초기화합니다. |
| InitializeCriticalSection | synchapi.h | 중요한 섹션 개체를 초기화합니다. |
| InitializeCriticalSectionAndSpinCount | synchapi.h | 중요한 섹션 개체를 초기화하고 중요한 섹션의 스핀 수를 설정합니다. |
| InitializeCriticalSectionEx | synchapi.h | 스핀 수 및 선택적 플래그를 사용하여 중요한 섹션 개체를 초기화합니다. |
| InitializeSRWLock | synchapi.h | SRW(슬림 판독기/기록기) 잠금을 초기화합니다. |
| InitializeSynchronizationBarrier | synchapi.h | 새 동기화 장벽을 초기화합니다. |
| LeaveCriticalSection | synchapi.h | 지정된 중요 섹션 개체의 소유권을 해제합니다. |
| ReleaseSRWLockExclusive | synchapi.h | 전용 모드에서 획득한 SRW(슬림 판독기/기록기) 잠금을 해제합니다. |
| ReleaseSRWLockShared | synchapi.h | 공유 모드에서 획득한 SRW(슬림 판독기/기록기) 잠금을 해제합니다. |
| SetCriticalSectionSpinCount | synchapi.h | 지정된 중요 섹션의 스핀 수를 설정합니다. |
| SleepConditionVariableCS | synchapi.h | 지정된 조건 변수에서 절전 모드로 이동하고 지정된 중요 섹션을 원자성 연산으로 해제합니다. |
| SleepConditionVariableSRW | synchapi.h | 지정된 조건 변수에서 절전 모드로 이동하고 지정된 잠금을 원자성 작업으로 해제합니다. |
| TryAcquireSRWLockExclusive | synchapi.h | 전용 모드에서 SRW(슬림 판독기/기록기) 잠금을 획득하려고 시도합니다. 호출에 성공하면 호출 스레드가 잠금의 소유권을 맡습니다. |
| TryAcquireSRWLockShared | synchapi.h | 공유 모드에서 SRW(슬림 판독기/기록기) 잠금을 획득하려고 시도합니다. 호출에 성공하면 호출 스레드가 잠금의 소유권을 맡습니다. |
| TryEnterCriticalSection | synchapi.h | 차단 없이 중요한 섹션을 입력하려고 시도합니다. 호출에 성공하면 호출 스레드는 중요한 섹션의 소유권을 맡습니다. |
| WaitOnAddress | synchapi.h | 지정된 주소의 값이 변경될 때까지 기다립니다. |
| WakeAllConditionVariable | synchapi.h | 지정된 조건 변수에서 대기 중인 모든 스레드를 해제합니다. |
| WakeByAddressAll | synchapi.h | 주소 값이 변경되기를 기다리는 모든 스레드를 해제합니다. |
| WakeByAddressSingle | synchapi.h | 주소 값이 변경되도록 대기 중인 스레드 하나를 절전 모드 해제합니다. |
| WakeConditionVariable | synchapi.h | 지정된 조건 변수에서 대기 중인 단일 스레드를 절 해제합니다. |
| GetCurrentThread | processthreadsapi.h | 호출 스레드에 대한 의사 핸들을 검색합니다. |
| GetCurrentThreadId |
processthreadsapi.h | 호출 스레드의 스레드 식별자를 검색합니다. |
| TlsAlloc | processthreadsapi.h | 스레드 TLS(로컬 스토리지) 인덱스를 할당합니다. |
| TlsFree | processthreadsapi.h | TLS 인덱스를 해제하여 다시 사용할 수 있도록 합니다. |
| TlsGetValue | processthreadsapi.h | 지정된 TLS 인덱스에 대한 호출 스레드의 TLS 슬롯에서 값을 검색합니다. |
| TlsSetValue | processthreadsapi.h | 지정된 TLS 인덱스의 호출 스레드 TLS 슬롯에 값을 저장합니다. |
| EnclaveCopyIntoEnclave | winenclaveapi.h | 신뢰할 수 없는 주소(enclave 외부)의 데이터를 enclave로 복사합니다. |
| EnclaveCopyOutOfEnclave | winenclaveapi.h | enclave의 데이터를 신뢰할 수 없는 주소(enclave 외부)로 복사합니다. |
| EnclaveGetAttestationReport | winenclaveapi.h | 현재 enclave를 설명하고 enclave의 형식을 담당하는 기관에서 서명하는 Enclave 증명 보고서를 가져옵니다. |
| EnclaveRestrictContainingProcessAccess | winenclaveapi.h | enclave에 의한 액세스를 포함하는 프로세스의 주소 공간으로 제한(또는 복원)합니다. |
| EnclaveSealData | winenclaveapi.h | 암호화되지 않은 데이터에서 암호화된 이진 큰 개체(Blob)를 생성합니다. |
| EnclaveUnsealData | winenclaveapi.h | 암호화된 이진 큰 개체(Blob)의 암호를 해독합니다. |
| EnclaveVerifyAttestationReport | winenclaveapi.h | 현재 시스템에서 생성된 증명 보고서를 확인합니다. |
| WideCharToMultiByte | stringapiset.h | UTF-16(와이드 문자) 문자열을 새 문자열에 매핑합니다. 참고: VBS Enclave 에서 사용할 수 있는 유일한 코드 페이지는 CP_UTF8. |
| MultiByteToWideChar | stringapiset.h | 문자열을 UTF-16(와이드 문자) 문자열에 매핑합니다. 참고: VBS Enclave 에서 사용할 수 있는 유일한 코드 페이지는 CP_UTF8. |
| LdrResolveDelayLoadedAPI ResolveDelayLoadedAPI 참조 |
- | 지정된 가져오기의 대상 함수를 찾고 가져오기 thunk의 함수 포인터를 함수 구현의 대상으로 바꿉니다. |