Asunto: Ver estado, cambiar estado cortafuegos (firewall) de Windows
¿Puedo saber el estado (si está iniciado o detenido) del cortafuegos (firewall) de Windows desde una aplicación realizada en Delphi? ¿puedo iniciarlo o detenerlo?
Utilizo Borland Delphi 6 y Windows XP SP3.
Publicado:
Mar May 26, 2009 5:54 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Ver estado, cambiar estado cortafuegos (firewall) de Win
Anuncios
varios escribió:
¿Puedo saber el estado (si está iniciado o detenido) del cortafuegos (firewall) de Windows desde una aplicación realizada en Delphi? ¿puedo iniciarlo o detenerlo?
Utilizo Borland Delphi 6 y Windows XP SP3.
Sí, por supuesto, el cortafuegos de Windows es un servicio, llamado "SharedAccess", es suficiente con ver el estado, iniciarlo o detenerlo.
A continuación te mostramos el código fuente de una de nuestras aplicaciones, que realiza estas acciones que nos comentas. La descarga gratuita del código fuente 100% Open Source:
// Inicia un servicio de Windows
function iniciarServicio (equipo, servicio : string) : Boolean;
var
schm,
schs: SC_Handle;
ss: TServiceStatus;
psTemp: PChar;
dwChkP: DWord;
begin
ss.dwCurrentState := 0;
schm := OpenSCManager(PChar(equipo), nil, SC_MANAGER_CONNECT);
if (schm > 0) then
begin
schs := OpenService(schm, PChar(servicio), SERVICE_START or
SERVICE_QUERY_STATUS);
if (schs > 0) then
begin
psTemp := nil;
if (StartService(schs, 0, psTemp)) then
if (QueryServiceStatus(schs, ss)) then
while (SERVICE_RUNNING <> ss.dwCurrentState) do
begin
dwChkP := ss.dwCheckPoint;
Sleep(ss.dwWaitHint);
if (not QueryServiceStatus(schs, ss)) then
Break;
if (ss.dwCheckPoint < dwChkP) then
Break;
end;
CloseServiceHandle(schs);
end;
CloseServiceHandle(schm);
end;
Result := SERVICE_RUNNING = ss.dwCurrentState;
end;
// Detiene un servicio de Windows
function detenerServicio (equipo, servicio : String) : Boolean;
var
schm,
schs: SC_Handle;
ss: TServiceStatus;
dwChkP: DWord;
begin
schm := OpenSCManager(PChar(equipo), nil, SC_MANAGER_CONNECT);
if (schm>0) then
begin
schs := OpenService(schm, PChar(servicio), SERVICE_STOP or
SERVICE_QUERY_STATUS);
if (schs>0) then
begin
if (ControlService(schs, SERVICE_CONTROL_STOP, ss)) then
if (QueryServiceStatus(schs, ss)) then
while (SERVICE_STOPPED<>ss.dwCurrentState) do
begin
dwChkP := ss.dwCheckPoint;
Sleep(ss.dwWaitHint);
if (not QueryServiceStatus(schs, ss)) then
Break;
if (ss.dwCheckPoint < dwChkP) then
Break;
end;
CloseServiceHandle(schs);
end;
CloseServiceHandle(schm);
end;
Result := SERVICE_STOPPED=ss.dwCurrentState;
end;
// Obtiene el estado de un servicio
function estadoServicio(sPC, sServicio : string ) : string;
var
schm, schs : SC_Handle;
ss : TServiceStatus;
dwStat : DWord;
begin
dwStat := 0;
schm := OpenSCManager(PChar(sPC), Nil, SC_MANAGER_CONNECT);
if (schm > 0) then
begin
schs := OpenService(schm, PChar(sServicio), SERVICE_QUERY_STATUS);
if (schs > 0) then
begin
if (QueryServiceStatus(schs, ss)) then
begin
dwStat := ss.dwCurrentState;
end;
CloseServiceHandle(schs);
end;
CloseServiceHandle(schm);
end;
case dwStat of
0 : Result := 'No disponible';
1 : Result := 'Detenido';
2 : Result := 'Iniciando';
3 : Result := 'Deteniendo';
4 : Result := 'Iniciado';
7 : Result := 'Pausado';
else
result := inttostr(dwstat);
end;
end;
// Lee una cadena de texto de un INI
function leCadINI (clave, cadena : string; defecto : string) : string;
begin
with tinifile.create (changefileext(paramstr(0),'.INI')) do
try
result := readString (clave, cadena, defecto);
finally
free;
end;
end;
//escribe una cadena de texto en un INI
procedure esCadINI (clave, cadena, valor : string);
begin
with tinifile.create (changefileext(paramstr(0),'.INI')) do
try
writeString (clave, cadena, valor);
finally
free;
end;
end;
procedure TformMenuPrincipal.estadoCortafuegos ();
begin
lEstado.Caption := estadoServicio('', txtNombreServicio.Text);
if (lEstado.Caption = 'Detenido') or (lEstado.Caption = 'Pausado') or
(lEstado.Caption = 'No disponible') then
begin
lInfo.Caption := 'Anteción: el cortafuegos (firewall) de Windows está ' +
'detenido, si no tiene un antivirus o cortafuegos actívelo para evitar ' +
'posibles intrusiones de virus y demás.';
lInfo.Font.Color := clMaroon;
bIniciar.Enabled := true;
bDesactivarCortafuegos.Enabled := false;
end
else
begin
lInfo.Caption := 'El cortafuegos (firewall) de Windows está ' +
'iniciado.';
lInfo.Font.Color := clGreen;
bIniciar.Enabled := false;
bDesactivarCortafuegos.Enabled := true;
end;
end;
procedure TformMenuPrincipal.FormCreate(Sender: TObject);
var
parametro1, parametro2 : string;
begin
txtNombreServicio.Text := leCadINI('Configuración', 'Nombre servicio', 'SharedAccess');
if ParamCount >= 1 then
begin
parametro1 := ParamStr(1);
parametro2 := ParamStr(2);
if (AnsiUpperCase (parametro1) = 'I') or
(AnsiUpperCase (parametro1) = '-I') or
(AnsiUpperCase (parametro1) = '/I') then
bIniciarClick(Self);
if (AnsiUpperCase (parametro1) = 'D') or
(AnsiUpperCase (parametro1) = '-D') or
(AnsiUpperCase (parametro1) = '/D') then
bDesactivarCortafuegosClick(Self);
if (AnsiUpperCase (parametro2) = 'C') or
(AnsiUpperCase (parametro2) = '-C') or
(AnsiUpperCase (parametro2) = '/C') then
begin
Application.Terminate;
Close;
end;
end;
estadoCortafuegos();
end;
procedure TformMenuPrincipal.bActualizarClick(Sender: TObject);
begin
nombreServicio := txtNombreServicio.Text;
estadoCortafuegos ();
end;
procedure TformMenuPrincipal.bSalirClick(Sender: TObject);
begin
close;
end;
procedure TformMenuPrincipal.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
esCadINI('Configuración', 'Nombre servicio', txtNombreServicio.Text);
end;
end.
Publicado:
Mar May 26, 2009 5:59 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Ver estado, cambiar estado cortafuegos (firewall) de Win
Anuncios
alonsojpd escribió:
Sí, por supuesto, el cortafuegos de Windows es un servicio, llamado "SharedAccess", es suficiente con ver el estado, iniciarlo o detenerlo.
A continuación te mostramos el código fuente de una de nuestras aplicaciones, que realiza estas acciones que nos comentas. La descarga gratuita del código fuente 100% Open Source...
Ten en cuenta que lo que te hemos indicado anteriormete es para el servicio del cortafuegos de Windows, además de esto, el propio cortafuegos puede estar activado o desactivado (independientemente de como esté el servicio). Lógicamente, si el servicio está detenido el cortafuegos también lo estará, pero puede que el servicio esté iniciado y el cortafuegos detenido.
A continuación te mostramos el código fuente de una de nuestras aplicaciones, en este código verás funciones para iniciar, detener el firewall de Windows, también verás funciones para añadir reglas al cortafuegos (tanto abrir puertos como abrir aplicaciones):
procedure TformMenuPrincipal.bSelClick(Sender: TObject);
begin
if dlAbrir.Execute then
txtAplicacionRuta.Text := dlAbrir.FileName;
end;
procedure TformMenuPrincipal.bAbrirAplicacionClick(Sender: TObject);
begin
abrirAplicacionFirewall(txtAplicacionNombre.Text,
txtAplicacionRuta.Text, opAplicacionAmbitoLocal.Checked, true);
MessageDlg('Aplicación añadida al cortafuegos de Windows.',
mtInformation, [mbok], 0);
end;
procedure TformMenuPrincipal.bActivarReglaClick(Sender: TObject);
begin
activarReglaFirewall (strtoint(txtActivarPuerto.Text),
opTCP.Checked, opActivar.Checked);
MessageDlg('Regla añadida al cortafuegos de Windows.',
mtInformation, [mbok], 0);
end;
procedure TformMenuPrincipal.btEstadoActivarClick(Sender: TObject);
begin
activarDesactivarFirewall(True);
MessageDlg('Cortafuegos de Windows activado.',
mtInformation, [mbok], 0);
end;
procedure TformMenuPrincipal.bEstadoDesactivarClick(Sender: TObject);
begin
activarDesactivarFirewall(false);
MessageDlg('Cortafuegos de Windows desactivado.',
mtInformation, [mbok], 0);
end;
end.
Publicado:
Mar May 26, 2009 10:08 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Ver estado, cambiar estado cortafuegos (firewall) de Win
Anuncios
Aquí tienes una descarga gratuita (freeware) del código fuente de la aplicación AjpdSoft Abrir Puertos Cortafuegos Windows:
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A