Как вызвать VirtualAllocEx WinAPI в python? - PullRequest
0 голосов
/ 17 апреля 2020

Здравствуйте, я следовал методу Процесс миграции бедного человека , чтобы узнать о процессе миграции. Но всякий раз, когда я открываю процесс, он возвращает мне 0 в качестве дескриптора процесса.

>>> kernel32 = cdll.kernel32
>>> kernel32.OpenProcess()
0
>>> kernel32.OpenProcess('PROCESS_ALL_ACCESS', 0,13036)
0

1 Ответ

1 голос
/ 17 апреля 2020

Первый параметр - это число, а не строка. PROCESS_ALL_ACCESS варьируется в зависимости от целевой системы Windows. См. эту ссылку MSDN для констант и обсуждения ее значения (цитируется ниже):

PROCESS_ALL_ACCESS Все возможные права доступа для объекта процесса. Windows Server 2003 и Windows XP: размер флага PROCESS_ALL_ACCESS увеличен на Windows Server 2008 и Windows Vista. Если приложение, скомпилированное для Windows Server 2008 и Windows Vista, выполняется на Windows Server 2003 или Windows XP, флаг PROCESS_ALL_ACCESS слишком велик, и функция, задающая этот флаг, завершается ошибкой с ERROR_ACCESS_DENIED. Чтобы избежать этой проблемы, укажите минимальный набор прав доступа, необходимый для операции. Если необходимо использовать PROCESS_ALL_ACCESS, установите для _WIN32_WINNT минимальную операционную систему, на которую ориентировано ваше приложение (например, #define _WIN32_WINNT _WIN32_WINNT_WINXP). Для получения дополнительной информации см. Использование Windows Заголовки.

PROCESS_CREATE_PROCESS (0x0080) Требуется для создания процесса.

PROCESS_CREATE_THREAD (0x0002) Требуется для создания потока.

PROCESS_DUP_HANDLE (0x0040) Требуется для дублирования дескриптора с использованием DuplicateHandle.

PROCESS_QUERY_INFORMATION (0x0400) Требуется для получения определенной информации о процессе, такой как его токен, код выхода и класс приоритета (см. OpenProcessToken).

PROCESS_QUERY_LIMITED_INFORMATION (0x1000) Требуется для получения определенной информации о процессе (см. GetExitCodeProcess, GetPriorityClass, IsProcessInJob, QueryFullProcessImageName). Дескриптор, имеющий право доступа PROCESS_QUERY_INFORMATION, автоматически предоставляется PROCESS_QUERY_LIMITED_INFORMATION. Windows Server 2003 и Windows XP: это право доступа не поддерживается.

PROCESS_SET_INFORMATION (0x0200) Требуется для установки определенной информации о процессе, например, его класс приоритета (см. SetPriorityClass).

PROCESS_SET_QUOTA (0x0100) Требуется для установки пределов памяти с помощью SetProcessWorkingSetSize.

PROCESS_SUSPEND_RESUME (0x0800) * Требуется * приостановить или возобновить процесс 10 *. 1024 * PROCESS_TERMINATE (0x0001) Требуется для завершения процесса с помощью TerminateProcess.

PROCESS_VM_OPERATION (0x0008) Требуется для выполнения операции с адресным пространством процесса (см. VirtualProtectEx и WriteProcessMemory).

PROREAD_ (0x0010) Требуется для чтения памяти в процессе с использованием ReadProcessMemory.

PROCESS_VM_WRITE (0x0020) Требуется для записи в память в процессе с помощью WriteProcessMemory.

SYNCHRON IZE (0x00100000L) Требуется для ожидания завершения процесса с использованием функций ожидания.

...