【发布时间】:2018-01-25 15:55:57
【问题描述】:
我正在尝试使用允许将 DLL 加载到 enclave 内存中的新 Windows 1709 功能。
我没有找到 ANY 文档或这样做的示例。 据我了解,这些是实现它的步骤:
使用
IsEnclaveTypeSupported检查是否支持 VBS(仅 VBS 支持 enclave 映像)enclave 类型。使用
CreateEnclave函数创建飞地。使用
LoadEnclaveImage函数将图像加载到enclave内存中。
这是我尝试使用的代码 sn-p:
HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessPid());
BOOL vbsSupport = IsEnclaveTypeSupported(ENCLAVE_TYPE_VBS); //returns TRUE
ENCLAVE_CREATE_INFO_VBS vci = { 0 };
vci.Flags = 1;
LPVOID lpAddress = CreateEnclave(h, NULL, 0x10000, NULL, ENCLAVE_TYPE_VBS, &vci, sizeof(ENCLAVE_CREATE_INFO_VBS), NULL);
调用CreateEnclave返回NULL并将最后一个错误码设置为0x32(不支持该请求)。
任何想法如何使它工作?
【问题讨论】:
-
经过进一步调查,我发现了一些非常奇怪的东西。在 64 位编译上述代码时,对 createEnclave 的调用永远不会返回。此外,计算机卡住了,即使使用 Process Hacker 或 Procexp 也无法关闭应用程序。 kthread似乎陷入了死锁。我在超过 4 台不同的完全更新的计算机上尝试了以下操作(即使没有启用 VBS/SGX)。
标签: windows visual-c++ msdn enclave