由于我在最后几个小时内确实没有取得任何进展,因此我需要就我无法解决的问题咨询您。我们有一个 Win CE 5.0 应用程序,使用 C#/Compact Frmaework 2.0 编写,它使用 RASDial 拨入 VPN。目前它使用 PPTP,但我必须使用 Pre Shard Key 将其更改为 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)是确定的,但有人可以向我解释代码中实际密钥的位置吗?或者有人可以向我解释如何在 RASEntry 中为 L2TP 设置预共享密钥?
非常感谢
twickl