小弟初学驱动遇到问题
表于 前天 23:14 |只看该作者 |倒序浏览 分享到: 新浪微博 QQ空间 开心网 人人网
#include<ntddk.h>
#include <windef.h>
NTSTATUS CreateMyDevice (IN PDRIVER_OBJECT pDriverObject);//函数前置说明
VOID jiang(PDRIVER_OBJECT A);//函数前置说明
NTSTATUS add(IN PDEVICE_OBJECT A,IN PIRP pIrp);//函数前置说明
NTSTATUS DriverEntry(PDRIVER_OBJECT A,PUNICODE_STRING B)
{
A->MajorFunction[IRP_MJ_CREATE]=add;//注册派遣函数
A->MajorFunction[IRP_MJ_CLOSE]=add;
A->MajorFunction[IRP_MJ_WRITE]=add;
A->MajorFunction[IRP_MJ_READ]=add;
A->DriverUnload=jiang;//注册卸载例程
return(1);
}
VOID jiang(PDRIVER_OBJECT A)//卸载例程
{
PDEVICE_OBJECT pdx;
UNICODE_STRING tu;
RtlInitUnicodeString(&tu,L"\\??\\yjx883");
pdx=A->DeviceObject;
IoDeleteDevice(pdx);
IoDeleteSymbolicLink(&tu);
DbgPrint("卸载成功");
}
NTSTATUS CreateMyDevice (IN PDRIVER_OBJECT pDriverObject)//创建设备例程
{
NTSTATUS status;
PDEVICE_OBJECT pDevObj;
UNICODE_STRING devName;
UNICODE_STRING tu;
RtlInitUnicodeString(&tu,L"\\??\\jjj883");
RtlInitUnicodeString(&devName,L"\\Device\\jjj884");
status=IoCreateDevice(pDriverObject,0,&devName,FILE_DEVICE_UNKNOWN,0,TRUE,&pDevObj);
pDevObj->Flags |= DO_BUFFERED_IO;//以缓冲区方式操作
status = IoCreateSymbolicLink( &tu,&devName );//创建符号链接
DbgPrint("设备创建成功");
return(1);
}
NTSTATUS add(IN PDEVICE_OBJECT A,PIRP pIrp)//派遣函数例程
{
ULONG arr;
NTSTATUS dd;
PIO_STACK_LOCATION stack;
dd=STATUS_SUCCESS;
pIrp->IoStatus.Status=dd;//返回状态
stack=IoGetCurrentIrpStackLocation(pIrp);//得到IO堆栈
arr=stack->Parameters.Read.Length;
pIrp->IoStatus.Information=arr;
memset(pIrp->AssociatedIrp.SystemBuffer,0xAA,arr);
IoCompleteRequest(pIrp,IO_NO_INCREMENT);//结束IRP
return dd;
}
小弟初学驱动写了几行可是win32CreateFile函数返回INVALID_HANDLE_VALUE,
win32程序也没有错各位帮忙看看吧先谢了