获取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
}
}
}
}
//作者:房客 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,这才是问题的关键!