delphi將本機共享資料夾 磁碟設為共享的辦法

2021-08-19 08:09:30 字數 3731 閱讀 4168

uses registry 

var 

myreg:tregistry; 

//以下為登錄檔修改 

myreg:=tregistry.create ; 

myreg.rootkey :=hkey_local_machine;myreg.openkey ('\software\microsoft\windows\currentversion\network\lanman\c',true) 

begin 

myreg.writeinteger('flags',258); //共享為完全共享 

myreg.writeinteger('type',0); 

myreg.writestring('path','c:\');//共享 

myreg.writestring('remark',''); 

myreg.closekey ; 

end; 

見笑了 

*************** 

delphi 關於win9x下共享資料夾問題 

經常看到有人問起如何在程式中增加和刪除共享資料夾,於是就盡可能把相關資訊寫出來,更深入答案還請大蝦共同討論。 

共享/刪除共享可以直接呼叫標準的win32api函式 netshareadd()和netsharedel()。 

建立共享目錄函式:function netshareadd(servername:pchar; level:smallint;buf:pointer; buf_len:smallint):smallint;far;stdcall;external 'svrapi.dll'; 

撤銷共享目錄函式:function netsharedel(servername:pchar;buf:pointer; reserved:smallint):smallint;far;stdcall;external 'svrapi.dll'; 

這裡再提供兩個關於連線共享目錄/撤銷共享目錄函式wnetaddconnection和wnetcancelconnection。 

關於對映網路驅動器的方法如下: 

wnetaddconnection(%共享目錄名%,%口令%,'x:'); //對映x盤 

wnetcancelconnection('x:',true); //撤銷x盤對映 

關於建立/撤消共享的函式返回變數說明如下: 

const netname_len = 13;password_len = 9;shi50f_rdonly = $0001; 

shi50f_full = $0002;shi50f_dependson = $0003; 

shi50f_accessmask = $0003;shi50f_persist = $0100; 

shi50f_system = $0200;stype_disktree = 0; 

stype_printq = 1;stype_device = 2; 

stype_ipc = 3;nerr_success = 0; 

nerr_base = 2100; //常量說明 

nerr_unknowndevdir=(nerr_base+16);nerr_unknownserver=(nerr_base+3); 

nerr_servernotstarted=(nerr_base+14);nerr_redirectedpath=(nerr_base+17); 

nerr_duplicateshare=(nerr_base+18);nerr_buftoosmalll=(nerr_base+23); //netshareadd返回錯誤 

nerr_netnotstarted = (nerr_base+2); 

nerr_servernotstarted = (nerr_base+14); 

nerr_netnamenotfound = (nerr_base+210); 

nerr_sharenotfound = (nerr_base+292); //netsharedel返回錯誤 

share_info_50=record 

netname:array [0..netname_len-1] of char; 

sharetype:shortint; 

flags:smallint; 

remark:pchar; 

path:pchar; 

rw_password:array [0..password_len-1] of char; 

ro_password:array [0..password_len-1] of char; 

end; //以上為型別定義 

再有就是關於window9x共享目錄口令問題(其實屏保口令也是同樣儲存的),口令(原始為十六進製制字元)在登錄檔位置:hkey_local_machine\software\micorsoft\windows\current_version\network\lanman\共享資料夾名\parm1enc和parm2enc兩位置,parm1enc為對應的是完全共享密碼,parm2enc對應的是唯讀共享密碼。字元與數列(前八個數是35,9a,4d,a6,53,a9,d4,6a)作異或運算即得密碼的二進位制ascii碼,轉換後可得到密碼。 

另外提供乙個比較幼稚但可行的方案(在登錄檔做動作): 

var reg : tregistry; name : string; //s是在網路上的芳鄰裡的資料夾名 

begin 

name := 'dirname';//建立乙個唯讀,無密碼共享目錄 

reg := tregistry.create; 

reg.rootkey := hkey_local_machine; 

reg.openkey('software\microsoft\windows\currentversion\network\lanman\'+name,true ); 

reg.writeinteger( 'flags', 401 ) ; //許可權:401代表為訪問,258為完全訪問,259為密碼訪問 

reg.writeinteger( 'parm1enc', 0 ) ; //引數2,放置完全訪問密碼,已加密 

reg.writeinteger( 'parm2enc', 0 ) ; //引數2,放置唯讀訪問密碼,已加密 

reg.writestring( 'path', 'c:\mydir' ) ; //放置要共享的目錄的絕對路徑 

reg.writestring( 'remark', '' ) ; 

reg.writeinteger( 'type', 0 ) ; 

end; 

這樣的缺點就是要重啟系統,可以exitwindow***( ewx_force and ewx_shutdown , 0 )來重啟。 

此外你還可以使用控制項file sharing 95/98,該控制項包含了幾個方便的function:shareresource、deleteshare、getshareinfo、setshareinfo、getneterrorstring等。 

附:關於netuseradd等相關api 

wnetcloseenum 結束網路資源列表 

wnetconnectiondialog 開始網路連線對話方塊 

wnetdisconnectdialog 斷開網路對話方塊 

wnetenumresource 繼續列表網路資源 

wnetgetconnection 獲取網路資源名 

wnetgetlasterror 返回網路函式最近錯誤 

wnetgetuser 獲取當前網路使用者名稱 

wnetopenenum 列出網路資源

共享資料夾

分成4種情況,win win對映 linux linux對映 linux win win linux。這裡只介紹後面兩種情況。虛擬機器可以安裝vmware tools,開啟資料夾共享 利用ubuntu 共享 安裝samba,按照以下步驟 關閉firewall service ufw stop 臨時關...

Delphi 資料夾操作

uses shellapi 建立資料夾 procedure tfrmmain.cxbutton1click sender tobject begin createdirectory pchar extractfilepath paramstr 0 microblue nil end 刪除資料夾,放到...

nanopi 共享資料夾

apt get install samba apt get install smbclient 2 修改samba配置檔案 samba配置檔案的路徑是 etc samba smb.conf a 備份配置檔案 cp etc samba smb.conf etc samba smb.conf.bakb ...