NDIS_STATUS Sta11LoadRegistryInformation( _In_ NDIS_HANDLE MiniportAdapterHandle, _In_opt_ NDIS_HANDLE ConfigurationHandle, _Out_ PVOID* RegistryInformation ) { NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; PSTA_REG_INFO staRegInfo = NULL; *RegistryInformation = NULL; do { // // Allocate memory for the registry info // MP_ALLOCATE_MEMORY(MiniportAdapterHandle, &staRegInfo, sizeof(STA_REG_INFO), EXTSTA_MEMORY_TAG); if (staRegInfo == NULL) { MpTrace(COMP_INIT_PNP, DBG_SERIOUS, ("Failed to allocate %d bytes for STA_REG_INFO\n", sizeof(STA_REG_INFO))); ndisStatus = NDIS_STATUS_RESOURCES; break; } NdisZeroMemory(staRegInfo, sizeof(STA_REG_INFO)); // // read registry values // MpReadRegistry((PVOID)staRegInfo, ConfigurationHandle, STARegTable, STA_NUM_REG_PARAMS); *RegistryInformation = staRegInfo; } while (FALSE); if (ndisStatus != NDIS_STATUS_SUCCESS) { // Free the buffer Sta11FreeRegistryInformation(staRegInfo); } return ndisStatus; }
VOID Hw11ReadRegistryConfiguration( __in PHW Hw, __in NDIS_HANDLE ConfigurationHandle ) { NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; PUCHAR NetworkAddress; UINT Length; // TODO: These should be read from the registry Hw->RegInfo.RTSThreshold = 2347; Hw->RegInfo.FragmentationThreshold = 2346; Hw->RegInfo.BeaconPeriod = 100; Hw->RegInfo.NumRXBuffersUpperLimit = HW11_MAX_RX_MSDUS; Hw->RegInfo.NumRXBuffersLowerBase = HW11_MIN_RX_MSDUS; // // read all the non-hardware specific registry values // MpReadRegistry((PVOID)Hw, ConfigurationHandle, HWRegTable, HW_NUM_REG_PARAMS); // // Read NetworkAddress registry value. Use it as the current address if any. // if (ConfigurationHandle != NULL) { NdisReadNetworkAddress(&ndisStatus, (void **)&NetworkAddress, &Length, ConfigurationHandle); // // If there is a valid NetworkAddress override in registry,use it // if ((ndisStatus == NDIS_STATUS_SUCCESS) && (Length == sizeof(DOT11_MAC_ADDRESS))) { // Dont use multicast/broadcast or 00* addresses if (!ETH_IS_MULTICAST(NetworkAddress) && !ETH_IS_BROADCAST(NetworkAddress)) { if ((NetworkAddress[0] == 0x00) && (NetworkAddress[1] == 0x00) && (NetworkAddress[2] == 0x00) && (NetworkAddress[3] == 0x00) && (NetworkAddress[4] == 0x00) && (NetworkAddress[5] == 0x00)) { // Network addr = 00 00 00 00 00 00 Hw->RegInfo.AddressOverrideEnabled = FALSE; } else if ((NetworkAddress[0] & 0x02) != 0x02) { // Not a locally administered address Hw->RegInfo.AddressOverrideEnabled = FALSE; } else { ETH_COPY_NETWORK_ADDRESS(Hw->RegInfo.OverrideAddress,NetworkAddress); Hw->RegInfo.AddressOverrideEnabled = TRUE; } } } ndisStatus = NDIS_STATUS_SUCCESS; } }