Skip to content

Commit 93540dd

Browse files
authored
Merge pull request #56 from hakril/io_ctypes_generation
Added IO definitions + ability to use CTL_CODE() macro in windef
2 parents ee409e4 + 6bf8f77 commit 93540dd

File tree

17 files changed

+16213
-14055
lines changed

17 files changed

+16213
-14055
lines changed

ctypes_generation/definitions/defines/ioctl.txt

Lines changed: 359 additions & 0 deletions
Large diffs are not rendered by default.

ctypes_generation/definitions/defines/template.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,15 @@
55
bitness = int(bits[:2])
66

77
NATIVE_WORD_MAX_VALUE = 0xffffffff if bitness == 32 else 0xffffffffffffffff
8+
9+
# python implementation of CTL_CODE (macro to compute IOCTL code from param.
10+
# The python implem simplify the code parsing define (macro) by not handling macro functions
11+
12+
# Original MACRO:
13+
#
14+
# #define CTL_CODE( DeviceType, Function, Method, Access ) ( \
15+
# ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
16+
# )
17+
18+
def CTL_CODE(DeviceType, Function, Method, Access):
19+
return (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))

ctypes_generation/definitions/functions/file.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,4 @@ BOOL LockFileEx(
8787
[in] DWORD nNumberOfBytesToLockLow,
8888
[in] DWORD nNumberOfBytesToLockHigh,
8989
[in, out] LPOVERLAPPED lpOverlapped
90-
);
90+
);
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
BOOL GetOverlappedResult(
2+
[in] HANDLE hFile,
3+
[in] LPOVERLAPPED lpOverlapped,
4+
[out] LPDWORD lpNumberOfBytesTransferred,
5+
[in] BOOL bWait
6+
);
7+
8+
HANDLE CreateIoCompletionPort(
9+
[in] HANDLE FileHandle,
10+
[in, optional] HANDLE ExistingCompletionPort,
11+
[in] ULONG_PTR CompletionKey,
12+
[in] DWORD NumberOfConcurrentThreads
13+
);
14+
15+
BOOL GetQueuedCompletionStatus(
16+
[in] HANDLE CompletionPort,
17+
LPDWORD lpNumberOfBytesTransferred,
18+
[out] PULONG_PTR lpCompletionKey,
19+
[out] LPOVERLAPPED *lpOverlapped,
20+
[in] DWORD dwMilliseconds
21+
);
22+
23+
BOOL GetQueuedCompletionStatusEx(
24+
[in] HANDLE CompletionPort,
25+
[out] LPOVERLAPPED_ENTRY lpCompletionPortEntries,
26+
[in] ULONG ulCount,
27+
[out] PULONG ulNumEntriesRemoved,
28+
[in] DWORD dwMilliseconds,
29+
[in] BOOL fAlertable
30+
);
31+
32+
BOOL PostQueuedCompletionStatus(
33+
[in] HANDLE CompletionPort,
34+
[in] DWORD dwNumberOfBytesTransferred,
35+
[in] ULONG_PTR dwCompletionKey,
36+
[in, optional] LPOVERLAPPED lpOverlapped
37+
);
38+
39+
BOOL CancelIo(
40+
[in] HANDLE hFile
41+
);
42+
43+
BOOL CancelIoEx(
44+
[in] HANDLE hFile,
45+
[in, optional] LPOVERLAPPED lpOverlapped
46+
);
47+
48+
BOOL CancelSynchronousIo(
49+
[in] HANDLE hThread
50+
);
51+

