Bloquear estacao...
Olá!
Gostaria de saber como faço para bloquear a estação de trabalho! Para efetura LogOff é o seguinte:
ExitWindowsEx( EWX_LOGOFF, 0 ); // efetua logoff
Eu estou precisando de bloquear a estação!
Se alguem souber, valeu!
Gostaria de saber como faço para bloquear a estação de trabalho! Para efetura LogOff é o seguinte:
ExitWindowsEx( EWX_LOGOFF, 0 ); // efetua logoff
Eu estou precisando de bloquear a estação!
Se alguem souber, valeu!
Marcelo
Curtidas 0
Respostas
Nigro
28/12/2003
Você pode utilizar sockets, Coloque um executável na estação com clientsocket e um serversocket no servidor, defina a rede com ip fixo você pode começar com o code insight assim:
Servidor:
SeverSocket.Socket[0].SendText(´Teste...´);
Estação:
Edit1Text := ClientSocket.Socket.ReciveText;
Servidor:
SeverSocket.Socket[0].SendText(´Teste...´);
Estação:
Edit1Text := ClientSocket.Socket.ReciveText;
GOSTEI 0
Marconi
28/12/2003
Uma das maneiras é voce reconhecer o nome do computador que está se logando no seu programa e não deixa-lo entrar
Aí vai a função que retorna o nome do mesmo.
function CompName : String;
{Requer a unit Registry declarada na clausula Uses da Unit}
var
Registro : TRegistry;
begin
Registro := TRegistry.Create;
Registro.RootKey := HKEY_LOCAL_MACHINE;
if Registro.OpenKey(´System\CurrentControlSet\Control\ComputerName\ComputerName´, false) then
begin
result := Registro.ReadString(´ComputerName´);
end;
Registro.Free;
end;
Mas como o intruso pode mudar o nome do computador, verifique o número de série da HD do drive ´C:´ com a função abaixo.
Function SerialNum(FDrive:String) :String;
Var Serial:DWord;
DirLen,Flags: DWord;
DLabel : Array[0..11] of Char;
begin
Try
GetVolumeInformation(PChar(FDrive+´:\´),dLabel,12,@Serial,DirLen,Flags,nil,0);
Result := IntToHex(Serial,8);
Except Result :=´´;
end;
end;
Ainda pode verificar o IP da estação que está querendo entrar no seu programa com a função abaixo.
function GetIPFromHost
(var HostName, IPaddr, WSAErr: string): Boolean;
type
Name = array[0..100] of Char;
PName = ^Name;
var
HEnt: pHostEnt;
HName: PName;
WSAData: TWSAData;
i: Integer;
begin
Result := False;
if WSAStartup($0101, WSAData) <> 0 then begin
WSAErr := ´Winsock is not responding.´´;
Exit;
end;
IPaddr := ´´;
New(HName);
if GetHostName(HName^, SizeOf(Name)) = 0 then
begin
HostName := StrPas(HName^);
HEnt := GetHostByName(HName^);
for i := 0 to HEnt^.h_length - 1 do
IPaddr :=
Concat(IPaddr,
IntToStr(Ord(HEnt^.h_addr_list^[i])) + ´.´);
SetLength(IPaddr, Length(IPaddr) - 1);
Result := True;
end
else begin
case WSAGetLastError of
WSANOTINITIALISED:WSAErr:=´WSANotInitialised´;
WSAENETDOWN :WSAErr:=´WSAENetDown´;
WSAEINPROGRESS :WSAErr:=´WSAEInProgress´;
end;
end;
Dispose(HName);
WSACleanup;
end;
É bom ter um LogFile de todos que entram no seu programa registrando dia, hora, Nome da Máquina, Número de Série do HD, IP, Nome do Usuário, etc. Atraves deste LogFile fica fácil identificar.
Espero ter ajudado
Marconi
Aí vai a função que retorna o nome do mesmo.
function CompName : String;
{Requer a unit Registry declarada na clausula Uses da Unit}
var
Registro : TRegistry;
begin
Registro := TRegistry.Create;
Registro.RootKey := HKEY_LOCAL_MACHINE;
if Registro.OpenKey(´System\CurrentControlSet\Control\ComputerName\ComputerName´, false) then
begin
result := Registro.ReadString(´ComputerName´);
end;
Registro.Free;
end;
Mas como o intruso pode mudar o nome do computador, verifique o número de série da HD do drive ´C:´ com a função abaixo.
Function SerialNum(FDrive:String) :String;
Var Serial:DWord;
DirLen,Flags: DWord;
DLabel : Array[0..11] of Char;
begin
Try
GetVolumeInformation(PChar(FDrive+´:\´),dLabel,12,@Serial,DirLen,Flags,nil,0);
Result := IntToHex(Serial,8);
Except Result :=´´;
end;
end;
Ainda pode verificar o IP da estação que está querendo entrar no seu programa com a função abaixo.
function GetIPFromHost
(var HostName, IPaddr, WSAErr: string): Boolean;
type
Name = array[0..100] of Char;
PName = ^Name;
var
HEnt: pHostEnt;
HName: PName;
WSAData: TWSAData;
i: Integer;
begin
Result := False;
if WSAStartup($0101, WSAData) <> 0 then begin
WSAErr := ´Winsock is not responding.´´;
Exit;
end;
IPaddr := ´´;
New(HName);
if GetHostName(HName^, SizeOf(Name)) = 0 then
begin
HostName := StrPas(HName^);
HEnt := GetHostByName(HName^);
for i := 0 to HEnt^.h_length - 1 do
IPaddr :=
Concat(IPaddr,
IntToStr(Ord(HEnt^.h_addr_list^[i])) + ´.´);
SetLength(IPaddr, Length(IPaddr) - 1);
Result := True;
end
else begin
case WSAGetLastError of
WSANOTINITIALISED:WSAErr:=´WSANotInitialised´;
WSAENETDOWN :WSAErr:=´WSAENetDown´;
WSAEINPROGRESS :WSAErr:=´WSAEInProgress´;
end;
end;
Dispose(HName);
WSACleanup;
end;
É bom ter um LogFile de todos que entram no seu programa registrando dia, hora, Nome da Máquina, Número de Série do HD, IP, Nome do Usuário, etc. Atraves deste LogFile fica fácil identificar.
Espero ter ajudado
Marconi
GOSTEI 0