驱动开发之三:简单的什么也不做的驱动程序筐架
来源:互联网 发布:中文字体设计软件 编辑:程序博客网 时间:2024/04/30 12:20
//说明,编译是需要相对路径中有inc目录,而且有ntifs.inc;且扩展了函数。
//#include "ntifs.h"
//#include "stdio.h"
//常量定义;
#define DEVICE_TYPE_SYSMON 0x8266 //DDK指出0-7fffh是被系统保留了
#define NT_DEVICE_NAME L"//Device//MINSYS" //内核设备名
#define DOS_DEVICE_NAME L"//DosDevices//MINSYS" //符号连接设备名
//全局变量定义;
PDRIVER_OBJECT gOwenDriverObject; //本驱动程序对象
PDEVICE_OBJECT gCtrlDeviceObject; //用控制设备对象域
#pragma code_seg("PAGE")
VOID//UnLoad例程;
Unload(PDRIVER_OBJECT DriverObject)
{
UNICODE_STRING Win32DeviceName;
RtlInitUnicodeString(&Win32DeviceName,DOS_DEVICE_NAME);
IoDeleteSymbolicLink(&Win32DeviceName);
IoDeleteDevice(gCtrlDeviceObject);
#if (DBG)
{
DbgPrint (("-------------------Unload OK/n"));
}
#endif
return;
}
NTSTATUS
DeviceIrpCreate( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp )
{
IoCompleteRequest( Irp, IO_NO_INCREMENT );
return STATUS_SUCCESS;
}
NTSTATUS
DeviceIrpClose( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp )
{
IoCompleteRequest( Irp, IO_NO_INCREMENT );
return STATUS_SUCCESS;
}
NTSTATUS
DeviceIrpControl( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp )
{
IoCompleteRequest( Irp, IO_NO_INCREMENT );
return STATUS_SUCCESS;
}
#pragma code_seg("INIT")
NTSTATUS//驱动程序入口;
DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)
{
NTSTATUS Status;
UNICODE_STRING NtDeviceName;
UNICODE_STRING Win32DeviceName;
//保存自己的驱动程序对象,备用
gOwenDriverObject=DriverObject;
//初始化Unicode字符串, 创建设备对象;
RtlInitUnicodeString(&NtDeviceName,NT_DEVICE_NAME);
Status=IoCreateDevice( DriverObject,0,&NtDeviceName,
DEVICE_TYPE_SYSMON,0,FALSE,&gCtrlDeviceObject);
if (!NT_SUCCESS(Status)) return Status;
//初始化Unicode字符串, 创建Win32符号连接,以便Win32程序能够访问;
RtlInitUnicodeString(&Win32DeviceName,DOS_DEVICE_NAME);
Status=IoCreateSymbolicLink(&Win32DeviceName,&NtDeviceName);
if (!NT_SUCCESS(Status))
{
IoDeleteDevice( gCtrlDeviceObject );
return Status;
}
//填写驱动程序Dispatch例程
DriverObject->MajorFunction[IRP_MJ_CREATE] =DeviceIrpCreate;
DriverObject->MajorFunction[IRP_MJ_CLOSE] =DeviceIrpClose;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] =DeviceIrpControl;
//填写处理Unload例程
DriverObject->DriverUnload =Unload;
#if (DBG)
{
DbgPrint("DriverObject=%x RegistryPath=%x/n",DriverObject,RegistryPath);
}
#endif
return Status;
}
//#include "ntifs.h"
//#include "stdio.h"
//常量定义;
#define DEVICE_TYPE_SYSMON 0x8266 //DDK指出0-7fffh是被系统保留了
#define NT_DEVICE_NAME L"//Device//MINSYS" //内核设备名
#define DOS_DEVICE_NAME L"//DosDevices//MINSYS" //符号连接设备名
//全局变量定义;
PDRIVER_OBJECT gOwenDriverObject; //本驱动程序对象
PDEVICE_OBJECT gCtrlDeviceObject; //用控制设备对象域
#pragma code_seg("PAGE")
VOID//UnLoad例程;
Unload(PDRIVER_OBJECT DriverObject)
{
UNICODE_STRING Win32DeviceName;
RtlInitUnicodeString(&Win32DeviceName,DOS_DEVICE_NAME);
IoDeleteSymbolicLink(&Win32DeviceName);
IoDeleteDevice(gCtrlDeviceObject);
#if (DBG)
{
DbgPrint (("-------------------Unload OK/n"));
}
#endif
return;
}
NTSTATUS
DeviceIrpCreate( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp )
{
IoCompleteRequest( Irp, IO_NO_INCREMENT );
return STATUS_SUCCESS;
}
NTSTATUS
DeviceIrpClose( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp )
{
IoCompleteRequest( Irp, IO_NO_INCREMENT );
return STATUS_SUCCESS;
}
NTSTATUS
DeviceIrpControl( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp )
{
IoCompleteRequest( Irp, IO_NO_INCREMENT );
return STATUS_SUCCESS;
}
#pragma code_seg("INIT")
NTSTATUS//驱动程序入口;
DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)
{
NTSTATUS Status;
UNICODE_STRING NtDeviceName;
UNICODE_STRING Win32DeviceName;
//保存自己的驱动程序对象,备用
gOwenDriverObject=DriverObject;
//初始化Unicode字符串, 创建设备对象;
RtlInitUnicodeString(&NtDeviceName,NT_DEVICE_NAME);
Status=IoCreateDevice( DriverObject,0,&NtDeviceName,
DEVICE_TYPE_SYSMON,0,FALSE,&gCtrlDeviceObject);
if (!NT_SUCCESS(Status)) return Status;
//初始化Unicode字符串, 创建Win32符号连接,以便Win32程序能够访问;
RtlInitUnicodeString(&Win32DeviceName,DOS_DEVICE_NAME);
Status=IoCreateSymbolicLink(&Win32DeviceName,&NtDeviceName);
if (!NT_SUCCESS(Status))
{
IoDeleteDevice( gCtrlDeviceObject );
return Status;
}
//填写驱动程序Dispatch例程
DriverObject->MajorFunction[IRP_MJ_CREATE] =DeviceIrpCreate;
DriverObject->MajorFunction[IRP_MJ_CLOSE] =DeviceIrpClose;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] =DeviceIrpControl;
//填写处理Unload例程
DriverObject->DriverUnload =Unload;
#if (DBG)
{
DbgPrint("DriverObject=%x RegistryPath=%x/n",DriverObject,RegistryPath);
}
#endif
return Status;
}
- 驱动开发之三:简单的什么也不做的驱动程序筐架
- 驱动开发之三:简单的什么也不做的驱动程序筐架
- 驱动开发之六 --- 一个简单的显示驱动之三 【译文】
- 从按按钮什么也不做想到的
- Linux驱动程序开发之三----按键驱动(Tiny6410)
- Linux设备驱动开发基础---字符设备驱动程序开发之基于中断的按键驱动
- 驱动程序开发--AT91SAM9260的GPIO驱动笔记
- WinCE驱动开发---驱动程序的模型
- 驱动程序开发--AT91SAM9260的GPIO驱动笔记
- 什么也不会的我。。
- DM6467的OV5642 Linux驱动程序开发(三)——驱动测试
- Windows驱动开发WDM (2)- 一个简单的WDM驱动程序
- VxWorks设备驱动程序开发指南(三)---驱动程序的分类
- 今天晚上的雨好大阿 (想了半天也不知道拿什么做主题。。。。呵呵。。。这雨下的)
- Hasen的linux设备驱动开发学习之旅--增加了并发控制的设备驱动程序
- Linux设备驱动程序之三 ---- LED驱动程序的实现
- linux驱动程序开发的简单休眠
- 彻底愤怒了~我的域名解析老出错~也不知道服务商在做什么!
- Web页中级联下拉选择框问题的解决方法
- 驱动开发之二:尝试挂接file system
- c/c++/c#
- JS-URL类
- 一个对自己来说有记念意义的事务
- 驱动开发之三:简单的什么也不做的驱动程序筐架
- C/C++头文件一览
- 吵架公约
- hibernate uuid.hex主键生成+spring带来的困惑
- C#中直接调用VB.NET的函数,兼论半角与全角、简繁体中文互相转化
- 按惯例先庆贺一下blog正式开通!
- 第一天: 什么是javascript
- RPC:远程过程调用协议
- 在win32 api程序中:使用C++风格的字符串