diff --git a/CHANGELOG b/CHANGELOG index 357d5cc..3ae4779 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -28,5 +28,15 @@ Since 0.2: Since 0.3: - * Rewrote pe_parse to minimize closure (allowing the refcount to dell all ref to WinProcess when the debugger detach it) - * Fix debugger.detach / handling on exit_process \ No newline at end of file + * Rewrote pe_parse to minimize closure (allowing the refcount to del all ref to WinProcess when the debugger detach it) + * Fix debugger.detach / handling on exit_process + + +Since 0.35: + + * WinProcess.get_mapped_filename can now raise on non-standard error (like: ERROR_TRANSACTION_NOT_ACTIVE) + * WinProcess.get_mapped_filename now use GetMappedFilenameW (returning an unicode string) + * CertificateContext is replace by Certificate + * CertificateContext was a PPCERT_CONTEXT. Certificate is a CERT_CONTEXT (not a pointer anymore) + * EHCERTSTORE renamed to CertificateStore + * added windows.pipe \ No newline at end of file diff --git a/TODO b/TODO index 358ee72..c8b02e1 100644 --- a/TODO +++ b/TODO @@ -1,5 +1,9 @@ TODO: +=== CRITICAL BEFORE 0.4 === + +====== + - DBG - Verif multiple bp at same place.. - Verif multiple pending at same place @@ -22,14 +26,28 @@ TODO: - remotectypes - pretty sur I can get rid of PointerToStruct64/PointerToStruct32 - - Some test/doc on windows.system.handles + + - winutils + - some stuff in winutils.py are not documented. + - Fix/test/refactor API + doc + + - winobject\exception.py + - large part could be rewritten with ctypes-generation extended-def + + - add wonobject/window.py + wonobject/kernobj.py to System() + - Some test/doc on both - wintrust doc: add : https://blogs.msdn.microsoft.com/winsdk/2016/01/05/why-cryptcatadmincalchashfromfilehandle-fails-with-a-seemingly-unexpected-error-code/ + - COM: + - test https://msdn.microsoft.com/en-us/library/vs/alm/hh846255(v=vs.85).aspx + + Documentation * verif samples + * windows.bits RESSOURCE * read http://www.codeproject.com/Articles/18975/Listing-Used-Files \ No newline at end of file diff --git a/ctypes_generation/generate.py b/ctypes_generation/generate.py index 07632be..33fa57d 100644 --- a/ctypes_generation/generate.py +++ b/ctypes_generation/generate.py @@ -414,7 +414,7 @@ class StructureDocGenerator(NoTemplatedGenerator): STRUCT_NAME_SEPARATOR = "'" def copy_template(self): - self.emitline(".. currentmodule:: windows.generated_def") + self.emitline(".. currentmodule:: windows.generated_def.winstructs") self.emitline("") def generate(self): diff --git a/docs/build/html/.buildinfo b/docs/build/html/.buildinfo index ebb2996..c3d5366 100644 --- a/docs/build/html/.buildinfo +++ b/docs/build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: fb4e1f3623837487174af5c6fcf17f8a +config: f35f9043ea6890b6e69b39627cc2cac6 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/build/html/_modules/ctypes.html b/docs/build/html/_modules/ctypes.html new file mode 100644 index 0000000..6efaf5f --- /dev/null +++ b/docs/build/html/_modules/ctypes.html @@ -0,0 +1,633 @@ + + + + + + + + ctypes — PythonForWindows 0.3 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for ctypes

+"""create and manipulate C data types in Python"""
+
+import os as _os, sys as _sys
+
+__version__ = "1.1.0"
+
+from _ctypes import Union, Structure, Array
+from _ctypes import _Pointer
+from _ctypes import CFuncPtr as _CFuncPtr
+from _ctypes import __version__ as _ctypes_version
+from _ctypes import RTLD_LOCAL, RTLD_GLOBAL
+from _ctypes import ArgumentError
+
+from struct import calcsize as _calcsize
+
+if __version__ != _ctypes_version:
+    raise Exception("Version number mismatch", __version__, _ctypes_version)
+
+if _os.name in ("nt", "ce"):
+    from _ctypes import FormatError
+
+DEFAULT_MODE = RTLD_LOCAL
+if _os.name == "posix" and _sys.platform == "darwin":
+    # On OS X 10.3, we use RTLD_GLOBAL as default mode
+    # because RTLD_LOCAL does not work at least on some
+    # libraries.  OS X 10.3 is Darwin 7, so we check for
+    # that.
+
+    if int(_os.uname()[2].split('.')[0]) < 8:
+        DEFAULT_MODE = RTLD_GLOBAL
+
+from _ctypes import FUNCFLAG_CDECL as _FUNCFLAG_CDECL, \
+     FUNCFLAG_PYTHONAPI as _FUNCFLAG_PYTHONAPI, \
+     FUNCFLAG_USE_ERRNO as _FUNCFLAG_USE_ERRNO, \
+     FUNCFLAG_USE_LASTERROR as _FUNCFLAG_USE_LASTERROR
+
+"""
+WINOLEAPI -> HRESULT
+WINOLEAPI_(type)
+
+STDMETHODCALLTYPE
+
+STDMETHOD(name)
+STDMETHOD_(type, name)
+
+STDAPICALLTYPE
+"""
+
+def create_string_buffer(init, size=None):
+    """create_string_buffer(aString) -> character array
+    create_string_buffer(anInteger) -> character array
+    create_string_buffer(aString, anInteger) -> character array
+    """
+    if isinstance(init, (str, unicode)):
+        if size is None:
+            size = len(init)+1
+        buftype = c_char * size
+        buf = buftype()
+        buf.value = init
+        return buf
+    elif isinstance(init, (int, long)):
+        buftype = c_char * init
+        buf = buftype()
+        return buf
+    raise TypeError(init)
+
+def c_buffer(init, size=None):
+##    "deprecated, use create_string_buffer instead"
+##    import warnings
+##    warnings.warn("c_buffer is deprecated, use create_string_buffer instead",
+##                  DeprecationWarning, stacklevel=2)
+    return create_string_buffer(init, size)
+
+_c_functype_cache = {}
+def CFUNCTYPE(restype, *argtypes, **kw):
+    """CFUNCTYPE(restype, *argtypes,
+                 use_errno=False, use_last_error=False) -> function prototype.
+
+    restype: the result type
+    argtypes: a sequence specifying the argument types
+
+    The function prototype can be called in different ways to create a
+    callable object:
+
+    prototype(integer address) -> foreign function
+    prototype(callable) -> create and return a C callable function from callable
+    prototype(integer index, method name[, paramflags]) -> foreign function calling a COM method
+    prototype((ordinal number, dll object)[, paramflags]) -> foreign function exported by ordinal
+    prototype((function name, dll object)[, paramflags]) -> foreign function exported by name
+    """
+    flags = _FUNCFLAG_CDECL
+    if kw.pop("use_errno", False):
+        flags |= _FUNCFLAG_USE_ERRNO
+    if kw.pop("use_last_error", False):
+        flags |= _FUNCFLAG_USE_LASTERROR
+    if kw:
+        raise ValueError("unexpected keyword argument(s) %s" % kw.keys())
+    try:
+        return _c_functype_cache[(restype, argtypes, flags)]
+    except KeyError:
+        class CFunctionType(_CFuncPtr):
+            _argtypes_ = argtypes
+            _restype_ = restype
+            _flags_ = flags
+        _c_functype_cache[(restype, argtypes, flags)] = CFunctionType
+        return CFunctionType
+
+if _os.name in ("nt", "ce"):
+    from _ctypes import LoadLibrary as _dlopen
+    from _ctypes import FUNCFLAG_STDCALL as _FUNCFLAG_STDCALL
+    if _os.name == "ce":
+        # 'ce' doesn't have the stdcall calling convention
+        _FUNCFLAG_STDCALL = _FUNCFLAG_CDECL
+
+    _win_functype_cache = {}
+    def WINFUNCTYPE(restype, *argtypes, **kw):
+        # docstring set later (very similar to CFUNCTYPE.__doc__)
+        flags = _FUNCFLAG_STDCALL
+        if kw.pop("use_errno", False):
+            flags |= _FUNCFLAG_USE_ERRNO
+        if kw.pop("use_last_error", False):
+            flags |= _FUNCFLAG_USE_LASTERROR
+        if kw:
+            raise ValueError("unexpected keyword argument(s) %s" % kw.keys())
+        try:
+            return _win_functype_cache[(restype, argtypes, flags)]
+        except KeyError:
+            class WinFunctionType(_CFuncPtr):
+                _argtypes_ = argtypes
+                _restype_ = restype
+                _flags_ = flags
+            _win_functype_cache[(restype, argtypes, flags)] = WinFunctionType
+            return WinFunctionType
+    if WINFUNCTYPE.__doc__:
+        WINFUNCTYPE.__doc__ = CFUNCTYPE.__doc__.replace("CFUNCTYPE", "WINFUNCTYPE")
+
+elif _os.name == "posix":
+    from _ctypes import dlopen as _dlopen
+
+from _ctypes import sizeof, byref, addressof, alignment, resize
+from _ctypes import get_errno, set_errno
+from _ctypes import _SimpleCData
+
+def _check_size(typ, typecode=None):
+    # Check if sizeof(ctypes_type) against struct.calcsize.  This
+    # should protect somewhat against a misconfigured libffi.
+    from struct import calcsize
+    if typecode is None:
+        # Most _type_ codes are the same as used in struct
+        typecode = typ._type_
+    actual, required = sizeof(typ), calcsize(typecode)
+    if actual != required:
+        raise SystemError("sizeof(%s) wrong: %d instead of %d" % \
+                          (typ, actual, required))
+
+class py_object(_SimpleCData):
+    _type_ = "O"
+    def __repr__(self):
+        try:
+            return super(py_object, self).__repr__()
+        except ValueError:
+            return "%s(<NULL>)" % type(self).__name__
+_check_size(py_object, "P")
+
+class c_short(_SimpleCData):
+    _type_ = "h"
+_check_size(c_short)
+
+class c_ushort(_SimpleCData):
+    _type_ = "H"
+_check_size(c_ushort)
+
+class c_long(_SimpleCData):
+    _type_ = "l"
+_check_size(c_long)
+
+class c_ulong(_SimpleCData):
+    _type_ = "L"
+_check_size(c_ulong)
+
+if _calcsize("i") == _calcsize("l"):
+    # if int and long have the same size, make c_int an alias for c_long
+    c_int = c_long
+    c_uint = c_ulong
+else:
+    class c_int(_SimpleCData):
+        _type_ = "i"
+    _check_size(c_int)
+
+    class c_uint(_SimpleCData):
+        _type_ = "I"
+    _check_size(c_uint)
+
+class c_float(_SimpleCData):
+    _type_ = "f"
+_check_size(c_float)
+
+class c_double(_SimpleCData):
+    _type_ = "d"
+_check_size(c_double)
+
+class c_longdouble(_SimpleCData):
+    _type_ = "g"
+if sizeof(c_longdouble) == sizeof(c_double):
+    c_longdouble = c_double
+
+if _calcsize("l") == _calcsize("q"):
+    # if long and long long have the same size, make c_longlong an alias for c_long
+    c_longlong = c_long
+    c_ulonglong = c_ulong
+else:
+    class c_longlong(_SimpleCData):
+        _type_ = "q"
+    _check_size(c_longlong)
+
+    class c_ulonglong(_SimpleCData):
+        _type_ = "Q"
+    ##    def from_param(cls, val):
+    ##        return ('d', float(val), val)
+    ##    from_param = classmethod(from_param)
+    _check_size(c_ulonglong)
+
+class c_ubyte(_SimpleCData):
+    _type_ = "B"
+c_ubyte.__ctype_le__ = c_ubyte.__ctype_be__ = c_ubyte
+# backward compatibility:
+##c_uchar = c_ubyte
+_check_size(c_ubyte)
+
+class c_byte(_SimpleCData):
+    _type_ = "b"
+c_byte.__ctype_le__ = c_byte.__ctype_be__ = c_byte
+_check_size(c_byte)
+
+class c_char(_SimpleCData):
+    _type_ = "c"
+c_char.__ctype_le__ = c_char.__ctype_be__ = c_char
+_check_size(c_char)
+
+class c_char_p(_SimpleCData):
+    _type_ = "z"
+    if _os.name == "nt":
+        def __repr__(self):
+            if not windll.kernel32.IsBadStringPtrA(self, -1):
+                return "%s(%r)" % (self.__class__.__name__, self.value)
+            return "%s(%s)" % (self.__class__.__name__, cast(self, c_void_p).value)
+    else:
+        def __repr__(self):
+            return "%s(%s)" % (self.__class__.__name__, cast(self, c_void_p).value)
+_check_size(c_char_p, "P")
+
+class c_void_p(_SimpleCData):
+    _type_ = "P"
+c_voidp = c_void_p # backwards compatibility (to a bug)
+_check_size(c_void_p)
+
+class c_bool(_SimpleCData):
+    _type_ = "?"
+
+from _ctypes import POINTER, pointer, _pointer_type_cache
+
+def _reset_cache():
+    _pointer_type_cache.clear()
+    _c_functype_cache.clear()
+    if _os.name in ("nt", "ce"):
+        _win_functype_cache.clear()
+    # _SimpleCData.c_wchar_p_from_param
+    POINTER(c_wchar).from_param = c_wchar_p.from_param
+    # _SimpleCData.c_char_p_from_param
+    POINTER(c_char).from_param = c_char_p.from_param
+    _pointer_type_cache[None] = c_void_p
+    # XXX for whatever reasons, creating the first instance of a callback
+    # function is needed for the unittests on Win64 to succeed.  This MAY
+    # be a compiler bug, since the problem occurs only when _ctypes is
+    # compiled with the MS SDK compiler.  Or an uninitialized variable?
+    CFUNCTYPE(c_int)(lambda: None)
+
+try:
+    from _ctypes import set_conversion_mode
+except ImportError:
+    pass
+else:
+    if _os.name in ("nt", "ce"):
+        set_conversion_mode("mbcs", "ignore")
+    else:
+        set_conversion_mode("ascii", "strict")
+
+    class c_wchar_p(_SimpleCData):
+        _type_ = "Z"
+
+    class c_wchar(_SimpleCData):
+        _type_ = "u"
+
+    def create_unicode_buffer(init, size=None):
+        """create_unicode_buffer(aString) -> character array
+        create_unicode_buffer(anInteger) -> character array
+        create_unicode_buffer(aString, anInteger) -> character array
+        """
+        if isinstance(init, (str, unicode)):
+            if size is None:
+                size = len(init)+1
+            buftype = c_wchar * size
+            buf = buftype()
+            buf.value = init
+            return buf
+        elif isinstance(init, (int, long)):
+            buftype = c_wchar * init
+            buf = buftype()
+            return buf
+        raise TypeError(init)
+
+# XXX Deprecated
+def SetPointerType(pointer, cls):
+    if _pointer_type_cache.get(cls, None) is not None:
+        raise RuntimeError("This type already exists in the cache")
+    if id(pointer) not in _pointer_type_cache:
+        raise RuntimeError("What's this???")
+    pointer.set_type(cls)
+    _pointer_type_cache[cls] = pointer
+    del _pointer_type_cache[id(pointer)]
+
+# XXX Deprecated
+def ARRAY(typ, len):
+    return typ * len
+
+################################################################
+
+
+class CDLL(object):
+    """An instance of this class represents a loaded dll/shared
+    library, exporting functions using the standard C calling
+    convention (named 'cdecl' on Windows).
+
+    The exported functions can be accessed as attributes, or by
+    indexing with the function name.  Examples:
+
+    <obj>.qsort -> callable object
+    <obj>['qsort'] -> callable object
+
+    Calling the functions releases the Python GIL during the call and
+    reacquires it afterwards.
+    """
+    _func_flags_ = _FUNCFLAG_CDECL
+    _func_restype_ = c_int
+
+    def __init__(self, name, mode=DEFAULT_MODE, handle=None,
+                 use_errno=False,
+                 use_last_error=False):
+        self._name = name
+        flags = self._func_flags_
+        if use_errno:
+            flags |= _FUNCFLAG_USE_ERRNO
+        if use_last_error:
+            flags |= _FUNCFLAG_USE_LASTERROR
+
+        class _FuncPtr(_CFuncPtr):
+            _flags_ = flags
+            _restype_ = self._func_restype_
+        self._FuncPtr = _FuncPtr
+
+        if handle is None:
+            self._handle = _dlopen(self._name, mode)
+        else:
+            self._handle = handle
+
+    def __repr__(self):
+        return "<%s '%s', handle %x at %x>" % \
+               (self.__class__.__name__, self._name,
+                (self._handle & (_sys.maxint*2 + 1)),
+                id(self) & (_sys.maxint*2 + 1))
+
+    def __getattr__(self, name):
+        if name.startswith('__') and name.endswith('__'):
+            raise AttributeError(name)
+        func = self.__getitem__(name)
+        setattr(self, name, func)
+        return func
+
+    def __getitem__(self, name_or_ordinal):
+        func = self._FuncPtr((name_or_ordinal, self))
+        if not isinstance(name_or_ordinal, (int, long)):
+            func.__name__ = name_or_ordinal
+        return func
+
+class PyDLL(CDLL):
+    """This class represents the Python library itself.  It allows
+    accessing Python API functions.  The GIL is not released, and
+    Python exceptions are handled correctly.
+    """
+    _func_flags_ = _FUNCFLAG_CDECL | _FUNCFLAG_PYTHONAPI
+
+if _os.name in ("nt", "ce"):
+
+    class WinDLL(CDLL):
+        """This class represents a dll exporting functions using the
+        Windows stdcall calling convention.
+        """
+        _func_flags_ = _FUNCFLAG_STDCALL
+
+    # XXX Hm, what about HRESULT as normal parameter?
+    # Mustn't it derive from c_long then?
+    from _ctypes import _check_HRESULT, _SimpleCData
+    class HRESULT(_SimpleCData):
+        _type_ = "l"
+        # _check_retval_ is called with the function's result when it
+        # is used as restype.  It checks for the FAILED bit, and
+        # raises a WindowsError if it is set.
+        #
+        # The _check_retval_ method is implemented in C, so that the
+        # method definition itself is not included in the traceback
+        # when it raises an error - that is what we want (and Python
+        # doesn't have a way to raise an exception in the caller's
+        # frame).
+        _check_retval_ = _check_HRESULT
+
+    class OleDLL(CDLL):
+        """This class represents a dll exporting functions using the
+        Windows stdcall calling convention, and returning HRESULT.
+        HRESULT error values are automatically raised as WindowsError
+        exceptions.
+        """
+        _func_flags_ = _FUNCFLAG_STDCALL
+        _func_restype_ = HRESULT
+
+class LibraryLoader(object):
+    def __init__(self, dlltype):
+        self._dlltype = dlltype
+
+    def __getattr__(self, name):
+        if name[0] == '_':
+            raise AttributeError(name)
+        dll = self._dlltype(name)
+        setattr(self, name, dll)
+        return dll
+
+    def __getitem__(self, name):
+        return getattr(self, name)
+
+    def LoadLibrary(self, name):
+        return self._dlltype(name)
+
+cdll = LibraryLoader(CDLL)
+pydll = LibraryLoader(PyDLL)
+
+if _os.name in ("nt", "ce"):
+    pythonapi = PyDLL("python dll", None, _sys.dllhandle)
+elif _sys.platform == "cygwin":
+    pythonapi = PyDLL("libpython%d.%d.dll" % _sys.version_info[:2])
+else:
+    pythonapi = PyDLL(None)
+
+
+if _os.name in ("nt", "ce"):
+    windll = LibraryLoader(WinDLL)
+    oledll = LibraryLoader(OleDLL)
+
+    if _os.name == "nt":
+        GetLastError = windll.kernel32.GetLastError
+    else:
+        GetLastError = windll.coredll.GetLastError
+    from _ctypes import get_last_error, set_last_error
+
+    def WinError(code=None, descr=None):
+        if code is None:
+            code = GetLastError()
+        if descr is None:
+            descr = FormatError(code).strip()
+        return WindowsError(code, descr)
+
+if sizeof(c_uint) == sizeof(c_void_p):
+    c_size_t = c_uint
+    c_ssize_t = c_int
+elif sizeof(c_ulong) == sizeof(c_void_p):
+    c_size_t = c_ulong
+    c_ssize_t = c_long
+elif sizeof(c_ulonglong) == sizeof(c_void_p):
+    c_size_t = c_ulonglong
+    c_ssize_t = c_longlong
+
+# functions
+
+from _ctypes import _memmove_addr, _memset_addr, _string_at_addr, _cast_addr
+
+## void *memmove(void *, const void *, size_t);
+memmove = CFUNCTYPE(c_void_p, c_void_p, c_void_p, c_size_t)(_memmove_addr)
+
+## void *memset(void *, int, size_t)
+memset = CFUNCTYPE(c_void_p, c_void_p, c_int, c_size_t)(_memset_addr)
+
+def PYFUNCTYPE(restype, *argtypes):
+    class CFunctionType(_CFuncPtr):
+        _argtypes_ = argtypes
+        _restype_ = restype
+        _flags_ = _FUNCFLAG_CDECL | _FUNCFLAG_PYTHONAPI
+    return CFunctionType
+
+_cast = PYFUNCTYPE(py_object, c_void_p, py_object, py_object)(_cast_addr)
+def cast(obj, typ):
+    return _cast(obj, obj, typ)
+
+_string_at = PYFUNCTYPE(py_object, c_void_p, c_int)(_string_at_addr)
+def string_at(ptr, size=-1):
+    """string_at(addr[, size]) -> string
+
+    Return the string at addr."""
+    return _string_at(ptr, size)
+
+try:
+    from _ctypes import _wstring_at_addr
+except ImportError:
+    pass
+else:
+    _wstring_at = PYFUNCTYPE(py_object, c_void_p, c_int)(_wstring_at_addr)
+    def wstring_at(ptr, size=-1):
+        """wstring_at(addr[, size]) -> string
+
+        Return the string at addr."""
+        return _wstring_at(ptr, size)
+
+
+if _os.name in ("nt", "ce"): # COM stuff
+    def DllGetClassObject(rclsid, riid, ppv):
+        try:
+            ccom = __import__("comtypes.server.inprocserver", globals(), locals(), ['*'])
+        except ImportError:
+            return -2147221231 # CLASS_E_CLASSNOTAVAILABLE
+        else:
+            return ccom.DllGetClassObject(rclsid, riid, ppv)
+
+    def DllCanUnloadNow():
+        try:
+            ccom = __import__("comtypes.server.inprocserver", globals(), locals(), ['*'])
+        except ImportError:
+            return 0 # S_OK
+        return ccom.DllCanUnloadNow()
+
+from ctypes._endian import BigEndianStructure, LittleEndianStructure
+
+# Fill in specifically-sized types
+c_int8 = c_byte
+c_uint8 = c_ubyte
+for kind in [c_short, c_int, c_long, c_longlong]:
+    if sizeof(kind) == 2: c_int16 = kind
+    elif sizeof(kind) == 4: c_int32 = kind
+    elif sizeof(kind) == 8: c_int64 = kind
+for kind in [c_ushort, c_uint, c_ulong, c_ulonglong]:
+    if sizeof(kind) == 2: c_uint16 = kind
+    elif sizeof(kind) == 4: c_uint32 = kind
+    elif sizeof(kind) == 8: c_uint64 = kind
+del(kind)
+
+_reset_cache()
+
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/index.html b/docs/build/html/_modules/index.html index a12c486..38be9a1 100644 --- a/docs/build/html/_modules/index.html +++ b/docs/build/html/_modules/index.html @@ -1,33 +1,22 @@ + - + - Overview: module code — PythonForWindows 0.3 documentation - - - + + - - + + raise NotImplementedError(self.setup_view)
[docs]class AlpcMessagePort(gdef.PORT_MESSAGE): """The effective ALPC Message composed of a ``PORT_MESSAGE`` structure followed by the data""" # Constructeur - @classmethod +
[docs] @classmethod def from_buffer(self, buffer): # A sort of super(AlpcMessagePort).from_buffer # But from_buffer is from the Metaclass of AlpcMessagePort so we use 'type(AlpcMessagePort)' @@ -196,7 +185,7 @@ self.buffer_size = len(buffer) self.raw_buffer = buffer self.header_size = ctypes.sizeof(self) - self.max_datasize = self.buffer_size - self.header_size + self.max_datasize = self.buffer_size - self.header_size
return self @classmethod @@ -223,8 +212,8 @@ def get_datalen(self): return self.u1.s1.DataLength - datalen = property(get_datalen, set_datalen) - """The length of the data"""
+ datalen = property(get_datalen, set_datalen) + """The length of the data""" KNOWN_ALPC_ATTRIBUTES = (gdef.ALPC_MESSAGE_SECURITY_ATTRIBUTE, gdef.ALPC_MESSAGE_VIEW_ATTRIBUTE, @@ -234,7 +223,7 @@ gdef.ALPC_MESSAGE_DIRECT_ATTRIBUTE, gdef.ALPC_MESSAGE_WORK_ON_BEHALF_ATTRIBUTE) -KNOWN_ALPC_ATTRIBUTES_MAPPING = {x:x for x in KNOWN_ALPC_ATTRIBUTES} +KNOWN_ALPC_ATTRIBUTES_MAPPING = gdef.FlagMapper(*KNOWN_ALPC_ATTRIBUTES)
[docs]class MessageAttribute(gdef.ALPC_MESSAGE_ATTRIBUTES): @@ -248,8 +237,8 @@ (gdef.ALPC_MESSAGE_WORK_ON_BEHALF_ATTRIBUTE, gdef.ALPC_WORK_ON_BEHALF_ATTR), ] - @classmethod -
[docs] def with_attributes(cls, attributes): +
[docs] @classmethod + def with_attributes(cls, attributes): """Create a new :class:`MessageAttribute` with ``attributes`` allocated :returns: :class:`MessageAttribute` @@ -259,11 +248,11 @@ self = cls.from_buffer(buffer) self.raw_buffer = buffer res = gdef.DWORD() - winproxy.AlpcInitializeMessageAttribute(attributes, self, len(self.raw_buffer), res) - return self
+ winproxy.AlpcInitializeMessageAttribute(attributes, self, len(self.raw_buffer), res)
+ return self - @classmethod -
[docs] def with_all_attributes(cls): +
[docs] @classmethod + def with_all_attributes(cls): """Create a new :class:`MessageAttribute` with the following attributes allocated: - :class:`ALPC_MESSAGE_SECURITY_ATTRIBUTE` @@ -281,8 +270,8 @@ gdef.ALPC_MESSAGE_CONTEXT_ATTRIBUTE | gdef.ALPC_MESSAGE_HANDLE_ATTRIBUTE | gdef.ALPC_MESSAGE_TOKEN_ATTRIBUTE | - gdef.ALPC_MESSAGE_DIRECT_ATTRIBUTE | - gdef.ALPC_MESSAGE_WORK_ON_BEHALF_ATTRIBUTE)
+ gdef.ALPC_MESSAGE_DIRECT_ATTRIBUTE |
+ gdef.ALPC_MESSAGE_WORK_ON_BEHALF_ATTRIBUTE) @staticmethod @@ -296,12 +285,12 @@ return res.value
[docs] def is_allocated(self, attribute): - """Return ``True`` if ``attribute`` is allocated""" - return bool(self.AllocatedAttributes & attribute)
+ """Return ``True`` if ``attribute`` is allocated"""
+ return bool(self.AllocatedAttributes & attribute)
[docs] def is_valid(self, attribute): - """Return ``True`` if ``attribute`` is valid""" - return bool(self.ValidAttributes & attribute)
+ """Return ``True`` if ``attribute`` is valid""" + return bool(self.ValidAttributes & attribute) def get_attribute(self, attribute): if not self.is_allocated(attribute): @@ -320,7 +309,7 @@ for mask in (1 << i for i in range(64)): if value & mask: attrs.append(mask) - return [KNOWN_ALPC_ATTRIBUTES_MAPPING.get(x, x) for x in attrs] + return [KNOWN_ALPC_ATTRIBUTES_MAPPING[x] for x in attrs] @property def valid_list(self): @@ -335,8 +324,8 @@ """The list of allocated attributes :type: [:class:`~windows.generated_def.Flag`] - """ - return self._extract_alpc_attributes_values(self.AllocatedAttributes) + """ + return self._extract_alpc_attributes_values(self.AllocatedAttributes) AlpcSection = namedtuple("AlpcSection", ["handle", "size"]) @@ -406,8 +395,7 @@ x = self.connect_to_port(port_name, "") def _alpc_port_to_unicode_string(self, name): - utf16_len = len(name) * 2 - return gdef.UNICODE_STRING(utf16_len, utf16_len, name) + return gdef.UNICODE_STRING.from_string(name)
[docs] def connect_to_port(self, port_name, connect_message=None, port_attr=None, port_attr_flags=0x10000, obj_attr=None, @@ -464,8 +452,8 @@ winproxy.NtAlpcConnectPort(handle, port_name_unicode, obj_attr, port_attr, flags, None, send_msg, buffersize, send_msg_attr, receive_attr, timeout) # If send_msg is not None, it contains the ClientId.UniqueProcess : PID of the server :) self.handle = handle.value - self.port_name = port_name - return AlpcMessage(send_msg, receive_attr) if send_msg is not None else None
+ self.port_name = port_name + return AlpcMessage(send_msg, receive_attr) if send_msg is not None else None def create_port_section(self, Flags, SectionHandle, SectionSize): AlpcSectionHandle = gdef.HANDLE() @@ -487,8 +475,8 @@ self._close_port(self.handle) def __del__(self): - if sys.path is not None: - self.disconnect() + if sys.path is not None: + self.disconnect()
[docs]class AlpcServer(AlpcTransportBase): @@ -502,8 +490,7 @@ self.create_port(port_name) def _alpc_port_to_unicode_string(self, name): - utf16_len = len(name) * 2 - return gdef.UNICODE_STRING(utf16_len, utf16_len, name) + return gdef.UNICODE_STRING.from_string(name)
[docs] def create_port(self, port_name, msglen=None, port_attr_flags=0, obj_attr=None, port_attr=None): """Create the ALPC port ``port_name``. Most of the parameters have defauls value is ``None`` is passed. @@ -546,8 +533,8 @@ # windows.utils.print_ctypes_struct(port_attr, " - PORT_ATTR", hexa=True) winproxy.NtAlpcCreatePort(handle, obj_attr, port_attr) - self.port_name = raw_name - self.handle = handle.value
+ self.port_name = raw_name
+ self.handle = handle.value
[docs] def accept_connection(self, msg, port_attr=None, port_context=None): """Accept the connection for a ``LPC_CONNECTION_REQUEST`` message. @@ -574,8 +561,8 @@ port_attr.DupObjectTypes = 0xffffffff # windows.utils.print_ctypes_struct(port_attr, " - CONN_PORT_ATTR", hexa=True) winproxy.NtAlpcAcceptConnectPort(rhandle, self.handle, 0, None, port_attr, port_context, msg.port_message, None, True) - self.communication_port_list.append(rhandle.value) - return msg
+ self.communication_port_list.append(rhandle.value) + return msg def disconnect(self): self._close_port(self.handle) @@ -585,8 +572,8 @@ # TODO: add an API to close a communication port ? def __del__(self): - if sys.path is not None: - self.disconnect() + if sys.path is not None: + self.disconnect() @@ -596,12 +583,14 @@
@@ -623,7 +612,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/crypto/certificate.html b/docs/build/html/_modules/windows/crypto/certificate.html index 1c63ee0..e49e196 100644 --- a/docs/build/html/_modules/windows/crypto/certificate.html +++ b/docs/build/html/_modules/windows/crypto/certificate.html @@ -1,33 +1,22 @@ + - + - windows.crypto.certificate — PythonForWindows 0.3 documentation - - - + + - - + + return '<{0} "{1}" content_type={2}>'.format(type(self).__name__, self.filename, self.content_type) + -# TODO: rename to CertificateStore ? # https://msdn.microsoft.com/en-us/library/windows/desktop/aa382037(v=vs.85).aspx -
[docs]class EHCERTSTORE(gdef.HCERTSTORE): +
[docs]class CertificateStore(gdef.HCERTSTORE): """A certificate store""" @property def certs(self): - """The certificates in the store + """The list of certificates in the store - :type: [:class:`CertificateContext`] -- A list of Certificate + :type: [:class:`Certificate`] -- A list of certificate """ res = [] last = None @@ -152,95 +159,95 @@ return tuple(res) raise # Need to duplicate as CertEnumCertificatesInStore will free the context 'last' - ecert = windows.crypto.CertificateContext(cert[0]) + ecert = windows.crypto.Certificate.from_pointer(cert) res.append(ecert.duplicate()) last = ecert raise RuntimeError("Out of infinit loop") -
[docs] def add_certificate(self, certificate): - """Add a certificate to the store""" - winproxy.CertAddCertificateContextToStore(self, certificate, gdef.CERT_STORE_ADD_NEW, None)
+
[docs] def add_certificate(self, certificate): + """Add a certificate to the store"""
+ winproxy.CertAddCertificateContextToStore(self, certificate, gdef.CERT_STORE_ADD_NEW, None) - @classmethod -
[docs] def from_file(cls, filename): - """Create a new :class:`EHCERTSTORE` from ``filename``""" - res = winproxy.CertOpenStore(gdef.CERT_STORE_PROV_FILENAME_A, DEFAULT_ENCODING, None, gdef.CERT_STORE_OPEN_EXISTING_FLAG, filename) - return ctypes.cast(res, cls)
+
[docs] @classmethod + def from_file(cls, filename): + """Create a new :class:`CertificateStore` from ``filename``""" + res = winproxy.CertOpenStore(gdef.CERT_STORE_PROV_FILENAME_A, DEFAULT_ENCODING, None, gdef.CERT_STORE_OPEN_EXISTING_FLAG, filename)
+ return ctypes.cast(res, cls) - def yolo(self): + def _yolo(self): x = winproxy.CertEnumCTLsInStore(self, None) title = None windows.winproxy.CryptUIDlgViewContext(gdef.CERT_STORE_CTL_CONTEXT, x, None, title, 0, None) - return x # See https://msdn.microsoft.com/en-us/library/windows/desktop/aa388136(v=vs.85).aspx - @classmethod -
[docs] def from_system_store(cls, store_name): - """Create a new :class:`EHCERTSTORE` from system store``store_name`` - (see https://msdn.microsoft.com/en-us/library/windows/desktop/aa388136(v=vs.85).aspx) +
[docs] @classmethod + def from_system_store(cls, store_name): + """Create a new :class:`CertificateStore` from system store ``store_name`` + (see `System Store Locations <https://msdn.microsoft.com/en-us/library/windows/desktop/aa388136(v=vs.85).aspx>`_) """ - res = winproxy.CertOpenStore(gdef.CERT_STORE_PROV_SYSTEM_A, DEFAULT_ENCODING, None, gdef.CERT_SYSTEM_STORE_LOCAL_MACHINE | gdef.CERT_STORE_READONLY_FLAG, store_name) - return ctypes.cast(res, cls)
+ res = winproxy.CertOpenStore(gdef.CERT_STORE_PROV_SYSTEM_A, DEFAULT_ENCODING, None, gdef.CERT_SYSTEM_STORE_LOCAL_MACHINE | gdef.CERT_STORE_READONLY_FLAG, store_name)
+ return ctypes.cast(res, cls) - @classmethod -
[docs] def new_in_memory(cls): - """Create a new temporary :class:`EHCERTSTORE` in memory""" - res = winproxy.CertOpenStore(gdef.CERT_STORE_PROV_MEMORY, DEFAULT_ENCODING, None, 0, None) - return ctypes.cast(res, cls)
+
[docs] @classmethod + def new_in_memory(cls): + """Create a new temporary :class:`CertificateStore` in memory""" + res = winproxy.CertOpenStore(gdef.CERT_STORE_PROV_MEMORY, DEFAULT_ENCODING, None, 0, None)
+ return ctypes.cast(res, cls) # TODO: a more complete search API ? -
[docs] def find(self, issuer, serialnumber): +
[docs] def find(self, issuer, serialnumber): """Return the certificate that match `issuer` and `serialnumber` - :return: :class:`CertificateContext` + :return: :class:`Certificate` """ # data = self.get_signer_data(index) cert_info = gdef.CERT_INFO() cert_info.Issuer = issuer cert_info.SerialNumber = serialnumber - rawcertcontext = winproxy.CertFindCertificateInStore(self, DEFAULT_ENCODING, 0, gdef.CERT_FIND_SUBJECT_CERT, ctypes.byref(cert_info), None) - # return rawcertcontext - return CertificateContext(rawcertcontext[0])
+ rawcertcontext = winproxy.CertFindCertificateInStore(self, DEFAULT_ENCODING, 0, gdef.CERT_FIND_SUBJECT_CERT, ctypes.byref(cert_info), None)
+ return Certificate.from_pointer(rawcertcontext) # PKCS12_NO_PERSIST_KEY -> do not save it in a key container on disk # Without it, a key container is created at 'C:\Users\USERNAME\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-3241049326-165485355-1070449050-1001' -
[docs]def import_pfx(pfx, password=None, flags=gdef.CRYPT_USER_KEYSET | gdef.PKCS12_NO_PERSIST_KEY): +# More about this: +# If you use 'PKCS12_NO_PERSIST_KEY' the key are indeed NOT STORED but there is a problem +# If you use an algo like 'szOID_NIST_AES256_CBC' the function 'CryptDecryptMessage' won't be able to decrypt the message +# Unless you also specify the 'PKCS12_ALWAYS_CNG_KSP' flags. + +# My guess: somewhere 'CryptDecryptMessage' ask for each (CNG_KSP | CSP ?) to try to decrypt with the keys +# BUT: as we DID NOT EXPORT the keys, they are not able to get the key from memory and expect them on disk. +# By forcing PKCS12_ALWAYS_CNG_KSP we remove this as the key are directly linked to the correct CNG_KSP in the CertStore +# Look like it's based on this part of the PFX: +# Microsoft CSP Name: Microsoft Enhanced Cryptographic Provider v1.0 + +
[docs]def import_pfx(pfx, password=None, flags=gdef.CRYPT_USER_KEYSET | gdef.PKCS12_NO_PERSIST_KEY | gdef.PKCS12_ALWAYS_CNG_KSP): """Import the file ``pfx`` with the ``password``. ``default flags = PKCS12_NO_PERSIST_KEY | CRYPT_USER_KEYSET``. ``PKCS12_NO_PERSIST_KEY`` tells ``CryptoAPI`` to NOT save the keys in a on-disk container. - :return: :class:`EHCERTSTORE` + :return: :class:`CertificateStore` """ - if isinstance(pfx, basestring): + if isinstance(pfx, (basestring, bytearray)): pfx = gdef.CRYPT_DATA_BLOB.from_string(pfx) - cert_store = winproxy.PFXImportCertStore(pfx, password, flags) - return EHCERTSTORE(cert_store)
+ cert_store = winproxy.PFXImportCertStore(pfx, password, flags)
+ return CertificateStore(cert_store) -# Why PCCERT_CONTEXT (pointer type) and not _CERT_CONTEXT ? -
[docs]class CertificateContext(gdef.PCCERT_CONTEXT): - """Represent a Certificate. - - note: It is a pointer ctypes structure (``PCCERT_CONTEXT``) - """ - _type_ = gdef.PCCERT_CONTEXT._type_ # Not herited from PCCERT_CONTEXT - - - def __repr__(self): - return '<{0} "{1}" serial="{2}">'.format(type(self).__name__, self.name, self.serial) +
[docs]class Certificate(gdef.CERT_CONTEXT): + """Represent a Certificate """ @property def raw_serial(self): """The raw serial number of the certificate. :type: [:class:`int`]: A list of int ``0 <= x <= 255``""" - serial_number = self[0].pCertInfo[0].SerialNumber + serial_number = self.pCertInfo[0].SerialNumber return [(c & 0xff) for c in serial_number.pbData[:serial_number.cbData][::-1]] @property @@ -249,26 +256,47 @@ :type: :class:`str` """ - serial_number = self[0].pCertInfo[0].SerialNumber serial_bytes = self.raw_serial return " ".join("{:02x}".format(x) for x in serial_bytes) -
[docs] def get_name(self, nametype=gdef.CERT_NAME_SIMPLE_DISPLAY_TYPE, flags=0): - """Retrieve the subject or issuer name of the certificate. See ``CertGetNameStringA`` +
[docs] def get_name(self, nametype=gdef.CERT_NAME_SIMPLE_DISPLAY_TYPE, flags=0): + """Retrieve the subject or issuer name of the certificate. + See `CertGetNameStringA <https://msdn.microsoft.com/en-us/library/windows/desktop/aa376086(v=vs.85).aspx>`_ :returns: :class:`str` """ size = winproxy.CertGetNameStringA(self, nametype, flags, None, None, 0) namebuff = ctypes.c_buffer(size) - size = winproxy.CertGetNameStringA(self, nametype, flags, None, namebuff, size) - return namebuff[:-1]
+ size = winproxy.CertGetNameStringA(self, nametype, flags, None, namebuff, size)
+ return namebuff[:-1] name = property(get_name) """The name of the certificate. :type: :class:`str`""" + def raw_hash(self): + size = gdef.DWORD(100) + buffer = ctypes.c_buffer(size.value) + winproxy.CryptHashCertificate(None, 0, 0, self.pbCertEncoded, self.cbCertEncoded, ctypes.cast(buffer, gdef.LPBYTE), size) + return buffer[:size.value] + + @property + def thumprint(self): + """The thumprint of the certificate (which is the sha1 of the encoded cert). + + Example: + + >>> x + <Certificate "YOLO2" serial="6f 1d 3e 7d d9 77 59 a9 4c 1c 53 dc 80 db 0c fe"> + >>> x.thumprint + 'E2 A2 DB 76 A1 DD 8E 70 0D C6 9F CB 71 CF 29 12 C6 D9 78 97' + + :type: :class:`str` + """ + return " ".join("{:02X}".format(x) for x in bytearray(self.raw_hash())) + @property def issuer(self): """The name of the certificate's issuer. @@ -280,9 +308,9 @@ def store(self): """The certificate store that contains the certificate - :type: :class:`EHCERTSTORE` + :type: :class:`CertificateStore` """ - return EHCERTSTORE(self[0].hCertStore) + return CertificateStore(self.hCertStore) def get_raw_certificate_chains(self): # Rename to all_chains ? chain_context = EPCCERT_CHAIN_CONTEXT() @@ -299,16 +327,18 @@ chain_para.cbSize = ctypes.sizeof(chain_para) chain_para.RequestedUsage = cert_usage - winproxy.CertGetCertificateChain(None, self, None, self[0].hCertStore, ctypes.byref(chain_para), 0, None, ctypes.byref(chain_context)) + winproxy.CertGetCertificateChain(None, self, None, self.hCertStore, ctypes.byref(chain_para), 0, None, ctypes.byref(chain_context)) + # Lower chains ? + # winproxy.CertGetCertificateChain(None, self, None, self[0].hCertStore, ctypes.byref(chain_para), 0x80, None, ctypes.byref(chain_context)) #return CertficateChain(chain_context) return chain_context @property # fixedproperty ? def chains(self): - """The list of chain context available for this certificate. Each elements of this list is a list of ``CertificateContext`` that should + """The list of chain context available for this certificate. Each elements of this list is a list of ``Certificate`` that should go from the ``self`` certificate to a trusted certificate. - :type: [[:class:`CertificateContext`]] -- A list of chain (list) of :class:`CertificateContext` + :type: [[:class:`Certificate`]] -- A list of chain (list) of :class:`Certificate` """ chain_context = self.get_raw_certificate_chains() res = [] @@ -320,24 +350,67 @@ # API Arround CertSelectCertificateChains ? # https://msdn.microsoft.com/en-us/library/windows/desktop/dd433797(v=vs.85).aspx -
[docs] def duplicate(self): - """Duplicate the certificate by incrementing the internal refcount. (see ``CertDuplicateCertificateContext``) +
[docs] def duplicate(self): + """Duplicate the certificate by incrementing the internal refcount. (see `CertDuplicateCertificateContext <https://msdn.microsoft.com/en-us/library/windows/desktop/aa376045(v=vs.85).aspx>`_) note: The object returned is ``self`` - :return: :class:`CertificateContext` + :return: :class:`Certificate` """ res = winproxy.CertDuplicateCertificateContext(self) # Check what the doc says: the pointer returned is actually the PCERT in parameter # Only the refcount is incremented # This postulate allow us to return 'self' directly # https://msdn.microsoft.com/en-us/library/windows/desktop/aa376045(v=vs.85).aspx - if not ctypes.cast(res, gdef.PVOID).value == ctypes.cast(self, gdef.PVOID).value: - raise ValueError("CertDuplicateCertificateContext did not returned the argument (check doc)") - return self
+ if not ctypes.addressof(res[0]) == ctypes.addressof(self): + raise ValueError("CertDuplicateCertificateContext did not returned the argument (check doc)")
+ return self def view(self, title=None): - return windows.winproxy.CryptUIDlgViewContext(gdef.CERT_STORE_CERTIFICATE_CONTEXT, self, None, title, 0, None) + return windows.winproxy.CryptUIDlgViewContext(gdef.CERT_STORE_CERTIFICATE_CONTEXT, ctypes.byref(self), None, title, 0, None) + + KNOWN_PROPERTIES_VALUES = gdef.FlagMapper( + gdef.CERT_KEY_PROV_HANDLE_PROP_ID, + gdef.CERT_KEY_PROV_INFO_PROP_ID, + gdef.CERT_SHA1_HASH_PROP_ID, + gdef.CERT_MD5_HASH_PROP_ID, + gdef.CERT_HASH_PROP_ID, + gdef.CERT_KEY_CONTEXT_PROP_ID, + gdef.CERT_KEY_SPEC_PROP_ID, + gdef.CERT_IE30_RESERVED_PROP_ID, + gdef.CERT_PUBKEY_HASH_RESERVED_PROP_ID, + gdef.CERT_ENHKEY_USAGE_PROP_ID, + gdef.CERT_CTL_USAGE_PROP_ID, + gdef.CERT_NEXT_UPDATE_LOCATION_PROP_ID, + gdef.CERT_FRIENDLY_NAME_PROP_ID, + gdef.CERT_PVK_FILE_PROP_ID, + gdef.CERT_DESCRIPTION_PROP_ID, + gdef.CERT_ACCESS_STATE_PROP_ID, + gdef.CERT_SIGNATURE_HASH_PROP_ID, + gdef.CERT_SMART_CARD_DATA_PROP_ID, + gdef.CERT_EFS_PROP_ID, + gdef.CERT_FORTEZZA_DATA_PROP_ID, + gdef.CERT_ARCHIVED_PROP_ID, + gdef.CERT_KEY_IDENTIFIER_PROP_ID, + gdef.CERT_AUTO_ENROLL_PROP_ID, + gdef.CERT_PUBKEY_ALG_PARA_PROP_ID, + gdef.CERT_CROSS_CERT_DIST_POINTS_PROP_ID, + gdef.CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID, + gdef.CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID, + gdef.CERT_ENROLLMENT_PROP_ID, + gdef.CERT_DATE_STAMP_PROP_ID, + gdef.CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID, + gdef.CERT_SUBJECT_NAME_MD5_HASH_PROP_ID, + gdef.CERT_EXTENDED_ERROR_INFO_PROP_ID, + gdef.CERT_RENEWAL_PROP_ID, + gdef.CERT_ARCHIVED_KEY_HASH_PROP_ID, + gdef.CERT_AUTO_ENROLL_RETRY_PROP_ID, + gdef.CERT_AIA_URL_RETRIEVED_PROP_ID, + gdef.CERT_AUTHORITY_INFO_ACCESS_PROP_ID, + gdef.CERT_BACKED_UP_PROP_ID, + gdef.CERT_OCSP_RESPONSE_PROP_ID, + gdef.CERT_REQUEST_ORIGINATOR_PROP_ID, + gdef.CERT_SOURCE_LOCATION_PROP_ID) def enum_properties(self): prop = 0 @@ -346,10 +419,14 @@ prop = winproxy.CertEnumCertificateContextProperties(self, prop) if not prop: return res - res.append(prop) + res.append(self.KNOWN_PROPERTIES_VALUES[prop]) raise RuntimeError("Unreachable code") properties = property(enum_properties) + """The properties of the certificate + + :type: [:class:`int` or :class:`~windows.generated_def.Flag`] -- A list of property ID + """ #def get_property(self): # https://msdn.microsoft.com/en-us/library/windows/desktop/aa376079(v=vs.85).aspx @@ -362,43 +439,52 @@ """The encoded certificate. :type: :class:`bytearray`""" - return bytearray(self[0].pbCertEncoded[:self[0].cbCertEncoded]) + return bytearray(self.pbCertEncoded[:self.cbCertEncoded]) @property def version(self): - "TODO: doc" - return self[0].pbCertInfo.dwVersion + """The version number of the certificate + + :type: :class:`int` + """ + return self.pCertInfo[0].dwVersion - @classmethod -
[docs] def from_file(cls, filename): - """Create a :class:`CertificateContext` from the file ``filename`` +
[docs] @classmethod + def from_file(cls, filename): + """Create a :class:`Certificate` from the file ``filename`` - :return: :class:`CertificateContext` + :return: :class:`Certificate` """ with open(filename, "rb") as f: data = f.read() buf = (ctypes.c_ubyte * len(data))(*bytearray(data)) - res = windows.winproxy.CertCreateCertificateContext(windows.crypto.DEFAULT_ENCODING, buf, len(data)) - return ctypes.cast(res, cls)
+ pcert = windows.winproxy.CertCreateCertificateContext(windows.crypto.DEFAULT_ENCODING, buf, len(data))
+ return cls.from_pointer(pcert) - @classmethod -
[docs] def from_buffer(cls, data): - """Create a :class:`CertificateContext` from the buffer ``data`` +
[docs] @classmethod + def from_buffer(cls, data): + """Create a :class:`Certificate` from the buffer ``data`` - :return: :class:`CertificateContext` + :return: :class:`Certificate` """ buf = (ctypes.c_ubyte * len(data))(*bytearray(data)) - res = windows.winproxy.CertCreateCertificateContext(windows.crypto.DEFAULT_ENCODING, buf, len(data)) - return ctypes.cast(res, cls)
+ pcert = windows.winproxy.CertCreateCertificateContext(windows.crypto.DEFAULT_ENCODING, buf, len(data))
+ return cls.from_pointer(pcert) + + @classmethod + def from_pointer(self, ptr): + return ctypes.cast(ptr, ctypes.POINTER(Certificate))[0] + def __eq__(self, other): - if not isinstance(other, CertificateContext): + if not isinstance(other, Certificate): return NotImplemented - return windows.winproxy.CertCompareCertificate(DEFAULT_ENCODING, self[0].pCertInfo, other[0].pCertInfo)
+ return windows.winproxy.CertCompareCertificate(DEFAULT_ENCODING, self.pCertInfo, other.pCertInfo) + + def __repr__(self):
+ return '<{0} "{1}" serial="{2}">'.format(type(self).__name__, self.name, self.serial) - # CertCompareCertificate ? - # https://msdn.microsoft.com/en-us/library/windows/desktop/aa376027(v=vs.85).aspx # class CertficateChain(object): @@ -413,12 +499,19 @@ # Those classes are more of a POC than anything else +# Should be the struct itself (like Certificate ?) class EPCCERT_CHAIN_CONTEXT(gdef.PCCERT_CHAIN_CONTEXT): _type_ = gdef.PCCERT_CHAIN_CONTEXT._type_ @property def chains(self): res = [] + # if (self[0].cLowerQualityChainContext): + # print("LOL") + # import pdb;pdb.set_trace() + # if self[0].cChain > 1: + # print("HAAAAA") + # import pdb;pdb.set_trace() for i in range(self[0].cChain): simple_chain = ctypes.cast(self[0].rgpChain[i], EPCCERT_SIMPLE_CHAIN) res.append(simple_chain) @@ -450,12 +543,16 @@ @property def cert(self): - return ctypes.cast(self[0].pCertContext, CertificateContext) + return Certificate.from_pointer(self[0].pCertContext) # Move this in another .py ?
[docs]class CryptContext(gdef.HCRYPTPROV): - """ A context manager arround ``CryptAcquireContextW`` & ``CryptReleaseContext``""" + """ A context manager arround ``CryptAcquireContextW`` & ``CryptReleaseContext`` + + .. note:: + see usage in sample :ref:`sample_crypto_encryption` (function ``genkeys``) + """ _type_ = gdef.HCRYPTPROV._type_ def __init__(self, pszContainer=None, pszProvider=None, dwProvType=0, dwFlags=0, retrycreate=False): @@ -482,8 +579,8 @@ raise return winproxy.CryptAcquireContextW(self, self.pszContainer, self.pszProvider, self.dwProvType, self.dwFlags | gdef.CRYPT_NEWKEYSET) - def release(self): - return winproxy.CryptReleaseContext(self, False)
+ def release(self): + return winproxy.CryptReleaseContext(self, False) @@ -493,12 +590,14 @@
@@ -520,7 +619,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/crypto/cryptmsg.html b/docs/build/html/_modules/windows/crypto/cryptmsg.html new file mode 100644 index 0000000..faadb37 --- /dev/null +++ b/docs/build/html/_modules/windows/crypto/cryptmsg.html @@ -0,0 +1,165 @@ + + + + + + + + windows.crypto.cryptmsg — PythonForWindows 0.3 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for windows.crypto.cryptmsg

+import ctypes
+
+from windows import winproxy
+import windows.generated_def as gdef
+import windows.crypto
+
+
[docs]class CryptMessage(gdef.HCRYPTMSG): + """Represent a PKCS #7 message + (see `Low-level Message Functions <https://msdn.microsoft.com/en-us/library/windows/desktop/aa380252(v=vs.85).aspx#low_level_message_functions>`_) + """ + MSG_PARAM_KNOW_TYPES = {gdef.CMSG_SIGNER_INFO_PARAM: gdef.CMSG_SIGNER_INFO, + gdef.CMSG_SIGNER_COUNT_PARAM: gdef.DWORD, + gdef.CMSG_CERT_COUNT_PARAM: gdef.DWORD} + + + def get_param(self, param_type, index=0, raw=False): + data_size = gdef.DWORD() + # https://msdn.microsoft.com/en-us/library/windows/desktop/aa380227(v=vs.85).aspx + winproxy.CryptMsgGetParam(self, param_type, index, None, data_size) + buffer = ctypes.c_buffer(data_size.value) + winproxy.CryptMsgGetParam(self, param_type, index, buffer, data_size) + if raw: + return (buffer, data_size) + + if param_type in self.MSG_PARAM_KNOW_TYPES: + buffer = self.MSG_PARAM_KNOW_TYPES[param_type].from_buffer(buffer) + if isinstance(buffer, gdef.DWORD): # DWORD -> return the Python int + return buffer.value + return buffer + + # Certificate accessors + + @property + def nb_cert(self): + """The number of certificate embded in the :class:`CryptObject` + + :type: :class:`int` + """ + return self.get_param(gdef.CMSG_CERT_COUNT_PARAM) + + def get_raw_cert(self, index=0): + return self.get_param(gdef.CMSG_CERT_PARAM, index) + +
[docs] def get_cert(self, index=0): + """Return embded :class:`Certificate` number ``index``. + + .. note:: + + Not all embded certificate are directly used to sign the :class:`CryptObject`. + """
+ return windows.crypto.Certificate.from_buffer(self.get_raw_cert(index)) + + @property + def certs(self): + """The list of :class:`Certificate` embded in the message""" + return [self.get_cert(i) for i in range(self.nb_cert)] + + # Signers accessors + + @property + def nb_signer(self): + """The number of signers for the CryptObject + + :type: :class:`int` + """ + try: + return self.get_param(gdef.CMSG_SIGNER_COUNT_PARAM) + except WindowsError as e: + if (e.winerror & 0xffffffff) == gdef.CRYPT_E_INVALID_MSG_TYPE: + return 0 + raise + + +
[docs] def get_signer_data(self, index=0): + """Returns the signer informations for signer nb ``index`` + + :return: :class:`~windows.generated_def.winstructs.CMSG_SIGNER_INFO` + """
+ return self.get_param(gdef.CMSG_SIGNER_INFO_PARAM, index) + + @property + def signers(self): + """The list of :class:`~windows.generated_def.winstructs.CMSG_SIGNER_INFO` embed in the message"""
+ return [self.get_signer_data(i) for i in range(self.nb_signer)] +
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/windows/crypto/encrypt_decrypt.html b/docs/build/html/_modules/windows/crypto/encrypt_decrypt.html index fc85630..85a6042 100644 --- a/docs/build/html/_modules/windows/crypto/encrypt_decrypt.html +++ b/docs/build/html/_modules/windows/crypto/encrypt_decrypt.html @@ -1,33 +1,22 @@ + - + - windows.crypto.encrypt_decrypt — PythonForWindows 0.3 documentation - - - + + - - + + return str(bytearray(dcryptbuff[:dcryptsize.value])) @@ -166,12 +165,14 @@
@@ -193,7 +194,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/crypto/generation.html b/docs/build/html/_modules/windows/crypto/generation.html index 831fe7b..4b42fce 100644 --- a/docs/build/html/_modules/windows/crypto/generation.html +++ b/docs/build/html/_modules/windows/crypto/generation.html @@ -1,33 +1,22 @@ + - + - windows.crypto.generation — PythonForWindows 0.3 documentation - - - + + - - + + return windows.crypto.Certificate.from_pointer(cert)
[docs]def generate_key(prov, keytype=AT_KEYEXCHANGE, flags=CRYPT_EXPORTABLE): @@ -77,8 +66,8 @@ :return: :class:`HCRYPTKEY` """ key = HCRYPTKEY() - winproxy.CryptGenKey(prov, keytype, flags , key) - return key
+ winproxy.CryptGenKey(prov, keytype, flags , key) + return key # print(key[0]) # print("[OK] Key created") # size = DWORD() @@ -101,8 +90,8 @@ blob = ECRYPT_DATA_BLOB(0, None) winproxy.PFXExportCertStoreEx(hstore, blob, password, None, EXPORT_PRIVATE_KEYS | REPORT_NO_PRIVATE_KEY | REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY) blob.pbData = (ctypes.c_ubyte * blob.cbData)() - winproxy.PFXExportCertStoreEx(hstore, blob, password, None, EXPORT_PRIVATE_KEYS | REPORT_NO_PRIVATE_KEY | REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY) - return blob.data + winproxy.PFXExportCertStoreEx(hstore, blob, password, None, EXPORT_PRIVATE_KEYS | REPORT_NO_PRIVATE_KEY | REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY) + return blob.data @@ -112,12 +101,14 @@
@@ -139,7 +130,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/debug/breakpoints.html b/docs/build/html/_modules/windows/debug/breakpoints.html index 33bb0c8..adf1670 100644 --- a/docs/build/html/_modules/windows/debug/breakpoints.html +++ b/docs/build/html/_modules/windows/debug/breakpoints.html @@ -1,33 +1,22 @@ + - + - windows.debug.breakpoints — PythonForWindows 0.3 documentation - - - + + - - + + """Called when breakpoint is hit""" + pass class ProxyBreakpoint(Breakpoint): @@ -88,8 +77,8 @@ """An hardware-execution breakpoint (type == ``HARDWARE_EXEC_BP``)""" type = HARDWARE_EXEC_BP - def apply_to_target(self, target): - return isinstance(target, WinThread) + def apply_to_target(self, target): + return isinstance(target, WinThread)
[docs]class MemoryBreakpoint(Breakpoint): """A memory breakpoint (type == ``MEMORY_BREAKPOINT``)""" @@ -102,12 +91,12 @@ ``events``: a string representing the events that interest the BP (any of "RWX")""" super(MemoryBreakpoint, self).__init__(addr) self.size = size if size is not None else self.DEFAULT_SIZE - events = events if events is not None else self.DEFAULT_EVENTS - self.events = set(events)
+ events = events if events is not None else self.DEFAULT_EVENTS + self.events = set(events)
[docs] def trigger(self, dbg, exception): - """Called when breakpoint is hit""" - pass
+ """Called when breakpoint is hit""" + pass ## Arguments Helper (need to move this elsewhere) @@ -217,8 +206,8 @@ """A breakpoint that accepts a function from :mod:`windows.winproxy` and able to: - Extract the arguments of the functions - - Break at the return of the function - """ + - Break at the return of the function + """ class PrintBP(Breakpoint): def __init__(self, addr, format, func=None): @@ -241,12 +230,14 @@
@@ -268,7 +259,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/debug/debugger.html b/docs/build/html/_modules/windows/debug/debugger.html index 9608975..fbacfc5 100644 --- a/docs/build/html/_modules/windows/debug/debugger.html +++ b/docs/build/html/_modules/windows/debug/debugger.html @@ -1,33 +1,22 @@ + - + - windows.debug.debugger — PythonForWindows 0.3 documentation - - - + + - - + + # [start] -> (size, current_proctection, original_prot) + self._virtual_protected_memory = [] # List of memory-range modified by a MemBP - @classmethod -
[docs] def attach(cls, target): +
[docs] @classmethod + def attach(cls, target): """attach to ``target`` (must be a :class:`WinProcess`) :rtype: :class:`Debugger` @@ -133,8 +122,8 @@ .. note:: see :ref:`Debugger.attach sample <sample_debugger_attach>`""" - winproxy.DebugActiveProcess(target.pid) - return cls(target)
+ winproxy.DebugActiveProcess(target.pid)
+ return cls(target)
[docs] def detach(self, target=None): """Detach from all debugged processes or process ``target``""" @@ -188,22 +177,22 @@ self.current_thread = None if self.target and target.pid == self.target.pid: - self.target = None - windows.winproxy.DebugActiveProcessStop(target.pid)
+ self.target = None + windows.winproxy.DebugActiveProcessStop(target.pid) def _killed_in_action(self): """Return ``True`` if current process have been detached by user callback""" # Fix ? _handle_exit_process remove from processes but need a FinishDebugEvent return self.current_process is None or self.current_process.pid not in self.processes - @classmethod -
[docs] def debug(cls, path, args=None, dwCreationFlags=0, show_windows=False): +
[docs] @classmethod + def debug(cls, path, args=None, dwCreationFlags=0, show_windows=False): """Create a process and debug it. :rtype: :class:`Debugger`""" dwCreationFlags |= DEBUG_PROCESS - c = windows.utils.create_process(path, args=args, dwCreationFlags=dwCreationFlags, show_windows=show_windows) - return cls(c)
+ c = windows.utils.create_process(path, args=args, dwCreationFlags=dwCreationFlags, show_windows=show_windows)
+ return cls(c) def _init_dispatch_handlers(self): dbg_evt_dispatch = {} @@ -866,8 +855,8 @@ # rhaaa _killed_in_action is a REALLY bad name, it's not killed, it's detached # TODO: FIXME self._finish_debug_event(debug_event, dbg_continue_flag) - if not self.processes: - break + if not self.processes: + break
[docs] def add_bp(self, bp, addr=None, type=None, target=None): """Add a breakpoint, bp can be: @@ -898,8 +887,8 @@ # if target == self.target: # Original target (that have not been lauched yet) return self.add_pending_breakpoint(bp, target) # else: - # raise ValueError("Unknown target {0}".format(target)) - return self._setup_breakpoint(bp, target)
+ # raise ValueError("Unknown target {0}".format(target)) + return self._setup_breakpoint(bp, target)
[docs] def del_bp(self, bp, targets=None): """Delete a breakpoint, if targets is ``None``: delete it from all targets""" @@ -912,15 +901,15 @@ targets = self.threads.values() for target in targets: _remove_method(bp, target) - if original_target is None: - return self.remove_pending_breakpoint(bp, original_target)
+ if original_target is None: + return self.remove_pending_breakpoint(bp, original_target)
[docs] def single_step(self): """Make the ``current_thread`` ``single_step``. ``Debugger.on_single_step`` will be called after that""" t = self.current_thread ctx = t.context - ctx.EEFlags.TF = 1 - t.set_context(ctx)
+ ctx.EEFlags.TF = 1 + t.set_context(ctx) ## Memory Breakpoint helper
[docs] def get_memory_breakpoint_at(self, addr, process=None): @@ -941,8 +930,8 @@ for bp in self._watched_pages[process.pid][fault_page].bps: if bp._addr <= addr < bp._addr + bp.size: - return bp - return None
+ return bp + return None
[docs] def disable_all_memory_breakpoints(self, target=None): """Restore all pages to their original access rights. @@ -967,8 +956,8 @@ for bp in watched_page.bps: # TODO: Document bp.on_error(self, page_addr) - res[page_addr] = page_protection.value - return res
+ res[page_addr] = page_protection.value + return res
[docs] def restore_all_memory_breakpoints(self, data, target=None): @@ -981,18 +970,18 @@ for page_addr, protection in data.items(): # Prevent restoring deleted breakpoints if page_addr in self._watched_pages[target.pid]: - target.virtual_protect(page_addr, PAGE_SIZE, protection, None) - return
+ target.virtual_protect(page_addr, PAGE_SIZE, protection, None) + return - @contextmanager -
[docs] def DisabledMemoryBreakpoint(self, target=None): +
[docs] @contextmanager + def DisabledMemoryBreakpoint(self, target=None): """A context-manager that disable all memory breakpoints and restore them on exit""" data = self.disable_all_memory_breakpoints(target) try: yield finally: - if not self._killed_in_action(): - self.restore_all_memory_breakpoints(data, target)
+ if not self._killed_in_action():
+ self.restore_all_memory_breakpoints(data, target)
[docs] def get_exception_bitness(self, exc): """Return the bitness in which the exception occured. @@ -1002,8 +991,8 @@ if windows.current_process.bitness == 32: return 32 if exc.ExceptionRecord.ExceptionCode in [STATUS_WX86_BREAKPOINT, STATUS_WX86_SINGLE_STEP]: - return 32 - return 64
+ return 32 + return 64 # Public callback
[docs] def on_exception(self, exception): @@ -1017,8 +1006,8 @@ """ dbgprint("Exception: {0} at ".format(exception.ExceptionRecord.ExceptionCode, exception.ExceptionRecord.ExceptionAddress), "DBG") if not exception.ExceptionRecord.ExceptionCode in winexception.exception_name_by_value: - return DBG_EXCEPTION_NOT_HANDLED - return DBG_CONTINUE
+ return DBG_EXCEPTION_NOT_HANDLED + return DBG_CONTINUE
[docs] def on_single_step(self, exception): """Called on requested single step ``exception`` is one of the following type: @@ -1027,56 +1016,56 @@ * :class:`windows.winobject.exception.EEXCEPTION_DEBUG_INFO64` There is no default implementation, if you use ``Debugger.single_step()`` you should implement ``on_single_step`` - """ - raise NotImplementedError("Debugger that explicitly single step should implement <on_single_step>")
+ """ + raise NotImplementedError("Debugger that explicitly single step should implement <on_single_step>")
[docs] def on_create_process(self, create_process): """Called on create_process event - :param CREATE_PROCESS_DEBUG_INFO create_process:""" - pass
+ :param CREATE_PROCESS_DEBUG_INFO create_process:""" + pass
[docs] def on_exit_process(self, exit_process): """Called on exit_process event - :param EXIT_PROCESS_DEBUG_INFO exit_process:""" - pass
+ :param EXIT_PROCESS_DEBUG_INFO exit_process:""" + pass
[docs] def on_create_thread(self, create_thread): """Called on create_thread event - :param CREATE_THREAD_DEBUG_INFO create_thread:""" - pass
+ :param CREATE_THREAD_DEBUG_INFO create_thread:""" + pass
[docs] def on_exit_thread(self, exit_thread): """Called on exit_thread event - :param EXIT_THREAD_DEBUG_INFO exit_thread:""" - pass
+ :param EXIT_THREAD_DEBUG_INFO exit_thread:""" + pass
[docs] def on_load_dll(self, load_dll): """Called on load_dll event - :param LOAD_DLL_DEBUG_INFO load_dll:""" - pass
+ :param LOAD_DLL_DEBUG_INFO load_dll:""" + pass
[docs] def on_unload_dll(self, unload_dll): """Called on unload_dll event - :param UNLOAD_DLL_DEBUG_INFO unload_dll:""" - pass
+ :param UNLOAD_DLL_DEBUG_INFO unload_dll:""" + pass
[docs] def on_output_debug_string(self, debug_string): """Called on debug_string event - :param OUTPUT_DEBUG_STRING_INFO debug_string:""" - pass
+ :param OUTPUT_DEBUG_STRING_INFO debug_string:""" + pass
[docs] def on_rip(self, rip_info): """Called on rip_info event - :param RIP_INFO rip_info:""" - pass
+ :param RIP_INFO rip_info:""" + pass @@ -1086,12 +1075,14 @@
@@ -1113,7 +1104,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/debug/localdbg.html b/docs/build/html/_modules/windows/debug/localdbg.html index 7b28d2d..4da01e8 100644 --- a/docs/build/html/_modules/windows/debug/localdbg.html +++ b/docs/build/html/_modules/windows/debug/localdbg.html @@ -1,33 +1,22 @@ + - + - windows.debug.localdbg — PythonForWindows 0.3 documentation - - - + + - - + + return self.current_exception[0].ExceptionRecord[0].ExceptionCode
[docs] def get_exception_context(self): - """Return context of current exception""" - return self.current_exception[0].ContextRecord[0]
+ """Return context of current exception""" + return self.current_exception[0].ContextRecord[0]
[docs] def single_step(self): """Make the current thread to single step""" - self.get_exception_context().EEFlags.TF = 1 - return windef.EXCEPTION_CONTINUE_EXECUTION
+ self.get_exception_context().EEFlags.TF = 1 + return windef.EXCEPTION_CONTINUE_EXECUTION def _pass_breakpoint(self, addr, single_step): with windows.utils.VirtualProtected(addr, 1, PAGE_EXECUTE_READWRITE): @@ -174,8 +163,8 @@
[docs] def on_exception(self, exc): """Called on exception""" if not self.get_exception_code() in winexception.exception_name_by_value: - return windef.EXCEPTION_CONTINUE_SEARCH - return windef.EXCEPTION_CONTINUE_EXECUTION
+ return windef.EXCEPTION_CONTINUE_SEARCH + return windef.EXCEPTION_CONTINUE_EXECUTION
[docs] def del_bp(self, bp): """Delete a breakpoint""" @@ -194,8 +183,8 @@ else: self.remove_hxbp_other_thread(bp.addr, threads_by_tid[tid]) del self._hxbp_breakpoint[tid][bp.addr] - return - raise NotImplementedError("Unknow BP type {0}".format(bp.type))
+ return + raise NotImplementedError("Unknow BP type {0}".format(bp.type))
[docs] def add_bp(self, bp, targets=None): """Add a breakpoint, bp is a "class:`Breakpoint` @@ -214,8 +203,8 @@ self.breakpoints[addr] = bp self._memory_save[addr] = windows.current_process.read_memory(addr, 1) with windows.utils.VirtualProtected(addr, 1, PAGE_EXECUTE_READWRITE): - windows.current_process.write_memory(addr, "\xcc") - return
+ windows.current_process.write_memory(addr, "\xcc") + return def add_bp_hxbp(self, bp, targets=None): if bp.type != HARDWARE_EXEC_BP: @@ -329,8 +318,8 @@ x = self.remove_hxbp_in_context(ctx, addr) if x is None: raise ValueError("Could not setup HXBP in {0}".format(thread)) - thread.set_context(ctx) - thread.resume() + thread.set_context(ctx) + thread.resume() @@ -340,12 +329,14 @@
@@ -367,7 +358,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/generated_def/flag.html b/docs/build/html/_modules/windows/generated_def/flag.html new file mode 100644 index 0000000..2be0d84 --- /dev/null +++ b/docs/build/html/_modules/windows/generated_def/flag.html @@ -0,0 +1,131 @@ + + + + + + + + windows.generated_def.flag — PythonForWindows 0.3 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for windows.generated_def.flag

+import sys
+
+if sys.version_info.major == 3:
+    long = int
+
+
[docs]class Flag(long): + def __new__(cls, name, value): + return super(Flag, cls).__new__(cls, value) + + def __init__(self, name, value): + self.name = name + + def __repr__(self): + return "{0}({1})".format(self.name, hex(self)) + + __str__ = __repr__ + + # Fix pickling with protocol 2 + def __getnewargs__(self, *args):
+ return self.name, long(self) + +class StrFlag(str): + def __new__(cls, name, value): + if isinstance(value, cls): + return value + return super(StrFlag, cls).__new__(cls, value) + + def __init__(self, name, value): + self.name = name + + def __repr__(self): + return "{0}({1})".format(self.name, str.__repr__(self)) + + # __str__ = __repr__ + + # Fix pickling with protocol 2 + def __getnewargs__(self, *args): + return self.name, str.__str__(self) + +def make_flag(name, value): + if isinstance(value, (int, long)): + return Flag(name, value) + return StrFlag(name, value) + +class FlagMapper(dict): + def __init__(self, *values): + self.update({x:x for x in values}) + + def __missing__(self, key): + return key +
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/windows/generated_def/windef.html b/docs/build/html/_modules/windows/generated_def/windef.html deleted file mode 100644 index c905609..0000000 --- a/docs/build/html/_modules/windows/generated_def/windef.html +++ /dev/null @@ -1,2033 +0,0 @@ - - - - - - - - windows.generated_def.windef — PythonForWindows 0.3 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for windows.generated_def.windef

-#Generated file
-
-
-import sys
-import platform
-if sys.version_info.major == 3:
-    long = int
-
-bits = platform.architecture()[0]
-bitness =  int(bits[:2])
-
-NATIVE_WORD_MAX_VALUE = 0xffffffff if bitness == 32 else 0xffffffffffffffff
-
-
[docs]class Flag(long): - def __new__(cls, name, value): - return super(Flag, cls).__new__(cls, value) - - def __init__(self, name, value): - self.name = name - - def __repr__(self): - return "{0}({1})".format(self.name, hex(self)) - - __str__ = __repr__ - - # Fix pickling with protocol 2 - def __getnewargs__(self, *args): - return self.name, long(self)
- -
[docs]class StrFlag(str): - def __new__(cls, name, value): - if isinstance(value, cls): - return value - return super(StrFlag, cls).__new__(cls, value) - - def __init__(self, name, value): - self.name = name - - def __repr__(self): - return "{0}({1})".format(self.name, str.__repr__(self)) - - # __str__ = __repr__ - - # Fix pickling with protocol 2 - def __getnewargs__(self, *args): - return self.name, str.__str__(self)
- -def make_flag(name, value): - if isinstance(value, (int, long)): - return Flag(name, value) - return StrFlag(name, value) - - -from ntstatus import * -INVALID_HANDLE_VALUE = make_flag("INVALID_HANDLE_VALUE", ( ( -1 ) & NATIVE_WORD_MAX_VALUE )) -NULL = make_flag("NULL", 0) -MAX_PATH = make_flag("MAX_PATH", 260) -ANYSIZE_ARRAY = make_flag("ANYSIZE_ARRAY", 1) -ANY_SIZE = make_flag("ANY_SIZE", 1) -IMAGE_SIZEOF_SHORT_NAME = make_flag("IMAGE_SIZEOF_SHORT_NAME", 8) -IMAGE_NUMBEROF_DIRECTORY_ENTRIES = make_flag("IMAGE_NUMBEROF_DIRECTORY_ENTRIES", 16) -INFINITE = make_flag("INFINITE", 0xFFFFFFFF) -STD_INPUT_HANDLE = make_flag("STD_INPUT_HANDLE", -10) -STD_OUTPUT_HANDLE = make_flag("STD_OUTPUT_HANDLE", -11) -STD_ERROR_HANDLE = make_flag("STD_ERROR_HANDLE", -12) -WARMING_NOT_SAME_FLAG_FOR_WINXP = make_flag("WARMING_NOT_SAME_FLAG_FOR_WINXP", 0) -PROCESS_TERMINATE = make_flag("PROCESS_TERMINATE", ( 0x0001 )) -PROCESS_CREATE_THREAD = make_flag("PROCESS_CREATE_THREAD", ( 0x0002 )) -PROCESS_SET_SESSIONID = make_flag("PROCESS_SET_SESSIONID", ( 0x0004 )) -PROCESS_VM_OPERATION = make_flag("PROCESS_VM_OPERATION", ( 0x0008 )) -PROCESS_VM_READ = make_flag("PROCESS_VM_READ", ( 0x0010 )) -PROCESS_VM_WRITE = make_flag("PROCESS_VM_WRITE", ( 0x0020 )) -PROCESS_DUP_HANDLE = make_flag("PROCESS_DUP_HANDLE", ( 0x0040 )) -PROCESS_CREATE_PROCESS = make_flag("PROCESS_CREATE_PROCESS", ( 0x0080 )) -PROCESS_SET_QUOTA = make_flag("PROCESS_SET_QUOTA", ( 0x0100 )) -PROCESS_SET_INFORMATION = make_flag("PROCESS_SET_INFORMATION", ( 0x0200 )) -PROCESS_QUERY_INFORMATION = make_flag("PROCESS_QUERY_INFORMATION", ( 0x0400 )) -PROCESS_SUSPEND_RESUME = make_flag("PROCESS_SUSPEND_RESUME", ( 0x0800 )) -PROCESS_QUERY_LIMITED_INFORMATION = make_flag("PROCESS_QUERY_LIMITED_INFORMATION", ( 0x1000 )) -THREAD_TERMINATE = make_flag("THREAD_TERMINATE", ( 0x0001 )) -THREAD_SUSPEND_RESUME = make_flag("THREAD_SUSPEND_RESUME", ( 0x0002 )) -THREAD_GET_CONTEXT = make_flag("THREAD_GET_CONTEXT", ( 0x0008 )) -THREAD_SET_CONTEXT = make_flag("THREAD_SET_CONTEXT", ( 0x0010 )) -THREAD_QUERY_INFORMATION = make_flag("THREAD_QUERY_INFORMATION", ( 0x0040 )) -THREAD_SET_INFORMATION = make_flag("THREAD_SET_INFORMATION", ( 0x0020 )) -THREAD_SET_THREAD_TOKEN = make_flag("THREAD_SET_THREAD_TOKEN", ( 0x0080 )) -THREAD_IMPERSONATE = make_flag("THREAD_IMPERSONATE", ( 0x0100 )) -THREAD_DIRECT_IMPERSONATION = make_flag("THREAD_DIRECT_IMPERSONATION", ( 0x0200 )) -PROCESS_ALL_ACCESS = make_flag("PROCESS_ALL_ACCESS", 0x001F0FFF) -THREAD_ALL_ACCESS = make_flag("THREAD_ALL_ACCESS", 0x001F03FF) -STARTF_USESHOWWINDOW = make_flag("STARTF_USESHOWWINDOW", 0x00000001) -STARTF_USESIZE = make_flag("STARTF_USESIZE", 0x00000002) -STARTF_USEPOSITION = make_flag("STARTF_USEPOSITION", 0x00000004) -STARTF_USECOUNTCHARS = make_flag("STARTF_USECOUNTCHARS", 0x00000008) -STARTF_USEFILLATTRIBUTE = make_flag("STARTF_USEFILLATTRIBUTE", 0x00000010) -STARTF_RUNFULLSCREEN = make_flag("STARTF_RUNFULLSCREEN", 0x00000020) -STARTF_FORCEONFEEDBACK = make_flag("STARTF_FORCEONFEEDBACK", 0x00000040) -STARTF_FORCEOFFFEEDBACK = make_flag("STARTF_FORCEOFFFEEDBACK", 0x00000080) -STARTF_USESTDHANDLES = make_flag("STARTF_USESTDHANDLES", 0x00000100) -SW_HIDE = make_flag("SW_HIDE", 0) -SW_SHOWNORMAL = make_flag("SW_SHOWNORMAL", 1) -SW_NORMAL = make_flag("SW_NORMAL", 1) -SW_SHOWMINIMIZED = make_flag("SW_SHOWMINIMIZED", 2) -SW_SHOWMAXIMIZED = make_flag("SW_SHOWMAXIMIZED", 3) -SW_MAXIMIZE = make_flag("SW_MAXIMIZE", 3) -SW_SHOWNOACTIVATE = make_flag("SW_SHOWNOACTIVATE", 4) -SW_SHOW = make_flag("SW_SHOW", 5) -SW_MINIMIZE = make_flag("SW_MINIMIZE", 6) -SW_SHOWMINNOACTIVE = make_flag("SW_SHOWMINNOACTIVE", 7) -SW_SHOWNA = make_flag("SW_SHOWNA", 8) -SW_RESTORE = make_flag("SW_RESTORE", 9) -SW_SHOWDEFAULT = make_flag("SW_SHOWDEFAULT", 10) -SW_FORCEMINIMIZE = make_flag("SW_FORCEMINIMIZE", 11) -SW_MAX = make_flag("SW_MAX", 11) -DEBUG_PROCESS = make_flag("DEBUG_PROCESS", 0x00000001) -DEBUG_ONLY_THIS_PROCESS = make_flag("DEBUG_ONLY_THIS_PROCESS", 0x00000002) -CREATE_SUSPENDED = make_flag("CREATE_SUSPENDED", 0x00000004) -DETACHED_PROCESS = make_flag("DETACHED_PROCESS", 0x00000008) -CREATE_NEW_CONSOLE = make_flag("CREATE_NEW_CONSOLE", 0x00000010) -NORMAL_PRIORITY_CLASS = make_flag("NORMAL_PRIORITY_CLASS", 0x00000020) -IDLE_PRIORITY_CLASS = make_flag("IDLE_PRIORITY_CLASS", 0x00000040) -HIGH_PRIORITY_CLASS = make_flag("HIGH_PRIORITY_CLASS", 0x00000080) -REALTIME_PRIORITY_CLASS = make_flag("REALTIME_PRIORITY_CLASS", 0x00000100) -CREATE_NEW_PROCESS_GROUP = make_flag("CREATE_NEW_PROCESS_GROUP", 0x00000200) -CREATE_UNICODE_ENVIRONMENT = make_flag("CREATE_UNICODE_ENVIRONMENT", 0x00000400) -CREATE_SEPARATE_WOW_VDM = make_flag("CREATE_SEPARATE_WOW_VDM", 0x00000800) -CREATE_SHARED_WOW_VDM = make_flag("CREATE_SHARED_WOW_VDM", 0x00001000) -CREATE_FORCEDOS = make_flag("CREATE_FORCEDOS", 0x00002000) -BELOW_NORMAL_PRIORITY_CLASS = make_flag("BELOW_NORMAL_PRIORITY_CLASS", 0x00004000) -ABOVE_NORMAL_PRIORITY_CLASS = make_flag("ABOVE_NORMAL_PRIORITY_CLASS", 0x00008000) -INHERIT_PARENT_AFFINITY = make_flag("INHERIT_PARENT_AFFINITY", 0x00010000) -INHERIT_CALLER_PRIORITY = make_flag("INHERIT_CALLER_PRIORITY", 0x00020000) -CREATE_PROTECTED_PROCESS = make_flag("CREATE_PROTECTED_PROCESS", 0x00040000) -EXTENDED_STARTUPINFO_PRESENT = make_flag("EXTENDED_STARTUPINFO_PRESENT", 0x00080000) -PROCESS_MODE_BACKGROUND_BEGIN = make_flag("PROCESS_MODE_BACKGROUND_BEGIN", 0x00100000) -PROCESS_MODE_BACKGROUND_END = make_flag("PROCESS_MODE_BACKGROUND_END", 0x00200000) -CREATE_BREAKAWAY_FROM_JOB = make_flag("CREATE_BREAKAWAY_FROM_JOB", 0x01000000) -CREATE_PRESERVE_CODE_AUTHZ_LEVEL = make_flag("CREATE_PRESERVE_CODE_AUTHZ_LEVEL", 0x02000000) -CREATE_DEFAULT_ERROR_MODE = make_flag("CREATE_DEFAULT_ERROR_MODE", 0x04000000) -CREATE_NO_WINDOW = make_flag("CREATE_NO_WINDOW", 0x08000000) -PROFILE_USER = make_flag("PROFILE_USER", 0x10000000) -PROFILE_KERNEL = make_flag("PROFILE_KERNEL", 0x20000000) -PROFILE_SERVER = make_flag("PROFILE_SERVER", 0x40000000) -CREATE_IGNORE_SYSTEM_DEFAULT = make_flag("CREATE_IGNORE_SYSTEM_DEFAULT", 0x80000000) -WAIT_IO_COMPLETION = make_flag("WAIT_IO_COMPLETION", STATUS_USER_APC) -STILL_ACTIVE = make_flag("STILL_ACTIVE", STATUS_PENDING) -EXCEPTION_ACCESS_VIOLATION = make_flag("EXCEPTION_ACCESS_VIOLATION", STATUS_ACCESS_VIOLATION) -EXCEPTION_DATATYPE_MISALIGNMENT = make_flag("EXCEPTION_DATATYPE_MISALIGNMENT", STATUS_DATATYPE_MISALIGNMENT) -EXCEPTION_BREAKPOINT = make_flag("EXCEPTION_BREAKPOINT", STATUS_BREAKPOINT) -EXCEPTION_SINGLE_STEP = make_flag("EXCEPTION_SINGLE_STEP", STATUS_SINGLE_STEP) -EXCEPTION_ARRAY_BOUNDS_EXCEEDED = make_flag("EXCEPTION_ARRAY_BOUNDS_EXCEEDED", STATUS_ARRAY_BOUNDS_EXCEEDED) -EXCEPTION_FLT_DENORMAL_OPERAND = make_flag("EXCEPTION_FLT_DENORMAL_OPERAND", STATUS_FLOAT_DENORMAL_OPERAND) -EXCEPTION_FLT_DIVIDE_BY_ZERO = make_flag("EXCEPTION_FLT_DIVIDE_BY_ZERO", STATUS_FLOAT_DIVIDE_BY_ZERO) -EXCEPTION_FLT_INEXACT_RESULT = make_flag("EXCEPTION_FLT_INEXACT_RESULT", STATUS_FLOAT_INEXACT_RESULT) -EXCEPTION_FLT_INVALID_OPERATION = make_flag("EXCEPTION_FLT_INVALID_OPERATION", STATUS_FLOAT_INVALID_OPERATION) -EXCEPTION_FLT_OVERFLOW = make_flag("EXCEPTION_FLT_OVERFLOW", STATUS_FLOAT_OVERFLOW) -EXCEPTION_FLT_STACK_CHECK = make_flag("EXCEPTION_FLT_STACK_CHECK", STATUS_FLOAT_STACK_CHECK) -EXCEPTION_FLT_UNDERFLOW = make_flag("EXCEPTION_FLT_UNDERFLOW", STATUS_FLOAT_UNDERFLOW) -EXCEPTION_INT_DIVIDE_BY_ZERO = make_flag("EXCEPTION_INT_DIVIDE_BY_ZERO", STATUS_INTEGER_DIVIDE_BY_ZERO) -EXCEPTION_INT_OVERFLOW = make_flag("EXCEPTION_INT_OVERFLOW", STATUS_INTEGER_OVERFLOW) -EXCEPTION_PRIV_INSTRUCTION = make_flag("EXCEPTION_PRIV_INSTRUCTION", STATUS_PRIVILEGED_INSTRUCTION) -EXCEPTION_IN_PAGE_ERROR = make_flag("EXCEPTION_IN_PAGE_ERROR", STATUS_IN_PAGE_ERROR) -EXCEPTION_ILLEGAL_INSTRUCTION = make_flag("EXCEPTION_ILLEGAL_INSTRUCTION", STATUS_ILLEGAL_INSTRUCTION) -EXCEPTION_NONCONTINUABLE_EXCEPTION = make_flag("EXCEPTION_NONCONTINUABLE_EXCEPTION", STATUS_NONCONTINUABLE_EXCEPTION) -EXCEPTION_STACK_OVERFLOW = make_flag("EXCEPTION_STACK_OVERFLOW", STATUS_STACK_OVERFLOW) -EXCEPTION_INVALID_DISPOSITION = make_flag("EXCEPTION_INVALID_DISPOSITION", STATUS_INVALID_DISPOSITION) -EXCEPTION_GUARD_PAGE = make_flag("EXCEPTION_GUARD_PAGE", STATUS_GUARD_PAGE_VIOLATION) -EXCEPTION_INVALID_HANDLE = make_flag("EXCEPTION_INVALID_HANDLE", STATUS_INVALID_HANDLE) -EXCEPTION_POSSIBLE_DEADLOCK = make_flag("EXCEPTION_POSSIBLE_DEADLOCK", STATUS_POSSIBLE_DEADLOCK) -CONTROL_C_EXIT = make_flag("CONTROL_C_EXIT", STATUS_CONTROL_C_EXIT) -EXCEPTION_DEBUG_EVENT = make_flag("EXCEPTION_DEBUG_EVENT", 1) -CREATE_THREAD_DEBUG_EVENT = make_flag("CREATE_THREAD_DEBUG_EVENT", 2) -CREATE_PROCESS_DEBUG_EVENT = make_flag("CREATE_PROCESS_DEBUG_EVENT", 3) -EXIT_THREAD_DEBUG_EVENT = make_flag("EXIT_THREAD_DEBUG_EVENT", 4) -EXIT_PROCESS_DEBUG_EVENT = make_flag("EXIT_PROCESS_DEBUG_EVENT", 5) -LOAD_DLL_DEBUG_EVENT = make_flag("LOAD_DLL_DEBUG_EVENT", 6) -UNLOAD_DLL_DEBUG_EVENT = make_flag("UNLOAD_DLL_DEBUG_EVENT", 7) -OUTPUT_DEBUG_STRING_EVENT = make_flag("OUTPUT_DEBUG_STRING_EVENT", 8) -RIP_EVENT = make_flag("RIP_EVENT", 9) -TH32CS_SNAPHEAPLIST = make_flag("TH32CS_SNAPHEAPLIST", 0x00000001) -TH32CS_SNAPPROCESS = make_flag("TH32CS_SNAPPROCESS", 0x00000002) -TH32CS_SNAPTHREAD = make_flag("TH32CS_SNAPTHREAD", 0x00000004) -TH32CS_SNAPMODULE = make_flag("TH32CS_SNAPMODULE", 0x00000008) -TH32CS_SNAPMODULE32 = make_flag("TH32CS_SNAPMODULE32", 0x00000010) -TH32CS_SNAPALL = make_flag("TH32CS_SNAPALL", ( TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE )) -TH32CS_INHERIT = make_flag("TH32CS_INHERIT", 0x80000000) -CONTEXT_I386 = make_flag("CONTEXT_I386", 0x00010000) -CONTEXT_CONTROL = make_flag("CONTEXT_CONTROL", 0x00000001) -CONTEXT_INTEGER = make_flag("CONTEXT_INTEGER", 0x00000002) -CONTEXT_SEGMENTS = make_flag("CONTEXT_SEGMENTS", 0x00000004) -CONTEXT_FLOATING_POINT = make_flag("CONTEXT_FLOATING_POINT", 0x00000008) -CONTEXT_DEBUG_REGISTERS = make_flag("CONTEXT_DEBUG_REGISTERS", 0x00000010) -CONTEXT_EXTENDED_REGISTERS = make_flag("CONTEXT_EXTENDED_REGISTERS", 0x00000020) -CONTEXT_FULL = make_flag("CONTEXT_FULL", ( CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS )) -CONTEXT_ALL = make_flag("CONTEXT_ALL", ( CONTEXT_FULL | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_EXTENDED_REGISTERS )) -CONTEXT_FULL = make_flag("CONTEXT_FULL", CONTEXT_I386 | CONTEXT_FULL) -CONTEXT_ALL = make_flag("CONTEXT_ALL", CONTEXT_I386 | CONTEXT_ALL) -CONTEXT_XSTATE = make_flag("CONTEXT_XSTATE", ( CONTEXT_I386 | 0x00000040 )) -PAGE_NOACCESS = make_flag("PAGE_NOACCESS", 0x01) -PAGE_READONLY = make_flag("PAGE_READONLY", 0x02) -PAGE_READWRITE = make_flag("PAGE_READWRITE", 0x04) -PAGE_WRITECOPY = make_flag("PAGE_WRITECOPY", 0x08) -PAGE_EXECUTE = make_flag("PAGE_EXECUTE", 0x10) -PAGE_EXECUTE_READ = make_flag("PAGE_EXECUTE_READ", 0x20) -PAGE_EXECUTE_READWRITE = make_flag("PAGE_EXECUTE_READWRITE", 0x40) -PAGE_EXECUTE_WRITECOPY = make_flag("PAGE_EXECUTE_WRITECOPY", 0x80) -PAGE_GUARD = make_flag("PAGE_GUARD", 0x100) -PAGE_NOCACHE = make_flag("PAGE_NOCACHE", 0x200) -PAGE_WRITECOMBINE = make_flag("PAGE_WRITECOMBINE", 0x400) -MEM_COMMIT = make_flag("MEM_COMMIT", 0x1000) -MEM_RESERVE = make_flag("MEM_RESERVE", 0x2000) -MEM_DECOMMIT = make_flag("MEM_DECOMMIT", 0x4000) -MEM_RELEASE = make_flag("MEM_RELEASE", 0x8000) -MEM_FREE = make_flag("MEM_FREE", 0x10000) -MEM_PRIVATE = make_flag("MEM_PRIVATE", 0x20000) -MEM_MAPPED = make_flag("MEM_MAPPED", 0x40000) -MEM_RESET = make_flag("MEM_RESET", 0x80000) -MEM_TOP_DOWN = make_flag("MEM_TOP_DOWN", 0x100000) -MEM_WRITE_WATCH = make_flag("MEM_WRITE_WATCH", 0x200000) -MEM_PHYSICAL = make_flag("MEM_PHYSICAL", 0x400000) -MEM_ROTATE = make_flag("MEM_ROTATE", 0x800000) -MEM_LARGE_PAGES = make_flag("MEM_LARGE_PAGES", 0x20000000) -MEM_4MB_PAGES = make_flag("MEM_4MB_PAGES", 0x80000000) -SEC_FILE = make_flag("SEC_FILE", 0x800000) -SEC_IMAGE = make_flag("SEC_IMAGE", 0x1000000) -SEC_PROTECTED_IMAGE = make_flag("SEC_PROTECTED_IMAGE", 0x2000000) -SEC_RESERVE = make_flag("SEC_RESERVE", 0x4000000) -SEC_COMMIT = make_flag("SEC_COMMIT", 0x8000000) -SEC_NOCACHE = make_flag("SEC_NOCACHE", 0x10000000) -SEC_WRITECOMBINE = make_flag("SEC_WRITECOMBINE", 0x40000000) -SEC_LARGE_PAGES = make_flag("SEC_LARGE_PAGES", 0x80000000) -MEM_IMAGE = make_flag("MEM_IMAGE", SEC_IMAGE) -WRITE_WATCH_FLAG_RESET = make_flag("WRITE_WATCH_FLAG_RESET", 0x01) -DELETE = make_flag("DELETE", ( 0x00010000 )) -READ_CONTROL = make_flag("READ_CONTROL", ( 0x00020000 )) -WRITE_DAC = make_flag("WRITE_DAC", ( 0x00040000 )) -WRITE_OWNER = make_flag("WRITE_OWNER", ( 0x00080000 )) -SYNCHRONIZE = make_flag("SYNCHRONIZE", ( 0x00100000 )) -STANDARD_RIGHTS_REQUIRED = make_flag("STANDARD_RIGHTS_REQUIRED", ( 0x000F0000 )) -STANDARD_RIGHTS_READ = make_flag("STANDARD_RIGHTS_READ", ( READ_CONTROL )) -STANDARD_RIGHTS_WRITE = make_flag("STANDARD_RIGHTS_WRITE", ( READ_CONTROL )) -STANDARD_RIGHTS_EXECUTE = make_flag("STANDARD_RIGHTS_EXECUTE", ( READ_CONTROL )) -STANDARD_RIGHTS_ALL = make_flag("STANDARD_RIGHTS_ALL", ( 0x001F0000 )) -SPECIFIC_RIGHTS_ALL = make_flag("SPECIFIC_RIGHTS_ALL", ( 0x0000FFFF )) -TOKEN_ASSIGN_PRIMARY = make_flag("TOKEN_ASSIGN_PRIMARY", ( 0x0001 )) -TOKEN_DUPLICATE = make_flag("TOKEN_DUPLICATE", ( 0x0002 )) -TOKEN_IMPERSONATE = make_flag("TOKEN_IMPERSONATE", ( 0x0004 )) -TOKEN_QUERY = make_flag("TOKEN_QUERY", ( 0x0008 )) -TOKEN_QUERY_SOURCE = make_flag("TOKEN_QUERY_SOURCE", ( 0x0010 )) -TOKEN_ADJUST_PRIVILEGES = make_flag("TOKEN_ADJUST_PRIVILEGES", ( 0x0020 )) -TOKEN_ADJUST_GROUPS = make_flag("TOKEN_ADJUST_GROUPS", ( 0x0040 )) -TOKEN_ADJUST_DEFAULT = make_flag("TOKEN_ADJUST_DEFAULT", ( 0x0080 )) -TOKEN_ADJUST_SESSIONID = make_flag("TOKEN_ADJUST_SESSIONID", ( 0x0100 )) -TOKEN_ALL_ACCESS_P = make_flag("TOKEN_ALL_ACCESS_P", ( STANDARD_RIGHTS_REQUIRED | TOKEN_ASSIGN_PRIMARY | TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY | TOKEN_QUERY_SOURCE | TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT )) -TOKEN_ALL_ACCESS = make_flag("TOKEN_ALL_ACCESS", ( TOKEN_ALL_ACCESS_P | TOKEN_ADJUST_SESSIONID )) -SE_PRIVILEGE_ENABLED_BY_DEFAULT = make_flag("SE_PRIVILEGE_ENABLED_BY_DEFAULT", ( 0x00000001 )) -SE_PRIVILEGE_ENABLED = make_flag("SE_PRIVILEGE_ENABLED", ( 0x00000002 )) -SE_PRIVILEGE_REMOVED = make_flag("SE_PRIVILEGE_REMOVED", ( 0X00000004 )) -SE_PRIVILEGE_USED_FOR_ACCESS = make_flag("SE_PRIVILEGE_USED_FOR_ACCESS", ( 0x80000000 )) -AF_UNSPEC = make_flag("AF_UNSPEC", 0) -AF_UNIX = make_flag("AF_UNIX", 1) -AF_INET = make_flag("AF_INET", 2) -AF_IMPLINK = make_flag("AF_IMPLINK", 3) -AF_PUP = make_flag("AF_PUP", 4) -AF_CHAOS = make_flag("AF_CHAOS", 5) -AF_NS = make_flag("AF_NS", 6) -AF_IPX = make_flag("AF_IPX", AF_NS) -AF_ISO = make_flag("AF_ISO", 7) -AF_OSI = make_flag("AF_OSI", AF_ISO) -AF_ECMA = make_flag("AF_ECMA", 8) -AF_DATAKIT = make_flag("AF_DATAKIT", 9) -AF_CCITT = make_flag("AF_CCITT", 10) -AF_SNA = make_flag("AF_SNA", 11) -AF_DECnet = make_flag("AF_DECnet", 12) -AF_DLI = make_flag("AF_DLI", 13) -AF_LAT = make_flag("AF_LAT", 14) -AF_HYLINK = make_flag("AF_HYLINK", 15) -AF_APPLETALK = make_flag("AF_APPLETALK", 16) -AF_NETBIOS = make_flag("AF_NETBIOS", 17) -AF_VOICEVIEW = make_flag("AF_VOICEVIEW", 18) -AF_FIREFOX = make_flag("AF_FIREFOX", 19) -AF_UNKNOWN1 = make_flag("AF_UNKNOWN1", 20) -AF_BAN = make_flag("AF_BAN", 21) -AF_ATM = make_flag("AF_ATM", 22) -AF_INET6 = make_flag("AF_INET6", 23) -AF_CLUSTER = make_flag("AF_CLUSTER", 24) -AF_12844 = make_flag("AF_12844", 25) -AF_IRDA = make_flag("AF_IRDA", 26) -AF_NETDES = make_flag("AF_NETDES", 28) -EXCEPTION_NONCONTINUABLE = make_flag("EXCEPTION_NONCONTINUABLE", 0x1) -EXCEPTION_MAXIMUM_PARAMETERS = make_flag("EXCEPTION_MAXIMUM_PARAMETERS", 15) -EXCEPTION_EXECUTE_HANDLER = make_flag("EXCEPTION_EXECUTE_HANDLER", 1) -EXCEPTION_CONTINUE_SEARCH = make_flag("EXCEPTION_CONTINUE_SEARCH", 0) -EXCEPTION_CONTINUE_EXECUTION = make_flag("EXCEPTION_CONTINUE_EXECUTION", -1) -GENERIC_READ = make_flag("GENERIC_READ", ( 0x80000000 )) -GENERIC_WRITE = make_flag("GENERIC_WRITE", ( 0x40000000 )) -GENERIC_EXECUTE = make_flag("GENERIC_EXECUTE", ( 0x20000000 )) -GENERIC_ALL = make_flag("GENERIC_ALL", ( 0x10000000 )) -FILE_FLAG_WRITE_THROUGH = make_flag("FILE_FLAG_WRITE_THROUGH", 0x80000000) -FILE_FLAG_OVERLAPPED = make_flag("FILE_FLAG_OVERLAPPED", 0x40000000) -FILE_FLAG_NO_BUFFERING = make_flag("FILE_FLAG_NO_BUFFERING", 0x20000000) -FILE_FLAG_RANDOM_ACCESS = make_flag("FILE_FLAG_RANDOM_ACCESS", 0x10000000) -FILE_FLAG_SEQUENTIAL_SCAN = make_flag("FILE_FLAG_SEQUENTIAL_SCAN", 0x08000000) -FILE_FLAG_DELETE_ON_CLOSE = make_flag("FILE_FLAG_DELETE_ON_CLOSE", 0x04000000) -FILE_FLAG_BACKUP_SEMANTICS = make_flag("FILE_FLAG_BACKUP_SEMANTICS", 0x02000000) -FILE_FLAG_POSIX_SEMANTICS = make_flag("FILE_FLAG_POSIX_SEMANTICS", 0x01000000) -FILE_FLAG_OPEN_REPARSE_POINT = make_flag("FILE_FLAG_OPEN_REPARSE_POINT", 0x00200000) -FILE_FLAG_OPEN_NO_RECALL = make_flag("FILE_FLAG_OPEN_NO_RECALL", 0x00100000) -FILE_FLAG_FIRST_PIPE_INSTANCE = make_flag("FILE_FLAG_FIRST_PIPE_INSTANCE", 0x00080000) -CREATE_NEW = make_flag("CREATE_NEW", 1) -CREATE_ALWAYS = make_flag("CREATE_ALWAYS", 2) -OPEN_EXISTING = make_flag("OPEN_EXISTING", 3) -OPEN_ALWAYS = make_flag("OPEN_ALWAYS", 4) -TRUNCATE_EXISTING = make_flag("TRUNCATE_EXISTING", 5) -FILE_SHARE_READ = make_flag("FILE_SHARE_READ", 0x00000001) -FILE_SHARE_WRITE = make_flag("FILE_SHARE_WRITE", 0x00000002) -FILE_SHARE_DELETE = make_flag("FILE_SHARE_DELETE", 0x00000004) -FILE_ATTRIBUTE_READONLY = make_flag("FILE_ATTRIBUTE_READONLY", 0x00000001) -FILE_ATTRIBUTE_HIDDEN = make_flag("FILE_ATTRIBUTE_HIDDEN", 0x00000002) -FILE_ATTRIBUTE_SYSTEM = make_flag("FILE_ATTRIBUTE_SYSTEM", 0x00000004) -FILE_ATTRIBUTE_DIRECTORY = make_flag("FILE_ATTRIBUTE_DIRECTORY", 0x00000010) -FILE_ATTRIBUTE_ARCHIVE = make_flag("FILE_ATTRIBUTE_ARCHIVE", 0x00000020) -FILE_ATTRIBUTE_DEVICE = make_flag("FILE_ATTRIBUTE_DEVICE", 0x00000040) -FILE_ATTRIBUTE_NORMAL = make_flag("FILE_ATTRIBUTE_NORMAL", 0x00000080) -FILE_ATTRIBUTE_TEMPORARY = make_flag("FILE_ATTRIBUTE_TEMPORARY", 0x00000100) -FILE_ATTRIBUTE_SPARSE_FILE = make_flag("FILE_ATTRIBUTE_SPARSE_FILE", 0x00000200) -FILE_ATTRIBUTE_REPARSE_POINT = make_flag("FILE_ATTRIBUTE_REPARSE_POINT", 0x00000400) -FILE_ATTRIBUTE_COMPRESSED = make_flag("FILE_ATTRIBUTE_COMPRESSED", 0x00000800) -FILE_ATTRIBUTE_OFFLINE = make_flag("FILE_ATTRIBUTE_OFFLINE", 0x00001000) -FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = make_flag("FILE_ATTRIBUTE_NOT_CONTENT_INDEXED", 0x00002000) -FILE_ATTRIBUTE_ENCRYPTED = make_flag("FILE_ATTRIBUTE_ENCRYPTED", 0x00004000) -FILE_ATTRIBUTE_VIRTUAL = make_flag("FILE_ATTRIBUTE_VIRTUAL", 0x00010000) -FILE_NOTIFY_CHANGE_FILE_NAME = make_flag("FILE_NOTIFY_CHANGE_FILE_NAME", 0x00000001) -FILE_NOTIFY_CHANGE_DIR_NAME = make_flag("FILE_NOTIFY_CHANGE_DIR_NAME", 0x00000002) -FILE_NOTIFY_CHANGE_ATTRIBUTES = make_flag("FILE_NOTIFY_CHANGE_ATTRIBUTES", 0x00000004) -FILE_NOTIFY_CHANGE_SIZE = make_flag("FILE_NOTIFY_CHANGE_SIZE", 0x00000008) -FILE_NOTIFY_CHANGE_LAST_WRITE = make_flag("FILE_NOTIFY_CHANGE_LAST_WRITE", 0x00000010) -FILE_NOTIFY_CHANGE_LAST_ACCESS = make_flag("FILE_NOTIFY_CHANGE_LAST_ACCESS", 0x00000020) -FILE_NOTIFY_CHANGE_CREATION = make_flag("FILE_NOTIFY_CHANGE_CREATION", 0x00000040) -FILE_NOTIFY_CHANGE_SECURITY = make_flag("FILE_NOTIFY_CHANGE_SECURITY", 0x00000100) -FILE_ACTION_ADDED = make_flag("FILE_ACTION_ADDED", 0x00000001) -FILE_ACTION_REMOVED = make_flag("FILE_ACTION_REMOVED", 0x00000002) -FILE_ACTION_MODIFIED = make_flag("FILE_ACTION_MODIFIED", 0x00000003) -FILE_ACTION_RENAMED_OLD_NAME = make_flag("FILE_ACTION_RENAMED_OLD_NAME", 0x00000004) -FILE_ACTION_RENAMED_NEW_NAME = make_flag("FILE_ACTION_RENAMED_NEW_NAME", 0x00000005) -MAILSLOT_NO_MESSAGE = make_flag("MAILSLOT_NO_MESSAGE", ( -1 )) -MAILSLOT_WAIT_FOREVER = make_flag("MAILSLOT_WAIT_FOREVER", ( -1 )) -FILE_CASE_SENSITIVE_SEARCH = make_flag("FILE_CASE_SENSITIVE_SEARCH", 0x00000001) -FILE_CASE_PRESERVED_NAMES = make_flag("FILE_CASE_PRESERVED_NAMES", 0x00000002) -FILE_UNICODE_ON_DISK = make_flag("FILE_UNICODE_ON_DISK", 0x00000004) -FILE_PERSISTENT_ACLS = make_flag("FILE_PERSISTENT_ACLS", 0x00000008) -FILE_FILE_COMPRESSION = make_flag("FILE_FILE_COMPRESSION", 0x00000010) -FILE_VOLUME_QUOTAS = make_flag("FILE_VOLUME_QUOTAS", 0x00000020) -FILE_SUPPORTS_SPARSE_FILES = make_flag("FILE_SUPPORTS_SPARSE_FILES", 0x00000040) -FILE_SUPPORTS_REPARSE_POINTS = make_flag("FILE_SUPPORTS_REPARSE_POINTS", 0x00000080) -FILE_SUPPORTS_REMOTE_STORAGE = make_flag("FILE_SUPPORTS_REMOTE_STORAGE", 0x00000100) -FILE_VOLUME_IS_COMPRESSED = make_flag("FILE_VOLUME_IS_COMPRESSED", 0x00008000) -FILE_SUPPORTS_OBJECT_IDS = make_flag("FILE_SUPPORTS_OBJECT_IDS", 0x00010000) -FILE_SUPPORTS_ENCRYPTION = make_flag("FILE_SUPPORTS_ENCRYPTION", 0x00020000) -FILE_NAMED_STREAMS = make_flag("FILE_NAMED_STREAMS", 0x00040000) -FILE_READ_ONLY_VOLUME = make_flag("FILE_READ_ONLY_VOLUME", 0x00080000) -FILE_SEQUENTIAL_WRITE_ONCE = make_flag("FILE_SEQUENTIAL_WRITE_ONCE", 0x00100000) -FILE_SUPPORTS_TRANSACTIONS = make_flag("FILE_SUPPORTS_TRANSACTIONS", 0x00200000) -FILE_SUPPORTS_HARD_LINKS = make_flag("FILE_SUPPORTS_HARD_LINKS", 0x00400000) -FILE_SUPPORTS_EXTENDED_ATTRIBUTES = make_flag("FILE_SUPPORTS_EXTENDED_ATTRIBUTES", 0x00800000) -FILE_SUPPORTS_OPEN_BY_FILE_ID = make_flag("FILE_SUPPORTS_OPEN_BY_FILE_ID", 0x01000000) -FILE_SUPPORTS_USN_JOURNAL = make_flag("FILE_SUPPORTS_USN_JOURNAL", 0x02000000) -HKEY_CLASSES_ROOT = make_flag("HKEY_CLASSES_ROOT", ( 0x80000000 )) -HKEY_CURRENT_USER = make_flag("HKEY_CURRENT_USER", ( 0x80000001 )) -HKEY_LOCAL_MACHINE = make_flag("HKEY_LOCAL_MACHINE", ( 0x80000002 )) -HKEY_USERS = make_flag("HKEY_USERS", ( 0x80000003 )) -HKEY_PERFORMANCE_DATA = make_flag("HKEY_PERFORMANCE_DATA", ( 0x80000004 )) -HKEY_PERFORMANCE_TEXT = make_flag("HKEY_PERFORMANCE_TEXT", ( 0x80000050 )) -HKEY_PERFORMANCE_NLSTEXT = make_flag("HKEY_PERFORMANCE_NLSTEXT", ( 0x80000060 )) -RRF_RT_REG_NONE = make_flag("RRF_RT_REG_NONE", 0x00000001) -RRF_RT_REG_SZ = make_flag("RRF_RT_REG_SZ", 0x00000002) -RRF_RT_REG_EXPAND_SZ = make_flag("RRF_RT_REG_EXPAND_SZ", 0x00000004) -RRF_RT_REG_BINARY = make_flag("RRF_RT_REG_BINARY", 0x00000008) -RRF_RT_REG_DWORD = make_flag("RRF_RT_REG_DWORD", 0x00000010) -RRF_RT_REG_MULTI_SZ = make_flag("RRF_RT_REG_MULTI_SZ", 0x00000020) -RRF_RT_REG_QWORD = make_flag("RRF_RT_REG_QWORD", 0x00000040) -RRF_RT_DWORD = make_flag("RRF_RT_DWORD", ( RRF_RT_REG_BINARY | RRF_RT_REG_DWORD )) -RRF_RT_QWORD = make_flag("RRF_RT_QWORD", ( RRF_RT_REG_BINARY | RRF_RT_REG_QWORD )) -RRF_RT_ANY = make_flag("RRF_RT_ANY", 0x0000ffff) -RRF_NOEXPAND = make_flag("RRF_NOEXPAND", 0x10000000) -RRF_ZEROONFAILURE = make_flag("RRF_ZEROONFAILURE", 0x20000000) -KEY_QUERY_VALUE = make_flag("KEY_QUERY_VALUE", ( 0x0001 )) -KEY_SET_VALUE = make_flag("KEY_SET_VALUE", ( 0x0002 )) -KEY_CREATE_SUB_KEY = make_flag("KEY_CREATE_SUB_KEY", ( 0x0004 )) -KEY_ENUMERATE_SUB_KEYS = make_flag("KEY_ENUMERATE_SUB_KEYS", ( 0x0008 )) -KEY_NOTIFY = make_flag("KEY_NOTIFY", ( 0x0010 )) -KEY_CREATE_LINK = make_flag("KEY_CREATE_LINK", ( 0x0020 )) -KEY_WOW64_32KEY = make_flag("KEY_WOW64_32KEY", ( 0x0200 )) -KEY_WOW64_64KEY = make_flag("KEY_WOW64_64KEY", ( 0x0100 )) -KEY_WOW64_RES = make_flag("KEY_WOW64_RES", ( 0x0300 )) -KEY_READ = make_flag("KEY_READ", ( ( STANDARD_RIGHTS_READ|KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS|KEY_NOTIFY ) & ( ~SYNCHRONIZE ) )) -KEY_WRITE = make_flag("KEY_WRITE", ( ( STANDARD_RIGHTS_WRITE|KEY_SET_VALUE|KEY_CREATE_SUB_KEY ) & ( ~SYNCHRONIZE ) )) -KEY_EXECUTE = make_flag("KEY_EXECUTE", ( ( KEY_READ ) & ( ~SYNCHRONIZE ) )) -KEY_ALL_ACCESS = make_flag("KEY_ALL_ACCESS", ( ( STANDARD_RIGHTS_ALL|KEY_QUERY_VALUE|KEY_SET_VALUE|KEY_CREATE_SUB_KEY|KEY_ENUMERATE_SUB_KEYS|KEY_NOTIFY|KEY_CREATE_LINK ) & ( ~SYNCHRONIZE ) )) -ERROR_NOT_ALL_ASSIGNED = make_flag("ERROR_NOT_ALL_ASSIGNED", 1300) -S_OK = make_flag("S_OK", 0) -S_FALSE = make_flag("S_FALSE", 1) -E_NOINTERFACE = make_flag("E_NOINTERFACE", 0x80004002) -E_FAIL = make_flag("E_FAIL", 0x80004005) -DEBUG_EVENT_BREAKPOINT = make_flag("DEBUG_EVENT_BREAKPOINT", 0x00000001) -DEBUG_EVENT_EXCEPTION = make_flag("DEBUG_EVENT_EXCEPTION", 0x00000002) -DEBUG_EVENT_CREATE_THREAD = make_flag("DEBUG_EVENT_CREATE_THREAD", 0x00000004) -DEBUG_EVENT_EXIT_THREAD = make_flag("DEBUG_EVENT_EXIT_THREAD", 0x00000008) -DEBUG_EVENT_CREATE_PROCESS = make_flag("DEBUG_EVENT_CREATE_PROCESS", 0x00000010) -DEBUG_EVENT_EXIT_PROCESS = make_flag("DEBUG_EVENT_EXIT_PROCESS", 0x00000020) -DEBUG_EVENT_LOAD_MODULE = make_flag("DEBUG_EVENT_LOAD_MODULE", 0x00000040) -DEBUG_EVENT_UNLOAD_MODULE = make_flag("DEBUG_EVENT_UNLOAD_MODULE", 0x00000080) -DEBUG_EVENT_SYSTEM_ERROR = make_flag("DEBUG_EVENT_SYSTEM_ERROR", 0x00000100) -DEBUG_EVENT_SESSION_STATUS = make_flag("DEBUG_EVENT_SESSION_STATUS", 0x00000200) -DEBUG_EVENT_CHANGE_DEBUGGEE_STATE = make_flag("DEBUG_EVENT_CHANGE_DEBUGGEE_STATE", 0x00000400) -DEBUG_EVENT_CHANGE_ENGINE_STATE = make_flag("DEBUG_EVENT_CHANGE_ENGINE_STATE", 0x00000800) -DEBUG_EVENT_CHANGE_SYMBOL_STATE = make_flag("DEBUG_EVENT_CHANGE_SYMBOL_STATE", 0x00001000) -WOW64_MAXIMUM_SUPPORTED_EXTENSION = make_flag("WOW64_MAXIMUM_SUPPORTED_EXTENSION", 512) -WOW64_SIZE_OF_80387_REGISTERS = make_flag("WOW64_SIZE_OF_80387_REGISTERS", 80) -REG_NONE = make_flag("REG_NONE", ( 0 )) -REG_SZ = make_flag("REG_SZ", ( 1 )) -REG_EXPAND_SZ = make_flag("REG_EXPAND_SZ", ( 2 )) -REG_BINARY = make_flag("REG_BINARY", ( 3 )) -REG_DWORD = make_flag("REG_DWORD", ( 4 )) -REG_DWORD_LITTLE_ENDIAN = make_flag("REG_DWORD_LITTLE_ENDIAN", ( 4 )) -REG_DWORD_BIG_ENDIAN = make_flag("REG_DWORD_BIG_ENDIAN", ( 5 )) -REG_LINK = make_flag("REG_LINK", ( 6 )) -REG_MULTI_SZ = make_flag("REG_MULTI_SZ", ( 7 )) -REG_RESOURCE_LIST = make_flag("REG_RESOURCE_LIST", ( 8 )) -REG_FULL_RESOURCE_DESCRIPTOR = make_flag("REG_FULL_RESOURCE_DESCRIPTOR", ( 9 )) -REG_RESOURCE_REQUIREMENTS_LIST = make_flag("REG_RESOURCE_REQUIREMENTS_LIST", ( 10 )) -REG_QWORD = make_flag("REG_QWORD", ( 11 )) -REG_QWORD_LITTLE_ENDIAN = make_flag("REG_QWORD_LITTLE_ENDIAN", ( 11 )) -IMAGE_FILE_RELOCS_STRIPPED = make_flag("IMAGE_FILE_RELOCS_STRIPPED", 0x0001) -IMAGE_FILE_EXECUTABLE_IMAGE = make_flag("IMAGE_FILE_EXECUTABLE_IMAGE", 0x0002) -IMAGE_FILE_LINE_NUMS_STRIPPED = make_flag("IMAGE_FILE_LINE_NUMS_STRIPPED", 0x0004) -IMAGE_FILE_LOCAL_SYMS_STRIPPED = make_flag("IMAGE_FILE_LOCAL_SYMS_STRIPPED", 0x0008) -IMAGE_FILE_AGGRESIVE_WS_TRIM = make_flag("IMAGE_FILE_AGGRESIVE_WS_TRIM", 0x0010) -IMAGE_FILE_LARGE_ADDRESS_AWARE = make_flag("IMAGE_FILE_LARGE_ADDRESS_AWARE", 0x0020) -IMAGE_FILE_BYTES_REVERSED_LO = make_flag("IMAGE_FILE_BYTES_REVERSED_LO", 0x0080) -IMAGE_FILE_32BIT_MACHINE = make_flag("IMAGE_FILE_32BIT_MACHINE", 0x0100) -IMAGE_FILE_DEBUG_STRIPPED = make_flag("IMAGE_FILE_DEBUG_STRIPPED", 0x0200) -IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = make_flag("IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP", 0x0400) -IMAGE_FILE_NET_RUN_FROM_SWAP = make_flag("IMAGE_FILE_NET_RUN_FROM_SWAP", 0x0800) -IMAGE_FILE_SYSTEM = make_flag("IMAGE_FILE_SYSTEM", 0x1000) -IMAGE_FILE_DLL = make_flag("IMAGE_FILE_DLL", 0x2000) -IMAGE_FILE_UP_SYSTEM_ONLY = make_flag("IMAGE_FILE_UP_SYSTEM_ONLY", 0x4000) -IMAGE_FILE_BYTES_REVERSED_HI = make_flag("IMAGE_FILE_BYTES_REVERSED_HI", 0x8000) -IMAGE_FILE_MACHINE_UNKNOWN = make_flag("IMAGE_FILE_MACHINE_UNKNOWN", 0) -IMAGE_FILE_MACHINE_I386 = make_flag("IMAGE_FILE_MACHINE_I386", 0x014c) -IMAGE_FILE_MACHINE_R3000 = make_flag("IMAGE_FILE_MACHINE_R3000", 0x0162) -IMAGE_FILE_MACHINE_R4000 = make_flag("IMAGE_FILE_MACHINE_R4000", 0x0166) -IMAGE_FILE_MACHINE_R10000 = make_flag("IMAGE_FILE_MACHINE_R10000", 0x0168) -IMAGE_FILE_MACHINE_WCEMIPSV2 = make_flag("IMAGE_FILE_MACHINE_WCEMIPSV2", 0x0169) -IMAGE_FILE_MACHINE_ALPHA = make_flag("IMAGE_FILE_MACHINE_ALPHA", 0x0184) -IMAGE_FILE_MACHINE_SH3 = make_flag("IMAGE_FILE_MACHINE_SH3", 0x01a2) -IMAGE_FILE_MACHINE_SH3DSP = make_flag("IMAGE_FILE_MACHINE_SH3DSP", 0x01a3) -IMAGE_FILE_MACHINE_SH3E = make_flag("IMAGE_FILE_MACHINE_SH3E", 0x01a4) -IMAGE_FILE_MACHINE_SH4 = make_flag("IMAGE_FILE_MACHINE_SH4", 0x01a6) -IMAGE_FILE_MACHINE_SH5 = make_flag("IMAGE_FILE_MACHINE_SH5", 0x01a8) -IMAGE_FILE_MACHINE_ARM = make_flag("IMAGE_FILE_MACHINE_ARM", 0x01c0) -IMAGE_FILE_MACHINE_THUMB = make_flag("IMAGE_FILE_MACHINE_THUMB", 0x01c2) -IMAGE_FILE_MACHINE_ARMNT = make_flag("IMAGE_FILE_MACHINE_ARMNT", 0x01c4) -IMAGE_FILE_MACHINE_AM33 = make_flag("IMAGE_FILE_MACHINE_AM33", 0x01d3) -IMAGE_FILE_MACHINE_POWERPC = make_flag("IMAGE_FILE_MACHINE_POWERPC", 0x01F0) -IMAGE_FILE_MACHINE_POWERPCFP = make_flag("IMAGE_FILE_MACHINE_POWERPCFP", 0x01f1) -IMAGE_FILE_MACHINE_IA64 = make_flag("IMAGE_FILE_MACHINE_IA64", 0x0200) -IMAGE_FILE_MACHINE_MIPS16 = make_flag("IMAGE_FILE_MACHINE_MIPS16", 0x0266) -IMAGE_FILE_MACHINE_ALPHA64 = make_flag("IMAGE_FILE_MACHINE_ALPHA64", 0x0284) -IMAGE_FILE_MACHINE_MIPSFPU = make_flag("IMAGE_FILE_MACHINE_MIPSFPU", 0x0366) -IMAGE_FILE_MACHINE_MIPSFPU16 = make_flag("IMAGE_FILE_MACHINE_MIPSFPU16", 0x0466) -IMAGE_FILE_MACHINE_AXP64 = make_flag("IMAGE_FILE_MACHINE_AXP64", IMAGE_FILE_MACHINE_ALPHA64) -IMAGE_FILE_MACHINE_TRICORE = make_flag("IMAGE_FILE_MACHINE_TRICORE", 0x0520) -IMAGE_FILE_MACHINE_CEF = make_flag("IMAGE_FILE_MACHINE_CEF", 0x0CEF) -IMAGE_FILE_MACHINE_EBC = make_flag("IMAGE_FILE_MACHINE_EBC", 0x0EBC) -IMAGE_FILE_MACHINE_AMD64 = make_flag("IMAGE_FILE_MACHINE_AMD64", 0x8664) -IMAGE_FILE_MACHINE_M32R = make_flag("IMAGE_FILE_MACHINE_M32R", 0x9041) -IMAGE_FILE_MACHINE_CEE = make_flag("IMAGE_FILE_MACHINE_CEE", 0xC0EE) -SECURITY_MANDATORY_UNTRUSTED_RID = make_flag("SECURITY_MANDATORY_UNTRUSTED_RID", ( 0x00000000 )) -SECURITY_MANDATORY_LOW_RID = make_flag("SECURITY_MANDATORY_LOW_RID", ( 0x00001000 )) -SECURITY_MANDATORY_MEDIUM_RID = make_flag("SECURITY_MANDATORY_MEDIUM_RID", ( 0x00002000 )) -SECURITY_MANDATORY_MEDIUM_PLUS_RID = make_flag("SECURITY_MANDATORY_MEDIUM_PLUS_RID", ( SECURITY_MANDATORY_MEDIUM_RID + 0x100 )) -SECURITY_MANDATORY_HIGH_RID = make_flag("SECURITY_MANDATORY_HIGH_RID", ( 0x00003000 )) -SECURITY_MANDATORY_SYSTEM_RID = make_flag("SECURITY_MANDATORY_SYSTEM_RID", ( 0x00004000 )) -SECURITY_MANDATORY_PROTECTED_PROCESS_RID = make_flag("SECURITY_MANDATORY_PROTECTED_PROCESS_RID", ( 0x00005000 )) -SECTION_QUERY = make_flag("SECTION_QUERY", 0x0001) -SECTION_MAP_WRITE = make_flag("SECTION_MAP_WRITE", 0x0002) -SECTION_MAP_READ = make_flag("SECTION_MAP_READ", 0x0004) -SECTION_MAP_EXECUTE = make_flag("SECTION_MAP_EXECUTE", 0x0008) -SECTION_EXTEND_SIZE = make_flag("SECTION_EXTEND_SIZE", 0x0010) -SECTION_MAP_EXECUTE_EXPLICIT = make_flag("SECTION_MAP_EXECUTE_EXPLICIT", 0x0020) -SECTION_ALL_ACCESS = make_flag("SECTION_ALL_ACCESS", ( STANDARD_RIGHTS_REQUIRED|SECTION_QUERY| SECTION_MAP_WRITE | SECTION_MAP_READ | SECTION_MAP_EXECUTE | SECTION_EXTEND_SIZE )) -FILE_MAP_COPY = make_flag("FILE_MAP_COPY", SECTION_QUERY) -FILE_MAP_WRITE = make_flag("FILE_MAP_WRITE", SECTION_MAP_WRITE) -FILE_MAP_READ = make_flag("FILE_MAP_READ", SECTION_MAP_READ) -FILE_MAP_ALL_ACCESS = make_flag("FILE_MAP_ALL_ACCESS", SECTION_ALL_ACCESS) -FILE_MAP_EXECUTE = make_flag("FILE_MAP_EXECUTE", SECTION_MAP_EXECUTE_EXPLICIT) -SC_MANAGER_CONNECT = make_flag("SC_MANAGER_CONNECT", 0x0001) -SC_MANAGER_CREATE_SERVICE = make_flag("SC_MANAGER_CREATE_SERVICE", 0x0002) -SC_MANAGER_ENUMERATE_SERVICE = make_flag("SC_MANAGER_ENUMERATE_SERVICE", 0x0004) -SC_MANAGER_LOCK = make_flag("SC_MANAGER_LOCK", 0x0008) -SC_MANAGER_QUERY_LOCK_STATUS = make_flag("SC_MANAGER_QUERY_LOCK_STATUS", 0x0010) -SC_MANAGER_MODIFY_BOOT_CONFIG = make_flag("SC_MANAGER_MODIFY_BOOT_CONFIG", 0x0020) -SC_MANAGER_ALL_ACCESS = make_flag("SC_MANAGER_ALL_ACCESS", ( STANDARD_RIGHTS_REQUIRED | SC_MANAGER_CONNECT | SC_MANAGER_CREATE_SERVICE | SC_MANAGER_ENUMERATE_SERVICE | SC_MANAGER_LOCK | SC_MANAGER_QUERY_LOCK_STATUS | SC_MANAGER_MODIFY_BOOT_CONFIG )) -SERVICE_QUERY_CONFIG = make_flag("SERVICE_QUERY_CONFIG", 0x0001) -SERVICE_CHANGE_CONFIG = make_flag("SERVICE_CHANGE_CONFIG", 0x0002) -SERVICE_QUERY_STATUS = make_flag("SERVICE_QUERY_STATUS", 0x0004) -SERVICE_ENUMERATE_DEPENDENTS = make_flag("SERVICE_ENUMERATE_DEPENDENTS", 0x0008) -SERVICE_START = make_flag("SERVICE_START", 0x0010) -SERVICE_STOP = make_flag("SERVICE_STOP", 0x0020) -SERVICE_PAUSE_CONTINUE = make_flag("SERVICE_PAUSE_CONTINUE", 0x0040) -SERVICE_INTERROGATE = make_flag("SERVICE_INTERROGATE", 0x0080) -SERVICE_USER_DEFINED_CONTROL = make_flag("SERVICE_USER_DEFINED_CONTROL", 0x0100) -SERVICE_ALL_ACCESS = make_flag("SERVICE_ALL_ACCESS", ( STANDARD_RIGHTS_REQUIRED | SERVICE_QUERY_CONFIG | SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS | SERVICE_ENUMERATE_DEPENDENTS | SERVICE_START | SERVICE_STOP | SERVICE_PAUSE_CONTINUE | SERVICE_INTERROGATE | SERVICE_USER_DEFINED_CONTROL )) -SERVICE_RUNS_IN_SYSTEM_PROCESS = make_flag("SERVICE_RUNS_IN_SYSTEM_PROCESS", 0x00000001) -SERVICE_KERNEL_DRIVER = make_flag("SERVICE_KERNEL_DRIVER", 0x00000001) -SERVICE_FILE_SYSTEM_DRIVER = make_flag("SERVICE_FILE_SYSTEM_DRIVER", 0x00000002) -SERVICE_ADAPTER = make_flag("SERVICE_ADAPTER", 0x00000004) -SERVICE_RECOGNIZER_DRIVER = make_flag("SERVICE_RECOGNIZER_DRIVER", 0x00000008) -SERVICE_DRIVER = make_flag("SERVICE_DRIVER", ( SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | SERVICE_RECOGNIZER_DRIVER )) -SERVICE_WIN32_OWN_PROCESS = make_flag("SERVICE_WIN32_OWN_PROCESS", 0x00000010) -SERVICE_WIN32_SHARE_PROCESS = make_flag("SERVICE_WIN32_SHARE_PROCESS", 0x00000020) -SERVICE_WIN32 = make_flag("SERVICE_WIN32", ( SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS )) -SERVICE_INTERACTIVE_PROCESS = make_flag("SERVICE_INTERACTIVE_PROCESS", 0x00000100) -SERVICE_TYPE_ALL = make_flag("SERVICE_TYPE_ALL", ( SERVICE_WIN32 | SERVICE_ADAPTER | SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS )) -SERVICE_BOOT_START = make_flag("SERVICE_BOOT_START", 0x00000000) -SERVICE_SYSTEM_START = make_flag("SERVICE_SYSTEM_START", 0x00000001) -SERVICE_AUTO_START = make_flag("SERVICE_AUTO_START", 0x00000002) -SERVICE_DEMAND_START = make_flag("SERVICE_DEMAND_START", 0x00000003) -SERVICE_DISABLED = make_flag("SERVICE_DISABLED", 0x00000004) -SERVICE_ERROR_IGNORE = make_flag("SERVICE_ERROR_IGNORE", 0x00000000) -SERVICE_ERROR_NORMAL = make_flag("SERVICE_ERROR_NORMAL", 0x00000001) -SERVICE_ERROR_SEVERE = make_flag("SERVICE_ERROR_SEVERE", 0x00000002) -SERVICE_ERROR_CRITICAL = make_flag("SERVICE_ERROR_CRITICAL", 0x00000003) -SERVICE_ACTIVE = make_flag("SERVICE_ACTIVE", 0x00000001) -SERVICE_INACTIVE = make_flag("SERVICE_INACTIVE", 0x00000002) -SERVICE_STATE_ALL = make_flag("SERVICE_STATE_ALL", ( SERVICE_ACTIVE | SERVICE_INACTIVE )) -SERVICE_CONTROL_STOP = make_flag("SERVICE_CONTROL_STOP", 0x00000001) -SERVICE_CONTROL_PAUSE = make_flag("SERVICE_CONTROL_PAUSE", 0x00000002) -SERVICE_CONTROL_CONTINUE = make_flag("SERVICE_CONTROL_CONTINUE", 0x00000003) -SERVICE_CONTROL_INTERROGATE = make_flag("SERVICE_CONTROL_INTERROGATE", 0x00000004) -SERVICE_CONTROL_SHUTDOWN = make_flag("SERVICE_CONTROL_SHUTDOWN", 0x00000005) -SERVICE_CONTROL_PARAMCHANGE = make_flag("SERVICE_CONTROL_PARAMCHANGE", 0x00000006) -SERVICE_CONTROL_NETBINDADD = make_flag("SERVICE_CONTROL_NETBINDADD", 0x00000007) -SERVICE_CONTROL_NETBINDREMOVE = make_flag("SERVICE_CONTROL_NETBINDREMOVE", 0x00000008) -SERVICE_CONTROL_NETBINDENABLE = make_flag("SERVICE_CONTROL_NETBINDENABLE", 0x00000009) -SERVICE_CONTROL_NETBINDDISABLE = make_flag("SERVICE_CONTROL_NETBINDDISABLE", 0x0000000A) -SERVICE_CONTROL_DEVICEEVENT = make_flag("SERVICE_CONTROL_DEVICEEVENT", 0x0000000B) -SERVICE_CONTROL_HARDWAREPROFILECHANGE = make_flag("SERVICE_CONTROL_HARDWAREPROFILECHANGE", 0x0000000C) -SERVICE_CONTROL_POWEREVENT = make_flag("SERVICE_CONTROL_POWEREVENT", 0x0000000D) -SERVICE_CONTROL_SESSIONCHANGE = make_flag("SERVICE_CONTROL_SESSIONCHANGE", 0x0000000E) -SERVICE_CONTROL_PRESHUTDOWN = make_flag("SERVICE_CONTROL_PRESHUTDOWN", 0x0000000F) -SERVICE_CONTROL_TIMECHANGE = make_flag("SERVICE_CONTROL_TIMECHANGE", 0x00000010) -SERVICE_CONTROL_TRIGGEREVENT = make_flag("SERVICE_CONTROL_TRIGGEREVENT", 0x00000020) -SERVICE_STOPPED = make_flag("SERVICE_STOPPED", 0x00000001) -SERVICE_START_PENDING = make_flag("SERVICE_START_PENDING", 0x00000002) -SERVICE_STOP_PENDING = make_flag("SERVICE_STOP_PENDING", 0x00000003) -SERVICE_RUNNING = make_flag("SERVICE_RUNNING", 0x00000004) -SERVICE_CONTINUE_PENDING = make_flag("SERVICE_CONTINUE_PENDING", 0x00000005) -SERVICE_PAUSE_PENDING = make_flag("SERVICE_PAUSE_PENDING", 0x00000006) -SERVICE_PAUSED = make_flag("SERVICE_PAUSED", 0x00000007) -SERVICE_ACCEPT_STOP = make_flag("SERVICE_ACCEPT_STOP", 0x00000001) -SERVICE_ACCEPT_PAUSE_CONTINUE = make_flag("SERVICE_ACCEPT_PAUSE_CONTINUE", 0x00000002) -SERVICE_ACCEPT_SHUTDOWN = make_flag("SERVICE_ACCEPT_SHUTDOWN", 0x00000004) -SERVICE_ACCEPT_PARAMCHANGE = make_flag("SERVICE_ACCEPT_PARAMCHANGE", 0x00000008) -SERVICE_ACCEPT_NETBINDCHANGE = make_flag("SERVICE_ACCEPT_NETBINDCHANGE", 0x00000010) -SERVICE_ACCEPT_HARDWAREPROFILECHANGE = make_flag("SERVICE_ACCEPT_HARDWAREPROFILECHANGE", 0x00000020) -SERVICE_ACCEPT_POWEREVENT = make_flag("SERVICE_ACCEPT_POWEREVENT", 0x00000040) -SERVICE_ACCEPT_SESSIONCHANGE = make_flag("SERVICE_ACCEPT_SESSIONCHANGE", 0x00000080) -SERVICE_ACCEPT_PRESHUTDOWN = make_flag("SERVICE_ACCEPT_PRESHUTDOWN", 0x00000100) -SERVICE_ACCEPT_TIMECHANGE = make_flag("SERVICE_ACCEPT_TIMECHANGE", 0x00000200) -SERVICE_ACCEPT_TRIGGEREVENT = make_flag("SERVICE_ACCEPT_TRIGGEREVENT", 0x00000400) -DRIVE_UNKNOWN = make_flag("DRIVE_UNKNOWN", 0) -DRIVE_NO_ROOT_DIR = make_flag("DRIVE_NO_ROOT_DIR", 1) -DRIVE_REMOVABLE = make_flag("DRIVE_REMOVABLE", 2) -DRIVE_FIXED = make_flag("DRIVE_FIXED", 3) -DRIVE_REMOTE = make_flag("DRIVE_REMOTE", 4) -DRIVE_CDROM = make_flag("DRIVE_CDROM", 5) -DRIVE_RAMDISK = make_flag("DRIVE_RAMDISK", 6) -DUPLICATE_CLOSE_SOURCE = make_flag("DUPLICATE_CLOSE_SOURCE", 0x00000001) -DUPLICATE_SAME_ACCESS = make_flag("DUPLICATE_SAME_ACCESS", 0x00000002) -VER_NT_WORKSTATION = make_flag("VER_NT_WORKSTATION", 0x0000001) -VER_NT_DOMAIN_CONTROLLER = make_flag("VER_NT_DOMAIN_CONTROLLER", 0x0000002) -VER_NT_SERVER = make_flag("VER_NT_SERVER", 0x0000003) -SM_CXSCREEN = make_flag("SM_CXSCREEN", 0) -SM_CYSCREEN = make_flag("SM_CYSCREEN", 1) -SM_CXVSCROLL = make_flag("SM_CXVSCROLL", 2) -SM_CYHSCROLL = make_flag("SM_CYHSCROLL", 3) -SM_CYCAPTION = make_flag("SM_CYCAPTION", 4) -SM_CXBORDER = make_flag("SM_CXBORDER", 5) -SM_CYBORDER = make_flag("SM_CYBORDER", 6) -SM_CXDLGFRAME = make_flag("SM_CXDLGFRAME", 7) -SM_CYDLGFRAME = make_flag("SM_CYDLGFRAME", 8) -SM_CYVTHUMB = make_flag("SM_CYVTHUMB", 9) -SM_CXHTHUMB = make_flag("SM_CXHTHUMB", 10) -SM_CXICON = make_flag("SM_CXICON", 11) -SM_CYICON = make_flag("SM_CYICON", 12) -SM_CXCURSOR = make_flag("SM_CXCURSOR", 13) -SM_CYCURSOR = make_flag("SM_CYCURSOR", 14) -SM_CYMENU = make_flag("SM_CYMENU", 15) -SM_CXFULLSCREEN = make_flag("SM_CXFULLSCREEN", 16) -SM_CYFULLSCREEN = make_flag("SM_CYFULLSCREEN", 17) -SM_CYKANJIWINDOW = make_flag("SM_CYKANJIWINDOW", 18) -SM_MOUSEPRESENT = make_flag("SM_MOUSEPRESENT", 19) -SM_CYVSCROLL = make_flag("SM_CYVSCROLL", 20) -SM_CXHSCROLL = make_flag("SM_CXHSCROLL", 21) -SM_DEBUG = make_flag("SM_DEBUG", 22) -SM_SWAPBUTTON = make_flag("SM_SWAPBUTTON", 23) -SM_RESERVED1 = make_flag("SM_RESERVED1", 24) -SM_RESERVED2 = make_flag("SM_RESERVED2", 25) -SM_RESERVED3 = make_flag("SM_RESERVED3", 26) -SM_RESERVED4 = make_flag("SM_RESERVED4", 27) -SM_CXMIN = make_flag("SM_CXMIN", 28) -SM_CYMIN = make_flag("SM_CYMIN", 29) -SM_CXSIZE = make_flag("SM_CXSIZE", 30) -SM_CYSIZE = make_flag("SM_CYSIZE", 31) -SM_CXFRAME = make_flag("SM_CXFRAME", 32) -SM_CYFRAME = make_flag("SM_CYFRAME", 33) -SM_CXMINTRACK = make_flag("SM_CXMINTRACK", 34) -SM_CYMINTRACK = make_flag("SM_CYMINTRACK", 35) -SM_CXDOUBLECLK = make_flag("SM_CXDOUBLECLK", 36) -SM_CYDOUBLECLK = make_flag("SM_CYDOUBLECLK", 37) -SM_CXICONSPACING = make_flag("SM_CXICONSPACING", 38) -SM_CYICONSPACING = make_flag("SM_CYICONSPACING", 39) -SM_MENUDROPALIGNMENT = make_flag("SM_MENUDROPALIGNMENT", 40) -SM_PENWINDOWS = make_flag("SM_PENWINDOWS", 41) -SM_DBCSENABLED = make_flag("SM_DBCSENABLED", 42) -SM_CMOUSEBUTTONS = make_flag("SM_CMOUSEBUTTONS", 43) -SM_CXFIXEDFRAME = make_flag("SM_CXFIXEDFRAME", SM_CXDLGFRAME) -SM_CYFIXEDFRAME = make_flag("SM_CYFIXEDFRAME", SM_CYDLGFRAME) -SM_CXSIZEFRAME = make_flag("SM_CXSIZEFRAME", SM_CXFRAME) -SM_CYSIZEFRAME = make_flag("SM_CYSIZEFRAME", SM_CYFRAME) -SM_SECURE = make_flag("SM_SECURE", 44) -SM_CXEDGE = make_flag("SM_CXEDGE", 45) -SM_CYEDGE = make_flag("SM_CYEDGE", 46) -SM_CXMINSPACING = make_flag("SM_CXMINSPACING", 47) -SM_CYMINSPACING = make_flag("SM_CYMINSPACING", 48) -SM_CXSMICON = make_flag("SM_CXSMICON", 49) -SM_CYSMICON = make_flag("SM_CYSMICON", 50) -SM_CYSMCAPTION = make_flag("SM_CYSMCAPTION", 51) -SM_CXSMSIZE = make_flag("SM_CXSMSIZE", 52) -SM_CYSMSIZE = make_flag("SM_CYSMSIZE", 53) -SM_CXMENUSIZE = make_flag("SM_CXMENUSIZE", 54) -SM_CYMENUSIZE = make_flag("SM_CYMENUSIZE", 55) -SM_ARRANGE = make_flag("SM_ARRANGE", 56) -SM_CXMINIMIZED = make_flag("SM_CXMINIMIZED", 57) -SM_CYMINIMIZED = make_flag("SM_CYMINIMIZED", 58) -SM_CXMAXTRACK = make_flag("SM_CXMAXTRACK", 59) -SM_CYMAXTRACK = make_flag("SM_CYMAXTRACK", 60) -SM_CXMAXIMIZED = make_flag("SM_CXMAXIMIZED", 61) -SM_CYMAXIMIZED = make_flag("SM_CYMAXIMIZED", 62) -SM_NETWORK = make_flag("SM_NETWORK", 63) -SM_CLEANBOOT = make_flag("SM_CLEANBOOT", 67) -SM_CXDRAG = make_flag("SM_CXDRAG", 68) -SM_CYDRAG = make_flag("SM_CYDRAG", 69) -SM_SHOWSOUNDS = make_flag("SM_SHOWSOUNDS", 70) -SM_CXMENUCHECK = make_flag("SM_CXMENUCHECK", 71) -SM_CYMENUCHECK = make_flag("SM_CYMENUCHECK", 72) -SM_SLOWMACHINE = make_flag("SM_SLOWMACHINE", 73) -SM_MIDEASTENABLED = make_flag("SM_MIDEASTENABLED", 74) -SM_MOUSEWHEELPRESENT = make_flag("SM_MOUSEWHEELPRESENT", 75) -SM_XVIRTUALSCREEN = make_flag("SM_XVIRTUALSCREEN", 76) -SM_YVIRTUALSCREEN = make_flag("SM_YVIRTUALSCREEN", 77) -SM_CXVIRTUALSCREEN = make_flag("SM_CXVIRTUALSCREEN", 78) -SM_CYVIRTUALSCREEN = make_flag("SM_CYVIRTUALSCREEN", 79) -SM_CMONITORS = make_flag("SM_CMONITORS", 80) -SM_SAMEDISPLAYFORMAT = make_flag("SM_SAMEDISPLAYFORMAT", 81) -SM_IMMENABLED = make_flag("SM_IMMENABLED", 82) -SM_CXFOCUSBORDER = make_flag("SM_CXFOCUSBORDER", 83) -SM_CYFOCUSBORDER = make_flag("SM_CYFOCUSBORDER", 84) -SM_TABLETPC = make_flag("SM_TABLETPC", 86) -SM_MEDIACENTER = make_flag("SM_MEDIACENTER", 87) -SM_STARTER = make_flag("SM_STARTER", 88) -SM_SERVERR2 = make_flag("SM_SERVERR2", 89) -SM_MOUSEHORIZONTALWHEELPRESENT = make_flag("SM_MOUSEHORIZONTALWHEELPRESENT", 91) -SM_CXPADDEDBORDER = make_flag("SM_CXPADDEDBORDER", 92) -SM_DIGITIZER = make_flag("SM_DIGITIZER", 94) -SM_MAXIMUMTOUCHES = make_flag("SM_MAXIMUMTOUCHES", 95) -SM_REMOTESESSION = make_flag("SM_REMOTESESSION", 0x1000) -SM_SHUTTINGDOWN = make_flag("SM_SHUTTINGDOWN", 0x2000) -SM_REMOTECONTROL = make_flag("SM_REMOTECONTROL", 0x2001) -SM_CARETBLINKINGENABLED = make_flag("SM_CARETBLINKINGENABLED", 0x2002) -RPC_C_AUTHN_LEVEL_DEFAULT = make_flag("RPC_C_AUTHN_LEVEL_DEFAULT", 0) -RPC_C_AUTHN_LEVEL_NONE = make_flag("RPC_C_AUTHN_LEVEL_NONE", 1) -RPC_C_AUTHN_LEVEL_CONNECT = make_flag("RPC_C_AUTHN_LEVEL_CONNECT", 2) -RPC_C_AUTHN_LEVEL_CALL = make_flag("RPC_C_AUTHN_LEVEL_CALL", 3) -RPC_C_AUTHN_LEVEL_PKT = make_flag("RPC_C_AUTHN_LEVEL_PKT", 4) -RPC_C_AUTHN_LEVEL_PKT_INTEGRITY = make_flag("RPC_C_AUTHN_LEVEL_PKT_INTEGRITY", 5) -RPC_C_AUTHN_LEVEL_PKT_PRIVACY = make_flag("RPC_C_AUTHN_LEVEL_PKT_PRIVACY", 6) -RPC_C_IMP_LEVEL_DEFAULT = make_flag("RPC_C_IMP_LEVEL_DEFAULT", 0) -RPC_C_IMP_LEVEL_ANONYMOUS = make_flag("RPC_C_IMP_LEVEL_ANONYMOUS", 1) -RPC_C_IMP_LEVEL_IDENTIFY = make_flag("RPC_C_IMP_LEVEL_IDENTIFY", 2) -RPC_C_IMP_LEVEL_IMPERSONATE = make_flag("RPC_C_IMP_LEVEL_IMPERSONATE", 3) -RPC_C_IMP_LEVEL_DELEGATE = make_flag("RPC_C_IMP_LEVEL_DELEGATE", 4) -RPC_C_QOS_IDENTITY_STATIC = make_flag("RPC_C_QOS_IDENTITY_STATIC", 0) -RPC_C_QOS_IDENTITY_DYNAMIC = make_flag("RPC_C_QOS_IDENTITY_DYNAMIC", 1) -RPC_C_QOS_CAPABILITIES_DEFAULT = make_flag("RPC_C_QOS_CAPABILITIES_DEFAULT", 0x0) -RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH = make_flag("RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH", 0x1) -RPC_C_QOS_CAPABILITIES_MAKE_FULLSIC = make_flag("RPC_C_QOS_CAPABILITIES_MAKE_FULLSIC", 0x2) -RPC_C_QOS_CAPABILITIES_ANY_AUTHORITY = make_flag("RPC_C_QOS_CAPABILITIES_ANY_AUTHORITY", 0x4) -MAX_ADAPTER_NAME = make_flag("MAX_ADAPTER_NAME", 128) -MAXLEN_PHYSADDR = make_flag("MAXLEN_PHYSADDR", 8) -MAXLEN_IFDESCR = make_flag("MAXLEN_IFDESCR", 256) -MAX_INTERFACE_NAME_LEN = make_flag("MAX_INTERFACE_NAME_LEN", 256) -DIRECTORY_QUERY = make_flag("DIRECTORY_QUERY", ( 0x0001 )) -DIRECTORY_TRAVERSE = make_flag("DIRECTORY_TRAVERSE", ( 0x0002 )) -DIRECTORY_CREATE_OBJECT = make_flag("DIRECTORY_CREATE_OBJECT", ( 0x0004 )) -DIRECTORY_CREATE_SUBDIRECTORY = make_flag("DIRECTORY_CREATE_SUBDIRECTORY", ( 0x0008 )) -DIRECTORY_ALL_ACCESS = make_flag("DIRECTORY_ALL_ACCESS", ( STANDARD_RIGHTS_REQUIRED | 0xF )) -OBJ_INHERIT = make_flag("OBJ_INHERIT", 0x00000002) -OBJ_PERMANENT = make_flag("OBJ_PERMANENT", 0x00000010) -OBJ_EXCLUSIVE = make_flag("OBJ_EXCLUSIVE", 0x00000020) -OBJ_CASE_INSENSITIVE = make_flag("OBJ_CASE_INSENSITIVE", 0x00000040) -OBJ_OPENIF = make_flag("OBJ_OPENIF", 0x00000080) -OBJ_OPENLINK = make_flag("OBJ_OPENLINK", 0x00000100) -OBJ_KERNEL_HANDLE = make_flag("OBJ_KERNEL_HANDLE", 0x00000200) -OBJ_FORCE_ACCESS_CHECK = make_flag("OBJ_FORCE_ACCESS_CHECK", 0x00000400) -OBJ_VALID_ATTRIBUTES = make_flag("OBJ_VALID_ATTRIBUTES", 0x000007F2) -FILE_SUPERSEDE = make_flag("FILE_SUPERSEDE", 0x00000000) -FILE_OPEN = make_flag("FILE_OPEN", 0x00000001) -FILE_CREATE = make_flag("FILE_CREATE", 0x00000002) -FILE_OPEN_IF = make_flag("FILE_OPEN_IF", 0x00000003) -FILE_OVERWRITE = make_flag("FILE_OVERWRITE", 0x00000004) -FILE_OVERWRITE_IF = make_flag("FILE_OVERWRITE_IF", 0x00000005) -FILE_MAXIMUM_DISPOSITION = make_flag("FILE_MAXIMUM_DISPOSITION", 0x00000005) -TRUST_E_PROVIDER_UNKNOWN = make_flag("TRUST_E_PROVIDER_UNKNOWN", ( 0x800B0001 )) -TRUST_E_ACTION_UNKNOWN = make_flag("TRUST_E_ACTION_UNKNOWN", ( 0x800B0002 )) -TRUST_E_SUBJECT_FORM_UNKNOWN = make_flag("TRUST_E_SUBJECT_FORM_UNKNOWN", ( 0x800B0003 )) -DIGSIG_E_ENCODE = make_flag("DIGSIG_E_ENCODE", ( 0x800B0005 )) -TRUST_E_SUBJECT_NOT_TRUSTED = make_flag("TRUST_E_SUBJECT_NOT_TRUSTED", ( 0x800B0004 )) -DIGSIG_E_DECODE = make_flag("DIGSIG_E_DECODE", ( 0x800B0006 )) -DIGSIG_E_EXTENSIBILITY = make_flag("DIGSIG_E_EXTENSIBILITY", ( 0x800B0007 )) -PERSIST_E_SIZEDEFINITE = make_flag("PERSIST_E_SIZEDEFINITE", ( 0x800B0009 )) -DIGSIG_E_CRYPTO = make_flag("DIGSIG_E_CRYPTO", ( 0x800B0008 )) -PERSIST_E_SIZEINDEFINITE = make_flag("PERSIST_E_SIZEINDEFINITE", ( 0x800B000A )) -PERSIST_E_NOTSELFSIZING = make_flag("PERSIST_E_NOTSELFSIZING", ( 0x800B000B )) -TRUST_E_NOSIGNATURE = make_flag("TRUST_E_NOSIGNATURE", ( 0x800B0100 )) -CERT_E_EXPIRED = make_flag("CERT_E_EXPIRED", ( 0x800B0101 )) -CERT_E_VALIDITYPERIODNESTING = make_flag("CERT_E_VALIDITYPERIODNESTING", ( 0x800B0102 )) -CERT_E_PURPOSE = make_flag("CERT_E_PURPOSE", ( 0x800B0106 )) -CERT_E_ISSUERCHAINING = make_flag("CERT_E_ISSUERCHAINING", ( 0x800B0107 )) -CERT_E_MALFORMED = make_flag("CERT_E_MALFORMED", ( 0x800B0108 )) -CERT_E_UNTRUSTEDROOT = make_flag("CERT_E_UNTRUSTEDROOT", ( 0x800B0109 )) -CERT_E_CHAINING = make_flag("CERT_E_CHAINING", ( 0x800B010A )) -TRUST_E_FAIL = make_flag("TRUST_E_FAIL", ( 0x800B010B )) -CERT_E_REVOKED = make_flag("CERT_E_REVOKED", ( 0x800B010C )) -CERT_E_UNTRUSTEDTESTROOT = make_flag("CERT_E_UNTRUSTEDTESTROOT", ( 0x800B010D )) -CERT_E_REVOCATION_FAILURE = make_flag("CERT_E_REVOCATION_FAILURE", ( 0x800B010E )) -CERT_E_CN_NO_MATCH = make_flag("CERT_E_CN_NO_MATCH", ( 0x800B010F )) -CERT_E_WRONG_USAGE = make_flag("CERT_E_WRONG_USAGE", ( 0x800B0110 )) -TRUST_E_EXPLICIT_DISTRUST = make_flag("TRUST_E_EXPLICIT_DISTRUST", ( 0x800B0111 )) -CERT_E_UNTRUSTEDCA = make_flag("CERT_E_UNTRUSTEDCA", ( 0x800B0112 )) -CERT_E_INVALID_POLICY = make_flag("CERT_E_INVALID_POLICY", ( 0x800B0113 )) -CERT_E_INVALID_NAME = make_flag("CERT_E_INVALID_NAME", ( 0x800B0114 )) -CRYPT_E_FILE_ERROR = make_flag("CRYPT_E_FILE_ERROR", ( 0x80092003 )) -IMAGE_SCN_TYPE_REG = make_flag("IMAGE_SCN_TYPE_REG", 0x00000000) -IMAGE_SCN_TYPE_DSECT = make_flag("IMAGE_SCN_TYPE_DSECT", 0x00000001) -IMAGE_SCN_TYPE_NOLOAD = make_flag("IMAGE_SCN_TYPE_NOLOAD", 0x00000002) -IMAGE_SCN_TYPE_GROUP = make_flag("IMAGE_SCN_TYPE_GROUP", 0x00000004) -IMAGE_SCN_TYPE_NO_PAD = make_flag("IMAGE_SCN_TYPE_NO_PAD", 0x00000008) -IMAGE_SCN_TYPE_COPY = make_flag("IMAGE_SCN_TYPE_COPY", 0x00000010) -IMAGE_SCN_CNT_CODE = make_flag("IMAGE_SCN_CNT_CODE", 0x00000020) -IMAGE_SCN_CNT_INITIALIZED_DATA = make_flag("IMAGE_SCN_CNT_INITIALIZED_DATA", 0x00000040) -IMAGE_SCN_CNT_UNINITIALIZED_DATA = make_flag("IMAGE_SCN_CNT_UNINITIALIZED_DATA", 0x00000080) -IMAGE_SCN_LNK_OTHER = make_flag("IMAGE_SCN_LNK_OTHER", 0x00000100) -IMAGE_SCN_LNK_INFO = make_flag("IMAGE_SCN_LNK_INFO", 0x00000200) -IMAGE_SCN_TYPE_OVER = make_flag("IMAGE_SCN_TYPE_OVER", 0x00000400) -IMAGE_SCN_LNK_REMOVE = make_flag("IMAGE_SCN_LNK_REMOVE", 0x00000800) -IMAGE_SCN_LNK_COMDAT = make_flag("IMAGE_SCN_LNK_COMDAT", 0x00001000) -IMAGE_SCN_NO_DEFER_SPEC_EXC = make_flag("IMAGE_SCN_NO_DEFER_SPEC_EXC", 0x00004000) -IMAGE_SCN_GPREL = make_flag("IMAGE_SCN_GPREL", 0x00008000) -IMAGE_SCN_MEM_FARDATA = make_flag("IMAGE_SCN_MEM_FARDATA", 0x00008000) -IMAGE_SCN_MEM_PURGEABLE = make_flag("IMAGE_SCN_MEM_PURGEABLE", 0x00020000) -IMAGE_SCN_MEM_16BIT = make_flag("IMAGE_SCN_MEM_16BIT", 0x00020000) -IMAGE_SCN_MEM_LOCKED = make_flag("IMAGE_SCN_MEM_LOCKED", 0x00040000) -IMAGE_SCN_MEM_PRELOAD = make_flag("IMAGE_SCN_MEM_PRELOAD", 0x00080000) -IMAGE_SCN_ALIGN_1BYTES = make_flag("IMAGE_SCN_ALIGN_1BYTES", 0x00100000) -IMAGE_SCN_ALIGN_2BYTES = make_flag("IMAGE_SCN_ALIGN_2BYTES", 0x00200000) -IMAGE_SCN_ALIGN_4BYTES = make_flag("IMAGE_SCN_ALIGN_4BYTES", 0x00300000) -IMAGE_SCN_ALIGN_8BYTES = make_flag("IMAGE_SCN_ALIGN_8BYTES", 0x00400000) -IMAGE_SCN_ALIGN_16BYTES = make_flag("IMAGE_SCN_ALIGN_16BYTES", 0x00500000) -IMAGE_SCN_ALIGN_32BYTES = make_flag("IMAGE_SCN_ALIGN_32BYTES", 0x00600000) -IMAGE_SCN_ALIGN_64BYTES = make_flag("IMAGE_SCN_ALIGN_64BYTES", 0x00700000) -IMAGE_SCN_ALIGN_128BYTES = make_flag("IMAGE_SCN_ALIGN_128BYTES", 0x00800000) -IMAGE_SCN_ALIGN_256BYTES = make_flag("IMAGE_SCN_ALIGN_256BYTES", 0x00900000) -IMAGE_SCN_ALIGN_512BYTES = make_flag("IMAGE_SCN_ALIGN_512BYTES", 0x00A00000) -IMAGE_SCN_ALIGN_1024BYTES = make_flag("IMAGE_SCN_ALIGN_1024BYTES", 0x00B00000) -IMAGE_SCN_ALIGN_2048BYTES = make_flag("IMAGE_SCN_ALIGN_2048BYTES", 0x00C00000) -IMAGE_SCN_ALIGN_4096BYTES = make_flag("IMAGE_SCN_ALIGN_4096BYTES", 0x00D00000) -IMAGE_SCN_ALIGN_8192BYTES = make_flag("IMAGE_SCN_ALIGN_8192BYTES", 0x00E00000) -IMAGE_SCN_ALIGN_MASK = make_flag("IMAGE_SCN_ALIGN_MASK", 0x00F00000) -IMAGE_SCN_LNK_NRELOC_OVFL = make_flag("IMAGE_SCN_LNK_NRELOC_OVFL", 0x01000000) -IMAGE_SCN_MEM_DISCARDABLE = make_flag("IMAGE_SCN_MEM_DISCARDABLE", 0x02000000) -IMAGE_SCN_MEM_NOT_CACHED = make_flag("IMAGE_SCN_MEM_NOT_CACHED", 0x04000000) -IMAGE_SCN_MEM_NOT_PAGED = make_flag("IMAGE_SCN_MEM_NOT_PAGED", 0x08000000) -IMAGE_SCN_MEM_SHARED = make_flag("IMAGE_SCN_MEM_SHARED", 0x10000000) -IMAGE_SCN_MEM_EXECUTE = make_flag("IMAGE_SCN_MEM_EXECUTE", 0x20000000) -IMAGE_SCN_MEM_READ = make_flag("IMAGE_SCN_MEM_READ", 0x40000000) -IMAGE_SCN_MEM_WRITE = make_flag("IMAGE_SCN_MEM_WRITE", 0x80000000) -ACCESS_MIN_MS_ACE_TYPE = make_flag("ACCESS_MIN_MS_ACE_TYPE", ( 0x0 )) -ACCESS_ALLOWED_ACE_TYPE = make_flag("ACCESS_ALLOWED_ACE_TYPE", ( 0x0 )) -ACCESS_DENIED_ACE_TYPE = make_flag("ACCESS_DENIED_ACE_TYPE", ( 0x1 )) -SYSTEM_AUDIT_ACE_TYPE = make_flag("SYSTEM_AUDIT_ACE_TYPE", ( 0x2 )) -SYSTEM_ALARM_ACE_TYPE = make_flag("SYSTEM_ALARM_ACE_TYPE", ( 0x3 )) -ACCESS_MAX_MS_V2_ACE_TYPE = make_flag("ACCESS_MAX_MS_V2_ACE_TYPE", ( 0x3 )) -ACCESS_ALLOWED_COMPOUND_ACE_TYPE = make_flag("ACCESS_ALLOWED_COMPOUND_ACE_TYPE", ( 0x4 )) -ACCESS_MAX_MS_V3_ACE_TYPE = make_flag("ACCESS_MAX_MS_V3_ACE_TYPE", ( 0x4 )) -ACCESS_MIN_MS_OBJECT_ACE_TYPE = make_flag("ACCESS_MIN_MS_OBJECT_ACE_TYPE", ( 0x5 )) -ACCESS_ALLOWED_OBJECT_ACE_TYPE = make_flag("ACCESS_ALLOWED_OBJECT_ACE_TYPE", ( 0x5 )) -ACCESS_DENIED_OBJECT_ACE_TYPE = make_flag("ACCESS_DENIED_OBJECT_ACE_TYPE", ( 0x6 )) -SYSTEM_AUDIT_OBJECT_ACE_TYPE = make_flag("SYSTEM_AUDIT_OBJECT_ACE_TYPE", ( 0x7 )) -SYSTEM_ALARM_OBJECT_ACE_TYPE = make_flag("SYSTEM_ALARM_OBJECT_ACE_TYPE", ( 0x8 )) -ACCESS_MAX_MS_OBJECT_ACE_TYPE = make_flag("ACCESS_MAX_MS_OBJECT_ACE_TYPE", ( 0x8 )) -ACCESS_MAX_MS_V4_ACE_TYPE = make_flag("ACCESS_MAX_MS_V4_ACE_TYPE", ( 0x8 )) -ACCESS_MAX_MS_ACE_TYPE = make_flag("ACCESS_MAX_MS_ACE_TYPE", ( 0x8 )) -ACCESS_ALLOWED_CALLBACK_ACE_TYPE = make_flag("ACCESS_ALLOWED_CALLBACK_ACE_TYPE", ( 0x9 )) -ACCESS_DENIED_CALLBACK_ACE_TYPE = make_flag("ACCESS_DENIED_CALLBACK_ACE_TYPE", ( 0xA )) -ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE = make_flag("ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE", ( 0xB )) -ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE = make_flag("ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE", ( 0xC )) -SYSTEM_AUDIT_CALLBACK_ACE_TYPE = make_flag("SYSTEM_AUDIT_CALLBACK_ACE_TYPE", ( 0xD )) -SYSTEM_ALARM_CALLBACK_ACE_TYPE = make_flag("SYSTEM_ALARM_CALLBACK_ACE_TYPE", ( 0xE )) -SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE = make_flag("SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE", ( 0xF )) -SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE = make_flag("SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE", ( 0x10 )) -SYSTEM_MANDATORY_LABEL_ACE_TYPE = make_flag("SYSTEM_MANDATORY_LABEL_ACE_TYPE", ( 0x11 )) -ACCESS_MAX_MS_V5_ACE_TYPE = make_flag("ACCESS_MAX_MS_V5_ACE_TYPE", ( 0x11 )) -LPC_REQUEST = make_flag("LPC_REQUEST", 1) -LPC_REPLY = make_flag("LPC_REPLY", 2) -LPC_DATAGRAM = make_flag("LPC_DATAGRAM", 3) -LPC_LOST_REPLY = make_flag("LPC_LOST_REPLY", 4) -LPC_PORT_CLOSED = make_flag("LPC_PORT_CLOSED", 5) -LPC_CLIENT_DIED = make_flag("LPC_CLIENT_DIED", 6) -LPC_EXCEPTION = make_flag("LPC_EXCEPTION", 7) -LPC_DEBUG_EVENT = make_flag("LPC_DEBUG_EVENT", 8) -LPC_ERROR_EVENT = make_flag("LPC_ERROR_EVENT", 9) -LPC_CONNECTION_REQUEST = make_flag("LPC_CONNECTION_REQUEST", 10) -ALPC_MESSAGE_SECURITY_ATTRIBUTE = make_flag("ALPC_MESSAGE_SECURITY_ATTRIBUTE", 0x80000000) -ALPC_MESSAGE_VIEW_ATTRIBUTE = make_flag("ALPC_MESSAGE_VIEW_ATTRIBUTE", 0x40000000) -ALPC_MESSAGE_CONTEXT_ATTRIBUTE = make_flag("ALPC_MESSAGE_CONTEXT_ATTRIBUTE", 0x20000000) -ALPC_MESSAGE_HANDLE_ATTRIBUTE = make_flag("ALPC_MESSAGE_HANDLE_ATTRIBUTE", 0x10000000) -ALPC_MESSAGE_TOKEN_ATTRIBUTE = make_flag("ALPC_MESSAGE_TOKEN_ATTRIBUTE", 0x8000000) -ALPC_MESSAGE_DIRECT_ATTRIBUTE = make_flag("ALPC_MESSAGE_DIRECT_ATTRIBUTE", 0x4000000) -ALPC_MESSAGE_WORK_ON_BEHALF_ATTRIBUTE = make_flag("ALPC_MESSAGE_WORK_ON_BEHALF_ATTRIBUTE", 0x2000000) -ALPC_MSGFLG_REPLY_MESSAGE = make_flag("ALPC_MSGFLG_REPLY_MESSAGE", 0x1) -ALPC_MSGFLG_LPC_MODE = make_flag("ALPC_MSGFLG_LPC_MODE", 0x2) -ALPC_MSGFLG_RELEASE_MESSAGE = make_flag("ALPC_MSGFLG_RELEASE_MESSAGE", 0x10000) -ALPC_MSGFLG_SYNC_REQUEST = make_flag("ALPC_MSGFLG_SYNC_REQUEST", 0x20000) -ALPC_MSGFLG_WAIT_USER_MODE = make_flag("ALPC_MSGFLG_WAIT_USER_MODE", 0x100000) -ALPC_MSGFLG_WAIT_ALERTABLE = make_flag("ALPC_MSGFLG_WAIT_ALERTABLE", 0x200000) -ALPC_MSGFLG_WOW64_CALL = make_flag("ALPC_MSGFLG_WOW64_CALL", 0x80000000) -ALPC_PORFLG_ALLOW_LPC_REQUESTS = make_flag("ALPC_PORFLG_ALLOW_LPC_REQUESTS", 0x20000) -ALPC_PORFLG_WAITABLE_PORT = make_flag("ALPC_PORFLG_WAITABLE_PORT", 0x40000) -ALPC_PORFLG_SYSTEM_PROCESS = make_flag("ALPC_PORFLG_SYSTEM_PROCESS", 0x100000) -ALPC_CANCELFLG_TRY_CANCEL = make_flag("ALPC_CANCELFLG_TRY_CANCEL", 0x1) -ALPC_CANCELFLG_NO_CONTEXT_CHECK = make_flag("ALPC_CANCELFLG_NO_CONTEXT_CHECK", 0x8) -ALPC_CANCELFLGP_FLUSH = make_flag("ALPC_CANCELFLGP_FLUSH", 0x10000) -ALPC_HANDLEFLG_DUPLICATE_SAME_ACCESS = make_flag("ALPC_HANDLEFLG_DUPLICATE_SAME_ACCESS", 0x10000) -ALPC_HANDLEFLG_DUPLICATE_SAME_ATTRIBUTES = make_flag("ALPC_HANDLEFLG_DUPLICATE_SAME_ATTRIBUTES", 0x20000) -ALPC_HANDLEFLG_DUPLICATE_INHERIT = make_flag("ALPC_HANDLEFLG_DUPLICATE_INHERIT", 0x80000) -ALPC_SECFLG_CREATE_HANDLE = make_flag("ALPC_SECFLG_CREATE_HANDLE", 0x20000) -ALPC_VIEWFLG_NOT_SECURE = make_flag("ALPC_VIEWFLG_NOT_SECURE", 0x40000) -OWNER_SECURITY_INFORMATION = make_flag("OWNER_SECURITY_INFORMATION", ( 0x00000001 )) -GROUP_SECURITY_INFORMATION = make_flag("GROUP_SECURITY_INFORMATION", ( 0x00000002 )) -DACL_SECURITY_INFORMATION = make_flag("DACL_SECURITY_INFORMATION", ( 0x00000004 )) -SACL_SECURITY_INFORMATION = make_flag("SACL_SECURITY_INFORMATION", ( 0x00000008 )) -LABEL_SECURITY_INFORMATION = make_flag("LABEL_SECURITY_INFORMATION", ( 0x00000010 )) -MAXIMUM_ALLOWED = make_flag("MAXIMUM_ALLOWED", ( 0x02000000 )) -CERT_STORE_CERTIFICATE_CONTEXT = make_flag("CERT_STORE_CERTIFICATE_CONTEXT", 1) -CERT_STORE_CRL_CONTEXT = make_flag("CERT_STORE_CRL_CONTEXT", 2) -CERT_STORE_CTL_CONTEXT = make_flag("CERT_STORE_CTL_CONTEXT", 3) -CERT_QUERY_OBJECT_FILE = make_flag("CERT_QUERY_OBJECT_FILE", 0x00000001) -CERT_QUERY_OBJECT_BLOB = make_flag("CERT_QUERY_OBJECT_BLOB", 0x00000002) -CERT_QUERY_CONTENT_CERT = make_flag("CERT_QUERY_CONTENT_CERT", 1) -CERT_QUERY_CONTENT_CTL = make_flag("CERT_QUERY_CONTENT_CTL", 2) -CERT_QUERY_CONTENT_CRL = make_flag("CERT_QUERY_CONTENT_CRL", 3) -CERT_QUERY_CONTENT_SERIALIZED_STORE = make_flag("CERT_QUERY_CONTENT_SERIALIZED_STORE", 4) -CERT_QUERY_CONTENT_SERIALIZED_CERT = make_flag("CERT_QUERY_CONTENT_SERIALIZED_CERT", 5) -CERT_QUERY_CONTENT_SERIALIZED_CTL = make_flag("CERT_QUERY_CONTENT_SERIALIZED_CTL", 6) -CERT_QUERY_CONTENT_SERIALIZED_CRL = make_flag("CERT_QUERY_CONTENT_SERIALIZED_CRL", 7) -CERT_QUERY_CONTENT_PKCS7_SIGNED = make_flag("CERT_QUERY_CONTENT_PKCS7_SIGNED", 8) -CERT_QUERY_CONTENT_PKCS7_UNSIGNED = make_flag("CERT_QUERY_CONTENT_PKCS7_UNSIGNED", 9) -CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED = make_flag("CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED", 10) -CERT_QUERY_CONTENT_PKCS10 = make_flag("CERT_QUERY_CONTENT_PKCS10", 11) -CERT_QUERY_CONTENT_PFX = make_flag("CERT_QUERY_CONTENT_PFX", 12) -CERT_QUERY_CONTENT_CERT_PAIR = make_flag("CERT_QUERY_CONTENT_CERT_PAIR", 13) -CERT_QUERY_CONTENT_PFX_AND_LOAD = make_flag("CERT_QUERY_CONTENT_PFX_AND_LOAD", 14) -CERT_QUERY_FORMAT_BINARY = make_flag("CERT_QUERY_FORMAT_BINARY", 1) -CERT_QUERY_FORMAT_BASE64_ENCODED = make_flag("CERT_QUERY_FORMAT_BASE64_ENCODED", 2) -CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED = make_flag("CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED", 3) -CERT_QUERY_FORMAT_FLAG_BINARY = make_flag("CERT_QUERY_FORMAT_FLAG_BINARY", ( 1 << CERT_QUERY_FORMAT_BINARY )) -CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED = make_flag("CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED", ( 1 << CERT_QUERY_FORMAT_BASE64_ENCODED )) -CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED = make_flag("CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED", ( 1 << CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED )) -CERT_QUERY_FORMAT_FLAG_ALL = make_flag("CERT_QUERY_FORMAT_FLAG_ALL", ( CERT_QUERY_FORMAT_FLAG_BINARY | CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED )) -CERT_QUERY_CONTENT_FLAG_CERT = make_flag("CERT_QUERY_CONTENT_FLAG_CERT", ( 1 << CERT_QUERY_CONTENT_CERT )) -CERT_QUERY_CONTENT_FLAG_CTL = make_flag("CERT_QUERY_CONTENT_FLAG_CTL", ( 1 << CERT_QUERY_CONTENT_CTL )) -CERT_QUERY_CONTENT_FLAG_CRL = make_flag("CERT_QUERY_CONTENT_FLAG_CRL", ( 1 << CERT_QUERY_CONTENT_CRL )) -CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE = make_flag("CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE", ( 1 << CERT_QUERY_CONTENT_SERIALIZED_STORE )) -CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT = make_flag("CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT", ( 1 << CERT_QUERY_CONTENT_SERIALIZED_CERT )) -CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL = make_flag("CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL", ( 1 << CERT_QUERY_CONTENT_SERIALIZED_CTL )) -CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL = make_flag("CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL", ( 1 << CERT_QUERY_CONTENT_SERIALIZED_CRL )) -CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED = make_flag("CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED", ( 1 << CERT_QUERY_CONTENT_PKCS7_SIGNED )) -CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED = make_flag("CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED", ( 1 << CERT_QUERY_CONTENT_PKCS7_UNSIGNED )) -CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED = make_flag("CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED", ( 1 << CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED )) -CERT_QUERY_CONTENT_FLAG_PKCS10 = make_flag("CERT_QUERY_CONTENT_FLAG_PKCS10", ( 1 << CERT_QUERY_CONTENT_PKCS10 )) -CERT_QUERY_CONTENT_FLAG_PFX = make_flag("CERT_QUERY_CONTENT_FLAG_PFX", ( 1 << CERT_QUERY_CONTENT_PFX )) -CERT_QUERY_CONTENT_FLAG_CERT_PAIR = make_flag("CERT_QUERY_CONTENT_FLAG_CERT_PAIR", ( 1 << CERT_QUERY_CONTENT_CERT_PAIR )) -CERT_QUERY_CONTENT_FLAG_PFX_AND_LOAD = make_flag("CERT_QUERY_CONTENT_FLAG_PFX_AND_LOAD", ( 1 << CERT_QUERY_CONTENT_PFX_AND_LOAD )) -CERT_QUERY_CONTENT_FLAG_ALL = make_flag("CERT_QUERY_CONTENT_FLAG_ALL", ( CERT_QUERY_CONTENT_FLAG_CERT | CERT_QUERY_CONTENT_FLAG_CTL | CERT_QUERY_CONTENT_FLAG_CRL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED | CERT_QUERY_CONTENT_FLAG_PKCS10 | CERT_QUERY_CONTENT_FLAG_PFX | CERT_QUERY_CONTENT_FLAG_CERT_PAIR )) -CRYPT_ASN_ENCODING = make_flag("CRYPT_ASN_ENCODING", 0x00000001) -CRYPT_NDR_ENCODING = make_flag("CRYPT_NDR_ENCODING", 0x00000002) -X509_ASN_ENCODING = make_flag("X509_ASN_ENCODING", 0x00000001) -X509_NDR_ENCODING = make_flag("X509_NDR_ENCODING", 0x00000002) -PKCS_7_ASN_ENCODING = make_flag("PKCS_7_ASN_ENCODING", 0x00010000) -PKCS_7_NDR_ENCODING = make_flag("PKCS_7_NDR_ENCODING", 0x00020000) -CERT_ENCODING_TYPE_MASK = make_flag("CERT_ENCODING_TYPE_MASK", 0x0000FFFF) -CMSG_ENCODING_TYPE_MASK = make_flag("CMSG_ENCODING_TYPE_MASK", 0xFFFF0000) -CERT_COMPARE_MASK = make_flag("CERT_COMPARE_MASK", 0xFFFF) -CERT_COMPARE_SHIFT = make_flag("CERT_COMPARE_SHIFT", 16) -CERT_COMPARE_ANY = make_flag("CERT_COMPARE_ANY", 0) -CERT_COMPARE_SHA1_HASH = make_flag("CERT_COMPARE_SHA1_HASH", 1) -CERT_COMPARE_NAME = make_flag("CERT_COMPARE_NAME", 2) -CERT_COMPARE_ATTR = make_flag("CERT_COMPARE_ATTR", 3) -CERT_COMPARE_MD5_HASH = make_flag("CERT_COMPARE_MD5_HASH", 4) -CERT_COMPARE_PROPERTY = make_flag("CERT_COMPARE_PROPERTY", 5) -CERT_COMPARE_PUBLIC_KEY = make_flag("CERT_COMPARE_PUBLIC_KEY", 6) -CERT_COMPARE_HASH = make_flag("CERT_COMPARE_HASH", CERT_COMPARE_SHA1_HASH) -CERT_COMPARE_NAME_STR_A = make_flag("CERT_COMPARE_NAME_STR_A", 7) -CERT_COMPARE_NAME_STR_W = make_flag("CERT_COMPARE_NAME_STR_W", 8) -CERT_COMPARE_KEY_SPEC = make_flag("CERT_COMPARE_KEY_SPEC", 9) -CERT_COMPARE_ENHKEY_USAGE = make_flag("CERT_COMPARE_ENHKEY_USAGE", 10) -CERT_COMPARE_CTL_USAGE = make_flag("CERT_COMPARE_CTL_USAGE", CERT_COMPARE_ENHKEY_USAGE) -CERT_COMPARE_SUBJECT_CERT = make_flag("CERT_COMPARE_SUBJECT_CERT", 11) -CERT_COMPARE_ISSUER_OF = make_flag("CERT_COMPARE_ISSUER_OF", 12) -CERT_COMPARE_EXISTING = make_flag("CERT_COMPARE_EXISTING", 13) -CERT_COMPARE_SIGNATURE_HASH = make_flag("CERT_COMPARE_SIGNATURE_HASH", 14) -CERT_COMPARE_KEY_IDENTIFIER = make_flag("CERT_COMPARE_KEY_IDENTIFIER", 15) -CERT_COMPARE_CERT_ID = make_flag("CERT_COMPARE_CERT_ID", 16) -CERT_COMPARE_CROSS_CERT_DIST_POINTS = make_flag("CERT_COMPARE_CROSS_CERT_DIST_POINTS", 17) -CERT_COMPARE_PUBKEY_MD5_HASH = make_flag("CERT_COMPARE_PUBKEY_MD5_HASH", 18) -CERT_COMPARE_SUBJECT_INFO_ACCESS = make_flag("CERT_COMPARE_SUBJECT_INFO_ACCESS", 19) -CERT_NAME_ISSUER_FLAG = make_flag("CERT_NAME_ISSUER_FLAG", 0x1) -CERT_NAME_DISABLE_IE4_UTF8_FLAG = make_flag("CERT_NAME_DISABLE_IE4_UTF8_FLAG", 0x00010000) -USAGE_MATCH_TYPE_AND = make_flag("USAGE_MATCH_TYPE_AND", 0x00000000) -USAGE_MATCH_TYPE_OR = make_flag("USAGE_MATCH_TYPE_OR", 0x00000001) -CERT_CHAIN_REVOCATION_CHECK_END_CERT = make_flag("CERT_CHAIN_REVOCATION_CHECK_END_CERT", 0x10000000) -CERT_CHAIN_REVOCATION_CHECK_CHAIN = make_flag("CERT_CHAIN_REVOCATION_CHECK_CHAIN", 0x20000000) -CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT = make_flag("CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT", 0x40000000) -CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY = make_flag("CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY", 0x80000000) -CERT_TRUST_NO_ERROR = make_flag("CERT_TRUST_NO_ERROR", 0x00000000) -CERT_TRUST_IS_NOT_TIME_VALID = make_flag("CERT_TRUST_IS_NOT_TIME_VALID", 0x00000001) -CERT_TRUST_IS_NOT_TIME_NESTED = make_flag("CERT_TRUST_IS_NOT_TIME_NESTED", 0x00000002) -CERT_TRUST_IS_REVOKED = make_flag("CERT_TRUST_IS_REVOKED", 0x00000004) -CERT_TRUST_IS_NOT_SIGNATURE_VALID = make_flag("CERT_TRUST_IS_NOT_SIGNATURE_VALID", 0x00000008) -CERT_TRUST_IS_NOT_VALID_FOR_USAGE = make_flag("CERT_TRUST_IS_NOT_VALID_FOR_USAGE", 0x00000010) -CERT_TRUST_IS_UNTRUSTED_ROOT = make_flag("CERT_TRUST_IS_UNTRUSTED_ROOT", 0x00000020) -CERT_TRUST_REVOCATION_STATUS_UNKNOWN = make_flag("CERT_TRUST_REVOCATION_STATUS_UNKNOWN", 0x00000040) -CERT_TRUST_IS_CYCLIC = make_flag("CERT_TRUST_IS_CYCLIC", 0x00000080) -CERT_TRUST_INVALID_EXTENSION = make_flag("CERT_TRUST_INVALID_EXTENSION", 0x00000100) -CERT_TRUST_INVALID_POLICY_CONSTRAINTS = make_flag("CERT_TRUST_INVALID_POLICY_CONSTRAINTS", 0x00000200) -CERT_TRUST_INVALID_BASIC_CONSTRAINTS = make_flag("CERT_TRUST_INVALID_BASIC_CONSTRAINTS", 0x00000400) -CERT_TRUST_INVALID_NAME_CONSTRAINTS = make_flag("CERT_TRUST_INVALID_NAME_CONSTRAINTS", 0x00000800) -CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT = make_flag("CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT", 0x00001000) -CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT = make_flag("CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT", 0x00002000) -CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT = make_flag("CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT", 0x00004000) -CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT = make_flag("CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT", 0x00008000) -CERT_TRUST_IS_OFFLINE_REVOCATION = make_flag("CERT_TRUST_IS_OFFLINE_REVOCATION", 0x01000000) -CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY = make_flag("CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY", 0x02000000) -CERT_TRUST_IS_EXPLICIT_DISTRUST = make_flag("CERT_TRUST_IS_EXPLICIT_DISTRUST", 0x04000000) -CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT = make_flag("CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT", 0x08000000) -CERT_TRUST_IS_PARTIAL_CHAIN = make_flag("CERT_TRUST_IS_PARTIAL_CHAIN", 0x00010000) -CERT_TRUST_CTL_IS_NOT_TIME_VALID = make_flag("CERT_TRUST_CTL_IS_NOT_TIME_VALID", 0x00020000) -CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID = make_flag("CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID", 0x00040000) -CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE = make_flag("CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE", 0x00080000) -CERT_TRUST_HAS_EXACT_MATCH_ISSUER = make_flag("CERT_TRUST_HAS_EXACT_MATCH_ISSUER", 0x00000001) -CERT_TRUST_HAS_KEY_MATCH_ISSUER = make_flag("CERT_TRUST_HAS_KEY_MATCH_ISSUER", 0x00000002) -CERT_TRUST_HAS_NAME_MATCH_ISSUER = make_flag("CERT_TRUST_HAS_NAME_MATCH_ISSUER", 0x00000004) -CERT_TRUST_IS_SELF_SIGNED = make_flag("CERT_TRUST_IS_SELF_SIGNED", 0x00000008) -CERT_TRUST_HAS_PREFERRED_ISSUER = make_flag("CERT_TRUST_HAS_PREFERRED_ISSUER", 0x00000100) -CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY = make_flag("CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY", 0x00000200) -CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS = make_flag("CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS", 0x00000400) -CERT_TRUST_IS_PEER_TRUSTED = make_flag("CERT_TRUST_IS_PEER_TRUSTED", 0x00000800) -CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED = make_flag("CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED", 0x00001000) -CERT_TRUST_IS_FROM_EXCLUSIVE_TRUST_STORE = make_flag("CERT_TRUST_IS_FROM_EXCLUSIVE_TRUST_STORE", 0x00002000) -CERT_TRUST_IS_COMPLEX_CHAIN = make_flag("CERT_TRUST_IS_COMPLEX_CHAIN", 0x00010000) -CMSG_TYPE_PARAM = make_flag("CMSG_TYPE_PARAM", 1) -CMSG_CONTENT_PARAM = make_flag("CMSG_CONTENT_PARAM", 2) -CMSG_BARE_CONTENT_PARAM = make_flag("CMSG_BARE_CONTENT_PARAM", 3) -CMSG_INNER_CONTENT_TYPE_PARAM = make_flag("CMSG_INNER_CONTENT_TYPE_PARAM", 4) -CMSG_SIGNER_COUNT_PARAM = make_flag("CMSG_SIGNER_COUNT_PARAM", 5) -CMSG_SIGNER_INFO_PARAM = make_flag("CMSG_SIGNER_INFO_PARAM", 6) -CMSG_SIGNER_CERT_INFO_PARAM = make_flag("CMSG_SIGNER_CERT_INFO_PARAM", 7) -CMSG_SIGNER_HASH_ALGORITHM_PARAM = make_flag("CMSG_SIGNER_HASH_ALGORITHM_PARAM", 8) -CMSG_SIGNER_AUTH_ATTR_PARAM = make_flag("CMSG_SIGNER_AUTH_ATTR_PARAM", 9) -CMSG_SIGNER_UNAUTH_ATTR_PARAM = make_flag("CMSG_SIGNER_UNAUTH_ATTR_PARAM", 10) -CMSG_CERT_COUNT_PARAM = make_flag("CMSG_CERT_COUNT_PARAM", 11) -CMSG_CERT_PARAM = make_flag("CMSG_CERT_PARAM", 12) -CMSG_CRL_COUNT_PARAM = make_flag("CMSG_CRL_COUNT_PARAM", 13) -CMSG_CRL_PARAM = make_flag("CMSG_CRL_PARAM", 14) -CMSG_ENVELOPE_ALGORITHM_PARAM = make_flag("CMSG_ENVELOPE_ALGORITHM_PARAM", 15) -CMSG_RECIPIENT_COUNT_PARAM = make_flag("CMSG_RECIPIENT_COUNT_PARAM", 17) -CMSG_RECIPIENT_INDEX_PARAM = make_flag("CMSG_RECIPIENT_INDEX_PARAM", 18) -CMSG_RECIPIENT_INFO_PARAM = make_flag("CMSG_RECIPIENT_INFO_PARAM", 19) -CMSG_HASH_ALGORITHM_PARAM = make_flag("CMSG_HASH_ALGORITHM_PARAM", 20) -CMSG_HASH_DATA_PARAM = make_flag("CMSG_HASH_DATA_PARAM", 21) -CMSG_COMPUTED_HASH_PARAM = make_flag("CMSG_COMPUTED_HASH_PARAM", 22) -CMSG_ENCRYPT_PARAM = make_flag("CMSG_ENCRYPT_PARAM", 26) -CMSG_ENCRYPTED_DIGEST = make_flag("CMSG_ENCRYPTED_DIGEST", 27) -CMSG_ENCODED_SIGNER = make_flag("CMSG_ENCODED_SIGNER", 28) -CMSG_ENCODED_MESSAGE = make_flag("CMSG_ENCODED_MESSAGE", 29) -CMSG_VERSION_PARAM = make_flag("CMSG_VERSION_PARAM", 30) -CMSG_ATTR_CERT_COUNT_PARAM = make_flag("CMSG_ATTR_CERT_COUNT_PARAM", 31) -CMSG_ATTR_CERT_PARAM = make_flag("CMSG_ATTR_CERT_PARAM", 32) -CMSG_CMS_RECIPIENT_COUNT_PARAM = make_flag("CMSG_CMS_RECIPIENT_COUNT_PARAM", 33) -CMSG_CMS_RECIPIENT_INDEX_PARAM = make_flag("CMSG_CMS_RECIPIENT_INDEX_PARAM", 34) -CMSG_CMS_RECIPIENT_ENCRYPTED_KEY_INDEX_PARAM = make_flag("CMSG_CMS_RECIPIENT_ENCRYPTED_KEY_INDEX_PARAM", 35) -CMSG_CMS_RECIPIENT_INFO_PARAM = make_flag("CMSG_CMS_RECIPIENT_INFO_PARAM", 36) -CMSG_UNPROTECTED_ATTR_PARAM = make_flag("CMSG_UNPROTECTED_ATTR_PARAM", 37) -CMSG_SIGNER_CERT_ID_PARAM = make_flag("CMSG_SIGNER_CERT_ID_PARAM", 38) -CMSG_CMS_SIGNER_INFO_PARAM = make_flag("CMSG_CMS_SIGNER_INFO_PARAM", 39) -CERT_INFO_VERSION_FLAG = make_flag("CERT_INFO_VERSION_FLAG", 1) -CERT_INFO_SERIAL_NUMBER_FLAG = make_flag("CERT_INFO_SERIAL_NUMBER_FLAG", 2) -CERT_INFO_SIGNATURE_ALGORITHM_FLAG = make_flag("CERT_INFO_SIGNATURE_ALGORITHM_FLAG", 3) -CERT_INFO_ISSUER_FLAG = make_flag("CERT_INFO_ISSUER_FLAG", 4) -CERT_INFO_NOT_BEFORE_FLAG = make_flag("CERT_INFO_NOT_BEFORE_FLAG", 5) -CERT_INFO_NOT_AFTER_FLAG = make_flag("CERT_INFO_NOT_AFTER_FLAG", 6) -CERT_INFO_SUBJECT_FLAG = make_flag("CERT_INFO_SUBJECT_FLAG", 7) -CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG = make_flag("CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG", 8) -CERT_INFO_ISSUER_UNIQUE_ID_FLAG = make_flag("CERT_INFO_ISSUER_UNIQUE_ID_FLAG", 9) -CERT_INFO_SUBJECT_UNIQUE_ID_FLAG = make_flag("CERT_INFO_SUBJECT_UNIQUE_ID_FLAG", 10) -CERT_INFO_EXTENSION_FLAG = make_flag("CERT_INFO_EXTENSION_FLAG", 11) -CERT_FIND_ANY = make_flag("CERT_FIND_ANY", ( CERT_COMPARE_ANY << CERT_COMPARE_SHIFT )) -CERT_FIND_SHA1_HASH = make_flag("CERT_FIND_SHA1_HASH", ( CERT_COMPARE_SHA1_HASH << CERT_COMPARE_SHIFT )) -CERT_FIND_MD5_HASH = make_flag("CERT_FIND_MD5_HASH", ( CERT_COMPARE_MD5_HASH << CERT_COMPARE_SHIFT )) -CERT_FIND_SIGNATURE_HASH = make_flag("CERT_FIND_SIGNATURE_HASH", ( CERT_COMPARE_SIGNATURE_HASH << CERT_COMPARE_SHIFT )) -CERT_FIND_KEY_IDENTIFIER = make_flag("CERT_FIND_KEY_IDENTIFIER", ( CERT_COMPARE_KEY_IDENTIFIER << CERT_COMPARE_SHIFT )) -CERT_FIND_HASH = make_flag("CERT_FIND_HASH", CERT_FIND_SHA1_HASH) -CERT_FIND_PROPERTY = make_flag("CERT_FIND_PROPERTY", ( CERT_COMPARE_PROPERTY << CERT_COMPARE_SHIFT )) -CERT_FIND_PUBLIC_KEY = make_flag("CERT_FIND_PUBLIC_KEY", ( CERT_COMPARE_PUBLIC_KEY << CERT_COMPARE_SHIFT )) -CERT_FIND_SUBJECT_NAME = make_flag("CERT_FIND_SUBJECT_NAME", ( CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG )) -CERT_FIND_SUBJECT_ATTR = make_flag("CERT_FIND_SUBJECT_ATTR", ( CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG )) -CERT_FIND_ISSUER_NAME = make_flag("CERT_FIND_ISSUER_NAME", ( CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG )) -CERT_FIND_ISSUER_ATTR = make_flag("CERT_FIND_ISSUER_ATTR", ( CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG )) -CERT_FIND_SUBJECT_STR_A = make_flag("CERT_FIND_SUBJECT_STR_A", ( CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG )) -CERT_FIND_SUBJECT_STR_W = make_flag("CERT_FIND_SUBJECT_STR_W", ( CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG )) -CERT_FIND_SUBJECT_STR = make_flag("CERT_FIND_SUBJECT_STR", CERT_FIND_SUBJECT_STR_W) -CERT_FIND_ISSUER_STR_A = make_flag("CERT_FIND_ISSUER_STR_A", ( CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG )) -CERT_FIND_ISSUER_STR_W = make_flag("CERT_FIND_ISSUER_STR_W", ( CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG )) -CERT_FIND_ISSUER_STR = make_flag("CERT_FIND_ISSUER_STR", CERT_FIND_ISSUER_STR_W) -CERT_FIND_KEY_SPEC = make_flag("CERT_FIND_KEY_SPEC", ( CERT_COMPARE_KEY_SPEC << CERT_COMPARE_SHIFT )) -CERT_FIND_ENHKEY_USAGE = make_flag("CERT_FIND_ENHKEY_USAGE", ( CERT_COMPARE_ENHKEY_USAGE << CERT_COMPARE_SHIFT )) -CERT_FIND_CTL_USAGE = make_flag("CERT_FIND_CTL_USAGE", CERT_FIND_ENHKEY_USAGE) -CERT_FIND_SUBJECT_CERT = make_flag("CERT_FIND_SUBJECT_CERT", ( CERT_COMPARE_SUBJECT_CERT << CERT_COMPARE_SHIFT )) -CERT_FIND_ISSUER_OF = make_flag("CERT_FIND_ISSUER_OF", ( CERT_COMPARE_ISSUER_OF << CERT_COMPARE_SHIFT )) -CERT_FIND_EXISTING = make_flag("CERT_FIND_EXISTING", ( CERT_COMPARE_EXISTING << CERT_COMPARE_SHIFT )) -CERT_FIND_CERT_ID = make_flag("CERT_FIND_CERT_ID", ( CERT_COMPARE_CERT_ID << CERT_COMPARE_SHIFT )) -CERT_FIND_CROSS_CERT_DIST_POINTS = make_flag("CERT_FIND_CROSS_CERT_DIST_POINTS", ( CERT_COMPARE_CROSS_CERT_DIST_POINTS << CERT_COMPARE_SHIFT )) -CERT_FIND_PUBKEY_MD5_HASH = make_flag("CERT_FIND_PUBKEY_MD5_HASH", ( CERT_COMPARE_PUBKEY_MD5_HASH << CERT_COMPARE_SHIFT )) -CERT_FIND_SUBJECT_INFO_ACCESS = make_flag("CERT_FIND_SUBJECT_INFO_ACCESS", ( CERT_COMPARE_SUBJECT_INFO_ACCESS << CERT_COMPARE_SHIFT )) -CERT_NAME_EMAIL_TYPE = make_flag("CERT_NAME_EMAIL_TYPE", 1) -CERT_NAME_RDN_TYPE = make_flag("CERT_NAME_RDN_TYPE", 2) -CERT_NAME_ATTR_TYPE = make_flag("CERT_NAME_ATTR_TYPE", 3) -CERT_NAME_SIMPLE_DISPLAY_TYPE = make_flag("CERT_NAME_SIMPLE_DISPLAY_TYPE", 4) -CERT_NAME_FRIENDLY_DISPLAY_TYPE = make_flag("CERT_NAME_FRIENDLY_DISPLAY_TYPE", 5) -CERT_NAME_DNS_TYPE = make_flag("CERT_NAME_DNS_TYPE", 6) -CERT_NAME_URL_TYPE = make_flag("CERT_NAME_URL_TYPE", 7) -CERT_NAME_UPN_TYPE = make_flag("CERT_NAME_UPN_TYPE", 8) -CERT_KEY_PROV_HANDLE_PROP_ID = make_flag("CERT_KEY_PROV_HANDLE_PROP_ID", 1) -CERT_KEY_PROV_INFO_PROP_ID = make_flag("CERT_KEY_PROV_INFO_PROP_ID", 2) -CERT_SHA1_HASH_PROP_ID = make_flag("CERT_SHA1_HASH_PROP_ID", 3) -CERT_MD5_HASH_PROP_ID = make_flag("CERT_MD5_HASH_PROP_ID", 4) -CERT_HASH_PROP_ID = make_flag("CERT_HASH_PROP_ID", CERT_SHA1_HASH_PROP_ID) -CERT_KEY_CONTEXT_PROP_ID = make_flag("CERT_KEY_CONTEXT_PROP_ID", 5) -CERT_KEY_SPEC_PROP_ID = make_flag("CERT_KEY_SPEC_PROP_ID", 6) -CERT_IE30_RESERVED_PROP_ID = make_flag("CERT_IE30_RESERVED_PROP_ID", 7) -CERT_PUBKEY_HASH_RESERVED_PROP_ID = make_flag("CERT_PUBKEY_HASH_RESERVED_PROP_ID", 8) -CERT_ENHKEY_USAGE_PROP_ID = make_flag("CERT_ENHKEY_USAGE_PROP_ID", 9) -CERT_CTL_USAGE_PROP_ID = make_flag("CERT_CTL_USAGE_PROP_ID", CERT_ENHKEY_USAGE_PROP_ID) -CERT_NEXT_UPDATE_LOCATION_PROP_ID = make_flag("CERT_NEXT_UPDATE_LOCATION_PROP_ID", 10) -CERT_FRIENDLY_NAME_PROP_ID = make_flag("CERT_FRIENDLY_NAME_PROP_ID", 11) -CERT_PVK_FILE_PROP_ID = make_flag("CERT_PVK_FILE_PROP_ID", 12) -CERT_DESCRIPTION_PROP_ID = make_flag("CERT_DESCRIPTION_PROP_ID", 13) -CERT_ACCESS_STATE_PROP_ID = make_flag("CERT_ACCESS_STATE_PROP_ID", 14) -CERT_SIGNATURE_HASH_PROP_ID = make_flag("CERT_SIGNATURE_HASH_PROP_ID", 15) -CERT_SMART_CARD_DATA_PROP_ID = make_flag("CERT_SMART_CARD_DATA_PROP_ID", 16) -CERT_EFS_PROP_ID = make_flag("CERT_EFS_PROP_ID", 17) -CERT_FORTEZZA_DATA_PROP_ID = make_flag("CERT_FORTEZZA_DATA_PROP_ID", 18) -CERT_ARCHIVED_PROP_ID = make_flag("CERT_ARCHIVED_PROP_ID", 19) -CERT_KEY_IDENTIFIER_PROP_ID = make_flag("CERT_KEY_IDENTIFIER_PROP_ID", 20) -CERT_AUTO_ENROLL_PROP_ID = make_flag("CERT_AUTO_ENROLL_PROP_ID", 21) -CERT_PUBKEY_ALG_PARA_PROP_ID = make_flag("CERT_PUBKEY_ALG_PARA_PROP_ID", 22) -CERT_CROSS_CERT_DIST_POINTS_PROP_ID = make_flag("CERT_CROSS_CERT_DIST_POINTS_PROP_ID", 23) -CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID = make_flag("CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID", 24) -CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID = make_flag("CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID", 25) -CERT_ENROLLMENT_PROP_ID = make_flag("CERT_ENROLLMENT_PROP_ID", 26) -CERT_DATE_STAMP_PROP_ID = make_flag("CERT_DATE_STAMP_PROP_ID", 27) -CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID = make_flag("CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID", 28) -CERT_SUBJECT_NAME_MD5_HASH_PROP_ID = make_flag("CERT_SUBJECT_NAME_MD5_HASH_PROP_ID", 29) -CERT_EXTENDED_ERROR_INFO_PROP_ID = make_flag("CERT_EXTENDED_ERROR_INFO_PROP_ID", 30) -CERT_RENEWAL_PROP_ID = make_flag("CERT_RENEWAL_PROP_ID", 64) -CERT_ARCHIVED_KEY_HASH_PROP_ID = make_flag("CERT_ARCHIVED_KEY_HASH_PROP_ID", 65) -CERT_AUTO_ENROLL_RETRY_PROP_ID = make_flag("CERT_AUTO_ENROLL_RETRY_PROP_ID", 66) -CERT_AIA_URL_RETRIEVED_PROP_ID = make_flag("CERT_AIA_URL_RETRIEVED_PROP_ID", 67) -CERT_AUTHORITY_INFO_ACCESS_PROP_ID = make_flag("CERT_AUTHORITY_INFO_ACCESS_PROP_ID", 68) -CERT_BACKED_UP_PROP_ID = make_flag("CERT_BACKED_UP_PROP_ID", 69) -CERT_OCSP_RESPONSE_PROP_ID = make_flag("CERT_OCSP_RESPONSE_PROP_ID", 70) -CERT_REQUEST_ORIGINATOR_PROP_ID = make_flag("CERT_REQUEST_ORIGINATOR_PROP_ID", 71) -CERT_SOURCE_LOCATION_PROP_ID = make_flag("CERT_SOURCE_LOCATION_PROP_ID", 72) -CRYPT_ACQUIRE_CACHE_FLAG = make_flag("CRYPT_ACQUIRE_CACHE_FLAG", 0x00000001) -CRYPT_ACQUIRE_USE_PROV_INFO_FLAG = make_flag("CRYPT_ACQUIRE_USE_PROV_INFO_FLAG", 0x00000002) -CRYPT_ACQUIRE_COMPARE_KEY_FLAG = make_flag("CRYPT_ACQUIRE_COMPARE_KEY_FLAG", 0x00000004) -CRYPT_ACQUIRE_NO_HEALING = make_flag("CRYPT_ACQUIRE_NO_HEALING", 0x00000008) -CRYPT_ACQUIRE_SILENT_FLAG = make_flag("CRYPT_ACQUIRE_SILENT_FLAG", 0x00000040) -CRYPT_ACQUIRE_NCRYPT_KEY_FLAGS_MASK = make_flag("CRYPT_ACQUIRE_NCRYPT_KEY_FLAGS_MASK", 0x00070000) -CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG = make_flag("CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG", 0x00010000) -CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG = make_flag("CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG", 0x00020000) -CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG = make_flag("CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG", 0x00040000) -CERT_STORE_PROV_MSG = make_flag("CERT_STORE_PROV_MSG", ( 1 )) -CERT_STORE_PROV_MEMORY = make_flag("CERT_STORE_PROV_MEMORY", ( 2 )) -CERT_STORE_PROV_FILE = make_flag("CERT_STORE_PROV_FILE", ( 3 )) -CERT_STORE_PROV_REG = make_flag("CERT_STORE_PROV_REG", ( 4 )) -CERT_STORE_PROV_PKCS7 = make_flag("CERT_STORE_PROV_PKCS7", ( 5 )) -CERT_STORE_PROV_SERIALIZED = make_flag("CERT_STORE_PROV_SERIALIZED", ( 6 )) -CERT_STORE_PROV_FILENAME_A = make_flag("CERT_STORE_PROV_FILENAME_A", ( 7 )) -CERT_STORE_PROV_FILENAME_W = make_flag("CERT_STORE_PROV_FILENAME_W", ( 8 )) -CERT_STORE_PROV_FILENAME = make_flag("CERT_STORE_PROV_FILENAME", CERT_STORE_PROV_FILENAME_W) -CERT_STORE_PROV_SYSTEM_A = make_flag("CERT_STORE_PROV_SYSTEM_A", ( 9 )) -CERT_STORE_PROV_SYSTEM_W = make_flag("CERT_STORE_PROV_SYSTEM_W", ( 10 )) -CERT_STORE_PROV_SYSTEM = make_flag("CERT_STORE_PROV_SYSTEM", CERT_STORE_PROV_SYSTEM_W) -CERT_STORE_PROV_COLLECTION = make_flag("CERT_STORE_PROV_COLLECTION", ( 11 )) -CERT_STORE_PROV_SYSTEM_REGISTRY_A = make_flag("CERT_STORE_PROV_SYSTEM_REGISTRY_A", ( 12 )) -CERT_STORE_PROV_SYSTEM_REGISTRY_W = make_flag("CERT_STORE_PROV_SYSTEM_REGISTRY_W", ( 13 )) -CERT_STORE_PROV_SYSTEM_REGISTRY = make_flag("CERT_STORE_PROV_SYSTEM_REGISTRY", CERT_STORE_PROV_SYSTEM_REGISTRY_W) -CERT_STORE_PROV_PHYSICAL_W = make_flag("CERT_STORE_PROV_PHYSICAL_W", ( 14 )) -CERT_STORE_PROV_PHYSICAL = make_flag("CERT_STORE_PROV_PHYSICAL", CERT_STORE_PROV_PHYSICAL_W) -CERT_STORE_PROV_SMART_CARD_W = make_flag("CERT_STORE_PROV_SMART_CARD_W", ( 15 )) -CERT_STORE_PROV_SMART_CARD = make_flag("CERT_STORE_PROV_SMART_CARD", CERT_STORE_PROV_SMART_CARD_W) -CERT_STORE_PROV_LDAP_W = make_flag("CERT_STORE_PROV_LDAP_W", ( 16 )) -CERT_STORE_PROV_LDAP = make_flag("CERT_STORE_PROV_LDAP", CERT_STORE_PROV_LDAP_W) -CERT_STORE_PROV_PKCS12 = make_flag("CERT_STORE_PROV_PKCS12", ( 17 )) -szOID_RSA = make_flag("szOID_RSA", "1.2.840.113549") -szOID_PKCS = make_flag("szOID_PKCS", "1.2.840.113549.1") -szOID_RSA_HASH = make_flag("szOID_RSA_HASH", "1.2.840.113549.2") -szOID_RSA_ENCRYPT = make_flag("szOID_RSA_ENCRYPT", "1.2.840.113549.3") -szOID_PKCS_1 = make_flag("szOID_PKCS_1", "1.2.840.113549.1.1") -szOID_PKCS_2 = make_flag("szOID_PKCS_2", "1.2.840.113549.1.2") -szOID_PKCS_3 = make_flag("szOID_PKCS_3", "1.2.840.113549.1.3") -szOID_PKCS_4 = make_flag("szOID_PKCS_4", "1.2.840.113549.1.4") -szOID_PKCS_5 = make_flag("szOID_PKCS_5", "1.2.840.113549.1.5") -szOID_PKCS_6 = make_flag("szOID_PKCS_6", "1.2.840.113549.1.6") -szOID_PKCS_7 = make_flag("szOID_PKCS_7", "1.2.840.113549.1.7") -szOID_PKCS_8 = make_flag("szOID_PKCS_8", "1.2.840.113549.1.8") -szOID_PKCS_9 = make_flag("szOID_PKCS_9", "1.2.840.113549.1.9") -szOID_PKCS_10 = make_flag("szOID_PKCS_10", "1.2.840.113549.1.10") -szOID_PKCS_12 = make_flag("szOID_PKCS_12", "1.2.840.113549.1.12") -szOID_RSA_RSA = make_flag("szOID_RSA_RSA", "1.2.840.113549.1.1.1") -szOID_RSA_MD2RSA = make_flag("szOID_RSA_MD2RSA", "1.2.840.113549.1.1.2") -szOID_RSA_MD4RSA = make_flag("szOID_RSA_MD4RSA", "1.2.840.113549.1.1.3") -szOID_RSA_MD5RSA = make_flag("szOID_RSA_MD5RSA", "1.2.840.113549.1.1.4") -szOID_RSA_SHA1RSA = make_flag("szOID_RSA_SHA1RSA", "1.2.840.113549.1.1.5") -szOID_RSA_SETOAEP_RSA = make_flag("szOID_RSA_SETOAEP_RSA", "1.2.840.113549.1.1.6") -szOID_RSAES_OAEP = make_flag("szOID_RSAES_OAEP", "1.2.840.113549.1.1.7") -szOID_RSA_MGF1 = make_flag("szOID_RSA_MGF1", "1.2.840.113549.1.1.8") -szOID_RSA_PSPECIFIED = make_flag("szOID_RSA_PSPECIFIED", "1.2.840.113549.1.1.9") -szOID_RSA_SSA_PSS = make_flag("szOID_RSA_SSA_PSS", "1.2.840.113549.1.1.10") -szOID_RSA_SHA256RSA = make_flag("szOID_RSA_SHA256RSA", "1.2.840.113549.1.1.11") -szOID_RSA_SHA384RSA = make_flag("szOID_RSA_SHA384RSA", "1.2.840.113549.1.1.12") -szOID_RSA_SHA512RSA = make_flag("szOID_RSA_SHA512RSA", "1.2.840.113549.1.1.13") -szOID_RSA_DH = make_flag("szOID_RSA_DH", "1.2.840.113549.1.3.1") -szOID_RSA_data = make_flag("szOID_RSA_data", "1.2.840.113549.1.7.1") -szOID_RSA_signedData = make_flag("szOID_RSA_signedData", "1.2.840.113549.1.7.2") -szOID_RSA_envelopedData = make_flag("szOID_RSA_envelopedData", "1.2.840.113549.1.7.3") -szOID_RSA_signEnvData = make_flag("szOID_RSA_signEnvData", "1.2.840.113549.1.7.4") -szOID_RSA_digestedData = make_flag("szOID_RSA_digestedData", "1.2.840.113549.1.7.5") -szOID_RSA_hashedData = make_flag("szOID_RSA_hashedData", "1.2.840.113549.1.7.5") -szOID_RSA_encryptedData = make_flag("szOID_RSA_encryptedData", "1.2.840.113549.1.7.6") -szOID_RSA_emailAddr = make_flag("szOID_RSA_emailAddr", "1.2.840.113549.1.9.1") -szOID_RSA_unstructName = make_flag("szOID_RSA_unstructName", "1.2.840.113549.1.9.2") -szOID_RSA_contentType = make_flag("szOID_RSA_contentType", "1.2.840.113549.1.9.3") -szOID_RSA_messageDigest = make_flag("szOID_RSA_messageDigest", "1.2.840.113549.1.9.4") -szOID_RSA_signingTime = make_flag("szOID_RSA_signingTime", "1.2.840.113549.1.9.5") -szOID_RSA_counterSign = make_flag("szOID_RSA_counterSign", "1.2.840.113549.1.9.6") -szOID_RSA_challengePwd = make_flag("szOID_RSA_challengePwd", "1.2.840.113549.1.9.7") -szOID_RSA_unstructAddr = make_flag("szOID_RSA_unstructAddr", "1.2.840.113549.1.9.8") -szOID_RSA_extCertAttrs = make_flag("szOID_RSA_extCertAttrs", "1.2.840.113549.1.9.9") -szOID_RSA_certExtensions = make_flag("szOID_RSA_certExtensions", "1.2.840.113549.1.9.14") -szOID_RSA_SMIMECapabilities = make_flag("szOID_RSA_SMIMECapabilities", "1.2.840.113549.1.9.15") -szOID_RSA_preferSignedData = make_flag("szOID_RSA_preferSignedData", "1.2.840.113549.1.9.15.1") -szOID_TIMESTAMP_TOKEN = make_flag("szOID_TIMESTAMP_TOKEN", "1.2.840.113549.1.9.16.1.4") -szOID_RFC3161_counterSign = make_flag("szOID_RFC3161_counterSign", "1.3.6.1.4.1.311.3.3.1") -szOID_RSA_SMIMEalg = make_flag("szOID_RSA_SMIMEalg", "1.2.840.113549.1.9.16.3") -szOID_RSA_SMIMEalgESDH = make_flag("szOID_RSA_SMIMEalgESDH", "1.2.840.113549.1.9.16.3.5") -szOID_RSA_SMIMEalgCMS3DESwrap = make_flag("szOID_RSA_SMIMEalgCMS3DESwrap", "1.2.840.113549.1.9.16.3.6") -szOID_RSA_SMIMEalgCMSRC2wrap = make_flag("szOID_RSA_SMIMEalgCMSRC2wrap", "1.2.840.113549.1.9.16.3.7") -szOID_RSA_MD2 = make_flag("szOID_RSA_MD2", "1.2.840.113549.2.2") -szOID_RSA_MD4 = make_flag("szOID_RSA_MD4", "1.2.840.113549.2.4") -szOID_RSA_MD5 = make_flag("szOID_RSA_MD5", "1.2.840.113549.2.5") -szOID_RSA_RC2CBC = make_flag("szOID_RSA_RC2CBC", "1.2.840.113549.3.2") -szOID_RSA_RC4 = make_flag("szOID_RSA_RC4", "1.2.840.113549.3.4") -szOID_RSA_DES_EDE3_CBC = make_flag("szOID_RSA_DES_EDE3_CBC", "1.2.840.113549.3.7") -szOID_RSA_RC5_CBCPad = make_flag("szOID_RSA_RC5_CBCPad", "1.2.840.113549.3.9") -szOID_ANSI_X942 = make_flag("szOID_ANSI_X942", "1.2.840.10046") -szOID_ANSI_X942_DH = make_flag("szOID_ANSI_X942_DH", "1.2.840.10046.2.1") -szOID_X957 = make_flag("szOID_X957", "1.2.840.10040") -szOID_X957_DSA = make_flag("szOID_X957_DSA", "1.2.840.10040.4.1") -szOID_X957_SHA1DSA = make_flag("szOID_X957_SHA1DSA", "1.2.840.10040.4.3") -szOID_ECC_PUBLIC_KEY = make_flag("szOID_ECC_PUBLIC_KEY", "1.2.840.10045.2.1") -szOID_ECC_CURVE_P256 = make_flag("szOID_ECC_CURVE_P256", "1.2.840.10045.3.1.7") -szOID_ECC_CURVE_P384 = make_flag("szOID_ECC_CURVE_P384", "1.3.132.0.34") -szOID_ECC_CURVE_P521 = make_flag("szOID_ECC_CURVE_P521", "1.3.132.0.35") -szOID_ECDSA_SHA1 = make_flag("szOID_ECDSA_SHA1", "1.2.840.10045.4.1") -szOID_ECDSA_SPECIFIED = make_flag("szOID_ECDSA_SPECIFIED", "1.2.840.10045.4.3") -szOID_ECDSA_SHA256 = make_flag("szOID_ECDSA_SHA256", "1.2.840.10045.4.3.2") -szOID_ECDSA_SHA384 = make_flag("szOID_ECDSA_SHA384", "1.2.840.10045.4.3.3") -szOID_ECDSA_SHA512 = make_flag("szOID_ECDSA_SHA512", "1.2.840.10045.4.3.4") -szOID_NIST_AES128_CBC = make_flag("szOID_NIST_AES128_CBC", "2.16.840.1.101.3.4.1.2") -szOID_NIST_AES192_CBC = make_flag("szOID_NIST_AES192_CBC", "2.16.840.1.101.3.4.1.22") -szOID_NIST_AES256_CBC = make_flag("szOID_NIST_AES256_CBC", "2.16.840.1.101.3.4.1.42") -szOID_NIST_AES128_WRAP = make_flag("szOID_NIST_AES128_WRAP", "2.16.840.1.101.3.4.1.5") -szOID_NIST_AES192_WRAP = make_flag("szOID_NIST_AES192_WRAP", "2.16.840.1.101.3.4.1.25") -szOID_NIST_AES256_WRAP = make_flag("szOID_NIST_AES256_WRAP", "2.16.840.1.101.3.4.1.45") -szOID_DH_SINGLE_PASS_STDDH_SHA1_KDF = make_flag("szOID_DH_SINGLE_PASS_STDDH_SHA1_KDF", "1.3.133.16.840.63.0.2") -szOID_DH_SINGLE_PASS_STDDH_SHA256_KDF = make_flag("szOID_DH_SINGLE_PASS_STDDH_SHA256_KDF", "1.3.132.1.11.1") -szOID_DH_SINGLE_PASS_STDDH_SHA384_KDF = make_flag("szOID_DH_SINGLE_PASS_STDDH_SHA384_KDF", "1.3.132.1.11.2") -szOID_DS = make_flag("szOID_DS", "2.5") -szOID_DSALG = make_flag("szOID_DSALG", "2.5.8") -szOID_DSALG_CRPT = make_flag("szOID_DSALG_CRPT", "2.5.8.1") -szOID_DSALG_HASH = make_flag("szOID_DSALG_HASH", "2.5.8.2") -szOID_DSALG_SIGN = make_flag("szOID_DSALG_SIGN", "2.5.8.3") -szOID_DSALG_RSA = make_flag("szOID_DSALG_RSA", "2.5.8.1.1") -szOID_OIW = make_flag("szOID_OIW", "1.3.14") -szOID_OIWSEC = make_flag("szOID_OIWSEC", "1.3.14.3.2") -szOID_OIWSEC_md4RSA = make_flag("szOID_OIWSEC_md4RSA", "1.3.14.3.2.2") -szOID_OIWSEC_md5RSA = make_flag("szOID_OIWSEC_md5RSA", "1.3.14.3.2.3") -szOID_OIWSEC_md4RSA2 = make_flag("szOID_OIWSEC_md4RSA2", "1.3.14.3.2.4") -szOID_OIWSEC_desECB = make_flag("szOID_OIWSEC_desECB", "1.3.14.3.2.6") -szOID_OIWSEC_desCBC = make_flag("szOID_OIWSEC_desCBC", "1.3.14.3.2.7") -szOID_OIWSEC_desOFB = make_flag("szOID_OIWSEC_desOFB", "1.3.14.3.2.8") -szOID_OIWSEC_desCFB = make_flag("szOID_OIWSEC_desCFB", "1.3.14.3.2.9") -szOID_OIWSEC_desMAC = make_flag("szOID_OIWSEC_desMAC", "1.3.14.3.2.10") -szOID_OIWSEC_rsaSign = make_flag("szOID_OIWSEC_rsaSign", "1.3.14.3.2.11") -szOID_OIWSEC_dsa = make_flag("szOID_OIWSEC_dsa", "1.3.14.3.2.12") -szOID_OIWSEC_shaDSA = make_flag("szOID_OIWSEC_shaDSA", "1.3.14.3.2.13") -szOID_OIWSEC_mdc2RSA = make_flag("szOID_OIWSEC_mdc2RSA", "1.3.14.3.2.14") -szOID_OIWSEC_shaRSA = make_flag("szOID_OIWSEC_shaRSA", "1.3.14.3.2.15") -szOID_OIWSEC_dhCommMod = make_flag("szOID_OIWSEC_dhCommMod", "1.3.14.3.2.16") -szOID_OIWSEC_desEDE = make_flag("szOID_OIWSEC_desEDE", "1.3.14.3.2.17") -szOID_OIWSEC_sha = make_flag("szOID_OIWSEC_sha", "1.3.14.3.2.18") -szOID_OIWSEC_mdc2 = make_flag("szOID_OIWSEC_mdc2", "1.3.14.3.2.19") -szOID_OIWSEC_dsaComm = make_flag("szOID_OIWSEC_dsaComm", "1.3.14.3.2.20") -szOID_OIWSEC_dsaCommSHA = make_flag("szOID_OIWSEC_dsaCommSHA", "1.3.14.3.2.21") -szOID_OIWSEC_rsaXchg = make_flag("szOID_OIWSEC_rsaXchg", "1.3.14.3.2.22") -szOID_OIWSEC_keyHashSeal = make_flag("szOID_OIWSEC_keyHashSeal", "1.3.14.3.2.23") -szOID_OIWSEC_md2RSASign = make_flag("szOID_OIWSEC_md2RSASign", "1.3.14.3.2.24") -szOID_OIWSEC_md5RSASign = make_flag("szOID_OIWSEC_md5RSASign", "1.3.14.3.2.25") -szOID_OIWSEC_sha1 = make_flag("szOID_OIWSEC_sha1", "1.3.14.3.2.26") -szOID_OIWSEC_dsaSHA1 = make_flag("szOID_OIWSEC_dsaSHA1", "1.3.14.3.2.27") -szOID_OIWSEC_dsaCommSHA1 = make_flag("szOID_OIWSEC_dsaCommSHA1", "1.3.14.3.2.28") -szOID_OIWSEC_sha1RSASign = make_flag("szOID_OIWSEC_sha1RSASign", "1.3.14.3.2.29") -szOID_OIWDIR = make_flag("szOID_OIWDIR", "1.3.14.7.2") -szOID_OIWDIR_CRPT = make_flag("szOID_OIWDIR_CRPT", "1.3.14.7.2.1") -szOID_OIWDIR_HASH = make_flag("szOID_OIWDIR_HASH", "1.3.14.7.2.2") -szOID_OIWDIR_SIGN = make_flag("szOID_OIWDIR_SIGN", "1.3.14.7.2.3") -szOID_OIWDIR_md2 = make_flag("szOID_OIWDIR_md2", "1.3.14.7.2.2.1") -szOID_OIWDIR_md2RSA = make_flag("szOID_OIWDIR_md2RSA", "1.3.14.7.2.3.1") -szOID_INFOSEC = make_flag("szOID_INFOSEC", "2.16.840.1.101.2.1") -szOID_INFOSEC_sdnsSignature = make_flag("szOID_INFOSEC_sdnsSignature", "2.16.840.1.101.2.1.1.1") -szOID_INFOSEC_mosaicSignature = make_flag("szOID_INFOSEC_mosaicSignature", "2.16.840.1.101.2.1.1.2") -szOID_INFOSEC_sdnsConfidentiality = make_flag("szOID_INFOSEC_sdnsConfidentiality", "2.16.840.1.101.2.1.1.3") -szOID_INFOSEC_mosaicConfidentiality = make_flag("szOID_INFOSEC_mosaicConfidentiality", "2.16.840.1.101.2.1.1.4") -szOID_INFOSEC_sdnsIntegrity = make_flag("szOID_INFOSEC_sdnsIntegrity", "2.16.840.1.101.2.1.1.5") -szOID_INFOSEC_mosaicIntegrity = make_flag("szOID_INFOSEC_mosaicIntegrity", "2.16.840.1.101.2.1.1.6") -szOID_INFOSEC_sdnsTokenProtection = make_flag("szOID_INFOSEC_sdnsTokenProtection", "2.16.840.1.101.2.1.1.7") -szOID_INFOSEC_mosaicTokenProtection = make_flag("szOID_INFOSEC_mosaicTokenProtection", "2.16.840.1.101.2.1.1.8") -szOID_INFOSEC_sdnsKeyManagement = make_flag("szOID_INFOSEC_sdnsKeyManagement", "2.16.840.1.101.2.1.1.9") -szOID_INFOSEC_mosaicKeyManagement = make_flag("szOID_INFOSEC_mosaicKeyManagement", "2.16.840.1.101.2.1.1.10") -szOID_INFOSEC_sdnsKMandSig = make_flag("szOID_INFOSEC_sdnsKMandSig", "2.16.840.1.101.2.1.1.11") -szOID_INFOSEC_mosaicKMandSig = make_flag("szOID_INFOSEC_mosaicKMandSig", "2.16.840.1.101.2.1.1.12") -szOID_INFOSEC_SuiteASignature = make_flag("szOID_INFOSEC_SuiteASignature", "2.16.840.1.101.2.1.1.13") -szOID_INFOSEC_SuiteAConfidentiality = make_flag("szOID_INFOSEC_SuiteAConfidentiality", "2.16.840.1.101.2.1.1.14") -szOID_INFOSEC_SuiteAIntegrity = make_flag("szOID_INFOSEC_SuiteAIntegrity", "2.16.840.1.101.2.1.1.15") -szOID_INFOSEC_SuiteATokenProtection = make_flag("szOID_INFOSEC_SuiteATokenProtection", "2.16.840.1.101.2.1.1.16") -szOID_INFOSEC_SuiteAKeyManagement = make_flag("szOID_INFOSEC_SuiteAKeyManagement", "2.16.840.1.101.2.1.1.17") -szOID_INFOSEC_SuiteAKMandSig = make_flag("szOID_INFOSEC_SuiteAKMandSig", "2.16.840.1.101.2.1.1.18") -szOID_INFOSEC_mosaicUpdatedSig = make_flag("szOID_INFOSEC_mosaicUpdatedSig", "2.16.840.1.101.2.1.1.19") -szOID_INFOSEC_mosaicKMandUpdSig = make_flag("szOID_INFOSEC_mosaicKMandUpdSig", "2.16.840.1.101.2.1.1.20") -szOID_INFOSEC_mosaicUpdatedInteg = make_flag("szOID_INFOSEC_mosaicUpdatedInteg", "2.16.840.1.101.2.1.1.21") -szOID_NIST_sha256 = make_flag("szOID_NIST_sha256", "2.16.840.1.101.3.4.2.1") -szOID_NIST_sha384 = make_flag("szOID_NIST_sha384", "2.16.840.1.101.3.4.2.2") -szOID_NIST_sha512 = make_flag("szOID_NIST_sha512", "2.16.840.1.101.3.4.2.3") -CRYPT_E_NOT_FOUND = make_flag("CRYPT_E_NOT_FOUND", ( 0x80092004 )) -CERT_STORE_NO_CRYPT_RELEASE_FLAG = make_flag("CERT_STORE_NO_CRYPT_RELEASE_FLAG", 0x00000001) -CERT_STORE_SET_LOCALIZED_NAME_FLAG = make_flag("CERT_STORE_SET_LOCALIZED_NAME_FLAG", 0x00000002) -CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = make_flag("CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG", 0x00000004) -CERT_STORE_DELETE_FLAG = make_flag("CERT_STORE_DELETE_FLAG", 0x00000010) -CERT_STORE_UNSAFE_PHYSICAL_FLAG = make_flag("CERT_STORE_UNSAFE_PHYSICAL_FLAG", 0x00000020) -CERT_STORE_SHARE_STORE_FLAG = make_flag("CERT_STORE_SHARE_STORE_FLAG", 0x00000040) -CERT_STORE_SHARE_CONTEXT_FLAG = make_flag("CERT_STORE_SHARE_CONTEXT_FLAG", 0x00000080) -CERT_STORE_MANIFOLD_FLAG = make_flag("CERT_STORE_MANIFOLD_FLAG", 0x00000100) -CERT_STORE_ENUM_ARCHIVED_FLAG = make_flag("CERT_STORE_ENUM_ARCHIVED_FLAG", 0x00000200) -CERT_STORE_UPDATE_KEYID_FLAG = make_flag("CERT_STORE_UPDATE_KEYID_FLAG", 0x00000400) -CERT_STORE_BACKUP_RESTORE_FLAG = make_flag("CERT_STORE_BACKUP_RESTORE_FLAG", 0x00000800) -CERT_STORE_READONLY_FLAG = make_flag("CERT_STORE_READONLY_FLAG", 0x00008000) -CERT_STORE_OPEN_EXISTING_FLAG = make_flag("CERT_STORE_OPEN_EXISTING_FLAG", 0x00004000) -CERT_STORE_CREATE_NEW_FLAG = make_flag("CERT_STORE_CREATE_NEW_FLAG", 0x00002000) -CERT_STORE_MAXIMUM_ALLOWED_FLAG = make_flag("CERT_STORE_MAXIMUM_ALLOWED_FLAG", 0x00001000) -CRYPT_USER_KEYSET = make_flag("CRYPT_USER_KEYSET", 0x00001000) -PKCS12_PREFER_CNG_KSP = make_flag("PKCS12_PREFER_CNG_KSP", 0x00000100) -PKCS12_ALWAYS_CNG_KSP = make_flag("PKCS12_ALWAYS_CNG_KSP", 0x00000200) -PKCS12_ALLOW_OVERWRITE_KEY = make_flag("PKCS12_ALLOW_OVERWRITE_KEY", 0x00004000) -PKCS12_NO_PERSIST_KEY = make_flag("PKCS12_NO_PERSIST_KEY", 0x00008000) -CRYPT_VERIFYCONTEXT = make_flag("CRYPT_VERIFYCONTEXT", 0xF0000000) -CRYPT_NEWKEYSET = make_flag("CRYPT_NEWKEYSET", 0x00000008) -CRYPT_DELETEKEYSET = make_flag("CRYPT_DELETEKEYSET", 0x00000010) -CRYPT_MACHINE_KEYSET = make_flag("CRYPT_MACHINE_KEYSET", 0x00000020) -CRYPT_SILENT = make_flag("CRYPT_SILENT", 0x00000040) -CRYPT_DEFAULT_CONTAINER_OPTIONAL = make_flag("CRYPT_DEFAULT_CONTAINER_OPTIONAL", 0x00000080) -CRYPT_EXPORTABLE = make_flag("CRYPT_EXPORTABLE", 0x00000001) -CRYPT_USER_PROTECTED = make_flag("CRYPT_USER_PROTECTED", 0x00000002) -CRYPT_CREATE_SALT = make_flag("CRYPT_CREATE_SALT", 0x00000004) -CRYPT_UPDATE_KEY = make_flag("CRYPT_UPDATE_KEY", 0x00000008) -CRYPT_NO_SALT = make_flag("CRYPT_NO_SALT", 0x00000010) -CRYPT_PREGEN = make_flag("CRYPT_PREGEN", 0x00000040) -CRYPT_RECIPIENT = make_flag("CRYPT_RECIPIENT", 0x00000010) -CRYPT_INITIATOR = make_flag("CRYPT_INITIATOR", 0x00000040) -CRYPT_ONLINE = make_flag("CRYPT_ONLINE", 0x00000080) -CRYPT_SF = make_flag("CRYPT_SF", 0x00000100) -CRYPT_CREATE_IV = make_flag("CRYPT_CREATE_IV", 0x00000200) -CRYPT_KEK = make_flag("CRYPT_KEK", 0x00000400) -CRYPT_DATA_KEY = make_flag("CRYPT_DATA_KEY", 0x00000800) -CRYPT_VOLATILE = make_flag("CRYPT_VOLATILE", 0x00001000) -CRYPT_SGCKEY = make_flag("CRYPT_SGCKEY", 0x00002000) -CRYPT_ARCHIVABLE = make_flag("CRYPT_ARCHIVABLE", 0x00004000) -CRYPT_FORCE_KEY_PROTECTION_HIGH = make_flag("CRYPT_FORCE_KEY_PROTECTION_HIGH", 0x00008000) -CRYPT_ENCODE_DECODE_NONE = make_flag("CRYPT_ENCODE_DECODE_NONE", 0) -X509_CERT = make_flag("X509_CERT", ( 1 )) -X509_CERT_TO_BE_SIGNED = make_flag("X509_CERT_TO_BE_SIGNED", ( 2 )) -X509_CERT_CRL_TO_BE_SIGNED = make_flag("X509_CERT_CRL_TO_BE_SIGNED", ( 3 )) -X509_CERT_REQUEST_TO_BE_SIGNED = make_flag("X509_CERT_REQUEST_TO_BE_SIGNED", ( 4 )) -X509_EXTENSIONS = make_flag("X509_EXTENSIONS", ( 5 )) -X509_NAME_VALUE = make_flag("X509_NAME_VALUE", ( 6 )) -X509_NAME = make_flag("X509_NAME", ( 7 )) -X509_PUBLIC_KEY_INFO = make_flag("X509_PUBLIC_KEY_INFO", ( 8 )) -X509_AUTHORITY_KEY_ID = make_flag("X509_AUTHORITY_KEY_ID", ( 9 )) -X509_KEY_ATTRIBUTES = make_flag("X509_KEY_ATTRIBUTES", ( 10 )) -X509_KEY_USAGE_RESTRICTION = make_flag("X509_KEY_USAGE_RESTRICTION", ( 11 )) -X509_ALTERNATE_NAME = make_flag("X509_ALTERNATE_NAME", ( 12 )) -X509_BASIC_CONSTRAINTS = make_flag("X509_BASIC_CONSTRAINTS", ( 13 )) -X509_KEY_USAGE = make_flag("X509_KEY_USAGE", ( 14 )) -X509_BASIC_CONSTRAINTS2 = make_flag("X509_BASIC_CONSTRAINTS2", ( 15 )) -X509_CERT_POLICIES = make_flag("X509_CERT_POLICIES", ( 16 )) -PKCS_UTC_TIME = make_flag("PKCS_UTC_TIME", ( 17 )) -PKCS_TIME_REQUEST = make_flag("PKCS_TIME_REQUEST", ( 18 )) -RSA_CSP_PUBLICKEYBLOB = make_flag("RSA_CSP_PUBLICKEYBLOB", ( 19 )) -X509_UNICODE_NAME = make_flag("X509_UNICODE_NAME", ( 20 )) -X509_KEYGEN_REQUEST_TO_BE_SIGNED = make_flag("X509_KEYGEN_REQUEST_TO_BE_SIGNED", ( 21 )) -PKCS_ATTRIBUTE = make_flag("PKCS_ATTRIBUTE", ( 22 )) -PKCS_CONTENT_INFO_SEQUENCE_OF_ANY = make_flag("PKCS_CONTENT_INFO_SEQUENCE_OF_ANY", ( 23 )) -X509_UNICODE_NAME_VALUE = make_flag("X509_UNICODE_NAME_VALUE", ( 24 )) -X509_ANY_STRING = make_flag("X509_ANY_STRING", X509_NAME_VALUE) -X509_UNICODE_ANY_STRING = make_flag("X509_UNICODE_ANY_STRING", X509_UNICODE_NAME_VALUE) -X509_OCTET_STRING = make_flag("X509_OCTET_STRING", ( 25 )) -X509_BITS = make_flag("X509_BITS", ( 26 )) -X509_INTEGER = make_flag("X509_INTEGER", ( 27 )) -X509_MULTI_BYTE_INTEGER = make_flag("X509_MULTI_BYTE_INTEGER", ( 28 )) -X509_ENUMERATED = make_flag("X509_ENUMERATED", ( 29 )) -X509_CHOICE_OF_TIME = make_flag("X509_CHOICE_OF_TIME", ( 30 )) -CERT_SIMPLE_NAME_STR = make_flag("CERT_SIMPLE_NAME_STR", 1) -CERT_OID_NAME_STR = make_flag("CERT_OID_NAME_STR", 2) -CERT_X500_NAME_STR = make_flag("CERT_X500_NAME_STR", 3) -CERT_XML_NAME_STR = make_flag("CERT_XML_NAME_STR", 4) -AT_KEYEXCHANGE = make_flag("AT_KEYEXCHANGE", 1) -AT_SIGNATURE = make_flag("AT_SIGNATURE", 2) -MS_DEF_PROV_A = make_flag("MS_DEF_PROV_A", "Microsoft Base Cryptographic Provider v1.0") -MS_DEF_PROV_W = make_flag("MS_DEF_PROV_W", u"Microsoft Base Cryptographic Provider v1.0") -MS_DEF_PROV = make_flag("MS_DEF_PROV", MS_DEF_PROV_A) -MS_ENHANCED_PROV_A = make_flag("MS_ENHANCED_PROV_A", "Microsoft Enhanced Cryptographic Provider v1.0") -MS_ENHANCED_PROV_W = make_flag("MS_ENHANCED_PROV_W", u"Microsoft Enhanced Cryptographic Provider v1.0") -MS_ENHANCED_PROV = make_flag("MS_ENHANCED_PROV", MS_ENHANCED_PROV_A) -MS_STRONG_PROV_A = make_flag("MS_STRONG_PROV_A", "Microsoft Strong Cryptographic Provider") -MS_STRONG_PROV_W = make_flag("MS_STRONG_PROV_W", u"Microsoft Strong Cryptographic Provider") -MS_STRONG_PROV = make_flag("MS_STRONG_PROV", MS_STRONG_PROV_A) -MS_DEF_RSA_SIG_PROV_A = make_flag("MS_DEF_RSA_SIG_PROV_A", "Microsoft RSA Signature Cryptographic Provider") -MS_DEF_RSA_SIG_PROV_W = make_flag("MS_DEF_RSA_SIG_PROV_W", u"Microsoft RSA Signature Cryptographic Provider") -MS_DEF_RSA_SIG_PROV = make_flag("MS_DEF_RSA_SIG_PROV", MS_DEF_RSA_SIG_PROV_W) -CERT_STORE_ADD_NEW = make_flag("CERT_STORE_ADD_NEW", 1) -CERT_STORE_ADD_USE_EXISTING = make_flag("CERT_STORE_ADD_USE_EXISTING", 2) -CERT_STORE_ADD_REPLACE_EXISTING = make_flag("CERT_STORE_ADD_REPLACE_EXISTING", 3) -CERT_STORE_ADD_ALWAYS = make_flag("CERT_STORE_ADD_ALWAYS", 4) -CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES = make_flag("CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES", 5) -CERT_STORE_ADD_NEWER = make_flag("CERT_STORE_ADD_NEWER", 6) -CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES = make_flag("CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES", 7) -PROV_RSA_FULL = make_flag("PROV_RSA_FULL", 1) -PROV_RSA_SIG = make_flag("PROV_RSA_SIG", 2) -PROV_DSS = make_flag("PROV_DSS", 3) -PROV_FORTEZZA = make_flag("PROV_FORTEZZA", 4) -PROV_MS_EXCHANGE = make_flag("PROV_MS_EXCHANGE", 5) -PROV_SSL = make_flag("PROV_SSL", 6) -PROV_RSA_SCHANNEL = make_flag("PROV_RSA_SCHANNEL", 12) -PROV_DSS_DH = make_flag("PROV_DSS_DH", 13) -PROV_EC_ECDSA_SIG = make_flag("PROV_EC_ECDSA_SIG", 14) -PROV_EC_ECNRA_SIG = make_flag("PROV_EC_ECNRA_SIG", 15) -PROV_EC_ECDSA_FULL = make_flag("PROV_EC_ECDSA_FULL", 16) -PROV_EC_ECNRA_FULL = make_flag("PROV_EC_ECNRA_FULL", 17) -PROV_DH_SCHANNEL = make_flag("PROV_DH_SCHANNEL", 18) -PROV_SPYRUS_LYNKS = make_flag("PROV_SPYRUS_LYNKS", 20) -PROV_RNG = make_flag("PROV_RNG", 21) -PROV_INTEL_SEC = make_flag("PROV_INTEL_SEC", 22) -PROV_REPLACE_OWF = make_flag("PROV_REPLACE_OWF", 23) -PROV_RSA_AES = make_flag("PROV_RSA_AES", 24) -REPORT_NO_PRIVATE_KEY = make_flag("REPORT_NO_PRIVATE_KEY", 0x0001) -REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY = make_flag("REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY", 0x0002) -EXPORT_PRIVATE_KEYS = make_flag("EXPORT_PRIVATE_KEYS", 0x0004) -PKCS12_INCLUDE_EXTENDED_PROPERTIES = make_flag("PKCS12_INCLUDE_EXTENDED_PROPERTIES", 0x0010) -PKCS12_EXPORT_RESERVED_MASK = make_flag("PKCS12_EXPORT_RESERVED_MASK", 0xffff0000) -CERT_SYSTEM_STORE_UNPROTECTED_FLAG = make_flag("CERT_SYSTEM_STORE_UNPROTECTED_FLAG", 0x40000000) -CERT_SYSTEM_STORE_LOCATION_MASK = make_flag("CERT_SYSTEM_STORE_LOCATION_MASK", 0x00FF0000) -CERT_SYSTEM_STORE_LOCATION_SHIFT = make_flag("CERT_SYSTEM_STORE_LOCATION_SHIFT", 16) -CERT_SYSTEM_STORE_CURRENT_USER_ID = make_flag("CERT_SYSTEM_STORE_CURRENT_USER_ID", 1) -CERT_SYSTEM_STORE_LOCAL_MACHINE_ID = make_flag("CERT_SYSTEM_STORE_LOCAL_MACHINE_ID", 2) -CERT_SYSTEM_STORE_CURRENT_SERVICE_ID = make_flag("CERT_SYSTEM_STORE_CURRENT_SERVICE_ID", 4) -CERT_SYSTEM_STORE_SERVICES_ID = make_flag("CERT_SYSTEM_STORE_SERVICES_ID", 5) -CERT_SYSTEM_STORE_USERS_ID = make_flag("CERT_SYSTEM_STORE_USERS_ID", 6) -CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID = make_flag("CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID", 7) -CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID = make_flag("CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID", 8) -CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID = make_flag("CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID", 9) -CERT_SYSTEM_STORE_CURRENT_USER = make_flag("CERT_SYSTEM_STORE_CURRENT_USER", ( CERT_SYSTEM_STORE_CURRENT_USER_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT )) -CERT_SYSTEM_STORE_LOCAL_MACHINE = make_flag("CERT_SYSTEM_STORE_LOCAL_MACHINE", ( CERT_SYSTEM_STORE_LOCAL_MACHINE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT )) -CERT_SYSTEM_STORE_CURRENT_SERVICE = make_flag("CERT_SYSTEM_STORE_CURRENT_SERVICE", ( CERT_SYSTEM_STORE_CURRENT_SERVICE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT )) -CERT_SYSTEM_STORE_SERVICES = make_flag("CERT_SYSTEM_STORE_SERVICES", ( CERT_SYSTEM_STORE_SERVICES_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT )) -CERT_SYSTEM_STORE_USERS = make_flag("CERT_SYSTEM_STORE_USERS", ( CERT_SYSTEM_STORE_USERS_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT )) -CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY = make_flag("CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY", ( CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT )) -CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY = make_flag("CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY", ( CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT )) -CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE = make_flag("CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE", ( CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT )) -ERROR_SUCCESS = make_flag("ERROR_SUCCESS", 0) -ERROR_INVALID_FUNCTION = make_flag("ERROR_INVALID_FUNCTION", 1) -ERROR_FILE_NOT_FOUND = make_flag("ERROR_FILE_NOT_FOUND", 2) -ERROR_PATH_NOT_FOUND = make_flag("ERROR_PATH_NOT_FOUND", 3) -ERROR_TOO_MANY_OPEN_FILES = make_flag("ERROR_TOO_MANY_OPEN_FILES", 4) -ERROR_ACCESS_DENIED = make_flag("ERROR_ACCESS_DENIED", 5) -ERROR_INVALID_HANDLE = make_flag("ERROR_INVALID_HANDLE", 6) -ERROR_ARENA_TRASHED = make_flag("ERROR_ARENA_TRASHED", 7) -ERROR_NOT_ENOUGH_MEMORY = make_flag("ERROR_NOT_ENOUGH_MEMORY", 8) -ERROR_INVALID_BLOCK = make_flag("ERROR_INVALID_BLOCK", 9) -ERROR_BAD_ENVIRONMENT = make_flag("ERROR_BAD_ENVIRONMENT", 10) -ERROR_BAD_FORMAT = make_flag("ERROR_BAD_FORMAT", 11) -ERROR_INVALID_ACCESS = make_flag("ERROR_INVALID_ACCESS", 12) -ERROR_INVALID_DATA = make_flag("ERROR_INVALID_DATA", 13) -ERROR_OUTOFMEMORY = make_flag("ERROR_OUTOFMEMORY", 14) -ERROR_INVALID_DRIVE = make_flag("ERROR_INVALID_DRIVE", 15) -ERROR_CURRENT_DIRECTORY = make_flag("ERROR_CURRENT_DIRECTORY", 16) -ERROR_NOT_SAME_DEVICE = make_flag("ERROR_NOT_SAME_DEVICE", 17) -ERROR_NO_MORE_FILES = make_flag("ERROR_NO_MORE_FILES", 18) -ERROR_WRITE_PROTECT = make_flag("ERROR_WRITE_PROTECT", 19) -ERROR_BAD_UNIT = make_flag("ERROR_BAD_UNIT", 20) -ERROR_NOT_READY = make_flag("ERROR_NOT_READY", 21) -ERROR_BAD_COMMAND = make_flag("ERROR_BAD_COMMAND", 22) -ERROR_CRC = make_flag("ERROR_CRC", 23) -ERROR_BAD_LENGTH = make_flag("ERROR_BAD_LENGTH", 24) -ERROR_SEEK = make_flag("ERROR_SEEK", 25) -ERROR_NOT_DOS_DISK = make_flag("ERROR_NOT_DOS_DISK", 26) -ERROR_SECTOR_NOT_FOUND = make_flag("ERROR_SECTOR_NOT_FOUND", 27) -ERROR_OUT_OF_PAPER = make_flag("ERROR_OUT_OF_PAPER", 28) -ERROR_WRITE_FAULT = make_flag("ERROR_WRITE_FAULT", 29) -ERROR_READ_FAULT = make_flag("ERROR_READ_FAULT", 30) -ERROR_GEN_FAILURE = make_flag("ERROR_GEN_FAILURE", 31) -ERROR_SHARING_VIOLATION = make_flag("ERROR_SHARING_VIOLATION", 32) -ERROR_LOCK_VIOLATION = make_flag("ERROR_LOCK_VIOLATION", 33) -ERROR_WRONG_DISK = make_flag("ERROR_WRONG_DISK", 34) -ERROR_SHARING_BUFFER_EXCEEDED = make_flag("ERROR_SHARING_BUFFER_EXCEEDED", 36) -ERROR_HANDLE_EOF = make_flag("ERROR_HANDLE_EOF", 38) -ERROR_HANDLE_DISK_FULL = make_flag("ERROR_HANDLE_DISK_FULL", 39) -ERROR_NOT_SUPPORTED = make_flag("ERROR_NOT_SUPPORTED", 50) -ERROR_REM_NOT_LIST = make_flag("ERROR_REM_NOT_LIST", 51) -ERROR_DUP_NAME = make_flag("ERROR_DUP_NAME", 52) -ERROR_BAD_NETPATH = make_flag("ERROR_BAD_NETPATH", 53) -ERROR_NETWORK_BUSY = make_flag("ERROR_NETWORK_BUSY", 54) -ERROR_DEV_NOT_EXIST = make_flag("ERROR_DEV_NOT_EXIST", 55) -ERROR_TOO_MANY_CMDS = make_flag("ERROR_TOO_MANY_CMDS", 56) -ERROR_ADAP_HDW_ERR = make_flag("ERROR_ADAP_HDW_ERR", 57) -ERROR_BAD_NET_RESP = make_flag("ERROR_BAD_NET_RESP", 58) -ERROR_UNEXP_NET_ERR = make_flag("ERROR_UNEXP_NET_ERR", 59) -ERROR_BAD_REM_ADAP = make_flag("ERROR_BAD_REM_ADAP", 60) -ERROR_PRINTQ_FULL = make_flag("ERROR_PRINTQ_FULL", 61) -ERROR_NO_SPOOL_SPACE = make_flag("ERROR_NO_SPOOL_SPACE", 62) -ERROR_PRINT_CANCELLED = make_flag("ERROR_PRINT_CANCELLED", 63) -ERROR_NETNAME_DELETED = make_flag("ERROR_NETNAME_DELETED", 64) -ERROR_NETWORK_ACCESS_DENIED = make_flag("ERROR_NETWORK_ACCESS_DENIED", 65) -ERROR_BAD_DEV_TYPE = make_flag("ERROR_BAD_DEV_TYPE", 66) -ERROR_BAD_NET_NAME = make_flag("ERROR_BAD_NET_NAME", 67) -ERROR_TOO_MANY_NAMES = make_flag("ERROR_TOO_MANY_NAMES", 68) -ERROR_TOO_MANY_SESS = make_flag("ERROR_TOO_MANY_SESS", 69) -ERROR_SHARING_PAUSED = make_flag("ERROR_SHARING_PAUSED", 70) -ERROR_REQ_NOT_ACCEP = make_flag("ERROR_REQ_NOT_ACCEP", 71) -ERROR_REDIR_PAUSED = make_flag("ERROR_REDIR_PAUSED", 72) -ERROR_FILE_EXISTS = make_flag("ERROR_FILE_EXISTS", 80) -ERROR_CANNOT_MAKE = make_flag("ERROR_CANNOT_MAKE", 82) -ERROR_FAIL_I24 = make_flag("ERROR_FAIL_I24", 83) -ERROR_OUT_OF_STRUCTURES = make_flag("ERROR_OUT_OF_STRUCTURES", 84) -ERROR_ALREADY_ASSIGNED = make_flag("ERROR_ALREADY_ASSIGNED", 85) -ERROR_INVALID_PASSWORD = make_flag("ERROR_INVALID_PASSWORD", 86) -ERROR_INVALID_PARAMETER = make_flag("ERROR_INVALID_PARAMETER", 87) -ERROR_NET_WRITE_FAULT = make_flag("ERROR_NET_WRITE_FAULT", 88) -ERROR_NO_PROC_SLOTS = make_flag("ERROR_NO_PROC_SLOTS", 89) -ERROR_TOO_MANY_SEMAPHORES = make_flag("ERROR_TOO_MANY_SEMAPHORES", 100) -ERROR_EXCL_SEM_ALREADY_OWNED = make_flag("ERROR_EXCL_SEM_ALREADY_OWNED", 101) -ERROR_SEM_IS_SET = make_flag("ERROR_SEM_IS_SET", 102) -ERROR_TOO_MANY_SEM_REQUESTS = make_flag("ERROR_TOO_MANY_SEM_REQUESTS", 103) -ERROR_INVALID_AT_INTERRUPT_TIME = make_flag("ERROR_INVALID_AT_INTERRUPT_TIME", 104) -ERROR_SEM_OWNER_DIED = make_flag("ERROR_SEM_OWNER_DIED", 105) -ERROR_SEM_USER_LIMIT = make_flag("ERROR_SEM_USER_LIMIT", 106) -ERROR_DISK_CHANGE = make_flag("ERROR_DISK_CHANGE", 107) -ERROR_DRIVE_LOCKED = make_flag("ERROR_DRIVE_LOCKED", 108) -ERROR_BROKEN_PIPE = make_flag("ERROR_BROKEN_PIPE", 109) -ERROR_OPEN_FAILED = make_flag("ERROR_OPEN_FAILED", 110) -ERROR_BUFFER_OVERFLOW = make_flag("ERROR_BUFFER_OVERFLOW", 111) -ERROR_DISK_FULL = make_flag("ERROR_DISK_FULL", 112) -ERROR_NO_MORE_SEARCH_HANDLES = make_flag("ERROR_NO_MORE_SEARCH_HANDLES", 113) -ERROR_INVALID_TARGET_HANDLE = make_flag("ERROR_INVALID_TARGET_HANDLE", 114) -ERROR_INVALID_CATEGORY = make_flag("ERROR_INVALID_CATEGORY", 117) -ERROR_INVALID_VERIFY_SWITCH = make_flag("ERROR_INVALID_VERIFY_SWITCH", 118) -ERROR_BAD_DRIVER_LEVEL = make_flag("ERROR_BAD_DRIVER_LEVEL", 119) -ERROR_CALL_NOT_IMPLEMENTED = make_flag("ERROR_CALL_NOT_IMPLEMENTED", 120) -ERROR_SEM_TIMEOUT = make_flag("ERROR_SEM_TIMEOUT", 121) -ERROR_INSUFFICIENT_BUFFER = make_flag("ERROR_INSUFFICIENT_BUFFER", 122) -ERROR_INVALID_NAME = make_flag("ERROR_INVALID_NAME", 123) -ERROR_INVALID_LEVEL = make_flag("ERROR_INVALID_LEVEL", 124) -ERROR_NO_VOLUME_LABEL = make_flag("ERROR_NO_VOLUME_LABEL", 125) -ERROR_MOD_NOT_FOUND = make_flag("ERROR_MOD_NOT_FOUND", 126) -ERROR_PROC_NOT_FOUND = make_flag("ERROR_PROC_NOT_FOUND", 127) -ERROR_WAIT_NO_CHILDREN = make_flag("ERROR_WAIT_NO_CHILDREN", 128) -ERROR_CHILD_NOT_COMPLETE = make_flag("ERROR_CHILD_NOT_COMPLETE", 129) -ERROR_DIRECT_ACCESS_HANDLE = make_flag("ERROR_DIRECT_ACCESS_HANDLE", 130) -ERROR_NEGATIVE_SEEK = make_flag("ERROR_NEGATIVE_SEEK", 131) -ERROR_SEEK_ON_DEVICE = make_flag("ERROR_SEEK_ON_DEVICE", 132) -ERROR_IS_JOIN_TARGET = make_flag("ERROR_IS_JOIN_TARGET", 133) -ERROR_IS_JOINED = make_flag("ERROR_IS_JOINED", 134) -ERROR_IS_SUBSTED = make_flag("ERROR_IS_SUBSTED", 135) -ERROR_NOT_JOINED = make_flag("ERROR_NOT_JOINED", 136) -ERROR_NOT_SUBSTED = make_flag("ERROR_NOT_SUBSTED", 137) -ERROR_JOIN_TO_JOIN = make_flag("ERROR_JOIN_TO_JOIN", 138) -ERROR_SUBST_TO_SUBST = make_flag("ERROR_SUBST_TO_SUBST", 139) -ERROR_JOIN_TO_SUBST = make_flag("ERROR_JOIN_TO_SUBST", 140) -ERROR_SUBST_TO_JOIN = make_flag("ERROR_SUBST_TO_JOIN", 141) -ERROR_BUSY_DRIVE = make_flag("ERROR_BUSY_DRIVE", 142) -ERROR_SAME_DRIVE = make_flag("ERROR_SAME_DRIVE", 143) -ERROR_DIR_NOT_ROOT = make_flag("ERROR_DIR_NOT_ROOT", 144) -ERROR_DIR_NOT_EMPTY = make_flag("ERROR_DIR_NOT_EMPTY", 145) -ERROR_IS_SUBST_PATH = make_flag("ERROR_IS_SUBST_PATH", 146) -ERROR_IS_JOIN_PATH = make_flag("ERROR_IS_JOIN_PATH", 147) -ERROR_PATH_BUSY = make_flag("ERROR_PATH_BUSY", 148) -ERROR_IS_SUBST_TARGET = make_flag("ERROR_IS_SUBST_TARGET", 149) -ERROR_SYSTEM_TRACE = make_flag("ERROR_SYSTEM_TRACE", 150) -ERROR_INVALID_EVENT_COUNT = make_flag("ERROR_INVALID_EVENT_COUNT", 151) -ERROR_TOO_MANY_MUXWAITERS = make_flag("ERROR_TOO_MANY_MUXWAITERS", 152) -ERROR_INVALID_LIST_FORMAT = make_flag("ERROR_INVALID_LIST_FORMAT", 153) -ERROR_LABEL_TOO_LONG = make_flag("ERROR_LABEL_TOO_LONG", 154) -ERROR_TOO_MANY_TCBS = make_flag("ERROR_TOO_MANY_TCBS", 155) -ERROR_SIGNAL_REFUSED = make_flag("ERROR_SIGNAL_REFUSED", 156) -ERROR_DISCARDED = make_flag("ERROR_DISCARDED", 157) -ERROR_NOT_LOCKED = make_flag("ERROR_NOT_LOCKED", 158) -ERROR_BAD_THREADID_ADDR = make_flag("ERROR_BAD_THREADID_ADDR", 159) -ERROR_BAD_ARGUMENTS = make_flag("ERROR_BAD_ARGUMENTS", 160) -ERROR_BAD_PATHNAME = make_flag("ERROR_BAD_PATHNAME", 161) -ERROR_SIGNAL_PENDING = make_flag("ERROR_SIGNAL_PENDING", 162) -ERROR_MAX_THRDS_REACHED = make_flag("ERROR_MAX_THRDS_REACHED", 164) -ERROR_LOCK_FAILED = make_flag("ERROR_LOCK_FAILED", 167) -ERROR_BUSY = make_flag("ERROR_BUSY", 170) -ERROR_CANCEL_VIOLATION = make_flag("ERROR_CANCEL_VIOLATION", 173) -ERROR_ATOMIC_LOCKS_NOT_SUPPORTED = make_flag("ERROR_ATOMIC_LOCKS_NOT_SUPPORTED", 174) -ERROR_INVALID_SEGMENT_NUMBER = make_flag("ERROR_INVALID_SEGMENT_NUMBER", 180) -ERROR_INVALID_ORDINAL = make_flag("ERROR_INVALID_ORDINAL", 182) -ERROR_ALREADY_EXISTS = make_flag("ERROR_ALREADY_EXISTS", 183) -ERROR_INVALID_FLAG_NUMBER = make_flag("ERROR_INVALID_FLAG_NUMBER", 186) -ERROR_SEM_NOT_FOUND = make_flag("ERROR_SEM_NOT_FOUND", 187) -ERROR_INVALID_STARTING_CODESEG = make_flag("ERROR_INVALID_STARTING_CODESEG", 188) -ERROR_INVALID_STACKSEG = make_flag("ERROR_INVALID_STACKSEG", 189) -ERROR_INVALID_MODULETYPE = make_flag("ERROR_INVALID_MODULETYPE", 190) -ERROR_INVALID_EXE_SIGNATURE = make_flag("ERROR_INVALID_EXE_SIGNATURE", 191) -ERROR_EXE_MARKED_INVALID = make_flag("ERROR_EXE_MARKED_INVALID", 192) -ERROR_BAD_EXE_FORMAT = make_flag("ERROR_BAD_EXE_FORMAT", 193) -ERROR_ITERATED_DATA_EXCEEDS_64k = make_flag("ERROR_ITERATED_DATA_EXCEEDS_64k", 194) -ERROR_INVALID_MINALLOCSIZE = make_flag("ERROR_INVALID_MINALLOCSIZE", 195) -ERROR_DYNLINK_FROM_INVALID_RING = make_flag("ERROR_DYNLINK_FROM_INVALID_RING", 196) -ERROR_IOPL_NOT_ENABLED = make_flag("ERROR_IOPL_NOT_ENABLED", 197) -ERROR_INVALID_SEGDPL = make_flag("ERROR_INVALID_SEGDPL", 198) -ERROR_AUTODATASEG_EXCEEDS_64k = make_flag("ERROR_AUTODATASEG_EXCEEDS_64k", 199) -ERROR_RING2SEG_MUST_BE_MOVABLE = make_flag("ERROR_RING2SEG_MUST_BE_MOVABLE", 200) -ERROR_RELOC_CHAIN_XEEDS_SEGLIM = make_flag("ERROR_RELOC_CHAIN_XEEDS_SEGLIM", 201) -ERROR_INFLOOP_IN_RELOC_CHAIN = make_flag("ERROR_INFLOOP_IN_RELOC_CHAIN", 202) -ERROR_ENVVAR_NOT_FOUND = make_flag("ERROR_ENVVAR_NOT_FOUND", 203) -ERROR_NO_SIGNAL_SENT = make_flag("ERROR_NO_SIGNAL_SENT", 205) -ERROR_FILENAME_EXCED_RANGE = make_flag("ERROR_FILENAME_EXCED_RANGE", 206) -ERROR_RING2_STACK_IN_USE = make_flag("ERROR_RING2_STACK_IN_USE", 207) -ERROR_META_EXPANSION_TOO_LONG = make_flag("ERROR_META_EXPANSION_TOO_LONG", 208) -ERROR_INVALID_SIGNAL_NUMBER = make_flag("ERROR_INVALID_SIGNAL_NUMBER", 209) -ERROR_THREAD_1_INACTIVE = make_flag("ERROR_THREAD_1_INACTIVE", 210) -ERROR_LOCKED = make_flag("ERROR_LOCKED", 212) -ERROR_TOO_MANY_MODULES = make_flag("ERROR_TOO_MANY_MODULES", 214) -ERROR_NESTING_NOT_ALLOWED = make_flag("ERROR_NESTING_NOT_ALLOWED", 215) -ERROR_EXE_MACHINE_TYPE_MISMATCH = make_flag("ERROR_EXE_MACHINE_TYPE_MISMATCH", 216) -ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY = make_flag("ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY", 217) -ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY = make_flag("ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY", 218) -ERROR_FILE_CHECKED_OUT = make_flag("ERROR_FILE_CHECKED_OUT", 220) -ERROR_CHECKOUT_REQUIRED = make_flag("ERROR_CHECKOUT_REQUIRED", 221) -ERROR_BAD_FILE_TYPE = make_flag("ERROR_BAD_FILE_TYPE", 222) -ERROR_FILE_TOO_LARGE = make_flag("ERROR_FILE_TOO_LARGE", 223) -ERROR_FORMS_AUTH_REQUIRED = make_flag("ERROR_FORMS_AUTH_REQUIRED", 224) -ERROR_VIRUS_INFECTED = make_flag("ERROR_VIRUS_INFECTED", 225) -ERROR_VIRUS_DELETED = make_flag("ERROR_VIRUS_DELETED", 226) -ERROR_PIPE_LOCAL = make_flag("ERROR_PIPE_LOCAL", 229) -ERROR_BAD_PIPE = make_flag("ERROR_BAD_PIPE", 230) -ERROR_PIPE_BUSY = make_flag("ERROR_PIPE_BUSY", 231) -ERROR_NO_DATA = make_flag("ERROR_NO_DATA", 232) -ERROR_PIPE_NOT_CONNECTED = make_flag("ERROR_PIPE_NOT_CONNECTED", 233) -ERROR_MORE_DATA = make_flag("ERROR_MORE_DATA", 234) -ERROR_VC_DISCONNECTED = make_flag("ERROR_VC_DISCONNECTED", 240) -ERROR_INVALID_EA_NAME = make_flag("ERROR_INVALID_EA_NAME", 254) -ERROR_EA_LIST_INCONSISTENT = make_flag("ERROR_EA_LIST_INCONSISTENT", 255) -ERROR_NO_MORE_ITEMS = make_flag("ERROR_NO_MORE_ITEMS", 259) -ERROR_CANNOT_COPY = make_flag("ERROR_CANNOT_COPY", 266) -ERROR_DIRECTORY = make_flag("ERROR_DIRECTORY", 267) -ERROR_EAS_DIDNT_FIT = make_flag("ERROR_EAS_DIDNT_FIT", 275) -ERROR_EA_FILE_CORRUPT = make_flag("ERROR_EA_FILE_CORRUPT", 276) -ERROR_EA_TABLE_FULL = make_flag("ERROR_EA_TABLE_FULL", 277) -ERROR_INVALID_EA_HANDLE = make_flag("ERROR_INVALID_EA_HANDLE", 278) -ERROR_EAS_NOT_SUPPORTED = make_flag("ERROR_EAS_NOT_SUPPORTED", 282) -ERROR_NOT_OWNER = make_flag("ERROR_NOT_OWNER", 288) -ERROR_TOO_MANY_POSTS = make_flag("ERROR_TOO_MANY_POSTS", 298) -ERROR_PARTIAL_COPY = make_flag("ERROR_PARTIAL_COPY", 299) -ERROR_OPLOCK_NOT_GRANTED = make_flag("ERROR_OPLOCK_NOT_GRANTED", 300) -ERROR_INVALID_OPLOCK_PROTOCOL = make_flag("ERROR_INVALID_OPLOCK_PROTOCOL", 301) -ERROR_DISK_TOO_FRAGMENTED = make_flag("ERROR_DISK_TOO_FRAGMENTED", 302) -ERROR_DELETE_PENDING = make_flag("ERROR_DELETE_PENDING", 303) -ERROR_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING = make_flag("ERROR_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING", 304) -ERROR_SHORT_NAMES_NOT_ENABLED_ON_VOLUME = make_flag("ERROR_SHORT_NAMES_NOT_ENABLED_ON_VOLUME", 305) -ERROR_SECURITY_STREAM_IS_INCONSISTENT = make_flag("ERROR_SECURITY_STREAM_IS_INCONSISTENT", 306) -ERROR_INVALID_LOCK_RANGE = make_flag("ERROR_INVALID_LOCK_RANGE", 307) -ERROR_IMAGE_SUBSYSTEM_NOT_PRESENT = make_flag("ERROR_IMAGE_SUBSYSTEM_NOT_PRESENT", 308) -ERROR_NOTIFICATION_GUID_ALREADY_DEFINED = make_flag("ERROR_NOTIFICATION_GUID_ALREADY_DEFINED", 309) -ERROR_MR_MID_NOT_FOUND = make_flag("ERROR_MR_MID_NOT_FOUND", 317) -ERROR_SCOPE_NOT_FOUND = make_flag("ERROR_SCOPE_NOT_FOUND", 318) -ERROR_FAIL_NOACTION_REBOOT = make_flag("ERROR_FAIL_NOACTION_REBOOT", 350) -ERROR_FAIL_SHUTDOWN = make_flag("ERROR_FAIL_SHUTDOWN", 351) -ERROR_FAIL_RESTART = make_flag("ERROR_FAIL_RESTART", 352) -ERROR_MAX_SESSIONS_REACHED = make_flag("ERROR_MAX_SESSIONS_REACHED", 353) -ERROR_THREAD_MODE_ALREADY_BACKGROUND = make_flag("ERROR_THREAD_MODE_ALREADY_BACKGROUND", 400) -ERROR_THREAD_MODE_NOT_BACKGROUND = make_flag("ERROR_THREAD_MODE_NOT_BACKGROUND", 401) -ERROR_PROCESS_MODE_ALREADY_BACKGROUND = make_flag("ERROR_PROCESS_MODE_ALREADY_BACKGROUND", 402) -ERROR_PROCESS_MODE_NOT_BACKGROUND = make_flag("ERROR_PROCESS_MODE_NOT_BACKGROUND", 403) -ERROR_INVALID_ADDRESS = make_flag("ERROR_INVALID_ADDRESS", 487) -ERROR_USER_PROFILE_LOAD = make_flag("ERROR_USER_PROFILE_LOAD", 500) -ERROR_ARITHMETIC_OVERFLOW = make_flag("ERROR_ARITHMETIC_OVERFLOW", 534) -ERROR_PIPE_CONNECTED = make_flag("ERROR_PIPE_CONNECTED", 535) -ERROR_PIPE_LISTENING = make_flag("ERROR_PIPE_LISTENING", 536) -ERROR_VERIFIER_STOP = make_flag("ERROR_VERIFIER_STOP", 537) -ERROR_ABIOS_ERROR = make_flag("ERROR_ABIOS_ERROR", 538) -ERROR_WX86_WARNING = make_flag("ERROR_WX86_WARNING", 539) -ERROR_WX86_ERROR = make_flag("ERROR_WX86_ERROR", 540) -ERROR_TIMER_NOT_CANCELED = make_flag("ERROR_TIMER_NOT_CANCELED", 541) -ERROR_UNWIND = make_flag("ERROR_UNWIND", 542) -ERROR_BAD_STACK = make_flag("ERROR_BAD_STACK", 543) -ERROR_INVALID_UNWIND_TARGET = make_flag("ERROR_INVALID_UNWIND_TARGET", 544) -ERROR_INVALID_PORT_ATTRIBUTES = make_flag("ERROR_INVALID_PORT_ATTRIBUTES", 545) -ERROR_PORT_MESSAGE_TOO_LONG = make_flag("ERROR_PORT_MESSAGE_TOO_LONG", 546) -ERROR_INVALID_QUOTA_LOWER = make_flag("ERROR_INVALID_QUOTA_LOWER", 547) -ERROR_DEVICE_ALREADY_ATTACHED = make_flag("ERROR_DEVICE_ALREADY_ATTACHED", 548) -ERROR_INSTRUCTION_MISALIGNMENT = make_flag("ERROR_INSTRUCTION_MISALIGNMENT", 549) -ERROR_PROFILING_NOT_STARTED = make_flag("ERROR_PROFILING_NOT_STARTED", 550) -ERROR_PROFILING_NOT_STOPPED = make_flag("ERROR_PROFILING_NOT_STOPPED", 551) -ERROR_COULD_NOT_INTERPRET = make_flag("ERROR_COULD_NOT_INTERPRET", 552) -ERROR_PROFILING_AT_LIMIT = make_flag("ERROR_PROFILING_AT_LIMIT", 553) -ERROR_CANT_WAIT = make_flag("ERROR_CANT_WAIT", 554) -ERROR_CANT_TERMINATE_SELF = make_flag("ERROR_CANT_TERMINATE_SELF", 555) -ERROR_UNEXPECTED_MM_CREATE_ERR = make_flag("ERROR_UNEXPECTED_MM_CREATE_ERR", 556) -ERROR_UNEXPECTED_MM_MAP_ERROR = make_flag("ERROR_UNEXPECTED_MM_MAP_ERROR", 557) -ERROR_UNEXPECTED_MM_EXTEND_ERR = make_flag("ERROR_UNEXPECTED_MM_EXTEND_ERR", 558) -ERROR_BAD_FUNCTION_TABLE = make_flag("ERROR_BAD_FUNCTION_TABLE", 559) -ERROR_NO_GUID_TRANSLATION = make_flag("ERROR_NO_GUID_TRANSLATION", 560) -ERROR_INVALID_LDT_SIZE = make_flag("ERROR_INVALID_LDT_SIZE", 561) -ERROR_INVALID_LDT_OFFSET = make_flag("ERROR_INVALID_LDT_OFFSET", 563) -ERROR_INVALID_LDT_DESCRIPTOR = make_flag("ERROR_INVALID_LDT_DESCRIPTOR", 564) -ERROR_TOO_MANY_THREADS = make_flag("ERROR_TOO_MANY_THREADS", 565) -ERROR_THREAD_NOT_IN_PROCESS = make_flag("ERROR_THREAD_NOT_IN_PROCESS", 566) -ERROR_PAGEFILE_QUOTA_EXCEEDED = make_flag("ERROR_PAGEFILE_QUOTA_EXCEEDED", 567) -ERROR_LOGON_SERVER_CONFLICT = make_flag("ERROR_LOGON_SERVER_CONFLICT", 568) -ERROR_SYNCHRONIZATION_REQUIRED = make_flag("ERROR_SYNCHRONIZATION_REQUIRED", 569) -ERROR_NET_OPEN_FAILED = make_flag("ERROR_NET_OPEN_FAILED", 570) -ERROR_IO_PRIVILEGE_FAILED = make_flag("ERROR_IO_PRIVILEGE_FAILED", 571) -ERROR_CONTROL_C_EXIT = make_flag("ERROR_CONTROL_C_EXIT", 572) -ERROR_MISSING_SYSTEMFILE = make_flag("ERROR_MISSING_SYSTEMFILE", 573) -ERROR_UNHANDLED_EXCEPTION = make_flag("ERROR_UNHANDLED_EXCEPTION", 574) -ERROR_APP_INIT_FAILURE = make_flag("ERROR_APP_INIT_FAILURE", 575) -ERROR_PAGEFILE_CREATE_FAILED = make_flag("ERROR_PAGEFILE_CREATE_FAILED", 576) -ERROR_INVALID_IMAGE_HASH = make_flag("ERROR_INVALID_IMAGE_HASH", 577) -ERROR_NO_PAGEFILE = make_flag("ERROR_NO_PAGEFILE", 578) -ERROR_ILLEGAL_FLOAT_CONTEXT = make_flag("ERROR_ILLEGAL_FLOAT_CONTEXT", 579) -ERROR_NO_EVENT_PAIR = make_flag("ERROR_NO_EVENT_PAIR", 580) -ERROR_DOMAIN_CTRLR_CONFIG_ERROR = make_flag("ERROR_DOMAIN_CTRLR_CONFIG_ERROR", 581) -ERROR_ILLEGAL_CHARACTER = make_flag("ERROR_ILLEGAL_CHARACTER", 582) -ERROR_UNDEFINED_CHARACTER = make_flag("ERROR_UNDEFINED_CHARACTER", 583) -ERROR_FLOPPY_VOLUME = make_flag("ERROR_FLOPPY_VOLUME", 584) -ERROR_BIOS_FAILED_TO_CONNECT_INTERRUPT = make_flag("ERROR_BIOS_FAILED_TO_CONNECT_INTERRUPT", 585) -ERROR_BACKUP_CONTROLLER = make_flag("ERROR_BACKUP_CONTROLLER", 586) -ERROR_MUTANT_LIMIT_EXCEEDED = make_flag("ERROR_MUTANT_LIMIT_EXCEEDED", 587) -ERROR_FS_DRIVER_REQUIRED = make_flag("ERROR_FS_DRIVER_REQUIRED", 588) -ERROR_CANNOT_LOAD_REGISTRY_FILE = make_flag("ERROR_CANNOT_LOAD_REGISTRY_FILE", 589) -ERROR_DEBUG_ATTACH_FAILED = make_flag("ERROR_DEBUG_ATTACH_FAILED", 590) -ERROR_SYSTEM_PROCESS_TERMINATED = make_flag("ERROR_SYSTEM_PROCESS_TERMINATED", 591) -ERROR_DATA_NOT_ACCEPTED = make_flag("ERROR_DATA_NOT_ACCEPTED", 592) -ERROR_VDM_HARD_ERROR = make_flag("ERROR_VDM_HARD_ERROR", 593) -ERROR_DRIVER_CANCEL_TIMEOUT = make_flag("ERROR_DRIVER_CANCEL_TIMEOUT", 594) -ERROR_REPLY_MESSAGE_MISMATCH = make_flag("ERROR_REPLY_MESSAGE_MISMATCH", 595) -ERROR_LOST_WRITEBEHIND_DATA = make_flag("ERROR_LOST_WRITEBEHIND_DATA", 596) -ERROR_CLIENT_SERVER_PARAMETERS_INVALID = make_flag("ERROR_CLIENT_SERVER_PARAMETERS_INVALID", 597) -ERROR_NOT_TINY_STREAM = make_flag("ERROR_NOT_TINY_STREAM", 598) -ERROR_STACK_OVERFLOW_READ = make_flag("ERROR_STACK_OVERFLOW_READ", 599) -ERROR_CONVERT_TO_LARGE = make_flag("ERROR_CONVERT_TO_LARGE", 600) -ERROR_FOUND_OUT_OF_SCOPE = make_flag("ERROR_FOUND_OUT_OF_SCOPE", 601) -ERROR_ALLOCATE_BUCKET = make_flag("ERROR_ALLOCATE_BUCKET", 602) -ERROR_MARSHALL_OVERFLOW = make_flag("ERROR_MARSHALL_OVERFLOW", 603) -ERROR_INVALID_VARIANT = make_flag("ERROR_INVALID_VARIANT", 604) -ERROR_BAD_COMPRESSION_BUFFER = make_flag("ERROR_BAD_COMPRESSION_BUFFER", 605) -ERROR_AUDIT_FAILED = make_flag("ERROR_AUDIT_FAILED", 606) -ERROR_TIMER_RESOLUTION_NOT_SET = make_flag("ERROR_TIMER_RESOLUTION_NOT_SET", 607) -ERROR_INSUFFICIENT_LOGON_INFO = make_flag("ERROR_INSUFFICIENT_LOGON_INFO", 608) -ERROR_BAD_DLL_ENTRYPOINT = make_flag("ERROR_BAD_DLL_ENTRYPOINT", 609) -ERROR_BAD_SERVICE_ENTRYPOINT = make_flag("ERROR_BAD_SERVICE_ENTRYPOINT", 610) -ERROR_IP_ADDRESS_CONFLICT1 = make_flag("ERROR_IP_ADDRESS_CONFLICT1", 611) -ERROR_IP_ADDRESS_CONFLICT2 = make_flag("ERROR_IP_ADDRESS_CONFLICT2", 612) -ERROR_REGISTRY_QUOTA_LIMIT = make_flag("ERROR_REGISTRY_QUOTA_LIMIT", 613) -ERROR_NO_CALLBACK_ACTIVE = make_flag("ERROR_NO_CALLBACK_ACTIVE", 614) -ERROR_PWD_TOO_SHORT = make_flag("ERROR_PWD_TOO_SHORT", 615) -ERROR_PWD_TOO_RECENT = make_flag("ERROR_PWD_TOO_RECENT", 616) -ERROR_PWD_HISTORY_CONFLICT = make_flag("ERROR_PWD_HISTORY_CONFLICT", 617) -ERROR_UNSUPPORTED_COMPRESSION = make_flag("ERROR_UNSUPPORTED_COMPRESSION", 618) -ERROR_INVALID_HW_PROFILE = make_flag("ERROR_INVALID_HW_PROFILE", 619) -ERROR_INVALID_PLUGPLAY_DEVICE_PATH = make_flag("ERROR_INVALID_PLUGPLAY_DEVICE_PATH", 620) -ERROR_QUOTA_LIST_INCONSISTENT = make_flag("ERROR_QUOTA_LIST_INCONSISTENT", 621) -ERROR_EVALUATION_EXPIRATION = make_flag("ERROR_EVALUATION_EXPIRATION", 622) -ERROR_ILLEGAL_DLL_RELOCATION = make_flag("ERROR_ILLEGAL_DLL_RELOCATION", 623) -ERROR_DLL_INIT_FAILED_LOGOFF = make_flag("ERROR_DLL_INIT_FAILED_LOGOFF", 624) -ERROR_VALIDATE_CONTINUE = make_flag("ERROR_VALIDATE_CONTINUE", 625) -ERROR_NO_MORE_MATCHES = make_flag("ERROR_NO_MORE_MATCHES", 626) -ERROR_RANGE_LIST_CONFLICT = make_flag("ERROR_RANGE_LIST_CONFLICT", 627) -ERROR_SERVER_SID_MISMATCH = make_flag("ERROR_SERVER_SID_MISMATCH", 628) -ERROR_CANT_ENABLE_DENY_ONLY = make_flag("ERROR_CANT_ENABLE_DENY_ONLY", 629) -ERROR_FLOAT_MULTIPLE_FAULTS = make_flag("ERROR_FLOAT_MULTIPLE_FAULTS", 630) -ERROR_FLOAT_MULTIPLE_TRAPS = make_flag("ERROR_FLOAT_MULTIPLE_TRAPS", 631) -ERROR_NOINTERFACE = make_flag("ERROR_NOINTERFACE", 632) -ERROR_DRIVER_FAILED_SLEEP = make_flag("ERROR_DRIVER_FAILED_SLEEP", 633) -ERROR_CORRUPT_SYSTEM_FILE = make_flag("ERROR_CORRUPT_SYSTEM_FILE", 634) -ERROR_COMMITMENT_MINIMUM = make_flag("ERROR_COMMITMENT_MINIMUM", 635) -ERROR_PNP_RESTART_ENUMERATION = make_flag("ERROR_PNP_RESTART_ENUMERATION", 636) -ERROR_SYSTEM_IMAGE_BAD_SIGNATURE = make_flag("ERROR_SYSTEM_IMAGE_BAD_SIGNATURE", 637) -ERROR_PNP_REBOOT_REQUIRED = make_flag("ERROR_PNP_REBOOT_REQUIRED", 638) -ERROR_INSUFFICIENT_POWER = make_flag("ERROR_INSUFFICIENT_POWER", 639) -ERROR_MULTIPLE_FAULT_VIOLATION = make_flag("ERROR_MULTIPLE_FAULT_VIOLATION", 640) -ERROR_SYSTEM_SHUTDOWN = make_flag("ERROR_SYSTEM_SHUTDOWN", 641) -ERROR_PORT_NOT_SET = make_flag("ERROR_PORT_NOT_SET", 642) -ERROR_DS_VERSION_CHECK_FAILURE = make_flag("ERROR_DS_VERSION_CHECK_FAILURE", 643) -ERROR_RANGE_NOT_FOUND = make_flag("ERROR_RANGE_NOT_FOUND", 644) -ERROR_NOT_SAFE_MODE_DRIVER = make_flag("ERROR_NOT_SAFE_MODE_DRIVER", 646) -ERROR_FAILED_DRIVER_ENTRY = make_flag("ERROR_FAILED_DRIVER_ENTRY", 647) -ERROR_DEVICE_ENUMERATION_ERROR = make_flag("ERROR_DEVICE_ENUMERATION_ERROR", 648) -ERROR_MOUNT_POINT_NOT_RESOLVED = make_flag("ERROR_MOUNT_POINT_NOT_RESOLVED", 649) -ERROR_INVALID_DEVICE_OBJECT_PARAMETER = make_flag("ERROR_INVALID_DEVICE_OBJECT_PARAMETER", 650) -ERROR_MCA_OCCURED = make_flag("ERROR_MCA_OCCURED", 651) -ERROR_DRIVER_DATABASE_ERROR = make_flag("ERROR_DRIVER_DATABASE_ERROR", 652) -ERROR_SYSTEM_HIVE_TOO_LARGE = make_flag("ERROR_SYSTEM_HIVE_TOO_LARGE", 653) -ERROR_DRIVER_FAILED_PRIOR_UNLOAD = make_flag("ERROR_DRIVER_FAILED_PRIOR_UNLOAD", 654) -ERROR_VOLSNAP_PREPARE_HIBERNATE = make_flag("ERROR_VOLSNAP_PREPARE_HIBERNATE", 655) -ERROR_HIBERNATION_FAILURE = make_flag("ERROR_HIBERNATION_FAILURE", 656) -ERROR_FILE_SYSTEM_LIMITATION = make_flag("ERROR_FILE_SYSTEM_LIMITATION", 665) -ERROR_ASSERTION_FAILURE = make_flag("ERROR_ASSERTION_FAILURE", 668) -ERROR_ACPI_ERROR = make_flag("ERROR_ACPI_ERROR", 669) -ERROR_WOW_ASSERTION = make_flag("ERROR_WOW_ASSERTION", 670) -ERROR_PNP_BAD_MPS_TABLE = make_flag("ERROR_PNP_BAD_MPS_TABLE", 671) -ERROR_PNP_TRANSLATION_FAILED = make_flag("ERROR_PNP_TRANSLATION_FAILED", 672) -ERROR_PNP_IRQ_TRANSLATION_FAILED = make_flag("ERROR_PNP_IRQ_TRANSLATION_FAILED", 673) -ERROR_PNP_INVALID_ID = make_flag("ERROR_PNP_INVALID_ID", 674) -ERROR_WAKE_SYSTEM_DEBUGGER = make_flag("ERROR_WAKE_SYSTEM_DEBUGGER", 675) -ERROR_HANDLES_CLOSED = make_flag("ERROR_HANDLES_CLOSED", 676) -ERROR_EXTRANEOUS_INFORMATION = make_flag("ERROR_EXTRANEOUS_INFORMATION", 677) -ERROR_RXACT_COMMIT_NECESSARY = make_flag("ERROR_RXACT_COMMIT_NECESSARY", 678) -ERROR_MEDIA_CHECK = make_flag("ERROR_MEDIA_CHECK", 679) -ERROR_GUID_SUBSTITUTION_MADE = make_flag("ERROR_GUID_SUBSTITUTION_MADE", 680) -ERROR_STOPPED_ON_SYMLINK = make_flag("ERROR_STOPPED_ON_SYMLINK", 681) -ERROR_LONGJUMP = make_flag("ERROR_LONGJUMP", 682) -ERROR_PLUGPLAY_QUERY_VETOED = make_flag("ERROR_PLUGPLAY_QUERY_VETOED", 683) -ERROR_UNWIND_CONSOLIDATE = make_flag("ERROR_UNWIND_CONSOLIDATE", 684) -ERROR_REGISTRY_HIVE_RECOVERED = make_flag("ERROR_REGISTRY_HIVE_RECOVERED", 685) -ERROR_DLL_MIGHT_BE_INSECURE = make_flag("ERROR_DLL_MIGHT_BE_INSECURE", 686) -ERROR_DLL_MIGHT_BE_INCOMPATIBLE = make_flag("ERROR_DLL_MIGHT_BE_INCOMPATIBLE", 687) -ERROR_DBG_EXCEPTION_NOT_HANDLED = make_flag("ERROR_DBG_EXCEPTION_NOT_HANDLED", 688) -ERROR_DBG_REPLY_LATER = make_flag("ERROR_DBG_REPLY_LATER", 689) -ERROR_DBG_UNABLE_TO_PROVIDE_HANDLE = make_flag("ERROR_DBG_UNABLE_TO_PROVIDE_HANDLE", 690) -ERROR_DBG_TERMINATE_THREAD = make_flag("ERROR_DBG_TERMINATE_THREAD", 691) -ERROR_DBG_TERMINATE_PROCESS = make_flag("ERROR_DBG_TERMINATE_PROCESS", 692) -ERROR_DBG_CONTROL_C = make_flag("ERROR_DBG_CONTROL_C", 693) -ERROR_DBG_PRINTEXCEPTION_C = make_flag("ERROR_DBG_PRINTEXCEPTION_C", 694) -ERROR_DBG_RIPEXCEPTION = make_flag("ERROR_DBG_RIPEXCEPTION", 695) -ERROR_DBG_CONTROL_BREAK = make_flag("ERROR_DBG_CONTROL_BREAK", 696) -ERROR_DBG_COMMAND_EXCEPTION = make_flag("ERROR_DBG_COMMAND_EXCEPTION", 697) -ERROR_OBJECT_NAME_EXISTS = make_flag("ERROR_OBJECT_NAME_EXISTS", 698) -ERROR_THREAD_WAS_SUSPENDED = make_flag("ERROR_THREAD_WAS_SUSPENDED", 699) -ERROR_IMAGE_NOT_AT_BASE = make_flag("ERROR_IMAGE_NOT_AT_BASE", 700) -ERROR_RXACT_STATE_CREATED = make_flag("ERROR_RXACT_STATE_CREATED", 701) -ERROR_SEGMENT_NOTIFICATION = make_flag("ERROR_SEGMENT_NOTIFICATION", 702) -ERROR_BAD_CURRENT_DIRECTORY = make_flag("ERROR_BAD_CURRENT_DIRECTORY", 703) -ERROR_FT_READ_RECOVERY_FROM_BACKUP = make_flag("ERROR_FT_READ_RECOVERY_FROM_BACKUP", 704) -ERROR_FT_WRITE_RECOVERY = make_flag("ERROR_FT_WRITE_RECOVERY", 705) -ERROR_IMAGE_MACHINE_TYPE_MISMATCH = make_flag("ERROR_IMAGE_MACHINE_TYPE_MISMATCH", 706) -ERROR_RECEIVE_PARTIAL = make_flag("ERROR_RECEIVE_PARTIAL", 707) -ERROR_RECEIVE_EXPEDITED = make_flag("ERROR_RECEIVE_EXPEDITED", 708) -ERROR_RECEIVE_PARTIAL_EXPEDITED = make_flag("ERROR_RECEIVE_PARTIAL_EXPEDITED", 709) -ERROR_EVENT_DONE = make_flag("ERROR_EVENT_DONE", 710) -ERROR_EVENT_PENDING = make_flag("ERROR_EVENT_PENDING", 711) -ERROR_CHECKING_FILE_SYSTEM = make_flag("ERROR_CHECKING_FILE_SYSTEM", 712) -ERROR_FATAL_APP_EXIT = make_flag("ERROR_FATAL_APP_EXIT", 713) -ERROR_PREDEFINED_HANDLE = make_flag("ERROR_PREDEFINED_HANDLE", 714) -ERROR_WAS_UNLOCKED = make_flag("ERROR_WAS_UNLOCKED", 715) -ERROR_SERVICE_NOTIFICATION = make_flag("ERROR_SERVICE_NOTIFICATION", 716) -ERROR_WAS_LOCKED = make_flag("ERROR_WAS_LOCKED", 717) -ERROR_LOG_HARD_ERROR = make_flag("ERROR_LOG_HARD_ERROR", 718) -ERROR_ALREADY_WIN32 = make_flag("ERROR_ALREADY_WIN32", 719) -ERROR_IMAGE_MACHINE_TYPE_MISMATCH_EXE = make_flag("ERROR_IMAGE_MACHINE_TYPE_MISMATCH_EXE", 720) -ERROR_NO_YIELD_PERFORMED = make_flag("ERROR_NO_YIELD_PERFORMED", 721) -ERROR_TIMER_RESUME_IGNORED = make_flag("ERROR_TIMER_RESUME_IGNORED", 722) -ERROR_ARBITRATION_UNHANDLED = make_flag("ERROR_ARBITRATION_UNHANDLED", 723) -ERROR_CARDBUS_NOT_SUPPORTED = make_flag("ERROR_CARDBUS_NOT_SUPPORTED", 724) -ERROR_MP_PROCESSOR_MISMATCH = make_flag("ERROR_MP_PROCESSOR_MISMATCH", 725) -ERROR_HIBERNATED = make_flag("ERROR_HIBERNATED", 726) -ERROR_RESUME_HIBERNATION = make_flag("ERROR_RESUME_HIBERNATION", 727) -ERROR_FIRMWARE_UPDATED = make_flag("ERROR_FIRMWARE_UPDATED", 728) -ERROR_DRIVERS_LEAKING_LOCKED_PAGES = make_flag("ERROR_DRIVERS_LEAKING_LOCKED_PAGES", 729) -ERROR_WAKE_SYSTEM = make_flag("ERROR_WAKE_SYSTEM", 730) -ERROR_WAIT_1 = make_flag("ERROR_WAIT_1", 731) -ERROR_WAIT_2 = make_flag("ERROR_WAIT_2", 732) -ERROR_WAIT_3 = make_flag("ERROR_WAIT_3", 733) -ERROR_WAIT_63 = make_flag("ERROR_WAIT_63", 734) -ERROR_ABANDONED_WAIT_0 = make_flag("ERROR_ABANDONED_WAIT_0", 735) -ERROR_ABANDONED_WAIT_63 = make_flag("ERROR_ABANDONED_WAIT_63", 736) -ERROR_USER_APC = make_flag("ERROR_USER_APC", 737) -ERROR_KERNEL_APC = make_flag("ERROR_KERNEL_APC", 738) -ERROR_ALERTED = make_flag("ERROR_ALERTED", 739) -ERROR_ELEVATION_REQUIRED = make_flag("ERROR_ELEVATION_REQUIRED", 740) -ERROR_REPARSE = make_flag("ERROR_REPARSE", 741) -ERROR_OPLOCK_BREAK_IN_PROGRESS = make_flag("ERROR_OPLOCK_BREAK_IN_PROGRESS", 742) -ERROR_VOLUME_MOUNTED = make_flag("ERROR_VOLUME_MOUNTED", 743) -ERROR_RXACT_COMMITTED = make_flag("ERROR_RXACT_COMMITTED", 744) -ERROR_NOTIFY_CLEANUP = make_flag("ERROR_NOTIFY_CLEANUP", 745) -ERROR_PRIMARY_TRANSPORT_CONNECT_FAILED = make_flag("ERROR_PRIMARY_TRANSPORT_CONNECT_FAILED", 746) -ERROR_PAGE_FAULT_TRANSITION = make_flag("ERROR_PAGE_FAULT_TRANSITION", 747) -ERROR_PAGE_FAULT_DEMAND_ZERO = make_flag("ERROR_PAGE_FAULT_DEMAND_ZERO", 748) -ERROR_PAGE_FAULT_COPY_ON_WRITE = make_flag("ERROR_PAGE_FAULT_COPY_ON_WRITE", 749) -ERROR_PAGE_FAULT_GUARD_PAGE = make_flag("ERROR_PAGE_FAULT_GUARD_PAGE", 750) -ERROR_PAGE_FAULT_PAGING_FILE = make_flag("ERROR_PAGE_FAULT_PAGING_FILE", 751) -ERROR_CACHE_PAGE_LOCKED = make_flag("ERROR_CACHE_PAGE_LOCKED", 752) -ERROR_CRASH_DUMP = make_flag("ERROR_CRASH_DUMP", 753) -ERROR_BUFFER_ALL_ZEROS = make_flag("ERROR_BUFFER_ALL_ZEROS", 754) -ERROR_REPARSE_OBJECT = make_flag("ERROR_REPARSE_OBJECT", 755) -ERROR_RESOURCE_REQUIREMENTS_CHANGED = make_flag("ERROR_RESOURCE_REQUIREMENTS_CHANGED", 756) -ERROR_TRANSLATION_COMPLETE = make_flag("ERROR_TRANSLATION_COMPLETE", 757) -ERROR_NOTHING_TO_TERMINATE = make_flag("ERROR_NOTHING_TO_TERMINATE", 758) -ERROR_PROCESS_NOT_IN_JOB = make_flag("ERROR_PROCESS_NOT_IN_JOB", 759) -ERROR_PROCESS_IN_JOB = make_flag("ERROR_PROCESS_IN_JOB", 760) -ERROR_VOLSNAP_HIBERNATE_READY = make_flag("ERROR_VOLSNAP_HIBERNATE_READY", 761) -ERROR_FSFILTER_OP_COMPLETED_SUCCESSFULLY = make_flag("ERROR_FSFILTER_OP_COMPLETED_SUCCESSFULLY", 762) -ERROR_INTERRUPT_VECTOR_ALREADY_CONNECTED = make_flag("ERROR_INTERRUPT_VECTOR_ALREADY_CONNECTED", 763) -ERROR_INTERRUPT_STILL_CONNECTED = make_flag("ERROR_INTERRUPT_STILL_CONNECTED", 764) -ERROR_WAIT_FOR_OPLOCK = make_flag("ERROR_WAIT_FOR_OPLOCK", 765) -ERROR_DBG_EXCEPTION_HANDLED = make_flag("ERROR_DBG_EXCEPTION_HANDLED", 766) -ERROR_DBG_CONTINUE = make_flag("ERROR_DBG_CONTINUE", 767) -ERROR_CALLBACK_POP_STACK = make_flag("ERROR_CALLBACK_POP_STACK", 768) -ERROR_COMPRESSION_DISABLED = make_flag("ERROR_COMPRESSION_DISABLED", 769) -ERROR_CANTFETCHBACKWARDS = make_flag("ERROR_CANTFETCHBACKWARDS", 770) -ERROR_CANTSCROLLBACKWARDS = make_flag("ERROR_CANTSCROLLBACKWARDS", 771) -ERROR_ROWSNOTRELEASED = make_flag("ERROR_ROWSNOTRELEASED", 772) -ERROR_BAD_ACCESSOR_FLAGS = make_flag("ERROR_BAD_ACCESSOR_FLAGS", 773) -ERROR_ERRORS_ENCOUNTERED = make_flag("ERROR_ERRORS_ENCOUNTERED", 774) -ERROR_NOT_CAPABLE = make_flag("ERROR_NOT_CAPABLE", 775) -ERROR_REQUEST_OUT_OF_SEQUENCE = make_flag("ERROR_REQUEST_OUT_OF_SEQUENCE", 776) -ERROR_VERSION_PARSE_ERROR = make_flag("ERROR_VERSION_PARSE_ERROR", 777) -ERROR_BADSTARTPOSITION = make_flag("ERROR_BADSTARTPOSITION", 778) -ERROR_MEMORY_HARDWARE = make_flag("ERROR_MEMORY_HARDWARE", 779) -ERROR_DISK_REPAIR_DISABLED = make_flag("ERROR_DISK_REPAIR_DISABLED", 780) -ERROR_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE = make_flag("ERROR_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE", 781) -ERROR_SYSTEM_POWERSTATE_TRANSITION = make_flag("ERROR_SYSTEM_POWERSTATE_TRANSITION", 782) -ERROR_SYSTEM_POWERSTATE_COMPLEX_TRANSITION = make_flag("ERROR_SYSTEM_POWERSTATE_COMPLEX_TRANSITION", 783) -ERROR_MCA_EXCEPTION = make_flag("ERROR_MCA_EXCEPTION", 784) -ERROR_ACCESS_AUDIT_BY_POLICY = make_flag("ERROR_ACCESS_AUDIT_BY_POLICY", 785) -ERROR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY = make_flag("ERROR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY", 786) -ERROR_ABANDON_HIBERFILE = make_flag("ERROR_ABANDON_HIBERFILE", 787) -ERROR_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED = make_flag("ERROR_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED", 788) -ERROR_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR = make_flag("ERROR_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR", 789) -ERROR_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR = make_flag("ERROR_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR", 790) -ERROR_BAD_MCFG_TABLE = make_flag("ERROR_BAD_MCFG_TABLE", 791) -ERROR_OPLOCK_SWITCHED_TO_NEW_HANDLE = make_flag("ERROR_OPLOCK_SWITCHED_TO_NEW_HANDLE", 800) -ERROR_CANNOT_GRANT_REQUESTED_OPLOCK = make_flag("ERROR_CANNOT_GRANT_REQUESTED_OPLOCK", 801) -ERROR_CANNOT_BREAK_OPLOCK = make_flag("ERROR_CANNOT_BREAK_OPLOCK", 802) -ERROR_OPLOCK_HANDLE_CLOSED = make_flag("ERROR_OPLOCK_HANDLE_CLOSED", 803) -ERROR_NO_ACE_CONDITION = make_flag("ERROR_NO_ACE_CONDITION", 804) -ERROR_INVALID_ACE_CONDITION = make_flag("ERROR_INVALID_ACE_CONDITION", 805) -ERROR_EA_ACCESS_DENIED = make_flag("ERROR_EA_ACCESS_DENIED", 994) -ERROR_OPERATION_ABORTED = make_flag("ERROR_OPERATION_ABORTED", 995) -ERROR_IO_INCOMPLETE = make_flag("ERROR_IO_INCOMPLETE", 996) -ERROR_IO_PENDING = make_flag("ERROR_IO_PENDING", 997) -ERROR_NOACCESS = make_flag("ERROR_NOACCESS", 998) -ERROR_SWAPERROR = make_flag("ERROR_SWAPERROR", 999) -ERROR_STACK_OVERFLOW = make_flag("ERROR_STACK_OVERFLOW", 1001) -ERROR_INVALID_MESSAGE = make_flag("ERROR_INVALID_MESSAGE", 1002) -ERROR_CAN_NOT_COMPLETE = make_flag("ERROR_CAN_NOT_COMPLETE", 1003) -ERROR_INVALID_FLAGS = make_flag("ERROR_INVALID_FLAGS", 1004) -ERROR_UNRECOGNIZED_VOLUME = make_flag("ERROR_UNRECOGNIZED_VOLUME", 1005) -ERROR_FILE_INVALID = make_flag("ERROR_FILE_INVALID", 1006) -ERROR_FULLSCREEN_MODE = make_flag("ERROR_FULLSCREEN_MODE", 1007) -ERROR_NO_TOKEN = make_flag("ERROR_NO_TOKEN", 1008) -ERROR_BADDB = make_flag("ERROR_BADDB", 1009) -ERROR_BADKEY = make_flag("ERROR_BADKEY", 1010) -ERROR_CANTOPEN = make_flag("ERROR_CANTOPEN", 1011) -ERROR_CANTREAD = make_flag("ERROR_CANTREAD", 1012) -ERROR_CANTWRITE = make_flag("ERROR_CANTWRITE", 1013) -ERROR_REGISTRY_RECOVERED = make_flag("ERROR_REGISTRY_RECOVERED", 1014) -ERROR_REGISTRY_CORRUPT = make_flag("ERROR_REGISTRY_CORRUPT", 1015) -ERROR_REGISTRY_IO_FAILED = make_flag("ERROR_REGISTRY_IO_FAILED", 1016) -ERROR_NOT_REGISTRY_FILE = make_flag("ERROR_NOT_REGISTRY_FILE", 1017) -ERROR_KEY_DELETED = make_flag("ERROR_KEY_DELETED", 1018) -ERROR_NO_LOG_SPACE = make_flag("ERROR_NO_LOG_SPACE", 1019) -ERROR_KEY_HAS_CHILDREN = make_flag("ERROR_KEY_HAS_CHILDREN", 1020) -ERROR_CHILD_MUST_BE_VOLATILE = make_flag("ERROR_CHILD_MUST_BE_VOLATILE", 1021) -ERROR_NOTIFY_ENUM_DIR = make_flag("ERROR_NOTIFY_ENUM_DIR", 1022) -RPC_X_BAD_STUB_DATA = make_flag("RPC_X_BAD_STUB_DATA", 1783) -RPC_S_UNKNOWN_IF = make_flag("RPC_S_UNKNOWN_IF", 1717) -RPC_S_PROTOCOL_ERROR = make_flag("RPC_S_PROTOCOL_ERROR", 1728) -RPC_S_UNSUPPORTED_TRANS_SYN = make_flag("RPC_S_UNSUPPORTED_TRANS_SYN", 1730) -RPC_S_PROCNUM_OUT_OF_RANGE = make_flag("RPC_S_PROCNUM_OUT_OF_RANGE", 1745) -RPC_REQUEST_TYPE_CALL = make_flag("RPC_REQUEST_TYPE_CALL", 0) -RPC_REQUEST_TYPE_BIND = make_flag("RPC_REQUEST_TYPE_BIND", 1) -RPC_RESPONSE_TYPE_BIND_OK = make_flag("RPC_RESPONSE_TYPE_BIND_OK", 1) -RPC_RESPONSE_TYPE_FAIL = make_flag("RPC_RESPONSE_TYPE_FAIL", 2) -RPC_RESPONSE_TYPE_SUCESS = make_flag("RPC_RESPONSE_TYPE_SUCESS", 3) -BIND_IF_SYNTAX_NDR32 = make_flag("BIND_IF_SYNTAX_NDR32", 1) -BIND_IF_SYNTAX_NDR64 = make_flag("BIND_IF_SYNTAX_NDR64", 2) -BIND_IF_SYNTAX_UNKNOWN = make_flag("BIND_IF_SYNTAX_UNKNOWN", 4) -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs/build/html/_modules/windows/generated_def/winstructs.html b/docs/build/html/_modules/windows/generated_def/winstructs.html index 43b7fdd..783706e 100644 --- a/docs/build/html/_modules/windows/generated_def/winstructs.html +++ b/docs/build/html/_modules/windows/generated_def/winstructs.html @@ -1,33 +1,22 @@ + - + - windows.generated_def.winstructs — PythonForWindows 0.3 documentation - - - + + - - + \ No newline at end of file diff --git a/docs/build/html/_modules/windows/hooks.html b/docs/build/html/_modules/windows/hooks.html index f134353..2d9760e 100644 --- a/docs/build/html/_modules/windows/hooks.html +++ b/docs/build/html/_modules/windows/hooks.html @@ -1,33 +1,22 @@ + - + - windows.hooks — PythonForWindows 0.3 documentation - - - + + - - + + return func class KnownCallback(object): @@ -81,7 +74,10 @@ setattr(sys.modules[__name__], type(callback).__name__, callback) # Generate IATCallback decorator for all known functions -for func in winfuncs.functions: + + + +for func in windows.generated_def.meta.functions: prototype = getattr(winfuncs, func + "Prototype") callback_name = func + "Callback" @@ -123,14 +119,14 @@
[docs] def enable(self): """Enable the IAT hook: you MUST keep a reference to the IATHook while the hook is enabled""" with utils.VirtualProtected(self.entry.addr, ctypes.sizeof(PVOID), PAGE_EXECUTE_READWRITE): - self.entry.value = self.stub_addr - self.is_enable = True
+ self.entry.value = self.stub_addr + self.is_enable = True
[docs] def disable(self): """Disable the IAT hook""" with utils.VirtualProtected(self.entry.addr, ctypes.sizeof(PVOID), PAGE_EXECUTE_READWRITE): - self.entry.value = self.entry.nonhookvalue - self.is_enable = False
+ self.entry.value = self.entry.nonhookvalue + self.is_enable = False def hook_callback(self, *args): adapted_args = [] @@ -145,8 +141,8 @@ def real_function(*args): if args == (): args = adapted_args - return self.realfunction(*args) - return self.callback(*adapted_args, real_function=real_function) + return self.realfunction(*args) + return self.callback(*adapted_args, real_function=real_function) # Use this tricks to prevent garbage collection of hook ? #def __del__(self): @@ -181,12 +177,14 @@
@@ -208,7 +206,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/native_exec/cpuid.html b/docs/build/html/_modules/windows/native_exec/cpuid.html index 8aca442..63afcb9 100644 --- a/docs/build/html/_modules/windows/native_exec/cpuid.html +++ b/docs/build/html/_modules/windows/native_exec/cpuid.html @@ -1,33 +1,22 @@ + - + - windows.native_exec.cpuid — PythonForWindows 0.3 documentation - - - + + - - + + fields = [f[0] for f in _fields_] + """Fields of the Structure""" -class X64CpuidResult(ctypes.Structure): +
[docs]class X64CpuidResult(ctypes.Structure): _fields_ = [("RAX", ULONG64), ("RBX", ULONG64), - ("RCX", ULONG64), + ("RCX", ULONG64),
("RDX", ULONG64)] -class X86IntelCpuidFamilly(ctypes.Structure): +
[docs]class X86IntelCpuidFamilly(ctypes.Structure): _fields_ = [("SteppingID", DWORD, 4), ("ModelID", DWORD, 4), ("FamilyID", DWORD, 4), @@ -89,11 +78,11 @@ ("ExtendedModel", DWORD, 4), ("ExtendedFamily", DWORD, 8), ("Reserved", DWORD, 2)] - fields = [f[0] for f in _fields_] + fields = [f[0] for f in _fields_]
"""Fields of the Structure""" -class X86AmdCpuidFamilly(ctypes.Structure): +
[docs]class X86AmdCpuidFamilly(ctypes.Structure): _fields_ = [("SteppingID", DWORD, 4), ("ModelID", DWORD, 4), ("FamilyID", DWORD, 4), @@ -101,7 +90,7 @@ ("ExtendedModel", DWORD, 4), ("ExtendedFamily", DWORD, 8), ("Reserved", DWORD, 2)] - fields = [f[0] for f in _fields_] + fields = [f[0] for f in _fields_]
"""Fields of the Structure""" cpuid32_code = x86.MultipleInstr() @@ -137,8 +126,8 @@ :rtype: :class:`X86CpuidResult` """ cpuid_res = X86CpuidResult() - do_cpuid32(req, ctypes.addressof(cpuid_res)) - return cpuid_res + do_cpuid32(req, ctypes.addressof(cpuid_res)) + return cpuid_res
[docs]def x64_cpuid(req): @@ -148,8 +137,8 @@ """ cpuid_res = X64CpuidResult() do_cpuid64(req, ctypes.addressof(cpuid_res)) - # For now assembler cannot do 32bits register in x64 - return X86CpuidResult(cpuid_res.RAX, cpuid_res.RBX, cpuid_res.RCX, cpuid_res.RDX)
+ # For now assembler cannot do 32bits register in x64 + return X86CpuidResult(cpuid_res.RAX, cpuid_res.RBX, cpuid_res.RCX, cpuid_res.RDX) if _bitness() == 32: @@ -161,8 +150,8 @@ """Performs a CPUID for the current process bitness :rtype: :class:`X86CpuidResult` - """ - return _do_cpuid(req) + """ + return _do_cpuid(req)
[docs]def get_vendor_id(): @@ -170,19 +159,19 @@ :rtype: :class:`str` """ - cpuid_res = do_cpuid(0) - return struct.pack("<III", cpuid_res.EBX, cpuid_res.EDX, cpuid_res.ECX)
+ cpuid_res = do_cpuid(0) + return struct.pack("<III", cpuid_res.EBX, cpuid_res.EDX, cpuid_res.ECX) # platform.processor() could do the trick
[docs]def is_intel_proc(): - """get_vendor_id() == 'GenuineIntel'""" - return get_vendor_id() == "GenuineIntel"
+ """get_vendor_id() == 'GenuineIntel'""" + return get_vendor_id() == "GenuineIntel"
[docs]def is_amd_proc(): - """get_vendor_id() == 'AuthenticAMD'""" - return get_vendor_id() == "AuthenticAMD"
+ """get_vendor_id() == 'AuthenticAMD'""" + return get_vendor_id() == "AuthenticAMD"
[docs]def get_proc_family_model(): @@ -205,8 +194,8 @@ if infos.FamilyID == 0x0F: ComputedFamily = infos.FamilyID + infos.ExtendedFamily else: - ComputedFamily = infos.FamilyID - return ComputedFamily, ComputedModel
+ ComputedFamily = infos.FamilyID + return ComputedFamily, ComputedModel @@ -216,12 +205,14 @@
@@ -243,7 +234,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/native_exec/native_function.html b/docs/build/html/_modules/windows/native_exec/native_function.html index 8d3db80..95c609b 100644 --- a/docs/build/html/_modules/windows/native_exec/native_function.html +++ b/docs/build/html/_modules/windows/native_exec/native_function.html @@ -1,33 +1,22 @@ + - + - windows.native_exec.native_function — PythonForWindows 0.3 documentation - - - + + - - + + res.code_addr = addr + return res @@ -173,12 +162,14 @@
@@ -200,7 +191,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/native_exec/simple_x86.html b/docs/build/html/_modules/windows/native_exec/simple_x86.html index 15f8110..62666af 100644 --- a/docs/build/html/_modules/windows/native_exec/simple_x86.html +++ b/docs/build/html/_modules/windows/native_exec/simple_x86.html @@ -1,33 +1,22 @@ + - + - windows.native_exec.simple_x86 — PythonForWindows 0.3 documentation - - - + + - - + + raise ValueError("Cannot create displacement with index == ESP") + return mem_access(base, index, scale, disp, prefix)
[docs]def deref(disp): - """Create a memory access for an immediate value ``Ex: [0x42424242]``""" - return create_displacement(disp=disp)
+ """Create a memory access for an immediate value ``Ex: [0x42424242]``""" + return create_displacement(disp=disp)
[docs]def mem(data): @@ -264,8 +253,8 @@ raise ValueError("Invalid base/index or displacement <{0}> in mem access".format(item)) if 'disp' in parsed_items: raise ValueError("Multiple displacement in mem expression <{0}>".format(data)) - parsed_items['disp'] = disp - return create_displacement(**parsed_items)
+ parsed_items['disp'] = disp + return create_displacement(**parsed_items) # Helper to get the BitArray associated to a register @@ -318,6 +307,13 @@ raise ImmediatOverflow("8bits signed Immediat overflow") +def accept_as_unsigned_8immediat(x): + try: + return struct.pack("<B", x) + except struct.error: + raise ImmediatOverflow("8bits signed Immediat overflow") + + def accept_as_16immediat(x): try: return struct.pack("<h", x) @@ -354,6 +350,18 @@ return None, None return (1, BitArray.from_string(imm8)) +class UImm8(object): + def accept_arg(self, args, instr_state): + try: + x = int(args[0]) + except (ValueError, TypeError): + return (None, None) + try: + imm8 = accept_as_unsigned_8immediat(x) + except ImmediatOverflow: + return None, None + return (1, BitArray.from_string(imm8)) + class Imm16(object): def accept_arg(self, args, instr_state): @@ -863,10 +871,15 @@ class Retf(Instruction): encoding = [(RawBits.from_int(8, 0xcb),)] +class Int(Instruction): + encoding = [(RawBits.from_int(8, 0xcd), UImm8())] class Int3(Instruction): encoding = [(RawBits.from_int(8, 0xcc),)] +class Iret(Instruction): + encoding = [(RawBits.from_int(8, 0xcf),)] + class _NopArtifact(Nop): """Special NOP used in shellcode reduction""" @@ -1107,12 +1120,14 @@
@@ -1134,7 +1149,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/pe_parse.html b/docs/build/html/_modules/windows/pe_parse.html index 36dbebb..8498f8a 100644 --- a/docs/build/html/_modules/windows/pe_parse.html +++ b/docs/build/html/_modules/windows/pe_parse.html @@ -1,33 +1,22 @@ + - + - windows.pe_parse — PythonForWindows 0.3 documentation - - - + + - - + + + return PEFile(target, baseaddr, targetedbitness, transfor_funcs) class THUNK_DATA(ctypes.Union): @@ -559,16 +544,16 @@ hook = hooks.IATHook(self, callback, types) self.hook = hook - hook.enable() - return hook + hook.enable() + return hook
[docs] def remove_hook(self): """Remove the hook on the entry""" if self.hook is None: return False self.hook.disable() - self.hook = None - return True
+ self.hook = None + return True class IMAGE_IMPORT_DESCRIPTOR(IMAGE_IMPORT_DESCRIPTOR): # TODO: use explicite name winstructs.IMAGE_IMPORT_DESCRIPTOR @@ -786,8 +771,8 @@ iat_entry.ord = ord iat_entry.name = str(name.decode()) if name else "" name = get_string(self.target, self.baseaddr + import_descriptor.Name) - res.setdefault(name.lower(), []).extend(IAT) - return res + res.setdefault(name.lower(), []).extend(IAT) + return res @@ -797,12 +782,14 @@
@@ -824,7 +811,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/pipe.html b/docs/build/html/_modules/windows/pipe.html new file mode 100644 index 0000000..6caab84 --- /dev/null +++ b/docs/build/html/_modules/windows/pipe.html @@ -0,0 +1,179 @@ + + + + + + + + windows.pipe — PythonForWindows 0.3 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for windows.pipe

+import windows
+from windows import winproxy
+import windows.generated_def as gdef
+
+import _multiprocessing
+
+# Inspired from 'multiprocessing\connection.py'
+
+
[docs]def full_pipe_address(addr): + """Return the full address of the pipe `addr`""" + if addr.startswith("\\\\"): + return addr
+ return r"\\.\pipe\{addr}".format(addr=addr) + +
[docs]class PipeConnection(object): # Cannot inherit: crash the interpreter + """A wrapper arround :class:`_multiprocessing.PipeConnection` able to work as a ContextManager""" + BUFFER_SIZE = 0x2000 + + def __init__(self, connection, name=None, server=False): + self.handle = connection.fileno() + self.connection = connection + self.name = name + self.server = server + +
[docs] @classmethod + def from_handle(cls, phandle, *args, **kwargs): + """Create a :class:`PipeConnection` from pipe handle `phandle`""" + connection = _multiprocessing.PipeConnection(phandle)
+ return cls(connection, *args, **kwargs) + +
[docs] @classmethod + def create(cls, addr): + """Create a namedpipe pipe ``addr`` + + :returns type: :class:`PipeConnection` + """ + addr = full_pipe_address(addr) + pipehandle = winproxy.CreateNamedPipeA( + addr, gdef.PIPE_ACCESS_DUPLEX, + gdef.PIPE_TYPE_MESSAGE | gdef.PIPE_READMODE_MESSAGE | + gdef.PIPE_WAIT, + gdef.PIPE_UNLIMITED_INSTANCES, cls.BUFFER_SIZE, cls.BUFFER_SIZE, + gdef.NMPWAIT_WAIT_FOREVER, None + )
+ return cls.from_handle(pipehandle, name=addr, server=True) + +
[docs] @classmethod + def connect(cls, addr): + """Connect to the named pipe ``addr`` + + :returns type: :class:`PipeConnection` + """ + addr = full_pipe_address(addr) + pipehandle = winproxy.CreateFileA(addr, gdef.GENERIC_READ | gdef.GENERIC_WRITE, 0, None, gdef.OPEN_EXISTING, 0, None) + winproxy.SetNamedPipeHandleState(pipehandle, gdef.ULONG(gdef.PIPE_READMODE_MESSAGE), None, None)
+ return cls.from_handle(pipehandle, name=addr, server=False) + +
[docs] def send(self, *args, **kwargs): + """Send an object on the pipe"""
+ return self.connection.send(*args, **kwargs) + +
[docs] def recv(self, *args, **kwargs): + """Send an object from the pipe"""
+ return self.connection.recv(*args, **kwargs) + +
[docs] def wait_connection(self): + """Wait for a client process to connect to the named pipe"""
+ return winproxy.ConnectNamedPipe(self.handle, None) + +
[docs] def close(self): + """Close the handle of the pipe""" + self.connection.close()
+ self.handle = None + + def __enter__(self): + return self + + def __exit__(self, *args, **kwargs): + self.close() + + def __repr__(self):
+ return """<{0} name="{1}" server={2}>""".format(type(self).__name__, self.name, self.server) + + +connect = PipeConnection.connect +create = PipeConnection.create + +
[docs]def send_object(addr, obj): + """Send `obj` on pipe ``addr``""" + with connect(addr) as np: + np.send(obj)
+ return None + +
[docs]def recv_object(addr): + """Receive an object from pipe ``addr``""" + with create(addr) as np: + np.wait_connection()
+ return np.recv() +
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/windows/remotectypes.html b/docs/build/html/_modules/windows/remotectypes.html index d1c8d03..c056797 100644 --- a/docs/build/html/_modules/windows/remotectypes.html +++ b/docs/build/html/_modules/windows/remotectypes.html @@ -1,33 +1,22 @@ + - + - windows.remotectypes — PythonForWindows 0.3 documentation - - - + + - - + + # Normal types + return type_32_64_translation_table.get(ftype, ftype) # ctypes 64 -> 32 methods @@ -543,8 +532,8 @@ return transform_structure_to_remote32bits(ftype) if is_union_type(ftype): return transform_union_to_remote32bits(ftype) - # Normal types - return type_64_32_translation_table.get(ftype, ftype) + # Normal types + return type_64_32_translation_table.get(ftype, ftype) if ctypes.sizeof(ctypes.c_void_p) == 4: transform_type_to_remote = transform_type_to_remote32bits @@ -559,12 +548,14 @@
@@ -586,7 +577,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/rpc/client.html b/docs/build/html/_modules/windows/rpc/client.html index 52870bc..b07bef9 100644 --- a/docs/build/html/_modules/windows/rpc/client.html +++ b/docs/build/html/_modules/windows/rpc/client.html @@ -1,33 +1,22 @@ + - + - windows.rpc.client — PythonForWindows 0.3 documentation - - - + + - - + + #TODO: attach version information to IID + return IID
[docs] def call(self, IID, method_offset, params): """Call method number ``method_offset`` of interface ``IID`` with mashalled ``params`` @@ -155,12 +139,12 @@ response = self._send_request(request) # Parse reponse request_type = self._get_request_type(response) - if request_type != gdef.RPC_RESPONSE_TYPE_SUCESS: - raise ValueError("Unexpected reponse type. Expected RESPONSE_SUCESS got {0}".format(KNOW_RESPONSE_TYPE.get(request_type, request_type))) + if request_type != gdef.RPC_RESPONSE_TYPE_SUCCESS: + raise ValueError("Unexpected reponse type. Expected RESPONSE_SUCCESS got {0}".format(KNOW_RESPONSE_TYPE[request_type])) data = struct.unpack("<6I", response[:6 * 4]) - assert data[3] == self.REQUEST_IDENTIFIER - return response[4 * 6:] # Should be the return value (not completly verified)
+ assert data[3] == self.REQUEST_IDENTIFIER + return response[4 * 6:] # Should be the return value (not completly verified) def _send_request(self, request): response = self.alpc_client.send_receive(request) @@ -199,8 +183,8 @@ request_type = struct.unpack("<I", response[:4])[0] if request_type == gdef.RPC_RESPONSE_TYPE_FAIL: error_code = struct.unpack("<5I", response)[2] - raise ValueError("RPC Response error {0} ({1})".format(error_code, KNOWN_RPC_ERROR_CODE.get(error_code, error_code))) - return request_type + raise ValueError("RPC Response error {0} ({1})".format(error_code, KNOWN_RPC_ERROR_CODE.get(error_code, error_code))) + return request_type @@ -210,12 +194,14 @@
@@ -237,7 +223,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/rpc/epmapper.html b/docs/build/html/_modules/windows/rpc/epmapper.html index e7c0fcf..dd6c74e 100644 --- a/docs/build/html/_modules/windows/rpc/epmapper.html +++ b/docs/build/html/_modules/windows/rpc/epmapper.html @@ -1,33 +1,22 @@ + - + - windows.rpc.epmapper — PythonForWindows 0.3 documentation - - - + + - - + + # Parse towers + return [explode_alpc_tower(obj) for obj in unpacked[2]]
[docs]def find_alpc_endpoint_and_connect(targetiid, version=(1,0), sid=gdef.WinLocalSystemSid): @@ -242,8 +231,8 @@ break else: raise ValueError("Could not find a valid endpoint for target <{0}> version <{1}>".format(targetiid, version)) - dbgprint('Connected to ALPC port "{0}"'.format(alpc_port), "RPC") - return client
+ dbgprint('Connected to ALPC port "{0}"'.format(alpc_port), "RPC") + return client @@ -254,12 +243,14 @@
@@ -281,7 +272,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/rpc/ndr.html b/docs/build/html/_modules/windows/rpc/ndr.html index c22c379..32744a7 100644 --- a/docs/build/html/_modules/windows/rpc/ndr.html +++ b/docs/build/html/_modules/windows/rpc/ndr.html @@ -1,33 +1,22 @@ + - + - windows.rpc.ndr — PythonForWindows 0.3 documentation - - - + + - - + + return None + return self.subcls.parse(stream) class NdrFixedArray(object): def __init__(self, subcls, size): @@ -130,22 +119,22 @@
[docs]class NdrSID(object): - @classmethod -
[docs] def pack(cls, psid): +
[docs] @classmethod + def pack(cls, psid): """Pack a PSID :param PSID psid: """ subcount = windows.winproxy.GetSidSubAuthorityCount(psid) size = windows.winproxy.GetLengthSid(psid) - sid_data = windows.current_process.read_memory(psid.value, size) - return pack_dword(subcount[0]) + dword_pad(sid_data)
+ sid_data = windows.current_process.read_memory(psid.value, size)
+ return pack_dword(subcount[0]) + dword_pad(sid_data) - @classmethod -
[docs] def unpack(cls, stream): +
[docs] @classmethod + def unpack(cls, stream): """Unpack a PSID, partial implementation that returns a :class:`str` and not a PSID""" - subcount = NdrLong.unpack(stream) - return stream.read(8 + (subcount * 4))
+ subcount = NdrLong.unpack(stream)
+ return stream.read(8 + (subcount * 4)) class NdrVaryingCString(object): @classmethod @@ -174,8 +163,8 @@ size1, zero, size2 = stream.partial_unpack("<3I") assert size1 == size2 assert zero == 0 - s = stream.read(size1 * 2) - return s.decode("utf-16-le") + s = stream.read(size1 * 2) + return s.decode("utf-16-le")
[docs]class NdrCString(object): @classmethod @@ -184,8 +173,8 @@ return None l = len(data) result = struct.pack("<3I", l, 0, l) - result += data - return dword_pad(result)
+ result += data + return dword_pad(result) # @classmethod # def unpack(self, stream): @@ -202,8 +191,8 @@ @classmethod def unpack(self, stream): - stream.align(4) - return stream.partial_unpack("<I")[0] + stream.align(4) + return stream.partial_unpack("<I")[0]
[docs]class NdrHyper(object): @classmethod @@ -212,8 +201,8 @@ @classmethod def unpack(self, stream): - stream.align(4) - return stream.partial_unpack("<Q")[0]
+ stream.align(4) + return stream.partial_unpack("<Q")[0]
[docs]class NdrShort(object): @classmethod @@ -221,8 +210,8 @@ return struct.pack("<H", data) @classmethod - def unpack(self, stream): - return stream.partial_unpack("<H")[0]
+ def unpack(self, stream): + return stream.partial_unpack("<H")[0]
[docs]class NdrByte(object): @@ -231,8 +220,8 @@ return struct.pack("<B", data) @classmethod - def unpack(self, stream): - return stream.partial_unpack("<B")[0]
+ def unpack(self, stream): + return stream.partial_unpack("<B")[0] class NdrContextHandle(object): @@ -252,8 +241,8 @@ """a NDR structure that tries to respect the rules of pointer packing, this class should be subclassed with an attribute ``MEMBERS`` describing the members of the class """ - @classmethod -
[docs] def pack(cls, data): +
[docs] @classmethod + def pack(cls, data): """Pack data into the struct, ``data`` size must equals the number of members in the structure""" if not (len(data) == len(cls.MEMBERS)): print("Size mistach:") @@ -261,7 +250,7 @@ print(" * members size = {0}".format(len(cls.MEMBERS))) print(" * data {0}".format(data)) print(" * members = {0}".format(cls.MEMBERS)) - raise ValueError("SUCE") + raise ValueError("NdrStructure packing number elements mismatch: structure has <{0}> members got <{1}>".format(len(cls.MEMBERS), len(data))) conformant_size = [] res = [] pointed = [] @@ -277,11 +266,11 @@ res.append(data) else: packed_member = member.pack(memberdata) - res.append(packed_member) - return dword_pad("".join(conformant_size)) + dword_pad("".join(res)) + dword_pad("".join(pointed))
+ res.append(packed_member)
+ return dword_pad("".join(conformant_size)) + dword_pad("".join(res)) + dword_pad("".join(pointed)) - @classmethod -
[docs] def unpack(cls, stream): +
[docs] @classmethod + def unpack(cls, stream): """Unpack the structure from the stream""" conformant_members = [hasattr(m, "pack_conformant") for m in cls.MEMBERS] is_conformant = any(conformant_members) @@ -306,12 +295,12 @@ else: data.append(member.unpack(stream)) for i, entry in post_subcls: - data[i] = entry.unpack(stream) - return cls.post_unpack(data)
+ data[i] = entry.unpack(stream)
+ return cls.post_unpack(data) @classmethod - def post_unpack(cls, data): - return data + def post_unpack(cls, data): + return data @@ -327,7 +316,7 @@ print(" * members size = {0}".format(len(cls.MEMBERS))) print(" * data {0}".format(data)) print(" * members = {0}".format(cls.MEMBERS)) - raise ValueError("SUCE") + raise ValueError("NdrParameters packing number elements mismatch: structure has <{0}> members got <{1}>".format(len(cls.MEMBERS), len(data))) res = [] for (member, memberdata) in zip(cls.MEMBERS, data): packed_member = member.pack(memberdata) @@ -339,8 +328,8 @@ res = [] for member in cls.MEMBERS: unpacked_member = member.unpack(stream) - res.append(unpacked_member) - return res + res.append(unpacked_member) + return res
[docs]class NdrConformantArray(object): @@ -359,8 +348,8 @@ @classmethod def unpack_conformant(cls, stream, size): res = [cls.MEMBER_TYPE.unpack(stream) for i in range(size)] - stream.align(4) - return res
+ stream.align(4) + return res
[docs]class NdrConformantVaryingArrays(object): @@ -401,8 +390,8 @@ return cls._post_unpack(result) @classmethod - def _post_unpack(cls, result): - return result
+ def _post_unpack(cls, result): + return result class NdrWcharConformantVaryingArrays(NdrConformantVaryingArrays): @@ -413,12 +402,12 @@ return u"".join(unichr(c) for c in result) -
[docs]class NdrLongConformantArray(NdrConformantArray): - MEMBER_TYPE = NdrLong
+
[docs]class NdrLongConformantArray(NdrConformantArray):
+ MEMBER_TYPE = NdrLong -
[docs]class NdrByteConformantArray(NdrConformantArray): - MEMBER_TYPE = NdrByte
+
[docs]class NdrByteConformantArray(NdrConformantArray):
+ MEMBER_TYPE = NdrByte @@ -454,8 +443,8 @@ already_read = len(self.fulldata) - len(self.data) if already_read % size: # Realign - size_to_align = (size - (already_read % size)) - self.data = self.data[size_to_align:] + size_to_align = (size - (already_read % size)) + self.data = self.data[size_to_align:] def make_parameters(types, name=None): @@ -476,12 +465,14 @@
@@ -503,7 +494,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/syswow64.html b/docs/build/html/_modules/windows/syswow64.html index af4257b..b719fe5 100644 --- a/docs/build/html/_modules/windows/syswow64.html +++ b/docs/build/html/_modules/windows/syswow64.html @@ -1,33 +1,22 @@ + - + - windows.syswow64 — PythonForWindows 0.3 documentation - - - + + - - + + return try_generate_stub_target(code_64b.get_code(), argument_buffer, target, errcheck=errcheck)
[docs]def try_generate_stub_target(shellcode, argument_buffer, target, errcheck=None): @@ -186,8 +175,8 @@ native_caller.current_original_args = args # TODO: THIS IS NOT THREAD SAFE return native_caller() wrapper.__name__ = "{0}<syswow64>".format(target.__name__,) - wrapper.__doc__ = "This is a wrapper to {0} in 64b mode, it accept <{1}> args".format(target.__name__, expected_arguments_number) - return wrapper
+ wrapper.__doc__ = "This is a wrapper to {0} in 64b mode, it accept <{1}> args".format(target.__name__, expected_arguments_number) + return wrapper def get_current_process_syswow_peb_addr(): @@ -279,8 +268,8 @@ force_resolution() return self.raw_call(*args) setattr(python_proxy, "ctypes_function", perform_call) - setattr(python_proxy, "force_resolution", force_resolution) - return python_proxy + setattr(python_proxy, "force_resolution", force_resolution) + return python_proxy def ntquerysysteminformation_syswow64_error_check(result, func, args): args = func.current_original_args @@ -301,44 +290,44 @@ return NtQuerySystemInformation_32_to_64.ctypes_function(SystemInformationClass, SystemInformation, SystemInformationLength, ReturnLength) -@Syswow64ApiProxy(winproxy.NtCreateThreadEx) -
[docs]def NtCreateThreadEx_32_to_64(ThreadHandle=None, DesiredAccess=0x1fffff, ObjectAttributes=0, ProcessHandle=NeededParameter, lpStartAddress=NeededParameter, lpParameter=NeededParameter, CreateSuspended=0, dwStackSize=0, Unknown1=0, Unknown2=0, Unknown3=0): +
[docs]@Syswow64ApiProxy(winproxy.NtCreateThreadEx) +def NtCreateThreadEx_32_to_64(ThreadHandle=None, DesiredAccess=0x1fffff, ObjectAttributes=0, ProcessHandle=NeededParameter, lpStartAddress=NeededParameter, lpParameter=NeededParameter, CreateSuspended=0, dwStackSize=0, Unknown1=0, Unknown2=0, Unknown3=0): if ThreadHandle is None: - ThreadHandle = byref(HANDLE()) - return NtCreateThreadEx_32_to_64.ctypes_function(ThreadHandle, DesiredAccess, ObjectAttributes, ProcessHandle, lpStartAddress, lpParameter, CreateSuspended, dwStackSize, Unknown1, Unknown2, Unknown3)
+ ThreadHandle = byref(HANDLE())
+ return NtCreateThreadEx_32_to_64.ctypes_function(ThreadHandle, DesiredAccess, ObjectAttributes, ProcessHandle, lpStartAddress, lpParameter, CreateSuspended, dwStackSize, Unknown1, Unknown2, Unknown3) ProcessBasicInformation = 0 -@Syswow64ApiProxy(winproxy.NtQueryInformationProcess) -
[docs]def NtQueryInformationProcess_32_to_64(ProcessHandle, ProcessInformationClass=ProcessBasicInformation, ProcessInformation=NeededParameter, ProcessInformationLength=0, ReturnLength=None): +
[docs]@Syswow64ApiProxy(winproxy.NtQueryInformationProcess) +def NtQueryInformationProcess_32_to_64(ProcessHandle, ProcessInformationClass=ProcessBasicInformation, ProcessInformation=NeededParameter, ProcessInformationLength=0, ReturnLength=None): if ProcessInformation is not None and ProcessInformationLength == 0: ProcessInformationLength = ctypes.sizeof(ProcessInformation) if type(ProcessInformation) == PROCESS_BASIC_INFORMATION: ProcessInformation = byref(ProcessInformation) if ReturnLength is None: - ReturnLength = byref(ULONG()) - return NtQueryInformationProcess_32_to_64.ctypes_function(ProcessHandle, ProcessInformationClass, ProcessInformation, ProcessInformationLength, ReturnLength)
+ ReturnLength = byref(ULONG())
+ return NtQueryInformationProcess_32_to_64.ctypes_function(ProcessHandle, ProcessInformationClass, ProcessInformation, ProcessInformationLength, ReturnLength) -@Syswow64ApiProxy(winproxy.NtQueryInformationThread) -
[docs]def NtQueryInformationThread_32_to_64(ThreadHandle, ThreadInformationClass, ThreadInformation, ThreadInformationLength=0, ReturnLength=None): +
[docs]@Syswow64ApiProxy(winproxy.NtQueryInformationThread) +def NtQueryInformationThread_32_to_64(ThreadHandle, ThreadInformationClass, ThreadInformation, ThreadInformationLength=0, ReturnLength=None): if ReturnLength is None: ReturnLength = byref(ULONG()) if ThreadInformation is not None and ThreadInformationLength == 0: - ThreadInformationLength = ctypes.sizeof(ThreadInformation) - return NtQueryInformationThread_32_to_64.ctypes_function(ThreadHandle, ThreadInformationClass, ThreadInformation, ThreadInformationLength, ReturnLength)
+ ThreadInformationLength = ctypes.sizeof(ThreadInformation)
+ return NtQueryInformationThread_32_to_64.ctypes_function(ThreadHandle, ThreadInformationClass, ThreadInformation, ThreadInformationLength, ReturnLength) -@Syswow64ApiProxy(winproxy.NtQueryVirtualMemory) -
[docs]def NtQueryVirtualMemory_32_to_64(ProcessHandle, BaseAddress, MemoryInformationClass, MemoryInformation=NeededParameter, MemoryInformationLength=0, ReturnLength=None): +
[docs]@Syswow64ApiProxy(winproxy.NtQueryVirtualMemory) +def NtQueryVirtualMemory_32_to_64(ProcessHandle, BaseAddress, MemoryInformationClass, MemoryInformation=NeededParameter, MemoryInformationLength=0, ReturnLength=None): if ReturnLength is None: ReturnLength = byref(ULONG()) if MemoryInformation is not None and MemoryInformationLength == 0: MemoryInformationLength = ctypes.sizeof(MemoryInformation) if isinstance(MemoryInformation, ctypes.Structure): - MemoryInformation = byref(MemoryInformation) - return NtQueryVirtualMemory_32_to_64.ctypes_function(ProcessHandle, BaseAddress, MemoryInformationClass, MemoryInformation, MemoryInformationLength, ReturnLength)
+ MemoryInformation = byref(MemoryInformation)
+ return NtQueryVirtualMemory_32_to_64.ctypes_function(ProcessHandle, BaseAddress, MemoryInformationClass, MemoryInformation, MemoryInformationLength, ReturnLength) @Syswow64ApiProxy(winproxy.NtProtectVirtualMemory) @@ -349,19 +338,19 @@ return NtProtectVirtualMemory_32_to_64.ctypes_function(ProcessHandle, BaseAddress, NumberOfBytesToProtect, NewAccessProtection, OldAccessProtection) -@Syswow64ApiProxy(winproxy.NtGetContextThread) -
[docs]def NtGetContextThread_32_to_64(hThread, lpContext): +
[docs]@Syswow64ApiProxy(winproxy.NtGetContextThread) +def NtGetContextThread_32_to_64(hThread, lpContext): if type(lpContext) == windows.winobject.exception.ECONTEXT64: - lpContext = byref(lpContext) - return NtGetContextThread_32_to_64.ctypes_function(hThread, lpContext)
+ lpContext = byref(lpContext)
+ return NtGetContextThread_32_to_64.ctypes_function(hThread, lpContext) -@Syswow64ApiProxy(winproxy.LdrLoadDll) -
[docs]def LdrLoadDll_32_to_64(PathToFile, Flags, ModuleFileName, ModuleHandle): - return LdrLoadDll_32_to_64.ctypes_function(PathToFile, Flags, ModuleFileName, ModuleHandle)
+
[docs]@Syswow64ApiProxy(winproxy.LdrLoadDll) +def LdrLoadDll_32_to_64(PathToFile, Flags, ModuleFileName, ModuleHandle):
+ return LdrLoadDll_32_to_64.ctypes_function(PathToFile, Flags, ModuleFileName, ModuleHandle) -@Syswow64ApiProxy(winproxy.NtSetContextThread) -
[docs]def NtSetContextThread_32_to_64(hThread, lpContext): - return NtSetContextThread_32_to_64.ctypes_function(hThread, lpContext)
+
[docs]@Syswow64ApiProxy(winproxy.NtSetContextThread) +def NtSetContextThread_32_to_64(hThread, lpContext):
+ return NtSetContextThread_32_to_64.ctypes_function(hThread, lpContext) @@ -371,12 +360,14 @@
@@ -398,7 +389,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/utils/pythonutils.html b/docs/build/html/_modules/windows/utils/pythonutils.html new file mode 100644 index 0000000..c7e4b2b --- /dev/null +++ b/docs/build/html/_modules/windows/utils/pythonutils.html @@ -0,0 +1,159 @@ + + + + + + + + windows.utils.pythonutils — PythonForWindows 0.3 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for windows.utils.pythonutils

+"""utils fonctions non windows-related"""
+import ctypes
+import _ctypes
+from windows.generated_def import Flag, LPCSTR, LPWSTR
+
+
+def buffer(size): # Test
+    buf = ctypes.create_string_buffer(size)
+    buf.size = size
+    buf.address = ctypes.addressof(buf)
+
+    class ImprovedCtypesBufferImpl(ctypes.Array):
+        _length_ = size
+        _type_ = ctypes.c_char
+        def lol(self):
+            return "lol"
+
+        def as_string(self):
+            return ctypes.cast(self, LPCSTR).value
+
+        def as_wstring(self):
+            return ctypes.cast(self, LPWSTR).value
+
+    return ImprovedCtypesBufferImpl()
+
+
+def fixedpropety(f):
+    cache_name = "_" + f.__name__
+
+    def prop(self):
+        try:
+            return getattr(self, cache_name)
+        except AttributeError:
+            setattr(self, cache_name, f(self))
+            return getattr(self, cache_name)
+    return property(prop, doc=f.__doc__)
+
+
+# type replacement based on name
+def transform_ctypes_fields(struct, replacement):
+    return [(name, replacement.get(name, type)) for name, type in struct._fields_]
+
+
+def print_ctypes_struct(struct, name="", ident=0, hexa=False):
+    if isinstance(struct, _ctypes._Pointer):
+        if ctypes.cast(struct, ctypes.c_void_p).value is None:
+            print("{0} -> NULL".format(name))
+            return
+        return print_ctypes_struct(struct[0], name + "<deref>", hexa=hexa)
+
+    if not hasattr(struct, "_fields_"):
+        value = struct
+        if hasattr(struct, "value"):
+            value = struct.value
+
+        if isinstance(value, basestring):
+            value = repr(value)
+        if hexa and not isinstance(value, Flag):
+            try:
+                print("{0} -> {1}".format(name, hex(value)))
+                return
+            except TypeError:
+                pass
+        print("{0} -> {1}".format(name, value))
+        return
+
+    for fname, ftype in struct._fields_:
+        try:
+            value = getattr(struct, fname)
+        except Exception as e:
+            print("Error while printing <{0}> : {1}".format(fname, e))
+            continue
+        print_ctypes_struct(value, "{0}.{1}".format(name, fname), hexa=hexa)
+
+
+
[docs]def sprint(struct, name="struct", hexa=True): + """Print recursively the content of a :mod:`ctypes` structure"""
+ return print_ctypes_struct(struct, name=name, hexa=hexa) +
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/windows/utils/winutils.html b/docs/build/html/_modules/windows/utils/winutils.html index b1f2765..645c901 100644 --- a/docs/build/html/_modules/windows/utils/winutils.html +++ b/docs/build/html/_modules/windows/utils/winutils.html @@ -1,33 +1,22 @@ + - + - windows.utils.winutils — PythonForWindows 0.3 documentation - - - + + - - + + return os.fdopen(fd, mode, 0)
[docs]def get_handle_from_file(f): - """Get the ``Windows`` HANDLE of a python :class:`file`""" - return msvcrt.get_osfhandle(f.fileno())
+ """Get the ``Windows`` HANDLE of a python :class:`file`""" + return msvcrt.get_osfhandle(f.fileno())
[docs]def create_console(): """Create a new console displaying STDOUT. Useful in injection of GUI process""" winproxy.AllocConsole() - stdout_handle = winproxy.GetStdHandle(windef.STD_OUTPUT_HANDLE) + stdout_handle = winproxy.GetStdHandle(gdef.STD_OUTPUT_HANDLE) console_stdout = create_file_from_handle(stdout_handle, "w") sys.stdout = console_stdout - stdin_handle = winproxy.GetStdHandle(windef.STD_INPUT_HANDLE) + stdin_handle = winproxy.GetStdHandle(gdef.STD_INPUT_HANDLE) console_stdin = create_file_from_handle(stdin_handle, "r+") sys.stdin = console_stdin - stderr_handle = winproxy.GetStdHandle(windef.STD_ERROR_HANDLE) - console_stderr = create_file_from_handle(stderr_handle, "w") - sys.stderr = console_stderr
+ stderr_handle = winproxy.GetStdHandle(gdef.STD_ERROR_HANDLE) + console_stderr = create_file_from_handle(stderr_handle, "w") + sys.stderr = console_stderr
[docs]def create_process(path, args=None, dwCreationFlags=0, show_windows=True): @@ -140,8 +131,8 @@ dbgprint("CreateProcessA new process handle {:#x}".format(proc_info.hProcess), "HANDLE") dbgprint("CreateProcessA new thread handle {:#x}".format(proc_info.hThread), "HANDLE") dbgprint("Automatic close of thread handle {:#x}".format(proc_info.hThread), "HANDLE") - windows.winproxy.CloseHandle(proc_info.hThread) # Give access to a WinThread in addition of the WinProcess ? - return windows.winobject.process.WinProcess(pid=proc_info.dwProcessId, handle=proc_info.hProcess)
+ windows.winproxy.CloseHandle(proc_info.hThread) # Give access to a WinThread in addition of the WinProcess ? + return windows.winobject.process.WinProcess(pid=proc_info.dwProcessId, handle=proc_info.hProcess) def lookup_privilege_value(privilege_name): @@ -178,9 +169,9 @@ tp.Privileges[0].Attributes = 0 winproxy.AdjustTokenPrivileges(hToken, False, byref(tp), sizeof(TOKEN_PRIVILEGES)) winproxy.CloseHandle(hToken) - if winproxy.GetLastError() == windef.ERROR_NOT_ALL_ASSIGNED: - raise ValueError("Failed to get privilege {0}".format(lpszPrivilege)) - return True + if winproxy.GetLastError() == gdef.ERROR_NOT_ALL_ASSIGNED: + raise ValueError("Failed to get privilege {0}".format(lpszPrivilege)) + return True
[docs]def check_is_elevated(): @@ -191,8 +182,8 @@ winproxy.OpenProcessToken(winproxy.GetCurrentProcess(), TOKEN_ALL_ACCESS, byref(hToken)) winproxy.GetTokenInformation(hToken, TokenElevation, byref(elevation), sizeof(elevation), byref(cbsize)) - winproxy.CloseHandle(hToken) - return elevation.TokenIsElevated
+ winproxy.CloseHandle(hToken) + return elevation.TokenIsElevated
[docs]def check_debug(): @@ -216,17 +207,33 @@ if "DEBUG=NOUMEX" not in control: pass # print "[*] Warning noumex not set!" - # print "> bcdedit /set noumex on" - return True
+ # print "> bcdedit /set noumex on" + return True +UNIX_EPOCH = datetime.datetime(1970, 1, 1, 0, 0) +WINDOWS_EPOCH = datetime.datetime(1601, 1, 1, 0, 0) + +WIN_TO_UNIX_EPOCH_SECOND = int((UNIX_EPOCH - WINDOWS_EPOCH).total_seconds()) +WIN_TICK_PER_SECOND_INT = 10**7 +WIN_TICK_PER_SECOND_FLOAT = 10.0**7 +WIN_TO_UNIX_EPOCH_WIN_TICKS = WIN_TO_UNIX_EPOCH_SECOND * WIN_TICK_PER_SECOND_INT + +# TODO: look in python stblib how filetime -> unix timestamp translation is down (os.stat code ?) + +def unix_timestamp_from_filetime(filetime): + # Round the filetime + round_win_ticks = ((filetime / 10) + int(round((filetime % 10) / 10.0))) * 10 + return round((round_win_ticks - WIN_TO_UNIX_EPOCH_WIN_TICKS) / WIN_TICK_PER_SECOND_FLOAT, 7) def datetime_from_filetime(filetime): """return a :class:`datetime.datetime` from a ``windows`` FILETIME int""" - return datetime.datetime(1601,1,1) + datetime.timedelta(microseconds=filetime / 10) + # Manual non-approx rounding as filetime will not have a perfect representation as Python float + round_microsecond = (filetime / 10) + int(round((filetime % 10) / 10.0)) + return WINDOWS_EPOCH + datetime.timedelta(microseconds=round_microsecond) def filetime_from_datetime(dtime): """Return the FILETIME value from a :class:`datetime.datetime` in a python :class:`int`""" - return int((dtime - datetime.datetime(1601,1,1)).total_seconds() * 1000) * 10000 + return int((dtime - WINDOWS_EPOCH).total_seconds()) * WIN_TICK_PER_SECOND_INT class FixedInteractiveConsole(code.InteractiveConsole): @@ -239,8 +246,8 @@ """Pop a console with an InterativeConsole""" if locs is None: locs = globals() - create_console() - FixedInteractiveConsole(locs).interact() + create_console() + FixedInteractiveConsole(locs).interact() def get_kernel_modules(): if windows.current_process.is_wow_64: @@ -263,31 +270,141 @@ return list(modules) +# Split winutils.py ? +ntqueryinformationfile_info_structs = { + gdef.FileAccessInformation: gdef.FILE_ACCESS_INFORMATION, + gdef.FileAlignmentInformation: gdef.FILE_ALIGNMENT_INFORMATION, + gdef.FileAllInformation: gdef.FILE_ALL_INFORMATION, + gdef.FileAttributeTagInformation: gdef.FILE_ATTRIBUTE_TAG_INFORMATION, + gdef.FileBasicInformation: gdef.FILE_BASIC_INFORMATION, + gdef.FileEaInformation: gdef.FILE_EA_INFORMATION , + gdef.FileInternalInformation: gdef.FILE_INTERNAL_INFORMATION, + gdef.FileIoPriorityHintInformation: gdef.FILE_IO_PRIORITY_HINT_INFORMATION, + gdef.FileModeInformation: gdef.FILE_MODE_INFORMATION, + gdef.FileNetworkOpenInformation: gdef.FILE_NETWORK_OPEN_INFORMATION, + gdef.FileNameInformation: gdef.FILE_NAME_INFORMATION, + gdef.FilePositionInformation: gdef.FILE_POSITION_INFORMATION, + gdef.FileStandardInformation: gdef.FILE_STANDARD_INFORMATION, + gdef.FileIsRemoteDeviceInformation: gdef.FILE_IS_REMOTE_DEVICE_INFORMATION, +} + +def query_file_information(file_or_handle, file_info_class): + if isinstance(file_or_handle, file): + file_or_handle = get_handle_from_file(file_or_handle) + handle = file_or_handle + io_status = gdef.IO_STATUS_BLOCK() + info = ntqueryinformationfile_info_structs[file_info_class]() + # Do helper for 'is_pointer' / get pointed_size & co ? (useful for winproxy) + pinfo = ctypes.pointer(info) + try: + windows.winproxy.NtQueryInformationFile(handle, io_status, pinfo, ctypes.sizeof(info), FileInformationClass=file_info_class) + except Exception as e: + if not (e.winerror & 0xffffffff) == gdef.STATUS_BUFFER_OVERFLOW: + raise + # STATUS_BUFFER_OVERFLOW -> Guess we have a FILE_NAME_INFORMATION somewhere that need a bigger buffer + if file_info_class == gdef.FileNameInformation: + file_name_length = pinfo[0].FileNameLength + elif file_info_class == gdef.FileAllInformation: + file_name_length = pinfo[0].NameInformation.FileNameLength + else: + raise + full_size = ctypes.sizeof(info) + file_name_length # We add a little too much size for the sake of simplicity + buffer = ctypes.c_buffer(full_size) + windows.winproxy.NtQueryInformationFile(handle, io_status, buffer, full_size, FileInformationClass=file_info_class) + pinfo = ctypes.cast(buffer, ctypes.POINTER(ntqueryinformationfile_info_structs[file_info_class])) + info = pinfo[0] + return info + + +ntqueryvolumeinformationfile_info_structs = { + gdef.FileFsAttributeInformation: gdef.FILE_FS_ATTRIBUTE_INFORMATION, + gdef.FileFsControlInformation: gdef.FILE_FS_CONTROL_INFORMATION, + gdef.FileFsDeviceInformation: gdef.FILE_FS_DEVICE_INFORMATION, + gdef.FileFsDriverPathInformation: gdef.FILE_FS_DRIVER_PATH_INFORMATION, + gdef.FileFsFullSizeInformation: gdef.FILE_FS_FULL_SIZE_INFORMATION, + gdef.FileFsObjectIdInformation: gdef.FILE_FS_OBJECTID_INFORMATION, + gdef.FileFsSizeInformation: gdef.FILE_FS_SIZE_INFORMATION, + gdef.FileFsVolumeInformation: gdef.FILE_FS_VOLUME_INFORMATION, + gdef.FileFsSectorSizeInformation: gdef.FILE_FS_SECTOR_SIZE_INFORMATION, +} + + +# TODO: FileFsDriverPathInformation +# TODO: Extended FILE_FS_VOLUME_INFORMATION that can read the real value of 'VolumeLabel' +def query_volume_information(file_or_handle,volume_info_class): + if isinstance(file_or_handle, file): + file_or_handle = get_handle_from_file(file_or_handle) + handle = file_or_handle + io_status = gdef.IO_STATUS_BLOCK() + info = ntqueryvolumeinformationfile_info_structs[volume_info_class]() + # Do helper for 'is_pointer' / get pointed_size & co ? (useful for winproxy) + pinfo = ctypes.pointer(info) + try: + windows.winproxy.NtQueryVolumeInformationFile(handle, io_status, pinfo, ctypes.sizeof(info), FsInformationClass=volume_info_class) + except WindowsError as e: + # import pdb;pdb.set_trace() + if not (e.winerror & 0xffffffff) == gdef.STATUS_BUFFER_OVERFLOW: + raise + if volume_info_class == gdef.FileFsAttributeInformation: + file_name_length = pinfo[0].FileSystemNameLength + elif volume_info_class == gdef.FileFsVolumeInformation: + file_name_length = pinfo[0].VolumeLabelLength + else: + raise + full_size = ctypes.sizeof(info) + file_name_length # We add a little too much size for the sake of simplicity + buffer = ctypes.c_buffer(full_size) + windows.winproxy.NtQueryVolumeInformationFile(handle, io_status, buffer, full_size, FsInformationClass=volume_info_class) + pinfo = ctypes.cast(buffer, ctypes.POINTER(ntqueryvolumeinformationfile_info_structs[volume_info_class])) + info = pinfo[0] + return info + return info + # String stuff def ntstatus(code): return windows.generated_def.ntstatus.NtStatusException(code) -def get_long_path(path): - """Return the long path form for ``path`` +
[docs]def get_long_path(path): + """Return the long path form for ``path``. - :returns: :class:`str` + :raise: :class:`~windows.winproxy.Kernel32Error` if ``path`` does not exists + :param path: a valid Windows path + :type path: :class:`str` | :obj:`unicode` + :returns: :class:`str` | :obj:`unicode` -- same type as ``path`` parameter """ size = 0x1000 - buffer = ctypes.c_buffer(size) - rsize = winproxy.GetLongPathNameA(path, buffer, size) + if isinstance(path, unicode): + buffer = ctypes.create_unicode_buffer(size) + rsize = winproxy.GetLongPathNameW(path, buffer, size) + else: + buffer = ctypes.c_buffer(size) + rsize = winproxy.GetLongPathNameA(path, buffer, size)
return buffer[:rsize] -def get_short_path(path): + +
[docs]def get_short_path(path): """Return the short path form for ``path`` - :returns: :class:`str` + :raise: :class:`~windows.winproxy.Kernel32Error` if ``path`` does not exists + :param path: a valid Windows path + :type path: :class:`str` | :obj:`unicode` + :returns: :class:`str` | :obj:`unicode` -- same type as ``path`` parameter """ size = 0x1000 - buffer = ctypes.c_buffer(size) - rsize = winproxy.GetShortPathNameA(path, buffer, size) + if isinstance(path, unicode): + buffer = ctypes.create_unicode_buffer(size) + rsize = winproxy.GetShortPathNameW(path, buffer, size) + else: + buffer = ctypes.c_buffer(size) + rsize = winproxy.GetShortPathNameA(path, buffer, size)
return buffer[:rsize] +def dospath_to_ntpath(dospath): + ustring = gdef.UNICODE_STRING() + windows.winproxy.RtlDosPathNameToNtPathName_U(dospath, ustring, None, None) + return ustring.str + + def get_shared_mapping(name, size=0x1000): # TODO: real code h = windows.winproxy.CreateFileMappingA(INVALID_HANDLE_VALUE, dwMaximumSizeLow=size, lpName=name) @@ -334,7 +451,7 @@ """ A context manager usable like `VirtualProtect` that will restore the old protection at exit :: - with utils.VirtualProtected(IATentry.addr, ctypes.sizeof(PVOID), windef.PAGE_EXECUTE_READWRITE): + with utils.VirtualProtected(IATentry.addr, ctypes.sizeof(PVOID), gdef.PAGE_EXECUTE_READWRITE): IATentry.value = 0x42424242 """ def __init__(self, addr, size, new_protect): @@ -350,8 +467,8 @@ return self def __exit__(self, exc_type, exc_value, traceback): - winproxy.VirtualProtect(self.addr, self.size, self.old_protect.value, ctypes.byref(self.old_protect)) - return False + winproxy.VirtualProtect(self.addr, self.size, self.old_protect.value, ctypes.byref(self.old_protect)) + return False
[docs]class DisableWow64FsRedirection(object): @@ -373,8 +490,8 @@ def __exit__(self, exc_type, exc_value, traceback): if windows.current_process.bitness == 64: return False - winproxy.Wow64RevertWow64FsRedirection(self.OldValue) - return False
+ winproxy.Wow64RevertWow64FsRedirection(self.OldValue) + return False @@ -384,12 +501,14 @@
@@ -411,7 +530,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/winobject/apisetmap.html b/docs/build/html/_modules/windows/winobject/apisetmap.html new file mode 100644 index 0000000..da738fc --- /dev/null +++ b/docs/build/html/_modules/windows/winobject/apisetmap.html @@ -0,0 +1,260 @@ + + + + + + + + windows.winobject.apisetmap — PythonForWindows 0.3 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for windows.winobject.apisetmap

+import windows
+import windows.generated_def as gdef
+
+from windows import utils
+
+
+def get_api_set_map_for_current_process(base):
+    base = windows.current_process.peb.ApiSetMap
+    version = windows.current_process.read_dword(base)
+    if version not in API_SET_MAP_BY_VERSION:
+        raise NotImplementedError("ApiSetMap version <{0}> not implemented, please contact me, I need a sample to implement it ;)")
+    return API_SET_MAP_BY_VERSION[version](base)
+
+
+
[docs]class ApiSetMap(object): + """The base class for the ApiSeMap + (see `Runtime DLL name resolution: ApiSetSchema <https://blog.quarkslab.com/runtime-dll-name-resolution-apisetschema-part-ii.html>`_) + """ + version = None #: The version of the ApiSetMap + + def __init__(self, base): + self.base = base + self.target = windows.current_process + + # helpers + def read_apiset_wstring(self, offset, length): + return self.target.read_memory(self.base + offset, length).decode("utf-16") + + # Low-level version-dependent parsing function + def entries_array(self): + raise NotImplementedError("Should be implemented by subclasses") + + def get_entry_name(self, entry): + raise NotImplementedError("Should be implemented by subclasses") + + def get_entry_name_basicimpl(self, entry): + return self.read_apiset_wstring(entry.NameOffset, entry.NameLength) + + def values_for_entry(self, entry): + raise NotImplementedError("Should be implemented by subclasses") + + @utils.fixedpropety + def apisetmap_dict(self): + """The apisetmap dll-mapping content extracted from memory as a :class:`dict` + + ``key -> value example``:: + + u'ext-ms-win-advapi32-encryptedfile-l1-1-1' -> u'advapi32.dll' + """ + res = {} + for entry in self.entries_array(): + values = self.values_for_entry(entry) + if not values: + final_value = None + else: + final_value = values[-1] + res[self.get_entry_name(entry)] = final_value + return res + + @utils.fixedpropety + def resolution_dict(self): + """The :class:`dict` based on :obj:`apisetmap_dict` with only the part checked by ``Windows``. + + ``Windows`` does not care about what is after the last ``-`` + + ``key -> value example``:: + + u'ext-ms-win-advapi32-encryptedfile-l1-1-' -> u'advapi32.dll' + + """ + res = {} + for name, resolved_name in self.apisetmap_dict.items(): + # ApiSetResolveToHost does not care about last version + extension + # It remove everything after the last '-' + + # Possible to have no '-' ? + try: + cutname = name[:name.rindex("-") + 1] + except ValueError as e: + cutname = name + res[cutname] = resolved_name + return res + +
[docs] def resolve(self, dllname): + """The method used to resolve a DLL name using the ApiSetMap. + The behavior should match the non-exported function ``ntdll!ApiSetResolveToHost`` + """ + try: + cutname = dllname[:dllname.rindex("-") + 1] + except ValueError as e: + return None
+ return self.resolution_dict[cutname] + + + +
[docs]class ApiSetMapVersion2(ApiSetMap): + """Represent an ApiSetMap version-2""" + version = 2 #: The version of the ApiSetMap + + def namespace(self): + return gdef.API_SET_NAMESPACE_ARRAY_V2.from_address(self.base) + + def entries_array(self): + namespace = self.namespace() + array_addr = ctypes.addressof(namespace.Array) + array_size = namespace.Count + return (gdef.API_SET_NAMESPACE_ENTRY_V2 * array_size).from_address(array_addr) + + get_entry_name = ApiSetMap.get_entry_name_basicimpl + + def values_for_entry(self, entry): + values_array_v2 = (gdef.API_SET_VALUE_ARRAY_V2).from_address(self.base + entry.DataOffset) + array_size = values_array_v2.Count + array_addr = ctypes.addressof(values_array_v2.Array) + values_array = (gdef.API_SET_VALUE_ENTRY_V2 * array_size).from_address(array_addr) + res = [] + for value in values_array: + if value.ValueLength: + v = self.read_apiset_wstring(value.ValueOffset, value.ValueLength) + res.append(v)
+ return res + + +
[docs]class ApiSetMapVersion4(ApiSetMap): + """Represent an ApiSetMap version-4""" + version = 4 #: The version of the ApiSetMap + + def namespace(self): + return gdef.API_SET_NAMESPACE_ARRAY_V4.from_address(self.base) + + def entries_array(self): + namespace = self.namespace() + array_addr = ctypes.addressof(namespace.Array) + array_size = namespace.Count + return (gdef.API_SET_NAMESPACE_ENTRY_V4 * array_size).from_address(array_addr) + + get_entry_name = ApiSetMap.get_entry_name_basicimpl + + def values_for_entry(self, entry): + values_array_v2 = (gdef.API_SET_VALUE_ARRAY_V4).from_address(self.base + entry.DataOffset) + array_size = values_array_v2.Count + array_addr = ctypes.addressof(values_array_v2.Array) + values_array = (gdef.API_SET_VALUE_ENTRY * array_size).from_address(array_addr) + res = [] + for value in values_array: + if value.ValueLength: + v = self.read_apiset_wstring(value.ValueOffset, value.ValueLength) + res.append(v)
+ return res + +
[docs]class ApiSetMapVersion6(ApiSetMap): + """Represent an ApiSetMap version-6""" + version = 6 #: The version of the ApiSetMap + + def namespace(self): + return gdef.API_SET_NAMESPACE_V6.from_address(self.base) + + get_entry_name = ApiSetMap.get_entry_name_basicimpl + + def entries_array(self): + namespace = self.namespace() + array_offset = namespace.EntryOffset + array_size = namespace.Count + return (gdef.API_SET_NAMESPACE_ENTRY_V6 * array_size).from_address(self.base + array_offset) + + def values_for_entry(self, entry): + values_array = (gdef.API_SET_VALUE_ENTRY * entry.ValueCount).from_address(self.base + entry.ValueOffset) + res = [] + for value in values_array: + if value.ValueLength: + v = self.read_apiset_wstring(value.ValueOffset, value.ValueLength) + res.append(v)
+ return res + +API_SET_MAP_BY_VERSION = { + 2: ApiSetMapVersion2, + 4: ApiSetMapVersion4, + 6: ApiSetMapVersion6, +} +
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/windows/winobject/exception.html b/docs/build/html/_modules/windows/winobject/exception.html index 7000283..76257ba 100644 --- a/docs/build/html/_modules/windows/winobject/exception.html +++ b/docs/build/html/_modules/windows/winobject/exception.html @@ -1,33 +1,22 @@ + - + - windows.winobject.exception — PythonForWindows 0.3 documentation - - - + + - - + + """The fields of the structure"""
[docs]class EEXCEPTION_RECORD32(EEXCEPTION_RECORDBase, EXCEPTION_RECORD32): """Enhanced exception record (32bits)""" - fields = [f[0] for f in EXCEPTION_RECORD32._fields_] - """The fields of the structure"""
+ fields = [f[0] for f in EXCEPTION_RECORD32._fields_] + """The fields of the structure"""
[docs]class EEXCEPTION_RECORD64(EEXCEPTION_RECORDBase, EXCEPTION_RECORD64): """Enhanced exception record (64bits)""" - fields = [f[0] for f in EXCEPTION_RECORD64._fields_] - """The fields of the structure"""
+ fields = [f[0] for f in EXCEPTION_RECORD64._fields_] + """The fields of the structure"""
[docs]class EEXCEPTION_DEBUG_INFO32(ctypes.Structure): """Enhanced Debug info""" _fields_ = windows.utils.transform_ctypes_fields(EXCEPTION_DEBUG_INFO, {"ExceptionRecord": EEXCEPTION_RECORD32}) - fields = [f[0] for f in _fields_] - """The fields of the structure"""
+ fields = [f[0] for f in _fields_] + """The fields of the structure"""
[docs]class EEXCEPTION_DEBUG_INFO64(ctypes.Structure): """Enhanced Debug info""" _fields_ = windows.utils.transform_ctypes_fields(EXCEPTION_DEBUG_INFO, {"ExceptionRecord": EEXCEPTION_RECORD64}) - fields = [f[0] for f in _fields_] - """The fields of the structure"""
+ fields = [f[0] for f in _fields_] + """The fields of the structure"""
[docs]class EEflags(ctypes.Structure): @@ -197,8 +186,8 @@ raw = property(get_raw, set_raw) """Raw value of the eflags - :type: :class:`int` - """
+ :type: :class:`int` + """
[docs]class EDr7(ctypes.Structure): @@ -226,8 +215,8 @@ ("LEN3", DWORD, 2), ] - fields = [f[0] for f in _fields_] - """The fields of the structure"""
+ fields = [f[0] for f in _fields_] + """The fields of the structure""" class ECONTEXTBase(object): """DAT CONTEXT""" @@ -308,16 +297,16 @@ pc_reg = 'Eip' sp_reg = 'Esp' func_result_reg = 'Eax' - fields = [f[0] for f in CONTEXT32._fields_] - """The fields of the structure""" + fields = [f[0] for f in CONTEXT32._fields_] + """The fields of the structure"""
[docs]class ECONTEXTWOW64(ECONTEXTBase, WOW64_CONTEXT): default_dump = ('Eip', 'Esp', 'Eax', 'Ebx', 'Ecx', 'Edx', 'Ebp', 'Edi', 'Esi', 'EFlags') pc_reg = 'Eip' sp_reg = 'Esp' func_result_reg = 'Eax' - fields = [f[0] for f in WOW64_CONTEXT._fields_] - """The fields of the structure"""
+ fields = [f[0] for f in WOW64_CONTEXT._fields_] + """The fields of the structure"""
[docs]class ECONTEXT64(ECONTEXTBase, CONTEXT64): @@ -329,8 +318,8 @@ fields = [f[0] for f in CONTEXT64._fields_] """The fields of the structure""" - @classmethod -
[docs] def new_aligned(cls): +
[docs] @classmethod + def new_aligned(cls): """Return a new :class:`ECONTEXT64` aligned on 16 bits temporary workaround or horrible hack ? choose your side @@ -345,8 +334,8 @@ struct_address += 8 self = cls.from_address(struct_address) # Keep the raw buffer alive - self._buffer = buffer - return self
+ self._buffer = buffer
+ return self def bitness(): """Return 32 or 64""" @@ -372,8 +361,8 @@ print("Dumping Exception: ") print(" ExceptionCode = {0} at {1}".format(record.ExceptionCode, hex(record.ExceptionAddress))) regs = self.ContextRecord[0].regs() - for name, value in regs: - print(" {0} -> {1}".format(name, hex(value))) + for name, value in regs: + print(" {0} -> {1}".format(name, hex(value)))
[docs]class VectoredException(object): @@ -393,8 +382,8 @@ except BaseException as e: import traceback print("Ignored Python Exception in Vectored Exception: {0}".format(e)) - traceback.print_exc() - return windef.EXCEPTION_CONTINUE_SEARCH
+ traceback.print_exc() + return windef.EXCEPTION_CONTINUE_SEARCH class VectoredExceptionHandler(object): @@ -432,12 +421,14 @@
@@ -459,7 +450,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/winobject/handle.html b/docs/build/html/_modules/windows/winobject/handle.html index eddd827..2319d52 100644 --- a/docs/build/html/_modules/windows/winobject/handle.html +++ b/docs/build/html/_modules/windows/winobject/handle.html @@ -1,33 +1,22 @@ + - + - windows.winobject.handle — PythonForWindows 0.3 documentation - - - + + - - + + if hasattr(self, "_local_handle"): + return winproxy.CloseHandle(self._local_handle) def enumerate_handles(): @@ -196,12 +183,14 @@
@@ -223,7 +212,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/winobject/network.html b/docs/build/html/_modules/windows/winobject/network.html index d96bcfa..5766f60 100644 --- a/docs/build/html/_modules/windows/winobject/network.html +++ b/docs/build/html/_modules/windows/winobject/network.html @@ -1,33 +1,22 @@ + - + - windows.winobject.network — PythonForWindows 0.3 documentation - - - + + - - + + closing.dwRemotePort = self.dwRemotePort + return winproxy.SetTcpEntry(ctypes.byref(closing)) def __repr__(self): if not self.established: - return "<TCP IPV4 Listening socket on {0}:{1}>".format(self.local_addr, self.local_port) - return "<TCP IPV4 Connection {s.local_addr}:{s.local_port} -> {s.remote_addr}:{s.remote_port}>".format(s=self) + return "<TCP IPV4 Listening socket on {0}:{1}>".format(self.local_addr, self.local_port) + return "<TCP IPV4 Connection {s.local_addr}:{s.local_port} -> {s.remote_addr}:{s.remote_port}>".format(s=self)
[docs]class TCP6Connection(MIB_TCP6ROW_OWNER_PID): @@ -190,8 +179,8 @@ def __repr__(self): if not self.established: - return "<TCP IPV6 Listening socket on {0}:{1}>".format(self.local_addr, self.local_port) - return "<TCP IPV6 Connection {0}:{1} -> {2}:{3}>".format(self.local_addr, self.local_port, self.remote_addr, self.remote_port)
+ return "<TCP IPV6 Listening socket on {0}:{1}>".format(self.local_addr, self.local_port) + return "<TCP IPV6 Connection {0}:{1} -> {2}:{3}>".format(self.local_addr, self.local_port, self.remote_addr, self.remote_port) def get_MIB_TCPTABLE_OWNER_PID_from_buffer(buffer): @@ -287,8 +276,8 @@ def enabled_for_profile_type(self, profile_type): enabled = gdef.VARIANT_BOOL() - self.get_FirewallEnabled(profile_type, enabled) - return enabled.value + self.get_FirewallEnabled(profile_type, enabled) + return enabled.value @@ -443,8 +432,8 @@ self.get_RemotePorts(icmp_type_and_code) return icmp_type_and_code.value - def __repr__(self): - return u'<{0} "{1}">'.format(type(self).__name__, self.name).encode("ascii", errors='backslashreplace') + def __repr__(self): + return u'<{0} "{1}">'.format(type(self).__name__, self.name).encode("ascii", errors='backslashreplace')
[docs]class Network(object): NetFwPolicy2 = windows.com.IID.from_string("E2B3C97F-6AE1-41AC-817A-F6F92166D7DD") @@ -493,8 +482,8 @@ ipv6 = property(lambda self: self._get_tcp_ipv6_sockets()) """List of TCP IPv6 socket (connection and listening) - :type: [:class:`TCP6Connection`] - """
+ :type: [:class:`TCP6Connection`] + """ @@ -504,12 +493,14 @@
@@ -531,7 +522,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/winobject/process.html b/docs/build/html/_modules/windows/winobject/process.html index 7f40069..e251301 100644 --- a/docs/build/html/_modules/windows/winobject/process.html +++ b/docs/build/html/_modules/windows/winobject/process.html @@ -1,33 +1,22 @@ + - + - windows.winobject.process — PythonForWindows 0.3 documentation - - - + + - - + + return windows.syswow64.NtSetContextThread_32_to_64(self.handle, ctypes.byref(context)) @property @@ -266,16 +256,16 @@ return res.TebBaseAddress
[docs] def exit(self, code=0): - """Exit the thread""" - return winproxy.TerminateThread(self.handle, code)
+ """Exit the thread""" + return winproxy.TerminateThread(self.handle, code)
[docs] def resume(self): - """Resume the thread""" - return winproxy.ResumeThread(self.handle)
+ """Resume the thread""" + return winproxy.ResumeThread(self.handle)
[docs] def suspend(self): - """Suspend the thread""" - return winproxy.SuspendThread(self.handle)
+ """Suspend the thread""" + return winproxy.SuspendThread(self.handle) def _get_handle(self): return winproxy.OpenThread(dwThreadId=self.tid) @@ -331,8 +321,8 @@ if winproxy.is_implemented(winproxy.GetThreadId): _get_thread_id = _get_thread_id_by_api - else: - _get_thread_id = _get_thread_id_manual + else: + _get_thread_id = _get_thread_id_manual @@ -370,8 +360,8 @@ :type: :class:`int` """ res = DWORD() - winproxy.GetExitCodeThread(self.handle, byref(res)) - return res.value + winproxy.GetExitCodeThread(self.handle, byref(res)) + return res.value class Process(AutoHandle): @@ -478,20 +468,19 @@ finally: self.virtual_protect(addr, size, old_protect.value, old_protect) - def virtual_protect(self, addr, size, protect, old_protect): + def virtual_protect(self, addr, size, protect, old_protect=None): """Change the access right of one or more page of the process""" if windows.current_process.bitness == 32 and self.bitness == 64: - #addr = (addr >> 12) << 12 - #addr = ULONG64(addr) if size & 0x0fff: size = ((size >> 12) + 1) << 12 - #ssize = ULONG(size) - old_protect = ctypes.addressof(old_protect) + if old_protect is None: + old_protect = gdef.DWORD() + xold_protect = ctypes.addressof(old_protect) xaddr = ULONG64(addr) addr = ctypes.addressof(xaddr) xsize = ULONG(size) size = ctypes.addressof(xsize) - return windows.syswow64.NtProtectVirtualMemory_32_to_64(self.handle, addr, size, protect, old_protect) + return windows.syswow64.NtProtectVirtualMemory_32_to_64(self.handle, addr, size, protect, xold_protect) else: winproxy.VirtualProtectEx(self.handle, addr, size, protect, old_protect) @@ -509,7 +498,7 @@ def query_memory(self, addr): """Query the memory informations about page at ``addr`` - :rtype: :class:`~windows.generated_def.MEMORY_BASIC_INFORMATION` + :rtype: :class:`~windows.generated_def.winstructs.MEMORY_BASIC_INFORMATION` """ if windows.current_process.bitness == 32 and self.bitness == 64: res = MEMORY_BASIC_INFORMATION64() @@ -530,7 +519,7 @@ def memory_state(self): """Yield the memory information for the whole address space of the process - :yield: :class:`~windows.generated_def.MEMORY_BASIC_INFORMATION` + :yield: :class:`~windows.generated_def.winstructs.MEMORY_BASIC_INFORMATION` """ addr = 0 res = [] @@ -601,7 +590,7 @@ def get_mapped_filename(self, addr): """The filename mapped at address ``addr`` or ``None`` - :rtype: :class:`str` or ``None`` + :rtype: :class:`unicode` or ``None`` """ buffer_size = 0x1000 buffer = ctypes.c_buffer(buffer_size) @@ -611,18 +600,20 @@ try: windows.syswow64.NtQueryVirtualMemory_32_to_64(self.handle, addr, MemorySectionName, buffer, buffer_size, target_size) except NtStatusException as e: - if e.code not in [STATUS_FILE_INVALID, STATUS_INVALID_ADDRESS, STATUS_TRANSACTION_NOT_ACTIVE]: + if e.code not in (STATUS_FILE_INVALID, STATUS_INVALID_ADDRESS): raise return None - remote_winstring = rctypes.transform_type_to_remote64bits(WinUnicodeString) + remote_winstring = rctypes.transform_type_to_remote64bits(gdef.LSA_UNICODE_STRING) mapped_filename = remote_winstring(ctypes.addressof(buffer), windows.current_process) return mapped_filename.str try: - size = winproxy.GetMappedFileNameA(self.handle, addr, buffer, buffer_size) + size = winproxy.GetMappedFileNameW(self.handle, addr, buffer, buffer_size) except winproxy.Kernel32Error as e: + if e.winerror not in (gdef.ERROR_UNEXP_NET_ERR, gdef.ERROR_FILE_INVALID): + raise # Raise if error type is not expected: detect mapped aborted transaction return None - return buffer[:size] + return buffer[: size * 2].decode("utf16") def read_byte(self, addr): """Read a ``CHAR`` at ``addr``""" @@ -731,6 +722,32 @@ user = (UserTime.dwHighDateTime << 32) + UserTime.dwLowDateTime return TimeInfo(creation, exit, kernel, user) + PRIORITY_CLASS_MAPPER = gdef.FlagMapper( + ABOVE_NORMAL_PRIORITY_CLASS, + BELOW_NORMAL_PRIORITY_CLASS, + HIGH_PRIORITY_CLASS, + IDLE_PRIORITY_CLASS, + NORMAL_PRIORITY_CLASS, + PROCESS_MODE_BACKGROUND_BEGIN, + PROCESS_MODE_BACKGROUND_END, + REALTIME_PRIORITY_CLASS) + + def query_info(self, information_class, data=None): + winproxy.NtQueryInformationProcess(self.handle, information_class, byref(data), sizeof(data)) + return data + + def set_info(self, information_class, data): + winproxy.NtSetInformationProcess(self.handle, information_class, byref(data), sizeof(data)) + + def get_priority(self): + return self.PRIORITY_CLASS_MAPPER[winproxy.GetPriorityClass(self.handle)] + + def set_priority(self, priority): + return winproxy.SetPriorityClass(self.handle, priority) + + priority = property(get_priority, set_priority) + """The priority of the process""" + def open_token(self, flags=TOKEN_QUERY): token_handle = HANDLE() @@ -786,12 +803,12 @@ pass
[docs] def exit(self, code=0): - """Exit the thread""" - return winproxy.ExitThread(code)
+ """Exit the thread""" + return winproxy.ExitThread(code)
[docs] def wait(self, timeout=INFINITE): - """Raise :class:`ValueError` to prevent deadlock :D""" - raise ValueError("wait() on current thread")
+ """Raise :class:`ValueError` to prevent deadlock :D""" + raise ValueError("wait() on current thread") #def token(self): @@ -864,18 +881,18 @@ :return: The address of the allocated memory :rtype: :class:`int` - """ - return winproxy.VirtualAlloc(dwSize=size, flProtect=prot) + """ + return winproxy.VirtualAlloc(dwSize=size, flProtect=prot)
[docs] def virtual_free(self, addr): - """Free memory in the process by virtual_alloc""" - return winproxy.VirtualFree(addr)
+ """Free memory in the process by virtual_alloc""" + return winproxy.VirtualFree(addr)
[docs] def write_memory(self, addr, data): """Write data at addr""" buffertype = (c_char * len(data)).from_address(addr) - buffertype[:len(data)] = data - return True
+ buffertype[:len(data)] = data + return True
[docs] def read_memory(self, addr, size): """Read ``size`` from ``addr`` @@ -884,35 +901,35 @@ :rtype: :class:`str` """ dbgprint('Read CurrentProcess Memory', 'READMEM') - buffer = (c_char * size).from_address(addr) - return buffer[:]
+ buffer = (c_char * size).from_address(addr) + return buffer[:]
[docs] def create_thread(self, lpStartAddress, lpParameter, dwCreationFlags=0): """Create a new thread :rtype: :class:`WinThread` or :class:`DeadThread` """ - handle = winproxy.CreateThread(lpStartAddress=lpStartAddress, lpParameter=lpParameter, dwCreationFlags=dwCreationFlags) - return WinThread._from_handle(handle)
+ handle = winproxy.CreateThread(lpStartAddress=lpStartAddress, lpParameter=lpParameter, dwCreationFlags=dwCreationFlags) + return WinThread._from_handle(handle)
[docs] def load_library(self, dll_path): - """Load the library in current process""" - return winproxy.LoadLibraryA(dll_path)
+ """Load the library in current process""" + return winproxy.LoadLibraryA(dll_path)
[docs] def execute(self, code, parameter=0): """Execute native code ``code`` in the current thread. :rtype: :class:`int` the return value of the native code""" - f = windows.native_exec.create_function(code, [PVOID, PVOID]) - return f(parameter)
+ f = windows.native_exec.create_function(code, [PVOID, PVOID]) + return f(parameter)
[docs] def exit(self, code=0): - """Exit the process""" - return winproxy.ExitProcess(code)
+ """Exit the process""" + return winproxy.ExitProcess(code)
[docs] def wait(self, timeout=INFINITE): - """Raise :class:`ValueError` to prevent deadlock :D""" - raise ValueError("wait() on current thread")
+ """Raise :class:`ValueError` to prevent deadlock :D""" + raise ValueError("wait() on current thread") @utils.fixedpropety def peb_syswow(self): @@ -930,8 +947,8 @@ winproxy.OpenProcessToken(self.handle, flags, byref(token_handle)) return Token(token_handle.value) - - token = property(open_token) + + token = property(open_token)
[docs]class WinProcess(Process): """A Process on the system""" @@ -1001,20 +1018,20 @@ :return: The address of the allocated memory :rtype: :class:`int` - """ - return winproxy.VirtualAllocEx(self.handle, dwSize=size, flProtect=prot)
+ """ + return winproxy.VirtualAllocEx(self.handle, dwSize=size, flProtect=prot)
[docs] def virtual_free(self, addr): - """Free memory in the process by virtual_alloc""" - return winproxy.VirtualFreeEx(self.handle, addr)
+ """Free memory in the process by virtual_alloc""" + return winproxy.VirtualFreeEx(self.handle, addr)
[docs] def write_memory(self, addr, data): """Write `data` at `addr`""" if windows.current_process.bitness == 32 and self.bitness == 64: if not winproxy.is_implemented(winproxy.NtWow64WriteVirtualMemory64): raise ValueError("NtWow64WriteVirtualMemory64 non available in ntdll: cannot write into 64bits processus") - return winproxy.NtWow64WriteVirtualMemory64(self.handle, addr, data, len(data)) - return winproxy.WriteProcessMemory(self.handle, addr, lpBuffer=data)
+ return winproxy.NtWow64WriteVirtualMemory64(self.handle, addr, data, len(data)) + return winproxy.WriteProcessMemory(self.handle, addr, lpBuffer=data) def low_read_memory(self, addr, buffer_addr, size): if windows.current_process.bitness == 32 and self.bitness == 64: @@ -1033,8 +1050,8 @@ :rtype: :class:`str` """ buffer = ctypes.create_string_buffer(size) - self.low_read_memory(addr, ctypes.byref(buffer), size) - return buffer[:] + self.low_read_memory(addr, ctypes.byref(buffer), size) + return buffer[:] # Simple cache test # real_read = read_memory @@ -1059,8 +1076,8 @@ :returns: struct """ - self.low_read_memory(addr, ctypes.byref(struct), ctypes.sizeof(struct)) - return struct + self.low_read_memory(addr, ctypes.byref(struct), ctypes.sizeof(struct)) + return struct
[docs] def create_thread(self, addr, param): """Create a remote thread @@ -1070,27 +1087,27 @@ if windows.current_process.bitness == 32 and self.bitness == 64: thread_handle = HANDLE() windows.syswow64.NtCreateThreadEx_32_to_64(ThreadHandle=byref(thread_handle) ,ProcessHandle=self.handle, lpStartAddress=addr, lpParameter=param) - return WinThread._from_handle(thread_handle.value) - return WinThread._from_handle(winproxy.CreateRemoteThread(hProcess=self.handle, lpStartAddress=addr, lpParameter=param))
+ return WinThread._from_handle(thread_handle.value) + return WinThread._from_handle(winproxy.CreateRemoteThread(hProcess=self.handle, lpStartAddress=addr, lpParameter=param))
[docs] def load_library(self, dll_path): - """Load the library in remote process""" - return windows.injection.load_dll_in_remote_process(self, dll_path)
+ """Load the library in remote process""" + return windows.injection.load_dll_in_remote_process(self, dll_path)
[docs] def execute_python(self, pycode): """Execute Python code into the remote process. This function waits for the remote process to end and raises an exception if the remote thread raised one - """ - return injection.safe_execute_python(self, pycode)
+ """ + return injection.safe_execute_python(self, pycode)
[docs] def execute_python_unsafe(self, pycode): """Execute Python code into the remote process. :rtype: :rtype: :class:`WinThread` or :class:`DeadThread` : The thread executing the python code - """ - return injection.execute_python_code(self, pycode)
+ """ + return injection.execute_python_code(self, pycode) @utils.fixedpropety def peb_addr(self): @@ -1168,8 +1185,8 @@ return RemotePEB64(self.peb_syswow_addr, windows.syswow64.ReadSyswow64Process(self))
[docs] def exit(self, code=0): - """Exit the process""" - return winproxy.TerminateProcess(self.handle, code)
+ """Exit the process""" + return winproxy.TerminateProcess(self.handle, code) KNOW_INTEGRITY_LEVEL = [ SECURITY_MANDATORY_UNTRUSTED_RID, @@ -1180,7 +1197,7 @@ SECURITY_MANDATORY_SYSTEM_RID, SECURITY_MANDATORY_PROTECTED_PROCESS_RID] -know_integrity_level_mapper = {x:x for x in KNOW_INTEGRITY_LEVEL} +know_integrity_level_mapper = gdef.FlagMapper(*KNOW_INTEGRITY_LEVEL) # Create ProcessToken and Thread Token objects ?
[docs]class Token(AutoHandle): @@ -1198,8 +1215,8 @@ self.get_informations(TokenIntegrityLevel, buffer) sid = ctypes.cast(buffer, POINTER(TOKEN_MANDATORY_LABEL))[0].Label.Sid count = winproxy.GetSidSubAuthorityCount(sid) - integrity = winproxy.GetSidSubAuthority(sid, count[0] - 1)[0] - return know_integrity_level_mapper.get(integrity, integrity)
+ integrity = winproxy.GetSidSubAuthority(sid, count[0] - 1)[0] + return know_integrity_level_mapper[integrity]
[docs] def set_integrity(self, integrity): """Set the integrity level of a token @@ -1208,8 +1225,8 @@ """ mandatory_label = TOKEN_MANDATORY_LABEL() mandatory_label.Label.Attributes = 0x60 - mandatory_label.Label.Sid = sid.EPSID.from_string("S-1-16-{0}".format(integrity)) - self.set_informations(TokenIntegrityLevel, mandatory_label)
+ mandatory_label.Label.Sid = sid.EPSID.from_string("S-1-16-{0}".format(integrity)) + self.set_informations(TokenIntegrityLevel, mandatory_label) integrity = property(get_integrity, set_integrity) @@ -1263,40 +1280,15 @@ return cbsize.value #TODO: TEST + DOC - def set_informations(self, info_type, infos): - return winproxy.SetTokenInformation(self.handle, info_type, ctypes.byref(infos), ctypes.sizeof(infos)) + def set_informations(self, info_type, infos): + return winproxy.SetTokenInformation(self.handle, info_type, ctypes.byref(infos), ctypes.sizeof(infos)) def transform_ctypes_fields(struct, replacement): return [(name, replacement.get(name, type)) for name, type in struct._fields_] -
[docs]class WinUnicodeString(Structure): - """LSA_UNICODE_STRING with a nice `__repr__`""" - _fields_ = transform_ctypes_fields(LSA_UNICODE_STRING, {"Buffer": ctypes.c_void_p}) - fields = [f[0] for f in _fields_] - """The fields of the structure""" - - @property - def str(self): - """The python string of the LSA_UNICODE_STRING object - - :type: :class:`unicode` - """ - if not self.Length: - return "" - if getattr(self, "_target", None) is not None: #remote ctypes :D -> TRICKS OF THE YEAR - raw_data = self._target.read_memory(self.Buffer, self.Length) - return raw_data.decode("utf16") - size = self.Length / 2 - return (ctypes.c_wchar * size).from_address(self.Buffer)[:] - - def __repr__(self): - return """<{0} "{1}" at {2}>""".format(type(self).__name__, self.str, hex(id(self)))
- - -
[docs]class LoadedModule(Structure): - _fields_ = transform_ctypes_fields(LDR_DATA_TABLE_ENTRY, {"BaseDllName": WinUnicodeString, "FullDllName": WinUnicodeString}) +
[docs]class LoadedModule(LDR_DATA_TABLE_ENTRY): """An entry in the PEB Ldr list""" @property def baseaddr(self): @@ -1330,8 +1322,8 @@ """A PE representation of the module :type: :class:`windows.pe_parse.PEFile` - """ - return pe_parse.GetPEFile(self.baseaddr)
+ """
+ return pe_parse.GetPEFile(self.baseaddr) class LIST_ENTRY_PTR(PVOID): @@ -1339,18 +1331,8 @@ return LDR_DATA_TABLE_ENTRY.from_address(self.value - sizeof(PVOID) * 2) -class RTL_USER_PROCESS_PARAMETERS(Structure): - _fields_ = transform_ctypes_fields(RTL_USER_PROCESS_PARAMETERS, # The one in generated_def - {"ImagePathName": WinUnicodeString, - "CommandLine": WinUnicodeString} - ) - - -
[docs]class PEB(Structure): +
[docs]class PEB(gdef.PEB): """The PEB (Process Environment Block) of the current process""" - _fields_ = transform_ctypes_fields(PEB, # The one in generated_def - {"ProcessParameters": POINTER(RTL_USER_PROCESS_PARAMETERS)} - ) @property def exe(self): @@ -1364,7 +1346,7 @@ def imagepath(self): """The ImagePathName of the PEB - :type: :class:`WinUnicodeString` + :type: :class:`~windows.generated_def.winstructs.LSA_UNICODE_STRING` """ return self.ProcessParameters.contents.ImagePathName @@ -1372,9 +1354,8 @@ def commandline(self): """The CommandLine of the PEB - :type: :class:`WinUnicodeString` + :type: :class:`~windows.generated_def.winstructs.LSA_UNICODE_STRING` """ - # This or changing the __repr__ of LSA_UNICODE_STRING return self.ProcessParameters.contents.CommandLine @property @@ -1390,7 +1371,35 @@ res.append(current_dll) list_entry_ptr = ctypes.cast(current_dll.InMemoryOrderLinks.Flink, LIST_ENTRY_PTR) current_dll = list_entry_ptr.TO_LDR_ENTRY() - return [LoadedModule.from_address(addressof(LDR)) for LDR in res]
+ return [LoadedModule.from_address(addressof(LDR)) for LDR in res] + + @staticmethod + def _extract_environment(env_block_addr, target): + result = [] + while True: + venv = target.read_wstring(env_block_addr) + if not venv: + return result + result.append(venv) + env_block_addr += ((len(venv) + 1) * 2) + # raise RuntimeError("Out of infinite loop") + + @property + def environment(self): + # TODO: Tests + return self._extract_environment(self.ProcessParameters.contents.Environment, windows.current_process) + + @property + def apisetmap(self): + """The :class:`~windows.winobject.apisetmap.ApiSetMap` of the process + + :rtype: A subclass of :class:`~windows.winobject.apisetmap.ApiSetMap` + :raise: :class:`~exception.NotImplementedError` -- Before ``6.2`` ApiSetMap did not exist + :raise: :class:`~exception.NotImplementedError` -- Not implemented for remote process + """ + if windows.system.version < (6,2): + raise NotImplementedError("ApiSetMap does not exist prior to Windows 7")
+ return apisetmap.get_api_set_map_for_current_process(self.ApiSetMap) # Memory stuff @@ -1494,6 +1503,17 @@ current_dll = self.ptr_flink_to_remote_module(list_entry_ptr) return res + @property + def environment(self): + # TODO: Tests + return self._extract_environment(self.ProcessParameters.contents.Environment, self._target) + + @property + def apisetmap(self): + raise NotImplementedError("ApiSetMap for remote process not implemented yet") + + + if CurrentProcess().bitness == 32: class RemoteLoadedModule64(rctypes.transform_type_to_remote64bits(LoadedModule)): @@ -1536,6 +1556,13 @@ current_dll = self.ptr_flink_to_remote_module(list_entry_ptr) return res + @property + def environment(self): + # TODO: Tests + return self._extract_environment(self.ProcessParameters.contents.Environment, self._target) + + apisetmap = RemotePEB.apisetmap + if CurrentProcess().bitness == 64: class RemoteLoadedModule32(rctypes.transform_type_to_remote32bits(LoadedModule)): @@ -1576,6 +1603,13 @@ list_entry_ptr = current_dll.InMemoryOrderLinks.Flink.raw_value current_dll = self.ptr_flink_to_remote_module(list_entry_ptr) return res + + @property + def environment(self): + # TODO: Tests + return self._extract_environment(self.ProcessParameters.contents.Environment, self._target) + + apisetmap = RemotePEB.apisetmap @@ -1585,12 +1619,14 @@
@@ -1612,7 +1648,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/winobject/registry.html b/docs/build/html/_modules/windows/winobject/registry.html index 88b2638..c93d959 100644 --- a/docs/build/html/_modules/windows/winobject/registry.html +++ b/docs/build/html/_modules/windows/winobject/registry.html @@ -1,33 +1,22 @@ + - + - windows.winobject.registry — PythonForWindows 0.3 documentation - - - + + - - + + value = struct.unpack("<Q", value)[0] + return KeyValue(value_name, value, type) def _guess_value_type(self, value): if isinstance(value, basestring): return _winreg.REG_SZ elif isinstance(value, (int, long)): return _winreg.REG_DWORD + # elif isinstance(value, (list, tuple)): + # if all(isinstance(v, basestring) in value): + # return _winreg.REG_MULTI_SZ raise ValueError("Cannot guest registry type of value to set <{0}>".format(value)) @@ -158,8 +162,8 @@ if type is None: type = self._guess_value_type(value) if type == REG_QWORD: - value = struct.pack("<Q", value) - return _winreg.SetValueEx(self.phkey, name, 0, type, value) + value = struct.pack("<Q", value) + return _winreg.SetValueEx(self.phkey, name, 0, type, value)
[docs] def open_subkey(self, name, sam=None): @@ -168,22 +172,30 @@ :rtype: :class:`PyHKey` """ if sam is None: - sam = self.sam - return PyHKey(self, name, sam)
+ sam = self.sam + return PyHKey(self, name, sam) def reopen(self, new_sam): return PyHKey(self.surkey, self.name, new_sam) + def create(self): + # TODO: document + try: + self._phkey = _winreg.CreateKeyEx(self.surkey.phkey, self.name, 0, self.sam) + except WindowsError as e: + raise WindowsError(e.winerror, "Could not create registry key <{0}> ({1})".format(self.fullname, e.strerror)) + return self._phkey +
[docs] def __setitem__(self, name, value): rtype = None if not isinstance(value, (int, long, basestring)): - value, rtype = value - return self.set(name, value, rtype)
+ value, rtype = value + return self.set(name, value, rtype) __getitem__ = get - - __call__ = open_subkey + + __call__ = open_subkey class DummyPHKEY(object): @@ -230,8 +242,8 @@ raise ValueError("Unknow registry base key <{0}>".format(name)) base_name, subkey = name.split("\\", 1) if base_name not in self.registry_base_keys: - raise ValueError("Unknow registry base key <{0}>".format(base_name)) - return self.registry_base_keys[base_name](subkey, sam) + raise ValueError("Unknow registry base key <{0}>".format(base_name)) + return self.registry_base_keys[base_name](subkey, sam) @@ -241,12 +253,14 @@
@@ -268,7 +282,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/winobject/service.html b/docs/build/html/_modules/windows/winobject/service.html index e2a2430..25bf86f 100644 --- a/docs/build/html/_modules/windows/winobject/service.html +++ b/docs/build/html/_modules/windows/winobject/service.html @@ -1,33 +1,22 @@ + - + - windows.winobject.service — PythonForWindows 0.3 documentation - - - + + - - + + windows.winproxy.StartServiceA(servh, 0, None) + windows.winproxy.CloseServiceHandle(servh) @contextmanager @@ -192,12 +182,14 @@
@@ -219,7 +211,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/winobject/system.html b/docs/build/html/_modules/windows/winobject/system.html index 1c499c7..4501629 100644 --- a/docs/build/html/_modules/windows/winobject/system.html +++ b/docs/build/html/_modules/windows/winobject/system.html @@ -1,33 +1,22 @@ + - + - windows.winobject.system — PythonForWindows 0.3 documentation - - - + + - - + + winproxy.CloseHandle(snap) + return threads @@ -341,12 +333,14 @@
@@ -368,7 +362,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/winobject/volume.html b/docs/build/html/_modules/windows/winobject/volume.html index f7afe4c..bdd7caf 100644 --- a/docs/build/html/_modules/windows/winobject/volume.html +++ b/docs/build/html/_modules/windows/winobject/volume.html @@ -1,33 +1,22 @@ + - + - windows.winobject.volume — PythonForWindows 0.3 documentation - - - + + - - + \ No newline at end of file diff --git a/docs/build/html/_modules/windows/winobject/wmi.html b/docs/build/html/_modules/windows/winobject/wmi.html index 5d859d5..9758d5e 100644 --- a/docs/build/html/_modules/windows/winobject/wmi.html +++ b/docs/build/html/_modules/windows/winobject/wmi.html @@ -1,33 +1,22 @@ + - + - windows.winobject.wmi — PythonForWindows 0.3 documentation - - - + + - - + + return """<{0} namespace="{1}">""".format(type(self).__name__, self.namespace)
[docs]class WmiManager(dict): """The main WMI class exposed, used to list and access differents WMI namespace, can be used as a dict to access - :cls:`WmiRequester` by namespace""" - DEFAULT_NAMESPACE = "root\\cimv2" + :class:`WmiRequester` by namespace + + Example: + >>> windows.system.wmi["root\\SecurityCenter2"] + <WmiRequester namespace="root\\SecurityCenter2"> + """ + DEFAULT_NAMESPACE = "root\\cimv2" #: The default namespace for :func:`select` & :func:`query` def __init__(self): self.wmi_requester_by_namespace = {} @@ -190,8 +206,8 @@ self[key] = self._open_wmi_requester(key) return self[key] - def __repr__(self): - return object.__repr__(self)
+ def __repr__(self): + return object.__repr__(self) @@ -201,12 +217,14 @@
@@ -228,7 +246,7 @@ \ No newline at end of file diff --git a/docs/build/html/_modules/windows/winproxy.html b/docs/build/html/_modules/windows/winproxy.html new file mode 100644 index 0000000..0cae73b --- /dev/null +++ b/docs/build/html/_modules/windows/winproxy.html @@ -0,0 +1,1842 @@ + + + + + + + + windows.winproxy — PythonForWindows 0.3 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for windows.winproxy

+import ctypes
+import functools
+
+import windows
+
+from ctypes.wintypes import *
+from windows.generated_def.winstructs import *
+from windows.generated_def.windef import *
+import windows.generated_def.winfuncs as winfuncs
+from windows.generated_def.ntstatus import NtStatusException
+from windows.dbgprint import dbgprint
+
+## winfuncs helpers
+
+
[docs]def is_implemented(winfunc): + """Return :obj:`True` if DLL/Api can be found""" + try: + winfunc.force_resolution() + except ExportNotFound: + return False
+ return True + + +def get_target(winfunc): + """POC for new hook""" + return winfunc.target_dll, winfunc.target_func + + +# Rip-of windows.utils: should be removed from the other place ? +def _get_func_addr(dll_name, func_name): + # Load the DLL + windll = ctypes.WinDLL(dll_name) + return ctypes.cast(getattr(windll, func_name), PVOID).value + + +
[docs]def resolve(winfunc): + """Resolve the address of ``winfunc``. Might raise if ``winfunc`` is not implemented""" + winfunc.force_resolution()
+ return _get_func_addr(*get_target(winfunc)) + + +
[docs]class Kernel32Error(WindowsError): + def __new__(cls, func_name): + win_error = ctypes.WinError() + api_error = super(Kernel32Error, cls).__new__(cls) + api_error.api_name = func_name + api_error.winerror = win_error.winerror + api_error.strerror = win_error.strerror + api_error.args = (func_name, win_error.winerror, win_error.strerror) + return api_error + + def __repr__(self): + return "{0}: {1}".format(self.api_name, super(Kernel32Error, self).__repr__()) + + def __str__(self):
+ return "{0}: {1}".format(self.api_name, super(Kernel32Error, self).__str__()) + + +class IphlpapiError(Kernel32Error): + + def __new__(cls, func_name, code, strerror=None): + win_error = ctypes.WinError(code) + api_error = super(Kernel32Error, cls).__new__(cls) + api_error.api_name = func_name + api_error.winerror = win_error.winerror + if strerror is not None: + api_error.strerror = strerror + else: + api_error.strerror = win_error.strerror + api_error.args = (func_name, api_error.winerror, api_error.strerror) + return api_error + + def __init__(self, func_name, code, strerror=None): + pass + + +# Error check method +def no_error_check(func_name, result, func, args): + """Nothing special""" + return args + + +def minus_one_error_check(func_name, result, func, args): + if result == -1: + raise Kernel32Error(func_name) + return args + + +def zero_is_fail_error_check(func_name, result, func, args): + """raise Kernel32Error if result is 0""" + if not result: + raise Kernel32Error(func_name) + return args + + +def should_return_zero_check(func_name, result, func, args): + """raise Kernel32Error if result is NOT 0""" + if result: + raise Kernel32Error(func_name) + return args + + +def iphlpapi_error_check(func_name, result, func, args): + """raise IphlpapiError if result is NOT 0""" + if result: + raise IphlpapiError(func_name, result) + return args + + +def error_ntstatus(func_name, result, func, args): + if result: + raise NtStatusException(result & 0xffffffff) + return args + +def valid_handle_check(func_name, result, func, args): + if result == INVALID_HANDLE_VALUE: + raise Kernel32Error(func_name) + return args + + +class ExportNotFound(RuntimeError): + def __init__(self, func_name, api_name): + self.func_name = func_name + self.api_name = api_name + super(ExportNotFound, self).__init__("Function {0} not found into {1}".format(func_name, api_name)) + + +class ApiProxy(object): + APIDLL = None + """Create a python wrapper around a kernel32 function""" + def __init__(self, func_name, error_check=None, deffunc_module=None): + self.deffunc_module = deffunc_module if deffunc_module is not None else winfuncs + self.func_name = func_name + if error_check is None: + error_check = self.default_error_check + self.error_check = functools.wraps(error_check)(functools.partial(error_check, func_name)) + self._cprototyped = None + + def __call__(self, python_proxy, ): + prototype = getattr(self.deffunc_module, self.func_name + "Prototype") + params = getattr(self.deffunc_module, self.func_name + "Params") + python_proxy.prototype = prototype + python_proxy.params = params + python_proxy.errcheck = self.error_check + python_proxy.target_dll = self.APIDLL + python_proxy.target_func = self.func_name + params_name = [param[1] for param in params] + if (self.error_check.__doc__): + doc = python_proxy.__doc__ + doc = doc if doc else "" + python_proxy.__doc__ = doc + "\nErrcheck:\n " + self.error_check.__doc__ + + + def generate_ctypes_function(): + try: + c_prototyped = prototype((self.func_name, getattr(ctypes.windll, self.APIDLL)), params) + except (AttributeError, WindowsError): + raise ExportNotFound(self.func_name, self.APIDLL) + c_prototyped.errcheck = self.error_check + self._cprototyped = c_prototyped + + + def perform_call(*args): + if len(params_name) != len(args): + print("ERROR:") + print("Expected params: {0}".format(params_name)) + print("Just Got params: {0}".format(args)) + raise ValueError("I do not have all parameters: how is that possible ?") + for param_name, param_value in zip(params_name, args): + if param_value is NeededParameter: + raise TypeError("{0}: Missing Mandatory parameter <{1}>".format(self.func_name, param_name)) + if self._cprototyped is None: + generate_ctypes_function() + return self._cprototyped(*args) + + setattr(python_proxy, "ctypes_function", perform_call) + setattr(python_proxy, "force_resolution", generate_ctypes_function) + return python_proxy + + +class Kernel32Proxy(ApiProxy): + APIDLL = "kernel32" + default_error_check = staticmethod(zero_is_fail_error_check) + + +class Advapi32Proxy(ApiProxy): + APIDLL = "advapi32" + default_error_check = staticmethod(zero_is_fail_error_check) + + +class IphlpapiProxy(ApiProxy): + APIDLL = "iphlpapi" + default_error_check = staticmethod(iphlpapi_error_check) + +class NtdllProxy(ApiProxy): + APIDLL = "ntdll" + default_error_check = staticmethod(should_return_zero_check) + +class WinTrustProxy(ApiProxy): + APIDLL = "wintrust" + default_error_check = staticmethod(no_error_check) + +class Ole32Proxy(ApiProxy): + APIDLL = "ole32" + default_error_check = staticmethod(no_error_check) + +class PsapiProxy(ApiProxy): + APIDLL = "psapi" + default_error_check = staticmethod(zero_is_fail_error_check) + +class User32Proxy(ApiProxy): + APIDLL = "user32" + default_error_check = staticmethod(zero_is_fail_error_check) + +class VersionProxy(ApiProxy): + APIDLL = "version" + default_error_check = staticmethod(zero_is_fail_error_check) + +class Crypt32Proxy(ApiProxy): + APIDLL = "crypt32" + default_error_check = staticmethod(zero_is_fail_error_check) + + +class CryptUIProxy(ApiProxy): + APIDLL = "cryptui" + default_error_check = staticmethod(zero_is_fail_error_check) + +class Shell32Proxy(ApiProxy): + APIDLL = "shell32" + default_error_check = staticmethod(zero_is_fail_error_check) + +class Ktmw32Proxy(ApiProxy): + APIDLL = "Ktmw32" + default_error_check = staticmethod(zero_is_fail_error_check) + +#class OptionalExport(object): +# """used 'around' a Proxy decorator +# Should be used for export that are not available everywhere (ntdll internals | 32/64 bits stuff) +# If the export is not found the function will be None +# +# Example: +# @OptionalExport(NtdllProxy('NtWow64ReadVirtualMemory64')) +# def NtWow64ReadVirtualMemory64(...) +# ... +# """ +# def __init__(self, subdecorator): +# self.subdecorator = subdecorator +# +# def __call__(self, f): +# try: +# x = self.subdecorator(f) +# x.force_resolution() +# return x +# except ExportNotFound as e: +# dbgprint("Export <{e.func_name}> not found in <{e.api_name}>".format(e=e), "EXPORTNOTFOUND") +# return None + +class TransparentApiProxy(object): + def __init__(self, DLLNAME, target_func, error_check): + self.target_dll = DLLNAME + self.target_func = target_func + self.error_check = error_check + self._ctypes_function = None + + self.prototype = getattr(winfuncs, target_func + "Prototype") + self.params = getattr(winfuncs, target_func + "Params") + + def __call__(self, *args, **kwargs): + if self._ctypes_function is None: + self.force_resolution() + return self._ctypes_function(*args, **kwargs) + + def force_resolution(self): + try: + c_prototyped = self.prototype((self.target_func, getattr(ctypes.windll, self.target_dll)), self.params) + except AttributeError: + raise ExportNotFound(self.target_func, self.target_dll) + c_prototyped.errcheck = functools.wraps(self.error_check)(functools.partial(self.error_check, self.target_func)) + self._ctypes_function = c_prototyped + + +TransparentKernel32Proxy = lambda func_name, error_check=zero_is_fail_error_check: TransparentApiProxy("kernel32", func_name, error_check) +TransparentUser32Proxy = lambda func_name, error_check=zero_is_fail_error_check: TransparentApiProxy("user32", func_name, error_check) +TransparentAdvapi32Proxy = lambda func_name, error_check=zero_is_fail_error_check: TransparentApiProxy("advapi32", func_name, error_check) +TransparentIphlpapiProxy = lambda func_name, error_check=iphlpapi_error_check: TransparentApiProxy("iphlpapi", func_name, error_check) + + +class NeededParameterType(object): + _inst = None + + def __new__(cls): + if cls._inst is None: + cls._inst = super(NeededParameterType, cls).__new__(cls) + return cls._inst + + def __repr__(self): + return "NeededParameter" +NeededParameter = NeededParameterType() + +ExitProcess = TransparentKernel32Proxy("ExitProcess") +TerminateProcess = TransparentKernel32Proxy("TerminateProcess") +CloseHandle = TransparentKernel32Proxy("CloseHandle") +GetProcAddress = TransparentKernel32Proxy("GetProcAddress") +LoadLibraryA = TransparentKernel32Proxy("LoadLibraryA") +LoadLibraryW = TransparentKernel32Proxy("LoadLibraryW") +GetLastError = TransparentKernel32Proxy("GetLastError", no_error_check) +GetCurrentProcess = TransparentKernel32Proxy("GetCurrentProcess") +GetCurrentProcessorNumber = TransparentKernel32Proxy("GetCurrentProcessorNumber", no_error_check) +GetCurrentThread = TransparentKernel32Proxy("GetCurrentThread") +AllocConsole = TransparentKernel32Proxy("AllocConsole") +FreeConsole = TransparentKernel32Proxy("FreeConsole") +GetStdHandle = TransparentKernel32Proxy("GetStdHandle") +SetStdHandle = TransparentKernel32Proxy("SetStdHandle") +GetCurrentThreadId = TransparentKernel32Proxy("GetCurrentThreadId") +TerminateThread = TransparentKernel32Proxy("TerminateThread") +ExitThread = TransparentKernel32Proxy("ExitThread") +SuspendThread = TransparentKernel32Proxy("SuspendThread", minus_one_error_check) +ResumeThread = TransparentKernel32Proxy("ResumeThread", minus_one_error_check) +GetThreadId = TransparentKernel32Proxy("GetThreadId") +VirtualQueryEx = TransparentKernel32Proxy("VirtualQueryEx") +GetExitCodeThread = TransparentKernel32Proxy("GetExitCodeThread") +GetExitCodeProcess = TransparentKernel32Proxy("GetExitCodeProcess") +GetProcessId = TransparentKernel32Proxy("GetProcessId") +lstrcmpA = TransparentKernel32Proxy("lstrcmpA") +lstrcmpW = TransparentKernel32Proxy("lstrcmpW") +GetVersionExA = TransparentKernel32Proxy("GetVersionExA") +GetVersionExW = TransparentKernel32Proxy("GetVersionExW") +GetComputerNameA = TransparentKernel32Proxy("GetComputerNameA") +GetComputerNameW = TransparentKernel32Proxy("GetComputerNameW") +LocalFree = TransparentKernel32Proxy("LocalFree", should_return_zero_check) + + + +Wow64DisableWow64FsRedirection = TransparentKernel32Proxy("Wow64DisableWow64FsRedirection") +Wow64RevertWow64FsRedirection = TransparentKernel32Proxy("Wow64RevertWow64FsRedirection") +Wow64EnableWow64FsRedirection = TransparentKernel32Proxy("Wow64EnableWow64FsRedirection") +Wow64GetThreadContext = TransparentKernel32Proxy("Wow64GetThreadContext") + + +def CreateFile_error_check(func_name, result, func, args): + """raise Kernel32Error if result is NOT 0""" + if result == INVALID_HANDLE_VALUE: + raise Kernel32Error(func_name) + return args + + +@Kernel32Proxy("CreateFileA", error_check=CreateFile_error_check) +def CreateFileA(lpFileName, dwDesiredAccess=GENERIC_READ, dwShareMode=0, lpSecurityAttributes=None, dwCreationDisposition=OPEN_EXISTING, dwFlagsAndAttributes=FILE_ATTRIBUTE_NORMAL, hTemplateFile=None): + return CreateFileA.ctypes_function(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile) + + +@Kernel32Proxy("CreateFileW", error_check=CreateFile_error_check) +def CreateFileW(lpFileName, dwDesiredAccess=GENERIC_READ, dwShareMode=0, lpSecurityAttributes=None, dwCreationDisposition=OPEN_EXISTING, dwFlagsAndAttributes=FILE_ATTRIBUTE_NORMAL, hTemplateFile=None): + return CreateFileA.ctypes_function(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile) + + +@Kernel32Proxy("VirtualAlloc") +def VirtualAlloc(lpAddress=0, dwSize=NeededParameter, flAllocationType=MEM_COMMIT, flProtect=PAGE_EXECUTE_READWRITE): + return VirtualAlloc.ctypes_function(lpAddress, dwSize, flAllocationType, flProtect) + + +@Kernel32Proxy("VirtualFree") +def VirtualFree(lpAddress, dwSize=0, dwFreeType=MEM_RELEASE): + return VirtualFree.ctypes_function(lpAddress, dwSize, dwFreeType) + + +@Kernel32Proxy("VirtualAllocEx") +def VirtualAllocEx(hProcess, lpAddress=0, dwSize=NeededParameter, flAllocationType=MEM_COMMIT, flProtect=PAGE_EXECUTE_READWRITE): + return VirtualAllocEx.ctypes_function(hProcess, lpAddress, dwSize, flAllocationType, flProtect) + + +@Kernel32Proxy("VirtualFreeEx") +def VirtualFreeEx(hProcess, lpAddress, dwSize=0, dwFreeType=MEM_RELEASE): + return VirtualFreeEx.ctypes_function(hProcess, lpAddress, dwSize, dwFreeType) + + +@Kernel32Proxy("CreateThread") +def CreateThread(lpThreadAttributes=None, dwStackSize=0, lpStartAddress=NeededParameter, lpParameter=NeededParameter, dwCreationFlags=0, lpThreadId=None): + return CreateThread.ctypes_function(lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, dwCreationFlags, lpThreadId) + + +@Kernel32Proxy("CreateRemoteThread") +def CreateRemoteThread(hProcess=NeededParameter, lpThreadAttributes=None, dwStackSize=0, + lpStartAddress=NeededParameter, lpParameter=NeededParameter, dwCreationFlags=0, lpThreadId=None): + return CreateRemoteThread.ctypes_function(hProcess, lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, dwCreationFlags, lpThreadId) + + +@Kernel32Proxy("VirtualProtect") +def VirtualProtect(lpAddress, dwSize, flNewProtect, lpflOldProtect=None): + if lpflOldProtect is None: + lpflOldProtect = ctypes.byref(DWORD()) + return VirtualProtect.ctypes_function(lpAddress, dwSize, flNewProtect, lpflOldProtect) + + +@Kernel32Proxy("VirtualProtectEx") +def VirtualProtectEx(hProcess, lpAddress, dwSize, flNewProtect, lpflOldProtect=None): + if lpflOldProtect is None: + lpflOldProtect = ctypes.byref(DWORD()) + return VirtualProtectEx.ctypes_function(hProcess, lpAddress, dwSize, flNewProtect, lpflOldProtect) + +@Kernel32Proxy("CreateProcessA") +def CreateProcessA(lpApplicationName, lpCommandLine=None, lpProcessAttributes=None, lpThreadAttributes=None, bInheritHandles=False, + dwCreationFlags=0, lpEnvironment=None, lpCurrentDirectory=None, lpStartupInfo=None, lpProcessInformation=None): + if lpStartupInfo is None: + StartupInfo = STARTUPINFOA() + StartupInfo.cb = ctypes.sizeof(StartupInfo) + StartupInfo.dwFlags = STARTF_USESHOWWINDOW + StartupInfo.wShowWindow = SW_HIDE + lpStartupInfo = ctypes.byref(StartupInfo) + if lpProcessInformation is None: + lpProcessInformation = ctypes.byref(PROCESS_INFORMATION()) + return CreateProcessA.ctypes_function(lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation) + + +@Kernel32Proxy("CreateProcessW") +def CreateProcessW(lpApplicationName, lpCommandLine=None, lpProcessAttributes=None, lpThreadAttributes=None, bInheritHandles=False, + dwCreationFlags=0, lpEnvironment=None, lpCurrentDirectory=None, lpStartupInfo=None, lpProcessInformation=None): + if lpStartupInfo is None: + StartupInfo = STARTUPINFOW() + StartupInfo.cb = ctypes.sizeof(StartupInfo) + StartupInfo.dwFlags = STARTF_USESHOWWINDOW + StartupInfo.wShowWindow = SW_HIDE + lpStartupInfo = ctypes.byref(StartupInfo) + if lpProcessInformation is None: + lpProcessInformation = ctypes.byref(PROCESS_INFORMATION()) + return CreateProcessW.ctypes_function(lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation) + + + +@Kernel32Proxy("GetThreadContext") +def GetThreadContext(hThread, lpContext=None): + if lpContext is None: + Context = CONTEXT() + context.ContextFlags = CONTEXT_FULL | CONTEXT_DEBUG_REGISTERS + lpContext = ctypes.byref(Context) + return GetThreadContext.ctypes_function(hThread, lpContext) + + +@Kernel32Proxy("SetThreadContext") +def SetThreadContext(hThread, lpContext): + return SetThreadContext.ctypes_function(hThread, lpContext) + +@Kernel32Proxy("Wow64SetThreadContext") +def Wow64SetThreadContext(hThread, lpContext): + return Wow64SetThreadContext.ctypes_function(hThread, lpContext) + + +@Kernel32Proxy("OpenThread") +def OpenThread(dwDesiredAccess=THREAD_ALL_ACCESS, bInheritHandle=0, dwThreadId=NeededParameter): + return OpenThread.ctypes_function(dwDesiredAccess, bInheritHandle, dwThreadId) + + +@Kernel32Proxy("OpenProcess") +def OpenProcess(dwDesiredAccess=PROCESS_ALL_ACCESS, bInheritHandle=0, dwProcessId=NeededParameter): + return OpenProcess.ctypes_function(dwDesiredAccess, bInheritHandle, dwProcessId) + + +@Kernel32Proxy("ReadProcessMemory") +def ReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead=None): + return ReadProcessMemory.ctypes_function(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead) + + +@Kernel32Proxy("WriteProcessMemory") +def WriteProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize=None, lpNumberOfBytesWritten=None): + """Computer nSize with len(lpBuffer) if not given""" + if nSize is None: + nSize = len(lpBuffer) + return WriteProcessMemory.ctypes_function(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesWritten) + + +@Kernel32Proxy("GetProcessTimes") +def GetProcessTimes(hProcess, lpCreationTime, lpExitTime, lpKernelTime, lpUserTime): + return GetProcessTimes.ctypes_function(hProcess, lpCreationTime, lpExitTime, lpKernelTime, lpUserTime) + +@Kernel32Proxy('SetThreadAffinityMask') +def SetThreadAffinityMask(hThread=None, dwThreadAffinityMask=NeededParameter): + """If hThread is not given, it will be the current thread""" + if hThread is None: + hThread = GetCurrentThread() + return SetThreadAffinityMask.ctypes_function(hThread, dwThreadAffinityMask) + + +@Kernel32Proxy("CreateToolhelp32Snapshot") +def CreateToolhelp32Snapshot(dwFlags, th32ProcessID=0): + return CreateToolhelp32Snapshot.ctypes_function(dwFlags, th32ProcessID) + + +@Kernel32Proxy("Thread32First") +def Thread32First(hSnapshot, lpte): + """Set byref(lpte) if needed""" + if type(lpte) == THREADENTRY32: + lpte = ctypes.byref(lpte) + return Thread32First.ctypes_function(hSnapshot, lpte) + + +@Kernel32Proxy("Thread32Next", no_error_check) +def Thread32Next(hSnapshot, lpte): + """Set byref(lpte) if needed""" + if type(lpte) == THREADENTRY32: + lpte = ctypes.byref(lpte) + return Thread32Next.ctypes_function(hSnapshot, lpte) + + +@Kernel32Proxy("Process32First") +def Process32First(hSnapshot, lpte): + return Process32First.ctypes_function(hSnapshot, lpte) + +@Kernel32Proxy("Process32Next", no_error_check) +def Process32Next(hSnapshot, lpte): + return Process32Next.ctypes_function(hSnapshot, lpte) + +@Kernel32Proxy("GetPriorityClass") +def GetPriorityClass(hProcess): + return GetPriorityClass.ctypes_function(hProcess) + +@Kernel32Proxy("SetPriorityClass") +def SetPriorityClass(hProcess, dwPriorityClass): + return SetPriorityClass.ctypes_function(hProcess, dwPriorityClass) + +@Kernel32Proxy("OpenEventA") +def OpenEventA(dwDesiredAccess, bInheritHandle, lpName): + return OpenEventA.ctypes_function(dwDesiredAccess, bInheritHandle, lpName) + +@Kernel32Proxy("OpenEventW") +def OpenEventW(dwDesiredAccess, bInheritHandle, lpName): + return OpenEventA.ctypes_function(dwDesiredAccess, bInheritHandle, lpName) + +# File stuff +@Kernel32Proxy("ReadFile") +def ReadFile(hFile, lpBuffer, nNumberOfBytesToRead=None, lpNumberOfBytesRead=None, lpOverlapped=None): + if nNumberOfBytesToRead is None: + nNumberOfBytesToRead = len(lpBuffer) + if lpOverlapped is None and lpNumberOfBytesRead is None: + lpNumberOfBytesRead = ctypes.byref(DWORD()) + return ReadFile.ctypes_function(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped) + + +@Kernel32Proxy("WriteFile") +def WriteFile(hFile, lpBuffer, nNumberOfBytesToWrite=None, lpNumberOfBytesWritten=None, lpOverlapped=None): + if nNumberOfBytesToWrite is None: + nNumberOfBytesToWrite = len(lpBuffer) + if lpOverlapped is None and lpNumberOfBytesWritten is None: + lpNumberOfBytesWritten = ctypes.byref(DWORD()) + return WriteFile.ctypes_function(hFile, lpBuffer, nNumberOfBytesToWrite, lpNumberOfBytesWritten, lpOverlapped) + + +# Exception stuff +@Kernel32Proxy("AddVectoredContinueHandler") +def AddVectoredContinueHandler(FirstHandler=1, VectoredHandler=NeededParameter): + return AddVectoredContinueHandler.ctypes_function(FirstHandler, VectoredHandler) + + +@Kernel32Proxy("AddVectoredExceptionHandler") +def AddVectoredExceptionHandler(FirstHandler=1, VectoredHandler=NeededParameter): + return AddVectoredExceptionHandler.ctypes_function(FirstHandler, VectoredHandler) + + +@Kernel32Proxy("RemoveVectoredExceptionHandler") +def RemoveVectoredExceptionHandler(Handler): + return RemoveVectoredExceptionHandler.ctypes_function(Handler) + + +@Kernel32Proxy("WaitForSingleObject", should_return_zero_check) +def WaitForSingleObject(hHandle, dwMilliseconds=INFINITE): + return WaitForSingleObject.ctypes_function(hHandle, dwMilliseconds) + + +@Kernel32Proxy("DeviceIoControl") +def DeviceIoControl(hDevice, dwIoControlCode, lpInBuffer, nInBufferSize=None, lpOutBuffer=NeededParameter, nOutBufferSize=None, lpBytesReturned=None, lpOverlapped=None): + if nInBufferSize is None: + nInBufferSize = len(lpInBuffer) + if nOutBufferSize is None: + nOutBufferSize = len(lpOutBuffer) + if lpBytesReturned is None: + # Some windows check 0 / others does not + lpBytesReturned = ctypes.byref(DWORD()) + return DeviceIoControl.ctypes_function(hDevice, dwIoControlCode, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped) + + + +@Kernel32Proxy("CreateFileMappingA") +def CreateFileMappingA(hFile, lpFileMappingAttributes=None, flProtect=PAGE_READWRITE, dwMaximumSizeHigh=0, dwMaximumSizeLow=NeededParameter, lpName=NeededParameter): + return CreateFileMappingA.ctypes_function(hFile, lpFileMappingAttributes, flProtect, dwMaximumSizeHigh, dwMaximumSizeLow, lpName) + + +@Kernel32Proxy("CreateFileMappingW") +def CreateFileMappingW(hFile, lpFileMappingAttributes=None, flProtect=PAGE_READWRITE, dwMaximumSizeHigh=0, dwMaximumSizeLow=0, lpName=NeededParameter): + return CreateFileMappingW.ctypes_function(hFile, lpFileMappingAttributes, flProtect, dwMaximumSizeHigh, dwMaximumSizeLow, lpName) + + +@Kernel32Proxy("MapViewOfFile") +def MapViewOfFile(hFileMappingObject, dwDesiredAccess=FILE_MAP_ALL_ACCESS, dwFileOffsetHigh=0, dwFileOffsetLow=0, dwNumberOfBytesToMap=NeededParameter): + return MapViewOfFile.ctypes_function(hFileMappingObject, dwDesiredAccess, dwFileOffsetHigh, dwFileOffsetLow, dwNumberOfBytesToMap) + + +@Kernel32Proxy("DuplicateHandle") +def DuplicateHandle(hSourceProcessHandle, hSourceHandle, hTargetProcessHandle, lpTargetHandle, dwDesiredAccess=0, bInheritHandle=False, dwOptions=0): + return DuplicateHandle.ctypes_function(hSourceProcessHandle, hSourceHandle, hTargetProcessHandle, lpTargetHandle, dwDesiredAccess, bInheritHandle, dwOptions) + +@Kernel32Proxy("GetLongPathNameA") +def GetLongPathNameA(lpszShortPath, lpszLongPath, cchBuffer=None): + if cchBuffer is None: + cchBuffer = len(lpszLongPath) + return GetLongPathNameA.ctypes_function(lpszShortPath, lpszLongPath, cchBuffer) + +@Kernel32Proxy("GetLongPathNameW") +def GetLongPathNameW(lpszShortPath, lpszLongPath, cchBuffer=None): + if cchBuffer is None: + cchBuffer = len(lpszLongPath) + return GetLongPathNameW.ctypes_function(lpszShortPath, lpszLongPath, cchBuffer) + +@Kernel32Proxy("GetShortPathNameA") +def GetShortPathNameA(lpszLongPath, lpszShortPath, cchBuffer=None): + if cchBuffer is None: + cchBuffer = len(lpszShortPath) + return GetShortPathNameA.ctypes_function(lpszLongPath, lpszShortPath, cchBuffer) + +@Kernel32Proxy("GetShortPathNameW") +def GetShortPathNameW(lpszLongPath, lpszShortPath, cchBuffer=None): + if cchBuffer is None: + cchBuffer = len(lpszShortPath) + return GetShortPathNameW.ctypes_function(lpszLongPath, lpszShortPath, cchBuffer) + +# TODO: might be in another DLL depending of version +# Should handle this.. + +def GetMappedFileNameWWrapper(hProcess, lpv, lpFilename, nSize=None): + if nSize is None: + nSize = ctypes.sizeof(lpFilename) + return GetMappedFileNameWWrapper.ctypes_function(hProcess, lpv, lpFilename, nSize) +GetMappedFileNameW = Kernel32Proxy("GetMappedFileNameW")(GetMappedFileNameWWrapper) + + +def GetMappedFileNameAWrapper(hProcess, lpv, lpFilename, nSize=None): + if nSize is None: + nSize = ctypes.sizeof(lpFilename) + return GetMappedFileNameAWrapper.ctypes_function(hProcess, lpv, lpFilename, nSize) +GetMappedFileNameA = Kernel32Proxy("GetMappedFileNameA")(GetMappedFileNameAWrapper) + +def QueryWorkingSetWrapper(hProcess, pv, cb): + return QueryWorkingSet.ctypes_function(hProcess, pv, cb) +QueryWorkingSet = Kernel32Proxy("QueryWorkingSet")(QueryWorkingSetWrapper) + +def QueryWorkingSetExWrapper(hProcess, pv, cb): + return QueryWorkingSetEx.ctypes_function(hProcess, pv, cb) +QueryWorkingSetEx = Kernel32Proxy("QueryWorkingSetEx")(QueryWorkingSetExWrapper) + + + +if not is_implemented(GetMappedFileNameA): + GetMappedFileNameW = PsapiProxy("GetMappedFileNameW")(GetMappedFileNameWWrapper) + GetMappedFileNameA = PsapiProxy("GetMappedFileNameA")(GetMappedFileNameAWrapper) + QueryWorkingSet = PsapiProxy("QueryWorkingSet")(QueryWorkingSetWrapper) + QueryWorkingSetEx = PsapiProxy("QueryWorkingSetEx")(QueryWorkingSetExWrapper) + +def GetModuleBaseNameAWrapper(hProcess, hModule, lpBaseName, nSize=None): + if nSize is None: + nSize = len(lpBaseName) + return GetModuleBaseNameAWrapper.ctypes_function(hProcess, hModule, lpBaseName, nSize) +GetModuleBaseNameA = Kernel32Proxy("GetMappedFileNameA")(GetModuleBaseNameAWrapper) + + +def GetModuleBaseNameWWrapper(hProcess, hModule, lpBaseName, nSize=None): + if nSize is None: + nSize = len(lpBaseName) + return GetModuleBaseNameWWrapper.ctypes_function(hProcess, hModule, lpBaseName, nSize) +GetModuleBaseNameA = Kernel32Proxy("GetModuleBaseNameW")(GetModuleBaseNameWWrapper) + +if not is_implemented(GetModuleBaseNameA): + GetModuleBaseNameA = PsapiProxy("GetModuleBaseNameA")(GetModuleBaseNameAWrapper) + GetModuleBaseNameW = PsapiProxy("GetModuleBaseNameW")(GetModuleBaseNameWWrapper) + + +def GetProcessImageFileNameAWrapper(hProcess, lpImageFileName, nSize=None): + if nSize is None: + nSize = len(lpImageFileName) + return GetProcessImageFileNameAWrapper.ctypes_function(hProcess, lpImageFileName, nSize) +GetProcessImageFileNameA = Kernel32Proxy("GetProcessImageFileNameA")(GetProcessImageFileNameAWrapper) + +def GetProcessImageFileNameWWrapper(hProcess, lpImageFileName, nSize=None): + if nSize is None: + nSize = len(lpImageFileName) + return GetProcessImageFileNameWWrapper.ctypes_function(hProcess, lpImageFileName, nSize) +GetProcessImageFileNameW = Kernel32Proxy("GetProcessImageFileNameW")(GetProcessImageFileNameWWrapper) + +if not is_implemented(GetProcessImageFileNameA): + GetProcessImageFileNameA = PsapiProxy("GetProcessImageFileNameA")(GetProcessImageFileNameAWrapper) + GetProcessImageFileNameW = PsapiProxy("GetProcessImageFileNameW")(GetProcessImageFileNameWWrapper) + +# Debug API + +DebugBreak = TransparentKernel32Proxy("DebugBreak") +ContinueDebugEvent = TransparentKernel32Proxy("ContinueDebugEvent") +DebugActiveProcess = TransparentKernel32Proxy("DebugActiveProcess") +DebugActiveProcessStop = TransparentKernel32Proxy("DebugActiveProcessStop") +DebugSetProcessKillOnExit = TransparentKernel32Proxy("DebugSetProcessKillOnExit") +DebugBreakProcess = TransparentKernel32Proxy("DebugBreakProcess") + +@Kernel32Proxy("WaitForDebugEvent") +def WaitForDebugEvent(lpDebugEvent, dwMilliseconds=INFINITE): + return WaitForDebugEvent.ctypes_function(lpDebugEvent, dwMilliseconds) + + +# Volumes stuff + +GetLogicalDriveStringsA = TransparentKernel32Proxy("GetLogicalDriveStringsA") +GetLogicalDriveStringsW = TransparentKernel32Proxy("GetLogicalDriveStringsW") +GetDriveTypeA = TransparentKernel32Proxy("GetDriveTypeA") +GetDriveTypeW = TransparentKernel32Proxy("GetDriveTypeW") +QueryDosDeviceA = TransparentKernel32Proxy("QueryDosDeviceA") +QueryDosDeviceW = TransparentKernel32Proxy("QueryDosDeviceW") +GetVolumeNameForVolumeMountPointA = TransparentKernel32Proxy("GetVolumeNameForVolumeMountPointA") +GetVolumeNameForVolumeMountPointW = TransparentKernel32Proxy("GetVolumeNameForVolumeMountPointW") + + + +@Kernel32Proxy("GetVolumeInformationA") +def GetVolumeInformationA(lpRootPathName, lpVolumeNameBuffer, nVolumeNameSize, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize): + if nVolumeNameSize == 0 and lpVolumeNameBuffer is not None: + nVolumeNameSize = len(lpVolumeNameBuffer) + if nFileSystemNameSize == 0 and lpFileSystemNameBuffer is not None: + nFileSystemNameSize = len(lpFileSystemNameBuffer) + return GetVolumeInformationA.ctypes_function(lpRootPathName, lpVolumeNameBuffer, nVolumeNameSize, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize) + + +@Kernel32Proxy("GetVolumeInformationW") +def GetVolumeInformationW(lpRootPathName, lpVolumeNameBuffer=None, nVolumeNameSize=0, lpVolumeSerialNumber=None, lpMaximumComponentLength=None, lpFileSystemFlags=None, lpFileSystemNameBuffer=None, nFileSystemNameSize=0): + if nVolumeNameSize == 0 and lpVolumeNameBuffer is not None: + nVolumeNameSize = len(lpVolumeNameBuffer) + if nFileSystemNameSize == 0 and lpFileSystemNameBuffer is not None: + nFileSystemNameSize = len(lpFileSystemNameBuffer) + return GetVolumeInformationW.ctypes_function(lpRootPathName, lpVolumeNameBuffer, nVolumeNameSize, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize) + + +@Kernel32Proxy("FindFirstVolumeA") +def FindFirstVolumeA(lpszVolumeName, cchBufferLength): + if cchBufferLength is None: + cchBufferLength = len(lpszVolumeName) + return FindFirstVolumeA.ctypes_function(lpszVolumeName, cchBufferLength) + + +@Kernel32Proxy("FindFirstVolumeW") +def FindFirstVolumeW(lpszVolumeName, cchBufferLength): + if cchBufferLength is None: + cchBufferLength = len(lpszVolumeName) + return FindFirstVolumeW.ctypes_function(lpszVolumeName, cchBufferLength) + + + +@Kernel32Proxy("FindNextVolumeA") +def FindNextVolumeA(hFindVolume, lpszVolumeName, cchBufferLength): + if cchBufferLength is None: + cchBufferLength = len(lpszVolumeName) + return FindNextVolumeA.ctypes_function(hFindVolume, lpszVolumeName, cchBufferLength) + + +@Kernel32Proxy("FindNextVolumeW") +def FindNextVolumeW(hFindVolume, lpszVolumeName, cchBufferLength): + if cchBufferLength is None: + cchBufferLength = len(lpszVolumeName) + return FindNextVolumeW.ctypes_function(hFindVolume, lpszVolumeName, cchBufferLength) + + +@Kernel32Proxy("SetConsoleCtrlHandler") +def SetConsoleCtrlHandler(HandlerRoutine, Add): + return SetConsoleCtrlHandler.ctypes_function(HandlerRoutine, Add) + +@Kernel32Proxy("GetProcessDEPPolicy") +def GetProcessDEPPolicy(hProcess, lpFlags, lpPermanent): + return GetProcessDEPPolicy.ctypes_function(hProcess, lpFlags, lpPermanent) + + +# ProcThreadAttributeList +def initializeprocthreadattributelist_error_check(func_name, result, func, args): + if result: + return args + error = GetLastError() + if error == ERROR_INSUFFICIENT_BUFFER and args[0] is None: + return args + raise Kernel32Error(func_name) + +@Kernel32Proxy("InitializeProcThreadAttributeList", initializeprocthreadattributelist_error_check) +def InitializeProcThreadAttributeList(lpAttributeList=None, dwAttributeCount=NeededParameter, dwFlags=0, lpSize=NeededParameter): + return InitializeProcThreadAttributeList.ctypes_function(lpAttributeList, dwAttributeCount, dwFlags, lpSize) + + +@Kernel32Proxy("UpdateProcThreadAttribute") +def UpdateProcThreadAttribute(lpAttributeList, dwFlags=0, Attribute=NeededParameter, lpValue=NeededParameter, cbSize=NeededParameter, lpPreviousValue=None, lpReturnSize=None): + return UpdateProcThreadAttribute.ctypes_function(lpAttributeList, dwFlags, Attribute, lpValue, cbSize, lpPreviousValue, lpReturnSize) + + +@Kernel32Proxy("DeleteProcThreadAttributeList") +def DeleteProcThreadAttributeList(lpAttributeList): + return DeleteProcThreadAttributeList.ctypes_function(lpAttributeList) + + +@Kernel32Proxy("GetWindowsDirectoryA") +def GetWindowsDirectoryA(lpBuffer, uSize=None): + if uSize is None: + uSize = DWORD(len(lpBuffer)) + return GetWindowsDirectoryA.ctypes_function(lpBuffer, uSize) + + +@Kernel32Proxy("GetWindowsDirectoryW") +def GetWindowsDirectoryW(lpBuffer, uSize=None): + if uSize is None: + uSize = DWORD(len(lpBuffer)) + return GetWindowsDirectoryW.ctypes_function(lpBuffer, uSize) + + +# ### NTDLL #### # + +@NtdllProxy('NtReadVirtualMemory', error_ntstatus) +def NtReadVirtualMemory(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead): + return NtReadVirtualMemory.ctypes_function(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead) + +@NtdllProxy('NtWow64ReadVirtualMemory64', error_ntstatus) +def NtWow64ReadVirtualMemory64(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead=None): + return NtWow64ReadVirtualMemory64.ctypes_function(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead) + +@NtdllProxy('NtWow64WriteVirtualMemory64', error_ntstatus) +def NtWow64WriteVirtualMemory64(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesWritten=None): + return NtWow64WriteVirtualMemory64.ctypes_function(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesWritten) + +def ntquerysysteminformation_error_check(func_name, result, func, args): + if result == 0: + return args + # Ignore STATUS_INFO_LENGTH_MISMATCH if SystemInformation is None + if result == STATUS_INFO_LENGTH_MISMATCH and args[1] is None: + return args + raise Kernel32Error("{0} failed with NTStatus {1}".format(func_name, hex(result))) + +@NtdllProxy("NtCreateFile", error_ntstatus) +def NtCreateFile(FileHandle, DesiredAccess, ObjectAttributes, IoStatusBlock, AllocationSize, FileAttributes, ShareAccess, CreateDisposition, CreateOptions, EaBuffer, EaLength): + return NtCreateFile.ctypes_function(FileHandle, DesiredAccess, ObjectAttributes, IoStatusBlock, AllocationSize, FileAttributes, ShareAccess, CreateDisposition, CreateOptions, EaBuffer, EaLength) + +@NtdllProxy("NtGetContextThread", error_ntstatus) +def NtGetContextThread(hThread, lpContext): + return NtGetContextThread.ctypes_function(hThread, lpContext) + +@NtdllProxy("LdrLoadDll", error_ntstatus) +def LdrLoadDll(PathToFile, Flags, ModuleFileName, ModuleHandle): + return LdrLoadDll.ctypes_function(PathToFile, Flags, ModuleFileName, ModuleHandle) + + +@NtdllProxy('NtQuerySystemInformation', ntquerysysteminformation_error_check) +def NtQuerySystemInformation(SystemInformationClass, SystemInformation=None, SystemInformationLength=0, ReturnLength=NeededParameter): + if SystemInformation is not None and SystemInformationLength == 0: + SystemInformationLength = ctypes.sizeof(SystemInformation) + return NtQuerySystemInformation.ctypes_function(SystemInformationClass, SystemInformation, SystemInformationLength, ReturnLength) + + +@NtdllProxy('NtQueryInformationProcess', error_ntstatus) +def NtQueryInformationProcess(ProcessHandle, ProcessInformationClass, ProcessInformation, ProcessInformationLength=0, ReturnLength=None): + if ProcessInformation is not None and ProcessInformationLength == 0: + ProcessInformationLength = ctypes.sizeof(ProcessInformation) + if type(ProcessInformation) == PROCESS_BASIC_INFORMATION: + ProcessInformation = byref(ProcessInformation) + if ReturnLength is None: + ReturnLength = byref(ULONG()) + return NtQueryInformationProcess.ctypes_function(ProcessHandle, ProcessInformationClass, ProcessInformation, ProcessInformationLength, ReturnLength) + + +@NtdllProxy('NtSetInformationProcess', error_ntstatus) +def NtSetInformationProcess(ProcessHandle, ProcessInformationClass, ProcessInformation, ProcessInformationLength=0): + if not ProcessInformationLength: + ProcessInformationLength = ctypes.sizeof(ProcessInformation) + return NtSetInformationProcess.ctypes_function(ProcessHandle, ProcessInformationClass, ProcessInformation, ProcessInformationLength) + +@NtdllProxy('NtQueryInformationThread', error_ntstatus) +def NtQueryInformationThread(ThreadHandle, ThreadInformationClass, ThreadInformation, ThreadInformationLength=0, ReturnLength=None): + if ReturnLength is None: + ReturnLength = byref(ULONG()) + if ThreadInformation is not None and ThreadInformationLength == 0: + ThreadInformationLength = ctypes.sizeof(ThreadInformation) + return NtQueryInformationThread.ctypes_function(ThreadHandle, ThreadInformationClass, ThreadInformation, ThreadInformationLength, ReturnLength) + + +@NtdllProxy('NtProtectVirtualMemory', error_ntstatus) +def NtProtectVirtualMemory(ProcessHandle, BaseAddress, NumberOfBytesToProtect, NewAccessProtection, OldAccessProtection=None): + if OldAccessProtection is None: + OldAccessProtection = DWORD() + return NtProtectVirtualMemory.ctypes_function(ProcessHandle, BaseAddress, NumberOfBytesToProtect, NewAccessProtection, OldAccessProtection) + +@NtdllProxy('NtQueryVirtualMemory', error_ntstatus) +def NtQueryVirtualMemory(ProcessHandle, BaseAddress, MemoryInformationClass, MemoryInformation=NeededParameter, MemoryInformationLength=0, ReturnLength=None): + if ReturnLength is None: + ReturnLength = byref(ULONG()) + if MemoryInformation is not None and MemoryInformationLength == 0: + ProcessInformationLength = ctypes.sizeof(MemoryInformation) + if type(MemoryInformation) == MEMORY_BASIC_INFORMATION64: + MemoryInformation = byref(MemoryInformation) + return NtQueryVirtualMemory.ctypes_function(ProcessHandle, BaseAddress, MemoryInformationClass, MemoryInformation=NeededParameter, MemoryInformationLength=0, ReturnLength=None) + + +@NtdllProxy('NtQueryObject', error_ntstatus) +def NtQueryObject(Handle, ObjectInformationClass, ObjectInformation=None, ObjectInformationLength=0, ReturnLength=NeededParameter): + return NtQueryObject.ctypes_function(Handle, ObjectInformationClass, ObjectInformation, ObjectInformationLength, ReturnLength) + +@NtdllProxy('NtCreateThreadEx', error_ntstatus) +def NtCreateThreadEx(ThreadHandle=None, DesiredAccess=0x1fffff, ObjectAttributes=0, ProcessHandle=NeededParameter, lpStartAddress=NeededParameter, lpParameter=NeededParameter, CreateSuspended=0, dwStackSize=0, Unknown1=0, Unknown2=0, Unknown=0): + if ThreadHandle is None: + ThreadHandle = byref(HANDLE()) + return NtCreateThreadEx.ctypes_function(ThreadHandle, DesiredAccess, ObjectAttributes, ProcessHandle, lpStartAddress, lpParameter, CreateSuspended, dwStackSize, Unknown1, Unknown2, Unknown3) + + +@NtdllProxy("NtSetContextThread", error_ntstatus) +def NtSetContextThread(hThread, lpContext): + return NtSetContextThread.ctypes_function(hThread, lpContext) + +@NtdllProxy("NtOpenEvent", error_ntstatus) +def NtOpenEvent(EventHandle, DesiredAccess, ObjectAttributes): + return NtOpenEvent.ctypes_function(EventHandle, DesiredAccess, ObjectAttributes) + + +@NtdllProxy("NtAlpcCreatePort", error_ntstatus) +def NtAlpcCreatePort(PortHandle, ObjectAttributes, PortAttributes): + return NtAlpcCreatePort.ctypes_function(PortHandle, ObjectAttributes, PortAttributes) + + +@NtdllProxy("NtAlpcConnectPort", error_ntstatus) +def NtAlpcConnectPort(PortHandle, PortName, ObjectAttributes, PortAttributes, Flags, RequiredServerSid, ConnectionMessage, BufferLength, OutMessageAttributes, InMessageAttributes, Timeout): + return NtAlpcConnectPort.ctypes_function(PortHandle, PortName, ObjectAttributes, PortAttributes, Flags, RequiredServerSid, ConnectionMessage, BufferLength, OutMessageAttributes, InMessageAttributes, Timeout) + + +@NtdllProxy("NtAlpcConnectPortEx", error_ntstatus) +def NtAlpcConnectPortEx(PortHandle, ConnectionPortObjectAttributes, ClientPortObjectAttributes, PortAttributes, Flags, ServerSecurityRequirements, ConnectionMessage, BufferLength, OutMessageAttributes, InMessageAttributes, Timeout): + return NtAlpcConnectPortEx.ctypes_function(PortHandle, ConnectionPortObjectAttributes, ClientPortObjectAttributes, PortAttributes, Flags, ServerSecurityRequirements, ConnectionMessage, BufferLength, OutMessageAttributes, InMessageAttributes, Timeout) + + +@NtdllProxy("NtAlpcAcceptConnectPort", error_ntstatus) +def NtAlpcAcceptConnectPort(PortHandle, ConnectionPortHandle, Flags, ObjectAttributes, PortAttributes, PortContext, ConnectionRequest, ConnectionMessageAttributes, AcceptConnection): + return NtAlpcAcceptConnectPort.ctypes_function(PortHandle, ConnectionPortHandle, Flags, ObjectAttributes, PortAttributes, PortContext, ConnectionRequest, ConnectionMessageAttributes, AcceptConnection) + + +@NtdllProxy("NtAlpcQueryInformation", error_ntstatus) +def NtAlpcQueryInformation(PortHandle, PortInformationClass, PortInformation, Length, ReturnLength): + return NtAlpcQueryInformation.ctypes_function(PortHandle, PortInformationClass, PortInformation, Length, ReturnLength) + +@NtdllProxy("NtAlpcDisconnectPort", error_ntstatus) +def NtAlpcDisconnectPort(PortHandle, Flags): + return NtAlpcDisconnectPort.ctypes_function(PortHandle, Flags) + +@NtdllProxy("NtAlpcSendWaitReceivePort", error_ntstatus) +def NtAlpcSendWaitReceivePort(PortHandle, Flags, SendMessage, SendMessageAttributes, ReceiveMessage, BufferLength, ReceiveMessageAttributes, Timeout): + return NtAlpcSendWaitReceivePort.ctypes_function(PortHandle, Flags, SendMessage, SendMessageAttributes, ReceiveMessage, BufferLength, ReceiveMessageAttributes, Timeout) + + +@NtdllProxy("AlpcInitializeMessageAttribute", error_ntstatus) +def AlpcInitializeMessageAttribute(AttributeFlags, Buffer, BufferSize, RequiredBufferSize): + return AlpcInitializeMessageAttribute.ctypes_function(AttributeFlags, Buffer, BufferSize, RequiredBufferSize) + + +@NtdllProxy("AlpcGetMessageAttribute", no_error_check) +def AlpcGetMessageAttribute(Buffer, AttributeFlag): + return AlpcGetMessageAttribute.ctypes_function(Buffer, AttributeFlag) + + +@NtdllProxy("NtAlpcCreatePortSection", error_ntstatus) +def NtAlpcCreatePortSection(PortHandle, Flags, SectionHandle, SectionSize, AlpcSectionHandle, ActualSectionSize): + return NtAlpcCreatePortSection.ctypes_function(PortHandle, Flags, SectionHandle, SectionSize, AlpcSectionHandle, ActualSectionSize) + + +@NtdllProxy("NtAlpcDeletePortSection", error_ntstatus) +def NtAlpcDeletePortSection(PortHandle, Flags, SectionHandle): + return NtAlpcDeletePortSection.ctypes_function(PortHandle, Flags, SectionHandle) + + +@NtdllProxy("NtAlpcCreateSectionView", error_ntstatus) +def NtAlpcCreateSectionView(PortHandle, Flags, ViewAttributes): + return NtAlpcCreateSectionView.ctypes_function(PortHandle, Flags, ViewAttributes) + + +@NtdllProxy("NtAlpcDeleteSectionView", error_ntstatus) +def NtAlpcDeleteSectionView(PortHandle, Flags, ViewBase): + return NtAlpcDeleteSectionView.ctypes_function(PortHandle, Flags, ViewBase) + + +@NtdllProxy("NtAlpcQueryInformationMessage", error_ntstatus) +def NtAlpcQueryInformationMessage(PortHandle, PortMessage, MessageInformationClass, MessageInformation, Length, ReturnLength): + return NtAlpcQueryInformationMessage.ctypes_function(PortHandle, PortMessage, MessageInformationClass, MessageInformation, Length, ReturnLength) + + +@NtdllProxy("NtOpenDirectoryObject", error_ntstatus) +def NtOpenDirectoryObject(DirectoryHandle, DesiredAccess, ObjectAttributes): + return NtOpenDirectoryObject.ctypes_function(DirectoryHandle, DesiredAccess, ObjectAttributes) + + +@NtdllProxy("NtQueryDirectoryObject", error_ntstatus) +def NtQueryDirectoryObject(DirectoryHandle, Buffer, Length, ReturnSingleEntry, RestartScan, Context, ReturnLength): + return NtQueryDirectoryObject.ctypes_function(DirectoryHandle, Buffer, Length, ReturnSingleEntry, RestartScan, Context, ReturnLength) + + +@NtdllProxy("NtQuerySymbolicLinkObject", error_ntstatus) +def NtQuerySymbolicLinkObject(LinkHandle, LinkTarget, ReturnedLength): + return NtQuerySymbolicLinkObject.ctypes_function(LinkHandle, LinkTarget, ReturnedLength) + + +@NtdllProxy("NtOpenSymbolicLinkObject", error_ntstatus) +def NtOpenSymbolicLinkObject(LinkHandle, DesiredAccess, ObjectAttributes): + return NtOpenSymbolicLinkObject.ctypes_function(LinkHandle, DesiredAccess, ObjectAttributes) + + +@NtdllProxy("NtQueryInformationFile", error_ntstatus) +def NtQueryInformationFile(FileHandle, IoStatusBlock, FileInformation, Length=None, FileInformationClass=NeededParameter): + if Length is None: + Length = ctypes.sizeof(FileInformation) + return NtQueryInformationFile.ctypes_function(FileHandle, IoStatusBlock, FileInformation, Length, FileInformationClass) + + +@NtdllProxy("NtQueryDirectoryFile", error_ntstatus) +def NtQueryDirectoryFile(FileHandle, Event=None, ApcRoutine=None, ApcContext=None, IoStatusBlock=NeededParameter, FileInformation=NeededParameter, Length=None, FileInformationClass=NeededParameter, ReturnSingleEntry=NeededParameter, FileName=None, RestartScan=NeededParameter): + if Length is None: + Length = ctypes.sizeof(FileInformation) + return NtQueryDirectoryFile.ctypes_function(FileHandle, Event, ApcRoutine, ApcContext, IoStatusBlock, FileInformation, Length, FileInformationClass, ReturnSingleEntry, FileName, RestartScan) + +@NtdllProxy("NtQueryVolumeInformationFile", error_ntstatus) +def NtQueryVolumeInformationFile(FileHandle, IoStatusBlock, FsInformation, Length=None, FsInformationClass=NeededParameter): + if Length is None: + Length = ctypes.sizeof(FsInformation) + return NtQueryVolumeInformationFile.ctypes_function(FileHandle, IoStatusBlock, FsInformation, Length, FsInformationClass) + + +@NtdllProxy("RtlDecompressBuffer", error_ntstatus) +def RtlDecompressBuffer(CompressionFormat, UncompressedBuffer, UncompressedBufferSize, CompressedBuffer, CompressedBufferSize=None, FinalUncompressedSize=NeededParameter): + if CompressedBufferSize is None: + CompressedBufferSize = len(CompressedBuffer) + return RtlDecompressBuffer.ctypes_function(CompressionFormat, UncompressedBuffer, UncompressedBufferSize, CompressedBuffer, CompressedBufferSize, FinalUncompressedSize) + +@NtdllProxy("RtlDecompressBufferEx", error_ntstatus) +def RtlDecompressBufferEx(CompressionFormat, UncompressedBuffer, UncompressedBufferSize, CompressedBuffer, CompressedBufferSize=None, FinalUncompressedSize=NeededParameter, WorkSpace=NeededParameter): + if CompressedBufferSize is None: + CompressedBufferSize = len(CompressedBuffer) + # TODO: automatic 'WorkSpace' size calc + allocation ? + return RtlDecompressBufferEx.ctypes_function(CompressionFormat, UncompressedBuffer, UncompressedBufferSize, CompressedBuffer, CompressedBufferSize, FinalUncompressedSize, WorkSpace) + +@NtdllProxy("RtlGetCompressionWorkSpaceSize", error_ntstatus) +def RtlGetCompressionWorkSpaceSize(CompressionFormatAndEngine, CompressBufferWorkSpaceSize, CompressFragmentWorkSpaceSize): + return RtlGetCompressionWorkSpaceSize.ctypes_function(CompressionFormatAndEngine, CompressBufferWorkSpaceSize, CompressFragmentWorkSpaceSize) + + +@NtdllProxy("RtlDosPathNameToNtPathName_U", zero_is_fail_error_check) +def RtlDosPathNameToNtPathName_U(DosName, NtName=None, PartName=None, RelativeName=None): + return RtlDosPathNameToNtPathName_U.ctypes_function(DosName, NtName, PartName, RelativeName) + + +# Section stuff + +@NtdllProxy("NtCreateSection", error_ntstatus) +def NtCreateSection(SectionHandle, DesiredAccess, ObjectAttributes, MaximumSize, SectionPageProtection, AllocationAttributes, FileHandle): + return NtCreateSection.ctypes_function(SectionHandle, DesiredAccess, ObjectAttributes, MaximumSize, SectionPageProtection, AllocationAttributes, FileHandle) + + +@NtdllProxy("NtOpenSection", error_ntstatus) +def NtOpenSection(SectionHandle, DesiredAccess, ObjectAttributes): + return NtOpenSection.ctypes_function(SectionHandle, DesiredAccess, ObjectAttributes) + + +@NtdllProxy("NtMapViewOfSection", error_ntstatus) +def NtMapViewOfSection(SectionHandle, ProcessHandle, BaseAddress, ZeroBits, CommitSize, SectionOffset, ViewSize, InheritDisposition, AllocationType, Win32Protect): + return NtMapViewOfSection.ctypes_function(SectionHandle, ProcessHandle, BaseAddress, ZeroBits, CommitSize, SectionOffset, ViewSize, InheritDisposition, AllocationType, Win32Protect) + + +@NtdllProxy("NtUnmapViewOfSection", error_ntstatus) +def NtUnmapViewOfSection(ProcessHandle, BaseAddress): + return NtUnmapViewOfSection.ctypes_function(ProcessHandle, BaseAddress) + + +@NtdllProxy("RtlGetUnloadEventTraceEx", no_error_check) +def RtlGetUnloadEventTraceEx(ElementSize, ElementCount, EventTrace): + return RtlGetUnloadEventTraceEx.ctypes_function(ElementSize, ElementCount, EventTrace) + + +@NtdllProxy("TpCallbackSendAlpcMessageOnCompletion") +def TpCallbackSendAlpcMessageOnCompletion(TpHandle, PortHandle, Flags, SendMessage): + return TpCallbackSendAlpcMessageOnCompletion.ctypes_function(TpHandle, PortHandle, Flags, SendMessage) + +# Not exported + +# @NtdllProxy("ApiSetResolveToHost") +# def ApiSetResolveToHost(Schema, FileNameIn, ParentName, Resolved, HostBinary): + # return ApiSetResolveToHost.ctypes_function(Schema, FileNameIn, ParentName, Resolved, HostBinary) + + +# ##### ADVAPI32 ####### # + +@Advapi32Proxy('OpenProcessToken') +def OpenProcessToken(ProcessHandle=None, DesiredAccess=NeededParameter, TokenHandle=NeededParameter): + """If ProcessHandle is None: take the current process""" + if ProcessHandle is None: + ProcessHandle = GetCurrentProcess() + return OpenProcessToken.ctypes_function(ProcessHandle, DesiredAccess, TokenHandle) + + +@Advapi32Proxy('OpenThreadToken') +def OpenThreadToken(ThreadHandle, DesiredAccess, OpenAsSelf, TokenHandle): + return OpenThreadToken.ctypes_function(ThreadHandle, DesiredAccess, OpenAsSelf, TokenHandle) + +@Advapi32Proxy('LookupPrivilegeValueA') +def LookupPrivilegeValueA(lpSystemName=None, lpName=NeededParameter, lpLuid=NeededParameter): + return LookupPrivilegeValueA.ctypes_function(lpSystemName, lpName, lpLuid) + + +@Advapi32Proxy('LookupPrivilegeValueW') +def LookupPrivilegeValueW(lpSystemName=None, lpName=NeededParameter, lpLuid=NeededParameter): + return LookupPrivilegeValueW.ctypes_function(lpSystemName, lpName, lpLuid) + +@Advapi32Proxy('LookupPrivilegeNameA') +def LookupPrivilegeNameA(lpSystemName, lpLuid, lpName, cchName): + return LookupPrivilegeNameA.ctypes_function(lpSystemName, lpLuid, lpName, cchName) + +@Advapi32Proxy('LookupPrivilegeNameW') +def LookupPrivilegeNameW(lpSystemName, lpLuid, lpName, cchName): + return LookupPrivilegeNameW.ctypes_function(lpSystemName, lpLuid, lpName, cchName) + + +@Advapi32Proxy('AdjustTokenPrivileges') +def AdjustTokenPrivileges(TokenHandle, DisableAllPrivileges=False, NewState=NeededParameter, BufferLength=None, PreviousState=None, ReturnLength=None): + if BufferLength is None: + BufferLength = ctypes.sizeof(NewState) + return AdjustTokenPrivileges.ctypes_function(TokenHandle, DisableAllPrivileges, NewState, BufferLength, PreviousState, ReturnLength) + + +@Advapi32Proxy('LookupAccountSidA') +def LookupAccountSidA(lpSystemName, lpSid, lpName, cchName, lpReferencedDomainName, cchReferencedDomainName, peUse): + return LookupAccountSidA.ctypes_function(lpSystemName, lpSid, lpName, cchName, lpReferencedDomainName, cchReferencedDomainName, peUse) + + +@Advapi32Proxy('LookupAccountSidW') +def LookupAccountSidW(lpSystemName, lpSid, lpName, cchName, lpReferencedDomainName, cchReferencedDomainName, peUse): + return LookupAccountSidW.ctypes_function(lpSystemName, lpSid, lpName, cchName, lpReferencedDomainName, cchReferencedDomainName, peUse) + +@Advapi32Proxy('CreateWellKnownSid') +def CreateWellKnownSid(WellKnownSidType, DomainSid=None, pSid=None, cbSid=NeededParameter): + return CreateWellKnownSid.ctypes_function(WellKnownSidType, DomainSid, pSid, cbSid) + +# Token stuff + +GetSidSubAuthorityCount = TransparentAdvapi32Proxy("GetSidSubAuthorityCount") +GetSidSubAuthority = TransparentAdvapi32Proxy("GetSidSubAuthority") +GetLengthSid = TransparentAdvapi32Proxy("GetLengthSid") + +@Advapi32Proxy('GetTokenInformation') +def GetTokenInformation(TokenHandle=NeededParameter, TokenInformationClass=NeededParameter, TokenInformation=None, TokenInformationLength=0, ReturnLength=None): + if ReturnLength is None: + ReturnLength = ctypes.byref(DWORD()) + return GetTokenInformation.ctypes_function(TokenHandle, TokenInformationClass, TokenInformation, TokenInformationLength, ReturnLength) + + +@Advapi32Proxy('SetTokenInformation') +def SetTokenInformation(TokenHandle, TokenInformationClass, TokenInformation, TokenInformationLength): + return SetTokenInformation.ctypes_function(TokenHandle, TokenInformationClass, TokenInformation, TokenInformationLength) + +@Advapi32Proxy('RegOpenKeyExA', should_return_zero_check) +def RegOpenKeyExA(hKey, lpSubKey, ulOptions, samDesired, phkResult): + return RegOpenKeyExA.ctypes_function(hKey, lpSubKey, ulOptions, samDesired, phkResult) + +# Security stuff + +@Advapi32Proxy('GetNamedSecurityInfoA', should_return_zero_check) +def GetNamedSecurityInfoA(pObjectName, ObjectType, SecurityInfo, ppsidOwner=None, ppsidGroup=None, ppDacl=None, ppSacl=None, ppSecurityDescriptor=None): + return GetNamedSecurityInfoA.ctypes_function(pObjectName, ObjectType, SecurityInfo, ppsidOwner, ppsidGroup, ppDacl, ppSacl, ppSecurityDescriptor) + + +@Advapi32Proxy('GetNamedSecurityInfoW', should_return_zero_check) +def GetNamedSecurityInfoW(pObjectName, ObjectType, SecurityInfo, ppsidOwner=None, ppsidGroup=None, ppDacl=None, ppSacl=None, ppSecurityDescriptor=None): + return GetNamedSecurityInfoW.ctypes_function(pObjectName, ObjectType, SecurityInfo, ppsidOwner, ppsidGroup, ppDacl, ppSacl, ppSecurityDescriptor) + + +@Advapi32Proxy('GetSecurityInfo', should_return_zero_check) +def GetSecurityInfo(handle, ObjectType, SecurityInfo, ppsidOwner=None, ppsidGroup=None, ppDacl=None, ppSacl=None, ppSecurityDescriptor=None): + return GetSecurityInfo.ctypes_function(handle, ObjectType, SecurityInfo, ppsidOwner, ppsidGroup, ppDacl, ppSacl, ppSecurityDescriptor) + + +# Sid stuff +@Advapi32Proxy('ConvertStringSidToSidA') +def ConvertStringSidToSidA(StringSid, Sid): + return ConvertStringSidToSidA.ctypes_function(StringSid, Sid) + +@Advapi32Proxy('ConvertStringSidToSidW') +def ConvertStringSidToSidW(StringSid, Sid): + return ConvertStringSidToSidW.ctypes_function(StringSid, Sid) + +@Advapi32Proxy('ConvertSidToStringSidA') +def ConvertSidToStringSidA(Sid, StringSid): + return ConvertSidToStringSidA.ctypes_function(Sid, StringSid) + +@Advapi32Proxy('ConvertSidToStringSidW') +def ConvertSidToStringSidW(Sid, StringSid): + return ConvertSidToStringSidW.ctypes_function(Sid, StringSid) + + + # Registry stuff + +# TODO: default values? which ones ? + +@Advapi32Proxy('RegOpenKeyExW', should_return_zero_check) +def RegOpenKeyExW(hKey, lpSubKey, ulOptions, samDesired, phkResult): + return RegOpenKeyExW.ctypes_function(hKey, lpSubKey, ulOptions, samDesired, phkResult) + + +@Advapi32Proxy('RegGetValueA', should_return_zero_check) +def RegGetValueA(hkey, lpSubKey, lpValue, dwFlags, pdwType, pvData, pcbData): + return RegGetValueA.ctypes_function(hkey, lpSubKey, lpValue, dwFlags, pdwType, pvData, pcbData) + + +@Advapi32Proxy('RegGetValueW', should_return_zero_check) +def RegGetValueW(hkey, lpSubKey=None, lpValue=NeededParameter, dwFlags=0, pdwType=None, pvData=None, pcbData=None): + return RegGetValueW.ctypes_function(hkey, lpSubKey, lpValue, dwFlags, pdwType, pvData, pcbData) + +@Advapi32Proxy('RegQueryValueExA', should_return_zero_check) +def RegQueryValueExA(hKey, lpValueName, lpReserved, lpType, lpData, lpcbData): + return RegQueryValueExA.ctypes_function(hKey, lpValueName, lpReserved, lpType, lpData, lpcbData) + +@Advapi32Proxy('RegQueryValueExW', should_return_zero_check) +def RegQueryValueExW(hKey, lpValueName, lpReserved, lpType, lpData, lpcbData): + return RegQueryValueExA.ctypes_function(hKey, lpValueName, lpReserved, lpType, lpData, lpcbData) + +@Advapi32Proxy('RegCloseKey', should_return_zero_check) +def RegCloseKey(hKey): + return RegCloseKey.ctypes_function(hKey) + + +# Services +@Advapi32Proxy('OpenSCManagerA') +def OpenSCManagerA(lpMachineName=None, lpDatabaseName=None, dwDesiredAccess=SC_MANAGER_ALL_ACCESS): + return OpenSCManagerA.ctypes_function(lpMachineName, lpDatabaseName, dwDesiredAccess) + + +@Advapi32Proxy('OpenSCManagerW') +def OpenSCManagerW(lpMachineName=None, lpDatabaseName=None, dwDesiredAccess=SC_MANAGER_ALL_ACCESS): + return OpenSCManagerW.ctypes_function(lpMachineName, lpDatabaseName, dwDesiredAccess) + + +@Advapi32Proxy('EnumServicesStatusExA') +def EnumServicesStatusExA(hSCManager, InfoLevel, dwServiceType, dwServiceState, lpServices, cbBufSize, pcbBytesNeeded, lpServicesReturned, lpResumeHandle, pszGroupName): + return EnumServicesStatusExA.ctypes_function(hSCManager, InfoLevel, dwServiceType, dwServiceState, lpServices, cbBufSize, pcbBytesNeeded, lpServicesReturned, lpResumeHandle, pszGroupName) + + +@Advapi32Proxy('EnumServicesStatusExW') +def EnumServicesStatusExW(hSCManager, InfoLevel, dwServiceType, dwServiceState, lpServices, cbBufSize, pcbBytesNeeded, lpServicesReturned, lpResumeHandle, pszGroupName): + return EnumServicesStatusExW.ctypes_function(hSCManager, InfoLevel, dwServiceType, dwServiceState, lpServices, cbBufSize, pcbBytesNeeded, lpServicesReturned, lpResumeHandle, pszGroupName) + + +@Advapi32Proxy('StartServiceA') +def StartServiceA(hService, dwNumServiceArgs, lpServiceArgVectors): + return StartServiceA.ctypes_function(hService, dwNumServiceArgs, lpServiceArgVectors) + + +@Advapi32Proxy('StartServiceW') +def StartServiceW(hService, dwNumServiceArgs, lpServiceArgVectors): + return StartServiceW.ctypes_function(hService, dwNumServiceArgs, lpServiceArgVectors) + + +@Advapi32Proxy('OpenServiceA') +def OpenServiceA(hSCManager, lpServiceName, dwDesiredAccess): + return OpenServiceA.ctypes_function(hSCManager, lpServiceName, dwDesiredAccess) + + +@Advapi32Proxy('OpenServiceW') +def OpenServiceW(hSCManager, lpServiceName, dwDesiredAccess): + return OpenServiceW.ctypes_function(hSCManager, lpServiceName, dwDesiredAccess) + + +@Advapi32Proxy('CloseServiceHandle') +def CloseServiceHandle(hSCObject): + return CloseServiceHandle.ctypes_function(hSCObject) + +# Create process stuff + +@Advapi32Proxy('CreateProcessAsUserA') +def CreateProcessAsUserA(hToken, lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation): + return CreateProcessAsUserA.ctypes_function(hToken, lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation) + +@Advapi32Proxy('CreateProcessAsUserW') +def CreateProcessAsUserW(hToken, lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation): + return CreateProcessAsUserW.ctypes_function(hToken, lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation) + + +# Event log stuff + +@Advapi32Proxy('OpenEventLogA') +def OpenEventLogA(lpUNCServerName=None, lpSourceName=NeededParameter): + return OpenEventLogA.ctypes_function(lpUNCServerName, lpSourceName) + +@Advapi32Proxy('OpenEventLogW') +def OpenEventLogW(lpUNCServerName=None, lpSourceName=NeededParameter): + return OpenEventLogW.ctypes_function(lpUNCServerName, lpSourceName) + +@Advapi32Proxy('ReadEventLogA') +def ReadEventLogA(hEventLog, dwReadFlags, dwRecordOffset, lpBuffer, nNumberOfBytesToRead, pnBytesRead, pnMinNumberOfBytesNeeded): + return ReadEventLogA.ctypes_function(hEventLog, dwReadFlags, dwRecordOffset, lpBuffer, nNumberOfBytesToRead, pnBytesRead, pnMinNumberOfBytesNeeded) + +@Advapi32Proxy('ReadEventLogW') +def ReadEventLogW(hEventLog, dwReadFlags, dwRecordOffset, lpBuffer, nNumberOfBytesToRead, pnBytesRead, pnMinNumberOfBytesNeeded): + return ReadEventLogW.ctypes_function(hEventLog, dwReadFlags, dwRecordOffset, lpBuffer, nNumberOfBytesToRead, pnBytesRead, pnMinNumberOfBytesNeeded) + +@Advapi32Proxy('GetEventLogInformation') +def GetEventLogInformation(hEventLog, dwInfoLevel, lpBuffer, cbBufSize, pcbBytesNeeded): + return GetEventLogInformation.ctypes_function(hEventLog, dwInfoLevel, lpBuffer, cbBufSize, pcbBytesNeeded) + +@Advapi32Proxy('GetNumberOfEventLogRecords') +def GetNumberOfEventLogRecords(hEventLog, NumberOfRecords): + return GetNumberOfEventLogRecords.ctypes_function(hEventLog, NumberOfRecords) + +@Advapi32Proxy('CloseEventLog') +def CloseEventLog(hEventLog): + return CloseEventLog.ctypes_function(hEventLog) + +# ##### Iphlpapi (network list and stuff) ###### # + +def set_tcp_entry_error_check(func_name, result, func, args): + """raise IphlpapiError if result is NOT 0 -- pretty print error 317""" + if result: + if result == 317: + raise IphlpapiError(func_name, result, "<require elevated process>".format(func_name)) + raise IphlpapiError(func_name, result) + return args + +SetTcpEntry = TransparentIphlpapiProxy('SetTcpEntry', error_check=set_tcp_entry_error_check) + + +@IphlpapiProxy('GetExtendedTcpTable') +def GetExtendedTcpTable(pTcpTable, pdwSize=None, bOrder=True, ulAf=NeededParameter, TableClass=TCP_TABLE_OWNER_PID_ALL, Reserved=0): + if pdwSize is None: + pdwSize = ULONG(ctypes.sizeof(pTcpTable)) + return GetExtendedTcpTable.ctypes_function(pTcpTable, pdwSize, bOrder, ulAf, TableClass, Reserved) + + +@IphlpapiProxy('GetInterfaceInfo') +def GetInterfaceInfo(pIfTable, dwOutBufLen=None): + if dwOutBufLen is None: + dwOutBufLen = ULONG(ctypes.sizeof(pIfTable)) + return GetInterfaceInfo.ctypes_function(pIfTable, dwOutBufLen) + + +@IphlpapiProxy('GetIfTable') +def GetIfTable(pIfTable, pdwSize, bOrder=False): + return GetIfTable.ctypes_function(pIfTable, pdwSize, bOrder) + +@IphlpapiProxy('GetIpAddrTable') +def GetIpAddrTable(pIpAddrTable, pdwSize, bOrder=False): + return GetIpAddrTable.ctypes_function(pIpAddrTable, pdwSize, bOrder) + +# ## WinTrustProxy PE signature## + +@WinTrustProxy('WinVerifyTrust') +def WinVerifyTrust(hwnd, pgActionID, pWVTData): + return WinVerifyTrust.ctypes_function(hwnd, pgActionID, pWVTData) + + +# ##Wintrust: catalog stuff ### + +@WinTrustProxy('CryptCATAdminCalcHashFromFileHandle', error_check=zero_is_fail_error_check) +def CryptCATAdminCalcHashFromFileHandle(hFile, pcbHash, pbHash, dwFlags): + return CryptCATAdminCalcHashFromFileHandle.ctypes_function(hFile, pcbHash, pbHash, dwFlags) + + +@WinTrustProxy('CryptCATAdminEnumCatalogFromHash') +def CryptCATAdminEnumCatalogFromHash(hCatAdmin, pbHash, cbHash, dwFlags, phPrevCatInfo): + return CryptCATAdminEnumCatalogFromHash.ctypes_function(hCatAdmin, pbHash, cbHash, dwFlags, phPrevCatInfo) + + +@WinTrustProxy('CryptCATAdminAcquireContext', error_check=zero_is_fail_error_check) +def CryptCATAdminAcquireContext(phCatAdmin, pgSubsystem, dwFlags): + return CryptCATAdminAcquireContext.ctypes_function(phCatAdmin, pgSubsystem, dwFlags) + + +@WinTrustProxy('CryptCATCatalogInfoFromContext', error_check=zero_is_fail_error_check) +def CryptCATCatalogInfoFromContext(hCatInfo, psCatInfo, dwFlags): + return CryptCATCatalogInfoFromContext.ctypes_function(hCatInfo, psCatInfo, dwFlags) + + +@WinTrustProxy('CryptCATAdminReleaseCatalogContext') +def CryptCATAdminReleaseCatalogContext(hCatAdmin, hCatInfo, dwFlags): + return CryptCATAdminReleaseCatalogContext.ctypes_function(hCatAdmin, hCatInfo, dwFlags) + + +@WinTrustProxy('CryptCATAdminReleaseContext') +def CryptCATAdminReleaseContext(hCatAdmin, dwFlags): + return CryptCATAdminReleaseContext.ctypes_function(hCatAdmin, dwFlags) + + +@WinTrustProxy('CryptCATEnumerateAttr') +def CryptCATEnumerateAttr(hCatalog, pCatMember, pPrevAttr): + return CryptCATEnumerateAttr.ctypes_function(hCatalog, pCatMember, pPrevAttr) + + +@WinTrustProxy('CryptCATEnumerateCatAttr') +def CryptCATEnumerateCatAttr(hCatalog, pPrevAttr): + return CryptCATEnumerateCatAttr.ctypes_function(hCatalog, pPrevAttr) + + +@WinTrustProxy('CryptCATEnumerateMember') +def CryptCATEnumerateMember(hCatalog, pPrevMember): + return CryptCATEnumerateMember.ctypes_function(hCatalog, pPrevMember) + +## Crypto API ## +@Crypt32Proxy('CertStrToNameA') +def CertStrToNameA(dwCertEncodingType, pszX500, dwStrType, pvReserved, pbEncoded, pcbEncoded, ppszError): + return CertStrToNameA.ctypes_function(dwCertEncodingType, pszX500, dwStrType, pvReserved, pbEncoded, pcbEncoded, ppszError) + + +@Crypt32Proxy('CertStrToNameW') +def CertStrToNameW(dwCertEncodingType, pszX500, dwStrType, pvReserved, pbEncoded, pcbEncoded, ppszError): + return CertStrToNameW.ctypes_function(dwCertEncodingType, pszX500, dwStrType, pvReserved, pbEncoded, pcbEncoded, ppszError) + + +@Crypt32Proxy('CertCreateSelfSignCertificate') +def CertCreateSelfSignCertificate(hCryptProvOrNCryptKey, pSubjectIssuerBlob, dwFlags, pKeyProvInfo, pSignatureAlgorithm, pStartTime, pEndTime, pExtensions): + return CertCreateSelfSignCertificate.ctypes_function(hCryptProvOrNCryptKey, pSubjectIssuerBlob, dwFlags, pKeyProvInfo, pSignatureAlgorithm, pStartTime, pEndTime, pExtensions) + + +@Crypt32Proxy('CertOpenStore') +def CertOpenStore(lpszStoreProvider, dwMsgAndCertEncodingType, hCryptProv, dwFlags, pvPara): + if isinstance(lpszStoreProvider, (long, int)): + lpszStoreProvider = LPCSTR(lpszStoreProvider) + return CertOpenStore.ctypes_function(lpszStoreProvider, dwMsgAndCertEncodingType, hCryptProv, dwFlags, pvPara) + + +@Crypt32Proxy('CertAddCertificateContextToStore') +def CertAddCertificateContextToStore(hCertStore, pCertContext, dwAddDisposition, ppStoreContext): + return CertAddCertificateContextToStore.ctypes_function(hCertStore, pCertContext, dwAddDisposition, ppStoreContext) + + +@Crypt32Proxy('PFXExportCertStoreEx') +def PFXExportCertStoreEx(hStore, pPFX, szPassword, pvPara, dwFlags): + return PFXExportCertStoreEx.ctypes_function(hStore, pPFX, szPassword, pvPara, dwFlags) + + +@Advapi32Proxy('CryptGenKey') +def CryptGenKey(hProv, Algid, dwFlags, phKey): + return CryptGenKey.ctypes_function(hProv, Algid, dwFlags, phKey) + + +@Advapi32Proxy('CryptDestroyKey') +def CryptDestroyKey(hKey): + return CryptDestroyKey.ctypes_function(hKey) + + +@Advapi32Proxy('CryptAcquireContextA') +def CryptAcquireContextA(phProv, pszContainer, pszProvider, dwProvType, dwFlags): + return CryptAcquireContextA.ctypes_function(phProv, pszContainer, pszProvider, dwProvType, dwFlags) + + +@Advapi32Proxy('CryptAcquireContextW') +def CryptAcquireContextW(phProv, pszContainer, pszProvider, dwProvType, dwFlags): + return CryptAcquireContextW.ctypes_function(phProv, pszContainer, pszProvider, dwProvType, dwFlags) + + +@Advapi32Proxy('CryptReleaseContext') +def CryptReleaseContext(hProv, dwFlags): + return CryptReleaseContext.ctypes_function(hProv, dwFlags) + + +@Advapi32Proxy('CryptExportKey') +def CryptExportKey(hKey, hExpKey, dwBlobType, dwFlags, pbData, pdwDataLen): + return CryptExportKey.ctypes_function(hKey, hExpKey, dwBlobType, dwFlags, pbData, pdwDataLen) + + +@Crypt32Proxy('PFXImportCertStore') +def PFXImportCertStore(pPFX, szPassword, dwFlags): + return PFXImportCertStore.ctypes_function(pPFX, szPassword, dwFlags) + + +@Crypt32Proxy('CertFindCertificateInStore') +def CertFindCertificateInStore(hCertStore, dwCertEncodingType, dwFindFlags, dwFindType, pvFindPara, pPrevCertContext): + return CertFindCertificateInStore.ctypes_function(hCertStore, dwCertEncodingType, dwFindFlags, dwFindType, pvFindPara, pPrevCertContext) + + +@Crypt32Proxy('CertGetCertificateContextProperty') +def CertGetCertificateContextProperty(pCertContext, dwPropId, pvData, pcbData): + return CertGetCertificateContextProperty.ctypes_function(pCertContext, dwPropId, pvData, pcbData) + +@Crypt32Proxy('CertEnumCertificateContextProperties', no_error_check) +def CertEnumCertificateContextProperties(pCertContext, dwPropId): + return CertEnumCertificateContextProperties.ctypes_function(pCertContext, dwPropId) + + +@Crypt32Proxy('CryptEncryptMessage') +def CryptEncryptMessage(pEncryptPara, cRecipientCert, rgpRecipientCert, pbToBeEncrypted, cbToBeEncrypted, pbEncryptedBlob, pcbEncryptedBlob): + if isinstance(pbToBeEncrypted, basestring): + # Transform string to array of byte + pbToBeEncrypted = (BYTE * len(pbToBeEncrypted))(*bytearray(pbToBeEncrypted)) + if cbToBeEncrypted is None and pbToBeEncrypted is not None: + cbToBeEncrypted = len(pbToBeEncrypted) + return CryptEncryptMessage.ctypes_function(pEncryptPara, cRecipientCert, rgpRecipientCert, pbToBeEncrypted, cbToBeEncrypted, pbEncryptedBlob, pcbEncryptedBlob) + + +@Crypt32Proxy('CryptDecryptMessage') +def CryptDecryptMessage(pDecryptPara, pbEncryptedBlob, cbEncryptedBlob, pbDecrypted, pcbDecrypted, ppXchgCert): + return CryptDecryptMessage.ctypes_function(pDecryptPara, pbEncryptedBlob, cbEncryptedBlob, pbDecrypted, pcbDecrypted, ppXchgCert) + + +@Crypt32Proxy('CryptAcquireCertificatePrivateKey') +def CryptAcquireCertificatePrivateKey(pCert, dwFlags, pvParameters, phCryptProvOrNCryptKey, pdwKeySpec, pfCallerFreeProvOrNCryptKey): + return CryptAcquireCertificatePrivateKey.ctypes_function(pCert, dwFlags, pvParameters, phCryptProvOrNCryptKey, pdwKeySpec, pfCallerFreeProvOrNCryptKey) + + +@Crypt32Proxy('CertGetNameStringA') +def CertGetNameStringA(pCertContext, dwType, dwFlags, pvTypePara, pszNameString, cchNameString): + return CertGetNameStringA.ctypes_function(pCertContext, dwType, dwFlags, pvTypePara, pszNameString, cchNameString) + + +@Crypt32Proxy('CertGetNameStringW') +def CertGetNameStringW(pCertContext, dwType, dwFlags, pvTypePara, pszNameString, cchNameString): + return CertGetNameStringW.ctypes_function(pCertContext, dwType, dwFlags, pvTypePara, pszNameString, cchNameString) + + +@Crypt32Proxy('CertGetCertificateChain') +def CertGetCertificateChain(hChainEngine, pCertContext, pTime, hAdditionalStore, pChainPara, dwFlags, pvReserved, ppChainContext): + return CertGetCertificateChain.ctypes_function(hChainEngine, pCertContext, pTime, hAdditionalStore, pChainPara, dwFlags, pvReserved, ppChainContext) + +@Crypt32Proxy('CertDuplicateCertificateContext') +def CertDuplicateCertificateContext(pCertContext): + return CertDuplicateCertificateContext.ctypes_function(pCertContext) + +@Crypt32Proxy('CertFreeCertificateContext') +def CertFreeCertificateContext(pCertContext): + return CertFreeCertificateContext.ctypes_function(pCertContext) + + +@Crypt32Proxy('CertEnumCertificatesInStore') +def CertEnumCertificatesInStore(hCertStore, pPrevCertContext): + return CertEnumCertificatesInStore.ctypes_function(hCertStore, pPrevCertContext) + +@Crypt32Proxy('CertCompareCertificate', error_check=no_error_check) +def CertCompareCertificate(dwCertEncodingType, pCertId1, pCertId2): + """This function does not raise is compare has failed: + return 0 if cert are NOT equals + """ + return CertCompareCertificate.ctypes_function(dwCertEncodingType, pCertId1, pCertId2) + +@Crypt32Proxy('CertEnumCTLsInStore') +def CertEnumCTLsInStore(hCertStore, pPrevCtlContext): + return CertEnumCTLsInStore.ctypes_function(hCertStore, pPrevCtlContext) + + +@Crypt32Proxy('CryptEncodeObjectEx') +def CryptEncodeObjectEx(dwCertEncodingType, lpszStructType, pvStructInfo, dwFlags, pEncodePara, pvEncoded, pcbEncoded): + lpszStructType = LPCSTR(lpszStructType) if isinstance(lpszStructType, (int, long)) else lpszStructType + return CryptEncodeObjectEx.ctypes_function(dwCertEncodingType, lpszStructType, pvStructInfo, dwFlags, pEncodePara, pvEncoded, pcbEncoded) + +@Crypt32Proxy('CertCreateCertificateContext') +def CertCreateCertificateContext(dwCertEncodingType, pbCertEncoded, cbCertEncoded): + return CertCreateCertificateContext.ctypes_function(dwCertEncodingType, pbCertEncoded, cbCertEncoded) + + +@Crypt32Proxy('CryptQueryObject') +def CryptQueryObject(dwObjectType, pvObject, dwExpectedContentTypeFlags, dwExpectedFormatTypeFlags, dwFlags, pdwMsgAndCertEncodingType, pdwContentType, pdwFormatType, phCertStore, phMsg, ppvContext): + return CryptQueryObject.ctypes_function(dwObjectType, pvObject, dwExpectedContentTypeFlags, dwExpectedFormatTypeFlags, dwFlags, pdwMsgAndCertEncodingType, pdwContentType, pdwFormatType, phCertStore, phMsg, ppvContext) + + +@Crypt32Proxy('CryptMsgGetParam') +def CryptMsgGetParam(hCryptMsg, dwParamType, dwIndex, pvData, pcbData): + return CryptMsgGetParam.ctypes_function(hCryptMsg, dwParamType, dwIndex, pvData, pcbData) + + +@Crypt32Proxy('CryptDecodeObject') +def CryptDecodeObject(dwCertEncodingType, lpszStructType, pbEncoded, cbEncoded, dwFlags, pvStructInfo, pcbStructInfo): + return CryptDecodeObject.ctypes_function(dwCertEncodingType, lpszStructType, pbEncoded, cbEncoded, dwFlags, pvStructInfo, pcbStructInfo) + + +@Crypt32Proxy('CryptMsgVerifyCountersignatureEncoded') +def CryptMsgVerifyCountersignatureEncoded(hCryptProv, dwEncodingType, pbSignerInfo, cbSignerInfo, pbSignerInfoCountersignature, cbSignerInfoCountersignature, pciCountersigner): + return CryptMsgVerifyCountersignatureEncoded.ctypes_function(hCryptProv, dwEncodingType, pbSignerInfo, cbSignerInfo, pbSignerInfoCountersignature, cbSignerInfoCountersignature, pciCountersigner) + + +@Crypt32Proxy('CryptMsgVerifyCountersignatureEncodedEx') +def CryptMsgVerifyCountersignatureEncodedEx(hCryptProv, dwEncodingType, pbSignerInfo, cbSignerInfo, pbSignerInfoCountersignature, cbSignerInfoCountersignature, dwSignerType, pvSigner, dwFlags, pvExtra): + return CryptMsgVerifyCountersignatureEncodedEx.ctypes_function(hCryptProv, dwEncodingType, pbSignerInfo, cbSignerInfo, pbSignerInfoCountersignature, cbSignerInfoCountersignature, dwSignerType, pvSigner, dwFlags, pvExtra) + + +@Crypt32Proxy('CryptHashCertificate') +def CryptHashCertificate(hCryptProv, Algid, dwFlags, pbEncoded, cbEncoded, pbComputedHash, pcbComputedHash): + return CryptHashCertificate.ctypes_function(hCryptProv, Algid, dwFlags, pbEncoded, cbEncoded, pbComputedHash, pcbComputedHash) + +# ## CryptUI ## # + +@CryptUIProxy('CryptUIDlgViewContext') +def CryptUIDlgViewContext(dwContextType, pvContext, hwnd, pwszTitle, dwFlags, pvReserved): + return CryptUIDlgViewContext.ctypes_function(dwContextType, pvContext, hwnd, pwszTitle, dwFlags, pvReserved) + +# ## User32 stuff ## # + +EnumWindows = TransparentUser32Proxy('EnumWindows') +EnumChildWindows = TransparentUser32Proxy('EnumChildWindows') +GetParent = TransparentUser32Proxy('GetParent') +GetClassInfoExA = TransparentUser32Proxy('GetClassInfoExA') +GetClassInfoExW = TransparentUser32Proxy('GetClassInfoExW') +GetWindowTextA = TransparentUser32Proxy('GetWindowTextA', no_error_check) +GetWindowTextW = TransparentUser32Proxy('GetWindowTextW', no_error_check) +GetWindowModuleFileNameA = TransparentUser32Proxy('GetWindowModuleFileNameA', no_error_check) +GetWindowModuleFileNameW = TransparentUser32Proxy('GetWindowModuleFileNameW', no_error_check) +GetSystemMetrics = TransparentUser32Proxy('GetSystemMetrics', no_error_check) +GetWindowThreadProcessId = TransparentUser32Proxy('GetWindowThreadProcessId') + +@User32Proxy("GetCursorPos") +def GetCursorPos(lpPoint): + return GetCursorPos.ctypes_function(lpPoint) + + +@User32Proxy("WindowFromPoint") +def WindowFromPoint(Point): + return WindowFromPoint.ctypes_function(Point) + +@User32Proxy("GetWindowRect") +def GetWindowRect(hWnd, lpRect): + return GetWindowRect.ctypes_function(hWnd, lpRect) + +@User32Proxy("MessageBoxA") +def MessageBoxA(hWnd=0, lpText=NeededParameter, lpCaption=None, uType=0): + return MessageBoxA.ctypes_function(hWnd, lpText, lpCaption, uType) + +@User32Proxy("MessageBoxW") +def MessageBoxW(hWnd=0, lpText=NeededParameter, lpCaption=None, uType=0): + return MessageBoxW.ctypes_function(hWnd, lpText, lpCaption, uType) + +@User32Proxy("RealGetWindowClassA") +def RealGetWindowClassA(hwnd, pszType, cchType=None): + if cchType is None: + cchType = len(pszType) + return RealGetWindowClassA.ctypes_function(hwnd, pszType, cchType) + +@User32Proxy("RealGetWindowClassW") +def RealGetWindowClassW(hwnd, pszType, cchType=None): + if cchType is None: + cchType = len(pszType) + return RealGetWindowClassW.ctypes_function(hwnd, pszType, cchType) + +@User32Proxy("GetClassNameA") +def GetClassNameA (hwnd, pszType, cchType=None): + if cchType is None: + cchType = len(pszType) + return GetClassNameA .ctypes_function(hwnd, pszType, cchType) + +@User32Proxy("GetClassNameW") +def GetClassNameW (hwnd, pszType, cchType=None): + if cchType is None: + cchType = len(pszType) + return GetClassNameW .ctypes_function(hwnd, pszType, cchType) + +# ## Version stuff ## # + +@VersionProxy("GetFileVersionInfoA") +def GetFileVersionInfoA(lptstrFilename, dwHandle=0, dwLen=None, lpData=NeededParameter): + if dwLen is None and lpData is not None: + dwLen = len(lpData) + return GetFileVersionInfoA.ctypes_function(lptstrFilename, dwHandle, dwLen, lpData) + + +@VersionProxy("GetFileVersionInfoW") +def GetFileVersionInfoW(lptstrFilename, dwHandle=0, dwLen=None, lpData=NeededParameter): + if dwLen is None and lpData is not None: + dwLen = len(lpData) + return GetFileVersionInfoA.ctypes_function(lptstrFilename, dwHandle, dwLen, lpData) + + +@VersionProxy("GetFileVersionInfoSizeA") +def GetFileVersionInfoSizeA(lptstrFilename, lpdwHandle=None): + if lpdwHandle is None: + lpdwHandle = ctypes.byref(DWORD()) + return GetFileVersionInfoSizeA.ctypes_function(lptstrFilename, lpdwHandle) + + +@VersionProxy("GetFileVersionInfoSizeW") +def GetFileVersionInfoSizeW(lptstrFilename, lpdwHandle=None): + if lpdwHandle is None: + lpdwHandle = ctypes.byref(DWORD()) + return GetFileVersionInfoSizeW.ctypes_function(lptstrFilename, lpdwHandle) + + +@VersionProxy("VerQueryValueA") +def VerQueryValueA(pBlock, lpSubBlock, lplpBuffer, puLen): + return VerQueryValueA.ctypes_function(pBlock, lpSubBlock, lplpBuffer, puLen) + + +@VersionProxy("VerQueryValueW") +def VerQueryValueW(pBlock, lpSubBlock, lplpBuffer, puLen): + return VerQueryValueW.ctypes_function(pBlock, lpSubBlock, lplpBuffer, puLen) + + +# ## Ole32Proxy (COM STUFF) ## # + +# IMPORTANT: +# Functions that returns HRESULT (like CoInitializeEx) will raise if HRESULT is an error +# even if there is no error check on the return value +@Ole32Proxy('CoInitializeEx', no_error_check) +def CoInitializeEx(pvReserved=None, dwCoInit=COINIT_MULTITHREADED): + return CoInitializeEx.ctypes_function(pvReserved, dwCoInit) + + +@Ole32Proxy('CoInitializeSecurity') +def CoInitializeSecurity(pSecDesc, cAuthSvc, asAuthSvc, pReserved1, dwAuthnLevel, dwImpLevel, pAuthList, dwCapabilities, pReserved3): + return CoInitializeSecurity.ctypes_function(pSecDesc, cAuthSvc, asAuthSvc, pReserved1, dwAuthnLevel, dwImpLevel, pAuthList, dwCapabilities, pReserved3) + + +@Ole32Proxy('CoCreateInstance') +def CoCreateInstance(rclsid, pUnkOuter=None, dwClsContext=CLSCTX_INPROC_SERVER, riid=NeededParameter, ppv=NeededParameter): + return CoCreateInstance.ctypes_function(rclsid, pUnkOuter, dwClsContext, riid, ppv) + +# ## Shell32 ## # + +@Shell32Proxy('ShellExecuteA') +def ShellExecuteA(hwnd, lpOperation, lpFile, lpParameters, lpDirectory, nShowCmd): + return ShellExecuteA.ctypes_function(hwnd, lpOperation, lpFile, lpParameters, lpDirectory, nShowCmd) + +@Shell32Proxy('ShellExecuteW') +def ShellExecuteW(hwnd, lpOperation, lpFile, lpParameters, lpDirectory, nShowCmd): + return ShellExecuteW.ctypes_function(hwnd, lpOperation, lpFile, lpParameters, lpDirectory, nShowCmd) + + +# Transactions # + +@Kernel32Proxy("CreateFileTransactedA", error_check=valid_handle_check) +def CreateFileTransactedA(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile, hTransaction, pusMiniVersion, pExtendedParameter): + return CreateFileTransactedA.ctypes_function(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile, hTransaction, pusMiniVersion, pExtendedParameter) + +@Kernel32Proxy("CreateFileTransactedW", error_check=valid_handle_check) +def CreateFileTransactedW(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile, hTransaction, pusMiniVersion, pExtendedParameter): + return CreateFileTransactedW.ctypes_function(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile, hTransaction, pusMiniVersion, pExtendedParameter) + + +@Ktmw32Proxy("CommitTransaction") +def CommitTransaction(TransactionHandle): + return CommitTransaction.ctypes_function(TransactionHandle) + + +@Ktmw32Proxy("CreateTransaction") +def CreateTransaction(lpTransactionAttributes, UOW, CreateOptions, IsolationLevel, IsolationFlags, Timeout, Description): + return CreateTransaction.ctypes_function(lpTransactionAttributes, UOW, CreateOptions, IsolationLevel, IsolationFlags, Timeout, Description) + + +@Ktmw32Proxy("RollbackTransaction") +def RollbackTransaction(TransactionHandle): + return RollbackTransaction.ctypes_function(TransactionHandle) + + +@Ktmw32Proxy("OpenTransaction") +def OpenTransaction(dwDesiredAccess, TransactionId): + return OpenTransaction.ctypes_function(dwDesiredAccess, TransactionId) + + +# Pipe + +@Kernel32Proxy("CreateNamedPipeA") +def CreateNamedPipeA(lpName, dwOpenMode, dwPipeMode, nMaxInstances, nOutBufferSize, nInBufferSize, nDefaultTimeOut, lpSecurityAttributes): + return CreateNamedPipeA.ctypes_function(lpName, dwOpenMode, dwPipeMode, nMaxInstances, nOutBufferSize, nInBufferSize, nDefaultTimeOut, lpSecurityAttributes) + +@Kernel32Proxy("CreateNamedPipeW") +def CreateNamedPipeW(lpName, dwOpenMode, dwPipeMode, nMaxInstances, nOutBufferSize, nInBufferSize, nDefaultTimeOut, lpSecurityAttributes): + return CreateNamedPipeW.ctypes_function(lpName, dwOpenMode, dwPipeMode, nMaxInstances, nOutBufferSize, nInBufferSize, nDefaultTimeOut, lpSecurityAttributes) + +@Kernel32Proxy("ConnectNamedPipe") +def ConnectNamedPipe(hNamedPipe, lpOverlapped): + return ConnectNamedPipe.ctypes_function(hNamedPipe, lpOverlapped) + +@Kernel32Proxy("SetNamedPipeHandleState") +def SetNamedPipeHandleState(hNamedPipe, lpMode, lpMaxCollectionCount, lpCollectDataTimeout): + return SetNamedPipeHandleState.ctypes_function(hNamedPipe, lpMode, lpMaxCollectionCount, lpCollectDataTimeout) + +
+ +
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/windows/wintrust.html b/docs/build/html/_modules/windows/wintrust.html index 3da2341..8be3404 100644 --- a/docs/build/html/_modules/windows/wintrust.html +++ b/docs/build/html/_modules/windows/wintrust.html @@ -1,33 +1,22 @@ + - + - windows.wintrust — PythonForWindows 0.3 documentation - - - + + - - + + return wintrust_return_value_mapper[x & 0xffffffff] def get_catalog_for_filename(filename): @@ -227,8 +185,8 @@ catalog = get_catalog_for_filename(filename) if catalog is None: return SignatureData(signed, None, False, check_sign) - catalogsigned = not bool(check_signature(catalog)) - return SignatureData(signed, catalog, catalogsigned, check_sign) + catalogsigned = not bool(check_signature(catalog)) + return SignatureData(signed, catalog, catalogsigned, check_sign)
[docs]def is_signed(filename): """Check if ``filename`` is signed: @@ -244,8 +202,8 @@ catalog = get_catalog_for_filename(filename) if catalog is None: return False - catalogsigned = not bool(check_signature(catalog)) - return catalogsigned
+ catalogsigned = not bool(check_signature(catalog)) + return catalogsigned @@ -255,12 +213,14 @@
@@ -282,7 +242,7 @@ \ No newline at end of file diff --git a/docs/build/html/_sources/crypto.rst.txt b/docs/build/html/_sources/crypto.rst.txt index fd34bef..ad60aa5 100644 --- a/docs/build/html/_sources/crypto.rst.txt +++ b/docs/build/html/_sources/crypto.rst.txt @@ -36,7 +36,7 @@ Certificate .. warning:: - The classes described here are under heavy test and try. + The classes described here are still under test and possible rewrite/refactor. The classes, methods and properties described here will problably change as I haven't yet had the time to try it out in real cases and figure out the final look of the API I want to do. @@ -45,16 +45,17 @@ Certificate See sample :ref:`sample_crypto_certificate` -CertificateContext +Certificate '''''''''''''''''' -.. autoclass:: CertificateContext +.. autoclass:: Certificate + :show-inheritance: -EHCERTSTORE -''''''''''' +CertificateStore +'''''''''''''''' -.. autoclass:: EHCERTSTORE +.. autoclass:: CertificateStore CryptObject @@ -63,6 +64,11 @@ CryptObject .. autoclass:: CryptObject +CryptMessage +'''''''''''' + +.. autoclass:: CryptMessage + CryptContext '''''''''''' diff --git a/docs/build/html/_sources/generated.rst.txt b/docs/build/html/_sources/generated.rst.txt index 0308f3a..39d39d4 100644 --- a/docs/build/html/_sources/generated.rst.txt +++ b/docs/build/html/_sources/generated.rst.txt @@ -3,7 +3,7 @@ .. module:: windows.generated_def -:mod:`windows.generated_def` contains ``Python`` files generated by ``ctypes_generation``. +:mod:`windows.generated_def` contains ``Python`` files generated by ``ctypes_generation/``. Those generated files includes: diff --git a/docs/build/html/_sources/index.rst.txt b/docs/build/html/_sources/index.rst.txt index 7f50c31..c478cfd 100644 --- a/docs/build/html/_sources/index.rst.txt +++ b/docs/build/html/_sources/index.rst.txt @@ -34,6 +34,7 @@ Documentation various.rst native_exec.rst winproxy.rst + pipe.rst utils.rst wintrust.rst debug.rst diff --git a/docs/build/html/_sources/native_exec.rst.txt b/docs/build/html/_sources/native_exec.rst.txt index f46e723..689f677 100644 --- a/docs/build/html/_sources/native_exec.rst.txt +++ b/docs/build/html/_sources/native_exec.rst.txt @@ -4,7 +4,7 @@ ************************************************ -:mod:`windows.native_exec` allows to create `Python` functions calling native code. +:mod:`windows.native_exec` allows to create ``Python`` functions calling native code. it also provides a simple assembler for x86 and x64. :mod:`windows.native_exec` provides those functions: @@ -55,7 +55,7 @@ Its features are: The assembler DOES NOT handle every instruction at all. -The assembler instructions are `Python` object that may accept arguments representing +The assembler instructions are ``Python`` object that may accept arguments representing the mnemonic operands. These parameters can be of type: diff --git a/docs/build/html/_sources/pipe.rst.txt b/docs/build/html/_sources/pipe.rst.txt new file mode 100644 index 0000000..1ba9bf4 --- /dev/null +++ b/docs/build/html/_sources/pipe.rst.txt @@ -0,0 +1,31 @@ +``windows.pipe`` -- Inter-Process Communication +*********************************************** + +.. module:: windows.pipe + + +:mod:`windows.pipe` is wrapper around :class:`_multiprocessing.PipeConnection` simplifiying its use. + +The main improvement are: + + - send/recv object from a pipe name in one line + - Context manager around pipe connection + +.. note:: + + see sample :ref:`sample_pipe` + +Helper functions +"""""""""""""""" + +.. autofunction:: create +.. autofunction:: connect +.. autofunction:: recv_object +.. autofunction:: send_object +.. autofunction:: full_pipe_address + + +PipeConnection +"""""""""""""" + +.. autoclass:: PipeConnection \ No newline at end of file diff --git a/docs/build/html/_sources/process.rst.txt b/docs/build/html/_sources/process.rst.txt index fd0f77b..575a64e 100644 --- a/docs/build/html/_sources/process.rst.txt +++ b/docs/build/html/_sources/process.rst.txt @@ -75,14 +75,36 @@ PEB :members: :inherited-members: -.. autoclass:: WinUnicodeString - LoadedModule '''''''''''' .. autoclass:: LoadedModule +ApiSetMap +''''''''' + +.. note:: + + see sample :ref:`sample_apisetmap` + +.. autoclass:: windows.winobject.apisetmap.ApiSetMap + +.. note:: + Currently supported version for the ApiSetMap are 2/4/6 + + + +.. autoclass:: windows.winobject.apisetmap.ApiSetMapVersion2 + :no-inherited-members: + :members: version +.. autoclass:: windows.winobject.apisetmap.ApiSetMapVersion4 + :no-inherited-members: + :members: version +.. autoclass:: windows.winobject.apisetmap.ApiSetMapVersion6 + :no-inherited-members: + :members: version + PEFile - Parsing loaded PE """""""""""""""""""""""""" diff --git a/docs/build/html/_sources/sample.rst.txt b/docs/build/html/_sources/sample.rst.txt index 60543e3..735502e 100644 --- a/docs/build/html/_sources/sample.rst.txt +++ b/docs/build/html/_sources/sample.rst.txt @@ -1,4 +1,3 @@ - .. _sample_of_code: Samples of code @@ -14,20 +13,10 @@ Processes .. literalinclude:: ..\..\samples\process\current_process.py -Output:: +Output + +.. literalinclude:: samples_output\process_current_process.txt - (cmd λ) python32.exe process\current_process.py - current process is - current process is a <32> bits process - current process is a SysWow64 process ? - current process pid <8264> and ppid <4100> - Here are the current process threads: <[]> - Let's execute some native code ! (0x41 + 1) - Native code returned <0x42> - Allocating memory in current process - Allocated memory is at <0xd60000> - Writing 'SOME STUFF' in allocation memory - Reading memory : <'SOME STUFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'> .. _sample_remote_process: @@ -36,38 +25,11 @@ Remote process : :class:`WinProcess` .. literalinclude:: ..\..\samples\process\remote_process.py -Output:: - (cmd λ) python.exe process\remote_process.py - Creating a notepad - Looking for notepads in the processes - They are currently <1> notepads running on the system - Let's play with our notepad: <> - Our notepad pid is 2044 - Our notepad is a <32> bits process - Our notepad is a SysWow64 process ? - Our notepad have threads ! <[, , ...]> - Exploring our notepad PEB ! - Command line is - Here are 3 loaded modules: [, , ] - Allocating memory in our notepad - Allocated memory is at <0x6f80000> - Writing 'SOME STUFF' in allocated memory - Reading allocated memory : <'SOME STUFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'> - Execution some native code in our notepad (write 0x424242 at allocated address + return 0x1337) - Executing native code ! - Return code = 0x1337L - Reading allocated memory : <'BBBB STUFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'> - Executing python code ! - Reading allocated memory : <'HELLO FROM notepad\x00\x00'> - Trying to import in remote module 'FAKE_MODULE' - Remote ERROR ! - Traceback (most recent call last): - File "", line 3, in - File "", line 2, in func - ImportError: No module named FAKE_MODULE +Output + +.. literalinclude:: samples_output\process_remote_process.txt - That's all ! killing the notepad .. _sample_peb_exploration: @@ -77,31 +39,21 @@ Output:: .. literalinclude:: ..\..\samples\process\peb.py -Output:: +Output + +.. literalinclude:: samples_output\process_peb.txt + +.. _sample_apisetmap: + +ApiSetMap +''''''''' + +.. literalinclude:: ..\..\samples\process\apisetmap.py + +Output + +.. literalinclude:: samples_output\process_apisetmap.txt - (cmd λ) python.exe process\peb.py - Exploring the current process PEB - PEB is <> - Commandline object is - Commandline string is u'python.exe peb.py ' - Imagepath - Printing some modules: - - - - - - === K32 === - Looking for kernel32.dll - Kernel32 module: - Module name = | Fullname = - Kernel32 is loaded at address 0x774c0000 - === K32 PE === - PE Representation of k32: - Here are some exports {0: 2001566688L, u'CreateFileA': 2001635616L, 42: 2001647872L, u'VirtualAlloc': 2001570704L} - Import DLL dependancies are (without api-*): [u'ntdll.dll', u'kernelbase.dll'] - IAT Entry for ntdll!NtCreateFile = | addr = 0x77541128L - Sections: [, , , , ] .. _sample_iat_hook: @@ -110,23 +62,10 @@ IAT hooking .. literalinclude:: ..\..\samples\process\iat_hook.py -Output:: +Output - (cmd λ) python process\iat_hook.py - Asking for - Hook called | hKey = 0x12d687 | lpSubKey = - Secret key asked, returning magic handle 0x12345678 - Result = 0x12345678 +.. literalinclude:: samples_output\process_iat_hook.txt - Asking for - Hook called | hKey = 0x12d687 | lpSubKey = - Asked for a failing key: returning 0x2a - WindowsError(42, 'Windows Error 0x2A') - - Asking for - Hook called | hKey = 0x80000001L | lpSubKey = - Non-secret key : calling normal function - Result = 0x108 .. _sample_system: @@ -136,48 +75,9 @@ Output:: .. literalinclude:: ..\..\samples\system.py -Output:: - - (cmd λ) python system.py - Basic system infos: - version = (6, 3) - bitness = 64 - computer_name = HAKRIL-PC - product_type = VER_NT_WORKSTATION(0x1L) - version_name = Windows 8.1 - - There is 117 processes - There is 1246 threads - - Dumping first logical drive: - - name = C:\ - type = DRIVE_FIXED(0x3L) - path = \Device\HarddiskVolume2 - - Dumping first service: - - name = ACPI - description = Microsoft ACPI Driver - status = ServiceStatus(type=SERVICE_KERNEL_DRIVER(0x1L), state=SERVICE_RUNNING(0x4L), control_accepted=1L, flags=0L) - process = None - - Finding a service in a user process: - - name = Appinfo - description = Application Information - status = ServiceStatus(type=SERVICE_WIN32_SHARE_PROCESS(0x20L), state=SERVICE_RUNNING(0x4L), control_accepted=129L, flags=0L) - process = - - Enumerating handles: - There are 40664 handles: - First handle is: in process pid=4> - Enumerating handles of the current process: - There are 255 handles for this process - Looking for a File handle: - Handle is in process pid=14340> - Name is <\Device\ConDrv> +Output +.. literalinclude:: samples_output\system.txt .. _sample_network_exploration: @@ -187,24 +87,9 @@ Output:: .. literalinclude:: ..\..\samples\network\network.py -Output:: +Output-New - (cmd λ) python.exe network\network.py - Working on ipv4 - == Listening == - Some listening connections: [, , ] - Listening ports are : [80, 135, 443, 445, 902, 912, 5357, 49152, 49153, 49154, 49155, 49157, 49159, 8307, 25340, 139, 139] - == Established == - Some established connections: [ 127.0.0.1:49472>, 127.0.0.1:49174>, 127.0.0.1:49173>] - == connection to localhost:80 == - Our connection is [ 127.0.0.1:80>] - Sending YOP - Closing socket - Sending LAIT - Traceback (most recent call last): - File ".\network.py", line 45, in - s.send("LAIT") - socket.error: [Errno 10054] An existing connection was forcibly closed by the remote host +.. literalinclude:: samples_output\network_network.txt .. _sample_registry: @@ -214,36 +99,9 @@ Output:: .. literalinclude:: ..\..\samples\registry\registry.py -Output:: +Output - (cmd λ) python.exe registry\registry.py - Registry is <> - HKEY_CURRENT_USER is <> - HKEY_CURRENT_USER subkeys names are: - ['AppEvents', - 'AppXBackupContentType', - 'Console', - 'Control Panel', - 'Environment', - 'EUDC', - 'Identities', - 'Keyboard Layout', - 'Network', - 'Printers', - 'Software', - 'System', - 'Volatile Environment'] - Opening 'Software' in HKEY_CURRENT_USER: - We can also open it in one access: - Looking at CurrentVersion - Key is - values are: - [KeyValue(name='SoftwareType', value=u'System', type=1), - KeyValue(name='RegisteredOwner', value=u'hakril', type=1), - KeyValue(name='InstallDate', value=0, type=4), - ... - KeyValue(name='PathName', value=u'C:\\Windows', type=1)] - registered owner = +.. literalinclude:: samples_output\registry_registry.txt .. _sample_wintrust: @@ -253,23 +111,10 @@ Output:: .. literalinclude:: ..\..\samples\crypto\wintrust.py -Output:: +Output + +.. literalinclude:: samples_output\crypto_wintrust.txt - (cmd λ) python crypto\wintrust.py - Checking signature of - is_signed: - check_signature: <0> - full_signature_information: - * signed - * catalog - * catalogsigned - * additionalinfo <0> - Checking signature of some loaded DLL - : False (TRUST_E_NOSIGNATURE(0x800b0100L)) - : True - : True - : True - : False (TRUST_E_NOSIGNATURE(0x800b0100L)) .. _sample_vectoredexception: @@ -281,27 +126,10 @@ In local process .. literalinclude:: ..\..\samples\process\veh_segv.py -Output:: +Output - (cmd λ) python.exe process\veh_segv.py - Protected page is at <0x1db0000> - Setting page protection to +.. literalinclude:: samples_output\process_veh_segv.txt - ==Entry of VEH handler== - Instr at 0x1d1ab574 accessed to addr 0x1db0000 - Resetting page protection to - ==Entry of VEH handler== - Exception of type EXCEPTION_SINGLE_STEP(0x80000004L) - Resetting page protection to - Value 1 read - - ==Entry of VEH handler== - Instr at 0x1d1ab574 accessed to addr 0x1db0010 - Resetting page protection to - ==Entry of VEH handler== - Exception of type EXCEPTION_SINGLE_STEP(0x80000004L) - Resetting page protection to - Value 2 read In remote process @@ -347,25 +175,11 @@ Debugging .. literalinclude:: ..\..\samples\debug\debugger_print_LdrLoaddll.py -Ouput:: - (cmd λ) python.exe debug\debugger_print_LdrLoaddll.py - Loading - Got exception EXCEPTION_BREAKPOINT(0x80000003L) at 0x77a73bad - Loading - Loading - Loading - Loading - Loading - Loading - Loading - Loading - Loading - Loading - Loading - Loading - Loading - Ask to load : exiting process +Output + +.. literalinclude:: samples_output\debug_debugger_print_LdrLoaddll.txt + Single stepping @@ -373,19 +187,9 @@ Single stepping .. literalinclude:: ..\..\samples\debug\debugger_membp_singlestep.py -Ouput:: +Output - (cmd λ) python.exe debug\debugger_membp_singlestep.py - Got exception EXCEPTION_BREAKPOINT(0x80000003L) at 0x77ae3c7d - Instruction at <0x8d0006> wrote at <0x8e0000> - Got single_step EXCEPTION_SINGLE_STEP(0x80000004L) at 0x8d000c - Got single_step EXCEPTION_SINGLE_STEP(0x80000004L) at 0x8d0011 - Instruction at <0x8d0011> wrote at <0x8e0004> - Got single_step EXCEPTION_SINGLE_STEP(0x80000004L) at 0x8d0017 - Got single_step EXCEPTION_SINGLE_STEP(0x80000004L) at 0x8d001c - Got single_step EXCEPTION_SINGLE_STEP(0x80000004L) at 0x8d0022 - Got single_step EXCEPTION_SINGLE_STEP(0x80000004L) at 0x8d0023 - No more single step: exiting +.. literalinclude:: samples_output\debug_debugger_membp_singlestep.txt :class:`windows.debug.FunctionBP` @@ -393,19 +197,10 @@ Ouput:: .. literalinclude:: ..\..\samples\debug\debug_functionbp.py -Ouput:: +Output - (cmd λ) python.exe debug\debug_functionbp.py - NtCreateFile of <\??\C:\Windows\syswow64\en-US\calc.exe.mui>: handle = 0xac - Handle manually found! typename=, name=<\Device\HarddiskVolume2\Windows\SysWOW64\en-US\calc.exe.mui> +.. literalinclude:: samples_output\debug_debug_functionbp.txt - NtCreateFile of <\Device\DeviceApi\CMApi>: handle = 0x108 - Handle manually found! typename=, name=<\Device\DeviceApi> - - NtCreateFile of <\??\C:\Windows\Fonts\staticcache.dat>: handle = 0x154 - Handle manually found! typename=, name=<\Device\HarddiskVolume2\Windows\Fonts\StaticCache.dat> - - Exiting process .. _sample_debugger_attach: @@ -414,25 +209,9 @@ Ouput:: .. literalinclude:: ..\..\samples\debug\attach.py -Ouput:: - - (cmd λ) python.exe debug\attach.py - Finding process with pid <11392> - Target is - Debugger attached: - - NtCreateFile of <\??\C:\Windows\Fonts\staticcache.dat>: handle = 0x288 - Handle manually found! typename=, name=<\Device\HarddiskVolume4\Windows\Fonts\StaticCache.dat> - - NtCreateFile of <\??\C:\WINDOWS\Registration\R000000000015.clb>: handle = 0x320 - Handle manually found! typename=, name=<\Device\HarddiskVolume4\Windows\Registration\R000000000015.clb> - - NtCreateFile of <\??\C:\WINDOWS\Globalization\Sorting\sortdefault.nls>: handle = 0x334 - Handle manually found! typename=, name=<\Device\HarddiskVolume4\Windows\Globalization\Sorting\SortDefault.nls> - - Exiting process - +Output +.. literalinclude:: samples_output\debug_attach.txt @@ -442,90 +221,9 @@ Native code tester .. literalinclude:: ..\..\samples\test_code.py -Ouput:: +Ouput - (cmd λ) python.exe test_code.py "mov eax, 0x42424242" "eax=0x11223344" - Testing x86 code - Startup context is: - Eip -> 0x3f0000L - Esp -> 0x3bfae4L - Eax -> 0x11223344L - Ebx -> 0x5a6000L - Ecx -> 0x0L - Edx -> 0x0L - Ebp -> 0x0L - Edi -> 0x0L - Esi -> 0x0L - EFlags -> 0x202L - EEflags(0x202L:IF) - ==Post-exec context== - Eip -> 0x3f0007L - Esp -> 0x3bfae4L - Eax -> 0x42424242L - Ebx -> 0x5a6000L - Ecx -> 0x0L - Edx -> 0x0L - Ebp -> 0x0L - Edi -> 0x0L - Esi -> 0x0L - EFlags -> 0x202L - EEflags(0x202L:IF) - - ==DIFF== - Eip: 0x3f0000 -> 0x3f0007 (+0x7) - Eax: 0x11223344 -> 0x42424242 (+0x31200efe) - - - (cmd λ) python64 test_code.py --x64 "mov r15, 0x11223344; push r14; call r15" "rcx=1; r14=0x4242424243434343" - Testing x64 code - Startup context is: - Rip -> 0x205a1d60000L - Rsp -> 0xe24a88fa88L - Rax -> 0x0L - Rbx -> 0x0L - Rcx -> 0x1L - Rdx -> 0xe24aaf9000L - Rbp -> 0x0L - Rdi -> 0x0L - Rsi -> 0x0L - R8 -> 0x0L - R9 -> 0x0L - R10 -> 0x0L - R11 -> 0x0L - R12 -> 0x0L - R13 -> 0x0L - R14 -> 0x4242424243434343L - R15 -> 0x0L - EFlags -> 0x200L - EEflags(0x200L:IF) - ==Post-exec context== - Rip -> 0x11223344L - Rsp -> 0xe24a88fa78L - Rax -> 0x0L - Rbx -> 0x0L - Rcx -> 0x1L - Rdx -> 0xe24aaf9000L - Rbp -> 0x0L - Rdi -> 0x0L - Rsi -> 0x0L - R8 -> 0x0L - R9 -> 0x0L - R10 -> 0x0L - R11 -> 0x0L - R12 -> 0x0L - R13 -> 0x0L - R14 -> 0x4242424243434343L - R15 -> 0x11223344L - EFlags -> 0x10202L - EEflags(0x10202L:IF|RF) - at <0x11223344> - ==DIFF== - Rip: 0x205a1d60000 -> 0x11223344 (-0x20590b3ccbc) - Rsp: 0xe24a88fa88 -> 0xe24a88fa78 (-0x10) - R15: 0x0 -> 0x11223344 (+0x11223344) - EFlags: 0x200 -> 0x10202 (+0x10002) - Negative Stack: dumping: - E24A88FA88 0C 00 D6 A1 05 02 00 00 43 43 43 43 42 42 42 42 ........CCCCBBBB +.. literalinclude:: samples_output\test_code.txt .. _sample_local_debugger: @@ -539,16 +237,9 @@ In current process .. literalinclude:: ..\..\samples\debug\local_debugger.py -Ouput:: +Output - (cmd λ) python.exe debug\local_debugger.py - Code addr = 0xcf0002 - GOT AN HXBP at 0xcf0002 - EXCEPTION !!!! Got a EXCEPTION_SINGLE_STEP(0x80000004L) at 0xcf0003 - EXCEPTION !!!! Got a EXCEPTION_SINGLE_STEP(0x80000004L) at 0xcf0004 - EXCEPTION !!!! Got a EXCEPTION_SINGLE_STEP(0x80000004L) at 0xcf0005 - EXCEPTION !!!! Got a EXCEPTION_SINGLE_STEP(0x80000004L) at 0x770d7c04 - Done! +.. literalinclude:: samples_output\debug_local_debugger.txt In remote process @@ -556,6 +247,7 @@ In remote process .. literalinclude:: ..\..\samples\debug\local_debugger_remote_process.py + Ouput:: (cmd λ) python.exe debug\local_debugger_remote_process.py @@ -590,26 +282,10 @@ WMI requests .. literalinclude:: ..\..\samples\wmi\wmi_request.py +Output -Ouput:: +.. literalinclude:: samples_output\wmi_wmi_request.txt - (cmd λ) python wmi\wmi_request.py - WMI requester is - Selecting * from 'Win32_Process' - They are <92> processes - Looking for ourself via pid - Some info about our process: - * Name -> python.exe - * ProcessId -> 7968 - * OSName -> Microsoft Windows 8.1 Pro|C:\Windows|\Device\Harddisk0\Partition2 - * UserModeTime -> 2812500 - * WindowsVersion -> 6.3.9600 - * CommandLine -> python.exe .\samples\wmi_request.py - ",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(_,aa),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=V.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(_,aa),$.test(j[0].type)&&qa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&sa(j),!a)return G.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||$.test(a)&&qa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext,B=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,C=/^.[^:#\[\.,]*$/;function D(a,b,c){if(r.isFunction(b))return r.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return r.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(C.test(b))return r.filter(b,a,c);b=r.filter(b,a)}return r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType})}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(D(this,a||[],!1))},not:function(a){return this.pushStack(D(this,a||[],!0))},is:function(a){return!!D(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var E,F=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,G=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||E,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:F.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),B.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};G.prototype=r.fn,E=r(d);var H=/^(?:parents|prev(?:Until|All))/,I={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function J(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return J(a,"nextSibling")},prev:function(a){return J(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return a.contentDocument||r.merge([],a.childNodes)}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(I[a]||r.uniqueSort(e),H.test(a)&&e.reverse()),this.pushStack(e)}});var K=/\S+/g;function L(a){var b={};return r.each(a.match(K)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?L(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function M(a){return a}function N(a){throw a}function O(a,b,c){var d;try{a&&r.isFunction(d=a.promise)?d.call(a).done(b).fail(c):a&&r.isFunction(d=a.then)?d.call(a,b,c):b.call(void 0,a)}catch(a){c.call(void 0,a)}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==N&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:M,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:M)),c[2][3].add(g(0,a,r.isFunction(d)?d:N))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(O(a,g.done(h(c)).resolve,g.reject),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)O(e[c],h(c),g.reject);return g.promise()}});var P=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&P.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var Q=r.Deferred();r.fn.ready=function(a){return Q.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,holdReady:function(a){a?r.readyWait++:r.ready(!0)},ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||Q.resolveWith(d,[r]))}}),r.ready.then=Q.then;function R(){d.removeEventListener("DOMContentLoaded",R),a.removeEventListener("load",R),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",R),a.addEventListener("load",R));var S=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)S(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0, -r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){W.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=V.get(a,b),c&&(!d||r.isArray(c)?d=V.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return V.get(a,c)||V.access(a,c,{empty:r.Callbacks("once memory").add(function(){V.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,ja=/^$|\/(?:java|ecma)script/i,ka={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ka.optgroup=ka.option,ka.tbody=ka.tfoot=ka.colgroup=ka.caption=ka.thead,ka.th=ka.td;function la(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&r.nodeName(a,b)?r.merge([a],c):c}function ma(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=la(l.appendChild(f),"script"),j&&ma(g),c){k=0;while(f=g[k++])ja.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var pa=d.documentElement,qa=/^key/,ra=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,sa=/^([^.]*)(?:\.(.+)|)/;function ta(){return!0}function ua(){return!1}function va(){try{return d.activeElement}catch(a){}}function wa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)wa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ua;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(pa,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(K)||[""],j=b.length;while(j--)h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.hasData(a)&&V.get(a);if(q&&(i=q.events)){b=(b||"").match(K)||[""],j=b.length;while(j--)if(h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&V.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(V.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c-1:r.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h\x20\t\r\n\f]*)[^>]*)\/>/gi,ya=/\s*$/g;function Ca(a,b){return r.nodeName(a,"table")&&r.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a:a}function Da(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ea(a){var b=Aa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(V.hasData(a)&&(f=V.access(a),g=V.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&za.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(m&&(e=oa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(la(e,"script"),Da),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=la(h),f=la(a),d=0,e=f.length;d0&&ma(g,!i&&la(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(T(c)){if(b=c[V.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[V.expando]=void 0}c[W.expando]&&(c[W.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return S(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(la(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return S(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!ya.test(a)&&!ka[(ia.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function Xa(a,b,c,d,e){return new Xa.prototype.init(a,b,c,d,e)}r.Tween=Xa,Xa.prototype={constructor:Xa,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=Xa.propHooks[this.prop];return a&&a.get?a.get(this):Xa.propHooks._default.get(this)},run:function(a){var b,c=Xa.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Xa.propHooks._default.set(this),this}},Xa.prototype.init.prototype=Xa.prototype,Xa.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},Xa.propHooks.scrollTop=Xa.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=Xa.prototype.init,r.fx.step={};var Ya,Za,$a=/^(?:toggle|show|hide)$/,_a=/queueHooks$/;function ab(){Za&&(a.requestAnimationFrame(ab),r.fx.tick())}function bb(){return a.setTimeout(function(){Ya=void 0}),Ya=r.now()}function cb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=aa[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function db(a,b,c){for(var d,e=(gb.tweeners[b]||[]).concat(gb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?hb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&r.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(K); -if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),hb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ib[b]||r.find.attr;ib[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=ib[g],ib[g]=e,e=null!=c(a,b,d)?g:null,ib[g]=f),e}});var jb=/^(?:input|select|textarea|button)$/i,kb=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return S(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):jb.test(a.nodeName)||kb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});var lb=/[\t\r\n\f]/g;function mb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,mb(this)))});if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(" "+e+" ").replace(lb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,mb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(" "+e+" ").replace(lb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,mb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(K)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=mb(this),b&&V.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":V.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+mb(c)+" ").replace(lb," ").indexOf(b)>-1)return!0;return!1}});var nb=/\r/g,ob=/[\x20\t\r\n\f]+/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":r.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(nb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:r.trim(r.text(a)).replace(ob," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type,g=f?null:[],h=f?e+1:d.length,i=e<0?h:f?e:0;i-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(r.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var pb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!pb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,pb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(V.get(h,"events")||{})[b.type]&&V.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&T(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!T(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=V.access(d,b);e||d.addEventListener(a,c,!0),V.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=V.access(d,b)-1;e?V.access(d,b,e):(d.removeEventListener(a,c,!0),V.remove(d,b))}}});var qb=a.location,rb=r.now(),sb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var tb=/\[\]$/,ub=/\r?\n/g,vb=/^(?:submit|button|image|reset|file)$/i,wb=/^(?:input|select|textarea|keygen)/i;function xb(a,b,c,d){var e;if(r.isArray(b))r.each(b,function(b,e){c||tb.test(a)?d(a,e):xb(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)xb(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(r.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)xb(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&wb.test(this.nodeName)&&!vb.test(a)&&(this.checked||!ha.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:r.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(ub,"\r\n")}}):{name:b.name,value:c.replace(ub,"\r\n")}}).get()}});var yb=/%20/g,zb=/#.*$/,Ab=/([?&])_=[^&]*/,Bb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Cb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Db=/^(?:GET|HEAD)$/,Eb=/^\/\//,Fb={},Gb={},Hb="*/".concat("*"),Ib=d.createElement("a");Ib.href=qb.href;function Jb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(K)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Kb(a,b,c,d){var e={},f=a===Gb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Lb(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Mb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Nb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qb.href,type:"GET",isLocal:Cb.test(qb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Hb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Lb(Lb(a,r.ajaxSettings),b):Lb(r.ajaxSettings,a)},ajaxPrefilter:Jb(Fb),ajaxTransport:Jb(Gb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Bb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||qb.href)+"").replace(Eb,qb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(K)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Ib.protocol+"//"+Ib.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Kb(Fb,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Db.test(o.type),f=o.url.replace(zb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(yb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(sb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Ab,""),n=(sb.test(f)?"&":"?")+"_="+rb++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Hb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Kb(Gb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Mb(o,y,d)),v=Nb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Ob={0:200,1223:204},Pb=r.ajaxSettings.xhr();o.cors=!!Pb&&"withCredentials"in Pb,o.ajax=Pb=!!Pb,r.ajaxTransport(function(b){var c,d;if(o.cors||Pb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Ob[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r(" + + - - - - + + +