关于键盘过滤驱动中写入文件乱码的问题的解决!

能获取到扫描码,并成功转化为字符,但写入文件,打开却是乱码,调试无果,很是郁闷,哪位朋友帮看下是哪里没写好?

 

//----------------------
首先:获取扫描码
buf = (PCHAR)Irp->AssociatedIrp.SystemBuffer;
ch1=(CHAR)buf[2];   //这里扫描码要转换为CHAR型
再通过一个表将扫描码转化成字符:
CHAR chn=ascii;

调用工作线程:
VOID ThreadFunc(..)
{
......
DbgPrint(("Get a char:%c/n",chn)); //在这里还能输出正常,获取转化后的字符成功
ZwWriteFile(                   //写入文件
hfile,
NULL,
NULL,
NULL,
&ioStatus,
&chn,
1,
NULL,
NULL);  //执行写入,打开都是乱码
.....
}

问题:
1.就算把CHAR改成UCHAR也一样,能获取转化后的字符,但在写入文件时都是乱码

2.后来我又把char转存到Ansi_String中:
CHAR *p=&chn;
RtlInitAnsiString(&keys,p); //以P指针指向的chn字符(串)来初始化ansi string
DbgPrint(("buffer is %Z/n",&keys));
DbgPrint(("buffer2 is %s/n",keys.Buffer));  //到这里。所有的输出都正常,都获取到了按键字符,
可是接下来,,恶梦又来了:

ZwWriteFile(                   //写入文件
hfile,
NULL,
NULL,
NULL,
&ioStatus,
keys.Buffer,
keys.Length,
NULL,
NULL);  //执行写入,打开都是乱码
.....

实在郁闷了。

 

 

后来改了:

改成:
 char keys[3]="0/0";
.....
keys[0]=chn;
ZwWriteFile(                   //写入文件
       hfile,
       0,
       0,
       0,
       &ioStatus,
       &keys,
       strlen(keys),
       0,
       0);

就通过了.再也没有乱码了,天空一片睛朗!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值