![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| seculorum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 10.8.2011 Репутация: нет Всего: нет |
Имеется приложение. Приложение должно выполнять следующие задачи:
-парсить файл и находить номера LBA(реализованно). -обращаться к окну другого приложения(вводить в поле найденный номер LBA) и пожимать сочетание горячих клавиш ctrl+G, до тех пор, пока надпись в панели статус бара другого приложения не примет требуемое значение. При выполнении программы не срабатывают функции SendMessage() для сообщений WM_SETTEXT (для передачи текста в TEdit), не срабатывает сочетание горячих клавиш, а также не происходит чтения строк из панели статус бара. При просмотре отладчиком видно что хэндлы всех необходимых компонентов находятся правильно (хэндлы найденные функциями в программе совпадают с хендлами полученными про помощи WinSigth32). Приложение правильно выполняет свои функции при проверке работы с окнами Notepad(изменение хэндлов для проверки работы функции). Код всего приложения представлен ниже:
Если возможно прошу объяснить мне возможные причины некорректной работы программы и пути их преодоления. Желательно с изменениями к данному коду. Это сообщение отредактировал(а) seculorum - 10.8.2011, 16:35 |
|||
|
||||
| bass |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 5.8.2007 Репутация: 2 Всего: 2 |
В вопросе стоит что опен процес не работаеть ..... Если да то скорей всего привелегий нехватаеть его открыть..... TOKEN_PRIVILEGES Priv, PrivOld; DWORD cbPriv = sizeof(PrivOld); HANDLE hToken; if (!OpenThreadToken(GetCurrentThread(),TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES,FALSE, &hToken)) { if (GetLastError() != ERROR_NO_TOKEN){return ;} if (!OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES,&hToken)){return ;} } Priv.PrivilegeCount = 1; Priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &Priv.Privileges[0].Luid); if (!AdjustTokenPrivileges(hToken, FALSE, &Priv, sizeof(Priv),&PrivOld, &cbPriv)) {CloseHandle(hToken);return ;} if (GetLastError() == ERROR_NOT_ALL_ASSIGNED) {CloseHandle(hToken);return ;} |
||||
|
|||||
| seculorum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 10.8.2011 Репутация: нет Всего: нет |
Спасибо, будем тестить
Это сообщение отредактировал(а) seculorum - 12.8.2011, 08:34 |
|||
|
||||
| Estranged |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 30.8.2010 Репутация: 3 Всего: 3 |
HANDLE h = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, 0, d);
DWORD dwLastErr = GetLastError (); Какой код возвращает? |
|||
|
||||
| seculorum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 10.8.2011 Репутация: нет Всего: нет |
GetLastError возвращает 2. Метод предложенный bass'ом заработал, но не во всех случаях... Если программа запускается не под админом, все еще нет возможности доступа к требуемым полям... И прежние ошибки... Появилась идея вставить в код сплоит, который позволит запускать программу под правами администратора, ибо как показали исследования 3 дней функции для таких трюков отсутствуют... Спасибо всем за содействие. Тему считаю закрытой...
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |