#include <devguid.h>
+/* __RPC__out is not defined in the v6.0 Windows SDK */
+#ifndef __RPC__out
+#define __RPC__out
+#endif
+
/* These two are from the Windows DDK */
#include <netcfgx.h>
#include <netcfgn.h>
CLEANUP_ON_FAILURE(hr);
bFound = !wcscmp(adapter_guid, V_BSTR(&Value));
-
+
if (bFound)
{
ReportMessage(1,"Found adapter", NULL,V_BSTR(&Value),0);
CLEANUP_ON_FAILURE(hr);
*pPath = SysAllocString(V_BSTR(&Value));
-
+
}
-
+
VariantClear(&Value);
-
+
// Release it.
// ===========
pObj->Release(); // Release objects not owned.
DWORD dwIndex;
if (swscanf(InstancePath, L"Win32_NetworkAdapterConfiguration.Index=%u", &dwIndex)==1)
{
- DWORD ret = 0;
+ DWORD ret = 0;
ReportMessage(1,"Setting MAXLANA",NULL,NULL,dwIndex+1);
ret = AdjustMaxLana(dwIndex+1);
if (ret) ReportMessage(0,"AdjustMaxLana returned the error code ",NULL,NULL,ret);
ReportMessage(0,"Trying again in 20 seconds...",NULL,NULL,0);
Sleep(10000);
ReportMessage(0,"Trying again in 10 seconds...",NULL,NULL,0);
- Sleep(5000);
+ Sleep(5000);
ReportMessage(0,"Trying again in 5 seconds...",NULL,NULL,0);
Sleep(2000);
}
-
- ReportMessage(0,"Calling ExecMethod EnableStatic NOW... ",NULL,NULL,0);
+
+ ReportMessage(0,"Calling ExecMethod EnableStatic NOW... ",NULL,NULL,0);
// Call the method
hr = pNamespace->ExecMethod(InstancePath, MethodName, 0, NULL, pInInst,
- &pOutInst, NULL);
+ &pOutInst, NULL);
if (!SUCCEEDED(hr))
{
ReportMessage(0,"ExecMethod EnableStatic failed",NULL,NULL, hr);
continue;
}
- hr = V_I4(&v_ret_value);
- if(hr != 0)
+ hr = V_I4(&v_ret_value);
+ if (hr != 0)
ReportMessage(0,"EnableStatic failed ", NULL,NULL,hr);
else
{
// Call the method
hr2 = pNamespace->ExecMethod(InstancePath, MethodName, 0, NULL, pInInst,
- &pOutInst, NULL);
+ &pOutInst, NULL);
if (!SUCCEEDED(hr2)) {
ReportMessage(0,"ExecMethod SetDynamicDNSRegistration failed",NULL,NULL, hr2);
goto cleanup;
if (!SUCCEEDED(hr2)) {
ReportMessage(0,"WARNING: Could not determine return value for SetDynamicDNSRegistration ",NULL,NULL, hr2);
} else {
- hr2 = V_I4(&v_ret_value);
- if(hr2 != 0)
+ hr2 = V_I4(&v_ret_value);
+ if (hr2 != 0)
ReportMessage(0,"SetDynamicDNSRegistration failed ", NULL,NULL,hr2);
else
ReportMessage(0,"SetDynamicDNSRegistration succeeded",NULL,NULL,0);
// Call the method
hr2 = pNamespace->ExecMethod(InstancePath, MethodName, 0, NULL, pInInst,
- &pOutInst, NULL);
+ &pOutInst, NULL);
if (!SUCCEEDED(hr2)) {
ReportMessage(0,"ExecMethod SetTcpipNetbios failed",NULL,NULL, hr2);
goto cleanup;
if (!SUCCEEDED(hr2)) {
ReportMessage(0,"WARNING: Could not determine return value for SetTcpipNetbios ",NULL,NULL, hr2);
} else {
- hr2 = V_I4(&v_ret_value);
- if(hr2 != 0)
+ hr2 = V_I4(&v_ret_value);
+ if (hr2 != 0)
ReportMessage(0,"SetTcpipNetbios failed ", NULL,NULL,hr2);
else
ReportMessage(0,"SetTcpipNetbios succeeded",NULL,NULL,0);
/**********************************************************
-* LoopbackBindings : unbind all other
-* protocols except TCP/IP, netbios, netbt.
+* LoopbackBindings : unbind all other
+* protocols except TCP/IP, netbios, netbt.
*/
-extern "C" HRESULT LoopbackBindings (LPCWSTR loopback_guid)
+extern "C" HRESULT
+LoopbackBindings (LPCWSTR loopback_guid)
{
HRESULT hr = 0;
INetCfg *pCfg = NULL;
LPWSTR swName = NULL;
GUID g;
wchar_t device_guid[100];
-
+
ReportMessage(0,"Running LoopbackBindings()...",NULL,NULL,0);
-
- hr = CoInitializeEx( NULL, COINIT_DISABLE_OLE1DDE | COINIT_APARTMENTTHREADED );
+
+ hr = CoInitializeEx( NULL, COINIT_DISABLE_OLE1DDE | COINIT_APARTMENTTHREADED );
CLEANUP_ON_FAILURE(hr);
-
+
hr = CoCreateInstance( CLSID_CNetCfg, NULL, CLSCTX_INPROC_SERVER, IID_INetCfg, (void**)&pCfg );
CLEANUP_ON_FAILURE(hr);
-
+
hr = pCfg->QueryInterface( IID_INetCfgLock, (void**)&pLock );
CLEANUP_ON_FAILURE(hr);
-
+
hr = pLock->AcquireWriteLock( 1000, L"AFS Configuration", NULL );
CLEANUP_ON_FAILURE(hr);
bLockGranted = TRUE;
-
+
hr = pCfg->Initialize( NULL );
CLEANUP_ON_FAILURE(hr);
bInitialized = TRUE;
-
+
hr = pCfg->EnumComponents( &GUID_DEVCLASS_NET, &pEnumComponent );
CLEANUP_ON_FAILURE(hr);
-
+
while( pEnumComponent->Next( 1, &pAdapter, NULL ) == S_OK )
{
pAdapter->GetDisplayName( &swName );
pAdapter->GetInstanceGuid( &g );
StringFromGUID2(g, device_guid, 99);
-
- if(!wcscmp( device_guid, loopback_guid )) // found loopback adapter
+
+ if (!wcscmp( device_guid, loopback_guid )) // found loopback adapter
{
INetCfgComponentBindings *pBindings;
INetCfgBindingPath *pPath;
IEnumNetCfgBindingPath *pEnumPaths;
INetCfgComponent *upper;
-
+
ReportMessage(0,"LoopbackBindings found", NULL, device_guid,0 );
-
+
hr = pAdapter->QueryInterface( IID_INetCfgComponentBindings, (void**) &pBindings);
- if(hr==S_OK)
+ if (hr==S_OK)
{
hr = pBindings->EnumBindingPaths( EBP_ABOVE, &pEnumPaths );
- if(hr==S_OK)
+ if (hr==S_OK)
{
while(pEnumPaths->Next( 1, &pPath, NULL ) == S_OK)
{
pPath->GetOwner( &upper );
-
+
LPWSTR swId = NULL, swName = NULL;
-
+
upper->GetDisplayName( &swName );
upper->GetId( &swId );
-
+
ReportMessage(1,"Looking at ",NULL, swName, 0);
-
+
{
ReportMessage(1," Moving to the end of binding order...",NULL,NULL,0);
INetCfgComponentBindings *pBindings2;
if (hr==S_OK)
{
ReportMessage(1,"...",0,0,0);
- hr = pBindings2->MoveAfter(pPath, NULL);
- pBindings2->Release();
+ hr = pBindings2->MoveAfter(pPath, NULL);
+ pBindings2->Release();
bConfigChanged=TRUE;
}
- if (hr==S_OK) ReportMessage(1,"success",0,0,0); else ReportMessage(0,"Binding change failed",0,0,hr);
-
- }
-
- if ( !_wcsicmp(swId, L"ms_netbios") ||
+ if (hr==S_OK) ReportMessage(1,"success",0,0,0); else ReportMessage(0,"Binding change failed",0,0,hr);
+
+ }
+
+ if ( !_wcsicmp(swId, L"ms_netbios") ||
!_wcsicmp(swId, L"ms_tcpip") ||
!_wcsicmp(swId, L"ms_netbt") ||
!_wcsicmp(swId, L"ms_msclient"))
if (hr==S_OK) ReportMessage(1,"success",0,0,0); else ReportMessage(0,"Proto failed",0,0,hr);
bConfigChanged=TRUE;
}
-
+
}
- else //if (!_wcsicmp(swId, L"ms_server") || (!_wcsicmp(swId, L"ms_msclient"))
+ else //if (!_wcsicmp(swId, L"ms_server") || (!_wcsicmp(swId, L"ms_msclient"))
{
if (pPath->IsEnabled()==S_OK)
{
bConfigChanged=TRUE;
}
}
-
+
CoTaskMemFree( swName );
CoTaskMemFree( swId );
-
+
pPath->Release();
}
pEnumPaths->Release();
pBindings->Release();
} // hr==S_OK for QueryInterface IID_INetCfgComponentBindings
}
-
+
CoTaskMemFree( swName );
-
+
pAdapter->Release();
}
-
- pEnumComponent->Release();
-
+
+ pEnumComponent->Release();
+
hr = 0;
-
+
cleanup:
-
- if(bConfigChanged) pCfg->Apply();
-
- if(pAdapter) pAdapter->Release();
-
- if(bInitialized) pCfg->Uninitialize();
- if(bLockGranted) pLock->ReleaseWriteLock();
-
- if(pLock) pLock->Release();
- if(pCfg) pCfg->Release();
-
+
+ if (bConfigChanged) pCfg->Apply();
+
+ if (pAdapter) pAdapter->Release();
+
+ if (bInitialized) pCfg->Uninitialize();
+ if (bLockGranted) pLock->ReleaseWriteLock();
+
+ if (pLock) pLock->Release();
+ if (pCfg) pCfg->Release();
+
if (hr) ReportMessage(0,"LoopbackBindings() is returning ",0,0,hr);
return hr;
}
-
-extern "C" DWORD SetIpAddress(LPCWSTR guid, LPCWSTR ip, LPCWSTR mask)
+
+extern "C"
+DWORD SetIpAddress(LPCWSTR guid, LPCWSTR ip, LPCWSTR mask)
{
ReportMessage(0,"Running SetIpAddress()...",0,0,0);
HRESULT hr = 0;
}
/* Set MAXLANA in the registry to the specified value, unless the existing registry value is larger */
-DWORD AdjustMaxLana(DWORD dwMaxLana)
+static DWORD
+AdjustMaxLana(DWORD dwMaxLana)
{
LONG ret = 0;
ReportMessage(0,"Making sure MaxLana is large enough",0,0, dwMaxLana);
- ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\Services\\NetBIOS\\Parameters"),
+ ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\Services\\NetBIOS\\Parameters"),
0, KEY_ALL_ACCESS , &hNetBiosParamKey);
if (ret) return ret;
-
+
dwSize = 4;
ret = RegQueryValueEx(hNetBiosParamKey, _T("MaxLana"), 0, &dwType, (LPBYTE) &dwExistingMaxLana, &dwSize);
- if ((ret) && (ret != ERROR_MORE_DATA) && (ret != ERROR_FILE_NOT_FOUND))
+ if ((ret) && (ret != ERROR_MORE_DATA) && (ret != ERROR_FILE_NOT_FOUND))
{
RegCloseKey(hNetBiosParamKey);
return ret;
ReportMessage (1,"MaxLana is currently",0,0, dwExistingMaxLana);
- if (dwExistingMaxLana < dwMaxLana)
+ if (dwExistingMaxLana < dwMaxLana)
{
ReportMessage (1,"Changing MaxLana", 0,0,dwMaxLana);
ret = RegSetValueEx(hNetBiosParamKey, _T("MaxLana"), 0, REG_DWORD, (const BYTE*)&dwMaxLana, 4);
- if (ret)
+ if (ret)
{
RegCloseKey(hNetBiosParamKey);
return ret;
- }
+ }
}
}
-extern "C"
+extern "C"
BOOL UpdateHostsFile( LPCWSTR swName, LPCWSTR swIp, LPCSTR szFilename, BOOL bPre )
{
char szIp[2048], szName[2048];
char etcPath[MAX_PATH];
- char tempPath[MAX_PATH];
- char buffer[2048], temp[2048];
- char *str;
- HRESULT rv;
- DWORD fa,len;
- FILE *hFile, *hTemp;
-
+ char tempPath[MAX_PATH];
+ char buffer[2048], temp[2048];
+ char *str;
+ HRESULT rv;
+ DWORD fa,len;
+ FILE *hFile, *hTemp;
+ size_t nameLen;
+
_snprintf(szIp, 2047, "%S", swIp);
_snprintf(szName, 2047, "%S", swName);
strupr(szName);
+ nameLen = strlen(szName);
ReportMessage(0,"Starting UpdateHostsFile() on file",szFilename,0,0);
- rv = SHGetFolderPathA( NULL, CSIDL_SYSTEM, NULL, SHGFP_TYPE_CURRENT , etcPath );
- if(rv != S_OK) return FALSE;
+ rv = SHGetFolderPathA( NULL, CSIDL_SYSTEM, NULL, SHGFP_TYPE_CURRENT, etcPath );
+ if (rv != S_OK)
+ return FALSE;
- strcat( etcPath, ETCDIR );
+ strcat( etcPath, ETCDIR );
- fa = GetFileAttributesA( etcPath );
+ fa = GetFileAttributesA( etcPath );
- if(fa == INVALID_FILE_ATTRIBUTES)
- {
- // the directory doesn't exist
- // it should be there. non-existence implies more things are wrong
- ReportMessage(0, "Path does not exist ", etcPath,0,0 );
- return FALSE;
- }
+ if (fa == INVALID_FILE_ATTRIBUTES)
+ {
+ // the directory doesn't exist
+ // it should be there. non-existence implies more things are wrong
+ ReportMessage(0, "Path does not exist ", etcPath,0,0 );
+ return FALSE;
+ }
- strcpy( tempPath, etcPath );
- strcat( etcPath, "\\" );
- strcat( etcPath, szFilename );
+ strcpy( tempPath, etcPath );
+ strcat( etcPath, "\\" );
+ strcat( etcPath, szFilename );
- fa = GetFileAttributesA( etcPath );
+ fa = GetFileAttributesA( etcPath );
- if(fa == INVALID_FILE_ATTRIBUTES)
- {
- ReportMessage(0, "File not found. Creating...", szFilename,0,0);
+ if (fa == INVALID_FILE_ATTRIBUTES)
+ {
+ ReportMessage(0, "File not found. Creating...", szFilename,0,0);
- hFile = fopen( etcPath, "w" );
- if(!hFile)
- {
- ReportMessage(0,"FAILED : can't create file",etcPath,0,errno);
- return FALSE;
- }
+ hFile = fopen( etcPath, "w" );
+ if (!hFile)
+ {
+ ReportMessage(0,"FAILED : can't create file",etcPath,0,errno);
+ return FALSE;
+ }
- fprintf(hFile, "%s\t%s%s\n", szIp, szName, (bPre)?"\t#PRE":"");
+ fprintf(hFile, "%s\t%s%s\n", szIp, szName, (bPre)?"\t#PRE":"");
- fclose( hFile );
+ fclose( hFile );
- ReportMessage(1,"done",0,0,0);
- }
- else // the file exists. parse and update
- {
-
- ReportMessage(1, "Updating file ...",szFilename,0,0 );
-
- hFile = fopen( etcPath, "r");
- if(!hFile)
- {
- ReportMessage(0,"FAILED : can't open file",etcPath,0,errno);
- return FALSE;
- }
-
- strcat( tempPath, szFilename );
- strcat( tempPath, ".tmp" );
- hTemp = fopen( tempPath, "w");
- if(!hTemp)
- {
- ReportMessage(0,"FAILED : can't create temp file",tempPath,0,errno);
- fclose(hFile);
- return FALSE;
- }
-
- while(fgets( buffer, 2046, hFile))
- {
- strcpy( temp, buffer );
- strupr( temp );
-
- if ((strlen(temp)<1) || (*(temp+strlen(temp)-1)!='\n')) strcat(temp, "\n");
-
- if(!(str = strstr(temp, szName)))
- {
- fputs( buffer, hTemp );
- }
- else
- {
- // check for FOOBAFS or AFSY
- //if(str <= temp || (*(str-1) != '-' && !isspace(*(str+strlen(szName)))))
- if ( (str == temp) || (!*(str+strlen(szName))) || (!isspace(*(str-1))) || (!isspace(*(str+strlen(szName)))) )
- fputs( buffer, hTemp );
- }
- }
-
-
- len = 2048;
- GetComputerNameA( buffer, &len );
- buffer[11] = 0;
- fprintf( hTemp, "%s\t%s%s\n", szIp, szName, (bPre)?"\t#PRE":"");
-
- fclose( hTemp );
- fclose( hFile );
-
- strcpy(buffer, etcPath);
- strcat(buffer, ".old");
-
- if(!DeleteFileA(buffer)) {
+ ReportMessage(1,"done",0,0,0);
+ }
+ else // the file exists. parse and update
+ {
+
+ ReportMessage(1, "Updating file ...",szFilename,0,0 );
+
+ hFile = fopen( etcPath, "r");
+ if (!hFile)
+ {
+ ReportMessage(0,"FAILED : can't open file",etcPath,0,errno);
+ return FALSE;
+ }
+
+ strcat( tempPath, szFilename );
+ strcat( tempPath, ".tmp" );
+ hTemp = fopen( tempPath, "w");
+ if (!hTemp)
+ {
+ ReportMessage(0,"FAILED : can't create temp file",tempPath,0,errno);
+ fclose(hFile);
+ return FALSE;
+ }
+
+ while(fgets( buffer, 2046, hFile))
+ {
+ size_t len;
+
+ strcpy( temp, buffer );
+ strupr( temp );
+ len = strlen(temp);
+
+ if ((len < 1) || (temp[len-1] != '\n'))
+ strcat(temp, "\n");
+
+ if (!(str = strstr(temp, szName)))
+ {
+ fputs( temp, hTemp );
+ }
+ else
+ {
+ // check for FOOBAFS or AFSY
+ if ( (str == temp) || (!str[nameLen]) || (!isspace(*(str-1))) || (!isspace(str[nameLen])) )
+ fputs( temp, hTemp );
+ }
+ }
+
+ len = 2048;
+ GetComputerNameA( buffer, &len );
+ buffer[11] = 0;
+ fprintf( hTemp, "%s\t%s%s\n", szIp, szName, (bPre)?"\t#PRE":"");
+
+ fclose( hTemp );
+ fclose( hFile );
+
+ strcpy(buffer, etcPath);
+ strcat(buffer, ".old");
+
+ if (!DeleteFileA(buffer)) {
DWORD status;
int i;
char * eos;
status = GetLastError();
- if(status == ERROR_ACCESS_DENIED) {
+ if (status == ERROR_ACCESS_DENIED) {
/* try changing the file attribtues. */
- if(SetFileAttributesA(buffer, FILE_ATTRIBUTE_NORMAL) &&
+ if (SetFileAttributesA(buffer, FILE_ATTRIBUTE_NORMAL) &&
DeleteFileA(buffer)) {
status = 0;
ReportMessage(0,"Changed attributes and deleted back host file", buffer, 0, 0);
}
}
- if(status && status != ERROR_FILE_NOT_FOUND) {
- /* we can't delete the file. Try to come up with
+ if (status && status != ERROR_FILE_NOT_FOUND) {
+ /* we can't delete the file. Try to come up with
a different name that's not already taken. */
srand(GetTickCount());
eos = buffer + strlen(buffer);
for(i=0; i < 50; i++) {
itoa(rand(), eos, 16);
- if(GetFileAttributesA(buffer) == INVALID_FILE_ATTRIBUTES &&
+ if (GetFileAttributesA(buffer) == INVALID_FILE_ATTRIBUTES &&
GetLastError() == ERROR_FILE_NOT_FOUND)
break;
}
}
}
- if(!MoveFileA( etcPath, buffer )) {
+ if (!MoveFileA( etcPath, buffer )) {
ReportMessage(0,"FAILED: Can't rename old file", etcPath, 0, GetLastError());
return FALSE;
}
- if(!MoveFileA( tempPath, etcPath ) != 0)
- {
- ReportMessage(0,"FAILED : Can't rename new file", tempPath, 0, GetLastError());
- return FALSE;
- }
+ if (!MoveFileA( tempPath, etcPath ) != 0)
+ {
+ ReportMessage(0,"FAILED : Can't rename new file", tempPath, 0, GetLastError());
+ return FALSE;
+ }
- }
+ }
- return TRUE;
+ return TRUE;
}
#ifdef TEST