zoukankan      html  css  js  c++  java
  • 设备读写方式

    1.缓冲区方式读写操作
    1.1 ReadFile 
      读取字节数:stack->Parameters.Read.Length
       偏移:stack->Parameters.Read.ByteOffset.QuadPart
      输出缓冲区:pIrp->AssociatedIrp.SystemBuffer
      输出字节数:pIrp->IoStatus.Information
     
    1.2 WriteFile
      写入字节数:stack->Parameters.Write.Length
       偏移:stack->Parameters.Write.ByteOffset.QuadPart
      写入缓冲区:pIrp->AssociatedIrp.SystemBuffer
      返回字节数:pIrp->IoStatus.Information
     
    1.3 IRP_MJ_QUERY_INFORMATION
      FILE_INFORMATION_CLASS: stack->Parameters.QueryFile.FileInformation
      输入输出缓冲区:pIrp->AssociatedIrp.SystemBuffer
          返回字节数:pIrp->IoStatus.Information=stack->Parameters.QueryFile.Length
     
    2.直接方式读写操作
    2.1 ReadFile
      读取字节数:stack->Parameters.Read.Length
       偏移:stack->Parameters.Read.ByteOffset.QuadPart
      输出缓冲区:MmGetSystemAddressForMdlSafe(pIrp->MdlAddress,NormalPagePriority)
      输出字节数:pIrp->IoStatus.Information
     
    2.2 WriteFile
      写入字节数:stack->Parameters.Write.Length
       偏移:stack->Parameters.Write.ByteOffset.QuadPart
      写入缓冲区:MmGetSystemAddressForMdlSafe(pIrp->MdlAddress,NormalPagePriority)
      返回字节数:pIrp->IoStatus.Information
     
    3.其他方式读写操作
    3.1 ReadFile
      读取字节数:stack->Parameters.Read.Length
       偏移:stack->Parameters.Read.ByteOffset.QuadPart
      输出缓冲区:ProbeForWrite(pIrp->UserBuffer)
      输出字节数:pIrp->IoStatus.Information
     
    3.2 WriteFile
      写入字节数:stack->Parameters.Write.Length
       偏移:stack->Parameters.Write.ByteOffset.QuadPart
      写入缓冲区:ProbeForRead(pIrp->UserBuffer)
      返回字节数:pIrp->IoStatus.Information
     
     
    IO设备控制操作
    1.缓冲内存模式IOCTL
     
    输入缓冲区大小:stack->Parameters.DeviceIoControl.InputBufferLength
    输出缓冲区大小:stack->Parameters.DeviceIoControl.OutputBufferLength
        输入缓冲区:pIrp->AssociatedIrp.SystemBuffer
        输出缓冲区:pIrp->AssociatedIrp.SystemBuffer
     
    2.直接内存模式IOCTL之METHOD_IN_DIRECT 
     
    输入缓冲区大小:stack->Parameters.DeviceIoControl.InputBufferLength
    输出缓冲区大小:stack->Parameters.DeviceIoControl.OutputBufferLength
        输入缓冲区:MmGetSystemAddressForMdlSafe(pIrp->MdlAddress,NormalPagePriority)
        输出缓冲区:pIrp->AssociatedIrp.SystemBuffer
     
     
    3.直接内存模式IOCTL之METHOD_OUT_DIRECT 
     
    输入缓冲区大小:stack->Parameters.DeviceIoControl.InputBufferLength
    输出缓冲区大小:stack->Parameters.DeviceIoControl.OutputBufferLength
        输入缓冲区:MmGetSystemAddressForMdlSafe(pIrp->MdlAddress,NormalPagePriority)
        输出缓冲区:pIrp->AssociatedIrp.SystemBuffer
     
    METHOD_IN_DIRECT与METHOD_OUT_DIRECT区别在于打开设备的权限
     
    1) 只读权限打开设备,METHOD_IN_DIRECT的IOCTL操作成功,而METHOD_OUT_DIRECT的操作失败
    2) 读写权限打开设备,METHOD_IN_DIRECT与METHOD_OUT_DIRECT的IOCTL操作都成功
     
    4.其他内存模式IOCTL
     
    输入缓冲区大小:stack->Parameters.DeviceIoControl.InputBufferLength
    输出缓冲区大小:stack->Parameters.DeviceIoControl.OutputBufferLength
        输入缓冲区:ProbeForRead(stack->Parameters.DeviceIoControl.Type3InputBuffer)
        输出缓冲区:ProbeForWrite(pIrp->UserBuffer)
  • 相关阅读:
    编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
    Java基础——数据类型之间的转换
    Spring 事物机制总结
    Spring 3.0 注解注入详解
    Spring 注解 @Resource和@Autowired
    从jsp向servlet传送数据的两种方式
    文本输入框,只能显示内容而不能修改
    myeclipse 中项目名出现红色感叹号解决方法
    在servlet中使用split()截取以反斜杠‘’分割的字符串
    jsp页面跳转方式
  • 原文地址:https://www.cnblogs.com/endenvor/p/9060645.html
Copyright © 2011-2022 走看看