Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как выключить комп. ? (Windows), Вызов из DLL не работает :( 
:(
    Опции темы
Gershkovich
Дата 10.4.2006, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Всем привет!

Не могу программно выключить комп.

Сделал все как тут написано
http://www.cracklab.ru/pro/faq.php?pg=3192

Правда я реализовал это на ассемблере, но это сути не меняет -
все сводится к вызову АПИ ф-ций

Так вот , если компилю в EXE то все прикрасно
работает.

Если компилю в ДЛЛ, то падает на вызове AdjustTokenPrivileges
Т.е. не падает, возвращает NULL - т.е. какая-то ошибка.
Соответственно ExitWindowsEx не работает.


В чем может быть проблема ?

Заранее спасибо.

PM MAIL   Вверх
_hunter
Дата 10.4.2006, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



а GetLastError что возвращает?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Gershkovich
Дата 11.4.2006, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Возвращает "The handle is invalid"
Вроде по коду с хэндлами все в порядке -- в EXE ведь все работает.


Это сообщение отредактировал(а) Gershkovich - 11.4.2006, 10:33
PM MAIL   Вверх
_hunter
Дата 11.4.2006, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



значит не все в порядке.
показывай код


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Gershkovich
Дата 11.4.2006, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Все заработало,
но повода для радости нет - я не понимаю причин

С хэндлом я разобрался - просто было опечатка

Ошибка была в следующем:

При таком расположении данных в дата-сенгменте
вылетает на вызове AdjustTokenPrivileges
с ошибкой "Invalid access to memory location"
Код

section '.data' data readable writeable
datadump db  1169 dup (0)
[B]hToken dd 0
priveleges TOKEN_PRIVILEGES, <>[/B]



Стоит мне поменять местами переменные, то все работает :
Код

section '.data' data readable writeable
[B]hToken dd 0
priveleges TOKEN_PRIVILEGES, <>[/B]
datadump db  1169 dup (0)



Вот сама процедура:

Код

proc powerControl _action

    mov esi, [_action]

    invoke GetCurrentProcess

    invoke OpenProcessToken, eax, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken
    cmp eax, NULL
    jnz qwerty0
    stdcall ShowLastError, 0
    ret

qwerty0:

    invoke LookupPrivilegeValue, NULL, szShut, priveleges.Privileges0.Luid
    cmp eax, NULL
    jnz qwerty1
    stdcall ShowLastError, 0
    ret

qwerty1:

    mov [priveleges.PrivilegeCount], 1
    mov [priveleges.Privileges0.Attributes], SE_PRIVILEGE_ENABLED

    invoke AdjustTokenPrivileges, [hToken], FALSE, priveleges, 0, NULL, 0
    ;invoke CloseHandle, [hToken]

    cmp eax, NULL
    jnz qwerty
    stdcall ShowLastError, 0
    ret

qwerty:

    invoke ExitWindowsEx, esi, NULL
    xor eax, eax
    ret
endp



Где грабли ?
Заранее спасибо.

PM MAIL   Вверх
_hunter
Дата 11.4.2006, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



фиг его знает. вопросы по асм-у в соотв. разделе лучше задавать...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
SergeCpp
Дата 21.4.2006, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

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



Проблема, возможно, в том, что неинициализированная priveleges попадает в другую секцию (проверяли?)

Ещё стоит выровнять hToken и priveleges в первом случае (align поставить после datadump)   

Это сообщение отредактировал(а) SergeCpp - 21.4.2006, 08:16
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




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


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

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