Как установить PreSharedKey в RasEntry в Windows CE / Compact Framework? - PullRequest
1 голос
/ 13 марта 2012

Поскольку в последние часы я действительно не вижу прогресса, мне нужно проконсультироваться с вами по поводу проблемы, которую я не могу решить. У нас есть приложение Win CE 5.0, написанное на C # / Compact Frmaework 2.0, которое использует RASDial для набора номера в VPN. В настоящее время он использует PPTP, но мне нужно изменить его на L2TP с ключом Pre Shard. Но, честно говоря, у меня нет опыта в C ++, и я действительно понимаю только половину кода, или, чтобы быть более ясным, я не понимаю API и документацию RAS в MSDN. Я понимаю, как создать эту запись RAS L2PT и как ее набрать, но никоим образом не понимаю, где и как установить Pre Shared Key! Я нашел код, который, кажется, делает то же самое, что и наш код, в принципе, но на сайте / доске я обнаружил, что автор говорит, что это с предварительным общим ключом, но, честно говоря, я не понимаю, где ключ .

(...)

// Device configuration for L2TP VPN 
if (bIsL2TP) { 
    DWORD cbKey = 0; 
    if (g_sharedKey) { 
        cbKey = (wcslen(g_sharedKey))*sizeof(WCHAR); 
    } 
    pL2TPConfigData = (PL2TP_CONFIG_DATA)new BYTE 
[sizeof(L2TP_CONFIG_DATA)+ cbKey]; 


    ZeroMemory(pL2TPConfigData, sizeof(L2TP_CONFIG_DATA)+ cbKey); 
    pL2TPConfigData->dwVersion = 1; 
    pL2TPConfigData->dwAuthType = L2TP_IPSEC_AUTH_PRESHAREDKEY; 
    pL2TPConfigData->dwFlags = 0; 
    pL2TPConfigData->cbKey = cbKey; 
    pL2TPConfigData->dwOffsetKey = sizeof(L2TP_CONFIG_DATA); 
    pL2TPConfigData->cMyCerts = 0; 
    pL2TPConfigData->cRootCerts = 0; 
    pL2TPConfigData->dwOffsetCertHashes = sizeof(L2TP_CONFIG_DATA); 
    if (g_sharedKey) { 
        memcpy((PBYTE)pL2TPConfigData+pL2TPConfigData->dwOffsetKey, 
g_sharedKey, cbKey); 
    } 
    pConfigData = (PBYTE)pL2TPConfigData; 
    cbConfigData = sizeof(L2TP_CONFIG_DATA) + cbKey; 
} 


(...) 


// Create a new phone-book entry. 
res = ::RasSetEntryProperties(NULL, g_entryName, &rasEntry, sizeof 
(rasEntry), pConfigData, cbConfigData); 
if (res != 0) { 
    wprintf(L"Cannot create or update the phone book entry (error# %u). 
Aborting.", res); 
    goto exit; 
} 

В коде определяется длина (cbKey) ключа, но может ли кто-нибудь объяснить мне, где в коде находится фактический ключ? Или кто-то может объяснить мне, как установить Pre-Shared Key в RASEntry для L2TP?

Большое спасибо

twickl

1 Ответ

1 голос
/ 14 марта 2012

Предварительный общий ключ копируется в структуру L2TP_CONFIG_DATA с этой строкой:

memcpy((PBYTE)pL2TPConfigData+pL2TPConfigData->dwOffsetKey, g_sharedKey, cbKey);

В основном эта строка говорит: «скопируйте данные из g_sharedKey в экземпляр pL2TPConfigData, начиная ссмещение pL2TPConfigData->dwOffsetKey для длины cbKey "

Код оборачивает это в блок if, поэтому, если g_sharedKey равен NULL, он не делает эту копию.

...