diff --git a/tests/test_token.py b/tests/test_token.py index e87aaa4..346512e 100644 --- a/tests/test_token.py +++ b/tests/test_token.py @@ -117,7 +117,14 @@ def test_token_duplicate(newtok): assert x.impersonation_level == i - +def test_set_thread_token(): + tok = windows.current_process.token + imp_tok = tok.duplicate(type=gdef.TokenImpersonation, impersonation_level=gdef.SecurityImpersonation) + cur_thread = windows.current_thread + try: + cur_thread.token = imp_tok # Test some impersonnation + finally: + cur_thread.token = None # def test_token_groups diff --git a/windows/winobject/service.py b/windows/winobject/service.py index 04cc7e8..7f406d8 100644 --- a/windows/winobject/service.py +++ b/windows/winobject/service.py @@ -5,6 +5,7 @@ from collections import namedtuple from contextlib import contextmanager from windows import utils +from windows import winproxy from windows.pycompat import int_types import windows.generated_def as gdef from windows.generated_def import * @@ -40,6 +41,8 @@ from windows.pycompat import basestring, urepr_encode class ServiceManager(utils.AutoHandle): """An object to query, list and explore services""" + _close_function = staticmethod(winproxy.CloseServiceHandle) + def __init__(self): self.enum_flags = None #: Lazy computed at first enum diff --git a/windows/winproxy/apis/advapi32.py b/windows/winproxy/apis/advapi32.py index 2b75b68..7e2a15c 100644 --- a/windows/winproxy/apis/advapi32.py +++ b/windows/winproxy/apis/advapi32.py @@ -47,7 +47,7 @@ def OpenThreadToken(ThreadHandle, DesiredAccess, OpenAsSelf, TokenHandle): @Advapi32Proxy() def SetThreadToken(Thread, Token): - if isinstance(Thread, (int, long)): + if isinstance(Thread, windows.pycompat.int_types): Thread = gdef.HANDLE(Thread) return SetThreadToken.ctypes_function(Thread, Token)