首页
社区
课程
招聘
[已解决]关于文件过滤驱动开发的通信问题 FilterConnectCommunicationPort失败
发表于: 2019-2-15 14:36 11807

[已解决]关于文件过滤驱动开发的通信问题 FilterConnectCommunicationPort失败

2019-2-15 14:36
11807
最近学习了minifilter的基本的通信,想尝试着做个demo
驱动层通信端口注册都完成了,使用了FltBuildDefaultSecurityDescriptor ,FltCreateCommunicationPort,等函数创建成功端口,驱动编译通过
我使用inf安装驱动,并开启驱动。
等我编写ring3应用层测试demo时,使用了FilterConnectCommunicationPort初始化连接端口,出现了0x80070002的错误
网上找了些资料大概意思是未找到指定文件之类的意思
然后又通过cmd命令里fltmc查看已经加载的过滤驱动,并没有显示我的驱动,但我通过sc query XX查找能找到我的驱动正在RUN
我在想是不是因为我的驱动没有加载到系统某些位置,导致 FilterConnectCommunicationPort调用该驱动端口时找不到该驱动
尝试了修改inf安装文件,都没有什么效果
有人碰到过这种情况吗
希望大家能帮我分析解决这个问题!

注:R3调用 FilterConnectCommunicationPort方法肯定没写错,我尝试连接了微软官方minifilter例子驱动可以通信上

驱动层注册:
NTSTATUS InitCommunication(VOID)
{
NTSTATUS status;
UNICODE_STRING portName;
PSECURITY_DESCRIPTOR sd;
OBJECT_ATTRIBUTES oa;

try {

RtlInitUnicodeString(&portName, CPROCESS_PROTECT_PORT_NAME);

status = FltBuildDefaultSecurityDescriptor(&sd, FLT_PORT_ALL_ACCESS);

if (!NT_SUCCESS(status))
{
leave;
}

InitializeObjectAttributes(&oa, &portName, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, sd);

status = FltCreateCommunicationPort(gFilterHandle,
&gpServerPort,
&oa,
NULL,
CommunicateConnect,
CommunicateDisconnect,
CommunicateMessage,
1);

FltFreeSecurityDescriptor(sd);

if (!NT_SUCCESS(status))
{
leave;
}

KdPrint(("[CProcessProtect] CommunicationPort Init Success !\n"));

}
finally{

if (!NT_SUCCESS(status))
{
if (NULL != gpServerPort)
{
FltCloseCommunicationPort(gpServerPort);
}

KdPrint(("[CProcessProtect] CommunicationPort Init Fail [ErrorCode]: status:%X\n", status));
}
}

return status;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2019-2-25 11:14 被只想睡个好觉编辑 ,原因: 添加代码
收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
2
我记得是FltCreateCommunicationPort失败了 才会有0x80070002的
2019-2-16 07:23
0
雪    币: 1914
活跃值: (72)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
hzqst 我记得是FltCreateCommunicationPort失败了 才会有0x80070002的
解决了..
犯了个错误,FltCreateCommunicationPort成功后在DriverEntry里错误处理没加判断,直接把端口关闭了...到时R3找不到这个port
2019-2-16 10:23
0
雪    币: 3
活跃值: (466)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
老铁 代码能贴一份吗 也在学习这个
2020-2-20 20:42
0
雪    币: 256
活跃值: (382)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
拉闸太子 老铁 代码能贴一份吗 也在学习这个
我有  你要不要
2020-8-28 12:27
0
雪    币: 256
活跃值: (382)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
拉闸太子 老铁 代码能贴一份吗 也在学习这个

我已经调试过的minifilter 文件隐藏 


2020-8-28 12:31
0
雪    币: 1572
活跃值: (1880)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我也遇到这个问题,FltCreateCommunicationPort 在DriverEntry失败的时候才关闭端口啊,只有部分机器 返回 0x80070002
2022-6-21 11:21
0
游客
登录 | 注册 方可回帖
返回
//