关于驱动程序转换小写的问题

来源:互联网 发布:网络音乐产品黑名单 编辑:程序博客网 时间:2024/04/29 21:22

Windows 7 Ultimate + Windows DDK 3790.1830 + Microsoft VS2010


今天测试一个转化小写的函数:

RtlDowncaseUnicodeString

配置好DDK命令行编译之后提示: error C4013: 'RtlDowncaseUnicodeString' undefined; assuming extern returning int


打开用SDK工具包中一个depends.exe打开NTOSKRNL.EXE,检查函数导出,结果发现这个函数真有定义。

就是DDK头文件中没定义所以不识别。


调用驱动函数专用函数不通,还是要靠自己动手写的。


解决方案:

按照unsigned short 方式遍历UNICODE_STRING.Buffer成员的每个项,检查数值范围,若在65到90(均十进制),则将位6(第7位)通过位或运算置1。

     如下函数模拟RtlDowncaseUnicodeString,但参数有所不同

//  注意:该函数并不检查目的地址是否有效//               特别是是否可写、是否越界//           上一调用级应确保其合法性。//          否则, 蓝屏死机(BSOD)NTSTATUS    DowncaseUnicodeString( PUNICODE_STRING pDes, PUNICODE_STRING pSrc ){    int       index = 0;    const int limit = ( pSrc->Length) / 2 ; // UNICODE String Counted by bytes.    USHORT *pusSrc = (USHORT *) pSrc->Buffer;    USHORT *pusDes = (USHORT *) pDes->Buffer;        for ( ; index < limit; ++index )    {         USHORT temp =  pusSrc[index];        if ( temp >= 65 && temp <= 90 )        {            temp |= 0x20;        }        pusDes[index] = temp;    }    return  STATUS_SUCCESS;}


0 0
原创粉丝点击