创建设备与符号连接是为了驱动程序和应用程序的交互。

流程很简单:

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绑定,如图所示:

devicelink

, , , ,
Trackback

本文到目前为止有 1 个回复

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

添加回复