Bloquear estacao...

Delphi

28/12/2003

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!


Marcelo

Marcelo

Curtidas 0

Respostas

Nigro

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;


GOSTEI 0
Marconi

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


GOSTEI 0
POSTAR