| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Не срабатывает функция OpenProcess |
| Автор: seculorum 10.8.2011, 16:33 | ||
| Имеется приложение. Приложение должно выполнять следующие задачи: -парсить файл и находить номера LBA(реализованно). -обращаться к окну другого приложения(вводить в поле найденный номер LBA) и пожимать сочетание горячих клавиш ctrl+G, до тех пор, пока надпись в панели статус бара другого приложения не примет требуемое значение. При выполнении программы не срабатывают функции SendMessage() для сообщений WM_SETTEXT (для передачи текста в TEdit), не срабатывает сочетание горячих клавиш, а также не происходит чтения строк из панели статус бара. При просмотре отладчиком видно что хэндлы всех необходимых компонентов находятся правильно (хэндлы найденные функциями в программе совпадают с хендлами полученными про помощи WinSigth32). Приложение правильно выполняет свои функции при проверке работы с окнами Notepad(изменение хэндлов для проверки работы функции). Код всего приложения представлен ниже:
Если возможно прошу объяснить мне возможные причины некорректной работы программы и пути их преодоления. Желательно с изменениями к данному коду. |
| Автор: bass 12.8.2011, 03:52 | ||||
В вопросе стоит что опен процес не работаеть ..... Если да то скорей всего привелегий нехватаеть его открыть..... 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 12.8.2011, 08:11 |
| Спасибо, будем тестить |
| Автор: Estranged 13.8.2011, 18:27 |
| HANDLE h = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, 0, d); DWORD dwLastErr = GetLastError (); Какой код возвращает? |
| Автор: seculorum 13.8.2011, 18:44 |
| GetLastError возвращает 2. Метод предложенный bass'ом заработал, но не во всех случаях... Если программа запускается не под админом, все еще нет возможности доступа к требуемым полям... И прежние ошибки... Появилась идея вставить в код сплоит, который позволит запускать программу под правами администратора, ибо как показали исследования 3 дней функции для таких трюков отсутствуют... Спасибо всем за содействие. Тему считаю закрытой... |