在WIN2000與WIN98中創(chuàng)建共享文件夾的方法

字號:

考試大計算機等級站整理收集:
    在去年寫的‘使用SQLSERVER的擴展存儲過程實現(xiàn)遠(yuǎn)程備份與恢復(fù) (http://www.csdn.net/Develop/read_article.ASP?id=21304)’一文中許多人都提到如何在程序中創(chuàng)建共享文件夾的問題,我當(dāng)時因為工作忙,只看到了留言沒有及時去回復(fù),對讀者造成的不便深感抱歉。在此文中,我就把如何在WIN2000與WIN98中創(chuàng)建共享文件夾的代碼一一列出(包括相關(guān)的一系列網(wǎng)絡(luò)函數(shù)等),以慰大家。
    unit PubLib;
    interface
    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    Menus, ComCtrls, ToolWin, Db, ADODB, DBCtrls, StdCtrls,Math,dbgrids,
    Buttons, ExtCtrls,cliPBrd,ReGIStry, variants;
    const
    NTlib = 'NETAPI32.DLL';
    MElib = 'SVRAPI.DLL';
    {共享類型}
    STYPE_DISKTREE = 0 ;
    STYPE_PRINTQ = 1 ;
    STYPE_DEVICE = 2 ;
    STYPE_IPC = 3 ;
    {訪問權(quán)限}
    Access_READ = 0 ;
    ACCESS_WRITE = 1 ;
    ACCESS_CREATE = 2 ;
    ACCESS_EXEC = 3 ;
    ACCESS_DELETE = 4 ;
    ACCESS_ALL = 7 ;
    type
    NET_API_STATUS = DWORD;
    //紀(jì)錄類型聲明,注意參數(shù)類型的正確對應(yīng),別看 Delphi 的幫助,引起誤導(dǎo)
    TSHARE_INFO_502 = record
    shi502_netname: PWideChar;
    shi502_type: DWORD;
    shi502_remark: PWideChar;
    shi502_permissions: DWORD;
    shi502_max_uses: DWORD;
    shi502_current_uses: DWORD;
    shi502_path: PWideChar;
    shi502_passwd: PWideChar;
    shi502_reserved: DWORD;
    shi502_security_descriptor: PSECURITY_DESCRIPTOR;
    end;
    Share_Info50 = packed record
    shi50_netname : array[0..12] of Char; {13}
    shi50_type : Byte;
    shi50_flags : Word;
    shi50_remark : PChar;
    shi50_path : PChar;
    shi50_rw_password : array[0..8] of Char; {9}
    shi50_ro_password : array[0..8] of Char;
    end;
    //******************網(wǎng)絡(luò)函數(shù)********************
    function IsWinNT: Boolean; //判斷是否NT系統(tǒng)
    function GetPDCName: string; //取得主域控制器名稱
    function GetDomainName: AnsiString; //獲取域名
    //建立、刪除共享文件夾
    //for win2000,winnt
    function AppendShareResource(ServerName,FilePath,NetName, Remark : string): Integer;
    function DeleteShareResource(ServerName: string; NetName: string): Integer;
    //for win98
    function AddShareResource (ServerName : PChar; FilePath : PChar;
    NetName : PChar; Remark : PChar ) : Integer;
    function DelShareResource(ServerName: string; NetName: string): Integer;
    var NTNetGetDCName : function(Server, Domain: pWideChar; var DC: pWideChar): NET_API_STATUS; StdCall; NTNetApiBufferFree: function(lpBuffer: Pointer):NET_API_STATUS; StdCall; NTNetShareAdd : function (servername:Widestring; level: DWORD; Buf: PBYTE; var parm_err: PDWORD ): DWORD; stdcall;//建立共享目錄函數(shù) NTNetShareDel : function (ServerName:Widestring; NetName: Widestring; Reserved: DWord): Integer; stdcall; //撤銷共享目錄函數(shù) MENetShareAdd : function (ServerName : PChar; ShareLevel : SmallInt; Buffer : Pointer; Size : Word) : Integer; StdCall; MENetShareDel : function (ServerName : PChar; NetName : PChar; Reserved : Word) : Integer; StdCall;
    implementation
    function IsWinNT: Boolean;
    var
    VersionInfo: TOSVersionInfo;
    begin
    VersionInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
    Result := GetVersionEx(VersionInfo);
    if Result then
    Result := VersionInfo.dwPlatformID = VER_PLATFORM_WIN32_NT;
    end;
    function GetPDCName: string;
    var
    pDomain : PWideChar;
    LibHandle : THandle;
    begin
    Result := '';
    LibHandle := LoadLibrary(NTlib);
    if LibHandle = 0 then
    raise Exception.Create('Unable to map library: ' + NTlib);
    try
    @NTNetGetDCName := GetProcAddress(Libhandle, 'NetGetDCName');
    @NTNetApiBufferFree := GetProcAddress(Libhandle, 'NetApiBufferFree');
    try
    if NTNetGetDCName(nil, nil, pDomain) = 0 then
    Result := WideCharToString(pDomain);
    finally
    NTNetApiBufferFree(pDomain);
    end;
    finally
    FreeLibrary(Libhandle);
    end;
    end;