VBS Enclave에서 사용할 수 있는 Vertdll API
적용 대상:✅ 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 슬롯에 값을 저장합니다. |
EnclaveGetAttestationReport | winenclaveapi.h | 현재 enclave를 설명하고 enclave의 형식을 담당하는 기관에서 서명하는 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의 함수 포인터를 함수 구현의 대상으로 바꿉니다. |