创建设备与符号连接是为了驱动程序和应用程序的交互。
流程很简单:
1.用IoCreateDevice()函数创建设备对性。
2.用IoCreateSymbolicLink()函数来绑定设备和符号链接。
3.卸载时用IoDeleteSymbolicLink删除符号连接。
4.然后用IoDeleteDevice来删除设备。
完整代码如下:
#include “ntddk.h”
void Unload(IN PDRIVER_OBJECT DriverObject)
{
//定义两个临时设备对象用于删除设备对象
PDEVICE_OBJECT temp1;
PDEVICE_OBJECT temp2;
UNICODE_STRING symboliclinkname;//定义符号连接名称
RtlInitUnicodeString(&symboliclinkname,L”\\??\\mysymboliclink”);//初始化符号连接名称
IoDeleteSymbolicLink(&symboliclinkname);//删除符号连接
if(DriverObject)
{
temp1=DriverObject->DeviceObject;
while(temp1)
{
temp2=temp1;
temp1=temp1->NextDevice;
IoDeleteDevice(temp2);//删除设备
}
}
}
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)
{
PDEVICE_OBJECT mydevice;//定义设备对象
UNICODE_STRING devicename;//定义设备名称
UNICODE_STRING symboliclinkname;//定义符号连接名称
RtlInitUnicodeString(&devicename,L”\\Device\\mydevice”);//初始化设备名称
RtlInitUnicodeString(&symboliclinkname,L”\\??\\mysymboliclink”);//初始化符号连接名称
IoCreateDevice(
DriverObject,//驱动对象
0,
&devicename,//设备名称
FILE_DEVICE_UNKNOWN,//类型
0,
FALSE,
&mydevice//设备对象
);
IoCreateSymbolicLink(
&symboliclinkname,//符号链接名称
&devicename//设备名称
);
DriverObject->DriverUnload=Unload;
return STATUS_SUCCESS;
}
使用winobj成功看到名称为mysymboliclink的符号连接,和mydevice绑定,如图所示:

[...] 3.创建设备与符号链接 [...]