VBS enclave 中提供的 Vertdll API

适用于:✅ Windows 11 内部版本 26100.2314 或更高版本 ✅ 的 Windows Server 2025 或更高版本

Enclave 用于创建受信任的执行环境。 开发人员可以在 VBS enclave 中使用这些 Vertdll API。

由 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 在活动函数表中搜索与指定电脑值对应的条目。
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 在另一个单链表的前面插入一个单链表。
InterlockedPushListSListEx interlockedapi.h 在另一个单链表的前面插入一个单链表。
QueryDepthSList interlockedapi.h 检索指定单链表中的条目数。
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 中的函数指针替换为函数实现的目标。

另请参阅