我用NetShareGetInfo来获得指定的文件加的目录共享的相应的数据,可是
NetShareGetInfo(nil,PWideChar(Sharpaths),2,@si)这样子取得的数据都位空的也就是说
si.shi2_re
si.shi2_netname
这两个值都是空的,我像问问如何解决,或者能不能告诉我如何使用!

解决方案 »

  1.   

    你把你的SHARE_INFO_2结构贴出来,我帮你看看!!!
      

  2.   

    要不看看我的例子:
    Var
       P : Pointer;
       Info : PSHARE_INFO_2;
       dwResult : DWORD;
    Begin
         NetShareGetInfo( Nil, PWdieChar( SharePath ), 2, P );
         If dwResult <> NERR_Success Then Exit;
         Info := PSHARE_INFO_2( P );
         ...
         NetApiBufferFree( P );
    End;
      

  3.   

    function Tform1.GetShareAttr(Sharepath:string):string;
    type
    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;
    var
      Shareattrstr:widestring;
      re,netname:string;
      Sharpaths:widestring;
      shareAttrresult,shareAttrtemp:string;
      i:longint;
      si: TShare_INFO_2;
      NetShareGetInfo:TNetShareGetInfo;
      Fpointer:TfarProc;
    begin
      Fpointer:=GetProcAddress(hinstDLL,'NetShareGetInfo');
      if Fpointer=nil then
        raise exception.Create ('GetNetSharInfo not found!');
      NetShareGetInfo:=TNetShareGetInfo(Fpointer);
      Sharpaths:=Sharepath;
      NetShareGetInfo(nil',pwidechar(Sharpaths)',2,@si);
      re:=si.shi2_re;
      netname:=si.shi2_netname;
      
      showmessage(netname+','+re+','+inttostr(si.shi2_current_uses));
      GetShareAttr:=netname+','+re+','+inttostr(si.shi2_current_uses);
    end;
    这是我的程序,请帮我看看,为什么si.shi2_re的值,还有其它的总是空的,还有一个问题就是用sharenetadd来设目录位共享的时候,把shi2_permissions 设置为read_only的时候系统说read_only没有定义,他不是一个数字型的参数码,怎么回事,我看了一些c++里面用的方法就可以!百思不得其节,请各位高手赐教!
      

  4.   

    up 
    help me please
      

  5.   

    通过短信给我一个E-Mail,我给你一个例子!!!
      

  6.   

    #include <stdio.h>
    #include <windows.h>
    #include <lm.h>
    #pragma hdrstopint main( void );int main( void )
    {
    //********************************* change these:
    wchar_t *pServer = L"\\\\BAR"; // server to run on
    wchar_t *pShare  = L"CD"; // sharename to query
    //********************************* NET_API_STATUS rc; // result code
    SHARE_INFO_2 *pSI;
    const char *sharetype;
    byte *pBuf; pBuf = NULL; // note -- LPTSTR cast needed because of bogus header files
    rc = NetShareGetInfo( (LPTSTR) pServer, (LPTSTR) pShare, 2, &pBuf ); if ( ( rc == NERR_Success || rc == ERROR_MORE_DATA ) && pBuf != NULL )
    {
    pSI = (SHARE_INFO_2 *) pBuf;
    switch ( pSI->shi2_type )
    {
    case STYPE_DISKTREE:
    sharetype = "disk";
    break;
    case STYPE_PRINTQ:
    sharetype = "print queue";
    break;
    case STYPE_DEVICE:
    sharetype = "comms queue";
    break;
    case STYPE_IPC:
    sharetype = "IPC";
    break;
    default:
    sharetype = "unknown";
    break;
    }
    printf( "Netname: %S\n", pSI->shi2_netname );
    printf( "Type:    %s\n", sharetype );
    printf( "Re:  %S\n", pSI->shi2_re );
    if ( pSI->shi2_max_uses == (DWORD) (-1L) )
    printf( "Max use: unlimited\n" );
    else
    printf( "Max use: %lu\n", pSI->shi2_max_uses );
    printf( "Cur use: %lu\n", pSI->shi2_current_uses );
    printf( "Path:    %S\n", pSI->shi2_path );
    } if ( pBuf != NULL )
    NetApiBufferFree( pBuf ); if ( rc != NERR_Success )
    printf( "Oops! Error %lu encountered!\n", rc ); return 0;
    }
      

  7.   

    那么我像问问我的程序有什么错误呢!在运行的后也没有报什么错误,可是最后却没有任何的返回值!为什么呢!〉
    sharepath是要获取共享信息的目录名字也就是netsharename
    剩下的我不知道怎么错了!?
    function Tform1.GetShareAttr(Sharepath:string):string;
    type
    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;
    var
      Shareattrstr:widestring;
      re,netname:string;
      Sharpaths:widestring;
      shareAttrresult,shareAttrtemp:string;
      i:longint;
      si: TShare_INFO_2;
      NetShareGetInfo:TNetShareGetInfo;
      Fpointer:TfarProc;
    begin
      Fpointer:=GetProcAddress(hinstDLL,'NetShareGetInfo');
      if Fpointer=nil then
        raise exception.Create ('GetNetSharInfo not found!');
      NetShareGetInfo:=TNetShareGetInfo(Fpointer);
      Sharpaths:=Sharepath;
      NetShareGetInfo(nil',pwidechar(Sharpaths)',2,@si);
      re:=si.shi2_re;
      netname:=si.shi2_netname;
      
      showmessage(netname+','+re+','+inttostr(si.shi2_current_uses));
      GetShareAttr:=netname+','+re+','+inttostr(si.shi2_current_uses);
    end;
      

  8.   

    我得到的netsharename为?
    re为' '
    人数为1
    可是这些都不是我设置的效果呀!
      

  9.   

    我知道你的程序的错误了!!!
    TShare_INFO_2结构中存储的内容的长度是不定长的,你不能通过结构的方式声明,取地址进行访问!!!
    你只能够通过指针进行访问,可以参考我的程序,注意使用完毕后,内存指针一定要使用NetApiBufferFree进行释放!!!
    另外从你提供的程序上看,你的程序中的漏洞比较多,很多地方都没有进行错误保护,很容易出错的!!!
      

  10.   

    还想问一下,是不是要用chdir()来设定一下目录呢!?
      

  11.   

    help me帮帮我,我真的很急呀