Il seguente codice funziona bene in modalità utente:Si tratta di un grosso bug nell'implementazione di tolower in ntoskrnl.exe?
#include <stdio.h>
#include <ctype.h>
int main()
{
//
// 0x7f51 is the unicode code of Chinese character '网'
//
int n = tolower(0x7f51); // n will equal 0x7f51
}
Tuttavia, se siamo in modalità kernel, n
sarà uguale 0x7f71
!!!
Il codice di esempio più semplice:
#include <ntifs.h>
ULONG NTAPI DriverEntry(PDRIVER_OBJECT, PUNICODE_STRING)
{
int n = tolower(0x7f51); // n will equal 0x7f71 !!!
return 0;
}
È questo un grande errore nella realizzazione di tolower
in ntoskrnl.exe?
Penso che significhi solo che si hanno impostazioni locali diverse nella modalità kernel. Prova invece a usare 'tolower_l()'. –
Sembra che stia facendo solo una minuscola ASCII sui 7 bit più bassi: 0x51 -> 0x71. –
'tolower()' non può funzionare con unicode. Usa le impostazioni locali correnti per trovare la lettera minuscola corrispondente. C99 ha 'towlower()', probabilmente può aiutare. – JIghtuse