通过 函数
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);