阅读:1744回复:7
关于IRP_MJ_CREATE的问题,请大家帮忙(急)
我的部分代码,
NTSTATUS DriverEntry( IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath ) { int i; UNICODE_STRING dllName; DWORD functionAddress; UNICODE_STRING devname; UNICODE_STRING devlink; PDEVICE_OBJECT devob ; NTSTATUS status ; //_asm int 3; DbgPrint("My Driver Loaded!"); RtlInitUnicodeString(&devname,HOOKZWCREATEPROCESS_DEVICE_NAME_W); RtlInitUnicodeString(&devlink,HOOKZWCREATEPROCESS_DOS_DEVICE_NAME_W); status = IoCreateDevice(theDriverObject, 256, &devname, FILE_DEVICE_HOOKZWCREATEPROCESS, 0, TRUE, &devob); if (!NT_SUCCESS(status)) { KdPrint(("Failed to create device .....")); return status ; } status = IoCreateSymbolicLink(&devlink,&devname); if (!NT_SUCCESS(status)) { KdPrint(("Failed to create symboliclink .......")); IoDeleteDevice(devob); return status; } /*theDriverObject->MajorFunction[IRP_MJ_CREATE] = theDriverObject->MajorFunction[IRP_MJ_CLOSE] = DevCreateClose; theDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DevDispatch ;*/ for( i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++ ) { theDriverObject->MajorFunction = DevDispatch; } theDriverObject->DriverUnload = OnUnload; KeInitializeEvent(&event,SynchronizationEvent,1); GetProcessNameOffset(); RtlInitUnicodeString(&dllName, L"\\Device\\HarddiskVolume1\\Windows\\System32\\ntdll.dll"); functionAddress = GetDllFunctionAddress("ZwCreateProcessEx", &dllName); position = *((WORD*)(functionAddress+1)); DbgPrint("ZwCreateProcessEx's Id:%d\n", position); RealZwCreateProcess = (ZWCREATEPROCESS)(*(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase + position)); functionAddress = GetDllFunctionAddress("ZwLoadDriver",&dllName); pos = *((WORD*)((DWORD)ZwSetValueKey+1)); po = *((WORD *)(functionAddress+1)); DbgPrint("ZwSetValueKey's Id:%d\n", pos); DbgPrint("ZwLoadDriver's Id:%d\n",po); //DbgPrint("ZwLoadDriver's address is %d\n",ZwLoadDriver); RealZwSetValueKey = (ZWSETVALUEKEY)(*(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase + pos)); RealZwLoadDriver = (ZWLOADDRIVER)(*(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase + po)); return STATUS_SUCCESS; } NTSTATUS DevDispatch( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ) { UCHAR *buff =0; ULONG a; PIO_STACK_LOCATION psloc= IoGetCurrentIrpStackLocation(Irp); switch( psloc->MajorFunction ) { case IRP_MJ_CREATE: DbgPrint("-------IRP_MJ_CREATE\n"); break; case IRP_MJ_CREATE_NAMED_PIPE: DbgPrint("-------IRP_MJ_CREATE_NAMED_PIPE \n"); break; } Irp->IoStatus.Status = 0; IoCompleteRequest(Irp,IO_NO_INCREMENT); return STATUS_SUCCESS ; } IRP_MJ_CREATE只有在应用层CreateFile时才有反映,打开别的文件都没有反映,这是为什么呀? |
|
沙发#
发布于:2008-04-07 22:52
DDK_Program.rar
这是我的程序 |
|
板凳#
发布于:2008-04-08 07:27
当然没反应了
你的又不是过滤驱动 |
|
地板#
发布于:2008-04-08 07:39
你用的http://bbs.driverdevelop.com/htm_data/98/0711/107300.html这个 框架当然不行了
我的那个又不是过滤驱动 没有挂到任何Volume上 当然监控不到了 建议看看Sfilter或者Filemon的源码 |
|
地下室#
发布于:2008-04-08 09:56
请问x-star
,怎样挂到Volume上,给一段代码呀,现在比较急, 谢谢了! |
|
5楼#
发布于:2008-04-08 12:34
Sfilter 和 filemon 有源代码
|
|
6楼#
发布于:2008-04-08 15:30
请问x-star:
IFS DDK 和DDK有什么区别吗? 用DDK编译Sfilter 和 filemon 会出错, 找了很多下载IFS DDK的网址,都不能下! |
|
7楼#
发布于:2008-04-10 13:01
这样理解就好了
IFS DDK 包含 DDK IFS DDK主要用于开发文件系统过滤驱动 比DDK多了很多函数 下个最新的WDK就行了 |
|