mirror of
https://github.com/hakril/PythonForWindows
synced 2026-06-08 14:31:45 +00:00
Added some definition + POC of FlagExtractor
This commit is contained in:
@@ -69,4 +69,90 @@
|
||||
#define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP 0x4
|
||||
|
||||
#define SYSTEM_PROCESS_TRUST_LABEL_VALID_MASK 0x00ffffff
|
||||
#define SYSTEM_PROCESS_TRUST_NOCONSTRAINT_MASK 0xffffffff
|
||||
#define SYSTEM_PROCESS_TRUST_NOCONSTRAINT_MASK 0xffffffff
|
||||
|
||||
|
||||
#define CLAIM_SECURITY_ATTRIBUTE_TYPE_INVALID 0x00
|
||||
#define CLAIM_SECURITY_ATTRIBUTE_TYPE_INT64 0x01
|
||||
#define CLAIM_SECURITY_ATTRIBUTE_TYPE_UINT64 0x02
|
||||
#define CLAIM_SECURITY_ATTRIBUTE_TYPE_STRING 0x03
|
||||
#define CLAIM_SECURITY_ATTRIBUTE_TYPE_FQBN 0x04
|
||||
#define CLAIM_SECURITY_ATTRIBUTE_TYPE_SID 0x05
|
||||
#define CLAIM_SECURITY_ATTRIBUTE_TYPE_BOOLEAN 0x06
|
||||
#define CLAIM_SECURITY_ATTRIBUTE_TYPE_OCTET_STRING 0x10
|
||||
|
||||
|
||||
|
||||
#define SE_GROUP_MANDATORY (0x00000001L)
|
||||
#define SE_GROUP_ENABLED_BY_DEFAULT (0x00000002L)
|
||||
#define SE_GROUP_ENABLED (0x00000004L)
|
||||
#define SE_GROUP_OWNER (0x00000008L)
|
||||
#define SE_GROUP_USE_FOR_DENY_ONLY (0x00000010L)
|
||||
#define SE_GROUP_INTEGRITY (0x00000020L)
|
||||
#define SE_GROUP_INTEGRITY_ENABLED (0x00000040L)
|
||||
#define SE_GROUP_LOGON_ID (0xC0000000L)
|
||||
#define SE_GROUP_RESOURCE (0x20000000L)
|
||||
|
||||
#define SE_GROUP_VALID_ATTRIBUTES (SE_GROUP_MANDATORY | \
|
||||
SE_GROUP_ENABLED_BY_DEFAULT | \
|
||||
SE_GROUP_ENABLED | \
|
||||
SE_GROUP_OWNER | \
|
||||
SE_GROUP_USE_FOR_DENY_ONLY | \
|
||||
SE_GROUP_LOGON_ID | \
|
||||
SE_GROUP_RESOURCE | \
|
||||
SE_GROUP_INTEGRITY | \
|
||||
SE_GROUP_INTEGRITY_ENABLED)
|
||||
|
||||
|
||||
#define OWNER_SECURITY_INFORMATION (0x00000001L)
|
||||
#define GROUP_SECURITY_INFORMATION (0x00000002L)
|
||||
#define DACL_SECURITY_INFORMATION (0x00000004L)
|
||||
#define SACL_SECURITY_INFORMATION (0x00000008L)
|
||||
#define LABEL_SECURITY_INFORMATION (0x00000010L)
|
||||
#define ATTRIBUTE_SECURITY_INFORMATION (0x00000020L)
|
||||
#define SCOPE_SECURITY_INFORMATION (0x00000040L)
|
||||
#define PROCESS_TRUST_LABEL_SECURITY_INFORMATION (0x00000080L)
|
||||
#define BACKUP_SECURITY_INFORMATION (0x00010000L)
|
||||
|
||||
#define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L)
|
||||
#define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L)
|
||||
#define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L)
|
||||
#define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L)
|
||||
|
||||
/* PRIVILEGES */
|
||||
|
||||
#define SE_CREATE_TOKEN_NAME ("SeCreateTokenPrivilege")
|
||||
#define SE_ASSIGNPRIMARYTOKEN_NAME ("SeAssignPrimaryTokenPrivilege")
|
||||
#define SE_LOCK_MEMORY_NAME ("SeLockMemoryPrivilege")
|
||||
#define SE_INCREASE_QUOTA_NAME ("SeIncreaseQuotaPrivilege")
|
||||
#define SE_UNSOLICITED_INPUT_NAME ("SeUnsolicitedInputPrivilege")
|
||||
#define SE_MACHINE_ACCOUNT_NAME ("SeMachineAccountPrivilege")
|
||||
#define SE_TCB_NAME ("SeTcbPrivilege")
|
||||
#define SE_SECURITY_NAME ("SeSecurityPrivilege")
|
||||
#define SE_TAKE_OWNERSHIP_NAME ("SeTakeOwnershipPrivilege")
|
||||
#define SE_LOAD_DRIVER_NAME ("SeLoadDriverPrivilege")
|
||||
#define SE_SYSTEM_PROFILE_NAME ("SeSystemProfilePrivilege")
|
||||
#define SE_SYSTEMTIME_NAME ("SeSystemtimePrivilege")
|
||||
#define SE_PROF_SINGLE_PROCESS_NAME ("SeProfileSingleProcessPrivilege")
|
||||
#define SE_INC_BASE_PRIORITY_NAME ("SeIncreaseBasePriorityPrivilege")
|
||||
#define SE_CREATE_PAGEFILE_NAME ("SeCreatePagefilePrivilege")
|
||||
#define SE_CREATE_PERMANENT_NAME ("SeCreatePermanentPrivilege")
|
||||
#define SE_BACKUP_NAME ("SeBackupPrivilege")
|
||||
#define SE_RESTORE_NAME ("SeRestorePrivilege")
|
||||
#define SE_SHUTDOWN_NAME ("SeShutdownPrivilege")
|
||||
#define SE_DEBUG_NAME ("SeDebugPrivilege")
|
||||
#define SE_AUDIT_NAME ("SeAuditPrivilege")
|
||||
#define SE_SYSTEM_ENVIRONMENT_NAME ("SeSystemEnvironmentPrivilege")
|
||||
#define SE_CHANGE_NOTIFY_NAME ("SeChangeNotifyPrivilege")
|
||||
#define SE_REMOTE_SHUTDOWN_NAME ("SeRemoteShutdownPrivilege")
|
||||
#define SE_UNDOCK_NAME ("SeUndockPrivilege")
|
||||
#define SE_SYNC_AGENT_NAME ("SeSyncAgentPrivilege")
|
||||
#define SE_ENABLE_DELEGATION_NAME ("SeEnableDelegationPrivilege")
|
||||
#define SE_MANAGE_VOLUME_NAME ("SeManageVolumePrivilege")
|
||||
#define SE_IMPERSONATE_NAME ("SeImpersonatePrivilege")
|
||||
#define SE_CREATE_GLOBAL_NAME ("SeCreateGlobalPrivilege")
|
||||
#define SE_TRUSTED_CREDMAN_ACCESS_NAME ("SeTrustedCredManAccessPrivilege")
|
||||
#define SE_RELABEL_NAME ("SeRelabelPrivilege")
|
||||
#define SE_INC_WORKING_SET_NAME ("SeIncreaseWorkingSetPrivilege")
|
||||
#define SE_TIME_ZONE_NAME ("SeTimeZonePrivilege")
|
||||
#define SE_CREATE_SYMBOLIC_LINK_NAME ("SeCreateSymbolicLinkPrivilege")
|
||||
@@ -923,13 +923,6 @@
|
||||
#define ALPC_VIEWFLG_NOT_SECURE 0x40000
|
||||
|
||||
|
||||
#define OWNER_SECURITY_INFORMATION (0x00000001L)
|
||||
#define GROUP_SECURITY_INFORMATION (0x00000002L)
|
||||
#define DACL_SECURITY_INFORMATION (0x00000004L)
|
||||
#define SACL_SECURITY_INFORMATION (0x00000008L)
|
||||
#define LABEL_SECURITY_INFORMATION (0x00000010L)
|
||||
#define MAXIMUM_ALLOWED (0x02000000L)
|
||||
|
||||
#define CERT_STORE_CERTIFICATE_CONTEXT 1
|
||||
#define CERT_STORE_CRL_CONTEXT 2
|
||||
#define CERT_STORE_CTL_CONTEXT 3
|
||||
|
||||
@@ -3,6 +3,7 @@ import sys
|
||||
if sys.version_info.major == 3:
|
||||
long = int
|
||||
|
||||
|
||||
class Flag(long):
|
||||
def __new__(cls, name, value):
|
||||
return super(Flag, cls).__new__(cls, value)
|
||||
@@ -19,6 +20,7 @@ class Flag(long):
|
||||
def __getnewargs__(self, *args):
|
||||
return self.name, long(self)
|
||||
|
||||
|
||||
class StrFlag(str):
|
||||
def __new__(cls, name, value):
|
||||
if isinstance(value, cls):
|
||||
@@ -37,14 +39,31 @@ class StrFlag(str):
|
||||
def __getnewargs__(self, *args):
|
||||
return self.name, str.__str__(self)
|
||||
|
||||
|
||||
def make_flag(name, value):
|
||||
if isinstance(value, (int, long)):
|
||||
return Flag(name, value)
|
||||
return StrFlag(name, value)
|
||||
|
||||
|
||||
class FlagMapper(dict):
|
||||
def __init__(self, *values):
|
||||
self.update({x:x for x in values})
|
||||
|
||||
def __missing__(self, key):
|
||||
return key
|
||||
return key
|
||||
|
||||
|
||||
class FlagExatractor(object):
|
||||
def __init__(self, attr, values):
|
||||
self.attr = attr
|
||||
self.attrsize = attr.size * 8
|
||||
self.mapper = FlagMapper(*values)
|
||||
|
||||
def __get__(self, obj, type):
|
||||
if obj is None:
|
||||
return self
|
||||
# Retrieve the real value
|
||||
value = self.attr.__get__(obj)
|
||||
generator = (1 << i for i in range(self.attrsize))
|
||||
return [self.mapper[f] for f in generator if value & f]
|
||||
|
||||
@@ -89,6 +89,11 @@ DWORD WINAPI GetLengthSid(
|
||||
_In_ PSID pSid
|
||||
);
|
||||
|
||||
BOOL EqualSid(
|
||||
PSID pSid1,
|
||||
PSID pSid2
|
||||
);
|
||||
|
||||
|
||||
PSID_IDENTIFIER_AUTHORITY WINAPI GetSidIdentifierAuthority(
|
||||
_In_ PSID pSid
|
||||
@@ -105,8 +110,10 @@ PDWORD WINAPI GetSidSubAuthority(
|
||||
_In_ DWORD nSubAuthority
|
||||
);
|
||||
|
||||
|
||||
PUCHAR WINAPI GetSidSubAuthorityCount(
|
||||
/* Yep not the good definition (return PUCHAR)
|
||||
* but who want this function to returns Python String..
|
||||
*/
|
||||
LPBYTE WINAPI GetSidSubAuthorityCount(
|
||||
_In_ PSID pSid
|
||||
);
|
||||
|
||||
|
||||
@@ -47,6 +47,7 @@ CIMTYPE = LONG
|
||||
NET_IFINDEX = ULONG
|
||||
IF_INDEX = NET_IFINDEX
|
||||
IFTYPE = ULONG
|
||||
PLONG64 = POINTER(LONG64)
|
||||
PULONG64 = POINTER(ULONG64)
|
||||
PBYTE = POINTER(BYTE)
|
||||
PUINT = POINTER(UINT)
|
||||
|
||||
@@ -187,6 +187,41 @@ typedef struct _SYSTEM_ALARM_CALLBACK_OBJECT_ACE {
|
||||
DWORD SidStart;
|
||||
} SYSTEM_ALARM_CALLBACK_OBJECT_ACE, *PSYSTEM_ALARM_CALLBACK_OBJECT_ACE;
|
||||
|
||||
|
||||
typedef union _CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1_UNION {
|
||||
DWORD pInt64[ANYSIZE_ARRAY];
|
||||
DWORD pUint64[ANYSIZE_ARRAY];
|
||||
DWORD ppString[ANYSIZE_ARRAY];
|
||||
DWORD pFqbn[ANYSIZE_ARRAY];
|
||||
DWORD pOctetString[ANYSIZE_ARRAY];
|
||||
} CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1_UNION;
|
||||
|
||||
typedef struct _CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1 {
|
||||
DWORD Name;
|
||||
WORD ValueType;
|
||||
WORD Reserved;
|
||||
DWORD Flags;
|
||||
DWORD ValueCount;
|
||||
CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1_UNION Values;
|
||||
} CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1, *PCLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1;
|
||||
|
||||
typedef struct _CLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE {
|
||||
DWORD64 Version;
|
||||
PWSTR Name;
|
||||
} CLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE, *PCLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE;
|
||||
|
||||
typedef struct _CLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE {
|
||||
PVOID pValue; // Pointer is BYTE aligned.
|
||||
DWORD ValueLength; // In bytes
|
||||
} CLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE,
|
||||
*PCLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE;
|
||||
|
||||
typedef struct _CLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_RELATIVE {
|
||||
DWORD Length;
|
||||
BYTE OctetString[ANYSIZE_ARRAY];
|
||||
} CLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_RELATIVE,
|
||||
*PCLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_RELATIVE;
|
||||
|
||||
typedef struct _SECURITY_DESCRIPTOR {
|
||||
BYTE Revision;
|
||||
BYTE Sbz1;
|
||||
|
||||
@@ -2,7 +2,7 @@ import windows # Allow extended-struct to use windows/winproxy/...
|
||||
from ctypes import *
|
||||
from ctypes.wintypes import *
|
||||
|
||||
from flag import Flag, FlagMapper
|
||||
from flag import Flag, FlagMapper, FlagExatractor
|
||||
|
||||
class EnumValue(Flag):
|
||||
def __new__(cls, enum_name, name, value):
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
typedef struct _TOKEN_PRIVILEGES {
|
||||
DWORD PrivilegeCount;
|
||||
LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
|
||||
} TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;
|
||||
|
||||
typedef struct _TOKEN_ELEVATION {
|
||||
DWORD TokenIsElevated;
|
||||
} TOKEN_ELEVATION, *PTOKEN_ELEVATION;
|
||||
|
||||
typedef struct _SID_AND_ATTRIBUTES {
|
||||
PSID Sid;
|
||||
DWORD Attributes;
|
||||
} SID_AND_ATTRIBUTES, * PSID_AND_ATTRIBUTES;
|
||||
|
||||
typedef struct _TOKEN_MANDATORY_LABEL {
|
||||
SID_AND_ATTRIBUTES Label;
|
||||
} TOKEN_MANDATORY_LABEL, *PTOKEN_MANDATORY_LABEL;
|
||||
|
||||
|
||||
typedef struct _TOKEN_USER {
|
||||
SID_AND_ATTRIBUTES User;
|
||||
} TOKEN_USER, *PTOKEN_USER;
|
||||
|
||||
typedef struct _TOKEN_DEFAULT_DACL {
|
||||
PACL DefaultDacl;
|
||||
} TOKEN_DEFAULT_DACL, *PTOKEN_DEFAULT_DACL;
|
||||
|
||||
|
||||
typedef struct _TOKEN_GROUPS {
|
||||
DWORD GroupCount;
|
||||
SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
|
||||
} TOKEN_GROUPS, *PTOKEN_GROUPS;
|
||||
|
||||
|
||||
typedef struct _TOKEN_GROUPS_AND_PRIVILEGES {
|
||||
DWORD SidCount;
|
||||
DWORD SidLength;
|
||||
PSID_AND_ATTRIBUTES Sids;
|
||||
DWORD RestrictedSidCount;
|
||||
DWORD RestrictedSidLength;
|
||||
PSID_AND_ATTRIBUTES RestrictedSids;
|
||||
DWORD PrivilegeCount;
|
||||
DWORD PrivilegeLength;
|
||||
PLUID_AND_ATTRIBUTES Privileges;
|
||||
LUID AuthenticationId;
|
||||
} TOKEN_GROUPS_AND_PRIVILEGES, *PTOKEN_GROUPS_AND_PRIVILEGES;
|
||||
@@ -1593,28 +1593,6 @@ typedef struct _LUID_AND_ATTRIBUTES {
|
||||
DWORD Attributes;
|
||||
} LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
|
||||
|
||||
typedef struct _TOKEN_PRIVILEGES {
|
||||
DWORD PrivilegeCount;
|
||||
LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
|
||||
} TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;
|
||||
|
||||
typedef struct _TOKEN_ELEVATION {
|
||||
DWORD TokenIsElevated;
|
||||
} TOKEN_ELEVATION, *PTOKEN_ELEVATION;
|
||||
|
||||
typedef struct _SID_AND_ATTRIBUTES {
|
||||
PSID Sid;
|
||||
DWORD Attributes;
|
||||
} SID_AND_ATTRIBUTES, * PSID_AND_ATTRIBUTES;
|
||||
|
||||
typedef struct _TOKEN_MANDATORY_LABEL {
|
||||
SID_AND_ATTRIBUTES Label;
|
||||
} TOKEN_MANDATORY_LABEL, *PTOKEN_MANDATORY_LABEL;
|
||||
|
||||
|
||||
typedef struct _TOKEN_USER {
|
||||
SID_AND_ATTRIBUTES User;
|
||||
} TOKEN_USER, *PTOKEN_USER;
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -11,6 +11,13 @@ class PSID(_INITIAL_PSID): # _INITIAL_PSID -> PVOID
|
||||
windows.winproxy.LocalFree(sid_str)
|
||||
return result
|
||||
|
||||
def __eq__(self, other):
|
||||
return windows.winproxy.EqualSid(self, other)
|
||||
|
||||
@property
|
||||
def size(self):
|
||||
return windows.winproxy.GetLengthSid(self)
|
||||
|
||||
@classmethod
|
||||
def from_string(cls, strsid):
|
||||
self = cls()
|
||||
|
||||
Reference in New Issue
Block a user