本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告

谦卑,荣誉,牺牲,英勇,怜悯,诚实,精神,公正。


我的分类(专题)

日志更新

最新评论

留言板

链接

 

 


Blog信息
blog名称:
日志总数:183
评论数量:698
留言数量:7
访问次数:3023849
建立时间:2005年12月29日




[硬件东东]Simple Drive Program
网上资源

newqiang 发表于 2006/1/8 20:44:26

#include <wdm.h> #define NT_DEVICE_NAME L"\\Device\\Example"#define DOS_DEVICE_NAME L"\\DosDevices\\Example"VOID DriverUnload( IN PDRIVER_OBJECT pDriverObject );NTSTATUS DispatchFunction( IN PDEVICE_OBJECT pDeviceObject, IN PIRP Irp );NTSTATUS DispatchRead( IN PDEVICE_OBJECT pDeviceObject, IN PIRP Irp );NTSTATUS DispatchWrite( IN PDEVICE_OBJECT pDeviceObject, IN PIRP Irp );NTSTATUS DriverEntry( IN PDRIVER_OBJECT pDriverObject, IN PIRP Irp ){ NTSTATUS status = STATUS_SUCCESS; PDEVICE_OBJECT pDeviceObject = NULL; UNICODE_STRING usNtDeviceName, usDosDeviceName; int nIndex = 0;  RtlInitUnicodeString( &usNtDeviceName, NT_DEVICE_NAME );  status = IoCreateDevice( pDriverObject,      0,      &usNtDeviceName,      FILE_DEVICE_UNKNOWN,      FILE_DEVICE_SECURE_OPEN,      FALSE,      &pDeviceObject ); if ( NT_SUCCESS(status) ) {  DbgPrint( "DriverEntry" );  pDriverObject->DriverUnload = DriverUnload;  RtlInitUnicodeString( &usDosDeviceName, DOS_DEVICE_NAME );  IoCreateSymbolicLink( &usDosDeviceName, &usNtDeviceName );  for (nIndex; nIndex <= IRP_MJ_MAXIMUM_FUNCTION; nIndex ++)   pDriverObject->MajorFunction[ nIndex ] = DispatchFunction; }  return status;} VOID DriverUnload( IN PDRIVER_OBJECT pDriverObject ){ UNICODE_STRING usDosDeviceName; RtlInitUnicodeString( &usDosDeviceName, DOS_DEVICE_NAME ); DbgPrint( "DriverUnload" ); IoDeleteSymbolicLink( &usDosDeviceName ); IoDeleteDevice( pDriverObject->DeviceObject );} NTSTATUS DispatchFunction( IN PDEVICE_OBJECT pDeviceObject, IN PIRP Irp ){ NTSTATUS status = STATUS_SUCCESS; PIO_STACK_LOCATION irpStack = NULL;  irpStack = IoGetCurrentIrpStackLocation( Irp ); switch ( irpStack->MajorFunction ) { case IRP_MJ_CREATE:  break; case IRP_MJ_READ:  DispatchRead( pDeviceObject, Irp );  break; case IRP_MJ_WRITE:  DispatchWrite( pDeviceObject, Irp );  break; default:  DbgPrint( "DispatchFunction" );  break; } IoCompleteRequest( Irp, IO_NO_INCREMENT ); return status;} NTSTATUS DispatchRead( IN PDEVICE_OBJECT pDeviceObject, IN PIRP Irp ){ NTSTATUS status = STATUS_SUCCESS; PIO_STACK_LOCATION irpStack = NULL; char *pBuf = "88888888"; int nLen = sizeof ("88888888"); irpStack = IoGetCurrentIrpStackLocation( Irp ); if ( irpStack ) {  ProbeForWrite( Irp->UserBuffer, irpStack->Parameters.Read.Length, TYPE_ALIGNMENT(char) );  RtlCopyMemory( Irp->UserBuffer, pBuf, nLen ); } return status;} NTSTATUS DispatchWrite( IN PDEVICE_OBJECT pDeviceObject, IN PIRP Irp ){ NTSTATUS status = STATUS_SUCCESS; PIO_STACK_LOCATION irpStack = NULL; irpStack = IoGetCurrentIrpStackLocation( Irp ); if ( irpStack ) {  ProbeForRead( Irp->UserBuffer, irpStack->Parameters.Read.Length, TYPE_ALIGNMENT(char) );  DbgPrint( Irp->UserBuffer ); } return status;} Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=557014


阅读全文(4332) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.063 second(s), page refreshed 144756434 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号