我試圖隱藏在註冊表中與C++/Windows的一些值(如序列號) ,所以我一直在看這篇文章http://www.codeproject.com/KB/system/NtRegistry.aspx
其中說:隱藏條目(或「鰭註冊表
這怎麼可能呢?答案是 那這是一個算作一個 Unicode字符串的名稱可以明確地包括 NULL字符(0)作爲 名稱的一部分。比如,「關鍵\ 0 「要在末尾包含 NULL,則 Unicode字符串的長度爲s規定爲4. 絕對沒有辦法指定 此名稱使用Win32 API,因爲如果 「Key \ 0」作爲名稱傳遞,API 將確定名稱爲「Key」 (3個字符在長度),因爲 「\ 0」表示名稱的結尾。
當一個鍵(或具有 名稱的任何其他對象,例如一個指定的事件,信號量, 或互斥)與這樣的名稱創建, 使用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'的位置。
它有什麼問題嗎?