Как да задам PreSharedKey в RasEntry на Windows CE / Compact Framework?

Тъй като наистина не постигам никакъв напредък през последните часове, трябва да се консултирам с вас за проблем, който не мога да разреша. Имаме приложение Win CE 5.0, написано на C#/Compact Frmaework 2.0, което използва RASDial за набиране във VPN. В момента използва PPTP, но трябва да го променя на L2TP с Pre Shard Key. Но за да бъда честен, нямам опит в C++ и наистина разбирам само половината от кода или за да бъда по-ясен, не разбирам RAS API и документацията в MSDN. Разбирам как да създам този L2PT RAS запис и как да го набера, но по никакъв начин не разбирам къде и как да задам предварително споделения ключ! Намерих част от код, който изглежда прави същите неща, които нашият код прави по принцип, но на уебсайта/борда го намерих Авторът казва, че това е с предварително споделен ключ, но честно казано, не разбирам къде е ключът .

(...)

// 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) на ключа, но може ли някой да ми обясни къде е действителният ключ в кода? Или някой може ли да ми даде обяснение как да задам предварително споделен ключ в RASEntry за L2TP?

Много благодаря

туикл


person Community    schedule 13.03.2012    source източник


Отговори (1)


Предварително споделеният ключ се копира в структурата L2TP_CONFIG_DATA с този ред:

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

По принцип този ред казва „копирайте данните от g_sharedKey в екземпляра pL2TPConfigData, като започнете от отместване pL2TPConfigData->dwOffsetKey за дължина cbKey

Кодът обвива това в блок if, така че ако g_sharedKey е NULL, той не прави това копие.

person ctacke    schedule 14.03.2012