// 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; }
// Write the build number of the current driver void SetCurrentIPsecWin7DriverBuild() { MsRegWriteInt(REG_LOCAL_MACHINE, IPSEC_WIN7_DRIVER_REGKEY, (MsIsWindows10() ? IPSEC_WIN7_DRIVER_BUILDNUMBER_WIN10 : IPSEC_WIN7_DRIVER_BUILDNUMBER), CEDAR_BUILD); }
// Save build number of PCD driver void SavePcdDriverBuild(UINT build) { MsRegWriteInt(REG_LOCAL_MACHINE, BRIDGE_WIN32_PCD_REGKEY, BRIDGE_WIN32_PCD_BUILDVALUE, build); }
// 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; }