获取Win32连接会话信息

连接会话中保留信息。打开我的文件,在打开文件列表中也会有信息。获得第一手的会话信息,也就掌握了自己机器被连接的信息,就可以做出相应的处理。当然最重要的是获取这些信息。
获取Win32共享文件夹,很快的,我们想到使用Win32_Share来获取,但要获取连接到本地机的会话状态呢?查阅了不少资料,包括微软官方的MSDN和民间的带有病毒的网页(顺便BS一些现在的SB网站,为了谋利,在网页中内嵌一些恶意脚本代码),最也没查到。到是学到了不少的其它知识。
在我快要绝望放弃的时候,最后,还是很意外地在一个国外博客上找到了。不敢独享,共勉。

            //////////////////////////////////////////////////////////////////////////
            //作者:房客 http://sxlfybb.cnblogs.com
            
//由 MVP Willy Denoyette处获悉
            
//得到的鱼只是其一,其二是知道了有时候仅靠.net提供的托管对象是不能够解决问题的
            using (DirectoryEntry de = new DirectoryEntry("WinNT://csgzb/LanmanServer"))
            
{
                IADsFileServiceOperations fso 
= de.NativeObject as IADsFileServiceOperations;
                
if(fso!= null)
                
{
                    
//////////////////////////////////////////////////////////////////////////
                    //获取连接会话
                    //////////////////////////////////////////////////////////////////////////                    
                    foreach(IADsSession sess in fso.Sessions())
                    
{
                        
string str = "Name :" + sess.Name + "\tUser: " + sess.User + " \tComputer : " + sess.Computer;
                        listBox1.Items.Add(str);
                    }


                    
//////////////////////////////////////////////////////////////////////////
                    //获取打开的文件
                    //////////////////////////////////////////////////////////////////////////     
                    IADsCollection resources = fso.Resources() as IADsCollection;
                    
foreach (IADsResource resource in resources)
                    
{
                    
try
                    
{
                        
string str ="Path: "+resource.Path+"\tUser: "+resource.User+"\tLockCount: "+resource.LockCount+"\tName:"+resource.Name ;
                        listBox1.Items.Add(str);
                    }

                    
catch (System.IO.FileNotFoundException ex){
                        
// Watch Non-Fileshare resources like named pipes, these are not stored in the ADSI cache
                    }


                    }

                }

            }

                


获取了这些信息,其它问题应该就迎刃而解了。搞定!

最后,不得不说一句,还要引用一下ActiveDS,这才是问题的关键!

posted on 2007-07-12 16:28  房客  阅读(710)  评论(0编辑  收藏  举报

导航