添加设备及删除设备例程
#include<ntddk.h>
//卸载函数
VOID UnLoad(PDRIVER_OBJECT pDriverObj) {
PDEVICE_OBJECT pDevObj;
UNICODE_STRING symLinkName;
//取得设备对象
pDevObj = pDriverObj->DeviceObject;
IoDeleteDevice(pDevObj);
RtlInitUnicodeString(&symLinkName, L"\\??\\MyLinkName");
IoDeleteSymbolicLink(&symLinkName);
DbgPrint("Unload!");
}
//创建设备
NTSTATUS CreateDevice(PDRIVER_OBJECT pDriverObj)
{
NTSTATUS status;
PDEVICE_OBJECT pDeviceObj;
UNICODE_STRING devName;
UNICODE_STRING symLinkName;
//初始化
RtlInitUnicodeString(&devName, L"\\Device\\MyDevice");
//创建设备
status = IoCreateDevice(
pDriverObj,
0,
&devName,
FILE_DEVICE_UNKNOWN,
0,
TRUE,
&pDeviceObj
);
if (!NT_SUCCESS(status))
{
DbgPrint("Create Device Failed!");
return status;
}
pDeviceObj->Flags |= DO_BUFFERED_IO;//设置为缓冲区读写方式
//创建符号链接
RtlInitUnicodeString(&symLinkName, L"\\??\\MyLinkName");
status = IoCreateSymbolicLink(&symLinkName, &devName);
//删除设备
if (!NT_SUCCESS(status)) {
IoDeleteDevice(pDeviceObj);
return status;
}
DbgPrint("Create Device Success!");
return STATUS_SUCCESS;
}
//程序入口
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObj,PUNICODE_STRING reg_path)
{
DbgPrint("Welcome!");
CreateDevice(pDriverObj);
pDriverObj->DriverUnload = UnLoad;
return STATUS_SUCCESS;
}