• 驱动读写方式


     1 PIO_STACK_LOCATION isl = IoGetCurrentIrpStackLocation(pIrp);
     2 
     3     //Read & Write Length
     4     ULONG dwInSize = isl->Parameters.Read.Length;
     5     ULONG dwOutSize = isl->Parameters.Write.Length;
     6 
     7     //In & Out Buffer DO_BUFFERED_IO
     8     PVOID pInBuffer = pIrp->AssociatedIrp.SystemBuffer;
     9     PVOID pOutBuffer = pIrp->AssociatedIrp.SystemBuffer;
    10 
    11     //In & Out Buffer DO_DIRECT_IO 
    12     pInBuffer = MmGetSystemAddressForMdlSafe(pIrp->MdlAddress, NormalPagePriority);
    13     pOutBuffer = MmGetSystemAddressForMdlSafe(pIrp->MdlAddress, NormalPagePriority);
    14 
    15     //In & Out Buffer DO_DIRECT_IO 
    16     ProbeForRead(pIrp->UserBuffer, dwInSize, 4);
    17     pInBuffer = pIrp->UserBuffer;
    18     ProbeForWrite(pIrp->UserBuffer, dwOutSize, 4);
    19     pOutBuffer = pIrp->UserBuffer;
    20 
    21     //Io control device
    22     ULONG dwCtrlCoder = isl->Parameters.DeviceIoControl.IoControlCode;
    23     //Read & Write Length
    24     dwInSize = isl->Parameters.DeviceIoControl.InputBufferLength;
    25     dwOutSize = isl->Parameters.DeviceIoControl.OutputBufferLength;
    26     
    27     //In & Out Buffer METHOD_BUFFERED || METHOD_IN_DIRECT || METHOD_OUT_DIRECT || METHOD_NEITHER I/O
    28     pInBuffer = pIrp->AssociatedIrp.SystemBuffer;
    29     pOutBuffer = pIrp->AssociatedIrp.SystemBuffer;
    30 
    31     //In & Out Buffer METHOD_IN_DIRECT || METHOD_OUT_DIRECT
    32     pInBuffer = pIrp->AssociatedIrp.SystemBuffer;
    33     pOutBuffer = MmGetSystemAddressForMdlSafe(pIrp->MdlAddress, NormalPagePriority);
    34 
    35     //In & Out Buffer METHOD_NEITHER I/O
    36     
    37     pInBuffer = isl->Parameters.DeviceIoControl.Type3InputBuffer;
    38     ProbeForRead(pInBuffer, dwInSize, 4);
    39     pOutBuffer = pIrp->UserBuffer;
    40     ProbeForRead(pOutBuffer, dwOutSize, 4);
  • 相关阅读:
    哈夫曼
    P1631序列合并
    PAT Mice and Rice
    ybt 1356 计算(calc)
    P2947 Look Up S
    electron主进程与渲染进程的通信方式
    自定义BufferedReader
    小程序云数据库查询数据用在其它任意地方(完美解决)
    html+js实现微信跳转遮罩层
    Java创建属于自己的二维码(完整版)
  • 原文地址:https://www.cnblogs.com/endenvor/p/11526464.html
Copyright © 2020-2023  润新知