Сейчас на форуме: tyns777, zds, JustLife (+4 невидимых)

 eXeL@B —› Программирование —› Проблема с ZwQueryInformationProcess
Посл.ответ Сообщение


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 16 марта 2010 21:59
· Личное сообщение · #1

Всем доброго вечера (утро добрым не бывает:s1. Собственно, вышеупомянутая функция при попытке получить ProcessBasicInformation возвращает ошибку 0xC0000004. Увеличиваю буфер - ничего не помогает. В аттаче - исполняемый файл, который не хочет работать. В чём, собственно, бока? Всю жизнь юзал эту Native API на делфях, а тут, в кои то веки решил на С что-то накодить - и вот! Как быть?

b20f_16.03.2010_CRACKLAB.rU.tgz - Minidumper.exe

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 16 марта 2010 22:06 · Поправил: Veliant
· Личное сообщение · #2

под Win XP SP3 без ошибок все отработалось

PS.
--del... туплю под вечер)




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 16 марта 2010 22:09
· Личное сообщение · #3

Хм, как так? У меня тож ХР SP3 - и никак не хочет работать Как такое может быть?

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 16 марта 2010 22:37
· Личное сообщение · #4

На Server 2003 SP2 не фурычит. (STATUS_INFO_LENGTH_MISMATCH)
Code:
  1. BOOL QueryProcessInformation(   DWORD pid,
  2.                                 PROCESSINFOCLASS infoEnum,
  3.                                 void * pBuffer,
  4.                                 unsigned cbBuffer )
  5. {
  6.     HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION, FALSE, pid );
  7.     if ( !hProcess )
  8.         return FALSE;
  9.  
  10.     // Zero the input buffer that NtQueryInformationProcess sees
  11.     memset( pBuffer, 0, cbBuffer );
  12.  
  13.     DWORD retLen;
  14.     int retValue;
  15.  
  16.     retValue = NtQueryInformationProcess(   hProcess, infoEnum,
  17.                                             pBuffer, cbBuffer, &retLen );
  18.  
  19.     CloseHandle( hProcess );
  20.  
  21.     if ( retValue < 0 ) // NtQueryInformationProcess returns a negative
  22.         return FALSE; // value if it fails
  23.  
  24.     return TRUE;
  25. }

в Вашем случае вызов:
Code:
  1. void ProcessBasicInformation(DWORD pid )
  2. {
  3.     PROCESS_BASIC_INFORMATION pbi;
  4.     if ( QueryProcessInformation(   pid, ProcessBasicInformation,
  5.                                     &pbi, sizeof(pbi)) )
  6.     {
  7.       printf( "ExitStatus: %X", pbi.ExitStatus );
  8.       printf( "PebBaseAddress: %08X", pbi.PebBaseAddress );
  9.       printf( "AffinityMask: %08X", pbi.AffinityMask );
  10.       printf( "BasePriority: %X", pbi.BasePriority );
  11.       printf( "UniqueProcessId: %X", pbi.UniqueProcessId );
  12.       printf( "InheritedFromProcessId: %X", pbi.InheritedFromUniqueProcessId );
  13.     }
  14. }


-----
продавец резиновых утёнков




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 16 марта 2010 22:37 · Поправил: Clerk
· Личное сообщение · #5

ARCHANGEL
Размер буфера должен быть точно задан, не больше не меньше. Хотябы в сурцы заглянули, дизасм или потрейсили, быстрее будет
Code:
  1.     case ProcessBasicInformation:
  2.  
  3.         if (ProcessInformationLength != (ULONG) sizeof(PROCESS_BASIC_INFORMATION)) {
  4.             return STATUS_INFO_LENGTH_MISMATCH;
  5.         }





Ранг: 105.6 (ветеран), 36thx
Активность: 0.10
Статус: Участник

Создано: 16 марта 2010 22:49
· Личное сообщение · #6

WinXP SP3 тоже не работает...
Функция GetCurrentProcess возвращает -1 и поэтому в ZwQueryInformationProcess возвращает ошибку, т.к. указатель на процесс равен FFFFFFFF .
Может нужен Id процесса?




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 16 марта 2010 22:50 · Поправил: ARCHANGEL
· Личное сообщение · #7

Clerk
Да, точно - всё запахало! Спасибо! Только поставил sizeof(PROCESS_BASIC_INFORMATION) и всё

Dart Sergius
Не, идентификатор - это не туда.

-----
Stuck to the plan, always think that we would stand up, never ran.



 eXeL@B —› Программирование —› Проблема с ZwQueryInformationProcess
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати