// Get VLAN tag pass-through availability of the device void GetVLanSupportStatus(RPC_ENUM_ETH_VLAN_ITEM *e) { BUF *b; char filename[MAX_SIZE]; void *wow; // Validate arguments if (e == NULL) { return; } wow = MsDisableWow64FileSystemRedirection(); // Read the device driver file CombinePath(filename, sizeof(filename), MsGetSystem32Dir(), "drivers"); CombinePath(filename, sizeof(filename), filename, e->DriverName); b = ReadDump(filename); if (b != NULL) { char intel1[] = "VlanFiltering"; char intel2[] = "V\0l\0a\0n\0F\0i\0l\0t\0e\0r\0i\0n\0g"; char intel3[] = "MonitorMode"; char intel4[] = "M\0o\0n\0i\0t\0o\0r\0M\0o\0d\0e"; char intel5[] = "TaggingMode"; char intel6[] = "T\0a\0g\0g\0i\0n\0g\0M\0o\0d\0e"; char broadcom1[] = "PreserveVlanInfoInRxPacket"; char broadcom2[] = "P\0r\0e\0s\0e\0r\0v\0e\0V\0l\0a\0n\0I\0n\0f\0o\0I\0n\0R\0x\0P\0a\0c\0k\0e\0t"; char marvell1[] = "SkDisableVlanStrip"; char marvell2[] = "S\0k\0D\0i\0s\0a\0b\0l\0e\0V\0l\0a\0n\0S\0t\0r\0i\0p"; char *driver_type = ""; if (SearchBin(b->Buf, 0, b->Size, intel1, sizeof(intel1)) != INFINITE || SearchBin(b->Buf, 0, b->Size, intel2, sizeof(intel2)) != INFINITE || SearchBin(b->Buf, 0, b->Size, intel3, sizeof(intel3)) != INFINITE || SearchBin(b->Buf, 0, b->Size, intel4, sizeof(intel4)) != INFINITE || SearchBin(b->Buf, 0, b->Size, intel5, sizeof(intel5)) != INFINITE || SearchBin(b->Buf, 0, b->Size, intel6, sizeof(intel6)) != INFINITE) { driver_type = "Intel"; } else if (SearchBin(b->Buf, 0, b->Size, broadcom1, sizeof(broadcom1)) != INFINITE || SearchBin(b->Buf, 0, b->Size, broadcom2, sizeof(broadcom2)) != INFINITE) { driver_type = "Broadcom"; } else if (SearchBin(b->Buf, 0, b->Size, marvell1, sizeof(marvell1)) != INFINITE || SearchBin(b->Buf, 0, b->Size, marvell2, sizeof(marvell2)) != INFINITE) { driver_type = "Marvell"; } if (IsEmptyStr(driver_type) == false) { StrCpy(e->DriverType, sizeof(e->DriverType), driver_type); e->Support = true; } FreeBuf(b); } MsRestoreWow64FileSystemRedirection(wow); }
// Read the language list LIST *LoadLangList() { LIST *o = NewListFast(NULL); char *filename = LANGLIST_FILENAME; BUF *b; b = ReadDump(filename); if (b == NULL) { return NULL; } while (true) { char *line = CfgReadNextLine(b); if (line == NULL) { break; } Trim(line); if (IsEmptyStr(line) == false && StartWith(line, "#") == false) { TOKEN_LIST *t = ParseToken(line, "\t "); if (t != NULL) { if (t->NumTokens == 6) { LANGLIST *e = ZeroMalloc(sizeof(LANGLIST)); TOKEN_LIST *t2; e->Id = ToInt(t->Token[0]); StrCpy(e->Name, sizeof(e->Name), t->Token[1]); Utf8ToUni(e->TitleEnglish, sizeof(e->TitleEnglish), t->Token[2], StrLen(t->Token[2])); Utf8ToUni(e->TitleLocal, sizeof(e->TitleLocal), t->Token[3], StrLen(t->Token[3])); UniReplaceStrEx(e->TitleEnglish, sizeof(e->TitleEnglish), e->TitleEnglish, L"_", L" ", true); UniReplaceStrEx(e->TitleLocal, sizeof(e->TitleLocal), e->TitleLocal, L"_", L" ", true); e->LcidList = NewIntList(false); t2 = ParseToken(t->Token[4], ","); if (t2 != NULL) { UINT i; for (i = 0;i < t2->NumTokens;i++) { UINT id = ToInt(t2->Token[i]); AddIntDistinct(e->LcidList, id); } FreeToken(t2); } e->LangList = NewListFast(NULL); t2 = ParseToken(t->Token[5], ","); if (t2 != NULL) { UINT i; for (i = 0;i < t2->NumTokens;i++) { Add(e->LangList, CopyStr(t2->Token[i])); } FreeToken(t2); } Add(o, e); } FreeToken(t); } } Free(line); } FreeBuf(b); return o; }