diff --git a/ctypes_generation/definitions/defines/specific_access_right.txt b/ctypes_generation/definitions/defines/specific_access_right.txt new file mode 100644 index 0000000..32f7fe6 --- /dev/null +++ b/ctypes_generation/definitions/defines/specific_access_right.txt @@ -0,0 +1,259 @@ +// +// AccessSystemAcl access type +// + +#define ACCESS_SYSTEM_SECURITY (0x01000000L) + +// +// MaximumAllowed access type +// + +#define MAXIMUM_ALLOWED (0x02000000L) + +// +// Define access rights to files and directories +// + +#define FILE_READ_DATA ( 0x0001 ) // file & pipe +#define FILE_LIST_DIRECTORY ( 0x0001 ) // directory +#define FILE_WRITE_DATA ( 0x0002 ) // file & pipe +#define FILE_ADD_FILE ( 0x0002 ) // directory +#define FILE_APPEND_DATA ( 0x0004 ) // file +#define FILE_ADD_SUBDIRECTORY ( 0x0004 ) // directory +#define FILE_CREATE_PIPE_INSTANCE ( 0x0004 ) // named pipe +#define FILE_READ_EA ( 0x0008 ) // file & directory +#define FILE_WRITE_EA ( 0x0010 ) // file & directory +#define FILE_EXECUTE ( 0x0020 ) // file +#define FILE_TRAVERSE ( 0x0020 ) // directory +#define FILE_DELETE_CHILD ( 0x0040 ) // directory +#define FILE_READ_ATTRIBUTES ( 0x0080 ) // all +#define FILE_WRITE_ATTRIBUTES ( 0x0100 ) // all + +#define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF) + +#define FILE_GENERIC_READ (STANDARD_RIGHTS_READ |\ + FILE_READ_DATA |\ + FILE_READ_ATTRIBUTES |\ + FILE_READ_EA |\ + SYNCHRONIZE) + + +#define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\ + FILE_WRITE_DATA |\ + FILE_WRITE_ATTRIBUTES |\ + FILE_WRITE_EA |\ + FILE_APPEND_DATA |\ + SYNCHRONIZE) + + +#define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\ + FILE_READ_ATTRIBUTES |\ + FILE_EXECUTE |\ + SYNCHRONIZE) + + + +// +// Callback Specific Access Rights. +// + +#define CALLBACK_MODIFY_STATE 0x0001 + +#define CALLBACK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|\ + CALLBACK_MODIFY_STATE ) + + +// Event Specific Access Rights. +// + +#define EVENT_QUERY_STATE 0x0001 +#define EVENT_MODIFY_STATE 0x0002 // winnt +#define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) // winnt + + +// +// Mutant Specific Access Rights. +// +// begin_winnt + +#define MUTANT_QUERY_STATE 0x0001 + +#define MUTANT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|\ + MUTANT_QUERY_STATE) + + +// +// Semaphore Specific Access Rights. +// + +#define SEMAPHORE_QUERY_STATE 0x0001 +#define SEMAPHORE_MODIFY_STATE 0x0002 // winnt + +#define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) // winnt + + +// Timer Specific Access Rights. +// + +#define TIMER_QUERY_STATE 0x0001 +#define TIMER_MODIFY_STATE 0x0002 + +#define TIMER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|\ + TIMER_QUERY_STATE|TIMER_MODIFY_STATE) + +// I/O Completion Specific Access Rights. +// + +#define IO_COMPLETION_QUERY_STATE 0x0001 +#define IO_COMPLETION_MODIFY_STATE 0x0002 // winnt +#define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) // winnt + + +// +// Connection Port Type Specific Access Rights. +// + +#define PORT_CONNECT (0x0001) + +#define PORT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \ + SYNCHRONIZE | 0x1) + + +// +// Object Manager Object Type Specific Access Rights. +// + +#define OBJECT_TYPE_CREATE (0x0001) + +#define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1) + +// +// Object Manager Directory Specific Access Rights. +// + +#define DIRECTORY_QUERY (0x0001) +#define DIRECTORY_TRAVERSE (0x0002) +#define DIRECTORY_CREATE_OBJECT (0x0004) +#define DIRECTORY_CREATE_SUBDIRECTORY (0x0008) + +#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF) + + +// +// Object Manager Symbolic Link Specific Access Rights. +// + +#define SYMBOLIC_LINK_QUERY (0x0001) +#define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1) + + +// +// Process Specific Access Rights +// + +#define PROCESS_TERMINATE (0x0001) +#define PROCESS_CREATE_THREAD (0x0002) +#define PROCESS_SET_SESSIONID (0x0004) +#define PROCESS_VM_OPERATION (0x0008) +#define PROCESS_VM_READ (0x0010) +#define PROCESS_VM_WRITE (0x0020) +#define PROCESS_DUP_HANDLE (0x0040) +#define PROCESS_CREATE_PROCESS (0x0080) +#define PROCESS_SET_QUOTA (0x0100) +#define PROCESS_SET_INFORMATION (0x0200) +#define PROCESS_QUERY_INFORMATION (0x0400) +#define PROCESS_SUSPEND_RESUME (0x0800) +#define PROCESS_QUERY_LIMITED_INFORMATION (0x1000) +#define PROCESS_SET_LIMITED_INFORMATION (0x2000) + + +#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \ + 0xFFF) + + +// +// Thread Specific Access Rights +// + +#define THREAD_TERMINATE (0x0001) +#define THREAD_SUSPEND_RESUME (0x0002) +#define THREAD_GET_CONTEXT (0x0008) +#define THREAD_SET_CONTEXT (0x0010) +#define THREAD_QUERY_INFORMATION (0x0040) +#define THREAD_SET_INFORMATION (0x0020) +#define THREAD_SET_THREAD_TOKEN (0x0080) +#define THREAD_IMPERSONATE (0x0100) +#define THREAD_DIRECT_IMPERSONATION (0x0200) + +#define THREAD_ALL_ACCESS 0x001F03FF + +// +// Job Object Specific Access Rights +// + +// begin_winnt +#define JOB_OBJECT_ASSIGN_PROCESS (0x0001) +#define JOB_OBJECT_SET_ATTRIBUTES (0x0002) +#define JOB_OBJECT_QUERY (0x0004) +#define JOB_OBJECT_TERMINATE (0x0008) +#define JOB_OBJECT_SET_SECURITY_ATTRIBUTES (0x0010) +#define JOB_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \ + 0x1F ) + + +// +// Registry Specific Access Rights. +// + +#define KEY_QUERY_VALUE (0x0001) +#define KEY_SET_VALUE (0x0002) +#define KEY_CREATE_SUB_KEY (0x0004) +#define KEY_ENUMERATE_SUB_KEYS (0x0008) +#define KEY_NOTIFY (0x0010) +#define KEY_CREATE_LINK (0x0020) +#define KEY_WOW64_32KEY (0x0200) +#define KEY_WOW64_64KEY (0x0100) +#define KEY_WOW64_RES (0x0300) + + +#define KEY_READ ((STANDARD_RIGHTS_READ|KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS|KEY_NOTIFY)&(~SYNCHRONIZE)) +#define KEY_WRITE ((STANDARD_RIGHTS_WRITE|KEY_SET_VALUE|KEY_CREATE_SUB_KEY)&(~SYNCHRONIZE)) +#define KEY_EXECUTE ((KEY_READ)&(~SYNCHRONIZE)) +#define 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)) + + + +// +// Token Specific Access Rights. +//// Documentation purpose only real define are in token.txt +// #define TOKEN_ASSIGN_PRIMARY (0x0001) +// #define TOKEN_DUPLICATE (0x0002) +// #define TOKEN_IMPERSONATE (0x0004) +// #define TOKEN_QUERY (0x0008) +// #define TOKEN_QUERY_SOURCE (0x0010) +// #define TOKEN_ADJUST_PRIVILEGES (0x0020) +// #define TOKEN_ADJUST_GROUPS (0x0040) +// #define TOKEN_ADJUST_DEFAULT (0x0080) +// #define TOKEN_ADJUST_SESSIONID (0x0100) + + +// +// Cluster API Specific Access Rights +// +#define CLUSAPI_READ_ACCESS 0x00000001L +#define CLUSAPI_CHANGE_ACCESS 0x00000002L +#define CLUSAPI_NO_ACCESS 0x00000004L +#define CLUSAPI_ALL_ACCESS (CLUSAPI_READ_ACCESS | CLUSAPI_CHANGE_ACCESS) + + +// +// Fax Specific Access Rights +// + +#define FAX_JOB_SUBMIT (0x0001) +#define FAX_JOB_QUERY (0x0002) +#define FAX_CONFIG_QUERY (0x0004) +#define FAX_CONFIG_SET (0x0008) +#define FAX_PORT_QUERY (0x0010) +#define FAX_PORT_SET (0x0020) +#define FAX_JOB_MANAGE (0x0040) diff --git a/ctypes_generation/definitions/defines/windef.txt b/ctypes_generation/definitions/defines/windef.txt index bbceb4e..1671ce3 100644 --- a/ctypes_generation/definitions/defines/windef.txt +++ b/ctypes_generation/definitions/defines/windef.txt @@ -13,33 +13,8 @@ #define WARMING_NOT_SAME_FLAG_FOR_WINXP 0 -#define PROCESS_TERMINATE (0x0001) -#define PROCESS_CREATE_THREAD (0x0002) -#define PROCESS_SET_SESSIONID (0x0004) -#define PROCESS_VM_OPERATION (0x0008) -#define PROCESS_VM_READ (0x0010) -#define PROCESS_VM_WRITE (0x0020) -#define PROCESS_DUP_HANDLE (0x0040) -#define PROCESS_CREATE_PROCESS (0x0080) -#define PROCESS_SET_QUOTA (0x0100) -#define PROCESS_SET_INFORMATION (0x0200) -#define PROCESS_QUERY_INFORMATION (0x0400) -#define PROCESS_SUSPEND_RESUME (0x0800) -#define PROCESS_QUERY_LIMITED_INFORMATION (0x1000) - -#define THREAD_TERMINATE (0x0001) -#define THREAD_SUSPEND_RESUME (0x0002) -#define THREAD_GET_CONTEXT (0x0008) -#define THREAD_SET_CONTEXT (0x0010) -#define THREAD_QUERY_INFORMATION (0x0040) -#define THREAD_SET_INFORMATION (0x0020) -#define THREAD_SET_THREAD_TOKEN (0x0080) -#define THREAD_IMPERSONATE (0x0100) -#define THREAD_DIRECT_IMPERSONATION (0x0200) -#define PROCESS_ALL_ACCESS 0x001F0FFF -#define THREAD_ALL_ACCESS 0x001F03FF #define STARTF_USESHOWWINDOW 0x00000001 @@ -366,21 +341,6 @@ #define RRF_ZEROONFAILURE 0x20000000 -#define KEY_QUERY_VALUE (0x0001) -#define KEY_SET_VALUE (0x0002) -#define KEY_CREATE_SUB_KEY (0x0004) -#define KEY_ENUMERATE_SUB_KEYS (0x0008) -#define KEY_NOTIFY (0x0010) -#define KEY_CREATE_LINK (0x0020) -#define KEY_WOW64_32KEY (0x0200) -#define KEY_WOW64_64KEY (0x0100) -#define KEY_WOW64_RES (0x0300) - - -#define KEY_READ ((STANDARD_RIGHTS_READ|KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS|KEY_NOTIFY)&(~SYNCHRONIZE)) -#define KEY_WRITE ((STANDARD_RIGHTS_WRITE|KEY_SET_VALUE|KEY_CREATE_SUB_KEY)&(~SYNCHRONIZE)) -#define KEY_EXECUTE ((KEY_READ)&(~SYNCHRONIZE)) -#define 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)) #define ERROR_NOT_ALL_ASSIGNED 1300 @@ -738,12 +698,6 @@ #define MAXLEN_IFDESCR 256 #define MAX_INTERFACE_NAME_LEN 256 -#define DIRECTORY_QUERY (0x0001) -#define DIRECTORY_TRAVERSE (0x0002) -#define DIRECTORY_CREATE_OBJECT (0x0004) -#define DIRECTORY_CREATE_SUBDIRECTORY (0x0008) - -#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF) #define OBJ_INHERIT 0x00000002L #define OBJ_PERMANENT 0x00000010L @@ -973,26 +927,6 @@ #define FILE_EXISTS 0x00000004 #define FILE_DOES_NOT_EXIST 0x00000005 -#define FILE_READ_DATA ( 0x0001 ) // file & pipe -#define FILE_LIST_DIRECTORY ( 0x0001 ) // directory -#define FILE_WRITE_DATA ( 0x0002 ) // file & pipe -#define FILE_ADD_FILE ( 0x0002 ) // directory -#define FILE_APPEND_DATA ( 0x0004 ) // file -#define FILE_ADD_SUBDIRECTORY ( 0x0004 ) // directory -#define FILE_CREATE_PIPE_INSTANCE ( 0x0004 ) // named pipe -#define FILE_READ_EA ( 0x0008 ) // file & directory -#define FILE_WRITE_EA ( 0x0010 ) // file & directory -#define FILE_EXECUTE ( 0x0020 ) // file -#define FILE_TRAVERSE ( 0x0020 ) // directory -#define FILE_DELETE_CHILD ( 0x0040 ) // directory -#define FILE_READ_ATTRIBUTES ( 0x0080 ) // all -#define FILE_WRITE_ATTRIBUTES ( 0x0100 ) // all - -#define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF) -#define FILE_GENERIC_READ (STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE) -#define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES| FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE) -#define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE) - #define API_SET_SCHEMA_VERSION_V2 0x00000002L #define API_SET_SCHEMA_VERSION_V3 0x00000003L // No offline support. diff --git a/ctypes_generation/definitions/functions/dbghelp.txt b/ctypes_generation/definitions/functions/dbghelp.txt new file mode 100644 index 0000000..4aeed44 --- /dev/null +++ b/ctypes_generation/definitions/functions/dbghelp.txt @@ -0,0 +1,37 @@ +DWORD64 WINAPI SymLoadModuleExA( + _In_ HANDLE hProcess, + _In_ HANDLE hFile, + _In_ PCSTR ImageName, + _In_ PCSTR ModuleName, + _In_ DWORD64 BaseOfDll, + _In_ DWORD DllSize, + _In_ PMODLOAD_DATA Data, + _In_ DWORD Flags +); + + +DWORD64 WINAPI SymLoadModuleExW( + _In_ HANDLE hProcess, + _In_ HANDLE hFile, + _In_ PCWSTR ImageName, + _In_ PCWSTR ModuleName, + _In_ DWORD64 BaseOfDll, + _In_ DWORD DllSize, + _In_ PMODLOAD_DATA Data, + _In_ DWORD Flags +); + + +BOOL WINAPI SymFromAddr( + _In_ HANDLE hProcess, + _In_ DWORD64 Address, + _Out_opt_ PDWORD64 Displacement, + _Inout_ PSYMBOL_INFO Symbol +); + + +BOOL WINAPI SymGetModuleInfo64( + _In_ HANDLE hProcess, + _In_ DWORD64 dwAddr, + _Out_ PIMAGEHLP_MODULE64 ModuleInfo +); \ No newline at end of file diff --git a/ctypes_generation/definitions/functions/shell32.txt b/ctypes_generation/definitions/functions/shell32.txt new file mode 100644 index 0000000..7af42ea --- /dev/null +++ b/ctypes_generation/definitions/functions/shell32.txt @@ -0,0 +1,29 @@ +HINSTANCE WINAPI ShellExecuteA( + _In_opt_ HWND hwnd, + _In_opt_ LPCSTR lpOperation, + _In_ LPCSTR lpFile, + _In_opt_ LPCSTR lpParameters, + _In_opt_ LPCSTR lpDirectory, + _In_ INT nShowCmd +); + + +HINSTANCE WINAPI ShellExecuteW( + _In_opt_ HWND hwnd, + _In_opt_ LPWSTR lpOperation, + _In_ LPWSTR lpFile, + _In_opt_ LPWSTR lpParameters, + _In_opt_ LPWSTR lpDirectory, + _In_ INT nShowCmd +); + + +BOOL SHGetPathFromIDListA( + PCIDLIST_ABSOLUTE pidl, + LPCSTR pszPath +); + +BOOL SHGetPathFromIDListW( + PCIDLIST_ABSOLUTE pidl, + LPWSTR pszPath +); \ No newline at end of file diff --git a/ctypes_generation/definitions/functions/winfunc.txt b/ctypes_generation/definitions/functions/winfunc.txt index 4654621..c7c42a9 100644 --- a/ctypes_generation/definitions/functions/winfunc.txt +++ b/ctypes_generation/definitions/functions/winfunc.txt @@ -1566,26 +1566,6 @@ LONG WINAPI RegQueryValueExW( ); - -HINSTANCE WINAPI ShellExecuteA( - _In_opt_ HWND hwnd, - _In_opt_ LPCSTR lpOperation, - _In_ LPCSTR lpFile, - _In_opt_ LPCSTR lpParameters, - _In_opt_ LPCSTR lpDirectory, - _In_ INT nShowCmd -); - - -HINSTANCE WINAPI ShellExecuteW( - _In_opt_ HWND hwnd, - _In_opt_ LPWSTR lpOperation, - _In_ LPWSTR lpFile, - _In_opt_ LPWSTR lpParameters, - _In_opt_ LPWSTR lpDirectory, - _In_ INT nShowCmd -); - BOOL WINAPI InitializeProcThreadAttributeList( _Out_opt_ LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList, _In_ DWORD dwAttributeCount, diff --git a/ctypes_generation/definitions/functions/winfunc_notdoc.txt b/ctypes_generation/definitions/functions/winfunc_notdoc.txt index 256015c..e11a2b2 100644 --- a/ctypes_generation/definitions/functions/winfunc_notdoc.txt +++ b/ctypes_generation/definitions/functions/winfunc_notdoc.txt @@ -31,4 +31,17 @@ NTSTATUS WINAPI NtSetEaFile( _Out_ PIO_STATUS_BLOCK IoStatusBlock, _In_reads_bytes_(Length) PVOID Buffer, _In_ ULONG Length +); + + +NTSTATUS WINAPI NtCreateProcessEx( + _Out_ PHANDLE ProcessHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ HANDLE ParentProcess, + _In_ ULONG Flags, + _In_ HANDLE SectionHandle, + _In_ HANDLE DebugPort, + _In_ HANDLE ExceptionPort, + _In_ BOOLEAN InJob ); \ No newline at end of file diff --git a/ctypes_generation/definitions/structures/alpc.txt b/ctypes_generation/definitions/structures/alpc.txt new file mode 100644 index 0000000..f6862f2 --- /dev/null +++ b/ctypes_generation/definitions/structures/alpc.txt @@ -0,0 +1,276 @@ + +typedef enum _ALPC_PORT_INFORMATION_CLASS +{ + AlpcBasicInformation, + AlpcPortInformation, + AlpcAssociateCompletionPortInformation, + AlpcConnectedSIDInformation, + AlpcServerInformation, + AlpcMessageZoneInformation, + AlpcRegisterCompletionListInformation, + AlpcUnregisterCompletionListInformation, + AlpcAdjustCompletionListConcurrencyCountInformation, + AlpcRegisterCallbackInformation, + AlpcCompletionListRundownInformation, + AlpcWaitForPortReferences, + MaxAlpcPortInfoClass +} ALPC_PORT_INFORMATION_CLASS; + +typedef enum _ALPC_MESSAGE_INFORMATION_CLASS +{ + AlpcMessageSidInformation, + AlpcMessageTokenModifiedIdInformation, + MaxAlpcMessageInfoClass, + AlpcMessageHandleInformation, +} ALPC_MESSAGE_INFORMATION_CLASS, *PALPC_MESSAGE_INFORMATION_CLASS; + +typedef struct _ALPC_PORT_ATTRIBUTES32 +{ + ULONG Flags; + SECURITY_QUALITY_OF_SERVICE SecurityQos; + SIZE_T MaxMessageLength; + SIZE_T MemoryBandwidth; + SIZE_T MaxPoolUsage; + SIZE_T MaxSectionSize; + SIZE_T MaxViewSize; + SIZE_T MaxTotalSectionSize; + ULONG DupObjectTypes; +} ALPC_PORT_ATTRIBUTES32, *PALPC_PORT_ATTRIBUTES32; + + +typedef struct _ALPC_PORT_ATTRIBUTES64 +{ + ULONG Flags; + SECURITY_QUALITY_OF_SERVICE SecurityQos; + SIZE_T MaxMessageLength; + SIZE_T MemoryBandwidth; + SIZE_T MaxPoolUsage; + SIZE_T MaxSectionSize; + SIZE_T MaxViewSize; + SIZE_T MaxTotalSectionSize; + ULONG DupObjectTypes; + ULONG Reserved; +} ALPC_PORT_ATTRIBUTES64, *PALPC_PORT_ATTRIBUTES64; + +typedef struct _ALPC_MESSAGE_ATTRIBUTES +{ + ULONG AllocatedAttributes; + ULONG ValidAttributes; +} ALPC_MESSAGE_ATTRIBUTES, *PALPC_MESSAGE_ATTRIBUTES; + + +typedef union _PORT_MESSAGE32_TMP_UNION +{ + ULONG ClientViewSize; + ULONG CallbackId; +} PORT_MESSAGE_TMP_UNION; + +typedef union _PORT_MESSAGE64_TMP_UNION +{ + ULONGLONG ClientViewSize; + ULONG CallbackId; +} PORT_MESSAGE_TMP_UNION; + + +typedef struct _PORT_MESSAGE_TMP_SUBSTRUCT_S1 +{ + CSHORT DataLength; + CSHORT TotalLength; +} _PORT_MESSAGE_TMP_SUBSTRUCT_S1; + + +typedef union _PORT_MESSAGE_TMP_UNION_U1 +{ + ULONG Length; + _PORT_MESSAGE_TMP_SUBSTRUCT_S1 s1; +} _PORT_MESSAGE_TMP_UNION_U1; + + +typedef struct _PORT_MESSAGE_TMP_SUBSTRUCT_S2 +{ + CSHORT Type; + CSHORT DataInfoOffset; +} _PORT_MESSAGE_TMP_SUBSTRUCT_S2; + + +typedef union _PORT_MESSAGE_TMP_UNION_U2 +{ + ULONG ZeroInit; + _PORT_MESSAGE_TMP_SUBSTRUCT_S2 s2; +} _PORT_MESSAGE_TMP_UNION_U2; + + +typedef struct _PORT_MESSAGE32 +{ + _PORT_MESSAGE_TMP_UNION_U1 u1; + _PORT_MESSAGE_TMP_UNION_U2 u2; + CLIENT_ID32 ClientId; + ULONG MessageId; + _PORT_MESSAGE32_TMP_UNION tmp_union; +} PORT_MESSAGE32, *PPORT_MESSAGE32; + +typedef struct _PORT_MESSAGE64 +{ + _PORT_MESSAGE_TMP_UNION_U1 u1; + _PORT_MESSAGE_TMP_UNION_U2 u2; + CLIENT_ID64 ClientId; + ULONG MessageId; + _PORT_MESSAGE64_TMP_UNION tmp_union; +} PORT_MESSAGE64, *PPORT_MESSAGE64; + + +typedef struct _ALPC_SERVER_INFORMATION_TMP_IN +{ + HANDLE ThreadHandle; +} ALPC_SERVER_INFORMATION_TMP_IN; + +typedef struct _ALPC_SERVER_INFORMATION_TMP_OUT +{ + BOOLEAN ThreadBlocked; + HANDLE ConnectedProcessId; + UNICODE_STRING ConnectionPortName; +} ALPC_SERVER_INFORMATION_TMP_OUT; + +typedef union ALPC_SERVER_INFORMATION +{ + ALPC_SERVER_INFORMATION_TMP_IN In; + ALPC_SERVER_INFORMATION_TMP_OUT Out; +} ALPC_SERVER_INFORMATION; + + +typedef struct _ALPC_CONTEXT_ATTR +{ + PVOID PortContext; + PVOID MessageContext; + ULONG Sequence; + ULONG MessageId; + ULONG CallbackId; +} ALPC_CONTEXT_ATTR, *PALPC_CONTEXT_ATTR; + +typedef struct _ALPC_CONTEXT_ATTR32 +{ + ULONG PortContext; + ULONG MessageContext; + ULONG Sequence; + ULONG MessageId; + ULONG CallbackId; +} ALPC_CONTEXT_ATTR32, *PALPC_CONTEXT_ATTR32; + +typedef struct _ALPC_CONTEXT_ATTR64 +{ + ULONGLONG PortContext; + ULONGLONG MessageContext; + ULONG Sequence; + ULONG MessageId; + ULONG CallbackId; +} ALPC_CONTEXT_ATTR64, *PALPC_CONTEXT_ATTR64; + + +typedef struct _ALPC_HANDLE_ATTR +{ + ULONG Flags; + HANDLE Handle; + ULONG ObjectType; + ACCESS_MASK DesiredAccess; +} ALPC_HANDLE_ATTR, *PALPC_HANDLE_ATTR; + +typedef struct _ALPC_HANDLE_ATTR32 +{ + ULONG Flags; + ULONG Handle; + ULONG ObjectType; + ACCESS_MASK DesiredAccess; +} ALPC_HANDLE_ATTR32, *PALPC_HANDLE_ATTR32; + + +typedef struct _ALPC_HANDLE_ATTR64 +{ + ULONG Flags; + ULONGLONG Handle; + ULONG ObjectType; + ACCESS_MASK DesiredAccess; +} ALPC_HANDLE_ATTR64, *PALPC_HANDLE_ATTR64; + + +typedef struct _ALPC_SECURITY_ATTR +{ + ULONG Flags; + PSECURITY_QUALITY_OF_SERVICE QoS; + ALPC_HANDLE ContextHandle; +} ALPC_SECURITY_ATTR, *PALPC_SECURITY_ATTR; + +typedef struct _ALPC_SECURITY_ATTR32 +{ + ULONG Flags; + ULONG QoS; + ULONG ContextHandle; +} ALPC_SECURITY_ATTR32, *PALPC_SECURITY_ATTR32; + + +typedef struct _ALPC_SECURITY_ATTR64 +{ + ULONGLONG Flags; + ULONGLONG QoS; + ULONGLONG ContextHandle; +} ALPC_SECURITY_ATTR64, *PALPC_SECURITY_ATTR64; + +typedef struct _ALPC_DATA_VIEW_ATTR +{ + ULONG Flags; + ALPC_HANDLE SectionHandle; + PVOID ViewBase; + PVOID ViewSize; +} ALPC_DATA_VIEW_ATTR, *PALPC_DATA_VIEW_ATTR; + +typedef struct _ALPC_DATA_VIEW_ATTR32 +{ + ULONG Flags; + ULONG SectionHandle; + ULONG ViewBase; + ULONG ViewSize; +} ALPC_DATA_VIEW_ATTR32, *PALPC_DATA_VIEW_ATTR32; + + +typedef struct _ALPC_DATA_VIEW_ATTR64 +{ + ULONG Flags; + ULONGLONG SectionHandle; + ULONGLONG ViewBase; + ULONGLONG ViewSize; +} ALPC_DATA_VIEW_ATTR64, *PALPC_DATA_VIEW_ATTR64; + + +typedef struct _ALPC_TOKEN_ATTR +{ + ULONGLONG TokenId; + ULONGLONG AuthenticationId; + ULONGLONG ModifiedId; +} ALPC_TOKEN_ATTR, *PALPC_TOKEN_ATTR; + + +typedef struct _ALPC_DIRECT_ATTR +{ + HANDLE Event; +} ALPC_DIRECT_ATTR, *PALPC_DIRECT_ATTR; + +typedef struct _ALPC_DIRECT_ATTR32 +{ + ULONG Event; +} ALPC_DIRECT_ATTR32, *PALPC_DIRECT_ATTR32; + +typedef struct _ALPC_DIRECT_ATTR64 +{ + ULONGLONG Event; +} ALPC_DIRECT_ATTR64, *PALPC_DIRECT_ATTR64; + + +typedef struct _ALPC_WORK_ON_BEHALF_ATTR +{ + ULONGLONG Ticket; +} ALPC_WORK_ON_BEHALF_ATTR, *PALPC_WORK_ON_BEHALF_ATTR; + +typedef struct _RPC_IF_ID { + IID Uuid; + USHORT VersMajor; + USHORT VersMinor; +} RPC_IF_ID; diff --git a/ctypes_generation/definitions/structures/symbols.txt b/ctypes_generation/definitions/structures/symbols.txt new file mode 100644 index 0000000..66662c9 --- /dev/null +++ b/ctypes_generation/definitions/structures/symbols.txt @@ -0,0 +1,38 @@ +typedef enum { + SymNone, + SymCoff, + SymCv, + SymPdb, + SymExport, + SymDeferred, + SymSym, // .sym file + SymDia, + SymVirtual, + NumSymTypes +} SYM_TYPE; + +typedef struct _IMAGEHLP_MODULE64 { + DWORD SizeOfStruct; + DWORD64 BaseOfImage; + DWORD ImageSize; + DWORD TimeDateStamp; + DWORD CheckSum; + DWORD NumSyms; + SYM_TYPE SymType; + CHAR ModuleName[32]; + CHAR ImageName[256]; + CHAR LoadedImageName[256]; + CHAR LoadedPdbName[256]; + DWORD CVSig; + CHAR CVData[780]; // MAX_PATH * 3 + DWORD PdbSig; + GUID PdbSig70; + DWORD PdbAge; + BOOL PdbUnmatched; + BOOL DbgUnmatched; + BOOL LineNumbers; + BOOL GlobalSymbols; + BOOL TypeInfo; + BOOL SourceIndexed; + BOOL Publics; +} IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64; \ No newline at end of file diff --git a/ctypes_generation/extended_structs/PSID.py b/ctypes_generation/extended_structs/PSID.py index a8a9bec..7747e1d 100644 --- a/ctypes_generation/extended_structs/PSID.py +++ b/ctypes_generation/extended_structs/PSID.py @@ -42,7 +42,7 @@ class PSID(_INITIAL_PSID): # _INITIAL_PSID -> PVOID return """<{0} "{1}">""".format(type(self).__name__, self.to_string()) except WindowsError: # Case of PSID is not valide if not self: - return """<{0} "None" at {1:#x}>""".format(type(self).__name__, id(self)) + return """<{0} (NULL) at {1:#x}>""".format(type(self).__name__, id(self)) return """<{0} "" at {1:#x}>""".format(type(self).__name__, id(self)) __sprint__ = __repr__ diff --git a/ctypes_generation/extended_structs/_LUID.py b/ctypes_generation/extended_structs/_LUID.py index 56f81cf..d6e1a39 100644 --- a/ctypes_generation/extended_structs/_LUID.py +++ b/ctypes_generation/extended_structs/_LUID.py @@ -3,5 +3,8 @@ class _LUID(_INITIAL_LUID): def __int__(self): return (self.HighPart << 32) | self.LowPart + def __eq__(self, other): + return (self.HighPart, self.LowPart) == (other.HighPart, other.LowPart) + def __repr__(self): return "<{0} HighPart={1} LowPart={2}>".format(type(self).__name__, self.HighPart, self.LowPart) \ No newline at end of file diff --git a/windows/winproxy/apis/__init__.py b/windows/winproxy/apis/__init__.py index cf82694..a4460a5 100644 --- a/windows/winproxy/apis/__init__.py +++ b/windows/winproxy/apis/__init__.py @@ -1,6 +1,7 @@ from advapi32 import * from crypt32 import * from cryptui import * +from dbghelp import * from iphlpapi import * from kernel32 import * from ktmw32 import * diff --git a/windows/winproxy/apis/advapi32.py b/windows/winproxy/apis/advapi32.py index 720868f..48d0278 100644 --- a/windows/winproxy/apis/advapi32.py +++ b/windows/winproxy/apis/advapi32.py @@ -46,6 +46,8 @@ def OpenThreadToken(ThreadHandle, DesiredAccess, OpenAsSelf, TokenHandle): @Advapi32Proxy() def SetThreadToken(Thread, Token): + if isinstance(Thread, (int, long)): + Thread = gdef.HANDLE(Thread) return SetThreadToken.ctypes_function(Thread, Token) @Advapi32Proxy() diff --git a/windows/winproxy/apis/dbghelp.py b/windows/winproxy/apis/dbghelp.py new file mode 100644 index 0000000..c5b2609 --- /dev/null +++ b/windows/winproxy/apis/dbghelp.py @@ -0,0 +1,30 @@ +import ctypes +import windows.generated_def as gdef + +from ..apiproxy import ApiProxy, NeededParameter +from ..error import fail_on_zero + +class DbgHelpProxy(ApiProxy): + APIDLL = "dbghelp" + default_error_check = staticmethod(fail_on_zero) + + +@DbgHelpProxy() +def SymInitialize(hProcess, UserSearchPath, fInvadeProcess): + return SymInitialize.ctypes_function(hProcess, UserSearchPath, fInvadeProcess) + +@DbgHelpProxy() +def SymLoadModuleExA(hProcess, hFile, ImageName, ModuleName, BaseOfDll, DllSize, Data, Flags): + return SymLoadModuleExA.ctypes_function(hProcess, hFile, ImageName, ModuleName, BaseOfDll, DllSize, Data, Flags) + +@DbgHelpProxy() +def SymLoadModuleExW(hProcess, hFile, ImageName, ModuleName, BaseOfDll, DllSize, Data, Flags): + return SymLoadModuleExW.ctypes_function(hProcess, hFile, ImageName, ModuleName, BaseOfDll, DllSize, Data, Flags) + +@DbgHelpProxy() +def SymFromAddr(hProcess, Address, Displacement, Symbol): + return SymFromAddr.ctypes_function(hProcess, Address, Displacement, Symbol) + +@DbgHelpProxy() +def SymGetModuleInfo64(hProcess, dwAddr, ModuleInfo): + return SymGetModuleInfo64.ctypes_function(hProcess, dwAddr, ModuleInfo) \ No newline at end of file diff --git a/windows/winproxy/apis/ntdll.py b/windows/winproxy/apis/ntdll.py index d21648c..904ff08 100644 --- a/windows/winproxy/apis/ntdll.py +++ b/windows/winproxy/apis/ntdll.py @@ -108,6 +108,11 @@ def NtQueryInformationThread(ThreadHandle, ThreadInformationClass, ThreadInforma ThreadInformationLength = ctypes.sizeof(ThreadInformation) return NtQueryInformationThread.ctypes_function(ThreadHandle, ThreadInformationClass, ThreadInformation, ThreadInformationLength, ReturnLength) + +@NtdllProxy() +def NtCreateProcessEx(ProcessHandle, DesiredAccess, ObjectAttributes=None, ParentProcess=NeededParameter, Flags=NeededParameter, SectionHandle=NeededParameter, DebugPort=None, ExceptionPort=None, InJob=False): + return NtCreateProcessEx.ctypes_function(ProcessHandle, DesiredAccess, ObjectAttributes, ParentProcess, Flags, SectionHandle, DebugPort, ExceptionPort, InJob) + @NtdllProxy() 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: diff --git a/windows/winproxy/apis/shell32.py b/windows/winproxy/apis/shell32.py index cbc42ad..ac0d3f8 100644 --- a/windows/winproxy/apis/shell32.py +++ b/windows/winproxy/apis/shell32.py @@ -15,3 +15,11 @@ def ShellExecuteA(hwnd, lpOperation, lpFile, lpParameters, lpDirectory, nShowCmd @Shell32Proxy() def ShellExecuteW(hwnd, lpOperation, lpFile, lpParameters, lpDirectory, nShowCmd): return ShellExecuteW.ctypes_function(hwnd, lpOperation, lpFile, lpParameters, lpDirectory, nShowCmd) + +@Shell32Proxy() +def SHGetPathFromIDListA(pidl, pszPath): + return SHGetPathFromIDListA.ctypes_function(pidl, pszPath) + +@Shell32Proxy() +def SHGetPathFromIDListW(pidl, pszPath): + return SHGetPathFromIDListW.ctypes_function(pidl, pszPath) \ No newline at end of file