Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OpenProcess возвращает ACCESS_DENIED, на одних компах нормально, на др. - нет 
V
    Опции темы
borisbn
Дата 27.5.2010, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 6
Всего: 135



Доброго времени суток всем.
Столкнулся со следующей проблемой: есть функция, прибивающая процесс по имени. На одних компьютерах всё отрабатывает, на других функция OpenProcess возвращает NULL. И там и там Windows XP.
Код

bool RemoteLauncher::killExe( const QString & killName )
{
    HANDLE hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
    if ( INVALID_HANDLE_VALUE == hProcessSnap )
    {
        return false;
    }
    bool found = false;
    PROCESSENTRY32 pe32 = {0};
    pe32.dwSize = sizeof( PROCESSENTRY32 );
    if ( Process32First( hProcessSnap, &pe32 ) )
    { 
        do
        {
            if ( QString::fromUtf16( pe32.szExeFile ).toLower() == killName.toLower() )
            {
                HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID );
                if ( 0 == hProcess )
                {
                    qDebug() << QString( "0 == hProcess. lE = %1" ).arg( GetLastError() ); // <--- тут пишет "0 == hProcess. lE = 5. 5 - это ACCESS_DENIED
                    return false;
                }
                if ( TerminateProcess( hProcess, 0 ) == 0 )
                {
                    qDebug() << QString( "TerminateProcess( hProcess, 0 ) == 0. lE = %1" ).arg( GetLastError() );
                    return false;
                }
                found = true;
            }
        }
        while ( false == found && Process32Next( hProcessSnap, &pe32 ) );
    }
    CloseHandle( hProcessSnap );
    if ( false == found )
    {
        return false;
    }
    return true;
}

Захожу на все компьютеры под администратором. Могу прибить exe-шник из диспетчера задач и при помощи taskkill.
Самое интересное, что эта программа написана на MSVC 2008. У меня была раньше программа, написанная на MSVC 6.0, делающая то же самое (я даже Си-шный код для новой программы из неё и взял), так вот старая программа отрабатывает на всех компьютерах.

Help кто сталкивался, please. Thx.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Dem_max
Дата 27.5.2010, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



а GetLastError() для кого ?


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
GremlinProg
Дата 27.5.2010, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(Dem_max @  27.5.2010,  12:07 Найти цитируемый пост)
а GetLastError() для кого ?

Цитата

возвращает ACCESS_DENIED

Цитата(OpenProcess Function @  MSDN)

To open a handle to another local process and obtain full access rights, you must enable the SeDebugPrivilege privilege. For more information, see Changing Privileges in a Token.

некоторые привелегии надо открывать даже под админом, хотя вот на счет SeDebugPrivilege не проверял

Добавлено через 1 минуту и 40 секунд
хотя возможно стоит просто открыть с правами PROCESS_TERMINATE, а не PROCESS_ALL_ACCESS


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
12usver12
Дата 27.5.2010, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



это из-за привилегий 100%, когда-то давно экспериментировал - под админом на одном кампе получалось читать память процесса на другом нет, после debug привилегии все шло пучком 
PM MAIL   Вверх
borisbn
Дата 27.5.2010, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 6
Всего: 135



GremlinProg, 
Цитата(GremlinProg @  27.5.2010,  10:14 Найти цитируемый пост)
хотя возможно стоит просто открыть с правами PROCESS_TERMINATE, а не PROCESS_ALL_ACCESS

сработало !!! Большое спасибо. +1.
тему закрыл.
хотя... непонятно, почему PROCESS_ALL_ACCESS не работал ?

Это сообщение отредактировал(а) borisbn - 27.5.2010, 13:10


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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