最近学习了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
被只想睡个好觉编辑
,原因: 添加代码