VBS enclave 中提供的 Vertdll API
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 中的函数指针替换为函数实现的目标。 |