VBS enclave 中提供的 Vertdll API
飞地用于创建受信任的执行环境。 这些 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 | 在活动函数表中搜索与指定电脑值对应的条目。 |
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(宽字符)字符串映射到新字符串。 |
MultiByteToWideChar | stringapiset.h | 将字符串映射到 UTF-16(宽字符)字符串。 |
LdrResolveDelayLoadedAPI 请参阅 ResolveDelayLoadedAPI |
- | 定位指定导入的目标函数,并将导入 thunk 中的函数指针替换为函数实现的目标。 |