2017-01-30 54 views
0

我正在嘗試編寫一個簡單的SGX項目作爲開始。所以,我有,我已經差不多從Lars Richter's blog複製此主主機應用程序:加載Enclave時出錯:無法使用CreateFile()打開文件

#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; 
} 

它編譯罰款(我使用的是英特爾C++編譯器17.0與Visual Studio 2015年),但它不會加載飛地。我收到以下錯誤信息:

[sgx_create_enclavew ..\urts\win\urts.cpp:195] Couldn't open file with CreateFile() 

App: error 0x200f, failed to create enclave. 
+1

確實存在Enclave.signed.dll某處sgx_create_enclave會發現它? –

+0

它位於解決方案的調試文件夾中。 –

+0

什麼讓你覺得sgx_create_enclave(不管那是什麼)會在那裏找到它? –

回答

1

轉到app_test_save項目設置。在調試,改變工作目錄$(SolutionDir)調試。這個回答假設這兩個項目app_test_saveenclave_test_save屬於同一個解決方案。

0

正如尼爾指出,sgx_create_enclave找不到時,正在從Visual Studio的調試器中運行該程序的DLL。當我直接在「Debug」文件夾中運行可執行文件時,它工作正常。

因此,一個簡單的技巧,使其在這兩種環境的工作是要做到以下幾點:

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

這種解決方案會導致你在其他地方的問題,因爲它假定DLL將永遠是相對於工作目錄。例如程序可以從C:的根目錄運行,如'c:\ Users \ user \ program',dll將在'c:\ .. \ Debug'中找到,這是一個不存在的目錄。 – user4581301

+0

在這一點上我不關心生產問題。 –

+0

可以理解,但這些答案只能被其他人閱讀,其他人則需要知道這種解決方案可能無法用於他們的案例。 – user4581301

相關問題