نقل قول نوشته شده توسط Mahdi_Delphi
سلام

یک شبکه Lan داریم که به صورت WorkGroup هست و یکی از کامپیوترها سرور اینترنته و تعدادی هم کلاینت هستند.

چطور میشه برنامه ای نوشت که ارتباط بین سرور و یک کلاینت خاص رو برای مدت مشخصی قطع کنه؟

یعنی هیچ بسته ای بین سرور و اون کامپیوتر رد و بدل نشه؟!

در واقع میخوام از طریق سرور ارتباط اون کلاینت رو با اینترنت قطع کنم !

ممنون میشم راهنمایی کنید.
برای این کار شما باید یک سرور و کلاینت با Indy طراحی کنید که وقتی سرور دستور داد کلاینت

قفل گردد یا کارت شبکه فرد رو Disable کنید :

             RE: Disable/Enable Network

Bowers, Michael P. ISD
Tue, 28 Jun 2005 23:05:14 -0700

I did this just recently as a quick test for a proof of concept. It
uses the SetupAPI header translation from Project Jedi and the rest is
adapted from source from the Microsoft Win2K3 DDK. It works in
Win2K/WinXP (the only platforms of interest in my work) but may work in
others. YMMV.


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
Dialogs, StdCtrls, SetupAPI;

const
GUID_DEVCLASS_NET: TGUID = '{4D36E972-E325-11CE-BFC1-08002BE10318}';

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function StateChange(NewState, SelectedItem: cardinal; hDevInfo:
HDEVINFO): boolean;
var
PropChangeParams: SP_PROPCHANGE_PARAMS;
DeviceInfoData: SP_DEVINFO_DATA;
begin
DeviceInfoData.cbSize := SizeOf(SP_DEVINFO_DATA);

// Get handle to selected item
if not SetupDiEnumDeviceInfo(hDevInfo, SelectedItem, DeviceInfoData)
then
begin
Result := False;
Exit;
end;

// Set the PropChangeParams structure for this item
PropChangeParams.ClassInstallHeader.InstallFunctio n :=
DIF_PROPERTYCHANGE;
PropChangeParams.ClassInstallHeader.cbSize :=
SizeOf(SP_CLASSINSTALL_HEADER);
PropChangeParams.Scope := DICS_FLAG_GLOBAL;
PropChangeParams.StateChange := NewState;

if not SetupDiSetClassInstallParams(hDevInfo, @DeviceInfoData,
PSPCLASSINSTALLHEADER(@PropChangeParams), SizeOf(PropChangeParams)) then
begin
Result := False;
Exit;
end;

// Call the ClassInstaller and perform the change
if not SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo,
@DeviceInfoData) then
begin
Result := False;
Exit;
end;

Result := True;
end;

//
------------------------------------------------------------------------
-----

function DisableNetAdapter: boolean;
var
hdi: HDEVINFO;
begin
hdi := SetupDiGetClassDevs(@GUID_DEVCLASS_NET, nil, 0, DIGCF_PRESENT);

if cardinal(hdi) = INVALID_HANDLE_VALUE then
begin
Result := False;
end
else
begin
Result := StateChange(DICS_DISABLE, 0, hdi);
SetupDiDestroyDeviceInfoList(hdi);
end;
end;

//
------------------------------------------------------------------------
-----

function EnableNetAdapter: boolean;
var
hdi: HDEVINFO;
begin
hdi := SetupDiGetClassDevs(@GUID_DEVCLASS_NET, nil, 0, DIGCF_PRESENT);

if cardinal(hdi) = INVALID_HANDLE_VALUE then
begin
Result := False;
end
else
begin
Result := StateChange(DICS_ENABLE, 0, hdi);
SetupDiDestroyDeviceInfoList(hdi);
end;
end;

//
------------------------------------------------------------------------
-----

procedure TForm1.Button1Click(Sender: TObject);
begin
EnableNetAdapter;
end;

//
------------------------------------------------------------------------
-----

procedure TForm1.Button2Click(Sender: TObject);
begin
DisableNetAdapter;
end;

//
------------------------------------------------------------------------
-----

end.


ولی فکر کنم این کد در Win9X جواب بده تو Xp تست نکردم.

موفق باشید :)