以下代码在用户模式下可以正常工作:
#include <stdio.h>
#include <ctype.h>
int main()
{
//
// 0x7f51 is the unicode code of Chinese character '网'
//
int n = tolower(0x7f51); // n will equal 0x7f51
}
但是,如果我们处于内核模式,
n
将等于0x7f71
!!!最简单的示例代码:
#include <ntifs.h>
ULONG NTAPI DriverEntry(PDRIVER_OBJECT, PUNICODE_STRING)
{
int n = tolower(0x7f51); // n will equal 0x7f71 !!!
return 0;
}
这是ntoskrnl.exe中
tolower
的实现中的大错误吗? 最佳答案
tolower(int c)
仅为EOF或可表示为无符号字符的整数c
定义。 0x7f51
都不是。因此,tolower(0x7f51)
的行为是不确定的。