如何在Python中生成IntPtr?

2024-09-23 06:34:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在把powershell脚本翻译成python,主要是为了学习如何做。我被困在这里了:

$lpTargetHandle = [IntPtr]::Zero
$CallResult = [Kernel32]::DuplicateHandle(
              $ProcessInfo.hProcess, 0x4,
              [Kernel32]::GetCurrentProcess(),
              [ref]$lpTargetHandle, 0, $false, 0x00000002)

echo $lpTargetHandle

这是我在python中看到的:

^{pr2}$

以下是我得到的输出:

>>> 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指针应该返回线程ID号,但是我得到的是none。我已经看到IntPtr是用IronPython处理的,但我的目标是学习普通python。我的包括:
from ctypes import * from ctypes.wintypes import *

如何在普通Python(CPython)中复制IntPtr?

具体来说,如何用python编写$var = [IntPtr]::Zero?在

我也试过这个,但没用:

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)

这是一个装满了python code的纸篓
这是我正在复制的powershell function的一个贴纸盒。在

编辑:这是我试图在C语言中复制的相关函数

 HANDLE hThread = nullptr;  
 DuplicateHandle(procInfo.hProcess, (HANDLE)0x4, 
     GetCurrentProcess(), &hThread, 0, FALSE, DUPLICATE_SAME_ACCESS);
 return hThread;

Tags: falsevaluehandlezeropowershellkernel32callresultintptr
1条回答
网友
1楼 · 发布于 2024-09-23 06:34:51

根据Windows documentation,这是函数原型:

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

相关问题 更多 >