如何在Python中生成IntPtr?
我一直在将powershell脚本翻译成python,主要是为了学习如何做。我被困在这些线上:如何在Python中生成IntPtr?,python,.net,powershell,ctypes,intptr,Python,.net,Powershell,Ctypes,Intptr,我一直在将powershell脚本翻译成python,主要是为了学习如何做。我被困在这些线上: $lpTargetHandle = [IntPtr]::Zero $CallResult = [Kernel32]::DuplicateHandle( $ProcessInfo.hProcess, 0x4, [Kernel32]::GetCurrentProcess(), [ref]$lpTargetHandle, 0
$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'>
这是一个我拥有的完整的粘贴箱这是一张我正在复印的照片 编辑:下面是我试图在C中复制的相关函数
HANDLE hThread = nullptr;
DuplicateHandle(procInfo.hProcess, (HANDLE)0x4,
GetCurrentProcess(), &hThread, 0, FALSE, DUPLICATE_SAME_ACCESS);
return hThread;
根据,这是功能原型:
BOOL WINAPI DuplicateHandle(
_In_ HANDLE hSourceProcessHandle,
_In_ HANDLE hSourceHandle,
_In_ HANDLE hTargetProcessHandle,
_Out_ LPHANDLE lpTargetHandle,
_In_ DWORD dwDesiredAccess,
_In_ BOOL bInheritHandle,
_In_ DWORD dwOptions
);
在python中,
LPHANDLE
类型的等价物是wintypes.LPHANDLE在python示例中,您在哪里/如何定义ProcessInfo.hproces
?完整的代码放在帖子中有点长:您能解释一下您正在尝试做什么吗。神奇的数字是什么?@Kev可能是。这意味着有东西坏了。“如果函数失败,返回值为0(零)。若要获取扩展的错误信息,请调用GetLastError。”-这就是HANDLE()填充的内容(或任何4个字节,实际上,我甚至尝试放置一个强制转换((c_byte*4)(),指针(c_int))样式的指针。我遇到的问题是读取(内存位置)?(值)在我调用DuplicateHandle之后的lpTargetHandle的。@MikeTGW下面是DuplicateHandle函数的现成答案:
BOOL WINAPI DuplicateHandle(
_In_ HANDLE hSourceProcessHandle,
_In_ HANDLE hSourceHandle,
_In_ HANDLE hTargetProcessHandle,
_Out_ LPHANDLE lpTargetHandle,
_In_ DWORD dwDesiredAccess,
_In_ BOOL bInheritHandle,
_In_ DWORD dwOptions
);