ring3 char 字符数组 传入ring0后 转化为UNICODE_STRING处理


  通过 函数 

DeviceIoControl(device, //打开的设备
           MY_DVC_IN_CODE, //控制码
           in_buffer,  //输入缓冲区
           in_buffer_len, //输入缓冲区长度
           NULL,  //没有输出
           0,    //输出缓冲区为0
           &length,   //返回长度
           NULL);

向内核层传递char型字符数组,in_buffer

在驱动层 使用irp->AssociatedIrp.SystemBuffer  获得字符串

/得到输入/输出缓冲区的长度
            ULONG in_len = irpsp->Parameters.DeviceIoControl.InputBufferLength;
            ULONG out_len = irpsp->Parameters.DeviceIoControl.OutputBufferLength;
            //输入、输出的缓冲区是公用的内存空间的
            PCHAR buffer = (PCHAR)irp->AssociatedIrp.SystemBuffer;

此时字符串时 ansi 的 我们要转化成Unicode的

声明  ANSI_STRING ansiBuffer;UNICODE_STRING buffer_proc;

ansiBuffer.Buffer = buffer;
ansiBuffer.Length = ansiBuffer.MaximumLength = (USHORT)in_len;
RtlAnsiStringToUnicodeString(&buffer_proc, &ansiBuffer,TRUE);
打印结果:

DbgPrint("%ansiBuffer = %Z\n",&ansiBuffer);    //注意是%Z
DbgPrint("buffer_proc = %wZ\n",&buffer_proc);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值