//第一个驱动文件的完整源码C语言格式.非常的简单.入门必看
//以下为:引用DDK驱动默认头文件
#include <ntddk.h> //ntddk.h 是VC头文件 你可以理解为VB模块
//驱动内部名称和 符号连接名称
#define DEVICE_NAME L "Device\\简单驱动" //Driver Name 符号连接名称
#define LINK_NAME L "DOSDEVICES\\简单驱动" // Link Name 驱动内部名称
VOID XieZaiQuDong ( PDRIVER_OBJECT pDriverObject); // XieZaiQuDong自定义函数声明
//以下为: DriverEntry 驱动载入事件
//即VB加载驱动文件的时候 驱动层自动执行如下的代码
NTSTATUS DriverEntry( PDRIVER_OBJECT pDriverObj, PUNICODE_STRING pRegistryString)
{
UNICOD_STRING ustrLinkName; // 符号连接名称
UNICOD_STRING ustrDevName; // 驱动内部名称
PDEEVICE_BOJECT pDevoj; // 设备对象
//RtlInitUnicodeString用于给ustrDevName赋值
RetIntUnicodeString(&ustrLinkName,DEVICE_NAME); // DEVICE_NAME 为值 上面已经定义了
//FILE_DEVICE_UNKNOWN 是未知设备类型
//IoCreateDevice函数用于创建常规的设备对象.
staus = IoCreateDevice(pDriverObj,0,&ustrLinkName,FILE_DEVICE_UNKNOW,0,FALSE,&pDriverObj);
RetIntUnicodeString(&ustrLinkName,LINK_NAME);
//RtlInitUnicodeString用于给ustrLinkName赋值
status = IoCreateSymbolicLink(&ustrLinkName, &ustrDevName);
//IoCreateSymbolicLink创建了一个符号连接,以便于和VB用户层通信交流
pDriverObj->DriverUnload=XieZaiQuDong;// 利用驱动对象pDriverObj 指定卸载函数为 XieZaiQuDong
DbgPrint("VB梦工厂-VB召唤驱动Ring0内核编程");//驱动层输出文字
DbgPrint("第一个简单驱动测试成功");//驱动层输出文字
return STATUS_SUCCESS; //DriverEntry函数返回为成功
}
VOID XieZaiQuDong( PDRIVER_OBJECT pDriverObject) //自定义驱动卸载-停止驱动服务的函数 XieZaiQuDong
{
// 删除符号连接名称
UNICODE_STRING strLink;
RtlInitUnicodeString(&strLink, LINK_NAME);//赋值
IoDeleteSymbolicLink(&strLink); //IoDeleteSymbolicLink 清空释放字符串 变量
//删除驱动设备对象
IoDeleteDevice(pDevObj->DeviceObject);
DbgPrint("VB梦工厂提示:卸载驱动成功,停止驱动服务 ");//驱动层输出文字 ,告诉我们卸载驱动成功
}
//为简单驱动.sys添加驱动内部名称和符号连接名,是 VB用户层和驱动层通信的基础之一,还有个好处是防止 别人修改你的驱动文件名称.