Fórum Bloquear estacao... #203238
28/12/2003
0
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
Curtir tópico
+ 0
Responder
Posts
29/12/2003
Nigro
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;
Responder
Gostei + 0
29/12/2003
Marconi
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
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)