ERROR_BAD_LENGTH при вызове Process32First в Windows 7 - PullRequest
6 голосов
/ 29 июня 2011

Я только что попытался отозвать какой-то старый код из Windows XP, который генерирует список всех запущенных процессов, но он не удался в Windows 7. Прежде чем продолжить, вот код:

#include <windows.h>
#include <tlhelp32.h>

int main()
{
    HANDLE hSnap, hTemp;
    PROCESSENTRY32 pe;

    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if(Process32First(hSnap, &pe)) {
        do {
            ...
            }
        } while(Process32Next(hSnap, &pe));
    }
    ...
}

Я проверил, какойСбой функции, и оказалось, что это Process32First.GetLastError () вернул 24: «ERROR_BAD_LENGTH» Я не могу понять, в чем проблема.Есть предложения?

Ответы [ 2 ]

9 голосов
/ 29 июня 2011

Из MSDN: http://msdn.microsoft.com/en-us/library/ms684834(VS.85).aspx

Вызывающее приложение должно установить для члена dwSize PROCESSENTRY32 размер структуры в байтах.

Чтобы получить информацию о других процессах, записанных в том же снимке, используйте функцию Process32Next.


EDIT: Возможно, вы захотите сделать что-то вроде этого:

PROCESSENTRY32 pe = {0};
pe.dwSize = sizeof(PROCESSENTRY32);
1 голос
/ 27 марта 2013

В tlhelp32.h есть ошибка, когда вызывается в WIN64:

Если где-то есть директива пакета #pragma перед включением tlhelp32.h, она сгенерирует структуру PROCESSENTRY32 с невернойразмер.Тогда может произойти все что угодно, включая Process32First сбои или даже сбои.

Попробуйте включить tlhelp32.h следующим образом:

 #pragma pack(push,8) /* Work around a bug in tlhelp32.h in WIN64, which generates the wrong structure if packing has been changed */<br/>
 #include &lt;tlhelp32.h&gt;<br/>
 #pragma pack(pop)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...