Узнать имя процесса по ИД

Тема в разделе "WASM.NT.KERNEL", создана пользователем zoool, 21 мар 2008.

  1. zoool

    zoool New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2007
    Сообщения:
    412
    САБЖ
    Перехватываю ZwResumeThread
    PsGetCurrentProcess - узнаем ИД
    А теперь как в ядре по ИД определить имя процесса?
     
  2. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    На основе инфы от FOUR-F, шоб мы без него делали... )))
    Код (Text):
    1. UNICODE_STRING GetFullProcessName(HANDLE PID)
    2. {
    3.     PEPROCESS proc;
    4.     PSECTION Section;
    5.     PSEGMENT Segment;
    6.     PCONTROL_AREA ControlArea;
    7.     PFILE_OBJECT FileObject;
    8.     PsLookupProcessByProcessId(PID,&proc);
    9.     if(proc->SectionObject)
    10.     {
    11.         Section = proc->SectionObject;
    12.         Segment = Section->Segment;
    13.         ControlArea = Segment->ControlArea;
    14.         FileObject = ControlArea->FilePointer;
    15.         DbgPrint("Section FileName: %S\n",FileObject->FileName.Buffer);
    16.     }
    17.         ObDereferenceObject((PVOID)proc);
    18.         return FileObject->FileName;
    19. }
     
  3. zoool

    zoool New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2007
    Сообщения:
    412
    респект!!!
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    NtQueryInformationProcess(InfoClass=ProcessVolumeInformation)
     
  5. Sav1or

    Sav1or New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2008
    Сообщения:
    52
    как вариант
    Код (Text):
    1. NTSTATUS GetProcessList(ULONG Id)
    2. {
    3.    
    4.     ULONG Buffer=0x8000;
    5.     LPVOID pBuffer=NULL;
    6.     NTSTATUS status;
    7.     char  ProcName[256];
    8.     PSYSTEM_PROCESS_INFORMATION ProcInfo;
    9.     do
    10.     {
    11.         pBuffer = ExAllocatePool(NonPagedPool,Buffer);
    12.         if(pBuffer==NULL)
    13.         {
    14.             DbgPrint("Error! ExAllocate!");
    15.             return status;
    16.         }
    17.         status = ZwQuerySystemInformation(SystemProcessesAndThreadsInformation,
    18.                                           pBuffer,
    19.                                           Buffer,
    20.                                           NULL);
    21.         if(status==STATUS_INFO_LENGTH_MISMATCH)
    22.         {
    23.             ExFreePool(pBuffer);
    24.             Buffer *= 2;
    25.         }
    26.         else if(!NT_SUCCESS(status))
    27.         {
    28.             ExFreePool(pBuffer);
    29.             return status;
    30.         }
    31.     } while(status==STATUS_INFO_LENGTH_MISMATCH);
    32.     ProcInfo = (PSYSTEM_PROCESS_INFORMATION)pBuffer;
    33.     for(;;)
    34.     {
    35.         LPWSTR szProcessName = ProcInfo->ProcessName.Buffer;
    36.         if(ProcInfo->ProcessId == Id)
    37.         {
    38.             wcstombs(ProcName,szProcessName,256);
    39.             DbgPrint("Process found!");
    40.             DbgPrint("Process: %s",ProcName);
    41.             break;
    42.         }
    43.         if(ProcInfo->NextEntryDelta==0)
    44.         {
    45.             break;
    46.         }
    47.      ProcInfo = (PSYSTEM_PROCESS_INFORMATION)(((PUCHAR)ProcInfo)+ ProcInfo->NextEntryDelta);
    48.     }
    49.  
    50.     ExFreePool(pBuffer);
    51.     return status;
    52. }
     
  6. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    PsGetProcessImageFileName