应用与内核通信(内核方面1)--windows内核安全与驱动开发

如果一个内核要与应用层通信,首先应该先生成一个设备对象(Device Object).在内核中,
设备对象可以暴露出来给应用层,应用层可以像操作文件一样操作它。通常来说,用于和
应用层通信的设备往往用来“控制”这个内核驱动。往往称之为“控制设备对象”。

生成设备对象可以使用IoCreateDevice

在这里插入图片描述
第一个参数可以直接从DriverEntry中获得。最后一个参数就是输出结果,如果函数执行成功,
则最后一个参数就是指向设备对象的指针。另外,这个函数生成的设备对象具有默认安全属性
,必须用管理员权限才能打开。

设备对象是可以没有名字的,但是控制设备必须有名字,这样他才会暴露出来供其他程序打开,
并与之通信。这个名字可以在调用IoCreateDevice时候指定,但是应用层无法直接通过名字
来打开对象,需要指定一个暴露给应用层的符号链接。符号链接就是一个字符串到另一个字符串
的简单结构。
在这里插入图片描述
NTSTATUE DriverEntry(PDRIVER_OBJECT driver,PUNICODE_STRING RegistryPath)
{
UNICODE_STRING cdo_name=RTL_CONSTANT_STRING(L"\Device\ssssssss");
UNICODE_STRING cdo_syb=RTL_CONSTANT_STRING(L"\??\HELLO");
//生成符号链接
IoDeleteSymolicLink(&cdo_syb); //防止重名
status=IoCreateSymbolicLink(&cdo_syb,&cdo_name);
if(!NT_SUCCESS(status))
{
//如果失败,要删除生成的设备对象
IoDeleteDevice(g_cdo);
return status;
}
.
.
.
}

既然生成了控制设备和符号链接,那么在不需要用的时候就需要把他们删除。
现在DriverEntry中设置卸载函数。
driver->DriverUnload= Unload;
在Unload中调用IoDeleteSymbolicLink(&cdo_syb)和IoDeleteDevice(g_cdo)
来分别卸载符号链接和设备对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值