Working on new windows.alpc

This commit is contained in:
Clement Rouault
2017-07-28 09:20:40 +02:00
parent 6898ac02fa
commit aa22f1515d
9 changed files with 458 additions and 20 deletions
@@ -0,0 +1,10 @@
#define RPC_REQUEST_TYPE_CALL 0
#define RPC_REQUEST_TYPE_BIND 1
#define RPC_RESPONSE_TYPE_BIND_OK 1
#define RPC_RESPONSE_TYPE_FAIL 2
#define RPC_RESPONSE_TYPE_SUCESS 3
#define BIND_IF_SYNTAX_NDR32 1
#define BIND_IF_SYNTAX_NDR64 2
#define BIND_IF_SYNTAX_UNKNOWN 4
+3
View File
@@ -1052,6 +1052,9 @@
#define ALPC_MESSAGE_VIEW_ATTRIBUTE 0x40000000
#define ALPC_MESSAGE_CONTEXT_ATTRIBUTE 0x20000000
#define ALPC_MESSAGE_HANDLE_ATTRIBUTE 0x10000000
#define ALPC_MESSAGE_TOKEN_ATTRIBUTE 0x8000000
#define ALPC_MESSAGE_DIRECT_ATTRIBUTE 0x4000000
#define ALPC_MESSAGE_WORK_ON_BEHALF_ATTRIBUTE 0x2000000
#define ALPC_MSGFLG_REPLY_MESSAGE 0x1
@@ -495,4 +495,10 @@
#define ERROR_NO_LOG_SPACE 1019L
#define ERROR_KEY_HAS_CHILDREN 1020L
#define ERROR_CHILD_MUST_BE_VOLATILE 1021L
#define ERROR_NOTIFY_ENUM_DIR 1022L
#define ERROR_NOTIFY_ENUM_DIR 1022L
#define RPC_X_BAD_STUB_DATA 1783
#define RPC_S_UNKNOWN_IF 1717
#define RPC_S_PROTOCOL_ERROR 1728
#define RPC_S_UNSUPPORTED_TRANS_SYN 1730
#define RPC_S_PROCNUM_OUT_OF_RANGE 1745
@@ -0,0 +1,263 @@
typedef enum _ALPC_PORT_INFORMATION_CLASS
{
AlpcBasicInformation,
AlpcPortInformation,
AlpcAssociateCompletionPortInformation,
AlpcConnectedSIDInformation,
AlpcServerInformation,
AlpcMessageZoneInformation,
AlpcRegisterCompletionListInformation,
AlpcUnregisterCompletionListInformation,
AlpcAdjustCompletionListConcurrencyCountInformation,
AlpcRegisterCallbackInformation,
AlpcCompletionListRundownInformation,
AlpcWaitForPortReferences,
MaxAlpcPortInfoClass
} ALPC_PORT_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;
+1
View File
@@ -725,6 +725,7 @@ defs_with_ntstatus = InitialDefGenerator(from_here("definitions\\windef.txt"), f
# YOLO HACK FOR NOW :DD
defs_with_ntstatus.append_input_file(from_here("definitions\\wintrust_crypt_def.txt"))
defs_with_ntstatus.append_input_file(from_here("definitions\\windef_error.txt"))
defs_with_ntstatus.append_input_file(from_here("definitions\\custom_rpc_windef.txt"))
structs = StructGenerator(from_here("definitions\\winstruct.txt"), from_here(r"..\windows\generated_def\\winstructs.py"), dependances=[defs_with_ntstatus])
+99 -18
View File
@@ -6,9 +6,19 @@ from windows import winproxy
from windows import generated_def as gdef
## For 64b python
# 0x1f: 0x80000000: ALPC_MESSAGE_SECURITY_ATTRIBUTE(0x80000000) : size=0x18?
# 0x1e: 0x40000000: ALPC_MESSAGE_VIEW_ATTRIBUTE(0x40000000): size=0x20
# 0x1d: 0x20000000: ALPC_MESSAGE_CONTEXT_ATTRIBUTE(0x20000000): size=0x20
# 0x1c: 0x10000000: ALPC_MESSAGE_HANDLE_ATTRIBUTE(0x10000000): size=0x18
# 0x1b: 0x8000000: ALPC_MESSAGE_TOKEN_ATTRIBUTE(0x8000000): size=0x18
# 0x1a: 0x4000000: ALPC_MESSAGE_DIRECT_ATTRIBUTE(0x4000000) size=0x8
# 0x19: 0x2000000: ALPC_MESSAGE_WORK_ON_BEHALF_ATTRIBUTE(0x2000000) size=0x8
class AlpcMessage(object):
# PORT_MESSAGE + MessageAttribute
def __init__(self, msg_or_size=None, attributes=None):
def __init__(self, msg_or_size=0x1000, attributes=None):
# Init the PORT_MESSAGE
if isinstance(msg_or_size, (long, int)):
self.port_message_buffer_size = msg_or_size
@@ -19,10 +29,13 @@ class AlpcMessage(object):
self.port_message = msg_or_size
self.port_message_raw_buffer = self.port_message.raw_buffer
self.port_message_buffer_size = len(self.port_message_raw_buffer)
else:
raise NotImplementedError("Uneexpected type for <msg_or_size>: {0}".format(msg_or_size))
# Init the MessageAttributes
if attributes is None:
self.attributes = MessageAttribute.with_all_attributes()
# self.attributes = MessageAttribute.with_all_attributes()
self.attributes = MessageAttribute.with_all_attributes() ## Testing
else:
self.attributes = attributes
@@ -63,6 +76,25 @@ class AlpcMessage(object):
def view_is_valid(self): # Change the name ?
return self.attributes.is_valid(gdef.ALPC_MESSAGE_VIEW_ATTRIBUTE)
@property
def security_is_valid(self): # Change the name ?
return self.attributes.is_valid(gdef.ALPC_MESSAGE_SECURITY_ATTRIBUTE)
@property
def handle_is_valid(self): # Change the name ?
return self.attributes.is_valid(gdef.ALPC_MESSAGE_HANDLE_ATTRIBUTE)
@property
def context_is_valid(self): # Change the name ?
return self.attributes.is_valid(gdef.ALPC_MESSAGE_CONTEXT_ATTRIBUTE)
@property
def valid_attributes(self):
return self.attributes.valid_list
@property
def allocated_attributes(self):
return self.attributes.allocated_list
## High level setup (Test)
def setup_view(self, size, section_handle=0, flags=None):
@@ -109,13 +141,30 @@ class AlpcMessagePort(gdef.PORT_MESSAGE):
datalen = property(get_datalen, set_datalen)
KNOWN_ALPC_ATTRIBUTES = (gdef.ALPC_MESSAGE_SECURITY_ATTRIBUTE,
gdef.ALPC_MESSAGE_VIEW_ATTRIBUTE,
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)
KNOWN_ALPC_ATTRIBUTES_MAPPING = {x:x for x in KNOWN_ALPC_ATTRIBUTES}
class MessageAttribute(gdef.ALPC_MESSAGE_ATTRIBUTES):
ATTRIBUTE_BY_FLAG = [(gdef.ALPC_MESSAGE_SECURITY_ATTRIBUTE, gdef.ALPC_SECURITY_ATTR),
(gdef.ALPC_MESSAGE_VIEW_ATTRIBUTE, gdef.ALPC_DATA_VIEW_ATTR),
(gdef.ALPC_MESSAGE_CONTEXT_ATTRIBUTE, gdef.ALPC_CONTEXT_ATTR),
(gdef.ALPC_MESSAGE_HANDLE_ATTRIBUTE, gdef.ALPC_HANDLE_ATTR)]
(gdef.ALPC_MESSAGE_HANDLE_ATTRIBUTE, gdef.ALPC_HANDLE_ATTR),
(gdef.ALPC_MESSAGE_TOKEN_ATTRIBUTE, gdef.ALPC_TOKEN_ATTR),
(gdef.ALPC_MESSAGE_DIRECT_ATTRIBUTE, gdef.ALPC_DIRECT_ATTR),
(gdef.ALPC_MESSAGE_WORK_ON_BEHALF_ATTRIBUTE, gdef.ALPC_WORK_ON_BEHALF_ATTR),
]
# 0x1b: 0x8000000: ALPC_MESSAGE_TOKEN_ATTRIBUTE(0x8000000): size=0x18
# 0x1a: 0x4000000: ALPC_MESSAGE_DIRECT_ATTRIBUTE(0x4000000) size=0x8
# 0x19: 0x2000000: ALPC_MESSAGE_WORK_ON_BEHALF_ATTRIBUTE(0x2000000) size=0x8
@classmethod
def with_attributes(cls, flags):
@@ -130,9 +179,13 @@ class MessageAttribute(gdef.ALPC_MESSAGE_ATTRIBUTES):
@classmethod
def with_all_attributes(cls):
return cls.with_attributes(gdef.ALPC_MESSAGE_SECURITY_ATTRIBUTE |
gdef.ALPC_MESSAGE_VIEW_ATTRIBUTE |
gdef.ALPC_MESSAGE_CONTEXT_ATTRIBUTE |
gdef.ALPC_MESSAGE_HANDLE_ATTRIBUTE)
gdef.ALPC_MESSAGE_VIEW_ATTRIBUTE |
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)
@staticmethod
def _get_required_buffer_size(flags):
@@ -156,11 +209,28 @@ class MessageAttribute(gdef.ALPC_MESSAGE_ATTRIBUTES):
offset = ctypes.sizeof(self)
for sflag, struct in self.ATTRIBUTE_BY_FLAG:
if sflag == attribute:
# print("Attr {0:#x} was at offet {1:#x}".format(attribute, offset))
return struct.from_address(ctypes.addressof(self) + offset)
elif self.is_allocated(sflag):
offset += ctypes.sizeof(struct)
raise ValueError("ALPC Attribute <{0}> not found :(".format(attribute))
def _extract_alpc_attributes_values(self, value):
attrs = []
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]
@property
def valid_list(self):
return self._extract_alpc_attributes_values(self.ValidAttributes)
@property
def allocated_list(self):
return self._extract_alpc_attributes_values(self.AllocatedAttributes)
AlpcSection = namedtuple("AlpcSection", ["handle", "size"])
class AlpcTransportBase(object):
@@ -221,7 +291,7 @@ class AlpcClient(AlpcTransportBase):
port_attr.MaxSectionSize = 0xffffffff
port_attr.MaxViewSize = 0xffffffff
port_attr.MaxTotalSectionSize = 0xffffffff
port_attr.DupObjectTypes = 0
port_attr.DupObjectTypes = 0xffffffff
port_attr.SecurityQos.Length = ctypes.sizeof(port_attr.SecurityQos)
port_attr.SecurityQos.ImpersonationLevel = gdef.SecurityImpersonation
@@ -237,8 +307,12 @@ class AlpcClient(AlpcTransportBase):
send_msg = AlpcMessagePort.from_buffer_size(buffersize.value)
send_msg.data = connect_message
send_msg_attr = MessageAttribute.with_all_attributes()
elif isinstance(connect_message, AlpcMessage):
send_msg = connect_message.port_message
send_msg_attr = connect_message.attributes
buffersize = gdef.DWORD(connect_message.port_message_buffer_size)
else:
raise NotImplementedError("TODO: connect_to_port with type(connect_message) == AlpcMessage")
raise ValueError("Don't know how to send <{0!r}> as connect message".format(connect_message))
receive_attr = MessageAttribute.with_all_attributes()
winproxy.NtAlpcConnectPort(handle, port_name_unicode, obj_attr, port_attr, flags, None, send_msg, buffersize, send_msg_attr, receive_attr, timeout)
@@ -296,30 +370,37 @@ class AlpcServer(AlpcTransportBase):
obj_attr.SecurityQualityOfService = None
if port_attr is None:
port_attr = gdef.ALPC_PORT_ATTRIBUTES()
port_attr.Flags = 0
# port_attr.Flags = port_attr_flags
# port_attr.Flags = 0x2080000
port_attr.Flags = 0x90000
port_attr.MaxMessageLength = msglen
port_attr.MemoryBandwidth = 0
port_attr.MaxPoolUsage = 0xffffffff
port_attr.MaxSectionSize = 0xffffffff
port_attr.MaxViewSize = 0xffffffff
port_attr.MaxTotalSectionSize = 0xffffffff
port_attr.DupObjectTypes = 0
port_attr.DupObjectTypes = 0xffffffff
# 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
def accept_connection(self, msg, port_attr=None):
def accept_connection(self, msg, port_attr=None, port_context=None):
rhandle = gdef.HANDLE()
if port_attr is None:
port_attr = gdef.ALPC_PORT_ATTRIBUTES()
port_attr.Flags = gdef.ALPC_HANDLEFLG_DUPLICATE_INHERIT
port_attr.Flags = 0 # Testing
port_attr.DupObjectTypes = 4
port_attr.MaxMessageLength = 0x1000
port_attr.Flags = 0x80000
# port_attr.Flags = 0x80000 + 0x2000000
# port_attr.Flags = 0x2000000
port_attr.MaxMessageLength = self.DEFAULT_MAX_MESSAGE_LENGTH
port_attr.MemoryBandwidth = 0
port_attr.MaxPoolUsage = 0xffffffff
winproxy.NtAlpcAcceptConnectPort(rhandle, self.handle, 0, None, port_attr, None, msg.port_message, None, True)
return rhandle.value, msg
port_attr.MaxSectionSize = 0xffffffff
port_attr.MaxViewSize = 0xffffffff
port_attr.MaxTotalSectionSize = 0xffffffff
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)
return rhandle.value, msg
+17 -1
View File
@@ -972,6 +972,9 @@ ALPC_MESSAGE_SECURITY_ATTRIBUTE = make_flag("ALPC_MESSAGE_SECURITY_ATTRIBUTE", 0
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)
@@ -2053,4 +2056,17 @@ ERROR_KEY_DELETED = make_flag("ERROR_KEY_DELETED", 1018L)
ERROR_NO_LOG_SPACE = make_flag("ERROR_NO_LOG_SPACE", 1019L)
ERROR_KEY_HAS_CHILDREN = make_flag("ERROR_KEY_HAS_CHILDREN", 1020L)
ERROR_CHILD_MUST_BE_VOLATILE = make_flag("ERROR_CHILD_MUST_BE_VOLATILE", 1021L)
ERROR_NOTIFY_ENUM_DIR = make_flag("ERROR_NOTIFY_ENUM_DIR", 1022L)
ERROR_NOTIFY_ENUM_DIR = make_flag("ERROR_NOTIFY_ENUM_DIR", 1022L)
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)
+37
View File
@@ -4119,3 +4119,40 @@ class _ALPC_DATA_VIEW_ATTR64(Structure):
]
PALPC_DATA_VIEW_ATTR64 = POINTER(_ALPC_DATA_VIEW_ATTR64)
ALPC_DATA_VIEW_ATTR64 = _ALPC_DATA_VIEW_ATTR64
class _ALPC_TOKEN_ATTR(Structure):
_fields_ = [
("TokenId", ULONGLONG),
("AuthenticationId", ULONGLONG),
("ModifiedId", ULONGLONG),
]
ALPC_TOKEN_ATTR = _ALPC_TOKEN_ATTR
PALPC_TOKEN_ATTR = POINTER(_ALPC_TOKEN_ATTR)
class _ALPC_DIRECT_ATTR(Structure):
_fields_ = [
("Event", HANDLE),
]
ALPC_DIRECT_ATTR = _ALPC_DIRECT_ATTR
PALPC_DIRECT_ATTR = POINTER(_ALPC_DIRECT_ATTR)
class _ALPC_DIRECT_ATTR32(Structure):
_fields_ = [
("Event", ULONG),
]
PALPC_DIRECT_ATTR32 = POINTER(_ALPC_DIRECT_ATTR32)
ALPC_DIRECT_ATTR32 = _ALPC_DIRECT_ATTR32
class _ALPC_DIRECT_ATTR64(Structure):
_fields_ = [
("Event", ULONGLONG),
]
ALPC_DIRECT_ATTR64 = _ALPC_DIRECT_ATTR64
PALPC_DIRECT_ATTR64 = POINTER(_ALPC_DIRECT_ATTR64)
class _ALPC_WORK_ON_BEHALF_ATTR(Structure):
_fields_ = [
("Ticket", ULONGLONG),
]
PALPC_WORK_ON_BEHALF_ATTR = POINTER(_ALPC_WORK_ON_BEHALF_ATTR)
ALPC_WORK_ON_BEHALF_ATTR = _ALPC_WORK_ON_BEHALF_ATTR
+21
View File
@@ -888,6 +888,27 @@ def NtOpenSymbolicLinkObject(LinkHandle, DesiredAccess, ObjectAttributes):
def RtlDecompressBuffer(CompressionFormat, UncompressedBuffer, UncompressedBufferSize, CompressedBuffer, CompressedBufferSize, FinalUncompressedSize):
return RtlDecompressBuffer.ctypes_function(CompressionFormat, UncompressedBuffer, UncompressedBufferSize, CompressedBuffer, CompressedBufferSize, FinalUncompressedSize)
# 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)
# ##### ADVAPI32 ####### #