Я пытаюсь скрыть некоторые значения в реестре (например, серийные номера) с помощью C ++ / windows, поэтому я просматривал эту статью http://www.codeproject.com/KB/system/NtRegistry.aspx
, в которой говорится:
Как это возможно?Ответ заключается в том, что имя, которое считается как строка в Юникоде, может явно включать символы NULL (0) в качестве части имени.Например, «Ключ \ 0».Чтобы включить NULL в конце, длина строки Unicode указана как 4. Абсолютно невозможно указать это имя с помощью Win32 API, поскольку, если в качестве имени передается «Key \ 0», API определит, чтоимя - «Ключ» (3 символа в длину), потому что «\ 0» обозначает конец имени.
Когда ключ (или любой другой объект с именем, например, именованное событие, семафор,или Mutex) создается с таким именем, любое приложение, использующее Win32 API, не сможет открыть имя, даже если они могут его увидеть.
, поэтому я попытался сделать что-то подобное:
HKEY keyHandle;
PHKEY key;
unsigned long status = 0;
wchar_t *wKeyName = new wchar_t[m_keyLength];
MultiByteToWideChar(CP_ACP, 0, m_keyName, m_keyLength, wKeyName, m_keyLength);
wKeyName[18] = '\0';
long result = RegCreateKeyExW(HKEY_LOCAL_MACHINE,
wKeyName,
0,
NULL,
0,
KEY_ALL_ACCESS,
NULL,
&keyHandle,
&status);
, где m_keyName
- это текст ASCII, а wKeyName - текст с широким символом, но в regedit
я вижу, что он обрабатывается одинаково, а ключ просто обрезается, когда я помещаю '\ 0».
что с ним не так?