Add some ctypes_generation and generated def

This commit is contained in:
clement rouault
2022-08-05 11:33:25 +02:00
parent d7d2dacf33
commit 267ed1e85d
19 changed files with 1222 additions and 207 deletions
@@ -0,0 +1,33 @@
typedef struct IWbemObjectTextSrcVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IWbemObjectTextSrc * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IWbemObjectTextSrc * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IWbemObjectTextSrc * This);
HRESULT ( STDMETHODCALLTYPE *GetText )(
IWbemObjectTextSrc * This,
/* [in] */ long lFlags,
/* [in] */ IWbemClassObject *pObj,
/* [in] */ ULONG uObjTextFormat,
/* [in] */ IWbemContext *pCtx,
/* [out] */ BSTR *strText);
HRESULT ( STDMETHODCALLTYPE *CreateFromText )(
IWbemObjectTextSrc * This,
/* [in] */ long lFlags,
/* [in] */ BSTR strText,
/* [in] */ ULONG uObjTextFormat,
/* [in] */ IWbemContext *pCtx,
/* [out] */ IWbemClassObject **pNewObj);
END_INTERFACE
} IWbemObjectTextSrcVtbl;
@@ -176,3 +176,16 @@
#define DNS_QUERY_DNSSEC_CHECKING_DISABLED 0x02000000
#define DNS_QUERY_RESERVED 0xf0000000
/** IPTypes.h **/
// Definitions and structures used by getnetworkparams and getadaptersinfo apis
#define MAX_ADAPTER_DESCRIPTION_LENGTH 128 // arb.
#define MAX_ADAPTER_NAME_LENGTH 256 // arb.
#define MAX_ADAPTER_ADDRESS_LENGTH 8 // arb.
#define DEFAULT_MINIMUM_ENTITIES 32 // arb.
#define MAX_HOSTNAME_LEN 128 // arb.
#define MAX_DOMAIN_NAME_LEN 128 // arb.
#define MAX_SCOPE_ID_LEN 256 // arb.
#define MAX_DHCPV6_DUID_LENGTH 130 // RFC 3315.
#define MAX_DNS_SUFFIX_STRING_LENGTH 256
@@ -56,4 +56,87 @@ HRESULT WINAPI CLSIDFromProgID(
PVOID CoTaskMemFree(
LPVOID pv
);
LPSAFEARRAY SafeArrayCreate(
[in] VARTYPE vt,
[in] UINT cDims,
[in] SAFEARRAYBOUND *rgsabound
);
LPSAFEARRAY SafeArrayCreateVector(
[in] VARTYPE vt,
[in] LONG lLbound,
[in] ULONG cElements
);
HRESULT SafeArrayDestroy(
[in] SAFEARRAY *psa
);
HRESULT SafeArrayDestroyData(
[in] SAFEARRAY *psa
);
HRESULT SafeArrayGetElement(
[in] SAFEARRAY *psa,
[in] LONG *rgIndices,
[out] VOID *pv
);
UINT SafeArrayGetElemsize(
[in] SAFEARRAY *psa
);
HRESULT SafeArrayGetLBound(
[in] SAFEARRAY *psa,
[in] UINT nDim,
[out] LONG *plLbound
);
HRESULT SafeArrayGetUBound(
[in] SAFEARRAY *psa,
[in] UINT nDim,
[out] LONG *plUbound
);
UINT SafeArrayGetDim(
[in] SAFEARRAY *psa
);
HRESULT SafeArrayPutElement(
[in] SAFEARRAY *psa,
[in] LONG *rgIndices,
[in] VOID *pv
);
HRESULT SafeArrayGetVartype(
[in] SAFEARRAY *psa,
[out] VARTYPE *pvt
);
VOID SysFreeString(
[in, optional] BSTR bstrString
);
HRESULT SafeArrayCopy(
[in] SAFEARRAY *psa,
[out] LPSAFEARRAY *ppsaOut
);
HRESULT SafeArrayCopyData(
[in] SAFEARRAY *psaSource,
[in] SAFEARRAY *psaTarget
);
PVOID SysAllocString(
[in, optional] OLECHAR *psz
);
VOID SysFreeString(
[in, optional] BSTR bstrString
);
@@ -66,4 +66,15 @@ DNS_STATUS DnsQueryEx(
PDNS_QUERY_REQUEST pQueryRequest,
PDNS_QUERY_RESULT pQueryResults,
PDNS_QUERY_CANCEL pCancelHandle
);
ULONG GetAdaptersInfo(
[out] PIP_ADAPTER_INFO AdapterInfo,
[in, out] PULONG SizePointer
);
DWORD GetPerAdapterInfo(
[in] ULONG IfIndex,
[out] PIP_PER_ADAPTER_INFO pPerAdapterInfo,
[in] PULONG pOutBufLen
);
@@ -99,7 +99,7 @@ typedef struct tagSAFEARRAY
ULONG cLocks;
PVOID pvData;
SAFEARRAYBOUND rgsabound[ 1 ];
} SAFEARRAY;
} SAFEARRAY, *LPSAFEARRAY;
typedef struct __tagBRECORD {
PVOID pvRecord;
@@ -284,3 +284,20 @@ typedef struct _FILE_NOTIFY_EXTENDED_INFORMATION {
DWORD FileNameLength;
WCHAR FileName[1];
} FILE_NOTIFY_EXTENDED_INFORMATION, *PFILE_NOTIFY_EXTENDED_INFORMATION;
/*
The sub union is new from _WIN32_WINNT_WIN10_RS1
But it does not change the struct size, so keep it like this
https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/ntifs/ns-ntifs-_file_rename_information
*/
typedef struct _FILE_RENAME_INFORMATION {
union {
BOOLEAN ReplaceIfExists; // FileRenameInformation
ULONG Flags; // FileRenameInformationEx
} __ANON_DUMMYUNIONNAME_FILE_RENAME_INFORMATION; /* */
HANDLE RootDirectory;
ULONG FileNameLength;
WCHAR FileName[1];
} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
@@ -870,4 +870,51 @@ typedef struct _DNS_QUERY_RESULT
// Might BE A or W record (don't know how to distinguish for now)
PVOID pQueryRecords; // PDNS_RECORD pQueryRecords;
PVOID Reserved;
} DNS_QUERY_RESULT, *PDNS_QUERY_RESULT;
} DNS_QUERY_RESULT, *PDNS_QUERY_RESULT;
typedef struct {
CHAR String[4 * 4];
} IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING;
typedef struct _IP_ADDR_STRING {
struct _IP_ADDR_STRING* Next;
IP_ADDRESS_STRING IpAddress;
IP_MASK_STRING IpMask;
DWORD Context;
} IP_ADDR_STRING, *PIP_ADDR_STRING;
typedef struct _IP_ADAPTER_INFO {
struct _IP_ADAPTER_INFO *Next;
DWORD ComboIndex;
CHAR AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
CHAR Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
UINT AddressLength;
BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
DWORD Index;
UINT Type;
UINT DhcpEnabled;
PIP_ADDR_STRING CurrentIpAddress;
IP_ADDR_STRING IpAddressList;
IP_ADDR_STRING GatewayList;
IP_ADDR_STRING DhcpServer;
BOOL HaveWins;
IP_ADDR_STRING PrimaryWinsServer;
IP_ADDR_STRING SecondaryWinsServer;
ULONGLONG LeaseObtained; // time_t ?
ULONGLONG LeaseExpires; // time_t ?
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
// #if (NTDDI_VERSION >= NTDDI_WIN2KSP1)
// typedef IP_PER_ADAPTER_INFO_W2KSP1 IP_PER_ADAPTER_INFO;
// typedef IP_PER_ADAPTER_INFO_W2KSP1 *PIP_PER_ADAPTER_INFO;
// #endif
typedef struct _IP_PER_ADAPTER_INFO_W2KSP1 {
UINT AutoconfigEnabled;
UINT AutoconfigActive;
PIP_ADDR_STRING CurrentDnsServer;
IP_ADDR_STRING DnsServerList;
} IP_PER_ADAPTER_INFO_W2KSP1, *PIP_PER_ADAPTER_INFO_W2KSP1, IP_PER_ADAPTER_INFO, *PIP_PER_ADAPTER_INFO;
@@ -0,0 +1,11 @@
INITIAL_FILE_RENAME_INFORMATION = _FILE_RENAME_INFORMATION
class _FILE_RENAME_INFORMATION(INITIAL_FILE_RENAME_INFORMATION):
@property
def filename(self):
filename_addr = ctypes.addressof(self) + type(self).FileName.offset
if getattr(self, "_target", None) is not None: #remote ctypes :D -> TRICKS OF THE YEAR
raw_data = self._target.read_memory(filename_addr, self.FileNameLength)
return raw_data.decode("utf16")
size = int(self.FileNameLength / 2)
return (ctypes.c_wchar * size).from_address(filename_addr)[:]
-123
View File
@@ -147,73 +147,7 @@ Another example from a project::
'\x81~\x08\x0c\x00\x00\x00u&\x8bN\x10\x8bQ\x04\x8bA\x08\x8b\t\x81\xf9\x01\x00\x00\x00u\x03\xee\xeb\r\x81\xf9\x02\x00\x00\x00u\x04f\xef\xeb\x01\xef1\xc0\xc3\xc7\xc0\r\x00\x00\xc0\xc3'
Available Instructions in X86 assembler
'''''''''''''''''''''''''''''''''''''''
.. note::
Not all encodings may be implemented for each of the instructions.
``Byte`` and ``Raw`` are not x86 instruction and allow to insert arbitrary data to the generated code.
Listing:
* Add
* And
* Byte
* Cmp
* CmpsB
* CmpsD
* CmpsW
* Cpuid
* Dec
* In
* Inc
* Int
* Int3
* Iret
* Lea
* Mov
* Movsb
* Movsd
* Nop
* Not
* Or
* Out
* Pop
* Popad
* Popfd
* Push
* Pushad
* Pushfd
* Raw
* Ret
* Retf
* Rol
* Ror
* ScasB
* ScasD
* ScasW
* Shl
* Shr
* StosB
* StosD
* StosW
* Sub
* Test
* Xchg
* Xor
.. note::
``Raw``: Output raw data from an hexadecimal string
>>> windows.native_exec.simple_x64.Raw("90C332FCFF").get_code()
'\x90\xc32\xfc\xff'
``Byte``: Output a raw byte
>>> windows.native_exec.simple_x86.Byte(0x42).get_code()
'B'
:mod:`windows.native_exec.simple_x64` -- X64 Assembler
""""""""""""""""""""""""""""""""""""""""""""""""""""""
@@ -248,63 +182,6 @@ Demo::
'g\x8b\x00'
Available Instructions in X64 assembler
'''''''''''''''''''''''''''''''''''''''
.. note::
Not all encodings may be implemented for each of the instructions.
``Raw`` is not an x64 instruction and allow to insert arbitrary data to the generated code.
Listing:
* Add
* And
* Cmp
* CmpsB
* CmpsD
* CmpsQ
* CmpsW
* Cpuid
* Dec
* In
* Inc
* Int
* Int3
* Lea
* Mov
* Nop
* Not
* Or
* Out
* Pop
* Popfq
* Push
* Pushfq
* Raw
* Ret
* Retf
* Retf32
* ScasB
* ScasD
* ScasQ
* ScasW
* Shl
* Shr
* Sub
* Test
* Xchg
* Xor
.. note::
``Raw``: Output raw data from an hexadecimal string
>>> windows.native_exec.simple_x64.Raw("90C332FCFF").get_code()
'\x90\xc32\xfc\xff'
:mod:`windows.native_exec.nativeutils` -- Native utility functions
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+74 -51
View File
@@ -543,6 +543,69 @@ WinDef
.. autodata:: EVENT_TRACE_FLAG_REGISTRY
.. autodata:: EVENT_TRACE_FLAG_DBGPRINT
.. autodata:: EVENT_TRACE_FLAG_VOLMGR
.. autodata:: FILE_NOTIFY_CHANGE_FILE_NAME
.. autodata:: FILE_NOTIFY_CHANGE_DIR_NAME
.. autodata:: FILE_NOTIFY_CHANGE_NAME
.. autodata:: FILE_NOTIFY_CHANGE_ATTRIBUTES
.. autodata:: FILE_NOTIFY_CHANGE_SIZE
.. autodata:: FILE_NOTIFY_CHANGE_LAST_WRITE
.. autodata:: FILE_NOTIFY_CHANGE_LAST_ACCESS
.. autodata:: FILE_NOTIFY_CHANGE_CREATION
.. autodata:: FILE_NOTIFY_CHANGE_EA
.. autodata:: FILE_NOTIFY_CHANGE_SECURITY
.. autodata:: FILE_NOTIFY_CHANGE_STREAM_NAME
.. autodata:: FILE_NOTIFY_CHANGE_STREAM_SIZE
.. autodata:: FILE_NOTIFY_CHANGE_STREAM_WRITE
.. autodata:: FILE_NOTIFY_VALID_MASK
.. autodata:: FILE_ACTION_ADDED
.. autodata:: FILE_ACTION_REMOVED
.. autodata:: FILE_ACTION_MODIFIED
.. autodata:: FILE_ACTION_RENAMED_OLD_NAME
.. autodata:: FILE_ACTION_RENAMED_NEW_NAME
.. autodata:: FILE_ACTION_ADDED_STREAM
.. autodata:: FILE_ACTION_REMOVED_STREAM
.. autodata:: FILE_ACTION_MODIFIED_STREAM
.. autodata:: FILE_ACTION_REMOVED_BY_DELETE
.. autodata:: FILE_ACTION_ID_NOT_TUNNELLED
.. autodata:: FILE_ACTION_TUNNELLED_ID_COLLISION
.. autodata:: FILE_CASE_SENSITIVE_SEARCH
.. autodata:: FILE_CASE_PRESERVED_NAMES
.. autodata:: FILE_UNICODE_ON_DISK
.. autodata:: FILE_PERSISTENT_ACLS
.. autodata:: FILE_FILE_COMPRESSION
.. autodata:: FILE_VOLUME_QUOTAS
.. autodata:: FILE_SUPPORTS_SPARSE_FILES
.. autodata:: FILE_SUPPORTS_REPARSE_POINTS
.. autodata:: FILE_SUPPORTS_REMOTE_STORAGE
.. autodata:: FILE_VOLUME_IS_COMPRESSED
.. autodata:: FILE_SUPPORTS_OBJECT_IDS
.. autodata:: FILE_SUPPORTS_ENCRYPTION
.. autodata:: FILE_NAMED_STREAMS
.. autodata:: FILE_READ_ONLY_VOLUME
.. autodata:: FILE_SEQUENTIAL_WRITE_ONCE
.. autodata:: FILE_SUPPORTS_TRANSACTIONS
.. autodata:: FILE_SUPPORTS_HARD_LINKS
.. autodata:: FILE_SUPPORTS_EXTENDED_ATTRIBUTES
.. autodata:: FILE_SUPPORTS_OPEN_BY_FILE_ID
.. autodata:: FILE_SUPPORTS_USN_JOURNAL
.. autodata:: FILE_SHARE_READ
.. autodata:: FILE_SHARE_WRITE
.. autodata:: FILE_SHARE_DELETE
.. autodata:: FILE_ATTRIBUTE_READONLY
.. autodata:: FILE_ATTRIBUTE_HIDDEN
.. autodata:: FILE_ATTRIBUTE_SYSTEM
.. autodata:: FILE_ATTRIBUTE_DIRECTORY
.. autodata:: FILE_ATTRIBUTE_ARCHIVE
.. autodata:: FILE_ATTRIBUTE_DEVICE
.. autodata:: FILE_ATTRIBUTE_NORMAL
.. autodata:: FILE_ATTRIBUTE_TEMPORARY
.. autodata:: FILE_ATTRIBUTE_SPARSE_FILE
.. autodata:: FILE_ATTRIBUTE_REPARSE_POINT
.. autodata:: FILE_ATTRIBUTE_COMPRESSED
.. autodata:: FILE_ATTRIBUTE_OFFLINE
.. autodata:: FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
.. autodata:: FILE_ATTRIBUTE_ENCRYPTED
.. autodata:: FILE_ATTRIBUTE_VIRTUAL
.. autodata:: X86_KGDT_NULL
.. autodata:: X86_KGDT_R0_CODE
.. autodata:: X86_KGDT_R0_DATA
@@ -584,6 +647,7 @@ WinDef
.. autodata:: DNS_ATMA_FORMAT_E164
.. autodata:: DNS_ATMA_FORMAT_AESA
.. autodata:: DNS_ATMA_MAX_ADDR_LENGTH
.. autodata:: DNS_ADDR_MAX_SOCKADDR_LENGTH
.. autodata:: DNS_TYPE_ZERO
.. autodata:: DNS_TYPE_A
.. autodata:: DNS_TYPE_NS
@@ -671,6 +735,15 @@ WinDef
.. autodata:: DNS_QUERY_DNSSEC_OK
.. autodata:: DNS_QUERY_DNSSEC_CHECKING_DISABLED
.. autodata:: DNS_QUERY_RESERVED
.. autodata:: MAX_ADAPTER_DESCRIPTION_LENGTH
.. autodata:: MAX_ADAPTER_NAME_LENGTH
.. autodata:: MAX_ADAPTER_ADDRESS_LENGTH
.. autodata:: DEFAULT_MINIMUM_ENTITIES
.. autodata:: MAX_HOSTNAME_LEN
.. autodata:: MAX_DOMAIN_NAME_LEN
.. autodata:: MAX_SCOPE_ID_LEN
.. autodata:: MAX_DHCPV6_DUID_LENGTH
.. autodata:: MAX_DNS_SUFFIX_STRING_LENGTH
.. autodata:: PIPE_ACCESS_INBOUND
.. autodata:: PIPE_ACCESS_OUTBOUND
.. autodata:: PIPE_ACCESS_DUPLEX
@@ -803,6 +876,7 @@ WinDef
.. autodata:: PROTECTED_SACL_SECURITY_INFORMATION
.. autodata:: UNPROTECTED_DACL_SECURITY_INFORMATION
.. autodata:: UNPROTECTED_SACL_SECURITY_INFORMATION
.. autodata:: SECURITY_DESCRIPTOR_REVISION
.. autodata:: SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL
.. autodata:: SERVICE_TRIGGER_TYPE_IP_ADDRESS_AVAILABILITY
.. autodata:: SERVICE_TRIGGER_TYPE_DOMAIN_JOIN
@@ -1529,59 +1603,8 @@ WinDef
.. autodata:: OPEN_EXISTING
.. autodata:: OPEN_ALWAYS
.. autodata:: TRUNCATE_EXISTING
.. autodata:: FILE_SHARE_READ
.. autodata:: FILE_SHARE_WRITE
.. autodata:: FILE_SHARE_DELETE
.. autodata:: FILE_ATTRIBUTE_READONLY
.. autodata:: FILE_ATTRIBUTE_HIDDEN
.. autodata:: FILE_ATTRIBUTE_SYSTEM
.. autodata:: FILE_ATTRIBUTE_DIRECTORY
.. autodata:: FILE_ATTRIBUTE_ARCHIVE
.. autodata:: FILE_ATTRIBUTE_DEVICE
.. autodata:: FILE_ATTRIBUTE_NORMAL
.. autodata:: FILE_ATTRIBUTE_TEMPORARY
.. autodata:: FILE_ATTRIBUTE_SPARSE_FILE
.. autodata:: FILE_ATTRIBUTE_REPARSE_POINT
.. autodata:: FILE_ATTRIBUTE_COMPRESSED
.. autodata:: FILE_ATTRIBUTE_OFFLINE
.. autodata:: FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
.. autodata:: FILE_ATTRIBUTE_ENCRYPTED
.. autodata:: FILE_ATTRIBUTE_VIRTUAL
.. autodata:: FILE_NOTIFY_CHANGE_FILE_NAME
.. autodata:: FILE_NOTIFY_CHANGE_DIR_NAME
.. autodata:: FILE_NOTIFY_CHANGE_ATTRIBUTES
.. autodata:: FILE_NOTIFY_CHANGE_SIZE
.. autodata:: FILE_NOTIFY_CHANGE_LAST_WRITE
.. autodata:: FILE_NOTIFY_CHANGE_LAST_ACCESS
.. autodata:: FILE_NOTIFY_CHANGE_CREATION
.. autodata:: FILE_NOTIFY_CHANGE_SECURITY
.. autodata:: FILE_ACTION_ADDED
.. autodata:: FILE_ACTION_REMOVED
.. autodata:: FILE_ACTION_MODIFIED
.. autodata:: FILE_ACTION_RENAMED_OLD_NAME
.. autodata:: FILE_ACTION_RENAMED_NEW_NAME
.. autodata:: MAILSLOT_NO_MESSAGE
.. autodata:: MAILSLOT_WAIT_FOREVER
.. autodata:: FILE_CASE_SENSITIVE_SEARCH
.. autodata:: FILE_CASE_PRESERVED_NAMES
.. autodata:: FILE_UNICODE_ON_DISK
.. autodata:: FILE_PERSISTENT_ACLS
.. autodata:: FILE_FILE_COMPRESSION
.. autodata:: FILE_VOLUME_QUOTAS
.. autodata:: FILE_SUPPORTS_SPARSE_FILES
.. autodata:: FILE_SUPPORTS_REPARSE_POINTS
.. autodata:: FILE_SUPPORTS_REMOTE_STORAGE
.. autodata:: FILE_VOLUME_IS_COMPRESSED
.. autodata:: FILE_SUPPORTS_OBJECT_IDS
.. autodata:: FILE_SUPPORTS_ENCRYPTION
.. autodata:: FILE_NAMED_STREAMS
.. autodata:: FILE_READ_ONLY_VOLUME
.. autodata:: FILE_SEQUENTIAL_WRITE_ONCE
.. autodata:: FILE_SUPPORTS_TRANSACTIONS
.. autodata:: FILE_SUPPORTS_HARD_LINKS
.. autodata:: FILE_SUPPORTS_EXTENDED_ATTRIBUTES
.. autodata:: FILE_SUPPORTS_OPEN_BY_FILE_ID
.. autodata:: FILE_SUPPORTS_USN_JOURNAL
.. autodata:: RRF_RT_REG_NONE
.. autodata:: RRF_RT_REG_SZ
.. autodata:: RRF_RT_REG_EXPAND_SZ
+599
View File
@@ -2278,6 +2278,10 @@ tagSAFEARRAY
Alias for :class:`tagSAFEARRAY`
.. class:: LPSAFEARRAY
Pointer to :class:`tagSAFEARRAY`
.. class:: tagSAFEARRAY
.. attribute:: cDims
@@ -8301,6 +8305,149 @@ _WIN32_FIND_DATAW
:class:`WORD`
_FILE_NOTIFY_INFORMATION
''''''''''''''''''''''''
.. class:: FILE_NOTIFY_INFORMATION
Alias for :class:`_FILE_NOTIFY_INFORMATION`
.. class:: PFILE_NOTIFY_INFORMATION
Pointer to :class:`_FILE_NOTIFY_INFORMATION`
.. class:: _FILE_NOTIFY_INFORMATION
.. attribute:: NextEntryOffset
:class:`DWORD`
.. attribute:: Action
:class:`DWORD`
.. attribute:: FileNameLength
:class:`DWORD`
.. attribute:: FileName
:class:`WCHAR`
_FILE_NOTIFY_EXTENDED_INFORMATION
'''''''''''''''''''''''''''''''''
.. class:: PFILE_NOTIFY_EXTENDED_INFORMATION
Pointer to :class:`_FILE_NOTIFY_EXTENDED_INFORMATION`
.. class:: FILE_NOTIFY_EXTENDED_INFORMATION
Alias for :class:`_FILE_NOTIFY_EXTENDED_INFORMATION`
.. class:: _FILE_NOTIFY_EXTENDED_INFORMATION
.. attribute:: NextEntryOffset
:class:`DWORD`
.. attribute:: Action
:class:`DWORD`
.. attribute:: CreationTime
:class:`LARGE_INTEGER`
.. attribute:: LastModificationTime
:class:`LARGE_INTEGER`
.. attribute:: LastChangeTime
:class:`LARGE_INTEGER`
.. attribute:: LastAccessTime
:class:`LARGE_INTEGER`
.. attribute:: AllocatedLength
:class:`LARGE_INTEGER`
.. attribute:: FileSize
:class:`LARGE_INTEGER`
.. attribute:: FileAttributes
:class:`DWORD`
.. attribute:: ReparsePointTag
:class:`DWORD`
.. attribute:: FileId
:class:`LARGE_INTEGER`
.. attribute:: ParentFileId
:class:`LARGE_INTEGER`
.. attribute:: FileNameLength
:class:`DWORD`
.. attribute:: FileName
:class:`WCHAR`
_FILE_RENAME_INFORMATION
''''''''''''''''''''''''
.. class:: FILE_RENAME_INFORMATION
Alias for :class:`_FILE_RENAME_INFORMATION`
.. class:: PFILE_RENAME_INFORMATION
Pointer to :class:`_FILE_RENAME_INFORMATION`
.. class:: _FILE_RENAME_INFORMATION
.. attribute:: __ANON_DUMMYUNIONNAME_FILE_RENAME_INFORMATION
:class:`_ANON__FILE_RENAME_INFORMATION_SUB_UNION_1`
.. attribute:: RootDirectory
:class:`HANDLE`
.. attribute:: FileNameLength
:class:`ULONG`
.. attribute:: FileName
:class:`WCHAR`
_GUID
'''''
.. class:: REFCLSID
@@ -11133,6 +11280,386 @@ _DnsRecordW
:class:`_ANON__DNSRECORDW_SUB_UNION_2`
_DnsAddr
''''''''
.. class:: PDNS_ADDR
Pointer to :class:`_DnsAddr`
.. class:: DNS_ADDR
Alias for :class:`_DnsAddr`
.. class:: _DnsAddr
.. attribute:: MaxSa
:class:`CHAR` ``[DNS_ADDR_MAX_SOCKADDR_LENGTH]``
.. attribute:: DnsAddrUserDword
:class:`DWORD` ``[8]``
_DnsAddrArray
'''''''''''''
.. class:: PDNS_ADDR_ARRAY
Pointer to :class:`_DnsAddrArray`
.. class:: DNS_ADDR_ARRAY
Alias for :class:`_DnsAddrArray`
.. class:: _DnsAddrArray
.. attribute:: MaxCount
:class:`DWORD`
.. attribute:: AddrCount
:class:`DWORD`
.. attribute:: Tag
:class:`DWORD`
.. attribute:: Family
:class:`WORD`
.. attribute:: WordReserved
:class:`WORD`
.. attribute:: Flags
:class:`DWORD`
.. attribute:: MatchFlag
:class:`DWORD`
.. attribute:: Reserved1
:class:`DWORD`
.. attribute:: Reserved2
:class:`DWORD`
.. attribute:: AddrArray
:class:`DNS_ADDR` ``[ANY_SIZE]``
_DNS_QUERY_REQUEST
''''''''''''''''''
.. class:: PDNS_QUERY_REQUEST
Pointer to :class:`_DNS_QUERY_REQUEST`
.. class:: DNS_QUERY_REQUEST
Alias for :class:`_DNS_QUERY_REQUEST`
.. class:: _DNS_QUERY_REQUEST
.. attribute:: Version
:class:`ULONG`
.. attribute:: QueryName
:class:`PCWSTR`
.. attribute:: QueryType
:class:`WORD`
.. attribute:: QueryOptions
:class:`ULONG64`
.. attribute:: pDnsServerList
:class:`PDNS_ADDR_ARRAY`
.. attribute:: InterfaceIndex
:class:`ULONG`
.. attribute:: pQueryCompletionCallback
:class:`PDNS_QUERY_COMPLETION_ROUTINE`
.. attribute:: pQueryContext
:class:`PVOID`
_DNS_QUERY_CANCEL
'''''''''''''''''
.. class:: PDNS_QUERY_CANCEL
Pointer to :class:`_DNS_QUERY_CANCEL`
.. class:: DNS_QUERY_CANCEL
Alias for :class:`_DNS_QUERY_CANCEL`
.. class:: _DNS_QUERY_CANCEL
.. attribute:: Reserved
:class:`CHAR` ``[32]``
_DNS_QUERY_RESULT
'''''''''''''''''
.. class:: DNS_QUERY_RESULT
Alias for :class:`_DNS_QUERY_RESULT`
.. class:: PDNS_QUERY_RESULT
Pointer to :class:`_DNS_QUERY_RESULT`
.. class:: _DNS_QUERY_RESULT
.. attribute:: Version
:class:`ULONG`
.. attribute:: QueryStatus
:class:`DNS_STATUS`
.. attribute:: QueryOptions
:class:`ULONG64`
.. attribute:: pQueryRecords
:class:`PVOID`
.. attribute:: Reserved
:class:`PVOID`
IP_ADDRESS_STRING
'''''''''''''''''
.. class:: IP_MASK_STRING
Alias for :class:`IP_ADDRESS_STRING`
.. class:: PIP_MASK_STRING
Pointer to :class:`IP_ADDRESS_STRING`
.. class:: PIP_ADDRESS_STRING
Pointer to :class:`IP_ADDRESS_STRING`
.. class:: IP_ADDRESS_STRING
Alias for :class:`IP_ADDRESS_STRING`
.. class:: IP_ADDRESS_STRING
.. attribute:: String
:class:`CHAR` ``[4 * 4]``
_IP_ADDR_STRING
'''''''''''''''
.. class:: PIP_ADDR_STRING
Pointer to :class:`_IP_ADDR_STRING`
.. class:: IP_ADDR_STRING
Alias for :class:`_IP_ADDR_STRING`
.. class:: _IP_ADDR_STRING
.. attribute:: Next
:class:`_IP_ADDR_STRING`
.. attribute:: IpAddress
:class:`IP_ADDRESS_STRING`
.. attribute:: IpMask
:class:`IP_MASK_STRING`
.. attribute:: Context
:class:`DWORD`
_IP_ADAPTER_INFO
''''''''''''''''
.. class:: IP_ADAPTER_INFO
Alias for :class:`_IP_ADAPTER_INFO`
.. class:: PIP_ADAPTER_INFO
Pointer to :class:`_IP_ADAPTER_INFO`
.. class:: _IP_ADAPTER_INFO
.. attribute:: Next
:class:`_IP_ADAPTER_INFO`
.. attribute:: ComboIndex
:class:`DWORD`
.. attribute:: AdapterName
:class:`CHAR` ``[MAX_ADAPTER_NAME_LENGTH + 4]``
.. attribute:: Description
:class:`CHAR` ``[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]``
.. attribute:: AddressLength
:class:`UINT`
.. attribute:: Address
:class:`BYTE` ``[MAX_ADAPTER_ADDRESS_LENGTH]``
.. attribute:: Index
:class:`DWORD`
.. attribute:: Type
:class:`UINT`
.. attribute:: DhcpEnabled
:class:`UINT`
.. attribute:: CurrentIpAddress
:class:`PIP_ADDR_STRING`
.. attribute:: IpAddressList
:class:`IP_ADDR_STRING`
.. attribute:: GatewayList
:class:`IP_ADDR_STRING`
.. attribute:: DhcpServer
:class:`IP_ADDR_STRING`
.. attribute:: HaveWins
:class:`BOOL`
.. attribute:: PrimaryWinsServer
:class:`IP_ADDR_STRING`
.. attribute:: SecondaryWinsServer
:class:`IP_ADDR_STRING`
.. attribute:: LeaseObtained
:class:`ULONGLONG`
.. attribute:: LeaseExpires
:class:`ULONGLONG`
_IP_PER_ADAPTER_INFO_W2KSP1
'''''''''''''''''''''''''''
.. class:: PIP_PER_ADAPTER_INFO
Pointer to :class:`_IP_PER_ADAPTER_INFO_W2KSP1`
.. class:: IP_PER_ADAPTER_INFO
Alias for :class:`_IP_PER_ADAPTER_INFO_W2KSP1`
.. class:: PIP_PER_ADAPTER_INFO_W2KSP1
Pointer to :class:`_IP_PER_ADAPTER_INFO_W2KSP1`
.. class:: IP_PER_ADAPTER_INFO_W2KSP1
Alias for :class:`_IP_PER_ADAPTER_INFO_W2KSP1`
.. class:: _IP_PER_ADAPTER_INFO_W2KSP1
.. attribute:: AutoconfigEnabled
:class:`UINT`
.. attribute:: AutoconfigActive
:class:`UINT`
.. attribute:: CurrentDnsServer
:class:`PIP_ADDR_STRING`
.. attribute:: DnsServerList
:class:`IP_ADDR_STRING`
_KEY_VALUE_BASIC_INFORMATION
''''''''''''''''''''''''''''
.. class:: PKEY_VALUE_BASIC_INFORMATION
@@ -16876,6 +17403,10 @@ _SYSTEM_PROCESS_ID_INFORMATION
_CLIENT_ID
''''''''''
.. class:: PCLIENT_ID
Pointer to :class:`_CLIENT_ID`
.. class:: CLIENT_ID
Alias for :class:`_CLIENT_ID`
@@ -16893,6 +17424,10 @@ _CLIENT_ID
_CLIENT_ID64
''''''''''''
.. class:: PCLIENT_ID64
Pointer to :class:`_CLIENT_ID64`
.. class:: CLIENT_ID64
Alias for :class:`_CLIENT_ID64`
@@ -16914,6 +17449,10 @@ _CLIENT_ID32
Alias for :class:`_CLIENT_ID32`
.. class:: PCLIENT_ID32
Pointer to :class:`_CLIENT_ID32`
.. class:: _CLIENT_ID32
.. attribute:: UniqueProcess
@@ -23507,6 +24046,10 @@ Simple types
.. autoclass:: LPSERVICE_MAIN_FUNCTIONW
.. autoclass:: LPOVERLAPPED_COMPLETION_ROUTINE
.. autoclass:: PDNS_QUERY_COMPLETION_ROUTINE
.. autoclass:: LPCONTEXT
.. autoclass:: HCERTSTORE
@@ -25117,6 +25660,26 @@ _IO_PRIORITY_HINT
.. attribute:: MaxIoPriorityTypes(5)
_READ_DIRECTORY_NOTIFY_INFORMATION_CLASS
''''''''''''''''''''''''''''''''''''''''
.. class:: PREAD_DIRECTORY_NOTIFY_INFORMATION_CLASS
Pointer to :class:`_READ_DIRECTORY_NOTIFY_INFORMATION_CLASS`
.. class:: READ_DIRECTORY_NOTIFY_INFORMATION_CLASS
Alias for :class:`_READ_DIRECTORY_NOTIFY_INFORMATION_CLASS`
.. class:: _READ_DIRECTORY_NOTIFY_INFORMATION_CLASS
.. attribute:: ReadDirectoryNotifyInformation(0)
.. attribute:: ReadDirectoryNotifyExtendedInformation(1)
_POLICY_INFORMATION_CLASS
'''''''''''''''''''''''''
.. class:: POLICY_INFORMATION_CLASS
@@ -26407,6 +26970,42 @@ ADDRESS_MODE
.. attribute:: AddrModeFlat(3)
_COMPUTER_NAME_FORMAT
'''''''''''''''''''''
.. class:: COMPUTER_NAME_FORMAT
Alias for :class:`_COMPUTER_NAME_FORMAT`
.. class:: _COMPUTER_NAME_FORMAT
.. attribute:: ComputerNameNetBIOS(0)
.. attribute:: ComputerNameDnsHostname(1)
.. attribute:: ComputerNameDnsDomain(2)
.. attribute:: ComputerNameDnsFullyQualified(3)
.. attribute:: ComputerNamePhysicalNetBIOS(4)
.. attribute:: ComputerNamePhysicalDnsHostname(5)
.. attribute:: ComputerNamePhysicalDnsDomain(6)
.. attribute:: ComputerNamePhysicalDnsFullyQualified(7)
.. attribute:: ComputerNameMax(8)
_TASK_ACTION_TYPE
'''''''''''''''''
.. class:: TASK_ACTION_TYPE
+16
View File
@@ -276,6 +276,9 @@ class IWbemLocator(COMInterface):
class IWbemObjectSink(COMInterface):
IID = generate_IID(0x7C857801, 0x7381, 0x11CF, 0x88, 0x4D, 0x00, 0xAA, 0x00, 0x4B, 0x2E, 0x24, name="IWbemObjectSink", strid="7C857801-7381-11CF-884D-00AA004B2E24")
class IWbemObjectTextSrc(COMInterface):
IID = generate_IID(0xBFBF883A, 0xCAD7, 0x11D3, 0xA1, 0x1B, 0x00, 0x10, 0x5A, 0x1F, 0x51, 0x5A, name="IWbemObjectTextSrc", strid="BFBF883A-CAD7-11D3-A11B-00105A1F515A")
class IWbemQualifierSet(COMInterface):
IID = generate_IID(0xDC12A680, 0x737F, 0x11CF, 0x88, 0x4D, 0x00, 0xAA, 0x00, 0x4B, 0x2E, 0x24, name="IWbemQualifierSet", strid="DC12A680-737F-11CF-884D-00AA004B2E24")
@@ -2661,6 +2664,19 @@ IWbemObjectSink._functions_ = {
"SetStatus": ctypes.WINFUNCTYPE(HRESULT, LONG, HRESULT, BSTR, IWbemClassObject)(4, "SetStatus"),
}
IWbemObjectTextSrc._functions_ = {
# QueryInterface -> riid:REFIID, ppvObject:**void
"QueryInterface": ctypes.WINFUNCTYPE(HRESULT, REFIID, POINTER(PVOID))(0, "QueryInterface"),
# AddRef ->
"AddRef": ctypes.WINFUNCTYPE(ULONG)(1, "AddRef"),
# Release ->
"Release": ctypes.WINFUNCTYPE(ULONG)(2, "Release"),
# GetText -> lFlags:LONG, pObj:*IWbemClassObject, uObjTextFormat:ULONG, pCtx:*IWbemContext, strText:*BSTR
"GetText": ctypes.WINFUNCTYPE(HRESULT, LONG, IWbemClassObject, ULONG, IWbemContext, POINTER(BSTR))(3, "GetText"),
# CreateFromText -> lFlags:LONG, strText:BSTR, uObjTextFormat:ULONG, pCtx:*IWbemContext, pNewObj:**IWbemClassObject
"CreateFromText": ctypes.WINFUNCTYPE(HRESULT, LONG, BSTR, ULONG, IWbemContext, POINTER(IWbemClassObject))(4, "CreateFromText"),
}
IWbemQualifierSet._functions_ = {
# QueryInterface -> riid:REFIID, ppvObject:**void
"QueryInterface": ctypes.WINFUNCTYPE(HRESULT, REFIID, POINTER(PVOID))(0, "QueryInterface"),
+46
View File
@@ -826,6 +826,7 @@ windef = set(['ABOVE_NORMAL_PRIORITY_CLASS',
'DEBUG_EVENT_UNLOAD_MODULE',
'DEBUG_ONLY_THIS_PROCESS',
'DEBUG_PROCESS',
'DEFAULT_MINIMUM_ENTITIES',
'DELETE',
'DETACHED_PROCESS',
'DIRECTORY_ALL_ACCESS',
@@ -1590,13 +1591,20 @@ windef = set(['ABOVE_NORMAL_PRIORITY_CLASS',
'MAXIMUM_ALLOWED',
'MAXLEN_IFDESCR',
'MAXLEN_PHYSADDR',
'MAX_ADAPTER_ADDRESS_LENGTH',
'MAX_ADAPTER_DESCRIPTION_LENGTH',
'MAX_ADAPTER_NAME',
'MAX_ADAPTER_NAME_LENGTH',
'MAX_CLASS_NAME_LEN',
'MAX_CONFIG_VALUE',
'MAX_DEVICE_ID_LEN',
'MAX_DEVNODE_ID_LEN',
'MAX_DHCPV6_DUID_LENGTH',
'MAX_DMA_CHANNELS',
'MAX_DNS_SUFFIX_STRING_LENGTH',
'MAX_DOMAIN_NAME_LEN',
'MAX_GUID_STRING_LEN',
'MAX_HOSTNAME_LEN',
'MAX_INSTANCE_VALUE',
'MAX_INTERFACE_NAME_LEN',
'MAX_IO_PORTS',
@@ -1604,6 +1612,7 @@ windef = set(['ABOVE_NORMAL_PRIORITY_CLASS',
'MAX_MEM_REGISTERS',
'MAX_PATH',
'MAX_PROFILE_LEN',
'MAX_SCOPE_ID_LEN',
'MEM_4MB_PAGES',
'MEM_COMMIT',
'MEM_DECOMMIT',
@@ -11749,6 +11758,7 @@ structs = set(['ACCESS_ALLOWED_ACE',
'FILE_NOTIFY_EXTENDED_INFORMATION',
'FILE_NOTIFY_INFORMATION',
'FILE_POSITION_INFORMATION',
'FILE_RENAME_INFORMATION',
'FILE_STANDARD_INFORMATION',
'FILE_STREAM_INFORMATION',
'FLOATING_SAVE_AREA',
@@ -11794,7 +11804,13 @@ structs = set(['ACCESS_ALLOWED_ACE',
'IO_STATUS_BLOCK',
'IP6_ADDRESS',
'IP_ADAPTER_INDEX_MAP',
'IP_ADAPTER_INFO',
'IP_ADDRESS_STRING',
'IP_ADDR_STRING',
'IP_INTERFACE_INFO',
'IP_MASK_STRING',
'IP_PER_ADAPTER_INFO',
'IP_PER_ADAPTER_INFO_W2KSP1',
'IRQ_DES_32',
'IRQ_DES_64',
'IRQ_Des_32_s',
@@ -11865,6 +11881,7 @@ structs = set(['ACCESS_ALLOWED_ACE',
'LPQUERY_SERVICE_CONFIGW',
'LPRGBTRIPLE',
'LPRIP_INFO',
'LPSAFEARRAY',
'LPSAFEARRAYBOUND',
'LPSECURITY_ATTRIBUTES',
'LPSERVICE_STATUS',
@@ -12237,6 +12254,7 @@ structs = set(['ACCESS_ALLOWED_ACE',
'PFILE_NOTIFY_EXTENDED_INFORMATION',
'PFILE_NOTIFY_INFORMATION',
'PFILE_POSITION_INFORMATION',
'PFILE_RENAME_INFORMATION',
'PFILE_STANDARD_INFORMATION',
'PFILE_STREAM_INFORMATION',
'PGENERIC_MAPPING',
@@ -12273,7 +12291,13 @@ structs = set(['ACCESS_ALLOWED_ACE',
'PIO_STATUS_BLOCK',
'PIP6_ADDRESS',
'PIP_ADAPTER_INDEX_MAP',
'PIP_ADAPTER_INFO',
'PIP_ADDRESS_STRING',
'PIP_ADDR_STRING',
'PIP_INTERFACE_INFO',
'PIP_MASK_STRING',
'PIP_PER_ADAPTER_INFO',
'PIP_PER_ADAPTER_INFO_W2KSP1',
'PIRQ_DES_32',
'PIRQ_DES_64',
'PIRQ_RANGE',
@@ -12923,6 +12947,7 @@ structs = set(['ACCESS_ALLOWED_ACE',
'_FILE_NOTIFY_EXTENDED_INFORMATION',
'_FILE_NOTIFY_INFORMATION',
'_FILE_POSITION_INFORMATION',
'_FILE_RENAME_INFORMATION',
'_FILE_STANDARD_INFORMATION',
'_FILE_STREAM_INFORMATION',
'_FLOATING_SAVE_AREA',
@@ -12958,7 +12983,10 @@ structs = set(['ACCESS_ALLOWED_ACE',
'_INTERNET_BUFFERSW',
'_IO_STATUS_BLOCK',
'_IP_ADAPTER_INDEX_MAP',
'_IP_ADAPTER_INFO',
'_IP_ADDR_STRING',
'_IP_INTERFACE_INFO',
'_IP_PER_ADAPTER_INFO_W2KSP1',
'_ITEMIDLIST',
'_JIT_DEBUG_INFO',
'_KDHELP',
@@ -13729,6 +13757,7 @@ functions = set(['AccessCheck',
'FreeSid',
'GetAce',
'GetAclInformation',
'GetAdaptersInfo',
'GetClassInfoExA',
'GetClassInfoExW',
'GetClassNameA',
@@ -13789,6 +13818,7 @@ functions = set(['AccessCheck',
'GetNamedSecurityInfoW',
'GetNumberOfEventLogRecords',
'GetParent',
'GetPerAdapterInfo',
'GetPriorityClass',
'GetProcAddress',
'GetProcessDEPPolicy',
@@ -14085,6 +14115,19 @@ functions = set(['AccessCheck',
'SHFileOperationA',
'SHGetPathFromIDListA',
'SHGetPathFromIDListW',
'SafeArrayCopy',
'SafeArrayCopyData',
'SafeArrayCreate',
'SafeArrayCreateVector',
'SafeArrayDestroy',
'SafeArrayDestroyData',
'SafeArrayGetDim',
'SafeArrayGetElement',
'SafeArrayGetElemsize',
'SafeArrayGetLBound',
'SafeArrayGetUBound',
'SafeArrayGetVartype',
'SafeArrayPutElement',
'SetAclInformation',
'SetClipboardData',
'SetConsoleCtrlHandler',
@@ -14188,6 +14231,8 @@ functions = set(['AccessCheck',
'SymUnDName64',
'SymUnloadModule',
'SymUnloadModule64',
'SysAllocString',
'SysFreeString',
'SystemTimeToFileTime',
'TdhEnumerateProviders',
'TerminateProcess',
@@ -14308,6 +14353,7 @@ interfaces = set(['IAction',
'IWbemContext',
'IWbemLocator',
'IWbemObjectSink',
'IWbemObjectTextSrc',
'IWbemQualifierSet',
'IWbemServices',
'IWebBrowser2'])
+9
View File
@@ -740,6 +740,15 @@ DNS_QUERY_APPEND_MULTILABEL = make_flag("DNS_QUERY_APPEND_MULTILABEL", 0x0080000
DNS_QUERY_DNSSEC_OK = make_flag("DNS_QUERY_DNSSEC_OK", 0x01000000)
DNS_QUERY_DNSSEC_CHECKING_DISABLED = make_flag("DNS_QUERY_DNSSEC_CHECKING_DISABLED", 0x02000000)
DNS_QUERY_RESERVED = make_flag("DNS_QUERY_RESERVED", 0xf0000000)
MAX_ADAPTER_DESCRIPTION_LENGTH = make_flag("MAX_ADAPTER_DESCRIPTION_LENGTH", 128)
MAX_ADAPTER_NAME_LENGTH = make_flag("MAX_ADAPTER_NAME_LENGTH", 256)
MAX_ADAPTER_ADDRESS_LENGTH = make_flag("MAX_ADAPTER_ADDRESS_LENGTH", 8)
DEFAULT_MINIMUM_ENTITIES = make_flag("DEFAULT_MINIMUM_ENTITIES", 32)
MAX_HOSTNAME_LEN = make_flag("MAX_HOSTNAME_LEN", 128)
MAX_DOMAIN_NAME_LEN = make_flag("MAX_DOMAIN_NAME_LEN", 128)
MAX_SCOPE_ID_LEN = make_flag("MAX_SCOPE_ID_LEN", 256)
MAX_DHCPV6_DUID_LENGTH = make_flag("MAX_DHCPV6_DUID_LENGTH", 130)
MAX_DNS_SUFFIX_STRING_LENGTH = make_flag("MAX_DNS_SUFFIX_STRING_LENGTH", 256)
PIPE_ACCESS_INBOUND = make_flag("PIPE_ACCESS_INBOUND", 0x00000001)
PIPE_ACCESS_OUTBOUND = make_flag("PIPE_ACCESS_OUTBOUND", 0x00000002)
PIPE_ACCESS_DUPLEX = make_flag("PIPE_ACCESS_DUPLEX", 0x00000003)
+120 -30
View File
@@ -330,6 +330,86 @@ CLSIDFromProgIDParams = ((1, 'lpszProgID'), (1, 'lpclsid'))
CoTaskMemFreePrototype = WINFUNCTYPE(PVOID, LPVOID)
CoTaskMemFreeParams = ((1, 'pv'),)
#def SafeArrayCreate(vt, cDims, rgsabound):
# return SafeArrayCreate.ctypes_function(vt, cDims, rgsabound)
SafeArrayCreatePrototype = WINFUNCTYPE(LPSAFEARRAY, VARTYPE, UINT, POINTER(SAFEARRAYBOUND))
SafeArrayCreateParams = ((1, 'vt'), (1, 'cDims'), (1, 'rgsabound'))
#def SafeArrayCreateVector(vt, lLbound, cElements):
# return SafeArrayCreateVector.ctypes_function(vt, lLbound, cElements)
SafeArrayCreateVectorPrototype = WINFUNCTYPE(LPSAFEARRAY, VARTYPE, LONG, ULONG)
SafeArrayCreateVectorParams = ((1, 'vt'), (1, 'lLbound'), (1, 'cElements'))
#def SafeArrayDestroy(psa):
# return SafeArrayDestroy.ctypes_function(psa)
SafeArrayDestroyPrototype = WINFUNCTYPE(HRESULT, POINTER(SAFEARRAY))
SafeArrayDestroyParams = ((1, 'psa'),)
#def SafeArrayDestroyData(psa):
# return SafeArrayDestroyData.ctypes_function(psa)
SafeArrayDestroyDataPrototype = WINFUNCTYPE(HRESULT, POINTER(SAFEARRAY))
SafeArrayDestroyDataParams = ((1, 'psa'),)
#def SafeArrayGetElement(psa, rgIndices, pv):
# return SafeArrayGetElement.ctypes_function(psa, rgIndices, pv)
SafeArrayGetElementPrototype = WINFUNCTYPE(HRESULT, POINTER(SAFEARRAY), POINTER(LONG), PVOID)
SafeArrayGetElementParams = ((1, 'psa'), (1, 'rgIndices'), (1, 'pv'))
#def SafeArrayGetElemsize(psa):
# return SafeArrayGetElemsize.ctypes_function(psa)
SafeArrayGetElemsizePrototype = WINFUNCTYPE(UINT, POINTER(SAFEARRAY))
SafeArrayGetElemsizeParams = ((1, 'psa'),)
#def SafeArrayGetLBound(psa, nDim, plLbound):
# return SafeArrayGetLBound.ctypes_function(psa, nDim, plLbound)
SafeArrayGetLBoundPrototype = WINFUNCTYPE(HRESULT, POINTER(SAFEARRAY), UINT, POINTER(LONG))
SafeArrayGetLBoundParams = ((1, 'psa'), (1, 'nDim'), (1, 'plLbound'))
#def SafeArrayGetUBound(psa, nDim, plUbound):
# return SafeArrayGetUBound.ctypes_function(psa, nDim, plUbound)
SafeArrayGetUBoundPrototype = WINFUNCTYPE(HRESULT, POINTER(SAFEARRAY), UINT, POINTER(LONG))
SafeArrayGetUBoundParams = ((1, 'psa'), (1, 'nDim'), (1, 'plUbound'))
#def SafeArrayGetDim(psa):
# return SafeArrayGetDim.ctypes_function(psa)
SafeArrayGetDimPrototype = WINFUNCTYPE(UINT, POINTER(SAFEARRAY))
SafeArrayGetDimParams = ((1, 'psa'),)
#def SafeArrayPutElement(psa, rgIndices, pv):
# return SafeArrayPutElement.ctypes_function(psa, rgIndices, pv)
SafeArrayPutElementPrototype = WINFUNCTYPE(HRESULT, POINTER(SAFEARRAY), POINTER(LONG), PVOID)
SafeArrayPutElementParams = ((1, 'psa'), (1, 'rgIndices'), (1, 'pv'))
#def SafeArrayGetVartype(psa, pvt):
# return SafeArrayGetVartype.ctypes_function(psa, pvt)
SafeArrayGetVartypePrototype = WINFUNCTYPE(HRESULT, POINTER(SAFEARRAY), POINTER(VARTYPE))
SafeArrayGetVartypeParams = ((1, 'psa'), (1, 'pvt'))
#def SysFreeString(bstrString):
# return SysFreeString.ctypes_function(bstrString)
SysFreeStringPrototype = WINFUNCTYPE(VOID, BSTR)
SysFreeStringParams = ((1, 'bstrString'),)
#def SafeArrayCopy(psa, ppsaOut):
# return SafeArrayCopy.ctypes_function(psa, ppsaOut)
SafeArrayCopyPrototype = WINFUNCTYPE(HRESULT, POINTER(SAFEARRAY), POINTER(LPSAFEARRAY))
SafeArrayCopyParams = ((1, 'psa'), (1, 'ppsaOut'))
#def SafeArrayCopyData(psaSource, psaTarget):
# return SafeArrayCopyData.ctypes_function(psaSource, psaTarget)
SafeArrayCopyDataPrototype = WINFUNCTYPE(HRESULT, POINTER(SAFEARRAY), POINTER(SAFEARRAY))
SafeArrayCopyDataParams = ((1, 'psaSource'), (1, 'psaTarget'))
#def SysAllocString(psz):
# return SysAllocString.ctypes_function(psz)
SysAllocStringPrototype = WINFUNCTYPE(PVOID, POINTER(OLECHAR))
SysAllocStringParams = ((1, 'psz'),)
#def SysFreeString(bstrString):
# return SysFreeString.ctypes_function(bstrString)
SysFreeStringPrototype = WINFUNCTYPE(VOID, BSTR)
SysFreeStringParams = ((1, 'bstrString'),)
#def CryptCATAdminCalcHashFromFileHandle(hFile, pcbHash, pbHash, dwFlags):
# return CryptCATAdminCalcHashFromFileHandle.ctypes_function(hFile, pcbHash, pbHash, dwFlags)
CryptCATAdminCalcHashFromFileHandlePrototype = WINFUNCTYPE(BOOL, HANDLE, POINTER(DWORD), POINTER(BYTE), DWORD)
@@ -1345,6 +1425,16 @@ DnsQuery_WParams = ((1, 'pszName'), (1, 'wType'), (1, 'Options'), (1, 'pExtra'),
DnsQueryExPrototype = WINFUNCTYPE(DNS_STATUS, PDNS_QUERY_REQUEST, PDNS_QUERY_RESULT, PDNS_QUERY_CANCEL)
DnsQueryExParams = ((1, 'pQueryRequest'), (1, 'pQueryResults'), (1, 'pCancelHandle'))
#def GetAdaptersInfo(AdapterInfo, SizePointer):
# return GetAdaptersInfo.ctypes_function(AdapterInfo, SizePointer)
GetAdaptersInfoPrototype = WINFUNCTYPE(ULONG, PIP_ADAPTER_INFO, PULONG)
GetAdaptersInfoParams = ((1, 'AdapterInfo'), (1, 'SizePointer'))
#def GetPerAdapterInfo(IfIndex, pPerAdapterInfo, pOutBufLen):
# return GetPerAdapterInfo.ctypes_function(IfIndex, pPerAdapterInfo, pOutBufLen)
GetPerAdapterInfoPrototype = WINFUNCTYPE(DWORD, ULONG, PIP_PER_ADAPTER_INFO, PULONG)
GetPerAdapterInfoParams = ((1, 'IfIndex'), (1, 'pPerAdapterInfo'), (1, 'pOutBufLen'))
#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)
CreateFileTransactedAPrototype = WINFUNCTYPE(HANDLE, LPCSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE, HANDLE, PUSHORT, PVOID)
@@ -2710,6 +2800,36 @@ GetComputerNameExAParams = ((1, 'NameType'), (1, 'lpBuffer'), (1, 'nSize'))
GetComputerNameExWPrototype = WINFUNCTYPE(BOOL, COMPUTER_NAME_FORMAT, LPWSTR, LPDWORD)
GetComputerNameExWParams = ((1, 'NameType'), (1, 'lpBuffer'), (1, 'nSize'))
#def GetComputerNameA(lpBuffer, lpnSize):
# return GetComputerNameA.ctypes_function(lpBuffer, lpnSize)
GetComputerNameAPrototype = WINFUNCTYPE(BOOL, LPCSTR, LPDWORD)
GetComputerNameAParams = ((1, 'lpBuffer'), (1, 'lpnSize'))
#def GetComputerNameW(lpBuffer, lpnSize):
# return GetComputerNameW.ctypes_function(lpBuffer, lpnSize)
GetComputerNameWPrototype = WINFUNCTYPE(BOOL, LPWSTR, LPDWORD)
GetComputerNameWParams = ((1, 'lpBuffer'), (1, 'lpnSize'))
#def LookupAccountSidA(lpSystemName, lpSid, lpName, cchName, lpReferencedDomainName, cchReferencedDomainName, peUse):
# return LookupAccountSidA.ctypes_function(lpSystemName, lpSid, lpName, cchName, lpReferencedDomainName, cchReferencedDomainName, peUse)
LookupAccountSidAPrototype = WINFUNCTYPE(BOOL, LPCSTR, PSID, LPCSTR, LPDWORD, LPCSTR, LPDWORD, PSID_NAME_USE)
LookupAccountSidAParams = ((1, 'lpSystemName'), (1, 'lpSid'), (1, 'lpName'), (1, 'cchName'), (1, 'lpReferencedDomainName'), (1, 'cchReferencedDomainName'), (1, 'peUse'))
#def LookupAccountSidW(lpSystemName, lpSid, lpName, cchName, lpReferencedDomainName, cchReferencedDomainName, peUse):
# return LookupAccountSidW.ctypes_function(lpSystemName, lpSid, lpName, cchName, lpReferencedDomainName, cchReferencedDomainName, peUse)
LookupAccountSidWPrototype = WINFUNCTYPE(BOOL, LPWSTR, PSID, LPWSTR, LPDWORD, LPWSTR, LPDWORD, PSID_NAME_USE)
LookupAccountSidWParams = ((1, 'lpSystemName'), (1, 'lpSid'), (1, 'lpName'), (1, 'cchName'), (1, 'lpReferencedDomainName'), (1, 'cchReferencedDomainName'), (1, 'peUse'))
#def LookupAccountNameA(lpSystemName, lpAccountName, Sid, cbSid, ReferencedDomainName, cchReferencedDomainName, peUse):
# return LookupAccountNameA.ctypes_function(lpSystemName, lpAccountName, Sid, cbSid, ReferencedDomainName, cchReferencedDomainName, peUse)
LookupAccountNameAPrototype = WINFUNCTYPE(BOOL, LPCSTR, LPCSTR, PSID, LPDWORD, LPSTR, LPDWORD, PSID_NAME_USE)
LookupAccountNameAParams = ((1, 'lpSystemName'), (1, 'lpAccountName'), (1, 'Sid'), (1, 'cbSid'), (1, 'ReferencedDomainName'), (1, 'cchReferencedDomainName'), (1, 'peUse'))
#def LookupAccountNameW(lpSystemName, lpAccountName, Sid, cbSid, ReferencedDomainName, cchReferencedDomainName, peUse):
# return LookupAccountNameW.ctypes_function(lpSystemName, lpAccountName, Sid, cbSid, ReferencedDomainName, cchReferencedDomainName, peUse)
LookupAccountNameWPrototype = WINFUNCTYPE(BOOL, LPCWSTR, LPCWSTR, PSID, LPDWORD, LPWSTR, LPDWORD, PSID_NAME_USE)
LookupAccountNameWParams = ((1, 'lpSystemName'), (1, 'lpAccountName'), (1, 'Sid'), (1, 'cbSid'), (1, 'ReferencedDomainName'), (1, 'cchReferencedDomainName'), (1, 'peUse'))
#def FileTimeToSystemTime(lpFileTime, lpSystemTime):
# return FileTimeToSystemTime.ctypes_function(lpFileTime, lpSystemTime)
FileTimeToSystemTimePrototype = WINFUNCTYPE(BOOL, POINTER(FILETIME), LPSYSTEMTIME)
@@ -3695,36 +3815,6 @@ GetProcessImageFileNameWParams = ((1, 'hProcess'), (1, 'lpImageFileName'), (1, '
GetSystemMetricsPrototype = WINFUNCTYPE(INT, INT)
GetSystemMetricsParams = ((1, 'nIndex'),)
#def GetComputerNameA(lpBuffer, lpnSize):
# return GetComputerNameA.ctypes_function(lpBuffer, lpnSize)
GetComputerNameAPrototype = WINFUNCTYPE(BOOL, LPCSTR, LPDWORD)
GetComputerNameAParams = ((1, 'lpBuffer'), (1, 'lpnSize'))
#def GetComputerNameW(lpBuffer, lpnSize):
# return GetComputerNameW.ctypes_function(lpBuffer, lpnSize)
GetComputerNameWPrototype = WINFUNCTYPE(BOOL, LPWSTR, LPDWORD)
GetComputerNameWParams = ((1, 'lpBuffer'), (1, 'lpnSize'))
#def LookupAccountSidA(lpSystemName, lpSid, lpName, cchName, lpReferencedDomainName, cchReferencedDomainName, peUse):
# return LookupAccountSidA.ctypes_function(lpSystemName, lpSid, lpName, cchName, lpReferencedDomainName, cchReferencedDomainName, peUse)
LookupAccountSidAPrototype = WINFUNCTYPE(BOOL, LPCSTR, PSID, LPCSTR, LPDWORD, LPCSTR, LPDWORD, PSID_NAME_USE)
LookupAccountSidAParams = ((1, 'lpSystemName'), (1, 'lpSid'), (1, 'lpName'), (1, 'cchName'), (1, 'lpReferencedDomainName'), (1, 'cchReferencedDomainName'), (1, 'peUse'))
#def LookupAccountSidW(lpSystemName, lpSid, lpName, cchName, lpReferencedDomainName, cchReferencedDomainName, peUse):
# return LookupAccountSidW.ctypes_function(lpSystemName, lpSid, lpName, cchName, lpReferencedDomainName, cchReferencedDomainName, peUse)
LookupAccountSidWPrototype = WINFUNCTYPE(BOOL, LPWSTR, PSID, LPWSTR, LPDWORD, LPWSTR, LPDWORD, PSID_NAME_USE)
LookupAccountSidWParams = ((1, 'lpSystemName'), (1, 'lpSid'), (1, 'lpName'), (1, 'cchName'), (1, 'lpReferencedDomainName'), (1, 'cchReferencedDomainName'), (1, 'peUse'))
#def LookupAccountNameA(lpSystemName, lpAccountName, Sid, cbSid, ReferencedDomainName, cchReferencedDomainName, peUse):
# return LookupAccountNameA.ctypes_function(lpSystemName, lpAccountName, Sid, cbSid, ReferencedDomainName, cchReferencedDomainName, peUse)
LookupAccountNameAPrototype = WINFUNCTYPE(BOOL, LPCSTR, LPCSTR, PSID, LPDWORD, LPSTR, LPDWORD, PSID_NAME_USE)
LookupAccountNameAParams = ((1, 'lpSystemName'), (1, 'lpAccountName'), (1, 'Sid'), (1, 'cbSid'), (1, 'ReferencedDomainName'), (1, 'cchReferencedDomainName'), (1, 'peUse'))
#def LookupAccountNameW(lpSystemName, lpAccountName, Sid, cbSid, ReferencedDomainName, cchReferencedDomainName, peUse):
# return LookupAccountNameW.ctypes_function(lpSystemName, lpAccountName, Sid, cbSid, ReferencedDomainName, cchReferencedDomainName, peUse)
LookupAccountNameWPrototype = WINFUNCTYPE(BOOL, LPCWSTR, LPCWSTR, PSID, LPDWORD, LPWSTR, LPDWORD, PSID_NAME_USE)
LookupAccountNameWParams = ((1, 'lpSystemName'), (1, 'lpAccountName'), (1, 'Sid'), (1, 'cbSid'), (1, 'ReferencedDomainName'), (1, 'cchReferencedDomainName'), (1, 'peUse'))
#def GetInterfaceInfo(pIfTable, dwOutBufLen):
# return GetInterfaceInfo.ctypes_function(pIfTable, dwOutBufLen)
GetInterfaceInfoPrototype = WINFUNCTYPE(DWORD, PIP_INTERFACE_INFO, PULONG)
+88
View File
@@ -960,6 +960,7 @@ class tagSAFEARRAY(Structure):
("rgsabound", SAFEARRAYBOUND * (1)),
]
SAFEARRAY = tagSAFEARRAY
LPSAFEARRAY = POINTER(tagSAFEARRAY)
class __tagBRECORD(Structure):
_fields_ = [
@@ -2393,6 +2394,62 @@ class _DNS_QUERY_RESULT(Structure):
DNS_QUERY_RESULT = _DNS_QUERY_RESULT
PDNS_QUERY_RESULT = POINTER(_DNS_QUERY_RESULT)
class IP_ADDRESS_STRING(Structure):
_fields_ = [
("String", CHAR * (4 * 4)),
]
IP_MASK_STRING = IP_ADDRESS_STRING
PIP_MASK_STRING = POINTER(IP_ADDRESS_STRING)
PIP_ADDRESS_STRING = POINTER(IP_ADDRESS_STRING)
# Self referencing struct tricks
class _IP_ADDR_STRING(Structure): pass
PIP_ADDR_STRING = POINTER(_IP_ADDR_STRING)
IP_ADDR_STRING = _IP_ADDR_STRING
_IP_ADDR_STRING._fields_ = [
("Next", POINTER(_IP_ADDR_STRING)),
("IpAddress", IP_ADDRESS_STRING),
("IpMask", IP_MASK_STRING),
("Context", DWORD),
]
# Self referencing struct tricks
class _IP_ADAPTER_INFO(Structure): pass
IP_ADAPTER_INFO = _IP_ADAPTER_INFO
PIP_ADAPTER_INFO = POINTER(_IP_ADAPTER_INFO)
_IP_ADAPTER_INFO._fields_ = [
("Next", POINTER(_IP_ADAPTER_INFO)),
("ComboIndex", DWORD),
("AdapterName", CHAR * (MAX_ADAPTER_NAME_LENGTH + 4)),
("Description", CHAR * (MAX_ADAPTER_DESCRIPTION_LENGTH + 4)),
("AddressLength", UINT),
("Address", BYTE * (MAX_ADAPTER_ADDRESS_LENGTH)),
("Index", DWORD),
("Type", UINT),
("DhcpEnabled", UINT),
("CurrentIpAddress", PIP_ADDR_STRING),
("IpAddressList", IP_ADDR_STRING),
("GatewayList", IP_ADDR_STRING),
("DhcpServer", IP_ADDR_STRING),
("HaveWins", BOOL),
("PrimaryWinsServer", IP_ADDR_STRING),
("SecondaryWinsServer", IP_ADDR_STRING),
("LeaseObtained", ULONGLONG),
("LeaseExpires", ULONGLONG),
]
class _IP_PER_ADAPTER_INFO_W2KSP1(Structure):
_fields_ = [
("AutoconfigEnabled", UINT),
("AutoconfigActive", UINT),
("CurrentDnsServer", PIP_ADDR_STRING),
("DnsServerList", IP_ADDR_STRING),
]
PIP_PER_ADAPTER_INFO = POINTER(_IP_PER_ADAPTER_INFO_W2KSP1)
IP_PER_ADAPTER_INFO = _IP_PER_ADAPTER_INFO_W2KSP1
PIP_PER_ADAPTER_INFO_W2KSP1 = POINTER(_IP_PER_ADAPTER_INFO_W2KSP1)
IP_PER_ADAPTER_INFO_W2KSP1 = _IP_PER_ADAPTER_INFO_W2KSP1
KeyValueBasicInformation = EnumValue("_KEY_VALUE_INFORMATION_CLASS", "KeyValueBasicInformation", 0x0)
KeyValueFullInformation = EnumValue("_KEY_VALUE_INFORMATION_CLASS", "KeyValueFullInformation", 0x1)
KeyValuePartialInformation = EnumValue("_KEY_VALUE_INFORMATION_CLASS", "KeyValuePartialInformation", 0x2)
@@ -8867,6 +8924,37 @@ class _FILE_NOTIFY_EXTENDED_INFORMATION(Structure):
PFILE_NOTIFY_EXTENDED_INFORMATION = POINTER(_FILE_NOTIFY_EXTENDED_INFORMATION)
FILE_NOTIFY_EXTENDED_INFORMATION = _FILE_NOTIFY_EXTENDED_INFORMATION
class _ANON__FILE_RENAME_INFORMATION_SUB_UNION_1(Union):
_fields_ = [
("ReplaceIfExists", BOOLEAN),
("Flags", ULONG),
]
class _FILE_RENAME_INFORMATION(Structure):
_anonymous_ = ("__ANON_DUMMYUNIONNAME_FILE_RENAME_INFORMATION",)
_fields_ = [
("__ANON_DUMMYUNIONNAME_FILE_RENAME_INFORMATION", _ANON__FILE_RENAME_INFORMATION_SUB_UNION_1),
("RootDirectory", HANDLE),
("FileNameLength", ULONG),
("FileName", WCHAR * (1)),
]
FILE_RENAME_INFORMATION = _FILE_RENAME_INFORMATION
PFILE_RENAME_INFORMATION = POINTER(_FILE_RENAME_INFORMATION)
INITIAL_FILE_RENAME_INFORMATION = _FILE_RENAME_INFORMATION
class _FILE_RENAME_INFORMATION(INITIAL_FILE_RENAME_INFORMATION):
@property
def filename(self):
filename_addr = ctypes.addressof(self) + type(self).FileName.offset
if getattr(self, "_target", None) is not None: #remote ctypes :D -> TRICKS OF THE YEAR
raw_data = self._target.read_memory(filename_addr, self.FileNameLength)
return raw_data.decode("utf16")
size = int(self.FileNameLength / 2)
return (ctypes.c_wchar * size).from_address(filename_addr)[:]
FILE_RENAME_INFORMATION = _FILE_RENAME_INFORMATION
PFILE_RENAME_INFORMATION = POINTER(_FILE_RENAME_INFORMATION)
PolicyAuditLogInformation = EnumValue("_POLICY_INFORMATION_CLASS", "PolicyAuditLogInformation", 0x1)
PolicyAuditEventsInformation = EnumValue("_POLICY_INFORMATION_CLASS", "PolicyAuditEventsInformation", 0x2)
PolicyPrimaryDomainInformation = EnumValue("_POLICY_INFORMATION_CLASS", "PolicyPrimaryDomainInformation", 0x3)
+1
View File
@@ -9,6 +9,7 @@ from .kernel32 import *
from .ktmw32 import *
from .ntdll import *
from .ole32 import *
from .oleaut32 import *
from .oleacc import *
from .psapi import *
from .setupapi import *
+9 -1
View File
@@ -36,4 +36,12 @@ def GetIpAddrTable(pIpAddrTable, pdwSize, bOrder=False):
@IphlpapiProxy()
def GetIpNetTable(IpNetTable, SizePointer, Order):
return GetIpNetTable.ctypes_function(IpNetTable, SizePointer, Order)
return GetIpNetTable.ctypes_function(IpNetTable, SizePointer, Order)
@IphlpapiProxy()
def GetAdaptersInfo(AdapterInfo, SizePointer):
return GetAdaptersInfo.ctypes_function(AdapterInfo, SizePointer)
@IphlpapiProxy()
def GetPerAdapterInfo(IfIndex, pPerAdapterInfo, pOutBufLen):
return GetPerAdapterInfo.ctypes_function(IfIndex, pPerAdapterInfo, pOutBufLen)
+43
View File
@@ -0,0 +1,43 @@
import ctypes
import windows.generated_def as gdef
from ..apiproxy import ApiProxy, NeededParameter
from ..error import no_error_check, fail_on_zero, succeed_on_zero
# 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
class Ole32Proxy(ApiProxy):
APIDLL = "oleaut32"
default_error_check = staticmethod(no_error_check)
@Ole32Proxy()
def SysAllocString(psz):
return SysAllocString.ctypes_function(psz)
@Ole32Proxy()
def SysFreeString(bstrString):
return SysFreeString.ctypes_function(bstrString)
@Ole32Proxy(error_check=fail_on_zero)
def SafeArrayCreate(vt, cDims, rgsabound):
return SafeArrayCreate.ctypes_function(vt, cDims, rgsabound)
@Ole32Proxy(error_check=succeed_on_zero)
def SafeArrayDestroy(psa):
return SafeArrayDestroy.ctypes_function(psa)
@Ole32Proxy(error_check=succeed_on_zero)
def SafeArrayPutElement(psa, rgIndices, pv):
return SafeArrayPutElement.ctypes_function(psa, rgIndices, pv)
@Ole32Proxy(error_check=succeed_on_zero)
def SafeArrayGetElement(psa, rgIndices, pv):
return SafeArrayGetElement.ctypes_function(psa, rgIndices, pv)