如何在Windows CE/Compact Framework上的RasEntry中设置预共享密钥

本文关键字:RasEntry 设置 密钥 共享 上的 Framework Windows CE Compact | 更新日期: 2023-09-27 18:27:33

由于在过去的几个小时里我真的没有任何进展,我需要向您咨询一个我没有解决的问题。我们有一个Win CE 5.0应用程序,它是由C#/Compact Frmaework 2.0编写的,使用RASDial拨号进入VPN。目前它使用PPTP,但我不得不用预共享密钥将其更改为L2TP。但老实说,我没有C++的经验,我真的只理解了一半的代码,或者更清楚地说,我不理解MSDN中的RAS Api和文档。我知道如何创建这个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)是确定的,但有人能向我解释一下实际密钥在代码中的位置吗?或者有人能为我解释一下如何在L2TP的RASEntry中设置预共享密钥吗?

非常感谢

twickl

如何在Windows CE/Compact Framework上的RasEntry中设置预共享密钥

预共享密钥通过以下行复制到L2TP_CONFIG_DATA结构中:

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

基本上,这一行说"将数据从g_sharedKey复制到pL2TPConfigData实例中,从pL2TPConfigData->dwOffsetKey的偏移量开始,长度为cbKey"

代码将其封装在if块中,因此如果g_sharedKey为NULL,则不会执行此复制。