diff --git a/windows/winproxy/apis/__init__.py b/windows/winproxy/apis/__init__.py index 1e4c876..3d8c348 100644 --- a/windows/winproxy/apis/__init__.py +++ b/windows/winproxy/apis/__init__.py @@ -1,20 +1,20 @@ -from advapi32 import * -from crypt32 import * -from cryptui import * -from dbghelp import * -from iphlpapi import * -from kernel32 import * -from ktmw32 import * -from ntdll import * -from ole32 import * -from oleacc import * -from psapi import * -from shell32 import * -from shlwapi import * -from user32 import * -from version import * -from wevtapi import * -from wintrust import * -from tdh import * -from dnsapi import * -from virtdisk import * \ No newline at end of file +from .advapi32 import * +from .crypt32 import * +from .cryptui import * +from .dbghelp import * +from .iphlpapi import * +from .kernel32 import * +from .ktmw32 import * +from .ntdll import * +from .ole32 import * +from .oleacc import * +from .psapi import * +from .shell32 import * +from .shlwapi import * +from .user32 import * +from .version import * +from .wevtapi import * +from .wintrust import * +from .tdh import * +from .dnsapi import * +from .virtdisk import * \ No newline at end of file diff --git a/windows/winproxy/apis/advapi32.py b/windows/winproxy/apis/advapi32.py index 9568663..c4e8d4a 100644 --- a/windows/winproxy/apis/advapi32.py +++ b/windows/winproxy/apis/advapi32.py @@ -2,7 +2,7 @@ import ctypes import windows.generated_def as gdef from ..apiproxy import ApiProxy, NeededParameter -from ..error import fail_on_zero, succeed_on_zero, result_is_error_code, result_is_handle +from ..error import fail_on_zero, succeed_on_zero, result_is_error_code, result_is_handle, no_error_check class Advapi32Proxy(ApiProxy): APIDLL = "advapi32" @@ -124,7 +124,8 @@ def CreateWellKnownSid(WellKnownSidType, DomainSid=None, pSid=None, cbSid=Needed def GetLengthSid(pSid): return GetLengthSid.ctypes_function(pSid) -@Advapi32Proxy() + +@Advapi32Proxy(error_check=no_error_check) def EqualSid(pSid1, pSid2): return EqualSid.ctypes_function(pSid1, pSid2) @@ -238,6 +239,13 @@ def GetAclInformation(pAcl, pAclInformation, nAclInformationLength, dwAclInforma def GetAce(pAcl, dwAceIndex, pAce): return GetAce.ctypes_function(pAcl, dwAceIndex, pAce) + +@Advapi32Proxy() +def GetStringConditionFromBinary(BinaryAceCondition, BinaryAceConditionSize=None, Reserved1=0, StringAceCondition=NeededParameter): + if BinaryAceConditionSize is None: + BinaryAceConditionSize = len(BinaryAceCondition) + return GetStringConditionFromBinary.ctypes_function(BinaryAceCondition, BinaryAceConditionSize, Reserved1, StringAceCondition) + # Registry @Advapi32Proxy(error_check=result_is_error_code) diff --git a/windows/winproxy/apis/crypt32.py b/windows/winproxy/apis/crypt32.py index b061a67..77cd3d3 100644 --- a/windows/winproxy/apis/crypt32.py +++ b/windows/winproxy/apis/crypt32.py @@ -102,6 +102,10 @@ def PFXImportCertStore(pPFX, szPassword, dwFlags): def CertEnumCTLsInStore(hCertStore, pPrevCtlContext): return CertEnumCTLsInStore.ctypes_function(hCertStore, pPrevCtlContext) +@Crypt32Proxy() +def CertCloseStore(hCertStore, dwFlags): + return CertCloseStore.ctypes_function(hCertStore, dwFlags) + # Key @@ -208,4 +212,5 @@ def CryptEnumOIDFunction(dwEncodingType, pszFuncName, pszOID, dwFlags, pvArg, pf @Crypt32Proxy() def CryptGetOIDFunctionValue(dwEncodingType, pszFuncName, pszOID, pwszValueName, pdwValueType, pbValueData, pcbValueData): - return CryptGetOIDFunctionValue.ctypes_function(dwEncodingType, pszFuncName, pszOID, pwszValueName, pdwValueType, pbValueData, pcbValueData) + return Cry + ptGetOIDFunctionValue.ctypes_function(dwEncodingType, pszFuncName, pszOID, pwszValueName, pdwValueType, pbValueData, pcbValueData) diff --git a/windows/winproxy/apis/dbghelp.py b/windows/winproxy/apis/dbghelp.py index d84ae6a..4cb1f16 100644 --- a/windows/winproxy/apis/dbghelp.py +++ b/windows/winproxy/apis/dbghelp.py @@ -22,6 +22,10 @@ def transform_pyobject_to_pvoid(obj): def SymInitialize(hProcess, UserSearchPath, fInvadeProcess): return SymInitialize.ctypes_function(hProcess, UserSearchPath, fInvadeProcess) +@DbgHelpProxy() +def SymCleanup(hProcess): + return SymCleanup.ctypes_function(hProcess) + @DbgHelpProxy() def SymLoadModuleExA(hProcess, hFile, ImageName, ModuleName, BaseOfDll, DllSize, Data, Flags): return SymLoadModuleExA.ctypes_function(hProcess, hFile, ImageName, ModuleName, BaseOfDll, DllSize, Data, Flags) @@ -30,6 +34,10 @@ def SymLoadModuleExA(hProcess, hFile, ImageName, ModuleName, BaseOfDll, DllSize, def SymLoadModuleExW(hProcess, hFile, ImageName, ModuleName, BaseOfDll, DllSize, Data, Flags): return SymLoadModuleExW.ctypes_function(hProcess, hFile, ImageName, ModuleName, BaseOfDll, DllSize, Data, Flags) +@DbgHelpProxy() +def SymUnloadModule64(hProcess, BaseOfDll): + return SymUnloadModule64.ctypes_function(hProcess, BaseOfDll) + @DbgHelpProxy() def SymFromAddr(hProcess, Address, Displacement, Symbol): return SymFromAddr.ctypes_function(hProcess, Address, Displacement, Symbol) @@ -46,42 +54,72 @@ def SymFromName(hProcess, Name, Symbol): def SymLoadModuleEx(hProcess, hFile, ImageName, ModuleName, BaseOfDll, DllSize, Data, Flags): return SymLoadModuleEx.ctypes_function(hProcess, hFile, ImageName, ModuleName, BaseOfDll, DllSize, Data, Flags) -@DbgHelpProxy() +@DbgHelpProxy(error_check=None) def SymSetOptions(SymOptions): return SymSetOptions.ctypes_function(SymOptions) +@DbgHelpProxy(error_check=None) +def SymGetOptions(): + return SymGetOptions.ctypes_function() + +@DbgHelpProxy() +def SymGetSearchPath(hProcess, SearchPath, SearchPathLength=None): + if SearchPath and SearchPathLength is None: + SearchPathLength = len(SearchPath) + return SymGetSearchPath.ctypes_function(hProcess, SearchPath, SearchPathLength) + +@DbgHelpProxy() +def SymGetSearchPathW(hProcess, SearchPath, SearchPathLength=None): + if SearchPath and SearchPathLength is None: + SearchPathLength = len(SearchPath) + return SymGetSearchPathW.ctypes_function(hProcess, SearchPath, SearchPathLength) + +@DbgHelpProxy() +def SymSetSearchPath(hProcess, SearchPath): + return SymSetSearchPath.ctypes_function(hProcess, SearchPath) + +@DbgHelpProxy() +def SymSetSearchPathW(hProcess, SearchPath): + return SymSetSearchPathW.ctypes_function(hProcess, SearchPath) + + @DbgHelpProxy() def SymGetTypeInfo(hProcess, ModBase, TypeId, GetType, pInfo): return SymGetTypeInfo.ctypes_function(hProcess, ModBase, TypeId, GetType, pInfo) @DbgHelpProxy() -def SymEnumSymbols(hProcess, BaseOfDll, Mask, EnumSymbolsCallback, UserContext): - if UserContext is not None and not isinstance(UserContext, (int, long)): - UserContext = transform_pyobject_to_pvoid(UserContext) +def SymEnumSymbols(hProcess, BaseOfDll, Mask, EnumSymbolsCallback, UserContext=None): + UserContext = transform_pyobject_to_pvoid(UserContext) return SymEnumSymbols.ctypes_function(hProcess, BaseOfDll, Mask, EnumSymbolsCallback, UserContext) @DbgHelpProxy() -def SymEnumSymbolsEx(hProcess, BaseOfDll, Mask, EnumSymbolsCallback, UserContext, Options): - if UserContext is not None and not isinstance(UserContext, (int, long)): - UserContext = transform_pyobject_to_pvoid(UserContext) +def SymEnumSymbolsEx(hProcess, BaseOfDll, Mask, EnumSymbolsCallback, UserContext=None, Options=NeededParameter): + UserContext = transform_pyobject_to_pvoid(UserContext) return SymEnumSymbolsEx.ctypes_function(hProcess, BaseOfDll, Mask, EnumSymbolsCallback, UserContext, Options) @DbgHelpProxy() -def SymEnumTypes(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext): - if UserContext is not None and not isinstance(UserContext, (int, long)): - UserContext = transform_pyobject_to_pvoid(UserContext) +def SymEnumSymbolsForAddr(hProcess, Address, EnumSymbolsCallback, UserContext=None): + UserContext = transform_pyobject_to_pvoid(UserContext) + return SymEnumSymbolsForAddr.ctypes_function(hProcess, Address, EnumSymbolsCallback, UserContext) + +@DbgHelpProxy() +def SymEnumSymbolsForAddrW(hProcess, Address, EnumSymbolsCallback, UserContext=None): + UserContext = transform_pyobject_to_pvoid(UserContext) + return SymEnumSymbolsForAddrW.ctypes_function(hProcess, Address, EnumSymbolsCallback, UserContext) + +@DbgHelpProxy() +def SymEnumTypes(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext=None): + UserContext = transform_pyobject_to_pvoid(UserContext) return SymEnumTypes.ctypes_function(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext) @DbgHelpProxy() -def SymEnumTypesByName(hProcess, BaseOfDll, mask, EnumSymbolsCallback, UserContext): - if UserContext is not None and not isinstance(UserContext, (int, long)): - UserContext = transform_pyobject_to_pvoid(UserContext) +def SymEnumTypesByName(hProcess, BaseOfDll, mask, EnumSymbolsCallback, UserContext=None): + UserContext = transform_pyobject_to_pvoid(UserContext) return SymEnumTypesByName.ctypes_function(hProcess, BaseOfDll, mask, EnumSymbolsCallback, UserContext) @DbgHelpProxy() -def SymEnumerateModules64(hProcess, EnumModulesCallback, UserContext): - if UserContext is not None and not isinstance(UserContext, (int, long)): - UserContext = transform_pyobject_to_pvoid(UserContext) +def SymEnumerateModules64(hProcess, EnumModulesCallback, UserContext=None): + UserContext = transform_pyobject_to_pvoid(UserContext) return SymEnumerateModules64.ctypes_function(hProcess, EnumModulesCallback, UserContext) @DbgHelpProxy() @@ -95,4 +133,60 @@ def SymSearch(hProcess, BaseOfDll, Index, SymTag, Mask, Address, EnumSymbolsCall @DbgHelpProxy() def SymSearchW(hProcess, BaseOfDll, Index, SymTag, Mask, Address, EnumSymbolsCallback, UserContext, Options): + UserContext = transform_pyobject_to_pvoid(UserContext) return SymSearchW.ctypes_function(hProcess, BaseOfDll, Index, SymTag, Mask, Address, EnumSymbolsCallback, UserContext, Options) + +@DbgHelpProxy() +def SymRefreshModuleList(hProcess): + return SymRefreshModuleList.ctypes_function(hProcess) + +# Helpers + +@DbgHelpProxy() +def SymFunctionTableAccess(hProcess, AddrBase): + return SymFunctionTableAccess.ctypes_function(hProcess, AddrBase) + +@DbgHelpProxy() +def SymFunctionTableAccess64(hProcess, AddrBase): + return SymFunctionTableAccess64.ctypes_function(hProcess, AddrBase) + +@DbgHelpProxy() +def SymGetModuleBase(hProcess, dwAddr): + return SymGetModuleBase.ctypes_function(hProcess, dwAddr) + +@DbgHelpProxy() +def SymGetModuleBase64(hProcess, qwAddr): + return SymGetModuleBase64.ctypes_function(hProcess, qwAddr) + +@DbgHelpProxy() +def SymEnumProcesses(EnumProcessesCallback, UserContext=None): + return SymEnumProcesses.ctypes_function(EnumProcessesCallback, UserContext) + +## Sym callback + +@DbgHelpProxy() +def SymRegisterCallback(hProcess, CallbackFunction, UserContext=None): + return SymRegisterCallback.ctypes_function(hProcess, CallbackFunction, UserContext) + +@DbgHelpProxy() +def SymRegisterCallback64(hProcess, CallbackFunction, UserContext=0): + return SymRegisterCallback64.ctypes_function(hProcess, CallbackFunction, UserContext) + +@DbgHelpProxy() +def SymRegisterCallbackW64(hProcess, CallbackFunction, UserContext=0): + return SymRegisterCallbackW64.ctypes_function(hProcess, CallbackFunction, UserContext) + + +# Stack walk + +@DbgHelpProxy() +def StackWalk64(MachineType, hProcess, hThread, StackFrame, ContextRecord, ReadMemoryRoutine, FunctionTableAccessRoutine, GetModuleBaseRoutine, TranslateAddress): + return StackWalk64.ctypes_function(MachineType, hProcess, hThread, StackFrame, ContextRecord, ReadMemoryRoutine, FunctionTableAccessRoutine, GetModuleBaseRoutine, TranslateAddress) + +@DbgHelpProxy() +def StackWalkEx(MachineType, hProcess, hThread, StackFrame, ContextRecord, ReadMemoryRoutine, FunctionTableAccessRoutine, GetModuleBaseRoutine, TranslateAddress, Flags): + return StackWalkEx.ctypes_function(MachineType, hProcess, hThread, StackFrame, ContextRecord, ReadMemoryRoutine, FunctionTableAccessRoutine, GetModuleBaseRoutine, TranslateAddress, Flags) + +@DbgHelpProxy() +def StackWalk(MachineType, hProcess, hThread, StackFrame, ContextRecord, ReadMemoryRoutine, FunctionTableAccessRoutine, GetModuleBaseRoutine, TranslateAddress): + return StackWalk.ctypes_function(MachineType, hProcess, hThread, StackFrame, ContextRecord, ReadMemoryRoutine, FunctionTableAccessRoutine, GetModuleBaseRoutine, TranslateAddress) diff --git a/windows/winproxy/apis/kernel32.py b/windows/winproxy/apis/kernel32.py index c1016eb..4376e42 100644 --- a/windows/winproxy/apis/kernel32.py +++ b/windows/winproxy/apis/kernel32.py @@ -781,3 +781,12 @@ def GetSystemTime(lpSystemTime): @Kernel32Proxy(error_check=None) def GetSystemTimeAsFileTime(lpSystemTimeAsFileTime): return GetSystemTimeAsFileTime.ctypes_function(lpSystemTimeAsFileTime) + + +##### + +# Heap + +@Kernel32Proxy(error_check=fail_on_zero) +def HeapAlloc(hHeap, dwFlags, dwBytes): + return HeapAlloc.ctypes_function(hHeap, dwFlags, dwBytes) diff --git a/windows/winproxy/apis/user32.py b/windows/winproxy/apis/user32.py index 6400a55..98b16bc 100644 --- a/windows/winproxy/apis/user32.py +++ b/windows/winproxy/apis/user32.py @@ -109,6 +109,11 @@ def GetCursorPos(lpPoint): # System -@User32Proxy() + +# If the function succeeds, the return value is the requested system metric or configuration setting. +# If the function fails, the return value is 0. GetLastError does not provide extended error information. +# And 0 is also a valid return value.. Thanks a lot.. + +@User32Proxy(error_check=no_error_check) def GetSystemMetrics(nIndex): return GetSystemMetrics.ctypes_function(nIndex)