![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
PSID pSid;
PSID_IDENTIFIER_AUTHORITY SidNTAuth; /* что-то...*/ // Хотим узнать autority SidNTAuth = GetSidIdentifierAuthority(pSid); Нам нужен SECURITY_NT_AUTHORITY, поэтому нужно сравнить результат. Но как? Ведь SidNTAuth - указатель на структуру, а SECURITY_NT_AUTHORITY - это определённый набор элементов массива: #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5} и ещё: typedef struct _SID_IDENTIFIER_AUTHORITY { BYTE Value[6]; } SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY; // структура с массивом Вот как мне сделать сравнение? Приведением типов? |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Используя memcmp, сравнивай 2 участка памяти длиной по 6 байт - по адресу структуры, и по адресу, где лежит то "с чем сравнивать".
-------------------- ![]() |
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
mr.DUDA, можно, конечно, но хотелось бы более понятно и наглядно сделать. Есть ли другие, более "легальные", способы?
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Сделай свой тип, производный от SID_IDENTIFIER_AUTHORITY, в котором добавь поддержку операторов "==" и "!=".
-------------------- ![]() |
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
mr.DUDA, а это как?
|
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
А может есть какая API функция, сравнивающая и выдающая результат?
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Можно так:
-------------------- ![]() |
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
mr.DUDA, а operator - это что? Это зарезервированное слово? По какому принципу так определять операции? Я не умею, а хотел бы научиться.
|
|||
|
||||
| mr.DUDA |
|
||||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Во, наладил VS.NET (хехе
Сравнивай так:
Фишка здесь в том, что нельзя сравнить напрямую с SECURITY_NT_AUTHORITY, т.к. этот макрос - просто список инициализирующих значений для структуры. Поэтому сначала нужно присвоить SECURITY_NT_AUTHORITY какой-нибудь переменной (в примере это SidCmp), а потом можно сравнивать. Обрати внимание на то, что набор операторов позволяет сравнивать: - структуру со структурой, - структуру с указателем на структуру, - и указатель на структуру со структурой. Насчёт вопроса:
боюсь, что это уже вопрос для отдельного топика. Но если кратко и по существу - оператор есть функция особого вида, задача которой состоит в выполнении заданной операции над одним (двумя, тремя) аргументами, в том месте программы, где стоит соответствующий оператор (равно, плюс, "a?b:c", ">>" и т.д.), и типы аргументов совпадают с теми, что описаны в заголовке оператора (если сделать "operator== (TYPE1 arg1, TYPE2 arg2)", то действие этого оператора будет распространяться только на аргументы типа TYPE1 и TYPE2 слева и справа от "=="). Это сообщение отредактировал(а) mr.DUDA - 28.9.2003, 17:14 -------------------- ![]() |
||||||
|
|||||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
Тут поступило предложение воспользоваться memcpy...
|
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
BYTE ScurityNtAuthArray[6] = {0, 0, 0, 0, 0, 5};
/* что-то */ if (memcmp(pSidNTAuth->Value, ScurityNtAuthArray, 6) != 0) { return false; } вот и всё... и зачем было так сложнить, а? Что скажешь, mr.DUDA? Но спасибо тебе большое за помощь. |
|||
|
||||
| mr.DUDA |
|
||||||||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Сам просил же:
ИМХО, проще один раз описАть 6 операторов и юзать потом простой "==", чем каждый раз писАть одно и то же "memcpy". А твой
ничем не лучше моего
-------------------- ![]() |
||||||||||
|
|||||||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |