/*******************************************************************/ /* Copyright(c) 1993 Microsoft Corporation */ /*******************************************************************/ //*** // // Filename: registry.c // // Description: routines for reading the registry configuration // // Author: Stefan Solomon (stefans) October 30, 1995. // // Revision History: // // Nov 5th 1996 Ram Cherala (ramc) Changed default value of // EnableUnnumberedWanLinks to 0 // because there is no UI to disable it. // //*** #include "precomp.h" #pragma hdrstop BOOL bAssignSpecificNode = FALSE; DWORD LastNodeAssigned; // Don't initialize so it will be random // //*** IPXCP Registry Parameters *** IPXCP_GLOBAL_CONFIG_PARAMS GlobalConfig = { {0,0,0, {0,0,0,0}}, // RParams 1, // SingleClientDialout 0, // FirstWanNet 0, // WanNetPoolSize {0,0,0}, // WanNetPoolStr; 1, // EnableUnnumberedWanLinks; 1, // EnableAutoWanNetAllocation; 0, // EnableCompressionProtocol; 0, // EnableIpxwanForWorkstationDialout; 0, // AcceptRemoteNodeNumber; 0, // DebugLog; {0,0,0,0,0,0} // The specific wan node }; // Returns a 1 byte value representing 2 hex digits UCHAR GetHexValue (PWCHAR pszDigits) { DWORD dw1, dw2; if ((pszDigits[0] >= L'0') && (pszDigits[0] <= L'9')) dw1 = (pszDigits[0] - L'0'); else if ((pszDigits[0] >= L'A') && (pszDigits[0] <= L'D')) dw1 = (pszDigits[0] - L'A') + 10; else dw1 = 0; if ((pszDigits[1] >= L'0') && (pszDigits[1] <= L'9')) dw2 = (pszDigits[1] - L'0'); else if ((pszDigits[1] >= L'A') && (pszDigits[1] <= L'D')) dw2 = (pszDigits[1] - L'A') + 10; else dw2 = 0; return (UCHAR) (16 * dw1 + dw2); } // Assigns the first wan node as stored in pUniStrSrc and returns TRUE if this // node is non zero. BOOL CopyWanNode (PUCHAR puDst, UNICODE_STRING * pUniStrSrc) { PWCHAR pBuf = pUniStrSrc->Buffer; DWORD i; if ((!pBuf) || (pUniStrSrc->Length == 0)) { memset (puDst, 0, 6); return FALSE; } // Convert the unicode string to uppercase _wcsupr(pBuf); puDst[0] = GetHexValue(&pBuf[0]); puDst[1] = GetHexValue(&pBuf[2]); puDst[2] = GetHexValue(&pBuf[4]); puDst[3] = GetHexValue(&pBuf[6]); puDst[4] = GetHexValue(&pBuf[8]); puDst[5] = GetHexValue(&pBuf[10]); return TRUE; } //*** // // Function: GetIpxCpParameters // // Descr: Reads the parameters from the registry and sets them // //*** VOID GetIpxCpParameters(PIPXCP_GLOBAL_CONFIG_PARAMS pConfig) { NTSTATUS Status; PWSTR IpxRouterParametersPath = L"RemoteAccess\\Parameters\\Ipx"; RTL_QUERY_REGISTRY_TABLE paramTable[14]; // table size = nr of params + 1 DWORD InvalidNetworkAccessValue = 987654, AllowNetworkAccess = InvalidNetworkAccessValue; WCHAR pszFirstWanNode[12] = {0,0,0,0,0,0,0,0,0,0,0,0}; UNICODE_STRING UniStrFirstWanNode = {0, 0, NULL}; RtlZeroMemory(¶mTable[0], sizeof(paramTable)); RtlInitUnicodeString (&(pConfig->WanNetPoolStr), NULL); paramTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT; paramTable[0].Name = L"FirstWanNet"; paramTable[0].EntryContext = &(pConfig->FirstWanNet); paramTable[0].DefaultType = REG_DWORD; paramTable[0].DefaultData = &(pConfig->FirstWanNet); paramTable[0].DefaultLength = sizeof(ULONG); paramTable[1].Flags = RTL_QUERY_REGISTRY_DIRECT; paramTable[1].Name = L"WanNetPoolSize"; paramTable[1].EntryContext = &(pConfig->WanNetPoolSize); paramTable[1].DefaultType = REG_DWORD; paramTable[1].DefaultData = &(pConfig->WanNetPoolSize); paramTable[1].DefaultLength = sizeof(ULONG); paramTable[2].Flags = RTL_QUERY_REGISTRY_DIRECT; paramTable[2].Name = L"EnableUnnumberedWanLinks"; paramTable[2].EntryContext = &(pConfig->EnableUnnumberedWanLinks); paramTable[2].DefaultType = REG_DWORD; paramTable[2].DefaultData = &(pConfig->EnableUnnumberedWanLinks); paramTable[2].DefaultLength = sizeof(ULONG); paramTable[3].Flags = RTL_QUERY_REGISTRY_DIRECT; paramTable[3].Name = L"GlobalWanNet"; paramTable[3].EntryContext = &(pConfig->RParams.EnableGlobalWanNet); paramTable[3].DefaultType = REG_DWORD; paramTable[3].DefaultData = &(pConfig->RParams.EnableGlobalWanNet); paramTable[3].DefaultLength = sizeof(ULONG); paramTable[4].Flags = RTL_QUERY_REGISTRY_DIRECT; paramTable[4].Name = L"AutoWanNetAllocation"; paramTable[4].EntryContext = &(pConfig->EnableAutoWanNetAllocation); paramTable[4].DefaultType = REG_DWORD; paramTable[4].DefaultData = &(pConfig->EnableAutoWanNetAllocation); paramTable[4].DefaultLength = sizeof(ULONG); paramTable[5].Flags = RTL_QUERY_REGISTRY_DIRECT; paramTable[5].Name = L"DebugLog"; paramTable[5].EntryContext = &(pConfig->DebugLog); paramTable[5].DefaultType = REG_DWORD; paramTable[5].DefaultData = &(pConfig->DebugLog); paramTable[5].DefaultLength = sizeof(ULONG); paramTable[6].Flags = RTL_QUERY_REGISTRY_DIRECT; paramTable[6].Name = L"EnableCompressionProtocol"; paramTable[6].EntryContext = &(pConfig->EnableCompressionProtocol); paramTable[6].DefaultType = REG_DWORD; paramTable[6].DefaultData = &(pConfig->EnableCompressionProtocol); paramTable[6].DefaultLength = sizeof(ULONG); paramTable[7].Flags = RTL_QUERY_REGISTRY_DIRECT; paramTable[7].Name = L"SingleClientDialout"; paramTable[7].EntryContext = &(pConfig->SingleClientDialout); paramTable[7].DefaultType = REG_DWORD; paramTable[7].DefaultData = &(pConfig->SingleClientDialout); paramTable[7].DefaultLength = sizeof(ULONG); paramTable[8].Flags = RTL_QUERY_REGISTRY_DIRECT; paramTable[8].Name = L"AllowNetworkAccess"; paramTable[8].EntryContext = &AllowNetworkAccess; paramTable[8].DefaultType = REG_DWORD; paramTable[8].DefaultData = &AllowNetworkAccess; paramTable[8].DefaultLength = sizeof(ULONG); paramTable[9].Flags = RTL_QUERY_REGISTRY_DIRECT; paramTable[9].Name = L"EnableIpxwanForWorkstationDialout"; paramTable[9].EntryContext = &(pConfig->EnableIpxwanForWorkstationDialout); paramTable[9].DefaultType = REG_DWORD; paramTable[9].DefaultData = &(pConfig->EnableIpxwanForWorkstationDialout); paramTable[9].DefaultLength = sizeof(ULONG); paramTable[10].Flags = RTL_QUERY_REGISTRY_DIRECT; paramTable[10].Name = L"AcceptRemoteNodeNumber"; paramTable[10].EntryContext = &(pConfig->AcceptRemoteNodeNumber); paramTable[10].DefaultType = REG_DWORD; paramTable[10].DefaultData = &(pConfig->AcceptRemoteNodeNumber); paramTable[10].DefaultLength = sizeof(ULONG); paramTable[11].Flags = RTL_QUERY_REGISTRY_DIRECT|RTL_QUERY_REGISTRY_NOEXPAND; paramTable[11].Name = L"WanNetPool"; paramTable[11].EntryContext = &(pConfig->WanNetPoolStr); paramTable[11].DefaultType = REG_MULTI_SZ; paramTable[11].DefaultData = &(pConfig->WanNetPoolStr); paramTable[11].DefaultLength = 0; paramTable[12].Flags = RTL_QUERY_REGISTRY_DIRECT|RTL_QUERY_REGISTRY_NOEXPAND; paramTable[12].Name = L"FirstWanNode"; paramTable[12].EntryContext = &UniStrFirstWanNode; paramTable[12].DefaultType = REG_SZ; paramTable[12].DefaultData = &UniStrFirstWanNode; paramTable[12].DefaultLength = 0; Status = RtlQueryRegistryValues( RTL_REGISTRY_SERVICES, IpxRouterParametersPath, paramTable, NULL, NULL); // The registry parameter "ThisMachineOnly" was replaced // with the parameter "AllowNetworkAddress" whose semantics // are the inverse. If a new value was assigned to // AllowNetworkAccess, assign its inverse to pConfig->RParams.ThisMachineOnly // here. if (AllowNetworkAccess != InvalidNetworkAccessValue) pConfig->RParams.ThisMachineOnly = !AllowNetworkAccess; // Find out if a specific node number has been provided // in the registry. bAssignSpecificNode = CopyWanNode (pConfig->puSpecificNode, &UniStrFirstWanNode); if (bAssignSpecificNode) { GETLONG2ULONG(&LastNodeAssigned,&(pConfig->puSpecificNode[2])); //TraceIpx(OPTIONS_TRACE, "GetIpxCpParameters: FirstWanNode: %.2x%.2x%.2x%.2x%.2x%.2x LastNodeAssigned= %x", //pConfig->puSpecificNode[0], //pConfig->puSpecificNode[1], //pConfig->puSpecificNode[2], //pConfig->puSpecificNode[3], //pConfig->puSpecificNode[4], //pConfig->puSpecificNode[5], //LastNodeAssigned); } }