如何在Python中生成IntPtr?

如何在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

我一直在将powershell脚本翻译成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'>
这是一个我拥有的完整的粘贴箱
这是一张我正在复印的照片

编辑:下面是我试图在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
);