驱动之家爱(驱动之家可以删除吗)这都可以
一、新建一个C文件进行设备添加删除操作1、创建设备操作,通过状态判断是否创建成功,创建的设备名称只能在内核中使用,如果要在外部应用使用,需要通过
一、新建一个C文件进行设备添加删除操作
1、创建设备操作,通过状态判断是否创建成功,创建的设备名称只能在内核中使用,如果要在外部应用使用,需要通过符号链接使用,所以需要创建符号链接NTSTATUS 创建设备(PDRIVER_OBJECT 驱动对象) { NTSTATUS 状态码; UNICODE_STRING 驱动名称aiyou; PDEVICE_OBJECT 设备对象bucuo; RtlInitUnicodeString(&驱动名称aiyou, L
"\\DEVICE\\aiyou");//初始化设备名称//通过驱动对象创建驱动设备,返回最后的参数设备指针 状态码 = IoCreateDevice(驱动对象, sizeof(驱动对象->DriverExtension), &驱动名称aiyou, FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN,
FALSE, &设备对象bucuo); if (状态码 == STATUS_SUCCESS) { KdPrint(("nxyn:驱动设备对象创建成功!!! \n")); //创建符号链接
UNICODE_STRING 符号链接名字; //在应用层使用的名字 RtlInitUnicodeString(&符号链接名字, L"\\??\\bucuo"); //初始化符号链接名字
状态码 = IoCreateSymbolicLink(&符号链接名字, &驱动名称aiyou); if (状态码 == STATUS_SUCCESS) { KdPrint((
"nxyn:创建符号链接 %wZ 成功!!!", &符号链接名字)); } else { KdPrint(("nxyn:创建符号链接 %wZ 失败 status=%X!!!"
, &符号链接名字, 状态码)); } } else { KdPrint(("nxyn:驱动设备对象创建失败,删除设备!!!\n")); IoDeleteDevice(设备对象bucuo); }
return 状态码; }2、删除设备操作,先删除符号链接,再删除设备,最后再删除驱动void 删除设备(PDRIVER_OBJECT 驱动对象) { KdPrint(("nxyn:正在删除设备"));
if (驱动对象->DeviceObject)//是否创建的驱动设备 { UNICODE_STRING 符号链接名字; //符号链接名字 RtlInitUnicodeString(&符号链接名字, L
"\\??\\bucuo"); KdPrint(("nxyn:删除符号链接=%wZ", &符号链接名字)); IoDeleteSymbolicLink(&符号链接名字); KdPrint
(("nxyn:删除驱动设备")); IoDeleteDevice(驱动对象->DeviceObject);//删除设备对象 } KdPrint(("nxyn:已全部删除")); }
二、在上节课的C代码中,声明一下创建设备和删除设备函数NTSTATUS 创建设备(PDRIVER_OBJECT 驱动对象); void 删除设备(PDRIVER_OBJECT 驱动对象);三、在卸载回调函数中调用删除设备,在主函数中调用创建设备
void 卸载驱动回调函数(PDRIVER_OBJECT 驱动对象) { 删除设备(驱动对象); KdPrint(("nxyn:我被卸载了,驱动编号=%p", 驱动对象)); } NTSTATUS
DriverEntry(_In_ PDRIVER_OBJECT 驱动对象, _In_ PUNICODE_STRING psg){ 创建设备(驱动对象); 驱动对象->DriverUnload = 卸载驱动回调函数; KdPrint((
"nxyn:第一个驱动程序,驱动编号:%p", 驱动对象)); return0; }四、运行效果
免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186