mirror of
https://github.com/hakril/PythonForWindows
synced 2026-06-08 14:31:45 +00:00
Compare commits
160 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7475c8893e | |||
| ddb22444d2 | |||
| 1ab7d3cad6 | |||
| 50b0493364 | |||
| e3fd66b3d6 | |||
| 703c7f2ec2 | |||
| b8dd03a1ef | |||
| 6f00e753dd | |||
| 9c1c24bfda | |||
| d7d936d695 | |||
| 95c3f81619 | |||
| 8472fd12a7 | |||
| 59b3531d15 | |||
| bc13f7a497 | |||
| b1f0d74a3a | |||
| 92742a4e97 | |||
| 9770165487 | |||
| bcb6327f60 | |||
| 40f9420078 | |||
| 36b4bf38fc | |||
| 8f828a6018 | |||
| b003d9ee32 | |||
| 13dc869af6 | |||
| 4b5b924224 | |||
| 2c518a77f9 | |||
| d61067fe5e | |||
| bb4271d97b | |||
| d756cb1027 | |||
| 5ae315b317 | |||
| 6f55a4736e | |||
| cab8be5311 | |||
| d1e13fda8a | |||
| 4bcec38cc1 | |||
| 3ad9bad56e | |||
| a8414c975d | |||
| 87e1c998a6 | |||
| 736a72255b | |||
| 247140123c | |||
| 75dfe847ec | |||
| a580d825ae | |||
| 1b5097050b | |||
| 210bc648ec | |||
| 412c725fba | |||
| 6586018059 | |||
| 7a7e6935d1 | |||
| a580153da9 | |||
| 72a7f52ae2 | |||
| 4120c6e7e3 | |||
| ae5bf70b49 | |||
| 44ac6356e1 | |||
| 9ce6fcef9c | |||
| 0a2ed77302 | |||
| 33766c2ffd | |||
| 5217506705 | |||
| 99fbec8ec4 | |||
| e313510fe5 | |||
| 9eb4405cce | |||
| 7883e5f189 | |||
| 93540ddbe5 | |||
| 6bf8f77617 | |||
| ee409e4c72 | |||
| f957c640c7 | |||
| 328735bd3a | |||
| feafb52c2a | |||
| 275d054ba7 | |||
| 36db869572 | |||
| 74f5d43159 | |||
| dade97ff16 | |||
| 2db6037658 | |||
| b68369936a | |||
| 85a41fbca0 | |||
| dab2a57d75 | |||
| d3d6410276 | |||
| 9a0868da15 | |||
| 117ea557f7 | |||
| f92204a16f | |||
| d8b2770046 | |||
| e3bcde7d63 | |||
| 494317ee99 | |||
| 46daca9539 | |||
| 82d0c5cc5c | |||
| 0eb78f21bd | |||
| 0f501ab46d | |||
| f2ac6ea455 | |||
| 2828f496bd | |||
| f295a081b1 | |||
| 681fba942f | |||
| f4f9798d39 | |||
| 09fa7c49ec | |||
| c1aad71dd3 | |||
| 5d9e9a240f | |||
| 267ed1e85d | |||
| d7d2dacf33 | |||
| 3d7266ad50 | |||
| 63dd0130f1 | |||
| b8788058e5 | |||
| fdef64c57f | |||
| e156b05e0f | |||
| a7d547f994 | |||
| 5fa4ca6aae | |||
| ad59298015 | |||
| 59e2cefee0 | |||
| d23a9813e9 | |||
| 447069df32 | |||
| 77d90bc4fd | |||
| 82e3e0f3d0 | |||
| 350a11515f | |||
| 61e027a678 | |||
| f9df80ca20 | |||
| df44d38356 | |||
| 1ad2ecba0d | |||
| c4a40626b2 | |||
| fa0baf0f14 | |||
| 77dad71b7e | |||
| 735b18b369 | |||
| a814012574 | |||
| c2be36757f | |||
| 134bd844d6 | |||
| f45a997179 | |||
| 4d988d2668 | |||
| b8ceea8f22 | |||
| af7e64638c | |||
| 1de666c652 | |||
| e7789312fd | |||
| d4fd2ffdbc | |||
| 8b90c96c1a | |||
| 42fac92940 | |||
| acb66cfa78 | |||
| 522c92cb45 | |||
| 378ed31778 | |||
| 5a07f6a444 | |||
| fb9ff96a11 | |||
| 6552312275 | |||
| 5fdcbee121 | |||
| dfdad6edf0 | |||
| d68ff123b3 | |||
| 1f70bdd49a | |||
| 6fe784030f | |||
| 408fe8aaa4 | |||
| 1d128f43ab | |||
| c68dc4e29a | |||
| cd87544fc7 | |||
| 9549942e6f | |||
| 4f2e43ae6b | |||
| d05c067f65 | |||
| 015517cd71 | |||
| 4e67a5ac95 | |||
| 5052d99199 | |||
| 83ca54d182 | |||
| eab219610d | |||
| 83b02310e4 | |||
| 542eb33aa6 | |||
| 39d683ffeb | |||
| 3149961634 | |||
| 758f418965 | |||
| ca6ce73dcc | |||
| 86d02ee17d | |||
| 04cbbf3888 | |||
| caa8ef5f32 | |||
| 2cd9c287aa |
@@ -0,0 +1,74 @@
|
||||
# V0.1
|
||||
name: Pytest
|
||||
|
||||
on: [push, workflow_dispatch]
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: windows-latest
|
||||
timeout-minutes: 15
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
python-version: [2.7, 3.6, 3.11]
|
||||
python-architecture: [x86, x64]
|
||||
include:
|
||||
# Translate architecture to bitness for py.exe commandline
|
||||
- python-bitness-to-test: 32
|
||||
python-architecture: x86
|
||||
- python-bitness-to-test: 64
|
||||
python-architecture: x64
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
# Pfw testing need both 32b & 64b of tested python version for cross-bitness python injection tests
|
||||
|
||||
## Install the 32bits version of python3 asked
|
||||
- name: Set up Python3 ${{ matrix.python-version }} x86
|
||||
if: ${{ matrix.python-version != '2.7' }}
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: ${{ matrix.python-version}}
|
||||
architecture: x86
|
||||
## Install the 64bits version of python3 asked
|
||||
- name: Set up Python3 ${{ matrix.python-version }} x64
|
||||
if: ${{ matrix.python-version != '2.7' }}
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: ${{ matrix.python-version}}
|
||||
architecture: x64
|
||||
|
||||
# Manually install python2.7 (both version at once)
|
||||
- name: Set up Python2.7 ${{ matrix.python-version }} x86 & x64
|
||||
shell: bash
|
||||
if: ${{ matrix.python-version == '2.7' }}
|
||||
run: |
|
||||
choco install python2 --version=2.7.18 -y --no-progress --params '"/InstallDir:C:\tools\python27"'
|
||||
choco install python2 --version=2.7.18 -y --no-progress -x86 --params '"/InstallDir:C:\tools\python2732"' --force
|
||||
|
||||
- name: Listing python versions availables
|
||||
run: py -0
|
||||
|
||||
# Install PythonForWindows for both bitness
|
||||
- name: Installing PythonForWindows for both bitness
|
||||
run: |
|
||||
py -${{ matrix.python-version}}-32 setup.py install
|
||||
py -${{ matrix.python-version}}-64 setup.py install
|
||||
|
||||
- name: Installing pytest & capstone-windows
|
||||
run: py -${{ matrix.python-version}}-${{ matrix.python-bitness-to-test}} -m pip install pytest capstone-windows
|
||||
|
||||
# Testing
|
||||
- name: Testing
|
||||
run: py -${{ matrix.python-version}}-${{ matrix.python-bitness-to-test}} -m pytest --junitxml=junit/test-results.xml -s -k "not known_to_fail" -v tests/
|
||||
|
||||
- name: Publish PyTest Results
|
||||
uses: EnricoMi/publish-unit-test-result-action/composite@v1
|
||||
if: always()
|
||||
with:
|
||||
files: junit/test-results.xml
|
||||
check_name: PyTest Results for ${{ matrix.python-version}}-${{ matrix.python-bitness-to-test}}
|
||||
secondary_rate_limit_wait_seconds: 90
|
||||
seconds_between_github_writes: 10
|
||||
seconds_between_github_reads: 1
|
||||
@@ -2,6 +2,7 @@
|
||||
doctrees
|
||||
*.inv
|
||||
*.pickle
|
||||
*.ignore
|
||||
|
||||
.vscode/
|
||||
.cache/
|
||||
|
||||
@@ -1,3 +1,13 @@
|
||||
1.0.0:
|
||||
|
||||
Unicode everywhere:
|
||||
Whenever possible, PythonForWindows use W() (wide) APIs and returns unicode string.
|
||||
This means `str` for python3 & `unicode` for python2.7
|
||||
|
||||
windows.system.build_number now returns a int : the actual build number
|
||||
windows.system.build_number became windows.system.versionstr
|
||||
|
||||
|
||||
Between 0.4 & 0.5:
|
||||
== New features ==
|
||||
- windows.security
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Copyright (c) 2016, Rouault Clement
|
||||
Copyright (c) 2016-2024, Rouault Clement
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
|
||||
@@ -1,38 +1,53 @@
|
||||
# PythonForWindows
|
||||
|
||||
[](https://gitter.im/PythonForWindows/general)
|
||||
[](https://github.com/hakril/PythonForWindows/actions/workflows/mypytest.yml)
|
||||
|
||||
PythonForWindows (PFW) is a base of code aimed to make interaction with `Windows` (on X86/X64) easier (for both 32 and 64 bits Python).
|
||||
Its goal is to offer abstractions around some of the OS features in a (I hope) pythonic way.
|
||||
It also tries to make the barrier between python and native execution thinner in both ways.
|
||||
There is no external dependencies but it relies heavily on the `ctypes` module.
|
||||
|
||||
|
||||
Some of this code is clean (IMHO) and some parts are just a wreck that works for now.
|
||||
Let's say that the codebase evolves with my needs and my curiosity.
|
||||
Let's say that the codebase evolves with my needs, my researches and my curiosity.
|
||||
|
||||
Complete online documentation is available [here][ONLINE_DOC]
|
||||
You can find some examples of code in the [samples directory][SAMPLE_DIR] or [online][ONLINE_SAMPLE].
|
||||
|
||||
PythonForWindows is principally known for its ALPC-RPC Client (see [samples](http://hakril.github.io/PythonForWindows/build/html/sample.html#windows-rpc)).
|
||||
PythonForWindows is principally known for:
|
||||
|
||||
- its ALPC-RPC Client (see [samples](https://hakril.github.io/PythonForWindows/build/html/sample.html#windows-rpc))
|
||||
- its generated [ctypes definitions](https://github.com/hakril/PythonForWindows/tree/master/windows/generated_def).
|
||||
|
||||
|
||||
If you have any issue, question or suggestion do not hesitate to join [the Gitter channel](https://gitter.im/PythonForWindows/general).
|
||||
|
||||
If you have any issue, question or suggestion do not hesitate to create an issue or reach me out.
|
||||
I am always glad to have feedbacks from people using this project.
|
||||
|
||||
## Installation
|
||||
|
||||
You can install PythonForWindows using the ``setup.py`` script:
|
||||
|
||||
PythonForWindows is available on [Pypi](https://pypi.org/project/PythonForWindows/) an this can be installed with
|
||||
|
||||
``
|
||||
python -m pip install PythonForWindows
|
||||
``
|
||||
|
||||
You can also install PythonForWindows by cloning it and using the ``setup.py`` script:
|
||||
|
||||
``
|
||||
python setup.py install
|
||||
``
|
||||
|
||||
#### Python3
|
||||
## Encoding & unicode
|
||||
|
||||
PythonForWindows support `python2.7` & `python3` and is currently tested for `Python2.7`, `3.6` & `3.11` via [Github Workflow](https://github.com/hakril/PythonForWindows/actions/workflows/mypytest.yml)
|
||||
|
||||
Since 1.0.0, the code uses "wide APIs" whenever possible and accept/returns python3 `str` (py2.7 `unicode` type) almost everywhere. Any functions/APIs not accepting unicode string can be considered a bug if its not stated explicitly in the documentation.
|
||||
|
||||
### Python2
|
||||
|
||||
PythonForWindows continues to support python2.7 as its the only way to have it running on `Windows XP` & `Windows Server 2003` which are sadly still seen in production.
|
||||
Encoding errors at print time might be awkward for unicode string on python2, see the [PythonForWindows encoding guide](https://hakril.github.io/PythonForWindows/build/html/encoding.html) in the documentation.
|
||||
|
||||
python3 support is still in beta.
|
||||
All the tests pass on master, but I did not test it heavily on real case.
|
||||
Do not hesitate report bugs and issues.
|
||||
|
||||
## Overview
|
||||
|
||||
@@ -522,6 +537,49 @@ The local debugger handles
|
||||
* Standard breakpoint ``int3``
|
||||
* Hardware Execution breakpoint ``DrX``
|
||||
|
||||
### Symbols
|
||||
|
||||
Classes around the Symbols APIs of `dbghelp.dll` are also implemented and can be used independently of the Debugger.
|
||||
The path of `dbghelp.dll` can also be given via the `PFW_DBGHELP_PATH` environment variable.
|
||||
|
||||
|
||||
```python
|
||||
# Python3
|
||||
|
||||
>>> from windows.debug import symbols
|
||||
>>> # symbols.set_dbghelp_path(MY_DBGHELP_PATH)
|
||||
>>> symbols.engine.options = 0 # Disable defered load
|
||||
>>> sh = symbols.VirtualSymbolHandler()
|
||||
>>> ntmod = sh.load_file(r"c:\windows\system32\ntdll.dll", addr=0x420000)
|
||||
>>> ntmod
|
||||
<SymbolModule name="ntdll" type=SymPdb pdb="ntdll.pdb" addr=0x420000>
|
||||
>>> ntmod.name
|
||||
'ntdll'
|
||||
>>> ntmod.path
|
||||
'c:\\windows\\system32\\ntdll.dll'
|
||||
>>> ntmod.pdb
|
||||
'c:\\Symbols\\ntdll.pdb\\8D5D5ED5D5B8AA609A82600C14E3004D1\\ntdll.pdb'
|
||||
>>> sym = sh["ntdll!LdrLoadDll"]
|
||||
>>> sym
|
||||
<SymbolInfoW name="LdrLoadDll" start=0x44a160 tag=SymTagFunction>
|
||||
>>> sym.fullname
|
||||
'ntdll!LdrLoadDll'
|
||||
>>> hex(sym.addr)
|
||||
'0x44a160'
|
||||
>>> sh.search("ntdll!*CreateFile")
|
||||
[<SymbolInfoW name="EtwpCreateFile" start=0x47d9ec tag=SymTagFunction>, <SymbolInfoW name="EtwpCreateFile" start=0x47d9ec tag=SymTagPublicSymbol>, <SymbolInfoW name="NtCreateFile" start=0x4c03e0 tag=SymTagPublicSymbol>, <SymbolInfoW name="ZwCreateFile" start=0x4c03e0 tag=SymTagPublicSymbol>, <SymbolInfoW name="__imp_NtCreateFile" start=0x55cb70 tag=SymTagPublicSymbol>]
|
||||
# Some types exploration
|
||||
>>> peb = sh.get_type("ntdll!_PEB")
|
||||
>>> peb
|
||||
<SymbolType name="_PEB" tag=_SymTagEnum.SymTagUDT(0xb)>
|
||||
>>> peb.size
|
||||
2000
|
||||
>>> peb.children[:3]
|
||||
[<SymbolType name="InheritedAddressSpace" tag=_SymTagEnum.SymTagData(0x7)>, <SymbolType name="ReadImageFileExecOptions" tag=_SymTagEnum.SymTagData(0x7)>, <SymbolType name="BeingDebugged" tag=_SymTagEnum.SymTagData(0x7)>]
|
||||
>>> peb.children[2].offset
|
||||
2
|
||||
```
|
||||
|
||||
### Other stuff (see doc / samples)
|
||||
|
||||
- Network
|
||||
@@ -534,8 +592,8 @@ The local debugger handles
|
||||
|
||||
[LKD_GITHUB]: https://github.com/sogeti-esec-lab/LKD/
|
||||
[SAMPLE_DIR]: https://github.com/hakril/PythonForWindows/tree/master/samples
|
||||
[ONLINE_DOC]: http://hakril.github.io/PythonForWindows/
|
||||
[ONLINE_SAMPLE]: http://hakril.github.io/PythonForWindows/build/html/sample.html
|
||||
[ONLINE_SAMPLE_ALPC]: http://hakril.github.io/PythonForWindows/build/html/sample.html#windows-alpc
|
||||
[ONLINE_SAMPLE_RPC]: http://hakril.github.io/PythonForWindows/build/html/sample.html#windows-rpc
|
||||
[ONLINE_IATHOOK]: http://hakril.github.io/PythonForWindows/build/html/iat_hook.html
|
||||
[ONLINE_DOC]: https://hakril.github.io/PythonForWindows/
|
||||
[ONLINE_SAMPLE]: https://hakril.github.io/PythonForWindows/build/html/sample.html
|
||||
[ONLINE_SAMPLE_ALPC]: https://hakril.github.io/PythonForWindows/build/html/sample.html#windows-alpc
|
||||
[ONLINE_SAMPLE_RPC]: https://hakril.github.io/PythonForWindows/build/html/sample.html#windows-rpc
|
||||
[ONLINE_IATHOOK]: https://hakril.github.io/PythonForWindows/build/html/iat_hook.html
|
||||
@@ -0,0 +1,33 @@
|
||||
typedef struct IWbemObjectTextSrcVtbl
|
||||
{
|
||||
BEGIN_INTERFACE
|
||||
|
||||
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
|
||||
IWbemObjectTextSrc * This,
|
||||
/* [in] */ REFIID riid,
|
||||
/* [iid_is][out] */ void **ppvObject);
|
||||
|
||||
ULONG ( STDMETHODCALLTYPE *AddRef )(
|
||||
IWbemObjectTextSrc * This);
|
||||
|
||||
ULONG ( STDMETHODCALLTYPE *Release )(
|
||||
IWbemObjectTextSrc * This);
|
||||
|
||||
HRESULT ( STDMETHODCALLTYPE *GetText )(
|
||||
IWbemObjectTextSrc * This,
|
||||
/* [in] */ long lFlags,
|
||||
/* [in] */ IWbemClassObject *pObj,
|
||||
/* [in] */ ULONG uObjTextFormat,
|
||||
/* [in] */ IWbemContext *pCtx,
|
||||
/* [out] */ BSTR *strText);
|
||||
|
||||
HRESULT ( STDMETHODCALLTYPE *CreateFromText )(
|
||||
IWbemObjectTextSrc * This,
|
||||
/* [in] */ long lFlags,
|
||||
/* [in] */ BSTR strText,
|
||||
/* [in] */ ULONG uObjTextFormat,
|
||||
/* [in] */ IWbemContext *pCtx,
|
||||
/* [out] */ IWbemClassObject **pNewObj);
|
||||
|
||||
END_INTERFACE
|
||||
} IWbemObjectTextSrcVtbl;
|
||||
@@ -0,0 +1,153 @@
|
||||
#define ALG_CLASS_ANY (0)
|
||||
#define ALG_CLASS_SIGNATURE (1 << 13)
|
||||
#define ALG_CLASS_MSG_ENCRYPT (2 << 13)
|
||||
#define ALG_CLASS_DATA_ENCRYPT (3 << 13)
|
||||
#define ALG_CLASS_HASH (4 << 13)
|
||||
#define ALG_CLASS_KEY_EXCHANGE (5 << 13)
|
||||
#define ALG_CLASS_ALL (7 << 13)
|
||||
/* Algorithm types */
|
||||
#define ALG_TYPE_ANY (0)
|
||||
#define ALG_TYPE_DSS (1 << 9)
|
||||
#define ALG_TYPE_RSA (2 << 9)
|
||||
#define ALG_TYPE_BLOCK (3 << 9)
|
||||
#define ALG_TYPE_STREAM (4 << 9)
|
||||
#define ALG_TYPE_DH (5 << 9)
|
||||
#define ALG_TYPE_SECURECHANNEL (6 << 9)
|
||||
#define ALG_TYPE_ECDH (7 << 9)
|
||||
|
||||
/* SIDs */
|
||||
#define ALG_SID_ANY (0)
|
||||
/* RSA SIDs */
|
||||
#define ALG_SID_RSA_ANY 0
|
||||
#define ALG_SID_RSA_PKCS 1
|
||||
#define ALG_SID_RSA_MSATWORK 2
|
||||
#define ALG_SID_RSA_ENTRUST 3
|
||||
#define ALG_SID_RSA_PGP 4
|
||||
/* DSS SIDs */
|
||||
#define ALG_SID_DSS_ANY 0
|
||||
#define ALG_SID_DSS_PKCS 1
|
||||
#define ALG_SID_DSS_DMS 2
|
||||
#define ALG_SID_ECDSA 3
|
||||
|
||||
/* DES SIDs */
|
||||
#define ALG_SID_DES 1
|
||||
#define ALG_SID_3DES 3
|
||||
#define ALG_SID_DESX 4
|
||||
#define ALG_SID_IDEA 5
|
||||
#define ALG_SID_CAST 6
|
||||
#define ALG_SID_SAFERSK64 7
|
||||
#define ALG_SID_SAFERSK128 8
|
||||
#define ALG_SID_3DES_112 9
|
||||
#define ALG_SID_CYLINK_MEK 12
|
||||
#define ALG_SID_RC5 13
|
||||
#define ALG_SID_AES_128 14
|
||||
#define ALG_SID_AES_192 15
|
||||
#define ALG_SID_AES_256 16
|
||||
#define ALG_SID_AES 17
|
||||
/* Fortezza */
|
||||
#define ALG_SID_SKIPJACK 10
|
||||
#define ALG_SID_TEK 11
|
||||
/* Diffie-Hellmans SIDs */
|
||||
#define ALG_SID_DH_SANDF 1
|
||||
#define ALG_SID_DH_EPHEM 2
|
||||
#define ALG_SID_AGREED_KEY_ANY 3
|
||||
#define ALG_SID_KEA 4
|
||||
#define ALG_SID_ECDH 5
|
||||
#define ALG_SID_ECDH_EPHEM 6
|
||||
/* RC2 SIDs */
|
||||
#define ALG_SID_RC4 1
|
||||
#define ALG_SID_RC2 2
|
||||
#define ALG_SID_SEAL 2
|
||||
/* Hash SIDs */
|
||||
#define ALG_SID_MD2 1
|
||||
#define ALG_SID_MD4 2
|
||||
#define ALG_SID_MD5 3
|
||||
#define ALG_SID_SHA 4
|
||||
#define ALG_SID_SHA1 ALG_SID_SHA
|
||||
#define ALG_SID_MAC 5
|
||||
#define ALG_SID_RIPEMD 6
|
||||
#define ALG_SID_RIPEMD160 7
|
||||
#define ALG_SID_SSL3SHAMD5 8
|
||||
#define ALG_SID_HMAC 9
|
||||
#define ALG_SID_TLS1PRF 10
|
||||
#define ALG_SID_HASH_REPLACE_OWF 11
|
||||
#define ALG_SID_SHA_256 12
|
||||
#define ALG_SID_SHA_384 13
|
||||
#define ALG_SID_SHA_512 14
|
||||
/* SCHANNEL SIDs */
|
||||
#define ALG_SID_SSL3_MASTER 1
|
||||
#define ALG_SID_SCHANNEL_MASTER_HASH 2
|
||||
#define ALG_SID_SCHANNEL_MAC_KEY 3
|
||||
#define ALG_SID_PCT1_MASTER 4
|
||||
#define ALG_SID_SSL2_MASTER 5
|
||||
#define ALG_SID_TLS1_MASTER 6
|
||||
#define ALG_SID_SCHANNEL_ENC_KEY 7
|
||||
#define ALG_SID_EXAMPLE 80
|
||||
|
||||
#define ALG_SID_ECMQV 1
|
||||
|
||||
/* Algorithm Definitions */
|
||||
#define CALG_MD2 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD2)
|
||||
#define CALG_MD4 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD4)
|
||||
#define CALG_MD5 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD5)
|
||||
#define CALG_SHA (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA)
|
||||
#define CALG_SHA1 CALG_SHA
|
||||
#define CALG_MAC (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MAC)
|
||||
#define CALG_SSL3_SHAMD5 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SSL3SHAMD5)
|
||||
#define CALG_HMAC (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HMAC)
|
||||
#define CALG_TLS1PRF (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_TLS1PRF)
|
||||
#define CALG_HASH_REPLACE_OWF (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HASH_REPLACE_OWF)
|
||||
#define CALG_SHA_256 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_256)
|
||||
#define CALG_SHA_384 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_384)
|
||||
#define CALG_SHA_512 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_512)
|
||||
#define CALG_RSA_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_RSA | ALG_SID_RSA_ANY)
|
||||
#define CALG_DSS_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_DSS_ANY)
|
||||
#define CALG_NO_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_ANY | ALG_SID_ANY)
|
||||
#define CALG_ECDSA (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_ECDSA)
|
||||
#define CALG_DH_SF (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_SANDF)
|
||||
#define CALG_DH_EPHEM (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_EPHEM)
|
||||
#define CALG_AGREEDKEY_ANY (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_AGREED_KEY_ANY)
|
||||
#define CALG_KEA_KEYX (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_KEA)
|
||||
#define CALG_HUGHES_MD5 (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ANY | ALG_SID_MD5)
|
||||
#define CALG_ECDH (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_ECDH)
|
||||
#define CALG_ECDH_EPHEM (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ECDH | ALG_SID_ECDH_EPHEM)
|
||||
#define CALG_RSA_KEYX (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_RSA | ALG_SID_RSA_ANY)
|
||||
#define CALG_ECMQV (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ANY | ALG_SID_ECMQV)
|
||||
#define CALG_DES (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_DES)
|
||||
#define CALG_RC2 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_RC2)
|
||||
#define CALG_3DES (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_3DES)
|
||||
#define CALG_3DES_112 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_3DES_112)
|
||||
#define CALG_DESX (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_DESX)
|
||||
#define CALG_AES_128 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_128)
|
||||
#define CALG_AES_192 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_192)
|
||||
#define CALG_AES_256 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_256)
|
||||
#define CALG_AES (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES)
|
||||
#define CALG_RC4 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_RC4)
|
||||
#define CALG_SEAL (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_SEAL)
|
||||
#define CALG_RC5 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_RC5)
|
||||
#define CALG_SKIPJACK (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_SKIPJACK)
|
||||
#define CALG_TEK (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_TEK)
|
||||
#define CALG_CYLINK_MEK (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_CYLINK_MEK)
|
||||
#define CALG_SSL3_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SSL3_MASTER)
|
||||
#define CALG_SCHANNEL_MASTER_HASH (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_MASTER_HASH)
|
||||
#define CALG_SCHANNEL_MAC_KEY (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_MAC_KEY)
|
||||
#define CALG_SCHANNEL_ENC_KEY (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_ENC_KEY)
|
||||
#define CALG_PCT1_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_PCT1_MASTER)
|
||||
#define CALG_SSL2_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SSL2_MASTER)
|
||||
#define CALG_TLS1_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_TLS1_MASTER)
|
||||
|
||||
|
||||
/* Protocol Flags */
|
||||
#define CRYPT_FLAG_PCT1 0x0001
|
||||
#define CRYPT_FLAG_SSL2 0x0002
|
||||
#define CRYPT_FLAG_SSL3 0x0004
|
||||
#define CRYPT_FLAG_TLS1 0x0008
|
||||
#define CRYPT_FLAG_IPSEC 0x0010
|
||||
#define CRYPT_FLAG_SIGNING 0x0020
|
||||
|
||||
#define HP_ALGID 0x0001 // Hash algorithm
|
||||
#define HP_HASHVAL 0x0002 // Hash value
|
||||
#define HP_HASHSIZE 0x0004 // Hash value size
|
||||
#define HP_HMAC_INFO 0x0005 // information for creating an HMAC
|
||||
#define HP_TLS1PRF_LABEL 0x0006 // label for TLS1 PRF
|
||||
#define HP_TLS1PRF_SEED 0x0007 // seed for TLS1 PRF
|
||||
@@ -0,0 +1,94 @@
|
||||
//
|
||||
// CryptProtect PromptStruct dwPromtFlags
|
||||
//
|
||||
//
|
||||
// prompt on unprotect
|
||||
#define CRYPTPROTECT_PROMPT_ON_UNPROTECT 0x1 // 1<<0
|
||||
//
|
||||
// prompt on protect
|
||||
#define CRYPTPROTECT_PROMPT_ON_PROTECT 0x2 // 1<<1
|
||||
#define CRYPTPROTECT_PROMPT_RESERVED 0x04 // reserved, do not use.
|
||||
|
||||
//
|
||||
// default to strong variant UI protection (user supplied password currently).
|
||||
#define CRYPTPROTECT_PROMPT_STRONG 0x08 // 1<<3
|
||||
|
||||
//
|
||||
// require strong variant UI protection (user supplied password currently).
|
||||
#define CRYPTPROTECT_PROMPT_REQUIRE_STRONG 0x10 // 1<<4
|
||||
|
||||
//
|
||||
// CryptProtectData and CryptUnprotectData dwFlags
|
||||
//
|
||||
// for remote-access situations where ui is not an option
|
||||
// if UI was specified on protect or unprotect operation, the call
|
||||
// will fail and GetLastError() will indicate ERROR_PASSWORD_RESTRICTION
|
||||
#define CRYPTPROTECT_UI_FORBIDDEN 0x1
|
||||
|
||||
//
|
||||
// per machine protected data -- any user on machine where CryptProtectData
|
||||
// took place may CryptUnprotectData
|
||||
#define CRYPTPROTECT_LOCAL_MACHINE 0x4
|
||||
|
||||
//
|
||||
// force credential synchronize during CryptProtectData()
|
||||
// Synchronize is only operation that occurs during this operation
|
||||
#define CRYPTPROTECT_CRED_SYNC 0x8
|
||||
|
||||
//
|
||||
// Generate an Audit on protect and unprotect operations
|
||||
//
|
||||
#define CRYPTPROTECT_AUDIT 0x10
|
||||
|
||||
//
|
||||
// Protect data with a non-recoverable key
|
||||
//
|
||||
#define CRYPTPROTECT_NO_RECOVERY 0x20
|
||||
|
||||
|
||||
//
|
||||
// Verify the protection of a protected blob
|
||||
//
|
||||
#define CRYPTPROTECT_VERIFY_PROTECTION 0x40
|
||||
|
||||
//
|
||||
// Regenerate the local machine protection
|
||||
//
|
||||
#define CRYPTPROTECT_CRED_REGENERATE 0x80
|
||||
|
||||
// flags reserved for system use
|
||||
#define CRYPTPROTECT_FIRST_RESERVED_FLAGVAL 0x0FFFFFFF
|
||||
#define CRYPTPROTECT_LAST_RESERVED_FLAGVAL 0xFFFFFFFF
|
||||
|
||||
|
||||
//
|
||||
// The buffer length passed into CryptProtectMemory and CryptUnprotectMemory
|
||||
// must be a multiple of this length (or zero).
|
||||
//
|
||||
|
||||
#define CRYPTPROTECTMEMORY_BLOCK_SIZE 16
|
||||
|
||||
|
||||
//
|
||||
// CryptProtectMemory/CryptUnprotectMemory dwFlags
|
||||
//
|
||||
|
||||
//
|
||||
// Encrypt/Decrypt within current process context.
|
||||
//
|
||||
|
||||
#define CRYPTPROTECTMEMORY_SAME_PROCESS 0x00
|
||||
|
||||
//
|
||||
// Encrypt/Decrypt across process boundaries.
|
||||
// eg: encrypted buffer passed across LPC to another process which calls CryptUnprotectMemory.
|
||||
//
|
||||
|
||||
#define CRYPTPROTECTMEMORY_CROSS_PROCESS 0x01
|
||||
|
||||
//
|
||||
// Encrypt/Decrypt across callers with same LogonId.
|
||||
// eg: encrypted buffer passed across LPC to another process which calls CryptUnprotectMemory whilst impersonating.
|
||||
//
|
||||
|
||||
#define CRYPTPROTECTMEMORY_SAME_LOGON 0x02
|
||||
@@ -45,6 +45,37 @@
|
||||
#define EVENT_TRACE_FILE_MODE_NEWFILE 0x00000008 // Auto-switch log file
|
||||
#define EVENT_TRACE_FILE_MODE_PREALLOCATE 0x00000020 // Pre-allocate mode
|
||||
|
||||
//
|
||||
// Logger Mode flags on Vista and above
|
||||
//
|
||||
|
||||
#define EVENT_TRACE_NONSTOPPABLE_MODE 0x00000040 // Session cannot be stopped (Autologger only)
|
||||
#define EVENT_TRACE_SECURE_MODE 0x00000080 // Secure session
|
||||
#define EVENT_TRACE_USE_KBYTES_FOR_SIZE 0x00002000 // Use KBytes as file size unit
|
||||
#define EVENT_TRACE_PRIVATE_IN_PROC 0x00020000 // In process private logger
|
||||
|
||||
#define EVENT_TRACE_MODE_RESERVED 0x00100000 // Reserved bit, used to signal Heap/Critsec tracing
|
||||
|
||||
//
|
||||
// Logger Mode flags on Win7 and above
|
||||
//
|
||||
|
||||
#define EVENT_TRACE_NO_PER_PROCESSOR_BUFFERING 0x10000000 // Use this for low frequency sessions.
|
||||
|
||||
//
|
||||
// Logger Mode flags on Win8 and above
|
||||
//
|
||||
|
||||
#define EVENT_TRACE_SYSTEM_LOGGER_MODE 0x02000000 // Receive events from SystemTraceProvider
|
||||
#define EVENT_TRACE_ADDTO_TRIAGE_DUMP 0x80000000 // Add ETW buffers to triage dumps
|
||||
#define EVENT_TRACE_STOP_ON_HYBRID_SHUTDOWN 0x00400000 // Stop on hybrid shutdown
|
||||
#define EVENT_TRACE_PERSIST_ON_HYBRID_SHUTDOWN 0x00800000 // Persist on hybrid shutdown
|
||||
|
||||
//
|
||||
// Logger Mode flags on Blue and above
|
||||
//
|
||||
|
||||
#define EVENT_TRACE_INDEPENDENT_SESSION_MODE 0x08000000 // Independent logger session
|
||||
|
||||
//
|
||||
// ControlTrace Codes
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
#define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001 // winnt
|
||||
#define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002 // winnt
|
||||
#define FILE_NOTIFY_CHANGE_NAME 0x00000003
|
||||
#define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004 // winnt
|
||||
#define FILE_NOTIFY_CHANGE_SIZE 0x00000008 // winnt
|
||||
#define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010 // winnt
|
||||
#define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020 // winnt
|
||||
#define FILE_NOTIFY_CHANGE_CREATION 0x00000040 // winnt
|
||||
#define FILE_NOTIFY_CHANGE_EA 0x00000080
|
||||
#define FILE_NOTIFY_CHANGE_SECURITY 0x00000100 // winnt
|
||||
#define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
|
||||
#define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
|
||||
#define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
|
||||
#define FILE_NOTIFY_VALID_MASK 0x00000fff
|
||||
|
||||
|
||||
|
||||
#define FILE_ACTION_ADDED 0x00000001 // winnt
|
||||
#define FILE_ACTION_REMOVED 0x00000002 // winnt
|
||||
#define FILE_ACTION_MODIFIED 0x00000003 // winnt
|
||||
#define FILE_ACTION_RENAMED_OLD_NAME 0x00000004 // winnt
|
||||
#define FILE_ACTION_RENAMED_NEW_NAME 0x00000005 // winnt
|
||||
#define FILE_ACTION_ADDED_STREAM 0x00000006
|
||||
#define FILE_ACTION_REMOVED_STREAM 0x00000007
|
||||
#define FILE_ACTION_MODIFIED_STREAM 0x00000008
|
||||
#define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
|
||||
#define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A
|
||||
#define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B
|
||||
|
||||
|
||||
#define FILE_CASE_SENSITIVE_SEARCH 0x00000001
|
||||
#define FILE_CASE_PRESERVED_NAMES 0x00000002
|
||||
#define FILE_UNICODE_ON_DISK 0x00000004
|
||||
#define FILE_PERSISTENT_ACLS 0x00000008
|
||||
#define FILE_FILE_COMPRESSION 0x00000010
|
||||
#define FILE_VOLUME_QUOTAS 0x00000020
|
||||
#define FILE_SUPPORTS_SPARSE_FILES 0x00000040
|
||||
#define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
|
||||
#define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
|
||||
#define FILE_VOLUME_IS_COMPRESSED 0x00008000
|
||||
#define FILE_SUPPORTS_OBJECT_IDS 0x00010000
|
||||
#define FILE_SUPPORTS_ENCRYPTION 0x00020000
|
||||
#define FILE_NAMED_STREAMS 0x00040000
|
||||
#define FILE_READ_ONLY_VOLUME 0x00080000
|
||||
#define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
|
||||
#define FILE_SUPPORTS_TRANSACTIONS 0x00200000
|
||||
#define FILE_SUPPORTS_HARD_LINKS 0x00400000
|
||||
#define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
|
||||
#define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
|
||||
#define FILE_SUPPORTS_USN_JOURNAL 0x02000000
|
||||
|
||||
|
||||
#define FILE_SHARE_READ 0x00000001
|
||||
#define FILE_SHARE_WRITE 0x00000002
|
||||
#define FILE_SHARE_DELETE 0x00000004
|
||||
|
||||
|
||||
#define FILE_ATTRIBUTE_READONLY 0x00000001
|
||||
#define FILE_ATTRIBUTE_HIDDEN 0x00000002
|
||||
#define FILE_ATTRIBUTE_SYSTEM 0x00000004
|
||||
#define FILE_ATTRIBUTE_DIRECTORY 0x00000010
|
||||
#define FILE_ATTRIBUTE_ARCHIVE 0x00000020
|
||||
#define FILE_ATTRIBUTE_DEVICE 0x00000040
|
||||
#define FILE_ATTRIBUTE_NORMAL 0x00000080
|
||||
#define FILE_ATTRIBUTE_TEMPORARY 0x00000100
|
||||
#define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
|
||||
#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
|
||||
#define FILE_ATTRIBUTE_COMPRESSED 0x00000800
|
||||
#define FILE_ATTRIBUTE_OFFLINE 0x00001000
|
||||
#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
|
||||
#define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
|
||||
#define FILE_ATTRIBUTE_VIRTUAL 0x00010000
|
||||
@@ -0,0 +1,359 @@
|
||||
|
||||
/* CTL_CODE is directly defined in the .py template to simpify parsing of define */
|
||||
|
||||
// #define CTL_CODE( DeviceType, Function, Method, Access ) (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
|
||||
|
||||
#define METHOD_BUFFERED 0
|
||||
#define METHOD_IN_DIRECT 1
|
||||
#define METHOD_OUT_DIRECT 2
|
||||
#define METHOD_NEITHER 3
|
||||
|
||||
#define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
|
||||
#define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
|
||||
|
||||
#define FILE_ANY_ACCESS 0
|
||||
#define FILE_SPECIAL_ACCESS (FILE_ANY_ACCESS)
|
||||
#define FILE_READ_ACCESS ( 0x0001 ) // file & pipe
|
||||
#define FILE_WRITE_ACCESS ( 0x0002 ) // file & pipe
|
||||
|
||||
|
||||
#define FILE_DISPOSITION_DO_NOT_DELETE 0x00000000
|
||||
#define FILE_DISPOSITION_DELETE 0x00000001
|
||||
#define FILE_DISPOSITION_POSIX_SEMANTICS 0x00000002
|
||||
#define FILE_DISPOSITION_FORCE_IMAGE_SECTION_CHECK 0x00000004
|
||||
#define FILE_DISPOSITION_ON_CLOSE 0x00000008
|
||||
#define FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE 0x00000010
|
||||
|
||||
/* From: ntifs.h */
|
||||
//
|
||||
// The following is a list of the native file system fsctls followed by
|
||||
// additional network file system fsctls. Some values have been
|
||||
// decommissioned.
|
||||
//
|
||||
|
||||
|
||||
#define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
// decommissioned fsctl value 9
|
||||
#define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS) // PATHNAME_BUFFER,
|
||||
#define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
// decommissioned fsctl value 13
|
||||
#define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS)
|
||||
#define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
|
||||
// decommissioned fsctl value 17
|
||||
// decommissioned fsctl value 18
|
||||
#define FSCTL_SET_BOOTLOADER_ACCESSED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS)
|
||||
#define FSCTL_MARK_AS_SYSTEM_HIVE FSCTL_SET_BOOTLOADER_ACCESSED
|
||||
#define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS) // FSCTL_QUERY_FAT_BPB_BUFFER
|
||||
#define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS) // FILESYSTEM_STATISTICS
|
||||
|
||||
#define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS) // NTFS_VOLUME_DATA_BUFFER
|
||||
#define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS) // NTFS_FILE_RECORD_INPUT_BUFFER, NTFS_FILE_RECORD_OUTPUT_BUFFER
|
||||
#define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS) // STARTING_LCN_INPUT_BUFFER, VOLUME_BITMAP_BUFFER
|
||||
#define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS) // STARTING_VCN_INPUT_BUFFER, RETRIEVAL_POINTERS_BUFFER
|
||||
#define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) // MOVE_FILE_DATA,
|
||||
#define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
// decommissioned fsctl value 31
|
||||
#define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS)
|
||||
|
||||
// decommissioned fsctl value 33
|
||||
// decommissioned fsctl value 34
|
||||
#define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS)
|
||||
// decommissioned fsctl value 36
|
||||
// decommissioned fsctl value 37
|
||||
#define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) // FILE_OBJECTID_BUFFER
|
||||
#define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS) // FILE_OBJECTID_BUFFER
|
||||
#define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
|
||||
#define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) // REPARSE_DATA_BUFFER,
|
||||
#define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS) // REPARSE_DATA_BUFFER
|
||||
#define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) // REPARSE_DATA_BUFFER,
|
||||
#define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_ANY_ACCESS) // MFT_ENUM_DATA,
|
||||
#define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA) // BULK_SECURITY_TEST_DATA,
|
||||
#define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_ANY_ACCESS) // READ_USN_JOURNAL_DATA, USN
|
||||
#define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
|
||||
#define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS) // FILE_OBJECTID_BUFFER
|
||||
#define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
|
||||
#define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA) // FILE_ZERO_DATA_INFORMATION,
|
||||
#define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA) // FILE_ALLOCATED_RANGE_BUFFER, FILE_ALLOCATED_RANGE_BUFFER
|
||||
#define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA)
|
||||
#define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_NEITHER, FILE_ANY_ACCESS) // ENCRYPTION_BUFFER, DECRYPTION_STATUS_BUFFER
|
||||
#define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS)
|
||||
#define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_SPECIAL_ACCESS) // ENCRYPTED_DATA_INFO, EXTENDED_ENCRYPTED_DATA_INFO
|
||||
#define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_SPECIAL_ACCESS) // REQUEST_RAW_ENCRYPTED_DATA, ENCRYPTED_DATA_INFO, EXTENDED_ENCRYPTED_DATA_INFO
|
||||
#define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_ANY_ACCESS) // CREATE_USN_JOURNAL_DATA,
|
||||
#define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_ANY_ACCESS) // Read the Usn Record for a file
|
||||
#define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_ANY_ACCESS) // Generate Close Usn Record
|
||||
#define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
|
||||
// decommissioned fsctl value 66
|
||||
// decommissioned fsctl value 67
|
||||
// decommissioned fsctl value 68
|
||||
#define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
|
||||
// decommissioned fsctl value 70
|
||||
#define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA)
|
||||
#define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) // FILE_PREFETCH
|
||||
|
||||
#define FSCTL_MAKE_MEDIA_COMPATIBLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA) // UDFS R/W
|
||||
#define FSCTL_SET_DEFECT_MANAGEMENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA) // UDFS R/W
|
||||
#define FSCTL_QUERY_SPARING_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS) // UDFS R/W
|
||||
#define FSCTL_QUERY_ON_DISK_VOLUME_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS) // C/UDFS
|
||||
#define FSCTL_SET_VOLUME_COMPRESSION_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) // VOLUME_COMPRESSION_STATE
|
||||
// decommissioned fsctl value 80
|
||||
#define FSCTL_TXFS_MODIFY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 81, METHOD_BUFFERED, FILE_WRITE_DATA) // TxF
|
||||
#define FSCTL_TXFS_QUERY_RM_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 82, METHOD_BUFFERED, FILE_READ_DATA) // TxF
|
||||
// decommissioned fsctl value 83
|
||||
#define FSCTL_TXFS_ROLLFORWARD_REDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 84, METHOD_BUFFERED, FILE_WRITE_DATA) // TxF
|
||||
#define FSCTL_TXFS_ROLLFORWARD_UNDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 85, METHOD_BUFFERED, FILE_WRITE_DATA) // TxF
|
||||
#define FSCTL_TXFS_START_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 86, METHOD_BUFFERED, FILE_WRITE_DATA) // TxF
|
||||
#define FSCTL_TXFS_SHUTDOWN_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA) // TxF
|
||||
#define FSCTL_TXFS_READ_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 88, METHOD_BUFFERED, FILE_READ_DATA) // TxF
|
||||
#define FSCTL_TXFS_WRITE_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 89, METHOD_BUFFERED, FILE_WRITE_DATA) // TxF
|
||||
#define FSCTL_TXFS_CREATE_SECONDARY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 90, METHOD_BUFFERED, FILE_WRITE_DATA) // TxF
|
||||
#define FSCTL_TXFS_GET_METADATA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 91, METHOD_BUFFERED, FILE_READ_DATA) // TxF
|
||||
#define FSCTL_TXFS_GET_TRANSACTED_VERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 92, METHOD_BUFFERED, FILE_READ_DATA) // TxF
|
||||
// decommissioned fsctl value 93
|
||||
#define FSCTL_TXFS_SAVEPOINT_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 94, METHOD_BUFFERED, FILE_WRITE_DATA) // TxF
|
||||
#define FSCTL_TXFS_CREATE_MINIVERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA) // TxF
|
||||
// decommissioned fsctl value 96
|
||||
// decommissioned fsctl value 97
|
||||
// decommissioned fsctl value 98
|
||||
#define FSCTL_TXFS_TRANSACTION_ACTIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 99, METHOD_BUFFERED, FILE_READ_DATA) // TxF
|
||||
#define FSCTL_SET_ZERO_ON_DEALLOCATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
|
||||
#define FSCTL_SET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_GET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_WAIT_FOR_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
// decommissioned fsctl value 105
|
||||
#define FSCTL_INITIATE_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_CSC_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER, FILE_ANY_ACCESS) // CSC internal implementation
|
||||
#define FSCTL_SHRINK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) // SHRINK_VOLUME_INFORMATION
|
||||
#define FSCTL_SET_SHORT_NAME_BEHAVIOR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_DFSR_SET_GHOST_HANDLE_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
//
|
||||
// Values 111 - 119 are reserved for FSRM.
|
||||
//
|
||||
|
||||
#define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES \
|
||||
CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA) // TxF
|
||||
#define FSCTL_TXFS_LIST_TRANSACTIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA) // TxF
|
||||
#define FSCTL_QUERY_PAGEFILE_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_RESET_VOLUME_ALLOCATION_HINTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 123, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_QUERY_DEPENDENT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 124, METHOD_BUFFERED, FILE_ANY_ACCESS) // Dependency File System Filter
|
||||
#define FSCTL_SD_GLOBAL_CHANGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 125, METHOD_BUFFERED, FILE_ANY_ACCESS) // Query/Change NTFS Security Descriptors
|
||||
|
||||
#define FSCTL_TXFS_READ_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 126, METHOD_BUFFERED, FILE_ANY_ACCESS) // TxF
|
||||
|
||||
#define FSCTL_LOOKUP_STREAM_FROM_CLUSTER CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 127, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_TXFS_WRITE_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 128, METHOD_BUFFERED, FILE_ANY_ACCESS) // TxF
|
||||
#define FSCTL_FILE_TYPE_NOTIFICATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 129, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_FILE_LEVEL_TRIM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 130, METHOD_BUFFERED, FILE_WRITE_DATA)
|
||||
|
||||
//
|
||||
// Values 131 - 139 are reserved for FSRM.
|
||||
//
|
||||
|
||||
#define FSCTL_GET_BOOT_AREA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 140, METHOD_BUFFERED, FILE_ANY_ACCESS) // BOOT_AREA_INFO
|
||||
#define FSCTL_GET_RETRIEVAL_POINTER_BASE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 141, METHOD_BUFFERED, FILE_ANY_ACCESS) // RETRIEVAL_POINTER_BASE
|
||||
#define FSCTL_SET_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS) // FILE_FS_PERSISTENT_VOLUME_INFORMATION
|
||||
#define FSCTL_QUERY_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 143, METHOD_BUFFERED, FILE_ANY_ACCESS) // FILE_FS_PERSISTENT_VOLUME_INFORMATION
|
||||
|
||||
#define FSCTL_REQUEST_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 144, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_CSV_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 145, METHOD_BUFFERED, FILE_ANY_ACCESS) // CSV_TUNNEL_REQUEST
|
||||
#define FSCTL_IS_CSV_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED, FILE_ANY_ACCESS) // IS_CSV_FILE
|
||||
|
||||
#define FSCTL_QUERY_FILE_SYSTEM_RECOGNITION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 147, METHOD_BUFFERED, FILE_ANY_ACCESS) //
|
||||
#define FSCTL_CSV_GET_VOLUME_PATH_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 148, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 150, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_IS_FILE_ON_CSV_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 151, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_CORRUPTION_HANDLING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 152, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_OFFLOAD_READ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 153, METHOD_BUFFERED, FILE_READ_ACCESS)
|
||||
#define FSCTL_OFFLOAD_WRITE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 154, METHOD_BUFFERED, FILE_WRITE_ACCESS)
|
||||
|
||||
#define FSCTL_CSV_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 155, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_SET_PURGE_FAILURE_MODE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 156, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_QUERY_FILE_LAYOUT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 157, METHOD_NEITHER, FILE_ANY_ACCESS)
|
||||
#define FSCTL_IS_VOLUME_OWNED_BYCSVFS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 158, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_GET_INTEGRITY_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 159, METHOD_BUFFERED, FILE_ANY_ACCESS) // FSCTL_GET_INTEGRITY_INFORMATION_BUFFER
|
||||
#define FSCTL_SET_INTEGRITY_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 160, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA) // FSCTL_SET_INTEGRITY_INFORMATION_BUFFER
|
||||
|
||||
#define FSCTL_QUERY_FILE_REGIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 161, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
|
||||
|
||||
#define FSCTL_RKF_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 171, METHOD_NEITHER, FILE_ANY_ACCESS) // Resume Key Filter
|
||||
|
||||
#define FSCTL_SCRUB_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 172, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_REPAIR_COPIES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 173, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
|
||||
#define FSCTL_DISABLE_LOCAL_BUFFERING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 174, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_CSV_MGMT_LOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 175, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_CSV_QUERY_DOWN_LEVEL_FILE_SYSTEM_CHARACTERISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 176, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_ADVANCE_FILE_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 177, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_CSV_SYNC_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 178, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_CSV_QUERY_VETO_FILE_DIRECT_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 179, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_WRITE_USN_REASON CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 180, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_CSV_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 181, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_GET_REFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 182, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_CSV_H_BREAKING_SYNC_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 185, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_QUERY_STORAGE_CLASSES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 187, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_QUERY_REGION_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 188, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_USN_TRACK_MODIFIED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 189, METHOD_BUFFERED, FILE_ANY_ACCESS) // USN_TRACK_MODIFIED_RANGES
|
||||
#define FSCTL_QUERY_SHARED_VIRTUAL_DISK_SUPPORT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 192, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_SVHDX_SYNC_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 193, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_SVHDX_SET_INITIATOR_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 194, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_SET_EXTERNAL_BACKING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 195, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
|
||||
#define FSCTL_GET_EXTERNAL_BACKING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 196, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_DELETE_EXTERNAL_BACKING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 197, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
|
||||
#define FSCTL_ENUM_EXTERNAL_BACKING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 198, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_ENUM_OVERLAY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 199, METHOD_NEITHER, FILE_ANY_ACCESS)
|
||||
#define FSCTL_ADD_OVERLAY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 204, METHOD_BUFFERED, FILE_WRITE_DATA)
|
||||
#define FSCTL_REMOVE_OVERLAY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 205, METHOD_BUFFERED, FILE_WRITE_DATA)
|
||||
#define FSCTL_UPDATE_OVERLAY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 206, METHOD_BUFFERED, FILE_WRITE_DATA)
|
||||
#define FSCTL_SHUFFLE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 208, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) // SHUFFLE_FILE_DATA
|
||||
#define FSCTL_DUPLICATE_EXTENTS_TO_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 209, METHOD_BUFFERED, FILE_WRITE_DATA )
|
||||
#define FSCTL_SPARSE_OVERALLOCATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 211, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
|
||||
#define FSCTL_STORAGE_QOS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 212, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_INITIATE_FILE_METADATA_OPTIMIZATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 215, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
|
||||
#define FSCTL_QUERY_FILE_METADATA_OPTIMIZATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 216, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
|
||||
|
||||
#define FSCTL_SVHDX_ASYNC_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 217, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_GET_WOF_VERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 218, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_HCS_SYNC_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 219, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_HCS_ASYNC_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 220, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_QUERY_EXTENT_READ_CACHE_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 221, METHOD_NEITHER, FILE_ANY_ACCESS) // VCN_RANGE_INPUT_BUFFER, EXTENT_READ_CACHE_INFO_BUFFER
|
||||
#define FSCTL_QUERY_REFS_VOLUME_COUNTER_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 222, METHOD_NEITHER, FILE_ANY_ACCESS) // REFS_VOLUME_COUNTER_INFO_INPUT_BUFFER, VOLUME_REFS_INFO_BUFFER
|
||||
#define FSCTL_CLEAN_VOLUME_METADATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 223, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_SET_INTEGRITY_INFORMATION_EX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 224, METHOD_BUFFERED, FILE_ANY_ACCESS) // FSCTL_SET_INTEGRITY_INFORMATION_BUFFER_EX
|
||||
#define FSCTL_SUSPEND_OVERLAY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 225, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_VIRTUAL_STORAGE_QUERY_PROPERTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 226, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_FILESYSTEM_GET_STATISTICS_EX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 227, METHOD_BUFFERED, FILE_ANY_ACCESS) // FILESYSTEM_STATISTICS_EX
|
||||
#define FSCTL_QUERY_VOLUME_CONTAINER_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 228, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_SET_LAYER_ROOT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 229, METHOD_BUFFERED, FILE_ANY_ACCESS) // CONTAINER_ROOT_INFO_INPUT CONTAINER_ROOT_INFO_OUTPUT
|
||||
|
||||
#define FSCTL_QUERY_DIRECT_ACCESS_EXTENTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 230, METHOD_NEITHER, FILE_ANY_ACCESS) // QUERY_DIRECT_ACCESS_EXTENTS
|
||||
#define FSCTL_NOTIFY_STORAGE_SPACE_ALLOCATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 231, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_SSDI_STORAGE_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 232, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_QUERY_DIRECT_IMAGE_ORIGINAL_BASE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 233, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_READ_UNPRIVILEGED_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 234, METHOD_NEITHER, FILE_ANY_ACCESS) // READ_USN_JOURNAL_DATA, USN
|
||||
|
||||
#define FSCTL_GHOST_FILE_EXTENTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 235, METHOD_BUFFERED, FILE_WRITE_ACCESS) // FSCTL_GHOST_FILE_EXTENTS_INPUT_BUFFER
|
||||
#define FSCTL_QUERY_GHOSTED_FILE_EXTENTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 236, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_UNMAP_SPACE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 237, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_HCS_SYNC_NO_WRITE_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 238, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_START_VIRTUALIZATION_INSTANCE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 240, METHOD_BUFFERED, FILE_ANY_ACCESS) // VIRTUALIZATION_INSTANCE_INFO_INPUT, VIRTUALIZATION_INSTANCE_INFO_OUTPUT
|
||||
#define FSCTL_GET_FILTER_FILE_IDENTIFIER CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 241, METHOD_BUFFERED, FILE_ANY_ACCESS) // GET_FILTER_FILE_IDENTIFIER_INPUT, GET_FILTER_FILE_IDENTIFIER_OUTPUT
|
||||
|
||||
#define FSCTL_STREAMS_QUERY_PARAMETERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 241, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_STREAMS_ASSOCIATE_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 242, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_STREAMS_QUERY_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 243, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_GET_RETRIEVAL_POINTERS_AND_REFCOUNT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 244, METHOD_NEITHER, FILE_ANY_ACCESS) // STARTING_VCN_INPUT_BUFFER, RETRIEVAL_POINTERS_AND_REFCOUNT_BUFFER
|
||||
|
||||
#define FSCTL_QUERY_VOLUME_NUMA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 245, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
|
||||
#define FSCTL_REFS_DEALLOCATE_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 246, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_QUERY_REFS_SMR_VOLUME_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 247, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_SET_REFS_SMR_VOLUME_GC_PARAMETERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 248, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_SET_REFS_FILE_STRICTLY_SEQUENTIAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 249, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_DUPLICATE_EXTENTS_TO_FILE_EX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_WRITE_DATA)
|
||||
#define FSCTL_QUERY_BAD_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 251, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_SET_DAX_ALLOC_ALIGNMENT_HINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 252, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_DELETE_CORRUPTED_REFS_CONTAINER CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 253, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_SCRUB_UNDISCOVERABLE_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 254, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_NOTIFY_DATA_CHANGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 255, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_START_VIRTUALIZATION_INSTANCE_EX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 256, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_ENCRYPTION_KEY_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 257, METHOD_BUFFERED, FILE_ANY_ACCESS) // protect/unprotect under DPL
|
||||
#define FSCTL_VIRTUAL_STORAGE_SET_BEHAVIOR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 258, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_SET_REPARSE_POINT_EX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 259, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) // REPARSE_DATA_BUFFER_EX
|
||||
#define FSCTL_REARRANGE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 264, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) // REARRANGE_FILE_DATA
|
||||
#define FSCTL_VIRTUAL_STORAGE_PASSTHROUGH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 265, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_GET_RETRIEVAL_POINTER_COUNT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 266, METHOD_NEITHER, FILE_ANY_ACCESS) // STARTING_VCN_INPUT_BUFFER, RETRIEVAL_POINTER_COUNT
|
||||
#define FSCTL_ENABLE_PER_IO_FLAGS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 267, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_QUERY_ASYNC_DUPLICATE_EXTENTS_STATUS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 268, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_SMB_SHARE_FLUSH_AND_PURGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 271, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_REFS_STREAM_SNAPSHOT_MANAGEMENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 272, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_MANAGE_BYPASS_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 274, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_REFS_DEALLOCATE_RANGES_EX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 275, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
#define FSCTL_SET_CACHED_RUNS_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 276, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_REFS_SET_VOLUME_COMPRESSION_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 277, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_REFS_QUERY_VOLUME_COMPRESSION_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 278, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_DUPLICATE_CLUSTER CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 279, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_CREATE_LCN_WEAK_REFERENCE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 280, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_CLEAR_LCN_WEAK_REFERENCE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 281, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_QUERY_LCN_WEAK_REFERENCE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 282, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_CLEAR_ALL_LCN_WEAK_REFERENCES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 283, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_REFS_SET_VOLUME_DEDUP_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 284, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_REFS_QUERY_VOLUME_DEDUP_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 285, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_LMR_QUERY_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 286, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_REFS_CHECKPOINT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 287, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_REFS_QUERY_VOLUME_TOTAL_SHARED_LCNS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 288, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_UPGRADE_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 289, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_REFS_SET_VOLUME_IO_METRICS_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 290, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_REFS_QUERY_VOLUME_IO_METRICS_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 291, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_REFS_SET_ROLLBACK_PROTECTION_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 292, METHOD_BUFFERED, FILE_ANY_ACCESS) // REFS_SET_ROLLBACK_PROTECTION_INFO_INPUT_BUFFER
|
||||
#define FSCTL_REFS_QUERY_ROLLBACK_PROTECTION_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 293, METHOD_BUFFERED, FILE_ANY_ACCESS) // REFS_QUERY_ROLLBACK_PROTECTION_INFO_OUTPUT_BUFFER
|
||||
#define FSCTL_FILE_SOV_CHECK_RANGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 294, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define FSCTL_CASCADES_REFS_SET_FILE_REMOTE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 295, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
|
||||
//
|
||||
// These are the IOCTLs supported by the mount point manager.
|
||||
//
|
||||
|
||||
#define MOUNTMGR_DEVICE_NAME u"\\Device\\MountPointManager"
|
||||
#define MOUNTMGR_DOS_DEVICE_NAME u"\\\\.\\MountPointManager"
|
||||
|
||||
#define MOUNTMGRCONTROLTYPE 0x0000006D // 'm'
|
||||
#define MOUNTDEVCONTROLTYPE 0x0000004D // 'M'
|
||||
|
||||
#define IOCTL_MOUNTMGR_CREATE_POINT CTL_CODE(MOUNTMGRCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
|
||||
#define IOCTL_MOUNTMGR_DELETE_POINTS CTL_CODE(MOUNTMGRCONTROLTYPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
|
||||
#define IOCTL_MOUNTMGR_QUERY_POINTS CTL_CODE(MOUNTMGRCONTROLTYPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define IOCTL_MOUNTMGR_DELETE_POINTS_DBONLY CTL_CODE(MOUNTMGRCONTROLTYPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
|
||||
#define IOCTL_MOUNTMGR_NEXT_DRIVE_LETTER CTL_CODE(MOUNTMGRCONTROLTYPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
|
||||
#define IOCTL_MOUNTMGR_AUTO_DL_ASSIGNMENTS CTL_CODE(MOUNTMGRCONTROLTYPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
|
||||
#define IOCTL_MOUNTMGR_VOLUME_MOUNT_POINT_CREATED CTL_CODE(MOUNTMGRCONTROLTYPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
|
||||
#define IOCTL_MOUNTMGR_VOLUME_MOUNT_POINT_DELETED CTL_CODE(MOUNTMGRCONTROLTYPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
|
||||
#define IOCTL_MOUNTMGR_CHANGE_NOTIFY CTL_CODE(MOUNTMGRCONTROLTYPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
|
||||
#define IOCTL_MOUNTMGR_KEEP_LINKS_WHEN_OFFLINE CTL_CODE(MOUNTMGRCONTROLTYPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
|
||||
#define IOCTL_MOUNTMGR_CHECK_UNPROCESSED_VOLUMES CTL_CODE(MOUNTMGRCONTROLTYPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS)
|
||||
#define IOCTL_MOUNTMGR_VOLUME_ARRIVAL_NOTIFICATION CTL_CODE(MOUNTMGRCONTROLTYPE, 11, METHOD_BUFFERED, FILE_READ_ACCESS)
|
||||
@@ -0,0 +1,14 @@
|
||||
#define MM_SHARED_USER_DATA_VA 0x7FFE0000
|
||||
|
||||
#define XSTATE_LEGACY_FLOATING_POINT (0)
|
||||
#define XSTATE_LEGACY_SSE (1)
|
||||
#define XSTATE_GSSE (2)
|
||||
#define XSTATE_AVX (XSTATE_GSSE)
|
||||
#define XSTATE_MPX_BNDREGS (3)
|
||||
#define XSTATE_MPX_BNDCSR (4)
|
||||
#define XSTATE_AVX512_KMASK (5)
|
||||
#define XSTATE_AVX512_ZMM_H (6)
|
||||
#define XSTATE_AVX512_ZMM (7)
|
||||
#define XSTATE_IPT (8)
|
||||
#define XSTATE_LWP (62)
|
||||
#define MAXIMUM_XSTATE_FEATURES (64)
|
||||
@@ -0,0 +1,608 @@
|
||||
#define MAX_PREFERRED_LENGTH 0xffffffff //((DWORD) -1)
|
||||
|
||||
#define NERR_Success 0 /* Success */
|
||||
|
||||
/*** NERR_BASE is the base of error codes from network utilities,
|
||||
* chosen to avoid conflict with system and redirector error codes.
|
||||
* 2100 is a value that has been assigned to us by system.
|
||||
*/
|
||||
#define NERR_BASE 2100
|
||||
|
||||
|
||||
/**INTERNAL_ONLY**/
|
||||
|
||||
/***********WARNING ****************
|
||||
*See the comment in lmcons.h for *
|
||||
*info on the allocation of errors *
|
||||
***********************************/
|
||||
|
||||
/***********WARNING ****************
|
||||
*The range 2750-2799 has been *
|
||||
*allocated to the IBM LAN Server *
|
||||
***********************************/
|
||||
|
||||
/***********WARNING ****************
|
||||
*The range 2900-2999 has been *
|
||||
*reserved for Microsoft OEMs *
|
||||
***********************************/
|
||||
|
||||
/**END_INTERNAL**/
|
||||
|
||||
/* UNUSED BASE+0 */
|
||||
/* UNUSED BASE+1 */
|
||||
#define NERR_NetNotStarted (NERR_BASE+2) /* The workstation driver is not installed. */
|
||||
#define NERR_UnknownServer (NERR_BASE+3) /* The server could not be located. */
|
||||
#define NERR_ShareMem (NERR_BASE+4) /* An internal error occurred. The network cannot access a shared memory segment. */
|
||||
|
||||
#define NERR_NoNetworkResource (NERR_BASE+5) /* A network resource shortage occurred . */
|
||||
#define NERR_RemoteOnly (NERR_BASE+6) /* This operation is not supported on workstations. */
|
||||
#define NERR_DevNotRedirected (NERR_BASE+7) /* The device is not connected. */
|
||||
/* NERR_BASE+8 is used for ERROR_CONNECTED_OTHER_PASSWORD */
|
||||
/* NERR_BASE+9 is used for ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT */
|
||||
/* UNUSED BASE+10 */
|
||||
/* UNUSED BASE+11 */
|
||||
/* UNUSED BASE+12 */
|
||||
/* UNUSED BASE+13 */
|
||||
#define NERR_ServerNotStarted (NERR_BASE+14) /* The Server service is not started. */
|
||||
#define NERR_ItemNotFound (NERR_BASE+15) /* The queue is empty. */
|
||||
#define NERR_UnknownDevDir (NERR_BASE+16) /* The device or directory does not exist. */
|
||||
#define NERR_RedirectedPath (NERR_BASE+17) /* The operation is invalid on a redirected resource. */
|
||||
#define NERR_DuplicateShare (NERR_BASE+18) /* The name has already been shared. */
|
||||
#define NERR_NoRoom (NERR_BASE+19) /* The server is currently out of the requested resource. */
|
||||
/* UNUSED BASE+20 */
|
||||
#define NERR_TooManyItems (NERR_BASE+21) /* Requested addition of items exceeds the maximum allowed. */
|
||||
#define NERR_InvalidMaxUsers (NERR_BASE+22) /* The Peer service supports only two simultaneous users. */
|
||||
#define NERR_BufTooSmall (NERR_BASE+23) /* The API return buffer is too small. */
|
||||
/* UNUSED BASE+24 */
|
||||
/* UNUSED BASE+25 */
|
||||
/* UNUSED BASE+26 */
|
||||
#define NERR_RemoteErr (NERR_BASE+27) /* A remote API error occurred. */
|
||||
/* UNUSED BASE+28 */
|
||||
/* UNUSED BASE+29 */
|
||||
/* UNUSED BASE+30 */
|
||||
#define NERR_LanmanIniError (NERR_BASE+31) /* An error occurred when opening or reading the configuration file. */
|
||||
/* UNUSED BASE+32 */
|
||||
/* UNUSED BASE+33 */
|
||||
/* UNUSED BASE+34 */
|
||||
/* UNUSED BASE+35 */
|
||||
#define NERR_NetworkError (NERR_BASE+36) /* A general network error occurred. */
|
||||
#define NERR_WkstaInconsistentState (NERR_BASE+37)
|
||||
/* The Workstation service is in an inconsistent state. Restart the computer before restarting the Workstation service. */
|
||||
#define NERR_WkstaNotStarted (NERR_BASE+38) /* The Workstation service has not been started. */
|
||||
#define NERR_BrowserNotStarted (NERR_BASE+39) /* The requested information is not available. */
|
||||
#define NERR_InternalError (NERR_BASE+40) /* An internal Windows error occurred.*/
|
||||
#define NERR_BadTransactConfig (NERR_BASE+41) /* The server is not configured for transactions. */
|
||||
#define NERR_InvalidAPI (NERR_BASE+42) /* The requested API is not supported on the remote server. */
|
||||
#define NERR_BadEventName (NERR_BASE+43) /* The event name is invalid. */
|
||||
#define NERR_DupNameReboot (NERR_BASE+44) /* The computer name already exists on the network. Change it and restart the computer. */
|
||||
/*
|
||||
* Config API related
|
||||
* Error codes from BASE+45 to BASE+49
|
||||
*/
|
||||
|
||||
/* UNUSED BASE+45 */
|
||||
#define NERR_CfgCompNotFound (NERR_BASE+46) /* The specified component could not be found in the configuration information. */
|
||||
#define NERR_CfgParamNotFound (NERR_BASE+47) /* The specified parameter could not be found in the configuration information. */
|
||||
#define NERR_LineTooLong (NERR_BASE+49) /* A line in the configuration file is too long. */
|
||||
|
||||
/*
|
||||
* Spooler API related
|
||||
* Error codes from BASE+50 to BASE+79
|
||||
*/
|
||||
|
||||
#define NERR_QNotFound (NERR_BASE+50) /* The printer does not exist. */
|
||||
#define NERR_JobNotFound (NERR_BASE+51) /* The print job does not exist. */
|
||||
#define NERR_DestNotFound (NERR_BASE+52) /* The printer destination cannot be found. */
|
||||
#define NERR_DestExists (NERR_BASE+53) /* The printer destination already exists. */
|
||||
#define NERR_QExists (NERR_BASE+54) /* The printer queue already exists. */
|
||||
#define NERR_QNoRoom (NERR_BASE+55) /* No more printers can be added. */
|
||||
#define NERR_JobNoRoom (NERR_BASE+56) /* No more print jobs can be added. */
|
||||
#define NERR_DestNoRoom (NERR_BASE+57) /* No more printer destinations can be added. */
|
||||
#define NERR_DestIdle (NERR_BASE+58) /* This printer destination is idle and cannot accept control operations. */
|
||||
#define NERR_DestInvalidOp (NERR_BASE+59) /* This printer destination request contains an invalid control function. */
|
||||
#define NERR_ProcNoRespond (NERR_BASE+60) /* The print processor is not responding. */
|
||||
#define NERR_SpoolerNotLoaded (NERR_BASE+61) /* The spooler is not running. */
|
||||
#define NERR_DestInvalidState (NERR_BASE+62) /* This operation cannot be performed on the print destination in its current state. */
|
||||
#define NERR_QInvalidState (NERR_BASE+63) /* This operation cannot be performed on the printer queue in its current state. */
|
||||
#define NERR_JobInvalidState (NERR_BASE+64) /* This operation cannot be performed on the print job in its current state. */
|
||||
#define NERR_SpoolNoMemory (NERR_BASE+65) /* A spooler memory allocation failure occurred. */
|
||||
#define NERR_DriverNotFound (NERR_BASE+66) /* The device driver does not exist. */
|
||||
#define NERR_DataTypeInvalid (NERR_BASE+67) /* The data type is not supported by the print processor. */
|
||||
#define NERR_ProcNotFound (NERR_BASE+68) /* The print processor is not installed. */
|
||||
|
||||
/*
|
||||
* Service API related
|
||||
* Error codes from BASE+80 to BASE+99
|
||||
*/
|
||||
|
||||
#define NERR_ServiceTableLocked (NERR_BASE+80) /* The service database is locked. */
|
||||
#define NERR_ServiceTableFull (NERR_BASE+81) /* The service table is full. */
|
||||
#define NERR_ServiceInstalled (NERR_BASE+82) /* The requested service has already been started. */
|
||||
#define NERR_ServiceEntryLocked (NERR_BASE+83) /* The service does not respond to control actions. */
|
||||
#define NERR_ServiceNotInstalled (NERR_BASE+84) /* The service has not been started. */
|
||||
#define NERR_BadServiceName (NERR_BASE+85) /* The service name is invalid. */
|
||||
#define NERR_ServiceCtlTimeout (NERR_BASE+86) /* The service is not responding to the control function. */
|
||||
#define NERR_ServiceCtlBusy (NERR_BASE+87) /* The service control is busy. */
|
||||
#define NERR_BadServiceProgName (NERR_BASE+88) /* The configuration file contains an invalid service program name. */
|
||||
#define NERR_ServiceNotCtrl (NERR_BASE+89) /* The service could not be controlled in its present state. */
|
||||
#define NERR_ServiceKillProc (NERR_BASE+90) /* The service ended abnormally. */
|
||||
#define NERR_ServiceCtlNotValid (NERR_BASE+91) /* The requested pause, continue, or stop is not valid for this service. */
|
||||
#define NERR_NotInDispatchTbl (NERR_BASE+92) /* The service control dispatcher could not find the service name in the dispatch table. */
|
||||
#define NERR_BadControlRecv (NERR_BASE+93) /* The service control dispatcher pipe read failed. */
|
||||
#define NERR_ServiceNotStarting (NERR_BASE+94) /* A thread for the new service could not be created. */
|
||||
|
||||
/*
|
||||
* Wksta and Logon API related
|
||||
* Error codes from BASE+100 to BASE+118
|
||||
*/
|
||||
|
||||
#define NERR_AlreadyLoggedOn (NERR_BASE+100) /* This workstation is already logged on to the local-area network. */
|
||||
#define NERR_NotLoggedOn (NERR_BASE+101) /* The workstation is not logged on to the local-area network. */
|
||||
#define NERR_BadUsername (NERR_BASE+102) /* The user name or group name parameter is invalid. */
|
||||
#define NERR_BadPassword (NERR_BASE+103) /* The password parameter is invalid. */
|
||||
#define NERR_UnableToAddName_W (NERR_BASE+104) /* @W The logon processor did not add the message alias. */
|
||||
#define NERR_UnableToAddName_F (NERR_BASE+105) /* The logon processor did not add the message alias. */
|
||||
#define NERR_UnableToDelName_W (NERR_BASE+106) /* @W The logoff processor did not delete the message alias. */
|
||||
#define NERR_UnableToDelName_F (NERR_BASE+107) /* The logoff processor did not delete the message alias. */
|
||||
/* UNUSED BASE+108 */
|
||||
#define NERR_LogonsPaused (NERR_BASE+109) /* Network logons are paused. */
|
||||
#define NERR_LogonServerConflict (NERR_BASE+110)/* A centralized logon-server conflict occurred. */
|
||||
#define NERR_LogonNoUserPath (NERR_BASE+111) /* The server is configured without a valid user path. */
|
||||
#define NERR_LogonScriptError (NERR_BASE+112) /* An error occurred while loading or running the logon script. */
|
||||
/* UNUSED BASE+113 */
|
||||
#define NERR_StandaloneLogon (NERR_BASE+114) /* The logon server was not specified. Your computer will be logged on as STANDALONE. */
|
||||
#define NERR_LogonServerNotFound (NERR_BASE+115) /* The logon server could not be found. */
|
||||
#define NERR_LogonDomainExists (NERR_BASE+116) /* There is already a logon domain for this computer. */
|
||||
#define NERR_NonValidatedLogon (NERR_BASE+117) /* The logon server could not validate the logon. */
|
||||
|
||||
/*
|
||||
* ACF API related (access, user, group)
|
||||
* Error codes from BASE+119 to BASE+149
|
||||
*/
|
||||
|
||||
#define NERR_ACFNotFound (NERR_BASE+119) /* The security database could not be found. */
|
||||
#define NERR_GroupNotFound (NERR_BASE+120) /* The group name could not be found. */
|
||||
#define NERR_UserNotFound (NERR_BASE+121) /* The user name could not be found. */
|
||||
#define NERR_ResourceNotFound (NERR_BASE+122) /* The resource name could not be found. */
|
||||
#define NERR_GroupExists (NERR_BASE+123) /* The group already exists. */
|
||||
#define NERR_UserExists (NERR_BASE+124) /* The account already exists. */
|
||||
#define NERR_ResourceExists (NERR_BASE+125) /* The resource permission list already exists. */
|
||||
#define NERR_NotPrimary (NERR_BASE+126) /* This operation is only allowed on the primary domain controller of the domain. */
|
||||
#define NERR_ACFNotLoaded (NERR_BASE+127) /* The security database has not been started. */
|
||||
#define NERR_ACFNoRoom (NERR_BASE+128) /* There are too many names in the user accounts database. */
|
||||
#define NERR_ACFFileIOFail (NERR_BASE+129) /* A disk I/O failure occurred.*/
|
||||
#define NERR_ACFTooManyLists (NERR_BASE+130) /* The limit of 64 entries per resource was exceeded. */
|
||||
#define NERR_UserLogon (NERR_BASE+131) /* Deleting a user with a session is not allowed. */
|
||||
#define NERR_ACFNoParent (NERR_BASE+132) /* The parent directory could not be located. */
|
||||
#define NERR_CanNotGrowSegment (NERR_BASE+133) /* Unable to add to the security database session cache segment. */
|
||||
#define NERR_SpeGroupOp (NERR_BASE+134) /* This operation is not allowed on this special group. */
|
||||
#define NERR_NotInCache (NERR_BASE+135) /* This user is not cached in user accounts database session cache. */
|
||||
#define NERR_UserInGroup (NERR_BASE+136) /* The user already belongs to this group. */
|
||||
#define NERR_UserNotInGroup (NERR_BASE+137) /* The user does not belong to this group. */
|
||||
#define NERR_AccountUndefined (NERR_BASE+138) /* This user account is undefined. */
|
||||
#define NERR_AccountExpired (NERR_BASE+139) /* This user account has expired. */
|
||||
#define NERR_InvalidWorkstation (NERR_BASE+140) /* The user is not allowed to log on from this workstation. */
|
||||
#define NERR_InvalidLogonHours (NERR_BASE+141) /* The user is not allowed to log on at this time. */
|
||||
#define NERR_PasswordExpired (NERR_BASE+142) /* The password of this user has expired. */
|
||||
#define NERR_PasswordCantChange (NERR_BASE+143) /* The password of this user cannot change. */
|
||||
#define NERR_PasswordHistConflict (NERR_BASE+144) /* This password cannot be used now. */
|
||||
#define NERR_PasswordTooShort (NERR_BASE+145) /* The password does not meet the password policy requirements. Check the minimum password length, password complexity and password history requirements. */
|
||||
#define NERR_PasswordTooRecent (NERR_BASE+146) /* The password of this user is too recent to change. */
|
||||
#define NERR_InvalidDatabase (NERR_BASE+147) /* The security database is corrupted. */
|
||||
#define NERR_DatabaseUpToDate (NERR_BASE+148) /* No updates are necessary to this replicant network/local security database. */
|
||||
#define NERR_SyncRequired (NERR_BASE+149) /* This replicant database is outdated; synchronization is required. */
|
||||
|
||||
/*
|
||||
* Use API related
|
||||
* Error codes from BASE+150 to BASE+169
|
||||
*/
|
||||
|
||||
#define NERR_UseNotFound (NERR_BASE+150) /* The network connection could not be found. */
|
||||
#define NERR_BadAsgType (NERR_BASE+151) /* This asg_type is invalid. */
|
||||
#define NERR_DeviceIsShared (NERR_BASE+152) /* This device is currently being shared. */
|
||||
#define NERR_SameAsComputerName (NERR_BASE+153) /* The user name may not be same as computer name. */
|
||||
|
||||
|
||||
/*
|
||||
* Message Server related
|
||||
* Error codes BASE+170 to BASE+209
|
||||
*/
|
||||
|
||||
#define NERR_NoComputerName (NERR_BASE+170) /* The computer name could not be added as a message alias. The name may already exist on the network. */
|
||||
#define NERR_MsgAlreadyStarted (NERR_BASE+171) /* The Messenger service is already started. */
|
||||
#define NERR_MsgInitFailed (NERR_BASE+172) /* The Messenger service failed to start. */
|
||||
#define NERR_NameNotFound (NERR_BASE+173) /* The message alias could not be found on the network. */
|
||||
#define NERR_AlreadyForwarded (NERR_BASE+174) /* This message alias has already been forwarded. */
|
||||
#define NERR_AddForwarded (NERR_BASE+175) /* This message alias has been added but is still forwarded. */
|
||||
#define NERR_AlreadyExists (NERR_BASE+176) /* This message alias already exists locally. */
|
||||
#define NERR_TooManyNames (NERR_BASE+177) /* The maximum number of added message aliases has been exceeded. */
|
||||
#define NERR_DelComputerName (NERR_BASE+178) /* The computer name could not be deleted.*/
|
||||
#define NERR_LocalForward (NERR_BASE+179) /* Messages cannot be forwarded back to the same workstation. */
|
||||
#define NERR_GrpMsgProcessor (NERR_BASE+180) /* An error occurred in the domain message processor. */
|
||||
#define NERR_PausedRemote (NERR_BASE+181) /* The message was sent, but the recipient has paused the Messenger service. */
|
||||
#define NERR_BadReceive (NERR_BASE+182) /* The message was sent but not received. */
|
||||
#define NERR_NameInUse (NERR_BASE+183) /* The message alias is currently in use. Try again later. */
|
||||
#define NERR_MsgNotStarted (NERR_BASE+184) /* The Messenger service has not been started. */
|
||||
#define NERR_NotLocalName (NERR_BASE+185) /* The name is not on the local computer. */
|
||||
#define NERR_NoForwardName (NERR_BASE+186) /* The forwarded message alias could not be found on the network. */
|
||||
#define NERR_RemoteFull (NERR_BASE+187) /* The message alias table on the remote station is full. */
|
||||
#define NERR_NameNotForwarded (NERR_BASE+188) /* Messages for this alias are not currently being forwarded. */
|
||||
#define NERR_TruncatedBroadcast (NERR_BASE+189) /* The broadcast message was truncated. */
|
||||
#define NERR_InvalidDevice (NERR_BASE+194) /* This is an invalid device name. */
|
||||
#define NERR_WriteFault (NERR_BASE+195) /* A write fault occurred. */
|
||||
/* UNUSED BASE+196 */
|
||||
#define NERR_DuplicateName (NERR_BASE+197) /* A duplicate message alias exists on the network. */
|
||||
#define NERR_DeleteLater (NERR_BASE+198) /* @W This message alias will be deleted later. */
|
||||
#define NERR_IncompleteDel (NERR_BASE+199) /* The message alias was not successfully deleted from all networks. */
|
||||
#define NERR_MultipleNets (NERR_BASE+200) /* This operation is not supported on computers with multiple networks. */
|
||||
|
||||
/*
|
||||
* Server API related
|
||||
* Error codes BASE+210 to BASE+229
|
||||
*/
|
||||
|
||||
#define NERR_NetNameNotFound (NERR_BASE+210) /* This shared resource does not exist.*/
|
||||
#define NERR_DeviceNotShared (NERR_BASE+211) /* This device is not shared. */
|
||||
#define NERR_ClientNameNotFound (NERR_BASE+212) /* A session does not exist with that computer name. */
|
||||
#define NERR_FileIdNotFound (NERR_BASE+214) /* There is not an open file with that identification number. */
|
||||
#define NERR_ExecFailure (NERR_BASE+215) /* A failure occurred when executing a remote administration command. */
|
||||
#define NERR_TmpFile (NERR_BASE+216) /* A failure occurred when opening a remote temporary file. */
|
||||
#define NERR_TooMuchData (NERR_BASE+217) /* The data returned from a remote administration command has been truncated to 64K. */
|
||||
#define NERR_DeviceShareConflict (NERR_BASE+218) /* This device cannot be shared as both a spooled and a non-spooled resource. */
|
||||
#define NERR_BrowserTableIncomplete (NERR_BASE+219) /* The information in the list of servers may be incorrect. */
|
||||
#define NERR_NotLocalDomain (NERR_BASE+220) /* The computer is not active in this domain. */
|
||||
#define NERR_IsDfsShare (NERR_BASE+221) /* The share must be removed from the Distributed File System before it can be deleted. */
|
||||
|
||||
/*
|
||||
* CharDev API related
|
||||
* Error codes BASE+230 to BASE+249
|
||||
*/
|
||||
|
||||
/* UNUSED BASE+230 */
|
||||
#define NERR_DevInvalidOpCode (NERR_BASE+231) /* The operation is invalid for this device. */
|
||||
#define NERR_DevNotFound (NERR_BASE+232) /* This device cannot be shared. */
|
||||
#define NERR_DevNotOpen (NERR_BASE+233) /* This device was not open. */
|
||||
#define NERR_BadQueueDevString (NERR_BASE+234) /* This device name list is invalid. */
|
||||
#define NERR_BadQueuePriority (NERR_BASE+235) /* The queue priority is invalid. */
|
||||
#define NERR_NoCommDevs (NERR_BASE+237) /* There are no shared communication devices. */
|
||||
#define NERR_QueueNotFound (NERR_BASE+238) /* The queue you specified does not exist. */
|
||||
#define NERR_BadDevString (NERR_BASE+240) /* This list of devices is invalid. */
|
||||
#define NERR_BadDev (NERR_BASE+241) /* The requested device is invalid. */
|
||||
#define NERR_InUseBySpooler (NERR_BASE+242) /* This device is already in use by the spooler. */
|
||||
#define NERR_CommDevInUse (NERR_BASE+243) /* This device is already in use as a communication device. */
|
||||
|
||||
/*
|
||||
* NetICanonicalize and NetIType and NetIMakeLMFileName
|
||||
* NetIListCanon and NetINameCheck
|
||||
* Error codes BASE+250 to BASE+269
|
||||
*/
|
||||
|
||||
#define NERR_InvalidComputer (NERR_BASE+251) /* This computer name is invalid. */
|
||||
/* UNUSED BASE+252 */
|
||||
/* UNUSED BASE+253 */
|
||||
#define NERR_MaxLenExceeded (NERR_BASE+254) /* The string and prefix specified are too long. */
|
||||
/* UNUSED BASE+255 */
|
||||
#define NERR_BadComponent (NERR_BASE+256) /* This path component is invalid. */
|
||||
#define NERR_CantType (NERR_BASE+257) /* Could not determine the type of input. */
|
||||
/* UNUSED BASE+258 */
|
||||
/* UNUSED BASE+259 */
|
||||
#define NERR_TooManyEntries (NERR_BASE+262) /* The buffer for types is not big enough. */
|
||||
|
||||
/*
|
||||
* NetProfile
|
||||
* Error codes BASE+270 to BASE+276
|
||||
*/
|
||||
|
||||
#define NERR_ProfileFileTooBig (NERR_BASE+270) /* Profile files cannot exceed 64K. */
|
||||
#define NERR_ProfileOffset (NERR_BASE+271) /* The start offset is out of range. */
|
||||
#define NERR_ProfileCleanup (NERR_BASE+272) /* The system cannot delete current connections to network resources. */
|
||||
#define NERR_ProfileUnknownCmd (NERR_BASE+273) /* The system was unable to parse the command line in this file.*/
|
||||
#define NERR_ProfileLoadErr (NERR_BASE+274) /* An error occurred while loading the profile file. */
|
||||
#define NERR_ProfileSaveErr (NERR_BASE+275) /* @W Errors occurred while saving the profile file. The profile was partially saved. */
|
||||
|
||||
|
||||
/*
|
||||
* NetAudit and NetErrorLog
|
||||
* Error codes BASE+277 to BASE+279
|
||||
*/
|
||||
|
||||
#define NERR_LogOverflow (NERR_BASE+277) /* Log file %1 is full. */
|
||||
#define NERR_LogFileChanged (NERR_BASE+278) /* This log file has changed between reads. */
|
||||
#define NERR_LogFileCorrupt (NERR_BASE+279) /* Log file %1 is corrupt. */
|
||||
|
||||
|
||||
/*
|
||||
* NetRemote
|
||||
* Error codes BASE+280 to BASE+299
|
||||
*/
|
||||
#define NERR_SourceIsDir (NERR_BASE+280) /* The source path cannot be a directory. */
|
||||
#define NERR_BadSource (NERR_BASE+281) /* The source path is illegal. */
|
||||
#define NERR_BadDest (NERR_BASE+282) /* The destination path is illegal. */
|
||||
#define NERR_DifferentServers (NERR_BASE+283) /* The source and destination paths are on different servers. */
|
||||
/* UNUSED BASE+284 */
|
||||
#define NERR_RunSrvPaused (NERR_BASE+285) /* The Run server you requested is paused. */
|
||||
/* UNUSED BASE+286 */
|
||||
/* UNUSED BASE+287 */
|
||||
/* UNUSED BASE+288 */
|
||||
#define NERR_ErrCommRunSrv (NERR_BASE+289) /* An error occurred when communicating with a Run server. */
|
||||
/* UNUSED BASE+290 */
|
||||
#define NERR_ErrorExecingGhost (NERR_BASE+291) /* An error occurred when starting a background process. */
|
||||
#define NERR_ShareNotFound (NERR_BASE+292) /* The shared resource you are connected to could not be found.*/
|
||||
/* UNUSED BASE+293 */
|
||||
/* UNUSED BASE+294 */
|
||||
|
||||
|
||||
/*
|
||||
* NetWksta.sys (redir) returned error codes.
|
||||
*
|
||||
* NERR_BASE + (300-329)
|
||||
*/
|
||||
|
||||
#define NERR_InvalidLana (NERR_BASE+300) /* The LAN adapter number is invalid. */
|
||||
#define NERR_OpenFiles (NERR_BASE+301) /* There are open files on the connection. */
|
||||
#define NERR_ActiveConns (NERR_BASE+302) /* Active connections still exist. */
|
||||
#define NERR_BadPasswordCore (NERR_BASE+303) /* This share name or password is invalid. */
|
||||
#define NERR_DevInUse (NERR_BASE+304) /* The device is being accessed by an active process. */
|
||||
#define NERR_LocalDrive (NERR_BASE+305) /* The drive letter is in use locally. */
|
||||
|
||||
/*
|
||||
* Alert error codes.
|
||||
*
|
||||
* NERR_BASE + (330-339)
|
||||
*/
|
||||
#define NERR_AlertExists (NERR_BASE+330) /* The specified client is already registered for the specified event. */
|
||||
#define NERR_TooManyAlerts (NERR_BASE+331) /* The alert table is full. */
|
||||
#define NERR_NoSuchAlert (NERR_BASE+332) /* An invalid or nonexistent alert name was raised. */
|
||||
#define NERR_BadRecipient (NERR_BASE+333) /* The alert recipient is invalid.*/
|
||||
#define NERR_AcctLimitExceeded (NERR_BASE+334) /* A user's session with this server has been deleted
|
||||
* because the user's logon hours are no longer valid. */
|
||||
|
||||
/*
|
||||
* Additional Error and Audit log codes.
|
||||
*
|
||||
* NERR_BASE +(340-343)
|
||||
*/
|
||||
#define NERR_InvalidLogSeek (NERR_BASE+340) /* The log file does not contain the requested record number. */
|
||||
/* UNUSED BASE+341 */
|
||||
/* UNUSED BASE+342 */
|
||||
/* UNUSED BASE+343 */
|
||||
|
||||
/*
|
||||
* Additional UAS and NETLOGON codes
|
||||
*
|
||||
* NERR_BASE +(350-359)
|
||||
*/
|
||||
#define NERR_BadUasConfig (NERR_BASE+350) /* The user accounts database is not configured correctly. */
|
||||
#define NERR_InvalidUASOp (NERR_BASE+351) /* This operation is not permitted when the Netlogon service is running. */
|
||||
#define NERR_LastAdmin (NERR_BASE+352) /* This operation is not allowed on the last administrative account. */
|
||||
#define NERR_DCNotFound (NERR_BASE+353) /* Could not find domain controller for this domain. */
|
||||
#define NERR_LogonTrackingError (NERR_BASE+354) /* Could not set logon information for this user. */
|
||||
#define NERR_NetlogonNotStarted (NERR_BASE+355) /* The Netlogon service has not been started. */
|
||||
#define NERR_CanNotGrowUASFile (NERR_BASE+356) /* Unable to add to the user accounts database. */
|
||||
#define NERR_TimeDiffAtDC (NERR_BASE+357) /* This server's clock is not synchronized with the primary domain controller's clock. */
|
||||
#define NERR_PasswordMismatch (NERR_BASE+358) /* A password mismatch has been detected. */
|
||||
|
||||
|
||||
/*
|
||||
* Server Integration error codes.
|
||||
*
|
||||
* NERR_BASE +(360-369)
|
||||
*/
|
||||
#define NERR_NoSuchServer (NERR_BASE+360) /* The server identification does not specify a valid server. */
|
||||
#define NERR_NoSuchSession (NERR_BASE+361) /* The session identification does not specify a valid session. */
|
||||
#define NERR_NoSuchConnection (NERR_BASE+362) /* The connection identification does not specify a valid connection. */
|
||||
#define NERR_TooManyServers (NERR_BASE+363) /* There is no space for another entry in the table of available servers. */
|
||||
#define NERR_TooManySessions (NERR_BASE+364) /* The server has reached the maximum number of sessions it supports. */
|
||||
#define NERR_TooManyConnections (NERR_BASE+365) /* The server has reached the maximum number of connections it supports. */
|
||||
#define NERR_TooManyFiles (NERR_BASE+366) /* The server cannot open more files because it has reached its maximum number. */
|
||||
#define NERR_NoAlternateServers (NERR_BASE+367) /* There are no alternate servers registered on this server. */
|
||||
/* UNUSED BASE+368 */
|
||||
/* UNUSED BASE+369 */
|
||||
|
||||
#define NERR_TryDownLevel (NERR_BASE+370) /* Try down-level (remote admin protocol) version of API instead. */
|
||||
|
||||
/*
|
||||
* UPS error codes.
|
||||
*
|
||||
* NERR_BASE + (380-384)
|
||||
*/
|
||||
#define NERR_UPSDriverNotStarted (NERR_BASE+380) /* The UPS driver could not be accessed by the UPS service. */
|
||||
#define NERR_UPSInvalidConfig (NERR_BASE+381) /* The UPS service is not configured correctly. */
|
||||
#define NERR_UPSInvalidCommPort (NERR_BASE+382) /* The UPS service could not access the specified Comm Port. */
|
||||
#define NERR_UPSSignalAsserted (NERR_BASE+383) /* The UPS indicated a line fail or low battery situation. Service not started. */
|
||||
#define NERR_UPSShutdownFailed (NERR_BASE+384) /* The UPS service failed to perform a system shut down. */
|
||||
|
||||
/*
|
||||
* Remoteboot error codes.
|
||||
*
|
||||
* NERR_BASE + (400-419)
|
||||
* Error codes 400 - 405 are used by RPLBOOT.SYS.
|
||||
* Error codes 403, 407 - 416 are used by RPLLOADR.COM,
|
||||
* Error code 417 is the alerter message of REMOTEBOOT (RPLSERVR.EXE).
|
||||
* Error code 418 is for when REMOTEBOOT can't start
|
||||
* Error code 419 is for a disallowed 2nd rpl connection
|
||||
*
|
||||
*/
|
||||
#define NERR_BadDosRetCode (NERR_BASE+400) /* The program below returned an MS-DOS error code:*/
|
||||
#define NERR_ProgNeedsExtraMem (NERR_BASE+401) /* The program below needs more memory:*/
|
||||
#define NERR_BadDosFunction (NERR_BASE+402) /* The program below called an unsupported MS-DOS function:*/
|
||||
#define NERR_RemoteBootFailed (NERR_BASE+403) /* The workstation failed to boot.*/
|
||||
#define NERR_BadFileCheckSum (NERR_BASE+404) /* The file below is corrupt.*/
|
||||
#define NERR_NoRplBootSystem (NERR_BASE+405) /* No loader is specified in the boot-block definition file.*/
|
||||
#define NERR_RplLoadrNetBiosErr (NERR_BASE+406) /* NetBIOS returned an error: The NCB and SMB are dumped above.*/
|
||||
#define NERR_RplLoadrDiskErr (NERR_BASE+407) /* A disk I/O error occurred.*/
|
||||
#define NERR_ImageParamErr (NERR_BASE+408) /* Image parameter substitution failed.*/
|
||||
#define NERR_TooManyImageParams (NERR_BASE+409) /* Too many image parameters cross disk sector boundaries.*/
|
||||
#define NERR_NonDosFloppyUsed (NERR_BASE+410) /* The image was not generated from an MS-DOS diskette formatted with /S.*/
|
||||
#define NERR_RplBootRestart (NERR_BASE+411) /* Remote boot will be restarted later.*/
|
||||
#define NERR_RplSrvrCallFailed (NERR_BASE+412) /* The call to the Remoteboot server failed.*/
|
||||
#define NERR_CantConnectRplSrvr (NERR_BASE+413) /* Cannot connect to the Remoteboot server.*/
|
||||
#define NERR_CantOpenImageFile (NERR_BASE+414) /* Cannot open image file on the Remoteboot server.*/
|
||||
#define NERR_CallingRplSrvr (NERR_BASE+415) /* Connecting to the Remoteboot server...*/
|
||||
#define NERR_StartingRplBoot (NERR_BASE+416) /* Connecting to the Remoteboot server...*/
|
||||
#define NERR_RplBootServiceTerm (NERR_BASE+417) /* Remote boot service was stopped; check the error log for the cause of the problem.*/
|
||||
#define NERR_RplBootStartFailed (NERR_BASE+418) /* Remote boot startup failed; check the error log for the cause of the problem.*/
|
||||
#define NERR_RPL_CONNECTED (NERR_BASE+419) /* A second connection to a Remoteboot resource is not allowed.*/
|
||||
|
||||
/*
|
||||
* FTADMIN API error codes
|
||||
*
|
||||
* NERR_BASE + (425-434)
|
||||
*
|
||||
* (Currently not used in NT)
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Browser service API error codes
|
||||
*
|
||||
* NERR_BASE + (450-475)
|
||||
*
|
||||
*/
|
||||
#define NERR_BrowserConfiguredToNotRun (NERR_BASE+450) /* The browser service was configured with MaintainServerList=No. */
|
||||
|
||||
/*
|
||||
* Additional Remoteboot error codes.
|
||||
*
|
||||
* NERR_BASE + (510-550)
|
||||
*/
|
||||
#define NERR_RplNoAdaptersStarted (NERR_BASE+510) /*Service failed to start since none of the network adapters started with this service.*/
|
||||
#define NERR_RplBadRegistry (NERR_BASE+511) /*Service failed to start due to bad startup information in the registry.*/
|
||||
#define NERR_RplBadDatabase (NERR_BASE+512) /*Service failed to start because its database is absent or corrupt.*/
|
||||
#define NERR_RplRplfilesShare (NERR_BASE+513) /*Service failed to start because RPLFILES share is absent.*/
|
||||
#define NERR_RplNotRplServer (NERR_BASE+514) /*Service failed to start because RPLUSER group is absent.*/
|
||||
#define NERR_RplCannotEnum (NERR_BASE+515) /*Cannot enumerate service records.*/
|
||||
#define NERR_RplWkstaInfoCorrupted (NERR_BASE+516) /*Workstation record information has been corrupted.*/
|
||||
#define NERR_RplWkstaNotFound (NERR_BASE+517) /*Workstation record was not found.*/
|
||||
#define NERR_RplWkstaNameUnavailable (NERR_BASE+518) /*Workstation name is in use by some other workstation.*/
|
||||
#define NERR_RplProfileInfoCorrupted (NERR_BASE+519) /*Profile record information has been corrupted.*/
|
||||
#define NERR_RplProfileNotFound (NERR_BASE+520) /*Profile record was not found.*/
|
||||
#define NERR_RplProfileNameUnavailable (NERR_BASE+521) /*Profile name is in use by some other profile.*/
|
||||
#define NERR_RplProfileNotEmpty (NERR_BASE+522) /*There are workstations using this profile.*/
|
||||
#define NERR_RplConfigInfoCorrupted (NERR_BASE+523) /*Configuration record information has been corrupted.*/
|
||||
#define NERR_RplConfigNotFound (NERR_BASE+524) /*Configuration record was not found.*/
|
||||
#define NERR_RplAdapterInfoCorrupted (NERR_BASE+525) /*Adapter id record information has been corrupted.*/
|
||||
#define NERR_RplInternal (NERR_BASE+526) /*An internal service error has occurred.*/
|
||||
#define NERR_RplVendorInfoCorrupted (NERR_BASE+527) /*Vendor id record information has been corrupted.*/
|
||||
#define NERR_RplBootInfoCorrupted (NERR_BASE+528) /*Boot block record information has been corrupted.*/
|
||||
#define NERR_RplWkstaNeedsUserAcct (NERR_BASE+529) /*The user account for this workstation record is missing.*/
|
||||
#define NERR_RplNeedsRPLUSERAcct (NERR_BASE+530) /*The RPLUSER local group could not be found.*/
|
||||
#define NERR_RplBootNotFound (NERR_BASE+531) /*Boot block record was not found.*/
|
||||
#define NERR_RplIncompatibleProfile (NERR_BASE+532) /*Chosen profile is incompatible with this workstation.*/
|
||||
#define NERR_RplAdapterNameUnavailable (NERR_BASE+533) /*Chosen network adapter id is in use by some other workstation.*/
|
||||
#define NERR_RplConfigNotEmpty (NERR_BASE+534) /*There are profiles using this configuration.*/
|
||||
#define NERR_RplBootInUse (NERR_BASE+535) /*There are workstations, profiles or configurations using this boot block.*/
|
||||
#define NERR_RplBackupDatabase (NERR_BASE+536) /*Service failed to backup Remoteboot database.*/
|
||||
#define NERR_RplAdapterNotFound (NERR_BASE+537) /*Adapter record was not found.*/
|
||||
#define NERR_RplVendorNotFound (NERR_BASE+538) /*Vendor record was not found.*/
|
||||
#define NERR_RplVendorNameUnavailable (NERR_BASE+539) /*Vendor name is in use by some other vendor record.*/
|
||||
#define NERR_RplBootNameUnavailable (NERR_BASE+540) /*(boot name, vendor id) is in use by some other boot block record.*/
|
||||
#define NERR_RplConfigNameUnavailable (NERR_BASE+541) /*Configuration name is in use by some other configuration.*/
|
||||
|
||||
/**INTERNAL_ONLY**/
|
||||
|
||||
/*
|
||||
* Dfs API error codes.
|
||||
*
|
||||
* NERR_BASE + (560-590)
|
||||
*/
|
||||
|
||||
#define NERR_DfsInternalCorruption (NERR_BASE+560) /*The internal database maintained by the DFS service is corrupt*/
|
||||
#define NERR_DfsVolumeDataCorrupt (NERR_BASE+561) /*One of the records in the internal DFS database is corrupt*/
|
||||
#define NERR_DfsNoSuchVolume (NERR_BASE+562) /*There is no DFS name whose entry path matches the input Entry Path*/
|
||||
#define NERR_DfsVolumeAlreadyExists (NERR_BASE+563) /*A root or link with the given name already exists*/
|
||||
#define NERR_DfsAlreadyShared (NERR_BASE+564) /*The server share specified is already shared in the DFS*/
|
||||
#define NERR_DfsNoSuchShare (NERR_BASE+565) /*The indicated server share does not support the indicated DFS namespace*/
|
||||
#define NERR_DfsNotALeafVolume (NERR_BASE+566) /*The operation is not valid on this portion of the namespace*/
|
||||
#define NERR_DfsLeafVolume (NERR_BASE+567) /*The operation is not valid on this portion of the namespace*/
|
||||
#define NERR_DfsVolumeHasMultipleServers (NERR_BASE+568) /*The operation is ambiguous because the link has multiple servers*/
|
||||
#define NERR_DfsCantCreateJunctionPoint (NERR_BASE+569) /*Unable to create a link*/
|
||||
#define NERR_DfsServerNotDfsAware (NERR_BASE+570) /*The server is not DFS Aware*/
|
||||
#define NERR_DfsBadRenamePath (NERR_BASE+571) /*The specified rename target path is invalid*/
|
||||
#define NERR_DfsVolumeIsOffline (NERR_BASE+572) /*The specified DFS link is offline*/
|
||||
#define NERR_DfsNoSuchServer (NERR_BASE+573) /*The specified server is not a server for this link*/
|
||||
#define NERR_DfsCyclicalName (NERR_BASE+574) /*A cycle in the DFS name was detected*/
|
||||
#define NERR_DfsNotSupportedInServerDfs (NERR_BASE+575) /*The operation is not supported on a server-based DFS*/
|
||||
#define NERR_DfsDuplicateService (NERR_BASE+576) /*This link is already supported by the specified server-share*/
|
||||
#define NERR_DfsCantRemoveLastServerShare (NERR_BASE+577) /*Can't remove the last server-share supporting this root or link*/
|
||||
#define NERR_DfsVolumeIsInterDfs (NERR_BASE+578) /*The operation is not supported for an Inter-DFS link*/
|
||||
#define NERR_DfsInconsistent (NERR_BASE+579) /*The internal state of the DFS Service has become inconsistent*/
|
||||
#define NERR_DfsServerUpgraded (NERR_BASE+580) /*The DFS Service has been installed on the specified server*/
|
||||
#define NERR_DfsDataIsIdentical (NERR_BASE+581) /*The DFS data being reconciled is identical*/
|
||||
#define NERR_DfsCantRemoveDfsRoot (NERR_BASE+582) /*The DFS root cannot be deleted - Uninstall DFS if required*/
|
||||
#define NERR_DfsChildOrParentInDfs (NERR_BASE+583) /*A child or parent directory of the share is already in a DFS*/
|
||||
#define NERR_DfsInternalError (NERR_BASE+590) /*DFS internal error*/
|
||||
|
||||
/*
|
||||
* Net setup error codes.
|
||||
*
|
||||
* NERR_BASE + (591-600)
|
||||
*/
|
||||
#define NERR_SetupAlreadyJoined (NERR_BASE+591) /*This machine is already joined to a domain.*/
|
||||
#define NERR_SetupNotJoined (NERR_BASE+592) /*This machine is not currently joined to a domain.*/
|
||||
#define NERR_SetupDomainController (NERR_BASE+593) /*This machine is a domain controller and cannot be unjoined from a domain.*/
|
||||
#define NERR_DefaultJoinRequired (NERR_BASE+594) /*The destination domain controller does not support creating machine accounts in OUs.*/
|
||||
#define NERR_InvalidWorkgroupName (NERR_BASE+595) /*The specified workgroup name is invalid.*/
|
||||
#define NERR_NameUsesIncompatibleCodePage (NERR_BASE+596) /*The specified computer name is incompatible with the default language used on the domain controller.*/
|
||||
#define NERR_ComputerAccountNotFound (NERR_BASE+597) /*The specified computer account could not be found. Contact an administrator to verify the account is in the domain. If the account has been deleted unjoin, reboot, and rejoin the domain.*/
|
||||
#define NERR_PersonalSku (NERR_BASE+598) /*This version of Windows cannot be joined to a domain.*/
|
||||
#define NERR_SetupCheckDNSConfig (NERR_BASE+599) /*An attempt to resolve the DNS name of a domain controller in the domain being joined has failed. Please verify this client is configured to reach a DNS server that can resolve DNS names in the target domain. For information about network troubleshooting, see Windows Help.*/
|
||||
#define NERR_AlreadyCloudDomainJoined (NERR_BASE+600) /*This device is joined to Azure AD. To join an Active Directory domain, you must first go to settings and choose to disconnect your device from your work or school.*/
|
||||
|
||||
/*
|
||||
* Some Password and account error results
|
||||
*
|
||||
* NERR_BASE + (601 - 608)
|
||||
*/
|
||||
#define NERR_PasswordMustChange (NERR_BASE + 601) /* Password must change at next logon */
|
||||
#define NERR_AccountLockedOut (NERR_BASE + 602) /* Account is locked out */
|
||||
#define NERR_PasswordTooLong (NERR_BASE + 603) /* Password is too long */
|
||||
#define NERR_PasswordNotComplexEnough (NERR_BASE + 604) /* Password doesn't meet the complexity policy */
|
||||
#define NERR_PasswordFilterError (NERR_BASE + 605) /* Password doesn't meet the requirements of the filter dll's */
|
||||
|
||||
/*
|
||||
* Error codes used for offline domain join and completion
|
||||
*
|
||||
* NERR_BASE + (609 - 621)
|
||||
*/
|
||||
#define NERR_NoOfflineJoinInfo (NERR_BASE + 609) /* Offline join completion information was not found. */
|
||||
#define NERR_BadOfflineJoinInfo (NERR_BASE + 610) /* The offline join completion information was bad. */
|
||||
#define NERR_CantCreateJoinInfo (NERR_BASE + 611) /* Unable to create offline join information. Please ensure you have access to the specified path location and permissions to modify its contents. Running as an elevated administrator may be required. */
|
||||
#define NERR_BadDomainJoinInfo (NERR_BASE + 612) /* The domain join info being saved was incomplete or bad. */
|
||||
#define NERR_JoinPerformedMustRestart (NERR_BASE + 613) /* Offline join operation successfully completed but a restart is needed. */
|
||||
#define NERR_NoJoinPending (NERR_BASE + 614) /* There was no offline join operation pending. */
|
||||
#define NERR_ValuesNotSet (NERR_BASE + 615) /* Unable to set one or more requested machine or domain name values on the local computer. */
|
||||
#define NERR_CantVerifyHostname (NERR_BASE + 616) /* Could not verify the current machine's hostname against the saved value in the join completion information. */
|
||||
#define NERR_CantLoadOfflineHive (NERR_BASE + 617) /* Unable to load the specified offline registry hive. Please ensure you have access to the specified path location and permissions to modify its contents. Running as an elevated administrator may be required. */
|
||||
#define NERR_ConnectionInsecure (NERR_BASE + 618) /* The minimum session security requirements for this operation were not met. */
|
||||
#define NERR_ProvisioningBlobUnsupported (NERR_BASE + 619) /* Computer account provisioning blob version is not supported. */
|
||||
#define NERR_DS8DCRequired (NERR_BASE + 620) /* The specified domain controller does not meet the version requirement for this operation. Please select a domain controller capable of issuing claims. */
|
||||
#define NERR_LDAPCapableDCRequired (NERR_BASE + 621) /* This operation requires a domain controller which supports LDAP. Please select an LDAP-capable domain controller. */
|
||||
#define NERR_DS8DCNotFound (NERR_BASE + 622) /* A domain controller which meets the version requirement for this operation could not be located. Please ensure that a domain controller capable of issuing claims is available. */
|
||||
#define NERR_TargetVersionUnsupported (NERR_BASE + 623) /* The Windows version of the specified image does not support provisioning. */
|
||||
#define NERR_InvalidMachineNameForJoin (NERR_BASE + 624) /* The machine name is blocked from joining the domain.*/
|
||||
#define NERR_DS9DCNotFound (NERR_BASE + 625) /* The domain controller does not meet the version requirement for this operation. See http://go.microsoft.com/fwlink/?LinkId=294288 for more information. */
|
||||
#define NERR_PlainTextSecretsRequired (NERR_BASE + 626) /* The local machine does not allow querying of LSA secrets in plain-text. */
|
||||
#define NERR_CannotUnjoinAadDomain (NERR_BASE + 627) /* Unable to leave the Azure AD domain that this machine is joined to. Check the event log for detailed error information. */
|
||||
|
||||
|
||||
/***********WARNING ****************
|
||||
*The range 2750-2799 has been *
|
||||
*allocated to the IBM LAN Server *
|
||||
***********************************/
|
||||
|
||||
/***********WARNING ****************
|
||||
*The range 2900-2999 has been *
|
||||
*reserved for Microsoft OEMs *
|
||||
***********************************/
|
||||
|
||||
/**END_INTERNAL**/
|
||||
|
||||
#define MAX_NERR (NERR_BASE+899) /* This is the last error in NERR range. */
|
||||
|
||||
/*
|
||||
* end of list
|
||||
*
|
||||
* WARNING: Do not exceed MAX_NERR; values above this are used by
|
||||
* other error code ranges (errlog.h, service.h, apperr.h).
|
||||
*/
|
||||
@@ -8,6 +8,8 @@
|
||||
#define DNS_ATMA_MAX_ADDR_LENGTH ATM_ADDR_SIZE
|
||||
|
||||
|
||||
#define DNS_ADDR_MAX_SOCKADDR_LENGTH (32)
|
||||
|
||||
#define DNS_TYPE_ZERO 0x0000
|
||||
|
||||
// RFC 1034/1035
|
||||
@@ -174,3 +176,16 @@
|
||||
#define DNS_QUERY_DNSSEC_CHECKING_DISABLED 0x02000000
|
||||
#define DNS_QUERY_RESERVED 0xf0000000
|
||||
|
||||
|
||||
/** IPTypes.h **/
|
||||
// Definitions and structures used by getnetworkparams and getadaptersinfo apis
|
||||
|
||||
#define MAX_ADAPTER_DESCRIPTION_LENGTH 128 // arb.
|
||||
#define MAX_ADAPTER_NAME_LENGTH 256 // arb.
|
||||
#define MAX_ADAPTER_ADDRESS_LENGTH 8 // arb.
|
||||
#define DEFAULT_MINIMUM_ENTITIES 32 // arb.
|
||||
#define MAX_HOSTNAME_LEN 128 // arb.
|
||||
#define MAX_DOMAIN_NAME_LEN 128 // arb.
|
||||
#define MAX_SCOPE_ID_LEN 256 // arb.
|
||||
#define MAX_DHCPV6_DUID_LENGTH 130 // RFC 3315.
|
||||
#define MAX_DNS_SUFFIX_STRING_LENGTH 256
|
||||
@@ -8,4 +8,39 @@
|
||||
|
||||
#define HKEY_CURRENT_CONFIG (0x80000005)
|
||||
#define HKEY_DYN_DATA (0x80000006)
|
||||
#define HKEY_CURRENT_USER_LOCAL_SETTINGS (0x80000007)
|
||||
#define HKEY_CURRENT_USER_LOCAL_SETTINGS (0x80000007)
|
||||
|
||||
/* From: public/sdk/inc/ntregapi.h */
|
||||
|
||||
#define REG_OPTION_RESERVED (0x00000000L) // Parameter is reserved
|
||||
|
||||
#define REG_OPTION_NON_VOLATILE (0x00000000L) // Key is preserved
|
||||
// when system is rebooted
|
||||
|
||||
#define REG_OPTION_VOLATILE (0x00000001L) // Key is not preserved
|
||||
// when system is rebooted
|
||||
|
||||
#define REG_OPTION_CREATE_LINK (0x00000002L) // Created key is a
|
||||
// symbolic link
|
||||
|
||||
#define REG_OPTION_BACKUP_RESTORE (0x00000004L) // open for backup or restore
|
||||
// special access rules
|
||||
// privilege required
|
||||
|
||||
#define REG_OPTION_OPEN_LINK (0x00000008L) // Open symbolic link
|
||||
|
||||
#define REG_LEGAL_OPTION \
|
||||
(REG_OPTION_RESERVED |\
|
||||
REG_OPTION_NON_VOLATILE |\
|
||||
REG_OPTION_VOLATILE |\
|
||||
REG_OPTION_CREATE_LINK |\
|
||||
REG_OPTION_BACKUP_RESTORE |\
|
||||
REG_OPTION_OPEN_LINK)
|
||||
|
||||
|
||||
//
|
||||
// hive format to be used by Reg(Nt)SaveKeyEx
|
||||
//
|
||||
#define REG_STANDARD_FORMAT 1
|
||||
#define REG_LATEST_FORMAT 2
|
||||
#define REG_NO_COMPRESSION 4
|
||||
@@ -23,7 +23,6 @@
|
||||
#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)
|
||||
@@ -121,4 +120,6 @@
|
||||
#define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L)
|
||||
#define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L)
|
||||
#define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L)
|
||||
#define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L)
|
||||
#define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L)
|
||||
|
||||
#define SECURITY_DESCRIPTOR_REVISION 1
|
||||
@@ -35,16 +35,35 @@
|
||||
#define SERVICE_WIN32_OWN_PROCESS 0x00000010
|
||||
#define SERVICE_WIN32_SHARE_PROCESS 0x00000020
|
||||
|
||||
#define SERVICE_USER_OWN_PROCESS 0x00000050
|
||||
#define SERVICE_USER_SHARE_PROCESS 0x00000060
|
||||
|
||||
#define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS)
|
||||
|
||||
#define SERVICE_INTERACTIVE_PROCESS 0x00000100
|
||||
|
||||
/*
|
||||
Legacy value changed with Win10 build 14942
|
||||
https://github.com/processhacker/processhacker/issues/120
|
||||
*/
|
||||
#define SERVICE_TYPE_ALL (SERVICE_WIN32 | SERVICE_ADAPTER | SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS)
|
||||
|
||||
|
||||
/* New service Type from Win10 build 14942 */
|
||||
|
||||
#define SERVICE_USER_SERVICE 0x00000040
|
||||
#define SERVICE_USERSERVICE_INSTANCE 0x00000080
|
||||
#define SERVICE_USER_SHARE_PROCESS (SERVICE_USER_SERVICE |
|
||||
SERVICE_WIN32_SHARE_PROCESS)
|
||||
#define SERVICE_USER_OWN_PROCESS (SERVICE_USER_SERVICE |
|
||||
SERVICE_WIN32_OWN_PROCESS)
|
||||
#define SERVICE_PKG_SERVICE 0x00000200
|
||||
|
||||
|
||||
/* Make a value for the new SERVICE_TYPE_ALL ? */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#define SERVICE_BOOT_START 0x00000000
|
||||
#define SERVICE_SYSTEM_START 0x00000001
|
||||
#define SERVICE_AUTO_START 0x00000002
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
// Shell File Operations
|
||||
|
||||
#define FO_MOVE 0x0001
|
||||
#define FO_COPY 0x0002
|
||||
#define FO_DELETE 0x0003
|
||||
#define FO_RENAME 0x0004
|
||||
|
||||
|
||||
#define FOF_MULTIDESTFILES 0x0001
|
||||
#define FOF_CONFIRMMOUSE 0x0002
|
||||
#define FOF_SILENT 0x0004 // don't display progress UI (confirm prompts may be displayed still)
|
||||
#define FOF_RENAMEONCOLLISION 0x0008 // automatically rename the source files to avoid the collisions
|
||||
#define FOF_NOCONFIRMATION 0x0010 // don't display confirmation UI, assume "yes" for cases that can be bypassed, "no" for those that can not
|
||||
#define FOF_WANTMAPPINGHANDLE 0x0020 // Fill in SHFILEOPSTRUCT.hNameMappings
|
||||
// Must be freed using SHFreeNameMappings
|
||||
#define FOF_ALLOWUNDO 0x0040 // enable undo including Recycle behavior for IFileOperation::Delete()
|
||||
#define FOF_FILESONLY 0x0080 // only operate on the files (non folders), both files and folders are assumed without this
|
||||
#define FOF_SIMPLEPROGRESS 0x0100 // means don't show names of files
|
||||
#define FOF_NOCONFIRMMKDIR 0x0200 // don't dispplay confirmatino UI before making any needed directories, assume "Yes" in these cases
|
||||
#define FOF_NOERRORUI 0x0400 // don't put up error UI, other UI may be displayed, progress, confirmations
|
||||
#define FOF_NOCOPYSECURITYATTRIBS 0x0800 // dont copy file security attributes (ACLs)
|
||||
#define FOF_NORECURSION 0x1000 // don't recurse into directories for operations that would recurse
|
||||
#define FOF_NO_CONNECTED_ELEMENTS 0x2000 // don't operate on connected elements ("xxx_files" folders that go with .htm files)
|
||||
#define FOF_WANTNUKEWARNING 0x4000 // during delete operation, warn if object is being permanently destroyed instead of recycling (partially overrides FOF_NOCONFIRMATION)
|
||||
#define FOF_NORECURSEREPARSE 0x8000 // deprecated; the operations engine always does the right thing on FolderLink objects (symlinks, reparse points, folder shortcuts)
|
||||
#define FOF_NO_UI (FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR) // don't display any UI at all
|
||||
@@ -5,3 +5,15 @@ bits = platform.architecture()[0]
|
||||
bitness = int(bits[:2])
|
||||
|
||||
NATIVE_WORD_MAX_VALUE = 0xffffffff if bitness == 32 else 0xffffffffffffffff
|
||||
|
||||
# python implementation of CTL_CODE (macro to compute IOCTL code from param.
|
||||
# The python implem simplify the code parsing define (macro) by not handling macro functions
|
||||
|
||||
# Original MACRO:
|
||||
#
|
||||
# #define CTL_CODE( DeviceType, Function, Method, Access ) ( \
|
||||
# ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
|
||||
# )
|
||||
|
||||
def CTL_CODE(DeviceType, Function, Method, Access):
|
||||
return (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
|
||||
|
||||
@@ -131,6 +131,9 @@
|
||||
#define TH32CS_INHERIT 0x80000000
|
||||
|
||||
#define CONTEXT_I386 0x00010000
|
||||
#define CONTEXT_AMD64 0x00100000
|
||||
#define CONTEXT_ARM 0x00200000
|
||||
#define CONTEXT_ARM64 0x00400000
|
||||
|
||||
#define CONTEXT_CONTROL 0x00000001L
|
||||
#define CONTEXT_INTEGER 0x00000002L
|
||||
@@ -141,8 +144,6 @@
|
||||
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
|
||||
#define CONTEXT_ALL (CONTEXT_FULL | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_EXTENDED_REGISTERS)
|
||||
|
||||
#define CONTEXT_FULL CONTEXT_I386 | CONTEXT_FULL
|
||||
#define CONTEXT_ALL CONTEXT_I386 | CONTEXT_ALL
|
||||
#define CONTEXT_XSTATE (CONTEXT_I386 | 0x00000040L)
|
||||
|
||||
|
||||
@@ -198,38 +199,6 @@
|
||||
#define SPECIFIC_RIGHTS_ALL (0x0000FFFFL)
|
||||
|
||||
|
||||
#define AF_UNSPEC 0
|
||||
#define AF_UNIX 1
|
||||
#define AF_INET 2
|
||||
#define AF_IMPLINK 3
|
||||
#define AF_PUP 4
|
||||
#define AF_CHAOS 5
|
||||
#define AF_NS 6
|
||||
#define AF_IPX AF_NS
|
||||
#define AF_ISO 7
|
||||
#define AF_OSI AF_ISO
|
||||
#define AF_ECMA 8
|
||||
#define AF_DATAKIT 9
|
||||
#define AF_CCITT 10
|
||||
#define AF_SNA 11
|
||||
#define AF_DECnet 12
|
||||
#define AF_DLI 13
|
||||
#define AF_LAT 14
|
||||
#define AF_HYLINK 15
|
||||
#define AF_APPLETALK 16
|
||||
#define AF_NETBIOS 17
|
||||
#define AF_VOICEVIEW 18
|
||||
#define AF_FIREFOX 19
|
||||
#define AF_UNKNOWN1 20
|
||||
#define AF_BAN 21
|
||||
#define AF_ATM 22
|
||||
#define AF_INET6 23
|
||||
#define AF_CLUSTER 24
|
||||
#define AF_12844 25
|
||||
#define AF_IRDA 26
|
||||
#define AF_NETDES 28
|
||||
|
||||
|
||||
#define EXCEPTION_NONCONTINUABLE 0x1
|
||||
#define EXCEPTION_MAXIMUM_PARAMETERS 15
|
||||
|
||||
@@ -263,59 +232,11 @@
|
||||
#define TRUNCATE_EXISTING 5
|
||||
|
||||
|
||||
#define FILE_SHARE_READ 0x00000001
|
||||
#define FILE_SHARE_WRITE 0x00000002
|
||||
#define FILE_SHARE_DELETE 0x00000004
|
||||
#define FILE_ATTRIBUTE_READONLY 0x00000001
|
||||
#define FILE_ATTRIBUTE_HIDDEN 0x00000002
|
||||
#define FILE_ATTRIBUTE_SYSTEM 0x00000004
|
||||
#define FILE_ATTRIBUTE_DIRECTORY 0x00000010
|
||||
#define FILE_ATTRIBUTE_ARCHIVE 0x00000020
|
||||
#define FILE_ATTRIBUTE_DEVICE 0x00000040
|
||||
#define FILE_ATTRIBUTE_NORMAL 0x00000080
|
||||
#define FILE_ATTRIBUTE_TEMPORARY 0x00000100
|
||||
#define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
|
||||
#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
|
||||
#define FILE_ATTRIBUTE_COMPRESSED 0x00000800
|
||||
#define FILE_ATTRIBUTE_OFFLINE 0x00001000
|
||||
#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
|
||||
#define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
|
||||
#define FILE_ATTRIBUTE_VIRTUAL 0x00010000
|
||||
#define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
|
||||
#define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
|
||||
#define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
|
||||
#define FILE_NOTIFY_CHANGE_SIZE 0x00000008
|
||||
#define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
|
||||
#define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
|
||||
#define FILE_NOTIFY_CHANGE_CREATION 0x00000040
|
||||
#define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
|
||||
#define FILE_ACTION_ADDED 0x00000001
|
||||
#define FILE_ACTION_REMOVED 0x00000002
|
||||
#define FILE_ACTION_MODIFIED 0x00000003
|
||||
#define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
|
||||
#define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
|
||||
|
||||
|
||||
#define MAILSLOT_NO_MESSAGE (-1)
|
||||
#define MAILSLOT_WAIT_FOREVER (-1)
|
||||
#define FILE_CASE_SENSITIVE_SEARCH 0x00000001
|
||||
#define FILE_CASE_PRESERVED_NAMES 0x00000002
|
||||
#define FILE_UNICODE_ON_DISK 0x00000004
|
||||
#define FILE_PERSISTENT_ACLS 0x00000008
|
||||
#define FILE_FILE_COMPRESSION 0x00000010
|
||||
#define FILE_VOLUME_QUOTAS 0x00000020
|
||||
#define FILE_SUPPORTS_SPARSE_FILES 0x00000040
|
||||
#define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
|
||||
#define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
|
||||
#define FILE_VOLUME_IS_COMPRESSED 0x00008000
|
||||
#define FILE_SUPPORTS_OBJECT_IDS 0x00010000
|
||||
#define FILE_SUPPORTS_ENCRYPTION 0x00020000
|
||||
#define FILE_NAMED_STREAMS 0x00040000
|
||||
#define FILE_READ_ONLY_VOLUME 0x00080000
|
||||
#define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
|
||||
#define FILE_SUPPORTS_TRANSACTIONS 0x00200000
|
||||
#define FILE_SUPPORTS_HARD_LINKS 0x00400000
|
||||
#define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
|
||||
#define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
|
||||
#define FILE_SUPPORTS_USN_JOURNAL 0x02000000
|
||||
|
||||
|
||||
|
||||
#define RRF_RT_REG_NONE 0x00000001
|
||||
@@ -385,38 +306,6 @@
|
||||
#define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000
|
||||
#define IMAGE_FILE_BYTES_REVERSED_HI 0x8000
|
||||
|
||||
#define IMAGE_FILE_MACHINE_UNKNOWN 0
|
||||
#define IMAGE_FILE_MACHINE_I386 0x014c
|
||||
#define IMAGE_FILE_MACHINE_R3000 0x0162
|
||||
#define IMAGE_FILE_MACHINE_R4000 0x0166
|
||||
#define IMAGE_FILE_MACHINE_R10000 0x0168
|
||||
#define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169
|
||||
#define IMAGE_FILE_MACHINE_ALPHA 0x0184
|
||||
#define IMAGE_FILE_MACHINE_SH3 0x01a2
|
||||
#define IMAGE_FILE_MACHINE_SH3DSP 0x01a3
|
||||
#define IMAGE_FILE_MACHINE_SH3E 0x01a4
|
||||
#define IMAGE_FILE_MACHINE_SH4 0x01a6
|
||||
#define IMAGE_FILE_MACHINE_SH5 0x01a8
|
||||
#define IMAGE_FILE_MACHINE_ARM 0x01c0
|
||||
#define IMAGE_FILE_MACHINE_THUMB 0x01c2
|
||||
#define IMAGE_FILE_MACHINE_ARMNT 0x01c4
|
||||
#define IMAGE_FILE_MACHINE_AM33 0x01d3
|
||||
#define IMAGE_FILE_MACHINE_POWERPC 0x01F0
|
||||
#define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1
|
||||
#define IMAGE_FILE_MACHINE_IA64 0x0200
|
||||
#define IMAGE_FILE_MACHINE_MIPS16 0x0266
|
||||
#define IMAGE_FILE_MACHINE_ALPHA64 0x0284
|
||||
#define IMAGE_FILE_MACHINE_MIPSFPU 0x0366
|
||||
#define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466
|
||||
#define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
|
||||
#define IMAGE_FILE_MACHINE_TRICORE 0x0520
|
||||
#define IMAGE_FILE_MACHINE_CEF 0x0CEF
|
||||
#define IMAGE_FILE_MACHINE_EBC 0x0EBC
|
||||
#define IMAGE_FILE_MACHINE_AMD64 0x8664
|
||||
#define IMAGE_FILE_MACHINE_M32R 0x9041
|
||||
#define IMAGE_FILE_MACHINE_CEE 0xC0EE
|
||||
|
||||
|
||||
|
||||
#define SECURITY_MANDATORY_UNTRUSTED_RID (0x00000000L)
|
||||
#define SECURITY_MANDATORY_LOW_RID (0x00001000L)
|
||||
@@ -780,4 +669,7 @@
|
||||
|
||||
#define TXFS_MINIVERSION_COMMITTED_VIEW (0x0000)
|
||||
#define TXFS_MINIVERSION_DIRTY_VIEW (0xFFFF)
|
||||
#define TXFS_MINIVERSION_DEFAULT_VIEW (0xFFFE)
|
||||
#define TXFS_MINIVERSION_DEFAULT_VIEW (0xFFFE)
|
||||
|
||||
|
||||
#define PROCESSOR_FEATURE_MAX 64
|
||||
@@ -46,4 +46,58 @@
|
||||
#define IMAGE_REL_BASED_MACHINE_SPECIFIC_7 7
|
||||
#define IMAGE_REL_BASED_MACHINE_SPECIFIC_8 8
|
||||
#define IMAGE_REL_BASED_MACHINE_SPECIFIC_9 9
|
||||
#define IMAGE_REL_BASED_DIR64 10
|
||||
#define IMAGE_REL_BASED_DIR64 10
|
||||
|
||||
// Security Directory related
|
||||
|
||||
#define WIN_CERT_REVISION_1_0 (0x0100)
|
||||
#define WIN_CERT_REVISION_2_0 (0x0200)
|
||||
|
||||
#define WIN_CERT_TYPE_X509 (0x0001) // bCertificate contains an X.509 Certificate
|
||||
#define WIN_CERT_TYPE_PKCS_SIGNED_DATA (0x0002) // bCertificate contains a PKCS SignedData structure
|
||||
#define WIN_CERT_TYPE_RESERVED_1 (0x0003) // Reserved
|
||||
#define WIN_CERT_TYPE_TS_STACK_SIGNED (0x0004) // Terminal Server Protocol Stack Certificate signing
|
||||
|
||||
// Optional Header related
|
||||
|
||||
#define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER 56
|
||||
#define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28
|
||||
#define IMAGE_SIZEOF_NT_OPTIONAL32_HEADER 224
|
||||
#define IMAGE_SIZEOF_NT_OPTIONAL64_HEADER 240
|
||||
|
||||
#define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
|
||||
#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
|
||||
#define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107
|
||||
|
||||
|
||||
#define IMAGE_FILE_MACHINE_UNKNOWN 0
|
||||
#define IMAGE_FILE_MACHINE_I386 0x014c
|
||||
#define IMAGE_FILE_MACHINE_R3000 0x0162
|
||||
#define IMAGE_FILE_MACHINE_R4000 0x0166
|
||||
#define IMAGE_FILE_MACHINE_R10000 0x0168
|
||||
#define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169
|
||||
#define IMAGE_FILE_MACHINE_ALPHA 0x0184
|
||||
#define IMAGE_FILE_MACHINE_SH3 0x01a2
|
||||
#define IMAGE_FILE_MACHINE_SH3DSP 0x01a3
|
||||
#define IMAGE_FILE_MACHINE_SH3E 0x01a4
|
||||
#define IMAGE_FILE_MACHINE_SH4 0x01a6
|
||||
#define IMAGE_FILE_MACHINE_SH5 0x01a8
|
||||
#define IMAGE_FILE_MACHINE_ARM 0x01c0
|
||||
#define IMAGE_FILE_MACHINE_THUMB 0x01c2
|
||||
#define IMAGE_FILE_MACHINE_ARMNT 0x01c4
|
||||
#define IMAGE_FILE_MACHINE_AM33 0x01d3
|
||||
#define IMAGE_FILE_MACHINE_POWERPC 0x01F0
|
||||
#define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1
|
||||
#define IMAGE_FILE_MACHINE_IA64 0x0200
|
||||
#define IMAGE_FILE_MACHINE_MIPS16 0x0266
|
||||
#define IMAGE_FILE_MACHINE_ALPHA64 0x0284
|
||||
#define IMAGE_FILE_MACHINE_MIPSFPU 0x0366
|
||||
#define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466
|
||||
#define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
|
||||
#define IMAGE_FILE_MACHINE_TRICORE 0x0520
|
||||
#define IMAGE_FILE_MACHINE_CEF 0x0CEF
|
||||
#define IMAGE_FILE_MACHINE_EBC 0x0EBC
|
||||
#define IMAGE_FILE_MACHINE_AMD64 0x8664
|
||||
#define IMAGE_FILE_MACHINE_M32R 0x9041
|
||||
#define IMAGE_FILE_MACHINE_CEE 0xC0EE
|
||||
#define IMAGE_FILE_MACHINE_ARM64 0xAA64
|
||||
@@ -0,0 +1,100 @@
|
||||
#define WSADESCRIPTION_LEN 256
|
||||
#define WSASYS_STATUS_LEN 128
|
||||
#define WSAPROTOCOL_LEN 255
|
||||
#define MAX_PROTOCOL_CHAIN 7
|
||||
#define BASE_PROTOCOL 1
|
||||
#define LAYERED_PROTOCOL 0
|
||||
|
||||
|
||||
// INVALID_SOCKET (SOCKET)(~0) // will change in 32 & 64 bits..
|
||||
// The final INVALID_SOCKET is setuped in __init__.py of generated def
|
||||
#define INVALID_SOCKET32 (0xffffffff)
|
||||
#define INVALID_SOCKET64 (0xffffffffffffffff)
|
||||
|
||||
#define SOCKET_ERROR (-1)
|
||||
|
||||
|
||||
/*
|
||||
* Constants and structures defined by the internet system,
|
||||
* Per RFC 790, September 1981, taken from the BSD file netinet/in.h.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Types
|
||||
*/
|
||||
#define SOCK_STREAM 1 /* stream socket */
|
||||
#define SOCK_DGRAM 2 /* datagram socket */
|
||||
#define SOCK_RAW 3 /* raw-protocol interface */
|
||||
#define SOCK_RDM 4 /* reliably-delivered message */
|
||||
#define SOCK_SEQPACKET 5 /* sequenced packet stream */
|
||||
|
||||
/*
|
||||
* Protocols
|
||||
*/
|
||||
#define IPPROTO_IP 0 /* dummy for IP */
|
||||
#define IPPROTO_ICMP 1 /* control message protocol */
|
||||
#define IPPROTO_IGMP 2 /* group management protocol */
|
||||
#define IPPROTO_GGP 3 /* gateway^2 (deprecated) */
|
||||
#define IPPROTO_TCP 6 /* tcp */
|
||||
#define IPPROTO_PUP 12 /* pup */
|
||||
#define IPPROTO_UDP 17 /* user datagram protocol */
|
||||
#define IPPROTO_IDP 22 /* xns idp */
|
||||
#define IPPROTO_ND 77 /* UNOFFICIAL net disk proto */
|
||||
|
||||
#define IPPROTO_RAW 255 /* raw IP packet */
|
||||
#define IPPROTO_MAX 256
|
||||
|
||||
|
||||
/*
|
||||
* Port/socket numbers: network standard functions
|
||||
*/
|
||||
#define IPPORT_ECHO 7
|
||||
#define IPPORT_DISCARD 9
|
||||
#define IPPORT_SYSTAT 11
|
||||
#define IPPORT_DAYTIME 13
|
||||
#define IPPORT_NETSTAT 15
|
||||
#define IPPORT_FTP 21
|
||||
#define IPPORT_TELNET 23
|
||||
#define IPPORT_SMTP 25
|
||||
#define IPPORT_TIMESERVER 37
|
||||
#define IPPORT_NAMESERVER 42
|
||||
#define IPPORT_WHOIS 43
|
||||
#define IPPORT_MTP 57
|
||||
|
||||
|
||||
/*
|
||||
* Address families.
|
||||
*/
|
||||
#define AF_UNSPEC 0 /* unspecified */
|
||||
#define AF_UNIX 1 /* local to host (pipes, portals) */
|
||||
#define AF_INET 2 /* internetwork: UDP, TCP, etc. */
|
||||
#define AF_IMPLINK 3 /* arpanet imp addresses */
|
||||
#define AF_PUP 4 /* pup protocols: e.g. BSP */
|
||||
#define AF_CHAOS 5 /* mit CHAOS protocols */
|
||||
#define AF_IPX 6 /* IPX and SPX */
|
||||
#define AF_NS 6 /* XEROX NS protocols */
|
||||
#define AF_ISO 7 /* ISO protocols */
|
||||
#define AF_OSI AF_ISO /* OSI is ISO */
|
||||
#define AF_ECMA 8 /* european computer manufacturers */
|
||||
#define AF_DATAKIT 9 /* datakit protocols */
|
||||
#define AF_CCITT 10 /* CCITT protocols, X.25 etc */
|
||||
#define AF_SNA 11 /* IBM SNA */
|
||||
#define AF_DECnet 12 /* DECnet */
|
||||
#define AF_DLI 13 /* Direct data link interface */
|
||||
#define AF_LAT 14 /* LAT */
|
||||
#define AF_HYLINK 15 /* NSC Hyperchannel */
|
||||
#define AF_APPLETALK 16 /* AppleTalk */
|
||||
#define AF_NETBIOS 17 /* NetBios-style addresses */
|
||||
#define AF_VOICEVIEW 18 /* VoiceView */
|
||||
#define AF_FIREFOX 19 /* FireFox */
|
||||
#define AF_UNKNOWN1 20 /* Somebody is using this! */
|
||||
#define AF_BAN 21 /* Banyan */
|
||||
#define AF_ATM 22
|
||||
#define AF_INET6 23
|
||||
#define AF_CLUSTER 24
|
||||
#define AF_12844 25
|
||||
#define AF_IRDA 26
|
||||
#define AF_NETDES 28
|
||||
|
||||
#define AF_MAX 22
|
||||
@@ -56,4 +56,83 @@ HRESULT WINAPI CLSIDFromProgID(
|
||||
|
||||
PVOID CoTaskMemFree(
|
||||
LPVOID pv
|
||||
);
|
||||
|
||||
|
||||
LPSAFEARRAY SafeArrayCreate(
|
||||
[in] VARTYPE vt,
|
||||
[in] UINT cDims,
|
||||
[in] SAFEARRAYBOUND *rgsabound
|
||||
);
|
||||
|
||||
LPSAFEARRAY SafeArrayCreateVector(
|
||||
[in] VARTYPE vt,
|
||||
[in] LONG lLbound,
|
||||
[in] ULONG cElements
|
||||
);
|
||||
|
||||
|
||||
HRESULT SafeArrayDestroy(
|
||||
[in] SAFEARRAY *psa
|
||||
);
|
||||
|
||||
|
||||
HRESULT SafeArrayDestroyData(
|
||||
[in] SAFEARRAY *psa
|
||||
);
|
||||
|
||||
HRESULT SafeArrayGetElement(
|
||||
[in] SAFEARRAY *psa,
|
||||
[in] LONG *rgIndices,
|
||||
[out] VOID *pv
|
||||
);
|
||||
|
||||
UINT SafeArrayGetElemsize(
|
||||
[in] SAFEARRAY *psa
|
||||
);
|
||||
|
||||
HRESULT SafeArrayGetLBound(
|
||||
[in] SAFEARRAY *psa,
|
||||
[in] UINT nDim,
|
||||
[out] LONG *plLbound
|
||||
);
|
||||
|
||||
HRESULT SafeArrayGetUBound(
|
||||
[in] SAFEARRAY *psa,
|
||||
[in] UINT nDim,
|
||||
[out] LONG *plUbound
|
||||
);
|
||||
|
||||
UINT SafeArrayGetDim(
|
||||
[in] SAFEARRAY *psa
|
||||
);
|
||||
|
||||
HRESULT SafeArrayPutElement(
|
||||
[in] SAFEARRAY *psa,
|
||||
[in] LONG *rgIndices,
|
||||
[in] VOID *pv
|
||||
);
|
||||
|
||||
HRESULT SafeArrayGetVartype(
|
||||
[in] SAFEARRAY *psa,
|
||||
[out] VARTYPE *pvt
|
||||
);
|
||||
|
||||
HRESULT SafeArrayCopy(
|
||||
[in] SAFEARRAY *psa,
|
||||
[out] LPSAFEARRAY *ppsaOut
|
||||
);
|
||||
|
||||
HRESULT SafeArrayCopyData(
|
||||
[in] SAFEARRAY *psaSource,
|
||||
[in] SAFEARRAY *psaTarget
|
||||
);
|
||||
|
||||
|
||||
PVOID SysAllocString(
|
||||
[in, optional] OLECHAR *psz
|
||||
);
|
||||
|
||||
VOID SysFreeString(
|
||||
[in, optional] BSTR bstrString
|
||||
);
|
||||
@@ -52,11 +52,6 @@ BOOL WINAPI CryptCATAdminReleaseContext(
|
||||
_In_ DWORD dwFlags
|
||||
);
|
||||
|
||||
CRYPTCATATTRIBUTE* WINAPI CryptCATGetAttrInfo(
|
||||
_In_ HANDLE hCatalog,
|
||||
_In_ CRYPTCATMEMBER *pCatMember,
|
||||
_In_ LPWSTR pwszReferenceTag
|
||||
);
|
||||
|
||||
CRYPTCATMEMBER* WINAPI CryptCATGetMemberInfo(
|
||||
_In_ HANDLE hCatalog,
|
||||
@@ -258,6 +253,81 @@ BOOL WINAPI CryptReleaseContext(
|
||||
_In_ DWORD dwFlags
|
||||
);
|
||||
|
||||
|
||||
BOOL CryptCreateHash(
|
||||
HCRYPTPROV hProv,
|
||||
ALG_ID Algid,
|
||||
HCRYPTKEY hKey,
|
||||
DWORD dwFlags,
|
||||
HCRYPTHASH *phHash
|
||||
);
|
||||
|
||||
BOOL CryptHashData(
|
||||
HCRYPTHASH hHash,
|
||||
BYTE *pbData,
|
||||
DWORD dwDataLen,
|
||||
DWORD dwFlags
|
||||
);
|
||||
|
||||
BOOL CryptGetHashParam(
|
||||
HCRYPTHASH hHash,
|
||||
DWORD dwParam,
|
||||
BYTE *pbData,
|
||||
DWORD *pdwDataLen,
|
||||
DWORD dwFlags
|
||||
);
|
||||
|
||||
BOOL CryptVerifySignatureA(
|
||||
HCRYPTHASH hHash,
|
||||
BYTE *pbSignature,
|
||||
DWORD dwSigLen,
|
||||
HCRYPTKEY hPubKey,
|
||||
LPCSTR szDescription,
|
||||
DWORD dwFlags
|
||||
);
|
||||
|
||||
BOOL CryptVerifySignatureW(
|
||||
HCRYPTHASH hHash,
|
||||
BYTE *pbSignature,
|
||||
DWORD dwSigLen,
|
||||
HCRYPTKEY hPubKey,
|
||||
LPCWSTR szDescription,
|
||||
DWORD dwFlags
|
||||
);
|
||||
|
||||
BOOL CryptSignHashA(
|
||||
HCRYPTHASH hHash,
|
||||
DWORD dwKeySpec,
|
||||
LPCSTR szDescription,
|
||||
DWORD dwFlags,
|
||||
BYTE *pbSignature,
|
||||
DWORD *pdwSigLen
|
||||
);
|
||||
|
||||
|
||||
BOOL CryptSignHashW(
|
||||
HCRYPTHASH hHash,
|
||||
DWORD dwKeySpec,
|
||||
LPCWSTR szDescription,
|
||||
DWORD dwFlags,
|
||||
BYTE *pbSignature,
|
||||
DWORD *pdwSigLen
|
||||
);
|
||||
|
||||
BOOL CryptDestroyHash(
|
||||
HCRYPTHASH hHash
|
||||
);
|
||||
|
||||
|
||||
|
||||
BOOL CryptDeriveKey(
|
||||
HCRYPTPROV hProv,
|
||||
ALG_ID Algid,
|
||||
HCRYPTHASH hBaseData,
|
||||
DWORD dwFlags,
|
||||
HCRYPTKEY *phKey
|
||||
);
|
||||
|
||||
BOOL WINAPI CryptExportKey(
|
||||
_In_ HCRYPTKEY hKey,
|
||||
_In_ HCRYPTKEY hExpKey,
|
||||
@@ -267,6 +337,14 @@ BOOL WINAPI CryptExportKey(
|
||||
_Inout_ DWORD *pdwDataLen
|
||||
);
|
||||
|
||||
BOOL CryptImportKey(
|
||||
HCRYPTPROV hProv,
|
||||
BYTE *pbData,
|
||||
DWORD dwDataLen,
|
||||
HCRYPTKEY hPubKey,
|
||||
DWORD dwFlags,
|
||||
HCRYPTKEY *phKey
|
||||
);
|
||||
|
||||
BOOL WINAPI CertGetCertificateContextProperty(
|
||||
_In_ PCCERT_CONTEXT pCertContext,
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
BOOL CryptProtectData(
|
||||
DATA_BLOB *pDataIn,
|
||||
LPCWSTR szDataDescr,
|
||||
DATA_BLOB *pOptionalEntropy,
|
||||
PVOID pvReserved,
|
||||
CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct,
|
||||
DWORD dwFlags,
|
||||
DATA_BLOB *pDataOut
|
||||
);
|
||||
|
||||
BOOL CryptUnprotectData(
|
||||
DATA_BLOB *pDataIn,
|
||||
LPWSTR *ppszDataDescr,
|
||||
DATA_BLOB *pOptionalEntropy,
|
||||
PVOID pvReserved,
|
||||
CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct,
|
||||
DWORD dwFlags,
|
||||
DATA_BLOB *pDataOut
|
||||
);
|
||||
|
||||
BOOL CryptProtectMemory(
|
||||
LPVOID pDataIn,
|
||||
DWORD cbDataIn,
|
||||
DWORD dwFlags
|
||||
);
|
||||
|
||||
BOOL CryptUnprotectMemory(
|
||||
LPVOID pDataIn,
|
||||
DWORD cbDataIn,
|
||||
DWORD dwFlags
|
||||
);
|
||||
@@ -0,0 +1,38 @@
|
||||
DWORD GetEnvironmentVariableA(
|
||||
[in, optional] LPCSTR lpName,
|
||||
[out, optional] LPSTR lpBuffer,
|
||||
[in] DWORD nSize
|
||||
);
|
||||
|
||||
DWORD GetEnvironmentVariableW(
|
||||
[in, optional] LPCWSTR lpName,
|
||||
[out, optional] LPWSTR lpBuffer,
|
||||
[in] DWORD nSize
|
||||
);
|
||||
|
||||
|
||||
BOOL SetEnvironmentVariableA(
|
||||
[in] LPCSTR lpName,
|
||||
[in, optional] LPCSTR lpValue
|
||||
);
|
||||
|
||||
BOOL SetEnvironmentVariableW(
|
||||
[in] LPCWSTR lpName,
|
||||
[in, optional] LPCWSTR lpValue
|
||||
);
|
||||
|
||||
PVOID GetEnvironmentStringsA();
|
||||
|
||||
PVOID GetEnvironmentStringsW();
|
||||
|
||||
BOOL SetEnvironmentStringsW(
|
||||
LPWCH NewEnvironment
|
||||
);
|
||||
|
||||
BOOL FreeEnvironmentStringsA(
|
||||
PVOID penv
|
||||
);
|
||||
|
||||
BOOL FreeEnvironmentStringsW(
|
||||
PVOID penv
|
||||
);
|
||||
@@ -23,4 +23,65 @@ BOOL FindNextFileW(
|
||||
|
||||
BOOL FindClose(
|
||||
HANDLE hFindFile
|
||||
);
|
||||
);
|
||||
|
||||
HANDLE FindFirstChangeNotificationA(
|
||||
LPCSTR lpPathName,
|
||||
BOOL bWatchSubtree,
|
||||
DWORD dwNotifyFilter
|
||||
);
|
||||
|
||||
HANDLE FindFirstChangeNotificationW(
|
||||
LPCWSTR lpPathName,
|
||||
BOOL bWatchSubtree,
|
||||
DWORD dwNotifyFilter
|
||||
);
|
||||
|
||||
BOOL FindNextChangeNotification(
|
||||
HANDLE hChangeHandle
|
||||
);
|
||||
|
||||
BOOL FindCloseChangeNotification(
|
||||
HANDLE hChangeHandle
|
||||
);
|
||||
|
||||
|
||||
BOOL ReadDirectoryChangesW(
|
||||
HANDLE hDirectory,
|
||||
LPVOID lpBuffer,
|
||||
DWORD nBufferLength,
|
||||
BOOL bWatchSubtree,
|
||||
DWORD dwNotifyFilter,
|
||||
LPDWORD lpBytesReturned,
|
||||
LPOVERLAPPED lpOverlapped,
|
||||
LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
|
||||
);
|
||||
|
||||
BOOL ReadDirectoryChangesExW(
|
||||
HANDLE hDirectory,
|
||||
LPVOID lpBuffer,
|
||||
DWORD nBufferLength,
|
||||
BOOL bWatchSubtree,
|
||||
DWORD dwNotifyFilter,
|
||||
LPDWORD lpBytesReturned,
|
||||
LPOVERLAPPED lpOverlapped,
|
||||
LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
|
||||
READ_DIRECTORY_NOTIFY_INFORMATION_CLASS ReadDirectoryNotifyInformationClass
|
||||
);
|
||||
|
||||
BOOL LockFile(
|
||||
[in] HANDLE hFile,
|
||||
[in] DWORD dwFileOffsetLow,
|
||||
[in] DWORD dwFileOffsetHigh,
|
||||
[in] DWORD nNumberOfBytesToLockLow,
|
||||
[in] DWORD nNumberOfBytesToLockHigh
|
||||
);
|
||||
|
||||
BOOL LockFileEx(
|
||||
[in] HANDLE hFile,
|
||||
[in] DWORD dwFlags,
|
||||
DWORD dwReserved,
|
||||
[in] DWORD nNumberOfBytesToLockLow,
|
||||
[in] DWORD nNumberOfBytesToLockHigh,
|
||||
[in, out] LPOVERLAPPED lpOverlapped
|
||||
);
|
||||
|
||||
@@ -0,0 +1,239 @@
|
||||
BOOL InternetCheckConnectionA(
|
||||
LPCSTR lpszUrl,
|
||||
DWORD dwFlags,
|
||||
DWORD dwReserved
|
||||
);
|
||||
|
||||
BOOL InternetCheckConnectionW(
|
||||
LPCWSTR lpszUrl,
|
||||
DWORD dwFlags,
|
||||
DWORD dwReserved
|
||||
);
|
||||
|
||||
|
||||
HINTERNET InternetOpenA(
|
||||
LPCSTR lpszAgent,
|
||||
DWORD dwAccessType,
|
||||
LPCSTR lpszProxy,
|
||||
LPCSTR lpszProxyBypass,
|
||||
DWORD dwFlags
|
||||
);
|
||||
|
||||
HINTERNET InternetOpenW(
|
||||
LPCWSTR lpszAgent,
|
||||
DWORD dwAccessType,
|
||||
LPCWSTR lpszProxy,
|
||||
LPCWSTR lpszProxyBypass,
|
||||
DWORD dwFlags
|
||||
);
|
||||
|
||||
HINTERNET InternetOpenUrlA(
|
||||
HINTERNET hInternet,
|
||||
LPCSTR lpszUrl,
|
||||
LPCSTR lpszHeaders,
|
||||
DWORD dwHeadersLength,
|
||||
DWORD dwFlags,
|
||||
DWORD_PTR dwContext
|
||||
);
|
||||
|
||||
HINTERNET InternetOpenUrlW(
|
||||
HINTERNET hInternet,
|
||||
LPCWSTR lpszUrl,
|
||||
LPCWSTR lpszHeaders,
|
||||
DWORD dwHeadersLength,
|
||||
DWORD dwFlags,
|
||||
DWORD_PTR dwContext
|
||||
);
|
||||
|
||||
HINTERNET InternetConnectA(
|
||||
HINTERNET hInternet,
|
||||
LPCSTR lpszServerName,
|
||||
INTERNET_PORT nServerPort,
|
||||
LPCSTR lpszUserName,
|
||||
LPCSTR lpszPassword,
|
||||
DWORD dwService,
|
||||
DWORD dwFlags,
|
||||
DWORD_PTR dwContext
|
||||
);
|
||||
|
||||
|
||||
HINTERNET InternetConnectW(
|
||||
HINTERNET hInternet,
|
||||
LPCWSTR lpszServerName,
|
||||
INTERNET_PORT nServerPort,
|
||||
LPCWSTR lpszUserName,
|
||||
LPCWSTR lpszPassword,
|
||||
DWORD dwService,
|
||||
DWORD dwFlags,
|
||||
DWORD_PTR dwContext
|
||||
);
|
||||
|
||||
HINTERNET HttpOpenRequestA(
|
||||
HINTERNET hConnect,
|
||||
LPCSTR lpszVerb,
|
||||
LPCSTR lpszObjectName,
|
||||
LPCSTR lpszVersion,
|
||||
LPCSTR lpszReferrer,
|
||||
LPCSTR *lplpszAcceptTypes,
|
||||
DWORD dwFlags,
|
||||
DWORD_PTR dwContext
|
||||
);
|
||||
|
||||
HINTERNET HttpOpenRequestW(
|
||||
HINTERNET hConnect,
|
||||
LPCWSTR lpszVerb,
|
||||
LPCWSTR lpszObjectName,
|
||||
LPCWSTR lpszVersion,
|
||||
LPCWSTR lpszReferrer,
|
||||
LPCWSTR *lplpszAcceptTypes,
|
||||
DWORD dwFlags,
|
||||
DWORD_PTR dwContext
|
||||
);
|
||||
|
||||
BOOL InternetSetOptionA(
|
||||
HINTERNET hInternet,
|
||||
DWORD dwOption,
|
||||
LPVOID lpBuffer,
|
||||
DWORD dwBufferLength
|
||||
);
|
||||
|
||||
BOOL InternetSetOptionW(
|
||||
HINTERNET hInternet,
|
||||
DWORD dwOption,
|
||||
LPVOID lpBuffer,
|
||||
DWORD dwBufferLength
|
||||
);
|
||||
|
||||
|
||||
|
||||
BOOL InternetReadFile(
|
||||
HINTERNET hFile,
|
||||
LPVOID lpBuffer,
|
||||
DWORD dwNumberOfBytesToRead,
|
||||
LPDWORD lpdwNumberOfBytesRead
|
||||
);
|
||||
|
||||
|
||||
BOOL InternetReadFileExA(
|
||||
HINTERNET hFile,
|
||||
LPINTERNET_BUFFERSA lpBuffersOut,
|
||||
DWORD dwFlags,
|
||||
DWORD_PTR dwContext
|
||||
);
|
||||
|
||||
BOOL InternetReadFileExW(
|
||||
HINTERNET hFile,
|
||||
LPINTERNET_BUFFERSW lpBuffersOut,
|
||||
DWORD dwFlags,
|
||||
DWORD_PTR dwContext
|
||||
);
|
||||
|
||||
BOOL HttpQueryInfoA(
|
||||
HINTERNET hRequest,
|
||||
DWORD dwInfoLevel,
|
||||
LPVOID lpBuffer,
|
||||
LPDWORD lpdwBufferLength,
|
||||
LPDWORD lpdwIndex
|
||||
);
|
||||
|
||||
BOOL HttpQueryInfoW(
|
||||
HINTERNET hRequest,
|
||||
DWORD dwInfoLevel,
|
||||
LPVOID lpBuffer,
|
||||
LPDWORD lpdwBufferLength,
|
||||
LPDWORD lpdwIndex
|
||||
);
|
||||
|
||||
BOOL HttpSendRequestA(
|
||||
HINTERNET hRequest,
|
||||
LPCSTR lpszHeaders,
|
||||
DWORD dwHeadersLength,
|
||||
LPVOID lpOptional,
|
||||
DWORD dwOptionalLength
|
||||
);
|
||||
|
||||
BOOL HttpSendRequestW(
|
||||
HINTERNET hRequest,
|
||||
LPCWSTR lpszHeaders,
|
||||
DWORD dwHeadersLength,
|
||||
LPVOID lpOptional,
|
||||
DWORD dwOptionalLength
|
||||
);
|
||||
|
||||
|
||||
/// WinHTTP
|
||||
|
||||
HINTERNET WinHttpOpen(
|
||||
LPCWSTR pszAgentW,
|
||||
DWORD dwAccessType,
|
||||
LPCWSTR pszProxyW,
|
||||
LPCWSTR pszProxyBypassW,
|
||||
DWORD dwFlags
|
||||
);
|
||||
|
||||
BOOL WinHttpCloseHandle(
|
||||
HINTERNET hInternet
|
||||
);
|
||||
|
||||
|
||||
HINTERNET WinHttpConnect(
|
||||
HINTERNET hSession,
|
||||
LPCWSTR pswzServerName,
|
||||
INTERNET_PORT nServerPort,
|
||||
DWORD dwReserved
|
||||
);
|
||||
|
||||
|
||||
BOOL WinHttpQueryDataAvailable(
|
||||
HINTERNET hRequest,
|
||||
LPDWORD lpdwNumberOfBytesAvailable
|
||||
);
|
||||
|
||||
BOOL WinHttpReadData(
|
||||
HINTERNET hRequest,
|
||||
LPVOID lpBuffer,
|
||||
DWORD dwNumberOfBytesToRead,
|
||||
LPDWORD lpdwNumberOfBytesRead
|
||||
);
|
||||
|
||||
HINTERNET WinHttpOpenRequest(
|
||||
HINTERNET hConnect,
|
||||
LPCWSTR pwszVerb,
|
||||
LPCWSTR pwszObjectName,
|
||||
LPCWSTR pwszVersion,
|
||||
LPCWSTR pwszReferrer,
|
||||
LPCWSTR *ppwszAcceptTypes,
|
||||
DWORD dwFlags
|
||||
);
|
||||
|
||||
|
||||
BOOL WinHttpSendRequest(
|
||||
HINTERNET hRequest,
|
||||
LPCWSTR lpszHeaders,
|
||||
DWORD dwHeadersLength,
|
||||
LPVOID lpOptional,
|
||||
DWORD dwOptionalLength,
|
||||
DWORD dwTotalLength,
|
||||
DWORD_PTR dwContext
|
||||
);
|
||||
|
||||
BOOL WinHttpReceiveResponse(
|
||||
HINTERNET hRequest,
|
||||
LPVOID lpReserved
|
||||
);
|
||||
|
||||
BOOL WinHttpAddRequestHeaders(
|
||||
HINTERNET hRequest,
|
||||
LPCWSTR lpszHeaders,
|
||||
DWORD dwHeadersLength,
|
||||
DWORD dwModifiers
|
||||
);
|
||||
|
||||
BOOL WinHttpQueryHeaders(
|
||||
HINTERNET hRequest,
|
||||
DWORD dwInfoLevel,
|
||||
LPCWSTR pwszName,
|
||||
LPVOID lpBuffer,
|
||||
LPDWORD lpdwBufferLength,
|
||||
LPDWORD lpdwIndex
|
||||
);
|
||||
@@ -0,0 +1,51 @@
|
||||
BOOL GetOverlappedResult(
|
||||
[in] HANDLE hFile,
|
||||
[in] LPOVERLAPPED lpOverlapped,
|
||||
[out] LPDWORD lpNumberOfBytesTransferred,
|
||||
[in] BOOL bWait
|
||||
);
|
||||
|
||||
HANDLE CreateIoCompletionPort(
|
||||
[in] HANDLE FileHandle,
|
||||
[in, optional] HANDLE ExistingCompletionPort,
|
||||
[in] ULONG_PTR CompletionKey,
|
||||
[in] DWORD NumberOfConcurrentThreads
|
||||
);
|
||||
|
||||
BOOL GetQueuedCompletionStatus(
|
||||
[in] HANDLE CompletionPort,
|
||||
LPDWORD lpNumberOfBytesTransferred,
|
||||
[out] PULONG_PTR lpCompletionKey,
|
||||
[out] LPOVERLAPPED *lpOverlapped,
|
||||
[in] DWORD dwMilliseconds
|
||||
);
|
||||
|
||||
BOOL GetQueuedCompletionStatusEx(
|
||||
[in] HANDLE CompletionPort,
|
||||
[out] LPOVERLAPPED_ENTRY lpCompletionPortEntries,
|
||||
[in] ULONG ulCount,
|
||||
[out] PULONG ulNumEntriesRemoved,
|
||||
[in] DWORD dwMilliseconds,
|
||||
[in] BOOL fAlertable
|
||||
);
|
||||
|
||||
BOOL PostQueuedCompletionStatus(
|
||||
[in] HANDLE CompletionPort,
|
||||
[in] DWORD dwNumberOfBytesTransferred,
|
||||
[in] ULONG_PTR dwCompletionKey,
|
||||
[in, optional] LPOVERLAPPED lpOverlapped
|
||||
);
|
||||
|
||||
BOOL CancelIo(
|
||||
[in] HANDLE hFile
|
||||
);
|
||||
|
||||
BOOL CancelIoEx(
|
||||
[in] HANDLE hFile,
|
||||
[in, optional] LPOVERLAPPED lpOverlapped
|
||||
);
|
||||
|
||||
BOOL CancelSynchronousIo(
|
||||
[in] HANDLE hThread
|
||||
);
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
|
||||
HANDLE OpenFileMappingW(
|
||||
DWORD dwDesiredAccess,
|
||||
BOOL bInheritHandle,
|
||||
LPCWSTR lpName
|
||||
);
|
||||
|
||||
HANDLE OpenFileMappingA(
|
||||
DWORD dwDesiredAccess,
|
||||
BOOL bInheritHandle,
|
||||
LPCSTR lpName
|
||||
);
|
||||
|
||||
BOOL UnmapViewOfFile(
|
||||
LPCVOID lpBaseAddress
|
||||
);
|
||||
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
NET_API_STATUS NetQueryDisplayInformation(
|
||||
[in] LPCWSTR ServerName,
|
||||
[in] DWORD Level,
|
||||
[in] DWORD Index,
|
||||
[in] DWORD EntriesRequested,
|
||||
[in] DWORD PreferredMaximumLength,
|
||||
[out] LPDWORD ReturnedEntryCount,
|
||||
[out] PVOID *SortedBuffer
|
||||
);
|
||||
|
||||
NET_API_STATUS NetUserEnum(
|
||||
[in] LPCWSTR servername,
|
||||
[in] DWORD level,
|
||||
[in] DWORD filter,
|
||||
[out] LPBYTE *bufptr,
|
||||
[in] DWORD prefmaxlen,
|
||||
[out] LPDWORD entriesread,
|
||||
[out] LPDWORD totalentries,
|
||||
[in, out] PDWORD resume_handle
|
||||
);
|
||||
|
||||
NET_API_STATUS NetGroupEnum(
|
||||
[in] LPCWSTR servername,
|
||||
[in] DWORD level,
|
||||
[out] LPBYTE *bufptr,
|
||||
[in] DWORD prefmaxlen,
|
||||
[out] LPDWORD entriesread,
|
||||
[out] LPDWORD totalentries,
|
||||
[in, out] PDWORD_PTR resume_handle
|
||||
);
|
||||
|
||||
NET_API_STATUS NetGroupGetInfo(
|
||||
[in] LPCWSTR servername,
|
||||
[in] LPCWSTR groupname,
|
||||
[in] DWORD level,
|
||||
[out] LPBYTE *bufptr
|
||||
);
|
||||
|
||||
NET_API_STATUS NetGroupGetUsers(
|
||||
[in] LPCWSTR servername,
|
||||
[in] LPCWSTR groupname,
|
||||
[in] DWORD level,
|
||||
[out] LPBYTE *bufptr,
|
||||
[in] DWORD prefmaxlen,
|
||||
[out] LPDWORD entriesread,
|
||||
[out] LPDWORD totalentries,
|
||||
[in, out] PDWORD_PTR ResumeHandle
|
||||
);
|
||||
|
||||
NET_API_STATUS NetLocalGroupEnum(
|
||||
[in] LPCWSTR servername,
|
||||
[in] DWORD level,
|
||||
[out] LPBYTE *bufptr,
|
||||
[in] DWORD prefmaxlen,
|
||||
[out] LPDWORD entriesread,
|
||||
[out] LPDWORD totalentries,
|
||||
[in, out] PDWORD_PTR resumehandle
|
||||
);
|
||||
|
||||
|
||||
NET_API_STATUS NetLocalGroupGetMembers(
|
||||
[in] LPCWSTR servername,
|
||||
[in] LPCWSTR localgroupname,
|
||||
[in] DWORD level,
|
||||
[out] LPBYTE *bufptr,
|
||||
[in] DWORD prefmaxlen,
|
||||
[out] LPDWORD entriesread,
|
||||
[out] LPDWORD totalentries,
|
||||
[in, out] PDWORD_PTR resumehandle
|
||||
);
|
||||
|
||||
NET_API_STATUS NetLocalGroupGetInfo(
|
||||
[in] LPCWSTR servername,
|
||||
[in] LPCWSTR groupname,
|
||||
[in] DWORD level,
|
||||
[out] LPBYTE *bufptr
|
||||
);
|
||||
|
||||
NET_API_STATUS NetApiBufferFree(
|
||||
[in] LPVOID Buffer
|
||||
);
|
||||
@@ -0,0 +1,5 @@
|
||||
ULONG GetIpNetTable(
|
||||
PMIB_IPNETTABLE IpNetTable,
|
||||
PULONG SizePointer,
|
||||
BOOL Order
|
||||
);
|
||||
@@ -59,4 +59,22 @@ DNS_STATUS DnsQuery_W(
|
||||
// PVOID pExtra,
|
||||
// PDNS_RECORD *ppQueryResults,
|
||||
// PVOID *pReserved
|
||||
// );
|
||||
// );
|
||||
|
||||
|
||||
DNS_STATUS DnsQueryEx(
|
||||
PDNS_QUERY_REQUEST pQueryRequest,
|
||||
PDNS_QUERY_RESULT pQueryResults,
|
||||
PDNS_QUERY_CANCEL pCancelHandle
|
||||
);
|
||||
|
||||
ULONG GetAdaptersInfo(
|
||||
[out] PIP_ADAPTER_INFO AdapterInfo,
|
||||
[in, out] PULONG SizePointer
|
||||
);
|
||||
|
||||
DWORD GetPerAdapterInfo(
|
||||
[in] ULONG IfIndex,
|
||||
[out] PIP_PER_ADAPTER_INFO pPerAdapterInfo,
|
||||
[in] PULONG pOutBufLen
|
||||
);
|
||||
@@ -0,0 +1,66 @@
|
||||
|
||||
HANDLE WINAPI CreateToolhelp32Snapshot(
|
||||
_In_ DWORD dwFlags,
|
||||
_In_ DWORD th32ProcessID
|
||||
);
|
||||
|
||||
BOOL WINAPI Thread32First(
|
||||
_In_ HANDLE hSnapshot,
|
||||
_Inout_ LPTHREADENTRY32 lpte
|
||||
);
|
||||
|
||||
BOOL WINAPI Thread32Next(
|
||||
_In_ HANDLE hSnapshot,
|
||||
_Out_ LPTHREADENTRY32 lpte
|
||||
);
|
||||
|
||||
BOOL WINAPI Process32First(
|
||||
_In_ HANDLE hSnapshot,
|
||||
_Inout_ LPPROCESSENTRY32 lppe
|
||||
);
|
||||
|
||||
BOOL WINAPI Process32Next(
|
||||
_In_ HANDLE hSnapshot,
|
||||
_Out_ LPPROCESSENTRY32 lppe
|
||||
);
|
||||
|
||||
BOOL Process32FirstW(
|
||||
HANDLE hSnapshot,
|
||||
LPPROCESSENTRY32W lppe
|
||||
);
|
||||
|
||||
BOOL Process32NextW(
|
||||
HANDLE hSnapshot,
|
||||
LPPROCESSENTRY32W lppe
|
||||
);
|
||||
|
||||
|
||||
FARPROC WINAPI GetProcAddress(
|
||||
_In_ HMODULE hModule,
|
||||
_In_ LPCSTR lpProcName
|
||||
);
|
||||
|
||||
|
||||
HMODULE WINAPI LoadLibraryA(
|
||||
__in LPCSTR lpFileName
|
||||
);
|
||||
|
||||
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
|
||||
);
|
||||
@@ -253,4 +253,57 @@ LSTATUS RegDeleteTreeA(
|
||||
LSTATUS RegDeleteTreeW(
|
||||
HKEY hKey,
|
||||
LPCWSTR lpSubKey
|
||||
);
|
||||
|
||||
|
||||
LSTATUS RegSaveKeyA(
|
||||
HKEY hKey,
|
||||
LPCSTR lpFile,
|
||||
LPSECURITY_ATTRIBUTES lpSecurityAttributes
|
||||
);
|
||||
|
||||
LSTATUS RegSaveKeyW(
|
||||
HKEY hKey,
|
||||
LPCWSTR lpFile,
|
||||
LPSECURITY_ATTRIBUTES lpSecurityAttributes
|
||||
);
|
||||
|
||||
|
||||
LSTATUS RegSaveKeyExA(
|
||||
HKEY hKey,
|
||||
LPCSTR lpFile,
|
||||
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
|
||||
DWORD Flags
|
||||
);
|
||||
|
||||
|
||||
LSTATUS RegSaveKeyExW(
|
||||
HKEY hKey,
|
||||
LPCWSTR lpFile,
|
||||
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
|
||||
DWORD Flags
|
||||
);
|
||||
|
||||
|
||||
LSTATUS RegLoadKeyA(
|
||||
[in] HKEY hKey,
|
||||
[in, optional] LPCSTR lpSubKey,
|
||||
[in] LPCSTR lpFile
|
||||
);
|
||||
|
||||
|
||||
LSTATUS RegLoadKeyW(
|
||||
[in] HKEY hKey,
|
||||
[in, optional] LPCWSTR lpSubKey,
|
||||
[in] LPCWSTR lpFile
|
||||
);
|
||||
|
||||
LSTATUS RegUnLoadKeyA(
|
||||
[in] HKEY hKey,
|
||||
[in, optional] LPCSTR lpSubKey
|
||||
);
|
||||
|
||||
LSTATUS RegUnLoadKeyW(
|
||||
[in] HKEY hKey,
|
||||
[in, optional] LPCWSTR lpSubKey
|
||||
);
|
||||
@@ -71,6 +71,11 @@ BOOL WINAPI GetSecurityDescriptorOwner(
|
||||
_Out_ LPBOOL lpbOwnerDefaulted
|
||||
);
|
||||
|
||||
BOOL WINAPI SetSecurityDescriptorOwner(
|
||||
[in, out] PSECURITY_DESCRIPTOR pSecurityDescriptor,
|
||||
[in, optional] PSID pOwner,
|
||||
[in] BOOL bOwnerDefaulted
|
||||
);
|
||||
|
||||
DWORD WINAPI GetSecurityDescriptorRMControl(
|
||||
_In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
|
||||
@@ -307,4 +312,25 @@ DWORD BuildSecurityDescriptorW(
|
||||
PSECURITY_DESCRIPTOR pOldSD,
|
||||
PULONG pSizeNewSD,
|
||||
PSECURITY_DESCRIPTOR *pNewSD
|
||||
);
|
||||
|
||||
|
||||
BOOL WINAPI MakeAbsoluteSD(
|
||||
[in] PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor,
|
||||
[out, optional] PSECURITY_DESCRIPTOR pAbsoluteSecurityDescriptor,
|
||||
[in, out] LPDWORD lpdwAbsoluteSecurityDescriptorSize,
|
||||
[out, optional] PACL pDacl,
|
||||
[in, out] LPDWORD lpdwDaclSize,
|
||||
[out, optional] PACL pSacl,
|
||||
[in, out] LPDWORD lpdwSaclSize,
|
||||
[out, optional] PSID pOwner,
|
||||
[in, out] LPDWORD lpdwOwnerSize,
|
||||
[out, optional] PSID pPrimaryGroup,
|
||||
[in, out] LPDWORD lpdwPrimaryGroupSize
|
||||
);
|
||||
|
||||
BOOL WINAPI MakeSelfRelativeSD(
|
||||
[in] PSECURITY_DESCRIPTOR pAbsoluteSecurityDescriptor,
|
||||
[out, optional] PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor,
|
||||
[in, out] LPDWORD lpdwBufferLength
|
||||
);
|
||||
@@ -67,11 +67,6 @@ SC_HANDLE WINAPI OpenServiceW(
|
||||
_In_ DWORD dwDesiredAccess
|
||||
);
|
||||
|
||||
BOOL ControlService(
|
||||
SC_HANDLE hService,
|
||||
DWORD dwControl,
|
||||
LPSERVICE_STATUS lpServiceStatus
|
||||
);
|
||||
|
||||
BOOL QueryServiceStatus(
|
||||
SC_HANDLE hService,
|
||||
@@ -264,4 +259,12 @@ SC_HANDLE CreateServiceW(
|
||||
|
||||
BOOL DeleteService(
|
||||
SC_HANDLE hService
|
||||
);
|
||||
|
||||
BOOL StartServiceCtrlDispatcherA(
|
||||
SERVICE_TABLE_ENTRYA *lpServiceStartTable
|
||||
);
|
||||
|
||||
BOOL StartServiceCtrlDispatcherW(
|
||||
SERVICE_TABLE_ENTRYW *lpServiceStartTable
|
||||
);
|
||||
@@ -26,4 +26,8 @@ BOOL SHGetPathFromIDListA(
|
||||
BOOL SHGetPathFromIDListW(
|
||||
PCIDLIST_ABSOLUTE pidl,
|
||||
LPWSTR pszPath
|
||||
);
|
||||
|
||||
INT SHFileOperationA(
|
||||
LPSHFILEOPSTRUCTA lpFileOp
|
||||
);
|
||||
@@ -29,6 +29,13 @@ BOOL WINAPI SymFromAddr(
|
||||
_Inout_ PSYMBOL_INFO Symbol
|
||||
);
|
||||
|
||||
BOOL WINAPI SymFromAddrW(
|
||||
[in] HANDLE hProcess,
|
||||
[in] DWORD64 Address,
|
||||
[out, optional] PDWORD64 Displacement,
|
||||
[in, out] PSYMBOL_INFOW Symbol
|
||||
);
|
||||
|
||||
|
||||
BOOL WINAPI SymGetModuleInfo64(
|
||||
_In_ HANDLE hProcess,
|
||||
@@ -48,6 +55,12 @@ BOOL WINAPI SymInitialize(
|
||||
_In_ BOOL fInvadeProcess
|
||||
);
|
||||
|
||||
BOOL WINAPI SymInitializeW(
|
||||
[in] HANDLE hProcess,
|
||||
[in, optional] PCWSTR UserSearchPath,
|
||||
[in] BOOL fInvadeProcess
|
||||
);
|
||||
|
||||
BOOL WINAPI SymFromName(
|
||||
_In_ HANDLE hProcess,
|
||||
_In_ LPCSTR Name,
|
||||
@@ -111,12 +124,26 @@ BOOL WINAPI SymEnumTypesByName(
|
||||
_In_ PVOID UserContext
|
||||
);
|
||||
|
||||
BOOL WINAPI SymEnumTypesByNameW(
|
||||
[in] HANDLE hProcess,
|
||||
[in] ULONG64 BaseOfDll,
|
||||
[in, optional] PCWSTR mask,
|
||||
[in] PVOID EnumSymbolsCallback,
|
||||
[in] PVOID UserContext
|
||||
);
|
||||
|
||||
BOOL WINAPI SymEnumerateModules64(
|
||||
_In_ HANDLE hProcess,
|
||||
_In_ PVOID EnumModulesCallback,
|
||||
_In_ PVOID UserContext
|
||||
);
|
||||
|
||||
BOOL WINAPI SymEnumerateModulesW64(
|
||||
[in] HANDLE hProcess,
|
||||
[in] PSYM_ENUMMODULES_CALLBACKW64 EnumModulesCallback,
|
||||
[in, optional] PVOID UserContext
|
||||
);
|
||||
|
||||
BOOL SymNext(
|
||||
HANDLE hProcess,
|
||||
PSYMBOL_INFO si
|
||||
@@ -266,6 +293,13 @@ BOOL WINAPI SymGetTypeFromName(
|
||||
_Inout_ PSYMBOL_INFO Symbol
|
||||
);
|
||||
|
||||
BOOL WINAPI SymGetTypeFromNameW(
|
||||
[in] HANDLE hProcess,
|
||||
[in] ULONG64 BaseOfDll,
|
||||
[in] PCWSTR Name,
|
||||
[in, out] PSYMBOL_INFOW Symbol
|
||||
);
|
||||
|
||||
|
||||
BOOL WINAPI SymGetTypeInfo(
|
||||
_In_ HANDLE hProcess,
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
HANDLE CreateEventA(
|
||||
LPSECURITY_ATTRIBUTES lpEventAttributes,
|
||||
BOOL bManualReset,
|
||||
BOOL bInitialState,
|
||||
LPCSTR lpName
|
||||
);
|
||||
|
||||
HANDLE CreateEventW(
|
||||
LPSECURITY_ATTRIBUTES lpEventAttributes,
|
||||
BOOL bManualReset,
|
||||
BOOL bInitialState,
|
||||
LPCWSTR lpName
|
||||
);
|
||||
|
||||
HANDLE CreateEventExA(
|
||||
LPSECURITY_ATTRIBUTES lpEventAttributes,
|
||||
LPCSTR lpName,
|
||||
DWORD dwFlags,
|
||||
DWORD dwDesiredAccess
|
||||
);
|
||||
|
||||
HANDLE CreateEventExW(
|
||||
LPSECURITY_ATTRIBUTES lpEventAttributes,
|
||||
LPCWSTR lpName,
|
||||
DWORD dwFlags,
|
||||
DWORD dwDesiredAccess
|
||||
);
|
||||
|
||||
HANDLE WINAPI OpenEventA(
|
||||
__in DWORD dwDesiredAccess,
|
||||
__in BOOL bInheritHandle,
|
||||
__in LPCSTR lpName
|
||||
);
|
||||
|
||||
HANDLE WINAPI OpenEventW(
|
||||
__in DWORD dwDesiredAccess,
|
||||
__in BOOL bInheritHandle,
|
||||
__in LPCWSTR lpName
|
||||
);
|
||||
|
||||
@@ -182,6 +182,16 @@ NTSTATUS WINAPI NtQuerySystemInformation(
|
||||
);
|
||||
|
||||
|
||||
NTSTATUS WINAPI NtQuerySystemInformationEx(
|
||||
_In_ SYSTEM_INFORMATION_CLASS SystemInformationClass,
|
||||
_In_reads_bytes_(InputBufferLength) PVOID InputBuffer,
|
||||
_In_ ULONG InputBufferLength,
|
||||
_Out_writes_bytes_opt_(SystemInformationLength) PVOID SystemInformation,
|
||||
_In_ ULONG SystemInformationLength,
|
||||
_Out_opt_ PULONG ReturnLength
|
||||
);
|
||||
|
||||
|
||||
NTSTATUS WINAPI NtQueryInformationProcess(
|
||||
_In_ HANDLE ProcessHandle,
|
||||
_In_ PROCESSINFOCLASS ProcessInformationClass,
|
||||
@@ -304,19 +314,6 @@ NTSTATUS WINAPI NtFreeVirtualMemory(
|
||||
);
|
||||
|
||||
|
||||
|
||||
NTSTATUS WINAPI NtGetContextThread(
|
||||
__in HANDLE hThread,
|
||||
__inout LPCONTEXT lpContext
|
||||
);
|
||||
|
||||
|
||||
NTSTATUS WINAPI NtSetContextThread(
|
||||
__in HANDLE hThread,
|
||||
__in CONST LPCONTEXT lpContext
|
||||
);
|
||||
|
||||
|
||||
NTSTATUS NtCreateSection(
|
||||
PHANDLE SectionHandle,
|
||||
ACCESS_MASK DesiredAccess,
|
||||
@@ -351,3 +348,22 @@ NTSTATUS NtUnmapViewOfSection(
|
||||
PVOID BaseAddress
|
||||
);
|
||||
|
||||
|
||||
NTSTATUS NtOpenProcess(
|
||||
PHANDLE ProcessHandle,
|
||||
ACCESS_MASK DesiredAccess,
|
||||
POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
PCLIENT_ID ClientId
|
||||
);
|
||||
|
||||
|
||||
NTSTATUS WINAPI NtDelayExecution(
|
||||
_In_ BOOLEAN Alertable,
|
||||
_In_opt_ PLARGE_INTEGER DelayInterval
|
||||
);
|
||||
|
||||
|
||||
NTSTATUS NtTerminateProcess(
|
||||
HANDLE ProcessHandle,
|
||||
NTSTATUS ExitStatus
|
||||
);
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
BOOL GetComputerNameExA(
|
||||
[in] COMPUTER_NAME_FORMAT NameType,
|
||||
[out] LPSTR lpBuffer,
|
||||
[in, out] LPDWORD nSize
|
||||
);
|
||||
|
||||
BOOL GetComputerNameExW(
|
||||
[in] COMPUTER_NAME_FORMAT NameType,
|
||||
[out] LPWSTR lpBuffer,
|
||||
[in, out] LPDWORD nSize
|
||||
);
|
||||
|
||||
|
||||
BOOL WINAPI GetComputerNameA(
|
||||
_Out_ LPCSTR lpBuffer,
|
||||
_Inout_ LPDWORD lpnSize
|
||||
);
|
||||
|
||||
BOOL WINAPI GetComputerNameW(
|
||||
_Out_ LPWSTR lpBuffer,
|
||||
_Inout_ LPDWORD lpnSize
|
||||
);
|
||||
|
||||
BOOL WINAPI LookupAccountSidA(
|
||||
_In_opt_ LPCSTR lpSystemName,
|
||||
_In_ PSID lpSid,
|
||||
_Out_opt_ LPCSTR lpName,
|
||||
_Inout_ LPDWORD cchName,
|
||||
_Out_opt_ LPCSTR lpReferencedDomainName,
|
||||
_Inout_ LPDWORD cchReferencedDomainName,
|
||||
_Out_ PSID_NAME_USE peUse
|
||||
);
|
||||
|
||||
BOOL WINAPI LookupAccountSidW(
|
||||
_In_opt_ LPWSTR lpSystemName,
|
||||
_In_ PSID lpSid,
|
||||
_Out_opt_ LPWSTR lpName,
|
||||
_Inout_ LPDWORD cchName,
|
||||
_Out_opt_ LPWSTR lpReferencedDomainName,
|
||||
_Inout_ LPDWORD cchReferencedDomainName,
|
||||
_Out_ PSID_NAME_USE peUse
|
||||
);
|
||||
|
||||
BOOL LookupAccountNameA(
|
||||
LPCSTR lpSystemName,
|
||||
LPCSTR lpAccountName,
|
||||
PSID Sid,
|
||||
LPDWORD cbSid,
|
||||
LPSTR ReferencedDomainName,
|
||||
LPDWORD cchReferencedDomainName,
|
||||
PSID_NAME_USE peUse
|
||||
);
|
||||
|
||||
BOOL LookupAccountNameW(
|
||||
LPCWSTR lpSystemName,
|
||||
LPCWSTR lpAccountName,
|
||||
PSID Sid,
|
||||
LPDWORD cbSid,
|
||||
LPWSTR ReferencedDomainName,
|
||||
LPDWORD cchReferencedDomainName,
|
||||
PSID_NAME_USE peUse
|
||||
);
|
||||
@@ -13,7 +13,22 @@ PVOID GetSystemTime(
|
||||
LPSYSTEMTIME lpSystemTime
|
||||
);
|
||||
|
||||
BOOL GetSystemTimes(
|
||||
PFILETIME lpIdleTime,
|
||||
PFILETIME lpKernelTime,
|
||||
PFILETIME lpUserTime
|
||||
);
|
||||
|
||||
// void
|
||||
PVOID GetSystemTimeAsFileTime(
|
||||
LPFILETIME lpSystemTimeAsFileTime
|
||||
);
|
||||
);
|
||||
|
||||
// void
|
||||
PVOID GetLocalTime(
|
||||
LPSYSTEMTIME lpSystemTime
|
||||
);
|
||||
|
||||
DWORD GetTickCount();
|
||||
|
||||
ULONGLONG GetTickCount64();
|
||||
@@ -9,30 +9,6 @@ BOOL WINAPI TerminateProcess(
|
||||
|
||||
DWORD WINAPI GetLastError();
|
||||
|
||||
HANDLE WINAPI GetCurrentProcess();
|
||||
|
||||
HANDLE WINAPI CreateFileA(
|
||||
__in LPCSTR lpFileName,
|
||||
__in DWORD dwDesiredAccess,
|
||||
__in DWORD dwShareMode,
|
||||
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,
|
||||
__in DWORD dwCreationDisposition,
|
||||
__in DWORD dwFlagsAndAttributes,
|
||||
__in_opt HANDLE hTemplateFile
|
||||
);
|
||||
|
||||
HANDLE WINAPI CreateFileW(
|
||||
__in LPCWSTR lpFileName,
|
||||
__in DWORD dwDesiredAccess,
|
||||
__in DWORD dwShareMode,
|
||||
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,
|
||||
__in DWORD dwCreationDisposition,
|
||||
__in DWORD dwFlagsAndAttributes,
|
||||
__in_opt HANDLE hTemplateFile
|
||||
);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
Flags is directly dereferenced if non-null on windows 10
|
||||
Let's assert it's a PVOID for now on
|
||||
@@ -174,13 +150,6 @@ HANDLE WINAPI CreateRemoteThread(
|
||||
_Out_ LPDWORD lpThreadId
|
||||
);
|
||||
|
||||
BOOL WINAPI VirtualProtect(
|
||||
_In_ LPVOID lpAddress,
|
||||
_In_ SIZE_T dwSize,
|
||||
_In_ DWORD flNewProtect,
|
||||
_Out_ PDWORD lpflOldProtect
|
||||
);
|
||||
|
||||
BOOL WINAPI CreateProcessA(
|
||||
__in_opt LPCSTR lpApplicationName,
|
||||
__inout_opt LPSTR lpCommandLine,
|
||||
@@ -282,8 +251,6 @@ NTSTATUS WINAPI NtWow64ReadVirtualMemory64(
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
BOOL WINAPI WriteProcessMemory(
|
||||
_In_ HANDLE hProcess,
|
||||
_In_ LPVOID lpBaseAddress,
|
||||
@@ -303,77 +270,28 @@ NTSTATUS WINAPI NtWow64WriteVirtualMemory64(
|
||||
|
||||
|
||||
|
||||
HANDLE WINAPI GetCurrentProcess();
|
||||
|
||||
HANDLE WINAPI CreateToolhelp32Snapshot(
|
||||
_In_ DWORD dwFlags,
|
||||
_In_ DWORD th32ProcessID
|
||||
);
|
||||
HANDLE WINAPI CreateFileA(
|
||||
__in LPCSTR lpFileName,
|
||||
__in DWORD dwDesiredAccess,
|
||||
__in DWORD dwShareMode,
|
||||
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,
|
||||
__in DWORD dwCreationDisposition,
|
||||
__in DWORD dwFlagsAndAttributes,
|
||||
__in_opt HANDLE hTemplateFile
|
||||
);
|
||||
|
||||
BOOL WINAPI Thread32First(
|
||||
_In_ HANDLE hSnapshot,
|
||||
_Inout_ LPTHREADENTRY32 lpte
|
||||
);
|
||||
HANDLE WINAPI CreateFileW(
|
||||
__in LPCWSTR lpFileName,
|
||||
__in DWORD dwDesiredAccess,
|
||||
__in DWORD dwShareMode,
|
||||
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,
|
||||
__in DWORD dwCreationDisposition,
|
||||
__in DWORD dwFlagsAndAttributes,
|
||||
__in_opt HANDLE hTemplateFile
|
||||
);
|
||||
|
||||
BOOL WINAPI Thread32Next(
|
||||
_In_ HANDLE hSnapshot,
|
||||
_Out_ LPTHREADENTRY32 lpte
|
||||
);
|
||||
|
||||
BOOL WINAPI Process32First(
|
||||
_In_ HANDLE hSnapshot,
|
||||
_Inout_ LPPROCESSENTRY32 lppe
|
||||
);
|
||||
|
||||
BOOL WINAPI Process32Next(
|
||||
_In_ HANDLE hSnapshot,
|
||||
_Out_ LPPROCESSENTRY32 lppe
|
||||
);
|
||||
|
||||
BOOL Process32FirstW(
|
||||
HANDLE hSnapshot,
|
||||
LPPROCESSENTRY32W lppe
|
||||
);
|
||||
|
||||
BOOL Process32NextW(
|
||||
HANDLE hSnapshot,
|
||||
LPPROCESSENTRY32W lppe
|
||||
);
|
||||
|
||||
FARPROC WINAPI GetProcAddress(
|
||||
_In_ HMODULE hModule,
|
||||
_In_ LPCSTR lpProcName
|
||||
);
|
||||
|
||||
|
||||
HMODULE WINAPI LoadLibraryA(
|
||||
__in LPCSTR lpFileName
|
||||
);
|
||||
|
||||
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,
|
||||
_Out_ PHANDLE TokenHandle
|
||||
);
|
||||
|
||||
BOOL WINAPI DuplicateToken(
|
||||
_In_ HANDLE ExistingTokenHandle,
|
||||
@@ -392,13 +310,6 @@ BOOL WINAPI DuplicateTokenEx(
|
||||
);
|
||||
|
||||
|
||||
BOOL WINAPI OpenThreadToken(
|
||||
_In_ HANDLE ThreadHandle,
|
||||
_In_ DWORD DesiredAccess,
|
||||
_In_ BOOL OpenAsSelf,
|
||||
_Out_ PHANDLE TokenHandle
|
||||
);
|
||||
|
||||
BOOL WINAPI SetThreadToken(
|
||||
_In_opt_ PHANDLE Thread,
|
||||
_In_opt_ HANDLE Token
|
||||
@@ -465,6 +376,37 @@ LPVOID WINAPI LockResource(
|
||||
_In_ HGLOBAL hResData
|
||||
);
|
||||
|
||||
BOOL FreeResource(
|
||||
HGLOBAL hResData
|
||||
);
|
||||
|
||||
BOOL EnumResourceTypesA(
|
||||
HMODULE hModule,
|
||||
ENUMRESTYPEPROCA lpEnumFunc,
|
||||
LONG_PTR lParam
|
||||
);
|
||||
|
||||
|
||||
BOOL EnumResourceTypesW(
|
||||
HMODULE hModule,
|
||||
ENUMRESTYPEPROCW lpEnumFunc,
|
||||
LONG_PTR lParam
|
||||
);
|
||||
|
||||
BOOL EnumResourceNamesA(
|
||||
HMODULE hModule,
|
||||
LPCSTR lpType,
|
||||
ENUMRESNAMEPROCA lpEnumFunc,
|
||||
LONG_PTR lParam
|
||||
);
|
||||
|
||||
BOOL EnumResourceNamesW(
|
||||
HMODULE hModule,
|
||||
LPCWSTR lpType,
|
||||
ENUMRESNAMEPROCW lpEnumFunc,
|
||||
LONG_PTR lParam
|
||||
);
|
||||
|
||||
BOOL WINAPI GetVersionExA(
|
||||
__inout LPOSVERSIONINFOA lpVersionInformation
|
||||
);
|
||||
@@ -485,6 +427,9 @@ BOOL AllocConsole();
|
||||
|
||||
BOOL FreeConsole();
|
||||
|
||||
UINT WINAPI GetConsoleOutputCP();
|
||||
UINT WINAPI GetConsoleCP();
|
||||
|
||||
HANDLE WINAPI GetStdHandle(
|
||||
_In_ DWORD nStdHandle
|
||||
);
|
||||
@@ -559,18 +504,6 @@ DWORD WINAPI GetThreadId(
|
||||
_In_ HANDLE Thread
|
||||
);
|
||||
|
||||
HMODULE WINAPI LoadLibraryExA(
|
||||
_In_ LPCSTR lpFileName,
|
||||
_Reserved_ HANDLE hFile,
|
||||
_In_ DWORD dwFlags
|
||||
);
|
||||
|
||||
HMODULE WINAPI LoadLibraryExW(
|
||||
_In_ LPCWSTR lpFileName,
|
||||
_Reserved_ HANDLE hFile,
|
||||
_In_ DWORD dwFlags
|
||||
);
|
||||
|
||||
|
||||
|
||||
BOOL WINAPI DeviceIoControl(
|
||||
@@ -584,14 +517,6 @@ BOOL WINAPI DeviceIoControl(
|
||||
_Inout_opt_ LPOVERLAPPED lpOverlapped
|
||||
);
|
||||
|
||||
BOOL WINAPI GetTokenInformation(
|
||||
_In_ HANDLE TokenHandle,
|
||||
_In_ TOKEN_INFORMATION_CLASS TokenInformationClass,
|
||||
_Out_opt_ LPVOID TokenInformation,
|
||||
_In_ DWORD TokenInformationLength,
|
||||
_Out_ PDWORD ReturnLength
|
||||
);
|
||||
|
||||
|
||||
BOOL WINAPI Wow64DisableWow64FsRedirection(
|
||||
_Out_ PVOID *OldValue
|
||||
@@ -615,12 +540,6 @@ BOOL WINAPI SetConsoleCtrlHandler(
|
||||
_In_ BOOL Add
|
||||
);
|
||||
|
||||
LONG WINAPI WinVerifyTrust(
|
||||
_In_opt_ HWND hwnd,
|
||||
_In_ GUID *pgActionID,
|
||||
_Inout_ LPVOID pWVTData
|
||||
);
|
||||
|
||||
HGLOBAL WINAPI GlobalAlloc(
|
||||
_In_ UINT uFlags,
|
||||
_In_ SIZE_T dwBytes
|
||||
@@ -795,6 +714,17 @@ NTSTATUS RtlDecompressBuffer(
|
||||
PULONG FinalUncompressedSize
|
||||
);
|
||||
|
||||
NTSTATUS RtlCompressBuffer(
|
||||
USHORT CompressionFormatAndEngine,
|
||||
PUCHAR UncompressedBuffer,
|
||||
ULONG UncompressedBufferSize,
|
||||
PUCHAR CompressedBuffer,
|
||||
ULONG CompressedBufferSize,
|
||||
ULONG UncompressedChunkSize,
|
||||
PULONG FinalCompressedSize,
|
||||
PVOID WorkSpace
|
||||
);
|
||||
|
||||
NTSTATUS RtlDecompressBufferEx(
|
||||
USHORT CompressionFormat,
|
||||
PUCHAR UncompressedBuffer,
|
||||
@@ -812,21 +742,12 @@ NTSTATUS RtlGetCompressionWorkSpaceSize(
|
||||
);
|
||||
|
||||
|
||||
HANDLE WINAPI OpenEventA(
|
||||
__in DWORD dwDesiredAccess,
|
||||
__in BOOL bInheritHandle,
|
||||
__in LPCSTR lpName
|
||||
VOID WINAPI RtlMoveMemory(
|
||||
_Out_ PVOID Destination,
|
||||
_In_ PVOID Source,
|
||||
_In_ SIZE_T Length
|
||||
);
|
||||
|
||||
|
||||
HANDLE WINAPI OpenEventW(
|
||||
__in DWORD dwDesiredAccess,
|
||||
__in BOOL bInheritHandle,
|
||||
__in LPCWSTR lpName
|
||||
);
|
||||
|
||||
|
||||
|
||||
INT WINAPI lstrcmpA(
|
||||
__in LPCSTR lpString1,
|
||||
__in LPCSTR lpString2
|
||||
@@ -1012,36 +933,6 @@ INT WINAPI GetSystemMetrics(
|
||||
_In_ INT nIndex
|
||||
);
|
||||
|
||||
BOOL WINAPI GetComputerNameA(
|
||||
_Out_ LPCSTR lpBuffer,
|
||||
_Inout_ LPDWORD lpnSize
|
||||
);
|
||||
|
||||
BOOL WINAPI GetComputerNameW(
|
||||
_Out_ LPWSTR lpBuffer,
|
||||
_Inout_ LPDWORD lpnSize
|
||||
);
|
||||
|
||||
BOOL WINAPI LookupAccountSidA(
|
||||
_In_opt_ LPCSTR lpSystemName,
|
||||
_In_ PSID lpSid,
|
||||
_Out_opt_ LPCSTR lpName,
|
||||
_Inout_ LPDWORD cchName,
|
||||
_Out_opt_ LPCSTR lpReferencedDomainName,
|
||||
_Inout_ LPDWORD cchReferencedDomainName,
|
||||
_Out_ PSID_NAME_USE peUse
|
||||
);
|
||||
|
||||
BOOL WINAPI LookupAccountSidW(
|
||||
_In_opt_ LPWSTR lpSystemName,
|
||||
_In_ PSID lpSid,
|
||||
_Out_opt_ LPWSTR lpName,
|
||||
_Inout_ LPDWORD cchName,
|
||||
_Out_opt_ LPWSTR lpReferencedDomainName,
|
||||
_Inout_ LPDWORD cchReferencedDomainName,
|
||||
_Out_ PSID_NAME_USE peUse
|
||||
);
|
||||
|
||||
|
||||
DWORD WINAPI GetInterfaceInfo(
|
||||
_Out_ PIP_INTERFACE_INFO pIfTable,
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
INT WSAStartup(
|
||||
[in] WORD wVersionRequested,
|
||||
[out] LPWSADATA lpWSAData // structure depends on 32 / 64 bits..
|
||||
);
|
||||
|
||||
|
||||
INT WSACleanup();
|
||||
INT WSAGetLastError();
|
||||
|
||||
|
||||
INT getaddrinfo(
|
||||
[in, optional] PCSTR pNodeName,
|
||||
[in, optional] PCSTR pServiceName,
|
||||
[in, optional] ADDRINFOA *pHints,
|
||||
[out] PADDRINFOA *ppResult
|
||||
);
|
||||
|
||||
|
||||
INT GetAddrInfoW(
|
||||
[in, optional] PCWSTR pNodeName,
|
||||
[in, optional] PCWSTR pServiceName,
|
||||
[in, optional] ADDRINFOW *pHints,
|
||||
[out] PADDRINFOW *ppResult
|
||||
);
|
||||
|
||||
|
||||
SOCKET WSASocketA(
|
||||
[in] INT af,
|
||||
[in] INT type,
|
||||
[in] INT protocol,
|
||||
[in] LPWSAPROTOCOL_INFOA lpProtocolInfo,
|
||||
[in] GROUP g,
|
||||
[in] DWORD dwFlags
|
||||
);
|
||||
|
||||
|
||||
SOCKET WSASocketW(
|
||||
[in] INT af,
|
||||
[in] INT type,
|
||||
[in] INT protocol,
|
||||
[in] LPWSAPROTOCOL_INFOW lpProtocolInfo,
|
||||
[in] GROUP g,
|
||||
[in] DWORD dwFlags
|
||||
);
|
||||
|
||||
|
||||
SOCKET socket(
|
||||
[in] INT af,
|
||||
[in] INT type,
|
||||
[in] INT protocol
|
||||
);
|
||||
|
||||
INT connect(
|
||||
[in] SOCKET s,
|
||||
[in] sockaddr *name,
|
||||
[in] INT namelen
|
||||
);
|
||||
|
||||
|
||||
INT send(
|
||||
[in] SOCKET s,
|
||||
[in] CHAR *buf,
|
||||
[in] INT len,
|
||||
[in] INT flags
|
||||
);
|
||||
|
||||
INT recv(
|
||||
[in] SOCKET s,
|
||||
[out] CHAR *buf,
|
||||
[in] INT len,
|
||||
[in] INT flags
|
||||
);
|
||||
|
||||
INT shutdown(
|
||||
[in] SOCKET s,
|
||||
[in] INT how
|
||||
);
|
||||
|
||||
INT closesocket(
|
||||
[in] SOCKET s
|
||||
);
|
||||
@@ -9,17 +9,18 @@ NTSTATUS = DWORD
|
||||
TDHSTATUS = ULONG
|
||||
DNS_STATUS = ULONG
|
||||
LSTATUS = LONG # Registry functions return value | typedef _Return_type_success_(return==ERROR_SUCCESS) LONG LSTATUS;
|
||||
SECURITY_INFORMATION = DWORD
|
||||
PSECURITY_INFORMATION = POINTER(SECURITY_INFORMATION)
|
||||
PULONG = POINTER(ULONG)
|
||||
PDWORD = POINTER(DWORD)
|
||||
LPDWORD = POINTER(DWORD)
|
||||
LPBYTE = POINTER(BYTE)
|
||||
ULONG_PTR = PVOID
|
||||
PULONG_PTR = POINTER(ULONG_PTR)
|
||||
LONG_PTR = PVOID
|
||||
DWORD_PTR = ULONG_PTR
|
||||
PDWORD_PTR = POINTER(DWORD_PTR)
|
||||
KAFFINITY = ULONG_PTR
|
||||
KPRIORITY = LONG
|
||||
INTERNET_PORT = WORD
|
||||
|
||||
CHAR = c_char
|
||||
PCHAR = POINTER(CHAR)
|
||||
@@ -63,8 +64,6 @@ PULONG64 = POINTER(ULONG64)
|
||||
PBYTE = POINTER(BYTE)
|
||||
PUINT = POINTER(UINT)
|
||||
PHKEY = POINTER(HKEY)
|
||||
ACCESS_MASK = DWORD
|
||||
REGSAM = ACCESS_MASK
|
||||
PBOOLEAN = POINTER(BOOLEAN)
|
||||
SECURITY_CONTEXT_TRACKING_MODE = BOOLEAN
|
||||
HCRYPTPROV_LEGACY = PULONG
|
||||
@@ -82,6 +81,8 @@ SPC_UUID = BYTE * 16
|
||||
DEVICE_TYPE = DWORD
|
||||
PWINDBG_EXTENSION_APIS32 = PVOID
|
||||
PWINDBG_EXTENSION_APIS64 = PVOID
|
||||
FILEOP_FLAGS = WORD
|
||||
NET_API_STATUS = DWORD
|
||||
|
||||
|
||||
NCRYPT_HANDLE = ULONG_PTR
|
||||
@@ -113,7 +114,6 @@ INT64 = LONGLONG
|
||||
UINT8 = BYTE
|
||||
UINT16 = USHORT
|
||||
UINT32 = UINT
|
||||
UINT64 = ULONGLONG
|
||||
|
||||
/* LONG sized (lol..) */
|
||||
ULONG32 = UINT32
|
||||
@@ -139,6 +139,7 @@ PLSA_HANDLE = POINTER(LSA_HANDLE)
|
||||
HDSKSPC = HANDLE
|
||||
// Define type for reference to device information set
|
||||
HDEVINFO = HANDLE
|
||||
HINTERNET = PVOID
|
||||
|
||||
/* Network */
|
||||
|
||||
@@ -154,6 +155,8 @@ PSECURITY_DESCRIPTOR_CONTROL = POINTER(SECURITY_DESCRIPTOR_CONTROL)
|
||||
ACCESS_MASK = DWORD
|
||||
PACCESS_MASK = POINTER(ACCESS_MASK)
|
||||
|
||||
REGSAM = ACCESS_MASK
|
||||
|
||||
SECURITY_INFORMATION = DWORD
|
||||
PSECURITY_INFORMATION = POINTER(SECURITY_INFORMATION)
|
||||
PSECURITY_ATTRIBUTES_OPAQUE = PVOID
|
||||
@@ -199,6 +202,11 @@ RPCOLEDATAREP = ULONG
|
||||
HREFTYPE = DWORD
|
||||
SFGAOF = ULONG
|
||||
|
||||
/* SOCKET STUFF */
|
||||
|
||||
GROUP = UINT
|
||||
SOCKET = HANDLE
|
||||
|
||||
/* Function PTR */
|
||||
|
||||
WNDPROC = PVOID
|
||||
@@ -229,6 +237,15 @@ PTRANSLATE_ADDRESS_ROUTINE64 = PVOID # StackWalk
|
||||
PSYMBOL_REGISTERED_CALLBACK64 = PVOID # Symbols
|
||||
PSYMBOL_REGISTERED_CALLBACK = PVOID # Symbols
|
||||
PSYM_ENUMPROCESSES_CALLBACK = PVOID # Symbols
|
||||
PSYM_ENUMMODULES_CALLBACKW64 = PVOID # Symbols
|
||||
ENUMRESNAMEPROCA = PVOID # Resources
|
||||
ENUMRESNAMEPROCW = PVOID # Resources
|
||||
ENUMRESTYPEPROCA = PVOID # Resources
|
||||
ENUMRESTYPEPROCW = PVOID # Resources
|
||||
LPSERVICE_MAIN_FUNCTIONA = PVOID
|
||||
LPSERVICE_MAIN_FUNCTIONW = PVOID
|
||||
LPOVERLAPPED_COMPLETION_ROUTINE = PVOID
|
||||
PDNS_QUERY_COMPLETION_ROUTINE = PVOID
|
||||
|
||||
|
||||
// Will be changed at import time
|
||||
@@ -237,4 +254,5 @@ LPCONTEXT = PVOID
|
||||
HCERTSTORE = PVOID
|
||||
HCRYPTMSG = PVOID
|
||||
PALPC_PORT_ATTRIBUTES = PVOID
|
||||
PPORT_MESSAGE = PVOID
|
||||
PPORT_MESSAGE = PVOID
|
||||
LPWSADATA = PVOID
|
||||
@@ -63,16 +63,16 @@ typedef union _PORT_MESSAGE32_TMP_UNION
|
||||
{
|
||||
ULONG ClientViewSize;
|
||||
ULONG CallbackId;
|
||||
} PORT_MESSAGE_TMP_UNION;
|
||||
} PORT_MESSAGE32_TMP_UNION;
|
||||
|
||||
typedef union _PORT_MESSAGE64_TMP_UNION
|
||||
{
|
||||
ULONGLONG ClientViewSize;
|
||||
ULONG CallbackId;
|
||||
} PORT_MESSAGE_TMP_UNION;
|
||||
} PORT_MESSAGE64_TMP_UNION;
|
||||
|
||||
|
||||
typedef struct _PORT_MESSAGE_TMP_SUBSTRUCT_S1
|
||||
typedef struct
|
||||
{
|
||||
CSHORT DataLength;
|
||||
CSHORT TotalLength;
|
||||
|
||||
@@ -193,25 +193,12 @@ typedef struct CS_Resource_s {
|
||||
CS_DES CS_Header;
|
||||
} CS_RESOURCE, *PCS_RESOURCE;
|
||||
|
||||
typedef struct DMA_Des_s {
|
||||
DWORD DD_Count;
|
||||
DWORD DD_Type;
|
||||
DWORD DD_Flags;
|
||||
ULONG DD_Alloc_Chan;
|
||||
} DMA_DES, *PDMA_DES;
|
||||
|
||||
typedef struct DMA_Resource_s {
|
||||
DMA_DES DMA_Header;
|
||||
DMA_RANGE DMA_Data[ANYSIZE_ARRAY];
|
||||
} DMA_RESOURCE, *PDMA_RESOURCE;
|
||||
|
||||
typedef struct IO_Des_s {
|
||||
DWORD IOD_Count;
|
||||
DWORD IOD_Type;
|
||||
DWORDLONG IOD_Alloc_Base;
|
||||
DWORDLONG IOD_Alloc_End;
|
||||
DWORD IOD_DesFlags;
|
||||
} IO_DES, *PIO_DES;
|
||||
|
||||
typedef struct IO_Resource_s {
|
||||
IO_DES IO_Header;
|
||||
|
||||
@@ -99,7 +99,7 @@ typedef struct tagSAFEARRAY
|
||||
ULONG cLocks;
|
||||
PVOID pvData;
|
||||
SAFEARRAYBOUND rgsabound[ 1 ];
|
||||
} SAFEARRAY;
|
||||
} SAFEARRAY, *LPSAFEARRAY;
|
||||
|
||||
typedef struct __tagBRECORD {
|
||||
PVOID pvRecord;
|
||||
|
||||
@@ -98,12 +98,6 @@ typedef struct _CTL_ENTRY {
|
||||
} 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;
|
||||
@@ -597,15 +591,6 @@ typedef struct _CMSG_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;
|
||||
@@ -711,4 +696,23 @@ typedef struct _SPC_INDIRECT_DATA_CONTENT
|
||||
CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm;
|
||||
CRYPT_HASH_BLOB Digest;
|
||||
|
||||
} SPC_INDIRECT_DATA_CONTENT, *PSPC_INDIRECT_DATA_CONTENT;
|
||||
} SPC_INDIRECT_DATA_CONTENT, *PSPC_INDIRECT_DATA_CONTENT;
|
||||
|
||||
typedef struct _PUBLICKEYSTRUC {
|
||||
BYTE bType;
|
||||
BYTE bVersion;
|
||||
WORD reserved;
|
||||
ALG_ID aiKeyAlg;
|
||||
} BLOBHEADER, PUBLICKEYSTRUC;
|
||||
|
||||
// The structure is described at https://docs.microsoft.com/en-us/previous-versions/windows/desktop/legacy/jj650836(v=vs.85)
|
||||
// But PLAINTEXTKEYBLOB is a define '#define PLAINTEXTKEYBLOB 0x8' in WinCrypt.h
|
||||
// So I guess this struct is reaaly defined no-where
|
||||
// So the sample for importing a plain key
|
||||
// https://docs.microsoft.com/en-us/windows/win32/seccrypto/example-c-program--importing-a-plaintext-key
|
||||
// The BLOB is in a BYTE DesKeyBlob[] & not a real struct :')
|
||||
typedef struct _STRUCT_PLAINTEXTKEYBLOB {
|
||||
BLOBHEADER hdr;
|
||||
DWORD dwKeySize;
|
||||
BYTE rgbKeyData[0];
|
||||
} STRUCT_PLAINTEXTKEYBLOB, *PSTRUCT_PLAINTEXTKEYBLOB;
|
||||
@@ -90,4 +90,4 @@ typedef struct _ATTACH_VIRTUAL_DISK_PARAMETERS {
|
||||
ULONGLONG RestrictedLength;
|
||||
} Version2;
|
||||
};
|
||||
} ATTACH_VIRTUAL_DISK_PARAMETERS, *PATTACH_VIRTUAL_DISK_PARAMETERS;
|
||||
} ATTACH_VIRTUAL_DISK_PARAMETERS, *PATTACH_VIRTUAL_DISK_PARAMETERS;
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
typedef struct _CRYPTPROTECT_PROMPTSTRUCT {
|
||||
DWORD cbSize;
|
||||
DWORD dwPromptFlags;
|
||||
HWND hwndApp;
|
||||
LPCWSTR szPrompt;
|
||||
} CRYPTPROTECT_PROMPTSTRUCT, *PCRYPTPROTECT_PROMPTSTRUCT;
|
||||
@@ -253,4 +253,51 @@ typedef struct _WIN32_FIND_DATAW {
|
||||
DWORD dwFileType;
|
||||
DWORD dwCreatorType;
|
||||
WORD wFinderFlags;
|
||||
} WIN32_FIND_DATAW, *PWIN32_FIND_DATAW, *LPWIN32_FIND_DATAW;
|
||||
} WIN32_FIND_DATAW, *PWIN32_FIND_DATAW, *LPWIN32_FIND_DATAW;
|
||||
|
||||
|
||||
typedef enum _READ_DIRECTORY_NOTIFY_INFORMATION_CLASS {
|
||||
ReadDirectoryNotifyInformation,
|
||||
ReadDirectoryNotifyExtendedInformation
|
||||
} READ_DIRECTORY_NOTIFY_INFORMATION_CLASS, *PREAD_DIRECTORY_NOTIFY_INFORMATION_CLASS;
|
||||
|
||||
typedef struct _FILE_NOTIFY_INFORMATION {
|
||||
DWORD NextEntryOffset;
|
||||
DWORD Action;
|
||||
DWORD FileNameLength;
|
||||
WCHAR FileName[1];
|
||||
} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION;
|
||||
|
||||
typedef struct _FILE_NOTIFY_EXTENDED_INFORMATION {
|
||||
DWORD NextEntryOffset;
|
||||
DWORD Action;
|
||||
LARGE_INTEGER CreationTime;
|
||||
LARGE_INTEGER LastModificationTime;
|
||||
LARGE_INTEGER LastChangeTime;
|
||||
LARGE_INTEGER LastAccessTime;
|
||||
LARGE_INTEGER AllocatedLength;
|
||||
LARGE_INTEGER FileSize;
|
||||
DWORD FileAttributes;
|
||||
DWORD ReparsePointTag;
|
||||
LARGE_INTEGER FileId;
|
||||
LARGE_INTEGER ParentFileId;
|
||||
DWORD FileNameLength;
|
||||
WCHAR FileName[1];
|
||||
} FILE_NOTIFY_EXTENDED_INFORMATION, *PFILE_NOTIFY_EXTENDED_INFORMATION;
|
||||
|
||||
|
||||
/*
|
||||
The sub union is new from _WIN32_WINNT_WIN10_RS1
|
||||
But it does not change the struct size, so keep it like this
|
||||
https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/ntifs/ns-ntifs-_file_rename_information
|
||||
*/
|
||||
|
||||
typedef struct _FILE_RENAME_INFORMATION {
|
||||
union {
|
||||
BOOLEAN ReplaceIfExists; // FileRenameInformation
|
||||
ULONG Flags; // FileRenameInformationEx
|
||||
} __ANON_DUMMYUNIONNAME_FILE_RENAME_INFORMATION; /* */
|
||||
HANDLE RootDirectory;
|
||||
ULONG FileNameLength;
|
||||
WCHAR FileName[1];
|
||||
} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
typedef struct _INTERNET_BUFFERSA {
|
||||
DWORD dwStructSize;
|
||||
struct _INTERNET_BUFFERSA *Next;
|
||||
LPCSTR lpcszHeader;
|
||||
DWORD dwHeadersLength;
|
||||
DWORD dwHeadersTotal;
|
||||
LPVOID lpvBuffer;
|
||||
DWORD dwBufferLength;
|
||||
DWORD dwBufferTotal;
|
||||
DWORD dwOffsetLow;
|
||||
DWORD dwOffsetHigh;
|
||||
} INTERNET_BUFFERSA, *LPINTERNET_BUFFERSA;
|
||||
|
||||
typedef struct _INTERNET_BUFFERSW {
|
||||
DWORD dwStructSize;
|
||||
struct _INTERNET_BUFFERSW *Next;
|
||||
LPCWSTR lpcszHeader;
|
||||
DWORD dwHeadersLength;
|
||||
DWORD dwHeadersTotal;
|
||||
LPVOID lpvBuffer;
|
||||
DWORD dwBufferLength;
|
||||
DWORD dwBufferTotal;
|
||||
DWORD dwOffsetLow;
|
||||
DWORD dwOffsetHigh;
|
||||
} INTERNET_BUFFERSW, *LPINTERNET_BUFFERSW;
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
typedef struct _OVERLAPPED {
|
||||
ULONG_PTR Internal;
|
||||
ULONG_PTR InternalHigh;
|
||||
union {
|
||||
struct {
|
||||
DWORD Offset;
|
||||
DWORD OffsetHigh;
|
||||
} _ANON_OVERLAPPED_DUMMYSTRUCTNAME;
|
||||
PVOID Pointer;
|
||||
} _ANON_OVERLAPPED_DUMMYUNIONNAME;
|
||||
HANDLE hEvent;
|
||||
} OVERLAPPED, *LPOVERLAPPED;
|
||||
|
||||
typedef struct _OVERLAPPED_ENTRY {
|
||||
ULONG_PTR lpCompletionKey;
|
||||
LPOVERLAPPED lpOverlapped;
|
||||
ULONG_PTR Internal;
|
||||
DWORD dwNumberOfBytesTransferred;
|
||||
} OVERLAPPED_ENTRY, *LPOVERLAPPED_ENTRY;
|
||||
@@ -0,0 +1,270 @@
|
||||
/* From: https://www.codemachine.com/downloads/win10.1703/winnt.h*/
|
||||
|
||||
|
||||
typedef struct _XSTATE_FEATURE {
|
||||
DWORD Offset;
|
||||
DWORD Size;
|
||||
} XSTATE_FEATURE, *PXSTATE_FEATURE;
|
||||
|
||||
typedef struct _XSTATE_CONFIGURATION {
|
||||
// Mask of all enabled features
|
||||
DWORD64 EnabledFeatures;
|
||||
|
||||
// Mask of volatile enabled features
|
||||
DWORD64 EnabledVolatileFeatures;
|
||||
|
||||
// Total size of the save area for user states
|
||||
DWORD Size;
|
||||
|
||||
// Control Flags
|
||||
union {
|
||||
DWORD ControlFlags;
|
||||
struct
|
||||
{
|
||||
DWORD OptimizedSave : 1;
|
||||
DWORD CompactionEnabled : 1;
|
||||
};
|
||||
};
|
||||
|
||||
// List of features
|
||||
XSTATE_FEATURE Features[MAXIMUM_XSTATE_FEATURES];
|
||||
|
||||
// Mask of all supervisor features
|
||||
DWORD64 EnabledSupervisorFeatures;
|
||||
|
||||
// Mask of features that require start address to be 64 byte aligned
|
||||
DWORD64 AlignedFeatures;
|
||||
|
||||
// Total size of the save area for user and supervisor states
|
||||
DWORD AllFeatureSize;
|
||||
|
||||
// List which holds size of each user and supervisor state supported by CPU
|
||||
DWORD AllFeatures[MAXIMUM_XSTATE_FEATURES];
|
||||
|
||||
} XSTATE_CONFIGURATION, *PXSTATE_CONFIGURATION;
|
||||
|
||||
|
||||
/* From ntexapi.h */
|
||||
|
||||
typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE {
|
||||
StandardDesign, // None == 0 == standard design
|
||||
NEC98x86, // NEC PC98xx series on X86
|
||||
EndAlternatives // past end of known alternatives
|
||||
} ALTERNATIVE_ARCHITECTURE_TYPE;
|
||||
|
||||
/* ntkeapi.h */
|
||||
typedef struct _KSYSTEM_TIME {
|
||||
ULONG LowPart;
|
||||
LONG High1Time;
|
||||
LONG High2Time;
|
||||
} KSYSTEM_TIME, *PKSYSTEM_TIME;
|
||||
|
||||
|
||||
/*
|
||||
An extract from https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddk/ns-ntddk-kuser_shared_data.
|
||||
With only the fields up to <0x02f8 unsigned __int64 TestRetInstruction>
|
||||
These are the fields that have not moved (but may have been renamed) since XP.
|
||||
*/
|
||||
|
||||
|
||||
typedef struct _PFW_MINIMAL_KUSER_SHARED_DATA {
|
||||
ULONG TickCountLowDeprecated;
|
||||
ULONG TickCountMultiplier;
|
||||
KSYSTEM_TIME InterruptTime;
|
||||
KSYSTEM_TIME SystemTime;
|
||||
KSYSTEM_TIME TimeZoneBias;
|
||||
USHORT ImageNumberLow;
|
||||
USHORT ImageNumberHigh;
|
||||
WCHAR NtSystemRoot[260];
|
||||
ULONG MaxStackTraceDepth;
|
||||
ULONG CryptoExponent;
|
||||
ULONG TimeZoneId;
|
||||
ULONG LargePageMinimum;
|
||||
ULONG AitSamplingValue;
|
||||
ULONG AppCompatFlag;
|
||||
ULONGLONG RNGSeedVersion;
|
||||
ULONG GlobalValidationRunlevel;
|
||||
LONG TimeZoneBiasStamp;
|
||||
ULONG NtBuildNumber;
|
||||
NT_PRODUCT_TYPE NtProductType;
|
||||
BOOLEAN ProductTypeIsValid;
|
||||
BOOLEAN Reserved0[1];
|
||||
USHORT NativeProcessorArchitecture;
|
||||
ULONG NtMajorVersion;
|
||||
ULONG NtMinorVersion;
|
||||
BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
|
||||
ULONG Reserved1;
|
||||
ULONG Reserved3;
|
||||
ULONG TimeSlip;
|
||||
ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
|
||||
ULONG BootId;
|
||||
LARGE_INTEGER SystemExpirationDate;
|
||||
ULONG SuiteMask;
|
||||
BOOLEAN KdDebuggerEnabled;
|
||||
union {
|
||||
BYTE MitigationPolicies; /* Modified UCHAR to BYTE for ctype compat */
|
||||
struct {
|
||||
BYTE NXSupportPolicy : 2;
|
||||
BYTE SEHValidationPolicy : 2;
|
||||
BYTE CurDirDevicesSkippedForDlls : 2;
|
||||
BYTE Reserved : 2;
|
||||
};
|
||||
};
|
||||
USHORT CyclesPerYield;
|
||||
ULONG ActiveConsoleId;
|
||||
ULONG DismountCount;
|
||||
ULONG ComPlusPackage;
|
||||
ULONG LastSystemRITEventTickCount;
|
||||
ULONG NumberOfPhysicalPages;
|
||||
BOOLEAN SafeBootMode;
|
||||
UCHAR VirtualizationFlags;
|
||||
UCHAR Reserved12[2];
|
||||
union {
|
||||
ULONG SharedDataFlags;
|
||||
struct {
|
||||
ULONG DbgErrorPortPresent : 1;
|
||||
ULONG DbgElevationEnabled : 1;
|
||||
ULONG DbgVirtEnabled : 1;
|
||||
ULONG DbgInstallerDetectEnabled : 1;
|
||||
ULONG DbgLkgEnabled : 1;
|
||||
ULONG DbgDynProcessorEnabled : 1;
|
||||
ULONG DbgConsoleBrokerEnabled : 1;
|
||||
ULONG DbgSecureBootEnabled : 1;
|
||||
ULONG DbgMultiSessionSku : 1;
|
||||
ULONG DbgMultiUsersInSessionSku : 1;
|
||||
ULONG DbgStateSeparationEnabled : 1;
|
||||
ULONG SpareBits : 21;
|
||||
};
|
||||
};
|
||||
ULONG DataFlagsPad[1];
|
||||
ULONGLONG TestRetInstruction;
|
||||
} PFW_MINIMAL_KUSER_SHARED_DATA;
|
||||
|
||||
|
||||
/* From: https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddk/ns-ntddk-kuser_shared_data */
|
||||
typedef struct _KUSER_SHARED_DATA {
|
||||
ULONG TickCountLowDeprecated;
|
||||
ULONG TickCountMultiplier;
|
||||
KSYSTEM_TIME InterruptTime;
|
||||
KSYSTEM_TIME SystemTime;
|
||||
KSYSTEM_TIME TimeZoneBias;
|
||||
USHORT ImageNumberLow;
|
||||
USHORT ImageNumberHigh;
|
||||
WCHAR NtSystemRoot[260];
|
||||
ULONG MaxStackTraceDepth;
|
||||
ULONG CryptoExponent;
|
||||
ULONG TimeZoneId;
|
||||
ULONG LargePageMinimum;
|
||||
ULONG AitSamplingValue;
|
||||
ULONG AppCompatFlag;
|
||||
ULONGLONG RNGSeedVersion;
|
||||
ULONG GlobalValidationRunlevel;
|
||||
LONG TimeZoneBiasStamp;
|
||||
ULONG NtBuildNumber;
|
||||
NT_PRODUCT_TYPE NtProductType;
|
||||
BOOLEAN ProductTypeIsValid;
|
||||
BOOLEAN Reserved0[1];
|
||||
USHORT NativeProcessorArchitecture;
|
||||
ULONG NtMajorVersion;
|
||||
ULONG NtMinorVersion;
|
||||
BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
|
||||
ULONG Reserved1;
|
||||
ULONG Reserved3;
|
||||
ULONG TimeSlip;
|
||||
ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
|
||||
ULONG BootId;
|
||||
LARGE_INTEGER SystemExpirationDate;
|
||||
ULONG SuiteMask;
|
||||
BOOLEAN KdDebuggerEnabled;
|
||||
union {
|
||||
BYTE MitigationPolicies; /* Modified UCHAR to BYTE for ctype compat */
|
||||
struct {
|
||||
BYTE NXSupportPolicy : 2;
|
||||
BYTE SEHValidationPolicy : 2;
|
||||
BYTE CurDirDevicesSkippedForDlls : 2;
|
||||
BYTE Reserved : 2;
|
||||
};
|
||||
};
|
||||
USHORT CyclesPerYield;
|
||||
ULONG ActiveConsoleId;
|
||||
ULONG DismountCount;
|
||||
ULONG ComPlusPackage;
|
||||
ULONG LastSystemRITEventTickCount;
|
||||
ULONG NumberOfPhysicalPages;
|
||||
BOOLEAN SafeBootMode;
|
||||
UCHAR VirtualizationFlags;
|
||||
UCHAR Reserved12[2];
|
||||
union {
|
||||
ULONG SharedDataFlags;
|
||||
struct {
|
||||
ULONG DbgErrorPortPresent : 1;
|
||||
ULONG DbgElevationEnabled : 1;
|
||||
ULONG DbgVirtEnabled : 1;
|
||||
ULONG DbgInstallerDetectEnabled : 1;
|
||||
ULONG DbgLkgEnabled : 1;
|
||||
ULONG DbgDynProcessorEnabled : 1;
|
||||
ULONG DbgConsoleBrokerEnabled : 1;
|
||||
ULONG DbgSecureBootEnabled : 1;
|
||||
ULONG DbgMultiSessionSku : 1;
|
||||
ULONG DbgMultiUsersInSessionSku : 1;
|
||||
ULONG DbgStateSeparationEnabled : 1;
|
||||
ULONG SpareBits : 21;
|
||||
};
|
||||
};
|
||||
ULONG DataFlagsPad[1];
|
||||
ULONGLONG TestRetInstruction;
|
||||
LONGLONG QpcFrequency;
|
||||
ULONG SystemCall;
|
||||
union {
|
||||
ULONG AllFlags;
|
||||
struct {
|
||||
ULONG Win32Process : 1;
|
||||
ULONG Sgx2Enclave : 1;
|
||||
ULONG VbsBasicEnclave : 1;
|
||||
ULONG SpareBits : 29;
|
||||
};
|
||||
} UserCetAvailableEnvironments;
|
||||
ULONGLONG SystemCallPad[2];
|
||||
union {
|
||||
KSYSTEM_TIME TickCount;
|
||||
ULONG64 TickCountQuad;
|
||||
struct {
|
||||
ULONG ReservedTickCountOverlay[3];
|
||||
ULONG TickCountPad[1];
|
||||
};
|
||||
};
|
||||
ULONG Cookie;
|
||||
ULONG CookiePad[1];
|
||||
LONGLONG ConsoleSessionForegroundProcessId;
|
||||
ULONGLONG TimeUpdateLock;
|
||||
ULONGLONG BaselineSystemTimeQpc;
|
||||
ULONGLONG BaselineInterruptTimeQpc;
|
||||
ULONGLONG QpcSystemTimeIncrement;
|
||||
ULONGLONG QpcInterruptTimeIncrement;
|
||||
UCHAR QpcSystemTimeIncrementShift;
|
||||
UCHAR QpcInterruptTimeIncrementShift;
|
||||
USHORT UnparkedProcessorCount;
|
||||
ULONG EnclaveFeatureMask[4];
|
||||
ULONG TelemetryCoverageRound;
|
||||
USHORT UserModeGlobalLogger[16];
|
||||
ULONG ImageFileExecutionOptions;
|
||||
ULONG LangGenerationCount;
|
||||
ULONGLONG Reserved4;
|
||||
ULONGLONG InterruptTimeBias;
|
||||
ULONGLONG QpcBias;
|
||||
ULONG ActiveProcessorCount;
|
||||
UCHAR ActiveGroupCount;
|
||||
UCHAR Reserved9;
|
||||
union {
|
||||
USHORT QpcData;
|
||||
struct {
|
||||
UCHAR QpcBypassEnabled;
|
||||
UCHAR QpcShift;
|
||||
};
|
||||
};
|
||||
LARGE_INTEGER TimeZoneBiasEffectiveStart;
|
||||
LARGE_INTEGER TimeZoneBiasEffectiveEnd;
|
||||
XSTATE_CONFIGURATION XState;
|
||||
KSYSTEM_TIME FeatureConfigurationChangeStamp;
|
||||
ULONG Spare;
|
||||
} KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
|
||||
@@ -49,12 +49,6 @@ typedef struct _POLICY_ACCOUNT_DOMAIN_INFO {
|
||||
} POLICY_ACCOUNT_DOMAIN_INFO, *PPOLICY_ACCOUNT_DOMAIN_INFO;
|
||||
|
||||
|
||||
typedef struct _POLICY_PRIMARY_DOMAIN_INFO {
|
||||
LSA_UNICODE_STRING Name;
|
||||
PSID Sid;
|
||||
} POLICY_PRIMARY_DOMAIN_INFO, *PPOLICY_PRIMARY_DOMAIN_INFO;
|
||||
|
||||
|
||||
typedef struct _LSA_TRANSLATED_SID {
|
||||
SID_NAME_USE Use;
|
||||
ULONG RelativeId;
|
||||
|
||||
@@ -0,0 +1,217 @@
|
||||
typedef struct _LOCALGROUP_INFO_0 {
|
||||
LPWSTR lgrpi0_name;
|
||||
} LOCALGROUP_INFO_0, *PLOCALGROUP_INFO_0, *LPLOCALGROUP_INFO_0;
|
||||
|
||||
typedef struct _LOCALGROUP_INFO_1 {
|
||||
LPWSTR lgrpi1_name;
|
||||
LPWSTR lgrpi1_comment;
|
||||
} LOCALGROUP_INFO_1, *PLOCALGROUP_INFO_1, *LPLOCALGROUP_INFO_1;
|
||||
|
||||
typedef struct _LOCALGROUP_MEMBERS_INFO_0 {
|
||||
PSID lgrmi0_sid;
|
||||
} LOCALGROUP_MEMBERS_INFO_0, *PLOCALGROUP_MEMBERS_INFO_0, *LPLOCALGROUP_MEMBERS_INFO_0;
|
||||
|
||||
|
||||
typedef struct _LOCALGROUP_MEMBERS_INFO_1 {
|
||||
PSID lgrmi1_sid;
|
||||
SID_NAME_USE lgrmi1_sidusage;
|
||||
LPWSTR lgrmi1_name;
|
||||
} LOCALGROUP_MEMBERS_INFO_1, *PLOCALGROUP_MEMBERS_INFO_1, *LPLOCALGROUP_MEMBERS_INFO_1;
|
||||
|
||||
|
||||
typedef struct _LOCALGROUP_MEMBERS_INFO_2 {
|
||||
PSID lgrmi2_sid;
|
||||
SID_NAME_USE lgrmi2_sidusage;
|
||||
LPWSTR lgrmi2_domainandname;
|
||||
} LOCALGROUP_MEMBERS_INFO_2, *PLOCALGROUP_MEMBERS_INFO_2, *LPLOCALGROUP_MEMBERS_INFO_2;
|
||||
|
||||
|
||||
typedef struct _LOCALGROUP_MEMBERS_INFO_3 {
|
||||
LPWSTR lgrmi3_domainandname;
|
||||
} LOCALGROUP_MEMBERS_INFO_3, *PLOCALGROUP_MEMBERS_INFO_3, *LPLOCALGROUP_MEMBERS_INFO_3;
|
||||
|
||||
|
||||
typedef struct _NET_DISPLAY_USER {
|
||||
LPWSTR usri1_name;
|
||||
LPWSTR usri1_comment;
|
||||
DWORD usri1_flags;
|
||||
LPWSTR usri1_full_name;
|
||||
DWORD usri1_user_id;
|
||||
DWORD usri1_next_index;
|
||||
} NET_DISPLAY_USER, *PNET_DISPLAY_USER;
|
||||
|
||||
|
||||
typedef struct _NET_DISPLAY_MACHINE {
|
||||
LPWSTR usri2_name;
|
||||
LPWSTR usri2_comment;
|
||||
DWORD usri2_flags;
|
||||
DWORD usri2_user_id;
|
||||
DWORD usri2_next_index;
|
||||
} NET_DISPLAY_MACHINE, *PNET_DISPLAY_MACHINE;
|
||||
|
||||
|
||||
typedef struct _NET_DISPLAY_GROUP {
|
||||
LPWSTR grpi3_name;
|
||||
LPWSTR grpi3_comment;
|
||||
DWORD grpi3_group_id;
|
||||
DWORD grpi3_attributes;
|
||||
DWORD grpi3_next_index;
|
||||
} NET_DISPLAY_GROUP, *PNET_DISPLAY_GROUP;
|
||||
|
||||
|
||||
typedef struct _USER_INFO_0 {
|
||||
LPWSTR usri0_name;
|
||||
} USER_INFO_0, *PUSER_INFO_0, *LPUSER_INFO_0;
|
||||
|
||||
|
||||
typedef struct _USER_INFO_1 {
|
||||
LPWSTR usri1_name;
|
||||
LPWSTR usri1_password;
|
||||
DWORD usri1_password_age;
|
||||
DWORD usri1_priv;
|
||||
LPWSTR usri1_home_dir;
|
||||
LPWSTR usri1_comment;
|
||||
DWORD usri1_flags;
|
||||
LPWSTR usri1_script_path;
|
||||
} USER_INFO_1, *PUSER_INFO_1, *LPUSER_INFO_1;
|
||||
|
||||
typedef struct _USER_INFO_2 {
|
||||
LPWSTR usri2_name;
|
||||
LPWSTR usri2_password;
|
||||
DWORD usri2_password_age;
|
||||
DWORD usri2_priv;
|
||||
LPWSTR usri2_home_dir;
|
||||
LPWSTR usri2_comment;
|
||||
DWORD usri2_flags;
|
||||
LPWSTR usri2_script_path;
|
||||
DWORD usri2_auth_flags;
|
||||
LPWSTR usri2_full_name;
|
||||
LPWSTR usri2_usr_comment;
|
||||
LPWSTR usri2_parms;
|
||||
LPWSTR usri2_workstations;
|
||||
DWORD usri2_last_logon;
|
||||
DWORD usri2_last_logoff;
|
||||
DWORD usri2_acct_expires;
|
||||
DWORD usri2_max_storage;
|
||||
DWORD usri2_units_per_week;
|
||||
PBYTE usri2_logon_hours;
|
||||
DWORD usri2_bad_pw_count;
|
||||
DWORD usri2_num_logons;
|
||||
LPWSTR usri2_logon_server;
|
||||
DWORD usri2_country_code;
|
||||
DWORD usri2_code_page;
|
||||
} USER_INFO_2, *PUSER_INFO_2, *LPUSER_INFO_2;
|
||||
|
||||
typedef struct _USER_INFO_3 {
|
||||
LPWSTR usri3_name;
|
||||
LPWSTR usri3_password;
|
||||
DWORD usri3_password_age;
|
||||
DWORD usri3_priv;
|
||||
LPWSTR usri3_home_dir;
|
||||
LPWSTR usri3_comment;
|
||||
DWORD usri3_flags;
|
||||
LPWSTR usri3_script_path;
|
||||
DWORD usri3_auth_flags;
|
||||
LPWSTR usri3_full_name;
|
||||
LPWSTR usri3_usr_comment;
|
||||
LPWSTR usri3_parms;
|
||||
LPWSTR usri3_workstations;
|
||||
DWORD usri3_last_logon;
|
||||
DWORD usri3_last_logoff;
|
||||
DWORD usri3_acct_expires;
|
||||
DWORD usri3_max_storage;
|
||||
DWORD usri3_units_per_week;
|
||||
PBYTE usri3_logon_hours;
|
||||
DWORD usri3_bad_pw_count;
|
||||
DWORD usri3_num_logons;
|
||||
LPWSTR usri3_logon_server;
|
||||
DWORD usri3_country_code;
|
||||
DWORD usri3_code_page;
|
||||
DWORD usri3_user_id;
|
||||
DWORD usri3_primary_group_id;
|
||||
LPWSTR usri3_profile;
|
||||
LPWSTR usri3_home_dir_drive;
|
||||
DWORD usri3_password_expired;
|
||||
} USER_INFO_3, *PUSER_INFO_3, *LPUSER_INFO_3;
|
||||
|
||||
typedef struct _USER_INFO_10 {
|
||||
LPWSTR usri10_name;
|
||||
LPWSTR usri10_comment;
|
||||
LPWSTR usri10_usr_comment;
|
||||
LPWSTR usri10_full_name;
|
||||
} USER_INFO_10, *PUSER_INFO_10, *LPUSER_INFO_10;
|
||||
|
||||
|
||||
typedef struct _USER_INFO_11 {
|
||||
LPWSTR usri11_name;
|
||||
LPWSTR usri11_comment;
|
||||
LPWSTR usri11_usr_comment;
|
||||
LPWSTR usri11_full_name;
|
||||
DWORD usri11_priv;
|
||||
DWORD usri11_auth_flags;
|
||||
DWORD usri11_password_age;
|
||||
LPWSTR usri11_home_dir;
|
||||
LPWSTR usri11_parms;
|
||||
DWORD usri11_last_logon;
|
||||
DWORD usri11_last_logoff;
|
||||
DWORD usri11_bad_pw_count;
|
||||
DWORD usri11_num_logons;
|
||||
LPWSTR usri11_logon_server;
|
||||
DWORD usri11_country_code;
|
||||
LPWSTR usri11_workstations;
|
||||
DWORD usri11_max_storage;
|
||||
DWORD usri11_units_per_week;
|
||||
PBYTE usri11_logon_hours;
|
||||
DWORD usri11_code_page;
|
||||
} USER_INFO_11, *PUSER_INFO_11, *LPUSER_INFO_11;
|
||||
|
||||
typedef struct _USER_INFO_20 {
|
||||
LPWSTR usri20_name;
|
||||
LPWSTR usri20_full_name;
|
||||
LPWSTR usri20_comment;
|
||||
DWORD usri20_flags;
|
||||
DWORD usri20_user_id;
|
||||
} USER_INFO_20, *PUSER_INFO_20, *LPUSER_INFO_20;
|
||||
|
||||
typedef struct _USER_INFO_23 {
|
||||
LPWSTR usri23_name;
|
||||
LPWSTR usri23_full_name;
|
||||
LPWSTR usri23_comment;
|
||||
DWORD usri23_flags;
|
||||
PSID usri23_user_sid;
|
||||
} USER_INFO_23, *PUSER_INFO_23, *LPUSER_INFO_23;
|
||||
|
||||
|
||||
typedef struct _GROUP_INFO_0 {
|
||||
LPWSTR grpi0_name;
|
||||
} GROUP_INFO_0, *PGROUP_INFO_0, *LPGROUP_INFO_0;
|
||||
|
||||
typedef struct _GROUP_INFO_1 {
|
||||
LPWSTR grpi1_name;
|
||||
LPWSTR grpi1_comment;
|
||||
} GROUP_INFO_1, *PGROUP_INFO_1, *LPGROUP_INFO_1;
|
||||
|
||||
typedef struct _GROUP_INFO_2 {
|
||||
LPWSTR grpi2_name;
|
||||
LPWSTR grpi2_comment;
|
||||
DWORD grpi2_group_id;
|
||||
DWORD grpi2_attributes;
|
||||
} GROUP_INFO_2, *PGROUP_INFO_2;
|
||||
|
||||
typedef struct _GROUP_INFO_3 {
|
||||
LPWSTR grpi3_name;
|
||||
LPWSTR grpi3_comment;
|
||||
PSID grpi3_group_sid;
|
||||
DWORD grpi3_attributes;
|
||||
} GROUP_INFO_3, *PGROUP_INFO_3;
|
||||
|
||||
|
||||
typedef struct _GROUP_USERS_INFO_0 {
|
||||
LPWSTR grui0_name;
|
||||
} GROUP_USERS_INFO_0, *PGROUP_USERS_INFO_0, *LPGROUP_USERS_INFO_0;
|
||||
|
||||
|
||||
typedef struct _GROUP_USERS_INFO_1 {
|
||||
LPWSTR grui1_name;
|
||||
DWORD grui1_attributes;
|
||||
} GROUP_USERS_INFO_1, *PGROUP_USERS_INFO_1, *LPGROUP_USERS_INFO_1;
|
||||
@@ -0,0 +1,14 @@
|
||||
typedef struct _MIB_IPNETROW_LH {
|
||||
IF_INDEX dwIndex;
|
||||
DWORD dwPhysAddrLen;
|
||||
UCHAR bPhysAddr[8];
|
||||
DWORD dwAddr;
|
||||
union {
|
||||
DWORD dwType;
|
||||
};
|
||||
} MIB_IPNETROW, *PMIB_IPNETROW;
|
||||
|
||||
typedef struct _MIB_IPNETTABLE {
|
||||
DWORD dwNumEntries;
|
||||
MIB_IPNETROW table[ANY_SIZE];
|
||||
} MIB_IPNETTABLE, *PMIB_IPNETTABLE;
|
||||
@@ -818,4 +818,103 @@ typedef struct _DnsRecordW {
|
||||
DNS_UNKNOWN_DATA Unknown;
|
||||
PBYTE pDataPtr;
|
||||
} Data;
|
||||
} DNS_RECORDW, *PDNS_RECORDW;
|
||||
} DNS_RECORDW, *PDNS_RECORDW;
|
||||
|
||||
|
||||
typedef struct _DnsAddr
|
||||
{
|
||||
CHAR MaxSa[ DNS_ADDR_MAX_SOCKADDR_LENGTH ];
|
||||
DWORD DnsAddrUserDword[ 8 ];
|
||||
}
|
||||
DNS_ADDR, *PDNS_ADDR;
|
||||
|
||||
typedef struct _DnsAddrArray
|
||||
{
|
||||
DWORD MaxCount;
|
||||
DWORD AddrCount;
|
||||
DWORD Tag;
|
||||
WORD Family;
|
||||
WORD WordReserved;
|
||||
DWORD Flags;
|
||||
DWORD MatchFlag;
|
||||
DWORD Reserved1;
|
||||
DWORD Reserved2;
|
||||
DNS_ADDR AddrArray[ANY_SIZE];
|
||||
}
|
||||
DNS_ADDR_ARRAY, *PDNS_ADDR_ARRAY;
|
||||
|
||||
|
||||
typedef struct _DNS_QUERY_REQUEST
|
||||
{
|
||||
ULONG Version;
|
||||
PCWSTR QueryName;
|
||||
WORD QueryType;
|
||||
ULONG64 QueryOptions;
|
||||
PDNS_ADDR_ARRAY pDnsServerList;
|
||||
ULONG InterfaceIndex;
|
||||
PDNS_QUERY_COMPLETION_ROUTINE pQueryCompletionCallback;
|
||||
PVOID pQueryContext;
|
||||
} DNS_QUERY_REQUEST, *PDNS_QUERY_REQUEST;
|
||||
|
||||
typedef struct _DNS_QUERY_CANCEL
|
||||
{
|
||||
CHAR Reserved[32];
|
||||
} DNS_QUERY_CANCEL, *PDNS_QUERY_CANCEL;
|
||||
|
||||
|
||||
typedef struct _DNS_QUERY_RESULT
|
||||
{
|
||||
ULONG Version;
|
||||
DNS_STATUS QueryStatus;
|
||||
ULONG64 QueryOptions;
|
||||
// Might BE A or W record (don't know how to distinguish for now)
|
||||
PVOID pQueryRecords; // PDNS_RECORD pQueryRecords;
|
||||
PVOID Reserved;
|
||||
} DNS_QUERY_RESULT, *PDNS_QUERY_RESULT;
|
||||
|
||||
|
||||
typedef struct {
|
||||
CHAR String[4 * 4];
|
||||
} IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING;
|
||||
|
||||
typedef struct _IP_ADDR_STRING {
|
||||
struct _IP_ADDR_STRING* Next;
|
||||
IP_ADDRESS_STRING IpAddress;
|
||||
IP_MASK_STRING IpMask;
|
||||
DWORD Context;
|
||||
} IP_ADDR_STRING, *PIP_ADDR_STRING;
|
||||
|
||||
typedef struct _IP_ADAPTER_INFO {
|
||||
struct _IP_ADAPTER_INFO *Next;
|
||||
DWORD ComboIndex;
|
||||
CHAR AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
|
||||
CHAR Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
|
||||
UINT AddressLength;
|
||||
BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
|
||||
DWORD Index;
|
||||
UINT Type;
|
||||
UINT DhcpEnabled;
|
||||
PIP_ADDR_STRING CurrentIpAddress;
|
||||
IP_ADDR_STRING IpAddressList;
|
||||
IP_ADDR_STRING GatewayList;
|
||||
IP_ADDR_STRING DhcpServer;
|
||||
BOOL HaveWins;
|
||||
IP_ADDR_STRING PrimaryWinsServer;
|
||||
IP_ADDR_STRING SecondaryWinsServer;
|
||||
ULONGLONG LeaseObtained; // time_t ?
|
||||
ULONGLONG LeaseExpires; // time_t ?
|
||||
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
|
||||
|
||||
|
||||
// #if (NTDDI_VERSION >= NTDDI_WIN2KSP1)
|
||||
// typedef IP_PER_ADAPTER_INFO_W2KSP1 IP_PER_ADAPTER_INFO;
|
||||
// typedef IP_PER_ADAPTER_INFO_W2KSP1 *PIP_PER_ADAPTER_INFO;
|
||||
// #endif
|
||||
|
||||
typedef struct _IP_PER_ADAPTER_INFO_W2KSP1 {
|
||||
UINT AutoconfigEnabled;
|
||||
UINT AutoconfigActive;
|
||||
PIP_ADDR_STRING CurrentDnsServer;
|
||||
IP_ADDR_STRING DnsServerList;
|
||||
} IP_PER_ADAPTER_INFO_W2KSP1, *PIP_PER_ADAPTER_INFO_W2KSP1, IP_PER_ADAPTER_INFO, *PIP_PER_ADAPTER_INFO;
|
||||
|
||||
|
||||
@@ -0,0 +1,266 @@
|
||||
typedef struct _IMAGE_FILE_HEADER {
|
||||
WORD Machine;
|
||||
WORD NumberOfSections;
|
||||
DWORD TimeDateStamp;
|
||||
DWORD PointerToSymbolTable;
|
||||
DWORD NumberOfSymbols;
|
||||
WORD SizeOfOptionalHeader;
|
||||
WORD Characteristics;
|
||||
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
|
||||
|
||||
typedef struct _IMAGE_DATA_DIRECTORY {
|
||||
DWORD VirtualAddress;
|
||||
DWORD Size;
|
||||
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
|
||||
|
||||
|
||||
typedef struct _IMAGE_SECTION_HEADER {
|
||||
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
|
||||
DWORD VirtualSize;
|
||||
DWORD VirtualAddress;
|
||||
DWORD SizeOfRawData;
|
||||
DWORD PointerToRawData;
|
||||
DWORD PointerToRelocations;
|
||||
DWORD PointerToLinenumbers;
|
||||
WORD NumberOfRelocations;
|
||||
WORD NumberOfLinenumbers;
|
||||
DWORD Characteristics;
|
||||
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
|
||||
|
||||
typedef struct _IMAGE_OPTIONAL_HEADER64 {
|
||||
WORD Magic;
|
||||
BYTE MajorLinkerVersion;
|
||||
BYTE MinorLinkerVersion;
|
||||
DWORD SizeOfCode;
|
||||
DWORD SizeOfInitializedData;
|
||||
DWORD SizeOfUninitializedData;
|
||||
DWORD AddressOfEntryPoint;
|
||||
DWORD BaseOfCode;
|
||||
ULONGLONG ImageBase;
|
||||
DWORD SectionAlignment;
|
||||
DWORD FileAlignment;
|
||||
WORD MajorOperatingSystemVersion;
|
||||
WORD MinorOperatingSystemVersion;
|
||||
WORD MajorImageVersion;
|
||||
WORD MinorImageVersion;
|
||||
WORD MajorSubsystemVersion;
|
||||
WORD MinorSubsystemVersion;
|
||||
DWORD Win32VersionValue;
|
||||
DWORD SizeOfImage;
|
||||
DWORD SizeOfHeaders;
|
||||
DWORD CheckSum;
|
||||
WORD Subsystem;
|
||||
WORD DllCharacteristics;
|
||||
ULONGLONG SizeOfStackReserve;
|
||||
ULONGLONG SizeOfStackCommit;
|
||||
ULONGLONG SizeOfHeapReserve;
|
||||
ULONGLONG SizeOfHeapCommit;
|
||||
DWORD LoaderFlags;
|
||||
DWORD NumberOfRvaAndSizes;
|
||||
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
|
||||
} IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64;
|
||||
|
||||
|
||||
typedef struct _IMAGE_OPTIONAL_HEADER {
|
||||
WORD Magic;
|
||||
BYTE MajorLinkerVersion;
|
||||
BYTE MinorLinkerVersion;
|
||||
DWORD SizeOfCode;
|
||||
DWORD SizeOfInitializedData;
|
||||
DWORD SizeOfUninitializedData;
|
||||
DWORD AddressOfEntryPoint;
|
||||
DWORD BaseOfCode;
|
||||
DWORD BaseOfData;
|
||||
DWORD ImageBase;
|
||||
DWORD SectionAlignment;
|
||||
DWORD FileAlignment;
|
||||
WORD MajorOperatingSystemVersion;
|
||||
WORD MinorOperatingSystemVersion;
|
||||
WORD MajorImageVersion;
|
||||
WORD MinorImageVersion;
|
||||
WORD MajorSubsystemVersion;
|
||||
WORD MinorSubsystemVersion;
|
||||
DWORD Win32VersionValue;
|
||||
DWORD SizeOfImage;
|
||||
DWORD SizeOfHeaders;
|
||||
DWORD CheckSum;
|
||||
WORD Subsystem;
|
||||
WORD DllCharacteristics;
|
||||
DWORD SizeOfStackReserve;
|
||||
DWORD SizeOfStackCommit;
|
||||
DWORD SizeOfHeapReserve;
|
||||
DWORD SizeOfHeapCommit;
|
||||
DWORD LoaderFlags;
|
||||
DWORD NumberOfRvaAndSizes;
|
||||
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
|
||||
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
|
||||
|
||||
typedef struct _IMAGE_NT_HEADERS64 {
|
||||
DWORD Signature;
|
||||
IMAGE_FILE_HEADER FileHeader;
|
||||
IMAGE_OPTIONAL_HEADER64 OptionalHeader;
|
||||
} IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64;
|
||||
|
||||
typedef struct _IMAGE_NT_HEADERS {
|
||||
DWORD Signature;
|
||||
IMAGE_FILE_HEADER FileHeader;
|
||||
IMAGE_OPTIONAL_HEADER32 OptionalHeader;
|
||||
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
|
||||
|
||||
typedef struct _IMAGE_IMPORT_DESCRIPTOR {
|
||||
DWORD OriginalFirstThunk;
|
||||
DWORD TimeDateStamp;
|
||||
DWORD ForwarderChain;
|
||||
DWORD Name;
|
||||
DWORD FirstThunk;
|
||||
} IMAGE_IMPORT_DESCRIPTOR, *PIMAGE_IMPORT_DESCRIPTOR;
|
||||
|
||||
typedef struct _IMAGE_IMPORT_BY_NAME {
|
||||
WORD Hint;
|
||||
BYTE Name[1];
|
||||
} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME;
|
||||
|
||||
typedef struct _IMAGE_EXPORT_DIRECTORY {
|
||||
DWORD Characteristics;
|
||||
DWORD TimeDateStamp;
|
||||
WORD MajorVersion;
|
||||
WORD MinorVersion;
|
||||
DWORD Name;
|
||||
DWORD Base;
|
||||
DWORD NumberOfFunctions;
|
||||
DWORD NumberOfNames;
|
||||
DWORD AddressOfFunctions;
|
||||
DWORD AddressOfNames;
|
||||
DWORD AddressOfNameOrdinals;
|
||||
} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
|
||||
|
||||
typedef struct _IMAGE_DEBUG_DIRECTORY {
|
||||
DWORD Characteristics;
|
||||
DWORD TimeDateStamp;
|
||||
WORD MajorVersion;
|
||||
WORD MinorVersion;
|
||||
DWORD Type;
|
||||
DWORD SizeOfData;
|
||||
DWORD AddressOfRawData;
|
||||
DWORD PointerToRawData;
|
||||
} IMAGE_DEBUG_DIRECTORY, *PIMAGE_DEBUG_DIRECTORY;
|
||||
|
||||
typedef struct _IMAGE_BASE_RELOCATION {
|
||||
DWORD VirtualAddress;
|
||||
DWORD SizeOfBlock;
|
||||
} IMAGE_BASE_RELOCATION, *PIMAGE_BASE_RELOCATION;
|
||||
|
||||
|
||||
// not found on MSDN : from symbols
|
||||
typedef struct _IMAGE_LOAD_CONFIG_CODE_INTEGRITY {
|
||||
WORD Flags;
|
||||
WORD Catalog;
|
||||
DWORD CatalogOffset;
|
||||
DWORD Reserved;
|
||||
} IMAGE_LOAD_CONFIG_CODE_INTEGRITY, *PIMAGE_LOAD_CONFIG_CODE_INTEGRITY;
|
||||
|
||||
|
||||
typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY32 {
|
||||
DWORD Size;
|
||||
DWORD TimeDateStamp;
|
||||
WORD MajorVersion;
|
||||
WORD MinorVersion;
|
||||
DWORD GlobalFlagsClear;
|
||||
DWORD GlobalFlagsSet;
|
||||
DWORD CriticalSectionDefaultTimeout;
|
||||
DWORD DeCommitFreeBlockThreshold;
|
||||
DWORD DeCommitTotalFreeThreshold;
|
||||
DWORD LockPrefixTable;
|
||||
DWORD MaximumAllocationSize;
|
||||
DWORD VirtualMemoryThreshold;
|
||||
DWORD ProcessHeapFlags;
|
||||
DWORD ProcessAffinityMask;
|
||||
WORD CSDVersion;
|
||||
WORD DependentLoadFlags;
|
||||
DWORD EditList;
|
||||
DWORD SecurityCookie;
|
||||
DWORD SEHandlerTable;
|
||||
DWORD SEHandlerCount;
|
||||
DWORD GuardCFCheckFunctionPointer;
|
||||
DWORD GuardCFDispatchFunctionPointer;
|
||||
DWORD GuardCFFunctionTable;
|
||||
DWORD GuardCFFunctionCount;
|
||||
DWORD GuardFlags;
|
||||
IMAGE_LOAD_CONFIG_CODE_INTEGRITY CodeIntegrity;
|
||||
DWORD GuardAddressTakenIatEntryTable;
|
||||
DWORD GuardAddressTakenIatEntryCount;
|
||||
DWORD GuardLongJumpTargetTable;
|
||||
DWORD GuardLongJumpTargetCount;
|
||||
DWORD DynamicValueRelocTable;
|
||||
DWORD CHPEMetadataPointer;
|
||||
DWORD GuardRFFailureRoutine;
|
||||
DWORD GuardRFFailureRoutineFunctionPointer;
|
||||
DWORD DynamicValueRelocTableOffset;
|
||||
WORD DynamicValueRelocTableSection;
|
||||
WORD Reserved2;
|
||||
DWORD GuardRFVerifyStackPointerFunctionPointer;
|
||||
DWORD HotPatchTableOffset;
|
||||
DWORD Reserved3;
|
||||
DWORD EnclaveConfigurationPointer;
|
||||
DWORD VolatileMetadataPointer;
|
||||
DWORD GuardEHContinuationTable;
|
||||
DWORD GuardEHContinuationCount;
|
||||
DWORD GuardXFGCheckFunctionPointer;
|
||||
DWORD GuardXFGDispatchFunctionPointer;
|
||||
DWORD GuardXFGTableDispatchFunctionPointer;
|
||||
DWORD CastGuardOsDeterminedFailureMode;
|
||||
DWORD GuardMemcpyFunctionPointer;
|
||||
} IMAGE_LOAD_CONFIG_DIRECTORY32, *PIMAGE_LOAD_CONFIG_DIRECTORY32;
|
||||
|
||||
|
||||
typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY64 {
|
||||
DWORD Size;
|
||||
DWORD TimeDateStamp;
|
||||
WORD MajorVersion;
|
||||
WORD MinorVersion;
|
||||
DWORD GlobalFlagsClear;
|
||||
DWORD GlobalFlagsSet;
|
||||
DWORD CriticalSectionDefaultTimeout;
|
||||
ULONGLONG DeCommitFreeBlockThreshold;
|
||||
ULONGLONG DeCommitTotalFreeThreshold;
|
||||
ULONGLONG LockPrefixTable;
|
||||
ULONGLONG MaximumAllocationSize;
|
||||
ULONGLONG VirtualMemoryThreshold;
|
||||
ULONGLONG ProcessAffinityMask;
|
||||
DWORD ProcessHeapFlags;
|
||||
WORD CSDVersion;
|
||||
WORD DependentLoadFlags;
|
||||
ULONGLONG EditList;
|
||||
ULONGLONG SecurityCookie;
|
||||
ULONGLONG SEHandlerTable;
|
||||
ULONGLONG SEHandlerCount;
|
||||
ULONGLONG GuardCFCheckFunctionPointer;
|
||||
ULONGLONG GuardCFDispatchFunctionPointer;
|
||||
ULONGLONG GuardCFFunctionTable;
|
||||
ULONGLONG GuardCFFunctionCount;
|
||||
DWORD GuardFlags;
|
||||
IMAGE_LOAD_CONFIG_CODE_INTEGRITY CodeIntegrity;
|
||||
ULONGLONG GuardAddressTakenIatEntryTable;
|
||||
ULONGLONG GuardAddressTakenIatEntryCount;
|
||||
ULONGLONG GuardLongJumpTargetTable;
|
||||
ULONGLONG GuardLongJumpTargetCount;
|
||||
ULONGLONG DynamicValueRelocTable;
|
||||
ULONGLONG CHPEMetadataPointer;
|
||||
ULONGLONG GuardRFFailureRoutine;
|
||||
ULONGLONG GuardRFFailureRoutineFunctionPointer;
|
||||
DWORD DynamicValueRelocTableOffset;
|
||||
WORD DynamicValueRelocTableSection;
|
||||
WORD Reserved2;
|
||||
ULONGLONG GuardRFVerifyStackPointerFunctionPointer;
|
||||
DWORD HotPatchTableOffset;
|
||||
DWORD Reserved3;
|
||||
ULONGLONG EnclaveConfigurationPointer;
|
||||
ULONGLONG VolatileMetadataPointer;
|
||||
ULONGLONG GuardEHContinuationTable;
|
||||
ULONGLONG GuardEHContinuationCount;
|
||||
ULONGLONG GuardXFGCheckFunctionPointer;
|
||||
ULONGLONG GuardXFGDispatchFunctionPointer;
|
||||
ULONGLONG GuardXFGTableDispatchFunctionPointer;
|
||||
ULONGLONG CastGuardOsDeterminedFailureMode;
|
||||
ULONGLONG GuardMemcpyFunctionPointer;
|
||||
} IMAGE_LOAD_CONFIG_DIRECTORY64, *PIMAGE_LOAD_CONFIG_DIRECTORY64;
|
||||
@@ -82,4 +82,16 @@ typedef struct _QUERY_SERVICE_CONFIGW {
|
||||
LPWSTR lpDependencies;
|
||||
LPWSTR lpServiceStartName;
|
||||
LPWSTR lpDisplayName;
|
||||
} QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW;
|
||||
} QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW;
|
||||
|
||||
|
||||
typedef struct _SERVICE_TABLE_ENTRYA {
|
||||
LPSTR lpServiceName;
|
||||
LPSERVICE_MAIN_FUNCTIONA lpServiceProc;
|
||||
} SERVICE_TABLE_ENTRYA, *LPSERVICE_TABLE_ENTRYA;
|
||||
|
||||
|
||||
typedef struct _SERVICE_TABLE_ENTRYW {
|
||||
LPWSTR lpServiceName;
|
||||
LPSERVICE_MAIN_FUNCTIONW lpServiceProc;
|
||||
} SERVICE_TABLE_ENTRYW, *LPSERVICE_TABLE_ENTRYW;
|
||||
@@ -29,4 +29,15 @@ enum PACKAGE_EXECUTION_STATE
|
||||
PES_SUSPENDING = 2,
|
||||
PES_SUSPENDED = 3,
|
||||
PES_TERMINATED = 4
|
||||
} PACKAGE_EXECUTION_STATE;
|
||||
} PACKAGE_EXECUTION_STATE;
|
||||
|
||||
typedef struct _SHFILEOPSTRUCTA {
|
||||
HWND hwnd;
|
||||
UINT wFunc;
|
||||
PCSTR pFrom;
|
||||
PCSTR pTo;
|
||||
FILEOP_FLAGS fFlags;
|
||||
BOOL fAnyOperationsAborted;
|
||||
LPVOID hNameMappings;
|
||||
PCSTR lpszProgressTitle;
|
||||
} SHFILEOPSTRUCTA, *LPSHFILEOPSTRUCTA;
|
||||
@@ -0,0 +1,69 @@
|
||||
/* Based on
|
||||
winternl.h
|
||||
&
|
||||
https://www.geoffchappell.com/studies/windows/km/ntoskrnl/api/ex/sysinfo/process.htm
|
||||
*/
|
||||
|
||||
typedef struct _SYSTEM_PROCESS_INFORMATION {
|
||||
ULONG NextEntryOffset;
|
||||
ULONG NumberOfThreads;
|
||||
BYTE Reserved1[24];
|
||||
LARGE_INTEGER CreateTime;
|
||||
LARGE_INTEGER UserTime;
|
||||
LARGE_INTEGER KernelTime;
|
||||
UNICODE_STRING ImageName;
|
||||
LONG BasePriority;
|
||||
HANDLE UniqueProcessId;
|
||||
PVOID InheritedFromUniqueProcessId;
|
||||
ULONG HandleCount;
|
||||
BYTE Reserved4[4];
|
||||
PVOID Reserved5[1];
|
||||
PVOID PeakVirtualSize;
|
||||
PVOID VirtualSize;
|
||||
PVOID PageFaultCount;
|
||||
PVOID PeakWorkingSetSize;
|
||||
PVOID WorkingSetSize;
|
||||
PVOID QuotaPeakPagedPoolUsage;
|
||||
PVOID QuotaPagedPoolUsage;
|
||||
PVOID QuotaPeakNonPagedPoolUsage;
|
||||
PVOID QuotaNonPagedPoolUsage;
|
||||
PVOID PagefileUsage;
|
||||
SIZE_T PeakPagefileUsage;
|
||||
SIZE_T PrivatePageCount;
|
||||
LARGE_INTEGER Reserved6[6];
|
||||
} SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
|
||||
|
||||
|
||||
typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
|
||||
LARGE_INTEGER IdleTime;
|
||||
LARGE_INTEGER KernelTime;
|
||||
LARGE_INTEGER UserTime;
|
||||
LARGE_INTEGER Reserved1[2];
|
||||
ULONG Reserved2;
|
||||
} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
|
||||
|
||||
|
||||
typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
|
||||
ULONG RegistryQuotaAllowed;
|
||||
ULONG RegistryQuotaUsed;
|
||||
PVOID Reserved1;
|
||||
} SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
|
||||
|
||||
typedef struct _SYSTEM_BASIC_INFORMATION {
|
||||
BYTE Reserved1[24];
|
||||
PVOID Reserved2[4];
|
||||
CHAR NumberOfProcessors;
|
||||
} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
|
||||
|
||||
|
||||
typedef enum _COMPUTER_NAME_FORMAT {
|
||||
ComputerNameNetBIOS,
|
||||
ComputerNameDnsHostname,
|
||||
ComputerNameDnsDomain,
|
||||
ComputerNameDnsFullyQualified,
|
||||
ComputerNamePhysicalNetBIOS,
|
||||
ComputerNamePhysicalDnsHostname,
|
||||
ComputerNamePhysicalDnsDomain,
|
||||
ComputerNamePhysicalDnsFullyQualified,
|
||||
ComputerNameMax
|
||||
} COMPUTER_NAME_FORMAT;
|
||||
@@ -1,4 +1,6 @@
|
||||
import windows # Allow extended-struct to use windows/winproxy/...
|
||||
import windows.pycompat
|
||||
|
||||
from ctypes import *
|
||||
from ctypes.wintypes import *
|
||||
|
||||
|
||||
@@ -226,91 +226,242 @@ typedef struct _SYSTEM_VERIFIER_INFORMATION {
|
||||
} SYSTEM_VERIFIER_INFORMATION, *PSYSTEM_VERIFIER_INFORMATION;
|
||||
|
||||
typedef enum _SYSTEM_INFORMATION_CLASS {
|
||||
SystemBasicInformation,
|
||||
SystemProcessorInformation,
|
||||
SystemPerformanceInformation,
|
||||
SystemTimeOfDayInformation,
|
||||
SystemPathInformation,
|
||||
SystemProcessInformation,
|
||||
SystemCallCountInformation,
|
||||
SystemDeviceInformation,
|
||||
SystemProcessorPerformanceInformation,
|
||||
SystemFlagsInformation,
|
||||
SystemCallTimeInformation,
|
||||
SystemModuleInformation,
|
||||
SystemLocksInformation,
|
||||
SystemStackTraceInformation,
|
||||
SystemPagedPoolInformation,
|
||||
SystemNonPagedPoolInformation,
|
||||
SystemHandleInformation,
|
||||
SystemObjectInformation,
|
||||
SystemPageFileInformation,
|
||||
SystemVdmInstemulInformation,
|
||||
SystemVdmBopInformation,
|
||||
SystemFileCacheInformation,
|
||||
SystemPoolTagInformation,
|
||||
SystemInterruptInformation,
|
||||
SystemDpcBehaviorInformation,
|
||||
SystemFullMemoryInformation,
|
||||
SystemLoadGdiDriverInformation,
|
||||
SystemUnloadGdiDriverInformation,
|
||||
SystemTimeAdjustmentInformation,
|
||||
SystemSummaryMemoryInformation,
|
||||
SystemMirrorMemoryInformation,
|
||||
SystemPerformanceTraceInformation,
|
||||
SystemObsolete0,
|
||||
SystemExceptionInformation,
|
||||
SystemCrashDumpStateInformation,
|
||||
SystemKernelDebuggerInformation,
|
||||
SystemContextSwitchInformation,
|
||||
SystemRegistryQuotaInformation,
|
||||
SystemExtendServiceTableInformation,
|
||||
SystemPrioritySeperation,
|
||||
SystemVerifierAddDriverInformation,
|
||||
SystemVerifierRemoveDriverInformation,
|
||||
SystemProcessorIdleInformation,
|
||||
SystemLegacyDriverInformation,
|
||||
SystemCurrentTimeZoneInformation,
|
||||
SystemLookasideInformation,
|
||||
SystemTimeSlipNotification,
|
||||
SystemSessionCreate,
|
||||
SystemSessionDetach,
|
||||
SystemSessionInformation,
|
||||
SystemRangeStartInformation,
|
||||
SystemVerifierInformation,
|
||||
SystemVerifierThunkExtend,
|
||||
SystemSessionProcessInformation,
|
||||
SystemLoadGdiDriverInSystemSpace,
|
||||
SystemNumaProcessorMap,
|
||||
SystemPrefetcherInformation,
|
||||
SystemExtendedProcessInformation,
|
||||
SystemRecommendedSharedDataAlignment,
|
||||
SystemComPlusPackage,
|
||||
SystemNumaAvailableMemory,
|
||||
SystemProcessorPowerInformation,
|
||||
SystemEmulationBasicInformation,
|
||||
SystemEmulationProcessorInformation,
|
||||
SystemExtendedHandleInformation,
|
||||
SystemLostDelayedWriteInformation,
|
||||
SystemBigPoolInformation,
|
||||
SystemSessionPoolTagInformation,
|
||||
SystemSessionMappedViewInformation,
|
||||
SystemHotpatchInformation,
|
||||
SystemObjectSecurityMode,
|
||||
SystemWatchdogTimerHandler,
|
||||
SystemWatchdogTimerInformation,
|
||||
SystemLogicalProcessorInformation,
|
||||
SystemWow64SharedInformation,
|
||||
SystemRegisterFirmwareTableInformationHandler,
|
||||
SystemFirmwareTableInformation,
|
||||
SystemModuleInformationEx,
|
||||
SystemVerifierTriageInformation,
|
||||
SystemSuperfetchInformation,
|
||||
SystemMemoryListInformation,
|
||||
SystemFileCacheInformationEx,
|
||||
MaxSystemInfoClass
|
||||
SystemBasicInformation = 0,
|
||||
SystemProcessorInformation = 1,
|
||||
SystemPerformanceInformation = 2,
|
||||
SystemTimeOfDayInformation = 3,
|
||||
SystemPathInformation = 4,
|
||||
SystemProcessInformation = 5,
|
||||
SystemCallCountInformation = 6,
|
||||
SystemDeviceInformation = 7,
|
||||
SystemProcessorPerformanceInformation = 8,
|
||||
SystemFlagsInformation = 9,
|
||||
SystemCallTimeInformation = 10,
|
||||
SystemModuleInformation = 11,
|
||||
SystemLocksInformation = 12,
|
||||
SystemStackTraceInformation = 13,
|
||||
SystemPagedPoolInformation = 14,
|
||||
SystemNonPagedPoolInformation = 15,
|
||||
SystemHandleInformation = 16,
|
||||
SystemObjectInformation = 17,
|
||||
SystemPageFileInformation = 18,
|
||||
SystemVdmInstemulInformation = 19,
|
||||
SystemVdmBopInformation = 20,
|
||||
SystemFileCacheInformation = 21,
|
||||
SystemPoolTagInformation = 22,
|
||||
SystemInterruptInformation = 23,
|
||||
SystemDpcBehaviorInformation = 24,
|
||||
SystemFullMemoryInformation = 25,
|
||||
SystemLoadGdiDriverInformation = 26,
|
||||
SystemUnloadGdiDriverInformation = 27,
|
||||
SystemTimeAdjustmentInformation = 28,
|
||||
SystemSummaryMemoryInformation = 29,
|
||||
SystemMirrorMemoryInformation = 30,
|
||||
SystemPerformanceTraceInformation = 31,
|
||||
SystemObsolete0 = 32,
|
||||
SystemExceptionInformation = 33,
|
||||
SystemCrashDumpStateInformation = 34,
|
||||
SystemKernelDebuggerInformation = 35,
|
||||
SystemContextSwitchInformation = 36,
|
||||
SystemRegistryQuotaInformation = 37,
|
||||
SystemExtendServiceTableInformation = 38,
|
||||
SystemPrioritySeperation = 39,
|
||||
SystemVerifierAddDriverInformation = 40,
|
||||
SystemVerifierRemoveDriverInformation = 41,
|
||||
SystemProcessorIdleInformation = 42,
|
||||
SystemLegacyDriverInformation = 43,
|
||||
SystemCurrentTimeZoneInformation = 44,
|
||||
SystemLookasideInformation = 45,
|
||||
SystemTimeSlipNotification = 46,
|
||||
SystemSessionCreate = 47,
|
||||
SystemSessionDetach = 48,
|
||||
SystemSessionInformation = 49,
|
||||
SystemRangeStartInformation = 50,
|
||||
SystemVerifierInformation = 51,
|
||||
SystemVerifierThunkExtend = 52,
|
||||
SystemSessionProcessInformation = 53,
|
||||
SystemLoadGdiDriverInSystemSpace = 54,
|
||||
SystemNumaProcessorMap = 55,
|
||||
SystemPrefetcherInformation = 56,
|
||||
SystemExtendedProcessInformation = 57,
|
||||
SystemRecommendedSharedDataAlignment = 58,
|
||||
SystemComPlusPackage = 59,
|
||||
SystemNumaAvailableMemory = 60,
|
||||
SystemProcessorPowerInformation = 61,
|
||||
SystemEmulationBasicInformation = 62,
|
||||
SystemEmulationProcessorInformation = 63,
|
||||
SystemExtendedHandleInformation = 64,
|
||||
SystemLostDelayedWriteInformation = 65,
|
||||
SystemBigPoolInformation = 66,
|
||||
SystemSessionPoolTagInformation = 67,
|
||||
SystemSessionMappedViewInformation = 68,
|
||||
SystemHotpatchInformation = 69,
|
||||
SystemObjectSecurityMode = 70,
|
||||
SystemWatchdogTimerHandler = 71,
|
||||
SystemWatchdogTimerInformation = 72,
|
||||
SystemLogicalProcessorInformation = 73,
|
||||
SystemWow64SharedInformationObsolete = 74,
|
||||
SystemRegisterFirmwareTableInformationHandler = 75,
|
||||
SystemFirmwareTableInformation = 76,
|
||||
SystemModuleInformationEx = 77,
|
||||
SystemVerifierTriageInformation = 78,
|
||||
SystemSuperfetchInformation = 79,
|
||||
SystemMemoryListInformation = 80,
|
||||
SystemFileCacheInformationEx = 81,
|
||||
SystemThreadPriorityClientIdInformation = 82,
|
||||
SystemProcessorIdleCycleTimeInformation = 83,
|
||||
SystemVerifierCancellationInformation = 84,
|
||||
SystemProcessorPowerInformationEx = 85,
|
||||
SystemRefTraceInformation = 86,
|
||||
SystemSpecialPoolInformation = 87,
|
||||
SystemProcessIdInformation = 88,
|
||||
SystemErrorPortInformation = 89,
|
||||
SystemBootEnvironmentInformation = 90,
|
||||
SystemHypervisorInformation = 91,
|
||||
SystemVerifierInformationEx = 92,
|
||||
SystemTimeZoneInformation = 93,
|
||||
SystemImageFileExecutionOptionsInformation = 94,
|
||||
SystemCoverageInformation = 95,
|
||||
SystemPrefetchPatchInformation = 96,
|
||||
SystemVerifierFaultsInformation = 97,
|
||||
SystemSystemPartitionInformation = 98,
|
||||
SystemSystemDiskInformation = 99,
|
||||
SystemProcessorPerformanceDistribution = 100,
|
||||
SystemNumaProximityNodeInformation = 101,
|
||||
SystemDynamicTimeZoneInformation = 102,
|
||||
SystemCodeIntegrityInformation = 103,
|
||||
SystemProcessorMicrocodeUpdateInformation = 104,
|
||||
SystemProcessorBrandString = 105,
|
||||
SystemVirtualAddressInformation = 106,
|
||||
SystemLogicalProcessorAndGroupInformation = 107,
|
||||
SystemProcessorCycleTimeInformation = 108,
|
||||
SystemStoreInformation = 109,
|
||||
SystemRegistryAppendString = 110,
|
||||
SystemAitSamplingValue = 111,
|
||||
SystemVhdBootInformation = 112,
|
||||
SystemCpuQuotaInformation = 113,
|
||||
SystemNativeBasicInformation = 114,
|
||||
SystemErrorPortTimeouts = 115,
|
||||
SystemLowPriorityIoInformation = 116,
|
||||
SystemBootEntropyInformation = 117,
|
||||
SystemVerifierCountersInformation = 118,
|
||||
SystemPagedPoolInformationEx = 119,
|
||||
SystemSystemPtesInformationEx = 120,
|
||||
SystemNodeDistanceInformation = 121,
|
||||
SystemAcpiAuditInformation = 122,
|
||||
SystemBasicPerformanceInformation = 123,
|
||||
SystemQueryPerformanceCounterInformation = 124,
|
||||
SystemSessionBigPoolInformation = 125,
|
||||
SystemBootGraphicsInformation = 126,
|
||||
SystemScrubPhysicalMemoryInformation = 127,
|
||||
SystemBadPageInformation = 128,
|
||||
SystemProcessorProfileControlArea = 129,
|
||||
SystemCombinePhysicalMemoryInformation = 130,
|
||||
SystemEntropyInterruptTimingInformation = 131,
|
||||
SystemConsoleInformation = 132,
|
||||
SystemPlatformBinaryInformation = 133,
|
||||
SystemPolicyInformation = 134,
|
||||
SystemHypervisorProcessorCountInformation = 135,
|
||||
SystemDeviceDataInformation = 136,
|
||||
SystemDeviceDataEnumerationInformation = 137,
|
||||
SystemMemoryTopologyInformation = 138,
|
||||
SystemMemoryChannelInformation = 139,
|
||||
SystemBootLogoInformation = 140,
|
||||
SystemProcessorPerformanceInformationEx = 141,
|
||||
SystemCriticalProcessErrorLogInformation = 142,
|
||||
SystemSecureBootPolicyInformation = 143,
|
||||
SystemPageFileInformationEx = 144,
|
||||
SystemSecureBootInformation = 145,
|
||||
SystemEntropyInterruptTimingRawInformation = 146,
|
||||
SystemPortableWorkspaceEfiLauncherInformation = 147,
|
||||
SystemFullProcessInformation = 148,
|
||||
SystemKernelDebuggerInformationEx = 149,
|
||||
SystemBootMetadataInformation = 150,
|
||||
SystemSoftRebootInformation = 151,
|
||||
SystemElamCertificateInformation = 152,
|
||||
SystemOfflineDumpConfigInformation = 153,
|
||||
SystemProcessorFeaturesInformation = 154,
|
||||
SystemRegistryReconciliationInformation = 155,
|
||||
SystemEdidInformation = 156,
|
||||
SystemManufacturingInformation = 157,
|
||||
SystemEnergyEstimationConfigInformation = 158,
|
||||
SystemHypervisorDetailInformation = 159,
|
||||
SystemProcessorCycleStatsInformation = 160,
|
||||
SystemVmGenerationCountInformation = 161,
|
||||
SystemTrustedPlatformModuleInformation = 162,
|
||||
SystemKernelDebuggerFlags = 163,
|
||||
SystemCodeIntegrityPolicyInformation = 164,
|
||||
SystemIsolatedUserModeInformation = 165,
|
||||
SystemHardwareSecurityTestInterfaceResultsInformation = 166,
|
||||
SystemSingleModuleInformation = 167,
|
||||
SystemAllowedCpuSetsInformation = 168,
|
||||
SystemVsmProtectionInformation = 169,
|
||||
SystemInterruptCpuSetsInformation = 170,
|
||||
SystemSecureBootPolicyFullInformation = 171,
|
||||
SystemCodeIntegrityPolicyFullInformation = 172,
|
||||
SystemAffinitizedInterruptProcessorInformation = 173,
|
||||
SystemRootSiloInformation = 174,
|
||||
SystemCpuSetInformation = 175,
|
||||
SystemCpuSetTagInformation = 176,
|
||||
SystemWin32WerStartCallout = 177,
|
||||
SystemSecureKernelProfileInformation = 178,
|
||||
SystemCodeIntegrityPlatformManifestInformation = 179,
|
||||
SystemInterruptSteeringInformation = 180,
|
||||
SystemSupportedProcessorArchitectures = 181,
|
||||
SystemMemoryUsageInformation = 182,
|
||||
SystemCodeIntegrityCertificateInformation = 183,
|
||||
SystemPhysicalMemoryInformation = 184,
|
||||
SystemControlFlowTransition = 185,
|
||||
SystemKernelDebuggingAllowed = 186,
|
||||
SystemActivityModerationExeState = 187,
|
||||
SystemActivityModerationUserSettings = 188,
|
||||
SystemCodeIntegrityPoliciesFullInformation = 189,
|
||||
SystemCodeIntegrityUnlockInformation = 190,
|
||||
SystemIntegrityQuotaInformation = 191,
|
||||
SystemFlushInformation = 192,
|
||||
SystemProcessorIdleMaskInformation = 193,
|
||||
SystemSecureDumpEncryptionInformation = 194,
|
||||
SystemWriteConstraintInformation = 195,
|
||||
SystemKernelVaShadowInformation = 196,
|
||||
SystemHypervisorSharedPageInformation = 197,
|
||||
SystemFirmwareBootPerformanceInformation = 198,
|
||||
SystemCodeIntegrityVerificationInformation = 199,
|
||||
SystemFirmwarePartitionInformation = 200,
|
||||
SystemSpeculationControlInformation = 201,
|
||||
SystemDmaGuardPolicyInformation = 202,
|
||||
SystemEnclaveLaunchControlInformation = 203,
|
||||
SystemWorkloadAllowedCpuSetsInformation = 204,
|
||||
SystemCodeIntegrityUnlockModeInformation = 205,
|
||||
SystemLeapSecondInformation = 206,
|
||||
SystemFlags2Information = 207,
|
||||
SystemSecurityModelInformation = 208,
|
||||
SystemCodeIntegritySyntheticCacheInformation = 209,
|
||||
SystemFeatureConfigurationInformation = 210,
|
||||
SystemFeatureConfigurationSectionInformation = 211,
|
||||
SystemFeatureUsageSubscriptionInformation = 212,
|
||||
SystemSecureSpeculationControlInformation = 213,
|
||||
SystemSpacesBootInformation = 214,
|
||||
SystemFwRamdiskInformation = 215,
|
||||
SystemWheaIpmiHardwareInformation = 216,
|
||||
SystemDifSetRuleClassInformation = 217,
|
||||
SystemDifClearRuleClassInformation = 218,
|
||||
SystemDifApplyPluginVerificationOnDriver = 219,
|
||||
SystemDifRemovePluginVerificationOnDriver = 220,
|
||||
SystemShadowStackInformation = 221,
|
||||
SystemBuildVersionInformation = 222,
|
||||
SystemPoolLimitInformation = 223,
|
||||
SystemCodeIntegrityAddDynamicStore = 224,
|
||||
SystemCodeIntegrityClearDynamicStores = 225,
|
||||
SystemPoolZeroingInformation = 227,
|
||||
MaxSystemInfoClass = 228,
|
||||
} SYSTEM_INFORMATION_CLASS;
|
||||
|
||||
|
||||
typedef struct _SYSTEM_PROCESS_ID_INFORMATION {
|
||||
HANDLE ProcessId;
|
||||
UNICODE_STRING ImageName;
|
||||
} SYSTEM_PROCESS_ID_INFORMATION, *PSYSTEM_PROCESS_ID_INFORMATION;
|
||||
|
||||
typedef enum _WELL_KNOWN_SID_TYPE{
|
||||
WinNullSid = 0,
|
||||
WinWorldSid = 1,
|
||||
@@ -711,25 +862,21 @@ typedef enum _SE_OBJECT_TYPE {
|
||||
SE_REGISTRY_WOW64_32KEY = 12,
|
||||
} SE_OBJECT_TYPE;
|
||||
|
||||
typedef enum _SECTION_INHERIT {
|
||||
ViewShare = 1,
|
||||
ViewUnmap = 2
|
||||
} SECTION_INHERIT;
|
||||
|
||||
typedef struct _CLIENT_ID{
|
||||
HANDLE UniqueProcess;
|
||||
HANDLE UniqueThread;
|
||||
} CLIENT_ID;
|
||||
} CLIENT_ID, *PCLIENT_ID;
|
||||
|
||||
typedef struct _CLIENT_ID64{
|
||||
ULONG64 UniqueProcess;
|
||||
ULONG64 UniqueThread;
|
||||
} CLIENT_ID64;
|
||||
} CLIENT_ID64, *PCLIENT_ID64;
|
||||
|
||||
typedef struct _CLIENT_ID32{
|
||||
ULONG UniqueProcess;
|
||||
ULONG UniqueThread;
|
||||
} CLIENT_ID32;
|
||||
} CLIENT_ID32, *PCLIENT_ID32;
|
||||
|
||||
typedef struct _LDR_DATA_TABLE_ENTRY {
|
||||
PVOID Reserved1[2];
|
||||
@@ -746,147 +893,6 @@ typedef struct _LDR_DATA_TABLE_ENTRY {
|
||||
} LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;
|
||||
|
||||
|
||||
typedef struct _IMAGE_FILE_HEADER {
|
||||
WORD Machine;
|
||||
WORD NumberOfSections;
|
||||
DWORD TimeDateStamp;
|
||||
DWORD PointerToSymbolTable;
|
||||
DWORD NumberOfSymbols;
|
||||
WORD SizeOfOptionalHeader;
|
||||
WORD Characteristics;
|
||||
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
|
||||
|
||||
typedef struct _IMAGE_DATA_DIRECTORY {
|
||||
DWORD VirtualAddress;
|
||||
DWORD Size;
|
||||
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
|
||||
|
||||
|
||||
typedef struct _IMAGE_SECTION_HEADER {
|
||||
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
|
||||
DWORD VirtualSize;
|
||||
DWORD VirtualAddress;
|
||||
DWORD SizeOfRawData;
|
||||
DWORD PointerToRawData;
|
||||
DWORD PointerToRelocations;
|
||||
DWORD PointerToLinenumbers;
|
||||
WORD NumberOfRelocations;
|
||||
WORD NumberOfLinenumbers;
|
||||
DWORD Characteristics;
|
||||
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
|
||||
|
||||
typedef struct _IMAGE_OPTIONAL_HEADER64 {
|
||||
WORD Magic;
|
||||
BYTE MajorLinkerVersion;
|
||||
BYTE MinorLinkerVersion;
|
||||
DWORD SizeOfCode;
|
||||
DWORD SizeOfInitializedData;
|
||||
DWORD SizeOfUninitializedData;
|
||||
DWORD AddressOfEntryPoint;
|
||||
DWORD BaseOfCode;
|
||||
ULONGLONG ImageBase;
|
||||
DWORD SectionAlignment;
|
||||
DWORD FileAlignment;
|
||||
WORD MajorOperatingSystemVersion;
|
||||
WORD MinorOperatingSystemVersion;
|
||||
WORD MajorImageVersion;
|
||||
WORD MinorImageVersion;
|
||||
WORD MajorSubsystemVersion;
|
||||
WORD MinorSubsystemVersion;
|
||||
DWORD Win32VersionValue;
|
||||
DWORD SizeOfImage;
|
||||
DWORD SizeOfHeaders;
|
||||
DWORD CheckSum;
|
||||
WORD Subsystem;
|
||||
WORD DllCharacteristics;
|
||||
ULONGLONG SizeOfStackReserve;
|
||||
ULONGLONG SizeOfStackCommit;
|
||||
ULONGLONG SizeOfHeapReserve;
|
||||
ULONGLONG SizeOfHeapCommit;
|
||||
DWORD LoaderFlags;
|
||||
DWORD NumberOfRvaAndSizes;
|
||||
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
|
||||
} IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64;
|
||||
|
||||
|
||||
typedef struct _IMAGE_OPTIONAL_HEADER {
|
||||
WORD Magic;
|
||||
BYTE MajorLinkerVersion;
|
||||
BYTE MinorLinkerVersion;
|
||||
DWORD SizeOfCode;
|
||||
DWORD SizeOfInitializedData;
|
||||
DWORD SizeOfUninitializedData;
|
||||
DWORD AddressOfEntryPoint;
|
||||
DWORD BaseOfCode;
|
||||
DWORD BaseOfData;
|
||||
DWORD ImageBase;
|
||||
DWORD SectionAlignment;
|
||||
DWORD FileAlignment;
|
||||
WORD MajorOperatingSystemVersion;
|
||||
WORD MinorOperatingSystemVersion;
|
||||
WORD MajorImageVersion;
|
||||
WORD MinorImageVersion;
|
||||
WORD MajorSubsystemVersion;
|
||||
WORD MinorSubsystemVersion;
|
||||
DWORD Win32VersionValue;
|
||||
DWORD SizeOfImage;
|
||||
DWORD SizeOfHeaders;
|
||||
DWORD CheckSum;
|
||||
WORD Subsystem;
|
||||
WORD DllCharacteristics;
|
||||
DWORD SizeOfStackReserve;
|
||||
DWORD SizeOfStackCommit;
|
||||
DWORD SizeOfHeapReserve;
|
||||
DWORD SizeOfHeapCommit;
|
||||
DWORD LoaderFlags;
|
||||
DWORD NumberOfRvaAndSizes;
|
||||
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
|
||||
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
|
||||
|
||||
typedef struct _IMAGE_NT_HEADERS64 {
|
||||
DWORD Signature;
|
||||
IMAGE_FILE_HEADER FileHeader;
|
||||
IMAGE_OPTIONAL_HEADER64 OptionalHeader;
|
||||
} IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64;
|
||||
|
||||
typedef struct _IMAGE_NT_HEADERS {
|
||||
DWORD Signature;
|
||||
IMAGE_FILE_HEADER FileHeader;
|
||||
IMAGE_OPTIONAL_HEADER32 OptionalHeader;
|
||||
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
|
||||
|
||||
typedef struct _IMAGE_IMPORT_DESCRIPTOR {
|
||||
DWORD OriginalFirstThunk;
|
||||
DWORD TimeDateStamp;
|
||||
DWORD ForwarderChain;
|
||||
DWORD Name;
|
||||
DWORD FirstThunk;
|
||||
} IMAGE_IMPORT_DESCRIPTOR, *PIMAGE_IMPORT_DESCRIPTOR;
|
||||
|
||||
typedef struct _IMAGE_IMPORT_BY_NAME {
|
||||
WORD Hint;
|
||||
BYTE Name[1];
|
||||
} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME;
|
||||
|
||||
typedef struct _IMAGE_EXPORT_DIRECTORY {
|
||||
DWORD Characteristics;
|
||||
DWORD TimeDateStamp;
|
||||
WORD MajorVersion;
|
||||
WORD MinorVersion;
|
||||
DWORD Name;
|
||||
DWORD Base;
|
||||
DWORD NumberOfFunctions;
|
||||
DWORD NumberOfNames;
|
||||
DWORD AddressOfFunctions;
|
||||
DWORD AddressOfNames;
|
||||
DWORD AddressOfNameOrdinals;
|
||||
} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
|
||||
|
||||
typedef struct _IMAGE_BASE_RELOCATION {
|
||||
DWORD VirtualAddress;
|
||||
DWORD SizeOfBlock;
|
||||
} IMAGE_BASE_RELOCATION, *PIMAGE_BASE_RELOCATION;
|
||||
|
||||
typedef struct _MEMORY_BASIC_INFORMATION {
|
||||
PVOID BaseAddress;
|
||||
PVOID AllocationBase;
|
||||
@@ -1377,13 +1383,6 @@ typedef struct _OSVERSIONINFOEXW {
|
||||
} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
|
||||
|
||||
|
||||
typedef struct _OVERLAPPED {
|
||||
ULONG_PTR Internal;
|
||||
ULONG_PTR InternalHigh;
|
||||
PVOID Pointer;
|
||||
HANDLE hEvent;
|
||||
} OVERLAPPED, *LPOVERLAPPED;
|
||||
|
||||
|
||||
typedef struct _EXCEPTION_RECORD {
|
||||
DWORD ExceptionCode;
|
||||
@@ -2022,13 +2021,6 @@ typedef struct _FILE_FS_OBJECTID_INFORMATION {
|
||||
UCHAR ExtendedInfo[48];
|
||||
} FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION;
|
||||
|
||||
typedef struct _FILE_FS_DRIVER_PATH_INFORMATION {
|
||||
BOOLEAN DriverInPath;
|
||||
ULONG DriverNameLength;
|
||||
WCHAR DriverName[1];
|
||||
} FILE_FS_DRIVER_PATH_INFORMATION, *PFILE_FS_DRIVER_PATH_INFORMATION;
|
||||
|
||||
|
||||
typedef struct _FILE_FS_DRIVER_PATH_INFORMATION {
|
||||
BOOLEAN DriverInPath;
|
||||
ULONG DriverNameLength;
|
||||
@@ -2129,3 +2121,8 @@ typedef struct _FILETIME {
|
||||
} FILETIME, *PFILETIME, *LPFILETIME;
|
||||
|
||||
|
||||
typedef enum _NT_PRODUCT_TYPE {
|
||||
NtProductWinNt = 1,
|
||||
NtProductLanManNt,
|
||||
NtProductServer
|
||||
} NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE;
|
||||
@@ -62,7 +62,7 @@ typedef struct _API_SET_VALUE_ARRAY_V4 {
|
||||
ULONG GuessFlags;
|
||||
ULONG Count;
|
||||
API_SET_VALUE_ENTRY_V2 Array[ANYSIZE_ARRAY];
|
||||
} API_SET_VALUE_ARRAY_V4,*PAPI_SET_VALUE_ARRAY_V2;
|
||||
} API_SET_VALUE_ARRAY_V4,*PAPI_SET_VALUE_ARRAY_V4;
|
||||
|
||||
typedef struct _API_SET_NAMESPACE_ARRAY_V4 {
|
||||
ULONG Version;
|
||||
|
||||
@@ -0,0 +1,122 @@
|
||||
typedef struct WSAData64 {
|
||||
WORD wVersion;
|
||||
WORD wHighVersion;
|
||||
USHORT iMaxSockets;
|
||||
USHORT iMaxUdpDg;
|
||||
CHAR * lpVendorInfo;
|
||||
CHAR szDescription[WSADESCRIPTION_LEN+1];
|
||||
CHAR szSystemStatus[WSASYS_STATUS_LEN+1];
|
||||
} WSADATA64, *LPWSADATA64;
|
||||
|
||||
typedef struct WSAData32 {
|
||||
WORD wVersion;
|
||||
WORD wHighVersion;
|
||||
CHAR szDescription[WSADESCRIPTION_LEN+1];
|
||||
CHAR szSystemStatus[WSASYS_STATUS_LEN+1];
|
||||
USHORT iMaxSockets;
|
||||
USHORT iMaxUdpDg;
|
||||
CHAR * lpVendorInfo;
|
||||
} WSADATA32, *LPWSADATA32;
|
||||
|
||||
struct in_addr {
|
||||
union {
|
||||
struct {
|
||||
UCHAR s_b1;
|
||||
UCHAR s_b2;
|
||||
UCHAR s_b3;
|
||||
UCHAR s_b4;
|
||||
} S_un_b;
|
||||
struct {
|
||||
USHORT s_w1;
|
||||
USHORT s_w2;
|
||||
} S_un_w;
|
||||
ULONG S_addr;
|
||||
} S_un;
|
||||
};
|
||||
|
||||
struct sockaddr {
|
||||
USHORT sa_family;
|
||||
CHAR sa_data[14];
|
||||
};
|
||||
|
||||
struct sockaddr_in {
|
||||
SHORT sin_family;
|
||||
USHORT sin_port;
|
||||
struct in_addr sin_addr;
|
||||
CHAR sin_zero[8];
|
||||
};
|
||||
|
||||
|
||||
typedef struct addrinfoW {
|
||||
INT ai_flags;
|
||||
INT ai_family;
|
||||
INT ai_socktype;
|
||||
INT ai_protocol;
|
||||
SIZE_T ai_addrlen;
|
||||
PWSTR ai_canonname;
|
||||
struct sockaddr *ai_addr;
|
||||
struct addrinfoW *ai_next;
|
||||
} ADDRINFOW, *PADDRINFOW;
|
||||
|
||||
typedef struct _WSAPROTOCOLCHAIN {
|
||||
INT ChainLen;
|
||||
DWORD ChainEntries[MAX_PROTOCOL_CHAIN];
|
||||
} WSAPROTOCOLCHAIN, *LPWSAPROTOCOLCHAIN;
|
||||
|
||||
typedef struct _WSAPROTOCOL_INFOA {
|
||||
DWORD dwServiceFlags1;
|
||||
DWORD dwServiceFlags2;
|
||||
DWORD dwServiceFlags3;
|
||||
DWORD dwServiceFlags4;
|
||||
DWORD dwProviderFlags;
|
||||
GUID ProviderId;
|
||||
DWORD dwCatalogEntryId;
|
||||
WSAPROTOCOLCHAIN ProtocolChain;
|
||||
INT iVersion;
|
||||
INT iAddressFamily;
|
||||
INT iMaxSockAddr;
|
||||
INT iMinSockAddr;
|
||||
INT iSocketType;
|
||||
INT iProtocol;
|
||||
INT iProtocolMaxOffset;
|
||||
INT iNetworkByteOrder;
|
||||
INT iSecurityScheme;
|
||||
DWORD dwMessageSize;
|
||||
DWORD dwProviderReserved;
|
||||
CHAR szProtocol[WSAPROTOCOL_LEN + 1];
|
||||
} WSAPROTOCOL_INFOA, *LPWSAPROTOCOL_INFOA;
|
||||
|
||||
typedef struct _WSAPROTOCOL_INFOW {
|
||||
DWORD dwServiceFlags1;
|
||||
DWORD dwServiceFlags2;
|
||||
DWORD dwServiceFlags3;
|
||||
DWORD dwServiceFlags4;
|
||||
DWORD dwProviderFlags;
|
||||
GUID ProviderId;
|
||||
DWORD dwCatalogEntryId;
|
||||
WSAPROTOCOLCHAIN ProtocolChain;
|
||||
INT iVersion;
|
||||
INT iAddressFamily;
|
||||
INT iMaxSockAddr;
|
||||
INT iMinSockAddr;
|
||||
INT iSocketType;
|
||||
INT iProtocol;
|
||||
INT iProtocolMaxOffset;
|
||||
INT iNetworkByteOrder;
|
||||
INT iSecurityScheme;
|
||||
DWORD dwMessageSize;
|
||||
DWORD dwProviderReserved;
|
||||
WCHAR szProtocol[WSAPROTOCOL_LEN + 1];
|
||||
} WSAPROTOCOL_INFOW, *LPWSAPROTOCOL_INFOW;
|
||||
|
||||
|
||||
typedef struct addrinfo {
|
||||
INT ai_flags;
|
||||
INT ai_family;
|
||||
INT ai_socktype;
|
||||
INT ai_protocol;
|
||||
SIZE_T ai_addrlen;
|
||||
CHAR *ai_canonname;
|
||||
struct sockaddr *ai_addr;
|
||||
struct addrinfo *ai_next;
|
||||
} ADDRINFOA, *PADDRINFOA;
|
||||
@@ -0,0 +1,11 @@
|
||||
INITIAL_FILE_RENAME_INFORMATION = _FILE_RENAME_INFORMATION
|
||||
|
||||
class _FILE_RENAME_INFORMATION(INITIAL_FILE_RENAME_INFORMATION):
|
||||
@property
|
||||
def filename(self):
|
||||
filename_addr = ctypes.addressof(self) + type(self).FileName.offset
|
||||
if getattr(self, "_target", None) is not None: #remote ctypes :D -> TRICKS OF THE YEAR
|
||||
raw_data = self._target.read_memory(filename_addr, self.FileNameLength)
|
||||
return raw_data.decode("utf16")
|
||||
size = int(self.FileNameLength / 2)
|
||||
return (ctypes.c_wchar * size).from_address(filename_addr)[:]
|
||||
@@ -26,7 +26,7 @@ class _LSA_UNICODE_STRING(INITIAL_LSA_UNICODE_STRING):
|
||||
return cls(size, size, ctypes.cast(buffer, PVOID))
|
||||
|
||||
def __repr__(self):
|
||||
return """<{0} "{1}" at {2}>""".format(type(self).__name__, self.str, hex(id(self)))
|
||||
return windows.pycompat.urepr_encode(u"""<{0} "{1}" at {2}>""".format(type(self).__name__, self.str, hex(id(self))))
|
||||
|
||||
def __sprint__(self):
|
||||
try:
|
||||
|
||||
@@ -13,4 +13,5 @@ class _OBJECT_ATTRIBUTES(_OBJECT_ATTRIBUTES):
|
||||
def __repr__(self):
|
||||
if not self.ObjectName:
|
||||
return super(_OBJECT_ATTRIBUTES, self).__repr__()
|
||||
return """<{0} ObjectName="{1}">""".format(type(self).__name__, self.ObjectName[0].str)
|
||||
# .contents allow compatibility with remotectypes
|
||||
return """<{0} ObjectName="{1}">""".format(type(self).__name__, self.ObjectName.contents.str)
|
||||
@@ -45,7 +45,7 @@ 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", "_Outptr_"]
|
||||
known_io_info_with_param = ["_Out_writes_bytes_", "_In_reads_bytes_opt_", "_In_reads_bytes_", "_Out_writes_", "_Out_writes_bytes_to_opt_"]
|
||||
known_io_info_with_param = ["_Out_writes_bytes_", "_In_reads_bytes_opt_", "_In_reads_bytes_", "_Out_writes_", "_Out_writes_bytes_to_opt_", "_Out_writes_bytes_opt_"]
|
||||
known_declarations = {
|
||||
"WINAPI" : "WINFUNCTYPE",
|
||||
"LDAPAPI" : "CFUNCTYPE"
|
||||
@@ -53,20 +53,33 @@ class WinFuncParser(Parser):
|
||||
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:
|
||||
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 infos params.
|
||||
self.assert_token_type(OpenParenthesisToken)
|
||||
while type(self.peek()) is not CloseParenthesisToken:
|
||||
self.next_token()
|
||||
self.assert_token_type(CloseParenthesisToken)
|
||||
return io_info
|
||||
if type(self.peek()) == NameToken:
|
||||
# Old IO infos format based on known_io_info_type & co
|
||||
io_info = self.assert_token_type(NameToken)
|
||||
if io_info.value not in self.known_io_info_type:
|
||||
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 infos params.
|
||||
self.assert_token_type(OpenParenthesisToken)
|
||||
while type(self.peek()) is not CloseParenthesisToken:
|
||||
self.next_token()
|
||||
self.assert_token_type(CloseParenthesisToken)
|
||||
else:
|
||||
# New format: [xxx, yyy, xxx]
|
||||
self.assert_token_type(OpenSquareBracketToken)
|
||||
while type(self.peek()) is not CloseSquareBracketToken:
|
||||
self.next_token() # Assert Name/Comma & co ?
|
||||
self.assert_token_type(CloseSquareBracketToken)
|
||||
return None
|
||||
|
||||
def parse_func_arg(self, has_winapi):
|
||||
type_ptr = False
|
||||
if has_winapi:
|
||||
next_token = self.peek()
|
||||
# Try to guess if IO type info are present
|
||||
# New MSDN format that [in, out] info without any WINAPI indicator
|
||||
if (has_winapi or
|
||||
type(next_token) == OpenSquareBracketToken or
|
||||
type(next_token) == NameToken and (next_token.value in self.known_io_info_type + self.known_io_info_with_param)):
|
||||
self.assert_argument_io_info()
|
||||
arg_type = self.assert_token_type(NameToken)
|
||||
if arg_type.value.upper() == "CONST":
|
||||
@@ -121,20 +134,6 @@ class WinFuncParser(Parser):
|
||||
return res
|
||||
|
||||
|
||||
|
||||
|
||||
def dbg_lexer(data):
|
||||
for i in Lexer(data).token_generation():
|
||||
print i
|
||||
|
||||
def dbg_parser(data):
|
||||
return WinFuncParser(data).parse()
|
||||
|
||||
def dbg_validate(data):
|
||||
return validate_structs(Parser(data).parse())
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
data = open(sys.argv[1], 'r').read()
|
||||
|
||||
+122
-22
@@ -4,8 +4,12 @@ import os.path
|
||||
import re
|
||||
import glob
|
||||
import textwrap
|
||||
import StringIO
|
||||
try:
|
||||
from StringIO import StringIO
|
||||
except ImportError:
|
||||
from io import StringIO # Py3
|
||||
|
||||
import pprint
|
||||
import shutil
|
||||
|
||||
import dummy_wintypes
|
||||
@@ -14,6 +18,7 @@ import func_parser
|
||||
import def_parser
|
||||
import com_parser
|
||||
|
||||
from winstruct import BitFieldValue, ComplexArrayExpression
|
||||
from simpleparser import ParsingError
|
||||
|
||||
pjoin = os.path.join
|
||||
@@ -42,6 +47,9 @@ class ParsedFile(object):
|
||||
self.compute_imports_exports(self.data)
|
||||
|
||||
def add_exports(self, *names):
|
||||
new_names = set(names)
|
||||
if self.exports & new_names:
|
||||
raise ValueError("Error: file <{0}> have multiple definition for <{1}>".format(self.filename, self.exports & new_names))
|
||||
self.exports.update(names)
|
||||
|
||||
def add_imports(self, *names):
|
||||
@@ -64,23 +72,24 @@ class StructureParsedFile(ParsedFile):
|
||||
structs, enums = data
|
||||
for enum in enums:
|
||||
self.add_exports(enum.name)
|
||||
self.add_exports(*enum.typedef)
|
||||
self.add_exports(*[n for n in enum.typedef if n != enum.name])
|
||||
for struct in structs:
|
||||
self.compute_imports_exports_for_struct(struct)
|
||||
|
||||
|
||||
def compute_imports_exports_for_struct(self, struct):
|
||||
def compute_imports_exports_for_struct(self, struct, is_sub_struct=False):
|
||||
self.asser_struct_not_already_in_import(struct)
|
||||
if any(x in self.imports for x in [struct.name] + struct.typedef.keys()):
|
||||
if any(x in self.imports for x in [struct.name] + list(struct.typedef)):
|
||||
print("Export <{0}> defined after first use".format(struct.name))
|
||||
raise ValueError("LOL")
|
||||
if struct.name is not None: # Anonymous structs
|
||||
if struct.name is not None and not is_sub_struct: # Anonymous structs
|
||||
self.add_exports(struct.name)
|
||||
self.add_exports(*struct.typedef)
|
||||
if not is_sub_struct: # Sub struct will not be directly exposed : so not an export
|
||||
self.add_exports(*[n for n in struct.typedef if n != struct.name])
|
||||
for field_type, field_name, nb_rep in struct.fields:
|
||||
if field_name is None:
|
||||
# Anon sub-struct/union
|
||||
self.compute_imports_exports_for_struct(field_type)
|
||||
self.compute_imports_exports_for_struct(field_type, is_sub_struct=True)
|
||||
continue
|
||||
if field_type.name not in self.exports:
|
||||
self.add_imports(field_type.name)
|
||||
@@ -92,7 +101,7 @@ class StructureParsedFile(ParsedFile):
|
||||
self.add_imports(*nb_rep.get_names())
|
||||
|
||||
def asser_struct_not_already_in_import(self, struct):
|
||||
for sname in [struct.name] + struct.typedef.keys():
|
||||
for sname in [struct.name] + list(struct.typedef):
|
||||
try:
|
||||
already_used = self.imports_by_struct[sname]
|
||||
raise ValueError("Structure <{0}> is defined after being used in <{1}>".format(sname, already_used))
|
||||
@@ -112,6 +121,8 @@ class DefinitionParsedFile(ParsedFile):
|
||||
|
||||
def compute_imports_exports(self, data):
|
||||
for windef in data:
|
||||
if windef.name in self.exports:
|
||||
raise ValueError("File <{filename}> define <{windef}> multiple times".format(filename=self.filename, windef=windef.name))
|
||||
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
|
||||
@@ -182,7 +193,7 @@ class ParsedFileGraph(object):
|
||||
self.build_depandance_database()
|
||||
|
||||
def build_dependancy_graph(self):
|
||||
todo = set(self.nodes)
|
||||
todo = sorted(set(self.nodes), key=lambda x: x.filename) # Sorting help determinism
|
||||
if not todo:
|
||||
return []
|
||||
start = self.find_starting_node()
|
||||
@@ -275,7 +286,7 @@ class CtypesGenerator(object):
|
||||
def __init__(self, parsed_files, template):
|
||||
self.files = parsed_files # Already in generation order
|
||||
self.template = template # MAKE BETTER
|
||||
self.result = StringIO.StringIO()
|
||||
self.result = StringIO()
|
||||
self.imported_name = set([])
|
||||
|
||||
def add_import_name(self, name):
|
||||
@@ -295,7 +306,7 @@ class CtypesGenerator(object):
|
||||
pass
|
||||
|
||||
def emit_import_dependancies(self):
|
||||
for name in self.imported_name:
|
||||
for name in sorted(self.imported_name):
|
||||
self.emitline("from .{0} import *".format(name))
|
||||
|
||||
def copy_template(self):
|
||||
@@ -325,7 +336,7 @@ class CtypesGenerator(object):
|
||||
class NoTemplatedGenerator(CtypesGenerator):
|
||||
def __init__(self, parsed_files):
|
||||
self.files = parsed_files # Already in generation order
|
||||
self.result = StringIO.StringIO()
|
||||
self.result = StringIO()
|
||||
self.imported_name = set([])
|
||||
|
||||
def copy_template(self):
|
||||
@@ -562,18 +573,36 @@ class StructureDocGenerator(NoTemplatedGenerator):
|
||||
self.emitline(struct.name)
|
||||
self.emitline(self.STRUCT_NAME_SEPARATOR * len(struct.name))
|
||||
# Emit typedef
|
||||
for name, type in struct.typedef.items():
|
||||
for name, type in sorted(struct.typedef.items()):
|
||||
# May have no real type def -> ignore
|
||||
if name == type.name:
|
||||
continue
|
||||
self.emitline(".. class:: {0}".format(name))
|
||||
self.emitline("")
|
||||
if hasattr(type, "type"):
|
||||
self.emitline(" Pointer to :class:`{0}`".format(type.type.name))
|
||||
else:
|
||||
if "SYMSRV_INDEX_INFOW" in type.name:
|
||||
import pdb;pdb.set_trace()
|
||||
|
||||
self.emitline(" Alias for :class:`{0}`".format(type.name))
|
||||
self.emitline("")
|
||||
# Emit struct Definition
|
||||
self.emitline(".. class:: {0}".format(struct.name))
|
||||
for ftype, fname, nb in struct.fields:
|
||||
array_str = " ``[{nb}]``".format(nb=nb) if nb > 1 else ""
|
||||
if isinstance(nb, int):
|
||||
array_str = " ``[{nb}]``".format(nb=nb) if nb > 1 else ""
|
||||
elif isinstance(nb, BitFieldValue):
|
||||
array_str = " ``(BitField of size {nb}``".format(nb=int(nb))
|
||||
elif isinstance(nb, ComplexArrayExpression):
|
||||
values = nb.values
|
||||
if len(values) == 1 and values[0] == "1":
|
||||
array_str = ""
|
||||
else:
|
||||
array_str = " ``[{nb}]``".format(nb=" ".join(nb.values))
|
||||
else:
|
||||
raise TypeError("Unknown type for array expression: {0}".format(nb))
|
||||
|
||||
self.emitline("")
|
||||
self.emitline(" .. attribute:: {fname}".format(fname=fname))
|
||||
self.emitline("")
|
||||
@@ -588,7 +617,10 @@ class StructureDocGenerator(NoTemplatedGenerator):
|
||||
self.emitline(enum.name)
|
||||
self.emitline(self.STRUCT_NAME_SEPARATOR * len(enum.name))
|
||||
# Emit typedef
|
||||
for name, type in enum.typedef.items():
|
||||
for name, type in sorted(enum.typedef.items()):
|
||||
# May have no real type def -> ignore
|
||||
if name == type.name:
|
||||
continue
|
||||
self.emitline(".. class:: {0}".format(name))
|
||||
self.emitline("")
|
||||
if hasattr(type, "type"):
|
||||
@@ -603,6 +635,53 @@ class StructureDocGenerator(NoTemplatedGenerator):
|
||||
self.emitline(" .. attribute:: {0}({1})".format(enum_name, enum_value))
|
||||
self.emitline("")
|
||||
|
||||
class WinFuncDocGenerator(NoTemplatedGenerator):
|
||||
def copy_template(self):
|
||||
self.emitline(".. module:: windows.generated_def.winfuncs")
|
||||
self.emitline("")
|
||||
self.emitline("Functions")
|
||||
self.emitline("----------")
|
||||
|
||||
|
||||
def generate(self):
|
||||
self.copy_template()
|
||||
for file in self.files:
|
||||
for function in file.data:
|
||||
self.generate_function_doc(function)
|
||||
|
||||
def generate_function_doc(self, function):
|
||||
param_list = ", ".join(name for t, name in function.params)
|
||||
self.emitline(".. function:: {0}({1})".format(function.name, param_list))
|
||||
self.emitline("")
|
||||
|
||||
|
||||
|
||||
class ComDocGenerator(NoTemplatedGenerator):
|
||||
def copy_template(self):
|
||||
self.emitline(".. module:: windows.generated_def.interfaces")
|
||||
self.emitline("")
|
||||
self.emitline("Interfaces")
|
||||
self.emitline("----------")
|
||||
|
||||
|
||||
def generate(self):
|
||||
self.copy_template()
|
||||
for file in self.files:
|
||||
interface = file.data
|
||||
self.generate_interface_doc(interface)
|
||||
|
||||
def generate_interface_doc(self, interface):
|
||||
self.emitline(".. class:: {0}".format(interface.name))
|
||||
self.emitline("")
|
||||
for method in interface.methods:
|
||||
self.emitline(" .. method:: {0}".format(method.name))
|
||||
self.emitline("")
|
||||
self.emitline("")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
META_WALKER = """
|
||||
def generate_walker(namelist, target_module):
|
||||
def my_walker():
|
||||
@@ -613,7 +692,7 @@ def generate_walker(namelist, target_module):
|
||||
|
||||
class MetaFileGenerator(NoTemplatedGenerator):
|
||||
def __init__(self):
|
||||
self.result = StringIO.StringIO()
|
||||
self.result = StringIO()
|
||||
self.modules = []
|
||||
|
||||
def add_exportlist(self, name, modname, exports):
|
||||
@@ -622,10 +701,17 @@ class MetaFileGenerator(NoTemplatedGenerator):
|
||||
def add_export_module(self, module):
|
||||
self.add_exportlist(module.name, module.name, module.modules_exports())
|
||||
|
||||
def generate(self):
|
||||
def pformat_exports_set(self, exports):
|
||||
"""A pretty print-function that have the same behavior on py2 & py3 (pprint.pformat is not)"""
|
||||
assert isinstance(exports, set)
|
||||
# import pdb;pdb.set_trace()
|
||||
export_list = [repr(e) for e in sorted(exports)]
|
||||
return "{{{0}}}\n".format(",\n".join(export_list)) # -> {export_list}
|
||||
|
||||
def generate(self):
|
||||
for name, modname, exports in self.modules:
|
||||
self.emitline("{0} = {1}".format(name, exports))
|
||||
# import pdb;pdb.set_trace()
|
||||
self.emitline("{0} = {1}".format(name, self.pformat_exports_set(exports)))
|
||||
|
||||
self.emitline(META_WALKER)
|
||||
|
||||
@@ -647,10 +733,12 @@ class ModuleGenerator(object):
|
||||
def add_module_dependancy(self, module):
|
||||
self.dependances_modules.add(module)
|
||||
|
||||
|
||||
def get_template_filename(self):
|
||||
return pjoin(self.src, "template.py")
|
||||
|
||||
def get_template_exports(self):
|
||||
return []
|
||||
|
||||
def parse_source_directory(self, recurse=False):
|
||||
self.nodes += ParsedDirectory(self.filetype, self.src, recurse=recurse).nodes
|
||||
|
||||
@@ -688,7 +776,11 @@ class ModuleGenerator(object):
|
||||
def generate(self):
|
||||
self.parse_source_directory()
|
||||
# Flatten the graph
|
||||
flatten_nodes = self.resolve_dependancies()
|
||||
template_exports = self.get_template_exports()
|
||||
if template_exports:
|
||||
template_exports = [FakeExporter(template_exports)]
|
||||
flatten_nodes = self.resolve_dependancies(depnodes=template_exports)
|
||||
assert flatten_nodes
|
||||
self.generate_from_nodelist(flatten_nodes)
|
||||
self.nodes = flatten_nodes
|
||||
|
||||
@@ -699,6 +791,7 @@ class ModuleGenerator(object):
|
||||
depnodes += moddep.nodes
|
||||
flatten_nodes = self.resolve_dependancies(depnodes=depnodes)
|
||||
self.generate_from_nodelist(flatten_nodes)
|
||||
self.nodes = flatten_nodes
|
||||
|
||||
def after_ctypes_generator_init(self, ctypesgen):
|
||||
pass
|
||||
@@ -742,6 +835,11 @@ shutil.copy(from_here(r"definitions\flag.py"), DEST_DIR)
|
||||
print("== Generating defines ==")
|
||||
# Generate defines
|
||||
definemodulegenerator = ModuleGenerator("windef", DefinitionParsedFile, DefineCtypesGenerator, DefineDocGenerator, from_here(r"definitions\defines"))
|
||||
# The windef.py template explicitly export CTL_CODE macro as a python function to simplify parsing
|
||||
# Add here the fact that this symbol is exported somewhere to prevent a
|
||||
# ValueError: Missing dependancy <CTL_CODE> of <DefinitionParsedFile "XXX">
|
||||
# Give a nive way to the template to give its list of exports ?
|
||||
definemodulegenerator.get_template_exports = lambda : ["CTL_CODE"]
|
||||
definemodulegenerator.generate()
|
||||
definemodulegenerator.generate_doc(from_here(r"..\docs\source\windef_generated.rst"))
|
||||
|
||||
@@ -776,23 +874,25 @@ structure_module_generator.generate_doc(from_here(r"..\docs\source\winstructs_ge
|
||||
|
||||
print("== Generating COM interfaces ==")
|
||||
# Generate COM interfaces
|
||||
com_module_generator = ModuleGenerator("interfaces", COMParsedFile, COMCtypesGenerator, None, from_here(r"definitions\com"))
|
||||
com_module_generator = ModuleGenerator("interfaces", COMParsedFile, COMCtypesGenerator, ComDocGenerator, 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(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()])
|
||||
com_module_generator.generate_doc(from_here(r"..\docs\source\interfaces_generated.rst"))
|
||||
|
||||
print("== Generating functions ==")
|
||||
# Generate function
|
||||
functions_module_generator = ModuleGenerator("winfuncs", FunctionParsedFile, FunctionCtypesGenerator, None, from_here(r"definitions\functions"))
|
||||
functions_module_generator = ModuleGenerator("winfuncs", FunctionParsedFile, FunctionCtypesGenerator, WinFuncDocGenerator, from_here(r"definitions\functions"))
|
||||
# no template file
|
||||
functions_module_generator.get_template_filename = lambda : None
|
||||
functions_module_generator.parse_source_directory()
|
||||
functions_module_generator.add_module_dependancy(structure_module_generator)
|
||||
functions_module_generator.add_module_dependancy(com_module_generator)
|
||||
functions_module_generator.resolve_dep_and_generate([BasicTypeNodes()])
|
||||
functions_module_generator.generate_doc(from_here(r"..\docs\source\winfuncs_generated.rst"))
|
||||
|
||||
|
||||
print("== Generating META file ==")
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
import collections
|
||||
import StringIO
|
||||
try:
|
||||
from StringIO import StringIO
|
||||
except ImportError:
|
||||
from io import StringIO # Py3
|
||||
|
||||
TupleToken = collections.namedtuple('Token', ['value'])
|
||||
|
||||
@@ -189,8 +192,8 @@ class Parser(object):
|
||||
data = data.replace("\\\n", "")
|
||||
# Step 4 Remove comments:
|
||||
|
||||
ins = StringIO.StringIO(data)
|
||||
outs = StringIO.StringIO()
|
||||
ins = StringIO(data)
|
||||
outs = StringIO()
|
||||
|
||||
in_str = False
|
||||
res = []
|
||||
|
||||
@@ -212,16 +212,6 @@ class SimpleTypesParser(Parser):
|
||||
self.next_token()
|
||||
return results
|
||||
|
||||
def dbg_lexer(data):
|
||||
for i in Lexer(data).token_generation():
|
||||
print i
|
||||
|
||||
def dbg_parser(data):
|
||||
return WinStructParser(data).parse()
|
||||
|
||||
def dbg_validate(data):
|
||||
return validate_structs(Parser(data).parse())
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
|
||||
@@ -177,7 +177,7 @@ class WinStruct(object):
|
||||
|
||||
def generate_typedef_ctypes(self):
|
||||
typedef_ctypes = []
|
||||
for typedef_name, value in self.typedef.items():
|
||||
for typedef_name, value in sorted(self.typedef.items()):
|
||||
str_value = self.name
|
||||
if typedef_name == str_value: # Do not generate "X= X" line (anonymous structs gen this)
|
||||
continue
|
||||
@@ -237,7 +237,7 @@ class WinEnum(object):
|
||||
lines += [" values = [{0}]".format(", ".join([name for i, name in self.fields]))]
|
||||
lines += [" mapper = FlagMapper(*values)".format(self.name)]
|
||||
|
||||
for typedef_name, value in self.typedef.items():
|
||||
for typedef_name, value in sorted(self.typedef.items()):
|
||||
str_value = self.name
|
||||
if typedef_name == str_value: # Do not generate "X= X" line (anonymous enum gen this)
|
||||
continue
|
||||
|
||||
Vendored
+1
-1
@@ -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: 46ec48b2adfc0c477458709c63587450
|
||||
config: 92d6a80a7446628386dc1fdf3dc6b1c0
|
||||
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
||||
|
||||
-236
@@ -1,236 +0,0 @@
|
||||
|
||||
<!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 — PythonForWindows 0.6 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" type="text/css" href="../../_static/css/mbasic.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>
|
||||
<script type="text/javascript" src="../../_static/language_data.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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</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="kn">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="kn">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="kn">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">"""struct in wincon.h."""</span>
|
||||
<span class="n">_fields_</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">(</span><span class="s2">"dwSize"</span><span class="p">,</span> <span class="n">COORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"dwCursorPosition"</span><span class="p">,</span> <span class="n">COORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"wAttributes"</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">"srWindow"</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">"dwMaximumWindowSize"</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="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</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">,</span><span class="si">%d</span><span class="s1">)'</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="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="p">(</span><span class="n">_GetStdHandle</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">STDERR</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">_GetStdHandle</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">_GetStdHandle</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"><=</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"><=</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">return</span>
|
||||
<span class="c1"># Adjust for Windows' 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'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">_GetStdHandle</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">_GetStdHandle</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">''' FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten )'''</span>
|
||||
<span class="n">handle</span> <span class="o">=</span> <span class="n">_GetStdHandle</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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
-636
@@ -1,636 +0,0 @@
|
||||
|
||||
<!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>ctypes — PythonForWindows 0.6 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" type="text/css" href="../_static/css/mbasic.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>
|
||||
<script type="text/javascript" src="../_static/language_data.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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for ctypes</h1><div class="highlight"><pre>
|
||||
<span></span><span class="sd">"""create and manipulate C data types in Python"""</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">os</span> <span class="k">as</span> <span class="nn">_os</span><span class="o">,</span> <span class="nn">sys</span> <span class="k">as</span> <span class="nn">_sys</span>
|
||||
|
||||
<span class="n">__version__</span> <span class="o">=</span> <span class="s2">"1.1.0"</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">Union</span><span class="p">,</span> <span class="n">Structure</span><span class="p">,</span> <span class="n">Array</span>
|
||||
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">_Pointer</span>
|
||||
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">CFuncPtr</span> <span class="k">as</span> <span class="n">_CFuncPtr</span>
|
||||
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">__version__</span> <span class="k">as</span> <span class="n">_ctypes_version</span>
|
||||
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">RTLD_LOCAL</span><span class="p">,</span> <span class="n">RTLD_GLOBAL</span>
|
||||
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">ArgumentError</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">struct</span> <span class="kn">import</span> <span class="n">calcsize</span> <span class="k">as</span> <span class="n">_calcsize</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">__version__</span> <span class="o">!=</span> <span class="n">_ctypes_version</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"Version number mismatch"</span><span class="p">,</span> <span class="n">__version__</span><span class="p">,</span> <span class="n">_ctypes_version</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">_os</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"nt"</span><span class="p">,</span> <span class="s2">"ce"</span><span class="p">):</span>
|
||||
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">FormatError</span>
|
||||
|
||||
<span class="n">DEFAULT_MODE</span> <span class="o">=</span> <span class="n">RTLD_LOCAL</span>
|
||||
<span class="k">if</span> <span class="n">_os</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">"posix"</span> <span class="ow">and</span> <span class="n">_sys</span><span class="o">.</span><span class="n">platform</span> <span class="o">==</span> <span class="s2">"darwin"</span><span class="p">:</span>
|
||||
<span class="c1"># On OS X 10.3, we use RTLD_GLOBAL as default mode</span>
|
||||
<span class="c1"># because RTLD_LOCAL does not work at least on some</span>
|
||||
<span class="c1"># libraries. OS X 10.3 is Darwin 7, so we check for</span>
|
||||
<span class="c1"># that.</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="n">_os</span><span class="o">.</span><span class="n">uname</span><span class="p">()[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'.'</span><span class="p">)[</span><span class="mi">0</span><span class="p">])</span> <span class="o"><</span> <span class="mi">8</span><span class="p">:</span>
|
||||
<span class="n">DEFAULT_MODE</span> <span class="o">=</span> <span class="n">RTLD_GLOBAL</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">FUNCFLAG_CDECL</span> <span class="k">as</span> <span class="n">_FUNCFLAG_CDECL</span><span class="p">,</span> \
|
||||
<span class="n">FUNCFLAG_PYTHONAPI</span> <span class="k">as</span> <span class="n">_FUNCFLAG_PYTHONAPI</span><span class="p">,</span> \
|
||||
<span class="n">FUNCFLAG_USE_ERRNO</span> <span class="k">as</span> <span class="n">_FUNCFLAG_USE_ERRNO</span><span class="p">,</span> \
|
||||
<span class="n">FUNCFLAG_USE_LASTERROR</span> <span class="k">as</span> <span class="n">_FUNCFLAG_USE_LASTERROR</span>
|
||||
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd">WINOLEAPI -> HRESULT</span>
|
||||
<span class="sd">WINOLEAPI_(type)</span>
|
||||
|
||||
<span class="sd">STDMETHODCALLTYPE</span>
|
||||
|
||||
<span class="sd">STDMETHOD(name)</span>
|
||||
<span class="sd">STDMETHOD_(type, name)</span>
|
||||
|
||||
<span class="sd">STDAPICALLTYPE</span>
|
||||
<span class="sd">"""</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">create_string_buffer</span><span class="p">(</span><span class="n">init</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""create_string_buffer(aString) -> character array</span>
|
||||
<span class="sd"> create_string_buffer(anInteger) -> character array</span>
|
||||
<span class="sd"> create_string_buffer(aString, anInteger) -> character array</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">init</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">unicode</span><span class="p">)):</span>
|
||||
<span class="k">if</span> <span class="n">size</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">init</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span>
|
||||
<span class="n">buftype</span> <span class="o">=</span> <span class="n">c_char</span> <span class="o">*</span> <span class="n">size</span>
|
||||
<span class="n">buf</span> <span class="o">=</span> <span class="n">buftype</span><span class="p">()</span>
|
||||
<span class="n">buf</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">init</span>
|
||||
<span class="k">return</span> <span class="n">buf</span>
|
||||
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">init</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="n">buftype</span> <span class="o">=</span> <span class="n">c_char</span> <span class="o">*</span> <span class="n">init</span>
|
||||
<span class="n">buf</span> <span class="o">=</span> <span class="n">buftype</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="n">buf</span>
|
||||
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="n">init</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">c_buffer</span><span class="p">(</span><span class="n">init</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="c1">## "deprecated, use create_string_buffer instead"</span>
|
||||
<span class="c1">## import warnings</span>
|
||||
<span class="c1">## warnings.warn("c_buffer is deprecated, use create_string_buffer instead",</span>
|
||||
<span class="c1">## DeprecationWarning, stacklevel=2)</span>
|
||||
<span class="k">return</span> <span class="n">create_string_buffer</span><span class="p">(</span><span class="n">init</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
|
||||
|
||||
<span class="n">_c_functype_cache</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="k">def</span> <span class="nf">CFUNCTYPE</span><span class="p">(</span><span class="n">restype</span><span class="p">,</span> <span class="o">*</span><span class="n">argtypes</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
|
||||
<span class="sd">"""CFUNCTYPE(restype, *argtypes,</span>
|
||||
<span class="sd"> use_errno=False, use_last_error=False) -> function prototype.</span>
|
||||
|
||||
<span class="sd"> restype: the result type</span>
|
||||
<span class="sd"> argtypes: a sequence specifying the argument types</span>
|
||||
|
||||
<span class="sd"> The function prototype can be called in different ways to create a</span>
|
||||
<span class="sd"> callable object:</span>
|
||||
|
||||
<span class="sd"> prototype(integer address) -> foreign function</span>
|
||||
<span class="sd"> prototype(callable) -> create and return a C callable function from callable</span>
|
||||
<span class="sd"> prototype(integer index, method name[, paramflags]) -> foreign function calling a COM method</span>
|
||||
<span class="sd"> prototype((ordinal number, dll object)[, paramflags]) -> foreign function exported by ordinal</span>
|
||||
<span class="sd"> prototype((function name, dll object)[, paramflags]) -> foreign function exported by name</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">flags</span> <span class="o">=</span> <span class="n">_FUNCFLAG_CDECL</span>
|
||||
<span class="k">if</span> <span class="n">kw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"use_errno"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
|
||||
<span class="n">flags</span> <span class="o">|=</span> <span class="n">_FUNCFLAG_USE_ERRNO</span>
|
||||
<span class="k">if</span> <span class="n">kw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"use_last_error"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
|
||||
<span class="n">flags</span> <span class="o">|=</span> <span class="n">_FUNCFLAG_USE_LASTERROR</span>
|
||||
<span class="k">if</span> <span class="n">kw</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"unexpected keyword argument(s) </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">kw</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">_c_functype_cache</span><span class="p">[(</span><span class="n">restype</span><span class="p">,</span> <span class="n">argtypes</span><span class="p">,</span> <span class="n">flags</span><span class="p">)]</span>
|
||||
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
||||
<span class="k">class</span> <span class="nc">CFunctionType</span><span class="p">(</span><span class="n">_CFuncPtr</span><span class="p">):</span>
|
||||
<span class="n">_argtypes_</span> <span class="o">=</span> <span class="n">argtypes</span>
|
||||
<span class="n">_restype_</span> <span class="o">=</span> <span class="n">restype</span>
|
||||
<span class="n">_flags_</span> <span class="o">=</span> <span class="n">flags</span>
|
||||
<span class="n">_c_functype_cache</span><span class="p">[(</span><span class="n">restype</span><span class="p">,</span> <span class="n">argtypes</span><span class="p">,</span> <span class="n">flags</span><span class="p">)]</span> <span class="o">=</span> <span class="n">CFunctionType</span>
|
||||
<span class="k">return</span> <span class="n">CFunctionType</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">_os</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"nt"</span><span class="p">,</span> <span class="s2">"ce"</span><span class="p">):</span>
|
||||
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">LoadLibrary</span> <span class="k">as</span> <span class="n">_dlopen</span>
|
||||
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">FUNCFLAG_STDCALL</span> <span class="k">as</span> <span class="n">_FUNCFLAG_STDCALL</span>
|
||||
<span class="k">if</span> <span class="n">_os</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">"ce"</span><span class="p">:</span>
|
||||
<span class="c1"># 'ce' doesn't have the stdcall calling convention</span>
|
||||
<span class="n">_FUNCFLAG_STDCALL</span> <span class="o">=</span> <span class="n">_FUNCFLAG_CDECL</span>
|
||||
|
||||
<span class="n">_win_functype_cache</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="k">def</span> <span class="nf">WINFUNCTYPE</span><span class="p">(</span><span class="n">restype</span><span class="p">,</span> <span class="o">*</span><span class="n">argtypes</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
|
||||
<span class="c1"># docstring set later (very similar to CFUNCTYPE.__doc__)</span>
|
||||
<span class="n">flags</span> <span class="o">=</span> <span class="n">_FUNCFLAG_STDCALL</span>
|
||||
<span class="k">if</span> <span class="n">kw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"use_errno"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
|
||||
<span class="n">flags</span> <span class="o">|=</span> <span class="n">_FUNCFLAG_USE_ERRNO</span>
|
||||
<span class="k">if</span> <span class="n">kw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"use_last_error"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
|
||||
<span class="n">flags</span> <span class="o">|=</span> <span class="n">_FUNCFLAG_USE_LASTERROR</span>
|
||||
<span class="k">if</span> <span class="n">kw</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"unexpected keyword argument(s) </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">kw</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">_win_functype_cache</span><span class="p">[(</span><span class="n">restype</span><span class="p">,</span> <span class="n">argtypes</span><span class="p">,</span> <span class="n">flags</span><span class="p">)]</span>
|
||||
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
||||
<span class="k">class</span> <span class="nc">WinFunctionType</span><span class="p">(</span><span class="n">_CFuncPtr</span><span class="p">):</span>
|
||||
<span class="n">_argtypes_</span> <span class="o">=</span> <span class="n">argtypes</span>
|
||||
<span class="n">_restype_</span> <span class="o">=</span> <span class="n">restype</span>
|
||||
<span class="n">_flags_</span> <span class="o">=</span> <span class="n">flags</span>
|
||||
<span class="n">_win_functype_cache</span><span class="p">[(</span><span class="n">restype</span><span class="p">,</span> <span class="n">argtypes</span><span class="p">,</span> <span class="n">flags</span><span class="p">)]</span> <span class="o">=</span> <span class="n">WinFunctionType</span>
|
||||
<span class="k">return</span> <span class="n">WinFunctionType</span>
|
||||
<span class="k">if</span> <span class="n">WINFUNCTYPE</span><span class="o">.</span><span class="vm">__doc__</span><span class="p">:</span>
|
||||
<span class="n">WINFUNCTYPE</span><span class="o">.</span><span class="vm">__doc__</span> <span class="o">=</span> <span class="n">CFUNCTYPE</span><span class="o">.</span><span class="vm">__doc__</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"CFUNCTYPE"</span><span class="p">,</span> <span class="s2">"WINFUNCTYPE"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">elif</span> <span class="n">_os</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">"posix"</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">dlopen</span> <span class="k">as</span> <span class="n">_dlopen</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">sizeof</span><span class="p">,</span> <span class="n">byref</span><span class="p">,</span> <span class="n">addressof</span><span class="p">,</span> <span class="n">alignment</span><span class="p">,</span> <span class="n">resize</span>
|
||||
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">get_errno</span><span class="p">,</span> <span class="n">set_errno</span>
|
||||
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">_SimpleCData</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_check_size</span><span class="p">(</span><span class="n">typ</span><span class="p">,</span> <span class="n">typecode</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="c1"># Check if sizeof(ctypes_type) against struct.calcsize. This</span>
|
||||
<span class="c1"># should protect somewhat against a misconfigured libffi.</span>
|
||||
<span class="kn">from</span> <span class="nn">struct</span> <span class="kn">import</span> <span class="n">calcsize</span>
|
||||
<span class="k">if</span> <span class="n">typecode</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="c1"># Most _type_ codes are the same as used in struct</span>
|
||||
<span class="n">typecode</span> <span class="o">=</span> <span class="n">typ</span><span class="o">.</span><span class="n">_type_</span>
|
||||
<span class="n">actual</span><span class="p">,</span> <span class="n">required</span> <span class="o">=</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">typ</span><span class="p">),</span> <span class="n">calcsize</span><span class="p">(</span><span class="n">typecode</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">actual</span> <span class="o">!=</span> <span class="n">required</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">SystemError</span><span class="p">(</span><span class="s2">"sizeof(</span><span class="si">%s</span><span class="s2">) wrong: </span><span class="si">%d</span><span class="s2"> instead of </span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> \
|
||||
<span class="p">(</span><span class="n">typ</span><span class="p">,</span> <span class="n">actual</span><span class="p">,</span> <span class="n">required</span><span class="p">))</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">py_object</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">"O"</span>
|
||||
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">py_object</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__repr__</span><span class="p">()</span>
|
||||
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">(<NULL>)"</span> <span class="o">%</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="n">_check_size</span><span class="p">(</span><span class="n">py_object</span><span class="p">,</span> <span class="s2">"P"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">c_short</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">"h"</span>
|
||||
<span class="n">_check_size</span><span class="p">(</span><span class="n">c_short</span><span class="p">)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">c_ushort</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">"H"</span>
|
||||
<span class="n">_check_size</span><span class="p">(</span><span class="n">c_ushort</span><span class="p">)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">c_long</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">"l"</span>
|
||||
<span class="n">_check_size</span><span class="p">(</span><span class="n">c_long</span><span class="p">)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">c_ulong</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">"L"</span>
|
||||
<span class="n">_check_size</span><span class="p">(</span><span class="n">c_ulong</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">_calcsize</span><span class="p">(</span><span class="s2">"i"</span><span class="p">)</span> <span class="o">==</span> <span class="n">_calcsize</span><span class="p">(</span><span class="s2">"l"</span><span class="p">):</span>
|
||||
<span class="c1"># if int and long have the same size, make c_int an alias for c_long</span>
|
||||
<span class="n">c_int</span> <span class="o">=</span> <span class="n">c_long</span>
|
||||
<span class="n">c_uint</span> <span class="o">=</span> <span class="n">c_ulong</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">class</span> <span class="nc">c_int</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">"i"</span>
|
||||
<span class="n">_check_size</span><span class="p">(</span><span class="n">c_int</span><span class="p">)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">c_uint</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">"I"</span>
|
||||
<span class="n">_check_size</span><span class="p">(</span><span class="n">c_uint</span><span class="p">)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">c_float</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">"f"</span>
|
||||
<span class="n">_check_size</span><span class="p">(</span><span class="n">c_float</span><span class="p">)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">c_double</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">"d"</span>
|
||||
<span class="n">_check_size</span><span class="p">(</span><span class="n">c_double</span><span class="p">)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">c_longdouble</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">"g"</span>
|
||||
<span class="k">if</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">c_longdouble</span><span class="p">)</span> <span class="o">==</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">c_double</span><span class="p">):</span>
|
||||
<span class="n">c_longdouble</span> <span class="o">=</span> <span class="n">c_double</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">_calcsize</span><span class="p">(</span><span class="s2">"l"</span><span class="p">)</span> <span class="o">==</span> <span class="n">_calcsize</span><span class="p">(</span><span class="s2">"q"</span><span class="p">):</span>
|
||||
<span class="c1"># if long and long long have the same size, make c_longlong an alias for c_long</span>
|
||||
<span class="n">c_longlong</span> <span class="o">=</span> <span class="n">c_long</span>
|
||||
<span class="n">c_ulonglong</span> <span class="o">=</span> <span class="n">c_ulong</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">class</span> <span class="nc">c_longlong</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">"q"</span>
|
||||
<span class="n">_check_size</span><span class="p">(</span><span class="n">c_longlong</span><span class="p">)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">c_ulonglong</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">"Q"</span>
|
||||
<span class="c1">## def from_param(cls, val):</span>
|
||||
<span class="c1">## return ('d', float(val), val)</span>
|
||||
<span class="c1">## from_param = classmethod(from_param)</span>
|
||||
<span class="n">_check_size</span><span class="p">(</span><span class="n">c_ulonglong</span><span class="p">)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">c_ubyte</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">"B"</span>
|
||||
<span class="n">c_ubyte</span><span class="o">.</span><span class="n">__ctype_le__</span> <span class="o">=</span> <span class="n">c_ubyte</span><span class="o">.</span><span class="n">__ctype_be__</span> <span class="o">=</span> <span class="n">c_ubyte</span>
|
||||
<span class="c1"># backward compatibility:</span>
|
||||
<span class="c1">##c_uchar = c_ubyte</span>
|
||||
<span class="n">_check_size</span><span class="p">(</span><span class="n">c_ubyte</span><span class="p">)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">c_byte</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">"b"</span>
|
||||
<span class="n">c_byte</span><span class="o">.</span><span class="n">__ctype_le__</span> <span class="o">=</span> <span class="n">c_byte</span><span class="o">.</span><span class="n">__ctype_be__</span> <span class="o">=</span> <span class="n">c_byte</span>
|
||||
<span class="n">_check_size</span><span class="p">(</span><span class="n">c_byte</span><span class="p">)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">c_char</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">"c"</span>
|
||||
<span class="n">c_char</span><span class="o">.</span><span class="n">__ctype_le__</span> <span class="o">=</span> <span class="n">c_char</span><span class="o">.</span><span class="n">__ctype_be__</span> <span class="o">=</span> <span class="n">c_char</span>
|
||||
<span class="n">_check_size</span><span class="p">(</span><span class="n">c_char</span><span class="p">)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">c_char_p</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">"z"</span>
|
||||
<span class="k">if</span> <span class="n">_os</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">"nt"</span><span class="p">:</span>
|
||||
<span class="k">def</span> <span class="fm">__repr__</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="n">windll</span><span class="o">.</span><span class="n">kernel32</span><span class="o">.</span><span class="n">IsBadStringPtrA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">(</span><span class="si">%r</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</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">value</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">(</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">cast</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">c_void_p</span><span class="p">)</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">(</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">cast</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">c_void_p</span><span class="p">)</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="n">_check_size</span><span class="p">(</span><span class="n">c_char_p</span><span class="p">,</span> <span class="s2">"P"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">c_void_p</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">"P"</span>
|
||||
<span class="n">c_voidp</span> <span class="o">=</span> <span class="n">c_void_p</span> <span class="c1"># backwards compatibility (to a bug)</span>
|
||||
<span class="n">_check_size</span><span class="p">(</span><span class="n">c_void_p</span><span class="p">)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">c_bool</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">"?"</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">POINTER</span><span class="p">,</span> <span class="n">pointer</span><span class="p">,</span> <span class="n">_pointer_type_cache</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_reset_cache</span><span class="p">():</span>
|
||||
<span class="n">_pointer_type_cache</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
||||
<span class="n">_c_functype_cache</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">_os</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"nt"</span><span class="p">,</span> <span class="s2">"ce"</span><span class="p">):</span>
|
||||
<span class="n">_win_functype_cache</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
||||
<span class="c1"># _SimpleCData.c_wchar_p_from_param</span>
|
||||
<span class="n">POINTER</span><span class="p">(</span><span class="n">c_wchar</span><span class="p">)</span><span class="o">.</span><span class="n">from_param</span> <span class="o">=</span> <span class="n">c_wchar_p</span><span class="o">.</span><span class="n">from_param</span>
|
||||
<span class="c1"># _SimpleCData.c_char_p_from_param</span>
|
||||
<span class="n">POINTER</span><span class="p">(</span><span class="n">c_char</span><span class="p">)</span><span class="o">.</span><span class="n">from_param</span> <span class="o">=</span> <span class="n">c_char_p</span><span class="o">.</span><span class="n">from_param</span>
|
||||
<span class="n">_pointer_type_cache</span><span class="p">[</span><span class="kc">None</span><span class="p">]</span> <span class="o">=</span> <span class="n">c_void_p</span>
|
||||
<span class="c1"># XXX for whatever reasons, creating the first instance of a callback</span>
|
||||
<span class="c1"># function is needed for the unittests on Win64 to succeed. This MAY</span>
|
||||
<span class="c1"># be a compiler bug, since the problem occurs only when _ctypes is</span>
|
||||
<span class="c1"># compiled with the MS SDK compiler. Or an uninitialized variable?</span>
|
||||
<span class="n">CFUNCTYPE</span><span class="p">(</span><span class="n">c_int</span><span class="p">)(</span><span class="k">lambda</span><span class="p">:</span> <span class="kc">None</span><span class="p">)</span>
|
||||
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">set_conversion_mode</span>
|
||||
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">_os</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"nt"</span><span class="p">,</span> <span class="s2">"ce"</span><span class="p">):</span>
|
||||
<span class="n">set_conversion_mode</span><span class="p">(</span><span class="s2">"mbcs"</span><span class="p">,</span> <span class="s2">"ignore"</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">set_conversion_mode</span><span class="p">(</span><span class="s2">"ascii"</span><span class="p">,</span> <span class="s2">"strict"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">c_wchar_p</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">"Z"</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">c_wchar</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">"u"</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">create_unicode_buffer</span><span class="p">(</span><span class="n">init</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""create_unicode_buffer(aString) -> character array</span>
|
||||
<span class="sd"> create_unicode_buffer(anInteger) -> character array</span>
|
||||
<span class="sd"> create_unicode_buffer(aString, anInteger) -> character array</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">init</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">unicode</span><span class="p">)):</span>
|
||||
<span class="k">if</span> <span class="n">size</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">init</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span>
|
||||
<span class="n">buftype</span> <span class="o">=</span> <span class="n">c_wchar</span> <span class="o">*</span> <span class="n">size</span>
|
||||
<span class="n">buf</span> <span class="o">=</span> <span class="n">buftype</span><span class="p">()</span>
|
||||
<span class="n">buf</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">init</span>
|
||||
<span class="k">return</span> <span class="n">buf</span>
|
||||
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">init</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="n">buftype</span> <span class="o">=</span> <span class="n">c_wchar</span> <span class="o">*</span> <span class="n">init</span>
|
||||
<span class="n">buf</span> <span class="o">=</span> <span class="n">buftype</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="n">buf</span>
|
||||
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="n">init</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># XXX Deprecated</span>
|
||||
<span class="k">def</span> <span class="nf">SetPointerType</span><span class="p">(</span><span class="n">pointer</span><span class="p">,</span> <span class="bp">cls</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">_pointer_type_cache</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"This type already exists in the cache"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="nb">id</span><span class="p">(</span><span class="n">pointer</span><span class="p">)</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">_pointer_type_cache</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"What's this???"</span><span class="p">)</span>
|
||||
<span class="n">pointer</span><span class="o">.</span><span class="n">set_type</span><span class="p">(</span><span class="bp">cls</span><span class="p">)</span>
|
||||
<span class="n">_pointer_type_cache</span><span class="p">[</span><span class="bp">cls</span><span class="p">]</span> <span class="o">=</span> <span class="n">pointer</span>
|
||||
<span class="k">del</span> <span class="n">_pointer_type_cache</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">pointer</span><span class="p">)]</span>
|
||||
|
||||
<span class="c1"># XXX Deprecated</span>
|
||||
<span class="k">def</span> <span class="nf">ARRAY</span><span class="p">(</span><span class="n">typ</span><span class="p">,</span> <span class="nb">len</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">typ</span> <span class="o">*</span> <span class="nb">len</span>
|
||||
|
||||
<span class="c1">################################################################</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">CDLL</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""An instance of this class represents a loaded dll/shared</span>
|
||||
<span class="sd"> library, exporting functions using the standard C calling</span>
|
||||
<span class="sd"> convention (named 'cdecl' on Windows).</span>
|
||||
|
||||
<span class="sd"> The exported functions can be accessed as attributes, or by</span>
|
||||
<span class="sd"> indexing with the function name. Examples:</span>
|
||||
|
||||
<span class="sd"> <obj>.qsort -> callable object</span>
|
||||
<span class="sd"> <obj>['qsort'] -> callable object</span>
|
||||
|
||||
<span class="sd"> Calling the functions releases the Python GIL during the call and</span>
|
||||
<span class="sd"> reacquires it afterwards.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">_func_flags_</span> <span class="o">=</span> <span class="n">_FUNCFLAG_CDECL</span>
|
||||
<span class="n">_func_restype_</span> <span class="o">=</span> <span class="n">c_int</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="n">DEFAULT_MODE</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">use_errno</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
<span class="n">use_last_error</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<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="n">flags</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_func_flags_</span>
|
||||
<span class="k">if</span> <span class="n">use_errno</span><span class="p">:</span>
|
||||
<span class="n">flags</span> <span class="o">|=</span> <span class="n">_FUNCFLAG_USE_ERRNO</span>
|
||||
<span class="k">if</span> <span class="n">use_last_error</span><span class="p">:</span>
|
||||
<span class="n">flags</span> <span class="o">|=</span> <span class="n">_FUNCFLAG_USE_LASTERROR</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">_FuncPtr</span><span class="p">(</span><span class="n">_CFuncPtr</span><span class="p">):</span>
|
||||
<span class="n">_flags_</span> <span class="o">=</span> <span class="n">flags</span>
|
||||
<span class="n">_restype_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_func_restype_</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_FuncPtr</span> <span class="o">=</span> <span class="n">_FuncPtr</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">handle</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_handle</span> <span class="o">=</span> <span class="n">_dlopen</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="n">mode</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</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="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s2">"<</span><span class="si">%s</span><span class="s2"> '</span><span class="si">%s</span><span class="s2">', handle </span><span class="si">%x</span><span class="s2"> at </span><span class="si">%x</span><span class="s2">>"</span> <span class="o">%</span> \
|
||||
<span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</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="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_handle</span> <span class="o">&</span> <span class="p">(</span><span class="n">_sys</span><span class="o">.</span><span class="n">maxint</span><span class="o">*</span><span class="mi">2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)),</span>
|
||||
<span class="nb">id</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">&</span> <span class="p">(</span><span class="n">_sys</span><span class="o">.</span><span class="n">maxint</span><span class="o">*</span><span class="mi">2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">))</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'__'</span><span class="p">)</span> <span class="ow">and</span> <span class="n">name</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s1">'__'</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">name</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">name</span><span class="p">,</span> <span class="n">func</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">func</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name_or_ordinal</span><span class="p">):</span>
|
||||
<span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_FuncPtr</span><span class="p">((</span><span class="n">name_or_ordinal</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="nb">isinstance</span><span class="p">(</span><span class="n">name_or_ordinal</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="n">func</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">=</span> <span class="n">name_or_ordinal</span>
|
||||
<span class="k">return</span> <span class="n">func</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">PyDLL</span><span class="p">(</span><span class="n">CDLL</span><span class="p">):</span>
|
||||
<span class="sd">"""This class represents the Python library itself. It allows</span>
|
||||
<span class="sd"> accessing Python API functions. The GIL is not released, and</span>
|
||||
<span class="sd"> Python exceptions are handled correctly.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">_func_flags_</span> <span class="o">=</span> <span class="n">_FUNCFLAG_CDECL</span> <span class="o">|</span> <span class="n">_FUNCFLAG_PYTHONAPI</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">_os</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"nt"</span><span class="p">,</span> <span class="s2">"ce"</span><span class="p">):</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">WinDLL</span><span class="p">(</span><span class="n">CDLL</span><span class="p">):</span>
|
||||
<span class="sd">"""This class represents a dll exporting functions using the</span>
|
||||
<span class="sd"> Windows stdcall calling convention.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">_func_flags_</span> <span class="o">=</span> <span class="n">_FUNCFLAG_STDCALL</span>
|
||||
|
||||
<span class="c1"># XXX Hm, what about HRESULT as normal parameter?</span>
|
||||
<span class="c1"># Mustn't it derive from c_long then?</span>
|
||||
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">_check_HRESULT</span><span class="p">,</span> <span class="n">_SimpleCData</span>
|
||||
<span class="k">class</span> <span class="nc">HRESULT</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">"l"</span>
|
||||
<span class="c1"># _check_retval_ is called with the function's result when it</span>
|
||||
<span class="c1"># is used as restype. It checks for the FAILED bit, and</span>
|
||||
<span class="c1"># raises a WindowsError if it is set.</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># The _check_retval_ method is implemented in C, so that the</span>
|
||||
<span class="c1"># method definition itself is not included in the traceback</span>
|
||||
<span class="c1"># when it raises an error - that is what we want (and Python</span>
|
||||
<span class="c1"># doesn't have a way to raise an exception in the caller's</span>
|
||||
<span class="c1"># frame).</span>
|
||||
<span class="n">_check_retval_</span> <span class="o">=</span> <span class="n">_check_HRESULT</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">OleDLL</span><span class="p">(</span><span class="n">CDLL</span><span class="p">):</span>
|
||||
<span class="sd">"""This class represents a dll exporting functions using the</span>
|
||||
<span class="sd"> Windows stdcall calling convention, and returning HRESULT.</span>
|
||||
<span class="sd"> HRESULT error values are automatically raised as WindowsError</span>
|
||||
<span class="sd"> exceptions.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">_func_flags_</span> <span class="o">=</span> <span class="n">_FUNCFLAG_STDCALL</span>
|
||||
<span class="n">_func_restype_</span> <span class="o">=</span> <span class="n">HRESULT</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">LibraryLoader</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dlltype</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_dlltype</span> <span class="o">=</span> <span class="n">dlltype</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">name</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'_'</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="n">dll</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dlltype</span><span class="p">(</span><span class="n">name</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">name</span><span class="p">,</span> <span class="n">dll</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">dll</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</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">name</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">LoadLibrary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dlltype</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
|
||||
<span class="n">cdll</span> <span class="o">=</span> <span class="n">LibraryLoader</span><span class="p">(</span><span class="n">CDLL</span><span class="p">)</span>
|
||||
<span class="n">pydll</span> <span class="o">=</span> <span class="n">LibraryLoader</span><span class="p">(</span><span class="n">PyDLL</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">_os</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"nt"</span><span class="p">,</span> <span class="s2">"ce"</span><span class="p">):</span>
|
||||
<span class="n">pythonapi</span> <span class="o">=</span> <span class="n">PyDLL</span><span class="p">(</span><span class="s2">"python dll"</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">_sys</span><span class="o">.</span><span class="n">dllhandle</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">_sys</span><span class="o">.</span><span class="n">platform</span> <span class="o">==</span> <span class="s2">"cygwin"</span><span class="p">:</span>
|
||||
<span class="n">pythonapi</span> <span class="o">=</span> <span class="n">PyDLL</span><span class="p">(</span><span class="s2">"libpython</span><span class="si">%d</span><span class="s2">.</span><span class="si">%d</span><span class="s2">.dll"</span> <span class="o">%</span> <span class="n">_sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[:</span><span class="mi">2</span><span class="p">])</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">pythonapi</span> <span class="o">=</span> <span class="n">PyDLL</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">if</span> <span class="n">_os</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"nt"</span><span class="p">,</span> <span class="s2">"ce"</span><span class="p">):</span>
|
||||
<span class="n">windll</span> <span class="o">=</span> <span class="n">LibraryLoader</span><span class="p">(</span><span class="n">WinDLL</span><span class="p">)</span>
|
||||
<span class="n">oledll</span> <span class="o">=</span> <span class="n">LibraryLoader</span><span class="p">(</span><span class="n">OleDLL</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">_os</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">"nt"</span><span class="p">:</span>
|
||||
<span class="n">GetLastError</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">GetLastError</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">GetLastError</span> <span class="o">=</span> <span class="n">windll</span><span class="o">.</span><span class="n">coredll</span><span class="o">.</span><span class="n">GetLastError</span>
|
||||
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">get_last_error</span><span class="p">,</span> <span class="n">set_last_error</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">WinError</span><span class="p">(</span><span class="n">code</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">descr</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">code</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">code</span> <span class="o">=</span> <span class="n">GetLastError</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">descr</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">descr</span> <span class="o">=</span> <span class="n">FormatError</span><span class="p">(</span><span class="n">code</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="ne">WindowsError</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="n">descr</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">c_uint</span><span class="p">)</span> <span class="o">==</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">c_void_p</span><span class="p">):</span>
|
||||
<span class="n">c_size_t</span> <span class="o">=</span> <span class="n">c_uint</span>
|
||||
<span class="n">c_ssize_t</span> <span class="o">=</span> <span class="n">c_int</span>
|
||||
<span class="k">elif</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">c_ulong</span><span class="p">)</span> <span class="o">==</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">c_void_p</span><span class="p">):</span>
|
||||
<span class="n">c_size_t</span> <span class="o">=</span> <span class="n">c_ulong</span>
|
||||
<span class="n">c_ssize_t</span> <span class="o">=</span> <span class="n">c_long</span>
|
||||
<span class="k">elif</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">c_ulonglong</span><span class="p">)</span> <span class="o">==</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">c_void_p</span><span class="p">):</span>
|
||||
<span class="n">c_size_t</span> <span class="o">=</span> <span class="n">c_ulonglong</span>
|
||||
<span class="n">c_ssize_t</span> <span class="o">=</span> <span class="n">c_longlong</span>
|
||||
|
||||
<span class="c1"># functions</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">_memmove_addr</span><span class="p">,</span> <span class="n">_memset_addr</span><span class="p">,</span> <span class="n">_string_at_addr</span><span class="p">,</span> <span class="n">_cast_addr</span>
|
||||
|
||||
<span class="c1">## void *memmove(void *, const void *, size_t);</span>
|
||||
<span class="n">memmove</span> <span class="o">=</span> <span class="n">CFUNCTYPE</span><span class="p">(</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">c_void_p</span><span class="p">,</span> <span class="n">c_void_p</span><span class="p">,</span> <span class="n">c_size_t</span><span class="p">)(</span><span class="n">_memmove_addr</span><span class="p">)</span>
|
||||
|
||||
<span class="c1">## void *memset(void *, int, size_t)</span>
|
||||
<span class="n">memset</span> <span class="o">=</span> <span class="n">CFUNCTYPE</span><span class="p">(</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">c_void_p</span><span class="p">,</span> <span class="n">c_int</span><span class="p">,</span> <span class="n">c_size_t</span><span class="p">)(</span><span class="n">_memset_addr</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">PYFUNCTYPE</span><span class="p">(</span><span class="n">restype</span><span class="p">,</span> <span class="o">*</span><span class="n">argtypes</span><span class="p">):</span>
|
||||
<span class="k">class</span> <span class="nc">CFunctionType</span><span class="p">(</span><span class="n">_CFuncPtr</span><span class="p">):</span>
|
||||
<span class="n">_argtypes_</span> <span class="o">=</span> <span class="n">argtypes</span>
|
||||
<span class="n">_restype_</span> <span class="o">=</span> <span class="n">restype</span>
|
||||
<span class="n">_flags_</span> <span class="o">=</span> <span class="n">_FUNCFLAG_CDECL</span> <span class="o">|</span> <span class="n">_FUNCFLAG_PYTHONAPI</span>
|
||||
<span class="k">return</span> <span class="n">CFunctionType</span>
|
||||
|
||||
<span class="n">_cast</span> <span class="o">=</span> <span class="n">PYFUNCTYPE</span><span class="p">(</span><span class="n">py_object</span><span class="p">,</span> <span class="n">c_void_p</span><span class="p">,</span> <span class="n">py_object</span><span class="p">,</span> <span class="n">py_object</span><span class="p">)(</span><span class="n">_cast_addr</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">cast</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">typ</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">_cast</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">typ</span><span class="p">)</span>
|
||||
|
||||
<span class="n">_string_at</span> <span class="o">=</span> <span class="n">PYFUNCTYPE</span><span class="p">(</span><span class="n">py_object</span><span class="p">,</span> <span class="n">c_void_p</span><span class="p">,</span> <span class="n">c_int</span><span class="p">)(</span><span class="n">_string_at_addr</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">string_at</span><span class="p">(</span><span class="n">ptr</span><span class="p">,</span> <span class="n">size</span><span class="o">=-</span><span class="mi">1</span><span class="p">):</span>
|
||||
<span class="sd">"""string_at(addr[, size]) -> string</span>
|
||||
|
||||
<span class="sd"> Return the string at addr."""</span>
|
||||
<span class="k">return</span> <span class="n">_string_at</span><span class="p">(</span><span class="n">ptr</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
|
||||
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">_wstring_at_addr</span>
|
||||
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">_wstring_at</span> <span class="o">=</span> <span class="n">PYFUNCTYPE</span><span class="p">(</span><span class="n">py_object</span><span class="p">,</span> <span class="n">c_void_p</span><span class="p">,</span> <span class="n">c_int</span><span class="p">)(</span><span class="n">_wstring_at_addr</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">wstring_at</span><span class="p">(</span><span class="n">ptr</span><span class="p">,</span> <span class="n">size</span><span class="o">=-</span><span class="mi">1</span><span class="p">):</span>
|
||||
<span class="sd">"""wstring_at(addr[, size]) -> string</span>
|
||||
|
||||
<span class="sd"> Return the string at addr."""</span>
|
||||
<span class="k">return</span> <span class="n">_wstring_at</span><span class="p">(</span><span class="n">ptr</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">if</span> <span class="n">_os</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"nt"</span><span class="p">,</span> <span class="s2">"ce"</span><span class="p">):</span> <span class="c1"># COM stuff</span>
|
||||
<span class="k">def</span> <span class="nf">DllGetClassObject</span><span class="p">(</span><span class="n">rclsid</span><span class="p">,</span> <span class="n">riid</span><span class="p">,</span> <span class="n">ppv</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">ccom</span> <span class="o">=</span> <span class="nb">__import__</span><span class="p">(</span><span class="s2">"comtypes.server.inprocserver"</span><span class="p">,</span> <span class="nb">globals</span><span class="p">(),</span> <span class="nb">locals</span><span class="p">(),</span> <span class="p">[</span><span class="s1">'*'</span><span class="p">])</span>
|
||||
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="o">-</span><span class="mi">2147221231</span> <span class="c1"># CLASS_E_CLASSNOTAVAILABLE</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">ccom</span><span class="o">.</span><span class="n">DllGetClassObject</span><span class="p">(</span><span class="n">rclsid</span><span class="p">,</span> <span class="n">riid</span><span class="p">,</span> <span class="n">ppv</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">DllCanUnloadNow</span><span class="p">():</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">ccom</span> <span class="o">=</span> <span class="nb">__import__</span><span class="p">(</span><span class="s2">"comtypes.server.inprocserver"</span><span class="p">,</span> <span class="nb">globals</span><span class="p">(),</span> <span class="nb">locals</span><span class="p">(),</span> <span class="p">[</span><span class="s1">'*'</span><span class="p">])</span>
|
||||
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="mi">0</span> <span class="c1"># S_OK</span>
|
||||
<span class="k">return</span> <span class="n">ccom</span><span class="o">.</span><span class="n">DllCanUnloadNow</span><span class="p">()</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">ctypes._endian</span> <span class="kn">import</span> <span class="n">BigEndianStructure</span><span class="p">,</span> <span class="n">LittleEndianStructure</span>
|
||||
|
||||
<span class="c1"># Fill in specifically-sized types</span>
|
||||
<span class="n">c_int8</span> <span class="o">=</span> <span class="n">c_byte</span>
|
||||
<span class="n">c_uint8</span> <span class="o">=</span> <span class="n">c_ubyte</span>
|
||||
<span class="k">for</span> <span class="n">kind</span> <span class="ow">in</span> <span class="p">[</span><span class="n">c_short</span><span class="p">,</span> <span class="n">c_int</span><span class="p">,</span> <span class="n">c_long</span><span class="p">,</span> <span class="n">c_longlong</span><span class="p">]:</span>
|
||||
<span class="k">if</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">kind</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> <span class="n">c_int16</span> <span class="o">=</span> <span class="n">kind</span>
|
||||
<span class="k">elif</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">kind</span><span class="p">)</span> <span class="o">==</span> <span class="mi">4</span><span class="p">:</span> <span class="n">c_int32</span> <span class="o">=</span> <span class="n">kind</span>
|
||||
<span class="k">elif</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">kind</span><span class="p">)</span> <span class="o">==</span> <span class="mi">8</span><span class="p">:</span> <span class="n">c_int64</span> <span class="o">=</span> <span class="n">kind</span>
|
||||
<span class="k">for</span> <span class="n">kind</span> <span class="ow">in</span> <span class="p">[</span><span class="n">c_ushort</span><span class="p">,</span> <span class="n">c_uint</span><span class="p">,</span> <span class="n">c_ulong</span><span class="p">,</span> <span class="n">c_ulonglong</span><span class="p">]:</span>
|
||||
<span class="k">if</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">kind</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> <span class="n">c_uint16</span> <span class="o">=</span> <span class="n">kind</span>
|
||||
<span class="k">elif</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">kind</span><span class="p">)</span> <span class="o">==</span> <span class="mi">4</span><span class="p">:</span> <span class="n">c_uint32</span> <span class="o">=</span> <span class="n">kind</span>
|
||||
<span class="k">elif</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">kind</span><span class="p">)</span> <span class="o">==</span> <span class="mi">8</span><span class="p">:</span> <span class="n">c_uint64</span> <span class="o">=</span> <span class="n">kind</span>
|
||||
<span class="k">del</span><span class="p">(</span><span class="n">kind</span><span class="p">)</span>
|
||||
|
||||
<span class="n">_reset_cache</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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
+25
-29
@@ -1,21 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!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">
|
||||
<html lang="en" data-content_root="../">
|
||||
<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 — PythonForWindows 0.6 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" type="text/css" href="../_static/css/mbasic.css" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Overview: module code — PythonForWindows 1.0.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=fa44fd50" />
|
||||
<link rel="stylesheet" type="text/css" href="../_static/classic.css?v=def86cc0" />
|
||||
<link rel="stylesheet" type="text/css" href="../_static/css/mbasic.css?v=957880af" />
|
||||
|
||||
<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>
|
||||
<script type="text/javascript" src="../_static/language_data.js"></script>
|
||||
<script src="../_static/documentation_options.js?v=8d563738"></script>
|
||||
<script src="../_static/doctools.js?v=9a2dae69"></script>
|
||||
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
|
||||
<link rel="index" title="Index" href="../genindex.html" />
|
||||
<link rel="search" title="Search" href="../search.html" />
|
||||
@@ -29,7 +25,8 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">Overview: module code</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -39,9 +36,7 @@
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>All modules for which code is available</h1>
|
||||
<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>
|
||||
<ul><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>
|
||||
<li><a href="windows/crypto/cryptmsg.html">windows.crypto.cryptmsg</a></li>
|
||||
@@ -53,6 +48,7 @@
|
||||
<li><a href="windows/debug/symboldbg.html">windows.debug.symboldbg</a></li>
|
||||
<li><a href="windows/debug/symbols.html">windows.debug.symbols</a></li>
|
||||
<li><a href="windows/generated_def/flag.html">windows.generated_def.flag</a></li>
|
||||
<li><a href="windows/generated_def/interfaces.html">windows.generated_def.interfaces</a></li>
|
||||
<li><a href="windows/generated_def/winstructs.html">windows.generated_def.winstructs</a></li>
|
||||
<li><a href="windows/hooks.html">windows.hooks</a></li>
|
||||
<li><a href="windows/native_exec/cpuid.html">windows.native_exec.cpuid</a></li>
|
||||
@@ -90,23 +86,22 @@
|
||||
<li><a href="windows/wintrust.html">windows.wintrust</a></li>
|
||||
</ul>
|
||||
|
||||
<div class="clearer"></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>
|
||||
<search id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||||
<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>
|
||||
</search>
|
||||
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
@@ -120,12 +115,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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">Overview: module code</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+116
-81
@@ -1,21 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!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">
|
||||
<html lang="en" data-content_root="../../">
|
||||
<head>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>windows.alpc — PythonForWindows 0.6 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" type="text/css" href="../../_static/css/mbasic.css" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.alpc — PythonForWindows 1.0.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=fa44fd50" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/classic.css?v=def86cc0" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/css/mbasic.css?v=957880af" />
|
||||
|
||||
<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>
|
||||
<script type="text/javascript" src="../../_static/language_data.js"></script>
|
||||
<script src="../../_static/documentation_options.js?v=8d563738"></script>
|
||||
<script src="../../_static/doctools.js?v=9a2dae69"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
|
||||
<link rel="index" title="Index" href="../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../search.html" />
|
||||
@@ -29,8 +25,9 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.alpc</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -59,10 +56,14 @@
|
||||
<span class="c1"># 0x1a: 0x4000000: ALPC_MESSAGE_DIRECT_ATTRIBUTE(0x4000000) size=0x8</span>
|
||||
<span class="c1"># 0x19: 0x2000000: ALPC_MESSAGE_WORK_ON_BEHALF_ATTRIBUTE(0x2000000) size=0x8</span>
|
||||
|
||||
<div class="viewcode-block" id="AlpcMessage"><a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcMessage">[docs]</a><span class="k">class</span> <span class="nc">AlpcMessage</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""Represent a full ALPC Message: a :class:`AlpcMessagePort` and a :class:`MessageAttribute`"""</span>
|
||||
<span class="n">DEFAULT_MESSAGE_SIZE</span> <span class="o">=</span> <span class="mh">0x1000</span>
|
||||
|
||||
<div class="viewcode-block" id="AlpcMessage">
|
||||
<a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcMessage">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">AlpcMessage</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Represent a full ALPC Message: a :class:`AlpcMessagePort` and a :class:`MessageAttribute`"""</span>
|
||||
<span class="c1"># PORT_MESSAGE + MessageAttribute</span>
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg_or_size</span><span class="o">=</span><span class="mh">0x1000</span><span class="p">,</span> <span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg_or_size</span><span class="o">=</span><span class="n">DEFAULT_MESSAGE_SIZE</span><span class="p">,</span> <span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="c1"># Init the PORT_MESSAGE</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">msg_or_size</span><span class="p">,</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">int_types</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">port_message_buffer_size</span> <span class="o">=</span> <span class="n">msg_or_size</span>
|
||||
@@ -86,7 +87,7 @@
|
||||
<span class="c1"># PORT_MESSAGE wrappers</span>
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The type of the message (``PORT_MESSAGE.u2.s2.Type``)"""</span>
|
||||
<span class="w"> </span><span class="sd">"""The type of the message (``PORT_MESSAGE.u2.s2.Type``)"""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">port_message</span><span class="o">.</span><span class="n">u2</span><span class="o">.</span><span class="n">s2</span><span class="o">.</span><span class="n">Type</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_port_message_data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -103,7 +104,7 @@
|
||||
<span class="c1">## Low level attributes access</span>
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">security_attribute</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The :data:`~windows.generated_def.ALPC_MESSAGE_SECURITY_ATTRIBUTE` of the message</span>
|
||||
<span class="w"> </span><span class="sd">"""The :data:`~windows.generated_def.ALPC_MESSAGE_SECURITY_ATTRIBUTE` of the message</span>
|
||||
|
||||
<span class="sd"> :type: :class:`ALPC_SECURITY_ATTR`</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -111,7 +112,7 @@
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">view_attribute</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The :data:`~windows.generated_def.ALPC_MESSAGE_VIEW_ATTRIBUTE` of the message:</span>
|
||||
<span class="w"> </span><span class="sd">"""The :data:`~windows.generated_def.ALPC_MESSAGE_VIEW_ATTRIBUTE` of the message:</span>
|
||||
|
||||
<span class="sd"> :type: :class:`ALPC_DATA_VIEW_ATTR`</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -119,7 +120,7 @@
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">context_attribute</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The :data:`~windows.generated_def.ALPC_MESSAGE_CONTEXT_ATTRIBUTE` of the message:</span>
|
||||
<span class="w"> </span><span class="sd">"""The :data:`~windows.generated_def.ALPC_MESSAGE_CONTEXT_ATTRIBUTE` of the message:</span>
|
||||
|
||||
<span class="sd"> :type: :class:`ALPC_CONTEXT_ATTR`</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -127,7 +128,7 @@
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">handle_attribute</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The :data:`~windows.generated_def.ALPC_MESSAGE_HANDLE_ATTRIBUTE` of the message:</span>
|
||||
<span class="w"> </span><span class="sd">"""The :data:`~windows.generated_def.ALPC_MESSAGE_HANDLE_ATTRIBUTE` of the message:</span>
|
||||
|
||||
<span class="sd"> :type: :class:`ALPC_HANDLE_ATTR`</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -136,28 +137,28 @@
|
||||
<span class="c1">## Low level validity check (Test)</span>
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">view_is_valid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># Change the name ?</span>
|
||||
<span class="sd">"""True if :data:`~windows.generated_def.ALPC_MESSAGE_VIEW_ATTRIBUTE` is a ValidAttributes"""</span>
|
||||
<span class="w"> </span><span class="sd">"""True if :data:`~windows.generated_def.ALPC_MESSAGE_VIEW_ATTRIBUTE` is a ValidAttributes"""</span>
|
||||
<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">is_valid</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>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">security_is_valid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># Change the name ?</span>
|
||||
<span class="sd">"""True if :data:`~windows.generated_def.ALPC_MESSAGE_SECURITY_ATTRIBUTE` is a ValidAttributes"""</span>
|
||||
<span class="w"> </span><span class="sd">"""True if :data:`~windows.generated_def.ALPC_MESSAGE_SECURITY_ATTRIBUTE` is a ValidAttributes"""</span>
|
||||
<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">is_valid</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="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">handle_is_valid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># Change the name ?</span>
|
||||
<span class="sd">"""True if :data:`~windows.generated_def.ALPC_MESSAGE_HANDLE_ATTRIBUTE` is a ValidAttributes"""</span>
|
||||
<span class="w"> </span><span class="sd">"""True if :data:`~windows.generated_def.ALPC_MESSAGE_HANDLE_ATTRIBUTE` is a ValidAttributes"""</span>
|
||||
<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">is_valid</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_HANDLE_ATTRIBUTE</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">context_is_valid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># Change the name ?</span>
|
||||
<span class="sd">"""True if :data:`~windows.generated_def.ALPC_MESSAGE_CONTEXT_ATTRIBUTE` is a ValidAttributes"""</span>
|
||||
<span class="w"> </span><span class="sd">"""True if :data:`~windows.generated_def.ALPC_MESSAGE_CONTEXT_ATTRIBUTE` is a ValidAttributes"""</span>
|
||||
<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">is_valid</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_CONTEXT_ATTRIBUTE</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">valid_attributes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The list of valid attributes</span>
|
||||
<span class="w"> </span><span class="sd">"""The list of valid attributes</span>
|
||||
|
||||
<span class="sd"> :type: [:class:`~windows.generated_def.Flag`]</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -165,7 +166,7 @@
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">allocated_attributes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The list of allocated attributes</span>
|
||||
<span class="w"> </span><span class="sd">"""The list of allocated attributes</span>
|
||||
|
||||
<span class="sd"> :type: [:class:`~windows.generated_def.Flag`]</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -177,10 +178,15 @@
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="AlpcMessagePort"><a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcMessagePort">[docs]</a><span class="k">class</span> <span class="nc">AlpcMessagePort</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">PORT_MESSAGE</span><span class="p">):</span>
|
||||
<span class="sd">"""The effective ALPC Message composed of a ``PORT_MESSAGE`` structure followed by the data"""</span>
|
||||
|
||||
<div class="viewcode-block" id="AlpcMessagePort">
|
||||
<a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcMessagePort">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">AlpcMessagePort</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">PORT_MESSAGE</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""The effective ALPC Message composed of a ``PORT_MESSAGE`` structure followed by the data"""</span>
|
||||
<span class="c1"># Constructeur</span>
|
||||
<div class="viewcode-block" id="AlpcMessagePort.from_buffer"><a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcMessagePort.from_buffer">[docs]</a> <span class="nd">@classmethod</span>
|
||||
<div class="viewcode-block" id="AlpcMessagePort.from_buffer">
|
||||
<a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcMessagePort.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">self</span><span class="p">,</span> <span class="n">buffer</span><span class="p">):</span>
|
||||
<span class="c1"># A sort of super(AlpcMessagePort).from_buffer</span>
|
||||
<span class="c1"># But from_buffer is from the Metaclass of AlpcMessagePort so we use 'type(AlpcMessagePort)'</span>
|
||||
@@ -192,6 +198,7 @@
|
||||
<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>
|
||||
<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">buffer_size</span><span class="p">)</span>
|
||||
@@ -202,6 +209,7 @@
|
||||
|
||||
<span class="k">def</span> <span class="nf">write_data</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="k">if</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="bp">self</span><span class="o">.</span><span class="n">max_datasize</span><span class="p">:</span>
|
||||
<span class="kn">import</span> <span class="nn">pdb</span><span class="p">;</span> <span class="n">pdb</span><span class="o">.</span><span class="n">set_trace</span><span class="p">()</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Cannot write data of len <</span><span class="si">{0}</span><span class="s2">> (raw_buffer size == <</span><span class="si">{1}</span><span class="s2">>)"</span><span class="o">.</span><span class="n">format</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="bp">self</span><span class="o">.</span><span class="n">buffer_size</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="bp">self</span><span class="o">.</span><span class="n">header_size</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">header_size</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="n">data</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">set_datalen</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
|
||||
@@ -217,7 +225,8 @@
|
||||
<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>
|
||||
<span class="sd">"""The length of the data"""</span></div>
|
||||
<span class="w"> </span><span class="sd">"""The length of the data"""</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>
|
||||
@@ -230,8 +239,10 @@
|
||||
<span class="n">KNOWN_ALPC_ATTRIBUTES_MAPPING</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span><span class="o">*</span><span class="n">KNOWN_ALPC_ATTRIBUTES</span><span class="p">)</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="MessageAttribute"><a class="viewcode-back" href="../../alpc.html#windows.alpc.MessageAttribute">[docs]</a><span class="k">class</span> <span class="nc">MessageAttribute</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_ATTRIBUTES</span><span class="p">):</span>
|
||||
<span class="sd">"""The attributes of an ALPC message"""</span>
|
||||
<div class="viewcode-block" id="MessageAttribute">
|
||||
<a class="viewcode-back" href="../../alpc.html#windows.alpc.MessageAttribute">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">MessageAttribute</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_ATTRIBUTES</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""The attributes of an ALPC message"""</span>
|
||||
<span class="n">ATTRIBUTE_BY_FLAG</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_SECURITY_ATTR</span><span class="p">),</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> <span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_DATA_VIEW_ATTR</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_CONTEXT_ATTRIBUTE</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_CONTEXT_ATTR</span><span class="p">),</span>
|
||||
@@ -241,9 +252,11 @@
|
||||
<span class="p">(</span><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_WORK_ON_BEHALF_ATTR</span><span class="p">),</span>
|
||||
<span class="p">]</span>
|
||||
|
||||
<div class="viewcode-block" id="MessageAttribute.with_attributes"><a class="viewcode-back" href="../../alpc.html#windows.alpc.MessageAttribute.with_attributes">[docs]</a> <span class="nd">@classmethod</span>
|
||||
<div class="viewcode-block" id="MessageAttribute.with_attributes">
|
||||
<a class="viewcode-back" href="../../alpc.html#windows.alpc.MessageAttribute.with_attributes">[docs]</a>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">with_attributes</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">attributes</span><span class="p">):</span>
|
||||
<span class="sd">"""Create a new :class:`MessageAttribute` with ``attributes`` allocated</span>
|
||||
<span class="w"> </span><span class="sd">"""Create a new :class:`MessageAttribute` with ``attributes`` allocated</span>
|
||||
|
||||
<span class="sd"> :returns: :class:`MessageAttribute`</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -255,9 +268,12 @@
|
||||
<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>
|
||||
|
||||
<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>
|
||||
<span class="sd">"""Create a new :class:`MessageAttribute` with the following attributes allocated:</span>
|
||||
<span class="w"> </span><span class="sd">"""Create a new :class:`MessageAttribute` with the following attributes allocated:</span>
|
||||
|
||||
<span class="sd"> - :class:`ALPC_MESSAGE_SECURITY_ATTRIBUTE`</span>
|
||||
<span class="sd"> - :class:`ALPC_MESSAGE_VIEW_ATTRIBUTE`</span>
|
||||
@@ -278,6 +294,7 @@
|
||||
<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>
|
||||
<span class="k">def</span> <span class="nf">_get_required_buffer_size</span><span class="p">(</span><span class="n">flags</span><span class="p">):</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>
|
||||
@@ -288,14 +305,20 @@
|
||||
<span class="k">return</span> <span class="n">res</span><span class="o">.</span><span class="n">value</span>
|
||||
<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">"""Return ``True`` if ``attribute`` is allocated"""</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="w"> </span><span class="sd">"""Return ``True`` if ``attribute`` is allocated"""</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">&</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">"""Return ``True`` if ``attribute`` is valid"""</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""Return ``True`` if ``attribute`` is valid"""</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">&</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>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Cannot get non-allocated attribute <</span><span class="si">{0}</span><span class="s2">>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">attribute</span><span class="p">))</span>
|
||||
@@ -317,7 +340,7 @@
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">valid_list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The list of valid attributes</span>
|
||||
<span class="w"> </span><span class="sd">"""The list of valid attributes</span>
|
||||
|
||||
<span class="sd"> :type: [:class:`~windows.generated_def.Flag`]</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -325,18 +348,19 @@
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">allocated_list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The list of allocated attributes</span>
|
||||
<span class="w"> </span><span class="sd">"""The list of allocated attributes</span>
|
||||
|
||||
<span class="sd"> :type: [:class:`~windows.generated_def.Flag`]</span>
|
||||
<span class="sd"> """</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">"AlpcSection"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"handle"</span><span class="p">,</span> <span class="s2">"size"</span><span class="p">])</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">AlpcTransportBase</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">send_receive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alpc_message</span><span class="p">,</span> <span class="n">receive_msg</span><span class="o">=</span><span class="kc">None</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">ALPC_MSGFLG_SYNC_REQUEST</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Send and receive a message with ``flags``.</span>
|
||||
<span class="w"> </span><span class="sd">"""Send and receive a message with ``flags``.</span>
|
||||
|
||||
<span class="sd"> :param alpc_message: The message to send. If ``alpc_message`` is a :class:`str` it build an AlpcMessage with the message as data.</span>
|
||||
<span class="sd"> :type alpc_message: AlpcMessage or str</span>
|
||||
@@ -346,19 +370,17 @@
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">alpc_message</span><span class="p">,</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">anybuff</span><span class="p">):</span>
|
||||
<span class="n">raw_alpc_message</span> <span class="o">=</span> <span class="n">alpc_message</span>
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">alpc_message</span><span class="p">)</span> <span class="o">></span> <span class="mh">0x1000</span><span class="p">:</span>
|
||||
<span class="kn">import</span> <span class="nn">pdb</span><span class="p">;</span><span class="n">pdb</span><span class="o">.</span><span class="n">set_trace</span><span class="p">()</span>
|
||||
<span class="n">alpc_message</span> <span class="o">=</span> <span class="n">AlpcMessage</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="mh">0x1000</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">alpc_message</span><span class="p">)</span> <span class="o">+</span> <span class="mh">0x200</span><span class="p">))</span>
|
||||
<span class="n">alpc_message</span><span class="o">.</span><span class="n">port_message</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">raw_alpc_message</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">receive_msg</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">receive_msg</span> <span class="o">=</span> <span class="n">AlpcMessage</span><span class="p">(</span><span class="mh">0x1000</span><span class="p">)</span>
|
||||
<span class="n">receive_msg</span> <span class="o">=</span> <span class="n">AlpcMessage</span><span class="p">(</span><span class="n">DEFAULT_MESSAGE_SIZE</span><span class="p">)</span>
|
||||
<span class="n">receive_size</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SIZE_T</span><span class="p">(</span><span class="n">receive_msg</span><span class="o">.</span><span class="n">port_message_buffer_size</span><span class="p">)</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtAlpcSendWaitReceivePort</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="n">flags</span><span class="p">,</span> <span class="n">alpc_message</span><span class="o">.</span><span class="n">port_message</span><span class="p">,</span> <span class="n">alpc_message</span><span class="o">.</span><span class="n">attributes</span><span class="p">,</span> <span class="n">receive_msg</span><span class="o">.</span><span class="n">port_message</span><span class="p">,</span> <span class="n">receive_size</span><span class="p">,</span> <span class="n">receive_msg</span><span class="o">.</span><span class="n">attributes</span><span class="p">,</span> <span class="n">timeout</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">receive_msg</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">send</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alpc_message</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">"""Send the ``alpc_message`` with ``flags``</span>
|
||||
<span class="w"> </span><span class="sd">"""Send the ``alpc_message`` with ``flags``</span>
|
||||
|
||||
<span class="sd"> :param alpc_message: The message to send. If ``alpc_message`` is a :class:`str` it build an AlpcMessage with the message as data.</span>
|
||||
<span class="sd"> :type alpc_message: AlpcMessage or str</span>
|
||||
@@ -366,19 +388,19 @@
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">alpc_message</span><span class="p">,</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">anybuff</span><span class="p">):</span>
|
||||
<span class="n">raw_alpc_message</span> <span class="o">=</span> <span class="n">alpc_message</span>
|
||||
<span class="n">alpc_message</span> <span class="o">=</span> <span class="n">AlpcMessage</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="mh">0x1000</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">alpc_message</span><span class="p">)))</span>
|
||||
<span class="n">alpc_message</span> <span class="o">=</span> <span class="n">AlpcMessage</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="mh">0x1000</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">alpc_message</span><span class="p">)</span> <span class="o">+</span> <span class="mh">0x200</span><span class="p">))</span>
|
||||
<span class="n">alpc_message</span><span class="o">.</span><span class="n">port_message</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">raw_alpc_message</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtAlpcSendWaitReceivePort</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="n">flags</span><span class="p">,</span> <span class="n">alpc_message</span><span class="o">.</span><span class="n">port_message</span><span class="p">,</span> <span class="n">alpc_message</span><span class="o">.</span><span class="n">attributes</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="kc">None</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">recv</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">receive_msg</span><span class="o">=</span><span class="kc">None</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">"""Receive a message into ``alpc_message`` with ``flags``.</span>
|
||||
<span class="w"> </span><span class="sd">"""Receive a message into ``alpc_message`` with ``flags``.</span>
|
||||
|
||||
<span class="sd"> :param receive_msg: The message to send. If ``receive_msg`` is a ``None`` it create and return a simple :class:`AlpcMessage`</span>
|
||||
<span class="sd"> :type receive_msg: AlpcMessage or None</span>
|
||||
<span class="sd"> :param int flags: The flags for :func:`NtAlpcSendWaitReceivePort`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">receive_msg</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">receive_msg</span> <span class="o">=</span> <span class="n">AlpcMessage</span><span class="p">(</span><span class="mh">0x1000</span><span class="p">)</span>
|
||||
<span class="n">receive_msg</span> <span class="o">=</span> <span class="n">AlpcMessage</span><span class="p">(</span><span class="n">DEFAULT_MESSAGE_SIZE</span><span class="p">)</span>
|
||||
<span class="n">receive_size</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SIZE_T</span><span class="p">(</span><span class="n">receive_msg</span><span class="o">.</span><span class="n">port_message_buffer_size</span><span class="p">)</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtAlpcSendWaitReceivePort</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="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="n">receive_msg</span><span class="o">.</span><span class="n">port_message</span><span class="p">,</span> <span class="n">receive_size</span><span class="p">,</span> <span class="n">receive_msg</span><span class="o">.</span><span class="n">attributes</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">receive_msg</span>
|
||||
@@ -389,12 +411,13 @@
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="AlpcClient"><a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcClient">[docs]</a><span class="k">class</span> <span class="nc">AlpcClient</span><span class="p">(</span><span class="n">AlpcTransportBase</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="AlpcClient">
|
||||
<a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcClient">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">AlpcClient</span><span class="p">(</span><span class="n">AlpcTransportBase</span><span class="p">):</span>
|
||||
<span class="s2">"An ALPC client able to connect to a port and send/receive messages"</span>
|
||||
<span class="n">DEFAULT_MAX_MESSAGE_LENGTH</span> <span class="o">=</span> <span class="mh">0x9000</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">port_name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Init the :class:`AlpcClient` automatically connect to ``port_name`` using default values if given"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Init the :class:`AlpcClient` automatically connect to ``port_name`` using default values if given"""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</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="kc">None</span> <span class="c1">#: The name of the ALPC port the client is connect to.</span>
|
||||
<span class="k">if</span> <span class="n">port_name</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
@@ -403,10 +426,12 @@
|
||||
<span class="k">def</span> <span class="nf">_alpc_port_to_unicode_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">UNICODE_STRING</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="AlpcClient.connect_to_port"><a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcClient.connect_to_port">[docs]</a> <span class="k">def</span> <span class="nf">connect_to_port</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">port_name</span><span class="p">,</span> <span class="n">connect_message</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<div class="viewcode-block" id="AlpcClient.connect_to_port">
|
||||
<a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcClient.connect_to_port">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">connect_to_port</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">port_name</span><span class="p">,</span> <span class="n">connect_message</span><span class="o">=</span><span class="kc">None</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_attr_flags</span><span class="o">=</span><span class="mh">0x10000</span><span class="p">,</span> <span class="n">obj_attr</span><span class="o">=</span><span class="kc">None</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">ALPC_MSGFLG_SYNC_REQUEST</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Connect to the ALPC port ``port_name``. Most of the parameters have defauls value is ``None`` is passed.</span>
|
||||
<span class="w"> </span><span class="sd">"""Connect to the ALPC port ``port_name``. Most of the parameters have defauls value is ``None`` is passed.</span>
|
||||
|
||||
<span class="sd"> :param AlpcMessage connect_message: The message send with the connection request, if not ``None`` the function will return an :class:`AlpcMessage`</span>
|
||||
<span class="sd"> :param ALPC_PORT_ATTRIBUTES port_attr: The port attributes, one with default value will be used if this parameter is ``None``</span>
|
||||
@@ -424,7 +449,7 @@
|
||||
<span class="k">if</span> <span class="n">port_attr</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">port_attr</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_PORT_ATTRIBUTES</span><span class="p">()</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">Flags</span> <span class="o">=</span> <span class="n">port_attr_flags</span> <span class="c1"># Flag qui fonctionne pour l'UAC</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxMessageLength</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">DEFAULT_MAX_MESSAGE_LENGTH</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxMessageLength</span> <span class="o">=</span> <span class="n">DEFAULT_MESSAGE_SIZE</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MemoryBandwidth</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxPoolUsage</span> <span class="o">=</span> <span class="mh">0xffffffff</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxSectionSize</span> <span class="o">=</span> <span class="mh">0xffffffff</span>
|
||||
@@ -460,6 +485,7 @@
|
||||
<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>
|
||||
<span class="n">ActualSectionSize</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SIZE_T</span><span class="p">()</span>
|
||||
@@ -485,9 +511,11 @@
|
||||
<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>
|
||||
<span class="sd">"""An ALPC server able to create a port, accept connections and send/receive messages"""</span>
|
||||
<span class="n">DEFAULT_MAX_MESSAGE_LENGTH</span> <span class="o">=</span> <span class="mh">0x1000</span>
|
||||
|
||||
<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>
|
||||
<span class="w"> </span><span class="sd">"""An ALPC server able to create a port, accept connections and send/receive messages"""</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">port_name</span><span class="o">=</span><span class="kc">None</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="kc">None</span>
|
||||
@@ -499,8 +527,10 @@
|
||||
<span class="k">def</span> <span class="nf">_alpc_port_to_unicode_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">UNICODE_STRING</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="AlpcServer.create_port"><a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcServer.create_port">[docs]</a> <span class="k">def</span> <span class="nf">create_port</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">port_name</span><span class="p">,</span> <span class="n">msglen</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">port_attr_flags</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">obj_attr</span><span class="o">=</span><span class="kc">None</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="sd">"""Create the ALPC port ``port_name``. Most of the parameters have defauls value is ``None`` is passed.</span>
|
||||
<div class="viewcode-block" id="AlpcServer.create_port">
|
||||
<a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcServer.create_port">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">create_port</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">port_name</span><span class="p">,</span> <span class="n">msglen</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">port_attr_flags</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">obj_attr</span><span class="o">=</span><span class="kc">None</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="w"> </span><span class="sd">"""Create the ALPC port ``port_name``. Most of the parameters have defauls value is ``None`` is passed.</span>
|
||||
|
||||
<span class="sd"> :param str port_name: The port's name to create.</span>
|
||||
<span class="sd"> :param int msglen: ``ALPC_PORT_ATTRIBUTES.MaxMessageLength`` used if ``port_attr`` is ``None`` (MUTUALY EXCLUSINVE WITH ``port_attr``)</span>
|
||||
@@ -516,7 +546,7 @@
|
||||
<span class="n">port_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_alpc_port_to_unicode_string</span><span class="p">(</span><span class="n">raw_name</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">msglen</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">msglen</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">DEFAULT_MAX_MESSAGE_LENGTH</span>
|
||||
<span class="n">msglen</span> <span class="o">=</span> <span class="n">DEFAULT_MESSAGE_SIZE</span>
|
||||
<span class="k">if</span> <span class="n">obj_attr</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">obj_attr</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">OBJECT_ATTRIBUTES</span><span class="p">()</span>
|
||||
<span class="n">obj_attr</span><span class="o">.</span><span class="n">Length</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="n">obj_attr</span><span class="p">)</span>
|
||||
@@ -543,8 +573,11 @@
|
||||
<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">"""Accept the connection for a ``LPC_CONNECTION_REQUEST`` message.</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""Accept the connection for a ``LPC_CONNECTION_REQUEST`` message.</span>
|
||||
<span class="sd"> ``msg.MessageId`` must be the same as the connection requesting message.</span>
|
||||
|
||||
<span class="sd"> :param AlpcMessage msg: The response message.</span>
|
||||
@@ -559,7 +592,7 @@
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">Flags</span> <span class="o">=</span> <span class="mh">0x80000</span>
|
||||
<span class="c1"># port_attr.Flags = 0x80000 + 0x2000000</span>
|
||||
<span class="c1"># port_attr.Flags = 0x2000000</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxMessageLength</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">DEFAULT_MAX_MESSAGE_LENGTH</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxMessageLength</span> <span class="o">=</span> <span class="n">DEFAULT_MESSAGE_SIZE</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MemoryBandwidth</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxPoolUsage</span> <span class="o">=</span> <span class="mh">0xffffffff</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxSectionSize</span> <span class="o">=</span> <span class="mh">0xffffffff</span>
|
||||
@@ -571,6 +604,7 @@
|
||||
<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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle</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>
|
||||
@@ -582,25 +616,25 @@
|
||||
<span class="k">def</span> <span class="fm">__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>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">disconnect</span><span class="p">()</span></div>
|
||||
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></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>
|
||||
<search id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||||
<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>
|
||||
</search>
|
||||
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
@@ -614,13 +648,14 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.alpc</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+95
-42
@@ -1,21 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!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">
|
||||
<html lang="en" data-content_root="../../">
|
||||
<head>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>windows.com — PythonForWindows 0.6 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" type="text/css" href="../../_static/css/mbasic.css" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.com — PythonForWindows 1.0.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=fa44fd50" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/classic.css?v=def86cc0" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/css/mbasic.css?v=957880af" />
|
||||
|
||||
<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>
|
||||
<script type="text/javascript" src="../../_static/language_data.js"></script>
|
||||
<script src="../../_static/documentation_options.js?v=8d563738"></script>
|
||||
<script src="../../_static/doctools.js?v=9a2dae69"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
|
||||
<link rel="index" title="Index" href="../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../search.html" />
|
||||
@@ -29,8 +25,9 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.com</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -64,8 +61,10 @@
|
||||
<span class="c1"># Simple raw -> UUID</span>
|
||||
<span class="c1"># "-".join("{:02X}".format(c) for c in struct.unpack("<IHHHBBBBBB", x))</span>
|
||||
|
||||
<div class="viewcode-block" id="init"><a class="viewcode-back" href="../../com.html#windows.com.init">[docs]</a><span class="k">def</span> <span class="nf">init</span><span class="p">():</span>
|
||||
<span class="sd">"""Init COM with some default parameters"""</span>
|
||||
<div class="viewcode-block" id="init">
|
||||
<a class="viewcode-back" href="../../com.html#windows.com.init">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">init</span><span class="p">():</span>
|
||||
<span class="w"> </span><span class="sd">"""Init COM with some default parameters"""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">t</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CoInitializeEx</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>
|
||||
@@ -74,6 +73,7 @@
|
||||
<span class="k">return</span> <span class="n">t</span> <span class="o">&</span> <span class="mh">0xffffffff</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>
|
||||
|
||||
@@ -111,8 +111,10 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">GetDocumentation</span><span class="p">(</span><span class="nb">id</span><span class="p">,</span> <span class="n">res</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">res</span>
|
||||
|
||||
<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">"""A simple wrapper around ``CoCreateInstance <https://msdn.microsoft.com/en-us/library/windows/desktop/ms686615(v=vs.85).aspx>``"""</span>
|
||||
<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="w"> </span><span class="sd">"""A simple wrapper around ``CoCreateInstance <https://msdn.microsoft.com/en-us/library/windows/desktop/ms686615(v=vs.85).aspx>``"""</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>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">clsiid</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||||
@@ -121,6 +123,7 @@
|
||||
<span class="k">return</span> <span class="n">targetinterface</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>
|
||||
@@ -131,6 +134,17 @@
|
||||
<span class="c1"># Improved COM object</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">create</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">elttype</span><span class="p">,</span> <span class="n">dims</span><span class="p">):</span>
|
||||
<span class="c1"># Array of bound for each dimension</span>
|
||||
<span class="n">bound_array</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">BUFFER</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SAFEARRAYBOUND</span><span class="p">)(</span><span class="n">nbelt</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">dims</span><span class="p">))</span>
|
||||
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">dim</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">dims</span><span class="p">):</span>
|
||||
<span class="n">bound_array</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">lLbound</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">bound_array</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">cElements</span> <span class="o">=</span> <span class="n">dim</span>
|
||||
<span class="n">array_ptr</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">SafeArrayCreate</span><span class="p">(</span><span class="n">elttype</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">dims</span><span class="p">),</span> <span class="n">bound_array</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">from_PSAFEARRAY</span><span class="p">(</span><span class="n">array_ptr</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>
|
||||
@@ -158,6 +172,29 @@
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pvData</span> <span class="o">+</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="n">llbound</span><span class="p">)</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="n">t</span><span class="p">))</span><span class="o">.</span><span class="n">value</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="n">nb_element</span><span class="p">)]</span>
|
||||
<span class="k">return</span> <span class="n">data</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">put_element</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">indexes</span><span class="p">,</span> <span class="n">element</span><span class="p">):</span>
|
||||
<span class="n">indexes_array</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">BUFFER</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">LONG</span><span class="p">)(</span><span class="o">*</span><span class="n">indexes</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">element</span><span class="p">,</span> <span class="n">VARIANT</span><span class="p">):</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="c1"># element = Variant(element)</span>
|
||||
<span class="c1"># import pdb; pdb.set_trace()</span>
|
||||
<span class="c1"># element = ctypes.pointer(variant)</span>
|
||||
<span class="c1"># print(hex(ctypes.addressof(element)))</span>
|
||||
<span class="c1"># windows.utils.sprint(element)</span>
|
||||
<span class="c1"># import pdb; pdb.set_trace()</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">SafeArrayPutElement</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">indexes_array</span><span class="p">,</span> <span class="n">element</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_element</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">indexes</span><span class="p">):</span>
|
||||
<span class="n">indexes_array</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">BUFFER</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">LONG</span><span class="p">)(</span><span class="o">*</span><span class="n">indexes</span><span class="p">)</span>
|
||||
<span class="n">element</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_string_buffer</span><span class="p">(</span><span class="mh">0x1000</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">SafeArrayGetElement</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">indexes_array</span><span class="p">,</span> <span class="n">element</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">element</span> <span class="c1"># Need cleaning ?</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">bound_array</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">resized_array</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rgsabound</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cDims</span><span class="p">)</span>
|
||||
<span class="n">dims</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">b</span><span class="o">.</span><span class="n">cElements</span><span class="p">)</span> <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">bound_array</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="s2">"<</span><span class="si">{0}</span><span class="s2"> of dimension </span><span class="si">{1}</span><span class="s2">: </span><span class="si">{2}</span><span class="s2">>"</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="nb">len</span><span class="p">(</span><span class="n">dims</span><span class="p">),</span> <span class="n">dims</span><span class="p">)</span>
|
||||
|
||||
<span class="c1">#VT_VALUE_TO_TYPE = {</span>
|
||||
<span class="c1">#VT_I2 : SHORT,</span>
|
||||
<span class="c1">#VT_I4 : LONG,</span>
|
||||
@@ -199,6 +236,9 @@
|
||||
<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="k">def</span> <span class="nf">check_type_safearray</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">LPSAFEARRAY</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>
|
||||
|
||||
@@ -232,6 +272,7 @@
|
||||
<span class="p">(</span><span class="n">VT_I4</span><span class="p">,</span> <span class="s2">"lVal"</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">"llVal"</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">"bstrVal"</span><span class="p">,</span> <span class="n">check_type_bstr</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="n">VT_SAFEARRAY</span> <span class="p">,</span> <span class="s2">"parray"</span><span class="p">,</span> <span class="n">check_type_safearray</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">"pdispVal"</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>
|
||||
@@ -334,8 +375,10 @@
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="COMImplementation"><a class="viewcode-back" href="../../com.html#windows.com.COMImplementation">[docs]</a><span class="k">class</span> <span class="nc">COMImplementation</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""The base class to implements COM object respecting a given interface"""</span>
|
||||
<div class="viewcode-block" id="COMImplementation">
|
||||
<a class="viewcode-back" href="../../com.html#windows.com.COMImplementation">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">COMImplementation</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""The base class to implements COM object respecting a given interface"""</span>
|
||||
<span class="n">IMPLEMENT</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_index_of_method</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">method</span><span class="p">):</span>
|
||||
@@ -356,7 +399,7 @@
|
||||
<span class="n">implem</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func_name</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">implem</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">"<</span><span class="si">{0}</span><span class="s2">> implementing <</span><span class="si">{1}</span><span class="s2">> has no method <</span><span class="si">{2}</span><span class="s2">>"</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">IMPLEMENT</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">func_name</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">callable</span><span class="p">(</span><span class="n">implem</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">callable</span><span class="p">(</span><span class="n">implem</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"</span><span class="si">{0}</span><span class="s2"> implementing <</span><span class="si">{1}</span><span class="s2">>: <</span><span class="si">{2}</span><span class="s2">> is not callable"</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">IMPLEMENT</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">func_name</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
|
||||
@@ -381,39 +424,48 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">vtable_pointer</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">pointer</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">vtable</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_as_parameter_</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="o">.</span><span class="n">vtable_pointer</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="COMImplementation.QueryInterface"><a class="viewcode-back" href="../../com.html#windows.com.COMImplementation.QueryInterface">[docs]</a> <span class="k">def</span> <span class="nf">QueryInterface</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">piid</span><span class="p">,</span> <span class="n">result</span><span class="p">):</span>
|
||||
<span class="sd">"""Default ``QueryInterface`` implementation that returns ``self`` if piid is the implemented interface"""</span>
|
||||
<div class="viewcode-block" id="COMImplementation.QueryInterface">
|
||||
<a class="viewcode-back" href="../../com.html#windows.com.COMImplementation.QueryInterface">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">QueryInterface</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">piid</span><span class="p">,</span> <span class="n">result</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Default ``QueryInterface`` implementation that returns ``self`` if piid is the implemented interface"""</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">gdef</span><span class="o">.</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>
|
||||
<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">"""Default ``AddRef`` implementation that returns ``1``"""</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""Default ``AddRef`` implementation that returns ``1``"""</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">"""Default ``Release`` implementation that returns ``1``"""</span>
|
||||
<span class="k">return</span> <span class="mi">0</span></div></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="w"> </span><span class="sd">"""Default ``Release`` implementation that returns ``1``"""</span>
|
||||
<span class="k">return</span> <span class="mi">0</span></div>
|
||||
</div>
|
||||
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></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>
|
||||
<search id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||||
<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>
|
||||
</search>
|
||||
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
@@ -427,13 +479,14 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.com</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+120
-79
@@ -1,21 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!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">
|
||||
<html lang="en" data-content_root="../../../">
|
||||
<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 — PythonForWindows 0.6 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" type="text/css" href="../../../_static/css/mbasic.css" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.crypto.certificate — PythonForWindows 1.0.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=fa44fd50" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/classic.css?v=def86cc0" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css?v=957880af" />
|
||||
|
||||
<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>
|
||||
<script type="text/javascript" src="../../../_static/language_data.js"></script>
|
||||
<script src="../../../_static/documentation_options.js?v=8d563738"></script>
|
||||
<script src="../../../_static/doctools.js?v=9a2dae69"></script>
|
||||
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
|
||||
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../../search.html" />
|
||||
@@ -29,8 +25,9 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.crypto.certificate</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -48,6 +45,7 @@
|
||||
<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.crypto</span> <span class="kn">import</span> <span class="n">DEFAULT_ENCODING</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="kn">import</span> <span class="n">urepr_encode</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">windows.crypto.cryptmsg</span>
|
||||
|
||||
@@ -75,8 +73,10 @@
|
||||
|
||||
<span class="c1">## Move CryptObject to new .py ?</span>
|
||||
|
||||
<div class="viewcode-block" id="CryptObject"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CryptObject">[docs]</a><span class="k">class</span> <span class="nc">CryptObject</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""Extract information from an CryptoAPI object.</span>
|
||||
<div class="viewcode-block" id="CryptObject">
|
||||
<a class="viewcode-back" href="../../../crypto.html#windows.crypto.CryptObject">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">CryptObject</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Extract information from an CryptoAPI object.</span>
|
||||
<span class="sd"> (see `CryptQueryObject <https://msdn.microsoft.com/en-us/library/windows/desktop/aa380264(v=vs.85).aspx>`_)</span>
|
||||
|
||||
<span class="sd"> Current main use is extracting the signers certificates from a PE file.</span>
|
||||
@@ -109,12 +109,12 @@
|
||||
<span class="kc">None</span><span class="p">)</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">cert_store</span> <span class="o">=</span> <span class="n">hStore</span> <span class="k">if</span> <span class="n">hStore</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="sd">"""The :class:`CertificateStore` that includes all of the certificates, CRLs, and CTLs in the object"""</span>
|
||||
<span class="w"> </span><span class="sd">"""The :class:`CertificateStore` that includes all of the certificates, CRLs, and CTLs in the object"""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crypt_msg</span> <span class="o">=</span> <span class="n">hMsg</span> <span class="k">if</span> <span class="n">hMsg</span> <span class="k">else</span> <span class="kc">None</span> <span class="c1">#: yolo</span>
|
||||
<span class="sd">"""The :class:`CryptMessage` for any ``PKCS7`` content in the object"""</span>
|
||||
<span class="w"> </span><span class="sd">"""The :class:`CryptMessage` for any ``PKCS7`` content in the object"""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">encoding</span> <span class="o">=</span> <span class="n">dwEncoding</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">content_type</span> <span class="o">=</span> <span class="n">CRYPT_OBJECT_FORMAT_TYPE_DICT</span><span class="p">[</span><span class="n">dwContentType</span><span class="o">.</span><span class="n">value</span><span class="p">]</span>
|
||||
<span class="sd">"""The type of the opened message"""</span>
|
||||
<span class="w"> </span><span class="sd">"""The type of the opened message"""</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_signers_and_certs_generator</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">crypt_msg</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
@@ -129,7 +129,7 @@
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">signers_and_certs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The list of signer info and certificates signing the object.</span>
|
||||
<span class="w"> </span><span class="sd">"""The list of signer info and certificates signing the object.</span>
|
||||
|
||||
<span class="sd"> :rtype: [(:class:`~windows.generated_def.winstructs.CMSG_SIGNER_INFO`, :class:`Certificate`)]</span>
|
||||
|
||||
@@ -140,15 +140,18 @@
|
||||
<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="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s1">'<</span><span class="si">{0}</span><span class="s1"> "</span><span class="si">{1}</span><span class="s1">" content_type=</span><span class="si">{2!r}</span><span class="s1">>'</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="k">return</span> <span class="n">urepr_encode</span><span class="p">(</span><span class="sa">u</span><span class="s1">'<</span><span class="si">{0}</span><span class="s1"> "</span><span class="si">{1}</span><span class="s1">" content_type=</span><span class="si">{2!r}</span><span class="s1">>'</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>
|
||||
<div class="viewcode-block" id="CertificateStore"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CertificateStore">[docs]</a><span class="k">class</span> <span class="nc">CertificateStore</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">HCERTSTORE</span><span class="p">):</span>
|
||||
<span class="sd">"""A certificate store"""</span>
|
||||
<div class="viewcode-block" id="CertificateStore">
|
||||
<a class="viewcode-back" href="../../../crypto.html#windows.crypto.CertificateStore">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">CertificateStore</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">HCERTSTORE</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""A certificate store"""</span>
|
||||
<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>
|
||||
<span class="sd">"""The list of certificates in the store</span>
|
||||
<span class="w"> </span><span class="sd">"""The list of certificates in the store</span>
|
||||
|
||||
<span class="sd"> :type: [:class:`Certificate`] -- A list of certificate</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -167,16 +170,22 @@
|
||||
<span class="n">last</span> <span class="o">=</span> <span class="n">ecert</span>
|
||||
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Out of infinit loop"</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">"""Add a certificate to the store"""</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="w"> </span><span class="sd">"""Add a certificate to the store"""</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>
|
||||
|
||||
<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">"""Create a new :class:`CertificateStore` from ``filename``"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Create a new :class:`CertificateStore` from ``filename``"""</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>
|
||||
<span class="n">title</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
@@ -185,24 +194,32 @@
|
||||
|
||||
|
||||
<span class="c1"># See https://msdn.microsoft.com/en-us/library/windows/desktop/aa388136(v=vs.85).aspx</span>
|
||||
<div class="viewcode-block" id="CertificateStore.from_system_store"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CertificateStore.from_system_store">[docs]</a> <span class="nd">@classmethod</span>
|
||||
<div class="viewcode-block" id="CertificateStore.from_system_store">
|
||||
<a class="viewcode-back" href="../../../crypto.html#windows.crypto.CertificateStore.from_system_store">[docs]</a>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">from_system_store</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">store_name</span><span class="p">):</span>
|
||||
<span class="sd">"""Create a new :class:`CertificateStore` from system store ``store_name``</span>
|
||||
<span class="w"> </span><span class="sd">"""Create a new :class:`CertificateStore` from system store ``store_name``</span>
|
||||
<span class="sd"> (see `System Store Locations <https://msdn.microsoft.com/en-us/library/windows/desktop/aa388136(v=vs.85).aspx>`_)</span>
|
||||
<span class="sd"> """</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>
|
||||
|
||||
<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">"""Create a new temporary :class:`CertificateStore` in memory"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Create a new temporary :class:`CertificateStore` in memory"""</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">"""Return the certificate that match `issuer` and `serialnumber`</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="w"> </span><span class="sd">"""Return the certificate that match `issuer` and `serialnumber`</span>
|
||||
|
||||
<span class="sd"> :return: :class:`Certificate` -- ``None`` if certificate is not found</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -218,10 +235,12 @@
|
||||
<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>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="fm">__del__</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">CertCloseStore</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
|
||||
<span class="c1"># PKCS12_NO_PERSIST_KEY -> do not save it in a key container on disk</span>
|
||||
<span class="c1"># Without it, a key container is created at 'C:\Users\USERNAME\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-3241049326-165485355-1070449050-1001'</span>
|
||||
<span class="c1"># More about this:</span>
|
||||
@@ -236,8 +255,10 @@
|
||||
<span class="c1"># Microsoft CSP Name: Microsoft Enhanced Cryptographic Provider v1.0</span>
|
||||
<span class="c1"># BUT this will not allow to decrypt RSA_RC4 ?</span>
|
||||
|
||||
<div class="viewcode-block" id="import_pfx"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.import_pfx">[docs]</a><span class="k">def</span> <span class="nf">import_pfx</span><span class="p">(</span><span class="n">pfx</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="kc">None</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">CRYPT_USER_KEYSET</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PKCS12_NO_PERSIST_KEY</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PKCS12_ALWAYS_CNG_KSP</span><span class="p">):</span>
|
||||
<span class="sd">"""Import the file ``pfx`` with the ``password``.</span>
|
||||
<div class="viewcode-block" id="import_pfx">
|
||||
<a class="viewcode-back" href="../../../crypto.html#windows.crypto.import_pfx">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">import_pfx</span><span class="p">(</span><span class="n">pfx</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="kc">None</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">CRYPT_USER_KEYSET</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PKCS12_NO_PERSIST_KEY</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PKCS12_ALWAYS_CNG_KSP</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Import the file ``pfx`` with the ``password``.</span>
|
||||
|
||||
<span class="sd"> ``default flags = PKCS12_NO_PERSIST_KEY | CRYPT_USER_KEYSET``.</span>
|
||||
|
||||
@@ -251,12 +272,15 @@
|
||||
<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>
|
||||
<span class="sd">"""Represent a Certificate """</span>
|
||||
|
||||
<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>
|
||||
<span class="w"> </span><span class="sd">"""Represent a Certificate """</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">raw_serial</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The raw serial number of the certificate.</span>
|
||||
<span class="w"> </span><span class="sd">"""The raw serial number of the certificate.</span>
|
||||
|
||||
<span class="sd"> :type: [:class:`int`]: A list of int ``0 <= x <= 255``"""</span>
|
||||
<span class="n">serial_number</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pCertInfo</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">SerialNumber</span>
|
||||
@@ -264,7 +288,7 @@
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">serial</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The string representation of the certificate's serial.</span>
|
||||
<span class="w"> </span><span class="sd">"""The string representation of the certificate's serial.</span>
|
||||
|
||||
<span class="sd"> :type: :class:`str`</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -272,8 +296,10 @@
|
||||
<span class="k">return</span> <span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">"</span><span class="si">{:02x}</span><span class="s2">"</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">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">"""Retrieve the subject or issuer name of the certificate.</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="w"> </span><span class="sd">"""Retrieve the subject or issuer name of the certificate.</span>
|
||||
<span class="sd"> See `CertGetNameStringA <https://msdn.microsoft.com/en-us/library/windows/desktop/aa376086(v=vs.85).aspx>`_</span>
|
||||
|
||||
<span class="sd"> :returns: :class:`str`</span>
|
||||
@@ -281,15 +307,16 @@
|
||||
<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="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="n">size</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertGetNameStringW</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">create_unicode_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">CertGetNameStringW</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">"""The name of the certificate.</span>
|
||||
<span class="w"> </span><span class="sd">"""The name of the certificate.</span>
|
||||
|
||||
<span class="sd"> :type: :class:`str`"""</span>
|
||||
|
||||
@@ -302,7 +329,7 @@
|
||||
|
||||
<span class="nd">@property</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">"""The thumbprint of the certificate (which is the sha1 of the encoded cert).</span>
|
||||
<span class="w"> </span><span class="sd">"""The thumbprint of the certificate (which is the sha1 of the encoded cert).</span>
|
||||
|
||||
<span class="sd"> Example:</span>
|
||||
|
||||
@@ -317,7 +344,7 @@
|
||||
|
||||
<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">"""The distinguished name (DN) of the certificate.</span>
|
||||
<span class="w"> </span><span class="sd">"""The distinguished name (DN) of the certificate.</span>
|
||||
|
||||
<span class="sd"> Example:</span>
|
||||
|
||||
@@ -332,7 +359,7 @@
|
||||
|
||||
<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">"""The name of the certificate's issuer.</span>
|
||||
<span class="w"> </span><span class="sd">"""The name of the certificate's issuer.</span>
|
||||
|
||||
<span class="sd"> :type: :class:`str`"""</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>
|
||||
@@ -340,7 +367,7 @@
|
||||
|
||||
<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">"""The certificate store that contains the certificate</span>
|
||||
<span class="w"> </span><span class="sd">"""The certificate store that contains the certificate</span>
|
||||
|
||||
<span class="sd"> :type: :class:`CertificateStore`</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -369,7 +396,7 @@
|
||||
|
||||
<span class="nd">@property</span> <span class="c1"># fixedproperty ?</span>
|
||||
<span class="k">def</span> <span class="nf">chains</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The list of chain context available for this certificate. Each elements of this list is a list of ``Certificate`` that should</span>
|
||||
<span class="w"> </span><span class="sd">"""The list of chain context available for this certificate. Each elements of this list is a list of ``Certificate`` that should</span>
|
||||
<span class="sd"> go from the ``self`` certificate to a trusted certificate.</span>
|
||||
|
||||
<span class="sd"> :type: [[:class:`Certificate`]] -- A list of chain (list) of :class:`Certificate`</span>
|
||||
@@ -384,8 +411,10 @@
|
||||
<span class="c1"># API Arround CertSelectCertificateChains ?</span>
|
||||
<span class="c1"># https://msdn.microsoft.com/en-us/library/windows/desktop/dd433797(v=vs.85).aspx</span>
|
||||
|
||||
<div class="viewcode-block" id="Certificate.duplicate"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.Certificate.duplicate">[docs]</a> <span class="k">def</span> <span class="nf">duplicate</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Duplicate the certificate by incrementing the internal refcount. (see `CertDuplicateCertificateContext <https://msdn.microsoft.com/en-us/library/windows/desktop/aa376045(v=vs.85).aspx>`_)</span>
|
||||
<div class="viewcode-block" id="Certificate.duplicate">
|
||||
<a class="viewcode-back" href="../../../crypto.html#windows.crypto.Certificate.duplicate">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">duplicate</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Duplicate the certificate by incrementing the internal refcount. (see `CertDuplicateCertificateContext <https://msdn.microsoft.com/en-us/library/windows/desktop/aa376045(v=vs.85).aspx>`_)</span>
|
||||
|
||||
<span class="sd"> note: The object returned is ``self``</span>
|
||||
|
||||
@@ -400,6 +429,7 @@
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"CertDuplicateCertificateContext did not returned the argument (check doc)"</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>
|
||||
|
||||
@@ -457,7 +487,7 @@
|
||||
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Unreachable code"</span><span class="p">)</span>
|
||||
|
||||
<span class="n">properties</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">enum_properties</span><span class="p">)</span>
|
||||
<span class="sd">"""The properties of the certificate</span>
|
||||
<span class="w"> </span><span class="sd">"""The properties of the certificate</span>
|
||||
|
||||
<span class="sd"> :type: [:class:`int` or :class:`~windows.generated_def.Flag`] -- A list of property ID</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -467,7 +497,9 @@
|
||||
<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>
|
||||
<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">"TODO: DOC :D + auto-type ?"</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>
|
||||
@@ -476,25 +508,28 @@
|
||||
<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>
|
||||
<span class="sd">"""The encoded certificate.</span>
|
||||
<span class="w"> </span><span class="sd">"""The encoded certificate.</span>
|
||||
|
||||
<span class="sd"> :type: :class:`bytearray`"""</span>
|
||||
<span class="k">return</span> <span class="nb">bytearray</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pbCertEncoded</span><span class="p">[:</span><span class="bp">self</span><span class="o">.</span><span class="n">cbCertEncoded</span><span class="p">])</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">version</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The version number of the certificate</span>
|
||||
<span class="w"> </span><span class="sd">"""The version number of the certificate</span>
|
||||
|
||||
<span class="sd"> :type: :class:`int`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">pCertInfo</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">dwVersion</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="Certificate.from_file"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.Certificate.from_file">[docs]</a> <span class="nd">@classmethod</span>
|
||||
<div class="viewcode-block" id="Certificate.from_file">
|
||||
<a class="viewcode-back" href="../../../crypto.html#windows.crypto.Certificate.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">"""Create a :class:`Certificate` from the file ``filename``</span>
|
||||
<span class="w"> </span><span class="sd">"""Create a :class:`Certificate` from the file ``filename``</span>
|
||||
|
||||
<span class="sd"> :return: :class:`Certificate`</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -504,9 +539,12 @@
|
||||
<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>
|
||||
|
||||
<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>
|
||||
<span class="sd">"""Create a :class:`Certificate` from the buffer ``data``</span>
|
||||
<span class="w"> </span><span class="sd">"""Create a :class:`Certificate` from the buffer ``data``</span>
|
||||
|
||||
<span class="sd"> :return: :class:`Certificate`</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -514,6 +552,7 @@
|
||||
<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>
|
||||
<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">ptr</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">Certificate</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span>
|
||||
@@ -525,8 +564,7 @@
|
||||
<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="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s1">'<</span><span class="si">{0}</span><span class="s1"> "</span><span class="si">{1}</span><span class="s1">" serial="</span><span class="si">{2}</span><span class="s1">">'</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>
|
||||
|
||||
<span class="k">return</span> <span class="n">urepr_encode</span><span class="p">(</span><span class="sa">u</span><span class="s1">'<</span><span class="si">{0}</span><span class="s1"> "</span><span class="si">{1}</span><span class="s1">" serial="</span><span class="si">{2}</span><span class="s1">">'</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>
|
||||
|
||||
|
||||
|
||||
@@ -591,8 +629,10 @@
|
||||
|
||||
|
||||
<span class="c1"># Move this in another .py ?</span>
|
||||
<div class="viewcode-block" id="CryptContext"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CryptContext">[docs]</a><span class="k">class</span> <span class="nc">CryptContext</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">HCRYPTPROV</span><span class="p">):</span>
|
||||
<span class="sd">""" A context manager arround ``CryptAcquireContextW`` & ``CryptReleaseContext``</span>
|
||||
<div class="viewcode-block" id="CryptContext">
|
||||
<a class="viewcode-back" href="../../../crypto.html#windows.crypto.CryptContext">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">CryptContext</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">HCRYPTPROV</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">""" A context manager arround ``CryptAcquireContextW`` & ``CryptReleaseContext``</span>
|
||||
|
||||
<span class="sd"> .. note::</span>
|
||||
<span class="sd"> see usage in sample :ref:`sample_crypto_encryption` (function ``genkeys``)</span>
|
||||
@@ -625,25 +665,25 @@
|
||||
|
||||
<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 class="clearer"></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>
|
||||
<search id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../../search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||||
<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>
|
||||
</search>
|
||||
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
@@ -657,13 +697,14 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.crypto.certificate</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+55
-43
@@ -1,21 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!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">
|
||||
<html lang="en" data-content_root="../../../">
|
||||
<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 — PythonForWindows 0.6 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" type="text/css" href="../../../_static/css/mbasic.css" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.crypto.cryptmsg — PythonForWindows 1.0.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=fa44fd50" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/classic.css?v=def86cc0" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css?v=957880af" />
|
||||
|
||||
<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>
|
||||
<script type="text/javascript" src="../../../_static/language_data.js"></script>
|
||||
<script src="../../../_static/documentation_options.js?v=8d563738"></script>
|
||||
<script src="../../../_static/doctools.js?v=9a2dae69"></script>
|
||||
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
|
||||
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../../search.html" />
|
||||
@@ -29,8 +25,9 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.crypto.cryptmsg</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -46,8 +43,10 @@
|
||||
<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">import</span> <span class="nn">windows.crypto</span>
|
||||
|
||||
<div class="viewcode-block" id="CryptMessage"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CryptMessage">[docs]</a><span class="k">class</span> <span class="nc">CryptMessage</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">HCRYPTMSG</span><span class="p">):</span>
|
||||
<span class="sd">"""Represent a PKCS #7 message</span>
|
||||
<div class="viewcode-block" id="CryptMessage">
|
||||
<a class="viewcode-back" href="../../../crypto.html#windows.crypto.CryptMessage">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">CryptMessage</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">HCRYPTMSG</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Represent a PKCS #7 message</span>
|
||||
<span class="sd"> (see `Low-level Message Functions <https://msdn.microsoft.com/en-us/library/windows/desktop/aa380252(v=vs.85).aspx#low_level_message_functions>`_)</span>
|
||||
<span class="sd"> """</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>
|
||||
@@ -78,7 +77,7 @@
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">nb_cert</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The number of certificate embded in the :class:`CryptObject`</span>
|
||||
<span class="w"> </span><span class="sd">"""The number of certificate embded in the :class:`CryptObject`</span>
|
||||
|
||||
<span class="sd"> :type: :class:`int`</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -87,8 +86,10 @@
|
||||
<span class="k">def</span> <span class="nf">get_raw_cert</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="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_CERT_PARAM</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="CryptMessage.get_cert"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CryptMessage.get_cert">[docs]</a> <span class="k">def</span> <span class="nf">get_cert</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">"""Return embded :class:`Certificate` number ``index``.</span>
|
||||
<div class="viewcode-block" id="CryptMessage.get_cert">
|
||||
<a class="viewcode-back" href="../../../crypto.html#windows.crypto.CryptMessage.get_cert">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">get_cert</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="w"> </span><span class="sd">"""Return embded :class:`Certificate` number ``index``.</span>
|
||||
|
||||
<span class="sd"> .. note::</span>
|
||||
|
||||
@@ -96,16 +97,17 @@
|
||||
<span class="sd"> """</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>
|
||||
<span class="sd">"""The list of :class:`Certificate` embded in the message"""</span>
|
||||
<span class="w"> </span><span class="sd">"""The list of :class:`Certificate` embded in the message"""</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">get_cert</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_cert</span><span class="p">)]</span>
|
||||
|
||||
<span class="c1"># Signers accessors</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">nb_signer</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The number of signers for the CryptObject</span>
|
||||
<span class="w"> </span><span class="sd">"""The number of signers for the CryptObject</span>
|
||||
|
||||
<span class="sd"> :type: :class:`int`</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -117,31 +119,37 @@
|
||||
<span class="k">raise</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="CryptMessage.get_signer_data"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CryptMessage.get_signer_data">[docs]</a> <span class="k">def</span> <span class="nf">get_signer_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">"""Returns the signer informations for signer nb ``index``</span>
|
||||
<div class="viewcode-block" id="CryptMessage.get_signer_data">
|
||||
<a class="viewcode-back" href="../../../crypto.html#windows.crypto.CryptMessage.get_signer_data">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">get_signer_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="w"> </span><span class="sd">"""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"> """</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">"""The list of :class:`~windows.generated_def.winstructs.CMSG_SIGNER_INFO` embed in the message"""</span>
|
||||
<span class="w"> </span><span class="sd">"""The list of :class:`~windows.generated_def.winstructs.CMSG_SIGNER_INFO` embed in the message"""</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">"""TODO: DOC"""</span>
|
||||
<span class="w"> </span><span class="sd">"""TODO: DOC"""</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">"""TODO: DOC"""</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="w"> </span><span class="sd">"""TODO: DOC"""</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">"""TODO: DOC"""</span>
|
||||
<span class="w"> </span><span class="sd">"""TODO: DOC"""</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>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
@@ -164,34 +172,37 @@
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CryptMsgUpdate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">blob</span><span class="o">.</span><span class="n">pbData</span><span class="p">,</span> <span class="n">blob</span><span class="o">.</span><span class="n">cbData</span><span class="p">,</span> <span class="n">final</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># constructor</span>
|
||||
<div class="viewcode-block" id="CryptMessage.from_buffer"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CryptMessage.from_buffer">[docs]</a> <span class="nd">@classmethod</span>
|
||||
<div class="viewcode-block" id="CryptMessage.from_buffer">
|
||||
<a class="viewcode-back" href="../../../crypto.html#windows.crypto.CryptMessage.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">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="n">hmsg</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CryptMsgOpenToDecode</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="mi">0</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="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="n">newmsg</span> <span class="o">=</span> <span class="n">CryptMessage</span><span class="p">(</span><span class="n">hmsg</span><span class="p">)</span>
|
||||
<span class="n">newmsg</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">final</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">newmsg</span></div>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="fm">__del__</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">CryptMsgClose</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
|
||||
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></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>
|
||||
<search id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../../search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||||
<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>
|
||||
</search>
|
||||
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
@@ -205,13 +216,14 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.crypto.cryptmsg</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+35
-32
@@ -1,21 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!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">
|
||||
<html lang="en" data-content_root="../../../">
|
||||
<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 — PythonForWindows 0.6 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" type="text/css" href="../../../_static/css/mbasic.css" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.crypto.encrypt_decrypt — PythonForWindows 1.0.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=fa44fd50" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/classic.css?v=def86cc0" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css?v=957880af" />
|
||||
|
||||
<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>
|
||||
<script type="text/javascript" src="../../../_static/language_data.js"></script>
|
||||
<script src="../../../_static/documentation_options.js?v=8d563738"></script>
|
||||
<script src="../../../_static/doctools.js?v=9a2dae69"></script>
|
||||
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
|
||||
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../../search.html" />
|
||||
@@ -29,8 +25,9 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.crypto.encrypt_decrypt</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -71,8 +68,10 @@
|
||||
<span class="n">geninitvector</span> <span class="o">=</span> <span class="n">GenerateInitVector</span><span class="p">()</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="encrypt"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.encrypt">[docs]</a><span class="k">def</span> <span class="nf">encrypt</span><span class="p">(</span><span class="n">cert_or_certlist</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="n">algo</span><span class="o">=</span><span class="n">szOID_NIST_AES256_CBC</span><span class="p">,</span> <span class="n">initvector</span><span class="o">=</span><span class="n">geninitvector</span><span class="p">):</span>
|
||||
<span class="sd">"""Encrypt ``msg`` one or many :class:`Certificate` using ``algo`` with the initial</span>
|
||||
<div class="viewcode-block" id="encrypt">
|
||||
<a class="viewcode-back" href="../../../crypto.html#windows.crypto.encrypt">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">encrypt</span><span class="p">(</span><span class="n">cert_or_certlist</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="n">algo</span><span class="o">=</span><span class="n">szOID_NIST_AES256_CBC</span><span class="p">,</span> <span class="n">initvector</span><span class="o">=</span><span class="n">geninitvector</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Encrypt ``msg`` one or many :class:`Certificate` using ``algo`` with the initial</span>
|
||||
<span class="sd"> vector ``initvector``.</span>
|
||||
|
||||
<span class="sd"> If ``geninitvector`` is left as it is, it will generate a random one.</span>
|
||||
@@ -134,8 +133,11 @@
|
||||
<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">"""Try to decrypt the ``encrypted`` msg with any certificate in ``cert_store``.</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""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 ``WinproxyError(winerror=0x8009200c)`` is raised.</span>
|
||||
|
||||
@@ -159,25 +161,25 @@
|
||||
<span class="n">dcryptbuff</span> <span class="o">=</span> <span class="p">(</span><span class="n">BYTE</span> <span class="o">*</span> <span class="p">(</span><span class="n">dcryptsize</span><span class="o">.</span><span class="n">value</span> <span class="o">+</span> <span class="mh">0x1000</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">bytes</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 class="clearer"></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>
|
||||
<search id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../../search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||||
<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>
|
||||
</search>
|
||||
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
@@ -191,13 +193,14 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.crypto.encrypt_decrypt</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+41
-35
@@ -1,21 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!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">
|
||||
<html lang="en" data-content_root="../../../">
|
||||
<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 — PythonForWindows 0.6 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" type="text/css" href="../../../_static/css/mbasic.css" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.crypto.generation — PythonForWindows 1.0.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=fa44fd50" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/classic.css?v=def86cc0" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css?v=957880af" />
|
||||
|
||||
<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>
|
||||
<script type="text/javascript" src="../../../_static/language_data.js"></script>
|
||||
<script src="../../../_static/documentation_options.js?v=8d563738"></script>
|
||||
<script src="../../../_static/doctools.js?v=9a2dae69"></script>
|
||||
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
|
||||
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../../search.html" />
|
||||
@@ -29,8 +25,9 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.crypto.generation</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -46,8 +43,10 @@
|
||||
<span class="kn">from</span> <span class="nn">windows.crypto</span> <span class="kn">import</span> <span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="n">CertificateStore</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="generate_selfsigned_certificate"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.generation.generate_selfsigned_certificate">[docs]</a><span class="k">def</span> <span class="nf">generate_selfsigned_certificate</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s2">"CN=DEFAULT"</span><span class="p">,</span> <span class="n">prov</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">key_info</span><span class="o">=</span><span class="kc">None</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="n">signature_algo</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Generate a selfsigned certificate.</span>
|
||||
<div class="viewcode-block" id="generate_selfsigned_certificate">
|
||||
<a class="viewcode-back" href="../../../crypto.html#windows.crypto.generation.generate_selfsigned_certificate">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">generate_selfsigned_certificate</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s2">"CN=DEFAULT"</span><span class="p">,</span> <span class="n">prov</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">key_info</span><span class="o">=</span><span class="kc">None</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="n">signature_algo</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Generate a selfsigned certificate.</span>
|
||||
|
||||
<span class="sd"> See `CertCreateSelfSignCertificate <https://msdn.microsoft.com/en-us/library/windows/desktop/aa376039(v=vs.85).aspx>`_</span>
|
||||
|
||||
@@ -55,20 +54,24 @@
|
||||
<span class="sd"> """</span>
|
||||
<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">winproxy</span><span class="o">.</span><span class="n">CertStrToNameW</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">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>
|
||||
<span class="sd">"""Generate a keypair if type ``keytype``.</span>
|
||||
|
||||
<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>
|
||||
<span class="w"> </span><span class="sd">"""Generate a keypair if type ``keytype``.</span>
|
||||
|
||||
<span class="sd"> :return: :class:`HCRYPTKEY`</span>
|
||||
<span class="sd"> """</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>
|
||||
<span class="k">return</span> <span class="n">key</span></div>
|
||||
|
||||
<span class="c1"># print(key[0])</span>
|
||||
<span class="c1"># print("[OK] Key created")</span>
|
||||
<span class="c1"># size = DWORD()</span>
|
||||
@@ -83,8 +86,10 @@
|
||||
<span class="c1"># #res = ctypes.WinDLL("advapi32").CryptReleaseContext(prov, 0)</span>
|
||||
<span class="c1"># return key</span>
|
||||
|
||||
<div class="viewcode-block" id="generate_pfx"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.generation.generate_pfx">[docs]</a><span class="k">def</span> <span class="nf">generate_pfx</span><span class="p">(</span><span class="n">hstore</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Generate a pfx protected by ``password`` contaning the certificates in ``hstore``</span>
|
||||
<div class="viewcode-block" id="generate_pfx">
|
||||
<a class="viewcode-back" href="../../../crypto.html#windows.crypto.generation.generate_pfx">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">generate_pfx</span><span class="p">(</span><span class="n">hstore</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Generate a pfx protected by ``password`` contaning the certificates in ``hstore``</span>
|
||||
|
||||
<span class="sd"> :return: :class:`bytearray` -- The raw PFX</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -93,25 +98,25 @@
|
||||
<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>
|
||||
<span class="k">return</span> <span class="n">blob</span><span class="o">.</span><span class="n">data</span></div>
|
||||
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></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>
|
||||
<search id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../../search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||||
<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>
|
||||
</search>
|
||||
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
@@ -125,13 +130,14 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.crypto.generation</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+84
-54
@@ -1,21 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!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">
|
||||
<html lang="en" data-content_root="../../../">
|
||||
<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 — PythonForWindows 0.6 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" type="text/css" href="../../../_static/css/mbasic.css" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.debug.breakpoints — PythonForWindows 1.0.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=fa44fd50" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/classic.css?v=def86cc0" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css?v=957880af" />
|
||||
|
||||
<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>
|
||||
<script type="text/javascript" src="../../../_static/language_data.js"></script>
|
||||
<script src="../../../_static/documentation_options.js?v=8d563738"></script>
|
||||
<script src="../../../_static/doctools.js?v=9a2dae69"></script>
|
||||
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
|
||||
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../../search.html" />
|
||||
@@ -29,8 +25,9 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.debug.breakpoints</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -53,8 +50,10 @@
|
||||
<span class="n">HARDWARE_EXEC_BP</span> <span class="o">=</span> <span class="s2">"HXBP"</span>
|
||||
<span class="n">MEMORY_BREAKPOINT</span> <span class="o">=</span> <span class="s2">"MEMBP"</span>
|
||||
|
||||
<div class="viewcode-block" id="Breakpoint"><a class="viewcode-back" href="../../../debug.html#windows.debug.Breakpoint">[docs]</a><span class="k">class</span> <span class="nc">Breakpoint</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""An standard (Int3) breakpoint (type == ``STANDARD_BP``)"""</span>
|
||||
<div class="viewcode-block" id="Breakpoint">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.Breakpoint">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">Breakpoint</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""An standard (Int3) breakpoint (type == ``STANDARD_BP``)"""</span>
|
||||
<span class="nb">type</span> <span class="o">=</span> <span class="n">STANDARD_BP</span> <span class="c1"># REAL BP</span>
|
||||
<span class="k">def</span> <span class="fm">__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="bp">self</span><span class="o">.</span><span class="n">addr</span> <span class="o">=</span> <span class="n">addr</span>
|
||||
@@ -62,9 +61,13 @@
|
||||
<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">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">"""Called when breakpoint is hit"""</span>
|
||||
<span class="k">pass</span></div></div>
|
||||
<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="w"> </span><span class="sd">"""Called when breakpoint is hit"""</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,20 +80,27 @@
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">(</span><span class="n">dbg</span><span class="p">,</span> <span class="n">exception</span><span class="p">)</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="HXBreakpoint"><a class="viewcode-back" href="../../../debug.html#windows.debug.HXBreakpoint">[docs]</a><span class="k">class</span> <span class="nc">HXBreakpoint</span><span class="p">(</span><span class="n">Breakpoint</span><span class="p">):</span>
|
||||
<span class="sd">"""An hardware-execution breakpoint (type == ``HARDWARE_EXEC_BP``)"""</span>
|
||||
<div class="viewcode-block" id="HXBreakpoint">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.HXBreakpoint">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">HXBreakpoint</span><span class="p">(</span><span class="n">Breakpoint</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""An hardware-execution breakpoint (type == ``HARDWARE_EXEC_BP``)"""</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>
|
||||
<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">"""A memory breakpoint (type == ``MEMORY_BREAKPOINT``)"""</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""A memory breakpoint (type == ``MEMORY_BREAKPOINT``)"""</span>
|
||||
<span class="nb">type</span> <span class="o">=</span> <span class="n">MEMORY_BREAKPOINT</span>
|
||||
<span class="n">DEFAULT_EVENTS</span> <span class="o">=</span> <span class="s2">"RWX"</span>
|
||||
<span class="n">DEFAULT_SIZE</span> <span class="o">=</span> <span class="mh">0x1000</span>
|
||||
<div class="viewcode-block" id="MemoryBreakpoint.__init__"><a class="viewcode-back" href="../../../debug.html#windows.debug.MemoryBreakpoint.__init__">[docs]</a> <span class="k">def</span> <span class="fm">__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="n">size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">events</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""``size``: the size of the memory breakpoint.</span>
|
||||
<div class="viewcode-block" id="MemoryBreakpoint.__init__">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.MemoryBreakpoint.__init__">[docs]</a>
|
||||
<span class="k">def</span> <span class="fm">__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="n">size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">events</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""``size``: the size of the memory breakpoint.</span>
|
||||
|
||||
<span class="sd"> ``events``: a string representing the events that interest the BP (any of "RWX")"""</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>
|
||||
@@ -98,9 +108,14 @@
|
||||
<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">"""Called when breakpoint is hit"""</span>
|
||||
<span class="k">pass</span></div></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="w"> </span><span class="sd">"""Called when breakpoint is hit"""</span>
|
||||
<span class="k">pass</span></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<span class="c1">## Arguments Helper (need to move this elsewhere)</span>
|
||||
@@ -184,7 +199,7 @@
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">extract_arguments</span><span class="p">(</span><span class="bp">self</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="sd">"""Extracts the functions parameters in an :class:`OrderedDict`"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Extracts the functions parameters in an :class:`OrderedDict`"""</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="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">if</span> <span class="n">cproc</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">64</span><span class="p">:</span>
|
||||
@@ -261,31 +276,46 @@
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">initial_breakpoint</span><span class="o">.</span><span class="n">ret_trigger</span><span class="p">(</span><span class="n">dbg</span><span class="p">,</span> <span class="n">exc</span><span class="p">)</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="FunctionCallBP"><a class="viewcode-back" href="../../../debug.html#windows.debug.FunctionCallBP">[docs]</a><span class="k">class</span> <span class="nc">FunctionCallBP</span><span class="p">(</span><span class="n">Breakpoint</span><span class="p">):</span>
|
||||
<span class="sd">"""A Breakpoint that allow to trigger at the return of a function"""</span>
|
||||
<div class="viewcode-block" id="FunctionCallBP.break_on_ret"><a class="viewcode-back" href="../../../debug.html#windows.debug.FunctionCallBP.break_on_ret">[docs]</a> <span class="k">def</span> <span class="nf">break_on_ret</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">"""Setup a breakpoint at the return address of the function, this breakpoint will call :func:`ret_trigger`"""</span>
|
||||
<div class="viewcode-block" id="FunctionCallBP">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.FunctionCallBP">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">FunctionCallBP</span><span class="p">(</span><span class="n">Breakpoint</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""A Breakpoint that allow to trigger at the return of a function"""</span>
|
||||
<div class="viewcode-block" id="FunctionCallBP.break_on_ret">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.FunctionCallBP.break_on_ret">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">break_on_ret</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="w"> </span><span class="sd">"""Setup a breakpoint at the return address of the function, this breakpoint will call :func:`ret_trigger`"""</span>
|
||||
<span class="n">return_addr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_ret_addr</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="n">dbg</span><span class="o">.</span><span class="n">add_bp</span><span class="p">(</span><span class="n">FunctionRetBP</span><span class="p">(</span><span class="n">return_addr</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="n">dbg</span><span class="o">.</span><span class="n">current_process</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="FunctionCallBP.get_ret_addr"><a class="viewcode-back" href="../../../debug.html#windows.debug.FunctionCallBP.get_ret_addr">[docs]</a> <span class="k">def</span> <span class="nf">get_ret_addr</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">"""Get the return address of the current target, only valid in the trigger() function."""</span>
|
||||
|
||||
<div class="viewcode-block" id="FunctionCallBP.get_ret_addr">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.FunctionCallBP.get_ret_addr">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">get_ret_addr</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="w"> </span><span class="sd">"""Get the return address of the current target, only valid in the trigger() function."""</span>
|
||||
<span class="n">cproc</span> <span class="o">=</span> <span class="n">dbg</span><span class="o">.</span><span class="n">current_process</span>
|
||||
<span class="k">return</span> <span class="n">dbg</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">read_ptr</span><span class="p">(</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">sp</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="FunctionCallBP.ret_trigger"><a class="viewcode-back" href="../../../debug.html#windows.debug.FunctionCallBP.ret_trigger">[docs]</a> <span class="k">def</span> <span class="nf">ret_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">"""Called at the return of the function if :func:`break_on_ret` was called"""</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"ret_trigger"</span><span class="p">)</span></div></div>
|
||||
|
||||
<div class="viewcode-block" id="FunctionCallBP.ret_trigger">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.FunctionCallBP.ret_trigger">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">ret_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="w"> </span><span class="sd">"""Called at the return of the function if :func:`break_on_ret` was called"""</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"ret_trigger"</span><span class="p">)</span></div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="FunctionBP"><a class="viewcode-back" href="../../../debug.html#windows.debug.FunctionBP">[docs]</a><span class="k">class</span> <span class="nc">FunctionBP</span><span class="p">(</span><span class="n">FunctionCallBP</span><span class="p">,</span> <span class="n">FunctionParamDumpBP</span><span class="p">):</span>
|
||||
<span class="sd">"""A breakpoint that accepts a function from :mod:`windows.winproxy` and able to:</span>
|
||||
|
||||
<div class="viewcode-block" id="FunctionBP">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.FunctionBP">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">FunctionBP</span><span class="p">(</span><span class="n">FunctionCallBP</span><span class="p">,</span> <span class="n">FunctionParamDumpBP</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""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>
|
||||
<span class="sd"> """</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="fm">__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>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">PrintBP</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>
|
||||
@@ -300,23 +330,22 @@
|
||||
<span class="nb">print</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">format_dict</span><span class="p">))</span>
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></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>
|
||||
<search id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../../search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||||
<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>
|
||||
</search>
|
||||
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
@@ -330,13 +359,14 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.debug.breakpoints</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+199
-110
@@ -1,21 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!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">
|
||||
<html lang="en" data-content_root="../../../">
|
||||
<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 — PythonForWindows 0.6 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" type="text/css" href="../../../_static/css/mbasic.css" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.debug.debugger — PythonForWindows 1.0.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=fa44fd50" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/classic.css?v=def86cc0" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css?v=957880af" />
|
||||
|
||||
<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>
|
||||
<script type="text/javascript" src="../../../_static/language_data.js"></script>
|
||||
<script src="../../../_static/documentation_options.js?v=8d563738"></script>
|
||||
<script src="../../../_static/doctools.js?v=9a2dae69"></script>
|
||||
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
|
||||
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../../search.html" />
|
||||
@@ -29,8 +25,9 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.debug.debugger</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -82,16 +79,20 @@
|
||||
<span class="n">WatchedPage</span> <span class="o">=</span> <span class="n">namedtuple</span><span class="p">(</span><span class="s1">'WatchedPage'</span><span class="p">,</span> <span class="p">[</span><span class="s2">"original_prot"</span><span class="p">,</span> <span class="s2">"bps"</span><span class="p">])</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="Debugger"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger">[docs]</a><span class="k">class</span> <span class="nc">Debugger</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""A debugger based on standard Win32 API. Handle :</span>
|
||||
<div class="viewcode-block" id="Debugger">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">Debugger</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""A debugger based on standard Win32 API. Handle :</span>
|
||||
|
||||
<span class="sd"> * Standard BP (int3)</span>
|
||||
<span class="sd"> * Hardware-Exec BP (DrX)</span>
|
||||
<span class="sd"> * Memory BP (virtual_protect)</span>
|
||||
<span class="sd"> """</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="fm">__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">"""``target`` must be a debuggable :class:`WinProcess`."""</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="fm">__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="w"> </span><span class="sd">"""``target`` must be a debuggable :class:`WinProcess`."""</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>
|
||||
@@ -123,9 +124,12 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_current_debug_event</span> <span class="o">=</span> <span class="kc">None</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>
|
||||
|
||||
<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>
|
||||
<span class="k">def</span> <span class="nf">attach</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
|
||||
<span class="sd">"""attach to ``target`` (must be a :class:`WinProcess`)</span>
|
||||
<span class="w"> </span><span class="sd">"""attach to ``target`` (must be a :class:`WinProcess`)</span>
|
||||
|
||||
<span class="sd"> :rtype: :class:`Debugger`</span>
|
||||
|
||||
@@ -135,8 +139,11 @@
|
||||
<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">"""Detach from all debugged processes or process ``target``"""</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""Detach from all debugged processes or process ``target``"""</span>
|
||||
<span class="k">if</span> <span class="n">target</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">targets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">processes</span><span class="o">.</span><span class="n">values</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">targets</span><span class="p">:</span>
|
||||
@@ -169,9 +176,9 @@
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">del_bp</span><span class="p">(</span><span class="n">bp</span><span class="p">,</span> <span class="p">[</span><span class="n">target</span><span class="p">])</span>
|
||||
|
||||
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_breakpoint_to_reput</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">for</span> <span class="n">thread</span> <span class="ow">in</span> <span class="p">[</span><span class="n">t</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">target</span><span class="o">.</span><span class="n">threads</span> <span class="k">if</span> <span class="n">t</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">threads</span><span class="p">]:</span>
|
||||
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_explicit_single_step</span><span class="p">[</span><span class="n">thread</span><span class="o">.</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">_breakpoint_to_reput</span><span class="p">[</span><span class="n">thread</span><span class="o">.</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">threads</span><span class="p">[</span><span class="n">thread</span><span class="o">.</span><span class="n">tid</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="k">if</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="p">:</span> <span class="c1"># Remove TRAPFlag before detaching (or it will lead to a crash)</span>
|
||||
@@ -190,20 +197,24 @@
|
||||
<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">"""Return ``True`` if current process have been detached by user callback"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Return ``True`` if current process have been detached by user callback"""</span>
|
||||
<span class="c1"># Fix ? _handle_exit_process remove from processes but need a FinishDebugEvent</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_process</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</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="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">processes</span>
|
||||
|
||||
<div class="viewcode-block" id="Debugger.debug"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.debug">[docs]</a> <span class="nd">@classmethod</span>
|
||||
<div class="viewcode-block" id="Debugger.debug">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.debug">[docs]</a>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">debug</span><span class="p">(</span><span class="bp">cls</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="kc">None</span><span class="p">,</span> <span class="n">dwCreationFlags</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">show_windows</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<span class="sd">"""Create a process and debug it.</span>
|
||||
<span class="w"> </span><span class="sd">"""Create a process and debug it.</span>
|
||||
|
||||
<span class="sd"> :rtype: :class:`Debugger`"""</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>
|
||||
<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>
|
||||
<span class="n">dbg_evt_dispatch</span><span class="p">[</span><span class="n">EXCEPTION_DEBUG_EVENT</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_handle_exception</span>
|
||||
@@ -245,13 +256,17 @@
|
||||
<span class="k">yield</span> <span class="n">debug_event</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_finish_debug_event</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span><span class="p">:</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Finishing event for TID <</span><span class="si">{0}</span><span class="s2">>"</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">current_thread</span><span class="o">.</span><span class="n">tid</span><span class="p">),</span> <span class="s2">"DBG"</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Finishing event"</span><span class="p">,</span> <span class="s2">"DBG"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">action</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="n">windef</span><span class="o">.</span><span class="n">DBG_CONTINUE</span><span class="p">,</span> <span class="n">windef</span><span class="o">.</span><span class="n">DBG_EXCEPTION_NOT_HANDLED</span><span class="p">]:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'Unknow action : <0>'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">action</span><span class="p">))</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">ContinueDebugEvent</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">dwProcessId</span><span class="p">,</span> <span class="n">event</span><span class="o">.</span><span class="n">dwThreadId</span><span class="p">,</span> <span class="n">action</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_current_debug_event</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_add_exe_to_module_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">create_process_event</span><span class="p">):</span>
|
||||
<span class="sd">"""Add the intial exe file described by create_process_event to the list of module in the process"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Add the intial exe file described by create_process_event to the list of module in the process"""</span>
|
||||
<span class="n">exe_path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">get_mapped_filename</span><span class="p">(</span><span class="n">create_process_event</span><span class="o">.</span><span class="n">lpBaseOfImage</span><span class="p">)</span>
|
||||
<span class="n">exe_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">exe_path</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">exe_name</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">".exe"</span><span class="p">):</span>
|
||||
@@ -285,6 +300,10 @@
|
||||
<span class="n">mod</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">if</span> <span class="n">dll</span> <span class="ow">in</span> <span class="n">modules</span><span class="p">:</span>
|
||||
<span class="n">mod</span> <span class="o">=</span> <span class="p">[</span><span class="n">modules</span><span class="p">[</span><span class="n">dll</span><span class="p">]]</span>
|
||||
<span class="k">elif</span> <span class="n">target</span><span class="o">.</span><span class="n">is_wow_64</span> <span class="ow">and</span> <span class="n">dll</span> <span class="o">==</span> <span class="s2">"ntdll"</span> <span class="ow">and</span> <span class="s2">"ntdll32"</span> <span class="ow">in</span> <span class="n">modules</span><span class="p">:</span>
|
||||
<span class="c1"># https://twitter.com/hakril/status/1555473886321549312</span>
|
||||
<span class="n">mod</span> <span class="o">=</span> <span class="p">[</span><span class="n">modules</span><span class="p">[</span><span class="s2">"ntdll32"</span><span class="p">]]</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">mod</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="c1"># TODO: optim exports are the same for whole system (32 vs 64 bits)</span>
|
||||
@@ -326,12 +345,12 @@
|
||||
<span class="k">return</span> <span class="n">_setup_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">def</span> <span class="nf">_restore_breakpoints</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<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">_breakpoint_to_reput</span><span class="p">[</span><span class="bp">self</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">for</span> <span class="n">bp</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_breakpoint_to_reput</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">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">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Why is this here ? we use RF flags to pass HXBP"</span><span class="p">)</span>
|
||||
<span class="n">restore</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"_restore_breakpoint_"</span> <span class="o">+</span> <span class="n">bp</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
|
||||
<span class="n">restore</span><span class="p">(</span><span class="n">bp</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="p">)</span>
|
||||
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_breakpoint_to_reput</span><span class="p">[</span><span class="bp">self</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">_breakpoint_to_reput</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="o">.</span><span class="n">clear</span><span class="p">()</span>
|
||||
<span class="k">return</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_setup_breakpoint_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="p">):</span>
|
||||
@@ -528,7 +547,9 @@
|
||||
<span class="n">target_dll</span> <span class="o">=</span> <span class="n">bp</span><span class="o">.</span><span class="n">addr</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"!"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="c1"># Cannot work AS-IS yet. Implement it ?</span>
|
||||
<span class="c1"># if target_dll == "*" or target_dll == dll_name:</span>
|
||||
<span class="k">if</span> <span class="n">target_dll</span> <span class="o">==</span> <span class="n">dll_name</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="n">target_dll</span> <span class="o">==</span> <span class="n">dll_name</span> <span class="ow">or</span>
|
||||
<span class="c1"># https://twitter.com/hakril/status/1555473886321549312</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">is_wow_64</span> <span class="ow">and</span> <span class="n">target_dll</span> <span class="o">==</span> <span class="s2">"ntdll"</span> <span class="ow">and</span> <span class="n">dll_name</span> <span class="o">==</span> <span class="s2">"ntdll32"</span><span class="p">)):</span>
|
||||
<span class="n">_setup_method</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"_setup_breakpoint_"</span> <span class="o">+</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">bp</span><span class="o">.</span><span class="n">apply_to_target</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="p">):</span>
|
||||
<span class="n">_setup_method</span><span class="p">(</span><span class="n">bp</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="p">)</span>
|
||||
@@ -539,7 +560,9 @@
|
||||
<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">_pending_breakpoints_new</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="nb">isinstance</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">basestring</span><span class="p">):</span>
|
||||
<span class="n">target_dll</span> <span class="o">=</span> <span class="n">bp</span><span class="o">.</span><span class="n">addr</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"!"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">target_dll</span> <span class="o">==</span> <span class="n">dll_name</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="n">target_dll</span> <span class="o">==</span> <span class="n">dll_name</span> <span class="ow">or</span>
|
||||
<span class="c1"># https://twitter.com/hakril/status/1555473886321549312</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">is_wow_64</span> <span class="ow">and</span> <span class="n">target_dll</span> <span class="o">==</span> <span class="s2">"ntdll"</span> <span class="ow">and</span> <span class="n">dll_name</span> <span class="o">==</span> <span class="s2">"ntdll32"</span><span class="p">)):</span>
|
||||
<span class="n">_setup_method</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"_setup_breakpoint_"</span> <span class="o">+</span> <span class="n">bp</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
|
||||
<span class="n">_setup_method</span><span class="p">(</span><span class="n">bp</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="p">)</span>
|
||||
|
||||
@@ -547,7 +570,9 @@
|
||||
<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">_pending_breakpoints_new</span><span class="p">[</span><span class="n">thread</span><span class="o">.</span><span class="n">tid</span><span class="p">]:</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</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">basestring</span><span class="p">):</span>
|
||||
<span class="n">target_dll</span> <span class="o">=</span> <span class="n">bp</span><span class="o">.</span><span class="n">addr</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"!"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">target_dll</span> <span class="o">==</span> <span class="n">dll_name</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="n">target_dll</span> <span class="o">==</span> <span class="n">dll_name</span> <span class="ow">or</span>
|
||||
<span class="c1"># https://twitter.com/hakril/status/1555473886321549312</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">is_wow_64</span> <span class="ow">and</span> <span class="n">target_dll</span> <span class="o">==</span> <span class="s2">"ntdll"</span> <span class="ow">and</span> <span class="n">dll_name</span> <span class="o">==</span> <span class="s2">"ntdll32"</span><span class="p">)):</span>
|
||||
<span class="n">_setup_method</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"_setup_breakpoint_"</span> <span class="o">+</span> <span class="n">bp</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
|
||||
<span class="n">_setup_method</span><span class="p">(</span><span class="n">bp</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">thread</span><span class="p">)</span>
|
||||
|
||||
@@ -560,7 +585,7 @@
|
||||
<span class="c1">#regs.pc -= 1 # Done in _handle_exception_breakpoint before dispatch</span>
|
||||
<span class="n">thread</span><span class="o">.</span><span class="n">set_context</span><span class="p">(</span><span class="n">regs</span><span class="p">)</span>
|
||||
<span class="n">bp</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="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">addr</span><span class="p">]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_breakpoint_to_reput</span><span class="p">[</span><span class="n">thread</span><span class="o">.</span><span class="n">tid</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">bp</span><span class="p">)</span> <span class="c1">#Register pending breakpoint for next single step</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_breakpoint_to_reput</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="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">bp</span><span class="p">)</span> <span class="c1">#Register pending breakpoint for next single step</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_pass_memory_breakpoint</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">page_protect</span><span class="p">,</span> <span class="n">fault_page</span><span class="p">):</span>
|
||||
<span class="n">cp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_process</span>
|
||||
@@ -571,7 +596,7 @@
|
||||
<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">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">bp</span><span class="o">.</span><span class="n">_reput_page</span> <span class="o">=</span> <span class="p">(</span><span class="n">fault_page</span><span class="p">,</span> <span class="n">page_prot</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_breakpoint_to_reput</span><span class="p">[</span><span class="n">thread</span><span class="o">.</span><span class="n">tid</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">bp</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_breakpoint_to_reput</span><span class="p">[</span><span class="n">cp</span><span class="o">.</span><span class="n">pid</span><span class="p">]</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">bp</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># debug event handlers</span>
|
||||
<span class="k">def</span> <span class="nf">_handle_unknown_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>
|
||||
@@ -624,7 +649,7 @@
|
||||
<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>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_handle_exception_singlestep</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="n">excp_addr</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="bp">self</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">_breakpoint_to_reput</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_breakpoint_to_reput</span><span class="p">[</span><span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">_breakpoint_to_reput</span><span class="o">.</span><span class="n">get</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="bp">self</span><span class="o">.</span><span class="n">_restore_breakpoints</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_explicit_single_step</span><span class="p">[</span><span class="bp">self</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">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">DisabledMemoryBreakpoint</span><span class="p">():</span>
|
||||
@@ -726,7 +751,7 @@
|
||||
|
||||
<span class="c1"># TODO: self._explicit_single_step setup by single_step() ? check at the end ? finally ?</span>
|
||||
<span class="k">def</span> <span class="nf">_handle_exception</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="sd">"""Handle EXCEPTION_DEBUG_EVENT"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Handle EXCEPTION_DEBUG_EVENT"""</span>
|
||||
<span class="n">exception</span> <span class="o">=</span> <span class="n">debug_event</span><span class="o">.</span><span class="n">u</span><span class="o">.</span><span class="n">Exception</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_update_debugger_state</span><span class="p">(</span><span class="n">debug_event</span><span class="p">)</span>
|
||||
|
||||
@@ -738,17 +763,17 @@
|
||||
<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="n">dbgprint</span><span class="p">(</span><span class="s2">"Handle exception as breakpoint"</span><span class="p">,</span> <span class="s2">"DBG"</span><span class="p">)</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Handle exception as breakpoint in TID </span><span class="si">{0}</span><span class="s2">"</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">current_thread</span><span class="o">.</span><span class="n">tid</span><span class="p">),</span> <span class="s2">"DBG"</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>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Handle exception as single step"</span><span class="p">,</span> <span class="s2">"DBG"</span><span class="p">)</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Handle exception as single step in TID </span><span class="si">{0}</span><span class="s2">"</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">current_thread</span><span class="o">.</span><span class="n">tid</span><span class="p">),</span> <span class="s2">"DBG"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_handle_exception_singlestep</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="o">==</span> <span class="n">EXCEPTION_ACCESS_VIOLATION</span><span class="p">:</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Handle exception as access_violation"</span><span class="p">,</span> <span class="s2">"DBG"</span><span class="p">)</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Handle exception as access_violation in TID </span><span class="si">{0}</span><span class="s2">"</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">current_thread</span><span class="o">.</span><span class="n">tid</span><span class="p">),</span> <span class="s2">"DBG"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_handle_exception_access_violation</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">else</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">dbgprint</span><span class="p">(</span><span class="s2">"Handle exception as on_exception"</span><span class="p">,</span> <span class="s2">"DBG"</span><span class="p">)</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Handle exception as on_exception"</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">current_thread</span><span class="o">.</span><span class="n">tid</span><span class="p">),</span> <span class="s2">"DBG"</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_exception</span><span class="p">(</span><span class="n">exception</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_killed_in_action</span><span class="p">():</span>
|
||||
<span class="k">return</span> <span class="n">continue_flag</span>
|
||||
@@ -783,7 +808,7 @@
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">read_string</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span> <span class="o">+</span> <span class="n">name_sufix</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_handle_create_process</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="sd">"""Handle CREATE_PROCESS_DEBUG_EVENT"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Handle CREATE_PROCESS_DEBUG_EVENT"""</span>
|
||||
<span class="n">create_process</span> <span class="o">=</span> <span class="n">debug_event</span><span class="o">.</span><span class="n">u</span><span class="o">.</span><span class="n">CreateProcessInfo</span>
|
||||
<span class="c1"># Duplicate handle, so garbage collection of the process/thread does not</span>
|
||||
<span class="c1"># break the debug API invariant (those x_event handle are close by the debug API itself)</span>
|
||||
@@ -807,10 +832,10 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">threads</span><span class="p">[</span><span class="bp">self</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="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_explicit_single_step</span><span class="p">[</span><span class="bp">self</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="o">=</span> <span class="kc">False</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_hardware_breakpoint</span><span class="p">[</span><span class="bp">self</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="o">=</span> <span class="p">{}</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_breakpoint_to_reput</span><span class="p">[</span><span class="bp">self</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="o">=</span> <span class="p">[]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">processes</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="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_process</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_watched_pages</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="o">=</span> <span class="p">{}</span> <span class="c1">#defaultdict(list)</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="o">=</span> <span class="p">{}</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_breakpoint_to_reput</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="o">=</span> <span class="nb">set</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="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="o">=</span> <span class="p">{}</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_module_by_process</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="o">=</span> <span class="p">{}</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_internal_on_create_process</span><span class="p">(</span><span class="n">create_process</span><span class="p">)</span> <span class="c1"># Allow hook for symbol-debugger</span>
|
||||
@@ -826,14 +851,14 @@
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">CloseHandle</span><span class="p">(</span><span class="n">create_process</span><span class="o">.</span><span class="n">hFile</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_handle_exit_process</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="sd">"""Handle EXIT_PROCESS_DEBUG_EVENT"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Handle EXIT_PROCESS_DEBUG_EVENT"""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_update_debugger_state</span><span class="p">(</span><span class="n">debug_event</span><span class="p">)</span>
|
||||
<span class="n">exit_process</span> <span class="o">=</span> <span class="n">debug_event</span><span class="o">.</span><span class="n">u</span><span class="o">.</span><span class="n">ExitProcess</span>
|
||||
<span class="n">retvalue</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_exit_process</span><span class="p">(</span><span class="n">exit_process</span><span class="p">)</span>
|
||||
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">threads</span><span class="p">[</span><span class="bp">self</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">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_explicit_single_step</span><span class="p">[</span><span class="bp">self</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">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hardware_breakpoint</span><span class="p">[</span><span class="bp">self</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">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_breakpoint_to_reput</span><span class="p">[</span><span class="bp">self</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">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_breakpoint_to_reput</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">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">processes</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">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_watched_pages</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">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_memory_save</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>
|
||||
@@ -848,7 +873,7 @@
|
||||
<span class="k">return</span> <span class="n">retvalue</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_handle_create_thread</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="sd">"""Handle CREATE_THREAD_DEBUG_EVENT"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Handle CREATE_THREAD_DEBUG_EVENT"""</span>
|
||||
<span class="n">create_thread</span> <span class="o">=</span> <span class="n">debug_event</span><span class="o">.</span><span class="n">u</span><span class="o">.</span><span class="n">CreateThread</span>
|
||||
<span class="c1"># Duplicate handle, so garbage collection of the thread does not</span>
|
||||
<span class="c1"># break the debug API invariant (those x_event handle are close by the debug API itself)</span>
|
||||
@@ -860,7 +885,6 @@
|
||||
<span class="c1"># The new thread is on the thread pool: we can now update the debugger state</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_update_debugger_state</span><span class="p">(</span><span class="n">debug_event</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_explicit_single_step</span><span class="p">[</span><span class="bp">self</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="o">=</span> <span class="kc">False</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_breakpoint_to_reput</span><span class="p">[</span><span class="bp">self</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="o">=</span> <span class="p">[]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_hardware_breakpoint</span><span class="p">[</span><span class="bp">self</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="o">=</span> <span class="p">{}</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_setup_pending_breakpoints_new_thread</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">current_thread</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>
|
||||
@@ -868,7 +892,7 @@
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">_handle_exit_thread</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="sd">"""Handle EXIT_THREAD_DEBUG_EVENT"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Handle EXIT_THREAD_DEBUG_EVENT"""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_update_debugger_state</span><span class="p">(</span><span class="n">debug_event</span><span class="p">)</span>
|
||||
<span class="n">exit_thread</span> <span class="o">=</span> <span class="n">debug_event</span><span class="o">.</span><span class="n">u</span><span class="o">.</span><span class="n">ExitThread</span>
|
||||
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">DisabledMemoryBreakpoint</span><span class="p">():</span>
|
||||
@@ -876,7 +900,6 @@
|
||||
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">threads</span><span class="p">[</span><span class="bp">self</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">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hardware_breakpoint</span><span class="p">[</span><span class="bp">self</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">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_explicit_single_step</span><span class="p">[</span><span class="bp">self</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">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_breakpoint_to_reput</span><span class="p">[</span><span class="bp">self</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">return</span> <span class="n">retvalue</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_internal_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>
|
||||
@@ -886,7 +909,7 @@
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_handle_load_dll</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="sd">"""Handle LOAD_DLL_DEBUG_EVENT"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Handle LOAD_DLL_DEBUG_EVENT"""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_update_debugger_state</span><span class="p">(</span><span class="n">debug_event</span><span class="p">)</span>
|
||||
<span class="n">load_dll</span> <span class="o">=</span> <span class="n">debug_event</span><span class="o">.</span><span class="n">u</span><span class="o">.</span><span class="n">LoadDll</span>
|
||||
<span class="n">dll</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_loaded_dll</span><span class="p">(</span><span class="n">load_dll</span><span class="p">)</span>
|
||||
@@ -895,6 +918,8 @@
|
||||
<span class="n">dll_name</span> <span class="o">=</span> <span class="n">dll_name</span><span class="p">[:</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span>
|
||||
<span class="c1"># Mais c'est debile..</span>
|
||||
<span class="c1"># Si j'ai ntdll et ntdll64: les deux vont avoir le meme nom..</span>
|
||||
<span class="c1"># A changer sur Win11 ou ntdll est remontee en tant que ntdll32.dll</span>
|
||||
<span class="c1"># https://twitter.com/hakril/status/1555473886321549312</span>
|
||||
<span class="k">if</span> <span class="n">dll_name</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">".dll64"</span><span class="p">):</span>
|
||||
<span class="n">dll_name</span> <span class="o">=</span> <span class="n">dll_name</span><span class="p">[:</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span> <span class="o">+</span> <span class="s2">"64"</span> <span class="c1"># Crade..</span>
|
||||
<span class="c1">#print("Load {0} -> {1}".format(dll, dll_name))</span>
|
||||
@@ -909,29 +934,31 @@
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">CloseHandle</span><span class="p">(</span><span class="n">load_dll</span><span class="o">.</span><span class="n">hFile</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_handle_unload_dll</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="sd">"""Handle UNLOAD_DLL_DEBUG_EVENT"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Handle UNLOAD_DLL_DEBUG_EVENT"""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_update_debugger_state</span><span class="p">(</span><span class="n">debug_event</span><span class="p">)</span>
|
||||
<span class="n">unload_dll</span> <span class="o">=</span> <span class="n">debug_event</span><span class="o">.</span><span class="n">u</span><span class="o">.</span><span class="n">UnloadDll</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_unload_dll</span><span class="p">(</span><span class="n">unload_dll</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_handle_output_debug_string</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="sd">"""Handle OUTPUT_DEBUG_STRING_EVENT"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Handle OUTPUT_DEBUG_STRING_EVENT"""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_update_debugger_state</span><span class="p">(</span><span class="n">debug_event</span><span class="p">)</span>
|
||||
<span class="n">debug_string</span> <span class="o">=</span> <span class="n">debug_event</span><span class="o">.</span><span class="n">u</span><span class="o">.</span><span class="n">DebugString</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_output_debug_string</span><span class="p">(</span><span class="n">debug_string</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_handle_rip</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="sd">"""Handle RIP_EVENT"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Handle RIP_EVENT"""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_update_debugger_state</span><span class="p">(</span><span class="n">debug_event</span><span class="p">)</span>
|
||||
<span class="n">rip_info</span> <span class="o">=</span> <span class="n">debug_event</span><span class="o">.</span><span class="n">u</span><span class="o">.</span><span class="n">RipInfo</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_rip</span><span class="p">(</span><span class="n">rip_info</span><span class="p">)</span>
|
||||
|
||||
<span class="c1">## Public API</span>
|
||||
<div class="viewcode-block" id="Debugger.loop"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.loop">[docs]</a> <span class="k">def</span> <span class="nf">loop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Debugging loop: handle event / dispatch to breakpoint. Returns when all targets are dead/detached"""</span>
|
||||
<div class="viewcode-block" id="Debugger.loop">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.loop">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">loop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Debugging loop: handle event / dispatch to breakpoint. Returns when all targets are dead/detached"""</span>
|
||||
<span class="k">for</span> <span class="n">debug_event</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_debug_event_generator</span><span class="p">():</span>
|
||||
<span class="n">dbg_continue_flag</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dispatch_debug_event</span><span class="p">(</span><span class="n">debug_event</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">dbg_continue_flag</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
@@ -945,8 +972,11 @@
|
||||
<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">"""Add a breakpoint, bp can be:</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""Add a breakpoint, bp can be:</span>
|
||||
|
||||
<span class="sd"> * a :class:`Breakpoint` (addr and type must be ``None``)</span>
|
||||
<span class="sd"> * any callable (addr and type must NOT be ``None``) (NON-TESTED)</span>
|
||||
@@ -957,7 +987,7 @@
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">bp</span><span class="p">,</span> <span class="s2">"addr"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</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="ow">or</span> <span class="nb">type</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">"SUCK YOUR NONE"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Breakpoing should have addr attribute or function should receive explicite addr parameter"</span><span class="p">)</span>
|
||||
<span class="n">bp</span> <span class="o">=</span> <span class="n">ProxyBreakpoint</span><span class="p">(</span><span class="n">bp</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="nb">type</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">addr</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">or</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>
|
||||
@@ -977,8 +1007,11 @@
|
||||
<span class="c1"># raise ValueError("Unknown target {0}".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">"""Delete a breakpoint, if targets is ``None``: delete it from all targets"""</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""Delete a breakpoint, if targets is ``None``: delete it from all targets"""</span>
|
||||
<span class="n">original_target</span> <span class="o">=</span> <span class="n">targets</span>
|
||||
<span class="n">_remove_method</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"_remove_breakpoint_"</span> <span class="o">+</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="kc">None</span><span class="p">:</span>
|
||||
@@ -991,16 +1024,22 @@
|
||||
<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">"""Make the ``current_thread`` ``single_step``. ``Debugger.on_single_step`` will be called after that"""</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""Make the ``current_thread`` ``single_step``. ``Debugger.on_single_step`` will be called after that"""</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>
|
||||
<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>
|
||||
<span class="sd">"""Get the memory breakpoint that handle ``addr``</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>
|
||||
<span class="w"> </span><span class="sd">"""Get the memory breakpoint that handle ``addr``</span>
|
||||
|
||||
<span class="sd"> Return values are:</span>
|
||||
|
||||
@@ -1020,8 +1059,11 @@
|
||||
<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">"""Restore all pages to their original access rights.</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""Restore all pages to their original access rights.</span>
|
||||
<span class="sd"> If target is ``None``, use ``current_process``</span>
|
||||
|
||||
<span class="sd"> :return: a mapping of all disabled breakpoints that must be passed to :func:`restore_all_memory_breakpoints`"""</span>
|
||||
@@ -1047,8 +1089,11 @@
|
||||
<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>
|
||||
<span class="sd">"""Re-setup all memory breakpoints, affecting pages access rights.</span>
|
||||
|
||||
<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>
|
||||
<span class="w"> </span><span class="sd">"""Re-setup all memory breakpoints, affecting pages access rights.</span>
|
||||
<span class="sd"> If target is ``None``, use ``current_process``</span>
|
||||
|
||||
<span class="sd"> ``data`` is the result of the corresponding call to :func:`disable_all_memory_breakpoints`"""</span>
|
||||
@@ -1060,9 +1105,12 @@
|
||||
<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>
|
||||
|
||||
<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>
|
||||
<span class="sd">"""A context-manager that disable all memory breakpoints and restore them on exit"""</span>
|
||||
<span class="w"> </span><span class="sd">"""A context-manager that disable all memory breakpoints and restore them on exit"""</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">disable_all_memory_breakpoints</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">yield</span>
|
||||
@@ -1070,8 +1118,11 @@
|
||||
<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">"""Return the bitness in which the exception occured.</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""Return the bitness in which the exception occured.</span>
|
||||
<span class="sd"> Useful when debugingg a 32b process from a 64bits one</span>
|
||||
|
||||
<span class="sd"> :return: :class:`int` -- 32 or 64"""</span>
|
||||
@@ -1081,18 +1132,24 @@
|
||||
<span class="k">return</span> <span class="mi">32</span>
|
||||
<span class="k">return</span> <span class="mi">64</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Debugger.kill_on_exit"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.kill_on_exit">[docs]</a> <span class="nd">@staticmethod</span>
|
||||
|
||||
<div class="viewcode-block" id="Debugger.kill_on_exit">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.kill_on_exit">[docs]</a>
|
||||
<span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">kill_on_exit</span><span class="p">(</span><span class="n">choice</span><span class="p">):</span>
|
||||
<span class="sd">"""If set to True(default in Windows) will kill all attached process on thread exit.</span>
|
||||
<span class="w"> </span><span class="sd">"""If set to True(default in Windows) will kill all attached process on thread exit.</span>
|
||||
<span class="sd"> Otherwise, the thread detaches from all processes being debugged on exit.</span>
|
||||
|
||||
<span class="sd"> See: https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-debugsetprocesskillonexit</span>
|
||||
<span class="sd"> """</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">DebugSetProcessKillOnExit</span><span class="p">(</span><span class="n">choice</span><span class="p">)</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">"""Called on the first breakpoint event occuring in the debugger.</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="w"> </span><span class="sd">"""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>
|
||||
@@ -1105,12 +1162,15 @@
|
||||
<span class="sd"> """</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">"""Called on exception event other that known breakpoint or requested single step. ``exception`` is one of the following type:</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="w"> </span><span class="sd">"""Called on exception event other that known breakpoint or requested single step. ``exception`` is one of the following type:</span>
|
||||
|
||||
<span class="sd"> * :class:`windows.winobject.exception.EEXCEPTION_DEBUG_INFO32`</span>
|
||||
<span class="sd"> * :class:`windows.winobject.exception.EEXCEPTION_DEBUG_INFO64`</span>
|
||||
@@ -1123,8 +1183,11 @@
|
||||
<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">"""Called on requested single step ``exception`` is one of the following type:</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""Called on requested single step ``exception`` is one of the following type:</span>
|
||||
|
||||
<span class="sd"> * :class:`windows.winobject.exception.EEXCEPTION_DEBUG_INFO32`</span>
|
||||
<span class="sd"> * :class:`windows.winobject.exception.EEXCEPTION_DEBUG_INFO64`</span>
|
||||
@@ -1133,72 +1196,97 @@
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Debugger that explicitly single step should implement <on_single_step>"</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">"""Called on create_process event</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""Called on create_process event</span>
|
||||
|
||||
<span class="sd"> :param CREATE_PROCESS_DEBUG_INFO create_process:"""</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">"""Called on exit_process event</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""Called on exit_process event</span>
|
||||
|
||||
<span class="sd"> :param EXIT_PROCESS_DEBUG_INFO exit_process:"""</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">"""Called on create_thread event</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""Called on create_thread event</span>
|
||||
|
||||
<span class="sd"> :param CREATE_THREAD_DEBUG_INFO create_thread:"""</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">"""Called on exit_thread event</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""Called on exit_thread event</span>
|
||||
|
||||
<span class="sd"> :param EXIT_THREAD_DEBUG_INFO exit_thread:"""</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">"""Called on load_dll event</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""Called on load_dll event</span>
|
||||
|
||||
<span class="sd"> :param LOAD_DLL_DEBUG_INFO load_dll:"""</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">"""Called on unload_dll event</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""Called on unload_dll event</span>
|
||||
|
||||
<span class="sd"> :param UNLOAD_DLL_DEBUG_INFO unload_dll:"""</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">"""Called on debug_string event</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""Called on debug_string event</span>
|
||||
|
||||
<span class="sd"> :param OUTPUT_DEBUG_STRING_INFO debug_string:"""</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">"""Called on rip_info event</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""Called on rip_info event</span>
|
||||
|
||||
<span class="sd"> :param RIP_INFO rip_info:"""</span>
|
||||
<span class="k">pass</span></div></div>
|
||||
<span class="k">pass</span></div>
|
||||
</div>
|
||||
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></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>
|
||||
<search id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../../search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||||
<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>
|
||||
</search>
|
||||
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
@@ -1212,13 +1300,14 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.debug.debugger</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+62
-44
@@ -1,21 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!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">
|
||||
<html lang="en" data-content_root="../../../">
|
||||
<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 — PythonForWindows 0.6 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" type="text/css" href="../../../_static/css/mbasic.css" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.debug.localdbg — PythonForWindows 1.0.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=fa44fd50" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/classic.css?v=def86cc0" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css?v=957880af" />
|
||||
|
||||
<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>
|
||||
<script type="text/javascript" src="../../../_static/language_data.js"></script>
|
||||
<script src="../../../_static/documentation_options.js?v=8d563738"></script>
|
||||
<script src="../../../_static/doctools.js?v=9a2dae69"></script>
|
||||
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
|
||||
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../../search.html" />
|
||||
@@ -29,8 +25,9 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.debug.localdbg</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -52,7 +49,7 @@
|
||||
<span class="kn">from</span> <span class="nn">.breakpoints</span> <span class="kn">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">"""A pseudo thread representing the current thread at exception time"""</span>
|
||||
<span class="w"> </span><span class="sd">"""A pseudo thread representing the current thread at exception time"""</span>
|
||||
<span class="k">def</span> <span class="fm">__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>
|
||||
|
||||
@@ -62,15 +59,17 @@
|
||||
|
||||
<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">"""!!! This context in-place modification will be effective without set_context"""</span>
|
||||
<span class="w"> </span><span class="sd">"""!!! This context in-place modification will be effective without set_context"""</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 'self.context' 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">"""A debugger interface around :func:`AddVectoredExceptionHandler`.</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="w"> </span><span class="sd">"""A debugger interface around :func:`AddVectoredExceptionHandler`.</span>
|
||||
|
||||
<span class="sd"> Handle:</span>
|
||||
|
||||
@@ -107,19 +106,28 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">current_exception</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">exceptions_stack</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||||
<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">"""Return ExceptionCode of current exception"""</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="w"> </span><span class="sd">"""Return ExceptionCode of current exception"""</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">"""Return context of current exception"""</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""Return context of current exception"""</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">"""Make the current thread to single step"""</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""Make the current thread to single step"""</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>
|
||||
<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="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>
|
||||
@@ -181,14 +189,19 @@
|
||||
<span class="k">return</span> <span class="n">EXCEPTION_CONTINUE_EXECUTION</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>
|
||||
|
||||
<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">"""Called on exception"""</span>
|
||||
<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="w"> </span><span class="sd">"""Called on exception"""</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>
|
||||
<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> <span class="n">targets</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Delete a breakpoint"""</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="w"> </span><span class="sd">"""Delete a breakpoint"""</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>
|
||||
@@ -208,8 +221,11 @@
|
||||
<span class="k">return</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Unknow BP type </span><span class="si">{0}</span><span class="s2">"</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">target</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Add a breakpoint, bp is a "class:`Breakpoint`</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="w"> </span><span class="sd">"""Add a breakpoint, bp is a "class:`Breakpoint`</span>
|
||||
|
||||
<span class="sd"> If the ``bp`` type is ``STANDARD_BP``, target must be None.</span>
|
||||
|
||||
@@ -229,6 +245,7 @@
|
||||
<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="sa">b</span><span class="s2">"</span><span class="se">\xcc</span><span class="s2">"</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>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Add non standard-BP in LocalDebugger"</span><span class="p">)</span>
|
||||
@@ -345,25 +362,25 @@
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Could not setup HXBP in </span><span class="si">{0}</span><span class="s2">"</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>
|
||||
<span class="n">thread</span><span class="o">.</span><span class="n">resume</span><span class="p">()</span></div>
|
||||
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></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>
|
||||
<search id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../../search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||||
<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>
|
||||
</search>
|
||||
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
@@ -377,13 +394,14 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.debug.localdbg</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+30
-30
@@ -1,21 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!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">
|
||||
<html lang="en" data-content_root="../../../">
|
||||
<head>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>windows.debug.symboldbg — PythonForWindows 0.6 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" type="text/css" href="../../../_static/css/mbasic.css" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.debug.symboldbg — PythonForWindows 1.0.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=fa44fd50" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/classic.css?v=def86cc0" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css?v=957880af" />
|
||||
|
||||
<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>
|
||||
<script type="text/javascript" src="../../../_static/language_data.js"></script>
|
||||
<script src="../../../_static/documentation_options.js?v=8d563738"></script>
|
||||
<script src="../../../_static/doctools.js?v=9a2dae69"></script>
|
||||
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
|
||||
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../../search.html" />
|
||||
@@ -29,8 +25,9 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.debug.symboldbg</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -47,8 +44,10 @@
|
||||
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">Debugger</span>
|
||||
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">symbols</span>
|
||||
|
||||
<div class="viewcode-block" id="SymbolDebugger"><a class="viewcode-back" href="../../../debug.html#windows.debug.SymbolDebugger">[docs]</a><span class="k">class</span> <span class="nc">SymbolDebugger</span><span class="p">(</span><span class="n">Debugger</span><span class="p">):</span>
|
||||
<span class="sd">"""A debugger using the symbol API (hence PDB) for name resolution.</span>
|
||||
<div class="viewcode-block" id="SymbolDebugger">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.SymbolDebugger">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">SymbolDebugger</span><span class="p">(</span><span class="n">Debugger</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""A debugger using the symbol API (hence PDB) for name resolution.</span>
|
||||
<span class="sd"> To use PDB, a correct version of dbghelp should be configured as well as ``_NT_SYMBOL_PATH``.</span>
|
||||
<span class="sd"> (See :ref:`debug_symbols_module`)</span>
|
||||
|
||||
@@ -88,25 +87,25 @@
|
||||
<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="ow">in</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ERROR_NOT_FOUND</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ERROR_MOD_NOT_FOUND</span><span class="p">):</span>
|
||||
<span class="k">raise</span>
|
||||
<span class="k">return</span> <span class="kc">None</span></div>
|
||||
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></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>
|
||||
<search id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../../search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||||
<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>
|
||||
</search>
|
||||
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
@@ -120,13 +119,14 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.debug.symboldbg</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+167
-109
@@ -1,21 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!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">
|
||||
<html lang="en" data-content_root="../../../">
|
||||
<head>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>windows.debug.symbols — PythonForWindows 0.6 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" type="text/css" href="../../../_static/css/mbasic.css" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.debug.symbols — PythonForWindows 1.0.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=fa44fd50" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/classic.css?v=def86cc0" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css?v=957880af" />
|
||||
|
||||
<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>
|
||||
<script type="text/javascript" src="../../../_static/language_data.js"></script>
|
||||
<script src="../../../_static/documentation_options.js?v=8d563738"></script>
|
||||
<script src="../../../_static/doctools.js?v=9a2dae69"></script>
|
||||
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
|
||||
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../../search.html" />
|
||||
@@ -29,8 +25,9 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.debug.symbols</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -54,8 +51,10 @@
|
||||
<span class="n">DEFAULT_DBG_OPTION</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SYMOPT_DEFERRED_LOADS</span> <span class="o">+</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SYMOPT_UNDNAME</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="set_dbghelp_path"><a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.set_dbghelp_path">[docs]</a><span class="k">def</span> <span class="nf">set_dbghelp_path</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
|
||||
<span class="sd">"""Set the path of the ``dbghelp.dll`` file to use. It allow to configure a different version of the DLL handling PDB downloading.</span>
|
||||
<div class="viewcode-block" id="set_dbghelp_path">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.set_dbghelp_path">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">set_dbghelp_path</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Set the path of the ``dbghelp.dll`` file to use. It allow to configure a different version of the DLL handling PDB downloading.</span>
|
||||
|
||||
<span class="sd"> If ``path`` is a directory, the final ``dbghelp.dll`` will be computed as</span>
|
||||
<span class="sd"> ``path\<current_process_bitness>\dbghelp.dll``.</span>
|
||||
@@ -64,16 +63,17 @@
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">loaded_modules</span> <span class="o">=</span> <span class="p">[</span><span class="n">m</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">peb</span><span class="o">.</span><span class="n">modules</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
|
||||
<span class="n">path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="nb">str</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">bitness</span><span class="p">),</span> <span class="s2">"dbghelp.dll"</span><span class="p">)</span>
|
||||
<span class="n">path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="nb">str</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">bitness</span><span class="p">),</span> <span class="sa">u</span><span class="s2">"dbghelp.dll"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="s2">"dbghelp.dll"</span> <span class="ow">in</span> <span class="n">loaded_modules</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"setup_dbghelp_path should be called before any dbghelp function"</span><span class="p">)</span>
|
||||
<span class="c1"># Change the DLL used by DbgHelpProxy</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">DbgHelpProxy</span><span class="o">.</span><span class="n">APIDLL</span> <span class="o">=</span> <span class="n">path</span>
|
||||
<span class="k">return</span></div>
|
||||
|
||||
|
||||
<span class="c1"># Load symbol config from ENV if present</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">env_dbghelp_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s2">"PFW_DBGHELP_PATH"</span><span class="p">]</span>
|
||||
<span class="n">env_dbghelp_path</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s2">"PFW_DBGHELP_PATH"</span><span class="p">]</span>
|
||||
<span class="c1"># Setup the dbghelp path used by PFW</span>
|
||||
<span class="n">set_dbghelp_path</span><span class="p">(</span><span class="n">env_dbghelp_path</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">KeyError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
@@ -82,7 +82,7 @@
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">SymbolInfoBase</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""Represent a Symbol.</span>
|
||||
<span class="w"> </span><span class="sd">"""Represent a Symbol.</span>
|
||||
<span class="sd"> This class in based on the class `SYMBOL_INFO <https://docs.microsoft.com/en-us/windows/win32/api/dbghelp/ns-dbghelp-symbol_info>`_</span>
|
||||
<span class="sd"> with the handling on displacement embeded into it.</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -92,8 +92,7 @@
|
||||
|
||||
<span class="k">def</span> <span class="fm">__init__</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="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">resolver</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"resolver"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="c1">#: POUET POUET</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">displacement</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"displacement"</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="c1">#: POUET POUET</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">displacement</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"displacement"</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">as_type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -102,33 +101,38 @@
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The name of the symbol"""</span>
|
||||
<span class="w"> </span><span class="sd">"""The name of the symbol"""</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">NameLen</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NameLen</span>
|
||||
<span class="n">addr</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="o">+</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="n">Name</span><span class="o">.</span><span class="n">offset</span>
|
||||
<span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CHAR_TYPE</span> <span class="o">*</span> <span class="n">size</span><span class="p">)</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="n">addr</span><span class="p">)[:]</span>
|
||||
<span class="c1"># self.NameLen should not include the final \x00</span>
|
||||
<span class="c1"># But some W api (like SymSearchW) returns SYMBOL_INFOW with the leading \x00</span>
|
||||
<span class="c1"># For NtCreateFile:</span>
|
||||
<span class="c1"># A() API -> NameLen == 12</span>
|
||||
<span class="c1"># W() API -> NameLen == 13</span>
|
||||
<span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CHAR_TYPE</span> <span class="o">*</span> <span class="n">size</span><span class="p">)</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="n">addr</span><span class="p">)[:]</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="sa">u</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">fullname</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The fullname of the symbol in the windbg format ``mod!sym+displacement``"""</span>
|
||||
<span class="w"> </span><span class="sd">"""The fullname of the symbol in the windbg format ``mod!sym+displacement``"""</span>
|
||||
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">addr</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The address of the symbol"""</span>
|
||||
<span class="w"> </span><span class="sd">"""The address of the symbol"""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">Address</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">displacement</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The address of the start of the symbol</span>
|
||||
<span class="w"> </span><span class="sd">"""The address of the start of the symbol</span>
|
||||
<span class="sd"> If the symbol include a displacement, it is not taken into account</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">Address</span>
|
||||
|
||||
<span class="nd">@property</span> <span class="c1"># Fixed ?</span>
|
||||
<span class="k">def</span> <span class="nf">module</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The module containing the symbol</span>
|
||||
<span class="w"> </span><span class="sd">"""The module containing the symbol</span>
|
||||
|
||||
<span class="sd"> :type: :class:`SymbolModule`</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -136,18 +140,18 @@
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">tag</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The Tag of the module</span>
|
||||
<span class="w"> </span><span class="sd">"""The Tag of the module</span>
|
||||
|
||||
<span class="sd"> :type: :class:`~windows.generated_def.winstructs.SymTagEnum`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SymTagEnum</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">Tag</span><span class="p">]</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__int__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""An alias for ``addr``"""</span>
|
||||
<span class="w"> </span><span class="sd">"""An alias for ``addr``"""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">addr</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The fullname of the symbol in the windbg format ``mod!sym+displacement``"""</span>
|
||||
<span class="w"> </span><span class="sd">"""The fullname of the symbol in the windbg format ``mod!sym+displacement``"""</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">displacement</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="si">{self.module.name}</span><span class="s2">!</span><span class="si">{self.name}</span><span class="s2">+</span><span class="si">{self.displacement:#x}</span><span class="s2">"</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="bp">self</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="si">{self.module.name}</span><span class="s2">!</span><span class="si">{self.name}</span><span class="s2">"</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="bp">self</span><span class="p">)</span>
|
||||
@@ -158,8 +162,14 @@
|
||||
<span class="k">return</span> <span class="s1">'<</span><span class="si">{0}</span><span class="s1"> name="</span><span class="si">{1}</span><span class="s1">" start=</span><span class="si">{2:#x}</span><span class="s1"> tag=</span><span class="si">{3}</span><span class="s1">>'</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">start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tag</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="SymbolInfoA"><a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.SymbolInfoA">[docs]</a><span class="k">class</span> <span class="nc">SymbolInfoA</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SYMBOL_INFO</span><span class="p">,</span> <span class="n">SymbolInfoBase</span><span class="p">):</span>
|
||||
<span class="sd">"""Represent a Symbol.</span>
|
||||
<div class="viewcode-block" id="SymbolInfoA">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.SymbolInfoA">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">SymbolInfoA</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SYMBOL_INFO</span><span class="p">,</span> <span class="n">SymbolInfoBase</span><span class="p">):</span>
|
||||
<span class="n">CHAR_TYPE</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CHAR</span></div>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">SymbolInfoW</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SYMBOL_INFOW</span><span class="p">,</span> <span class="n">SymbolInfoBase</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Represent a Symbol.</span>
|
||||
<span class="sd"> This class in based on the class `SYMBOL_INFO <https://docs.microsoft.com/en-us/windows/win32/api/dbghelp/ns-dbghelp-symbol_info>`_</span>
|
||||
<span class="sd"> with the handling on displacement embeded into it.s</span>
|
||||
|
||||
@@ -170,7 +180,7 @@
|
||||
<span class="sd"> >>> sym1 = sh["kernelbase!CreateFileW"]</span>
|
||||
<span class="sd"> >>> sym2 = sh[int(sym1) + 3]</span>
|
||||
<span class="sd"> >>> sym2</span>
|
||||
<span class="sd"> <SymbolInfoA name="CreateFileW" start=0x100f20b0 displacement=0x3 tag=SymTagPublicSymbol></span>
|
||||
<span class="sd"> <SymbolInfoW name="CreateFileW" start=0x100f20b0 displacement=0x3 tag=SymTagPublicSymbol></span>
|
||||
<span class="sd"> >>> hex(sym2.start)</span>
|
||||
<span class="sd"> '0x100f20b0L'</span>
|
||||
<span class="sd"> >>> hex(sym2.addr)</span>
|
||||
@@ -180,13 +190,10 @@
|
||||
<span class="sd"> >>> str(sym2)</span>
|
||||
<span class="sd"> 'kernelbase!CreateFileW+0x3'</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">CHAR_TYPE</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CHAR</span></div>
|
||||
|
||||
<span class="k">class</span> <span class="nc">SymbolInfoW</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SYMBOL_INFOW</span><span class="p">,</span> <span class="n">SymbolInfoBase</span><span class="p">):</span>
|
||||
<span class="n">CHAR_TYPE</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">WCHAR</span>
|
||||
|
||||
<span class="c1"># We use the A Api in our code (for now)</span>
|
||||
<span class="n">SymbolInfo</span> <span class="o">=</span> <span class="n">SymbolInfoA</span>
|
||||
<span class="c1"># Unicode everywhere !</span>
|
||||
<span class="n">SymbolInfo</span> <span class="o">=</span> <span class="n">SymbolInfoW</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">SymbolType</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">typeid</span><span class="p">,</span> <span class="n">modbase</span><span class="p">,</span> <span class="n">resolver</span><span class="p">):</span>
|
||||
@@ -199,7 +206,15 @@
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">ires</span>
|
||||
<span class="k">if</span> <span class="n">res</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">TST_TYPE_RES_TYPE</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">typeinfo</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">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">SymGetTypeInfo</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resolver</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">modbase</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_typeid</span><span class="p">,</span> <span class="n">typeinfo</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">res</span><span class="p">))</span>
|
||||
<span class="k">try</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">SymGetTypeInfo</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resolver</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">modbase</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_typeid</span><span class="p">,</span> <span class="n">typeinfo</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">res</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="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ERROR_INVALID_FUNCTION</span><span class="p">:</span>
|
||||
<span class="c1"># invalid function on object -> None</span>
|
||||
<span class="c1"># We may lose some information with that between no return value VS error</span>
|
||||
<span class="c1"># Explicit verification on attributes per tags ?</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="k">raise</span>
|
||||
<span class="k">if</span> <span class="n">ires</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">ires</span>
|
||||
<span class="n">newres</span> <span class="o">=</span> <span class="n">res</span><span class="o">.</span><span class="n">value</span>
|
||||
@@ -232,6 +247,10 @@
|
||||
<span class="k">def</span> <span class="nf">basetype</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BasicType</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">_get_type_info</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">TI_GET_BASETYPE</span><span class="p">)]</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">parent</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">new_typeid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_type_info</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">TI_GET_CLASSPARENTID</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">datakind</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DataKind</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">_get_type_info</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">TI_GET_DATAKIND</span><span class="p">)]</span>
|
||||
@@ -244,10 +263,23 @@
|
||||
<span class="k">def</span> <span class="nf">offset</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">_get_type_info</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">TI_GET_OFFSET</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">count</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="c1"># Only valid on tag == SymTagArrayType</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_type_info</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">TI_GET_COUNT</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">nb_children</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">_get_type_info</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">TI_GET_CHILDRENCOUNT</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">value</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">_get_type_info</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">TI_GET_VALUE</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">address</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">_get_type_info</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">TI_GET_ADDRESS</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">children</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">nb_children</span>
|
||||
@@ -266,17 +298,32 @@
|
||||
|
||||
<span class="c1"># Constructor</span>
|
||||
<span class="k">def</span> <span class="nf">new_typeid</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">newtypeid</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">newtypeid</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">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)(</span><span class="n">newtypeid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">modbase</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">resolver</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__repr__</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">tag</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SymTagBaseType</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="s1">'<</span><span class="si">{0}</span><span class="s1"> <basetype> </span><span class="si">{1}</span><span class="s1">>'</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">basetype</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s1">'<</span><span class="si">{0}</span><span class="s1"> name="</span><span class="si">{1}</span><span class="s1">" tag=</span><span class="si">{2}</span><span class="s1">>'</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">tag</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s1">'<</span><span class="si">{0}</span><span class="s1"> <basetype> </span><span class="si">{1!r}</span><span class="s1">>'</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">basetype</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">tag</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SymTagArrayType</span><span class="p">:</span>
|
||||
<span class="n">target_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">name</span>
|
||||
<span class="n">array_size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">count</span>
|
||||
<span class="k">return</span> <span class="s1">'<</span><span class="si">{0}</span><span class="s1"> </span><span class="si">{1}</span><span class="s1">[</span><span class="si">{2}</span><span class="s1">] tag=</span><span class="si">{3!r}</span><span class="s1">>'</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="n">target_type</span><span class="p">,</span> <span class="n">array_size</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">tag</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SymTagPointerType</span><span class="p">:</span>
|
||||
<span class="n">target_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">name</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">tag</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SymTagBaseType</span><span class="p">:</span>
|
||||
<span class="n">target_type</span> <span class="o">=</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">basetype</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">target_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">name</span>
|
||||
<span class="k">return</span> <span class="s1">'<</span><span class="si">{0}</span><span class="s1"> PTR TO "</span><span class="si">{1}</span><span class="s1">" tag=</span><span class="si">{2!r}</span><span class="s1">>'</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="n">target_type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s1">'<</span><span class="si">{0}</span><span class="s1"> name="</span><span class="si">{1}</span><span class="s1">" tag=</span><span class="si">{2!r}</span><span class="s1">>'</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">tag</span><span class="p">)</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="SymbolModule"><a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.SymbolModule">[docs]</a><span class="k">class</span> <span class="nc">SymbolModule</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">IMAGEHLP_MODULE64</span><span class="p">):</span>
|
||||
<span class="sd">"""Represent a loaded symbol module</span>
|
||||
<span class="sd"> (see `MSDN IMAGEHLP_MODULE64 <https://docs.microsoft.com/en-us/windows/win32/api/dbghelp/ns-dbghelp-imagehlp_module64>`_)</span>
|
||||
<div class="viewcode-block" id="SymbolModule">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.SymbolModule">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">SymbolModule</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">IMAGEHLP_MODULEW64</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Represent a loaded symbol module</span>
|
||||
<span class="sd"> (see `MSDN _IMAGEHLP_MODULEW64 <https://docs.microsoft.com/en-us/windows/win32/api/dbghelp/ns-dbghelp-imagehlp_modulew64>`_)</span>
|
||||
|
||||
<span class="sd"> .. note::</span>
|
||||
|
||||
@@ -290,22 +337,22 @@
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">addr</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The load address of the module"""</span>
|
||||
<span class="w"> </span><span class="sd">"""The load address of the module"""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">BaseOfImage</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The name of the module"""</span>
|
||||
<span class="w"> </span><span class="sd">"""The name of the module"""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ModuleName</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">path</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The full path and file name of the file from which symbols were loaded."""</span>
|
||||
<span class="w"> </span><span class="sd">"""The full path and file name of the file from which symbols were loaded."""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">LoadedImageName</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The type of module (:class:`~windows.generated_def.winstructs.SYM_TYPE`),</span>
|
||||
<span class="w"> </span><span class="sd">"""The type of module (:class:`~windows.generated_def.winstructs.SYM_TYPE`),</span>
|
||||
<span class="sd"> which can be one of:</span>
|
||||
|
||||
<span class="sd"> =========== =========================</span>
|
||||
@@ -324,7 +371,7 @@
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">pdb</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The local path of the loaded PDB if present</span>
|
||||
<span class="w"> </span><span class="sd">"""The local path of the loaded PDB if present</span>
|
||||
|
||||
<span class="sd"> Exemple:</span>
|
||||
<span class="sd"> >>> sh = windows.debug.symbols.VirtualSymbolHandler()</span>
|
||||
@@ -338,13 +385,14 @@
|
||||
<span class="k">return</span> <span class="n">LoadedPdbName</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">pdb_basename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">LoadedPdbName</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\\</span><span class="s2">"</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="n">pdb_basename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">LoadedPdbName</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\\</span><span class="s2">"</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="s1">'<</span><span class="si">{0}</span><span class="s1"> name="</span><span class="si">{1}</span><span class="s1">" type=</span><span class="si">{2}</span><span class="s1"> pdb="</span><span class="si">{3}</span><span class="s1">" addr=</span><span class="si">{4:#x}</span><span class="s1">>'</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">type</span><span class="o">.</span><span class="n">value</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">pdb_basename</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">addr</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
|
||||
<span class="c1"># https://docs.microsoft.com/en-us/windows/win32/debug/symbol-handler-initialization</span>
|
||||
<span class="k">class</span> <span class="nc">SymbolHandler</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""Base class of symbol handler"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Base class of symbol handler"""</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">,</span> <span class="n">search_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">invade_process</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<span class="c1"># https://docs.microsoft.com/en-us/windows/desktop/api/dbghelp/nf-dbghelp-syminitialize</span>
|
||||
@@ -353,11 +401,11 @@
|
||||
<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="c1">#: The handle of the symbol handler</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">engine</span><span class="o">.</span><span class="n">options_already_setup</span><span class="p">:</span>
|
||||
<span class="n">engine</span><span class="o">.</span><span class="n">set_options</span><span class="p">(</span><span class="n">DEFAULT_DBG_OPTION</span><span class="p">)</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">SymInitialize</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">search_path</span><span class="p">,</span> <span class="n">invade_process</span><span class="p">)</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">SymInitializeW</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">search_path</span><span class="p">,</span> <span class="n">invade_process</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">load_module</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">file_handle</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">addr</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="kc">None</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">"""Load a module at a given ``addr``. The module to load can be pass via a ``file_handle``</span>
|
||||
<span class="w"> </span><span class="sd">"""Load a module at a given ``addr``. The module to load can be pass via a ``file_handle``</span>
|
||||
<span class="sd"> or the direct ``path`` of the file to load.</span>
|
||||
|
||||
<span class="sd"> :return: :class:`SymbolModule` -- The loaded module</span>
|
||||
@@ -381,10 +429,8 @@
|
||||
<span class="n">path</span> <span class="o">=</span> <span class="n">name</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="c1"># Expect a-string</span>
|
||||
<span class="n">path</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">raw_encode</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">load_addr</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">SymLoadModuleEx</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="n">file_handle</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">flags</span><span class="p">)</span>
|
||||
<span class="n">load_addr</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">SymLoadModuleExW</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="n">file_handle</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">flags</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="c1"># if e.winerror == 0:</span>
|
||||
<span class="c1"># Already loaded ?</span>
|
||||
@@ -394,38 +440,38 @@
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_module</span><span class="p">(</span><span class="n">load_addr</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">load_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">addr</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="kc">None</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">"""Load the module ``path`` at ``addr``</span>
|
||||
<span class="w"> </span><span class="sd">"""Load the module ``path`` at ``addr``</span>
|
||||
|
||||
<span class="sd"> :return: :class:`SymbolModule` -- The loaded module</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">load_module</span><span class="p">(</span><span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span> <span class="n">addr</span><span class="o">=</span><span class="n">addr</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">flags</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">unload</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="sd">"""Unload the module at ``addr``"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Unload the module at ``addr``"""</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">SymUnloadModule64</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="n">addr</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
<span class="nd">@ctypes</span><span class="o">.</span><span class="n">WINFUNCTYPE</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">BOOL</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PCSTR</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD64</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">py_object</span><span class="p">)</span>
|
||||
<span class="nd">@ctypes</span><span class="o">.</span><span class="n">WINFUNCTYPE</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">BOOL</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PVOID</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD64</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">py_object</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">modules_aggregator</span><span class="p">(</span><span class="n">modname</span><span class="p">,</span> <span class="n">modaddr</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">append</span><span class="p">(</span><span class="n">modaddr</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">modules</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The list of loaded modules</span>
|
||||
<span class="w"> </span><span class="sd">"""The list of loaded modules</span>
|
||||
|
||||
<span class="sd"> :return: [:class:`SymbolModule`] -- A list of modules</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">res</span> <span class="o">=</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">SymEnumerateModules64</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="bp">self</span><span class="o">.</span><span class="n">modules_aggregator</span><span class="p">,</span> <span class="n">res</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">SymEnumerateModulesW64</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="bp">self</span><span class="o">.</span><span class="n">modules_aggregator</span><span class="p">,</span> <span class="n">res</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">get_module</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span> <span class="k">for</span> <span class="n">addr</span> <span class="ow">in</span> <span class="n">res</span><span class="p">]</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_module</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">base</span><span class="p">):</span>
|
||||
<span class="n">modinfo</span> <span class="o">=</span> <span class="n">SymbolModule</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
|
||||
<span class="n">modinfo</span><span class="o">.</span><span class="n">SizeOfStruct</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="n">modinfo</span><span class="p">)</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">SymGetModuleInfo64</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="n">base</span><span class="p">,</span> <span class="n">modinfo</span><span class="p">)</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">SymGetModuleInfoW64</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="n">base</span><span class="p">,</span> <span class="n">modinfo</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">modinfo</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">symbol_and_displacement_from_address</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">addr</span><span class="p">):</span>
|
||||
@@ -436,7 +482,7 @@
|
||||
<span class="n">sym</span> <span class="o">=</span> <span class="n">buff</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">sym</span><span class="o">.</span><span class="n">SizeOfStruct</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="n">SymbolInfo</span><span class="p">)</span>
|
||||
<span class="n">sym</span><span class="o">.</span><span class="n">MaxNameLen</span> <span class="o">=</span> <span class="n">max_len_size</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">SymFromAddr</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="n">addr</span><span class="p">,</span> <span class="n">displacement</span><span class="p">,</span> <span class="n">buff</span><span class="p">)</span> <span class="c1"># SymFromAddrW ?</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">SymFromAddrW</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="n">addr</span><span class="p">,</span> <span class="n">displacement</span><span class="p">,</span> <span class="n">buff</span><span class="p">)</span>
|
||||
<span class="n">sym</span><span class="o">.</span><span class="n">resolver</span> <span class="o">=</span> <span class="bp">self</span>
|
||||
<span class="n">sym</span><span class="o">.</span><span class="n">displacement</span> <span class="o">=</span> <span class="n">displacement</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="k">return</span> <span class="n">sym</span>
|
||||
@@ -449,15 +495,13 @@
|
||||
<span class="n">sym</span> <span class="o">=</span> <span class="n">buff</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">sym</span><span class="o">.</span><span class="n">SizeOfStruct</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="n">SymbolInfo</span><span class="p">)</span>
|
||||
<span class="n">sym</span><span class="o">.</span><span class="n">MaxNameLen</span> <span class="o">=</span> <span class="n">max_len_size</span>
|
||||
<span class="c1"># Expect a-string</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">raw_encode</span><span class="p">(</span><span class="n">name</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">SymFromName</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="n">name</span><span class="p">,</span> <span class="n">buff</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">SymFromNameW</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="n">name</span><span class="p">,</span> <span class="n">buff</span><span class="p">)</span>
|
||||
<span class="n">sym</span><span class="o">.</span><span class="n">resolver</span> <span class="o">=</span> <span class="bp">self</span>
|
||||
<span class="n">sym</span><span class="o">.</span><span class="n">displacement</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="k">return</span> <span class="n">sym</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">resolve</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name_or_addr</span><span class="p">):</span>
|
||||
<span class="sd">"""Resolve ``name_or_addr``.</span>
|
||||
<span class="w"> </span><span class="sd">"""Resolve ``name_or_addr``.</span>
|
||||
|
||||
<span class="sd"> If its an int -> Return the :class:`SymbolInfo` at the address.</span>
|
||||
<span class="sd"> If its a string -> Return the :class:`SymbolInfo` corresponding to the symbol name</span>
|
||||
@@ -493,29 +537,29 @@
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
|
||||
<span class="fm">__getitem__</span> <span class="o">=</span> <span class="n">resolve</span>
|
||||
<span class="sd">"""Alias to resolve for simpler use"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Alias to resolve for simpler use"""</span>
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
<span class="nd">@ctypes</span><span class="o">.</span><span class="n">WINFUNCTYPE</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">BOOL</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">SymbolInfo</span><span class="p">),</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ULONG</span> <span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">py_object</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">simple_aggregator</span><span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
|
||||
<span class="n">sym</span> <span class="o">=</span> <span class="n">info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">fullsize</span> <span class="o">=</span> <span class="n">sym</span><span class="o">.</span><span class="n">SizeOfStruct</span> <span class="o">+</span> <span class="n">sym</span><span class="o">.</span><span class="n">NameLen</span>
|
||||
<span class="n">fullsize</span> <span class="o">=</span> <span class="n">sym</span><span class="o">.</span><span class="n">SizeOfStruct</span> <span class="o">+</span> <span class="p">(</span><span class="n">sym</span><span class="o">.</span><span class="n">NameLen</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="n">SymbolInfo</span><span class="o">.</span><span class="n">CHAR_TYPE</span><span class="p">))</span>
|
||||
<span class="n">cpy</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">BUFFER</span><span class="p">(</span><span class="n">SymbolInfo</span><span class="p">)(</span><span class="n">size</span><span class="o">=</span><span class="n">fullsize</span><span class="p">)</span>
|
||||
<span class="n">ctypes</span><span class="o">.</span><span class="n">memmove</span><span class="p">(</span><span class="n">cpy</span><span class="p">,</span> <span class="n">info</span><span class="p">,</span> <span class="n">fullsize</span><span class="p">)</span>
|
||||
<span class="n">ctx</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cpy</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">search</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mask</span><span class="p">,</span> <span class="n">mod</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">SYMSEARCH_ALLITEMS</span><span class="p">,</span> <span class="n">callback</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Search the symbols matching ``mask`` (``Windbg`` like).</span>
|
||||
<span class="w"> </span><span class="sd">"""Search the symbols matching ``mask`` (``Windbg`` like).</span>
|
||||
|
||||
<span class="sd"> :return: [:class:`SymbolInfo`] -- A list of :class:`SymbolInfo`</span>
|
||||
|
||||
<span class="sd"> >>> sh = windows.debug.symbols.VirtualSymbolHandler()</span>
|
||||
<span class="sd"> >>> mod = sh.load_file(r"c:\windows\system32\kernelbase.dll")</span>
|
||||
<span class="sd"> >>> sh.search("kernelbase!CreateFile*")</span>
|
||||
<span class="sd"> [<SymbolInfoA name="CreateFileInternal" addr=0x100f2120 tag=SymTagFunction>,</span>
|
||||
<span class="sd"> <SymbolInfoA name="CreateFileMoniker" addr=0x10117d80 tag=SymTagFunction>,</span>
|
||||
<span class="sd"> <SymbolInfoA name="CreateFile2" addr=0x1011e690 tag=SymTagFunction>,</span>
|
||||
<span class="sd"> [<SymbolInfoW name="CreateFileInternal" addr=0x100f2120 tag=SymTagFunction>,</span>
|
||||
<span class="sd"> <SymbolInfoW name="CreateFileMoniker" addr=0x10117d80 tag=SymTagFunction>,</span>
|
||||
<span class="sd"> <SymbolInfoW name="CreateFile2" addr=0x1011e690 tag=SymTagFunction>,</span>
|
||||
<span class="sd"> ...]</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
@@ -525,9 +569,7 @@
|
||||
<span class="n">callback</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="n">gdef</span><span class="o">.</span><span class="n">BOOL</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">SymbolInfo</span><span class="p">),</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ULONG</span> <span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">py_object</span><span class="p">)(</span><span class="n">callback</span><span class="p">)</span>
|
||||
|
||||
<span class="n">addr</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="s2">"addr"</span><span class="p">,</span> <span class="n">mod</span><span class="p">)</span> <span class="c1"># Retrieve mod.addr, else us the value directly</span>
|
||||
<span class="c1"># Expect A-string</span>
|
||||
<span class="n">mask</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">raw_encode</span><span class="p">(</span><span class="n">mask</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">SymSearch</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="n">gdef</span><span class="o">.</span><span class="n">DWORD64</span><span class="p">(</span><span class="n">addr</span><span class="p">),</span> <span class="mi">0</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">mask</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">res</span><span class="p">,</span> <span class="n">options</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">SymSearchW</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="n">gdef</span><span class="o">.</span><span class="n">DWORD64</span><span class="p">(</span><span class="n">addr</span><span class="p">),</span> <span class="mi">0</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">mask</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">res</span><span class="p">,</span> <span class="n">options</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">sym</span> <span class="ow">in</span> <span class="n">res</span><span class="p">:</span>
|
||||
<span class="n">sym</span><span class="o">.</span><span class="n">resolver</span> <span class="o">=</span> <span class="bp">self</span>
|
||||
<span class="n">sym</span><span class="o">.</span><span class="n">displacement</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
@@ -540,7 +582,7 @@
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">callback</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="n">gdef</span><span class="o">.</span><span class="n">BOOL</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">SymbolInfo</span><span class="p">),</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ULONG</span> <span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">py_object</span><span class="p">)(</span><span class="n">callback</span><span class="p">)</span>
|
||||
<span class="k">try</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">SymEnumSymbolsForAddr</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="n">addr</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">res</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">SymEnumSymbolsForAddrW</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="n">addr</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">res</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="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ERROR_MOD_NOT_FOUND</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="p">[]</span>
|
||||
@@ -558,7 +600,7 @@
|
||||
<span class="n">buff</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">BUFFER</span><span class="p">(</span><span class="n">SymbolInfo</span><span class="p">)(</span><span class="n">size</span><span class="o">=</span><span class="n">full_size</span><span class="p">)</span>
|
||||
<span class="n">buff</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">SizeOfStruct</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="n">SymbolInfo</span><span class="p">)</span>
|
||||
<span class="n">buff</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">MaxNameLen</span> <span class="o">=</span> <span class="n">max_len_size</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">SymGetTypeFromName</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="n">mod</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">buff</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">SymGetTypeFromNameW</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="n">mod</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">buff</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">SymbolType</span><span class="o">.</span><span class="n">from_symbol_info</span><span class="p">(</span><span class="n">buff</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">resolver</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
|
||||
|
||||
|
||||
@@ -641,11 +683,10 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="VirtualSymbolHandler"><a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.VirtualSymbolHandler">[docs]</a><span class="k">class</span> <span class="nc">VirtualSymbolHandler</span><span class="p">(</span><span class="n">SymbolHandler</span><span class="p">):</span>
|
||||
<span class="sd">"""A SymbolHandler where its handle is not a valid process handle</span>
|
||||
<div class="viewcode-block" id="VirtualSymbolHandler">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.VirtualSymbolHandler">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">VirtualSymbolHandler</span><span class="p">(</span><span class="n">SymbolHandler</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""A SymbolHandler where its handle is not a valid process handle</span>
|
||||
<span class="sd"> Allow to create/resolve symbol in a 'virtual' process</span>
|
||||
<span class="sd"> But all API needing a real process handle will fail</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -657,14 +698,20 @@
|
||||
<span class="c1"># The VirtualSymbolHandler is not based on an existing process</span>
|
||||
<span class="c1"># So load() in its simplest for should just take the path of the file to load</span>
|
||||
<span class="n">load</span> <span class="o">=</span> <span class="n">SymbolHandler</span><span class="o">.</span><span class="n">load_file</span>
|
||||
<span class="sd">"""An alias for :func:`VirtualSymbolHandler.load_file`"""</span>
|
||||
<span class="w"> </span><span class="sd">"""An alias for :func:`VirtualSymbolHandler.load_file`"""</span>
|
||||
|
||||
<div class="viewcode-block" id="VirtualSymbolHandler.refresh"><a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.VirtualSymbolHandler.refresh">[docs]</a> <span class="k">def</span> <span class="nf">refresh</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Do nothing for a :class:`VirtualSymbolHandler`"""</span>
|
||||
<span class="k">return</span> <span class="kc">False</span></div></div>
|
||||
<div class="viewcode-block" id="VirtualSymbolHandler.refresh">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.VirtualSymbolHandler.refresh">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">refresh</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Do nothing for a :class:`VirtualSymbolHandler`"""</span>
|
||||
<span class="k">return</span> <span class="kc">False</span></div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="ProcessSymbolHandler"><a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.ProcessSymbolHandler">[docs]</a><span class="k">class</span> <span class="nc">ProcessSymbolHandler</span><span class="p">(</span><span class="n">SymbolHandler</span><span class="p">):</span>
|
||||
|
||||
<div class="viewcode-block" id="ProcessSymbolHandler">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.ProcessSymbolHandler">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">ProcessSymbolHandler</span><span class="p">(</span><span class="n">SymbolHandler</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">process</span><span class="p">,</span> <span class="n">search_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">invade_process</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">ProcessSymbolHandler</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">process</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">search_path</span><span class="p">,</span> <span class="n">invade_process</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">process</span>
|
||||
@@ -673,8 +720,10 @@
|
||||
<span class="c1"># So load() in its simplest form should be able to load the symbol for an existing</span>
|
||||
<span class="c1"># module that is already loaded</span>
|
||||
<span class="c1"># Question: should be able to load other module at other address ?</span>
|
||||
<div class="viewcode-block" id="ProcessSymbolHandler.load"><a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.ProcessSymbolHandler.load">[docs]</a> <span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="sd">"""Load the :class:`SymbolModule` associated with the loaded module ``name`` (as found in the PEB)</span>
|
||||
<div class="viewcode-block" id="ProcessSymbolHandler.load">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.ProcessSymbolHandler.load">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Load the :class:`SymbolModule` associated with the loaded module ``name`` (as found in the PEB)</span>
|
||||
|
||||
<span class="sd"> :return: :class:`SymbolModule`</span>
|
||||
|
||||
@@ -696,8 +745,11 @@
|
||||
<span class="n">mod</span> <span class="o">=</span> <span class="n">mods</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">load_module</span><span class="p">(</span><span class="n">addr</span><span class="o">=</span><span class="n">mod</span><span class="o">.</span><span class="n">baseaddr</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">mod</span><span class="o">.</span><span class="n">fullname</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="ProcessSymbolHandler.refresh"><a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.ProcessSymbolHandler.refresh">[docs]</a> <span class="k">def</span> <span class="nf">refresh</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Update the list of loaded modules to match the modules present in the target process</span>
|
||||
|
||||
<div class="viewcode-block" id="ProcessSymbolHandler.refresh">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.ProcessSymbolHandler.refresh">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">refresh</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Update the list of loaded modules to match the modules present in the target process</span>
|
||||
|
||||
<span class="sd"> .. note::</span>
|
||||
<span class="sd"> This function only call `SymRefreshModuleList <https://docs.microsoft.com/en-us/windows/win32/api/dbghelp/nf-dbghelp-symrefreshmodulelist>`_ for now.</span>
|
||||
@@ -722,12 +774,16 @@
|
||||
<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">SymRefreshModuleList</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">stackwalk</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
|
||||
<span class="k">pass</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="SymbolEngine"><a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.SymbolEngine">[docs]</a><span class="k">class</span> <span class="nc">SymbolEngine</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""Represent the global symbol engine. Just a proxy to get/set global engine options</span>
|
||||
|
||||
<div class="viewcode-block" id="SymbolEngine">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.SymbolEngine">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">SymbolEngine</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Represent the global symbol engine. Just a proxy to get/set global engine options</span>
|
||||
|
||||
<span class="sd"> Its instance can be accessed using ``windows.debug.symbols.engine``</span>
|
||||
|
||||
@@ -753,7 +809,7 @@
|
||||
<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">SymGetOptions</span><span class="p">()</span>
|
||||
|
||||
<span class="n">options</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_options</span><span class="p">,</span> <span class="n">set_options</span><span class="p">)</span>
|
||||
<span class="sd">"""The options of the Symbol engine</span>
|
||||
<span class="w"> </span><span class="sd">"""The options of the Symbol engine</span>
|
||||
<span class="sd"> (`see options <https://docs.microsoft.com/en-us/windows/win32/api/dbghelp/nf-dbghelp-symsetoptions#parameters>`_)</span>
|
||||
|
||||
<span class="sd"> .. note::</span>
|
||||
@@ -761,6 +817,7 @@
|
||||
<span class="sd"> Default options are: ``gdef.SYMOPT_DEFERRED_LOADS + gdef.SYMOPT_UNDNAME``</span>
|
||||
<span class="sd"> """</span></div>
|
||||
|
||||
|
||||
<span class="n">engine</span> <span class="o">=</span> <span class="n">SymbolEngine</span><span class="p">()</span>
|
||||
<span class="sd">"""The instance of the :class:`SymbolEngine`"""</span>
|
||||
|
||||
@@ -771,26 +828,26 @@
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">TI_GET_ADDRESS</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ULONG64</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">TI_GTIEX_REQS_VALID</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ULONG64</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">TI_GET_SYMTAG</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SymTagEnum</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">TI_GET_VALUE</span><span class="p">:</span> <span class="n">windows</span><span class="o">.</span><span class="n">com</span><span class="o">.</span><span class="n">Variant</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></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>
|
||||
<search id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../../search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||||
<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>
|
||||
</search>
|
||||
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
@@ -804,13 +861,14 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.debug.symbols</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+29
-29
@@ -1,21 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!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">
|
||||
<html lang="en" data-content_root="../../../">
|
||||
<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 — PythonForWindows 0.6 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" type="text/css" href="../../../_static/css/mbasic.css" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.generated_def.flag — PythonForWindows 1.0.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=fa44fd50" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/classic.css?v=def86cc0" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css?v=957880af" />
|
||||
|
||||
<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>
|
||||
<script type="text/javascript" src="../../../_static/language_data.js"></script>
|
||||
<script src="../../../_static/documentation_options.js?v=8d563738"></script>
|
||||
<script src="../../../_static/doctools.js?v=9a2dae69"></script>
|
||||
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
|
||||
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../../search.html" />
|
||||
@@ -29,8 +25,9 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.generated_def.flag</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -46,7 +43,9 @@
|
||||
<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>
|
||||
<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="fm">__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>
|
||||
|
||||
@@ -68,6 +67,7 @@
|
||||
<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="fm">__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">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="bp">cls</span><span class="p">):</span>
|
||||
@@ -116,23 +116,22 @@
|
||||
<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">&</span> <span class="n">f</span><span class="p">]</span>
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></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>
|
||||
<search id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../../search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||||
<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>
|
||||
</search>
|
||||
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
@@ -146,13 +145,14 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.generated_def.flag</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
File diff suppressed because it is too large
Load Diff
+13232
-9458
File diff suppressed because one or more lines are too long
+45
-36
@@ -1,21 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!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">
|
||||
<html lang="en" data-content_root="../../">
|
||||
<head>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>windows.hooks — PythonForWindows 0.6 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" type="text/css" href="../../_static/css/mbasic.css" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.hooks — PythonForWindows 1.0.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=fa44fd50" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/classic.css?v=def86cc0" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/css/mbasic.css?v=957880af" />
|
||||
|
||||
<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>
|
||||
<script type="text/javascript" src="../../_static/language_data.js"></script>
|
||||
<script src="../../_static/documentation_options.js?v=8d563738"></script>
|
||||
<script src="../../_static/doctools.js?v=9a2dae69"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
|
||||
<link rel="index" title="Index" href="../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../search.html" />
|
||||
@@ -29,8 +25,9 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.hooks</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -55,8 +52,10 @@
|
||||
<span class="kn">import</span> <span class="nn">windows.generated_def.meta</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="Callback"><a class="viewcode-back" href="../../iat_hook.html#windows.hooks.Callback">[docs]</a><span class="k">class</span> <span class="nc">Callback</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""Give type information to hook callback"""</span>
|
||||
<div class="viewcode-block" id="Callback">
|
||||
<a class="viewcode-back" href="../../iat_hook.html#windows.hooks.Callback">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">Callback</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Give type information to hook callback"""</span>
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">types</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">types</span> <span class="o">=</span> <span class="n">types</span>
|
||||
|
||||
@@ -65,6 +64,7 @@
|
||||
<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>
|
||||
<span class="n">types</span> <span class="o">=</span> <span class="p">()</span>
|
||||
|
||||
@@ -91,8 +91,10 @@
|
||||
<span class="n">add_callback_to_module</span><span class="p">(</span><span class="n">CallBackDeclaration</span><span class="p">())</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="IATHook"><a class="viewcode-back" href="../../iat_hook.html#windows.hooks.IATHook">[docs]</a><span class="k">class</span> <span class="nc">IATHook</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""Look at my hook <3"""</span>
|
||||
<div class="viewcode-block" id="IATHook">
|
||||
<a class="viewcode-back" href="../../iat_hook.html#windows.hooks.IATHook">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">IATHook</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Look at my hook <3"""</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">IAT_entry</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">types</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">types</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
@@ -121,20 +123,26 @@
|
||||
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">type</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
|
||||
<div class="viewcode-block" id="IATHook.enable"><a class="viewcode-back" href="../../iat_hook.html#windows.hooks.IATHook.enable">[docs]</a> <span class="k">def</span> <span class="nf">enable</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Enable the IAT hook: you MUST keep a reference to the IATHook while the hook is enabled"""</span>
|
||||
<div class="viewcode-block" id="IATHook.enable">
|
||||
<a class="viewcode-back" href="../../iat_hook.html#windows.hooks.IATHook.enable">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">enable</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Enable the IAT hook: you MUST keep a reference to the IATHook while the hook is enabled"""</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">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>
|
||||
<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">"""Disable the IAT hook"""</span>
|
||||
|
||||
<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="w"> </span><span class="sd">"""Disable the IAT hook"""</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>
|
||||
<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>
|
||||
<span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="nb">type</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">original_types</span><span class="p">[</span><span class="mi">1</span><span class="p">:]):</span>
|
||||
@@ -151,6 +159,7 @@
|
||||
<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">## New simple hook API based on winproxy</span>
|
||||
<span class="k">def</span> <span class="nf">setup_hook</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">hook</span><span class="p">,</span> <span class="n">dll_to_hook</span><span class="p">):</span>
|
||||
<span class="s2">"TODO: Test and doc :D"</span>
|
||||
@@ -172,23 +181,22 @@
|
||||
<span class="k">return</span> <span class="n">iat</span>
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></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>
|
||||
<search id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||||
<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>
|
||||
</search>
|
||||
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
@@ -202,13 +210,14 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.hooks</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+86
-56
@@ -1,21 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!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">
|
||||
<html lang="en" data-content_root="../../../">
|
||||
<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 — PythonForWindows 0.6 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" type="text/css" href="../../../_static/css/mbasic.css" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.native_exec.cpuid — PythonForWindows 1.0.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=fa44fd50" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/classic.css?v=def86cc0" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css?v=957880af" />
|
||||
|
||||
<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>
|
||||
<script type="text/javascript" src="../../../_static/language_data.js"></script>
|
||||
<script src="../../../_static/documentation_options.js?v=8d563738"></script>
|
||||
<script src="../../../_static/doctools.js?v=9a2dae69"></script>
|
||||
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
|
||||
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../../search.html" />
|
||||
@@ -29,8 +25,9 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.native_exec.cpuid</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -43,36 +40,44 @@
|
||||
<span></span><span class="kn">import</span> <span class="nn">ctypes</span>
|
||||
<span class="kn">import</span> <span class="nn">struct</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">native_function</span>
|
||||
<span class="kn">import</span> <span class="nn">simple_x86</span> <span class="k">as</span> <span class="nn">x86</span>
|
||||
<span class="kn">import</span> <span class="nn">simple_x64</span> <span class="k">as</span> <span class="nn">x64</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.native_exec</span> <span class="kn">import</span> <span class="n">native_function</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.native_exec.simple_x86</span> <span class="k">as</span> <span class="nn">x86</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.native_exec.simple_x64</span> <span class="k">as</span> <span class="nn">x64</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.generated_def.winstructs</span> <span class="kn">import</span> <span class="o">*</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">_bitness</span><span class="p">():</span>
|
||||
<span class="sd">"""Returns 32 or 64"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Returns 32 or 64"""</span>
|
||||
<span class="kn">import</span> <span class="nn">platform</span>
|
||||
<span class="n">bits</span> <span class="o">=</span> <span class="n">platform</span><span class="o">.</span><span class="n">architecture</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">bits</span><span class="p">[:</span><span class="mi">2</span><span class="p">])</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="X86CpuidResult"><a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.cpuid.X86CpuidResult">[docs]</a><span class="k">class</span> <span class="nc">X86CpuidResult</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="sd">"""Raw result of the CPUID instruction"""</span>
|
||||
<div class="viewcode-block" id="X86CpuidResult">
|
||||
<a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.cpuid.X86CpuidResult">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">X86CpuidResult</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="w"> </span><span class="sd">"""Raw result of the CPUID instruction"""</span>
|
||||
<span class="n">_fields_</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">"EAX"</span><span class="p">,</span> <span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"EBX"</span><span class="p">,</span> <span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"ECX"</span><span class="p">,</span> <span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"EDX"</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>
|
||||
<span class="sd">"""Fields of the Structure"""</span></div>
|
||||
<span class="w"> </span><span class="sd">"""Fields of the Structure"""</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>
|
||||
|
||||
<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">"RAX"</span><span class="p">,</span> <span class="n">ULONG64</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"RBX"</span><span class="p">,</span> <span class="n">ULONG64</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"RCX"</span><span class="p">,</span> <span class="n">ULONG64</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"RDX"</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>
|
||||
|
||||
<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>
|
||||
<span class="n">_fields_</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">"SteppingID"</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">"ModelID"</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">"FamilyID"</span><span class="p">,</span> <span class="n">DWORD</span><span class="p">,</span> <span class="mi">4</span><span class="p">),</span>
|
||||
@@ -82,10 +87,13 @@
|
||||
<span class="p">(</span><span class="s2">"ExtendedFamily"</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">"Reserved"</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>
|
||||
<span class="sd">"""Fields of the Structure"""</span></div>
|
||||
<span class="w"> </span><span class="sd">"""Fields of the Structure"""</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>
|
||||
|
||||
<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>
|
||||
<span class="n">_fields_</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">"SteppingID"</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">"ModelID"</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">"FamilyID"</span><span class="p">,</span> <span class="n">DWORD</span><span class="p">,</span> <span class="mi">4</span><span class="p">),</span>
|
||||
@@ -94,7 +102,8 @@
|
||||
<span class="p">(</span><span class="s2">"ExtendedFamily"</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">"Reserved"</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>
|
||||
<span class="sd">"""Fields of the Structure"""</span></div>
|
||||
<span class="w"> </span><span class="sd">"""Fields of the Structure"""</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">'EDI'</span><span class="p">)</span>
|
||||
@@ -123,8 +132,10 @@
|
||||
<span class="n">do_cpuid64</span> <span class="o">=</span> <span class="n">native_function</span><span class="o">.</span><span class="n">create_function</span><span class="p">(</span><span class="n">cpuid64_code</span><span class="o">.</span><span class="n">get_code</span><span class="p">(),</span> <span class="p">[</span><span class="n">DWORD</span><span class="p">,</span> <span class="n">DWORD</span><span class="p">,</span> <span class="n">PVOID</span><span class="p">])</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="x86_cpuid"><a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.cpuid.x86_cpuid">[docs]</a><span class="k">def</span> <span class="nf">x86_cpuid</span><span class="p">(</span><span class="n">req</span><span class="p">):</span>
|
||||
<span class="sd">"""Performs a CPUID in 32bits mode</span>
|
||||
<div class="viewcode-block" id="x86_cpuid">
|
||||
<a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.cpuid.x86_cpuid">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">x86_cpuid</span><span class="p">(</span><span class="n">req</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Performs a CPUID in 32bits mode</span>
|
||||
|
||||
<span class="sd"> :rtype: :class:`X86CpuidResult`</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -133,8 +144,11 @@
|
||||
<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>
|
||||
<span class="sd">"""Performs a CPUID in 64bits mode</span>
|
||||
|
||||
<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>
|
||||
<span class="w"> </span><span class="sd">"""Performs a CPUID in 64bits mode</span>
|
||||
|
||||
<span class="sd"> :rtype: :class:`X86CpuidResult`</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -144,21 +158,27 @@
|
||||
<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>
|
||||
<span class="n">_do_cpuid</span> <span class="o">=</span> <span class="n">x86_cpuid</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">_do_cpuid</span> <span class="o">=</span> <span class="n">x64_cpuid</span>
|
||||
|
||||
<div class="viewcode-block" id="do_cpuid"><a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.cpuid.do_cpuid">[docs]</a><span class="k">def</span> <span class="nf">do_cpuid</span><span class="p">(</span><span class="n">req</span><span class="p">):</span>
|
||||
<span class="sd">"""Performs a CPUID for the current process bitness</span>
|
||||
<div class="viewcode-block" id="do_cpuid">
|
||||
<a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.cpuid.do_cpuid">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">do_cpuid</span><span class="p">(</span><span class="n">req</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Performs a CPUID for the current process bitness</span>
|
||||
|
||||
<span class="sd"> :rtype: :class:`X86CpuidResult`</span>
|
||||
<span class="sd"> """</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>
|
||||
<span class="sd">"""Extracts the VendorId string from CPUID</span>
|
||||
|
||||
<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>
|
||||
<span class="w"> </span><span class="sd">"""Extracts the VendorId string from CPUID</span>
|
||||
|
||||
<span class="sd"> :rtype: :class:`str`</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -166,19 +186,28 @@
|
||||
<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">"<III"</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">"""get_vendor_id() == 'GenuineIntel'"""</span>
|
||||
<span class="k">return</span> <span class="n">get_vendor_id</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"GenuineIntel"</span></div>
|
||||
<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="w"> </span><span class="sd">"""get_vendor_id() == b'GenuineIntel'"""</span>
|
||||
<span class="k">return</span> <span class="n">get_vendor_id</span><span class="p">()</span> <span class="o">==</span> <span class="sa">b</span><span class="s2">"GenuineIntel"</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">"""get_vendor_id() == 'AuthenticAMD'"""</span>
|
||||
<span class="k">return</span> <span class="n">get_vendor_id</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"AuthenticAMD"</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="w"> </span><span class="sd">"""get_vendor_id() == b'AuthenticAMD'"""</span>
|
||||
<span class="k">return</span> <span class="n">get_vendor_id</span><span class="p">()</span> <span class="o">==</span> <span class="sa">b</span><span class="s2">"AuthenticAMD"</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>
|
||||
<span class="sd">"""Extracts the family and model based on vendorId</span>
|
||||
|
||||
<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>
|
||||
<span class="w"> </span><span class="sd">"""Extracts the family and model based on vendorId</span>
|
||||
|
||||
<span class="sd"> :rtype: (ComputedFamily, ComputedModel)</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -199,25 +228,25 @@
|
||||
<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>
|
||||
<span class="k">return</span> <span class="n">ComputedFamily</span><span class="p">,</span> <span class="n">ComputedModel</span></div>
|
||||
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></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>
|
||||
<search id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../../search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||||
<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>
|
||||
</search>
|
||||
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
@@ -231,13 +260,14 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.native_exec.cpuid</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,21 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!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">
|
||||
<html lang="en" data-content_root="../../../">
|
||||
<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.native_function — PythonForWindows 0.6 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" type="text/css" href="../../../_static/css/mbasic.css" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.native_exec.native_function — PythonForWindows 1.0.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=fa44fd50" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/classic.css?v=def86cc0" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css?v=957880af" />
|
||||
|
||||
<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>
|
||||
<script type="text/javascript" src="../../../_static/language_data.js"></script>
|
||||
<script src="../../../_static/documentation_options.js?v=8d563738"></script>
|
||||
<script src="../../../_static/doctools.js?v=9a2dae69"></script>
|
||||
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
|
||||
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../../search.html" />
|
||||
@@ -29,8 +25,9 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.native_exec.native_function</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -47,59 +44,12 @@
|
||||
|
||||
<span class="kn">import</span> <span class="nn">windows</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.winproxy</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">.</span> <span class="kn">import</span> <span class="n">simple_x86</span> <span class="k">as</span> <span class="n">x86</span>
|
||||
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">simple_x64</span> <span class="k">as</span> <span class="n">x64</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">PyObj</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">"ob_refcnt"</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_size_t</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"ob_type"</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)]</span> <span class="c1"># must be cast</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">PyMmap</span><span class="p">(</span><span class="n">PyObj</span><span class="p">):</span>
|
||||
<span class="n">_fields_</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">"ob_addr"</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_size_t</span><span class="p">),</span> <span class="p">(</span><span class="s2">"ob_size"</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_size_t</span><span class="p">)]</span>
|
||||
|
||||
|
||||
<span class="c1"># Specific mmap class for code injection</span>
|
||||
<span class="k">class</span> <span class="nc">MyMap</span><span class="p">(</span><span class="n">mmap</span><span class="o">.</span><span class="n">mmap</span><span class="p">):</span>
|
||||
<span class="sd">""" A mmap that is never unmapped and that contains the page address """</span>
|
||||
<span class="k">def</span> <span class="fm">__init__</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="o">**</span><span class="n">kwarg</span><span class="p">):</span>
|
||||
<span class="c1"># Get the page address by 'introspection' of the C struct</span>
|
||||
<span class="n">m</span> <span class="o">=</span> <span class="n">PyMmap</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="nb">id</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">addr</span> <span class="o">=</span> <span class="n">m</span><span class="o">.</span><span class="n">ob_addr</span>
|
||||
<span class="c1"># Prevent garbage collection (so unmaping) of the page</span>
|
||||
<span class="n">m</span><span class="o">.</span><span class="n">ob_refcnt</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">get_map</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
|
||||
<span class="sd">""" Dispatch to the good mmap implem depending on the current system """</span>
|
||||
<span class="n">systems</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'windows'</span><span class="p">:</span> <span class="n">Win32MyMap</span><span class="p">,</span>
|
||||
<span class="s1">'linux'</span><span class="p">:</span> <span class="n">UnixMyMap</span><span class="p">}</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">platform</span><span class="o">.</span><span class="n">system</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">x</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">systems</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Unknow system </span><span class="si">{0}</span><span class="s2">"</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">return</span> <span class="n">systems</span><span class="p">[</span><span class="n">x</span><span class="p">]</span><span class="o">.</span><span class="n">get_map</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">Win32MyMap</span><span class="p">(</span><span class="n">MyMap</span><span class="p">):</span>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">get_map</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
|
||||
<span class="n">addr</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">VirtualAlloc</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="mh">0x1000</span><span class="p">,</span> <span class="mh">0x40</span><span class="p">)</span>
|
||||
<span class="n">new_map</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_char</span> <span class="o">*</span> <span class="n">size</span><span class="p">)</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span>
|
||||
<span class="n">new_map</span><span class="o">.</span><span class="n">addr</span> <span class="o">=</span> <span class="n">addr</span>
|
||||
<span class="k">if</span> <span class="n">new_map</span><span class="o">.</span><span class="n">addr</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">WinError</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="n">new_map</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">UnixMyMap</span><span class="p">(</span><span class="n">MyMap</span><span class="p">):</span>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">get_map</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
|
||||
<span class="n">prot</span> <span class="o">=</span> <span class="n">mmap</span><span class="o">.</span><span class="n">PROT_EXEC</span> <span class="o">|</span> <span class="n">mmap</span><span class="o">.</span><span class="n">PROT_WRITE</span> <span class="o">|</span> <span class="n">mmap</span><span class="o">.</span><span class="n">PROT_READ</span>
|
||||
<span class="k">return</span> <span class="bp">cls</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="p">,</span> <span class="n">prot</span><span class="o">=</span><span class="n">prot</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">CustomAllocator</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="n">int_size</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'32bit'</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span> <span class="s1">'64bit'</span><span class="p">:</span> <span class="mi">8</span><span class="p">}</span>
|
||||
|
||||
@@ -117,7 +67,10 @@
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">int_size</span><span class="p">[</span><span class="n">bits</span><span class="p">]</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_new_page</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="bp">self</span><span class="o">.</span><span class="n">maps</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">MyMap</span><span class="o">.</span><span class="n">get_map</span><span class="p">(</span><span class="n">size</span><span class="p">))</span>
|
||||
<span class="n">addr</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">VirtualAlloc</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="mh">0x1000</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PAGE_EXECUTE_READWRITE</span><span class="p">)</span>
|
||||
<span class="n">mymap</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_char</span> <span class="o">*</span> <span class="n">size</span><span class="p">)</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span>
|
||||
<span class="n">mymap</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">maps</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">mymap</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">cur_offset</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">cur_page_size</span> <span class="o">=</span> <span class="n">size</span>
|
||||
|
||||
@@ -141,41 +94,57 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">cur_offset</span> <span class="o">+=</span> <span class="n">size</span>
|
||||
<span class="k">return</span> <span class="n">addr</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">maps</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maps</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">maps</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">cur_offset</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">cur_page_size</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">sys</span><span class="p">,</span> <span class="s2">"path"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="c1"># Path is None -> Python shutdown</span>
|
||||
<span class="k">return</span>
|
||||
<span class="k">for</span> <span class="n">mymap</span> <span class="ow">in</span> <span class="n">maps</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">VirtualFree</span><span class="p">(</span><span class="n">mymap</span><span class="o">.</span><span class="n">addr</span><span class="p">,</span> <span class="n">dwFreeType</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">MEM_RELEASE</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__del__</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</span><span class="p">()</span>
|
||||
|
||||
<span class="n">allocator</span> <span class="o">=</span> <span class="n">CustomAllocator</span><span class="p">()</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="create_function"><a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.create_function">[docs]</a><span class="k">def</span> <span class="nf">create_function</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="n">types</span><span class="p">):</span>
|
||||
<span class="sd">"""Create a python function that call raw machine code</span>
|
||||
<div class="viewcode-block" id="create_function">
|
||||
<a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.create_function">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">create_function</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="n">types</span><span class="p">,</span> <span class="n">calling_convention</span><span class="o">=</span><span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Create a python function that call raw machine code</span>
|
||||
|
||||
<span class="sd"> :param str code: Raw machine code that will be called</span>
|
||||
<span class="sd"> :param list types: Return type and parameters type (see :mod:`ctypes`)</span>
|
||||
<span class="sd"> :return: the created function</span>
|
||||
<span class="sd"> :rtype: function</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">func_type</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="o">*</span><span class="n">types</span><span class="p">)</span>
|
||||
<span class="n">func_type</span> <span class="o">=</span> <span class="n">calling_convention</span><span class="p">(</span><span class="o">*</span><span class="n">types</span><span class="p">)</span>
|
||||
<span class="n">addr</span> <span class="o">=</span> <span class="n">allocator</span><span class="o">.</span><span class="n">write_code</span><span class="p">(</span><span class="n">code</span><span class="p">)</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">func_type</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span>
|
||||
<span class="n">res</span><span class="o">.</span><span class="n">code_addr</span> <span class="o">=</span> <span class="n">addr</span>
|
||||
<span class="k">return</span> <span class="n">res</span></div>
|
||||
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></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>
|
||||
<search id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../../search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||||
<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>
|
||||
</search>
|
||||
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
@@ -189,13 +158,14 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.native_exec.native_function</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+84
-47
@@ -1,21 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!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">
|
||||
<html lang="en" data-content_root="../../../">
|
||||
<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.simple_x86 — PythonForWindows 0.6 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" type="text/css" href="../../../_static/css/mbasic.css" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.native_exec.simple_x86 — PythonForWindows 1.0.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=fa44fd50" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/classic.css?v=def86cc0" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css?v=957880af" />
|
||||
|
||||
<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>
|
||||
<script type="text/javascript" src="../../../_static/language_data.js"></script>
|
||||
<script src="../../../_static/documentation_options.js?v=8d563738"></script>
|
||||
<script src="../../../_static/doctools.js?v=9a2dae69"></script>
|
||||
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
|
||||
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../../search.html" />
|
||||
@@ -29,8 +25,9 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.native_exec.simple_x86</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -70,6 +67,12 @@
|
||||
<span class="k">if</span> <span class="n">size</span> <span class="o">></span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">array</span> <span class="o">=</span> <span class="p">([</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="n">size</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">)))</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">array</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">new</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)(</span><span class="mi">0</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
|
||||
<span class="n">new</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
|
||||
<span class="n">new</span><span class="o">.</span><span class="n">array</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">new</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">dump</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">res</span> <span class="o">=</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">size</span> <span class="o">//</span> <span class="mi">8</span><span class="p">):</span>
|
||||
@@ -208,8 +211,10 @@
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="create_displacement"><a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.simple_x86.create_displacement">[docs]</a><span class="k">def</span> <span class="nf">create_displacement</span><span class="p">(</span><span class="n">base</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">scale</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">disp</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Creates a X86 memory access description"""</span>
|
||||
<div class="viewcode-block" id="create_displacement">
|
||||
<a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.simple_x86.create_displacement">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">create_displacement</span><span class="p">(</span><span class="n">base</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">scale</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">disp</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Creates a X86 memory access description"""</span>
|
||||
<span class="k">if</span> <span class="n">index</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">scale</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">scale</span> <span class="o">=</span> <span class="mi">1</span>
|
||||
<span class="k">if</span> <span class="n">scale</span> <span class="ow">and</span> <span class="n">index</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
@@ -219,13 +224,19 @@
|
||||
<span class="k">return</span> <span class="n">mem_access</span><span class="p">(</span><span class="n">base</span><span class="p">,</span> <span class="n">index</span><span class="p">,</span> <span class="n">scale</span><span class="p">,</span> <span class="n">disp</span><span class="p">,</span> <span class="n">prefix</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="deref"><a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.simple_x86.deref">[docs]</a><span class="k">def</span> <span class="nf">deref</span><span class="p">(</span><span class="n">disp</span><span class="p">):</span>
|
||||
<span class="sd">"""Create a memory access for an immediate value ``Ex: [0x42424242]``"""</span>
|
||||
|
||||
<div class="viewcode-block" id="deref">
|
||||
<a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.simple_x86.deref">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">deref</span><span class="p">(</span><span class="n">disp</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Create a memory access for an immediate value ``Ex: [0x42424242]``"""</span>
|
||||
<span class="k">return</span> <span class="n">create_displacement</span><span class="p">(</span><span class="n">disp</span><span class="o">=</span><span class="n">disp</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="mem"><a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.simple_x86.mem">[docs]</a><span class="k">def</span> <span class="nf">mem</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
|
||||
<span class="sd">"""Parse a memory access string of format ``[EXPR]`` or ``seg:[EXPR]``</span>
|
||||
|
||||
<div class="viewcode-block" id="mem">
|
||||
<a class="viewcode-back" href="../../../native_exec.html#windows.native_exec.simple_x86.mem">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">mem</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Parse a memory access string of format ``[EXPR]`` or ``seg:[EXPR]``</span>
|
||||
|
||||
<span class="sd"> ``EXPR`` may describe: ``BASE | INDEX * SCALE | DISPLACEMENT`` or any combinaison (in this order)</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -291,6 +302,7 @@
|
||||
<span class="k">return</span> <span class="n">create_displacement</span><span class="p">(</span><span class="o">**</span><span class="n">parsed_items</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
|
||||
<span class="c1"># Helper to get the BitArray associated to a register</span>
|
||||
<span class="k">class</span> <span class="nc">X86RegisterSelector</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="mi">3</span> <span class="c1"># bits</span>
|
||||
@@ -325,7 +337,7 @@
|
||||
|
||||
<span class="k">class</span> <span class="nc">RawBits</span><span class="p">(</span><span class="n">BitArray</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">accept_arg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">instr_state</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
|
||||
|
||||
|
||||
<span class="c1"># Immediat value logic</span>
|
||||
@@ -446,8 +458,6 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">ModRM</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sub_modrm</span><span class="p">,</span> <span class="n">accept_reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">has_direction_bit</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">accept_reverse</span> <span class="o">=</span> <span class="n">accept_reverse</span>
|
||||
@@ -480,7 +490,6 @@
|
||||
<span class="k">def</span> <span class="nf">match</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">X86</span><span class="o">.</span><span class="n">is_reg</span><span class="p">(</span><span class="n">arg1</span><span class="p">)</span> <span class="ow">and</span> <span class="n">X86</span><span class="o">.</span><span class="n">is_reg</span><span class="p">(</span><span class="n">arg2</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">,</span> <span class="nb">reversed</span><span class="p">,</span> <span class="n">instr_state</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">mod</span> <span class="o">=</span> <span class="n">BitArray</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="s2">"11"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">X86</span><span class="o">.</span><span class="n">reg_size</span><span class="p">(</span><span class="n">arg1</span><span class="p">)</span> <span class="o">!=</span> <span class="n">X86</span><span class="o">.</span><span class="n">reg_size</span><span class="p">(</span><span class="n">arg2</span><span class="p">):</span>
|
||||
@@ -639,10 +648,11 @@
|
||||
<span class="n">instr_state</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">namedtuple</span><span class="p">(</span><span class="s1">'instr_state'</span><span class="p">,</span> <span class="p">[</span><span class="s1">'previous'</span><span class="p">,</span> <span class="s1">'prefixes'</span><span class="p">])</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">Instruction</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""Base class of instructions, use `encoding` to find a valid way to assemble the instruction"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Base class of instructions, use `encoding` to find a valid way to assemble the instruction"""</span>
|
||||
<span class="n">encoding</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">initial_args</span><span class="p">):</span>
|
||||
<span class="c1"># print(self, initial_args)</span>
|
||||
<span class="k">for</span> <span class="n">type_encoding</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">encoding</span><span class="p">:</span>
|
||||
<span class="n">args</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">initial_args</span><span class="p">)</span>
|
||||
<span class="n">prefix</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
@@ -662,6 +672,7 @@
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Cannot encode <</span><span class="si">{0}</span><span class="s2"> </span><span class="si">{1}</span><span class="s2">>:("</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="n">initial_args</span><span class="p">))</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_code</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="c1"># print(self.value)</span>
|
||||
<span class="n">prefix_opcode</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">PREFIX_VALUE</span><span class="p">)</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">prefix</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">prefix_opcode</span> <span class="o">+</span> <span class="nb">bytes</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">value</span><span class="o">.</span><span class="n">dump</span><span class="p">())</span>
|
||||
|
||||
@@ -689,7 +700,7 @@
|
||||
|
||||
<span class="c1"># Jump helpers</span>
|
||||
<span class="k">class</span> <span class="nc">DelayedJump</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""A jump to a label :NAME"""</span>
|
||||
<span class="w"> </span><span class="sd">"""A jump to a label :NAME"""</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">type</span><span class="p">,</span> <span class="n">label</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="nb">type</span>
|
||||
@@ -697,7 +708,7 @@
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">JmpType</span><span class="p">(</span><span class="n">Instruction</span><span class="p">):</span>
|
||||
<span class="sd">"""Dispatcher between a real jump or DelayedJump if parameters is a label"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Dispatcher between a real jump or DelayedJump if parameters is a label"""</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="o">*</span><span class="n">initial_args</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">initial_args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||||
@@ -708,7 +719,7 @@
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">JmpImm</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""Immediat parameters for Jump instruction</span>
|
||||
<span class="w"> </span><span class="sd">"""Immediat parameters for Jump instruction</span>
|
||||
<span class="sd"> Sub a specified size from the size to jump to `emulate` a jump from the begin address of the instruction"""</span>
|
||||
<span class="n">accept_as_Ximmediat</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
@@ -754,6 +765,9 @@
|
||||
<span class="p">(</span><span class="n">RawBits</span><span class="o">.</span><span class="n">from_int</span><span class="p">(</span><span class="mi">16</span><span class="p">,</span> <span class="mh">0x0f84</span><span class="p">),</span> <span class="n">JmpImm32</span><span class="p">(</span><span class="mi">6</span><span class="p">))]</span>
|
||||
|
||||
|
||||
<span class="n">Je</span> <span class="o">=</span> <span class="n">Jz</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">Jnz</span><span class="p">(</span><span class="n">JmpType</span><span class="p">):</span>
|
||||
<span class="n">encoding</span> <span class="o">=</span> <span class="p">[(</span><span class="n">RawBits</span><span class="o">.</span><span class="n">from_int</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mh">0x75</span><span class="p">),</span> <span class="n">JmpImm8</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span>
|
||||
<span class="p">(</span><span class="n">RawBits</span><span class="o">.</span><span class="n">from_int</span><span class="p">(</span><span class="mi">16</span><span class="p">,</span> <span class="mh">0x0f85</span><span class="p">),</span> <span class="n">JmpImm32</span><span class="p">(</span><span class="mi">6</span><span class="p">))]</span>
|
||||
@@ -830,6 +844,22 @@
|
||||
<span class="n">encoding</span> <span class="o">=</span> <span class="p">[(</span><span class="n">RawBits</span><span class="o">.</span><span class="n">from_int</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mh">0xa5</span><span class="p">),)]</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">Pushfd</span><span class="p">(</span><span class="n">Instruction</span><span class="p">):</span>
|
||||
<span class="n">encoding</span> <span class="o">=</span> <span class="p">[(</span><span class="n">RawBits</span><span class="o">.</span><span class="n">from_int</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mh">0x9c</span><span class="p">),)]</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">Pushad</span><span class="p">(</span><span class="n">Instruction</span><span class="p">):</span>
|
||||
<span class="n">encoding</span> <span class="o">=</span> <span class="p">[(</span><span class="n">RawBits</span><span class="o">.</span><span class="n">from_int</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mh">0x60</span><span class="p">),)]</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">Popfd</span><span class="p">(</span><span class="n">Instruction</span><span class="p">):</span>
|
||||
<span class="n">encoding</span> <span class="o">=</span> <span class="p">[(</span><span class="n">RawBits</span><span class="o">.</span><span class="n">from_int</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mh">0x9d</span><span class="p">),)]</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">Popad</span><span class="p">(</span><span class="n">Instruction</span><span class="p">):</span>
|
||||
<span class="n">encoding</span> <span class="o">=</span> <span class="p">[(</span><span class="n">RawBits</span><span class="o">.</span><span class="n">from_int</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mh">0x61</span><span class="p">),)]</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">Lea</span><span class="p">(</span><span class="n">Instruction</span><span class="p">):</span>
|
||||
<span class="n">encoding</span> <span class="o">=</span> <span class="p">[(</span><span class="n">RawBits</span><span class="o">.</span><span class="n">from_int</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mh">0x8d</span><span class="p">),</span> <span class="n">ModRM</span><span class="p">([</span><span class="n">ModRM_REG__MEM</span><span class="p">],</span> <span class="n">accept_reverse</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">has_direction_bit</span><span class="o">=</span><span class="kc">False</span><span class="p">))]</span>
|
||||
|
||||
@@ -841,7 +871,7 @@
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">Test</span><span class="p">(</span><span class="n">Instruction</span><span class="p">):</span>
|
||||
<span class="n">encoding</span> <span class="o">=</span> <span class="p">[(</span><span class="n">RawBits</span><span class="o">.</span><span class="n">from_int</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mh">0xf7</span><span class="p">),</span> <span class="n">Slash</span><span class="p">(</span><span class="mi">7</span><span class="p">),</span> <span class="n">Imm32</span><span class="p">()),</span>
|
||||
<span class="n">encoding</span> <span class="o">=</span> <span class="p">[(</span><span class="n">RawBits</span><span class="o">.</span><span class="n">from_int</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mh">0xf7</span><span class="p">),</span> <span class="n">Slash</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">Imm32</span><span class="p">()),</span>
|
||||
<span class="p">(</span><span class="n">RawBits</span><span class="o">.</span><span class="n">from_int</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mh">0x85</span><span class="p">),</span> <span class="n">ModRM</span><span class="p">([</span><span class="n">ModRM_REG__REG</span><span class="p">,</span> <span class="n">ModRM_REG__MEM</span><span class="p">],</span> <span class="n">has_direction_bit</span><span class="o">=</span><span class="kc">False</span><span class="p">))]</span>
|
||||
|
||||
|
||||
@@ -941,17 +971,17 @@
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">_NopArtifact</span><span class="p">(</span><span class="n">Nop</span><span class="p">):</span>
|
||||
<span class="sd">"""Special NOP used in shellcode reduction"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Special NOP used in shellcode reduction"""</span>
|
||||
<span class="k">pass</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">Byte</span><span class="p">(</span><span class="n">Instruction</span><span class="p">):</span>
|
||||
<span class="sd">"""Output a raw byte"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Output a raw byte"""</span>
|
||||
<span class="n">encoding</span> <span class="o">=</span> <span class="p">[(</span><span class="n">UImm8</span><span class="p">(),)]</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">Raw</span><span class="p">(</span><span class="n">Instruction</span><span class="p">):</span>
|
||||
<span class="sd">"""Output raw data"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Output raw data"""</span>
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">initial_args</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">initial_args</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"raw 'opcode' only accept one argument"</span><span class="p">)</span>
|
||||
@@ -1146,6 +1176,13 @@
|
||||
<span class="k">except</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Unknow mnemonic <</span><span class="si">{0}</span><span class="s2">>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">mnemo</span><span class="p">))</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">instr_object</span><span class="p">,</span> <span class="n">Raw</span><span class="p">):</span>
|
||||
<span class="c1"># Raw should received the raw buffer as it expect encoded hex</span>
|
||||
<span class="c1"># The transformation may transform 'raw 9090' (nopnop) as 0n9090</span>
|
||||
<span class="c1"># If other fake-instr need this : make a class attribute</span>
|
||||
<span class="k">yield</span> <span class="n">instr_object</span><span class="p">(</span><span class="o">*</span><span class="n">args_raw</span><span class="p">)</span>
|
||||
<span class="k">continue</span>
|
||||
|
||||
<span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">if</span> <span class="n">args_raw</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args_raw</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">","</span><span class="p">):</span>
|
||||
@@ -1161,7 +1198,7 @@
|
||||
<span class="k">yield</span> <span class="n">instr_object</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">assemble</span><span class="p">(</span><span class="nb">str</span><span class="p">):</span>
|
||||
<span class="sd">"""Play test"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Play test"""</span>
|
||||
<span class="n">shellcode</span> <span class="o">=</span> <span class="n">MultipleInstr</span><span class="p">()</span>
|
||||
<span class="n">shellcode</span> <span class="o">+=</span> <span class="nb">str</span>
|
||||
<span class="k">return</span> <span class="n">shellcode</span><span class="o">.</span><span class="n">get_code</span><span class="p">()</span>
|
||||
@@ -1204,23 +1241,22 @@
|
||||
<span class="n">idc</span><span class="o">.</span><span class="n">MakeFunction</span><span class="p">(</span><span class="n">idc</span><span class="o">.</span><span class="n">MinEA</span><span class="p">())</span>
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></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>
|
||||
<search id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../../search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||||
<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>
|
||||
</search>
|
||||
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
@@ -1234,13 +1270,14 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.native_exec.simple_x86</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+108
-68
@@ -1,21 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!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">
|
||||
<html lang="en" data-content_root="../../">
|
||||
<head>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>windows.pe_parse — PythonForWindows 0.6 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" type="text/css" href="../../_static/css/mbasic.css" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.pe_parse — PythonForWindows 1.0.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=fa44fd50" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/classic.css?v=def86cc0" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/css/mbasic.css?v=957880af" />
|
||||
|
||||
<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>
|
||||
<script type="text/javascript" src="../../_static/language_data.js"></script>
|
||||
<script src="../../_static/documentation_options.js?v=8d563738"></script>
|
||||
<script src="../../_static/doctools.js?v=9a2dae69"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
|
||||
<link rel="index" title="Index" href="../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../search.html" />
|
||||
@@ -29,8 +25,9 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.pe_parse</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -94,8 +91,10 @@
|
||||
<span class="kn">import</span> <span class="nn">collections</span>
|
||||
<span class="n">CtypesStructureTransformers</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">namedtuple</span><span class="p">(</span><span class="s2">"CtypesStructureTransformers"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"ctypes_structure_transformer"</span><span class="p">,</span> <span class="s2">"create_structure_at"</span><span class="p">])</span>
|
||||
|
||||
<div class="viewcode-block" id="GetPEFile"><a class="viewcode-back" href="../../process.html#windows.pe_parse.GetPEFile">[docs]</a><span class="k">def</span> <span class="nf">GetPEFile</span><span class="p">(</span><span class="n">baseaddr</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="n">force_bitness</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Returns a :class:`PEFile` to explore a PE loaded at `baseaddr` in process `target`.</span>
|
||||
<div class="viewcode-block" id="GetPEFile">
|
||||
<a class="viewcode-back" href="../../process.html#windows.pe_parse.GetPEFile">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">GetPEFile</span><span class="p">(</span><span class="n">baseaddr</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="n">force_bitness</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Returns a :class:`PEFile` to explore a PE loaded at `baseaddr` in process `target`.</span>
|
||||
|
||||
<span class="sd"> :rtype: :class:`PEFile`</span>
|
||||
|
||||
@@ -116,12 +115,21 @@
|
||||
<span class="k">return</span> <span class="n">PEFile</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">baseaddr</span><span class="p">,</span> <span class="n">targetedbitness</span><span class="p">,</span> <span class="n">transfor_funcs</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">THUNK_DATA</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">Union</span><span class="p">):</span>
|
||||
<span class="n">_fields_</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">(</span><span class="s2">"Ordinal"</span><span class="p">,</span> <span class="n">PVOID</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"AddressOfData"</span><span class="p">,</span> <span class="n">PVOID</span><span class="p">)</span>
|
||||
<span class="p">]</span>
|
||||
|
||||
<span class="c1"># Special case for .NET PE32 rewrite as 64b</span>
|
||||
<span class="c1"># We may have a PE in a 64b process with a 32b IAT</span>
|
||||
<span class="k">class</span> <span class="nc">THUNK_DATA_32</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">Union</span><span class="p">):</span>
|
||||
<span class="n">_fields_</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">(</span><span class="s2">"Ordinal"</span><span class="p">,</span> <span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"AddressOfData"</span><span class="p">,</span> <span class="n">DWORD</span><span class="p">)</span>
|
||||
<span class="p">]</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">IMPORT_BY_NAME</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="p">(</span><span class="s2">"Hint"</span><span class="p">,</span> <span class="n">WORD</span><span class="p">),</span>
|
||||
@@ -174,8 +182,10 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">nonhookvalue</span> <span class="o">=</span> <span class="n">iat_entry</span><span class="o">.</span><span class="n">nonhookvalue</span>
|
||||
<span class="k">return</span> <span class="bp">self</span>
|
||||
|
||||
<div class="viewcode-block" id="IATEntry"><a class="viewcode-back" href="../../process.html#windows.pe_parse.IATEntry">[docs]</a><span class="k">class</span> <span class="nc">IATEntry</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="sd">"""Represent an entry in the IAT of a module</span>
|
||||
<div class="viewcode-block" id="IATEntry">
|
||||
<a class="viewcode-back" href="../../process.html#windows.pe_parse.IATEntry">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">IATEntry</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="w"> </span><span class="sd">"""Represent an entry in the IAT of a module</span>
|
||||
<span class="sd"> Can be used to get resolved value and setup hook</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">_fields_</span> <span class="o">=</span> <span class="p">[</span>
|
||||
@@ -195,8 +205,10 @@
|
||||
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s1">'<</span><span class="si">{0}</span><span class="s1"> "</span><span class="si">{1}</span><span class="s1">" ordinal </span><span class="si">{2}</span><span class="s1">>'</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="vm">__class__</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">ord</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="IATEntry.set_hook"><a class="viewcode-back" href="../../process.html#windows.pe_parse.IATEntry.set_hook">[docs]</a> <span class="k">def</span> <span class="nf">set_hook</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">types</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Setup a hook on the entry and return it.</span>
|
||||
<div class="viewcode-block" id="IATEntry.set_hook">
|
||||
<a class="viewcode-back" href="../../process.html#windows.pe_parse.IATEntry.set_hook">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">set_hook</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">types</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Setup a hook on the entry and return it.</span>
|
||||
<span class="sd"> You MUST keep a reference to the hook while the hook is enabled.</span>
|
||||
|
||||
<span class="sd"> :param callback: the hook</span>
|
||||
@@ -221,19 +233,23 @@
|
||||
<span class="n">hook</span><span class="o">.</span><span class="n">enable</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="n">hook</span></div>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">on_destroy</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="c1"># We cannot know if the hook was enabled here..</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"DESTROY: </span><span class="si">{0}</span><span class="s2"> -> "</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">enabled</span><span class="p">))</span>
|
||||
<span class="c1"># import pdb;pdb.set_trace()</span>
|
||||
<span class="c1"># print(args[0]())</span>
|
||||
|
||||
<div class="viewcode-block" id="IATEntry.remove_hook"><a class="viewcode-back" href="../../process.html#windows.pe_parse.IATEntry.remove_hook">[docs]</a> <span class="k">def</span> <span class="nf">remove_hook</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Remove the hook on the entry"""</span>
|
||||
<div class="viewcode-block" id="IATEntry.remove_hook">
|
||||
<a class="viewcode-back" href="../../process.html#windows.pe_parse.IATEntry.remove_hook">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">remove_hook</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Remove the hook on the entry"""</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">hook</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="bp">self</span><span class="o">.</span><span class="n">hook</span><span class="o">.</span><span class="n">disable</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">hook</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">return</span> <span class="kc">True</span></div></div>
|
||||
<span class="k">return</span> <span class="kc">True</span></div>
|
||||
</div>
|
||||
|
||||
|
||||
<span class="c1"># def __del__(self):</span>
|
||||
<span class="c1"># print(self.hook)</span>
|
||||
@@ -242,11 +258,16 @@
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">IMAGE_IMPORT_DESCRIPTOR</span><span class="p">(</span><span class="n">IMAGE_IMPORT_DESCRIPTOR</span><span class="p">):</span> <span class="c1"># TODO: use explicite name winstructs.IMAGE_IMPORT_DESCRIPTOR</span>
|
||||
<span class="k">def</span> <span class="nf">get_INT</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">get_INT</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pe</span><span class="p">):</span>
|
||||
<span class="n">THUNK_DATA_TYPE</span> <span class="o">=</span> <span class="n">THUNK_DATA</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">OriginalFirstThunk</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="c1"># We may have 32bits PE mapped in 32bits process (thanks to .NET PE)</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">pe</span><span class="o">.</span><span class="n">bitness</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">bitness</span><span class="p">:</span>
|
||||
<span class="k">assert</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">64</span> <span class="ow">and</span> <span class="n">pe</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="s2">"Mapped 64b PE in current process 32b not handled"</span>
|
||||
<span class="n">THUNK_DATA_TYPE</span> <span class="o">=</span> <span class="n">THUNK_DATA_32</span>
|
||||
<span class="n">int_addr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">OriginalFirstThunk</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">baseaddr</span>
|
||||
<span class="n">int_entry</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">transformers</span><span class="o">.</span><span class="n">create_structure_at</span><span class="p">(</span><span class="n">THUNK_DATA</span><span class="p">,</span> <span class="n">int_addr</span><span class="p">)</span>
|
||||
<span class="n">int_entry</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">transformers</span><span class="o">.</span><span class="n">create_structure_at</span><span class="p">(</span><span class="n">THUNK_DATA_TYPE</span><span class="p">,</span> <span class="n">int_addr</span><span class="p">)</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">while</span> <span class="n">int_entry</span><span class="o">.</span><span class="n">Ordinal</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">int_entry</span><span class="o">.</span><span class="n">Ordinal</span> <span class="o">&</span> <span class="bp">self</span><span class="o">.</span><span class="n">IMAGE_ORDINAL_FLAG</span><span class="p">:</span>
|
||||
@@ -254,23 +275,24 @@
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">import_by_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">transformers</span><span class="o">.</span><span class="n">create_structure_at</span><span class="p">(</span><span class="n">IMPORT_BY_NAME</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">baseaddr</span> <span class="o">+</span> <span class="n">int_entry</span><span class="o">.</span><span class="n">AddressOfData</span><span class="p">)</span>
|
||||
<span class="n">name_address</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">baseaddr</span> <span class="o">+</span> <span class="n">int_entry</span><span class="o">.</span><span class="n">AddressOfData</span> <span class="o">+</span> <span class="nb">type</span><span class="p">(</span><span class="n">import_by_name</span><span class="p">)</span><span class="o">.</span><span class="n">Name</span><span class="o">.</span><span class="n">offset</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="n">get_string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="n">name_address</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="n">get_string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="n">name_address</span><span class="p">)</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="n">get_string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="n">name_address</span><span class="p">)</span>
|
||||
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">import_by_name</span><span class="o">.</span><span class="n">Hint</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span>
|
||||
<span class="n">int_addr</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="nb">type</span><span class="p">(</span><span class="n">int_entry</span><span class="p">))</span>
|
||||
<span class="n">int_entry</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">transformers</span><span class="o">.</span><span class="n">create_structure_at</span><span class="p">(</span><span class="n">THUNK_DATA</span><span class="p">,</span> <span class="n">int_addr</span><span class="p">)</span>
|
||||
<span class="n">int_entry</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">transformers</span><span class="o">.</span><span class="n">create_structure_at</span><span class="p">(</span><span class="n">THUNK_DATA_TYPE</span><span class="p">,</span> <span class="n">int_addr</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_IAT</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">get_IAT</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pe</span><span class="p">):</span>
|
||||
<span class="n">THUNK_DATA_TYPE</span> <span class="o">=</span> <span class="n">THUNK_DATA</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">pe</span><span class="o">.</span><span class="n">bitness</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">bitness</span><span class="p">:</span>
|
||||
<span class="k">assert</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">64</span> <span class="ow">and</span> <span class="n">pe</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="s2">"Mapped 64b PE in current process 32b not handled"</span>
|
||||
<span class="n">THUNK_DATA_TYPE</span> <span class="o">=</span> <span class="n">THUNK_DATA_32</span>
|
||||
<span class="n">iat_addr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FirstThunk</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">baseaddr</span>
|
||||
<span class="n">iat_entry</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">transformers</span><span class="o">.</span><span class="n">create_structure_at</span><span class="p">(</span><span class="n">THUNK_DATA</span><span class="p">,</span> <span class="n">iat_addr</span><span class="p">)</span>
|
||||
<span class="n">iat_entry</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">transformers</span><span class="o">.</span><span class="n">create_structure_at</span><span class="p">(</span><span class="n">THUNK_DATA_TYPE</span><span class="p">,</span> <span class="n">iat_addr</span><span class="p">)</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">while</span> <span class="n">iat_entry</span><span class="o">.</span><span class="n">Ordinal</span><span class="p">:</span>
|
||||
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">IATEntry</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">iat_addr</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s2">"??"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">transformers</span><span class="p">))</span>
|
||||
<span class="n">iat_addr</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="nb">type</span><span class="p">(</span><span class="n">iat_entry</span><span class="p">))</span>
|
||||
<span class="n">iat_entry</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">transformers</span><span class="o">.</span><span class="n">create_structure_at</span><span class="p">(</span><span class="n">THUNK_DATA</span><span class="p">,</span> <span class="n">iat_addr</span><span class="p">)</span>
|
||||
<span class="n">iat_entry</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">transformers</span><span class="o">.</span><span class="n">create_structure_at</span><span class="p">(</span><span class="n">THUNK_DATA_TYPE</span><span class="p">,</span> <span class="n">iat_addr</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
@@ -333,8 +355,10 @@
|
||||
<span class="p">(</span><span class="s2">"e_lfanew"</span><span class="p">,</span> <span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">]</span>
|
||||
|
||||
<div class="viewcode-block" id="PEFile"><a class="viewcode-back" href="../../process.html#windows.pe_parse.PEFile">[docs]</a><span class="k">class</span> <span class="nc">PEFile</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""Represent a PE loaded in a process (current or remote)"""</span>
|
||||
<div class="viewcode-block" id="PEFile">
|
||||
<a class="viewcode-back" href="../../process.html#windows.pe_parse.PEFile">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">PEFile</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Represent a PE loaded in a process (current or remote)"""</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__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="n">baseaddr</span><span class="p">,</span> <span class="n">targetedbitness</span><span class="p">,</span> <span class="n">transformers</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>
|
||||
@@ -356,21 +380,37 @@
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">transformers</span><span class="o">.</span><span class="n">create_structure_at</span><span class="p">(</span><span class="n">IMAGE_NT_HEADERS32</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">baseaddr</span> <span class="o">+</span> <span class="n">offset</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">transformers</span><span class="o">.</span><span class="n">create_structure_at</span><span class="p">(</span><span class="n">IMAGE_NT_HEADERS64</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">baseaddr</span> <span class="o">+</span> <span class="n">offset</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="n">STANDARD_OPTIONAL_HEADER_TYPE_PER_MAGIC</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="n">IMAGE_NT_OPTIONAL_HDR32_MAGIC</span><span class="p">:</span> <span class="n">IMAGE_OPTIONAL_HEADER32</span><span class="p">,</span>
|
||||
<span class="n">IMAGE_NT_OPTIONAL_HDR64_MAGIC</span><span class="p">:</span> <span class="n">IMAGE_OPTIONAL_HEADER64</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="n">STANDARD_OPTIONAL_HEADER_SIZE_PER_MAGIC</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="p">(</span><span class="n">IMAGE_NT_OPTIONAL_HDR32_MAGIC</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">IMAGE_OPTIONAL_HEADER32</span><span class="p">)),</span>
|
||||
<span class="p">(</span><span class="n">IMAGE_NT_OPTIONAL_HDR64_MAGIC</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">IMAGE_OPTIONAL_HEADER64</span><span class="p">)),</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_OptionalHeader</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">get_NT_HEADER</span><span class="p">()</span><span class="o">.</span><span class="n">OptionalHeader</span>
|
||||
<span class="c1"># We can have a 32bits PE with a 64 bits OptionalHeader</span>
|
||||
<span class="c1"># Ex : PE32 .NET that allow to be loaded in 64b process</span>
|
||||
<span class="c1"># See: https://github.com/dotnet/runtime/blob/8bbe33819464216becffb7cf8b7ea8dd3bab5836/src/coreclr/src/vm/peimagelayout.cpp#L599</span>
|
||||
<span class="c1"># In this case the OptionalHeader is transformed in 64bits & OptionalHeader.Magic is changed accordingly</span>
|
||||
<span class="c1"># So we cannot just rely on get_NT_HEADER() to give us the correct OptionalHeader type. some re-check are required</span>
|
||||
<span class="n">default_opth</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_NT_HEADER</span><span class="p">()</span><span class="o">.</span><span class="n">OptionalHeader</span>
|
||||
<span class="c1"># Cannot juste compare types with type(default_opth) as it may be a remoteType</span>
|
||||
<span class="n">current_opth_infos</span> <span class="o">=</span> <span class="p">(</span><span class="n">default_opth</span><span class="o">.</span><span class="n">Magic</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">default_opth</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="n">current_opth_infos</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">STANDARD_OPTIONAL_HEADER_SIZE_PER_MAGIC</span><span class="p">:</span>
|
||||
<span class="c1"># The default OptionalHeader structure match what we expect based on the magic (most of the cases)</span>
|
||||
<span class="k">return</span> <span class="n">default_opth</span>
|
||||
<span class="c1"># Mismatch -> PE32 remapped as 64b (with OptionalHeader rewrite)</span>
|
||||
<span class="c1"># Remap the correct OptionalHeader</span>
|
||||
<span class="n">opt_header_real_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">STANDARD_OPTIONAL_HEADER_TYPE_PER_MAGIC</span><span class="p">[</span><span class="n">default_opth</span><span class="o">.</span><span class="n">Magic</span><span class="p">]</span>
|
||||
<span class="n">opt_header_addr</span> <span class="o">=</span> <span class="n">default_opth</span><span class="o">.</span><span class="n">_base_addr</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="k">else</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">default_opth</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">transformers</span><span class="o">.</span><span class="n">create_structure_at</span><span class="p">(</span><span class="n">opt_header_real_type</span><span class="p">,</span> <span class="n">opt_header_addr</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_DataDirectory</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="c1"># This won't work if we load a PE32 in a 64bit process</span>
|
||||
<span class="c1"># PE32 .NET...</span>
|
||||
<span class="c1"># return self.get_OptionalHeader().DataDirectory</span>
|
||||
<span class="n">DataDirectory_type</span> <span class="o">=</span> <span class="n">IMAGE_DATA_DIRECTORY</span> <span class="o">*</span> <span class="n">IMAGE_NUMBEROF_DIRECTORY_ENTRIES</span>
|
||||
<span class="n">SizeOfOptionalHeader</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_NT_HEADER</span><span class="p">()</span><span class="o">.</span><span class="n">FileHeader</span><span class="o">.</span><span class="n">SizeOfOptionalHeader</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">opt_header_addr</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="o">.</span><span class="n">get_NT_HEADER</span><span class="p">()</span><span class="o">.</span><span class="n">OptionalHeader</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">opt_header_addr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_NT_HEADER</span><span class="p">()</span><span class="o">.</span><span class="n">OptionalHeader</span><span class="o">.</span><span class="n">_base_addr</span>
|
||||
<span class="n">DataDirectory_addr</span> <span class="o">=</span> <span class="n">opt_header_addr</span> <span class="o">+</span> <span class="n">SizeOfOptionalHeader</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="n">DataDirectory_type</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">transformers</span><span class="o">.</span><span class="n">create_structure_at</span><span class="p">(</span><span class="n">DataDirectory_type</span><span class="p">,</span> <span class="n">DataDirectory_addr</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_OptionalHeader</span><span class="p">()</span><span class="o">.</span><span class="n">DataDirectory</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_IMPORT_DESCRIPTORS</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -411,7 +451,7 @@
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">exports</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The exports of the PE in a dict. Keys are ordinal (:class:`int`) and name (:class:`str`).</span>
|
||||
<span class="w"> </span><span class="sd">"""The exports of the PE in a dict. Keys are ordinal (:class:`int`) and name (:class:`str`).</span>
|
||||
<span class="sd"> The values are the addresses of the exports.</span>
|
||||
|
||||
<span class="sd"> :type: {(:class:`int` or :class:`str`) : :class:`int`}"""</span>
|
||||
@@ -422,7 +462,6 @@
|
||||
<span class="n">export_end</span> <span class="o">=</span> <span class="n">export_start</span> <span class="o">+</span> <span class="n">export_datadir</span><span class="o">.</span><span class="n">Size</span>
|
||||
<span class="k">if</span> <span class="n">exp_dir</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
<span class="c1"># import pdb;pdb.set_trace()</span>
|
||||
<span class="n">raw_exports</span> <span class="o">=</span> <span class="n">exp_dir</span><span class="o">.</span><span class="n">get_exports</span><span class="p">()</span>
|
||||
<span class="k">for</span> <span class="nb">id</span><span class="p">,</span> <span class="n">rva_addr</span><span class="p">,</span> <span class="n">rva_name</span> <span class="ow">in</span> <span class="n">raw_exports</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">export_start</span> <span class="o"><=</span> <span class="n">rva_addr</span> <span class="o"><</span> <span class="n">export_end</span><span class="p">:</span>
|
||||
@@ -437,7 +476,7 @@
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">export_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The Name attribute of the ``EXPORT_DIRECTORY``"""</span>
|
||||
<span class="w"> </span><span class="sd">"""The Name attribute of the ``EXPORT_DIRECTORY``"""</span>
|
||||
<span class="n">exp_dir</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_EXPORT_DIRECTORY</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">exp_dir</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>
|
||||
@@ -448,15 +487,15 @@
|
||||
<span class="c1"># TODO: get imports by parsing other modules exports if no INT</span>
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">imports</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The imports of the PE in a dict.</span>
|
||||
<span class="w"> </span><span class="sd">"""The imports of the PE in a dict.</span>
|
||||
<span class="sd"> Keys are the names of DLL to import from and values are :class:`list`</span>
|
||||
<span class="sd"> of :class:`IATEntry`</span>
|
||||
|
||||
<span class="sd"> :type: {:class:`str` : [:class:`IATEntry`]}"""</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="k">for</span> <span class="n">import_descriptor</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_IMPORT_DESCRIPTORS</span><span class="p">():</span>
|
||||
<span class="n">INT</span> <span class="o">=</span> <span class="n">import_descriptor</span><span class="o">.</span><span class="n">get_INT</span><span class="p">()</span>
|
||||
<span class="n">IAT</span> <span class="o">=</span> <span class="n">import_descriptor</span><span class="o">.</span><span class="n">get_IAT</span><span class="p">()</span>
|
||||
<span class="n">INT</span> <span class="o">=</span> <span class="n">import_descriptor</span><span class="o">.</span><span class="n">get_INT</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
|
||||
<span class="n">IAT</span> <span class="o">=</span> <span class="n">import_descriptor</span><span class="o">.</span><span class="n">get_IAT</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">INT</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">iat_entry</span><span class="p">,</span> <span class="p">(</span><span class="nb">ord</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">IAT</span><span class="p">,</span> <span class="n">INT</span><span class="p">):</span>
|
||||
<span class="c1"># str(name.decode()) -> python2 and python3 compatible for str result</span>
|
||||
@@ -465,25 +504,25 @@
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="n">get_string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">baseaddr</span> <span class="o">+</span> <span class="n">import_descriptor</span><span class="o">.</span><span class="n">Name</span><span class="p">)</span>
|
||||
<span class="n">res</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="p">[])</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">IAT</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">res</span></div>
|
||||
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></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>
|
||||
<search id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||||
<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>
|
||||
</search>
|
||||
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
@@ -497,13 +536,14 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.pe_parse</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+88
-58
@@ -1,21 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!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">
|
||||
<html lang="en" data-content_root="../../">
|
||||
<head>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>windows.pipe — PythonForWindows 0.6 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" type="text/css" href="../../_static/css/mbasic.css" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.pipe — PythonForWindows 1.0.0 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=fa44fd50" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/classic.css?v=def86cc0" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/css/mbasic.css?v=957880af" />
|
||||
|
||||
<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>
|
||||
<script type="text/javascript" src="../../_static/language_data.js"></script>
|
||||
<script src="../../_static/documentation_options.js?v=8d563738"></script>
|
||||
<script src="../../_static/doctools.js?v=9a2dae69"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
|
||||
<link rel="index" title="Index" href="../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../search.html" />
|
||||
@@ -29,8 +25,9 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.pipe</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -45,7 +42,7 @@
|
||||
<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">import</span> <span class="nn">ctypes</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="kn">import</span> <span class="n">is_py3</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="kn">import</span> <span class="n">is_py3</span><span class="p">,</span> <span class="n">urepr_encode</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">is_py3</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">multiprocessing.connection</span> <span class="kn">import</span> <span class="n">PipeConnection</span> <span class="k">as</span> <span class="n">native_PipeConnection</span>
|
||||
@@ -54,16 +51,21 @@
|
||||
|
||||
<span class="c1"># Inspired from 'multiprocessing\connection.py'</span>
|
||||
|
||||
<div class="viewcode-block" id="full_pipe_address"><a class="viewcode-back" href="../../pipe.html#windows.pipe.full_pipe_address">[docs]</a><span class="k">def</span> <span class="nf">full_pipe_address</span><span class="p">(</span><span class="n">addr</span><span class="p">):</span>
|
||||
<span class="sd">"""Return the full address of the pipe `addr`"""</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">):</span>
|
||||
<span class="n">addr</span> <span class="o">=</span> <span class="n">addr</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">"ascii"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">addr</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\\\\</span><span class="s2">"</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="full_pipe_address">
|
||||
<a class="viewcode-back" href="../../pipe.html#windows.pipe.full_pipe_address">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">full_pipe_address</span><span class="p">(</span><span class="n">addr</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Return the full address of the pipe `addr`"""</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">):</span>
|
||||
<span class="n">addr</span> <span class="o">=</span> <span class="n">addr</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"ascii"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">addr</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="sa">u</span><span class="s2">"</span><span class="se">\\\\</span><span class="s2">"</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">addr</span>
|
||||
<span class="k">return</span> <span class="sa">br</span><span class="s2">"</span><span class="se">\\</span><span class="s2">.\pipe"</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\\</span><span class="s2">"</span><span class="o">.</span><span class="n">encode</span><span class="p">()</span> <span class="o">+</span> <span class="n">addr</span></div>
|
||||
<span class="k">return</span> <span class="sa">u</span><span class="s2">"</span><span class="se">\\\\</span><span class="s2">.</span><span class="se">\\</span><span class="s2">pipe"</span> <span class="o">+</span> <span class="sa">u</span><span class="s2">"</span><span class="se">\\</span><span class="s2">"</span> <span class="o">+</span> <span class="n">addr</span></div>
|
||||
|
||||
<div class="viewcode-block" id="PipeConnection"><a class="viewcode-back" href="../../pipe.html#windows.pipe.PipeConnection">[docs]</a><span class="k">class</span> <span class="nc">PipeConnection</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="c1"># Cannot inherit: crash the interpreter</span>
|
||||
<span class="sd">"""A wrapper arround :class:`_multiprocessing.PipeConnection` able to work as a ContextManager"""</span>
|
||||
|
||||
<div class="viewcode-block" id="PipeConnection">
|
||||
<a class="viewcode-back" href="../../pipe.html#windows.pipe.PipeConnection">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">PipeConnection</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="c1"># Cannot inherit: crash the interpreter</span>
|
||||
<span class="w"> </span><span class="sd">"""A wrapper arround :class:`_multiprocessing.PipeConnection` able to work as a ContextManager"""</span>
|
||||
<span class="n">BUFFER_SIZE</span> <span class="o">=</span> <span class="mh">0x2000</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connection</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">server</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
@@ -72,15 +74,20 @@
|
||||
<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="bp">self</span><span class="o">.</span><span class="n">server</span> <span class="o">=</span> <span class="n">server</span>
|
||||
|
||||
<div class="viewcode-block" id="PipeConnection.from_handle"><a class="viewcode-back" href="../../pipe.html#windows.pipe.PipeConnection.from_handle">[docs]</a> <span class="nd">@classmethod</span>
|
||||
<div class="viewcode-block" id="PipeConnection.from_handle">
|
||||
<a class="viewcode-back" href="../../pipe.html#windows.pipe.PipeConnection.from_handle">[docs]</a>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">from_handle</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">phandle</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""Create a :class:`PipeConnection` from pipe handle `phandle`"""</span>
|
||||
<span class="w"> </span><span class="sd">"""Create a :class:`PipeConnection` from pipe handle `phandle`"""</span>
|
||||
<span class="n">connection</span> <span class="o">=</span> <span class="n">native_PipeConnection</span><span class="p">(</span><span class="n">phandle</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">connection</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="PipeConnection.create"><a class="viewcode-back" href="../../pipe.html#windows.pipe.PipeConnection.create">[docs]</a> <span class="nd">@classmethod</span>
|
||||
|
||||
<div class="viewcode-block" id="PipeConnection.create">
|
||||
<a class="viewcode-back" href="../../pipe.html#windows.pipe.PipeConnection.create">[docs]</a>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">create</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">security_descriptor</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Create a namedpipe pipe ``addr``</span>
|
||||
<span class="w"> </span><span class="sd">"""Create a namedpipe pipe ``addr``</span>
|
||||
|
||||
<span class="sd"> :returns type: :class:`PipeConnection`</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -96,7 +103,7 @@
|
||||
<span class="n">security_attributes</span><span class="o">.</span><span class="n">bInheritHandle</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># Accept as arg ?</span>
|
||||
|
||||
|
||||
<span class="n">pipehandle</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CreateNamedPipeA</span><span class="p">(</span>
|
||||
<span class="n">pipehandle</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CreateNamedPipeW</span><span class="p">(</span>
|
||||
<span class="n">addr</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PIPE_ACCESS_DUPLEX</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PIPE_TYPE_MESSAGE</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PIPE_READMODE_MESSAGE</span> <span class="o">|</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PIPE_WAIT</span><span class="p">,</span>
|
||||
@@ -105,29 +112,42 @@
|
||||
<span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">from_handle</span><span class="p">(</span><span class="n">pipehandle</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">addr</span><span class="p">,</span> <span class="n">server</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="PipeConnection.connect"><a class="viewcode-back" href="../../pipe.html#windows.pipe.PipeConnection.connect">[docs]</a> <span class="nd">@classmethod</span>
|
||||
|
||||
<div class="viewcode-block" id="PipeConnection.connect">
|
||||
<a class="viewcode-back" href="../../pipe.html#windows.pipe.PipeConnection.connect">[docs]</a>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">connect</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="sd">"""Connect to the named pipe ``addr``</span>
|
||||
<span class="w"> </span><span class="sd">"""Connect to the named pipe ``addr``</span>
|
||||
|
||||
<span class="sd"> :returns type: :class:`PipeConnection`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">addr</span> <span class="o">=</span> <span class="n">full_pipe_address</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span>
|
||||
<span class="n">pipehandle</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CreateFileA</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">GENERIC_READ</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">GENERIC_WRITE</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">gdef</span><span class="o">.</span><span class="n">OPEN_EXISTING</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">pipehandle</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CreateFileW</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">GENERIC_READ</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">GENERIC_WRITE</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">gdef</span><span class="o">.</span><span class="n">OPEN_EXISTING</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">SetNamedPipeHandleState</span><span class="p">(</span><span class="n">pipehandle</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ULONG</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">PIPE_READMODE_MESSAGE</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="bp">cls</span><span class="o">.</span><span class="n">from_handle</span><span class="p">(</span><span class="n">pipehandle</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">addr</span><span class="p">,</span> <span class="n">server</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="PipeConnection.send"><a class="viewcode-back" href="../../pipe.html#windows.pipe.PipeConnection.send">[docs]</a> <span class="k">def</span> <span class="nf">send</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="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""Send an object on the pipe"""</span>
|
||||
|
||||
<div class="viewcode-block" id="PipeConnection.send">
|
||||
<a class="viewcode-back" href="../../pipe.html#windows.pipe.PipeConnection.send">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">send</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="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Send an object on the pipe"""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="PipeConnection.recv"><a class="viewcode-back" href="../../pipe.html#windows.pipe.PipeConnection.recv">[docs]</a> <span class="k">def</span> <span class="nf">recv</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="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""Send an object from the pipe"""</span>
|
||||
|
||||
<div class="viewcode-block" id="PipeConnection.recv">
|
||||
<a class="viewcode-back" href="../../pipe.html#windows.pipe.PipeConnection.recv">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">recv</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="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Send an object from the pipe"""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="PipeConnection.wait_connection"><a class="viewcode-back" href="../../pipe.html#windows.pipe.PipeConnection.wait_connection">[docs]</a> <span class="k">def</span> <span class="nf">wait_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Wait for a client process to connect to the named pipe"""</span>
|
||||
|
||||
<div class="viewcode-block" id="PipeConnection.wait_connection">
|
||||
<a class="viewcode-back" href="../../pipe.html#windows.pipe.PipeConnection.wait_connection">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">wait_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Wait for a client process to connect to the named pipe"""</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">ConnectNamedPipe</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="kc">None</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_security_descriptor</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">security</span><span class="o">.</span><span class="n">SecurityDescriptor</span><span class="o">.</span><span class="n">from_handle</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
|
||||
|
||||
@@ -138,11 +158,14 @@
|
||||
|
||||
<span class="n">security_descriptor</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_security_descriptor</span><span class="p">,</span> <span class="n">set_security_descriptor</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="PipeConnection.close"><a class="viewcode-back" href="../../pipe.html#windows.pipe.PipeConnection.close">[docs]</a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Close the handle of the pipe"""</span>
|
||||
<div class="viewcode-block" id="PipeConnection.close">
|
||||
<a class="viewcode-back" href="../../pipe.html#windows.pipe.PipeConnection.close">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Close the handle of the pipe"""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="kc">None</span></div>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="fm">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span>
|
||||
|
||||
@@ -150,42 +173,48 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s2">"""<</span><span class="si">{0}</span><span class="s2"> name="</span><span class="si">{1}</span><span class="s2">" server=</span><span class="si">{2}</span><span class="s2">>"""</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">server</span><span class="p">)</span></div>
|
||||
<span class="k">return</span> <span class="n">urepr_encode</span><span class="p">(</span><span class="sa">u</span><span class="s2">"""<</span><span class="si">{0}</span><span class="s2"> name="</span><span class="si">{1}</span><span class="s2">" server=</span><span class="si">{2}</span><span class="s2">>"""</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">server</span><span class="p">))</span></div>
|
||||
|
||||
|
||||
|
||||
<span class="n">connect</span> <span class="o">=</span> <span class="n">PipeConnection</span><span class="o">.</span><span class="n">connect</span>
|
||||
<span class="n">create</span> <span class="o">=</span> <span class="n">PipeConnection</span><span class="o">.</span><span class="n">create</span>
|
||||
|
||||
<div class="viewcode-block" id="send_object"><a class="viewcode-back" href="../../pipe.html#windows.pipe.send_object">[docs]</a><span class="k">def</span> <span class="nf">send_object</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
|
||||
<span class="sd">"""Send `obj` on pipe ``addr``"""</span>
|
||||
<div class="viewcode-block" id="send_object">
|
||||
<a class="viewcode-back" href="../../pipe.html#windows.pipe.send_object">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">send_object</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Send `obj` on pipe ``addr``"""</span>
|
||||
<span class="k">with</span> <span class="n">connect</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span> <span class="k">as</span> <span class="n">np</span><span class="p">:</span>
|
||||
<span class="n">np</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">None</span></div>
|
||||
|
||||
<div class="viewcode-block" id="recv_object"><a class="viewcode-back" href="../../pipe.html#windows.pipe.recv_object">[docs]</a><span class="k">def</span> <span class="nf">recv_object</span><span class="p">(</span><span class="n">addr</span><span class="p">):</span>
|
||||
<span class="sd">"""Receive an object from pipe ``addr``"""</span>
|
||||
|
||||
<div class="viewcode-block" id="recv_object">
|
||||
<a class="viewcode-back" href="../../pipe.html#windows.pipe.recv_object">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">recv_object</span><span class="p">(</span><span class="n">addr</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Receive an object from pipe ``addr``"""</span>
|
||||
<span class="k">with</span> <span class="n">create</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span> <span class="k">as</span> <span class="n">np</span><span class="p">:</span>
|
||||
<span class="n">np</span><span class="o">.</span><span class="n">wait_connection</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">recv</span><span class="p">()</span></div>
|
||||
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></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>
|
||||
<search id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||||
<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>
|
||||
</search>
|
||||
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
@@ -199,13 +228,14 @@
|
||||
<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.6 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 1.0.0 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">windows.pipe</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
|
||||
© Copyright 2015-2020, Clement Rouault.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user