![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| SlaUr |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 18.9.2003 Репутация: 3 Всего: 5 |
pOsOl (спасибо ему) подсказал как получить SID текущего пользователя.
В своем примере перевод из SID в String он осуществил при помощи билиотеки advapi32.dll вот код :
но дело в том что в 9x виндах этой библиотеки нет , и я попытался (по примеру из Delphist faq (там пример кстати рабочий) загружать библиотеку динамически . Но мой код вызывает ошибку ,не могу понять вчем тут дело . Вот полный код получившегося теста:
В чем тут ошибка ? или (что лучше) может все таки кто нибудь переведет функию перевода SID в String c Си на Delphi Вот этот код:
|
||||||
|
|||||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 21 Всего: 61 |
А есть ли в Delphi GetSidSubAuthorityCount(), GetSidSubAuthority() и т. п.?
|
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 6 Всего: 23 |
Pakshin A. S.
Функции содержатся в Windows.h, соответственно, если написать uses Windows, то работать должны. |
|||
|
||||
| SlaUr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 18.9.2003 Репутация: 3 Всего: 5 |
NiJazz Для меня проблема вообще перевести код с Си,например полная загадка wsprintf или char *p; это что p:pchar и еще что-то у меня не получалось с переводом.
|
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 6 Всего: 23 |
char *p - это указатель на строку. Аналог PChar, кажется. Точнее, PChar - аналог того.
wsprintf - функция, форматирующая строку. Судя по описанию, служит для помощи в работе с буфером. Только как и для чего, трудно понять за 3 минуты. Но вот я попробовал поработать с ней:
В результате в s кидается значение s2. Но если в аргументах s1 и s2 поменять местами, то в s запишется значение s1. Тут ты должен сориентироваться исходя из самой задачи. А вот тебе ссылочка ещё: http://www.delphikingdom.ru/asp/viewitem.a...ury/wsprint.htm Удачи! |
|||
|
||||
| p0s0l |
|
||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Когда-то уже переводил этот пример на Delphi (а это из MSDN'а пример), откопал:
Добавлено @ 11:43
В 9x вообще нет никакого Security API, SID-ов и т.п., в том числе и функции LookupAccountSid, так что непонятно, как у тебя прога вообще запустилась... -------------------- С уважением, г-н Посол. |
||||
|
|||||
| SlaUr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 18.9.2003 Репутация: 3 Всего: 5 |
p0s0l Прога запускается (показывается только UserName)
|
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
GetUserName потому что есть во всех виндах... Ну а что ты будешь делать с SID-функциями в 9x ? -------------------- С уважением, г-н Посол. |
|||
|
||||
| SlaUr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 18.9.2003 Репутация: 3 Всего: 5 |
p0s0l
Вобще то мне этот SID нужен только для того чтобы писать в реестр в раздел HKEY_USERS моя процедура должна под 2000,XP писать в раздел HKEY_USERS\_SID_\SOFTWARE.... а в 9x виндах в раздел HKEY_USERS\.DEFAULT\SOFTWARE.... Это нужно для моей "Меню игр"Ссылка потому что например Warcraft III имено так и делает (а менюшка должна по идее иметь средства для инсталляции любой игры) |
|||
|
||||
| SlaUr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 18.9.2003 Репутация: 3 Всего: 5 |
p0s0l Пробую компилировать : На sid.Revision - ошибка .
Это сообщение отредактировал(а) SlaUr - 5.4.2004, 14:59 |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
В var-ах объявил sid : PSID; ?
sid - это то, что возвращает LookupAccountSid...
Тогда вообще забудь про эту фигню. Есть ведь ключ HKEY_CURRENT_USER - копия ветки HKEY_USERS\_SID_ где _SID_ - SID текущего юзера. Т.е. если создашь такой ключ: HKEY_CURRENT_USER\Software\SlaUrTurboMegaSoftware\SuperPuperProgram то одновременно "создастся" такой ключ: HKEY_USERS\_SID_\Software\SlaUrTurboMegaSoftware\SuperPuperProgram В 9x вместо _SID_ - имя текущего юзера вроде, т.к. там нет сид'ов... -------------------- С уважением, г-н Посол. |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
А можешь вообще писать в HKEY_LOCAL_MACHINE\Software - это для всех юзеров будет.
Или же: если ты в 9x пишешь в HKEY_USERS\.Default, то в 2k/XP есть точно такой же путь... -------------------- С уважением, г-н Посол. |
|||
|
||||
| SlaUr |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 18.9.2003 Репутация: 3 Всего: 5 |
Вы меня не совсем поняли Я не могу выбрать куда мне записывать .
В моем меню игр существует специальный формат файла с расширением .regs он по формату не отличается от стандартного reg только добавлены строки например $long$ заменяется на путь где находится игра. При иследовании Warcraft III я обнаружил что он по разному пишет в реестр под 9x и NT (см месагу выше )(не знаю зачем она так делает - действительно есть же HKEY_CURRENT_USER) вот я и хочу добавить еще один формат в .regs - $sid$ И тогда меню игр при встрече этой строки будет заменять на SID в NT и '.DEFAULT' в 9x . . Вот пример того как может выглядеть файл .regs:
p0s0l
Да конечно Это сообщение отредактировал(а) SlaUr - 5.4.2004, 17:22 |
||||
|
|||||
| SlaUr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 18.9.2003 Репутация: 3 Всего: 5 |
В общем проблема сейчас остается только с Sid.Revision (остальной код
приведенный p0s0l работает (спасибо ему еще раз) Посмотрел в 2000 и XP везде этот параметр=1 ,может пока програмисты из microsoft не поменяли этот параметр забить на это и просто вставлять '1' или все же кто-нибудь подскажет как правильно определить этот Revision. Это сообщение отредактировал(а) SlaUr - 5.4.2004, 17:13 |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Ну да, Revision щас 1. Если сменится Revision, то остальная часть построения строкового Sid будет неправильной скорее всего (поэтому предпочтительнее та специальная функция)...
А с SID я понял - в Windows.pas он объявлен просто как Pointer, а я юзал JediWinAPI, там он расписан по-подробнее. Можешь сам добавить это:
Хотя если дело чисто в Revision, то можешь вместо строки: s := 'S-' + IntToStr(sid.Revision) + '-'; написать такую: s := 'S-' + IntToStr(PByte(sid)^) + '-'; -------------------- С уважением, г-н Посол. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |