加载Enclave时出错:无法使用CreateFile()打开文件

我试图写一个简单的SGX项目的一个开始。 所以我有这个主要的应用程序例程,我几乎从Lars Richter的博客中复制:

#define ENCLAVE_FILE _T("Enclave.signed.dll") #include <tchar.h> #include <cstdio> #include "sgx_urts.h" #include "Enclave_u.h" int main() { sgx_enclave_id_t eid; sgx_status_t ret = SGX_SUCCESS; sgx_launch_token_t token = { 0 }; int updated = 0; ret = sgx_create_enclave(ENCLAVE_FILE, SGX_DEBUG_FLAG, &token, &updated, &eid, NULL); if (ret != SGX_SUCCESS) { printf("\nApp: error %#x, failed to create enclave.\n", ret); } scanf("\n"); return 0; } 

它编译得很好(我在Visual Studio 2015中使用了Intel C ++ 17.0编译器),但是它并没有加载飞地。 我收到以下错误信息:

 [sgx_create_enclavew ..\urts\win\urts.cpp:195] Couldn't open file with CreateFile() App: error 0x200f, failed to create enclave. 

转到app_test_save项目设置。 在调试下 ,将工作目录更改为$(SolutionDir)调试 。 这个答案假定app_test_saveenclave_test_save都属于同一个解决方案。

Neil指出,当程序从Visual Studio的调试器运行时,sgx_create_enclave找不到dll。 当我直接在“调试”文件夹中运行可执行文件时,它工作得很好。

所以一个简单的技巧,使其在两个设置工作是做到以下几点:

 #define ENCLAVE_FILE _T("../Debug/Enclave.signed.dll")