Compare commits

...

78 Commits

Author SHA1 Message Date
hakril f3de7b528b go go gadget 0.5 2019-01-03 22:43:40 +01:00
hakril 252f6f8efa Update replace deprecated use of getfuncargvalue to please new pytest versions 2019-01-03 22:32:19 +01:00
hakril f53cd00bc4 cosmetic changes to doc + generate html doc 2019-01-03 22:20:19 +01:00
hakril 3fe7ee2cce Fix bug in debugger caused by on_setup new code 2019-01-03 22:00:01 +01:00
hakril 370210a610 Fix a bug in MEMORY_BASIC_INFORMATION64 extended struct + add related test 2019-01-03 21:51:35 +01:00
hakril 288e87a0d3 Update windows.security doc + add ref to module in doc 2019-01-03 21:50:17 +01:00
hakril abded9944d Regenerated ctypes 2018-12-28 21:22:29 +01:00
hakril d9a43a4a8b Update readme with Token/SecurityDescriptor demo + fix flag repr in README + small docstring fix 2018-12-28 21:21:30 +01:00
hakril c2f2f4c0a5 Flag repr does not print long 'L' at the end of hex value 2018-12-28 21:13:40 +01:00
hakril 771593f17d Fix in safe_execute_python to raise WindowsError if process die during execution 2018-12-21 18:53:55 +01:00
hakril a194f0be6b Fixed bug in WinProxy where error add bad func name + update winproxy function list in doc 2018-12-21 18:52:08 +01:00
hakril 4f62434dfb Moved lookup_sid to windows.utils + add Token to window.security + update doc about official Token path 2018-12-21 18:50:22 +01:00
hakril fb567c6a76 Added some samples output + document change Kernel32Error -> WinproxyError + fix sample/readme/doc related 2018-12-21 18:13:28 +01:00
hakril 784e669597 update debugger.py with new on_setup callback" 2018-12-21 16:22:38 +01:00
hakril 21e259fa73 Update some doc/samples for new module/features 2018-12-21 16:18:19 +01:00
hakril db44087bba Refactor thread code for simple token retrieving on Process/Thread objects 2018-12-21 16:07:10 +01:00
hakril f522f08e7f Fix token.py doc + improve NDR with new class + doc NdrString new behavior + update uac.py sample to match new NdrString 2018-12-21 16:05:37 +01:00
hakril a9a39bc53f Added multiple ctypes_generation definition + some winproxy functions 2018-12-21 15:31:51 +01:00
hakril 45ace331cb Added token sample + Debugger.on_setup sample 2018-12-21 15:27:04 +01:00
hakril 79ff18e06f Update doc/samples/test of windows.security 2018-12-21 15:26:29 +01:00
hakril 986664d01f update Doc + test + sample for token.py 2018-12-20 22:48:16 +01:00
hakril 8dc2d443d5 Update WMI docs / samples 2018-12-17 23:40:08 +01:00
hakril e5f87e1453 Fix setup.py to match new winproxy packages 2018-12-17 09:44:43 +01:00
hakril 6c4a5f7d65 Added LoadLibraryEx[AW] + FreeLibrary to winproxy 2018-11-27 14:38:29 +01:00
hakril 5df8cc96dc enum mapper is now a FlagMapper + improve winfunc parsing 2018-11-26 22:39:31 +01:00
hakril 460274d532 Process object now return new Token object (still WIP) 2018-11-24 22:59:01 +01:00
hakril 2a4bdd7e30 removing crypto ECRYPT_DATA_BLOB. now CRYPT_DATA_BLOB is extended_struct + testing new API in crypto object 2018-11-24 22:59:01 +01:00
hakril d936942d28 [WIP] improving Token object possibilities 2018-11-24 22:59:01 +01:00
hakril 24c5083633 POC of new Improved buffer utilities + sprint use dunder method __sprint__ if available in objects 2018-11-24 22:59:01 +01:00
hakril c3b85068e5 Added Retn to x86/64 assemblers + encryption_demo sample can now sign a file + [WIP] token improvement 2018-11-24 22:59:01 +01:00
hakril fff2f37781 Add WMI create-process sample + improved some sample feature/doc 2018-11-24 22:59:01 +01:00
hakril b6f57b8342 Code now use renamed/improved windows.com.Variant 2018-11-24 22:59:01 +01:00
hakril cf6c813002 ComInterface now expose a callback for ctypes error handling. Allow COM interface to change/handle the raised Exception 2018-11-24 22:59:01 +01:00
hakril b167c6e70f Made some improvement of error handling by ApiProxy + some new generated def 2018-11-24 22:59:01 +01:00
hakril 267eddb5fe Reworking windows.com.Variant + working on new wmi API + wmi test 2018-11-24 22:59:01 +01:00
hakril a18c08ee53 Working on new WMI interface + improved ComInterface errcheck 2018-11-24 22:59:01 +01:00
hakril e46dc48c37 Addapt codebase and tests to winproxy refactoring (replace Kernel32Error to WinproxyError) 2018-11-24 22:59:00 +01:00
hakril 77fca8bb0f Refactor winproxy into a directory 2018-11-24 22:59:00 +01:00
hakril bbde38ffe4 First version of windows.security based on clmntb work 2018-11-24 22:59:00 +01:00
hakril 0e52272ddc Fixed a warning in simple_x[86|64] 2018-11-24 22:59:00 +01:00
hakril 91cbcce38f Added some definition + POC of FlagExtractor 2018-11-24 22:59:00 +01:00
hakril 33ca0c9c34 Added many security-related defines + moved improved-psid in extended_structs 2018-11-24 22:59:00 +01:00
hakril 272ad24f15 Added extended-struct capabilities to simple_type.txt 2018-11-24 22:59:00 +01:00
hakril 967c18d521 Added POC WinProcess.memory_info + some crypto defines 2018-11-24 22:59:00 +01:00
hakril 0125f78c67 Quick fix for query_volume_information 2018-11-24 22:59:00 +01:00
hakril 570436120b Added some functions 2018-11-24 22:59:00 +01:00
hakril 1c21b77292 Add sign/verify methods to windows.crypto + POC/Play with improved ctypes buffer/array 2018-11-24 22:59:00 +01:00
hakril 7a313f57c1 Added some crypto-related ctypes_generation definitions + generate.py now try to check for out-of-order definition 2018-11-24 22:59:00 +01:00
hakril b253bc5873 Merge pull request #4 from jagotu/master
Ndr: Make sure Strings are null-terminated. Add NULL byte if not present.
2018-11-07 22:10:34 +01:00
JaGoTu 921f066fb8 Ndr: Make sure Strings are null-terminated
Prevents RPC_X_BAD_STUB_DATA when a non-null-terminated string is
provided as an argument.
2018-11-07 21:26:28 +01:00
hakril 2454bf815b Regenerate sphinx doc 2018-08-03 10:10:31 +02:00
hakril b3f1420d46 Updated README with new features description 2018-08-03 09:48:53 +02:00
hakril 19095f0e2f Fix typo in certificate test + add very simple test of windows.system.modules 2018-08-02 18:52:35 +02:00
hakril c228a0d5cb Added Certificate.distinguished_name and BaseSystemModule.name + some winproxy functions 2018-08-02 18:51:41 +02:00
hakril c97d149630 Added some ctypes_generation definitions 2018-08-02 18:42:36 +02:00
hakril afccd0da30 Added doc about how to install pfw in readme and sphinx doc 2018-08-02 18:41:08 +02:00
hakril e53f7ef34b Added some test for windows.system.object_manager 2018-08-02 18:38:48 +02:00
hakril e6a022f8be Add windows.system.edition 2018-07-13 18:08:00 +02:00
hakril a75de140d6 Added object manager samples to doc + fix Certificate.thum[b]print typo 2018-07-13 14:41:09 +02:00
hakril d232928780 Added some generated def + some winproxy functions 2018-07-13 14:33:50 +02:00
hakril c19241098a Improve object manager doc + add samples 2018-07-13 14:24:55 +02:00
hakril eb3b13016f Fix right-margin in sphinx doc CSS (thanks bruno) 2018-07-11 11:57:39 +02:00
hakril c59af86910 Renamed kernobj.py to object_manager.py and added to windows.system.object_manager + improve API + beginning of doc 2018-06-11 17:55:11 +02:00
hakril 041a354d17 Update some doc + document windows.system.modules 2018-06-11 11:09:48 +02:00
hakril 525432fecd Add a POC for windows.system.modules to replace winutils.get_kernel_modules() 2018-06-05 21:55:54 +02:00
hakril 1ee9a8bc46 new POC for breakpoint with parameters extraction 2018-06-05 21:54:26 +02:00
hakril 3dcd27a1ca Fix ntdll-registry winproxy error check + add LocalDebugger.current_thread to match Debugger API 2018-06-05 21:53:35 +02:00
hakril b223ed233e Fix stuff in service.py + update test 2018-06-05 11:59:06 +02:00
hakril 3d69ad3cb5 Add some definition in ctypes generation + winproxy wrappers; fix com.py imports 2018-06-05 11:38:57 +02:00
hakril a559c5c295 Update some doc / test + some ctypes generation definition 2018-06-05 11:34:52 +02:00
hakril 93bb9b6540 Add doc/sample/test for event log code 2018-06-05 11:30:25 +02:00
hakril 057d4e5408 Add scheduled_task code/doc-source/tests 2018-06-01 12:20:13 +02:00
hakril 2bea15ffe8 add current word on event logs 2018-05-12 00:17:34 +02:00
hakril 11e4afeef5 ctypes generation : added bitfield parsing/generation + update/fix some definitions 2018-05-12 00:16:45 +02:00
hakril 05e7b755b0 Fix CurrentProcess read/write memory to use ctypes.memmove -> raise on bad address -> no more segv 2018-05-12 00:13:57 +02:00
hakril 849d64378f Commit current work on scheduled tasks 2018-05-12 00:11:10 +02:00
hakril 8cc361b1f9 ctypes generation allow COM mission interface autocopy from a directory + support anon structs/enum in typedef 2018-04-16 19:54:09 +02:00
hakril e918d735a1 Tests injecting python in remote process now check that target python is installed 2018-03-28 23:14:41 +02:00
332 changed files with 99342 additions and 45142 deletions
+5 -1
View File
@@ -1,4 +1,8 @@
*.pyc
doctrees
*.inv
*.pickle
*.pickle
.vscode/
.cache/
dist/
+44 -11
View File
@@ -1,3 +1,47 @@
Between 0.4 & 0.5:
== New features ==
- windows.security
- SecurityDescriptor / ACL / ACE objects
- Improved Token object
- windows.debug
- New callback Debugger.on_setup
== Change / Break ==
- windows.winproxy
- Kernel32Error replaced by WinproxyError
- It seemed weird that ntdll/advapi32/etc raised Kernel32Error..
- windows.wmi
- Wmi API changed, most of them do not return dict anymore but WmiObject
- It can be used like mapping
- It offers improved feature
- real error display handling :)
- windows.com
- ImprovedVariant renamed Variant + new api variant
- This is not documented yet
- windows.rpc.ndr
- ndr strings add final \x00 when packing if not present
- crypto
- CertificateStore.find return None if certif is not found (was raising in the past)
- removed ECRYPT_DATA_BLOB
- new CRYPT_DATA_BLOB is an _extended_struct :)
Since 0.35:
* WinProcess.get_mapped_filename can now raise on non-standard error (like: ERROR_TRANSACTION_NOT_ACTIVE)
* WinProcess.get_mapped_filename now use GetMappedFilenameW (returning an unicode string)
* CertificateContext is replace by Certificate
* CertificateContext was a PPCERT_CONTEXT. Certificate is a CERT_CONTEXT (not a pointer anymore)
* EHCERTSTORE renamed to CertificateStore
* added windows.pipe
Since 0.3:
* Rewrote pe_parse to minimize closure (allowing the refcount to del all ref to WinProcess when the debugger detach it)
* Fix debugger.detach / handling on exit_process
Since 0.2:
* NtStatusException is now a WindowsError
@@ -26,17 +70,6 @@ Since 0.2:
* Added Debugger.detach
Since 0.3:
* Rewrote pe_parse to minimize closure (allowing the refcount to del all ref to WinProcess when the debugger detach it)
* Fix debugger.detach / handling on exit_process
Since 0.35:
* WinProcess.get_mapped_filename can now raise on non-standard error (like: ERROR_TRANSACTION_NOT_ACTIVE)
* WinProcess.get_mapped_filename now use GetMappedFilenameW (returning an unicode string)
* CertificateContext is replace by Certificate
* CertificateContext was a PPCERT_CONTEXT. Certificate is a CERT_CONTEXT (not a pointer anymore)
* EHCERTSTORE renamed to CertificateStore
* added windows.pipe
+168 -38
View File
@@ -17,6 +17,16 @@ Parts of PythonForWindows are used in the [LKD project][LKD_GITHUB].
If you have any issue, question, suggestion do not hesitate to contact me.
I am always glad to have feedbacks from people using this project.
## Installation
You can install PythonForWindows using the ``setup.py`` script:
``
python setup.py install
``
Note that PythonForWindows only support Python2 at the moment.
## Overview
### Processes / Threads
@@ -39,32 +49,32 @@ You can also make some operation on threads (suspend/resume/wait/get(or set) con
>>> windows.current_process.bitness
32
>>> windows.current_process.token.integrity
SECURITY_MANDATORY_MEDIUM_RID(0x2000L)
>>> calc = [p for p in windows.system.processes if p.name == "calc.exe"][0]
>>> calc
<WinProcess "calc.exe" pid 6960 at 0x37391f0>
>>> calc.bitness
SECURITY_MANDATORY_MEDIUM_RID(0x2000)
>>> proc = [p for p in windows.system.processes if p.name == "notepad.exe"][0]
>>> proc
<WinProcess "notepad.exe" pid 16520 at 0x544e410>
>>> proc.bitness
64
>>> calc.peb.modules[:3]
[<RemoteLoadedModule64 "calc.exe" at 0x3671e90>, <RemoteLoadedModule64 "ntdll.dll" at 0x3671030>, <RemoteLoadedModule64 "kernel32.dll" at 0x3671080>]
>>> k32 = calc.peb.modules[2]
>>> proc.peb.modules[:3]
[<RemoteLoadedModule64 "notepad.exe" at 0x3671e90>, <RemoteLoadedModule64 "ntdll.dll" at 0x3671030>, <RemoteLoadedModule64 "kernel32.dll" at 0x3671080>]
>>> k32 = proc.peb.modules[2]
>>> hex(k32.pe.exports["CreateFileW"])
'0x7ffee6761550L'
>>> calc.threads[0]
<WinThread 3932 owner "calc.exe" at 0x3646350>
>>> hex(calc.threads[0].context.Rip)
>>> proc.threads[0]
<WinThread 17688 owner "notepad.exe" at 0x53b47f0>
>>> hex(proc.threads[0].context.Rip)
'0x7ffee68b54b0L'
>>> calc.execute_python("import os")
>>> proc.execute_python("import os")
True
>>> calc.execute_python("exit(os.getpid() + 1)")
>>> proc.execute_python("exit(os.getpid() + 1)")
# execute_python raise if process died
Traceback (most recent call last):
...
WindowsError: <WinProcess "calc.exe" pid 6960 (DEAD) at 0x37391f0> died during execution of python command
WindowsError: <WinProcess "notepad.exe" pid 16520 (DEAD) at 0x579f610> died during execution of python command
>>> calc
<WinProcess "calc.exe" pid 6960 (DEAD) at 0x37391f0>
<WinProcess "notepad.exe" pid 16520 (DEAD) at 0x579f610>
>>> calc.exit_code
6961L
16521L
```
### System information
@@ -79,7 +89,7 @@ Information about the Windows computer running the script are available through
>>> windows.system.computer_name
'DESKTOP-VKUGISR'
>>> windows.system.product_type
VER_NT_WORKSTATION(0x1L)
VER_NT_WORKSTATION(0x1)
>>> windows.system.version
(10, 0)
>>> windows.system.version_name
@@ -94,6 +104,9 @@ VER_NT_WORKSTATION(0x1L)
[<WinProcess "[System Process]" pid 0 at 0x433f7d0>, <WinProcess "System" pid 4 at 0x433fd30>]
>>> windows.system.logicaldrives[0]
<LogicalDrive "C:\" (DRIVE_FIXED)>
>>> windows.system.services[23]
<ServiceA "Appinfo" SERVICE_RUNNING(0x4)>
```
### IAT Hook
@@ -113,7 +126,7 @@ but some have default values and the functions raise exception on call error (I
# Help on function VirtualAlloc in module windows.winproxy:
# VirtualAlloc(lpAddress=0, dwSize=NeededParameter, flAllocationType=MEM_COMMIT(0x1000L), flProtect=PAGE_EXECUTE_READWRITE(0x40L))
# Errcheck:
# raise Kernel32Error if result is 0
# raise WinproxyError if result is 0
# Positional arguments
>>> windows.winproxy.VirtualAlloc(0, 0x1000)
@@ -145,8 +158,8 @@ File "windows\winproxy.py", line 264, in VirtualAlloc
File "windows\winproxy.py", line 133, in perform_call
return self._cprototyped(*args)
File "windows\winproxy.py", line 59, in kernel32_error_check
raise Kernel32Error(func_name)
windows.winproxy.Kernel32Error: VirtualAlloc: [Error 8] Not enough storage is available to process this command.
raise WinproxyError(func_name)
windows.winproxy.error.WinproxyError: VirtualAlloc: [Error 87] The parameter is incorrect.
"""
```
@@ -174,6 +187,39 @@ a simple x86/x64 assembler.
'\x81\xff\x00\x00\x00\x00u\x06\xc7\xc0\x01\x00\x00\x00\xc3'
```
### Token / Security Descriptor
Objects easing access to some information about ``Token`` and ``SecurityDescriptor`` are also available.
```python
>>> import windows.security
>>> import windows.generated_def as gdef
>>> tok = windows.current_process.token
>>> tok
<Token TokenId=0x6a2b4550 Type=TokenPrimary(0x1)>
>>> tok.username
u'hakril'
>>> tok.type
tagTOKEN_TYPE.TokenPrimary(0x1)
>>> tok.integrity
SECURITY_MANDATORY_MEDIUM_RID(0x2000)
>>> tok.duplicate(type=gdef.TokenImpersonation, impersonation_level=gdef.SecurityIdentification)
<Token TokenId=0x6a3532ce Type=TokenImpersonation(0x2) ImpersonationLevel=SecurityIdentification(0x1)>
# Security Descriptor
>>> sd = windows.security.SecurityDescriptor.from_filename("c:\windows\system32\kernel32.dll")
>>> sd
<SecurityDescriptor object at 0x054E3DF0>
>>> windows.utils.lookup_sid(sd.owner)
(u'NT SERVICE', u'TrustedInstaller')
>>> sd.dacl
<Acl count=6>
>>> list(sd.dacl)
[<AccessAllowedACE mask=2032127>, <AccessAllowedACE mask=1179817>, <AccessAllowedACE mask=1179817>, <AccessAllowedACE mask=1179817>, <AccessAllowedACE mask=1179817>, <AccessAllowedACE mask=1179817>]
>>> sd.dacl[1].sid
<PSID "S-1-5-32-544">
```
### Wintrust
To easily script some signature check script, PythonForWindows implements some wrapper functions around ``wintrust.dll``
@@ -189,7 +235,7 @@ SignatureData(signed=True,
catalog=u'C:\\Windows\\system32\\CatRoot\\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\\Package_35_for_KB3128650~31bf3856ad364e35~amd64~~6.3.1.2.cat',
catalogsigned=True, additionalinfo=0L)
>>> windows.wintrust.full_signature_information(r"C:\Windows\system32\python27.dll")
SignatureData(signed=False, catalog=None, catalogsigned=False, additionalinfo=TRUST_E_NOSIGNATURE(0x800b0100L))
SignatureData(signed=False, catalog=None, catalogsigned=False, additionalinfo=TRUST_E_NOSIGNATURE(0x800b0100))
```
### WMI
@@ -199,10 +245,11 @@ To extract/play with even more information about the system, PythonForWindows is
```python
>>> import windows
>>> windows.system.wmi.select
<bound method WmiRequester.select of <windows.winobject.wmi.WmiRequester object at 0x036BA590>>
>>> windows.system.wmi.select("Win32_Process", ["Name", "Handle"])[:4]
[{'Handle': u'0', 'Name': u'System Idle Process'}, {'Handle': u'4', 'Name': u'System'}, {'Handle': u'412', 'Name': u'smss.exe'}, {'Handle': u'528', 'Name': u'csrss.exe'}]
# Get WMI data for current process
<bound method WmiNamespace.select of <WmiNamespace "root\cimv2">>
>>> windows.system.wmi.select("Win32_Process")[:3]
[<WmiObject instance of "Win32_Process">, <WmiObject instance of "Win32_Process">, <WmiObject instance of "Win32_Process">]# Get WMI data for current process
>>> windows.system.wmi.select("Win32_Process")[42]["Name"]
u'svchost.exe'
>>> wmi_cp = [p for p in windows.system.wmi.select("Win32_Process") if int(p["Handle"]) == windows.current_process.pid][0]
>>> wmi_cp["CommandLine"], wmi_cp["HandleCount"]
(u'"C:\\Python27\\python.exe"', 227)
@@ -220,7 +267,7 @@ The project also contains some wrapping classes around `_winreg` for simpler use
>>> cuuser_software
<PyHKey "HKEY_CURRENT_USER\Software">
>>> cuuser_software.sam
KEY_READ(0x20019L)
KEY_READ(0x20019)
# Explore subkeys
>>> cuuser_software.subkeys[:3]
[<PyHKey "HKEY_CURRENT_USER\Software\7-Zip">, <PyHKey "HKEY_CURRENT_USER\Software\AppDataLow">, <PyHKey "HKEY_CURRENT_USER\Software\Audacity">]
@@ -237,6 +284,86 @@ KeyValue(name='MYQWORD', value=123456789987654321L, type=11)
[KeyValue(name='MYQWORD', value=123456789987654321L, type=11), KeyValue(name='VALUE', value=u'a_value_for_my_key', type=1)]
```
### Object manager
PythonForWindows uses the native Windows NT API to display some information about the object in the Object Manager's name space.
Just like the well-known tools ``winobj.exe``
```python
>>> windows.system.object_manager.root
<KernelObject "\" (type="Directory")>
# The objects of type "Directory" can be acceded just like a dict
>>> list(windows.system.object_manager.root)[:3]
[u'PendingRenameMutex', u'ObjectTypes', u'storqosfltport']
# Find an object by its path
>>> windows.system.object_manager["KnownDLLs\\kernel32.dll"]
<KernelObject "\KnownDLLs\kernel32.dll" (type="Section")>
>>> k32 = windows.system.object_manager["KnownDLLs\\kernel32.dll"]
>>> k32.name, k32.fullname, k32.type
('kernel32.dll', '\\KnownDLLs\\kernel32.dll', u'Section')
# Follow SymbolicLink object
>>> windows.system.object_manager["\\KnownDLLs\\KnownDLLPath"]
<KernelObject "\KnownDLLs\KnownDLLPath" (type="SymbolicLink")>
>>> windows.system.object_manager["\\KnownDLLs\\KnownDLLPath"].target
u'C:\\WINDOWS\\System32'
```
### Scheduled Task
The ``windows.system.task_scheduler`` object allows to query and create scheduled task.
**This part is still in developpement and the API may evolve**
```python
>>> windows.system.task_scheduler
<TaskService at 0x4774670>
>>> windows.system.task_scheduler.root
<TaskFolder "\" at 0x4774710>
>>> task = windows.system.task_scheduler.root.tasks[2]
>>> task
<Task "DemoTask" at 0x47748f0>
>>> task.name
u'DemoTask'
# Explore task actions
>>> task.definition.actions[1]
<ExecAction at 0x4774800>
>>> task.definition.actions[1].path
u'c:\\windows\\python\\python.exe'
>>> task.definition.actions[1].arguments
u'yolo.py --test'
```
### Event logs
The ``windows.system.event_log`` object allows to query event logs.
**This part is still in developpement and the API may evolve**
```python
>>> windows.system.event_log
<windows.winobject.event_log.EvtlogManager object at 0x04A78270>
# Find a channel by its name
>>> chan = windows.system.event_log["Microsoft-Windows-Windows Firewall With Advanced Security/Firewall"]
>>> chan
<EvtChannel "Microsoft-Windows-Windows Firewall With Advanced Security/Firewall">
# Open .evtx files
>>> windows.system.event_log["test.evtx"]
<EvtFile "test.evtx">
# Query a channel for all events
>>> chan.query().all()[:2]
[<EvtEvent id="2004" time="2018-07-12 07:44:08.081504">, <EvtEvent id="2006" time="2018-07-12 07:57:59.806938">]
# Query a channel for some ids
>>> chan.query(ids=2004).all()[:2]
[<EvtEvent id="2004" time="2018-07-12 07:44:08.081504">, <EvtEvent id="2004" time="2018-07-12 07:57:59.815156">]
# Query a channel via XPATH
>>> evt = chan.query("Event/EventData[Data='Netflix']").all()[0]
# Explore event information
>>> evt
<EvtEvent id="2006" time="2018-07-17 10:32:39.160423">
>>> evt.data
{u'ModifyingUser': 69828304, u'RuleName': u'Netflix', u'ModifyingApplication': ...}
```
### ALPC-RPC
#### ALPC
@@ -295,28 +422,28 @@ import windows
import windows.debug
import windows.test
import windows.native_exec.simple_x86 as x86
import windows.generated_def as gdef
from windows.test import pop_calc_32
from windows.generated_def import EXCEPTION_ACCESS_VIOLATION
from windows.test import pop_proc_32
class MyDebugger(windows.debug.Debugger):
def on_exception(self, exception):
code = exception.ExceptionRecord.ExceptionCode
addr = exception.ExceptionRecord.ExceptionAddress
print("Got exception {0} at 0x{1:x}".format(code, addr))
if code == EXCEPTION_ACCESS_VIOLATION:
if code == gdef.EXCEPTION_ACCESS_VIOLATION:
print("Access Violation: kill target process")
self.current_process.exit()
calc = windows.test.pop_calc_32(dwCreationFlags=DEBUG_PROCESS)
calc = windows.test.pop_proc_32(dwCreationFlags=gdef.DEBUG_PROCESS)
d = MyDebugger(calc)
calc.execute(x86.assemble("int3; mov [0x42424242], EAX; ret"))
d.loop()
## Ouput ##
Got exception EXCEPTION_BREAKPOINT(0x80000003L) at 0x77e13c7d
Got exception EXCEPTION_BREAKPOINT(0x80000003L) at 0x230000
Got exception EXCEPTION_ACCESS_VIOLATION(0xc0000005L) at 0x230001
Got exception EXCEPTION_BREAKPOINT(0x80000003) at 0x77e13c7d
Got exception EXCEPTION_BREAKPOINT(0x80000003) at 0x230000
Got exception EXCEPTION_ACCESS_VIOLATION(0xc0000005) at 0x230001
Access Violation: kill target process
```
@@ -375,10 +502,10 @@ print("Done!")
Code addr = 0x6a0002
GOT AN HXBP at 0x6a0002
EXCEPTION !!!! Got a EXCEPTION_SINGLE_STEP(0x80000004L) at 0x6a0003
EXCEPTION !!!! Got a EXCEPTION_SINGLE_STEP(0x80000004L) at 0x6a0004
EXCEPTION !!!! Got a EXCEPTION_SINGLE_STEP(0x80000004L) at 0x6a0005
EXCEPTION !!!! Got a EXCEPTION_SINGLE_STEP(0x80000004L) at 0x770c7c04
EXCEPTION !!!! Got a EXCEPTION_SINGLE_STEP(0x80000004) at 0x6a0003
EXCEPTION !!!! Got a EXCEPTION_SINGLE_STEP(0x80000004) at 0x6a0004
EXCEPTION !!!! Got a EXCEPTION_SINGLE_STEP(0x80000004) at 0x6a0005
EXCEPTION !!!! Got a EXCEPTION_SINGLE_STEP(0x80000004) at 0x770c7c04
Done!
```
@@ -391,9 +518,12 @@ The local debugger handles
### Other stuff (see doc / samples)
- Network
- Services
- COM
## Acknowledgments
* clmntb for his initial work on ``windows.security``
[LKD_GITHUB]: https://github.com/sogeti-esec-lab/LKD/
[SAMPLE_DIR]: https://github.com/hakril/PythonForWindows/tree/master/samples
+14 -4
View File
@@ -1,10 +1,20 @@
TODO:
=== CRITICAL BEFORE 0.4 ===
-- CRITICAL BEFORE 0.6 ? --
- Document / fix / release:
- windows.bits
- window
- Ndr:
- Handle les struct conformant imbriquees
- Handle le packing de struct specifique
======
- DBG
- FIX BP API !!
- add_bp(target=XXX) vs del_bp(targets=XXX) ....
- Verif multiple bp at same place..
- Verif multiple pending at same place
- Test !! (bp, BP_HX, bp on only on process, bp_hx on only one thread..)
@@ -34,9 +44,8 @@ TODO:
- winobject\exception.py
- large part could be rewritten with ctypes-generation extended-def
- add winobject/window.py + winobject/kernobj.py to System()
- Some test/doc on both
- add winobject/window.py
- Some test/doc
- wintrust doc:
add : https://blogs.msdn.microsoft.com/winsdk/2016/01/05/why-cryptcatadmincalchashfromfilehandle-fails-with-a-seemingly-unexpected-error-code/
@@ -54,6 +63,7 @@ TODO:
Documentation
* verif samples
* windows.bits
- Document change in CurrentProcess read/write memory behavior ?
RESSOURCE
* read http://www.codeproject.com/Articles/18975/Listing-Used-Files
+3 -3
View File
@@ -9,7 +9,7 @@ from simpleparser import *
class WinComParser(Parser):
PARAM_INFO = ["__RPC__deref_out", "__RPC__in", "__RPC__deref_out_opt", "__RPC__out", "__RPC__in_opt",
"__RPC__deref_opt_inout_opt", "__in", "__out", "__out_opt", "__in_opt", "__inout",
"__reserved", "__RPC__in_opt_string", "__RPC__inout_opt", "__RPC__in_string", "__deref_out_opt"]
"__reserved", "__RPC__in_opt_string", "__RPC__inout_opt", "__RPC__in_string", "__deref_out_opt", "__RPC__inout"]
PARAM_INFO_WITH_VALUE = ["__RPC__in_ecount", "__RPC__out_ecount_part", "__RPC__in_ecount_full",
"__RPC__in_range", "__RPC__out_ecount_full", "__out_ecount_opt", "__out_ecount", "__in_ecount_opt",
"__in_ecount", "__out_bcount_opt", "__out_bcount", "__in_bcount", "__in_bcount_opt", "__RPC__out_ecount_full_string"]
@@ -77,7 +77,7 @@ class WinComParser(Parser):
args.append(self.parse_argument())
#print("Pass <{0}>".format(p))
self.next_token()
self.assert_token_type(ColonToken)
self.assert_token_type(SemiColonToken)
return ret_type.value, method_name.value, args
def parse(self):
@@ -113,7 +113,7 @@ class WinComParser(Parser):
self.next_token()
self.assert_token_type(StarToken)
typedefptr = self.assert_token_type(NameToken).value
self.assert_token_type(ColonToken)
self.assert_token_type(SemiColonToken)
res.typedefptr = typedefptr
return res
@@ -1,25 +1,25 @@
typedef struct ICallFrameWalkerVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
ICallFrameWalker * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
ICallFrameWalker * This);
ULONG ( STDMETHODCALLTYPE *Release )(
ICallFrameWalker * This);
HRESULT ( STDMETHODCALLTYPE *OnWalkInterface )(
ICallFrameWalker * This,
/* [in] */ REFIID iid,
/* [in] */ PVOID *ppvInterface,
/* [in] */ BOOL fIn,
/* [in] */ BOOL fOut);
END_INTERFACE
} ICallFrameWalkerVtbl;
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
ICallFrameWalker * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
ICallFrameWalker * This);
ULONG ( STDMETHODCALLTYPE *Release )(
ICallFrameWalker * This);
HRESULT ( STDMETHODCALLTYPE *OnWalkInterface )(
ICallFrameWalker * This,
/* [in] */ REFIID iid,
/* [in] */ PVOID *ppvInterface,
/* [in] */ BOOL fIn,
/* [in] */ BOOL fOut);
END_INTERFACE
} ICallFrameWalkerVtbl;
@@ -0,0 +1,59 @@
typedef struct IActionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IAction * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IAction * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IAction * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
IAction * This,
/* [out] */ UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
IAction * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
IAction * This,
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [range][in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IAction * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Id )(
IAction * This,
/* [retval][out] */ BSTR *pId);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Id )(
IAction * This,
/* [in] */ BSTR Id);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(
IAction * This,
/* [retval][out] */ TASK_ACTION_TYPE *pType);
END_INTERFACE
} IActionVtbl;
@@ -0,0 +1,88 @@
typedef struct IActionCollectionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IActionCollection * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IActionCollection * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IActionCollection * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
IActionCollection * This,
/* [out] */ UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
IActionCollection * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
IActionCollection * This,
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [range][in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IActionCollection * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(
IActionCollection * This,
/* [retval][out] */ long *pCount);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(
IActionCollection * This,
/* [in] */ long index,
/* [retval][out] */ IAction **ppAction);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(
IActionCollection * This,
/* [retval][out] */ IUnknown **ppEnum);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_XmlText )(
IActionCollection * This,
/* [retval][out] */ BSTR *pText);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_XmlText )(
IActionCollection * This,
/* [in] */ BSTR text);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Create )(
IActionCollection * This,
/* [in] */ TASK_ACTION_TYPE type,
/* [retval][out] */ IAction **ppAction);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Remove )(
IActionCollection * This,
/* [in] */ VARIANT index);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Clear )(
IActionCollection * This);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Context )(
IActionCollection * This,
/* [retval][out] */ BSTR *pContext);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Context )(
IActionCollection * This,
/* [in] */ BSTR context);
END_INTERFACE
} IActionCollectionVtbl;
@@ -0,0 +1,75 @@
typedef struct IComHandlerActionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IComHandlerAction * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IComHandlerAction * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IComHandlerAction * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
IComHandlerAction * This,
/* [out] */ UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
IComHandlerAction * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
IComHandlerAction * This,
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [range][in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IComHandlerAction * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Id )(
IComHandlerAction * This,
/* [retval][out] */ BSTR *pId);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Id )(
IComHandlerAction * This,
/* [in] */ BSTR Id);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(
IComHandlerAction * This,
/* [retval][out] */ TASK_ACTION_TYPE *pType);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ClassId )(
IComHandlerAction * This,
/* [retval][out] */ BSTR *pClsid);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ClassId )(
IComHandlerAction * This,
/* [in] */ BSTR clsid);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Data )(
IComHandlerAction * This,
/* [retval][out] */ BSTR *pData);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Data )(
IComHandlerAction * This,
/* [in] */ BSTR data);
END_INTERFACE
} IComHandlerActionVtbl;
@@ -0,0 +1,139 @@
typedef struct IEmailActionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IEmailAction * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IEmailAction * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IEmailAction * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
IEmailAction * This,
/* [out] */ UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
IEmailAction * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
IEmailAction * This,
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [range][in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IEmailAction * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Id )(
IEmailAction * This,
/* [retval][out] */ BSTR *pId);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Id )(
IEmailAction * This,
/* [in] */ BSTR Id);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(
IEmailAction * This,
/* [retval][out] */ TASK_ACTION_TYPE *pType);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Server )(
IEmailAction * This,
/* [retval][out] */ BSTR *pServer);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Server )(
IEmailAction * This,
/* [in] */ BSTR server);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Subject )(
IEmailAction * This,
/* [retval][out] */ BSTR *pSubject);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Subject )(
IEmailAction * This,
/* [in] */ BSTR subject);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_To )(
IEmailAction * This,
/* [retval][out] */ BSTR *pTo);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_To )(
IEmailAction * This,
/* [in] */ BSTR to);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Cc )(
IEmailAction * This,
/* [retval][out] */ BSTR *pCc);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Cc )(
IEmailAction * This,
/* [in] */ BSTR cc);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Bcc )(
IEmailAction * This,
/* [retval][out] */ BSTR *pBcc);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Bcc )(
IEmailAction * This,
/* [in] */ BSTR bcc);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ReplyTo )(
IEmailAction * This,
/* [retval][out] */ BSTR *pReplyTo);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ReplyTo )(
IEmailAction * This,
/* [in] */ BSTR replyTo);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_From )(
IEmailAction * This,
/* [retval][out] */ BSTR *pFrom);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_From )(
IEmailAction * This,
/* [in] */ BSTR from);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_HeaderFields )(
IEmailAction * This,
/* [retval][out] */ ITaskNamedValueCollection **ppHeaderFields);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_HeaderFields )(
IEmailAction * This,
/* [in] */ ITaskNamedValueCollection *pHeaderFields);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Body )(
IEmailAction * This,
/* [retval][out] */ BSTR *pBody);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Body )(
IEmailAction * This,
/* [in] */ BSTR body);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Attachments )(
IEmailAction * This,
/* [retval][out] */ SAFEARRAY * *pAttachements);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Attachments )(
IEmailAction * This,
/* [max_is][in] */ SAFEARRAY * pAttachements);
END_INTERFACE
} IEmailActionVtbl;
@@ -0,0 +1,83 @@
typedef struct IExecActionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IExecAction * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IExecAction * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IExecAction * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
IExecAction * This,
/* [out] */ UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
IExecAction * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
IExecAction * This,
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [range][in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IExecAction * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Id )(
IExecAction * This,
/* [retval][out] */ BSTR *pId);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Id )(
IExecAction * This,
/* [in] */ BSTR Id);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(
IExecAction * This,
/* [retval][out] */ TASK_ACTION_TYPE *pType);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Path )(
IExecAction * This,
/* [retval][out] */ BSTR *pPath);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Path )(
IExecAction * This,
/* [in] */ BSTR path);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Arguments )(
IExecAction * This,
/* [retval][out] */ BSTR *pArgument);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Arguments )(
IExecAction * This,
/* [in] */ BSTR argument);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_WorkingDirectory )(
IExecAction * This,
/* [retval][out] */ BSTR *pWorkingDirectory);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_WorkingDirectory )(
IExecAction * This,
/* [in] */ BSTR workingDirectory);
END_INTERFACE
} IExecActionVtbl;
@@ -0,0 +1,79 @@
typedef struct IIdleSettingsVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IIdleSettings * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IIdleSettings * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IIdleSettings * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
IIdleSettings * This,
/* [out] */ UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
IIdleSettings * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
IIdleSettings * This,
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [range][in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IIdleSettings * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IdleDuration )(
IIdleSettings * This,
/* [retval][out] */ BSTR *pDelay);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IdleDuration )(
IIdleSettings * This,
/* [in] */ BSTR delay);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_WaitTimeout )(
IIdleSettings * This,
/* [retval][out] */ BSTR *pTimeout);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_WaitTimeout )(
IIdleSettings * This,
/* [in] */ BSTR timeout);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_StopOnIdleEnd )(
IIdleSettings * This,
/* [retval][out] */ VARIANT_BOOL *pStop);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_StopOnIdleEnd )(
IIdleSettings * This,
/* [in] */ VARIANT_BOOL stop);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RestartOnIdle )(
IIdleSettings * This,
/* [retval][out] */ VARIANT_BOOL *pRestart);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_RestartOnIdle )(
IIdleSettings * This,
/* [in] */ VARIANT_BOOL restart);
END_INTERFACE
} IIdleSettingsVtbl;
@@ -0,0 +1,63 @@
typedef struct INetworkSettingsVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
INetworkSettings * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
INetworkSettings * This);
ULONG ( STDMETHODCALLTYPE *Release )(
INetworkSettings * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
INetworkSettings * This,
/* [out] */ UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
INetworkSettings * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
INetworkSettings * This,
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [range][in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
INetworkSettings * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Name )(
INetworkSettings * This,
/* [retval][out] */ BSTR *pName);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Name )(
INetworkSettings * This,
/* [in] */ BSTR name);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Id )(
INetworkSettings * This,
/* [retval][out] */ BSTR *pId);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Id )(
INetworkSettings * This,
/* [in] */ BSTR id);
END_INTERFACE
} INetworkSettingsVtbl;
@@ -0,0 +1,95 @@
typedef struct IPrincipalVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IPrincipal * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IPrincipal * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IPrincipal * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
IPrincipal * This,
/* [out] */ UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
IPrincipal * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
IPrincipal * This,
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [range][in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IPrincipal * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Id )(
IPrincipal * This,
/* [retval][out] */ BSTR *pId);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Id )(
IPrincipal * This,
/* [in] */ BSTR Id);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DisplayName )(
IPrincipal * This,
/* [retval][out] */ BSTR *pName);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_DisplayName )(
IPrincipal * This,
/* [in] */ BSTR name);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UserId )(
IPrincipal * This,
/* [retval][out] */ BSTR *pUser);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_UserId )(
IPrincipal * This,
/* [in] */ BSTR user);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_LogonType )(
IPrincipal * This,
/* [retval][out] */ TASK_LOGON_TYPE *pLogon);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_LogonType )(
IPrincipal * This,
/* [in] */ TASK_LOGON_TYPE logon);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_GroupId )(
IPrincipal * This,
/* [retval][out] */ BSTR *pGroup);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_GroupId )(
IPrincipal * This,
/* [in] */ BSTR group);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RunLevel )(
IPrincipal * This,
/* [retval][out] */ TASK_RUNLEVEL_TYPE *pRunLevel);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_RunLevel )(
IPrincipal * This,
/* [in] */ TASK_RUNLEVEL_TYPE runLevel);
END_INTERFACE
} IPrincipalVtbl;
@@ -0,0 +1,130 @@
typedef struct IRegisteredTaskVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IRegisteredTask * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IRegisteredTask * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IRegisteredTask * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IRegisteredTask * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IRegisteredTask * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IRegisteredTask * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IRegisteredTask * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )(
__RPC__in IRegisteredTask * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *pName);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Path )(
__RPC__in IRegisteredTask * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *pPath);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_State )(
__RPC__in IRegisteredTask * This,
/* [retval][out] */ __RPC__out TASK_STATE *pState);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Enabled )(
__RPC__in IRegisteredTask * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *pEnabled);
/* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_Enabled )(
__RPC__in IRegisteredTask * This,
VARIANT_BOOL enabled);
/* [id] */ HRESULT ( STDMETHODCALLTYPE *Run )(
__RPC__in IRegisteredTask * This,
/* [in] */ VARIANT params,
/* [retval][out] */ __RPC__deref_out_opt IRunningTask **ppRunningTask);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RunEx )(
__RPC__in IRegisteredTask * This,
/* [in] */ VARIANT params,
/* [in] */ LONG flags,
/* [in] */ LONG sessionID,
/* [in] */ __RPC__in BSTR user,
/* [retval][out] */ __RPC__deref_out_opt IRunningTask **ppRunningTask);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetInstances )(
__RPC__in IRegisteredTask * This,
/* [in] */ LONG flags,
/* [retval][out] */ __RPC__deref_out_opt IRunningTaskCollection **ppRunningTasks);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_LastRunTime )(
__RPC__in IRegisteredTask * This,
/* [retval][out] */ __RPC__out DATE *pLastRunTime);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_LastTaskResult )(
__RPC__in IRegisteredTask * This,
/* [retval][out] */ __RPC__out LONG *pLastTaskResult);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_NumberOfMissedRuns )(
__RPC__in IRegisteredTask * This,
/* [retval][out] */ __RPC__out LONG *pNumberOfMissedRuns);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_NextRunTime )(
__RPC__in IRegisteredTask * This,
/* [retval][out] */ __RPC__out DATE *pNextRunTime);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Definition )(
__RPC__in IRegisteredTask * This,
/* [retval][out] */ __RPC__deref_out_opt ITaskDefinition **ppDefinition);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Xml )(
__RPC__in IRegisteredTask * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *pXml);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSecurityDescriptor )(
__RPC__in IRegisteredTask * This,
/* [in] */ LONG securityInformation,
/* [retval][out] */ __RPC__deref_out_opt BSTR *pSddl);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetSecurityDescriptor )(
__RPC__in IRegisteredTask * This,
/* [in] */ __RPC__in BSTR sddl,
/* [in] */ LONG flags);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Stop )(
__RPC__in IRegisteredTask * This,
/* [in] */ LONG flags);
/* [helpstring][hidden][restricted] */ HRESULT ( STDMETHODCALLTYPE *GetRunTimes )(
__RPC__in IRegisteredTask * This,
/* [in] */ __RPC__in const LPSYSTEMTIME pstStart,
/* [in] */ __RPC__in const LPSYSTEMTIME pstEnd,
/* [out][in] */ __RPC__inout DWORD *pCount,
/* [out] */ __RPC__deref_out_opt LPSYSTEMTIME *pRunTimes);
END_INTERFACE
} IRegisteredTaskVtbl;
@@ -0,0 +1,60 @@
typedef struct IRegisteredTaskCollectionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IRegisteredTaskCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IRegisteredTaskCollection * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IRegisteredTaskCollection * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IRegisteredTaskCollection * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IRegisteredTaskCollection * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IRegisteredTaskCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IRegisteredTaskCollection * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(
__RPC__in IRegisteredTaskCollection * This,
/* [retval][out] */ __RPC__out LONG *pCount);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(
__RPC__in IRegisteredTaskCollection * This,
/* [in] */ VARIANT index,
/* [retval][out] */ __RPC__deref_out_opt IRegisteredTask **ppRegisteredTask);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(
__RPC__in IRegisteredTaskCollection * This,
/* [retval][out] */ __RPC__deref_out_opt IUnknown **ppEnum);
END_INTERFACE
} IRegisteredTaskCollectionVtbl;
@@ -0,0 +1,119 @@
typedef struct IRegistrationInfoVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IRegistrationInfo * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IRegistrationInfo * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IRegistrationInfo * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
IRegistrationInfo * This,
/* [out] */ UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
IRegistrationInfo * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
IRegistrationInfo * This,
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [range][in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IRegistrationInfo * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Description )(
IRegistrationInfo * This,
/* [retval][out] */ BSTR *pDescription);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Description )(
IRegistrationInfo * This,
/* [in] */ BSTR description);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Author )(
IRegistrationInfo * This,
/* [retval][out] */ BSTR *pAuthor);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Author )(
IRegistrationInfo * This,
/* [in] */ BSTR author);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Version )(
IRegistrationInfo * This,
/* [retval][out] */ BSTR *pVersion);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Version )(
IRegistrationInfo * This,
/* [in] */ BSTR version);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Date )(
IRegistrationInfo * This,
/* [retval][out] */ BSTR *pDate);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Date )(
IRegistrationInfo * This,
/* [in] */ BSTR date);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Documentation )(
IRegistrationInfo * This,
/* [retval][out] */ BSTR *pDocumentation);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Documentation )(
IRegistrationInfo * This,
/* [in] */ BSTR documentation);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_XmlText )(
IRegistrationInfo * This,
/* [retval][out] */ BSTR *pText);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_XmlText )(
IRegistrationInfo * This,
/* [in] */ BSTR text);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_URI )(
IRegistrationInfo * This,
/* [retval][out] */ BSTR *pUri);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_URI )(
IRegistrationInfo * This,
/* [in] */ BSTR uri);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SecurityDescriptor )(
IRegistrationInfo * This,
/* [retval][out] */ VARIANT *pSddl);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_SecurityDescriptor )(
IRegistrationInfo * This,
/* [in] */ VARIANT sddl);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Source )(
IRegistrationInfo * This,
/* [retval][out] */ BSTR *pSource);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Source )(
IRegistrationInfo * This,
/* [in] */ BSTR source);
END_INTERFACE
} IRegistrationInfoVtbl;
@@ -0,0 +1,71 @@
typedef struct IRepetitionPatternVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IRepetitionPattern * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IRepetitionPattern * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IRepetitionPattern * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
IRepetitionPattern * This,
/* [out] */ UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
IRepetitionPattern * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
IRepetitionPattern * This,
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [range][in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IRepetitionPattern * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Interval )(
IRepetitionPattern * This,
/* [retval][out] */ BSTR *pInterval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Interval )(
IRepetitionPattern * This,
/* [in] */ BSTR interval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Duration )(
IRepetitionPattern * This,
/* [retval][out] */ BSTR *pDuration);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Duration )(
IRepetitionPattern * This,
/* [in] */ BSTR duration);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_StopAtDurationEnd )(
IRepetitionPattern * This,
/* [retval][out] */ VARIANT_BOOL *pStop);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_StopAtDurationEnd )(
IRepetitionPattern * This,
/* [in] */ VARIANT_BOOL stop);
END_INTERFACE
} IRepetitionPatternVtbl;
@@ -0,0 +1,77 @@
typedef struct IRunningTaskVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IRunningTask * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IRunningTask * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IRunningTask * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IRunningTask * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IRunningTask * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IRunningTask * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IRunningTask * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )(
__RPC__in IRunningTask * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *pName);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_InstanceGuid )(
__RPC__in IRunningTask * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *pGuid);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Path )(
__RPC__in IRunningTask * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *pPath);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_State )(
__RPC__in IRunningTask * This,
/* [retval][out] */ __RPC__out TASK_STATE *pState);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_CurrentAction )(
__RPC__in IRunningTask * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *pName);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Stop )(
__RPC__in IRunningTask * This);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Refresh )(
__RPC__in IRunningTask * This);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_EnginePID )(
__RPC__in IRunningTask * This,
/* [retval][out] */ __RPC__out DWORD *pPID);
END_INTERFACE
} IRunningTaskVtbl;
@@ -0,0 +1,60 @@
typedef struct IRunningTaskCollectionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IRunningTaskCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IRunningTaskCollection * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IRunningTaskCollection * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in IRunningTaskCollection * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in IRunningTaskCollection * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in IRunningTaskCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IRunningTaskCollection * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(
__RPC__in IRunningTaskCollection * This,
/* [retval][out] */ __RPC__out LONG *pCount);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(
__RPC__in IRunningTaskCollection * This,
/* [in] */ VARIANT index,
/* [retval][out] */ __RPC__deref_out_opt IRunningTask **ppRunningTask);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(
__RPC__in IRunningTaskCollection * This,
/* [retval][out] */ __RPC__deref_out_opt IUnknown **ppEnum);
END_INTERFACE
} IRunningTaskCollectionVtbl;
@@ -0,0 +1,75 @@
typedef struct IShowMessageActionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IShowMessageAction * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IShowMessageAction * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IShowMessageAction * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
IShowMessageAction * This,
/* [out] */ UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
IShowMessageAction * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
IShowMessageAction * This,
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [range][in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
IShowMessageAction * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Id )(
IShowMessageAction * This,
/* [retval][out] */ BSTR *pId);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Id )(
IShowMessageAction * This,
/* [in] */ BSTR Id);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(
IShowMessageAction * This,
/* [retval][out] */ TASK_ACTION_TYPE *pType);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Title )(
IShowMessageAction * This,
/* [retval][out] */ BSTR *pTitle);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Title )(
IShowMessageAction * This,
/* [in] */ BSTR title);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MessageBody )(
IShowMessageAction * This,
/* [retval][out] */ BSTR *pMessageBody);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_MessageBody )(
IShowMessageAction * This,
/* [in] */ BSTR messageBody);
END_INTERFACE
} IShowMessageActionVtbl;
@@ -0,0 +1,103 @@
typedef struct ITaskDefinitionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
ITaskDefinition * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
ITaskDefinition * This);
ULONG ( STDMETHODCALLTYPE *Release )(
ITaskDefinition * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
ITaskDefinition * This,
/* [out] */ UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
ITaskDefinition * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
ITaskDefinition * This,
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [range][in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
ITaskDefinition * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RegistrationInfo )(
ITaskDefinition * This,
/* [retval][out] */ IRegistrationInfo **ppRegistrationInfo);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_RegistrationInfo )(
ITaskDefinition * This,
/* [in] */ IRegistrationInfo *pRegistrationInfo);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Triggers )(
ITaskDefinition * This,
/* [retval][out] */ ITriggerCollection **ppTriggers);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Triggers )(
ITaskDefinition * This,
/* [in] */ ITriggerCollection *pTriggers);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )(
ITaskDefinition * This,
/* [retval][out] */ ITaskSettings **ppSettings);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Settings )(
ITaskDefinition * This,
/* [in] */ ITaskSettings *pSettings);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Data )(
ITaskDefinition * This,
/* [retval][out] */ BSTR *pData);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Data )(
ITaskDefinition * This,
/* [in] */ BSTR data);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Principal )(
ITaskDefinition * This,
/* [retval][out] */ IPrincipal **ppPrincipal);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Principal )(
ITaskDefinition * This,
/* [in] */ IPrincipal *pPrincipal);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Actions )(
ITaskDefinition * This,
/* [retval][out] */ IActionCollection **ppActions);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Actions )(
ITaskDefinition * This,
/* [in] */ IActionCollection *pActions);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_XmlText )(
ITaskDefinition * This,
/* [retval][out] */ BSTR *pXml);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_XmlText )(
ITaskDefinition * This,
/* [in] */ BSTR xml);
END_INTERFACE
} ITaskDefinitionVtbl;
@@ -0,0 +1,123 @@
typedef struct ITaskFolderVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in ITaskFolder * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in ITaskFolder * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in ITaskFolder * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in ITaskFolder * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in ITaskFolder * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in ITaskFolder * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
ITaskFolder * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )(
__RPC__in ITaskFolder * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *pName);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Path )(
__RPC__in ITaskFolder * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *pPath);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetFolder )(
__RPC__in ITaskFolder * This,
__RPC__in BSTR path,
/* [retval][out] */ __RPC__deref_out_opt ITaskFolder **ppFolder);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetFolders )(
__RPC__in ITaskFolder * This,
/* [in] */ LONG flags,
/* [retval][out] */ __RPC__deref_out_opt ITaskFolderCollection **ppFolders);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CreateFolder )(
__RPC__in ITaskFolder * This,
/* [in] */ __RPC__in BSTR subFolderName,
/* [optional][in] */ VARIANT sddl,
/* [retval][out] */ __RPC__deref_out_opt ITaskFolder **ppFolder);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *DeleteFolder )(
__RPC__in ITaskFolder * This,
__RPC__in BSTR subFolderName,
/* [in] */ LONG flags);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetTask )(
__RPC__in ITaskFolder * This,
/* [in] */ __RPC__in BSTR path,
/* [retval][out] */ __RPC__deref_out_opt IRegisteredTask **ppTask);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetTasks )(
__RPC__in ITaskFolder * This,
/* [in] */ LONG flags,
/* [retval][out] */ __RPC__deref_out_opt IRegisteredTaskCollection **ppTasks);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *DeleteTask )(
__RPC__in ITaskFolder * This,
/* [in] */ __RPC__in BSTR name,
/* [in] */ LONG flags);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RegisterTask )(
__RPC__in ITaskFolder * This,
/* [in] */ __RPC__in BSTR path,
/* [in] */ __RPC__in BSTR xmlText,
/* [in] */ LONG flags,
/* [in] */ VARIANT userId,
/* [in] */ VARIANT password,
/* [in] */ TASK_LOGON_TYPE logonType,
/* [optional][in] */ VARIANT sddl,
/* [retval][out] */ __RPC__deref_out_opt IRegisteredTask **ppTask);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RegisterTaskDefinition )(
__RPC__in ITaskFolder * This,
/* [in] */ __RPC__in BSTR path,
/* [in] */ __RPC__in_opt ITaskDefinition *pDefinition,
/* [in] */ LONG flags,
/* [in] */ VARIANT userId,
/* [in] */ VARIANT password,
/* [in] */ TASK_LOGON_TYPE logonType,
/* [optional][in] */ VARIANT sddl,
/* [retval][out] */ __RPC__deref_out_opt IRegisteredTask **ppTask);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSecurityDescriptor )(
__RPC__in ITaskFolder * This,
LONG securityInformation,
/* [retval][out] */ __RPC__deref_out_opt BSTR *pSddl);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetSecurityDescriptor )(
__RPC__in ITaskFolder * This,
/* [in] */ __RPC__in BSTR sddl,
/* [in] */ LONG flags);
END_INTERFACE
} ITaskFolderVtbl;
@@ -0,0 +1,60 @@
typedef struct ITaskFolderCollectionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in ITaskFolderCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in ITaskFolderCollection * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in ITaskFolderCollection * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in ITaskFolderCollection * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in ITaskFolderCollection * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in ITaskFolderCollection * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
ITaskFolderCollection * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(
__RPC__in ITaskFolderCollection * This,
/* [retval][out] */ __RPC__out LONG *pCount);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(
__RPC__in ITaskFolderCollection * This,
/* [in] */ VARIANT index,
/* [retval][out] */ __RPC__deref_out_opt ITaskFolder **ppFolder);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(
__RPC__in ITaskFolderCollection * This,
/* [retval][out] */ __RPC__deref_out_opt IUnknown **ppEnum);
END_INTERFACE
} ITaskFolderCollectionVtbl;
@@ -0,0 +1,73 @@
typedef struct ITaskNamedValueCollectionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
ITaskNamedValueCollection * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
ITaskNamedValueCollection * This);
ULONG ( STDMETHODCALLTYPE *Release )(
ITaskNamedValueCollection * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
ITaskNamedValueCollection * This,
/* [out] */ UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
ITaskNamedValueCollection * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
ITaskNamedValueCollection * This,
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [range][in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
ITaskNamedValueCollection * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(
ITaskNamedValueCollection * This,
/* [retval][out] */ long *pCount);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(
ITaskNamedValueCollection * This,
/* [in] */ LONG index,
/* [retval][out] */ ITaskNamedValuePair **ppPair);
/* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(
ITaskNamedValueCollection * This,
/* [retval][out] */ IUnknown **ppEnum);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Create )(
ITaskNamedValueCollection * This,
/* [in] */ BSTR name,
/* [in] */ BSTR value,
/* [retval][out] */ ITaskNamedValuePair **ppPair);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Remove )(
ITaskNamedValueCollection * This,
/* [in] */ LONG index);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Clear )(
ITaskNamedValueCollection * This);
END_INTERFACE
} ITaskNamedValueCollectionVtbl;
@@ -0,0 +1,63 @@
typedef struct ITaskNamedValuePairVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
ITaskNamedValuePair * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
ITaskNamedValuePair * This);
ULONG ( STDMETHODCALLTYPE *Release )(
ITaskNamedValuePair * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
ITaskNamedValuePair * This,
/* [out] */ UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
ITaskNamedValuePair * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
ITaskNamedValuePair * This,
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [range][in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
ITaskNamedValuePair * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Name )(
ITaskNamedValuePair * This,
/* [retval][out] */ BSTR *pName);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Name )(
ITaskNamedValuePair * This,
/* [in] */ BSTR name);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Value )(
ITaskNamedValuePair * This,
/* [retval][out] */ BSTR *pValue);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Value )(
ITaskNamedValuePair * This,
/* [in] */ BSTR value);
END_INTERFACE
} ITaskNamedValuePairVtbl;
@@ -0,0 +1,89 @@
typedef struct ITaskServiceVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in ITaskService * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in ITaskService * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in ITaskService * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
__RPC__in ITaskService * This,
/* [out] */ __RPC__out UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
__RPC__in ITaskService * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
__RPC__in ITaskService * This,
/* [in] */ __RPC__in REFIID riid,
/* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
/* [range][in] */ __RPC__in_range(0,16384) UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
ITaskService * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetFolder )(
__RPC__in ITaskService * This,
/* [in] */ __RPC__in BSTR path,
/* [retval][out] */ __RPC__deref_out_opt ITaskFolder **ppFolder);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetRunningTasks )(
__RPC__in ITaskService * This,
/* [in] */ LONG flags,
/* [retval][out] */ __RPC__deref_out_opt IRunningTaskCollection **ppRunningTasks);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *NewTask )(
__RPC__in ITaskService * This,
/* [in] */ DWORD flags,
/* [retval][out] */ __RPC__deref_out_opt ITaskDefinition **ppDefinition);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Connect )(
__RPC__in ITaskService * This,
/* [optional][in] */ VARIANT serverName,
/* [optional][in] */ VARIANT user,
/* [optional][in] */ VARIANT domain,
/* [optional][in] */ VARIANT password);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Connected )(
__RPC__in ITaskService * This,
/* [retval][out] */ __RPC__out VARIANT_BOOL *pConnected);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_TargetServer )(
__RPC__in ITaskService * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *pServer);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_ConnectedUser )(
__RPC__in ITaskService * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *pUser);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_ConnectedDomain )(
__RPC__in ITaskService * This,
/* [retval][out] */ __RPC__deref_out_opt BSTR *pDomain);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_HighestVersion )(
__RPC__in ITaskService * This,
/* [retval][out] */ __RPC__out DWORD *pVersion);
END_INTERFACE
} ITaskServiceVtbl;
@@ -0,0 +1,207 @@
typedef struct ITaskSettingsVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
ITaskSettings * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
ITaskSettings * This);
ULONG ( STDMETHODCALLTYPE *Release )(
ITaskSettings * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
ITaskSettings * This,
/* [out] */ UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
ITaskSettings * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
ITaskSettings * This,
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [range][in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
ITaskSettings * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AllowDemandStart )(
ITaskSettings * This,
/* [retval][out] */ VARIANT_BOOL *pAllowDemandStart);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_AllowDemandStart )(
ITaskSettings * This,
/* [in] */ VARIANT_BOOL allowDemandStart);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RestartInterval )(
ITaskSettings * This,
/* [retval][out] */ BSTR *pRestartInterval);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_RestartInterval )(
ITaskSettings * This,
/* [in] */ BSTR restartInterval);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RestartCount )(
ITaskSettings * This,
/* [retval][out] */ int *pRestartCount);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_RestartCount )(
ITaskSettings * This,
/* [in] */ int restartCount);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MultipleInstances )(
ITaskSettings * This,
/* [retval][out] */ TASK_INSTANCES_POLICY *pPolicy);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_MultipleInstances )(
ITaskSettings * This,
/* [in] */ TASK_INSTANCES_POLICY policy);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_StopIfGoingOnBatteries )(
ITaskSettings * This,
/* [retval][out] */ VARIANT_BOOL *pStopIfOnBatteries);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_StopIfGoingOnBatteries )(
ITaskSettings * This,
/* [in] */ VARIANT_BOOL stopIfOnBatteries);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DisallowStartIfOnBatteries )(
ITaskSettings * This,
/* [retval][out] */ VARIANT_BOOL *pDisallowStart);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_DisallowStartIfOnBatteries )(
ITaskSettings * This,
/* [in] */ VARIANT_BOOL disallowStart);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AllowHardTerminate )(
ITaskSettings * This,
/* [retval][out] */ VARIANT_BOOL *pAllowHardTerminate);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_AllowHardTerminate )(
ITaskSettings * This,
/* [in] */ VARIANT_BOOL allowHardTerminate);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_StartWhenAvailable )(
ITaskSettings * This,
/* [retval][out] */ VARIANT_BOOL *pStartWhenAvailable);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_StartWhenAvailable )(
ITaskSettings * This,
/* [in] */ VARIANT_BOOL startWhenAvailable);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_XmlText )(
ITaskSettings * This,
/* [retval][out] */ BSTR *pText);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_XmlText )(
ITaskSettings * This,
/* [in] */ BSTR text);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RunOnlyIfNetworkAvailable )(
ITaskSettings * This,
/* [retval][out] */ VARIANT_BOOL *pRunOnlyIfNetworkAvailable);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_RunOnlyIfNetworkAvailable )(
ITaskSettings * This,
/* [in] */ VARIANT_BOOL runOnlyIfNetworkAvailable);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ExecutionTimeLimit )(
ITaskSettings * This,
/* [retval][out] */ BSTR *pExecutionTimeLimit);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ExecutionTimeLimit )(
ITaskSettings * This,
/* [in] */ BSTR executionTimeLimit);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Enabled )(
ITaskSettings * This,
/* [retval][out] */ VARIANT_BOOL *pEnabled);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Enabled )(
ITaskSettings * This,
/* [in] */ VARIANT_BOOL enabled);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_DeleteExpiredTaskAfter )(
ITaskSettings * This,
/* [retval][out] */ BSTR *pExpirationDelay);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_DeleteExpiredTaskAfter )(
ITaskSettings * This,
/* [in] */ BSTR expirationDelay);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Priority )(
ITaskSettings * This,
/* [retval][out] */ int *pPriority);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Priority )(
ITaskSettings * This,
/* [in] */ int priority);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Compatibility )(
ITaskSettings * This,
/* [retval][out] */ TASK_COMPATIBILITY *pCompatLevel);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Compatibility )(
ITaskSettings * This,
/* [in] */ TASK_COMPATIBILITY compatLevel);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Hidden )(
ITaskSettings * This,
/* [retval][out] */ VARIANT_BOOL *pHidden);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Hidden )(
ITaskSettings * This,
/* [in] */ VARIANT_BOOL hidden);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_IdleSettings )(
ITaskSettings * This,
/* [retval][out] */ IIdleSettings **ppIdleSettings);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_IdleSettings )(
ITaskSettings * This,
/* [in] */ IIdleSettings *pIdleSettings);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_RunOnlyIfIdle )(
ITaskSettings * This,
/* [retval][out] */ VARIANT_BOOL *pRunOnlyIfIdle);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_RunOnlyIfIdle )(
ITaskSettings * This,
/* [in] */ VARIANT_BOOL runOnlyIfIdle);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_WakeToRun )(
ITaskSettings * This,
/* [retval][out] */ VARIANT_BOOL *pWake);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_WakeToRun )(
ITaskSettings * This,
/* [in] */ VARIANT_BOOL wake);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_NetworkSettings )(
ITaskSettings * This,
/* [retval][out] */ INetworkSettings **ppNetworkSettings);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_NetworkSettings )(
ITaskSettings * This,
/* [in] */ INetworkSettings *pNetworkSettings);
END_INTERFACE
} ITaskSettingsVtbl;
@@ -0,0 +1,99 @@
typedef struct ITriggerVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
ITrigger * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
ITrigger * This);
ULONG ( STDMETHODCALLTYPE *Release )(
ITrigger * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
ITrigger * This,
/* [out] */ UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
ITrigger * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
ITrigger * This,
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [range][in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
ITrigger * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Type )(
ITrigger * This,
/* [retval][out] */ TASK_TRIGGER_TYPE2 *pType);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Id )(
ITrigger * This,
/* [retval][out] */ BSTR *pId);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Id )(
ITrigger * This,
/* [in] */ BSTR id);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Repetition )(
ITrigger * This,
/* [retval][out] */ IRepetitionPattern **ppRepeat);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Repetition )(
ITrigger * This,
/* [in] */ IRepetitionPattern *pRepeat);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_ExecutionTimeLimit )(
ITrigger * This,
/* [retval][out] */ BSTR *pTimeLimit);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_ExecutionTimeLimit )(
ITrigger * This,
/* [in] */ BSTR timelimit);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_StartBoundary )(
ITrigger * This,
/* [retval][out] */ BSTR *pStart);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_StartBoundary )(
ITrigger * This,
/* [in] */ BSTR start);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_EndBoundary )(
ITrigger * This,
/* [retval][out] */ BSTR *pEnd);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_EndBoundary )(
ITrigger * This,
/* [in] */ BSTR end);
/* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Enabled )(
ITrigger * This,
/* [retval][out] */ VARIANT_BOOL *pEnabled);
/* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Enabled )(
ITrigger * This,
/* [in] */ VARIANT_BOOL enabled);
END_INTERFACE
} ITriggerVtbl;
@@ -0,0 +1,72 @@
typedef struct ITriggerCollectionVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
ITriggerCollection * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
ITriggerCollection * This);
ULONG ( STDMETHODCALLTYPE *Release )(
ITriggerCollection * This);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
ITriggerCollection * This,
/* [out] */ UINT *pctinfo);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
ITriggerCollection * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo **ppTInfo);
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
ITriggerCollection * This,
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [range][in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
ITriggerCollection * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(
ITriggerCollection * This,
/* [retval][out] */ long *pCount);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(
ITriggerCollection * This,
/* [in] */ long index,
/* [retval][out] */ ITrigger **ppTrigger);
/* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(
ITriggerCollection * This,
/* [retval][out] */ IUnknown **ppEnum);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Create )(
ITriggerCollection * This,
/* [in] */ TASK_TRIGGER_TYPE2 type,
/* [retval][out] */ ITrigger **ppTrigger);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Remove )(
ITriggerCollection * This,
/* [in] */ VARIANT index);
/* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Clear )(
ITriggerCollection * This);
END_INTERFACE
} ITriggerCollectionVtbl;
+44 -1
View File
@@ -4,12 +4,55 @@ import ctypes
generate_IID = IID.from_raw
class COMHRESULT(HRESULT):
_type_ = HRESULT._type_
def _check_retval_(self):
# We CAN NOT try to adapt the self.value and transform it with flags
# here, we need to do it with the errcheck
# So we have the peer-interface callback system on errcheck :)
return self.value # The value will be send to errcheck :)
class COMInterface(ctypes.c_void_p):
_functions_ = {
}
# So COMInterface completely bypass the HRESULT
# return value check on restype by setting the restype to COMHRESULT
# But we add the 'errcheck' callbakc capacity for all COMInterface and subclasses
# So the default implem of the callbakc must have the same behavior as
# standard HRESULT restype.
# This is why default errcheck callback call ctypes._check_HRESULT
def _default_errcheck(self, result, func, args):
ctypes._check_HRESULT(result)
return args
def __getattr__(self, name):
if name in self._functions_:
return functools.partial(self._functions_[name], self)
winfunc = self._functions_[name]
# Hacking the HRESULT _check_retval_ and
# letting COMInterface.errcheck do the work of validating / raising
winfunc.restype = COMHRESULT
effective_errcheck = getattr(self, "errcheck", self._default_errcheck)
winfunc.errcheck = effective_errcheck
return functools.partial(winfunc, self)
return super(COMInterface, self).__getattribute__(name)
def __repr__(self):
description = "<NULL>" if not self.value else ""
return "<{0}{1} at {2:#x}>".format(type(self).__name__, description, id(self))
# Simplified API for QueryInterface for interface embeding there IID
def query(self, interfacetype):
interface = interfacetype()
self.QueryInterface(interface.IID, interface)
return interface
@@ -0,0 +1,88 @@
#define PRODUCT_UNDEFINED 0x00000000
#define PRODUCT_ULTIMATE 0x00000001
#define PRODUCT_HOME_BASIC 0x00000002
#define PRODUCT_HOME_PREMIUM 0x00000003
#define PRODUCT_ENTERPRISE 0x00000004
#define PRODUCT_HOME_BASIC_N 0x00000005
#define PRODUCT_BUSINESS 0x00000006
#define PRODUCT_STANDARD_SERVER 0x00000007
#define PRODUCT_DATACENTER_SERVER 0x00000008
#define PRODUCT_SMALLBUSINESS_SERVER 0x00000009
#define PRODUCT_ENTERPRISE_SERVER 0x0000000A
#define PRODUCT_STARTER 0x0000000B
#define PRODUCT_DATACENTER_SERVER_CORE 0x0000000C
#define PRODUCT_STANDARD_SERVER_CORE 0x0000000D
#define PRODUCT_ENTERPRISE_SERVER_CORE 0x0000000E
#define PRODUCT_ENTERPRISE_SERVER_IA64 0x0000000F
#define PRODUCT_BUSINESS_N 0x00000010
#define PRODUCT_WEB_SERVER 0x00000011
#define PRODUCT_CLUSTER_SERVER 0x00000012
#define PRODUCT_HOME_SERVER 0x00000013
#define PRODUCT_STORAGE_EXPRESS_SERVER 0x00000014
#define PRODUCT_STORAGE_STANDARD_SERVER 0x00000015
#define PRODUCT_STORAGE_WORKGROUP_SERVER 0x00000016
#define PRODUCT_STORAGE_ENTERPRISE_SERVER 0x00000017
#define PRODUCT_SERVER_FOR_SMALLBUSINESS 0x00000018
#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM 0x00000019
#define PRODUCT_HOME_PREMIUM_N 0x0000001A
#define PRODUCT_ENTERPRISE_N 0x0000001B
#define PRODUCT_ULTIMATE_N 0x0000001C
#define PRODUCT_WEB_SERVER_CORE 0x0000001D
#define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT 0x0000001E
#define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY 0x0000001F
#define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING 0x00000020
#define PRODUCT_SERVER_FOUNDATION 0x00000021
#define PRODUCT_HOME_PREMIUM_SERVER 0x00000022
#define PRODUCT_SERVER_FOR_SMALLBUSINESS_V 0x00000023
#define PRODUCT_STANDARD_SERVER_V 0x00000024
#define PRODUCT_DATACENTER_SERVER_V 0x00000025
#define PRODUCT_ENTERPRISE_SERVER_V 0x00000026
#define PRODUCT_DATACENTER_SERVER_CORE_V 0x00000027
#define PRODUCT_STANDARD_SERVER_CORE_V 0x00000028
#define PRODUCT_ENTERPRISE_SERVER_CORE_V 0x00000029
#define PRODUCT_HYPERV 0x0000002A
#define PRODUCT_STORAGE_EXPRESS_SERVER_CORE 0x0000002B
#define PRODUCT_STORAGE_STANDARD_SERVER_CORE 0x0000002C
#define PRODUCT_STORAGE_WORKGROUP_SERVER_CORE 0x0000002D
#define PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE 0x0000002E
#define PRODUCT_STARTER_N 0x0000002F
#define PRODUCT_PROFESSIONAL 0x00000030
#define PRODUCT_PROFESSIONAL_N 0x00000031
#define PRODUCT_SB_SOLUTION_SERVER 0x00000032
#define PRODUCT_SERVER_FOR_SB_SOLUTIONS 0x00000033
#define PRODUCT_STANDARD_SERVER_SOLUTIONS 0x00000034
#define PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE 0x00000035
#define PRODUCT_SB_SOLUTION_SERVER_EM 0x00000036
#define PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM 0x00000037
#define PRODUCT_SOLUTION_EMBEDDEDSERVER 0x00000038
#define PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE 0x00000039
#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE 0x0000003F
#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT 0x0000003B
#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL 0x0000003C
#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC 0x0000003D
#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC 0x0000003E
#define PRODUCT_CLUSTER_SERVER_V 0x00000040
#define PRODUCT_EMBEDDED 0x00000041
#define PRODUCT_STARTER_E 0x00000042
#define PRODUCT_HOME_BASIC_E 0x00000043
#define PRODUCT_HOME_PREMIUM_E 0x00000044
#define PRODUCT_PROFESSIONAL_E 0x00000045
#define PRODUCT_ENTERPRISE_E 0x00000046
#define PRODUCT_ULTIMATE_E 0x00000047
#define PRODUCT_ENTERPRISE_EVALUATION 0x00000048
#define PRODUCT_MULTIPOINT_STANDARD_SERVER 0x0000004C
#define PRODUCT_MULTIPOINT_PREMIUM_SERVER 0x0000004D
#define PRODUCT_STANDARD_EVALUATION_SERVER 0x0000004F
#define PRODUCT_DATACENTER_EVALUATION_SERVER 0x00000050
#define PRODUCT_ENTERPRISE_N_EVALUATION 0x00000054
#define PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER 0x0000005F
#define PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER 0x00000060
#define PRODUCT_CORE_ARM 0x00000061
#define PRODUCT_CORE_N 0x00000062
#define PRODUCT_CORE_COUNTRYSPECIFIC 0x00000063
#define PRODUCT_CORE_LANGUAGESPECIFIC 0x00000064
#define PRODUCT_CORE 0x00000065
#define PRODUCT_PROFESSIONAL_WMC 0x00000067
#define PRODUCT_UNLICENSED 0xABCDABCD
@@ -0,0 +1,120 @@
#define ACCESS_MIN_MS_ACE_TYPE (0x0)
#define ACCESS_ALLOWED_ACE_TYPE (0x0)
#define ACCESS_DENIED_ACE_TYPE (0x1)
#define SYSTEM_AUDIT_ACE_TYPE (0x2)
#define SYSTEM_ALARM_ACE_TYPE (0x3)
#define ACCESS_MAX_MS_V2_ACE_TYPE (0x3)
#define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4)
#define ACCESS_MAX_MS_V3_ACE_TYPE (0x4)
#define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5)
#define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5)
#define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6)
#define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7)
#define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8)
#define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8)
#define ACCESS_MAX_MS_V4_ACE_TYPE (0x8)
#define ACCESS_MAX_MS_ACE_TYPE (0x8)
#define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9)
#define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA)
#define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
#define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC)
#define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD)
#define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE)
#define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF)
#define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10)
#define SYSTEM_MANDATORY_LABEL_ACE_TYPE (0x11)
#define ACCESS_MAX_MS_V5_ACE_TYPE (0x11)
#define SYSTEM_RESOURCE_ATTRIBUTE_ACE_TYPE (0x12)
#define SYSTEM_SCOPED_POLICY_ID_ACE_TYPE (0x13)
#define SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE (0x14)
#define ACCESS_MAX_MS_V5_ACE_TYPE (0x14)
#define SEC_WINNT_AUTH_IDENTITY_ANSI 0x1
#define SEC_WINNT_AUTH_IDENTITY_UNICODE 0x2
#define SE_OWNER_DEFAULTED 0x00000001
#define SE_GROUP_DEFAULTED 0x00000002
#define SE_DACL_PRESENT 0x00000004
#define SE_DACL_DEFAULTED 0x00000008
#define SE_SACL_PRESENT 0x00000010
#define SE_SACL_DEFAULTED 0x00000020
#define SE_DACL_AUTO_INHERIT_REQ 0x00000100
#define SE_SACL_AUTO_INHERIT_REQ 0x00000200
#define SE_DACL_AUTO_INHERITED 0x00000400
#define SE_SACL_AUTO_INHERITED 0x00000800
#define SE_DACL_PROTECTED 0x00001000
#define SE_SACL_PROTECTED 0x00002000
#define SE_RM_CONTROL_VALID 0x00004000
#define SE_SELF_RELATIVE 0x00008000
#define SDDL_REVISION_1 0x1
#define ACE_OBJECT_TYPE_PRESENT 0x1
#define ACE_INHERITED_OBJECT_TYPE_PRESENT 0x2
#define OBJECT_INHERIT_ACE (0x1)
#define CONTAINER_INHERIT_ACE (0x2)
#define NO_PROPAGATE_INHERIT_ACE (0x4)
#define INHERIT_ONLY_ACE (0x8)
#define INHERITED_ACE (0x10)
#define VALID_INHERIT_FLAGS (0x1F)
#define SUCCESSFUL_ACCESS_ACE_FLAG (0x40)
#define FAILED_ACCESS_ACE_FLAG (0x80)
#define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 0x1
#define SYSTEM_MANDATORY_LABEL_NO_READ_UP 0x2
#define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP 0x4
#define SYSTEM_PROCESS_TRUST_LABEL_VALID_MASK 0x00ffffff
#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)
@@ -0,0 +1,20 @@
//
// Service trigger types
//
#define SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL 1
#define SERVICE_TRIGGER_TYPE_IP_ADDRESS_AVAILABILITY 2
#define SERVICE_TRIGGER_TYPE_DOMAIN_JOIN 3
#define SERVICE_TRIGGER_TYPE_FIREWALL_PORT_EVENT 4
#define SERVICE_TRIGGER_TYPE_GROUP_POLICY 5
#define SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT 6
#define SERVICE_TRIGGER_TYPE_CUSTOM_SYSTEM_STATE_CHANGE 7
#define SERVICE_TRIGGER_TYPE_CUSTOM 20
//
// Service trigger data types
//
#define SERVICE_TRIGGER_DATA_TYPE_BINARY 1
#define SERVICE_TRIGGER_DATA_TYPE_STRING 2
#define SERVICE_TRIGGER_DATA_TYPE_LEVEL 3
#define SERVICE_TRIGGER_DATA_TYPE_KEYWORD_ANY 4
#define SERVICE_TRIGGER_DATA_TYPE_KEYWORD_ALL 5
@@ -0,0 +1,40 @@
// Returns TRUE/FALSE depending on question
#define OS_WINDOWS 0 // Windows 9x vs. NT
#define OS_NT 1 // Windows 9x vs. NT
#define OS_WIN95ORGREATER 2 // Win95 or greater
#define OS_NT4ORGREATER 3 // NT4 or greater
#define OS_WIN98ORGREATER 5 // Win98 or greater
#define OS_WIN98_GOLD 6 // Win98 Gold (Version 4.10 build 1998)
#define OS_WIN2000ORGREATER 7 // Some derivative of Win2000
// NOTE: these flags check explicitly for (dwMajorVersion == 5)
#define OS_WIN2000PRO 8 // Windows 2000 Professional (Workstation)
#define OS_WIN2000SERVER 9 // Windows 2000 Server
#define OS_WIN2000ADVSERVER 10 // Windows 2000 Advanced Server
#define OS_WIN2000DATACENTER 11 // Windows 2000 Data Center Server
#define OS_WIN2000TERMINAL 12 // Windows 2000 Terminal Server in "Application Server" mode (now simply called "Terminal Server")
#define OS_EMBEDDED 13 // Embedded Windows Edition
#define OS_TERMINALCLIENT 14 // Windows Terminal Client (eg user is comming in via tsclient)
#define OS_TERMINALREMOTEADMIN 15 // Terminal Server in "Remote Administration" mode
#define OS_WIN95_GOLD 16 // Windows 95 Gold (Version 4.0 Build 1995)
#define OS_MEORGREATER 17 // Windows Millennium (Version 5.0)
#define OS_XPORGREATER 18 // Windows XP or greater
#define OS_HOME 19 // Home Edition (eg NOT Professional, Server, Advanced Server, or Datacenter)
#define OS_PROFESSIONAL 20 // Professional (aka Workstation; eg NOT Server, Advanced Server, or Datacenter)
#define OS_DATACENTER 21 // Datacenter (eg NOT Server, Advanced Server, Professional, or Personal)
#define OS_ADVSERVER 22 // Advanced Server (eg NOT Datacenter, Server, Professional, or Personal)
#define OS_SERVER 23 // Server (eg NOT Datacenter, Advanced Server, Professional, or Personal)
#define OS_TERMINALSERVER 24 // Terminal Server - server running in what used to be called "Application Server" mode (now simply called "Terminal Server")
#define OS_PERSONALTERMINALSERVER 25 // Personal Terminal Server - per/pro machine running in single user TS mode
#define OS_FASTUSERSWITCHING 26 // Fast User Switching
#define OS_WELCOMELOGONUI 27 // New friendly logon UI
#define OS_DOMAINMEMBER 28 // Is this machine a member of a domain (eg NOT a workgroup)
#define OS_ANYSERVER 29 // is this machine any type of server? (eg datacenter or advanced server or server)?
#define OS_WOW6432 30 // Is this process a 32-bit process running on an 64-bit platform?
#define OS_WEBSERVER 31 // Web Edition Server
#define OS_SMALLBUSINESSSERVER 32 // SBS Server
#define OS_TABLETPC 33 // Are we running on a TabletPC?
#define OS_SERVERADMINUI 34 // Should defaults lean towards those preferred by server administrators?
#define OS_MEDIACENTER 35 // eHome Freestyle Project
#define OS_APPLIANCE 36 // Windows .NET Appliance Server
@@ -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)
@@ -0,0 +1,100 @@
#define TOKEN_SOURCE_LENGTH 8
#define SID_HASH_SIZE 32
#define TOKEN_MANDATORY_POLICY_OFF 0x0
#define TOKEN_MANDATORY_POLICY_NO_WRITE_UP 0x1
#define TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN 0x2
#define TOKEN_MANDATORY_POLICY_VALID_MASK (TOKEN_MANDATORY_POLICY_NO_WRITE_UP | \
TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN)
/* from ntseapi.h
* https://github.com/PKRoma/ProcessHacker/blob/8cd2217e9ff2170096d85b0fdafd5f1e1a8c925f/phnt/include/ntseapi.h
*/
#define TOKEN_SECURITY_ATTRIBUTE_TYPE_INVALID 0x00
#define TOKEN_SECURITY_ATTRIBUTE_TYPE_INT64 0x01
#define TOKEN_SECURITY_ATTRIBUTE_TYPE_UINT64 0x02
#define TOKEN_SECURITY_ATTRIBUTE_TYPE_STRING 0x03
#define TOKEN_SECURITY_ATTRIBUTE_TYPE_FQBN 0x04
#define TOKEN_SECURITY_ATTRIBUTE_TYPE_SID 0x05
#define TOKEN_SECURITY_ATTRIBUTE_TYPE_BOOLEAN 0x06
#define TOKEN_SECURITY_ATTRIBUTE_TYPE_OCTET_STRING 0x10
// Flags
#define TOKEN_SECURITY_ATTRIBUTE_NON_INHERITABLE 0x0001
#define TOKEN_SECURITY_ATTRIBUTE_VALUE_CASE_SENSITIVE 0x0002
#define TOKEN_SECURITY_ATTRIBUTE_USE_FOR_DENY_ONLY 0x0004
#define TOKEN_SECURITY_ATTRIBUTE_DISABLED_BY_DEFAULT 0x0008
#define TOKEN_SECURITY_ATTRIBUTE_DISABLED 0x0010
#define TOKEN_SECURITY_ATTRIBUTE_MANDATORY 0x0020
#define TOKEN_SECURITY_ATTRIBUTE_VALID_FLAGS ( \
TOKEN_SECURITY_ATTRIBUTE_NON_INHERITABLE | \
TOKEN_SECURITY_ATTRIBUTE_VALUE_CASE_SENSITIVE | \
TOKEN_SECURITY_ATTRIBUTE_USE_FOR_DENY_ONLY | \
TOKEN_SECURITY_ATTRIBUTE_DISABLED_BY_DEFAULT | \
TOKEN_SECURITY_ATTRIBUTE_DISABLED | \
TOKEN_SECURITY_ATTRIBUTE_MANDATORY)
#define TOKEN_SECURITY_ATTRIBUTE_CUSTOM_FLAGS 0xffff0000
#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)
#define TOKEN_ALL_ACCESS_P (STANDARD_RIGHTS_REQUIRED | TOKEN_ASSIGN_PRIMARY | TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY | TOKEN_QUERY_SOURCE | TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT)
#define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P | TOKEN_ADJUST_SESSIONID )
/* Privileges attributes */
#define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
#define SE_PRIVILEGE_ENABLED (0x00000002L)
#define SE_PRIVILEGE_REMOVED (0X00000004L)
#define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
/* PRIVILEGES Names*/
#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")
@@ -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
@@ -222,26 +197,6 @@
#define SPECIFIC_RIGHTS_ALL (0x0000FFFFL)
#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)
#define TOKEN_ALL_ACCESS_P (STANDARD_RIGHTS_REQUIRED | TOKEN_ASSIGN_PRIMARY | TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY | TOKEN_QUERY_SOURCE | TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT)
#define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P | TOKEN_ADJUST_SESSIONID )
#define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
#define SE_PRIVILEGE_ENABLED (0x00000002L)
#define SE_PRIVILEGE_REMOVED (0X00000004L)
#define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
#define AF_UNSPEC 0
#define AF_UNIX 1
@@ -386,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
@@ -758,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
@@ -796,6 +730,7 @@
#define PERSIST_E_SIZEINDEFINITE (0x800B000AL)
#define PERSIST_E_NOTSELFSIZING (0x800B000BL)
#define TRUST_E_NOSIGNATURE (0x800B0100L)
#define TRUST_E_BAD_DIGEST (0x80096010L)
#define CERT_E_EXPIRED (0x800B0101L)
#define CERT_E_VALIDITYPERIODNESTING (0x800B0102L)
#define CERT_E_PURPOSE (0x800B0106L)
@@ -877,35 +812,6 @@
#define IMAGE_SCN_MEM_READ 0x40000000
#define IMAGE_SCN_MEM_WRITE 0x80000000
#define ACCESS_MIN_MS_ACE_TYPE (0x0)
#define ACCESS_ALLOWED_ACE_TYPE (0x0)
#define ACCESS_DENIED_ACE_TYPE (0x1)
#define SYSTEM_AUDIT_ACE_TYPE (0x2)
#define SYSTEM_ALARM_ACE_TYPE (0x3)
#define ACCESS_MAX_MS_V2_ACE_TYPE (0x3)
#define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4)
#define ACCESS_MAX_MS_V3_ACE_TYPE (0x4)
#define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5)
#define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5)
#define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6)
#define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7)
#define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8)
#define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8)
#define ACCESS_MAX_MS_V4_ACE_TYPE (0x8)
#define ACCESS_MAX_MS_ACE_TYPE (0x8)
#define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9)
#define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA)
#define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
#define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC)
#define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD)
#define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE)
#define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF)
#define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10)
#define SYSTEM_MANDATORY_LABEL_ACE_TYPE (0x11)
#define ACCESS_MAX_MS_V5_ACE_TYPE (0x11)
#define LPC_REQUEST 1
#define LPC_REPLY 2
#define LPC_DATAGRAM 3
@@ -951,13 +857,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
@@ -1028,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.
@@ -508,4 +508,54 @@
#define ERROR_TRANSACTION_REQUEST_NOT_VALID 6702
#define ERROR_TRANSACTION_NOT_REQUESTED 6703
#define ERROR_TRANSACTION_ALREADY_ABORTED 6704
#define ERROR_TRANSACTION_ALREADY_COMMITTED 6705
#define ERROR_TRANSACTION_ALREADY_COMMITTED 6705
// FACILITY_SSPI
#define NTE_BAD_UID (0x80090001)
#define NTE_BAD_HASH (0x80090002)
#define NTE_BAD_KEY (0x80090003)
#define NTE_BAD_LEN (0x80090004)
#define NTE_BAD_DATA (0x80090005)
#define NTE_BAD_SIGNATURE (0x80090006)
#define NTE_BAD_VER (0x80090007)
#define NTE_BAD_ALGID (0x80090008)
#define NTE_BAD_FLAGS (0x80090009)
#define NTE_BAD_TYPE (0x8009000A)
#define NTE_BAD_KEY_STATE (0x8009000B)
#define NTE_BAD_HASH_STATE (0x8009000C)
#define NTE_NO_KEY (0x8009000D)
#define NTE_NO_MEMORY (0x8009000E)
#define NTE_EXISTS (0x8009000F)
#define NTE_PERM (0x80090010)
#define NTE_NOT_FOUND (0x80090011)
#define NTE_DOUBLE_ENCRYPT (0x80090012)
#define NTE_BAD_PROVIDER (0x80090013)
#define NTE_BAD_PROV_TYPE (0x80090014)
#define NTE_BAD_PUBLIC_KEY (0x80090015)
#define NTE_BAD_KEYSET (0x80090016)
#define NTE_PROV_TYPE_NOT_DEF (0x80090017)
#define NTE_PROV_TYPE_ENTRY_BAD (0x80090018)
#define NTE_KEYSET_NOT_DEF (0x80090019)
#define NTE_KEYSET_ENTRY_BAD (0x8009001A)
#define NTE_PROV_TYPE_NO_MATCH (0x8009001B)
#define NTE_SIGNATURE_FILE_BAD (0x8009001C)
#define NTE_PROVIDER_DLL_FAIL (0x8009001D)
#define NTE_PROV_DLL_NOT_FOUND (0x8009001E)
#define NTE_BAD_KEYSET_PARAM (0x8009001F)
#define NTE_FAIL (0x80090020)
#define NTE_SYS_ERR (0x80090021)
#define NTE_SILENT_CONTEXT (0x80090022)
#define NTE_TOKEN_KEYSET_STORAGE_FULL (0x80090023)
#define NTE_TEMPORARY_PROFILE (0x80090024)
#define NTE_FIXEDPARAMETER (0x80090025)
#define NTE_INVALID_HANDLE (0x80090026)
#define NTE_INVALID_PARAMETER (0x80090027)
#define NTE_BUFFER_TOO_SMALL (0x80090028)
#define NTE_NOT_SUPPORTED (0x80090029)
#define NTE_NO_MORE_ITEMS (0x8009002A)
#define NTE_BUFFERS_OVERLAP (0x8009002B)
#define NTE_DECRYPTION_FAILURE (0x8009002C)
#define NTE_INTERNAL_ERROR (0x8009002D)
#define NTE_UI_REQUIRED (0x8009002E)
#define NTE_HMAC_NOT_SUPPORTED (0x8009002F)
@@ -11,6 +11,9 @@
#define EVENTLOG_FORWARDS_READ 0x0004
#define EVENTLOG_BACKWARDS_READ 0x0008
#define EVT_VARIANT_TYPE_MASK 0x7f
#define EVT_VARIANT_TYPE_ARRAY 128
///////////////////////////////////////////////////
// //
@@ -611,7 +611,12 @@
#define MS_DEF_RSA_SIG_PROV_A "Microsoft RSA Signature Cryptographic Provider"
#define MS_DEF_RSA_SIG_PROV_W u"Microsoft RSA Signature Cryptographic Provider"
#define MS_DEF_RSA_SIG_PROV MS_DEF_RSA_SIG_PROV_W
#define MS_DEF_RSA_SIG_PROV MS_DEF_RSA_SIG_PROV_A
#define MS_ENH_RSA_AES_PROV_A "Microsoft Enhanced RSA and AES Cryptographic Provider"
#define MS_ENH_RSA_AES_PROV_W u"Microsoft Enhanced RSA and AES Cryptographic Provider"
#define MS_ENH_RSA_AES_PROV_XP_A "Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"
#define MS_ENH_RSA_AES_PROV_XP_W u"Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"
#define CERT_STORE_ADD_NEW 1
@@ -675,3 +680,62 @@
#define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY (CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
#define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE (CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
//+-------------------------------------------------------------------------
// Message types
//--------------------------------------------------------------------------
#define CMSG_DATA 1
#define CMSG_SIGNED 2
#define CMSG_ENVELOPED 3
#define CMSG_SIGNED_AND_ENVELOPED 4
#define CMSG_HASHED 5
#define CMSG_ENCRYPTED 6
//+-------------------------------------------------------------------------
// Open dwFlags
//--------------------------------------------------------------------------
#define CMSG_BARE_CONTENT_FLAG 0x00000001
#define CMSG_LENGTH_ONLY_FLAG 0x00000002
#define CMSG_DETACHED_FLAG 0x00000004
#define CMSG_AUTHENTICATED_ATTRIBUTES_FLAG 0x00000008
#define CMSG_CONTENTS_OCTETS_FLAG 0x00000010
#define CMSG_MAX_LENGTH_FLAG 0x00000020
// When set, nonData type inner content is encapsulated within an
// OCTET STRING. Applicable to both Signed and Enveloped messages.
#define CMSG_CMS_ENCAPSULATED_CONTENT_FLAG 0x00000040
// If set, then, the hCryptProv passed to CryptMsgOpenToEncode or
// CryptMsgOpenToDecode is released on the final CryptMsgClose.
// Not released if CryptMsgOpenToEncode or CryptMsgOpenToDecode fails.
//
// Also applies to hNCryptKey where applicable.
//
// Note, the envelope recipient hCryptProv's aren't released.
#define CMSG_CRYPT_RELEASE_CONTEXT_FLAG 0x00008000
#define CMSG_INDEFINITE_LENGTH (0xFFFFFFFF)
//+-------------------------------------------------------------------------
// Message control types
//--------------------------------------------------------------------------
#define CMSG_CTRL_VERIFY_SIGNATURE 1
#define CMSG_CTRL_DECRYPT 2
#define CMSG_CTRL_VERIFY_HASH 5
#define CMSG_CTRL_ADD_SIGNER 6
#define CMSG_CTRL_DEL_SIGNER 7
#define CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR 8
#define CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR 9
#define CMSG_CTRL_ADD_CERT 10
#define CMSG_CTRL_DEL_CERT 11
#define CMSG_CTRL_ADD_CRL 12
#define CMSG_CTRL_DEL_CRL 13
#define CMSG_CTRL_ADD_ATTR_CERT 14
#define CMSG_CTRL_DEL_ATTR_CERT 15
#define CMSG_CTRL_KEY_TRANS_DECRYPT 16
#define CMSG_CTRL_KEY_AGREE_DECRYPT 17
#define CMSG_CTRL_MAIL_LIST_DECRYPT 18
#define CMSG_CTRL_VERIFY_SIGNATURE_EX 19
#define CMSG_CTRL_ADD_CMS_SIGNER_INFO 20
#define CMSG_CTRL_ENABLE_STRONG_SIGNATURE 21
+21 -2
View File
@@ -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)
@@ -11,7 +12,7 @@ class Flag(long):
self.name = name
def __repr__(self):
return "{0}({1})".format(self.name, hex(self))
return "{0}({1:#x})".format(self.name, self)
__str__ = __repr__
@@ -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]
@@ -0,0 +1,6 @@
HRESULT WINAPI ObjectFromLresult(
_In_ LRESULT lResult,
_In_ REFIID riid,
_In_ WPARAM wParam,
_Out_ PVOID *ppvObject
);
@@ -38,4 +38,10 @@ HRESULT WINAPI CoGetInterceptor(
_In_ IUnknown *punkOuter,
_In_ REFIID iid,
_Out_ PVOID *ppv
);
HRESULT WINAPI CLSIDFromProgID(
_In_ LPCOLESTR lpszProgID,
_Out_ LPCLSID lpclsid
);
@@ -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
);
@@ -0,0 +1,45 @@
NTSTATUS WINAPI NtOpenKey(
_Out_ PHANDLE KeyHandle,
_In_ ACCESS_MASK DesiredAccess,
_In_ POBJECT_ATTRIBUTES ObjectAttributes
);
NTSTATUS WINAPI NtCreateKey(
_Out_ PHANDLE pKeyHandle,
_In_ ACCESS_MASK DesiredAccess,
_In_ POBJECT_ATTRIBUTES ObjectAttributes,
_In_ ULONG TitleIndex,
_In_ PUNICODE_STRING Class,
_In_ ULONG CreateOptions,
_Out_ PULONG Disposition
);
NTSTATUS WINAPI NtSetValueKey(
_In_ HANDLE KeyHandle,
_In_ PUNICODE_STRING ValueName,
_In_ ULONG TitleIndex,
_In_ ULONG Type,
_In_ PVOID Data,
_In_ ULONG DataSize
);
NTSTATUS NtQueryValueKey(
HANDLE KeyHandle,
PUNICODE_STRING ValueName,
KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
PVOID KeyValueInformation,
ULONG Length,
PULONG ResultLength
);
NTSTATUS NtEnumerateValueKey(
HANDLE KeyHandle,
ULONG Index,
KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
PVOID KeyValueInformation,
ULONG Length,
PULONG ResultLength
);
@@ -1,3 +1,11 @@
BOOL WINAPI CreatePipe(
_Out_ PHANDLE hReadPipe,
_Out_ PHANDLE hWritePipe,
_In_opt_ LPSECURITY_ATTRIBUTES lpPipeAttributes,
_In_ DWORD nSize
);
HANDLE WINAPI CreateNamedPipeA(
_In_ LPCSTR lpName,
_In_ DWORD dwOpenMode,
@@ -32,4 +40,15 @@ BOOL WINAPI SetNamedPipeHandleState(
_In_opt_ LPDWORD lpMode,
_In_opt_ LPDWORD lpMaxCollectionCount,
_In_opt_ LPDWORD lpCollectDataTimeout
);
);
BOOL WINAPI PeekNamedPipe(
_In_ HANDLE hNamedPipe,
_Out_opt_ LPVOID lpBuffer,
_In_ DWORD nBufferSize,
_Out_opt_ LPDWORD lpBytesRead,
_Out_opt_ LPDWORD lpTotalBytesAvail,
_Out_opt_ LPDWORD lpBytesLeftThisMessage
);
@@ -0,0 +1,143 @@
BOOL WINAPI IsValidSecurityDescriptor(
_In_ PSECURITY_DESCRIPTOR pSecurityDescriptor
);
BOOL WINAPI ConvertStringSecurityDescriptorToSecurityDescriptorA(
_In_ LPCSTR StringSecurityDescriptor,
_In_ DWORD StringSDRevision,
_Out_ PSECURITY_DESCRIPTOR *SecurityDescriptor,
_Out_ PULONG SecurityDescriptorSize
);
BOOL WINAPI ConvertStringSecurityDescriptorToSecurityDescriptorW(
_In_ LPWSTR StringSecurityDescriptor,
_In_ DWORD StringSDRevision,
_Out_ PSECURITY_DESCRIPTOR *SecurityDescriptor,
_Out_ PULONG SecurityDescriptorSize
);
BOOL WINAPI ConvertSecurityDescriptorToStringSecurityDescriptorA(
_In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
_In_ DWORD RequestedStringSDRevision,
_In_ DWORD SecurityInformation,
_Out_ LPCSTR *StringSecurityDescriptor,
_Out_ PULONG StringSecurityDescriptorLen
);
BOOL WINAPI ConvertSecurityDescriptorToStringSecurityDescriptorW(
_In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
_In_ DWORD RequestedStringSDRevision,
_In_ DWORD SecurityInformation,
_Out_ LPWSTR *StringSecurityDescriptor,
_Out_ PULONG StringSecurityDescriptorLen
);
/* From Win10 securitybaseapi.h*/
BOOL WINAPI GetSecurityDescriptorControl(
_In_ PSECURITY_DESCRIPTOR pSecurityDescriptor,
_Out_ PSECURITY_DESCRIPTOR_CONTROL pControl,
_Out_ LPDWORD lpdwRevision
);
BOOL WINAPI GetSecurityDescriptorDacl(
_In_ PSECURITY_DESCRIPTOR pSecurityDescriptor,
_Out_ LPBOOL lpbDaclPresent,
_Outptr_ PACL * pDacl,
_Out_ LPBOOL lpbDaclDefaulted
);
BOOL WINAPI GetSecurityDescriptorGroup(
_In_ PSECURITY_DESCRIPTOR pSecurityDescriptor,
_Outptr_ PSID * pGroup,
_Out_ LPBOOL lpbGroupDefaulted
);
DWORD WINAPI GetSecurityDescriptorLength(
_In_ PSECURITY_DESCRIPTOR pSecurityDescriptor
);
BOOL WINAPI GetSecurityDescriptorOwner(
_In_ PSECURITY_DESCRIPTOR pSecurityDescriptor,
_Outptr_ PSID * pOwner,
_Out_ LPBOOL lpbOwnerDefaulted
);
DWORD WINAPI GetSecurityDescriptorRMControl(
_In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
_Out_ PUCHAR RMControl
);
BOOL WINAPI GetSecurityDescriptorSacl(
_In_ PSECURITY_DESCRIPTOR pSecurityDescriptor,
_Out_ LPBOOL lpbSaclPresent,
_Outptr_ PACL * pSacl,
_Out_ LPBOOL lpbSaclDefaulted
);
DWORD WINAPI GetLengthSid(
_In_ PSID pSid
);
BOOL EqualSid(
PSID pSid1,
PSID pSid2
);
BOOL CopySid(
DWORD nDestinationSidLength,
PSID pDestinationSid,
PSID pSourceSid
);
PSID_IDENTIFIER_AUTHORITY WINAPI GetSidIdentifierAuthority(
_In_ PSID pSid
);
DWORD WINAPI GetSidLengthRequired(
_In_ UCHAR nSubAuthorityCount
);
PDWORD WINAPI GetSidSubAuthority(
_In_ PSID pSid,
_In_ DWORD nSubAuthority
);
/* Yep not the good definition (return PUCHAR)
* but who want this function to returns Python String..
*/
LPBYTE WINAPI GetSidSubAuthorityCount(
_In_ PSID pSid
);
PVOID WINAPI FreeSid(
_In_ PSID pSid
);
BOOL WINAPI GetAce(
_In_ PACL pAcl,
_In_ DWORD dwAceIndex,
_Outptr_ LPVOID * pAce
);
BOOL WINAPI GetAclInformation(
_In_ PACL pAcl,
_Out_ LPVOID pAclInformation,
_In_ DWORD nAclInformationLength,
_In_ ACL_INFORMATION_CLASS dwAclInformationClass
);
@@ -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
);
@@ -0,0 +1,14 @@
PWSTR WINAPI StrStrIW(
_In_ PWSTR pszFirst,
_In_ PWSTR pszSrch
);
PCSTR WINAPI StrStrIA(
_In_ PCSTR pszFirst,
_In_ PCSTR pszSrch
);
BOOL IsOS(
DWORD dwOS
);
@@ -134,3 +134,12 @@ DWORD WINAPI GetWindowThreadProcessId(
_Out_opt_ LPDWORD lpdwProcessId
);
HWND FindWindowA(
LPCSTR lpClassName,
LPCSTR lpWindowName
);
HWND FindWindowW(
LPCWSTR lpClassName,
LPCWSTR lpWindowName
);
@@ -463,6 +463,22 @@ HMODULE WINAPI LoadLibraryW(
__in LPCWSTR lpFileName
);
HMODULE LoadLibraryExA(
LPCSTR lpLibFileName,
HANDLE hFile,
DWORD dwFlags
);
HMODULE LoadLibraryExW(
LPCWSTR lpLibFileName,
HANDLE hFile,
DWORD dwFlags
);
BOOL FreeLibrary(
HMODULE hLibModule
);
BOOL WINAPI OpenProcessToken(
_In_ HANDLE ProcessHandle,
_In_ DWORD DesiredAccess,
@@ -893,22 +909,8 @@ BOOL WINAPI SetTokenInformation (
__in DWORD TokenInformationLength
);
PSID_IDENTIFIER_AUTHORITY WINAPI GetSidIdentifierAuthority (
__in PSID pSid
);
PDWORD WINAPI GetSidSubAuthority (
__in PSID pSid,
__in DWORD nSubAuthority
);
LPBYTE WINAPI GetSidSubAuthorityCount (
__in PSID pSid
);
DWORD WINAPI GetLengthSid(
_In_ PSID pSid
);
BOOL WINAPI CreateWellKnownSid(
_In_ WELL_KNOWN_SID_TYPE WellKnownSidType,
@@ -1564,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,
@@ -1677,3 +1659,107 @@ NTSTATUS WINAPI ApiSetResolveToHost (
_Out_ PBOOLEAN Resolved,
_Out_ PUNICODE_STRING HostBinary
);
VOID WINAPI Sleep(
_In_ DWORD dwMilliseconds
);
DWORD WINAPI SleepEx(
_In_ DWORD dwMilliseconds,
_In_ BOOL bAlertable
);
BOOL WINAPI GetProcessMitigationPolicy(
_In_ HANDLE hProcess,
_In_ PROCESS_MITIGATION_POLICY MitigationPolicy,
_Out_ PVOID lpBuffer,
_In_ SIZE_T dwLength
);
BOOL WINAPI SetProcessMitigationPolicy(
_In_ PROCESS_MITIGATION_POLICY MitigationPolicy,
_In_ PVOID lpBuffer,
_In_ SIZE_T dwLength
);
BOOL WINAPI GetProductInfo(
_In_ DWORD dwOSMajorVersion,
_In_ DWORD dwOSMinorVersion,
_In_ DWORD dwSpMajorVersion,
_In_ DWORD dwSpMinorVersion,
_Out_ PDWORD pdwReturnedProductType
);
NTSTATUS NtSetInformationFile(
HANDLE FileHandle,
PIO_STATUS_BLOCK IoStatusBlock,
PVOID FileInformation,
ULONG Length,
FILE_INFORMATION_CLASS FileInformationClass
);
BOOL GetProcessMemoryInfo(
HANDLE Process,
PPROCESS_MEMORY_COUNTERS ppsmemCounters,
DWORD cb
);
HMODULE WINAPI GetModuleHandleA(
_In_opt_ LPCSTR lpModuleName
);
HMODULE WINAPI GetModuleHandleW(
_In_opt_ LPWSTR lpModuleName
);
BOOLEAN RtlEqualUnicodeString(
PUNICODE_STRING String1,
PUNICODE_STRING String2,
BOOLEAN CaseInSensitive
);
DWORD WINAPI GetFirmwareEnvironmentVariableA(
_In_ LPCSTR lpName,
_In_ LPCSTR lpGuid,
_Out_ PVOID pBuffer,
_In_ DWORD nSize
);
DWORD WINAPI GetFirmwareEnvironmentVariableW(
_In_ LPCWSTR lpName,
_In_ LPCWSTR lpGuid,
_Out_ PVOID pBuffer,
_In_ DWORD nSize
);
DWORD WINAPI GetFirmwareEnvironmentVariableExA(
_In_ LPCSTR lpName,
_In_ LPCSTR lpGuid,
_Out_ PVOID pBuffer,
_In_ DWORD nSize,
_Out_ PDWORD pdwAttribubutes
);
DWORD WINAPI GetFirmwareEnvironmentVariableExW(
_In_ LPCWSTR lpName,
_In_ LPCWSTR lpGuid,
_Out_ PVOID pBuffer,
_In_ DWORD nSize,
_Out_ PDWORD pdwAttribubutes
);
NTSTATUS WINAPI NtEnumerateSystemEnvironmentValuesEx(
_In_ ULONG InformationClass,
_In_ PVOID Buffer,
_In_ ULONG BufferLength
);
@@ -4,6 +4,15 @@ BOOL WINAPI CryptCATAdminCalcHashFromFileHandle(
_Out_opt_ BYTE *pbHash,
__in DWORD dwFlags);
BOOL CryptCATAdminCalcHashFromFileHandle2(
HCATADMIN hCatAdmin,
HANDLE hFile,
DWORD *pcbHash,
BYTE *pbHash,
DWORD dwFlags
);
HCATINFO WINAPI CryptCATAdminEnumCatalogFromHash(
__in HCATADMIN hCatAdmin,
__in BYTE *pbHash,
@@ -17,6 +26,14 @@ BOOL WINAPI CryptCATAdminAcquireContext(
_In_ DWORD dwFlags
);
BOOL CryptCATAdminAcquireContext2(
HCATADMIN *phCatAdmin,
GUID *pgSubsystem,
PCWSTR pwszHashAlgorithm,
PCCERT_STRONG_SIGN_PARA pStrongHashPolicy,
DWORD dwFlags
);
BOOL WINAPI CryptCATCatalogInfoFromContext(
_In_ HCATINFO hCatInfo,
_Inout_ CATALOG_INFO *psCatInfo,
@@ -378,4 +395,123 @@ BOOL WINAPI CryptHashCertificate(
_In_ DWORD cbEncoded,
_Out_ BYTE *pbComputedHash,
_Inout_ DWORD *pcbComputedHash
);
BOOL CryptSignMessage(
PCRYPT_SIGN_MESSAGE_PARA pSignPara,
BOOL fDetachedSignature,
DWORD cToBeSigned,
PBYTE *rgpbToBeSigned,
DWORD *rgcbToBeSigned,
BYTE *pbSignedBlob,
DWORD *pcbSignedBlob
);
BOOL CryptSignAndEncryptMessage(
PCRYPT_SIGN_MESSAGE_PARA pSignPara,
PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara,
DWORD cRecipientCert,
PCCERT_CONTEXT *rgpRecipientCert,
BYTE *pbToBeSignedAndEncrypted,
DWORD cbToBeSignedAndEncrypted,
BYTE *pbSignedAndEncryptedBlob,
DWORD *pcbSignedAndEncryptedBlob
);
BOOL CryptVerifyMessageSignature(
PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
DWORD dwSignerIndex,
BYTE *pbSignedBlob,
DWORD cbSignedBlob,
BYTE *pbDecoded,
DWORD *pcbDecoded,
PCCERT_CONTEXT *ppSignerCert
);
BOOL CryptVerifyMessageSignatureWithKey(
PCRYPT_KEY_VERIFY_MESSAGE_PARA pVerifyPara,
PCERT_PUBLIC_KEY_INFO pPublicKeyInfo,
BYTE *pbSignedBlob,
DWORD cbSignedBlob,
BYTE *pbDecoded,
DWORD *pcbDecoded
);
BOOL CryptVerifyMessageHash(
PCRYPT_HASH_MESSAGE_PARA pHashPara,
BYTE *pbHashedBlob,
DWORD cbHashedBlob,
BYTE *pbToBeHashed,
DWORD *pcbToBeHashed,
BYTE *pbComputedHash,
DWORD *pcbComputedHash
);
PCCERT_CONTEXT PfnCryptGetSignerCertificate(
PVOID pvGetArg,
DWORD dwCertEncodingType,
PCERT_INFO pSignerId,
HCERTSTORE hMsgCertStore
);
BOOL CryptEncrypt(
HCRYPTKEY hKey,
HCRYPTHASH hHash,
BOOL Final,
DWORD dwFlags,
BYTE *pbData,
DWORD *pdwDataLen,
DWORD dwBufLen
);
BOOL CryptDecrypt(
HCRYPTKEY hKey,
HCRYPTHASH hHash,
BOOL Final,
DWORD dwFlags,
BYTE *pbData,
DWORD *pdwDataLen
);
HCRYPTMSG CryptMsgOpenToEncode(
DWORD dwMsgEncodingType,
DWORD dwFlags,
DWORD dwMsgType,
PVOID pvMsgEncodeInfo,
LPSTR pszInnerContentObjID,
PCMSG_STREAM_INFO pStreamInfo
);
HCRYPTMSG CryptMsgOpenToDecode(
DWORD dwMsgEncodingType,
DWORD dwFlags,
DWORD dwMsgType,
HCRYPTPROV_LEGACY hCryptProv,
PCERT_INFO pRecipientInfo,
PCMSG_STREAM_INFO pStreamInfo
);
BOOL CryptMsgUpdate(
HCRYPTMSG hCryptMsg,
BYTE *pbData,
DWORD cbData,
BOOL fFinal
);
BOOL CryptMsgControl(
HCRYPTMSG hCryptMsg,
DWORD dwFlags,
DWORD dwCtrlType,
PVOID pvCtrlPara
);
BOOL CryptMsgClose(
HCRYPTMSG hCryptMsg
);
@@ -3,4 +3,45 @@ NTSTATUS WINAPI TpCallbackSendAlpcMessageOnCompletion(
_In_ HANDLE PortHandle,
_In_ ULONG Flags,
_In_opt_ PPORT_MESSAGE SendMessage,
);
NTSTATUS NtQueryLicenseValue(
PUNICODE_STRING Name,
ULONG *Type,
PVOID Buffer,
ULONG Length,
ULONG *DataLength
);
NTSTATUS WINAPI NtQueryEaFile(
_In_ HANDLE FileHandle,
_Out_ PIO_STATUS_BLOCK IoStatusBlock,
_Out_writes_bytes_(Length) PVOID Buffer,
_In_ ULONG Length,
_In_ BOOLEAN ReturnSingleEntry,
_In_reads_bytes_opt_(EaListLength) PVOID EaList,
_In_ ULONG EaListLength,
_In_opt_ PULONG EaIndex,
_In_ BOOLEAN RestartScan
);
NTSTATUS WINAPI NtSetEaFile(
_In_ HANDLE FileHandle,
_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
);
+32 -3
View File
@@ -13,6 +13,7 @@ PDWORD = POINTER(DWORD)
LPDWORD = POINTER(DWORD)
LPBYTE = POINTER(BYTE)
ULONG_PTR = PVOID
LONG_PTR = PVOID
DWORD_PTR = ULONG_PTR
KAFFINITY = ULONG_PTR
KPRIORITY = LONG
@@ -22,6 +23,7 @@ CSHORT = c_short
VARTYPE = c_ushort
PUSHORT = POINTER(USHORT)
PBOOL = POINTER(BOOL)
LPBOOL = PBOOL
PSTR = LPSTR
PCSTR = LPSTR
va_list = c_char_p
@@ -30,19 +32,22 @@ OLECHAR = c_wchar
POLECHAR = c_wchar_p
PUCHAR = POINTER(UCHAR)
double = c_double
PSID = PVOID
DATE = double
ULONGLONG = c_ulonglong
PULONGLONG = POINTER(ULONGLONG)
LONGLONG = c_longlong
ULONG64 = c_ulonglong
UINT64 = ULONG64
LONG64 = c_longlong
PLARGE_INTEGER = POINTER(LARGE_INTEGER)
DWORD64 = ULONG64
PDWORD64 = POINTER(DWORD64)
SCODE = LONG
CIMTYPE = LONG
NET_IFINDEX = ULONG
IF_INDEX = NET_IFINDEX
IFTYPE = ULONG
PLONG64 = POINTER(LONG64)
PULONG64 = POINTER(ULONG64)
PBYTE = POINTER(BYTE)
PUINT = POINTER(UINT)
@@ -58,8 +63,7 @@ HCRYPTHASH = PULONG
ALG_ID = UINT
DISPID = LONG
MEMBERID = DISPID
PSECURITY_DESCRIPTOR = PVOID
LRESULT = LONG_PTR
LPUNKNOWN = POINTER(PVOID)
LPFILETIME = POINTER(FILETIME)
LPPOINT = POINTER(POINT)
@@ -69,6 +73,12 @@ DEVICE_TYPE = DWORD
PWINDBG_EXTENSION_APIS32 = PVOID
PWINDBG_EXTENSION_APIS64 = PVOID
NCRYPT_HANDLE = ULONG_PTR
NCRYPT_PROV_HANDLE = ULONG_PTR
NCRYPT_KEY_HANDLE = ULONG_PTR
NCRYPT_HASH_HANDLE = ULONG_PTR
NCRYPT_SECRET_HANDLE = ULONG_PTR
/* INT sized*/
INT8 = c_byte // signed | our BYTE is unsigned
@@ -96,6 +106,24 @@ HCRYPTPROV_OR_NCRYPT_KEY_HANDLE = PULONG
EVT_HANDLE = HANDLE
EVT_OBJECT_ARRAY_PROPERTY_HANDLE = HANDLE
/* Security */
PSECURITY_DESCRIPTOR = PVOID
SECURITY_DESCRIPTOR_CONTROL = WORD
PSECURITY_DESCRIPTOR_CONTROL = POINTER(SECURITY_DESCRIPTOR_CONTROL)
ACCESS_MASK = DWORD
PACCESS_MASK = POINTER(ACCESS_MASK)
SECURITY_INFORMATION = DWORD
PSECURITY_INFORMATION = POINTER(SECURITY_INFORMATION)
PSECURITY_ATTRIBUTES_OPAQUE = PVOID
SID_HASH_ENTRY = ULONG_PTR
PSID_HASH_ENTRY = POINTER(SID_HASH_ENTRY)
PSID = PVOID
/* COM STUFF */
RPCOLEDATAREP = ULONG
@@ -111,6 +139,7 @@ PHANDLER_ROUTINE = PVOID
FARPROC = PVOID
PIO_APC_ROUTINE = PVOID
PVECTORED_EXCEPTION_HANDLER = PVOID
PFN_CRYPT_GET_SIGNER_CERTIFICATE = PVOID
// Will be changed at import time
@@ -76,4 +76,79 @@ typedef enum tagMSHLFLAGS {
MSHLFLAGS_TABLESTRONG = 1,
MSHLFLAGS_TABLEWEAK = 2,
MSHLFLAGS_NOPING = 4
} MSHLFLAGS;
} MSHLFLAGS;
typedef enum tagCALLFRAME_WALK {
CALLFRAME_WALK_IN = 1,
CALLFRAME_WALK_INOUT = 2,
CALLFRAME_WALK_OUT = 4
} CALLFRAME_WALK;
typedef struct tagSAFEARRAYBOUND
{
ULONG cElements;
LONG lLbound;
} SAFEARRAYBOUND, *LPSAFEARRAYBOUND;
typedef struct tagSAFEARRAY
{
USHORT cDims;
USHORT fFeatures;
ULONG cbElements;
ULONG cLocks;
PVOID pvData;
SAFEARRAYBOUND rgsabound[ 1 ];
} SAFEARRAY;
typedef struct __tagBRECORD {
PVOID pvRecord;
PVOID pRecInfo;
} _tagBRECORD;
union _ANON_TMP_variant_sub_union{
LONGLONG llVal;
LONG lVal;
BYTE bVal;
SHORT iVal;
FLOAT fltVal;
DOUBLE dblVal;
VARIANT_BOOL boolVal;
SCODE scode;
BSTR bstrVal;
PVOID punkVal;
PVOID pdispVal;
SAFEARRAY *parray;
BYTE *pbVal;
SHORT *piVal;
LONG *plVal;
LONGLONG *pllVal;
FLOAT *pfltVal;
DOUBLE *pdblVal;
VARIANT_BOOL *pboolVal;
SCODE *pscode;
BSTR *pbstrVal;
PVOID byref;
CHAR cVal;
USHORT uiVal;
ULONG ulVal;
ULONGLONG ullVal;
INT intVal;
UINT uintVal;
CHAR *pcVal;
USHORT *puiVal;
ULONG *pulVal;
ULONGLONG *pullVal;
INT *pintVal;
UINT *puintVal;
_tagBRECORD _VARIANT_NAME_4;
};
typedef struct __tagVARIANT {
VARTYPE vt;
WORD wReserved1;
WORD wReserved2;
WORD wReserved3;
_ANON_TMP_variant_sub_union _VARIANT_NAME_3;
} _tagVARIANT, VARIANT, VARIANTARG, *LPVARIANT, *LPVARIANTARG;
@@ -0,0 +1,697 @@
typedef struct _CERT_STRONG_SIGN_SERIALIZED_INFO {
DWORD dwFlags;
LPWSTR pwszCNGSignHashAlgids;
LPWSTR pwszCNGPubKeyMinBitLengths;
} CERT_STRONG_SIGN_SERIALIZED_INFO, *PCERT_STRONG_SIGN_SERIALIZED_INFO;
typedef union TMP_CERT_STRONG_SIGN_PARA_UNION_TYPE {
PVOID pvInfo;
PCERT_STRONG_SIGN_SERIALIZED_INFO pSerializedInfo;
LPSTR pszOID;
};
typedef struct _CERT_STRONG_SIGN_PARA {
DWORD cbSize;
DWORD dwInfoChoice;
TMP_CERT_STRONG_SIGN_PARA_UNION_TYPE tmp_union;
} CERT_STRONG_SIGN_PARA, *PCERT_STRONG_SIGN_PARA, *PCCERT_STRONG_SIGN_PARA;
typedef struct _CRYPTOAPI_BLOB {
DWORD cbData;
BYTE *pbData;
} CRYPT_INTEGER_BLOB, *PCRYPT_INTEGER_BLOB,
CRYPT_UINT_BLOB, *PCRYPT_UINT_BLOB,
CRYPT_OBJID_BLOB, *PCRYPT_OBJID_BLOB,
CERT_NAME_BLOB, *PCERT_NAME_BLOB,
CERT_RDN_VALUE_BLOB, *PCERT_RDN_VALUE_BLOB,
CERT_BLOB, *PCERT_BLOB,
CRL_BLOB, *PCRL_BLOB,
DATA_BLOB, *PDATA_BLOB,
CRYPT_DATA_BLOB, *PCRYPT_DATA_BLOB,
CRYPT_HASH_BLOB, *PCRYPT_HASH_BLOB,
CRYPT_DIGEST_BLOB, *PCRYPT_DIGEST_BLOB,
CRYPT_DER_BLOB, *PCRYPT_DER_BLOB,
CRYPT_ATTR_BLOB, *PCRYPT_ATTR_BLOB;
typedef struct CRYPTCATATTRIBUTE_ {
DWORD cbStruct;
LPWSTR pwszReferenceTag;
DWORD dwAttrTypeAndAction;
DWORD cbValue;
BYTE *pbValue;
DWORD dwReserved;
} CRYPTCATATTRIBUTE, *PCRYPTCATATTRIBUTE;
typedef struct _CRYPT_ATTRIBUTE_TYPE_VALUE {
LPSTR pszObjId;
CRYPT_OBJID_BLOB Value;
} CRYPT_ATTRIBUTE_TYPE_VALUE, *PCRYPT_ATTRIBUTE_TYPE_VALUE;
typedef struct _CRYPT_ALGORITHM_IDENTIFIER {
LPSTR pszObjId;
CRYPT_OBJID_BLOB Parameters;
} CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER;
typedef struct SIP_INDIRECT_DATA_
{
CRYPT_ATTRIBUTE_TYPE_VALUE Data;
CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm;
CRYPT_HASH_BLOB Digest;
} SIP_INDIRECT_DATA, *PSIP_INDIRECT_DATA;
typedef struct CRYPTCATMEMBER_ {
DWORD cbStruct;
LPWSTR pwszReferenceTag;
LPWSTR pwszFileName;
GUID gSubjectType;
DWORD fdwMemberFlags;
struct SIP_INDIRECT_DATA *pIndirectData;
DWORD dwCertVersion;
DWORD dwReserved;
HANDLE hReserved;
CRYPT_ATTR_BLOB sEncodedIndirectData;
CRYPT_ATTR_BLOB sEncodedMemberInfo;
} CRYPTCATMEMBER, *PCRYPTCATMEMBER;
typedef struct WINTRUST_FILE_INFO_
{
DWORD cbStruct;
LPCWSTR pcwszFilePath;
HANDLE hFile;
GUID *pgKnownSubject;
} WINTRUST_FILE_INFO, *PWINTRUST_FILE_INFO;
typedef struct _CRYPT_ATTRIBUTE {
LPSTR pszObjId;
DWORD cValue;
PCRYPT_ATTR_BLOB rgValue;
} CRYPT_ATTRIBUTE, *PCRYPT_ATTRIBUTE;
typedef struct _CTL_ENTRY {
CRYPT_DATA_BLOB SubjectIdentifier;
DWORD cAttribute;
PCRYPT_ATTRIBUTE rgAttribute;
} CTL_ENTRY, *PCTL_ENTRY;
typedef struct _CRYPT_ATTRIBUTE {
LPSTR pszObjId;
DWORD cValue;
PCRYPT_ATTR_BLOB rgValue;
} CRYPT_ATTRIBUTE, *PCRYPT_ATTRIBUTE;
typedef struct _CRYPT_ATTRIBUTES {
DWORD cAttr;
PCRYPT_ATTRIBUTE rgAttr;
} CRYPT_ATTRIBUTES, *PCRYPT_ATTRIBUTES;
typedef struct _CERT_EXTENSION {
LPSTR pszObjId;
BOOL fCritical;
CRYPT_OBJID_BLOB Value;
} CERT_EXTENSION, *PCERT_EXTENSION;
typedef struct _CRL_ENTRY {
CRYPT_INTEGER_BLOB SerialNumber;
FILETIME RevocationDate;
DWORD cExtension;
PCERT_EXTENSION rgExtension;
} CRL_ENTRY, *PCRL_ENTRY;
typedef struct _CRL_INFO {
DWORD dwVersion;
CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
CERT_NAME_BLOB Issuer;
FILETIME ThisUpdate;
FILETIME NextUpdate;
DWORD cCRLEntry;
PCRL_ENTRY rgCRLEntry;
DWORD cExtension;
PCERT_EXTENSION rgExtension;
} CRL_INFO, *PCRL_INFO;
typedef struct _CRL_CONTEXT {
DWORD dwCertEncodingType;
BYTE *pbCrlEncoded;
DWORD cbCrlEncoded;
PCRL_INFO pCrlInfo;
HCERTSTORE hCertStore;
} CRL_CONTEXT, *PCRL_CONTEXT, *PCCRL_CONTEXT;
typedef struct _CMSG_SIGNER_INFO {
DWORD dwVersion;
CERT_NAME_BLOB Issuer;
CRYPT_INTEGER_BLOB SerialNumber;
CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
CRYPT_DATA_BLOB EncryptedHash;
CRYPT_ATTRIBUTES AuthAttrs;
CRYPT_ATTRIBUTES UnauthAttrs;
} CMSG_SIGNER_INFO, *PCMSG_SIGNER_INFO;
typedef struct _CTL_USAGE {
DWORD cUsageIdentifier;
LPSTR *rgpszUsageIdentifier;
} CTL_USAGE, *PCTL_USAGE, CERT_ENHKEY_USAGE, *PCERT_ENHKEY_USAGE;
typedef struct _CTL_INFO {
DWORD dwVersion;
CTL_USAGE SubjectUsage;
CRYPT_DATA_BLOB ListIdentifier;
CRYPT_INTEGER_BLOB SequenceNumber;
FILETIME ThisUpdate;
FILETIME NextUpdate;
CRYPT_ALGORITHM_IDENTIFIER SubjectAlgorithm;
DWORD cCTLEntry;
PCTL_ENTRY rgCTLEntry;
DWORD cExtension;
PCERT_EXTENSION rgExtension;
} CTL_INFO, *PCTL_INFO;
typedef struct _CTL_CONTEXT {
DWORD dwMsgAndCertEncodingType;
BYTE *pbCtlEncoded;
DWORD cbCtlEncoded;
PCTL_INFO pCtlInfo;
HCERTSTORE hCertStore;
HCRYPTMSG hCryptMsg;
BYTE *pbCtlContent;
DWORD cbCtlContent;
} CTL_CONTEXT, *PCTL_CONTEXT, *PCCTL_CONTEXT;
typedef struct WINTRUST_CATALOG_INFO_
{
DWORD cbStruct;
DWORD dwCatalogVersion;
LPCWSTR pcwszCatalogFilePath;
LPCWSTR pcwszMemberTag;
LPCWSTR pcwszMemberFilePath;
HANDLE hMemberFile;
BYTE *pbCalculatedFileHash;
DWORD cbCalculatedFileHash;
PCCTL_CONTEXT pcCatalogContext;
} WINTRUST_CATALOG_INFO, *PWINTRUST_CATALOG_INFO;
typedef struct WINTRUST_BLOB_INFO_
{
DWORD cbStruct;
GUID gSubject;
LPCWSTR pcwszDisplayName;
DWORD cbMemObject;
BYTE *pbMemObject;
DWORD cbMemSignedMsg;
BYTE *pbMemSignedMsg;
} WINTRUST_BLOB_INFO, *PWINTRUST_BLOB_INFO;
typedef struct _CRYPT_BIT_BLOB {
DWORD cbData;
BYTE *pbData;
DWORD cUnusedBits;
} CRYPT_BIT_BLOB, *PCRYPT_BIT_BLOB;
typedef struct _CERT_PUBLIC_KEY_INFO {
CRYPT_ALGORITHM_IDENTIFIER Algorithm;
CRYPT_BIT_BLOB PublicKey;
} CERT_PUBLIC_KEY_INFO, *PCERT_PUBLIC_KEY_INFO;
typedef struct _CERT_INFO {
DWORD dwVersion;
CRYPT_INTEGER_BLOB SerialNumber;
CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
CERT_NAME_BLOB Issuer;
FILETIME NotBefore;
FILETIME NotAfter;
CERT_NAME_BLOB Subject;
CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
CRYPT_BIT_BLOB IssuerUniqueId;
CRYPT_BIT_BLOB SubjectUniqueId;
DWORD cExtension;
PCERT_EXTENSION rgExtension;
} CERT_INFO, *PCERT_INFO;
typedef struct _CERT_ISSUER_SERIAL_NUMBER {
CERT_NAME_BLOB Issuer;
CRYPT_INTEGER_BLOB SerialNumber;
} CERT_ISSUER_SERIAL_NUMBER, *PCERT_ISSUER_SERIAL_NUMBER;
typedef union _TMPUNION_CERT_ID {
CERT_ISSUER_SERIAL_NUMBER IssuerSerialNumber;
CRYPT_HASH_BLOB KeyId;
CRYPT_HASH_BLOB HashId;
} TMPUNION_CERT_ID;
typedef struct _CERT_ID {
DWORD dwIdChoice;
TMPUNION_CERT_ID DUMMYUNIONNAME;
} CERT_ID, *PCERT_ID;
typedef struct _CERT_CONTEXT {
DWORD dwCertEncodingType;
BYTE *pbCertEncoded;
DWORD cbCertEncoded;
PCERT_INFO pCertInfo;
HCERTSTORE hCertStore;
} CERT_CONTEXT, *PCERT_CONTEXT, *PCCERT_CONTEXT;
typedef struct WINTRUST_SGNR_INFO_
{
DWORD cbStruct;
LPCWSTR pcwszDisplayName;
CMSG_SIGNER_INFO *psSignerInfo;
DWORD chStores;
HCERTSTORE *pahStores;
} WINTRUST_SGNR_INFO, *PWINTRUST_SGNR_INFO;
typedef struct WINTRUST_CERT_INFO_
{
DWORD cbStruct;
LPCWSTR pcwszDisplayName;
CERT_CONTEXT *psCertContext;
DWORD chStores;
HCERTSTORE *pahStores;
DWORD dwFlags;
FILETIME *psftVerifyAsOf;
} WINTRUST_CERT_INFO, *PWINTRUST_CERT_INFO;
typedef union _TMP_WINTRUST_UNION_TYPE
{
struct WINTRUST_FILE_INFO_ *pFile;
struct WINTRUST_CATALOG_INFO_ *pCatalog;
struct WINTRUST_BLOB_INFO_ *pBlob;
struct WINTRUST_SGNR_INFO_ *pSgnr;
struct WINTRUST_CERT_INFO_ *pCert;
} TMP_WINTRUST_UNION_TYPE;
typedef struct _WINTRUST_DATA
{
DWORD cbStruct;
LPVOID pPolicyCallbackData;
LPVOID pSIPClientData;
DWORD dwUIChoice;
DWORD fdwRevocationChecks;
DWORD dwUnionChoice;
TMP_WINTRUST_UNION_TYPE tmp_union;
DWORD dwStateAction;
HANDLE hWVTStateData;
WCHAR *pwszURLReference;
DWORD dwProvFlags;
DWORD dwUIContext;
} WINTRUST_DATA, *PWINTRUST_DATA;
typedef struct _CRYPT_SIGN_MESSAGE_PARA {
DWORD cbSize;
DWORD dwMsgEncodingType;
PCCERT_CONTEXT pSigningCert;
CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
PVOID pvHashAuxInfo;
DWORD cMsgCert;
PCCERT_CONTEXT *rgpMsgCert;
DWORD cMsgCrl;
PCCRL_CONTEXT *rgpMsgCrl;
DWORD cAuthAttr;
PCRYPT_ATTRIBUTE rgAuthAttr;
DWORD cUnauthAttr;
PCRYPT_ATTRIBUTE rgUnauthAttr;
DWORD dwFlags;
DWORD dwInnerContentType;
CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
PVOID pvHashEncryptionAuxInfo;
} CRYPT_SIGN_MESSAGE_PARA, *PCRYPT_SIGN_MESSAGE_PARA;
typedef struct _CRYPT_HASH_MESSAGE_PARA {
DWORD cbSize;
DWORD dwMsgEncodingType;
HCRYPTPROV_LEGACY hCryptProv;
CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
PVOID pvHashAuxInfo;
} CRYPT_HASH_MESSAGE_PARA, *PCRYPT_HASH_MESSAGE_PARA;
typedef struct _CRYPT_KEY_VERIFY_MESSAGE_PARA {
DWORD cbSize;
DWORD dwMsgEncodingType;
HCRYPTPROV_LEGACY hCryptProv;
} CRYPT_KEY_VERIFY_MESSAGE_PARA, *PCRYPT_KEY_VERIFY_MESSAGE_PARA;
typedef struct _CRYPT_VERIFY_MESSAGE_PARA {
DWORD cbSize;
DWORD dwMsgAndCertEncodingType;
HCRYPTPROV_LEGACY hCryptProv;
PFN_CRYPT_GET_SIGNER_CERTIFICATE pfnGetSignerCertificate;
PVOID pvGetArg;
PCCERT_STRONG_SIGN_PARA pStrongSignPara;
} CRYPT_VERIFY_MESSAGE_PARA, *PCRYPT_VERIFY_MESSAGE_PARA;
typedef struct _SPC_SERIALIZED_OBJECT
{
SPC_UUID ClassId;
CRYPT_DATA_BLOB SerializedData;
} SPC_SERIALIZED_OBJECT, *PSPC_SERIALIZED_OBJECT;
typedef union _TMP_SPC_LINK_UNION
{
LPWSTR pwszUrl;
SPC_SERIALIZED_OBJECT Moniker;
LPWSTR pwszFile;
} TMP_SPC_LINK_UNION;
typedef struct SPC_LINK_
{
DWORD dwLinkChoice;
TMP_SPC_LINK_UNION u;
} SPC_LINK, *PSPC_LINK;
typedef struct _SPC_SP_OPUS_INFO
{
LPCWSTR pwszProgramName;
struct SPC_LINK_ *pMoreInfo;
struct SPC_LINK_ *pPublisherInfo;
} SPC_SP_OPUS_INFO, *PSPC_SP_OPUS_INFO;
typedef struct _CERT_TRUST_STATUS {
DWORD dwErrorStatus;
DWORD dwInfoStatus;
} CERT_TRUST_STATUS, *PCERT_TRUST_STATUS;
typedef struct _CERT_TRUST_LIST_INFO {
DWORD cbSize;
PCTL_ENTRY pCtlEntry;
PCCTL_CONTEXT pCtlContext;
} CERT_TRUST_LIST_INFO, *PCERT_TRUST_LIST_INFO;
typedef struct _CERT_REVOCATION_CRL_INFO {
DWORD cbSize;
PCCRL_CONTEXT pBaseCrlContext;
PCCRL_CONTEXT pDeltaCrlContext;
PCRL_ENTRY pCrlEntry;
BOOL fDeltaCrlEntry;
} CERT_REVOCATION_CRL_INFO, *PCERT_REVOCATION_CRL_INFO;
typedef struct _CERT_REVOCATION_INFO {
DWORD cbSize;
DWORD dwRevocationResult;
LPCSTR pszRevocationOid;
LPVOID pvOidSpecificInfo;
BOOL fHasFreshnessTime;
DWORD dwFreshnessTime;
PCERT_REVOCATION_CRL_INFO pCrlInfo;
} CERT_REVOCATION_INFO, *PCERT_REVOCATION_INFO;
typedef struct _CERT_CHAIN_ELEMENT {
DWORD cbSize;
PCCERT_CONTEXT pCertContext;
CERT_TRUST_STATUS TrustStatus;
PCERT_REVOCATION_INFO pRevocationInfo;
PCERT_ENHKEY_USAGE pIssuanceUsage;
PCERT_ENHKEY_USAGE pApplicationUsage;
LPCWSTR pwszExtendedErrorInfo;
} CERT_CHAIN_ELEMENT, *PCERT_CHAIN_ELEMENT, *PCCERT_CHAIN_ELEMENT;
typedef struct _CERT_SIMPLE_CHAIN {
DWORD cbSize;
CERT_TRUST_STATUS TrustStatus;
DWORD cElement;
PCERT_CHAIN_ELEMENT* rgpElement;
PCERT_TRUST_LIST_INFO pTrustListInfo;
BOOL fHasRevocationFreshnessTime;
DWORD dwRevocationFreshnessTime;
} CERT_SIMPLE_CHAIN, *PCERT_SIMPLE_CHAIN, *PCCERT_SIMPLE_CHAIN;
typedef struct _CERT_CHAIN_CONTEXT {
DWORD cbSize;
CERT_TRUST_STATUS TrustStatus;
DWORD cChain;
PCERT_SIMPLE_CHAIN* rgpChain;
DWORD cLowerQualityChainContext;
PCCERT_CHAIN_CONTEXT* rgpLowerQualityChainContext;
BOOL fHasRevocationFreshnessTime;
DWORD dwRevocationFreshnessTime;
DWORD dwCreateFlags;
GUID ChainId;
}CERT_CHAIN_CONTEXT, *PCERT_CHAIN_CONTEXT, *PCCERT_CHAIN_CONTEXT;
typedef struct _CERT_USAGE_MATCH {
DWORD dwType;
CERT_ENHKEY_USAGE Usage;
} CERT_USAGE_MATCH, *PCERT_USAGE_MATCH;
typedef struct _CERT_CHAIN_PARA {
DWORD cbSize;
CERT_USAGE_MATCH RequestedUsage;
CERT_USAGE_MATCH RequestedIssuancePolicy;
DWORD dwUrlRetrievalTimeout;
BOOL fCheckRevocationFreshnessTime;
DWORD dwRevocationFreshnessTime;
LPFILETIME pftCacheResync;
} CERT_CHAIN_PARA, *PCERT_CHAIN_PARA;
typedef struct _CERT_CHAIN_ENGINE_CONFIG {
DWORD cbSize;
HCERTSTORE hRestrictedRoot;
HCERTSTORE hRestrictedTrust;
HCERTSTORE hRestrictedOther;
DWORD cAdditionalStore;
HCERTSTORE* rghAdditionalStore;
DWORD dwFlags;
DWORD dwUrlRetrievalTimeout;
DWORD MaximumCachedCertificates;
DWORD CycleDetectionModulus;
} CERT_CHAIN_ENGINE_CONFIG, *PCERT_CHAIN_ENGINE_CONFIG;
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
typedef struct _CERT_EXTENSIONS {
DWORD cExtension;
PCERT_EXTENSION rgExtension;
} CERT_EXTENSIONS, *PCERT_EXTENSIONS;
typedef struct _CRYPT_KEY_PROV_PARAM {
DWORD dwParam;
BYTE *pbData;
DWORD cbData;
DWORD dwFlags;
} CRYPT_KEY_PROV_PARAM, *PCRYPT_KEY_PROV_PARAM;
typedef struct _CRYPT_KEY_PROV_INFO {
LPWSTR pwszContainerName;
LPWSTR pwszProvName;
DWORD dwProvType;
DWORD dwFlags;
DWORD cProvParam;
PCRYPT_KEY_PROV_PARAM rgProvParam;
DWORD dwKeySpec;
} CRYPT_KEY_PROV_INFO, *PCRYPT_KEY_PROV_INFO;
typedef struct _CRYPT_ENCRYPT_MESSAGE_PARA {
DWORD cbSize;
DWORD dwMsgEncodingType;
HCRYPTPROV_LEGACY hCryptProv;
CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
VOID *pvEncryptionAuxInfo;
DWORD dwFlags;
DWORD dwInnerContentType;
} CRYPT_ENCRYPT_MESSAGE_PARA, *PCRYPT_ENCRYPT_MESSAGE_PARA;
typedef struct _CRYPT_DECRYPT_MESSAGE_PARA {
DWORD cbSize;
DWORD dwMsgAndCertEncodingType;
DWORD cCertStore;
HCERTSTORE *rghCertStore;
DWORD dwFlags;
} CRYPT_DECRYPT_MESSAGE_PARA, *PCRYPT_DECRYPT_MESSAGE_PARA;
typedef struct _CERT_KEY_CONTEXT {
DWORD cbSize;
HCRYPTPROV hCryptProv;
DWORD dwKeySpec;
} CERT_KEY_CONTEXT, *PCERT_KEY_CONTEXT;
typedef struct _CRYPT_ENCODE_PARA {
DWORD cbSize;
PVOID pfnAlloc;
PVOID pfnFree;
} CRYPT_ENCODE_PARA, *PCRYPT_ENCODE_PARA;
typedef union _TMPUNION_CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO {
HCRYPTKEY hKeyEncryptionKey;
PVOID pvKeyEncryptionKey;
}TMPUNION_CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO;
typedef struct _CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO {
DWORD cbSize;
CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
PVOID pvKeyEncryptionAuxInfo;
HCRYPTPROV hCryptProv;
DWORD dwKeyChoice;
TMPUNION_CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO DUMMYUNIONNAME;
CRYPT_DATA_BLOB KeyId;
FILETIME Date;
PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
} CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO, *PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO;
typedef struct _CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO {
DWORD cbSize;
CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
PVOID pvKeyEncryptionAuxInfo;
HCRYPTPROV_LEGACY hCryptProv;
CRYPT_BIT_BLOB RecipientPublicKey;
CERT_ID RecipientId;
} CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO, *PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO;
typedef struct _CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO {
DWORD cbSize;
CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
PVOID pvKeyEncryptionAuxInfo;
HCRYPTPROV_LEGACY hCryptProv;
CRYPT_BIT_BLOB RecipientPublicKey;
CERT_ID RecipientId;
} CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO, *PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO;
typedef union _TMPUNION_CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO {
PCRYPT_ALGORITHM_IDENTIFIER pEphemeralAlgorithm;
PCERT_ID pSenderId;
}TMPUNION_CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO;
typedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO {
DWORD cbSize;
CRYPT_BIT_BLOB RecipientPublicKey;
CERT_ID RecipientId;
FILETIME Date;
PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
} CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO, *PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO;
typedef struct _CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO {
DWORD cbSize;
CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
PVOID pvKeyEncryptionAuxInfo;
CRYPT_ALGORITHM_IDENTIFIER KeyWrapAlgorithm;
PVOID pvKeyWrapAuxInfo;
HCRYPTPROV_LEGACY hCryptProv;
DWORD dwKeySpec;
DWORD dwKeyChoice;
TMPUNION_CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO DUMMYUNIONNAME;
CRYPT_DATA_BLOB UserKeyingMaterial;
DWORD cRecipientEncryptedKeys;
PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO *rgpRecipientEncryptedKeys;
} CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO, *PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO;
typedef union _TMP_CMSG_RECIPIENT_ENCODE_INFO_UNION {
PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTrans;
PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO pKeyAgree;
PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO pMailList;
} TMP_CMSG_RECIPIENT_ENCODE_INFO_UNION;
typedef struct _CMSG_RECIPIENT_ENCODE_INFO {
DWORD dwRecipientChoice;
TMP_CMSG_RECIPIENT_ENCODE_INFO_UNION DUMMYUNIONNAME;
} CMSG_RECIPIENT_ENCODE_INFO, *PCMSG_RECIPIENT_ENCODE_INFO;
typedef struct _CMSG_ENVELOPED_ENCODE_INFO {
DWORD cbSize;
HCRYPTPROV_LEGACY hCryptProv;
CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
PVOID pvEncryptionAuxInfo;
DWORD cRecipients;
PCERT_INFO *rgpRecipients;
PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients;
DWORD cCertEncoded;
PCERT_BLOB rgCertEncoded;
DWORD cCrlEncoded;
PCRL_BLOB rgCrlEncoded;
DWORD cAttrCertEncoded;
PCERT_BLOB rgAttrCertEncoded;
DWORD cUnprotectedAttr;
PCRYPT_ATTRIBUTE rgUnprotectedAttr;
} CMSG_ENVELOPED_ENCODE_INFO, *PCMSG_ENVELOPED_ENCODE_INFO;
typedef struct _CMSG_STREAM_INFO {
DWORD cbContent;
PVOID pfnStreamOutput;
PVOID pvArg;
} CMSG_STREAM_INFO, *PCMSG_STREAM_INFO;
typedef union _TMPUNION_CMSG_CTRL_DECRYPT_PARA {
HCRYPTPROV hCryptProv;
NCRYPT_KEY_HANDLE hNCryptKey;
} TMPUNION_CMSG_CTRL_DECRYPT_PARA;
typedef struct _CMSG_CTRL_DECRYPT_PARA {
DWORD cbSize;
TMPUNION_CMSG_CTRL_DECRYPT_PARA DUMMYUNIONNAME;
DWORD dwKeySpec;
DWORD dwRecipientIndex;
} CMSG_CTRL_DECRYPT_PARA, *PCMSG_CTRL_DECRYPT_PARA;
@@ -152,7 +152,6 @@ typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION {
} FILE_IS_REMOTE_DEVICE_INFORMATION, *PFILE_IS_REMOTE_DEVICE_INFORMATION;
typedef struct _FILE_ALL_INFORMATION {
FILE_BASIC_INFORMATION BasicInformation;
FILE_STANDARD_INFORMATION StandardInformation;
@@ -163,4 +162,33 @@ typedef struct _FILE_ALL_INFORMATION {
FILE_MODE_INFORMATION ModeInformation;
FILE_ALIGNMENT_INFORMATION AlignmentInformation;
FILE_NAME_INFORMATION NameInformation;
} FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
} FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
typedef struct _FILE_STREAM_INFORMATION {
ULONG NextEntryOffset;
ULONG StreamNameLength;
LARGE_INTEGER StreamSize;
LARGE_INTEGER StreamAllocationSize;
WCHAR StreamName[1];
} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
typedef struct _FILE_DISPOSITION_INFORMATION {
BOOLEAN DeleteFile;
} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
typedef struct _FILE_FULL_EA_INFORMATION
{
ULONG NextEntryOffset;
UCHAR Flags;
UCHAR EaNameLength;
USHORT EaValueLength;
CHAR EaName[1];
} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
typedef struct _FILE_GET_EA_INFORMATION
{
ULONG NextEntryOffset;
UCHAR EaNameLength;
CHAR EaName[1];
} FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
@@ -5,4 +5,4 @@ typedef struct _GUID {
USHORT Data2;
USHORT Data3;
BYTE Data4[ 8 ];
} GUID, IID, CLSID, *REFIID, *REFCLSID, *LPGUID, *REFGUID;
} GUID, IID, CLSID, *REFIID, *REFCLSID, *LPGUID, *REFGUID, *LPCLSID;
@@ -0,0 +1,182 @@
typedef enum _PROCESS_MITIGATION_POLICY {
ProcessDEPPolicy,
ProcessASLRPolicy,
ProcessDynamicCodePolicy,
ProcessStrictHandleCheckPolicy,
ProcessSystemCallDisablePolicy,
ProcessMitigationOptionsMask,
ProcessExtensionPointDisablePolicy,
ProcessReserved1Policy,
ProcessSignaturePolicy,
MaxProcessMitigationPolicy
} PROCESS_MITIGATION_POLICY, *PPROCESS_MITIGATION_POLICY;
// DEP Policy
struct _ANON_PROCESS_MITIGATION_DEP_POLICY_BITFIELD {
DWORD Enable : 1;
DWORD DisableAtlThunkEmulation : 1;
DWORD ReservedFlags : 30;
};
union _ANON_PROCESS_MITIGATION_DEP_POLICY_UNION {
DWORD Flags;
_ANON_PROCESS_MITIGATION_DEP_POLICY_BITFIELD anon;
};
typedef struct _PROCESS_MITIGATION_DEP_POLICY {
_ANON_PROCESS_MITIGATION_DEP_POLICY_UNION anon;
BOOLEAN Permanent;
} PROCESS_MITIGATION_DEP_POLICY, *PPROCESS_MITIGATION_DEP_POLICY;
// ASLR policy
struct _ANON_PROCESS_MITIGATION_ASLR_POLICY_BITFIELD {
DWORD EnableBottomUpRandomization : 1;
DWORD EnableForceRelocateImages : 1;
DWORD EnableHighEntropy : 1;
DWORD DisallowStrippedImages : 1;
DWORD ReservedFlags : 28;
};
union _ANON_PROCESS_MITIGATION_ASLR_POLICY_UNION {
DWORD Flags;
_ANON_PROCESS_MITIGATION_ASLR_POLICY_BITFIELD anon;
};
typedef struct _PROCESS_MITIGATION_ASLR_POLICY {
_ANON_PROCESS_MITIGATION_ASLR_POLICY_UNION anon;
} PROCESS_MITIGATION_ASLR_POLICY, *PPROCESS_MITIGATION_ASLR_POLICY;
// Dynamic code policy
struct _ANON_PROCESS_MITIGATION_DYNAMIC_CODE_POLICY_BITFIELD {
DWORD ProhibitDynamicCode :1;
DWORD AllowThreadOptOut :1;
DWORD AllowRemoteDowngrade :1;
DWORD ReservedFlags :30;
};
union _ANON_PROCESS_MITIGATION_DYNAMIC_CODE_POLICY_UNION {
DWORD Flags;
_ANON_PROCESS_MITIGATION_DYNAMIC_CODE_POLICY_BITFIELD anon;
};
typedef struct _PROCESS_MITIGATION_DYNAMIC_CODE_POLICY {
_ANON_PROCESS_MITIGATION_DYNAMIC_CODE_POLICY_UNION anon;
} PROCESS_MITIGATION_DYNAMIC_CODE_POLICY, *PPROCESS_MITIGATION_DYNAMIC_CODE_POLICY;
//Strict handle policy
struct _ANON_PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY_BITFIELD {
DWORD RaiseExceptionOnInvalidHandleReference : 1;
DWORD HandleExceptionsPermanentlyEnabled : 1;
DWORD ReservedFlags : 30;
};
union _ANON_PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY_UNION {
DWORD Flags;
_ANON_PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY_BITFIELD ANON_STRUCT;
};
typedef struct _PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY {
_ANON_PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY_UNION anon;
} PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY, *PPROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY;
// System Call policy
struct _ANON_PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY_BITFIELD {
DWORD DisallowWin32kSystemCalls : 1;
DWORD ReservedFlags : 31;
};
union _ANON_PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY_UNION {
DWORD Flags;
_ANON_PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY_BITFIELD ANON_STRUCT;
};
typedef struct _PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY {
_ANON_PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY_UNION anon;
} PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY, *PPROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY;
// EXTENSION POINT policy
struct _ANON_PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY_BITFIELD {
DWORD DisableExtensionPoints : 1;
DWORD ReservedFlags : 31;
};
union _ANON_PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY_UNION {
DWORD Flags;
_ANON_PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY_BITFIELD ANON_STRUCT;
};
typedef struct _PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY {
_ANON_PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY_UNION anon;
} PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY, *PPROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY;
// CFG policy
struct _ANON_PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY_BITFIELD {
DWORD EnableControlFlowGuard :1;
DWORD EnableExportSuppression :1;
DWORD StrictMode :1;
DWORD ReservedFlags :29;
};
union _ANON_PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY_UNION {
DWORD Flags;
_ANON_PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY_BITFIELD ANON_STRUCT;
};
typedef struct _PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY {
_ANON_PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY_UNION anon;
} PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY, *PPROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY;
// BINARY SIGNATURE policy
struct _ANON_PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY_BITFIELD {
DWORD MicrosoftSignedOnly :1;
DWORD StoreSignedOnly :1;
DWORD MitigationOptIn :1;
DWORD ReservedFlags :29;
};
union _ANON_PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY_UNION {
DWORD Flags;
_ANON_PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY_BITFIELD ANON_STRUCT;
};
typedef struct _PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY {
_ANON_PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY_UNION anon;
} PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY, *PPROCESS_MITIGATION_BINARY_SIGNATURE_POLICY;
// Font disable policy
struct _ANON_PROCESS_MITIGATION_IMAGE_LOAD_POLICY_BITFIELD {
DWORD NoRemoteImages :1;
DWORD NoLowMandatoryLabelImages :1;
DWORD PreferSystem32Images :1;
DWORD ReservedFlags :29;
};
union _ANON_PROCESS_MITIGATION_IMAGE_LOAD_POLICY_UNION {
DWORD Flags;
_ANON_PROCESS_MITIGATION_IMAGE_LOAD_POLICY_BITFIELD ANON_STRUCT;
};
typedef struct _PROCESS_MITIGATION_IMAGE_LOAD_POLICY {
_ANON_PROCESS_MITIGATION_IMAGE_LOAD_POLICY_UNION anon;
} PROCESS_MITIGATION_IMAGE_LOAD_POLICY, *PPROCESS_MITIGATION_IMAGE_LOAD_POLICY;
@@ -0,0 +1,34 @@
typedef enum _KEY_VALUE_INFORMATION_CLASS {
KeyValueBasicInformation ,
KeyValueFullInformation ,
KeyValuePartialInformation ,
KeyValueFullInformationAlign64 ,
KeyValuePartialInformationAlign64 ,
KeyValueLayerInformation ,
MaxKeyValueInfoClass
} KEY_VALUE_INFORMATION_CLASS;
typedef struct _KEY_VALUE_BASIC_INFORMATION {
ULONG TitleIndex;
ULONG Type;
ULONG NameLength;
WCHAR Name[1];
} KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
typedef struct _KEY_VALUE_FULL_INFORMATION {
ULONG TitleIndex;
ULONG Type;
ULONG DataOffset;
ULONG DataLength;
ULONG NameLength;
WCHAR Name[1];
} KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
ULONG TitleIndex;
ULONG Type;
ULONG DataLength;
UCHAR Data[1];
} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
@@ -0,0 +1,265 @@
/* Enum */
typedef enum _ACL_INFORMATION_CLASS {
AclRevisionInformation = 1,
AclSizeInformation = 2,
} ACL_INFORMATION_CLASS;
/* ACL Stuff */
typedef struct _ACL {
BYTE AclRevision;
BYTE Sbz1;
WORD AclSize;
WORD AceCount;
WORD Sbz2;
} ACL, *PACL;
typedef struct _ACL_REVISION_INFORMATION {
DWORD AclRevision;
} ACL_REVISION_INFORMATION, *PACL_REVISION_INFORMATION;
typedef struct _ACL_SIZE_INFORMATION {
DWORD AceCount;
DWORD AclBytesInUse;
DWORD AclBytesFree;
} ACL_SIZE_INFORMATION, *PACL_SIZE_INFORMATION;
typedef struct _ACE_HEADER {
BYTE AceType;
BYTE AceFlags;
WORD AceSize;
} ACE_HEADER, *PACE_HEADER;
typedef struct _ACCESS_ALLOWED_ACE {
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} ACCESS_ALLOWED_ACE, *PACCESS_ALLOWED_ACE;
typedef struct _ACCESS_ALLOWED_CALLBACK_ACE {
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} ACCESS_ALLOWED_CALLBACK_ACE, *PACCESS_ALLOWED_CALLBACK_ACE;
typedef struct _ACCESS_ALLOWED_CALLBACK_OBJECT_ACE {
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD Flags;
GUID ObjectType;
GUID InheritedObjectType;
DWORD SidStart;
} ACCESS_ALLOWED_CALLBACK_OBJECT_ACE, *PACCESS_ALLOWED_CALLBACK_OBJECT_ACE;
typedef struct _ACCESS_DENIED_CALLBACK_OBJECT_ACE {
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD Flags;
GUID ObjectType;
GUID InheritedObjectType;
DWORD SidStart;
// Opaque resource manager specific data
} ACCESS_DENIED_CALLBACK_OBJECT_ACE, *PACCESS_DENIED_CALLBACK_OBJECT_ACE;
typedef struct _ACCESS_ALLOWED_OBJECT_ACE {
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD Flags;
GUID ObjectType;
GUID InheritedObjectType;
DWORD SidStart;
} ACCESS_ALLOWED_OBJECT_ACE, *PACCESS_ALLOWED_OBJECT_ACE;
typedef struct _ACCESS_DENIED_ACE {
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} ACCESS_DENIED_ACE, *PACCESS_DENIED_ACE;
typedef struct _ACCESS_DENIED_CALLBACK_ACE {
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} ACCESS_DENIED_CALLBACK_ACE, *PACCESS_DENIED_CALLBACK_ACE;
typedef struct _ACCESS_DENIED_OBJECT_ACE {
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD Flags;
GUID ObjectType;
GUID InheritedObjectType;
DWORD SidStart;
} ACCESS_DENIED_OBJECT_ACE, *PACCESS_DENIED_OBJECT_ACE;
typedef struct _SYSTEM_MANDATORY_LABEL_ACE {
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} SYSTEM_MANDATORY_LABEL_ACE, *PSYSTEM_MANDATORY_LABEL_ACE;
typedef struct _SYSTEM_AUDIT_ACE {
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} SYSTEM_AUDIT_ACE;
typedef struct _SYSTEM_ALARM_ACE {
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} SYSTEM_ALARM_ACE;
typedef struct _SYSTEM_RESOURCE_ATTRIBUTE_ACE {
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} SYSTEM_RESOURCE_ATTRIBUTE_ACE, *PSYSTEM_RESOURCE_ATTRIBUTE_ACE;
typedef struct _SYSTEM_SCOPED_POLICY_ID_ACE {
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} SYSTEM_SCOPED_POLICY_ID_ACE, *PSYSTEM_SCOPED_POLICY_ID_ACE;
typedef struct _SYSTEM_PROCESS_TRUST_LABEL_ACE {
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} SYSTEM_PROCESS_TRUST_LABEL_ACE, *PSYSTEM_PROCESS_TRUST_LABEL_ACE;
typedef struct _SYSTEM_AUDIT_OBJECT_ACE {
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD Flags;
GUID ObjectType;
GUID InheritedObjectType;
DWORD SidStart;
} SYSTEM_AUDIT_OBJECT_ACE, *PSYSTEM_AUDIT_OBJECT_ACE;
typedef struct _SYSTEM_ALARM_OBJECT_ACE {
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD Flags;
GUID ObjectType;
GUID InheritedObjectType;
DWORD SidStart;
} SYSTEM_ALARM_OBJECT_ACE, *PSYSTEM_ALARM_OBJECT_ACE;
typedef struct _SYSTEM_AUDIT_CALLBACK_ACE {
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} SYSTEM_AUDIT_CALLBACK_ACE, *PSYSTEM_AUDIT_CALLBACK_ACE;
typedef struct _SYSTEM_ALARM_CALLBACK_ACE {
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} SYSTEM_ALARM_CALLBACK_ACE, *PSYSTEM_ALARM_CALLBACK_ACE;
typedef struct _SYSTEM_AUDIT_CALLBACK_OBJECT_ACE {
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD Flags;
GUID ObjectType;
GUID InheritedObjectType;
DWORD SidStart;
} SYSTEM_AUDIT_CALLBACK_OBJECT_ACE, *PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE;
typedef struct _SYSTEM_ALARM_CALLBACK_OBJECT_ACE {
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD Flags;
GUID ObjectType;
GUID InheritedObjectType;
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 union _CLAIM_SECURITY_ATTRIBUTE_V1_UNION {
PLONG64 pInt64;
PDWORD64 pUint64;
PWSTR *ppString;
PCLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE pFqbn;
PCLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE pOctetString;
} CLAIM_SECURITY_ATTRIBUTE_V1_UNION;
typedef struct _CLAIM_SECURITY_ATTRIBUTE_V1 {
PWSTR Name;
WORD ValueType;
WORD Reserved;
DWORD Flags;
DWORD ValueCount;
CLAIM_SECURITY_ATTRIBUTE_V1_UNION Values;
} CLAIM_SECURITY_ATTRIBUTE_V1, *PCLAIM_SECURITY_ATTRIBUTE_V1;
typedef union _CLAIM_SECURITY_ATTRIBUTES_INFORMATION_UNION {
PCLAIM_SECURITY_ATTRIBUTE_V1 pAttributeV1;
} CLAIM_SECURITY_ATTRIBUTES_INFORMATION_UNION;
typedef struct _CLAIM_SECURITY_ATTRIBUTES_INFORMATION {
WORD Version;
WORD Reserved;
DWORD AttributeCount;
CLAIM_SECURITY_ATTRIBUTES_INFORMATION_UNION Attribute;
} CLAIM_SECURITY_ATTRIBUTES_INFORMATION, *PCLAIM_SECURITY_ATTRIBUTES_INFORMATION;
typedef struct _SECURITY_DESCRIPTOR {
BYTE Revision;
BYTE Sbz1;
SECURITY_DESCRIPTOR_CONTROL Control;
PSID Owner;
PSID Group;
PACL Sacl;
PACL Dacl;
} SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
@@ -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;
@@ -0,0 +1,85 @@
typedef enum _TASK_ACTION_TYPE{
TASK_ACTION_EXEC = 0,
TASK_ACTION_COM_HANDLER = 5,
TASK_ACTION_SEND_EMAIL = 6,
TASK_ACTION_SHOW_MESSAGE = 7
} TASK_ACTION_TYPE;
typedef enum _TASK_RUNLEVEL_TYPE{
TASK_RUNLEVEL_LUA = 0,
TASK_RUNLEVEL_HIGHEST = 1
} TASK_RUNLEVEL_TYPE;
typedef enum _TASK_LOGON_TYPE{
TASK_LOGON_NONE = 0,
TASK_LOGON_PASSWORD = 1,
TASK_LOGON_S4U = 2,
TASK_LOGON_INTERACTIVE_TOKEN = 3,
TASK_LOGON_GROUP = 4,
TASK_LOGON_SERVICE_ACCOUNT = 5,
TASK_LOGON_INTERACTIVE_TOKEN_OR_PASSWORD = 6
} TASK_LOGON_TYPE;
typedef enum _TASK_STATE {
TASK_STATE_UNKNOWN = 0,
TASK_STATE_DISABLED = 1,
TASK_STATE_QUEUED = 2,
TASK_STATE_READY = 3,
TASK_STATE_RUNNING = 4
} TASK_STATE;
typedef enum _TASK_INSTANCES_POLICY {
TASK_INSTANCES_PARALLEL = 0,
TASK_INSTANCES_QUEUE = 1,
TASK_INSTANCES_IGNORE_NEW = 2,
TASK_INSTANCES_STOP_EXISTING = 3
} TASK_INSTANCES_POLICY;
typedef enum _TASK_COMPATIBILITY{
TASK_COMPATIBILITY_AT = 0,
TASK_COMPATIBILITY_V1 = 1,
TASK_COMPATIBILITY_V2 = 2
} TASK_COMPATIBILITY;
typedef enum _TASK_TRIGGER_TYPE2{
TASK_TRIGGER_EVENT = 0,
TASK_TRIGGER_TIME = 1,
TASK_TRIGGER_DAILY = 2,
TASK_TRIGGER_WEEKLY = 3,
TASK_TRIGGER_MONTHLY = 4,
TASK_TRIGGER_MONTHLYDOW = 5,
TASK_TRIGGER_IDLE = 6,
TASK_TRIGGER_REGISTRATION = 7,
TASK_TRIGGER_BOOT = 8,
TASK_TRIGGER_LOGON = 9,
TASK_TRIGGER_SESSION_STATE_CHANGE = 11
} TASK_TRIGGER_TYPE2;
typedef enum _TASK_ENUM_FLAGS {
TASK_ENUM_HIDDEN = 0x1
} TASK_ENUM_FLAGS;
typedef enum _TASK_CREATION {
TASK_VALIDATE_ONLY = 0x1,
TASK_CREATE = 0x2,
TASK_UPDATE = 0x4,
TASK_CREATE_OR_UPDATE = 0x6,
TASK_DISABLE = 0x8,
TASK_DONT_ADD_PRINCIPAL_ACE = 0x10,
TASK_IGNORE_REGISTRATION_TRIGGERS = 0x20
} TASK_CREATION;
typedef enum {
TASK_RUN_NO_FLAGS = 0x0,
TASK_RUN_AS_SELF = 0x1,
TASK_RUN_IGNORE_CONSTRAINTS = 0x2,
TASK_RUN_USE_SESSION_ID = 0x4,
TASK_RUN_USER_SID = 0x8
} TASK_RUN_FLAGS;
@@ -1,7 +1,8 @@
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,216 @@
typedef enum _TOKEN_INFORMATION_CLASS {
TokenInvalid,
TokenUser,
TokenGroups,
TokenPrivileges,
TokenOwner,
TokenPrimaryGroup,
TokenDefaultDacl,
TokenSource,
TokenType,
TokenImpersonationLevel,
TokenStatistics,
TokenRestrictedSids,
TokenSessionId,
TokenGroupsAndPrivileges,
TokenSessionReference,
TokenSandBoxInert,
TokenAuditPolicy,
TokenOrigin,
TokenElevationType,
TokenLinkedToken,
TokenElevation,
TokenHasRestrictions,
TokenAccessInformation,
TokenVirtualizationAllowed,
TokenVirtualizationEnabled,
TokenIntegrityLevel,
TokenUIAccess,
TokenMandatoryPolicy,
TokenLogonSid,
TokenIsAppContainer,
TokenCapabilities,
TokenAppContainerSid,
TokenAppContainerNumber,
TokenUserClaimAttributes,
TokenDeviceClaimAttributes,
TokenRestrictedUserClaimAttributes,
TokenRestrictedDeviceClaimAttributes,
TokenDeviceGroups,
TokenRestrictedDeviceGroups,
TokenSecurityAttributes,
TokenIsRestricted,
TokenProcessTrustLevel,
TokenPrivateNameSpace,
TokenSingletonAttributes,
TokenBnoIsolation,
TokenChildProcessFlags,
MaxTokenInfoClass
} TOKEN_INFORMATION_CLASS, *PTOKEN_INFORMATION_CLASS;
typedef enum _TOKEN_ELEVATION_TYPE {
TokenElevationTypeDefault = 1,
TokenElevationTypeFull = 2,
TokenElevationTypeLimited = 3
} TOKEN_ELEVATION_TYPE, *PTOKEN_ELEVATION_TYPE;
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_OWNER {
PSID Owner;
} TOKEN_OWNER, *PTOKEN_OWNER;
typedef struct _TOKEN_PRIMARY_GROUP {
PSID PrimaryGroup;
} TOKEN_PRIMARY_GROUP, *PTOKEN_PRIMARY_GROUP;
typedef struct _TOKEN_SOURCE {
CHAR SourceName[TOKEN_SOURCE_LENGTH];
LUID SourceIdentifier;
} TOKEN_SOURCE, *PTOKEN_SOURCE;
typedef struct _TOKEN_STATISTICS {
LUID TokenId;
LUID AuthenticationId;
LARGE_INTEGER ExpirationTime;
TOKEN_TYPE TokenType;
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
DWORD DynamicCharged;
DWORD DynamicAvailable;
DWORD GroupCount;
DWORD PrivilegeCount;
LUID ModifiedId;
} TOKEN_STATISTICS, *PTOKEN_STATISTICS;
typedef struct _TOKEN_ORIGIN {
LUID OriginatingLogonSession;
} TOKEN_ORIGIN, *PTOKEN_ORIGIN;
typedef struct _TOKEN_LINKED_TOKEN {
HANDLE LinkedToken;
} TOKEN_LINKED_TOKEN, *PTOKEN_LINKED_TOKEN;
typedef struct _TOKEN_MANDATORY_POLICY {
DWORD Policy;
} TOKEN_MANDATORY_POLICY, *PTOKEN_MANDATORY_POLICY;
typedef struct _SID_AND_ATTRIBUTES_HASH {
DWORD SidCount;
PSID_AND_ATTRIBUTES SidAttr;
SID_HASH_ENTRY Hash[SID_HASH_SIZE];
} SID_AND_ATTRIBUTES_HASH, *PSID_AND_ATTRIBUTES_HASH;
typedef struct _TOKEN_APPCONTAINER_INFORMATION {
PSID TokenAppContainer;
} TOKEN_APPCONTAINER_INFORMATION, *PTOKEN_APPCONTAINER_INFORMATION;
typedef struct _TOKEN_ACCESS_INFORMATION {
PSID_AND_ATTRIBUTES_HASH SidHash;
PSID_AND_ATTRIBUTES_HASH RestrictedSidHash;
PTOKEN_PRIVILEGES Privileges;
LUID AuthenticationId;
TOKEN_TYPE TokenType;
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
TOKEN_MANDATORY_POLICY MandatoryPolicy;
DWORD Flags;
DWORD AppContainerNumber;
PSID PackageSid;
PSID_AND_ATTRIBUTES_HASH CapabilitiesHash;
PSID TrustLevelSid;
PSECURITY_ATTRIBUTES_OPAQUE SecurityAttributes;
} TOKEN_ACCESS_INFORMATION, *PTOKEN_ACCESS_INFORMATION;
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;
/* from ntseapi.h */
typedef struct _TOKEN_SECURITY_ATTRIBUTE_FQBN_VALUE
{
ULONG64 Version;
UNICODE_STRING Name;
} TOKEN_SECURITY_ATTRIBUTE_FQBN_VALUE, *PTOKEN_SECURITY_ATTRIBUTE_FQBN_VALUE;
typedef struct _TOKEN_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE
{
PVOID pValue;
ULONG ValueLength;
} TOKEN_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE, *PTOKEN_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE;
typedef union _TOKEN_SECURITY_ATTRIBUTE_V1_UNION {
PLONG64 pInt64;
PULONG64 pUint64;
PUNICODE_STRING pString;
PTOKEN_SECURITY_ATTRIBUTE_FQBN_VALUE pFqbn;
PTOKEN_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE pOctetString;
} TOKEN_SECURITY_ATTRIBUTE_V1_UNION;
// private
typedef struct _TOKEN_SECURITY_ATTRIBUTE_V1
{
UNICODE_STRING Name;
USHORT ValueType;
USHORT Reserved;
ULONG Flags;
ULONG ValueCount;
TOKEN_SECURITY_ATTRIBUTE_V1_UNION Values;
} TOKEN_SECURITY_ATTRIBUTE_V1, *PTOKEN_SECURITY_ATTRIBUTE_V1;
typedef union _TOKEN_SECURITY_ATTRIBUTES_INFORMATION_UNION {
PTOKEN_SECURITY_ATTRIBUTE_V1 pAttributeV1;
} TOKEN_SECURITY_ATTRIBUTES_INFORMATION_UNION;
//private
typedef struct _TOKEN_SECURITY_ATTRIBUTES_INFORMATION
{
USHORT Version;
USHORT Reserved;
ULONG AttributeCount;
TOKEN_SECURITY_ATTRIBUTES_INFORMATION_UNION Attribute;
} TOKEN_SECURITY_ATTRIBUTES_INFORMATION, *PTOKEN_SECURITY_ATTRIBUTES_INFORMATION;
File diff suppressed because it is too large Load Diff
@@ -93,7 +93,7 @@ union _ANON_evt_variant_sub_union {
SIZE_T *SizeTArr;
LPCWSTR XmlVal;
LPCWSTR* XmlValArr;
};
};
typedef struct _EVT_VARIANT {
_ANON_evt_variant_sub_union _VARIANT_VALUE;
@@ -0,0 +1,257 @@
typedef /* [v1_enum] */
enum tag_WBEM_GENUS_TYPE
{
WBEM_GENUS_CLASS = 1,
WBEM_GENUS_INSTANCE = 2
} WBEM_GENUS_TYPE;
typedef /* [v1_enum] */
enum tag_WBEM_CHANGE_FLAG_TYPE
{
WBEM_FLAG_CREATE_OR_UPDATE = 0,
WBEM_FLAG_UPDATE_ONLY = 0x1,
WBEM_FLAG_CREATE_ONLY = 0x2,
WBEM_FLAG_UPDATE_COMPATIBLE = 0,
WBEM_FLAG_UPDATE_SAFE_MODE = 0x20,
WBEM_FLAG_UPDATE_FORCE_MODE = 0x40,
WBEM_MASK_UPDATE_MODE = 0x60,
WBEM_FLAG_ADVISORY = 0x10000
} WBEM_CHANGE_FLAG_TYPE;
typedef enum tag_WBEMSTATUS {
WBEM_NO_ERROR = 0,
WBEM_S_NO_ERROR = 0,
WBEM_S_SAME = 0,
WBEM_S_FALSE = 1,
WBEM_S_ALREADY_EXISTS = 0x40001,
WBEM_S_RESET_TO_DEFAULT = 0x40002,
WBEM_S_DIFFERENT = 0x40003,
WBEM_S_TIMEDOUT = 0x40004,
WBEM_S_NO_MORE_DATA = 0x40005,
WBEM_S_OPERATION_CANCELLED = 0x40006,
WBEM_S_PENDING = 0x40007,
WBEM_S_DUPLICATE_OBJECTS = 0x40008,
WBEM_S_ACCESS_DENIED = 0x40009,
WBEM_S_PARTIAL_RESULTS = 0x40010,
WBEM_S_SOURCE_NOT_AVAILABLE = 0x40017,
WBEM_E_FAILED = 0x80041001,
WBEM_E_NOT_FOUND = 0x80041002,
WBEM_E_ACCESS_DENIED = 0x80041003,
WBEM_E_PROVIDER_FAILURE = 0x80041004,
WBEM_E_TYPE_MISMATCH = 0x80041005,
WBEM_E_OUT_OF_MEMORY = 0x80041006,
WBEM_E_INVALID_CONTEXT = 0x80041007,
WBEM_E_INVALID_PARAMETER = 0x80041008,
WBEM_E_NOT_AVAILABLE = 0x80041009,
WBEM_E_CRITICAL_ERROR = 0x8004100a,
WBEM_E_INVALID_STREAM = 0x8004100b,
WBEM_E_NOT_SUPPORTED = 0x8004100c,
WBEM_E_INVALID_SUPERCLASS = 0x8004100d,
WBEM_E_INVALID_NAMESPACE = 0x8004100e,
WBEM_E_INVALID_OBJECT = 0x8004100f,
WBEM_E_INVALID_CLASS = 0x80041010,
WBEM_E_PROVIDER_NOT_FOUND = 0x80041011,
WBEM_E_INVALID_PROVIDER_REGISTRATION = 0x80041012,
WBEM_E_PROVIDER_LOAD_FAILURE = 0x80041013,
WBEM_E_INITIALIZATION_FAILURE = 0x80041014,
WBEM_E_TRANSPORT_FAILURE = 0x80041015,
WBEM_E_INVALID_OPERATION = 0x80041016,
WBEM_E_INVALID_QUERY = 0x80041017,
WBEM_E_INVALID_QUERY_TYPE = 0x80041018,
WBEM_E_ALREADY_EXISTS = 0x80041019,
WBEM_E_OVERRIDE_NOT_ALLOWED = 0x8004101a,
WBEM_E_PROPAGATED_QUALIFIER = 0x8004101b,
WBEM_E_PROPAGATED_PROPERTY = 0x8004101c,
WBEM_E_UNEXPECTED = 0x8004101d,
WBEM_E_ILLEGAL_OPERATION = 0x8004101e,
WBEM_E_CANNOT_BE_KEY = 0x8004101f,
WBEM_E_INCOMPLETE_CLASS = 0x80041020,
WBEM_E_INVALID_SYNTAX = 0x80041021,
WBEM_E_NONDECORATED_OBJECT = 0x80041022,
WBEM_E_READ_ONLY = 0x80041023,
WBEM_E_PROVIDER_NOT_CAPABLE = 0x80041024,
WBEM_E_CLASS_HAS_CHILDREN = 0x80041025,
WBEM_E_CLASS_HAS_INSTANCES = 0x80041026,
WBEM_E_QUERY_NOT_IMPLEMENTED = 0x80041027,
WBEM_E_ILLEGAL_NULL = 0x80041028,
WBEM_E_INVALID_QUALIFIER_TYPE = 0x80041029,
WBEM_E_INVALID_PROPERTY_TYPE = 0x8004102a,
WBEM_E_VALUE_OUT_OF_RANGE = 0x8004102b,
WBEM_E_CANNOT_BE_SINGLETON = 0x8004102c,
WBEM_E_INVALID_CIM_TYPE = 0x8004102d,
WBEM_E_INVALID_METHOD = 0x8004102e,
WBEM_E_INVALID_METHOD_PARAMETERS = 0x8004102f,
WBEM_E_SYSTEM_PROPERTY = 0x80041030,
WBEM_E_INVALID_PROPERTY = 0x80041031,
WBEM_E_CALL_CANCELLED = 0x80041032,
WBEM_E_SHUTTING_DOWN = 0x80041033,
WBEM_E_PROPAGATED_METHOD = 0x80041034,
WBEM_E_UNSUPPORTED_PARAMETER = 0x80041035,
WBEM_E_MISSING_PARAMETER_ID = 0x80041036,
WBEM_E_INVALID_PARAMETER_ID = 0x80041037,
WBEM_E_NONCONSECUTIVE_PARAMETER_IDS = 0x80041038,
WBEM_E_PARAMETER_ID_ON_RETVAL = 0x80041039,
WBEM_E_INVALID_OBJECT_PATH = 0x8004103a,
WBEM_E_OUT_OF_DISK_SPACE = 0x8004103b,
WBEM_E_BUFFER_TOO_SMALL = 0x8004103c,
WBEM_E_UNSUPPORTED_PUT_EXTENSION = 0x8004103d,
WBEM_E_UNKNOWN_OBJECT_TYPE = 0x8004103e,
WBEM_E_UNKNOWN_PACKET_TYPE = 0x8004103f,
WBEM_E_MARSHAL_VERSION_MISMATCH = 0x80041040,
WBEM_E_MARSHAL_INVALID_SIGNATURE = 0x80041041,
WBEM_E_INVALID_QUALIFIER = 0x80041042,
WBEM_E_INVALID_DUPLICATE_PARAMETER = 0x80041043,
WBEM_E_TOO_MUCH_DATA = 0x80041044,
WBEM_E_SERVER_TOO_BUSY = 0x80041045,
WBEM_E_INVALID_FLAVOR = 0x80041046,
WBEM_E_CIRCULAR_REFERENCE = 0x80041047,
WBEM_E_UNSUPPORTED_CLASS_UPDATE = 0x80041048,
WBEM_E_CANNOT_CHANGE_KEY_INHERITANCE = 0x80041049,
WBEM_E_CANNOT_CHANGE_INDEX_INHERITANCE = 0x80041050,
WBEM_E_TOO_MANY_PROPERTIES = 0x80041051,
WBEM_E_UPDATE_TYPE_MISMATCH = 0x80041052,
WBEM_E_UPDATE_OVERRIDE_NOT_ALLOWED = 0x80041053,
WBEM_E_UPDATE_PROPAGATED_METHOD = 0x80041054,
WBEM_E_METHOD_NOT_IMPLEMENTED = 0x80041055,
WBEM_E_METHOD_DISABLED = 0x80041056,
WBEM_E_REFRESHER_BUSY = 0x80041057,
WBEM_E_UNPARSABLE_QUERY = 0x80041058,
WBEM_E_NOT_EVENT_CLASS = 0x80041059,
WBEM_E_MISSING_GROUP_WITHIN = 0x8004105a,
WBEM_E_MISSING_AGGREGATION_LIST = 0x8004105b,
WBEM_E_PROPERTY_NOT_AN_OBJECT = 0x8004105c,
WBEM_E_AGGREGATING_BY_OBJECT = 0x8004105d,
WBEM_E_UNINTERPRETABLE_PROVIDER_QUERY = 0x8004105f,
WBEM_E_BACKUP_RESTORE_WINMGMT_RUNNING = 0x80041060,
WBEM_E_QUEUE_OVERFLOW = 0x80041061,
WBEM_E_PRIVILEGE_NOT_HELD = 0x80041062,
WBEM_E_INVALID_OPERATOR = 0x80041063,
WBEM_E_LOCAL_CREDENTIALS = 0x80041064,
WBEM_E_CANNOT_BE_ABSTRACT = 0x80041065,
WBEM_E_AMENDED_OBJECT = 0x80041066,
WBEM_E_CLIENT_TOO_SLOW = 0x80041067,
WBEM_E_NULL_SECURITY_DESCRIPTOR = 0x80041068,
WBEM_E_TIMED_OUT = 0x80041069,
WBEM_E_INVALID_ASSOCIATION = 0x8004106a,
WBEM_E_AMBIGUOUS_OPERATION = 0x8004106b,
WBEM_E_QUOTA_VIOLATION = 0x8004106c,
WBEM_E_RESERVED_001 = 0x8004106d,
WBEM_E_RESERVED_002 = 0x8004106e,
WBEM_E_UNSUPPORTED_LOCALE = 0x8004106f,
WBEM_E_HANDLE_OUT_OF_DATE = 0x80041070,
WBEM_E_CONNECTION_FAILED = 0x80041071,
WBEM_E_INVALID_HANDLE_REQUEST = 0x80041072,
WBEM_E_PROPERTY_NAME_TOO_WIDE = 0x80041073,
WBEM_E_CLASS_NAME_TOO_WIDE = 0x80041074,
WBEM_E_METHOD_NAME_TOO_WIDE = 0x80041075,
WBEM_E_QUALIFIER_NAME_TOO_WIDE = 0x80041076,
WBEM_E_RERUN_COMMAND = 0x80041077,
WBEM_E_DATABASE_VER_MISMATCH = 0x80041078,
WBEM_E_VETO_DELETE = 0x80041079,
WBEM_E_VETO_PUT = 0x8004107a,
WBEM_E_INVALID_LOCALE = 0x80041080,
WBEM_E_PROVIDER_SUSPENDED = 0x80041081,
WBEM_E_SYNCHRONIZATION_REQUIRED = 0x80041082,
WBEM_E_NO_SCHEMA = 0x80041083,
WBEM_E_PROVIDER_ALREADY_REGISTERED = 0x80041084,
WBEM_E_PROVIDER_NOT_REGISTERED = 0x80041085,
WBEM_E_FATAL_TRANSPORT_ERROR = 0x80041086,
WBEM_E_ENCRYPTED_CONNECTION_REQUIRED = 0x80041087,
WBEM_E_PROVIDER_TIMED_OUT = 0x80041088,
WBEM_E_NO_KEY = 0x80041089,
WBEM_E_PROVIDER_DISABLED = 0x8004108a,
WBEMESS_E_REGISTRATION_TOO_BROAD = 0x80042001,
WBEMESS_E_REGISTRATION_TOO_PRECISE = 0x80042002,
WBEMESS_E_AUTHZ_NOT_PRIVILEGED = 0x80042003,
WBEMMOF_E_EXPECTED_QUALIFIER_NAME = 0x80044001,
WBEMMOF_E_EXPECTED_SEMI = 0x80044002,
WBEMMOF_E_EXPECTED_OPEN_BRACE = 0x80044003,
WBEMMOF_E_EXPECTED_CLOSE_BRACE = 0x80044004,
WBEMMOF_E_EXPECTED_CLOSE_BRACKET = 0x80044005,
WBEMMOF_E_EXPECTED_CLOSE_PAREN = 0x80044006,
WBEMMOF_E_ILLEGAL_CONSTANT_VALUE = 0x80044007,
WBEMMOF_E_EXPECTED_TYPE_IDENTIFIER = 0x80044008,
WBEMMOF_E_EXPECTED_OPEN_PAREN = 0x80044009,
WBEMMOF_E_UNRECOGNIZED_TOKEN = 0x8004400a,
WBEMMOF_E_UNRECOGNIZED_TYPE = 0x8004400b,
WBEMMOF_E_EXPECTED_PROPERTY_NAME = 0x8004400c,
WBEMMOF_E_TYPEDEF_NOT_SUPPORTED = 0x8004400d,
WBEMMOF_E_UNEXPECTED_ALIAS = 0x8004400e,
WBEMMOF_E_UNEXPECTED_ARRAY_INIT = 0x8004400f,
WBEMMOF_E_INVALID_AMENDMENT_SYNTAX = 0x80044010,
WBEMMOF_E_INVALID_DUPLICATE_AMENDMENT = 0x80044011,
WBEMMOF_E_INVALID_PRAGMA = 0x80044012,
WBEMMOF_E_INVALID_NAMESPACE_SYNTAX = 0x80044013,
WBEMMOF_E_EXPECTED_CLASS_NAME = 0x80044014,
WBEMMOF_E_TYPE_MISMATCH = 0x80044015,
WBEMMOF_E_EXPECTED_ALIAS_NAME = 0x80044016,
WBEMMOF_E_INVALID_CLASS_DECLARATION = 0x80044017,
WBEMMOF_E_INVALID_INSTANCE_DECLARATION = 0x80044018,
WBEMMOF_E_EXPECTED_DOLLAR = 0x80044019,
WBEMMOF_E_CIMTYPE_QUALIFIER = 0x8004401a,
WBEMMOF_E_DUPLICATE_PROPERTY = 0x8004401b,
WBEMMOF_E_INVALID_NAMESPACE_SPECIFICATION = 0x8004401c,
WBEMMOF_E_OUT_OF_RANGE = 0x8004401d,
WBEMMOF_E_INVALID_FILE = 0x8004401e,
WBEMMOF_E_ALIASES_IN_EMBEDDED = 0x8004401f,
WBEMMOF_E_NULL_ARRAY_ELEM = 0x80044020,
WBEMMOF_E_DUPLICATE_QUALIFIER = 0x80044021,
WBEMMOF_E_EXPECTED_FLAVOR_TYPE = 0x80044022,
WBEMMOF_E_INCOMPATIBLE_FLAVOR_TYPES = 0x80044023,
WBEMMOF_E_MULTIPLE_ALIASES = 0x80044024,
WBEMMOF_E_INCOMPATIBLE_FLAVOR_TYPES2 = 0x80044025,
WBEMMOF_E_NO_ARRAYS_RETURNED = 0x80044026,
WBEMMOF_E_MUST_BE_IN_OR_OUT = 0x80044027,
WBEMMOF_E_INVALID_FLAGS_SYNTAX = 0x80044028,
WBEMMOF_E_EXPECTED_BRACE_OR_BAD_TYPE = 0x80044029,
WBEMMOF_E_UNSUPPORTED_CIMV22_QUAL_VALUE = 0x8004402a,
WBEMMOF_E_UNSUPPORTED_CIMV22_DATA_TYPE = 0x8004402b,
WBEMMOF_E_INVALID_DELETEINSTANCE_SYNTAX = 0x8004402c,
WBEMMOF_E_INVALID_QUALIFIER_SYNTAX = 0x8004402d,
WBEMMOF_E_QUALIFIER_USED_OUTSIDE_SCOPE = 0x8004402e,
WBEMMOF_E_ERROR_CREATING_TEMP_FILE = 0x8004402f,
WBEMMOF_E_ERROR_INVALID_INCLUDE_FILE = 0x80044030,
WBEMMOF_E_INVALID_DELETECLASS_SYNTAX = 0x80044031
} WBEMSTATUS;
typedef enum tag_WBEM_TIMEOUT_TYPE
{
WBEM_NO_WAIT = 0,
WBEM_INFINITE = 0xffffffff
} WBEM_TIMEOUT_TYPE;
typedef enum tag_WBEM_GENERIC_FLAG_TYPE {
WBEM_FLAG_RETURN_IMMEDIATELY = 0x10,
WBEM_FLAG_RETURN_WBEM_COMPLETE = 0,
WBEM_FLAG_BIDIRECTIONAL = 0,
WBEM_FLAG_FORWARD_ONLY = 0x20,
WBEM_FLAG_NO_ERROR_OBJECT = 0x40,
WBEM_FLAG_RETURN_ERROR_OBJECT = 0,
WBEM_FLAG_SEND_STATUS = 0x80,
WBEM_FLAG_DONT_SEND_STATUS = 0,
WBEM_FLAG_ENSURE_LOCATABLE = 0x100,
WBEM_FLAG_DIRECT_READ = 0x200,
WBEM_FLAG_SEND_ONLY_SELECTED = 0,
WBEM_RETURN_WHEN_COMPLETE = 0,
WBEM_RETURN_IMMEDIATELY = 0x10,
WBEM_MASK_RESERVED_FLAGS = 0x1f000,
WBEM_FLAG_USE_AMENDED_QUALIFIERS = 0x20000,
WBEM_FLAG_STRONG_VALIDATION = 0x100000
} WBEM_GENERIC_FLAG_TYPE;
typedef enum tag_WBEM_CONNECT_OPTIONS {
WBEM_FLAG_CONNECT_REPOSITORY_ONLY = 0x40,
WBEM_FLAG_CONNECT_USE_MAX_WAIT = 0x80,
WBEM_FLAG_CONNECT_PROVIDERS = 0x100
} WBEM_CONNECT_OPTIONS;
typedef enum tag_WBEM_QUERY_FLAG_TYPE {
WBEM_FLAG_DEEP = 0,
WBEM_FLAG_SHALLOW = 1,
WBEM_FLAG_PROTOTYPE = 2
} WBEM_QUERY_FLAG_TYPE;
@@ -0,0 +1,48 @@
_INITIAL_PSID = PSID
class PSID(_INITIAL_PSID): # _INITIAL_PSID -> PVOID
# def __init__(self, strsid=None):
# if strsid is not None:
# windows.winproxy.ConvertStringSidToSidA(strsid, self)
def __str__(self):
sid_str = LPCSTR()
windows.winproxy.ConvertSidToStringSidA(self, sid_str)
result = sid_str.value
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)
def duplicate(self):
size = self.size
buffer = ctypes.c_buffer(size)
windows.winproxy.CopySid(size, buffer, self)
return ctypes.cast(buffer, type(self))
@classmethod
def from_string(cls, strsid):
self = cls()
windows.winproxy.ConvertStringSidToSidA(strsid, self)
return self
def to_string(self):
sid_str = LPCSTR()
windows.winproxy.ConvertSidToStringSidA(self, sid_str)
result = sid_str.value
windows.winproxy.LocalFree(sid_str)
return result
def __repr__(self):
try:
return """<{0} "{1}">""".format(type(self).__name__, self.to_string())
except WindowsError: # Case of PSID is not valide
if not self:
return """<{0} (NULL) at {1:#x}>""".format(type(self).__name__, id(self))
return """<{0} "<conversion-failed>" at {1:#x}>""".format(type(self).__name__, id(self))
__sprint__ = __repr__
@@ -0,0 +1,4 @@
class _CRYPT_BIT_BLOB(_CRYPT_BIT_BLOB):
@property
def data(self):
return bytearray(self.pbData[:self.cbData])
+4 -2
View File
@@ -21,8 +21,10 @@ class _GUID(INITIAL_GUID):
if getattr(self, "name", notpresent) is notpresent:
self.name = None
if self.name is None:
return '<IID "{0}">'.format(self.strid.upper())
return '<IID "{0}({1})">'.format(self.strid.upper(), self.name)
return '<GUID "{0}">'.format(self.strid.upper())
return '<GUID "{0}({1})">'.format(self.strid.upper(), self.name)
__sprint__ = __repr__
def to_string(self):
data4_format = "{0:02X}{1:02X}-" + "".join("{{{i}:02X}}".format(i=i + 2) for i in range(6))
@@ -21,4 +21,11 @@ class _LSA_UNICODE_STRING(INITIAL_LSA_UNICODE_STRING):
return cls(utf16_len, utf16_len, ctypes.cast(PWSTR(s), PVOID))
def __repr__(self):
return """<{0} "{1}" at {2}>""".format(type(self).__name__, self.str, hex(id(self)))
return """<{0} "{1}" at {2}>""".format(type(self).__name__, self.str, hex(id(self)))
def __sprint__(self):
try:
return self.__repr__()
except TypeError as e:
# Bad buffer: print raw infos
return """<{0} len={1} maxlen={2} buffer={3}>""".format(type(self).__name__, self.Length, self.MaximumLength, self.Buffer)
@@ -0,0 +1,10 @@
_INITIAL_LUID = _LUID
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)
@@ -26,6 +26,12 @@ class _MEMORY_BASIC_INFORMATION32(INITIAL_MEMORY_BASIC_INFORMATION32):
# Finally make a chooser somewhere ?
return self.PROTECT_MAPPER[raw_protect]
@property
def AllocationProtect(self):
raw_protect = super(_MEMORY_BASIC_INFORMATION32, self).AllocationProtect
# Finally make a chooser somewhere ?
return self.PROTECT_MAPPER[raw_protect]
def __repr__(self):
return "<MEMORY_BASIC_INFORMATION32 BaseAddress={0:#08x} RegionSize={1:#08x} State={2} Type={3} Protect={4}>".format(
self.BaseAddress, self.RegionSize, self.State, self.Type, self.Protect)
@@ -26,6 +26,12 @@ class _MEMORY_BASIC_INFORMATION64(INITIAL_MEMORY_BASIC_INFORMATION64):
# Finally make a chooser somewhere ?
return self.PROTECT_MAPPER[raw_protect]
@property
def AllocationProtect(self):
raw_protect = super(_MEMORY_BASIC_INFORMATION64, self).AllocationProtect
# Finally make a chooser somewhere ?
return self.PROTECT_MAPPER[raw_protect]
def __repr__(self):
return "<MEMORY_BASIC_INFORMATION64 BaseAddress={0:#08x} RegionSize={1:#08x} State={2} Type={3} Protect={4}>".format(
self.BaseAddress, self.RegionSize, self.State, self.Type, self.Protect)
@@ -0,0 +1,15 @@
_INITIAL_SID_AND_ATTRIBUTES = _SID_AND_ATTRIBUTES
class _SID_AND_ATTRIBUTES(_INITIAL_SID_AND_ATTRIBUTES):
pass
# Only in TOKEN_GROUPS
# attributes = FlagExatractor(_INITIAL_SID_AND_ATTRIBUTES.Attributes,
# (SE_GROUP_MANDATORY,
# SE_GROUP_ENABLED_BY_DEFAULT,
# SE_GROUP_ENABLED,
# SE_GROUP_OWNER,
# SE_GROUP_USE_FOR_DENY_ONLY,
# SE_GROUP_INTEGRITY,
# SE_GROUP_INTEGRITY_ENABLED,
# SE_GROUP_LOGON_ID,
# SE_GROUP_RESOURCE))
+15 -4
View File
@@ -44,13 +44,24 @@ class WinFunc(object):
class WinFuncParser(Parser):
known_io_info_type = ["__in", "__in_opt", "_In_", "_In_opt_", "_Inout_", "_Out_opt_", "_Out_", "_Reserved_", "_Inout_opt_", "__inout_opt", "__out", "__inout", "__deref_out"]
known_io_info_type = ["__in", "__in_opt", "_In_", "_In_opt_", "_Inout_", "_Out_opt_", "_Out_", "_Reserved_", "_Inout_opt_", "__inout_opt", "__out", "__inout", "__deref_out", "_Outptr_"]
known_io_info_with_param = ["_Out_writes_bytes_", "_In_reads_bytes_opt_", "_In_reads_bytes_"]
known_declarations = {
"WINAPI" : "WINFUNCTYPE",
"LDAPAPI" : "CFUNCTYPE"
}
default_calling_convention = "WINFUNCTYPE"
def assert_argument_io_info(self):
io_info = self.assert_token_type(NameToken)
if io_info.value not in self.known_io_info_type:
raise ParsingError("Was expection IO_INFO got {0} instead".format(io_info))
if io_info.value not in self.known_io_info_with_param:
raise ParsingError("Was expection IO_INFO got {0} instead".format(io_info))
# Ignore IO infor params.
# Only 1 param accepted for now
self.assert_token_type(OpenParenthesisToken)
self.assert_token_type(NameToken)
self.assert_token_type(CloseParenthesisToken)
return io_info
def parse_func_arg(self, has_winapi):
@@ -100,7 +111,7 @@ class WinFuncParser(Parser):
params.append(self.parse_func_arg(has_winapi))
self.assert_token_type(CloseParenthesisToken)
self.assert_token_type(ColonToken)
self.assert_token_type(SemiColonToken)
return WinFunc(return_type, func_name, params)
def parse(self):
+120 -18
View File
@@ -14,6 +14,8 @@ import func_parser
import def_parser
import com_parser
from simpleparser import ParsingError
pjoin = os.path.join
pexists = os.path.exists
dedent = textwrap.dedent
@@ -28,7 +30,13 @@ to_dest = lambda path: pjoin(DEST_DIR, path)
class ParsedFile(object):
def __init__(self, filename):
self.filename = filename
self.data = self.PARSER(open(filename).read()).parse()
try:
self.data = self.PARSER(open(filename).read()).parse()
except ParsingError as e:
print(" !! Error while parsing file <{0}> !!".format(filename))
print(e)
raise
self.exports = set()
self.imports = set()
self.compute_imports_exports(self.data)
@@ -48,22 +56,39 @@ class ParsedFile(object):
class StructureParsedFile(ParsedFile):
PARSER = struct_parser.WinStructParser
def __init__(self, *args, **kwargs):
self.imports_by_struct = {}
super(StructureParsedFile, self).__init__(*args, **kwargs)
def compute_imports_exports(self, data):
structs, enums = data
for enum in enums:
self.add_exports(enum.name)
self.add_exports(*enum.typedef)
for struct in structs:
self.asser_struct_not_already_in_import(struct)
if any(x in self.imports for x in [struct.name] + struct.typedef.keys()):
print("Export <{0}> defined after first use".format(struct.name))
raise ValueError("LOL")
self.add_exports(struct.name)
self.add_exports(*struct.typedef)
for field_type, field_name, nb_rep in struct.fields:
if field_type.name not in self.exports:
self.add_imports(field_type.name)
self.imports_by_struct[field_type.name] = struct.name
try:
int(nb_rep)
except:
self.add_imports(nb_rep)
def asser_struct_not_already_in_import(self, struct):
for sname in [struct.name] + struct.typedef.keys():
try:
already_used = self.imports_by_struct[sname]
raise ValueError("Structure <{0}> is defined after being used in <{1}>".format(sname, already_used))
except KeyError as e:
pass
class SimpleTypeParsedFile(ParsedFile):
PARSER = struct_parser.SimpleTypesParser
@@ -78,6 +103,11 @@ class DefinitionParsedFile(ParsedFile):
def compute_imports_exports(self, data):
for windef in data:
self.add_exports(windef.name) # No dependancy check on rvalue for now
if "|" in windef.code: # Multi flags ? Allow cross-file dependancies
# Quick parsing: add all names in the imports
all_imports_words = re.findall(r"\b[A-Z_]\w+", windef.code)
real_deps = [word for word in all_imports_words if word not in self.exports]
self.add_imports(*real_deps)
class NtStatusParsedFile(ParsedFile):
PARSER = def_parser.NtStatusParser
@@ -131,16 +161,19 @@ class COMParsedFile(ParsedFile):
class ParsedFileGraph(object):
def __init__(self, nodes, depnodes): # depnodes: nodes that we dont have to handle but want can take export from
def __init__(self, nodes, depnodes, missing_handler=None): # depnodes: nodes that we dont have to handle but want can take export from
self.nodes = nodes
self.depnodes = depnodes
self.exports_database = {}
self.depandances_database = {node: set() for node in nodes}
self.build_export_database(self.nodes)
self.missing_handler = missing_handler
self.build_depandance_database()
def build_dependancy_graph(self):
todo = set(self.nodes)
if not todo:
return []
start = self.find_starting_node()
print("Starting node is {0}".format(start))
todo.remove(start)
@@ -151,6 +184,7 @@ class ParsedFileGraph(object):
if self.depandances_database[node].issubset(depdone):
break
else:
import pdb;pdb.set_trace()
raise ValueError("Could not find a next node for dep flattening")
flatten.append(node)
@@ -164,9 +198,18 @@ class ParsedFileGraph(object):
for node in self.nodes:
for import_ in node.imports:
try:
self.depandances_database[node].add(self.exports_database[import_])
depnod = self.exports_database[import_]
if node is depnod:
raise ValueError("[ERROR] Node depend of itself {0}".format(node))
self.depandances_database[node].add(depnod)
except KeyError as e:
raise ValueError("Missing dependancy <{0}> of {1}".format(import_, node))
self.on_missing_dependancy(import_, node)
# raise ValueError("Missing dependancy <{0}> of {1}".format(import_, node))
def on_missing_dependancy(self, import_, node):
if self.missing_handler is not None:
return self.missing_handler(import_, node)
raise ValueError("Missing dependancy <{0}> of {1}".format(import_, node))
def build_export_database(self, nodes):
@@ -194,8 +237,23 @@ class FakeExporter(object):
self.exports = exports
class ParsedDirectory(object):
def __init__(self, filetype, directory):
self.nodes = [filetype(f) for f in glob.glob(directory)]
def __init__(self, filetype, src, recurse=False):
if not recurse:
if os.path.isdir(src):
srcglob = pjoin(src, "*.txt")
else:
srcglob = src
files = glob.glob(srcglob)
else:
# Recurse search of .txt files
files = [os.path.join(path, filename)
for (path, _, files) in os.walk(src)
for filename in files
if filename.endswith(".txt")]
self.nodes = [filetype(f) for f in files]
### Generation Class ###
@@ -408,6 +466,11 @@ class StructureCtypesGenerator(CtypesGenerator):
def generate_for_simple_type_file(self, file):
for simple_type in file.data:
self.emitline(simple_type.generate_ctypes())
if simple_type.lvalue in EXTENDED_STRUCT:
extended_struct_filename = from_here(os.path.join("extended_structs", "{0}.py".format(simple_type.lvalue)))
print("Including extended definition for <{0}>".format(simple_type.lvalue))
with open(extended_struct_filename) as f:
self.emitline(f.read())
def generate_for_file(self, file):
if isinstance(file, SimpleTypeParsedFile):
@@ -428,7 +491,7 @@ class StructureDocGenerator(NoTemplatedGenerator):
STRUCT_NAME_SEPARATOR = "'"
def copy_template(self):
self.emitline(".. currentmodule:: windows.generated_def.winstructs")
self.emitline(".. module:: windows.generated_def.winstructs")
self.emitline("")
def generate(self):
@@ -446,6 +509,21 @@ class StructureDocGenerator(NoTemplatedGenerator):
def generate_doc_simple_type_file(self, file):
# TODO !
self.emitline("Simple types")
self.emitline(self.STRUCT_NAME_SEPARATOR * len("Simple types"))
for simpledef in file.data:
if simpledef.rvalue.startswith("POINTER("):
# import pdb;pdb.set_trace()
rtype = simpledef.rvalue[len("POINTER("):-1]
self.emitline(".. class:: {0}".format(simpledef.lvalue))
self.emitline("")
self.emitline(" Pointer to :class:`{0}`".format(rtype))
else:
self.emitline(".. autoclass:: {0}".format(simpledef.lvalue))
self.emitline("")
return
def generate_structures_for_file(self, file):
@@ -528,7 +606,6 @@ class MetaFileGenerator(NoTemplatedGenerator):
self.emitline("import {0} as {0}_module".format(modname))
self.emitline("{0}_walker = generate_walker({0}, {1}_module)".format(name, modname))
class ModuleGenerator(object):
def __init__(self, name, filetype, ctypesgenerator, docgenerator, src):
self.name = name
@@ -543,27 +620,44 @@ class ModuleGenerator(object):
def add_module_dependancy(self, module):
self.dependances_modules.add(module)
def parse_directory(self, globdir):
self.nodes += ParsedDirectory(self.filetype, globdir).nodes
def get_template_filename(self):
return pjoin(self.src, "template.py")
def parse_source_directory(self):
if os.path.isdir(self.src):
srcglob = pjoin(self.src, "*.txt")
else:
srcglob = self.src
self.parse_directory(srcglob)
def parse_source_directory(self, recurse=False):
self.nodes += ParsedDirectory(self.filetype, self.src, recurse=recurse).nodes
def resolve_dependancies(self, depnodes=[]):
g = ParsedFileGraph(self.nodes, depnodes=depnodes)
return g.build_dependancy_graph()
def check_dependancies_without_flattening(self, depnodes):
g = ParsedFileGraph(self.nodes, depnodes=depnodes) # init check for missing dependance
self.missing_interfaces = []
g = ParsedFileGraph(self.nodes, depnodes=depnodes, missing_handler=self.missing_com_interface) # init check for missing dependance
if self.missing_interfaces:
missing_names = [x[0] for x in self.missing_interfaces]
if not args.autocopy:
raise ValueError("Missing COM dependancy Names : {0}".format(missing_names))
print("Missing COM interfaces are: {0}".format(missing_names))
autocopied = []
for name, node in self.missing_interfaces:
filename = "{0}\\{1}.txt".format(args.autocopy, name)
if os.path.exists(filename):
autocopied.append(name)
print("Auto-copy <{0}>".format(filename))
targetdir = os.path.dirname(node.filename)
print(filename, targetdir)
shutil.copy(filename, targetdir)
if autocopied:
raise ValueError("Auto-copyied Names : {0}".format(autocopied))
raise ValueError("Missing COM dependancy Names : {0}".format(missing_names))
return g.nodes
def missing_com_interface(self, import_, node):
print("Missing name <{0}> in file <{1}>".format(import_, node.filename))
self.missing_interfaces.append((import_, node))
def generate(self):
self.parse_source_directory()
# Flatten the graph
@@ -607,6 +701,14 @@ class ModuleGenerator(object):
return res
import argparse
parser = argparse.ArgumentParser(prog=__file__)
parser.add_argument('--autocopy', help="[PRIVATE OPTION] A directory used to find missing COM interface")
args = parser.parse_args()
# Copy Flag code
shutil.copy(from_here(r"definitions\flag.py"), DEST_DIR)
@@ -643,7 +745,7 @@ print("== Generating COM interfaces ==")
com_module_generator = ModuleGenerator("interfaces", COMParsedFile, COMCtypesGenerator, None, from_here(r"definitions\com"))
# Load the interface_to_iid file needed by the 'COMCtypesGenerator'
com_module_generator.after_ctypes_generator_init = lambda cgen: cgen.parse_iid_file(from_here("definitions\\interface_to_iid.txt"))
com_module_generator.parse_source_directory()
com_module_generator.parse_source_directory(recurse=True)
com_module_generator.add_module_dependancy(structure_module_generator)
com_module_generator.resolve_dependancies = com_module_generator.check_dependancies_without_flattening # No real flattening as we have circular dep in Interfaces VTBL
com_module_generator.resolve_dep_and_generate([BasicTypeNodes()])
+7 -2
View File
@@ -24,6 +24,10 @@ class NameToken(Token):
pass
class ColonToken(NoValueToken):
value = ":"
pass
class SemiColonToken(NoValueToken):
value = ";"
pass
@@ -73,8 +77,9 @@ class Lexer(object):
keywords = ["typedef", "struct", "enum", "union", "const"]
token_chr = {"*" : StarToken, "[" : OpenSquareBracketToken, "]" : CloseSquareBracketToken,
"{" : OpenBracketToken, "}" : CloseBracketToken, ";" : ColonToken,
"," : CommaToken, "(" : OpenParenthesisToken, ")" : CloseParenthesisToken, "#" : SharpToken, "=" : EqualToken}
"{" : OpenBracketToken, "}" : CloseBracketToken, ";" : SemiColonToken,
"," : CommaToken, "(" : OpenParenthesisToken, ")" : CloseParenthesisToken, "#" : SharpToken, "=" : EqualToken,
":": ColonToken}
def __init__(self, code, newlinetoken=False):
self.code = code
+42 -20
View File
@@ -1,18 +1,27 @@
import dummy_wintypes
import itertools
from winstruct import WinStruct, WinUnion, WinStructType, Ptr, WinEnum
from winstruct import WinStruct, WinUnion, WinStructType, Ptr, WinEnum, BitFieldValue
from simpleparser import *
class WinStructParser(Parser):
def __init__(self, *args, **kwargs):
super(WinStructParser, self).__init__(*args, **kwargs)
self.pack = None
def parse_array(self, ):
self.assert_token_type(OpenSquareBracketToken)
number = self.assert_token_type(NameToken).value
self.assert_token_type(CloseSquareBracketToken)
return number
def parse_array_or_bitfield(self):
if type(self.peek()) == OpenSquareBracketToken:
# Array
self.assert_token_type(OpenSquareBracketToken)
number = self.assert_token_type(NameToken).value
self.assert_token_type(CloseSquareBracketToken)
return number
# Bitfield
self.assert_token_type(ColonToken)
nb_bits = self.promote_to_int(self.next_token())
return BitFieldValue(nb_bits)
def parse_def(self):
if self.peek() == KeywordToken("struct"):
@@ -26,16 +35,16 @@ class WinStructParser(Parser):
def_name = self.assert_token_type(NameToken)
if type(self.peek()) == ColonToken:
if type(self.peek()) == SemiColonToken:
self.next_token()
return (def_type, def_name, 1)
number_rep = self.parse_array()
self.assert_token_type(ColonToken)
number_rep = self.parse_array_or_bitfield()
self.assert_token_type(SemiColonToken)
return (def_type, def_name, number_rep)
def parse_typedef(self, struct):
if type(self.peek()) == ColonToken: # Just a ; no typedef
if type(self.peek()) == SemiColonToken: # Just a ; no typedef
self.next_token()
return
sep = CommaToken()
@@ -50,12 +59,19 @@ class WinStructParser(Parser):
name = self.assert_token_type(NameToken)
add_to_typedef(name.value)
sep = self.next_token()
self.assert_token_type(ColonToken, sep)
self.assert_token_type(SemiColonToken, sep)
def parse_enum(self):
def parse_enum(self, is_typedef):
"""Handle enum typedef with no value assignement and 1 typedef after"""
enum_name = self.assert_token_type(NameToken).value
res_enum = WinEnum(enum_name)
if not type(self.peek()) == OpenBracketToken:
# Not an ANON enum
enum_name = self.assert_token_type(NameToken).value
res_enum = WinEnum(enum_name)
else:
if not is_typedef:
raise ValueError("Anonymous union not in a typedef")
res_enum = WinEnum(None)
self.assert_token_type(OpenBracketToken)
count = itertools.count()
assigned_value = False
@@ -80,11 +96,10 @@ class WinStructParser(Parser):
self.parse_typedef(res_enum)
#other_name = self.assert_token_type(NameToken).value
#res_enum.add_typedef(other_name)
#self.assert_token_type(ColonToken)
#self.assert_token_type(SemiColonToken)
return res_enum
def parse_winstruct(self):
is_typedef = False
peeked = self.peek()
@@ -94,17 +109,24 @@ class WinStructParser(Parser):
def_type = self.assert_token_type(KeywordToken)
if def_type.value == "enum":
return self.parse_enum()
return self.parse_enum(is_typedef)
if def_type.value == "struct":
WinDefType = WinStruct
elif def_type.value == "union":
WinDefType = WinUnion
else:
raise ParsingError("Expecting union or struct got <{0}> instead".format(def_type.value))
struct_name = self.assert_token_type(NameToken)
if not type(self.peek()) == OpenBracketToken:
# Not an anonymous structure def
struct_name = self.assert_token_type(NameToken).value
else:
# Anonymous structure def: check if we are ina typedef
if not is_typedef:
raise ValueError("Anonymous structure/union not in a typedef")
struct_name = None #
self.assert_token_type(OpenBracketToken)
result = WinDefType(struct_name.value, self.pack)
result = WinDefType(struct_name, self.pack)
while type(self.peek()) != CloseBracketToken:
tok_type, tok_name, nb_rep = self.parse_def()
@@ -113,7 +135,7 @@ class WinStructParser(Parser):
if is_typedef:
self.parse_typedef(result)
else:
self.assert_token_type(ColonToken)
self.assert_token_type(SemiColonToken)
return result
def parse(self):
+30 -3
View File
@@ -4,6 +4,15 @@ import collections
#Ptr = collections.namedtuple('Ptr', [''])
class BitFieldValue(object):
def __init__(self, nb_bits):
assert isinstance(nb_bits, int)
self.nb_bits = nb_bits
def __int__(self):
return self.nb_bits
class WinStructType(object):
def __init__(self, name):
self.name = name
@@ -39,11 +48,15 @@ class WinStruct(object):
self.fields.append(field)
def add_typedef(self, name):
if self.name is None:
self.name = name
if name in self.typedef:
raise ValueError("nop")
self.typedef[name] = self
def add_ptr_typedef(self, name):
if self.name is None:
raise ValueError("Anonymous struct first typedef ({0}) should not be a PTR type".format(name))
if name in self.typedef:
raise ValueError("nop")
self.typedef[name] = Ptr(self)
@@ -66,7 +79,9 @@ class WinStruct(object):
res += ["{0}._pack_ = ".format(self.pack)]
res += ["{0}._fields_ = [".format(self.name)]
for (ftype, name, nb_rep) in self.fields:
if nb_rep == 1:
if isinstance(nb_rep, BitFieldValue):
res += [' ("{0}", {1}, {2}),'.format(name, ftype.generate_ctypes(), nb_rep.nb_bits)]
elif nb_rep == 1:
res+= [' ("{0}", {1}),'.format(name, ftype.generate_ctypes())]
else:
res+= [' ("{0}", {1} * {2}),'.format(name, ftype.generate_ctypes(), nb_rep)]
@@ -92,7 +107,10 @@ class WinStruct(object):
for (ftype, name, nb_rep) in self.fields:
if nb_rep == 1:
if isinstance(nb_rep, BitFieldValue):
# Should I check 'ftype' somewhere when we have a bitfield ?
res+= ' ("{0}", {1}, {2}),\n'.format(name, ftype.generate_ctypes(), nb_rep.nb_bits)
elif nb_rep == 1:
res+= ' ("{0}", {1}),\n'.format(name, ftype.generate_ctypes())
else:
res+= ' ("{0}", {1} * {2}),\n'.format(name, ftype.generate_ctypes(), nb_rep)
@@ -103,6 +121,8 @@ class WinStruct(object):
typedef_ctypes = []
for typedef_name, value in self.typedef.items():
str_value = self.name
if typedef_name == str_value: # Do not generate "X= X" line (anonymous structs gen this)
continue
if type(value) == Ptr:
str_value = "POINTER({0})".format(self.name)
typedef_ctypes += ["{0} = {1}".format(typedef_name, str_value)]
@@ -130,11 +150,16 @@ class WinEnum(object):
self.fields.append((number, name))
def add_typedef(self, name):
if self.name is None:
# Setup our name to our first typedef
self.name = name
if name in self.typedef:
raise ValueError("nop")
self.typedef[name] = self
def add_ptr_typedef(self, name):
if self.name is None:
raise ValueError("Anonymous enum first typedef ({0}) should not be a PTR type".format(name))
if name in self.typedef:
raise ValueError("nop")
self.typedef[name] = Ptr(self)
@@ -148,10 +173,12 @@ class WinEnum(object):
lines += ["class {0}(EnumType):".format(self.name)]
lines += [" values = [{0}]".format(", ".join([name for i, name in self.fields]))]
lines += [" mapper = {{x:x for x in values}}".format(self.name)]
lines += [" mapper = FlagMapper(*values)".format(self.name)]
for typedef_name, value in self.typedef.items():
str_value = self.name
if typedef_name == str_value: # Do not generate "X= X" line (anonymous enum gen this)
continue
if type(value) == Ptr:
str_value = "POINTER({0})".format(self.name)
lines += ["{0} = {1}".format(typedef_name, str_value)]
+1 -1
View File
@@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: d3f8901358333c4426690a9a7d2b42b3
config: fdedfd034d8970f3d8ed3da3263d316a
tags: 645f666f9bcd5a90fca523b33c5a78b7
+237
View File
@@ -0,0 +1,237 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>colorama.win32 &#8212; PythonForWindows 0.5 documentation</title>
<link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/mbasic.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for colorama.win32</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.</span>
<span class="c1"># from winbase.h</span>
<span class="n">STDOUT</span> <span class="o">=</span> <span class="o">-</span><span class="mi">11</span>
<span class="n">STDERR</span> <span class="o">=</span> <span class="o">-</span><span class="mi">12</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">from</span> <span class="nn">ctypes</span> <span class="k">import</span> <span class="n">LibraryLoader</span>
<span class="n">windll</span> <span class="o">=</span> <span class="n">LibraryLoader</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">WinDLL</span><span class="p">)</span>
<span class="kn">from</span> <span class="nn">ctypes</span> <span class="k">import</span> <span class="n">wintypes</span>
<span class="k">except</span> <span class="p">(</span><span class="ne">AttributeError</span><span class="p">,</span> <span class="ne">ImportError</span><span class="p">):</span>
<span class="n">windll</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">SetConsoleTextAttribute</span> <span class="o">=</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="kc">None</span>
<span class="n">winapi_test</span> <span class="o">=</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">ctypes</span> <span class="k">import</span> <span class="n">byref</span><span class="p">,</span> <span class="n">Structure</span><span class="p">,</span> <span class="n">c_char</span><span class="p">,</span> <span class="n">POINTER</span>
<span class="n">COORD</span> <span class="o">=</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">_COORD</span>
<span class="k">class</span> <span class="nc">CONSOLE_SCREEN_BUFFER_INFO</span><span class="p">(</span><span class="n">Structure</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;struct in wincon.h.&quot;&quot;&quot;</span>
<span class="n">_fields_</span> <span class="o">=</span> <span class="p">[</span>
<span class="p">(</span><span class="s2">&quot;dwSize&quot;</span><span class="p">,</span> <span class="n">COORD</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;dwCursorPosition&quot;</span><span class="p">,</span> <span class="n">COORD</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;wAttributes&quot;</span><span class="p">,</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">WORD</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;srWindow&quot;</span><span class="p">,</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">SMALL_RECT</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;dwMaximumWindowSize&quot;</span><span class="p">,</span> <span class="n">COORD</span><span class="p">),</span>
<span class="p">]</span>
<span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s1">&#39;(</span><span class="si">%d</span><span class="s1">,</span><span class="si">%d</span><span class="s1">,</span><span class="si">%d</span><span class="s1">,</span><span class="si">%d</span><span class="s1">,</span><span class="si">%d</span><span class="s1">,</span><span class="si">%d</span><span class="s1">,</span><span class="si">%d</span><span class="s1">,</span><span class="si">%d</span><span class="s1">,</span><span class="si">%d</span><span class="s1">,</span><span class="si">%d</span><span class="s1">,</span><span class="si">%d</span><span class="s1">)&#39;</span> <span class="o">%</span> <span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dwSize</span><span class="o">.</span><span class="n">Y</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwSize</span><span class="o">.</span><span class="n">X</span>
<span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwCursorPosition</span><span class="o">.</span><span class="n">Y</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwCursorPosition</span><span class="o">.</span><span class="n">X</span>
<span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">wAttributes</span>
<span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">srWindow</span><span class="o">.</span><span class="n">Top</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">srWindow</span><span class="o">.</span><span class="n">Left</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">srWindow</span><span class="o">.</span><span class="n">Bottom</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">srWindow</span><span class="o">.</span><span class="n">Right</span>
<span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwMaximumWindowSize</span><span class="o">.</span><span class="n">Y</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwMaximumWindowSize</span><span class="o">.</span><span class="n">X</span>
<span class="p">)</span>
<span class="n">_GetStdHandle</span> <span class="o">=</span> <span class="n">windll</span><span class="o">.</span><span class="n">kernel32</span><span class="o">.</span><span class="n">GetStdHandle</span>
<span class="n">_GetStdHandle</span><span class="o">.</span><span class="n">argtypes</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">wintypes</span><span class="o">.</span><span class="n">DWORD</span><span class="p">,</span>
<span class="p">]</span>
<span class="n">_GetStdHandle</span><span class="o">.</span><span class="n">restype</span> <span class="o">=</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">HANDLE</span>
<span class="n">_GetConsoleScreenBufferInfo</span> <span class="o">=</span> <span class="n">windll</span><span class="o">.</span><span class="n">kernel32</span><span class="o">.</span><span class="n">GetConsoleScreenBufferInfo</span>
<span class="n">_GetConsoleScreenBufferInfo</span><span class="o">.</span><span class="n">argtypes</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">wintypes</span><span class="o">.</span><span class="n">HANDLE</span><span class="p">,</span>
<span class="n">POINTER</span><span class="p">(</span><span class="n">CONSOLE_SCREEN_BUFFER_INFO</span><span class="p">),</span>
<span class="p">]</span>
<span class="n">_GetConsoleScreenBufferInfo</span><span class="o">.</span><span class="n">restype</span> <span class="o">=</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">BOOL</span>
<span class="n">_SetConsoleTextAttribute</span> <span class="o">=</span> <span class="n">windll</span><span class="o">.</span><span class="n">kernel32</span><span class="o">.</span><span class="n">SetConsoleTextAttribute</span>
<span class="n">_SetConsoleTextAttribute</span><span class="o">.</span><span class="n">argtypes</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">wintypes</span><span class="o">.</span><span class="n">HANDLE</span><span class="p">,</span>
<span class="n">wintypes</span><span class="o">.</span><span class="n">WORD</span><span class="p">,</span>
<span class="p">]</span>
<span class="n">_SetConsoleTextAttribute</span><span class="o">.</span><span class="n">restype</span> <span class="o">=</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">BOOL</span>
<span class="n">_SetConsoleCursorPosition</span> <span class="o">=</span> <span class="n">windll</span><span class="o">.</span><span class="n">kernel32</span><span class="o">.</span><span class="n">SetConsoleCursorPosition</span>
<span class="n">_SetConsoleCursorPosition</span><span class="o">.</span><span class="n">argtypes</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">wintypes</span><span class="o">.</span><span class="n">HANDLE</span><span class="p">,</span>
<span class="n">COORD</span><span class="p">,</span>
<span class="p">]</span>
<span class="n">_SetConsoleCursorPosition</span><span class="o">.</span><span class="n">restype</span> <span class="o">=</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">BOOL</span>
<span class="n">_FillConsoleOutputCharacterA</span> <span class="o">=</span> <span class="n">windll</span><span class="o">.</span><span class="n">kernel32</span><span class="o">.</span><span class="n">FillConsoleOutputCharacterA</span>
<span class="n">_FillConsoleOutputCharacterA</span><span class="o">.</span><span class="n">argtypes</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">wintypes</span><span class="o">.</span><span class="n">HANDLE</span><span class="p">,</span>
<span class="n">c_char</span><span class="p">,</span>
<span class="n">wintypes</span><span class="o">.</span><span class="n">DWORD</span><span class="p">,</span>
<span class="n">COORD</span><span class="p">,</span>
<span class="n">POINTER</span><span class="p">(</span><span class="n">wintypes</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
<span class="p">]</span>
<span class="n">_FillConsoleOutputCharacterA</span><span class="o">.</span><span class="n">restype</span> <span class="o">=</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">BOOL</span>
<span class="n">_FillConsoleOutputAttribute</span> <span class="o">=</span> <span class="n">windll</span><span class="o">.</span><span class="n">kernel32</span><span class="o">.</span><span class="n">FillConsoleOutputAttribute</span>
<span class="n">_FillConsoleOutputAttribute</span><span class="o">.</span><span class="n">argtypes</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">wintypes</span><span class="o">.</span><span class="n">HANDLE</span><span class="p">,</span>
<span class="n">wintypes</span><span class="o">.</span><span class="n">WORD</span><span class="p">,</span>
<span class="n">wintypes</span><span class="o">.</span><span class="n">DWORD</span><span class="p">,</span>
<span class="n">COORD</span><span class="p">,</span>
<span class="n">POINTER</span><span class="p">(</span><span class="n">wintypes</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
<span class="p">]</span>
<span class="n">_FillConsoleOutputAttribute</span><span class="o">.</span><span class="n">restype</span> <span class="o">=</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">BOOL</span>
<span class="n">_SetConsoleTitleW</span> <span class="o">=</span> <span class="n">windll</span><span class="o">.</span><span class="n">kernel32</span><span class="o">.</span><span class="n">SetConsoleTitleW</span>
<span class="n">_SetConsoleTitleW</span><span class="o">.</span><span class="n">argtypes</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">wintypes</span><span class="o">.</span><span class="n">LPCWSTR</span>
<span class="p">]</span>
<span class="n">_SetConsoleTitleW</span><span class="o">.</span><span class="n">restype</span> <span class="o">=</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">BOOL</span>
<span class="n">handles</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">STDOUT</span><span class="p">:</span> <span class="n">_GetStdHandle</span><span class="p">(</span><span class="n">STDOUT</span><span class="p">),</span>
<span class="n">STDERR</span><span class="p">:</span> <span class="n">_GetStdHandle</span><span class="p">(</span><span class="n">STDERR</span><span class="p">),</span>
<span class="p">}</span>
<span class="k">def</span> <span class="nf">_winapi_test</span><span class="p">(</span><span class="n">handle</span><span class="p">):</span>
<span class="n">csbi</span> <span class="o">=</span> <span class="n">CONSOLE_SCREEN_BUFFER_INFO</span><span class="p">()</span>
<span class="n">success</span> <span class="o">=</span> <span class="n">_GetConsoleScreenBufferInfo</span><span class="p">(</span>
<span class="n">handle</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">csbi</span><span class="p">))</span>
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="n">success</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">winapi_test</span><span class="p">():</span>
<span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">_winapi_test</span><span class="p">(</span><span class="n">h</span><span class="p">)</span> <span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">handles</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">GetConsoleScreenBufferInfo</span><span class="p">(</span><span class="n">stream_id</span><span class="o">=</span><span class="n">STDOUT</span><span class="p">):</span>
<span class="n">handle</span> <span class="o">=</span> <span class="n">handles</span><span class="p">[</span><span class="n">stream_id</span><span class="p">]</span>
<span class="n">csbi</span> <span class="o">=</span> <span class="n">CONSOLE_SCREEN_BUFFER_INFO</span><span class="p">()</span>
<span class="n">success</span> <span class="o">=</span> <span class="n">_GetConsoleScreenBufferInfo</span><span class="p">(</span>
<span class="n">handle</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">csbi</span><span class="p">))</span>
<span class="k">return</span> <span class="n">csbi</span>
<span class="k">def</span> <span class="nf">SetConsoleTextAttribute</span><span class="p">(</span><span class="n">stream_id</span><span class="p">,</span> <span class="n">attrs</span><span class="p">):</span>
<span class="n">handle</span> <span class="o">=</span> <span class="n">handles</span><span class="p">[</span><span class="n">stream_id</span><span class="p">]</span>
<span class="k">return</span> <span class="n">_SetConsoleTextAttribute</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">attrs</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">SetConsoleCursorPosition</span><span class="p">(</span><span class="n">stream_id</span><span class="p">,</span> <span class="n">position</span><span class="p">,</span> <span class="n">adjust</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="n">position</span> <span class="o">=</span> <span class="n">COORD</span><span class="p">(</span><span class="o">*</span><span class="n">position</span><span class="p">)</span>
<span class="c1"># If the position is out of range, do nothing.</span>
<span class="k">if</span> <span class="n">position</span><span class="o">.</span><span class="n">Y</span> <span class="o">&lt;=</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">position</span><span class="o">.</span><span class="n">X</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span>
<span class="c1"># Adjust for Windows&#39; SetConsoleCursorPosition:</span>
<span class="c1"># 1. being 0-based, while ANSI is 1-based.</span>
<span class="c1"># 2. expecting (x,y), while ANSI uses (y,x).</span>
<span class="n">adjusted_position</span> <span class="o">=</span> <span class="n">COORD</span><span class="p">(</span><span class="n">position</span><span class="o">.</span><span class="n">Y</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">position</span><span class="o">.</span><span class="n">X</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="n">adjust</span><span class="p">:</span>
<span class="c1"># Adjust for viewport&#39;s scroll position</span>
<span class="n">sr</span> <span class="o">=</span> <span class="n">GetConsoleScreenBufferInfo</span><span class="p">(</span><span class="n">STDOUT</span><span class="p">)</span><span class="o">.</span><span class="n">srWindow</span>
<span class="n">adjusted_position</span><span class="o">.</span><span class="n">Y</span> <span class="o">+=</span> <span class="n">sr</span><span class="o">.</span><span class="n">Top</span>
<span class="n">adjusted_position</span><span class="o">.</span><span class="n">X</span> <span class="o">+=</span> <span class="n">sr</span><span class="o">.</span><span class="n">Left</span>
<span class="c1"># Resume normal processing</span>
<span class="n">handle</span> <span class="o">=</span> <span class="n">handles</span><span class="p">[</span><span class="n">stream_id</span><span class="p">]</span>
<span class="k">return</span> <span class="n">_SetConsoleCursorPosition</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">adjusted_position</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">FillConsoleOutputCharacter</span><span class="p">(</span><span class="n">stream_id</span><span class="p">,</span> <span class="n">char</span><span class="p">,</span> <span class="n">length</span><span class="p">,</span> <span class="n">start</span><span class="p">):</span>
<span class="n">handle</span> <span class="o">=</span> <span class="n">handles</span><span class="p">[</span><span class="n">stream_id</span><span class="p">]</span>
<span class="n">char</span> <span class="o">=</span> <span class="n">c_char</span><span class="p">(</span><span class="n">char</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
<span class="n">length</span> <span class="o">=</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">DWORD</span><span class="p">(</span><span class="n">length</span><span class="p">)</span>
<span class="n">num_written</span> <span class="o">=</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">DWORD</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># Note that this is hard-coded for ANSI (vs wide) bytes.</span>
<span class="n">success</span> <span class="o">=</span> <span class="n">_FillConsoleOutputCharacterA</span><span class="p">(</span>
<span class="n">handle</span><span class="p">,</span> <span class="n">char</span><span class="p">,</span> <span class="n">length</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">num_written</span><span class="p">))</span>
<span class="k">return</span> <span class="n">num_written</span><span class="o">.</span><span class="n">value</span>
<span class="k">def</span> <span class="nf">FillConsoleOutputAttribute</span><span class="p">(</span><span class="n">stream_id</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">length</span><span class="p">,</span> <span class="n">start</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39; FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &amp;cCharsWritten )&#39;&#39;&#39;</span>
<span class="n">handle</span> <span class="o">=</span> <span class="n">handles</span><span class="p">[</span><span class="n">stream_id</span><span class="p">]</span>
<span class="n">attribute</span> <span class="o">=</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">WORD</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
<span class="n">length</span> <span class="o">=</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">DWORD</span><span class="p">(</span><span class="n">length</span><span class="p">)</span>
<span class="n">num_written</span> <span class="o">=</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">DWORD</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># Note that this is hard-coded for ANSI (vs wide) bytes.</span>
<span class="k">return</span> <span class="n">_FillConsoleOutputAttribute</span><span class="p">(</span>
<span class="n">handle</span><span class="p">,</span> <span class="n">attribute</span><span class="p">,</span> <span class="n">length</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">num_written</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">SetConsoleTitle</span><span class="p">(</span><span class="n">title</span><span class="p">):</span>
<span class="k">return</span> <span class="n">_SetConsoleTitleW</span><span class="p">(</span><span class="n">title</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
</div>
</body>
</html>
+5 -5
View File
@@ -6,11 +6,11 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ctypes &#8212; PythonForWindows 0.4 documentation</title>
<title>ctypes &#8212; PythonForWindows 0.5 documentation</title>
<link rel="stylesheet" href="../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/mbasic.css" type="text/css" />
<script type="text/javascript" src="../_static/documentation_options.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
@@ -26,7 +26,7 @@
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -621,13 +621,13 @@
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.1.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
</div>
</body>
</html>
+15 -7
View File
@@ -6,11 +6,11 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Overview: module code &#8212; PythonForWindows 0.4 documentation</title>
<title>Overview: module code &#8212; PythonForWindows 0.5 documentation</title>
<link rel="stylesheet" href="../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/mbasic.css" type="text/css" />
<script type="text/javascript" src="../_static/documentation_options.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
@@ -26,7 +26,7 @@
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
</ul>
</div>
@@ -36,7 +36,8 @@
<div class="body" role="main">
<h1>All modules for which code is available</h1>
<ul><li><a href="ctypes.html">ctypes</a></li>
<ul><li><a href="colorama/win32.html">colorama.win32</a></li>
<li><a href="ctypes.html">ctypes</a></li>
<li><a href="windows/alpc.html">windows.alpc</a></li>
<li><a href="windows/com.html">windows.com</a></li>
<li><a href="windows/crypto/certificate.html">windows.crypto.certificate</a></li>
@@ -58,20 +59,27 @@
<li><a href="windows/rpc/client.html">windows.rpc.client</a></li>
<li><a href="windows/rpc/epmapper.html">windows.rpc.epmapper</a></li>
<li><a href="windows/rpc/ndr.html">windows.rpc.ndr</a></li>
<li><a href="windows/security.html">windows.security</a></li>
<li><a href="windows/syswow64.html">windows.syswow64</a></li>
<li><a href="windows/utils/pythonutils.html">windows.utils.pythonutils</a></li>
<li><a href="windows/utils/winutils.html">windows.utils.winutils</a></li>
<li><a href="windows/winobject/apisetmap.html">windows.winobject.apisetmap</a></li>
<li><a href="windows/winobject/event_log.html">windows.winobject.event_log</a></li>
<li><a href="windows/winobject/exception.html">windows.winobject.exception</a></li>
<li><a href="windows/winobject/handle.html">windows.winobject.handle</a></li>
<li><a href="windows/winobject/network.html">windows.winobject.network</a></li>
<li><a href="windows/winobject/object_manager.html">windows.winobject.object_manager</a></li>
<li><a href="windows/winobject/process.html">windows.winobject.process</a></li>
<li><a href="windows/winobject/registry.html">windows.winobject.registry</a></li>
<li><a href="windows/winobject/service.html">windows.winobject.service</a></li>
<li><a href="windows/winobject/system.html">windows.winobject.system</a></li>
<li><a href="windows/winobject/system_module.html">windows.winobject.system_module</a></li>
<li><a href="windows/winobject/task_scheduler.html">windows.winobject.task_scheduler</a></li>
<li><a href="windows/winobject/token.html">windows.winobject.token</a></li>
<li><a href="windows/winobject/volume.html">windows.winobject.volume</a></li>
<li><a href="windows/winobject/wmi.html">windows.winobject.wmi</a></li>
<li><a href="windows/winproxy.html">windows.winproxy</a></li>
<li><a href="windows/winproxy/apiproxy.html">windows.winproxy.apiproxy</a></li>
<li><a href="windows/winproxy/error.html">windows.winproxy.error</a></li>
<li><a href="windows/wintrust.html">windows.wintrust</a></li>
</ul>
@@ -105,12 +113,12 @@
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.1.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
</div>
</body>
</html>
+31 -32
View File
@@ -6,11 +6,11 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.alpc &#8212; PythonForWindows 0.4 documentation</title>
<title>windows.alpc &#8212; PythonForWindows 0.5 documentation</title>
<link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/mbasic.css" type="text/css" />
<script type="text/javascript" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
@@ -26,7 +26,7 @@
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -168,8 +168,8 @@
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">allocated_list</span>
<span class="c1">## High level setup (Test)</span>
<span class="k">def</span> <span class="nf">setup_view</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">section_handle</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span></div>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">setup_view</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setup_view</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">section_handle</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">setup_view</span><span class="p">)</span></div>
@@ -185,8 +185,8 @@
<span class="bp">self</span><span class="o">.</span><span class="n">buffer_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">raw_buffer</span> <span class="o">=</span> <span class="n">buffer</span>
<span class="bp">self</span><span class="o">.</span><span class="n">header_size</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">max_datasize</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">buffer_size</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">header_size</span></div>
<span class="k">return</span> <span class="bp">self</span>
<span class="bp">self</span><span class="o">.</span><span class="n">max_datasize</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">buffer_size</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">header_size</span>
<span class="k">return</span> <span class="bp">self</span></div>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">from_buffer_size</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">buffer_size</span><span class="p">):</span>
@@ -212,8 +212,8 @@
<span class="k">def</span> <span class="nf">get_datalen</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">u1</span><span class="o">.</span><span class="n">s1</span><span class="o">.</span><span class="n">DataLength</span>
<span class="n">datalen</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_datalen</span><span class="p">,</span> <span class="n">set_datalen</span><span class="p">)</span></div>
<span class="sd">&quot;&quot;&quot;The length of the data&quot;&quot;&quot;</span>
<span class="n">datalen</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_datalen</span><span class="p">,</span> <span class="n">set_datalen</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The length of the data&quot;&quot;&quot;</span></div>
<span class="n">KNOWN_ALPC_ATTRIBUTES</span> <span class="o">=</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_SECURITY_ATTRIBUTE</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_VIEW_ATTRIBUTE</span><span class="p">,</span>
@@ -248,8 +248,8 @@
<span class="bp">self</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">from_buffer</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">raw_buffer</span> <span class="o">=</span> <span class="n">buffer</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">()</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">AlpcInitializeMessageAttribute</span><span class="p">(</span><span class="n">attributes</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">raw_buffer</span><span class="p">),</span> <span class="n">res</span><span class="p">)</span></div>
<span class="k">return</span> <span class="bp">self</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">AlpcInitializeMessageAttribute</span><span class="p">(</span><span class="n">attributes</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">raw_buffer</span><span class="p">),</span> <span class="n">res</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="MessageAttribute.with_all_attributes"><a class="viewcode-back" href="../../alpc.html#windows.alpc.MessageAttribute.with_all_attributes">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">with_all_attributes</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
@@ -270,8 +270,8 @@
<span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_CONTEXT_ATTRIBUTE</span> <span class="o">|</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_HANDLE_ATTRIBUTE</span> <span class="o">|</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_TOKEN_ATTRIBUTE</span> <span class="o">|</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_DIRECT_ATTRIBUTE</span> <span class="o">|</span></div>
<span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_WORK_ON_BEHALF_ATTRIBUTE</span><span class="p">)</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_DIRECT_ATTRIBUTE</span> <span class="o">|</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_WORK_ON_BEHALF_ATTRIBUTE</span><span class="p">)</span></div>
<span class="nd">@staticmethod</span>
@@ -285,12 +285,12 @@
<span class="k">return</span> <span class="n">res</span><span class="o">.</span><span class="n">value</span>
<div class="viewcode-block" id="MessageAttribute.is_allocated"><a class="viewcode-back" href="../../alpc.html#windows.alpc.MessageAttribute.is_allocated">[docs]</a> <span class="k">def</span> <span class="nf">is_allocated</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attribute</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return ``True`` if ``attribute`` is allocated&quot;&quot;&quot;</span></div>
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AllocatedAttributes</span> <span class="o">&amp;</span> <span class="n">attribute</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;Return ``True`` if ``attribute`` is allocated&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AllocatedAttributes</span> <span class="o">&amp;</span> <span class="n">attribute</span><span class="p">)</span></div>
<div class="viewcode-block" id="MessageAttribute.is_valid"><a class="viewcode-back" href="../../alpc.html#windows.alpc.MessageAttribute.is_valid">[docs]</a> <span class="k">def</span> <span class="nf">is_valid</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attribute</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return ``True`` if ``attribute`` is valid&quot;&quot;&quot;</span></div>
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ValidAttributes</span> <span class="o">&amp;</span> <span class="n">attribute</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;Return ``True`` if ``attribute`` is valid&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ValidAttributes</span> <span class="o">&amp;</span> <span class="n">attribute</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">get_attribute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attribute</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_allocated</span><span class="p">(</span><span class="n">attribute</span><span class="p">):</span>
@@ -324,8 +324,8 @@
<span class="sd">&quot;&quot;&quot;The list of allocated attributes</span>
<span class="sd"> :type: [:class:`~windows.generated_def.Flag`]</span>
<span class="sd"> &quot;&quot;&quot;</span></div>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_alpc_attributes_values</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AllocatedAttributes</span><span class="p">)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_alpc_attributes_values</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AllocatedAttributes</span><span class="p">)</span></div>
<span class="n">AlpcSection</span> <span class="o">=</span> <span class="n">namedtuple</span><span class="p">(</span><span class="s2">&quot;AlpcSection&quot;</span><span class="p">,</span> <span class="p">[</span><span class="s2">&quot;handle&quot;</span><span class="p">,</span> <span class="s2">&quot;size&quot;</span><span class="p">])</span>
@@ -447,13 +447,12 @@
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Don&#39;t know how to send &lt;</span><span class="si">{0!r}</span><span class="s2">&gt; as connect message&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">connect_message</span><span class="p">))</span>
<span class="c1"># windows.utils.print_ctypes_struct(port_attr, &quot;port_attr_connect&quot;, hexa=True)</span>
<span class="n">receive_attr</span> <span class="o">=</span> <span class="n">MessageAttribute</span><span class="o">.</span><span class="n">with_all_attributes</span><span class="p">()</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtAlpcConnectPort</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">port_name_unicode</span><span class="p">,</span> <span class="n">obj_attr</span><span class="p">,</span> <span class="n">port_attr</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">send_msg</span><span class="p">,</span> <span class="n">buffersize</span><span class="p">,</span> <span class="n">send_msg_attr</span><span class="p">,</span> <span class="n">receive_attr</span><span class="p">,</span> <span class="n">timeout</span><span class="p">)</span>
<span class="c1"># If send_msg is not None, it contains the ClientId.UniqueProcess : PID of the server :)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">handle</span><span class="o">.</span><span class="n">value</span>
<span class="bp">self</span><span class="o">.</span><span class="n">port_name</span> <span class="o">=</span> <span class="n">port_name</span></div>
<span class="k">return</span> <span class="n">AlpcMessage</span><span class="p">(</span><span class="n">send_msg</span><span class="p">,</span> <span class="n">receive_attr</span><span class="p">)</span> <span class="k">if</span> <span class="n">send_msg</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">port_name</span> <span class="o">=</span> <span class="n">port_name</span>
<span class="k">return</span> <span class="n">AlpcMessage</span><span class="p">(</span><span class="n">send_msg</span><span class="p">,</span> <span class="n">receive_attr</span><span class="p">)</span> <span class="k">if</span> <span class="n">send_msg</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span></div>
<span class="k">def</span> <span class="nf">create_port_section</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">SectionHandle</span><span class="p">,</span> <span class="n">SectionSize</span><span class="p">):</span>
<span class="n">AlpcSectionHandle</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">HANDLE</span><span class="p">()</span>
@@ -475,8 +474,8 @@
<span class="bp">self</span><span class="o">.</span><span class="n">_close_port</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span></div>
<span class="bp">self</span><span class="o">.</span><span class="n">disconnect</span><span class="p">()</span>
<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">disconnect</span><span class="p">()</span></div>
<div class="viewcode-block" id="AlpcServer"><a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcServer">[docs]</a><span class="k">class</span> <span class="nc">AlpcServer</span><span class="p">(</span><span class="n">AlpcTransportBase</span><span class="p">):</span>
@@ -533,8 +532,8 @@
<span class="c1"># windows.utils.print_ctypes_struct(port_attr, &quot; - PORT_ATTR&quot;, hexa=True)</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtAlpcCreatePort</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">obj_attr</span><span class="p">,</span> <span class="n">port_attr</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">port_name</span> <span class="o">=</span> <span class="n">raw_name</span></div>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">handle</span><span class="o">.</span><span class="n">value</span>
<span class="bp">self</span><span class="o">.</span><span class="n">port_name</span> <span class="o">=</span> <span class="n">raw_name</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">handle</span><span class="o">.</span><span class="n">value</span></div>
<div class="viewcode-block" id="AlpcServer.accept_connection"><a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcServer.accept_connection">[docs]</a> <span class="k">def</span> <span class="nf">accept_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="n">port_attr</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">port_context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Accept the connection for a ``LPC_CONNECTION_REQUEST`` message.</span>
@@ -561,8 +560,8 @@
<span class="n">port_attr</span><span class="o">.</span><span class="n">DupObjectTypes</span> <span class="o">=</span> <span class="mh">0xffffffff</span>
<span class="c1"># windows.utils.print_ctypes_struct(port_attr, &quot; - CONN_PORT_ATTR&quot;, hexa=True)</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtAlpcAcceptConnectPort</span><span class="p">(</span><span class="n">rhandle</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">port_attr</span><span class="p">,</span> <span class="n">port_context</span><span class="p">,</span> <span class="n">msg</span><span class="o">.</span><span class="n">port_message</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">communication_port_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">rhandle</span><span class="o">.</span><span class="n">value</span><span class="p">)</span></div>
<span class="k">return</span> <span class="n">msg</span>
<span class="bp">self</span><span class="o">.</span><span class="n">communication_port_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">rhandle</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">msg</span></div>
<span class="k">def</span> <span class="nf">disconnect</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_close_port</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
@@ -572,8 +571,8 @@
<span class="c1"># TODO: add an API to close a communication port ?</span>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span></div>
<span class="bp">self</span><span class="o">.</span><span class="n">disconnect</span><span class="p">()</span>
<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">disconnect</span><span class="p">()</span></div>
</pre></div>
</div>
@@ -606,13 +605,13 @@
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.1.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
</div>
</body>
</html>
+163 -110
View File
@@ -6,11 +6,11 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.com &#8212; PythonForWindows 0.4 documentation</title>
<title>windows.com &#8212; PythonForWindows 0.5 documentation</title>
<link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/mbasic.css" type="text/css" />
<script type="text/javascript" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
@@ -26,7 +26,7 @@
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -40,12 +40,13 @@
<span></span><span class="kn">import</span> <span class="nn">struct</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">functools</span>
<span class="kn">from</span> <span class="nn">ctypes.wintypes</span> <span class="k">import</span> <span class="n">HRESULT</span><span class="p">,</span> <span class="n">byref</span><span class="p">,</span> <span class="n">pointer</span><span class="p">,</span> <span class="n">cast</span>
<span class="kn">from</span> <span class="nn">ctypes</span> <span class="k">import</span> <span class="n">HRESULT</span><span class="p">,</span> <span class="n">byref</span><span class="p">,</span> <span class="n">cast</span>
<span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.generated_def.winstructs</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="k">import</span> <span class="n">RPC_C_IMP_LEVEL_IMPERSONATE</span><span class="p">,</span> <span class="n">CLSCTX_INPROC_SERVER</span>
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="k">import</span> <span class="n">interfaces</span>
<span class="kn">from</span> <span class="nn">windows.generated_def.interfaces</span> <span class="k">import</span> <span class="n">generate_IID</span><span class="p">,</span> <span class="n">IID</span>
@@ -61,8 +62,8 @@
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span>
<span class="k">if</span> <span class="n">t</span><span class="p">:</span>
<span class="k">return</span> <span class="n">t</span></div>
<span class="k">return</span> <span class="n">initsecurity</span><span class="p">()</span>
<span class="k">return</span> <span class="n">t</span>
<span class="k">return</span> <span class="n">initsecurity</span><span class="p">()</span></div>
<span class="k">def</span> <span class="nf">initsecurity</span><span class="p">():</span> <span class="c1"># Should take some parameters..</span>
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CoInitializeSecurity</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">RPC_C_IMP_LEVEL_IMPERSONATE</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
@@ -71,12 +72,20 @@
<div class="viewcode-block" id="create_instance"><a class="viewcode-back" href="../../com.html#windows.com.create_instance">[docs]</a><span class="k">def</span> <span class="nf">create_instance</span><span class="p">(</span><span class="n">clsiid</span><span class="p">,</span> <span class="n">targetinterface</span><span class="p">,</span> <span class="n">custom_iid</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">CLSCTX_INPROC_SERVER</span> <span class="o">|</span> <span class="n">CLSCTX_LOCAL_SERVER</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A simple wrapper around ``CoCreateInstance &lt;https://msdn.microsoft.com/en-us/library/windows/desktop/ms686615(v=vs.85).aspx&gt;``&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">custom_iid</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">custom_iid</span> <span class="o">=</span> <span class="n">targetinterface</span><span class="o">.</span><span class="n">IID</span></div>
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CoCreateInstance</span><span class="p">(</span><span class="n">byref</span><span class="p">(</span><span class="n">clsiid</span><span class="p">),</span> <span class="kc">None</span><span class="p">,</span> <span class="n">context</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">custom_iid</span><span class="p">),</span> <span class="n">byref</span><span class="p">(</span><span class="n">targetinterface</span><span class="p">))</span>
<span class="n">custom_iid</span> <span class="o">=</span> <span class="n">targetinterface</span><span class="o">.</span><span class="n">IID</span>
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CoCreateInstance</span><span class="p">(</span><span class="n">byref</span><span class="p">(</span><span class="n">clsiid</span><span class="p">),</span> <span class="kc">None</span><span class="p">,</span> <span class="n">context</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">custom_iid</span><span class="p">),</span> <span class="n">byref</span><span class="p">(</span><span class="n">targetinterface</span><span class="p">))</span></div>
<span class="k">def</span> <span class="nf">resolve_progid</span><span class="p">(</span><span class="n">progid</span><span class="p">):</span>
<span class="n">clsid</span> <span class="o">=</span> <span class="n">CLSID</span><span class="p">()</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">CLSIDFromProgID</span><span class="p">(</span><span class="n">progid</span><span class="p">,</span> <span class="n">clsid</span><span class="p">)</span>
<span class="c1"># We just filed the CLSID: refresh the __repr__</span>
<span class="n">clsid</span><span class="o">.</span><span class="n">update_strid</span><span class="p">()</span>
<span class="k">return</span> <span class="n">clsid</span>
<span class="c1"># Improved COM object</span>
<span class="c1"># Todo: ctypes_genertation extended struct ?</span>
<span class="k">class</span> <span class="nc">ImprovedSAFEARRAY</span><span class="p">(</span><span class="n">SAFEARRAY</span><span class="p">):</span>
<span class="c1"># Todo: ctypes_generation extended struct ?</span>
<span class="k">class</span> <span class="nc">SafeArray</span><span class="p">(</span><span class="n">SAFEARRAY</span><span class="p">):</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">of_type</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">t</span><span class="p">):</span>
<span class="bp">self</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span>
@@ -85,7 +94,7 @@
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">from_PSAFEARRAY</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">psafearray</span><span class="p">):</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">cast</span><span class="p">(</span><span class="n">psafearray</span><span class="p">,</span> <span class="n">POINTER</span><span class="p">(</span><span class="n">ImprovedSAFEARRAY</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">cast</span><span class="p">(</span><span class="n">psafearray</span><span class="p">,</span> <span class="n">POINTER</span><span class="p">(</span><span class="n">SafeArray</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">return</span> <span class="n">res</span>
<span class="k">def</span> <span class="nf">to_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
@@ -122,111 +131,155 @@
<span class="c1">#VT_LPWSTR : LPWSTR,</span>
<span class="c1">#}</span>
<span class="k">class</span> <span class="nc">ImprovedVariant</span><span class="p">(</span><span class="n">VARIANT</span><span class="p">):</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">asbstr</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">vt</span> <span class="o">!=</span> <span class="n">VT_BSTR</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;asbstr on non-bstr variant&quot;</span><span class="p">)</span>
<span class="c1">#import pdb;pdb.set_trace()</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_VARIANT_NAME_3</span><span class="o">.</span><span class="n">bstrVal</span>
<span class="c1"># VARIANT type checker</span>
<span class="c1"># Allow to guess a VARIANT_TYPE og a python value</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">aslong</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">vt</span> <span class="ow">in</span> <span class="p">[</span><span class="n">VT_I4</span><span class="p">]:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;aslong on non-long variant&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_VARIANT_NAME_3</span><span class="o">.</span><span class="n">lVal</span>
<span class="k">def</span> <span class="nf">never_match</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">asbool</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">vt</span> <span class="ow">in</span> <span class="p">[</span><span class="n">VT_BOOL</span><span class="p">]:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;get_bstr on non-bool variant&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_VARIANT_NAME_3</span><span class="o">.</span><span class="n">boolVal</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">check_type_null</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
<span class="k">return</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">asdispatch</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">vt</span> <span class="ow">in</span> <span class="p">[</span><span class="n">VT_DISPATCH</span><span class="p">]:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;asdispatch on non-VT_DISPATCH variant&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">interfaces</span><span class="o">.</span><span class="n">IDispatch</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_VARIANT_NAME_3</span><span class="o">.</span><span class="n">pdispVal</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">check_type_i4</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
<span class="c1"># 31 ? as we may want to keep sign :)</span>
<span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">long</span><span class="p">))</span> <span class="ow">and</span> <span class="p">(</span><span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">bit_length</span><span class="p">()</span> <span class="o">&lt;=</span> <span class="mi">32</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">asshort</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">vt</span> <span class="ow">in</span> <span class="p">[</span><span class="n">VT_I2</span><span class="p">]:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;asshort on non-VT_I2 variant&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_VARIANT_NAME_3</span><span class="o">.</span><span class="n">iVal</span>
<span class="k">def</span> <span class="nf">check_type_i8</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
<span class="c1"># 63 ? as we may want to keep sign :)</span>
<span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">long</span><span class="p">))</span> <span class="ow">and</span> <span class="p">(</span><span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">bit_length</span><span class="p">()</span> <span class="o">&lt;=</span> <span class="mi">64</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">asbyte</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">vt</span> <span class="ow">in</span> <span class="p">[</span><span class="n">VT_UI1</span><span class="p">]:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;asbyte on non-VT_UI1 variant&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_VARIANT_NAME_3</span><span class="o">.</span><span class="n">bVal</span>
<span class="k">def</span> <span class="nf">check_type_bstr</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">basestring</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">asunknown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">vt</span> <span class="ow">in</span> <span class="p">[</span><span class="n">VT_UNKNOWN</span><span class="p">]:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;asunknown on non-VT_UNKNOWN variant&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_VARIANT_NAME_3</span><span class="o">.</span><span class="n">punkVal</span>
<span class="k">def</span> <span class="nf">check_type_bool</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">bool</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">asarray</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">vt</span> <span class="o">&amp;</span> <span class="n">VT_ARRAY</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;asarray on non-VT_ARRAY variant&quot;</span><span class="p">)</span>
<span class="c1"># TODO: auto extract VT_TYPE for the array ?</span>
<span class="c1">#type = VT_VALUE_TO_TYPE[self.vt &amp; VT_TYPEMASK]</span>
<span class="k">return</span> <span class="n">ImprovedSAFEARRAY</span><span class="o">.</span><span class="n">from_PSAFEARRAY</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_VARIANT_NAME_3</span><span class="o">.</span><span class="n">parray</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">check_type_array</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">aslong_array</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">vt</span> <span class="o">&amp;</span> <span class="n">VT_I4</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;as_bstr_array on non-VT_BSTR variant&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">asarray</span><span class="o">.</span><span class="n">to_list</span><span class="p">(</span><span class="n">LONG</span><span class="p">)</span>
<span class="n">VARIAN_NAME_3_TYPE</span> <span class="o">=</span> <span class="p">[</span><span class="n">f</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">VARIANT</span><span class="o">.</span><span class="n">_fields_</span> <span class="k">if</span> <span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;_VARIANT_NAME_3&quot;</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">generate_asarray_property</span><span class="p">(</span><span class="n">vttype</span><span class="p">):</span>
<span class="n">empty</span> <span class="o">=</span> <span class="nb">object</span><span class="p">()</span>
<span class="k">class</span> <span class="nc">Variant</span><span class="p">(</span><span class="n">VARIANT</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">empty</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">type</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">set_value_and_type</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">type</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">elif</span> <span class="n">value</span> <span class="ow">is</span> <span class="n">empty</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">vt</span> <span class="o">=</span> <span class="n">VT_EMPTY</span>
<span class="k">return</span>
<span class="bp">self</span><span class="o">.</span><span class="n">guess_type_and_set_value</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="c1"># Copy raw-ctypes fields which is a descriptor :)</span>
<span class="n">rawvt</span> <span class="o">=</span> <span class="n">VARIANT</span><span class="o">.</span><span class="n">vt</span>
<span class="c1"># Most of the value in the colunm[1]</span>
<span class="c1"># are attribute of the sub-union _VARIANT_NAME_3</span>
<span class="c1"># This union must be ctypes-anonymous for this code to works</span>
<span class="c1"># We want to access these directly from the VARIANT</span>
<span class="c1"># to allow custom descriptor for complexe type to be referenced here</span>
<span class="n">CHECK_TYPE</span> <span class="o">=</span> <span class="p">[</span>
<span class="c1"># Order is important</span>
<span class="c1"># as VT_I4 check may match VT_BOOL values</span>
<span class="c1"># VT_BOOL check must be before VT_I4 one</span>
<span class="p">(</span><span class="n">VT_BOOL</span><span class="p">,</span> <span class="s2">&quot;boolVal&quot;</span><span class="p">,</span> <span class="n">check_type_bool</span><span class="p">),</span>
<span class="p">(</span><span class="n">VT_I4</span><span class="p">,</span> <span class="s2">&quot;lVal&quot;</span><span class="p">,</span> <span class="n">check_type_i4</span><span class="p">),</span>
<span class="p">(</span><span class="n">VT_I8</span><span class="p">,</span> <span class="s2">&quot;llVal&quot;</span><span class="p">,</span> <span class="n">check_type_i8</span><span class="p">),</span>
<span class="p">(</span><span class="n">VT_BSTR</span><span class="p">,</span> <span class="s2">&quot;bstrVal&quot;</span><span class="p">,</span> <span class="n">check_type_bstr</span><span class="p">),</span>
<span class="p">(</span><span class="n">VT_NULL</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">check_type_null</span><span class="p">),</span>
<span class="p">(</span><span class="n">VT_EMPTY</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">never_match</span><span class="p">),</span>
<span class="p">(</span><span class="n">VT_DISPATCH</span><span class="p">,</span> <span class="s2">&quot;pdispVal&quot;</span><span class="p">,</span> <span class="n">never_match</span><span class="p">),</span> <span class="c1"># I cannot recognize DISPATCH ptr for now</span>
<span class="p">(</span><span class="n">VT_UNKNOWN</span><span class="p">,</span> <span class="s2">&quot;punkVal&quot;</span><span class="p">,</span> <span class="n">never_match</span><span class="p">),</span> <span class="c1"># recognise PFW ComInterface ?</span>
<span class="c1"># Test: do not allow auto-creation of small int values</span>
<span class="c1"># I don&#39;t know but a feel it may confuse some API expecting VT_I4</span>
<span class="p">(</span><span class="n">VT_I2</span><span class="p">,</span> <span class="s2">&quot;iVal&quot;</span><span class="p">,</span> <span class="n">never_match</span><span class="p">),</span>
<span class="p">(</span><span class="n">VT_UI1</span><span class="p">,</span> <span class="s2">&quot;bVal&quot;</span><span class="p">,</span> <span class="n">never_match</span><span class="p">),</span>
<span class="p">]</span>
<span class="n">VARIANT_TYPE_BY_NAME</span> <span class="o">=</span> <span class="p">{</span><span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> <span class="n">f</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">VARIAN_NAME_3_TYPE</span><span class="o">.</span><span class="n">_fields_</span><span class="p">}</span>
<span class="n">QUICK_CHECK_TYPE</span> <span class="o">=</span> <span class="p">{</span><span class="n">x</span><span class="p">:</span> <span class="n">y</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">CHECK_TYPE</span><span class="p">}</span>
<span class="k">def</span> <span class="nf">get_vt</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">rawvt</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">Variant</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">vt</span>
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">VARENUM</span><span class="o">.</span><span class="n">mapper</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">rawvt</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">set_vt</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">rawvt</span> <span class="o">=</span> <span class="n">value</span>
<span class="n">vt</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_vt</span><span class="p">,</span> <span class="n">set_vt</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">set_value_and_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="nb">type</span><span class="p">):</span>
<span class="n">attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUICK_CHECK_TYPE</span><span class="p">[</span><span class="nb">type</span><span class="p">]</span>
<span class="c1"># No check: user must be careful about non-match value&amp;type</span>
<span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">vt</span> <span class="o">=</span> <span class="nb">type</span>
<span class="k">def</span> <span class="nf">get_value_based_on_type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">rawvt</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rawvt</span>
<span class="k">if</span> <span class="n">rawvt</span> <span class="o">&amp;</span> <span class="n">VT_ARRAY</span><span class="p">:</span>
<span class="n">realtype</span> <span class="o">=</span> <span class="n">rawvt</span> <span class="o">&amp;</span> <span class="o">~</span><span class="n">VT_ARRAY</span>
<span class="n">attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUICK_CHECK_TYPE</span><span class="p">[</span><span class="n">realtype</span><span class="p">]</span>
<span class="n">attrtype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">VARIANT_TYPE_BY_NAME</span><span class="p">[</span><span class="n">attr</span><span class="p">]</span>
<span class="n">array</span> <span class="o">=</span> <span class="n">SafeArray</span><span class="o">.</span><span class="n">from_PSAFEARRAY</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_VARIANT_NAME_3</span><span class="o">.</span><span class="n">parray</span><span class="p">)</span>
<span class="k">return</span> <span class="n">array</span><span class="o">.</span><span class="n">to_list</span><span class="p">(</span><span class="n">attrtype</span><span class="p">)</span>
<span class="n">attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUICK_CHECK_TYPE</span><span class="p">[</span><span class="n">rawvt</span><span class="p">]</span>
<span class="k">if</span> <span class="n">attr</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">guess_type_and_set_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">for</span> <span class="n">t</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">check</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">CHECK_TYPE</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">checkres</span> <span class="o">=</span> <span class="n">check</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">TypeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="n">checkres</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">vt</span> <span class="o">=</span> <span class="n">t</span>
<span class="k">if</span> <span class="n">attr</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Could not guess VT_TYPE for &lt;</span><span class="si">{0}</span><span class="s2">&gt; of type &lt;</span><span class="si">{1}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">value</span><span class="p">)))</span>
<span class="n">value</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_value_based_on_type</span><span class="p">,</span> <span class="n">guess_type_and_set_value</span><span class="p">)</span>
<span class="c1"># quick_check: bypass python lookup-limitation</span>
<span class="k">def</span> <span class="nf">generate_getter</span><span class="p">(</span><span class="n">vt_type</span><span class="p">,</span> <span class="n">transfo</span><span class="o">=</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span><span class="n">x</span><span class="p">),</span> <span class="n">quick_check</span><span class="o">=</span><span class="n">QUICK_CHECK_TYPE</span><span class="p">):</span>
<span class="n">attr</span> <span class="o">=</span> <span class="n">quick_check</span><span class="p">[</span><span class="n">vt_type</span><span class="p">]</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">as_array_generated</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># TODO: vt check like the others ?</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">asarray</span><span class="o">.</span><span class="n">to_list</span><span class="p">(</span><span class="n">vttype</span><span class="p">)</span>
<span class="k">return</span> <span class="n">as_array_generated</span>
<span class="k">def</span> <span class="nf">getter</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">rawvt</span> <span class="o">==</span> <span class="n">vt_type</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Invalid vt-type for attribute expected &lt;</span><span class="si">{0}</span><span class="s2">&gt; got &lt;</span><span class="si">{1}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">vt_type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">vt</span><span class="p">))</span>
<span class="k">return</span> <span class="n">transfo</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">))</span>
<span class="k">return</span> <span class="n">getter</span>
<span class="n">asbstr_array</span> <span class="o">=</span> <span class="n">generate_asarray_property</span><span class="p">(</span><span class="n">BSTR</span><span class="p">)</span>
<span class="n">aslong_array</span> <span class="o">=</span> <span class="n">generate_asarray_property</span><span class="p">(</span><span class="n">LONG</span><span class="p">)</span>
<span class="n">asbyte_array</span> <span class="o">=</span> <span class="n">generate_asarray_property</span><span class="p">(</span><span class="n">BYTE</span><span class="p">)</span>
<span class="n">asbool_array</span> <span class="o">=</span> <span class="n">generate_asarray_property</span><span class="p">(</span><span class="n">VARIANT_BOOL</span><span class="p">)</span>
<span class="n">asbstr</span> <span class="o">=</span> <span class="n">generate_getter</span><span class="p">(</span><span class="n">VT_BSTR</span><span class="p">)</span>
<span class="n">aslong</span> <span class="o">=</span> <span class="n">generate_getter</span><span class="p">(</span><span class="n">VT_I4</span><span class="p">)</span>
<span class="n">asbool</span> <span class="o">=</span> <span class="n">generate_getter</span><span class="p">(</span><span class="n">VT_BOOL</span><span class="p">)</span>
<span class="n">asdispatch</span> <span class="o">=</span> <span class="n">generate_getter</span><span class="p">(</span><span class="n">VT_DISPATCH</span><span class="p">,</span> <span class="n">transfo</span><span class="o">=</span><span class="n">interfaces</span><span class="o">.</span><span class="n">IDispatch</span><span class="p">)</span>
<span class="n">asshort</span> <span class="o">=</span> <span class="n">generate_getter</span><span class="p">(</span><span class="n">VT_I2</span><span class="p">)</span>
<span class="n">asbyte</span> <span class="o">=</span> <span class="n">generate_getter</span><span class="p">(</span><span class="n">VT_UI1</span><span class="p">)</span>
<span class="n">asunknown</span> <span class="o">=</span> <span class="n">generate_getter</span><span class="p">(</span><span class="n">VT_UNKNOWN</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">to_pyobject</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># if self.vt &amp; VT_ARRAY:</span>
<span class="c1"># # Something better TODO i guess</span>
<span class="c1"># if self.vt &amp; VT_TYPEMASK == VT_BSTR:</span>
<span class="c1"># import pdb;pdb.set_trace()</span>
<span class="c1"># print(&quot;VT_TYPEMASK ARRAY&quot;)</span>
<span class="c1"># return self.asarray.to_list(BSTR)</span>
<span class="c1"># if self.vt &amp; VT_TYPEMASK == VT_I4:</span>
<span class="c1"># import pdb;pdb.set_trace()</span>
<span class="c1"># print(&quot;VT_TYPEMASK ARRAY&quot;)</span>
<span class="c1"># return self.asarray.to_list(LONG)</span>
<span class="c1"># raise NotImplementedError(&quot;Variant of type {0:#x}&quot;.format(self.vt))</span>
<span class="c1"># use the ImprovedVariant.MAPPER that dispatch by self.vt</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">MAPPER</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">vt</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Variant of type </span><span class="si">{0:#x}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">vt</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&quot;&quot;&lt;</span><span class="si">{0}</span><span class="s2"> of type </span><span class="si">{1}</span><span class="s2">&gt;&quot;&quot;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">vt</span><span class="p">)</span>
<span class="n">ImprovedVariant</span><span class="o">.</span><span class="n">MAPPER</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">VT_UI1</span><span class="p">:</span> <span class="n">ImprovedVariant</span><span class="o">.</span><span class="n">asbyte</span><span class="o">.</span><span class="n">fget</span><span class="p">,</span>
<span class="n">VT_I2</span><span class="p">:</span> <span class="n">ImprovedVariant</span><span class="o">.</span><span class="n">asshort</span><span class="o">.</span><span class="n">fget</span><span class="p">,</span>
<span class="n">VT_DISPATCH</span><span class="p">:</span> <span class="n">ImprovedVariant</span><span class="o">.</span><span class="n">asdispatch</span><span class="o">.</span><span class="n">fget</span><span class="p">,</span>
<span class="n">VT_BOOL</span><span class="p">:</span> <span class="n">ImprovedVariant</span><span class="o">.</span><span class="n">asbool</span><span class="o">.</span><span class="n">fget</span><span class="p">,</span>
<span class="n">VT_I4</span><span class="p">:</span> <span class="n">ImprovedVariant</span><span class="o">.</span><span class="n">aslong</span><span class="o">.</span><span class="n">fget</span><span class="p">,</span>
<span class="n">VT_BSTR</span><span class="p">:</span> <span class="n">ImprovedVariant</span><span class="o">.</span><span class="n">asbstr</span><span class="o">.</span><span class="n">fget</span><span class="p">,</span>
<span class="n">VT_EMPTY</span><span class="p">:</span> <span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="kc">None</span><span class="p">),</span>
<span class="n">VT_NULL</span><span class="p">:</span> <span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="kc">None</span><span class="p">),</span>
<span class="n">VT_UNKNOWN</span><span class="p">:</span> <span class="n">ImprovedVariant</span><span class="o">.</span><span class="n">asunknown</span><span class="o">.</span><span class="n">fget</span><span class="p">,</span>
<span class="p">(</span><span class="n">VT_ARRAY</span> <span class="o">|</span> <span class="n">VT_BSTR</span><span class="p">):</span> <span class="n">ImprovedVariant</span><span class="o">.</span><span class="n">asbstr_array</span><span class="o">.</span><span class="n">fget</span><span class="p">,</span>
<span class="p">(</span><span class="n">VT_ARRAY</span> <span class="o">|</span> <span class="n">VT_I4</span><span class="p">):</span> <span class="n">ImprovedVariant</span><span class="o">.</span><span class="n">aslong_array</span><span class="o">.</span><span class="n">fget</span><span class="p">,</span>
<span class="p">(</span><span class="n">VT_ARRAY</span> <span class="o">|</span> <span class="n">VT_UI1</span><span class="p">):</span> <span class="n">ImprovedVariant</span><span class="o">.</span><span class="n">asbyte_array</span><span class="o">.</span><span class="n">fget</span><span class="p">,</span>
<span class="p">(</span><span class="n">VT_ARRAY</span> <span class="o">|</span> <span class="n">VT_BOOL</span><span class="p">):</span> <span class="n">ImprovedVariant</span><span class="o">.</span><span class="n">asbool_array</span><span class="o">.</span><span class="n">fget</span>
<span class="p">}</span>
<span class="c1"># Deprecated: remove me when test pass :)</span>
<span class="c1"># ImprovedVariant.MAPPER = {</span>
<span class="c1"># VT_UI1: ImprovedVariant.asbyte.fget,</span>
<span class="c1"># VT_I2: ImprovedVariant.asshort.fget,</span>
<span class="c1"># VT_DISPATCH: ImprovedVariant.asdispatch.fget,</span>
<span class="c1"># VT_BOOL: ImprovedVariant.asbool.fget,</span>
<span class="c1"># VT_I4: ImprovedVariant.aslong.fget,</span>
<span class="c1"># VT_BSTR: ImprovedVariant.asbstr.fget,</span>
<span class="c1"># VT_EMPTY: (lambda x: None),</span>
<span class="c1"># VT_NULL: (lambda x: None),</span>
<span class="c1"># VT_UNKNOWN: ImprovedVariant.asunknown.fget,</span>
<span class="c1"># (VT_ARRAY | VT_BSTR): ImprovedVariant.asbstr_array.fget,</span>
<span class="c1"># (VT_ARRAY | VT_I4): ImprovedVariant.aslong_array.fget,</span>
<span class="c1"># (VT_ARRAY | VT_UI1): ImprovedVariant.asbyte_array.fget,</span>
<span class="c1"># (VT_ARRAY | VT_BOOL): ImprovedVariant.asbool_array.fget</span>
<span class="c1"># }</span>
@@ -281,16 +334,16 @@
<span class="sd">&quot;&quot;&quot;Default ``QueryInterface`` implementation that returns ``self`` if piid is the implemented interface&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">piid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="p">(</span><span class="n">IUnknown</span><span class="o">.</span><span class="n">IID</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">IMPLEMENT</span><span class="o">.</span><span class="n">IID</span><span class="p">):</span>
<span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">this</span>
<span class="k">return</span> <span class="mi">1</span></div>
<span class="k">return</span> <span class="n">E_NOINTERFACE</span>
<span class="k">return</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">E_NOINTERFACE</span></div>
<div class="viewcode-block" id="COMImplementation.AddRef"><a class="viewcode-back" href="../../com.html#windows.com.COMImplementation.AddRef">[docs]</a> <span class="k">def</span> <span class="nf">AddRef</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Default ``AddRef`` implementation that returns ``1``&quot;&quot;&quot;</span></div>
<span class="k">return</span> <span class="mi">1</span>
<span class="sd">&quot;&quot;&quot;Default ``AddRef`` implementation that returns ``1``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="mi">1</span></div>
<div class="viewcode-block" id="COMImplementation.Release"><a class="viewcode-back" href="../../com.html#windows.com.COMImplementation.Release">[docs]</a> <span class="k">def</span> <span class="nf">Release</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Default ``Release`` implementation that returns ``1``&quot;&quot;&quot;</span></div></div>
<span class="k">return</span> <span class="mi">0</span>
<span class="sd">&quot;&quot;&quot;Default ``Release`` implementation that returns ``1``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="mi">0</span></div></div>
</pre></div>
</div>
@@ -323,13 +376,13 @@
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.1.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
</div>
</body>
</html>
+73 -38
View File
@@ -6,11 +6,11 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.crypto.certificate &#8212; PythonForWindows 0.4 documentation</title>
<title>windows.crypto.certificate &#8212; PythonForWindows 0.5 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<script type="text/javascript" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
@@ -26,7 +26,7 @@
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -136,8 +136,8 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_signers_and_certs_generator</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></div>
<span class="k">return</span> <span class="s1">&#39;&lt;</span><span class="si">{0}</span><span class="s1"> &quot;</span><span class="si">{1}</span><span class="s1">&quot; content_type=</span><span class="si">{2}</span><span class="s1">&gt;&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">filename</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">content_type</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s1">&#39;&lt;</span><span class="si">{0}</span><span class="s1"> &quot;</span><span class="si">{1}</span><span class="s1">&quot; content_type=</span><span class="si">{2}</span><span class="s1">&gt;&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">filename</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">content_type</span><span class="p">)</span></div>
<span class="c1"># https://msdn.microsoft.com/en-us/library/windows/desktop/aa382037(v=vs.85).aspx</span>
@@ -154,7 +154,7 @@
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">cert</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertEnumCertificatesInStore</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">last</span><span class="p">)</span>
<span class="k">except</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">Kernel32Error</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">except</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">WinproxyError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">&amp;</span> <span class="mh">0xffffffff</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CRYPT_E_NOT_FOUND</span><span class="p">,):</span>
<span class="k">return</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
<span class="k">raise</span>
@@ -165,14 +165,14 @@
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Out of infinit loop&quot;</span><span class="p">)</span>
<div class="viewcode-block" id="CertificateStore.add_certificate"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CertificateStore.add_certificate">[docs]</a> <span class="k">def</span> <span class="nf">add_certificate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">certificate</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Add a certificate to the store&quot;&quot;&quot;</span></div>
<span class="n">winproxy</span><span class="o">.</span><span class="n">CertAddCertificateContextToStore</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">certificate</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_ADD_NEW</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;Add a certificate to the store&quot;&quot;&quot;</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">CertAddCertificateContextToStore</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">certificate</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_ADD_NEW</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
<div class="viewcode-block" id="CertificateStore.from_file"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CertificateStore.from_file">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">from_file</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">filename</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Create a new :class:`CertificateStore` from ``filename``&quot;&quot;&quot;</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertOpenStore</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_PROV_FILENAME_A</span><span class="p">,</span> <span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_OPEN_EXISTING_FLAG</span><span class="p">,</span> <span class="n">filename</span><span class="p">)</span></div>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="bp">cls</span><span class="p">)</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertOpenStore</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_PROV_FILENAME_A</span><span class="p">,</span> <span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_OPEN_EXISTING_FLAG</span><span class="p">,</span> <span class="n">filename</span><span class="p">)</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="bp">cls</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">_yolo</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertEnumCTLsInStore</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
@@ -187,28 +187,33 @@
<span class="sd">&quot;&quot;&quot;Create a new :class:`CertificateStore` from system store ``store_name``</span>
<span class="sd"> (see `System Store Locations &lt;https://msdn.microsoft.com/en-us/library/windows/desktop/aa388136(v=vs.85).aspx&gt;`_)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertOpenStore</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_PROV_SYSTEM_A</span><span class="p">,</span> <span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_SYSTEM_STORE_LOCAL_MACHINE</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_READONLY_FLAG</span><span class="p">,</span> <span class="n">store_name</span><span class="p">)</span></div>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="bp">cls</span><span class="p">)</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertOpenStore</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_PROV_SYSTEM_A</span><span class="p">,</span> <span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_SYSTEM_STORE_LOCAL_MACHINE</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_READONLY_FLAG</span><span class="p">,</span> <span class="n">store_name</span><span class="p">)</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="bp">cls</span><span class="p">)</span></div>
<div class="viewcode-block" id="CertificateStore.new_in_memory"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CertificateStore.new_in_memory">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">new_in_memory</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Create a new temporary :class:`CertificateStore` in memory&quot;&quot;&quot;</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertOpenStore</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_PROV_MEMORY</span><span class="p">,</span> <span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="bp">cls</span><span class="p">)</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertOpenStore</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_PROV_MEMORY</span><span class="p">,</span> <span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="bp">cls</span><span class="p">)</span></div>
<span class="c1"># TODO: a more complete search API ?</span>
<div class="viewcode-block" id="CertificateStore.find"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CertificateStore.find">[docs]</a> <span class="k">def</span> <span class="nf">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">issuer</span><span class="p">,</span> <span class="n">serialnumber</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return the certificate that match `issuer` and `serialnumber`</span>
<span class="sd"> :return: :class:`Certificate`</span>
<span class="sd"> :return: :class:`Certificate` -- ``None`` if certificate is not found</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># data = self.get_signer_data(index)</span>
<span class="n">cert_info</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_INFO</span><span class="p">()</span>
<span class="n">cert_info</span><span class="o">.</span><span class="n">Issuer</span> <span class="o">=</span> <span class="n">issuer</span>
<span class="n">cert_info</span><span class="o">.</span><span class="n">SerialNumber</span> <span class="o">=</span> <span class="n">serialnumber</span>
<span class="n">rawcertcontext</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertFindCertificateInStore</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_FIND_SUBJECT_CERT</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">cert_info</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span></div></div>
<span class="k">return</span> <span class="n">Certificate</span><span class="o">.</span><span class="n">from_pointer</span><span class="p">(</span><span class="n">rawcertcontext</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">rawcertcontext</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertFindCertificateInStore</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_FIND_SUBJECT_CERT</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">cert_info</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">&amp;</span> <span class="mh">0xffffffff</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CRYPT_E_NOT_FOUND</span><span class="p">:</span>
<span class="k">raise</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">Certificate</span><span class="o">.</span><span class="n">from_pointer</span><span class="p">(</span><span class="n">rawcertcontext</span><span class="p">)</span></div></div>
<span class="c1"># PKCS12_NO_PERSIST_KEY -&gt; do not save it in a key container on disk</span>
@@ -235,8 +240,8 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">pfx</span><span class="p">,</span> <span class="p">(</span><span class="n">basestring</span><span class="p">,</span> <span class="nb">bytearray</span><span class="p">)):</span>
<span class="n">pfx</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CRYPT_DATA_BLOB</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">pfx</span><span class="p">)</span>
<span class="n">cert_store</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">PFXImportCertStore</span><span class="p">(</span><span class="n">pfx</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">flags</span><span class="p">)</span></div>
<span class="k">return</span> <span class="n">CertificateStore</span><span class="p">(</span><span class="n">cert_store</span><span class="p">)</span>
<span class="n">cert_store</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">PFXImportCertStore</span><span class="p">(</span><span class="n">pfx</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">flags</span><span class="p">)</span>
<span class="k">return</span> <span class="n">CertificateStore</span><span class="p">(</span><span class="n">cert_store</span><span class="p">)</span></div>
<div class="viewcode-block" id="Certificate"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.Certificate">[docs]</a><span class="k">class</span> <span class="nc">Certificate</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_CONTEXT</span><span class="p">):</span>
@@ -260,22 +265,28 @@
<span class="k">return</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{:02x}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">serial_bytes</span><span class="p">)</span>
<div class="viewcode-block" id="Certificate.get_name"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.Certificate.get_name">[docs]</a> <span class="k">def</span> <span class="nf">get_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nametype</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_NAME_SIMPLE_DISPLAY_TYPE</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<div class="viewcode-block" id="Certificate.get_name"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.Certificate.get_name">[docs]</a> <span class="k">def</span> <span class="nf">get_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nametype</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_NAME_SIMPLE_DISPLAY_TYPE</span><span class="p">,</span> <span class="n">param_type</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Retrieve the subject or issuer name of the certificate.</span>
<span class="sd"> See `CertGetNameStringA &lt;https://msdn.microsoft.com/en-us/library/windows/desktop/aa376086(v=vs.85).aspx&gt;`_</span>
<span class="sd"> :returns: :class:`str`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">size</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertGetNameStringA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nametype</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">if</span> <span class="n">nametype</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_NAME_RDN_TYPE</span><span class="p">:</span>
<span class="n">param_type</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">(</span><span class="n">param_type</span><span class="p">)</span>
<span class="n">param_type</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">LPDWORD</span><span class="p">(</span><span class="n">param_type</span><span class="p">)</span>
<span class="n">size</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertGetNameStringA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nametype</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="n">param_type</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">namebuff</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_buffer</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
<span class="n">size</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertGetNameStringA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nametype</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">namebuff</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span></div>
<span class="k">return</span> <span class="n">namebuff</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="n">size</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertGetNameStringA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nametype</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="n">param_type</span><span class="p">,</span> <span class="n">namebuff</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
<span class="k">return</span> <span class="n">namebuff</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span></div>
<span class="n">name</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_name</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The name of the certificate.</span>
<span class="sd"> :type: :class:`str`&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">raw_hash</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">size</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>
<span class="n">buffer</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_buffer</span><span class="p">(</span><span class="n">size</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
@@ -283,20 +294,35 @@
<span class="k">return</span> <span class="n">buffer</span><span class="p">[:</span><span class="n">size</span><span class="o">.</span><span class="n">value</span><span class="p">]</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">thumprint</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The thumprint of the certificate (which is the sha1 of the encoded cert).</span>
<span class="k">def</span> <span class="nf">thumbprint</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The thumbprint of the certificate (which is the sha1 of the encoded cert).</span>
<span class="sd"> Example:</span>
<span class="sd"> &gt;&gt;&gt; x</span>
<span class="sd"> &lt;Certificate &quot;YOLO2&quot; serial=&quot;6f 1d 3e 7d d9 77 59 a9 4c 1c 53 dc 80 db 0c fe&quot;&gt;</span>
<span class="sd"> &gt;&gt;&gt; x.thumprint</span>
<span class="sd"> &gt;&gt;&gt; x.thumbprint</span>
<span class="sd"> &#39;E2 A2 DB 76 A1 DD 8E 70 0D C6 9F CB 71 CF 29 12 C6 D9 78 97&#39;</span>
<span class="sd"> :type: :class:`str`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{:02X}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">bytearray</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">raw_hash</span><span class="p">()))</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">distinguished_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The distinguished name (DN) of the certificate.</span>
<span class="sd"> Example:</span>
<span class="sd"> &gt;&gt;&gt; x</span>
<span class="sd"> &lt;Certificate &quot;Microsoft Windows Production PCA 2011&quot; serial=&quot;61 07 76 56 00 00 00 00 00 08&quot;&gt;</span>
<span class="sd"> &gt;&gt;&gt; x.distinguished_name</span>
<span class="sd"> &#39;C=US, S=Washington, L=Redmond, O=Microsoft Corporation, CN=Microsoft Windows Production PCA 2011&#39;</span>
<span class="sd"> :type: :class:`str`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_name</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_NAME_RDN_TYPE</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_X500_NAME_STR</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">issuer</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The name of the certificate&#39;s issuer.</span>
@@ -304,6 +330,7 @@
<span class="sd"> :type: :class:`str`&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_name</span><span class="p">(</span><span class="n">flags</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_NAME_ISSUER_FLAG</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">store</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The certificate store that contains the certificate</span>
@@ -363,8 +390,8 @@
<span class="c1"># This postulate allow us to return &#39;self&#39; directly</span>
<span class="c1"># https://msdn.microsoft.com/en-us/library/windows/desktop/aa376045(v=vs.85).aspx</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">res</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;CertDuplicateCertificateContext did not returned the argument (check doc)&quot;</span><span class="p">)</span></div>
<span class="k">return</span> <span class="bp">self</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;CertDuplicateCertificateContext did not returned the argument (check doc)&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span></div>
<span class="k">def</span> <span class="nf">view</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">CryptUIDlgViewContext</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_CERTIFICATE_CONTEXT</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="bp">self</span><span class="p">),</span> <span class="kc">None</span><span class="p">,</span> <span class="n">title</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
@@ -433,6 +460,14 @@
<span class="c1"># - Usefull:</span>
<span class="c1"># CERT_SHA1_HASH_PROP_ID</span>
<div class="viewcode-block" id="Certificate.get_property"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.Certificate.get_property">[docs]</a> <span class="k">def</span> <span class="nf">get_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prop</span><span class="p">):</span>
<span class="s2">&quot;TODO: DOC :D + auto-type ?&quot;</span>
<span class="n">datasize</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">()</span>
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">CertGetCertificateContextProperty</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prop</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">datasize</span><span class="p">)</span>
<span class="n">buf</span> <span class="o">=</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">BYTE</span> <span class="o">*</span> <span class="n">datasize</span><span class="o">.</span><span class="n">value</span><span class="p">)()</span>
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">CertGetCertificateContextProperty</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prop</span><span class="p">,</span> <span class="n">buf</span><span class="p">,</span> <span class="n">datasize</span><span class="p">)</span>
<span class="k">return</span> <span class="nb">bytearray</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span></div>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">encoded</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@@ -459,8 +494,8 @@
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s2">&quot;rb&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="n">buf</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_ubyte</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))(</span><span class="o">*</span><span class="nb">bytearray</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
<span class="n">pcert</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">CertCreateCertificateContext</span><span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">crypto</span><span class="o">.</span><span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="n">buf</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))</span></div>
<span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">from_pointer</span><span class="p">(</span><span class="n">pcert</span><span class="p">)</span>
<span class="n">pcert</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">CertCreateCertificateContext</span><span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">crypto</span><span class="o">.</span><span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="n">buf</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
<span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">from_pointer</span><span class="p">(</span><span class="n">pcert</span><span class="p">)</span></div>
<div class="viewcode-block" id="Certificate.from_buffer"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.Certificate.from_buffer">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">from_buffer</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
@@ -469,8 +504,8 @@
<span class="sd"> :return: :class:`Certificate`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">buf</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_ubyte</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))(</span><span class="o">*</span><span class="nb">bytearray</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
<span class="n">pcert</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">CertCreateCertificateContext</span><span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">crypto</span><span class="o">.</span><span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="n">buf</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))</span></div>
<span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">from_pointer</span><span class="p">(</span><span class="n">pcert</span><span class="p">)</span>
<span class="n">pcert</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">CertCreateCertificateContext</span><span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">crypto</span><span class="o">.</span><span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="n">buf</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
<span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">from_pointer</span><span class="p">(</span><span class="n">pcert</span><span class="p">)</span></div>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">from_pointer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ptr</span><span class="p">):</span>
@@ -482,8 +517,8 @@
<span class="k">return</span> <span class="bp">NotImplemented</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">CertCompareCertificate</span><span class="p">(</span><span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pCertInfo</span><span class="p">,</span> <span class="n">other</span><span class="o">.</span><span class="n">pCertInfo</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></div>
<span class="k">return</span> <span class="s1">&#39;&lt;</span><span class="si">{0}</span><span class="s1"> &quot;</span><span class="si">{1}</span><span class="s1">&quot; serial=&quot;</span><span class="si">{2}</span><span class="s1">&quot;&gt;&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">serial</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s1">&#39;&lt;</span><span class="si">{0}</span><span class="s1"> &quot;</span><span class="si">{1}</span><span class="s1">&quot; serial=&quot;</span><span class="si">{2}</span><span class="s1">&quot;&gt;&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">serial</span><span class="p">)</span></div>
@@ -579,8 +614,8 @@
<span class="k">raise</span>
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CryptAcquireContextW</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pszContainer</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pszProvider</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwProvType</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwFlags</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CRYPT_NEWKEYSET</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></div>
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CryptReleaseContext</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CryptReleaseContext</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span></div>
</pre></div>
</div>
@@ -613,13 +648,13 @@
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.1.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
</div>
</body>
</html>
+30 -11
View File
@@ -6,11 +6,11 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.crypto.cryptmsg &#8212; PythonForWindows 0.4 documentation</title>
<title>windows.crypto.cryptmsg &#8212; PythonForWindows 0.5 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<script type="text/javascript" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
@@ -26,7 +26,7 @@
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -49,7 +49,11 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">MSG_PARAM_KNOW_TYPES</span> <span class="o">=</span> <span class="p">{</span><span class="n">gdef</span><span class="o">.</span><span class="n">CMSG_SIGNER_INFO_PARAM</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CMSG_SIGNER_INFO</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">CMSG_SIGNER_COUNT_PARAM</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">CMSG_CERT_COUNT_PARAM</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">}</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">CMSG_CERT_COUNT_PARAM</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">CMSG_ENVELOPE_ALGORITHM_PARAM</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CRYPT_ALGORITHM_IDENTIFIER</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">CMSG_RECIPIENT_COUNT_PARAM</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">CMSG_RECIPIENT_INFO_PARAM</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_INFO</span><span class="p">,</span>
<span class="p">}</span>
<span class="k">def</span> <span class="nf">get_param</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">param_type</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">raw</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
@@ -86,8 +90,8 @@
<span class="sd"> .. note::</span>
<span class="sd"> Not all embded certificate are directly used to sign the :class:`CryptObject`.</span>
<span class="sd"> &quot;&quot;&quot;</span></div>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">crypto</span><span class="o">.</span><span class="n">Certificate</span><span class="o">.</span><span class="n">from_buffer</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_raw_cert</span><span class="p">(</span><span class="n">index</span><span class="p">))</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">crypto</span><span class="o">.</span><span class="n">Certificate</span><span class="o">.</span><span class="n">from_buffer</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_raw_cert</span><span class="p">(</span><span class="n">index</span><span class="p">))</span></div>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">certs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@@ -114,13 +118,28 @@
<span class="sd">&quot;&quot;&quot;Returns the signer informations for signer nb ``index``</span>
<span class="sd"> :return: :class:`~windows.generated_def.winstructs.CMSG_SIGNER_INFO`</span>
<span class="sd"> &quot;&quot;&quot;</span></div>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_param</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CMSG_SIGNER_INFO_PARAM</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_param</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CMSG_SIGNER_INFO_PARAM</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span></div>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">signers</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The list of :class:`~windows.generated_def.winstructs.CMSG_SIGNER_INFO` embed in the message&quot;&quot;&quot;</span></div>
<span class="sd">&quot;&quot;&quot;The list of :class:`~windows.generated_def.winstructs.CMSG_SIGNER_INFO` embed in the message&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">get_signer_data</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">nb_signer</span><span class="p">)]</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">nb_recipient</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;TODO: DOC&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_param</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CMSG_RECIPIENT_COUNT_PARAM</span><span class="p">)</span>
<div class="viewcode-block" id="CryptMessage.get_recipient_data"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CryptMessage.get_recipient_data">[docs]</a> <span class="k">def</span> <span class="nf">get_recipient_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;TODO: DOC&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_param</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CMSG_RECIPIENT_INFO_PARAM</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span></div>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">recipients</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;TODO: DOC&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">get_recipient_data</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">nb_recipient</span><span class="p">)]</span></div>
</pre></div>
</div>
@@ -153,13 +172,13 @@
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.1.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
</div>
</body>
</html>
+15 -15
View File
@@ -6,11 +6,11 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.crypto.encrypt_decrypt &#8212; PythonForWindows 0.4 documentation</title>
<title>windows.crypto.encrypt_decrypt &#8212; PythonForWindows 0.5 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<script type="text/javascript" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
@@ -26,7 +26,7 @@
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -41,12 +41,12 @@
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.crypto</span> <span class="k">import</span> <span class="n">DEFAULT_ENCODING</span>
<span class="kn">from</span> <span class="nn">windows.crypto.helper</span> <span class="k">import</span> <span class="n">ECRYPT_DATA_BLOB</span>
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">windows.crypto</span> <span class="k">import</span> <span class="n">Certificate</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;encrypt&quot;</span><span class="p">,</span> <span class="s2">&quot;decrypt&quot;</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">encode_init_vector</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
<span class="n">blob</span> <span class="o">=</span> <span class="n">ECRYPT_DATA_BLOB</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="n">blob</span> <span class="o">=</span> <span class="n">CRYPT_DATA_BLOB</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="n">size</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">()</span>
<span class="n">buf</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">CryptEncodeObjectEx</span><span class="p">(</span><span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="n">X509_OCTET_STRING</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">blob</span><span class="p">),</span> <span class="mi">0</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">buf</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
@@ -105,10 +105,10 @@
<span class="k">if</span> <span class="n">initvector</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;I don&#39;t know how to generate an &lt;initvector&gt; for &lt;</span><span class="si">{0}</span><span class="s2">&gt; please provide one (or None)&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">algo</span><span class="p">))</span>
<span class="n">initvector_encoded</span> <span class="o">=</span> <span class="n">encode_init_vector</span><span class="p">(</span><span class="n">initvector</span><span class="p">)</span>
<span class="n">alg_ident</span><span class="o">.</span><span class="n">Parameters</span> <span class="o">=</span> <span class="n">ECRYPT_DATA_BLOB</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">initvector_encoded</span><span class="p">)</span>
<span class="n">alg_ident</span><span class="o">.</span><span class="n">Parameters</span> <span class="o">=</span> <span class="n">CRYPT_DATA_BLOB</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">initvector_encoded</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">initvector_encoded</span> <span class="o">=</span> <span class="n">encode_init_vector</span><span class="p">(</span><span class="n">initvector</span><span class="p">)</span>
<span class="n">alg_ident</span><span class="o">.</span><span class="n">Parameters</span> <span class="o">=</span> <span class="n">ECRYPT_DATA_BLOB</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">initvector_encoded</span><span class="p">)</span>
<span class="n">alg_ident</span><span class="o">.</span><span class="n">Parameters</span> <span class="o">=</span> <span class="n">CRYPT_DATA_BLOB</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">initvector_encoded</span><span class="p">)</span>
<span class="c1"># Setup encryption parameters</span>
<span class="n">param</span> <span class="o">=</span> <span class="n">CRYPT_ENCRYPT_MESSAGE_PARA</span><span class="p">()</span>
@@ -127,14 +127,14 @@
<span class="n">winproxy</span><span class="o">.</span><span class="n">CryptEncryptMessage</span><span class="p">(</span><span class="n">param</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">certs</span><span class="p">),</span> <span class="n">certs</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">msg</span><span class="p">),</span> <span class="kc">None</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
<span class="c1">#Encrypt the msg</span>
<span class="n">buf</span> <span class="o">=</span> <span class="p">(</span><span class="n">BYTE</span> <span class="o">*</span> <span class="n">size</span><span class="o">.</span><span class="n">value</span><span class="p">)()</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">CryptEncryptMessage</span><span class="p">(</span><span class="n">param</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">certs</span><span class="p">),</span> <span class="n">certs</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">msg</span><span class="p">),</span> <span class="n">buf</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span></div>
<span class="k">return</span> <span class="nb">bytearray</span><span class="p">(</span><span class="n">buf</span><span class="p">[:</span><span class="n">size</span><span class="o">.</span><span class="n">value</span><span class="p">])</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">CryptEncryptMessage</span><span class="p">(</span><span class="n">param</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">certs</span><span class="p">),</span> <span class="n">certs</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">msg</span><span class="p">),</span> <span class="n">buf</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
<span class="k">return</span> <span class="nb">bytearray</span><span class="p">(</span><span class="n">buf</span><span class="p">[:</span><span class="n">size</span><span class="o">.</span><span class="n">value</span><span class="p">])</span></div>
<div class="viewcode-block" id="decrypt"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.decrypt">[docs]</a><span class="k">def</span> <span class="nf">decrypt</span><span class="p">(</span><span class="n">cert_store</span><span class="p">,</span> <span class="n">encrypted</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Try to decrypt the ``encrypted`` msg with any certificate in ``cert_store``.</span>
<span class="sd"> If there is no certificate able to decrypt the message ``Kernel32Error(winerror=0x8009200c)`` is raised.</span>
<span class="sd"> If there is no certificate able to decrypt the message ``WinproxyError(winerror=0x8009200c)`` is raised.</span>
<span class="sd"> :param cert_store:</span>
<span class="sd"> :type cert_store: :class:`CertificateStore`</span>
@@ -154,8 +154,8 @@
<span class="n">winproxy</span><span class="o">.</span><span class="n">CryptDecryptMessage</span><span class="p">(</span><span class="n">dparam</span><span class="p">,</span> <span class="n">buf</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="kc">None</span><span class="p">,</span> <span class="n">dcryptsize</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="c1">#Decrypt the msg</span>
<span class="n">dcryptbuff</span> <span class="o">=</span> <span class="p">(</span><span class="n">BYTE</span> <span class="o">*</span> <span class="n">dcryptsize</span><span class="o">.</span><span class="n">value</span><span class="p">)()</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">CryptDecryptMessage</span><span class="p">(</span><span class="n">dparam</span><span class="p">,</span> <span class="n">buf</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">dcryptbuff</span><span class="p">,</span> <span class="n">dcryptsize</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="nb">bytearray</span><span class="p">(</span><span class="n">dcryptbuff</span><span class="p">[:</span><span class="n">dcryptsize</span><span class="o">.</span><span class="n">value</span><span class="p">]))</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">CryptDecryptMessage</span><span class="p">(</span><span class="n">dparam</span><span class="p">,</span> <span class="n">buf</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">dcryptbuff</span><span class="p">,</span> <span class="n">dcryptsize</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="nb">bytearray</span><span class="p">(</span><span class="n">dcryptbuff</span><span class="p">[:</span><span class="n">dcryptsize</span><span class="o">.</span><span class="n">value</span><span class="p">]))</span></div>
</pre></div>
</div>
@@ -188,13 +188,13 @@
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.1.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
</div>
</body>
</html>
+13 -15
View File
@@ -6,11 +6,11 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.crypto.generation &#8212; PythonForWindows 0.4 documentation</title>
<title>windows.crypto.generation &#8212; PythonForWindows 0.5 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<script type="text/javascript" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
@@ -26,7 +26,7 @@
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -40,8 +40,6 @@
<span></span><span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">windows.crypto.helper</span> <span class="k">import</span> <span class="n">ECRYPT_DATA_BLOB</span>
<span class="kn">from</span> <span class="nn">windows.crypto</span> <span class="k">import</span> <span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="n">CertificateStore</span>
@@ -55,9 +53,9 @@
<span class="n">size</span> <span class="o">=</span> <span class="n">ULONG</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="o">+</span> <span class="mh">0x100</span><span class="p">)</span>
<span class="n">buffer</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_ubyte</span> <span class="o">*</span> <span class="n">size</span><span class="o">.</span><span class="n">value</span><span class="p">)()</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">CertStrToNameA</span><span class="p">(</span><span class="n">X509_ASN_ENCODING</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">CERT_OID_NAME_STR</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">buffer</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="n">blobname</span> <span class="o">=</span> <span class="n">ECRYPT_DATA_BLOB</span><span class="p">(</span><span class="n">size</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">buffer</span><span class="p">)</span>
<span class="n">cert</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertCreateSelfSignCertificate</span><span class="p">(</span><span class="n">prov</span><span class="p">,</span> <span class="n">blobname</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="n">key_info</span><span class="p">,</span> <span class="n">signature_algo</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">crypto</span><span class="o">.</span><span class="n">Certificate</span><span class="o">.</span><span class="n">from_pointer</span><span class="p">(</span><span class="n">cert</span><span class="p">)</span>
<span class="n">blobname</span> <span class="o">=</span> <span class="n">CRYPT_DATA_BLOB</span><span class="p">(</span><span class="n">size</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">buffer</span><span class="p">)</span>
<span class="n">cert</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertCreateSelfSignCertificate</span><span class="p">(</span><span class="n">prov</span><span class="p">,</span> <span class="n">blobname</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="n">key_info</span><span class="p">,</span> <span class="n">signature_algo</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">crypto</span><span class="o">.</span><span class="n">Certificate</span><span class="o">.</span><span class="n">from_pointer</span><span class="p">(</span><span class="n">cert</span><span class="p">)</span></div>
<div class="viewcode-block" id="generate_key"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.generation.generate_key">[docs]</a><span class="k">def</span> <span class="nf">generate_key</span><span class="p">(</span><span class="n">prov</span><span class="p">,</span> <span class="n">keytype</span><span class="o">=</span><span class="n">AT_KEYEXCHANGE</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">CRYPT_EXPORTABLE</span><span class="p">):</span>
@@ -66,8 +64,8 @@
<span class="sd"> :return: :class:`HCRYPTKEY`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="n">HCRYPTKEY</span><span class="p">()</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">CryptGenKey</span><span class="p">(</span><span class="n">prov</span><span class="p">,</span> <span class="n">keytype</span><span class="p">,</span> <span class="n">flags</span> <span class="p">,</span> <span class="n">key</span><span class="p">)</span></div>
<span class="k">return</span> <span class="n">key</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">CryptGenKey</span><span class="p">(</span><span class="n">prov</span><span class="p">,</span> <span class="n">keytype</span><span class="p">,</span> <span class="n">flags</span> <span class="p">,</span> <span class="n">key</span><span class="p">)</span>
<span class="k">return</span> <span class="n">key</span></div>
<span class="c1"># print(key[0])</span>
<span class="c1"># print(&quot;[OK] Key created&quot;)</span>
<span class="c1"># size = DWORD()</span>
@@ -87,11 +85,11 @@
<span class="sd"> :return: :class:`bytearray` -- The raw PFX</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">blob</span> <span class="o">=</span> <span class="n">ECRYPT_DATA_BLOB</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="n">blob</span> <span class="o">=</span> <span class="n">CRYPT_DATA_BLOB</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">PFXExportCertStoreEx</span><span class="p">(</span><span class="n">hstore</span><span class="p">,</span> <span class="n">blob</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">EXPORT_PRIVATE_KEYS</span> <span class="o">|</span> <span class="n">REPORT_NO_PRIVATE_KEY</span> <span class="o">|</span> <span class="n">REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY</span><span class="p">)</span>
<span class="n">blob</span><span class="o">.</span><span class="n">pbData</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_ubyte</span> <span class="o">*</span> <span class="n">blob</span><span class="o">.</span><span class="n">cbData</span><span class="p">)()</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">PFXExportCertStoreEx</span><span class="p">(</span><span class="n">hstore</span><span class="p">,</span> <span class="n">blob</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">EXPORT_PRIVATE_KEYS</span> <span class="o">|</span> <span class="n">REPORT_NO_PRIVATE_KEY</span> <span class="o">|</span> <span class="n">REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY</span><span class="p">)</span></div>
<span class="k">return</span> <span class="n">blob</span><span class="o">.</span><span class="n">data</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">PFXExportCertStoreEx</span><span class="p">(</span><span class="n">hstore</span><span class="p">,</span> <span class="n">blob</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">EXPORT_PRIVATE_KEYS</span> <span class="o">|</span> <span class="n">REPORT_NO_PRIVATE_KEY</span> <span class="o">|</span> <span class="n">REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY</span><span class="p">)</span>
<span class="k">return</span> <span class="n">blob</span><span class="o">.</span><span class="n">data</span></div>
</pre></div>
</div>
@@ -124,13 +122,13 @@
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.1.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
</div>
</body>
</html>
+76 -15
View File
@@ -6,11 +6,11 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.debug.breakpoints &#8212; PythonForWindows 0.4 documentation</title>
<title>windows.debug.breakpoints &#8212; PythonForWindows 0.5 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<script type="text/javascript" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
@@ -26,7 +26,7 @@
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -59,8 +59,8 @@
<span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">WinProcess</span><span class="p">)</span>
<div class="viewcode-block" id="Breakpoint.trigger"><a class="viewcode-back" href="../../../debug.html#windows.debug.Breakpoint.trigger">[docs]</a> <span class="k">def</span> <span class="nf">trigger</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dbg</span><span class="p">,</span> <span class="n">exception</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Called when breakpoint is hit&quot;&quot;&quot;</span></div></div>
<span class="k">pass</span>
<span class="sd">&quot;&quot;&quot;Called when breakpoint is hit&quot;&quot;&quot;</span>
<span class="k">pass</span></div></div>
<span class="k">class</span> <span class="nc">ProxyBreakpoint</span><span class="p">(</span><span class="n">Breakpoint</span><span class="p">):</span>
@@ -77,8 +77,8 @@
<span class="sd">&quot;&quot;&quot;An hardware-execution breakpoint (type == ``HARDWARE_EXEC_BP``)&quot;&quot;&quot;</span>
<span class="nb">type</span> <span class="o">=</span> <span class="n">HARDWARE_EXEC_BP</span>
<span class="k">def</span> <span class="nf">apply_to_target</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span></div>
<span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">WinThread</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">apply_to_target</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">WinThread</span><span class="p">)</span></div>
<div class="viewcode-block" id="MemoryBreakpoint"><a class="viewcode-back" href="../../../debug.html#windows.debug.MemoryBreakpoint">[docs]</a><span class="k">class</span> <span class="nc">MemoryBreakpoint</span><span class="p">(</span><span class="n">Breakpoint</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A memory breakpoint (type == ``MEMORY_BREAKPOINT``)&quot;&quot;&quot;</span>
@@ -91,12 +91,12 @@
<span class="sd"> ``events``: a string representing the events that interest the BP (any of &quot;RWX&quot;)&quot;&quot;&quot;</span>
<span class="nb">super</span><span class="p">(</span><span class="n">MemoryBreakpoint</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="n">size</span> <span class="k">if</span> <span class="n">size</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">DEFAULT_SIZE</span>
<span class="n">events</span> <span class="o">=</span> <span class="n">events</span> <span class="k">if</span> <span class="n">events</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">DEFAULT_EVENTS</span></div>
<span class="bp">self</span><span class="o">.</span><span class="n">events</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">events</span><span class="p">)</span>
<span class="n">events</span> <span class="o">=</span> <span class="n">events</span> <span class="k">if</span> <span class="n">events</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">DEFAULT_EVENTS</span>
<span class="bp">self</span><span class="o">.</span><span class="n">events</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">events</span><span class="p">)</span></div>
<div class="viewcode-block" id="MemoryBreakpoint.trigger"><a class="viewcode-back" href="../../../debug.html#windows.debug.MemoryBreakpoint.trigger">[docs]</a> <span class="k">def</span> <span class="nf">trigger</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dbg</span><span class="p">,</span> <span class="n">exception</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Called when breakpoint is hit&quot;&quot;&quot;</span></div></div>
<span class="k">pass</span>
<span class="sd">&quot;&quot;&quot;Called when breakpoint is hit&quot;&quot;&quot;</span>
<span class="k">pass</span></div></div>
<span class="c1">## Arguments Helper (need to move this elsewhere)</span>
@@ -104,6 +104,9 @@
<span class="k">def</span> <span class="nf">get_arg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nb</span><span class="p">,</span> <span class="n">proc</span><span class="p">,</span> <span class="n">thread</span><span class="p">):</span>
<span class="k">return</span> <span class="n">proc</span><span class="o">.</span><span class="n">read_dword</span><span class="p">(</span><span class="n">thread</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">sp</span> <span class="o">+</span> <span class="mi">4</span> <span class="o">+</span> <span class="p">(</span><span class="mi">4</span> <span class="o">*</span> <span class="n">nb</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">set_arg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nb</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">proc</span><span class="p">,</span> <span class="n">thread</span><span class="p">):</span>
<span class="k">return</span> <span class="n">proc</span><span class="o">.</span><span class="n">write_dword</span><span class="p">(</span><span class="n">thread</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">sp</span> <span class="o">+</span> <span class="mi">4</span> <span class="o">+</span> <span class="p">(</span><span class="mi">4</span> <span class="o">*</span> <span class="n">nb</span><span class="p">),</span> <span class="n">value</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">X64ArgumentRetriever</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="n">REG_ARGS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;Rcx&quot;</span><span class="p">,</span> <span class="s2">&quot;Rdx&quot;</span><span class="p">,</span> <span class="s2">&quot;R8&quot;</span><span class="p">,</span> <span class="s2">&quot;R9&quot;</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">get_arg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nb</span><span class="p">,</span> <span class="n">proc</span><span class="p">,</span> <span class="n">thread</span><span class="p">):</span>
@@ -111,6 +114,13 @@
<span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">thread</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">REG_ARGS</span><span class="p">[</span><span class="n">nb</span><span class="p">])</span>
<span class="k">return</span> <span class="n">proc</span><span class="o">.</span><span class="n">read_qword</span><span class="p">(</span><span class="n">thread</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">sp</span> <span class="o">+</span> <span class="mi">8</span> <span class="o">+</span> <span class="p">(</span><span class="mi">8</span> <span class="o">*</span> <span class="n">nb</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">set_arg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nb</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">proc</span><span class="p">,</span> <span class="n">thread</span><span class="p">):</span>
<span class="k">if</span> <span class="n">nb</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">REG_ARGS</span><span class="p">):</span>
<span class="n">ctx</span> <span class="o">=</span> <span class="n">thread</span><span class="o">.</span><span class="n">context</span>
<span class="nb">setattr</span><span class="p">(</span><span class="n">ctx</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">REG_ARGS</span><span class="p">[</span><span class="n">nb</span><span class="p">],</span> <span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">thread</span><span class="o">.</span><span class="n">set_context</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span>
<span class="k">return</span> <span class="n">proc</span><span class="o">.</span><span class="n">write_qword</span><span class="p">(</span><span class="n">thread</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">sp</span> <span class="o">+</span> <span class="mi">8</span> <span class="o">+</span> <span class="p">(</span><span class="mi">8</span> <span class="o">*</span> <span class="n">nb</span><span class="p">),</span> <span class="n">value</span><span class="p">)</span>
<span class="c1">## Behaviour breakpoint !</span>
<span class="c1"># class FunctionParamDumpBP(Breakpoint):</span>
<span class="k">class</span> <span class="nc">FunctionParamDumpBPAbstract</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
@@ -174,6 +184,57 @@
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">extract_arguments_32bits</span><span class="p">(</span><span class="n">cproc</span><span class="p">,</span> <span class="n">cthread</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">extract_arguments_64bits</span><span class="p">(</span><span class="n">cproc</span><span class="p">,</span> <span class="n">cthread</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">arguments</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dbg</span><span class="p">):</span>
<span class="s2">&quot;TEST PARAM DICT&quot;</span>
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span><span class="p">:</span>
<span class="n">extractor</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">debug</span><span class="o">.</span><span class="n">X86ArgumentRetriever</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">dbg</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">64</span><span class="p">:</span>
<span class="n">extractor</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">debug</span><span class="o">.</span><span class="n">X64ArgumentRetriever</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">dbg</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">SegCs</span> <span class="o">==</span> <span class="n">windows</span><span class="o">.</span><span class="n">syswow64</span><span class="o">.</span><span class="n">CS_32bits</span><span class="p">:</span>
<span class="n">extractor</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">debug</span><span class="o">.</span><span class="n">X86ArgumentRetriever</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">extractor</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">debug</span><span class="o">.</span><span class="n">X64ArgumentRetriever</span><span class="p">()</span>
<span class="n">name_map</span> <span class="o">=</span> <span class="p">{</span><span class="n">name</span><span class="p">:</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">name</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">t</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">target_params</span><span class="p">)}</span>
<span class="k">return</span> <span class="n">FunctionParameterProxy</span><span class="p">(</span><span class="n">extractor</span><span class="p">,</span> <span class="n">name_map</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">target_args</span><span class="p">,</span> <span class="n">dbg</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">FunctionParameterProxy</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="c1"># TODO: clean this + put more of the logic in the X64ArgumentRetriever</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">extractor</span><span class="p">,</span> <span class="n">name_map</span><span class="p">,</span> <span class="n">parameters_type</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">extractor</span> <span class="o">=</span> <span class="n">extractor</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name_map</span> <span class="o">=</span> <span class="n">name_map</span>
<span class="bp">self</span><span class="o">.</span><span class="n">parameters_type</span> <span class="o">=</span> <span class="n">parameters_type</span>
<span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="n">x</span>
<span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name_map</span><span class="p">[</span><span class="n">x</span><span class="p">]</span>
<span class="c1"># import pdb;pdb.set_trace()</span>
<span class="n">argtype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parameters_type</span><span class="p">[</span><span class="n">x</span><span class="p">]</span>
<span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">extractor</span><span class="o">.</span><span class="n">get_arg</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="o">.</span><span class="n">current_process</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="o">.</span><span class="n">current_thread</span><span class="p">)</span>
<span class="n">rt</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">remotectypes</span><span class="o">.</span><span class="n">transform_type_to_remote32bits</span><span class="p">(</span><span class="n">argtype</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">rt</span><span class="p">,</span> <span class="n">windows</span><span class="o">.</span><span class="n">remotectypes</span><span class="o">.</span><span class="n">RemoteValue</span><span class="p">):</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">rt</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="o">.</span><span class="n">current_process</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">rt</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="s2">&quot;contents&quot;</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">value</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">return</span> <span class="n">t</span>
<span class="k">def</span> <span class="nf">__setitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name_map</span><span class="p">[</span><span class="n">x</span><span class="p">]</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">PVOID</span><span class="p">)</span>
<span class="k">except</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">ArgumentError</span><span class="p">:</span>
<span class="k">pass</span>
<span class="n">value</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">extractor</span><span class="o">.</span><span class="n">set_arg</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="o">.</span><span class="n">current_process</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="o">.</span><span class="n">current_thread</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">FunctionParamDumpBP</span><span class="p">(</span><span class="n">FunctionParamDumpBPAbstract</span><span class="p">,</span> <span class="n">Breakpoint</span><span class="p">):</span>
<span class="k">pass</span>
@@ -206,8 +267,8 @@
<span class="sd">&quot;&quot;&quot;A breakpoint that accepts a function from :mod:`windows.winproxy` and able to:</span>
<span class="sd"> - Extract the arguments of the functions</span>
<span class="sd"> - Break at the return of the function</span></div>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="sd"> - Break at the return of the function</span>
<span class="sd"> &quot;&quot;&quot;</span></div>
<span class="k">class</span> <span class="nc">PrintBP</span><span class="p">(</span><span class="n">Breakpoint</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="nb">format</span><span class="p">,</span> <span class="n">func</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
@@ -253,13 +314,13 @@
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.1.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
</div>
</body>
</html>
+88 -56
View File
@@ -6,11 +6,11 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.debug.debugger &#8212; PythonForWindows 0.4 documentation</title>
<title>windows.debug.debugger &#8212; PythonForWindows 0.5 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<script type="text/javascript" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
@@ -26,7 +26,7 @@
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -78,19 +78,19 @@
<span class="sd"> * Standard BP (int3)</span>
<span class="sd"> * Hardware-Exec BP (DrX)</span>
<span class="sd"> * Memory BP (virtual_protect)&quot;&quot;&quot;</span>
<span class="sd"> * Memory BP (virtual_protect)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="Debugger.__init__"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;``target`` must be a debuggable :class:`WinProcess`.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_init_dispatch_handlers</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">target</span>
<span class="bp">self</span><span class="o">.</span><span class="n">is_target_launched</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1">#if not already_debuggable:</span>
<span class="c1"># winproxy.DebugActiveProcess(target.pid)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">processes</span> <span class="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">threads</span> <span class="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current_process</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">first_bp_encoutered</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1"># List of breakpoints</span>
<span class="bp">self</span><span class="o">.</span><span class="n">breakpoints</span> <span class="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_pending_breakpoints</span> <span class="o">=</span> <span class="p">{}</span> <span class="c1">#Breakpoints to put in new process / threads</span>
@@ -109,8 +109,8 @@
<span class="bp">self</span><span class="o">.</span><span class="n">_watched_pages</span> <span class="o">=</span> <span class="p">{}</span><span class="c1"># Dict [page_modif] -&gt; [mem bp on the page]</span>
<span class="c1"># [start] -&gt; (size, current_proctection, original_prot)</span></div>
<span class="bp">self</span><span class="o">.</span><span class="n">_virtual_protected_memory</span> <span class="o">=</span> <span class="p">[]</span> <span class="c1"># List of memory-range modified by a MemBP</span>
<span class="c1"># [start] -&gt; (size, current_proctection, original_prot)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_virtual_protected_memory</span> <span class="o">=</span> <span class="p">[]</span> <span class="c1"># List of memory-range modified by a MemBP</span></div>
<div class="viewcode-block" id="Debugger.attach"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.attach">[docs]</a> <span class="nd">@classmethod</span>
@@ -122,8 +122,8 @@
<span class="sd"> .. note::</span>
<span class="sd"> see :ref:`Debugger.attach sample &lt;sample_debugger_attach&gt;`&quot;&quot;&quot;</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">DebugActiveProcess</span><span class="p">(</span><span class="n">target</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span></div>
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">DebugActiveProcess</span><span class="p">(</span><span class="n">target</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">target</span><span class="p">)</span></div>
<div class="viewcode-block" id="Debugger.detach"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.detach">[docs]</a> <span class="k">def</span> <span class="nf">detach</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Detach from all debugged processes or process ``target``&quot;&quot;&quot;</span>
@@ -177,8 +177,8 @@
<span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="ow">and</span> <span class="n">target</span><span class="o">.</span><span class="n">pid</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">pid</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="kc">None</span></div>
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">DebugActiveProcessStop</span><span class="p">(</span><span class="n">target</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">DebugActiveProcessStop</span><span class="p">(</span><span class="n">target</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">_killed_in_action</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return ``True`` if current process have been detached by user callback&quot;&quot;&quot;</span>
@@ -191,8 +191,8 @@
<span class="sd"> :rtype: :class:`Debugger`&quot;&quot;&quot;</span>
<span class="n">dwCreationFlags</span> <span class="o">|=</span> <span class="n">DEBUG_PROCESS</span>
<span class="n">c</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">create_process</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="n">args</span><span class="p">,</span> <span class="n">dwCreationFlags</span><span class="o">=</span><span class="n">dwCreationFlags</span><span class="p">,</span> <span class="n">show_windows</span><span class="o">=</span><span class="n">show_windows</span><span class="p">)</span></div>
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
<span class="n">c</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">create_process</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="n">args</span><span class="p">,</span> <span class="n">dwCreationFlags</span><span class="o">=</span><span class="n">dwCreationFlags</span><span class="p">,</span> <span class="n">show_windows</span><span class="o">=</span><span class="n">show_windows</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">c</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">_init_dispatch_handlers</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">dbg_evt_dispatch</span> <span class="o">=</span> <span class="p">{}</span>
@@ -232,7 +232,6 @@
<span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">threads</span><span class="p">[</span><span class="n">debug_event</span><span class="o">.</span><span class="n">dwThreadId</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">_dispatch_debug_event</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">debug_event</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;DISPATCH </span><span class="si">{0}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">DEBUG_EVENT</span><span class="o">.</span><span class="n">KNOWN_EVENT_CODE</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">debug_event</span><span class="o">.</span><span class="n">dwDebugEventCode</span><span class="p">)))</span>
<span class="n">handler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_DebugEventCode_dispatch</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">debug_event</span><span class="o">.</span><span class="n">dwDebugEventCode</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_handle_unknown_debug_event</span><span class="p">)</span>
<span class="k">return</span> <span class="n">handler</span><span class="p">(</span><span class="n">debug_event</span><span class="p">)</span>
@@ -302,6 +301,7 @@
<span class="n">addr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resolve</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">addr</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span>
<span class="k">if</span> <span class="n">addr</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">&quot;Setting soft-BP at &lt;</span><span class="si">{0:#x}</span><span class="s2">&gt; in &lt;</span><span class="si">{1}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="n">target</span><span class="p">),</span> <span class="s2">&quot;DBG&quot;</span><span class="p">)</span>
<span class="n">bp</span><span class="o">.</span><span class="n">_addr</span> <span class="o">=</span> <span class="n">addr</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_memory_save</span><span class="p">[</span><span class="n">target</span><span class="o">.</span><span class="n">pid</span><span class="p">][</span><span class="n">addr</span><span class="p">]</span> <span class="o">=</span> <span class="n">target</span><span class="o">.</span><span class="n">read_memory</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">breakpoints</span><span class="p">[</span><span class="n">target</span><span class="o">.</span><span class="n">pid</span><span class="p">][</span><span class="n">addr</span><span class="p">]</span> <span class="o">=</span> <span class="n">bp</span>
@@ -343,6 +343,7 @@
<span class="n">x</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">empty_drx</span><span class="p">)]</span> <span class="o">=</span> <span class="n">bp</span>
<span class="n">target</span><span class="o">.</span><span class="n">set_context</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">breakpoints</span><span class="p">[</span><span class="n">target</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="n">pid</span><span class="p">][</span><span class="n">addr</span><span class="p">]</span> <span class="o">=</span> <span class="n">bp</span>
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">&quot;Setting HXBP at &lt;</span><span class="si">{0:#x}</span><span class="s2">&gt; in &lt;</span><span class="si">{1}</span><span class="s2">&gt; (Dr</span><span class="si">{2}</span><span class="s2">)&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">empty_drx</span><span class="p">),</span> <span class="s2">&quot;DBG&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">def</span> <span class="nf">_remove_breakpoint_HXBP</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bp</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
@@ -541,6 +542,17 @@
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">&quot;Single step as begin of _handle_exception_breakpoint&quot;</span><span class="p">,</span> <span class="s2">&quot;DBG&quot;</span><span class="p">)</span>
<span class="c1"># import pdb;pdb.set_trace()</span>
<span class="n">YOLO</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Sub-method _do_setup() ?</span>
<span class="n">dbg_has_setup</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">first_bp_encoutered</span><span class="p">:</span>
<span class="n">dbg_has_setup</span> <span class="o">=</span> <span class="ow">not</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">on_setup</span><span class="p">,</span> <span class="s2">&quot;_abstract_on_setup_&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">first_bp_encoutered</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">if</span> <span class="n">dbg_has_setup</span><span class="p">:</span>
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">DisabledMemoryBreakpoint</span><span class="p">():</span>
<span class="n">continue_flag</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_setup</span><span class="p">()</span> <span class="c1"># Handle single-step here ?</span>
<span class="c1"># Check killed in action ?</span>
<span class="c1"># What if setup + BP object() ?</span>
<span class="k">if</span> <span class="n">excp_addr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">breakpoints</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">pid</span><span class="p">]:</span>
<span class="n">thread</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span> <span class="ow">and</span> <span class="n">excp_bitness</span> <span class="o">==</span> <span class="mi">64</span><span class="p">:</span>
@@ -563,6 +575,8 @@
<span class="c1"># Setup BP if not suppressed</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_pass_breakpoint</span><span class="p">(</span><span class="n">excp_addr</span><span class="p">)</span>
<span class="k">return</span> <span class="n">continue_flag</span>
<span class="k">if</span> <span class="n">dbg_has_setup</span><span class="p">:</span> <span class="c1"># setup() was called on this BP-event: no on_exception()</span>
<span class="k">return</span> <span class="n">continue_flag</span>
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">DisabledMemoryBreakpoint</span><span class="p">():</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_exception</span><span class="p">(</span><span class="n">exception</span><span class="p">)</span>
@@ -680,7 +694,7 @@
<span class="n">excp_code</span> <span class="o">=</span> <span class="n">exception</span><span class="o">.</span><span class="n">ExceptionRecord</span><span class="o">.</span><span class="n">ExceptionCode</span>
<span class="n">excp_addr</span> <span class="o">=</span> <span class="n">exception</span><span class="o">.</span><span class="n">ExceptionRecord</span><span class="o">.</span><span class="n">ExceptionAddress</span>
<span class="k">if</span> <span class="n">excp_code</span> <span class="ow">in</span> <span class="p">[</span><span class="n">EXCEPTION_BREAKPOINT</span><span class="p">,</span> <span class="n">STATUS_WX86_BREAKPOINT</span><span class="p">]</span> <span class="ow">and</span> <span class="n">excp_addr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">breakpoints</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">pid</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">excp_code</span> <span class="ow">in</span> <span class="p">[</span><span class="n">EXCEPTION_BREAKPOINT</span><span class="p">,</span> <span class="n">STATUS_WX86_BREAKPOINT</span><span class="p">]:</span>
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">&quot;Handle exception as breakpoint&quot;</span><span class="p">,</span> <span class="s2">&quot;DBG&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_handle_exception_breakpoint</span><span class="p">(</span><span class="n">exception</span><span class="p">,</span> <span class="n">excp_addr</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">excp_code</span> <span class="ow">in</span> <span class="p">[</span><span class="n">EXCEPTION_SINGLE_STEP</span><span class="p">,</span> <span class="n">STATUS_WX86_SINGLE_STEP</span><span class="p">]:</span>
@@ -878,8 +892,8 @@
<span class="c1"># rhaaa _killed_in_action is a REALLY bad name, it&#39;s not killed, it&#39;s detached</span>
<span class="c1"># TODO: FIXME</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_finish_debug_event</span><span class="p">(</span><span class="n">debug_event</span><span class="p">,</span> <span class="n">dbg_continue_flag</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">processes</span><span class="p">:</span></div>
<span class="k">break</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">processes</span><span class="p">:</span>
<span class="k">break</span></div>
<div class="viewcode-block" id="Debugger.add_bp"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.add_bp">[docs]</a> <span class="k">def</span> <span class="nf">add_bp</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bp</span><span class="p">,</span> <span class="n">addr</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Add a breakpoint, bp can be:</span>
@@ -910,8 +924,8 @@
<span class="c1"># if target == self.target: # Original target (that have not been lauched yet)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_pending_breakpoint</span><span class="p">(</span><span class="n">bp</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span>
<span class="c1"># else:</span>
<span class="c1"># raise ValueError(&quot;Unknown target {0}&quot;.format(target))</span></div>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_setup_breakpoint</span><span class="p">(</span><span class="n">bp</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span>
<span class="c1"># raise ValueError(&quot;Unknown target {0}&quot;.format(target))</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_setup_breakpoint</span><span class="p">(</span><span class="n">bp</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span></div>
<div class="viewcode-block" id="Debugger.del_bp"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.del_bp">[docs]</a> <span class="k">def</span> <span class="nf">del_bp</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bp</span><span class="p">,</span> <span class="n">targets</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Delete a breakpoint, if targets is ``None``: delete it from all targets&quot;&quot;&quot;</span>
@@ -924,15 +938,15 @@
<span class="n">targets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">threads</span><span class="o">.</span><span class="n">values</span><span class="p">()</span>
<span class="k">for</span> <span class="n">target</span> <span class="ow">in</span> <span class="n">targets</span><span class="p">:</span>
<span class="n">_remove_method</span><span class="p">(</span><span class="n">bp</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span>
<span class="k">if</span> <span class="n">original_target</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span></div>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">remove_pending_breakpoint</span><span class="p">(</span><span class="n">bp</span><span class="p">,</span> <span class="n">original_target</span><span class="p">)</span>
<span class="k">if</span> <span class="n">original_target</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">remove_pending_breakpoint</span><span class="p">(</span><span class="n">bp</span><span class="p">,</span> <span class="n">original_target</span><span class="p">)</span></div>
<div class="viewcode-block" id="Debugger.single_step"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.single_step">[docs]</a> <span class="k">def</span> <span class="nf">single_step</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Make the ``current_thread`` ``single_step``. ``Debugger.on_single_step`` will be called after that&quot;&quot;&quot;</span>
<span class="n">t</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span>
<span class="n">ctx</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">context</span>
<span class="n">ctx</span><span class="o">.</span><span class="n">EEFlags</span><span class="o">.</span><span class="n">TF</span> <span class="o">=</span> <span class="mi">1</span></div>
<span class="n">t</span><span class="o">.</span><span class="n">set_context</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span>
<span class="n">ctx</span><span class="o">.</span><span class="n">EEFlags</span><span class="o">.</span><span class="n">TF</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">t</span><span class="o">.</span><span class="n">set_context</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span></div>
<span class="c1">## Memory Breakpoint helper</span>
<div class="viewcode-block" id="Debugger.get_memory_breakpoint_at"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.get_memory_breakpoint_at">[docs]</a> <span class="k">def</span> <span class="nf">get_memory_breakpoint_at</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">process</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
@@ -953,8 +967,8 @@
<span class="k">for</span> <span class="n">bp</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_watched_pages</span><span class="p">[</span><span class="n">process</span><span class="o">.</span><span class="n">pid</span><span class="p">][</span><span class="n">fault_page</span><span class="p">]</span><span class="o">.</span><span class="n">bps</span><span class="p">:</span>
<span class="k">if</span> <span class="n">bp</span><span class="o">.</span><span class="n">_addr</span> <span class="o">&lt;=</span> <span class="n">addr</span> <span class="o">&lt;</span> <span class="n">bp</span><span class="o">.</span><span class="n">_addr</span> <span class="o">+</span> <span class="n">bp</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
<span class="k">return</span> <span class="n">bp</span></div>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">bp</span>
<span class="k">return</span> <span class="kc">None</span></div>
<div class="viewcode-block" id="Debugger.disable_all_memory_breakpoints"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.disable_all_memory_breakpoints">[docs]</a> <span class="k">def</span> <span class="nf">disable_all_memory_breakpoints</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Restore all pages to their original access rights.</span>
@@ -979,8 +993,8 @@
<span class="k">for</span> <span class="n">bp</span> <span class="ow">in</span> <span class="n">watched_page</span><span class="o">.</span><span class="n">bps</span><span class="p">:</span>
<span class="c1"># TODO: Document</span>
<span class="n">bp</span><span class="o">.</span><span class="n">on_error</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">page_addr</span><span class="p">)</span>
<span class="n">res</span><span class="p">[</span><span class="n">page_addr</span><span class="p">]</span> <span class="o">=</span> <span class="n">page_protection</span><span class="o">.</span><span class="n">value</span></div>
<span class="k">return</span> <span class="n">res</span>
<span class="n">res</span><span class="p">[</span><span class="n">page_addr</span><span class="p">]</span> <span class="o">=</span> <span class="n">page_protection</span><span class="o">.</span><span class="n">value</span>
<span class="k">return</span> <span class="n">res</span></div>
<div class="viewcode-block" id="Debugger.restore_all_memory_breakpoints"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.restore_all_memory_breakpoints">[docs]</a> <span class="k">def</span> <span class="nf">restore_all_memory_breakpoints</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
@@ -993,8 +1007,8 @@
<span class="k">for</span> <span class="n">page_addr</span><span class="p">,</span> <span class="n">protection</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="c1"># Prevent restoring deleted breakpoints</span>
<span class="k">if</span> <span class="n">page_addr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_watched_pages</span><span class="p">[</span><span class="n">target</span><span class="o">.</span><span class="n">pid</span><span class="p">]:</span>
<span class="n">target</span><span class="o">.</span><span class="n">virtual_protect</span><span class="p">(</span><span class="n">page_addr</span><span class="p">,</span> <span class="n">PAGE_SIZE</span><span class="p">,</span> <span class="n">protection</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
<span class="k">return</span>
<span class="n">target</span><span class="o">.</span><span class="n">virtual_protect</span><span class="p">(</span><span class="n">page_addr</span><span class="p">,</span> <span class="n">PAGE_SIZE</span><span class="p">,</span> <span class="n">protection</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">return</span></div>
<div class="viewcode-block" id="Debugger.DisabledMemoryBreakpoint"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.DisabledMemoryBreakpoint">[docs]</a> <span class="nd">@contextmanager</span>
<span class="k">def</span> <span class="nf">DisabledMemoryBreakpoint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
@@ -1003,8 +1017,8 @@
<span class="k">try</span><span class="p">:</span>
<span class="k">yield</span>
<span class="k">finally</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_killed_in_action</span><span class="p">():</span></div>
<span class="bp">self</span><span class="o">.</span><span class="n">restore_all_memory_breakpoints</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_killed_in_action</span><span class="p">():</span>
<span class="bp">self</span><span class="o">.</span><span class="n">restore_all_memory_breakpoints</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span></div>
<div class="viewcode-block" id="Debugger.get_exception_bitness"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.get_exception_bitness">[docs]</a> <span class="k">def</span> <span class="nf">get_exception_bitness</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return the bitness in which the exception occured.</span>
@@ -1014,10 +1028,28 @@
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span><span class="p">:</span>
<span class="k">return</span> <span class="mi">32</span>
<span class="k">if</span> <span class="n">exc</span><span class="o">.</span><span class="n">ExceptionRecord</span><span class="o">.</span><span class="n">ExceptionCode</span> <span class="ow">in</span> <span class="p">[</span><span class="n">STATUS_WX86_BREAKPOINT</span><span class="p">,</span> <span class="n">STATUS_WX86_SINGLE_STEP</span><span class="p">]:</span>
<span class="k">return</span> <span class="mi">32</span></div>
<span class="k">return</span> <span class="mi">64</span>
<span class="k">return</span> <span class="mi">32</span>
<span class="k">return</span> <span class="mi">64</span></div>
<span class="c1"># Public callback</span>
<div class="viewcode-block" id="Debugger.on_setup"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.on_setup">[docs]</a> <span class="k">def</span> <span class="nf">on_setup</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Called on the first breakpoint event occuring in the debugger.</span>
<span class="sd"> This callback allow to setup hook / interact with the debugee when ready:</span>
<span class="sd"> - If :func:`on_setup` is overriden by a subclass it will be called and :func:`on_exception` will NOT be called for this event (first BP).</span>
<span class="sd"> - If :func:`on_setup` is not defined the first BP will trigger an :func:`on_exception`.</span>
<span class="sd"> .. note::</span>
<span class="sd"> see sample :ref:`sample_debugger_on_setup`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="kc">None</span></div>
<span class="c1"># Help detect if on_setup was override</span>
<span class="n">on_setup</span><span class="o">.</span><span class="n">_abstract_on_setup_</span> <span class="o">=</span> <span class="kc">True</span>
<div class="viewcode-block" id="Debugger.on_exception"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.on_exception">[docs]</a> <span class="k">def</span> <span class="nf">on_exception</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exception</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Called on exception event other that known breakpoint or requested single step. ``exception`` is one of the following type:</span>
@@ -1029,8 +1061,8 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">&quot;Exception: </span><span class="si">{0}</span><span class="s2"> at &quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">exception</span><span class="o">.</span><span class="n">ExceptionRecord</span><span class="o">.</span><span class="n">ExceptionCode</span><span class="p">,</span> <span class="n">exception</span><span class="o">.</span><span class="n">ExceptionRecord</span><span class="o">.</span><span class="n">ExceptionAddress</span><span class="p">),</span> <span class="s2">&quot;DBG&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">exception</span><span class="o">.</span><span class="n">ExceptionRecord</span><span class="o">.</span><span class="n">ExceptionCode</span> <span class="ow">in</span> <span class="n">winexception</span><span class="o">.</span><span class="n">exception_name_by_value</span><span class="p">:</span>
<span class="k">return</span> <span class="n">DBG_EXCEPTION_NOT_HANDLED</span></div>
<span class="k">return</span> <span class="n">DBG_CONTINUE</span>
<span class="k">return</span> <span class="n">DBG_EXCEPTION_NOT_HANDLED</span>
<span class="k">return</span> <span class="n">DBG_CONTINUE</span></div>
<div class="viewcode-block" id="Debugger.on_single_step"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.on_single_step">[docs]</a> <span class="k">def</span> <span class="nf">on_single_step</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exception</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Called on requested single step ``exception`` is one of the following type:</span>
@@ -1039,56 +1071,56 @@
<span class="sd"> * :class:`windows.winobject.exception.EEXCEPTION_DEBUG_INFO64`</span>
<span class="sd"> There is no default implementation, if you use ``Debugger.single_step()`` you should implement ``on_single_step``</span>
<span class="sd"> &quot;&quot;&quot;</span></div>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Debugger that explicitly single step should implement &lt;on_single_step&gt;&quot;</span><span class="p">)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Debugger that explicitly single step should implement &lt;on_single_step&gt;&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="Debugger.on_create_process"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.on_create_process">[docs]</a> <span class="k">def</span> <span class="nf">on_create_process</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">create_process</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Called on create_process event</span>
<span class="sd"> :param CREATE_PROCESS_DEBUG_INFO create_process:&quot;&quot;&quot;</span></div>
<span class="k">pass</span>
<span class="sd"> :param CREATE_PROCESS_DEBUG_INFO create_process:&quot;&quot;&quot;</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="Debugger.on_exit_process"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.on_exit_process">[docs]</a> <span class="k">def</span> <span class="nf">on_exit_process</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exit_process</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Called on exit_process event</span>
<span class="sd"> :param EXIT_PROCESS_DEBUG_INFO exit_process:&quot;&quot;&quot;</span></div>
<span class="k">pass</span>
<span class="sd"> :param EXIT_PROCESS_DEBUG_INFO exit_process:&quot;&quot;&quot;</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="Debugger.on_create_thread"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.on_create_thread">[docs]</a> <span class="k">def</span> <span class="nf">on_create_thread</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">create_thread</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Called on create_thread event</span>
<span class="sd"> :param CREATE_THREAD_DEBUG_INFO create_thread:&quot;&quot;&quot;</span></div>
<span class="k">pass</span>
<span class="sd"> :param CREATE_THREAD_DEBUG_INFO create_thread:&quot;&quot;&quot;</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="Debugger.on_exit_thread"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.on_exit_thread">[docs]</a> <span class="k">def</span> <span class="nf">on_exit_thread</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exit_thread</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Called on exit_thread event</span>
<span class="sd"> :param EXIT_THREAD_DEBUG_INFO exit_thread:&quot;&quot;&quot;</span></div>
<span class="k">pass</span>
<span class="sd"> :param EXIT_THREAD_DEBUG_INFO exit_thread:&quot;&quot;&quot;</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="Debugger.on_load_dll"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.on_load_dll">[docs]</a> <span class="k">def</span> <span class="nf">on_load_dll</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">load_dll</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Called on load_dll event</span>
<span class="sd"> :param LOAD_DLL_DEBUG_INFO load_dll:&quot;&quot;&quot;</span></div>
<span class="k">pass</span>
<span class="sd"> :param LOAD_DLL_DEBUG_INFO load_dll:&quot;&quot;&quot;</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="Debugger.on_unload_dll"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.on_unload_dll">[docs]</a> <span class="k">def</span> <span class="nf">on_unload_dll</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unload_dll</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Called on unload_dll event</span>
<span class="sd"> :param UNLOAD_DLL_DEBUG_INFO unload_dll:&quot;&quot;&quot;</span></div>
<span class="k">pass</span>
<span class="sd"> :param UNLOAD_DLL_DEBUG_INFO unload_dll:&quot;&quot;&quot;</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="Debugger.on_output_debug_string"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.on_output_debug_string">[docs]</a> <span class="k">def</span> <span class="nf">on_output_debug_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">debug_string</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Called on debug_string event</span>
<span class="sd"> :param OUTPUT_DEBUG_STRING_INFO debug_string:&quot;&quot;&quot;</span></div>
<span class="k">pass</span>
<span class="sd"> :param OUTPUT_DEBUG_STRING_INFO debug_string:&quot;&quot;&quot;</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="Debugger.on_rip"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.on_rip">[docs]</a> <span class="k">def</span> <span class="nf">on_rip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rip_info</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Called on rip_info event</span>
<span class="sd"> :param RIP_INFO rip_info:&quot;&quot;&quot;</span></div></div>
<span class="k">pass</span>
<span class="sd"> :param RIP_INFO rip_info:&quot;&quot;&quot;</span>
<span class="k">pass</span></div></div>
</pre></div>
</div>
@@ -1121,13 +1153,13 @@
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.1.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
</div>
</body>
</html>
+48 -28
View File
@@ -6,11 +6,11 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.debug.localdbg &#8212; PythonForWindows 0.4 documentation</title>
<title>windows.debug.localdbg &#8212; PythonForWindows 0.5 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<script type="text/javascript" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
@@ -26,7 +26,7 @@
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -48,6 +48,23 @@
<span class="kn">from</span> <span class="nn">windows.generated_def.winstructs</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">.breakpoints</span> <span class="k">import</span> <span class="o">*</span>
<span class="k">class</span> <span class="nc">FakeDebuggerCurrentThread</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A pseudo thread representing the current thread at exception time&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dbg</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dbg</span> <span class="o">=</span> <span class="n">dbg</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">tid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">tid</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">context</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;!!! This context in-place modification will be effective without set_context&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbg</span><span class="o">.</span><span class="n">get_exception_context</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">set_context</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
<span class="c1"># The context returned by &#39;self.context&#39; already modify the return context in place..</span>
<span class="k">pass</span>
<div class="viewcode-block" id="LocalDebugger"><a class="viewcode-back" href="../../../debug.html#windows.debug.LocalDebugger">[docs]</a><span class="k">class</span> <span class="nc">LocalDebugger</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A debugger interface around :func:`AddVectoredExceptionHandler`.</span>
@@ -55,7 +72,8 @@
<span class="sd"> Handle:</span>
<span class="sd"> * Standard BP (int3)</span>
<span class="sd"> * Hardware-Exec BP (DrX)&quot;&quot;&quot;</span>
<span class="sd"> * Hardware-Exec BP (DrX)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">breakpoints</span> <span class="o">=</span> <span class="p">{}</span>
@@ -72,6 +90,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">current_exception</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">exceptions_stack</span> <span class="o">=</span> <span class="p">[</span><span class="kc">None</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current_process</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span> <span class="o">=</span> <span class="n">FakeDebuggerCurrentThread</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="nd">@contextmanager</span>
<span class="k">def</span> <span class="nf">NewCurrentException</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc</span><span class="p">):</span>
@@ -86,17 +105,17 @@
<span class="bp">self</span><span class="o">.</span><span class="n">veh_depth</span> <span class="o">-=</span> <span class="mi">1</span>
<div class="viewcode-block" id="LocalDebugger.get_exception_code"><a class="viewcode-back" href="../../../debug.html#windows.debug.LocalDebugger.get_exception_code">[docs]</a> <span class="k">def</span> <span class="nf">get_exception_code</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return ExceptionCode of current exception&quot;&quot;&quot;</span></div>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_exception</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">ExceptionRecord</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">ExceptionCode</span>
<span class="sd">&quot;&quot;&quot;Return ExceptionCode of current exception&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_exception</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">ExceptionRecord</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">ExceptionCode</span></div>
<div class="viewcode-block" id="LocalDebugger.get_exception_context"><a class="viewcode-back" href="../../../debug.html#windows.debug.LocalDebugger.get_exception_context">[docs]</a> <span class="k">def</span> <span class="nf">get_exception_context</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return context of current exception&quot;&quot;&quot;</span></div>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_exception</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">ContextRecord</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="sd">&quot;&quot;&quot;Return context of current exception&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_exception</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">ContextRecord</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span></div>
<div class="viewcode-block" id="LocalDebugger.single_step"><a class="viewcode-back" href="../../../debug.html#windows.debug.LocalDebugger.single_step">[docs]</a> <span class="k">def</span> <span class="nf">single_step</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Make the current thread to single step&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">get_exception_context</span><span class="p">()</span><span class="o">.</span><span class="n">EEFlags</span><span class="o">.</span><span class="n">TF</span> <span class="o">=</span> <span class="mi">1</span></div>
<span class="k">return</span> <span class="n">windef</span><span class="o">.</span><span class="n">EXCEPTION_CONTINUE_EXECUTION</span>
<span class="bp">self</span><span class="o">.</span><span class="n">get_exception_context</span><span class="p">()</span><span class="o">.</span><span class="n">EEFlags</span><span class="o">.</span><span class="n">TF</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">windef</span><span class="o">.</span><span class="n">EXCEPTION_CONTINUE_EXECUTION</span></div>
<span class="k">def</span> <span class="nf">_pass_breakpoint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">single_step</span><span class="p">):</span>
<span class="k">with</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">VirtualProtected</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">PAGE_EXECUTE_READWRITE</span><span class="p">):</span>
@@ -137,7 +156,6 @@
<span class="n">exp_code</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_exception_code</span><span class="p">()</span>
<span class="n">context</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_exception_context</span><span class="p">()</span>
<span class="n">exp_addr</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="n">pc</span>
<span class="k">if</span> <span class="n">exp_code</span> <span class="o">==</span> <span class="n">EXCEPTION_BREAKPOINT</span> <span class="ow">and</span> <span class="n">exp_addr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">breakpoints</span><span class="p">:</span>
<span class="n">res</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">breakpoints</span><span class="p">[</span><span class="n">exp_addr</span><span class="p">]</span><span class="o">.</span><span class="n">trigger</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc</span><span class="p">)</span>
<span class="n">single_step</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_exception_context</span><span class="p">()</span><span class="o">.</span><span class="n">EEFlags</span><span class="o">.</span><span class="n">TF</span> <span class="c1"># single step activated by breakpoint</span>
@@ -147,9 +165,9 @@
<span class="k">if</span> <span class="n">exp_code</span> <span class="o">==</span> <span class="n">EXCEPTION_SINGLE_STEP</span> <span class="ow">and</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">tid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reput_breakpoint</span><span class="p">:</span>
<span class="n">bp</span><span class="p">,</span> <span class="n">single_step</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reput_breakpoint</span><span class="p">[</span><span class="n">windows</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">tid</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_memory_save</span><span class="p">[</span><span class="n">bp</span><span class="o">.</span><span class="n">addr</span><span class="p">]</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">read_memory</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">addr</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">with</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">VirtualProtected</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">addr</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">PAGE_EXECUTE_READWRITE</span><span class="p">):</span>
<span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">write_memory</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">addr</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\xcc</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_memory_save</span><span class="p">[</span><span class="n">bp</span><span class="o">.</span><span class="n">_addr</span><span class="p">]</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">read_memory</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">_addr</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">with</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">VirtualProtected</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">_addr</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">PAGE_EXECUTE_READWRITE</span><span class="p">):</span>
<span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">write_memory</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">_addr</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\xcc</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reput_breakpoint</span><span class="p">[</span><span class="n">windows</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">tid</span><span class="p">]</span>
<span class="k">if</span> <span class="n">single_step</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_exception</span><span class="p">(</span><span class="n">exc</span><span class="p">)</span>
@@ -163,11 +181,12 @@
<div class="viewcode-block" id="LocalDebugger.on_exception"><a class="viewcode-back" href="../../../debug.html#windows.debug.LocalDebugger.on_exception">[docs]</a> <span class="k">def</span> <span class="nf">on_exception</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Called on exception&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_exception_code</span><span class="p">()</span> <span class="ow">in</span> <span class="n">winexception</span><span class="o">.</span><span class="n">exception_name_by_value</span><span class="p">:</span>
<span class="k">return</span> <span class="n">windef</span><span class="o">.</span><span class="n">EXCEPTION_CONTINUE_SEARCH</span></div>
<span class="k">return</span> <span class="n">windef</span><span class="o">.</span><span class="n">EXCEPTION_CONTINUE_EXECUTION</span>
<span class="k">return</span> <span class="n">windef</span><span class="o">.</span><span class="n">EXCEPTION_CONTINUE_SEARCH</span>
<span class="k">return</span> <span class="n">windef</span><span class="o">.</span><span class="n">EXCEPTION_CONTINUE_EXECUTION</span></div>
<div class="viewcode-block" id="LocalDebugger.del_bp"><a class="viewcode-back" href="../../../debug.html#windows.debug.LocalDebugger.del_bp">[docs]</a> <span class="k">def</span> <span class="nf">del_bp</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bp</span><span class="p">):</span>
<div class="viewcode-block" id="LocalDebugger.del_bp"><a class="viewcode-back" href="../../../debug.html#windows.debug.LocalDebugger.del_bp">[docs]</a> <span class="k">def</span> <span class="nf">del_bp</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bp</span><span class="p">,</span> <span class="n">targets</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Delete a breakpoint&quot;&quot;&quot;</span>
<span class="c1"># TODO: check targets..</span>
<span class="k">if</span> <span class="n">bp</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">STANDARD_BP</span><span class="p">:</span>
<span class="k">with</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">VirtualProtected</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">addr</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">PAGE_EXECUTE_READWRITE</span><span class="p">):</span>
<span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">write_memory</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">addr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_memory_save</span><span class="p">[</span><span class="n">bp</span><span class="o">.</span><span class="n">addr</span><span class="p">])</span>
@@ -183,10 +202,10 @@
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">remove_hxbp_other_thread</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">addr</span><span class="p">,</span> <span class="n">threads_by_tid</span><span class="p">[</span><span class="n">tid</span><span class="p">])</span>
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hxbp_breakpoint</span><span class="p">[</span><span class="n">tid</span><span class="p">][</span><span class="n">bp</span><span class="o">.</span><span class="n">addr</span><span class="p">]</span>
<span class="k">return</span></div>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Unknow BP type </span><span class="si">{0}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">type</span><span class="p">))</span>
<span class="k">return</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Unknow BP type </span><span class="si">{0}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">type</span><span class="p">))</span></div>
<div class="viewcode-block" id="LocalDebugger.add_bp"><a class="viewcode-back" href="../../../debug.html#windows.debug.LocalDebugger.add_bp">[docs]</a> <span class="k">def</span> <span class="nf">add_bp</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bp</span><span class="p">,</span> <span class="n">targets</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<div class="viewcode-block" id="LocalDebugger.add_bp"><a class="viewcode-back" href="../../../debug.html#windows.debug.LocalDebugger.add_bp">[docs]</a> <span class="k">def</span> <span class="nf">add_bp</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bp</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Add a breakpoint, bp is a &quot;class:`Breakpoint`</span>
<span class="sd"> If the ``bp`` type is ``STANDARD_BP``, target must be None.</span>
@@ -194,17 +213,18 @@
<span class="sd"> If the ``bp`` type is ``HARDWARE_EXEC_BP``, target can be None (all threads), or some threads of the process</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">bp</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">HARDWARE_EXEC_BP</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_bp_hxbp</span><span class="p">(</span><span class="n">bp</span><span class="p">,</span> <span class="n">targets</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_bp_hxbp</span><span class="p">(</span><span class="n">bp</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span>
<span class="k">if</span> <span class="n">bp</span><span class="o">.</span><span class="n">type</span> <span class="o">!=</span> <span class="n">STANDARD_BP</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Unknow BP type </span><span class="si">{0}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">type</span><span class="p">))</span>
<span class="k">if</span> <span class="n">targets</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="n">target</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="kc">None</span><span class="p">,</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="p">]:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;LocalDebugger: STANDARD_BP doest not support targets </span><span class="si">{0}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">targets</span><span class="p">))</span>
<span class="n">addr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_local_resolve</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">addr</span><span class="p">)</span>
<span class="n">bp</span><span class="o">.</span><span class="n">_addr</span> <span class="o">=</span> <span class="n">addr</span>
<span class="bp">self</span><span class="o">.</span><span class="n">breakpoints</span><span class="p">[</span><span class="n">addr</span><span class="p">]</span> <span class="o">=</span> <span class="n">bp</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_memory_save</span><span class="p">[</span><span class="n">addr</span><span class="p">]</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">read_memory</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">with</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">VirtualProtected</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">PAGE_EXECUTE_READWRITE</span><span class="p">):</span>
<span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">write_memory</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\xcc</span><span class="s2">&quot;</span><span class="p">)</span></div>
<span class="k">return</span>
<span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">write_memory</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\xcc</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">return</span></div>
<span class="k">def</span> <span class="nf">add_bp_hxbp</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bp</span><span class="p">,</span> <span class="n">targets</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">bp</span><span class="o">.</span><span class="n">type</span> <span class="o">!=</span> <span class="n">HARDWARE_EXEC_BP</span><span class="p">:</span>
@@ -318,8 +338,8 @@
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">remove_hxbp_in_context</span><span class="p">(</span><span class="n">ctx</span><span class="p">,</span> <span class="n">addr</span><span class="p">)</span>
<span class="k">if</span> <span class="n">x</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Could not setup HXBP in </span><span class="si">{0}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">thread</span><span class="p">))</span>
<span class="n">thread</span><span class="o">.</span><span class="n">set_context</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span></div>
<span class="n">thread</span><span class="o">.</span><span class="n">resume</span><span class="p">()</span>
<span class="n">thread</span><span class="o">.</span><span class="n">set_context</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span>
<span class="n">thread</span><span class="o">.</span><span class="n">resume</span><span class="p">()</span></div>
</pre></div>
</div>
@@ -352,13 +372,13 @@
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.1.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
</div>
</body>
</html>
+27 -8
View File
@@ -6,11 +6,11 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.generated_def.flag &#8212; PythonForWindows 0.4 documentation</title>
<title>windows.generated_def.flag &#8212; PythonForWindows 0.5 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<script type="text/javascript" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
@@ -26,7 +26,7 @@
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -42,6 +42,7 @@
<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="o">.</span><span class="n">major</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span>
<span class="n">long</span> <span class="o">=</span> <span class="nb">int</span>
<div class="viewcode-block" id="Flag"><a class="viewcode-back" href="../../../generated.html#windows.generated_def.Flag">[docs]</a><span class="k">class</span> <span class="nc">Flag</span><span class="p">(</span><span class="n">long</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Flag</span><span class="p">,</span> <span class="bp">cls</span><span class="p">)</span><span class="o">.</span><span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
@@ -50,13 +51,14 @@
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="si">{0}</span><span class="s2">(</span><span class="si">{1}</span><span class="s2">)&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="nb">hex</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="si">{0}</span><span class="s2">(</span><span class="si">{1:#x}</span><span class="s2">)&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
<span class="fm">__str__</span> <span class="o">=</span> <span class="fm">__repr__</span>
<span class="c1"># Fix pickling with protocol 2</span>
<span class="k">def</span> <span class="nf">__getnewargs__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span></div>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">long</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__getnewargs__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">long</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
<span class="k">class</span> <span class="nc">StrFlag</span><span class="p">(</span><span class="nb">str</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
@@ -76,17 +78,34 @@
<span class="k">def</span> <span class="nf">__getnewargs__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="nb">str</span><span class="o">.</span><span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">make_flag</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">long</span><span class="p">)):</span>
<span class="k">return</span> <span class="n">Flag</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">StrFlag</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">FlagMapper</span><span class="p">(</span><span class="nb">dict</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">values</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="n">x</span><span class="p">:</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">values</span><span class="p">})</span>
<span class="k">def</span> <span class="nf">__missing__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
<span class="k">return</span> <span class="n">key</span>
<span class="k">class</span> <span class="nc">FlagExatractor</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">values</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">attr</span> <span class="o">=</span> <span class="n">attr</span>
<span class="bp">self</span><span class="o">.</span><span class="n">attrsize</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">size</span> <span class="o">*</span> <span class="mi">8</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mapper</span> <span class="o">=</span> <span class="n">FlagMapper</span><span class="p">(</span><span class="o">*</span><span class="n">values</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__get__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="nb">type</span><span class="p">):</span>
<span class="k">if</span> <span class="n">obj</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span>
<span class="c1"># Retrieve the real value</span>
<span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">attr</span><span class="o">.</span><span class="fm">__get__</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">generator</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">attrsize</span><span class="p">))</span>
<span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">mapper</span><span class="p">[</span><span class="n">f</span><span class="p">]</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">generator</span> <span class="k">if</span> <span class="n">value</span> <span class="o">&amp;</span> <span class="n">f</span><span class="p">]</span>
</pre></div>
</div>
@@ -119,13 +138,13 @@
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.1.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
</div>
</body>
</html>
File diff suppressed because one or more lines are too long
+13 -15
View File
@@ -6,11 +6,11 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.hooks &#8212; PythonForWindows 0.4 documentation</title>
<title>windows.hooks &#8212; PythonForWindows 0.5 documentation</title>
<link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/mbasic.css" type="text/css" />
<script type="text/javascript" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
@@ -26,7 +26,7 @@
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -58,8 +58,8 @@
<span class="bp">self</span><span class="o">.</span><span class="n">types</span> <span class="o">=</span> <span class="n">types</span>
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="n">func</span><span class="o">.</span><span class="n">_types_info</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span></div>
<span class="k">return</span> <span class="n">func</span>
<span class="n">func</span><span class="o">.</span><span class="n">_types_info</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span>
<span class="k">return</span> <span class="n">func</span></div>
<span class="k">class</span> <span class="nc">KnownCallback</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
@@ -110,8 +110,6 @@
<span class="nb">print</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">stub_addr</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">realfunction</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">WINFUNCTYPE</span><span class="p">(</span><span class="o">*</span><span class="n">types</span><span class="p">)(</span><span class="n">IAT_entry</span><span class="o">.</span><span class="n">nonhookvalue</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">is_enable</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1"># import pdb;pdb.set_trace()</span>
<span class="c1">#IATHook.yolo.append(self)</span>
<span class="k">def</span> <span class="nf">transform_arguments</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">types</span><span class="p">):</span>
<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
@@ -127,15 +125,15 @@
<span class="k">with</span> <span class="n">utils</span><span class="o">.</span><span class="n">VirtualProtected</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">entry</span><span class="o">.</span><span class="n">addr</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">PVOID</span><span class="p">),</span> <span class="n">PAGE_EXECUTE_READWRITE</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">stub_addr</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">entry</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">stub_addr</span>
<span class="bp">self</span><span class="o">.</span><span class="n">is_enable</span> <span class="o">=</span> <span class="kc">True</span></div>
<span class="bp">self</span><span class="o">.</span><span class="n">entry</span><span class="o">.</span><span class="n">enabled</span> <span class="o">=</span> <span class="kc">True</span>
<span class="bp">self</span><span class="o">.</span><span class="n">is_enable</span> <span class="o">=</span> <span class="kc">True</span>
<span class="bp">self</span><span class="o">.</span><span class="n">entry</span><span class="o">.</span><span class="n">enabled</span> <span class="o">=</span> <span class="kc">True</span></div>
<div class="viewcode-block" id="IATHook.disable"><a class="viewcode-back" href="../../iat_hook.html#windows.hooks.IATHook.disable">[docs]</a> <span class="k">def</span> <span class="nf">disable</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Disable the IAT hook&quot;&quot;&quot;</span>
<span class="k">with</span> <span class="n">utils</span><span class="o">.</span><span class="n">VirtualProtected</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">entry</span><span class="o">.</span><span class="n">addr</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">PVOID</span><span class="p">),</span> <span class="n">PAGE_EXECUTE_READWRITE</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">entry</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">entry</span><span class="o">.</span><span class="n">nonhookvalue</span>
<span class="bp">self</span><span class="o">.</span><span class="n">is_enable</span> <span class="o">=</span> <span class="kc">False</span></div>
<span class="bp">self</span><span class="o">.</span><span class="n">entry</span><span class="o">.</span><span class="n">enabled</span> <span class="o">=</span> <span class="kc">True</span>
<span class="bp">self</span><span class="o">.</span><span class="n">is_enable</span> <span class="o">=</span> <span class="kc">False</span>
<span class="bp">self</span><span class="o">.</span><span class="n">entry</span><span class="o">.</span><span class="n">enabled</span> <span class="o">=</span> <span class="kc">True</span></div>
<span class="k">def</span> <span class="nf">hook_callback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
<span class="n">adapted_args</span> <span class="o">=</span> <span class="p">[]</span>
@@ -150,8 +148,8 @@
<span class="k">def</span> <span class="nf">real_function</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">):</span>
<span class="k">if</span> <span class="n">args</span> <span class="o">==</span> <span class="p">():</span>
<span class="n">args</span> <span class="o">=</span> <span class="n">adapted_args</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">realfunction</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span></div>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">callback</span><span class="p">(</span><span class="o">*</span><span class="n">adapted_args</span><span class="p">,</span> <span class="n">real_function</span><span class="o">=</span><span class="n">real_function</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">realfunction</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">callback</span><span class="p">(</span><span class="o">*</span><span class="n">adapted_args</span><span class="p">,</span> <span class="n">real_function</span><span class="o">=</span><span class="n">real_function</span><span class="p">)</span></div>
<span class="c1"># Use this tricks to prevent garbage collection of hook ?</span>
<span class="c1"># That&#39;s dirty..</span>
@@ -210,13 +208,13 @@
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.1.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
</div>
</body>
</html>
+27 -27
View File
@@ -6,11 +6,11 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.native_exec.cpuid &#8212; PythonForWindows 0.4 documentation</title>
<title>windows.native_exec.cpuid &#8212; PythonForWindows 0.5 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<script type="text/javascript" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
@@ -26,7 +26,7 @@
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -59,14 +59,14 @@
<span class="p">(</span><span class="s2">&quot;EBX&quot;</span><span class="p">,</span> <span class="n">DWORD</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;ECX&quot;</span><span class="p">,</span> <span class="n">DWORD</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;EDX&quot;</span><span class="p">,</span> <span class="n">DWORD</span><span class="p">)]</span>
<span class="n">fields</span> <span class="o">=</span> <span class="p">[</span><span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">_fields_</span><span class="p">]</span></div>
<span class="sd">&quot;&quot;&quot;Fields of the Structure&quot;&quot;&quot;</span>
<span class="n">fields</span> <span class="o">=</span> <span class="p">[</span><span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">_fields_</span><span class="p">]</span>
<span class="sd">&quot;&quot;&quot;Fields of the Structure&quot;&quot;&quot;</span></div>
<div class="viewcode-block" id="X64CpuidResult"><a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.cpuid.X64CpuidResult">[docs]</a><span class="k">class</span> <span class="nc">X64CpuidResult</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">Structure</span><span class="p">):</span>
<span class="n">_fields_</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;RAX&quot;</span><span class="p">,</span> <span class="n">ULONG64</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;RBX&quot;</span><span class="p">,</span> <span class="n">ULONG64</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;RCX&quot;</span><span class="p">,</span> <span class="n">ULONG64</span><span class="p">),</span></div>
<span class="p">(</span><span class="s2">&quot;RDX&quot;</span><span class="p">,</span> <span class="n">ULONG64</span><span class="p">)]</span>
<span class="p">(</span><span class="s2">&quot;RCX&quot;</span><span class="p">,</span> <span class="n">ULONG64</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;RDX&quot;</span><span class="p">,</span> <span class="n">ULONG64</span><span class="p">)]</span></div>
<div class="viewcode-block" id="X86IntelCpuidFamilly"><a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.cpuid.X86IntelCpuidFamilly">[docs]</a><span class="k">class</span> <span class="nc">X86IntelCpuidFamilly</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">Structure</span><span class="p">):</span>
@@ -78,8 +78,8 @@
<span class="p">(</span><span class="s2">&quot;ExtendedModel&quot;</span><span class="p">,</span> <span class="n">DWORD</span><span class="p">,</span> <span class="mi">4</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;ExtendedFamily&quot;</span><span class="p">,</span> <span class="n">DWORD</span><span class="p">,</span> <span class="mi">8</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;Reserved&quot;</span><span class="p">,</span> <span class="n">DWORD</span><span class="p">,</span> <span class="mi">2</span><span class="p">)]</span>
<span class="n">fields</span> <span class="o">=</span> <span class="p">[</span><span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">_fields_</span><span class="p">]</span></div>
<span class="sd">&quot;&quot;&quot;Fields of the Structure&quot;&quot;&quot;</span>
<span class="n">fields</span> <span class="o">=</span> <span class="p">[</span><span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">_fields_</span><span class="p">]</span>
<span class="sd">&quot;&quot;&quot;Fields of the Structure&quot;&quot;&quot;</span></div>
<div class="viewcode-block" id="X86AmdCpuidFamilly"><a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.cpuid.X86AmdCpuidFamilly">[docs]</a><span class="k">class</span> <span class="nc">X86AmdCpuidFamilly</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">Structure</span><span class="p">):</span>
@@ -90,8 +90,8 @@
<span class="p">(</span><span class="s2">&quot;ExtendedModel&quot;</span><span class="p">,</span> <span class="n">DWORD</span><span class="p">,</span> <span class="mi">4</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;ExtendedFamily&quot;</span><span class="p">,</span> <span class="n">DWORD</span><span class="p">,</span> <span class="mi">8</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;Reserved&quot;</span><span class="p">,</span> <span class="n">DWORD</span><span class="p">,</span> <span class="mi">2</span><span class="p">)]</span>
<span class="n">fields</span> <span class="o">=</span> <span class="p">[</span><span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">_fields_</span><span class="p">]</span></div>
<span class="sd">&quot;&quot;&quot;Fields of the Structure&quot;&quot;&quot;</span>
<span class="n">fields</span> <span class="o">=</span> <span class="p">[</span><span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">_fields_</span><span class="p">]</span>
<span class="sd">&quot;&quot;&quot;Fields of the Structure&quot;&quot;&quot;</span></div>
<span class="n">cpuid32_code</span> <span class="o">=</span> <span class="n">x86</span><span class="o">.</span><span class="n">MultipleInstr</span><span class="p">()</span>
<span class="n">cpuid32_code</span> <span class="o">+=</span> <span class="n">x86</span><span class="o">.</span><span class="n">Push</span><span class="p">(</span><span class="s1">&#39;EDI&#39;</span><span class="p">)</span>
@@ -126,8 +126,8 @@
<span class="sd"> :rtype: :class:`X86CpuidResult`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">cpuid_res</span> <span class="o">=</span> <span class="n">X86CpuidResult</span><span class="p">()</span>
<span class="n">do_cpuid32</span><span class="p">(</span><span class="n">req</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">cpuid_res</span><span class="p">))</span></div>
<span class="k">return</span> <span class="n">cpuid_res</span>
<span class="n">do_cpuid32</span><span class="p">(</span><span class="n">req</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">cpuid_res</span><span class="p">))</span>
<span class="k">return</span> <span class="n">cpuid_res</span></div>
<div class="viewcode-block" id="x64_cpuid"><a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.cpuid.x64_cpuid">[docs]</a><span class="k">def</span> <span class="nf">x64_cpuid</span><span class="p">(</span><span class="n">req</span><span class="p">):</span>
@@ -137,8 +137,8 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">cpuid_res</span> <span class="o">=</span> <span class="n">X64CpuidResult</span><span class="p">()</span>
<span class="n">do_cpuid64</span><span class="p">(</span><span class="n">req</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">cpuid_res</span><span class="p">))</span>
<span class="c1"># For now assembler cannot do 32bits register in x64</span></div>
<span class="k">return</span> <span class="n">X86CpuidResult</span><span class="p">(</span><span class="n">cpuid_res</span><span class="o">.</span><span class="n">RAX</span><span class="p">,</span> <span class="n">cpuid_res</span><span class="o">.</span><span class="n">RBX</span><span class="p">,</span> <span class="n">cpuid_res</span><span class="o">.</span><span class="n">RCX</span><span class="p">,</span> <span class="n">cpuid_res</span><span class="o">.</span><span class="n">RDX</span><span class="p">)</span>
<span class="c1"># For now assembler cannot do 32bits register in x64</span>
<span class="k">return</span> <span class="n">X86CpuidResult</span><span class="p">(</span><span class="n">cpuid_res</span><span class="o">.</span><span class="n">RAX</span><span class="p">,</span> <span class="n">cpuid_res</span><span class="o">.</span><span class="n">RBX</span><span class="p">,</span> <span class="n">cpuid_res</span><span class="o">.</span><span class="n">RCX</span><span class="p">,</span> <span class="n">cpuid_res</span><span class="o">.</span><span class="n">RDX</span><span class="p">)</span></div>
<span class="k">if</span> <span class="n">_bitness</span><span class="p">()</span> <span class="o">==</span> <span class="mi">32</span><span class="p">:</span>
@@ -150,8 +150,8 @@
<span class="sd">&quot;&quot;&quot;Performs a CPUID for the current process bitness</span>
<span class="sd"> :rtype: :class:`X86CpuidResult`</span>
<span class="sd"> &quot;&quot;&quot;</span></div>
<span class="k">return</span> <span class="n">_do_cpuid</span><span class="p">(</span><span class="n">req</span><span class="p">)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">_do_cpuid</span><span class="p">(</span><span class="n">req</span><span class="p">)</span></div>
<div class="viewcode-block" id="get_vendor_id"><a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.cpuid.get_vendor_id">[docs]</a><span class="k">def</span> <span class="nf">get_vendor_id</span><span class="p">():</span>
@@ -159,19 +159,19 @@
<span class="sd"> :rtype: :class:`str`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">cpuid_res</span> <span class="o">=</span> <span class="n">do_cpuid</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span></div>
<span class="k">return</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">&quot;&lt;III&quot;</span><span class="p">,</span> <span class="n">cpuid_res</span><span class="o">.</span><span class="n">EBX</span><span class="p">,</span> <span class="n">cpuid_res</span><span class="o">.</span><span class="n">EDX</span><span class="p">,</span> <span class="n">cpuid_res</span><span class="o">.</span><span class="n">ECX</span><span class="p">)</span>
<span class="n">cpuid_res</span> <span class="o">=</span> <span class="n">do_cpuid</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="k">return</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">&quot;&lt;III&quot;</span><span class="p">,</span> <span class="n">cpuid_res</span><span class="o">.</span><span class="n">EBX</span><span class="p">,</span> <span class="n">cpuid_res</span><span class="o">.</span><span class="n">EDX</span><span class="p">,</span> <span class="n">cpuid_res</span><span class="o">.</span><span class="n">ECX</span><span class="p">)</span></div>
<span class="c1"># platform.processor() could do the trick</span>
<div class="viewcode-block" id="is_intel_proc"><a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.cpuid.is_intel_proc">[docs]</a><span class="k">def</span> <span class="nf">is_intel_proc</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;get_vendor_id() == &#39;GenuineIntel&#39;&quot;&quot;&quot;</span></div>
<span class="k">return</span> <span class="n">get_vendor_id</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;GenuineIntel&quot;</span>
<span class="sd">&quot;&quot;&quot;get_vendor_id() == &#39;GenuineIntel&#39;&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">get_vendor_id</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;GenuineIntel&quot;</span></div>
<div class="viewcode-block" id="is_amd_proc"><a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.cpuid.is_amd_proc">[docs]</a><span class="k">def</span> <span class="nf">is_amd_proc</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;get_vendor_id() == &#39;AuthenticAMD&#39;&quot;&quot;&quot;</span></div>
<span class="k">return</span> <span class="n">get_vendor_id</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;AuthenticAMD&quot;</span>
<span class="sd">&quot;&quot;&quot;get_vendor_id() == &#39;AuthenticAMD&#39;&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">get_vendor_id</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;AuthenticAMD&quot;</span></div>
<div class="viewcode-block" id="get_proc_family_model"><a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.cpuid.get_proc_family_model">[docs]</a><span class="k">def</span> <span class="nf">get_proc_family_model</span><span class="p">():</span>
@@ -194,8 +194,8 @@
<span class="k">if</span> <span class="n">infos</span><span class="o">.</span><span class="n">FamilyID</span> <span class="o">==</span> <span class="mh">0x0F</span><span class="p">:</span>
<span class="n">ComputedFamily</span> <span class="o">=</span> <span class="n">infos</span><span class="o">.</span><span class="n">FamilyID</span> <span class="o">+</span> <span class="n">infos</span><span class="o">.</span><span class="n">ExtendedFamily</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">ComputedFamily</span> <span class="o">=</span> <span class="n">infos</span><span class="o">.</span><span class="n">FamilyID</span></div>
<span class="k">return</span> <span class="n">ComputedFamily</span><span class="p">,</span> <span class="n">ComputedModel</span>
<span class="n">ComputedFamily</span> <span class="o">=</span> <span class="n">infos</span><span class="o">.</span><span class="n">FamilyID</span>
<span class="k">return</span> <span class="n">ComputedFamily</span><span class="p">,</span> <span class="n">ComputedModel</span></div>
</pre></div>
</div>
@@ -228,13 +228,13 @@
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.4 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.1.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
</div>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More