如何用程式將使用者的資源分享關掉 |
缺席
|
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
|
00156
高階會員 發表:45 回覆:195 積分:112 註冊:2002-06-01 發送簡訊給我 |
使用API:NetShareDel,請參照
http://delphi.ktop.com.tw/topic.php?topic_id=20993
http://delphi.ktop.com.tw/topic.php?topic_id=26472
引言: 由 minjiu 所提問題 請問如何取得本機分享的資料夾有哪些? 各位我找到答案了... 原來答案在機碼裡... \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\Shares 那如果要寫程式將使用者的分享關掉,要如何寫程式?是否直接將機碼刪除? (由於蠕虫病毒猖狂,但使用者為了方便都會自行開啟,身為管理者除了閉上眼睛,還有何作為?) 努力會更接近成功 |
minjiu
中階會員 發表:27 回覆:119 積分:69 註冊:2002-06-26 發送簡訊給我 |
|
japhenchen
高階會員 發表:51 回覆:444 積分:184 註冊:2003-07-23 發送簡訊給我 |
以下例子僅對nt/2000/xp/2003有效,98/ME不適用,如果非得要用在98/ME上,把DLL的名字改成svrapi.dll,不過我沒在98/ME上測試過,請自行測試啦
//. //. var Form1: TForm1; function GetShareName(remotename: string):TStringList; function NetShareDel(ServerName:pwidechar; NetName: pwidechar; Reserved: DWord): Integer;stdcall;external 'netapi32.dll' ; implementation {$R *.dfm} //. //. //. function GetShareName(remotename: string):TStringList; type TNetResourceArray = ^TNetResource; var NetResource : TNetResource; hr,ecount,BUFSIZE,x: dword; hEnum: THandle; buf : POINTER; ResArray : TNetResourceArray; ResList : TStringList; temp: string; begin result := TStringList.Create; // 回傳用的list BUFSIZE:=8192; GETMEM(BUF,BUFSIZE); FillChar(NetResource, SizeOf(NetResource), #0); // 清空netresource結構 NetResource.lpRemoteName:=pchar('\\' remotename); // 指定想要查的ip或hostname hr:=WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_CONNECTABLE, @NetResource,hEnum); if hr=NO_ERROR then while true do begin // 直到列舉不到東西break為止 ecount := $FFFFFFFF; hr := WNetEnumResource(hEnum,ecount,pointer(buf),bufsize); case hr of ERROR_NO_MORE_ITEMS: break; NO_ERROR : begin ResArray:=TNetResourceArray(buf); for x:= 0 to ecount-1 do begin temp:=ResArray^.lpRemoteName; result.Add(copy(temp,length(remotename) 4,length(temp)-length(remotename))); inc(resArray); end; end; else break; end; end; wnetCloseEnum(hEnum); FreeMem(buf,bufsize); end; procedure TForm1.Button3Click(Sender: TObject); // 列出本機所有的資源共享名稱(包括印表機及IPC$) var temp : TStringList; x : integer; begin temp:=TStringList.Create; temp.AddStrings(GetShareName('127.0.0.1')); radiogroup1.Items.clear; for x:= 1 to temp.Count do RadioGroup1.Items.AddStrings(temp); { 如果像底下二行的寫法,就是刪除所有共享~ 如果把這一段程式寫在ONFORMCREATE里,就是程式執行時自動刪除所有的共享名稱 for x:= 1 to temp.Count do NETSHAREDEL(temp); } end; procedure TForm1.Button2Click(Sender: TObject); // 選擇RADIOGROUP里的共享名稱後,刪除共享 var sharename : widestring ; begin if radiogroup1.ItemIndex>=0 then BEGIN sharename:=radiogroup1.Items[radiogroup1.itemindex]; if NetShareDel(nil,pwidechar(sharename),0)<>0 then showmessage('共享' sharename '停用失敗'); END; end;我不懂,不懂,不懂....所以我才來ktop學工夫 發表人 - japhenchen 於 2003/10/29 14:24:12 |
japhenchen
高階會員 發表:51 回覆:444 積分:184 註冊:2003-07-23 發送簡訊給我 |
|
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
|
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |