郁金香外挂技术-郁金香灬老师

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

飞郁网络培训郁金香终身VIP管理员QQ150330575淘宝担保交易QQ交流群(外挂,驱动)
查看: 335|回复: 0

004-IRP派遣函数

[复制链接]
发表于 2018-11-29 20:31:54 | 显示全部楼层 |阅读模式
//郁金香灬老师 QQ 150330575


IRP(I/O Request Package) 是输入输出请求包的简称
IRP_MJ_CREATE   请求一个句柄


CreateFile
IRP_MJ_CLOSE    关闭句柄


CloseHandle


IRP_MJ_READ     从设备得到数据


ReadFile



IRP_MJ_WRITE    传送数据到设备


WriteFile



IRP_MJ_DEVICE_CONTROL 控制操作利用IOCTL宏


DeviceIoControl
---------------------


//L"\\\\.\\
//L"\\??\\



driver->MajorFunction[IRP_MJ_CREATE] = DeviceIrpCtl; //CreateFile
driver->MajorFunction[IRP_MJ_CLOSE] = DeviceIrpCtl;//卸载驱动 CloseHandle
driver->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DeviceIrpCtl;//DeviceIoControl



NTSTATUS DeviceIrpCtl(PDEVICE_OBJECT device, PIRP pirp)
{
        KdPrint(("yjx:进入派遣函数"));
        PIO_STACK_LOCATION irpStackL;
        ULONG CtlCode;
        ULONG InputBuffLength;


        irpStackL = IoGetCurrentIrpStackLocation(pirp); //获取应用层传来的参数

        switch (irpStackL->MajorFunction)
        {
        case IRP_MJ_DEVICE_CONTROL: //DeviceIoControl
        {
                KdPrint(("yjx:用户层调用了 DeviceIoControl"));
                break;
        }
        case IRP_MJ_CREATE: //CreateFile
        {
                KdPrint(("yjx:用户层调用了 CreateFile"));
                break;
        }
        case IRP_MJ_CLOSE: //CloseHandle
        {
                KdPrint(("yjx:用户层调用了 CloseHandle"));
                break;
        }
        }

        pirp->IoStatus.Status = STATUS_SUCCESS;
        pirp->IoStatus.Information = 4;//返回给DeviceIoControl中的 倒数第二个参数lpBytesReturned
        IoCompleteRequest(pirp, IO_NO_INCREMENT);//调用方已完成所有I/O请求处理操作 并且不增加优先级
        KdPrint(("yjx:离开派遣函数"));
        return STATUS_SUCCESS;
}

NTSTATUS DeviceIrpCtl_Close(PDEVICE_OBJECT device, PIRP pirp)
{
        KdPrint(("yjx:进入派遣函数 DeviceIrpCtl_Close"));
        PIO_STACK_LOCATION irpStackL;
        ULONG CtlCode;
        ULONG InputBuffLength;


        irpStackL = IoGetCurrentIrpStackLocation(pirp); //获取应用层传来的参数

          KdPrint(("yjx:用户层调用了 CloseHandle DeviceIrpCtl_Close"));
         

        pirp->IoStatus.Status = STATUS_SUCCESS;
        pirp->IoStatus.Information = 4;//返回给DeviceIoControl中的 倒数第二个参数lpBytesReturned
        IoCompleteRequest(pirp, IO_NO_INCREMENT);//调用方已完成所有I/O请求处理操作 并且不增加优先级
        KdPrint(("yjx:离开派遣函数 DeviceIrpCtl_Close"));
        return STATUS_SUCCESS;
}




//打开驱动设备

//打开驱动设备对象
HANDLE DeviceHandle = NULL;
void CIRPMFCDlg::OnBnClickedButton1()
{
        // TODO: 在此添加控件通知处理程序代码 //IRP_MJ_CREATE
        DeviceHandle = CreateFileW(
                L"\\??\\MyDriver",
                GENERIC_READ | GENERIC_WRITE,
                FILE_SHARE_READ | FILE_SHARE_WRITE,
                NULL,
                OPEN_EXISTING,
                FILE_ATTRIBUTE_NORMAL,
                NULL);
}


void CIRPMFCDlg::OnBnClickedButton2()
{
        // TODO: 在此添加控件通知处理程序代码
        CloseHandle(DeviceHandle);//IRP_MJ_CLOSE
}


void CIRPMFCDlg::OnBnClickedButton3()
{
        // TODO: 在此添加控件通知处理程序代码
        DWORD dwBuf=0;
        DeviceIoControl(DeviceHandle, 22222,
                &dwBuf,
                sizeof(dwBuf),
                &dwBuf,
                sizeof(dwBuf),
                &dwBuf,
                NULL);
}


郁金香外挂教程,学习中...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|郁金香外挂技术-郁金香灬老师 ( 苏ICP备10059359号 )

GMT+8, 2018-12-19 08:59 , Processed in 0.045600 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表