// Get the build number of the current driver UINT GetCurrentIPsecWin7DriverBuild() { return MsRegReadInt(REG_LOCAL_MACHINE, IPSEC_WIN7_DRIVER_REGKEY, (MsIsWindows10() ? IPSEC_WIN7_DRIVER_BUILDNUMBER_WIN10 : IPSEC_WIN7_DRIVER_BUILDNUMBER)); }
// Get the state of VLAN tag pass-through void GetVLanEnableStatus(RPC_ENUM_ETH_VLAN_ITEM *e) { char key[MAX_SIZE]; char short_key[MAX_SIZE]; char tcpkey[MAX_SIZE]; // Validate arguments if (e == NULL) { return; } e->Enabled = false; if (e->Support == false) { return; } if (GetClassRegKeyWin32(key, sizeof(key), short_key, sizeof(short_key), e->Guid) == false) { return; } Format(tcpkey, sizeof(tcpkey), "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\%s", e->Guid); if (StrCmpi(e->DriverType, "Intel") == 0) { char *VlanFiltering = MsRegReadStr(REG_LOCAL_MACHINE, key, "VlanFiltering"); UINT MonitorMode = MsRegReadInt(REG_LOCAL_MACHINE, key, "MonitorMode"); UINT MonitorModeEnabled = MsRegReadInt(REG_LOCAL_MACHINE, key, "MonitorModeEnabled"); char *TaggingMode = MsRegReadStr(REG_LOCAL_MACHINE, key, "TaggingMode"); if (StrCmpi(VlanFiltering, "0") == 0 && MonitorMode == 1 && MonitorModeEnabled == 1 && StrCmpi(TaggingMode, "0") == 0) { e->Enabled = true; } Free(VlanFiltering); Free(TaggingMode); } else if (StrCmpi(e->DriverType, "Broadcom") == 0) { char *PreserveVlanInfoInRxPacket = MsRegReadStr(REG_LOCAL_MACHINE, key, "PreserveVlanInfoInRxPacket"); if (StrCmpi(PreserveVlanInfoInRxPacket, "1") == 0) { e->Enabled = true; } Free(PreserveVlanInfoInRxPacket); } else if (StrCmpi(e->DriverType, "Marvell") == 0) { DWORD SkDisableVlanStrip = MsRegReadInt(REG_LOCAL_MACHINE, key, "SkDisableVlanStrip"); if (SkDisableVlanStrip == 1) { e->Enabled = true; } } if (MsRegIsValue(REG_LOCAL_MACHINE, tcpkey, "MTU") == false) { e->Enabled = false; } }
// Set the state of VLAN tag pass-through bool SetVLanEnableStatus(char *title, bool enable) { RPC_ENUM_ETH_VLAN t; RPC_ENUM_ETH_VLAN_ITEM *e; bool ret = false; char key[MAX_SIZE]; char tcpkey[MAX_SIZE]; char short_key[MAX_SIZE]; // Validate arguments if (title == NULL) { return false; } Zero(&t, sizeof(t)); if (EnumEthVLanWin32(&t) == false) { return false; } e = FindEthVLanItem(&t, title); if (e != NULL) { if (GetClassRegKeyWin32(key, sizeof(key), short_key, sizeof(short_key), e->Guid)) { if (StrCmpi(e->DriverType, "Intel") == 0) { if (enable) { MsRegWriteStr(REG_LOCAL_MACHINE, key, "VlanFiltering", "0"); MsRegWriteStr(REG_LOCAL_MACHINE, key, "TaggingMode", "0"); MsRegWriteInt(REG_LOCAL_MACHINE, key, "MonitorMode", 1); MsRegWriteInt(REG_LOCAL_MACHINE, key, "MonitorModeEnabled", 1); } else { if (MsRegReadInt(REG_LOCAL_MACHINE, key, "TaggingMode") == 0) { MsRegDeleteValue(REG_LOCAL_MACHINE, key, "TaggingMode"); } if (MsRegReadInt(REG_LOCAL_MACHINE, key, "MonitorMode") == 1) { MsRegDeleteValue(REG_LOCAL_MACHINE, key, "MonitorMode"); } if (MsRegReadInt(REG_LOCAL_MACHINE, key, "MonitorModeEnabled") == 1) { MsRegDeleteValue(REG_LOCAL_MACHINE, key, "MonitorModeEnabled"); } } ret = true; } else if (StrCmpi(e->DriverType, "Broadcom") == 0) { if (enable) { MsRegWriteStr(REG_LOCAL_MACHINE, key, "PreserveVlanInfoInRxPacket", "1"); } else { MsRegDeleteValue(REG_LOCAL_MACHINE, key, "PreserveVlanInfoInRxPacket"); } ret = true; } else if (StrCmpi(e->DriverType, "Marvell") == 0) { if (enable) { MsRegWriteInt(REG_LOCAL_MACHINE, key, "SkDisableVlanStrip", 1); } else { MsRegDeleteValue(REG_LOCAL_MACHINE, key, "SkDisableVlanStrip"); } ret = true; } Format(tcpkey, sizeof(tcpkey), "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\%s", e->Guid); if (enable) { if (MsRegIsValue(REG_LOCAL_MACHINE, tcpkey, "MTU") == false) { MsRegWriteInt(REG_LOCAL_MACHINE, tcpkey, "MTU", 1500); } } else { UINT mtu = MsRegReadInt(REG_LOCAL_MACHINE, tcpkey, "MTU"); if (mtu == 1500) { MsRegDeleteValue(REG_LOCAL_MACHINE, tcpkey, "MTU"); } } } } FreeRpcEnumEthVLan(&t); return ret; }
// Load build number of PCD driver UINT LoadPcdDriverBuild() { return MsRegReadInt(REG_LOCAL_MACHINE, BRIDGE_WIN32_PCD_REGKEY, BRIDGE_WIN32_PCD_BUILDVALUE); }
// Get the internet connection settings of the system void GetSystemInternetSetting(INTERNET_SETTING *setting) { #ifdef OS_WIN32 bool use_proxy; // Validate arguments if (setting == NULL) { return; } Zero(setting, sizeof(INTERNET_SETTING)); use_proxy = MsRegReadInt(REG_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", "ProxyEnable"); if (use_proxy) { char *str = MsRegReadStr(REG_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", "ProxyServer"); if (str != NULL) { char name[MAX_HOST_NAME_LEN + 1]; UINT port; if (GetProxyServerNameAndPortFromIeProxyRegStr(name, sizeof(name), &port, str, "https")) { setting->ProxyType = PROXY_HTTP; StrCpy(setting->ProxyHostName, sizeof(setting->ProxyHostName), name); setting->ProxyPort = port; } else if (GetProxyServerNameAndPortFromIeProxyRegStr(name, sizeof(name), &port, str, "http")) { setting->ProxyType = PROXY_HTTP; StrCpy(setting->ProxyHostName, sizeof(setting->ProxyHostName), name); setting->ProxyPort = port; } else if (GetProxyServerNameAndPortFromIeProxyRegStr(name, sizeof(name), &port, str, "socks")) { setting->ProxyType = PROXY_SOCKS; StrCpy(setting->ProxyHostName, sizeof(setting->ProxyHostName), name); setting->ProxyPort = port; } else { if (SearchStrEx(str, "=", 0, false) == INFINITE) { char *host; UINT port; if (ParseHostPort(str, &host, &port, 0)) { if (port != 0) { setting->ProxyType = PROXY_HTTP; StrCpy(setting->ProxyHostName, sizeof(setting->ProxyHostName), host); setting->ProxyPort = port; } Free(host); } } } Free(str); } } #else // OS_WIN32 Zero(setting, sizeof(INTERNET_SETTING)); #endif // OS_WIN32 }
// Load the device module bool Win32LoadSecModule(SECURE *sec) { SEC_DATA_WIN32 *w; HINSTANCE hInst; CK_FUNCTION_LIST_PTR api = NULL; CK_RV (*get_function_list)(CK_FUNCTION_LIST_PTR_PTR); // Validate arguments if (sec == NULL) { return false; } if (sec->Dev->Id == 9) { char username[MAX_SIZE]; DWORD size; // Because the device driver of Juki-Net needs the contents // of the Software\JPKI registry key on HKLU of SYSTEM, // if there is no key, copy the key from the value of other user // if (MsRegIsValue(REG_CURRENT_USER, "Software\\JPKI", "Name") == false || // MsRegIsValue(REG_CURRENT_USER, "Software\\JPKI", "RWType") == false) size = sizeof(username); GetUserName(username, &size); if (StrCmpi(username, "System") == 0) { TOKEN_LIST *t = MsRegEnumKey(REG_USERS, NULL); if (t != NULL) { UINT i; for (i = 0;i < t->NumTokens;i++) { char tmp[MAX_PATH]; if (StrCmpi(t->Token[i], ".DEFAULT") != 0 && StrCmpi(t->Token[i], "S-1-5-18") != 0) { Format(tmp, sizeof(tmp), "%s\\Software\\JPKI", t->Token[i]); if (MsRegIsValue(REG_USERS, tmp, "Name") && MsRegIsValue(REG_USERS, tmp, "RWType")) { char *name = MsRegReadStr(REG_USERS, tmp, "Name"); char *port = MsRegReadStr(REG_USERS, tmp, "Port"); UINT type = MsRegReadInt(REG_USERS, tmp, "RWType"); MsRegWriteStr(REG_CURRENT_USER, "Software\\JPKI", "Name", name); MsRegWriteStr(REG_CURRENT_USER, "Software\\JPKI", "Port", port); MsRegWriteInt(REG_CURRENT_USER, "Software\\JPKI", "RWType", type); Free(name); Free(port); break; } } } FreeToken(t); } } } // Load the Library hInst = Win32SecureLoadLibraryEx(sec->Dev->ModuleName, 0); if (hInst == NULL) { // Failure return false; } // Get the API get_function_list = (CK_RV (*)(CK_FUNCTION_LIST_PTR_PTR)) GetProcAddress(hInst, "C_GetFunctionList"); if (get_function_list == NULL) { // Failure FreeLibrary(hInst); return false; } get_function_list(&api); if (api == NULL) { // Failure FreeLibrary(hInst); return false; } sec->Data = ZeroMalloc(sizeof(SEC_DATA_WIN32)); w = sec->Data; w->hInst = hInst; sec->Api = api; return true; }