适用于:✅ 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 索引的值。 |
| 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 中的函数指针替换为函数实现的目标。 |