获取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,这才是问题的关键!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
· 程序员常用高效实用工具推荐,办公效率提升利器!
2005-07-12 RealPlayer 中的方法
2005-07-12 正则表达式的分隔符
2005-07-12 关于处理GET方式提交的含有特殊字符的参数(转载)