就喜欢楼主这样提问的,不过我这里没有98也没delphi
干瞪你的代码也瞪不出花来,久违UP一个

解决方案 »

  1.   

    k^.netname := 'C:'这个应该是C吧
      

  2.   

    帮不上忙
      NetShareAdd(PChar(''), 50, buf, 0);在 Win32 的帮助中,没有 50 这个参数,只有 2 或 502。
    另外,Win32 的帮助中没有 SHARE_INFO_50 这个结构,应该是 SHARE_INFO_502 或 SHARE_INFO_2typedef struct _SHARE_INFO_502 {
        LPTSTR    shi502_netname;
        DWORD     shi502_type;
        LPTSTR    shi502_re;
        DWORD     shi502_permissions;
        DWORD     shi502_max_uses;
        DWORD     shi502_current_uses;
        LPTSTR    shi502_path;
        LPTSTR    shi502_passwd;
        DWORD     shi502_reserved;
        PSECURITY_DESCRIPTOR  shi502_security_descriptor;
    } SHARE_INFO_502, *PSHARE_INFO_502, *LPSHARE_INFO_502;
      
    typedef struct _SHARE_INFO_2 {
        LPTSTR    shi2_netname;
        DWORD     shi2_type;
        LPTSTR    shi2_re;
        DWORD     shi2_permissions;
        DWORD     shi2_max_uses;
        DWORD     shi2_current_uses;
        LPTSTR    shi2_path;
        LPTSTR    shi2_passwd;
    } SHARE_INFO_2, *PSHARE_INFO_2, *LPSHARE_INFO_2;
      

  3.   

    to:hiflower(花) 
    你说的是在nt下的情况。靠,高手都哪去了。这个问题不是很难吧。
      

  4.   

    返回的错误代码是,NERR_BufTooSmalll
      

  5.   

    我靠,听楼主这么一说,我的 Win32 帮助竟然是 NT 专用的?Borland 也太过份了吧,我可是在 Win98 下装的 Delphi
      

  6.   

    to: tongki_8(矛盾与迟钝) 
    老大,先看下帖子行吗,修改注册表的方法我不要。。
      

  7.   

    老大,你没有设ShareType
    把sharetype:=0应该就可以了
      

  8.   

    对不起,说错了,如果共享的是整个分区应该sharetype:=1
      

  9.   

    To:wlw88(飞扬)
    老兄,在发帖子之前你先试一下行不行,你给的方法根本就不好使! To:diruser(年年有大运!) 
    请问:你是如何获得那个返回的错误代码的,请详细一点。谢谢!
    我做了一些修改:
        sharetype: Byte;  //shortint;
        flags: Word;  //smallint;
    可是还是不行,你试试看返回什么错误代码?谢谢!
      

  10.   

    Procedure NetShareDriveC(SetShared: Boolean);const
    LM20_NNLEN = 12;
    SHPWLEN = 8;SHI50F_RDONLY = 1;
    SHI50F_FULL = 2;
    SHI50F_DEPENDSON = (SHI50F_RDONLY or SHI50F_FULL);
    SHI50F_ACCESSMASK = (SHI50F_RDONLY or SHI50F_FULL);
    SHI50F_PERSIST = 256;
    SHI50F_SYSTEM = 512;STYPE_DISKTREE = 0;
    ACCESS_NONE = 0;
    ACCESS_READ = $01;
    ACCESS_WRITE = $02;
    ACCESS_CREATE = $04;
    ACCESS_EXEC = $08;
    ACCESS_DELETE = $10;
    ACCESS_ATRIB = $20;
    ACCESS_PERM = $40;
    ACCESS_GROUP = $8000;
    ACCESS_ALL = (ACCESS_READ or ACCESS_WRITE or ACCESS_CREATE or
    ACCESS_EXEC or ACCESS_DELETE or ACCESS_ATRIB or ACCESS_PERM);type
    share_info_2= record
    shi2_netname : PWideChar;
    shi2_type : DWORD;
    shi2_re : PWideChar;
    shi2_permissions : DWORD;
    shi2_max_uses : DWORD;
    shi2_current_uses : DWORD;
    shi2_path : PWideChar;
    shi2_passwd : PWideChar;
    end;share_info_50 = packed record
    shi50_netname : array [0..LM20_NNLEN] of Char;
    shi50_type : Byte;
    shi50_flags : Short;
    shi50_re : PChar;
    shi50_path : PChar;
    shi50_rw_password: array [0..SHPWLEN] of Char;
    shi50_ro_password: array [0..SHPWLEN] of Char;
    end;var
    hDll : THandle;NetShareAddWin9x : function(pszServer : PChar;
    sLevel : Short;
    pbBuffer : Pointer;
    cbBuffer : Short):DWORD;stdcall;NetShareDelWin9x : Function(pszServer : PChar;
    pszNetName : PChar;
    usReserved : Short):DWORD;stdcall;si50 : share_info_50;
    si2 : share_info_2;
    tamano : Short;
    res, err : DWORD;EsNT: Boolean;Begin
    If SetShared then begin
    hDll := LoadLibrary('SvrApi.dll');
    if hDll > 32 then
    begin
    // NetShareAdd
    NetShareAddWin9x := GetProcAddress(hDll, 'NetShareAdd');
    tamano := sizeof(si50);
    FillChar(si50, tamano, 0);
    StrCopy(si50.shi50_netname, 'SH_ACCESS');
    si50.shi50_type := STYPE_DISKTREE;
    si50.shi50_flags := SHI50F_Full; //SHI50F_RDONLY;
    si50.shi50_path := 'C:\';
    StrCopy( si50.shi50_rw_password, 'siemensw');
    StrCopy( si50.shi50_ro_password, 'siemens');
    res := NetShareAddWin9x(nil, 50, @si50, tamano);
    Showmessage('NetShare added to C:\Test .');
    FreeLibrary(hDll);
    end;
    end
    else begin
    hDll := LoadLibrary('SvrApi.dll');
    if hDll > 32 then
    begin
    // NetShareDelNetShareDelWin9x := GetProcAddress(hDll, 'NetShareDel');
    res := NetShareDelWin9x(nil, PChar('SH_ACCESS'), 0);
    Showmessage('NetShare deleted. Check C:\test .');
    FreeLibrary(hDll);
    end;
    end;
    End;