Следующий код хорошо работает в Python 2:
import ctypes
def test():
OpenSCManager = ctypes.windll.advapi32.OpenSCManagerA
CloseServiceHandle = ctypes.windll.advapi32.CloseServiceHandle
handle = OpenSCManager(None, None, 0)
print(hex(handle))
assert handle, ctypes.GetLastError()
assert CloseServiceHandle(handle), ctypes.GetLastError()
test()
Это не работает в Python 3:
0x40d88f90
Traceback (most recent call last):
File ".\test1.py", line 12, in <module>
test()
File ".\test1.py", line 10, in test
assert CloseServiceHandle(handle), ctypes.GetLastError()
AssertionError: 6
6 означает недопустимый дескриптор.
Кажется, что кроме того, дескрипторы, полученные в Python 2, имеют меньшие числа, например 0x100ffc0. Это не что-то конкретное с CloseServiceHandle
. Этот дескриптор не может использоваться ни с какой сервисной функцией.
Обе версии Python являются 64-битными Windows Python.