Network2013. 8. 19. 09:25



http://blog.naver.com/hks9999/30091610378


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules

 

{3DE1907F-A61D-4593-8E05-24279AC12855}

v2.0|Action=Allow|Active=TRUE|Dir=In|Protocol=17|Profile=Public|App=C:\Users\hks9999\Desktop\easyviewer0416\easyviewer\Release\easyviewer.exe|Name=easyviewer.exe|Edge=FALSE|

   
 //SHRegWriteString(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\StandardProfile\\AuthorizedApplications\\List",str,buf);
 /*
 sprintf(buffer,"{2168BD8F-5E16-4357-A72E-00DA93174A5C}");
 sprintf(buf,"v2.10|Action=Allow|Active=TRUE|Dir=In|App=%s|Name=CLRT|Desc=CLRT|",str);
    SHRegWriteString(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\FirewallRules",buffer,buf);
 */
 
 //sprintf(buffer,"{AB70F024-3B51-474A-9C48-8EF495955097}",str);
 //sprintf(buf,"v2.10|Action=Allow|Active=TRUE|Dir=In|Protocol=17|Profile=Public|Profile=Domain|Profile=Private|App=%s|Name=CLRT|Desc=CLRT|Defer=User|",str);
 //SHRegWriteString(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\FirewallRules",buffer,buf);

 //SHRegWriteString(HKEY_LOCAL_MACHINE,"SYSTEM\\ControlSet001\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\FirewallRules",buffer,buf);
 //sprintf(buf,"%s:*:Enabled:COLLECT_SAMPLE",str);
  //SHRegWriteString(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\PublicProfile\\AuthorizedApplications\\List",str,buf);

몇시간동안 삽질도 많이 했다..-_-;

 

가할려고 이것저것 해봤지만

 

윈도우 XP서비스팩 2에서는 아래의 레지값의 추가만으로도 잘 동작한다. (서팩 3로 가능할듯)

sprintf(buf,"%s:*:Enabled:CLEAN_SET",str);
 SHRegWriteString(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\StandardProfile\\AuthorizedApplications\\List",str,buf); 

 

하지만...-_-

 

비스타, 윈도우 7에서는 강화가 된 것 같다.

FIREWALL API를 이용하는 수밖에 없을 것 같다...; 뭔가 시스템이 있는듯... 

 

 HANDLE hProcess;

 STARTUPINFO sInfo;
 memset(&sInfo,0x00,sizeof(STARTUPINFO));
 PROCESS_INFORMATION pInfo;
 memset(&pInfo,0x00,sizeof(PROCESS_INFORMATION));

 sprintf(command,"netsh firewall add allowedprogram \"%s\" SAMPLE ENABLE",argv[0]);
 ret=CreateProcess(NULL,command,NULL,NULL,NULL,CREATE_NO_WINDOW,NULL,NULL,&sInfo,&pInfo);

if(ret)
 { 
  hProcess=pInfo.hProcess;
  WaitForSingleObject(hProcess,0xffffffff);
  CloseHandle(hProcess);
 }

 

다음과 같이 netsh를 실행시키고 백그라운드에서 종료될 때까지 대기한다음 하는게 구현하기 편할 듯 하다...

 

설정한 방화벽 값을 삭제 시킬때는 netsh firewall delete \"%s\" 과 같이 하면 된다

Posted by Julyus