Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Утечка информации при записьи 
:(
    Опции темы
knut
Дата 10.3.2007, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Есть функция 
DWORD dwSize; 
char uData[MAX_VALUE_SIZE];
DWORD dwType = REG_SZ;
lRegErr = RegQueryValueEx(hKeyTemp, name, NULL, &dwType, (LPBYTE)uData, &dwSize);
а проблема следуюшая.
в массв uData записывается только один байт.а значения name а давольно длин.число или строка
не как не могу прочитать все значение. 


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
bsa
Дата 10.3.2007, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(http://msdn2.microsoft.com/en-us/library/ms724911.aspx)
lpcbData
[in, out] A pointer to a variable that specifies the size of the buffer pointed to by the lpData parameter, in bytes. When the function returns, this variable contains the size of the data copied to lpData. 

The lpcbData parameter can be NULL only if lpData is NULL.

Другими словами, присвой переменной dwSize значение MAX_VALUE_SIZE перед вызовом функции RegQueryValueEx
PM   Вверх
knut
Дата 10.3.2007, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



подправил я код 
Код

DWORD dwType = REG_SZ;
char *uData = new char[MAX_VALUE_SIZE];
DWORD dwSize = MAX_VALUE_SIZE; 
std::string str_value;

и  зделал так
Код

for(int i = 0;i < dwSize;++i)
{
   str_value.push_back(uData[i]);
}
std::cout<<str_value.c_str() ;

но после каждого push a он почему то пушает 0  и печатает только 1 символ


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
Любитель
Дата 10.3.2007, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Так ты в цикле посимволно разбираешь. Зачем? Твоя uData - и есть строка.


--------------------
PM MAIL ICQ Skype   Вверх
knut
Дата 10.3.2007, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Любитель, 
так она только один символ печатает.


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
Любитель
Дата 11.3.2007, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Сорри - прочитал невнимательно.

По теме - юникод включен или нет. Есть подозрение, что да. А ты полученную жникод строку интерпретируешь как анси. Достаточно логично получить 0. Или работай с юникодом, или отключи его (нежелательный вариант) или юзай RegQueryValueExA.


--------------------
PM MAIL ICQ Skype   Вверх
knut
Дата 11.3.2007, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Цитата

По теме - юникод включен или нет

отключил я юникод(Use UNICODE Response File) но опять не то


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
Любитель
Дата 11.3.2007, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Ты совсем не то отключил (на память не скажу, что сие есть). Поставь просто вызов анси-версии функции (с суфиксом A).


--------------------
PM MAIL ICQ Skype   Вверх
knut
Дата 11.3.2007, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Любитель, 
поменял char uData[MAX_VALUE_SIZE] на _TCHAR uData[MAX_VALUE_SIZE]; 
но если значение uData string то все нормально , а вот если DWORD то какие то ироглефы получаю.



--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
Любитель
Дата 11.3.2007, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Всмысле? В реестре тип REG_DWORD (или как он там)? Если да, то в этом случае ты и не получшиь строки. В первых 4 байтах uData ты получишь DWORD-значение. Делаем что-то такое:
Код

DWORD value = *(reinterpret_cast<DWORD*>(uData));


В dwType ты получишь значение типа ключа, значение которого ты запрашиваешь. Кстати, dwType можно не инитить - это чисто вызодной параметр.


--------------------
PM MAIL ICQ Skype   Вверх
knut
Дата 11.3.2007, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Любитель, спасибо за помощь держы плюс


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
Любитель
Дата 11.3.2007, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Держу smile

Только просьба - ставь галку "вопрос решён", если это действительно так.


--------------------
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0512 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.