OpenProcess и csrss

Тема в разделе "WASM.WIN32", создана пользователем ProfessorNimnull, 1 июн 2007.

  1. ProfessorNimnull

    ProfessorNimnull New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2007
    Сообщения:
    26
    Доброе время суток, многоуважаемые программисты. Возникла у меня такая проблема. По pid надо определить имя процесса. Для этого использую следующий код

    Код (Text):
    1. hProcess = OpenProcess ( PROCESS_QUERY_INFORMATION | PROCESS_VW_READ, FALSE, ProcessId )
    2. if ( hProcess )
    3. {
    4.      if ( ( ::GetProcessImageFileName ( hProcess, cProcessFileName, sizeof ( cProcessFileName ) ) ) != NULL )
    5.      {
    6.             return cProcessFileName;
    7.      }
    8.  
    9. }
    Но для процесса csrss.exe OpenProcess возвращает ошибку, GetLastError возвращает 5 - Отказ в доступе?
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    SeDebugPrivilege?
     
  3. ProfessorNimnull

    ProfessorNimnull New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2007
    Сообщения:
    26
    прога запускается под админом, а вроде у админа есть эта привилегия
     
  4. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Нет, привилегию необходимо подрубать ручками.
     
  5. pushick

    pushick New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2007
    Сообщения:
    95
    use RtlAdjustPrivilege
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    или LookupPrivilegeValue / AdjustTokenPrivileges
     
  7. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Господи... да код добавляющий привилегии валяется на каждом углу.
    Тем более, мне кажется что автор не спрашивал как именно они подрубаются.
     
  8. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    ProfessorNimnull
    Код (Text):
    1. // @cl /EHsc /MD pid2name.cpp advapi32.lib psapi.lib && del *.obj
    2.  
    3. #define WIN32_LEAN_AND_MEAN
    4. #include <windows.h>
    5. #include <psapi.h>
    6. #include <tchar.h>
    7. #include <iostream>
    8. #include <string>
    9. #include <vector>
    10. #include <memory>
    11.  
    12. typedef std::basic_string< TCHAR > tstring;
    13. template < class char_type >
    14. struct obj_holder;
    15.  
    16. template <>
    17. struct obj_holder< char > {
    18.   static std::ostream & out;
    19. };
    20.  
    21. template <>
    22. struct obj_holder< wchar_t > {
    23.   static std::wostream & out;
    24. };
    25.  
    26. std::ostream  & obj_holder< char >::out    = std::cout;
    27. std::wostream & obj_holder< wchar_t >::out = std::wcout;
    28.  
    29. #define tcout obj_holder<TCHAR>::out
    30.  
    31. const std::auto_ptr<tstring> pid2name(unsigned pid) {
    32.   HANDLE process;
    33.   std::auto_ptr<tstring> res(new tstring(_T("")));
    34.  
    35.   enum { ACCESS = PROCESS_QUERY_INFORMATION | PROCESS_VM_READ };
    36.  
    37.   process = ::OpenProcess(ACCESS, FALSE, pid);
    38.   if (process) {
    39.     std::vector<TCHAR> buf(MAX_PATH, 0);
    40.     if (::GetProcessImageFileName(process, &buf[0], buf.size())!=NULL) {
    41.       res->assign(&buf[0], buf.size());
    42.     }
    43.     CloseHandle(process);
    44.   }
    45.  
    46.   return res;
    47. }
    48.  
    49. int _tmain(int argc, TCHAR ** argv) {
    50.   if (argc<=1) {
    51.     tcout << _T("usage: pid2name [pid]") << std::endl;
    52.     return 0;
    53.   }
    54.   unsigned pid = _ttoi(argv[1]);
    55.   tcout << *pid2name(pid) << std::endl;
    56.   return 0;
    57. }
    58.  
    59. /* [EOF] */
    Работает как надо!
     
  9. pushick

    pushick New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2007
    Сообщения:
    95
    ...и сsrss.exe пошлет тебя на три буквы без SeDebugPrivilege
     
  10. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    pushick
    Пардон, затупил. Поправил.