Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
Эксперт по электронике
6510 / 3140 / 331
Регистрация: 28.10.2011
Сообщений: 12,338
Записей в блоге: 7

Структура unicode_string

13.06.2012, 21:11. Показов 3566. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите разобраться со структурой UNICODE_STRING. Вот ее код:
C
1
2
3
4
5
6
7
8
typedef struct _LSA_UNICODE_STRING {
    USHORT Length;
    USHORT MaximumLength;
#ifdef MIDL_PASS
    [size_is(MaximumLength/2), length_is(Length/2)]
#endif // MIDL_PASS
    PWSTR  Buffer;
} LSA_UNICODE_STRING, *PLSA_UNICODE_STRING;
Нужно переписать ее на другой язык программирования и с этим есть проблемы.

1. Что за константа MIDL_PASS и в каких случаях она будет присутствовать в коде?
2. Как понять строку [size_is(MaximumLength/2), length_is(Length/2)]?

Гугл не помог мне в этом вопросе.

Добавлено через 5 минут
Есть так же такая разновидность структуры:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
typedef struct _UNICODE_STRING {
 
 USHORT Length;
 
 USHORT MaximumLength;
 
#ifdef MIDL_PASS
 
 [size_is(MaximumLength / 2), length_is((Length) / 2) ] USHORT * Buffer;
 
#else // MIDL_PASS
 
 PWSTR Buffer;
 
#endif // MIDL_PASS
 
} UNICODE_STRING;
Какая из них правильная, хз.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.06.2012, 21:11
Ответы с готовыми решениями:

Как записать "UNICODE_STRING" в файл?
Запись в файл через ofstream, при попытке записи UNICODE_STRING через << получаю ошибку: Как обойти эту проблему?

В текстовом файле структура – информация о компьютерах. Структура с полями: название, стоимость.
Ребят, помогите пожалуйста, 29 июня экзамен по "Основы программирования",кто сколько сможет сделать задач, тем всей группой поставим...

Структура «База», сущности «Универсам» и «Продукты», структура «Товар»
1. Создать структуру «База», включающую не менее 3 полей. 2. Создать сущности «Универсам» и «Продукты» описанной структуры. 3. Создать...

4
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
13.06.2012, 21:18
http://msdn.microsoft.com/en-u... s.85).aspx
ну т.е. MIDL_PASS определена, когда файл обрабатывается специальным компилятором.
MIDL это наверно Microsoft Interface Definition Language или что-то похожее. На код под этим макросом думаю можно забить и рассматривать эту структуру как описано тут:
http://msdn.microsoft.com/en-u... s.85).aspx
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
13.06.2012, 21:23
смешно..
это вообще описание COM-структуры
тут нужно курить эти атрибуты
http://msdn.microsoft.com/en-u... s.85).aspx
я честно говоря никогда не пользовался такими атрибутами
0
Эксперт по электронике
6510 / 3140 / 331
Регистрация: 28.10.2011
Сообщений: 12,338
Записей в блоге: 7
13.06.2012, 21:40  [ТС]
Ладно. На самом деле проблема не то что в этой структуре, просто думал может из-за этого блока условной компиляции.
Мы имеем структуру DRIVER_OBJECT.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
typedef struct _DRIVER_OBJECT { 
     CSHORT Type; 
     CSHORT Size; 
 
     PDEVICE_OBJECT DeviceObject; 
     ULONG Flags; 
 
     PVOID DriverStart; 
     ULONG DriverSize; 
     PVOID DriverSection; 
     PDRIVER_EXTENSION DriverExtension; 
 
     UNICODE_STRING DriverName; 
 
     PUNICODE_STRING HardwareDatabase; 
 
     PFAST_IO_DISPATCH FastIoDispatch;
 
     PDRIVER_INITIALIZE DriverInit; 
     PDRIVER_STARTIO DriverStartIo; 
     PDRIVER_UNLOAD DriverUnload; 
     PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1]; 
 
 } DRIVER_OBJECT;
Я эту структуру в месте с UNICODE_STRING перевел на другой ЯП.
При компиляции под x86 систему все работает нормально, но на x64 системе - баги!
Похоже что вся проблема в типах переменных, точнее занимаемой ими памяти.
Я правильно понимаю что поля типа CSHORT занимают 2 байта независимо от разрядности ОС.
Поля, типа ULONG занимают 4 байта независимо от разрядности ОС.
Поля, начинающиеся с P являются указателями и занимают 4 байта в x86 и 8 байт в x64.

У меня получилось что в 32 битном коде, размер структуры равен 168 байт, а в 64-битном коде - 320 байт.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
13.06.2012, 22:02
Цитата Сообщение от locm Посмотреть сообщение
Поля, типа ULONG занимают 4 байта независимо от разрядности ОС.
long в 64-битных *NIX-системах 8 байт занимает. В 64-битной винде вроде бы 4, но кто их, мелкомягких разберёт?..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.06.2012, 22:02
Помогаю со студенческими работами здесь

структура array предназначена для хранения строки типа char. Структура имеет функцию, которая позволяет изменить символ
структура array предназначена для хранения строки типа char. Структура имеет функцию, которая позволяет изменить символ с указанным...

Структура DateTime, битовая структура
Условие: Структура содержит информацию о дате и времени некоторого события: struct datetime { unsigned short Year; // год ...

Структура, доступная из всех файлов проекта ("глобальная" структура)
Есть четыре структуры (body, gun, enemy, st), описанные в main.cpp. К main.cpp подключен хедер save.h, в котором имеется функция void...

Структура и вложенная структура
Подскажите как сделать задание, такого рода Иванов Математика 80 История 60 Физика 67 ...

Тип структура. Описать, используя тип структура
Описать, используя тип структура, данные на учеников (фамилия, улица, дом, квартира). Составить программу, определяющую, сколько учеников...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru