xiangfly
驱动牛犊
驱动牛犊
  • 注册日期2008-03-26
  • 最后登录2010-12-05
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望10点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
阅读:1744回复:7

关于IRP_MJ_CREATE的问题,请大家帮忙(急)

楼主#
更多 发布于:2008-04-07 22:44
我的部分代码,
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时才有反映,打开别的文件都没有反映,这是为什么呀?
xiangfly
驱动牛犊
驱动牛犊
  • 注册日期2008-03-26
  • 最后登录2010-12-05
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望10点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-04-07 22:52
DDK_Program.rar
这是我的程序
x-star
驱动小牛
驱动小牛
  • 注册日期2007-04-26
  • 最后登录2018-11-17
  • 粉丝0
  • 关注0
  • 积分65分
  • 威望664点
  • 贡献值1点
  • 好评度39点
  • 原创分1分
  • 专家分1分
  • 社区居民
板凳#
发布于:2008-04-08 07:27
当然没反应了
你的又不是过滤驱动
x-star
驱动小牛
驱动小牛
  • 注册日期2007-04-26
  • 最后登录2018-11-17
  • 粉丝0
  • 关注0
  • 积分65分
  • 威望664点
  • 贡献值1点
  • 好评度39点
  • 原创分1分
  • 专家分1分
  • 社区居民
地板#
发布于:2008-04-08 07:39
你用的http://bbs.driverdevelop.com/htm_data/98/0711/107300.html这个 框架当然不行了  
我的那个又不是过滤驱动  没有挂到任何Volume上  当然监控不到了
建议看看Sfilter或者Filemon的源码
xiangfly
驱动牛犊
驱动牛犊
  • 注册日期2008-03-26
  • 最后登录2010-12-05
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望10点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-04-08 09:56
请问x-star
,怎样挂到Volume上,给一段代码呀,现在比较急,
谢谢了!
x-star
驱动小牛
驱动小牛
  • 注册日期2007-04-26
  • 最后登录2018-11-17
  • 粉丝0
  • 关注0
  • 积分65分
  • 威望664点
  • 贡献值1点
  • 好评度39点
  • 原创分1分
  • 专家分1分
  • 社区居民
5楼#
发布于:2008-04-08 12:34
Sfilter 和 filemon 有源代码
xiangfly
驱动牛犊
驱动牛犊
  • 注册日期2008-03-26
  • 最后登录2010-12-05
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望10点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-04-08 15:30
请问x-star:
IFS DDK 和DDK有什么区别吗?
用DDK编译Sfilter 和 filemon 会出错,
找了很多下载IFS DDK的网址,都不能下!
x-star
驱动小牛
驱动小牛
  • 注册日期2007-04-26
  • 最后登录2018-11-17
  • 粉丝0
  • 关注0
  • 积分65分
  • 威望664点
  • 贡献值1点
  • 好评度39点
  • 原创分1分
  • 专家分1分
  • 社区居民
7楼#
发布于:2008-04-10 13:01
这样理解就好了
IFS DDK 包含 DDK
IFS DDK主要用于开发文件系统过滤驱动 比DDK多了很多函数
下个最新的WDK就行了
游客

返回顶部