首页
社区
课程
招聘
[旧帖] [求助]求教应用层给驱动层信息 0.00雪花
发表于: 2012-4-10 17:15 2269

[旧帖] [求助]求教应用层给驱动层信息 0.00雪花

2012-4-10 17:15
2269
初学驱动,很多都是白痴问题,希望高人指点。
是这样的,我做了个SSDT HOOK。现在在DriverEntry函数里完成了HOOK函数NtCreateFile函数
大概就是这样
DriverEntry{
      HOOKNtCreateFile();
}
目前是所有的创建文件都监控了。
我需要一个应用程序告诉驱动层的只监控特定进程的创建文件行为
在应用层用DeviceIoControl可以和驱动层通信,但是我现在搞不清楚我具体应该怎么办。
1.传给驱动层的消息好像都是些控制指令,我需要传给驱动层的应该是进程名或者进程的PID,应该如何做
2.假设传到驱动层了,驱动层应该如何处理?
是这样处理吗?
DriverEntry{
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]=DevDispatch;
}
DevDispatch{
    switch(parameters. DeviceIoControl.IoControlCode)      
        case xx
             HOOKNtCreateFile();
}
3.驱动层如何知道目前调用他的进程是否符合要求?

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 1121
活跃值: (652)
能力值: ( LV5,RANK:66 )
在线值:
发帖
回帖
粉丝
2
首先声明,我也是个新手,所以也不清楚下面说的是不是绝对正确,仅供参考啊。
Windows设备的操作和文件操作基本相通。CreateFile打开驱动创建的设备,WriteFile就可以给驱动传数据了。
DeviceIoControl的第三个参数,好像就可以传数据的啊。
2012-4-10 18:07
0
雪    币: 585
活跃值: (568)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
3
dwOutBufLen = dwReturn + 4;
                                pData = new char[ dwOutBufLen ];
                                ZeroMemory( pData, dwOutBufLen );

                                if( !( bIsSuccess = DeviceIoControl(
                                        m_hDevice, //__in          HANDLE hDevice,
                                        IOCTL_SIOCTL_METHOD_BUFFERED_GET_PROCESS_INFO, //__in          DWORD dwIoControlCode,
                                        NULL, //__in          LPVOID lpInBuffer,
                                        0, //__in          DWORD nInBufferSize,
                                        pData, //__out         LPVOID lpOutBuffer,
                                        dwReturn, //__in          DWORD nOutBufferSize,
                                        &dwReturn, //__out         LPDWORD lpBytesReturned,
                                        NULL //__in          LPOVERLAPPED lpOverlapped
                                        ) ) )
                                {
                                        delete pData;
                                        pData = NULL;
                                        dwOutBufLen = 0;
                                }
2012-4-10 21:01
0
雪    币: 585
活跃值: (568)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
4
if( !DeviceIoControl(
                m_hDevice, //__in          HANDLE hDevice,
                IOCTL_SIOCTL_METHOD_BUFFERED_SET_PROCESS_BLACK_LIST, //__in          DWORD dwIoControlCode,
                (LPVOID)pBlack, //__in          LPVOID lpInBuffer,
                dwLen, //__in          DWORD nInBufferSize,
                NULL, //__out         LPVOID lpOutBuffer,
                0, //__in          DWORD nOutBufferSize,
                &dwReturn, //__out         LPDWORD lpBytesReturned,
                NULL //__in          LPOVERLAPPED lpOverlapped
                ) )
        {
                DbgOutput( _T("In SendProcessBlackInfo(), DeviceIoControl() failed! Err:%s..."), FmtMsg( GetLastError() ) );
                AfxMessageBox( _T("操作失败!") );
        }
2012-4-10 21:02
0
雪    币: 87
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
就是连接symbol 网上很多的
2012-4-10 22:18
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
3,4L发的代码没看懂
是用其他的例子的来说明函数如何用?
和我要解决的问题有什么关系。。
2012-4-13 08:28
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
可以给我看看你的源码吗?我也是刚开始接触驱动,没有基础,也在SSDT HOOK。希望学习一下你的代码
2012-8-22 17:16
0
游客
登录 | 注册 方可回帖
返回
//