Я переводил скрипт powershell в python, в основном, чтобы узнать, как это сделать. Я застрял на этих линиях здесь:Как сделать IntPtr в Python?
$lpTargetHandle = [IntPtr]::Zero
$CallResult = [Kernel32]::DuplicateHandle(
$ProcessInfo.hProcess, 0x4,
[Kernel32]::GetCurrentProcess(),
[ref]$lpTargetHandle, 0, $false, 0x00000002)
echo $lpTargetHandle
Это то, что я имею в Python:
lpTargetHandle = HANDLE()
CallResult = kernel32.DuplicateHandle(ProcessInfo.hProcess, 0x4,
kernel32.GetCurrentProcess(),byref(lpTargetHandle), 0, False, 0x00000002)
print(lpTargetHandle)
Вот выход я получаю:
>>> lpTargetHandle = HANDLE()
>>> CallResult = kernel32.DuplicateHandle(ProcessInfo.hProcess, 0x4, kernel32.GetCurrentProcess(),byref(lpTargetHandle), 0, False, 0x00000002)
>>>
>>> print(lpTargetHandle)
c_void_p(None)
>>> lpTargetHandle.value
>>> type(lpTargetHandle.value)
<type 'NoneType'>
Что должно чтобы произойти, указатель lpTargetHandle должен вернуть обратно номер идентификатора потока, но я просто получаю Nones. Я видел, что IntPtr обрабатывается в IronPython, но моя цель - изучить ванильный питон. Мои включает в себя следующие:
from ctypes import * from ctypes.wintypes import *
Как вы дублировать IntPtr в обычном Python (CPython)?
В частности, как вы пишете $var = [IntPtr]::Zero
в python?
Я также попытался это, но он не работает:
tid = POINTER(c_int)
num = c_int(0)
addr = addressof(num)
ptr = cast(addr,tid)
CallResult = = kernel32.DuplicateHandle(ProcessInfo.hProcess, 0x4,
kernel32.GetCurrentProcess(),ptr, 0, False, 0x00000002)
Вот Pastebin полного python code У меня есть
Вот Pastebin из powershell function я работаю на тиражирование.
Edit: Вот соответствующая функция, которую я пытаюсь дублировать в C
HANDLE hThread = nullptr;
DuplicateHandle(procInfo.hProcess, (HANDLE)0x4,
GetCurrentProcess(), &hThread, 0, FALSE, DUPLICATE_SAME_ACCESS);
return hThread;
Где/как вы определяете 'ProcessInfo.hProcess' в примерах Python? – Kev
Полный код немного длинный, чтобы положить в сообщение: http://pastebin.com/GzftL7Rh – MikeTGW
Можете ли вы объяснить немного больше о том, что вы пытаетесь сделать. Какое волшебное число '0x4'? – Kev