ctypes_generation/definitions/simple_types.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ PDWORD = POINTER(DWORD)
1616
LPDWORD = POINTER(DWORD)
1717
LPBYTE = POINTER(BYTE)
1818
ULONG_PTR = PVOID
19+
PULONG_PTR = POINTER(ULONG_PTR)
1920
LONG_PTR = PVOID
2021
DWORD_PTR = ULONG_PTR
2122
PDWORD_PTR = POINTER(DWORD_PTR)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
typedef struct _OVERLAPPED {
2+
ULONG_PTR Internal;
3+
ULONG_PTR InternalHigh;
4+
union {
5+
struct {
6+
DWORD Offset;
7+
DWORD OffsetHigh;
8+
} _ANON_OVERLAPPED_DUMMYSTRUCTNAME;
9+
PVOID Pointer;
10+
} _ANON_OVERLAPPED_DUMMYUNIONNAME;
11+
HANDLE hEvent;
12+
} OVERLAPPED, *LPOVERLAPPED;
13+
14+
typedef struct _OVERLAPPED_ENTRY {
15+
ULONG_PTR lpCompletionKey;
16+
LPOVERLAPPED lpOverlapped;
17+
ULONG_PTR Internal;
18+
DWORD dwNumberOfBytesTransferred;
19+
} OVERLAPPED_ENTRY, *LPOVERLAPPED_ENTRY;
Lines changed: 266 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,266 @@
1+
typedef struct _IMAGE_FILE_HEADER {
2+
WORD Machine;
3+
WORD NumberOfSections;
4+
DWORD TimeDateStamp;
5+
DWORD PointerToSymbolTable;
6+
DWORD NumberOfSymbols;
7+
WORD SizeOfOptionalHeader;
8+
WORD Characteristics;
9+
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
10+
11+
typedef struct _IMAGE_DATA_DIRECTORY {
12+
DWORD VirtualAddress;
13+
DWORD Size;
14+
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
15+
16+
17+
typedef struct _IMAGE_SECTION_HEADER {
18+
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
19+
DWORD VirtualSize;
20+
DWORD VirtualAddress;
21+
DWORD SizeOfRawData;
22+
DWORD PointerToRawData;
23+
DWORD PointerToRelocations;
24+
DWORD PointerToLinenumbers;
25+
WORD NumberOfRelocations;
26+
WORD NumberOfLinenumbers;
27+
DWORD Characteristics;
28+
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
29+
30+
typedef struct _IMAGE_OPTIONAL_HEADER64 {
31+
WORD Magic;
32+
BYTE MajorLinkerVersion;
33+
BYTE MinorLinkerVersion;
34+
DWORD SizeOfCode;
35+
DWORD SizeOfInitializedData;
36+
DWORD SizeOfUninitializedData;
37+
DWORD AddressOfEntryPoint;
38+
DWORD BaseOfCode;
39+
ULONGLONG ImageBase;
40+
DWORD SectionAlignment;
41+
DWORD FileAlignment;
42+
WORD MajorOperatingSystemVersion;
43+
WORD MinorOperatingSystemVersion;
44+
WORD MajorImageVersion;
45+
WORD MinorImageVersion;
46+
WORD MajorSubsystemVersion;
47+
WORD MinorSubsystemVersion;
48+
DWORD Win32VersionValue;
49+
DWORD SizeOfImage;
50+
DWORD SizeOfHeaders;
51+
DWORD CheckSum;
52+
WORD Subsystem;
53+
WORD DllCharacteristics;
54+
ULONGLONG SizeOfStackReserve;
55+
ULONGLONG SizeOfStackCommit;
56+
ULONGLONG SizeOfHeapReserve;
57+
ULONGLONG SizeOfHeapCommit;
58+
DWORD LoaderFlags;
59+
DWORD NumberOfRvaAndSizes;
60+
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
61+
} IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64;
62+
63+
64+
typedef struct _IMAGE_OPTIONAL_HEADER {
65+
WORD Magic;
66+
BYTE MajorLinkerVersion;
67+
BYTE MinorLinkerVersion;
68+
DWORD SizeOfCode;
69+
DWORD SizeOfInitializedData;
70+
DWORD SizeOfUninitializedData;
71+
DWORD AddressOfEntryPoint;
72+
DWORD BaseOfCode;
73+
DWORD BaseOfData;
74+
DWORD ImageBase;
75+
DWORD SectionAlignment;
76+
DWORD FileAlignment;
77+
WORD MajorOperatingSystemVersion;
78+
WORD MinorOperatingSystemVersion;
79+
WORD MajorImageVersion;
80+
WORD MinorImageVersion;
81+
WORD MajorSubsystemVersion;
82+
WORD MinorSubsystemVersion;
83+
DWORD Win32VersionValue;
84+
DWORD SizeOfImage;
85+
DWORD SizeOfHeaders;
86+
DWORD CheckSum;
87+
WORD Subsystem;
88+
WORD DllCharacteristics;
89+
DWORD SizeOfStackReserve;
90+
DWORD SizeOfStackCommit;
91+
DWORD SizeOfHeapReserve;
92+
DWORD SizeOfHeapCommit;
93+
DWORD LoaderFlags;
94+
DWORD NumberOfRvaAndSizes;
95+
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
96+
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
97+
98+
typedef struct _IMAGE_NT_HEADERS64 {
99+
DWORD Signature;
100+
IMAGE_FILE_HEADER FileHeader;
101+
IMAGE_OPTIONAL_HEADER64 OptionalHeader;
102+
} IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64;
103+
104+
typedef struct _IMAGE_NT_HEADERS {
105+
DWORD Signature;
106+
IMAGE_FILE_HEADER FileHeader;
107+
IMAGE_OPTIONAL_HEADER32 OptionalHeader;
108+
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
109+
110+
typedef struct _IMAGE_IMPORT_DESCRIPTOR {
111+
DWORD OriginalFirstThunk;
112+
DWORD TimeDateStamp;
113+
DWORD ForwarderChain;
114+
DWORD Name;
115+
DWORD FirstThunk;
116+
} IMAGE_IMPORT_DESCRIPTOR, *PIMAGE_IMPORT_DESCRIPTOR;
117+
118+
typedef struct _IMAGE_IMPORT_BY_NAME {
119+
WORD Hint;
120+
BYTE Name[1];
121+
} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME;
122+
123+
typedef struct _IMAGE_EXPORT_DIRECTORY {
124+
DWORD Characteristics;
125+
DWORD TimeDateStamp;
126+
WORD MajorVersion;
127+
WORD MinorVersion;
128+
DWORD Name;
129+
DWORD Base;
130+
DWORD NumberOfFunctions;
131+
DWORD NumberOfNames;
132+
DWORD AddressOfFunctions;
133+
DWORD AddressOfNames;
134+
DWORD AddressOfNameOrdinals;
135+
} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
136+
137+
typedef struct _IMAGE_DEBUG_DIRECTORY {
138+
DWORD Characteristics;
139+
DWORD TimeDateStamp;
140+
WORD MajorVersion;
141+
WORD MinorVersion;
142+
DWORD Type;
143+
DWORD SizeOfData;
144+
DWORD AddressOfRawData;
145+
DWORD PointerToRawData;
146+
} IMAGE_DEBUG_DIRECTORY, *PIMAGE_DEBUG_DIRECTORY;
147+
148+
typedef struct _IMAGE_BASE_RELOCATION {
149+
DWORD VirtualAddress;
150+
DWORD SizeOfBlock;
151+
} IMAGE_BASE_RELOCATION, *PIMAGE_BASE_RELOCATION;
152+
153+
154+
// not found on MSDN : from symbols
155+
typedef struct _IMAGE_LOAD_CONFIG_CODE_INTEGRITY {
156+
WORD Flags;
157+
WORD Catalog;
158+
DWORD CatalogOffset;
159+
DWORD Reserved;
160+
} IMAGE_LOAD_CONFIG_CODE_INTEGRITY, *PIMAGE_LOAD_CONFIG_CODE_INTEGRITY;
161+
162+
163+
typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY32 {
164+
DWORD Size;
165+
DWORD TimeDateStamp;
166+
WORD MajorVersion;
167+
WORD MinorVersion;
168+
DWORD GlobalFlagsClear;
169+
DWORD GlobalFlagsSet;
170+
DWORD CriticalSectionDefaultTimeout;
171+
DWORD DeCommitFreeBlockThreshold;
172+
DWORD DeCommitTotalFreeThreshold;
173+
DWORD LockPrefixTable;
174+
DWORD MaximumAllocationSize;
175+
DWORD VirtualMemoryThreshold;
176+
DWORD ProcessHeapFlags;
177+
DWORD ProcessAffinityMask;
178+
WORD CSDVersion;
179+
WORD DependentLoadFlags;
180+
DWORD EditList;
181+
DWORD SecurityCookie;
182+
DWORD SEHandlerTable;
183+
DWORD SEHandlerCount;
184+
DWORD GuardCFCheckFunctionPointer;
185+
DWORD GuardCFDispatchFunctionPointer;
186+
DWORD GuardCFFunctionTable;
187+
DWORD GuardCFFunctionCount;
188+
DWORD GuardFlags;
189+
IMAGE_LOAD_CONFIG_CODE_INTEGRITY CodeIntegrity;
190+
DWORD GuardAddressTakenIatEntryTable;
191+
DWORD GuardAddressTakenIatEntryCount;
192+
DWORD GuardLongJumpTargetTable;
193+
DWORD GuardLongJumpTargetCount;
194+
DWORD DynamicValueRelocTable;
195+
DWORD CHPEMetadataPointer;
196+
DWORD GuardRFFailureRoutine;
197+
DWORD GuardRFFailureRoutineFunctionPointer;
198+
DWORD DynamicValueRelocTableOffset;
199+
WORD DynamicValueRelocTableSection;
200+
WORD Reserved2;
201+
DWORD GuardRFVerifyStackPointerFunctionPointer;
202+
DWORD HotPatchTableOffset;
203+
DWORD Reserved3;
204+
DWORD EnclaveConfigurationPointer;
205+
DWORD VolatileMetadataPointer;
206+
DWORD GuardEHContinuationTable;
207+
DWORD GuardEHContinuationCount;
208+
DWORD GuardXFGCheckFunctionPointer;
209+
DWORD GuardXFGDispatchFunctionPointer;
210+
DWORD GuardXFGTableDispatchFunctionPointer;
211+
DWORD CastGuardOsDeterminedFailureMode;
212+
DWORD GuardMemcpyFunctionPointer;
213+
} IMAGE_LOAD_CONFIG_DIRECTORY32, *PIMAGE_LOAD_CONFIG_DIRECTORY32;
214+
215+
216+
typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY64 {
217+
DWORD Size;
218+
DWORD TimeDateStamp;
219+
WORD MajorVersion;
220+
WORD MinorVersion;
221+
DWORD GlobalFlagsClear;
222+
DWORD GlobalFlagsSet;
223+
DWORD CriticalSectionDefaultTimeout;
224+
ULONGLONG DeCommitFreeBlockThreshold;
225+
ULONGLONG DeCommitTotalFreeThreshold;
226+
ULONGLONG LockPrefixTable;
227+
ULONGLONG MaximumAllocationSize;
228+
ULONGLONG VirtualMemoryThreshold;
229+
ULONGLONG ProcessAffinityMask;
230+
DWORD ProcessHeapFlags;
231+
WORD CSDVersion;
232+
WORD DependentLoadFlags;
233+
ULONGLONG EditList;
234+
ULONGLONG SecurityCookie;
235+
ULONGLONG SEHandlerTable;
236+
ULONGLONG SEHandlerCount;
237+
ULONGLONG GuardCFCheckFunctionPointer;
238+
ULONGLONG GuardCFDispatchFunctionPointer;
239+
ULONGLONG GuardCFFunctionTable;
240+
ULONGLONG GuardCFFunctionCount;
241+
DWORD GuardFlags;
242+
IMAGE_LOAD_CONFIG_CODE_INTEGRITY CodeIntegrity;
243+
ULONGLONG GuardAddressTakenIatEntryTable;
244+
ULONGLONG GuardAddressTakenIatEntryCount;
245+
ULONGLONG GuardLongJumpTargetTable;
246+
ULONGLONG GuardLongJumpTargetCount;
247+
ULONGLONG DynamicValueRelocTable;
248+
ULONGLONG CHPEMetadataPointer;
249+
ULONGLONG GuardRFFailureRoutine;
250+
ULONGLONG GuardRFFailureRoutineFunctionPointer;
251+
DWORD DynamicValueRelocTableOffset;
252+
WORD DynamicValueRelocTableSection;
253+
WORD Reserved2;
254+
ULONGLONG GuardRFVerifyStackPointerFunctionPointer;
255+
DWORD HotPatchTableOffset;
256+
DWORD Reserved3;
257+
ULONGLONG EnclaveConfigurationPointer;
258+
ULONGLONG VolatileMetadataPointer;
259+
ULONGLONG GuardEHContinuationTable;
260+
ULONGLONG GuardEHContinuationCount;
261+
ULONGLONG GuardXFGCheckFunctionPointer;
262+
ULONGLONG GuardXFGDispatchFunctionPointer;
263+
ULONGLONG GuardXFGTableDispatchFunctionPointer;
264+
ULONGLONG CastGuardOsDeterminedFailureMode;
265+
ULONGLONG GuardMemcpyFunctionPointer;
266+
} IMAGE_LOAD_CONFIG_DIRECTORY64, *PIMAGE_LOAD_CONFIG_DIRECTORY64;

0 commit comments

Comments
 (0)