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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Список процессов с путями, Windows Seven! 64-bit 
V
    Опции темы
Attack
Дата 15.12.2009, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Демо, поправил, спасибо.
PM   Вверх
CodeMonkey
Дата 6.1.2010, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Любопытно, что этот код показывает все процессы только, если у вас есть права админа (под ограниченной учёткой никто вам DEBUG-привилегию не даст, а без неё вы сможете получить пути только к своим процессам).

В то же время Process Explorer показывает полные пути, даже будучи запущенным без админа. Может дело в 64-х разрядности?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Демо
Дата 7.1.2010, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(CodeMonkey @  6.1.2010,  20:03 Найти цитируемый пост)
В то же время Process Explorer показывает полные пути, даже будучи запущенным без админа. 



Попробовал на XP x86 под ограниченной учётной записью - не показывает пути.


--------------------
    
PM MAIL ICQ Skype   Вверх
CodeMonkey
Дата 7.1.2010, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Демо @  7.1.2010,  01:01 Найти цитируемый пост)
Попробовал на XP x86 под ограниченной учётной записью - не показывает пути

Да, я уже проверил тоже smile Видимо, так и должно быть.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
gonzales
Дата 29.3.2010, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



поясните тупому.
Код

if QueryFullProcessImageNameW(hP, 0, @Buffer, @S) > 0 then Result := String(Buffer);

у меня не преобразует buffer в строку, возвращает только первый символ, после которого идет #0. Как вернуть нормально всю строку?
--------------------
- мастер, мастер, запорол..., все четыре запорол!!!- я ж тебе только три давал!!!???- да я и образец запорол!!!!
PM MAIL   Вверх
CodeMonkey
Дата 30.3.2010, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(gonzales @  29.3.2010,  23:53 Найти цитируемый пост)
Как вернуть нормально всю строку? 

По порядку:
1. Оторвать руки писавшему.
2. Поправить of Char на of WideChar (т.к. вызывается wide-версия с "W").
3. Убрать String(Buffer), оставив просто Buffer.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Gwire
Дата 30.3.2010, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

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




Код

var WS:  WideString;
    S: Cardinal;
. . .
SetLength(WS, S);
S:= QueryFullProcessImageNameW(hP, 0, @WS[1], @S);
SetLength(WS, S);


PM MAIL   Вверх
malor
  Дата 8.11.2011, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Демо>>Привилегии на отладку получаешь? 

Вставил куски "Добавляем привилегию"/"Удаляем привилегию" из поста Attack к себе в прогу, убивающую explorer.exe.
Имеем :
Код
function KillExplorer(): boolean;
var
  FSnapshotHandle, ProcessHandle: THandle;
  FProcessEntry32: TProcessEntry32;
  S : String;
  res : Word;

  hSnapShot: THandle;
  ProcInfo: TProcessEntry32;
  hToken              :    THandle;
  SeDebugNameValue    :    Int64;
  tkp                 :    TOKEN_PRIVILEGES;
  ReturnLength        :    Cardinal;

begin

///   Добавляем привилегию   /////////////////////////////////////////////////////////////////////////////////
     if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then     ///
       exit;                                                                                               ///
                                                                                                           ///
     if not LookupPrivilegeValue( nil, 'SeDebugPrivilege', SeDebugNameValue ) then                         ///
     begin                                                                                                 ///
       CloseHandle(hToken);                                                                                ///
       exit;                                                                                               ///
     end;                                                                                                  ///
                                                                                                           ///
     tkp.PrivilegeCount:= 1;                                                                               ///
     tkp.Privileges[0].Luid := SeDebugNameValue;                                                           ///
     tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;                                                 ///
                                                                                                           ///
     AdjustTokenPrivileges(hToken, false, tkp, SizeOf(tkp), tkp, ReturnLength);                            ///
     if GetLastError() <> ERROR_SUCCESS  then exit;                                                        ///
//////////////////////////////////////////////////////////////////////////////////////////////////////////////

  Result := True;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
  Process32First(FSnapshotHandle, FProcessEntry32);
  repeat
    If (FProcessEntry32.szExeFile = TerminateName) then
    Begin
      //ShowMessage('Найден explorer.exe!');
      ProcessHandle := OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID);
      res := GetLastError();
      if ProcessHandle <> 0 then
        begin
          Result := Result and  TerminateProcess(ProcessHandle, 1);
          if (not Result) then
            MessageBox(0, Pchar(SysErrorMessage(GetLastError)), 'Error1', 0);
          CloseHandle(ProcessHandle);

        end
        else
          //MessageBox(0, Pchar(SysErrorMessage(GetLastError)), 'Error2', 0);
  End;
  Until not Process32Next(FSnapshotHandle, FProcessEntry32);

  CloseHandle(FSnapshotHandle);

///   Удаляем привилегию   ///////////////////////////////////////////////////////////
     tkp.Privileges[0].Attributes := 0;                                            ///
     AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(tkp), tkp, ReturnLength);    ///
     if GetLastError() <>  ERROR_SUCCESS then exit;                                ///
//////////////////////////////////////////////////////////////////////////////////////

end;


Пользователь, под которым работаю - с администраторскими правами.
Но GetLastError() вернула ERROR_ACCESS_DENIED.  Почему ?

WinXP SP3

Это сообщение отредактировал(а) malor - 8.11.2011, 15:01

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  RunExplorerProject.zip 85,67 Kb
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0791 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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