Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2011, 17:48   #1
Fedor666
Пользователь
 
Регистрация: 22.02.2010
Сообщений: 71
Подмигивание UNICODE_STRING и прочая нечисть

Доброго времени суток.
Уже с ума сошел от энтих кодировок! Помогите плз.
Имеется функция NtSetValueKey. Вот ее описание:

Код:
ZwSetValueKey(
IN HANDLE KeyHandle,
IN PUNICODE_STRING ValueName,
IN ULONG TitleIndex,
IN ULONG Type,
IN PVOID Data,
IN ULONG DataSize
);
С PUNICODE_STRING вроде бы разобрался так:

Код:
mov	edx,lpValueName
movzx	ecx,word ptr [edx]
shr	ecx,1
add	edx,4
mov	edx,[edx]
invoke	WideCharToMultiByte,CP_ACP,0,edx,ecx,addr lpOutName,512,0,0
А вот что такое PVOID Data? Если без переделок скормить его WideCharToMultiByte, то если строка не пустая, то иногда все путем. Если пустая - то кракозябры выводятся. Все зависит от погоды.
Что это за формат такой PVOID? И-нет перерыл уже весь - никаких описаний. Очередной раз поражаюсь мелкомягким! Как они сами не путаются?
Подскажите, люди добрые, как из этого ... извлечь нормальную, обычную ANSI-строку с нулем в конце?
Заранее благодарен.

Последний раз редактировалось rpy3uH; 21.11.2011 в 18:31.
Fedor666 вне форума Ответить с цитированием
Старый 21.11.2011, 17:56   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

а чем не устраивает стандартная функция RegSetValueEx?
PVOID Data - это указатель на сами данные которые будут сохранены в параметр (листок) реестра.
PVOID - это просто указатель, указатель на неизвестный тип данных
rpy3uH вне форума Ответить с цитированием
Старый 21.11.2011, 18:09   #3
Fedor666
Пользователь
 
Регистрация: 22.02.2010
Сообщений: 71
Подмигивание

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
а чем не устраивает стандартная функция RegSetValueEx?
Тем, что я не могу использовать эти библиотеки.
Цитата:
Сообщение от rpy3uH Посмотреть сообщение
PVOID - это просто указатель, указатель на неизвестный тип данных
А все дело в этом "неизвестный тип данных" и есть. Что это за хрень и с чем его едят? Как корректно из этого "неизвестный" выжать нормальную строку, которую можно анализировать и пр.? Может там какие указатели или счетчики или чего_там_Билу_в_башку_надуло? И абсолютно никаких справочных данных!
P.S.: это не вирус.

Последний раз редактировалось Fedor666; 21.11.2011 в 18:24.
Fedor666 вне форума Ответить с цитированием
Старый 21.11.2011, 18:29   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

PVOID Data это тоже самое что и const BYTE *lpData для функции RegSetValueEx.

Код:
LONG WINAPI RegSetValueEx(
  __in        HKEY hKey,
  __in_opt    LPCTSTR lpValueName,
  __reserved  DWORD Reserved,
  __in        DWORD dwType,
  __in_opt    const BYTE *lpData,
  __in        DWORD cbData
);
а вообще сначала научись пользоваться RegSetValueEx, а потом переходи ZwSetValueKey

Цитата:
Сообщение от Fedor666 Посмотреть сообщение
Подскажите, люди добрые, как из этого ... извлечь нормальную, обычную ANSI-строку с нулем в конце?
Функция ZwSetValueKey устанавливает значение, а не получает

Последний раз редактировалось rpy3uH; 21.11.2011 в 18:33.
rpy3uH вне форума Ответить с цитированием
Старый 21.11.2011, 19:01   #5
Fedor666
Пользователь
 
Регистрация: 22.02.2010
Сообщений: 71
Подмигивание

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
PVOID Data это тоже самое что и const BYTE *lpData для функции RegSetValueEx.
Для ядра выньдос все переконвертируется в UNICODE+какие-то дурные форматы и структуры.
Цитата:
Сообщение от rpy3uH Посмотреть сообщение
а вообще сначала научись пользоваться RegSetValueEx, а потом переходи ZwSetValueKey
Большое спасибо. Я НЕ МОГУ пользоваться этой библиотекой. Доступны только Native функции и kernel32.dll.
Цитата:
Сообщение от rpy3uH Посмотреть сообщение
Функция ZwSetValueKey устанавливает значение, а не получает
Я ее перехватываю.

Последний раз редактировалось Fedor666; 21.11.2011 в 19:04.
Fedor666 вне форума Ответить с цитированием
Старый 21.11.2011, 19:16   #6
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от Fedor666 Посмотреть сообщение
Большое спасибо. Я НЕ МОГУ пользоваться этой библиотекой. Доступны только Native функции и kernel32.dll.
никто не заставляет ей пользоваться в той программе которую ты пишешь.

разберись с ней отдельно, что, да как....напиши отдельную программку, в отладчике смотри что она делает. а потом как поймёшь принцип её работы переходи на native api. нет смысла тут всё разжёвывать

Цитата:
Сообщение от Fedor666 Посмотреть сообщение
Для ядра выньдос все переконвертируется в UNICODE+какие-то дурные форматы и структуры.
данные на которые указывает Data полностью зависят от параметра Type

Последний раз редактировалось rpy3uH; 21.11.2011 в 19:18.
rpy3uH вне форума Ответить с цитированием
Старый 22.11.2011, 05:57   #7
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Fedor666
Для UNICODE_STRING можно обойтись и без WideCharToMultiByte я, например использую макрос
Код:
du	macro string
local bslash
bslash = 0
	irpc c,<string>
	if bslash eq 0
		if '&c' eq "/"
	        bslash = 1
		elseif '&c'gt 127
		db ('&c'- 0B0h),4
		else
		dw '&c'
		endif
	else
           bslash = 0
           if '&c' eq "n"
           DW 0Dh,0Ah
           elseif '&c' eq "/"
           dw '/'
           elseif '&c' eq "r"
           dw 0Dh
           elseif '&c' eq "l"
           dw 0Ah
           elseif '&c' eq "s"
           dw 20h
           elseif '&c' eq "c"
           dw 3Bh
           elseif '&c' eq "t"
           dw 9
	   endif
	endif
	endm
	dw 0
endm
то есть сразу пишу
Код:
CAPTION: du <UNICODE STRING>
Mikl___ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Порнобаннеры и прочая лабуда .... gefest58 Безопасность, Шифрование 43 07.01.2011 18:55
SetMapMode и прочая чертовщина AnTe Win Api 5 02.10.2008 20:55