NetSessionEnum这个API函数有人研究过没?

解决方案 »

  1.   

    NetSessionEnum(server,pszClient,pszUser,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);  //pszClient指定客户的地址;  //pszUser指定用户名;  //dwLevel的等级是10级;  //pBuf返回SESSION_INFO_10数据结构的指针;
      

  2.   

    如果只是要知道是谁在访问共享文件,可用WMI中的Win32_ConnectionShare来查询。下面例子要添加到System.Management的引用,运行时要有管理员权限。private void button1_Click(object sender, EventArgs e)
    {
        string query = "select * from Win32_ConnectionShare";
        ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);    StringBuilder sb = new StringBuilder();
        foreach (ManagementObject mo in searcher.Get())
        {
            string antecedent = mo["Antecedent"] as string;
            string dependent = mo["Dependent"] as string;
            sb.AppendFormat("{0} <= {1}\n", antecedent, dependent); 
        }    MessageBox.Show(sb.ToString());
    }
      

  3.   

    gomoku大侠:
    这样没办法知道什么时间访问的啊。
    能举个NetSessionEnum的例子吗?
    谢谢了
      

  4.   

    这个我就不清楚了。以下是NetSessionEnum的C#表示,由于netapi32的函数都是Unicode的,所以string都封送为LPWSTR。
    将返回的bufptr拷贝到相应的SESSION_INFO_XX结构中:
    SESSION_INFO_XX si = Marshal.PtrToStructure(bufptr, typeof(SESSION_INFO_XX));记得要用另外导出NetApiBufferFree,并用它来释放bufptr。
    NetApiBufferFree(bufptr);[DllImport("netapi32.dll", SetLastError = true)]
    private static extern int NetSessionEnum(
        [In, MarshalAs(UnmanagedType.LPWStr)] string ServerName,
        [In, MarshalAs(UnmanagedType.LPWStr)] string UncClientName,
        [In, MarshalAs(UnmanagedType.LPWStr)] string UserName,
        int Level,
        out IntPtr bufptr,
        int prefmaxlen,
        ref int entriesread,
        ref int totalentries,
        ref int resume_handle);具体请参考NetSessionEnum的MSDN文档,以及文档上的例子。