在局域中2000下,一个其他机器上共享目录,如何知道他是本身位置是C或D盘,他的实际路径是什么,有没有什么FUNCTION 或API。??
  比如computer1 下C:\winnt被共享为\\computer1 \test,那么如何得到C:\winnt???如果采用历览comuter1下的目录一一比对,权限如何解决。
  谢谢各位,急等。

解决方案 »

  1.   

    試試這個, 修改下就可:
    program con1;{$APPTYPE CONSOLE}uses
      Windows,
      SysUtils;const
     NERR_Success = 0; // Successtype
     NET_API_STATUS = DWORD;
     PShare_Info_0 = ^TShare_Info_0;
     TShare_Info_0 = record
       shi0_netname: PWideChar;
     end;
     PShare_Info_0_Arr = ^TShare_Info_0_Arr;
     TShare_Info_0_Arr = array[0..MaxInt div SizeOf(TShare_Info_0) - 1] of TShare_Info_0;
     PShare_Info_1 = ^TShare_Info_1;
     TShare_Info_1 = record
       shi1_netname: PWideChar;
       shi1_type: DWORD;
       shi1_re: PWideChar;
     end;
     PShare_Info_1_Arr = ^TShare_Info_1_Arr;
     TShare_Info_1_Arr = array[0..MaxInt div SizeOf(TShare_Info_1) - 1] of TShare_Info_1;
     PShare_Info_2 = ^TShare_Info_2;
     TShare_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;
     PShare_Info_2_Arr = ^TShare_Info_2_Arr;
     TShare_Info_2_Arr = array[0..MaxInt div SizeOf(TShare_Info_2) - 1] of TShare_Info_2;
     PShare_Info_502 = ^TShare_Info_502;
     TShare_Info_502 = record
       shi502_netname: PWideChar;
       shi502_type: DWORD;
       shi502_re: 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;
     PShare_Info_1004 = ^TShare_Info_1004;
     TShare_Info_1004 = record
       shi1004_re: PWideChar;
     end;
     PShare_Info_1006 = ^TShare_Info_1006;
     TShare_Info_1006 = record
       shi1006_max_uses: DWORD;
     end;
     PShare_Info_1501 = ^TShare_Info_1501;
     TShare_Info_1501 = record
       shi1501_reserved: DWORD;
       shi1501_security_descriptor: PSECURITY_DESCRIPTOR;
     end;function NetShareEnum(servername: PWideChar; level: DWORD; var buf: Pointer; prefmaxlen: DWORD; var entriesread: DWORD; var totalentries: DWORD; var resume_handle: DWORD): NET_API_STATUS; stdcall; external 'netapi32.dll';
    function NetShareGetInfo(servername: PWideChar; netname: PWideChar; level: DWORD; var buf: Pointer): NET_API_STATUS; stdcall; external 'netapi32.dll';
    function NetApiBufferFree(P: Pointer): NET_API_STATUS; stdcall;external 'netapi32.dll';var
     Server: PWideChar;
     Buffer, Loop: PShare_Info_0;
     Buf502: PShare_Info_502;
     NetResult: DWORD;
     entriesread: DWORD;
     totalentries: DWORD;
     resume_handle: DWORD;
     I: Integer;
    begin
     if (ParamCount = 0) then begin
       Server := nil;
     end
     else begin
       Server := PWideChar(WideString(ParamStr(1)));
     end;
     entriesread := 0;
     totalentries := 0;
     resume_handle := 0;
     NetResult := NetShareEnum(Server, 0, Pointer(Buffer), DWORD(-1), entriesread, totalentries, resume_handle);
     if (NetResult = NERR_Success) then begin
       Loop := Buffer;
       WriteLn('Entries read: ', entriesread);
       for I := 1 to entriesread do begin
         WriteLn('Name: ', string(Loop.shi0_netname));
         try
           NetResult := NetShareGetInfo(Server, Loop.shi0_netname, 502, Pointer(Buf502));
           if (NetResult = NERR_Success) then begin
             WriteLn('* Net name: ', string(Buf502.shi502_netname));
             WriteLn('* Type: ', Buf502.shi502_type);
             WriteLn('* Re: ', string(Buf502.shi502_re));
             WriteLn('* Permissions: ', Buf502.shi502_permissions);
             WriteLn('* Max uses: ', Buf502.shi502_max_uses);
             WriteLn('* Current uses: ', Buf502.shi502_current_uses);
             WriteLn('* Path: ', string(Buf502.shi502_path));
             WriteLn('* Password: ', string(Buf502.shi502_passwd));
             WriteLn('* Reserved: ', Buf502.shi502_reserved);
           end
           else begin
             WriteLn('* Error: ', SysErrorMessage(NetResult));
           end;
           NetApiBufferFree(Buf502);
         except on E: Exception do WriteLn('* Error: ', E.Message);
         end;
         WriteLn;
         Inc(Loop);
       end;
       NetApiBufferFree(Buffer);
     end;
    end.
      

  2.   

    新建個console的項目, 將代碼拷貝進去, 編繹, 在dos下運行就可了!!>>看不洞
    這個都看不懂, 麻煩了!!!!
      

  3.   

    to:AiiRii
      已做试验,本地共享能够通过,但网路上其他共享资源,仍然是不行的。
    理由是拒绝访问,事实上我网络用户不是管理员但对网络资源有权限的。
      

  4.   

    >>分我是有的,不够可以再加啊。:)
    那再加啊!!!>>本地共享能够通过,但网路上其他共享资源,仍然是不行的。理由是拒绝访问
    可以的, 你只要先登录到对方 電腦就可
      

  5.   

    可以的, 我剛才再試了下, 以下是我在本機讀取我們的server 
    Entries read: 14
    Name: D_driver
    * Net name: D_driver
    * Type: 0
    * Re: 
    * Permissions: 0
    * Max uses: 4294967295
    * Current uses: 1
    * Path: D:* Password: 
    * Reserved: 0Name: EpsonLQ-
    * Net name: EpsonLQ-
    * Type: 1
    * Re: Epson LQ-1050C
    * Permissions: 0
    * Max uses: 4294967295
    * Current uses: 0
    * Path: Epson LQ-1050C,LocalsplOnly
    * Password: 
    * Reserved: 124Name: IPC$
    * Net name: IPC$
    * Type: 2147483651
    * Re: 遠端 IPC
    * Permissions: 0
    * Max uses: 4294967295
    * Current uses: 1
    * Path: 
    * Password: 
    * Reserved: 0
      

  6.   

    你在運行程序前, 可在dos下運行net use //server/ password試下
      

  7.   

    To:AiiRii,问题解决了,分肯定会加给你,你就不用担心了!
       我都用FileCtrl单元selectdirectory去选取网络资源了,我在我相应的测试程序之前,都试过先打开网络资源,还是不起作用。不知什么原因了。对了,我试的是工作组的电脑,因为我这里没有域控制器。是不是这个原因??