Important:
This is retired content. This content is outdated and is no longer being maintained. It is provided as a courtesy for individuals who are still using these technologies. This content may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist.
A version of this page is also available for
4/8/2010

This code deletes a route with the destination Dest, netmask Mask, and gateway Gateway. Note that IP will not allow default routes to be deleted.

Copy Code
   
   PMIB_IPFORWARDTABLE pIpForwardTable = NULL;
   PMIB_IPFORWARDROW pRow = NULL;
   ULONG dwSize = 0;
   BOOL bOrder = FALSE;
   DWORD dwStatus = 0;
   DWORD Dest = 0xDDBBCCAA; // this is in host order Ip Address
AA.BB.CC.DD is DDCCBBAA
   DWORD Mask = 0x00FFFFFF; // 255.255.255.0
   DWORD Gateway = 0xDDBBCCAA; // this is in host order Ip Address
AA.BB.CC.DD is DDCCBBAA

   // Find out how big our buffer needs to be
   dwStatus = GetIpForwardTable(pIpForwardTable, &dwSize,
bOrder);
   if (dwStatus == ERROR_INSUFFICIENT_BUFFER) {

	// Allocate the memory for the table
	if (!(pIpForwardTable = (PMIB_IPFORWARDTABLE)malloc(dwSize)))
{
		 OutputMessage(TEXT("Malloc failed, Out of Memory!\r\n"));
		 exit(1);
}

	// Now get the table
	dwStatus = GetIpForwardTable(pIpForwardTable, &dwSize,
bOrder);
   }

   if (dwStatus != ERROR_SUCCESS) {
	OutputMessage(TEXT("GetIpForwardTable Failed, ERROR %d\r\n"),
dwStatus);
	if (pIpForwardTable) 
		 free(pIpForwardTable);
	exit(1);
   }
   
   // Search for the row in the table that is wanted. The default
gateway has a destination
   // of 0.0.0.0 - Notice that while the table is looked through,
but only one row is copied
   // This is so that if there happen to be multiple default
gateways, all 
   // of them can be deleted.
   for (unsigned long int i=0; i <
pIpForwardTable->dwNumEntries; i++) {

	if ((pIpForwardTable->table[i].dwForwardDest == Dest)
&&
		 (pIpForwardTable->table[i].dwForwardMask == Mask)
&&
		 (pIpForwardTable->table[i].dwForwardNextHop ==
Gateway)) {
		 
		 // Delete the old default gateway entry
		 dwStatus =
DeleteIpForwardEntry(&(pIpForwardTable->table[i]));

		 if (dwStatus != ERROR_SUCCESS) {
			OutputMessage(TEXT("Could not delete route!\n"));
			exit(1);
		 }
}
   }		 
   
   if (dwStatus == NO_ERROR)
	OutputMessage(TEXT("Route deleted successfully\n"));
   else if (dwStatus == ERROR_INVALID_PARAMETER)
	OutputMessage(TEXT("Invalid Parameter\n"));
   else 
	DisplayErrorMessage(dwStatus);

   // Free resources
   if (pIpForwardTable) 
	free(pIpForwardTable);

See Also