Skip to content

Commit 11588db

Browse files
committed
Consolidate C definitions
Conoslidate the C definitions of the cffi backend into a single module to avoid redefinitions
1 parent 9377d30 commit 11588db

File tree

8 files changed

+114
-119
lines changed

8 files changed

+114
-119
lines changed

win32ctypes/core/cffi/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
# LICENSE.txt
77
#
88
import logging
9+
# Initialize the ffi cdef
10+
from . import _cdefinitions # noqa
911

1012
logger = logging.getLogger(__name__)
1113
logger.debug('Loaded cffi backend')

win32ctypes/core/cffi/_authentication.py

Lines changed: 2 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,16 @@
11
#
2-
# (C) Copyright 2015 Enthought, Inc., Austin, TX
2+
# (C) Copyright 2015-2024 Enthought, Inc., Austin, TX
33
# All right reserved.
44
#
55
# This file is open source software distributed according to the terms in
66
# LICENSE.txt
77
#
88
from win32ctypes.core.compat import is_text
99
from ._util import ffi, check_false, dlls
10+
from ._winbase import FILETIME
1011
from ._nl_support import _GetACP
1112
from ._common import _PyBytes_FromStringAndSize
1213

13-
ffi.cdef("""
14-
15-
typedef struct _FILETIME {
16-
DWORD dwLowDateTime;
17-
DWORD dwHighDateTime;
18-
} FILETIME, *PFILETIME;
19-
20-
typedef struct _CREDENTIAL_ATTRIBUTE {
21-
LPWSTR Keyword;
22-
DWORD Flags;
23-
DWORD ValueSize;
24-
LPBYTE Value;
25-
} CREDENTIAL_ATTRIBUTE, *PCREDENTIAL_ATTRIBUTE;
26-
27-
typedef struct _CREDENTIAL {
28-
DWORD Flags;
29-
DWORD Type;
30-
LPWSTR TargetName;
31-
LPWSTR Comment;
32-
FILETIME LastWritten;
33-
DWORD CredentialBlobSize;
34-
LPBYTE CredentialBlob;
35-
DWORD Persist;
36-
DWORD AttributeCount;
37-
PCREDENTIAL_ATTRIBUTE Attributes;
38-
LPWSTR TargetAlias;
39-
LPWSTR UserName;
40-
} CREDENTIAL, *PCREDENTIAL;
41-
42-
43-
BOOL WINAPI CredReadW(
44-
LPCWSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIAL *Credential);
45-
BOOL WINAPI CredWriteW(PCREDENTIAL Credential, DWORD);
46-
VOID WINAPI CredFree(PVOID Buffer);
47-
BOOL WINAPI CredDeleteW(LPCWSTR TargetName, DWORD Type, DWORD Flags);
48-
BOOL WINAPI CredEnumerateW(
49-
LPCWSTR Filter, DWORD Flags, DWORD *Count, PCREDENTIAL **Credential);
50-
""")
51-
5214

5315
def make_unicode(password):
5416
""" Convert the input string to unicode.
@@ -61,20 +23,6 @@ def make_unicode(password):
6123
return password.decode(encoding=str(code_page), errors='strict')
6224

6325

64-
class _FILETIME(object):
65-
66-
def __call__(self):
67-
return ffi.new("PFILETIME")[0]
68-
69-
@classmethod
70-
def fromdict(cls, filetime):
71-
factory = cls()
72-
c_filetime = factory()
73-
c_filetime.dwLowDateTime = filetime['dwLowDateTime']
74-
c_filetime.dwHighDateTime = filetime['dwHighDateTime']
75-
return c_filetime
76-
77-
7826
class _CREDENTIAL(object):
7927

8028
def __call__(self):
@@ -147,11 +95,6 @@ def fromdict(cls, attribute, flags=0):
14795

14896
CREDENTIAL = _CREDENTIAL()
14997
CREDENTIAL_ATTRIBUTE = _CREDENTIAL_ATTRIBUTE()
150-
FILETIME = _FILETIME()
151-
152-
153-
def PFILETIME(value=None):
154-
return ffi.new("PFILETIME", ffi.NULL if value is None else value)
15598

15699

157100
def PCREDENTIAL(value=None):
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
#
2+
# (C) Copyright 2024 Enthought, Inc., Austin, TX
3+
# All right reserved.
4+
#
5+
# This file is open source software distributed according to the terms in
6+
# LICENSE.txt
7+
#
8+
" C definitions for the ffi modules "
9+
10+
from ._util import ffi
11+
12+
# _dll module cdefs
13+
ffi.cdef("""
14+
15+
HMODULE WINAPI LoadLibraryExW(LPCTSTR lpFileName, HANDLE hFile, DWORD dwFlags);
16+
BOOL WINAPI FreeLibrary(HMODULE hModule);
17+
18+
""")
19+
20+
# _winbase module cdefs
21+
ffi.cdef("""
22+
23+
typedef struct _FILETIME {
24+
DWORD dwLowDateTime;
25+
DWORD dwHighDateTime;
26+
} FILETIME, *PFILETIME, *LPFILETIME;
27+
28+
""")
29+
30+
# _authentication module cdefs
31+
ffi.cdef("""
32+
typedef struct _CREDENTIAL_ATTRIBUTE {
33+
LPWSTR Keyword;
34+
DWORD Flags;
35+
DWORD ValueSize;
36+
LPBYTE Value;
37+
} CREDENTIAL_ATTRIBUTE, *PCREDENTIAL_ATTRIBUTE;
38+
39+
typedef struct _CREDENTIAL {
40+
DWORD Flags;
41+
DWORD Type;
42+
LPWSTR TargetName;
43+
LPWSTR Comment;
44+
FILETIME LastWritten;
45+
DWORD CredentialBlobSize;
46+
LPBYTE CredentialBlob;
47+
DWORD Persist;
48+
DWORD AttributeCount;
49+
PCREDENTIAL_ATTRIBUTE Attributes;
50+
LPWSTR TargetAlias;
51+
LPWSTR UserName;
52+
} CREDENTIAL, *PCREDENTIAL;
53+
54+
55+
BOOL WINAPI CredReadW(
56+
LPCWSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIAL *Credential);
57+
BOOL WINAPI CredWriteW(PCREDENTIAL Credential, DWORD);
58+
VOID WINAPI CredFree(PVOID Buffer);
59+
BOOL WINAPI CredDeleteW(LPCWSTR TargetName, DWORD Type, DWORD Flags);
60+
BOOL WINAPI CredEnumerateW(
61+
LPCWSTR Filter, DWORD Flags, DWORD *Count, PCREDENTIAL **Credential);
62+
""")
63+
64+
65+
# _nt_support module cdefs
66+
ffi.cdef("""
67+
68+
UINT WINAPI GetACP(void);
69+
70+
""")
71+
72+
73+
# _resource module cdefs
74+
ffi.cdef("""
75+
76+
typedef int WINBOOL;
77+
typedef WINBOOL (__stdcall *ENUMRESTYPEPROC) (HANDLE, LPTSTR, LONG_PTR);
78+
typedef WINBOOL (__stdcall *ENUMRESNAMEPROC) (HANDLE, LPCTSTR, LPTSTR, LONG_PTR);
79+
typedef WINBOOL (__stdcall *ENUMRESLANGPROC) (HANDLE, LPCTSTR, LPCTSTR, WORD, LONG_PTR);
80+
81+
BOOL WINAPI EnumResourceTypesW(
82+
HMODULE hModule, ENUMRESTYPEPROC lpEnumFunc, LONG_PTR lParam);
83+
BOOL WINAPI EnumResourceNamesW(
84+
HMODULE hModule, LPCTSTR lpszType,
85+
ENUMRESNAMEPROC lpEnumFunc, LONG_PTR lParam);
86+
BOOL WINAPI EnumResourceLanguagesW(
87+
HMODULE hModule, LPCTSTR lpType,
88+
LPCTSTR lpName, ENUMRESLANGPROC lpEnumFunc, LONG_PTR lParam);
89+
HRSRC WINAPI FindResourceExW(
90+
HMODULE hModule, LPCTSTR lpType, LPCTSTR lpName, WORD wLanguage);
91+
DWORD WINAPI SizeofResource(HMODULE hModule, HRSRC hResInfo);
92+
HGLOBAL WINAPI LoadResource(HMODULE hModule, HRSRC hResInfo);
93+
LPVOID WINAPI LockResource(HGLOBAL hResData);
94+
95+
HANDLE WINAPI BeginUpdateResourceW(LPCTSTR pFileName, BOOL bDeleteExistingResources);
96+
BOOL WINAPI EndUpdateResourceW(HANDLE hUpdate, BOOL fDiscard);
97+
BOOL WINAPI UpdateResourceW(HANDLE hUpdate, LPCTSTR lpType, LPCTSTR lpName, WORD wLanguage, LPVOID lpData, DWORD cbData);
98+
99+
""") # noqa
100+
101+
102+
# _system_information module cdefs
103+
ffi.cdef("""
104+
105+
BOOL WINAPI Beep(DWORD dwFreq, DWORD dwDuration);
106+
UINT WINAPI GetWindowsDirectoryW(LPTSTR lpBuffer, UINT uSize);
107+
UINT WINAPI GetSystemDirectoryW(LPTSTR lpBuffer, UINT uSize);
108+
DWORD WINAPI GetTickCount(void);
109+
110+
""")

win32ctypes/core/cffi/_dll.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,6 @@
88
from ._util import ffi, check_null, check_false, dlls, HMODULE, PVOID
99

1010

11-
ffi.cdef("""
12-
13-
HMODULE WINAPI LoadLibraryExW(LPCTSTR lpFileName, HANDLE hFile, DWORD dwFlags);
14-
BOOL WINAPI FreeLibrary(HMODULE hModule);
15-
16-
""")
17-
18-
1911
def _LoadLibraryEx(lpFilename, hFile, dwFlags):
2012
result = check_null(
2113
dlls.kernel32.LoadLibraryExW(

win32ctypes/core/cffi/_nl_support.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,6 @@
77
#
88
from ._util import ffi, dlls
99

10-
ffi.cdef("""
11-
12-
UINT WINAPI GetACP(void);
13-
14-
""")
15-
1610

1711
def _GetACP():
1812
return dlls.kernel32.GetACP()

win32ctypes/core/cffi/_resource.py

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,34 +10,6 @@
1010
PVOID, RESOURCE, resource, dlls)
1111

1212

13-
ffi.cdef("""
14-
15-
typedef int WINBOOL;
16-
typedef WINBOOL (__stdcall *ENUMRESTYPEPROC) (HANDLE, LPTSTR, LONG_PTR);
17-
typedef WINBOOL (__stdcall *ENUMRESNAMEPROC) (HANDLE, LPCTSTR, LPTSTR, LONG_PTR);
18-
typedef WINBOOL (__stdcall *ENUMRESLANGPROC) (HANDLE, LPCTSTR, LPCTSTR, WORD, LONG_PTR);
19-
20-
BOOL WINAPI EnumResourceTypesW(
21-
HMODULE hModule, ENUMRESTYPEPROC lpEnumFunc, LONG_PTR lParam);
22-
BOOL WINAPI EnumResourceNamesW(
23-
HMODULE hModule, LPCTSTR lpszType,
24-
ENUMRESNAMEPROC lpEnumFunc, LONG_PTR lParam);
25-
BOOL WINAPI EnumResourceLanguagesW(
26-
HMODULE hModule, LPCTSTR lpType,
27-
LPCTSTR lpName, ENUMRESLANGPROC lpEnumFunc, LONG_PTR lParam);
28-
HRSRC WINAPI FindResourceExW(
29-
HMODULE hModule, LPCTSTR lpType, LPCTSTR lpName, WORD wLanguage);
30-
DWORD WINAPI SizeofResource(HMODULE hModule, HRSRC hResInfo);
31-
HGLOBAL WINAPI LoadResource(HMODULE hModule, HRSRC hResInfo);
32-
LPVOID WINAPI LockResource(HGLOBAL hResData);
33-
34-
HANDLE WINAPI BeginUpdateResourceW(LPCTSTR pFileName, BOOL bDeleteExistingResources);
35-
BOOL WINAPI EndUpdateResourceW(HANDLE hUpdate, BOOL fDiscard);
36-
BOOL WINAPI UpdateResourceW(HANDLE hUpdate, LPCTSTR lpType, LPCTSTR lpName, WORD wLanguage, LPVOID lpData, DWORD cbData);
37-
38-
""") # noqa
39-
40-
4113
def ENUMRESTYPEPROC(callback):
4214
def wrapped(hModule, lpszType, lParam):
4315
return callback(hModule, resource(lpszType), lParam)

win32ctypes/core/cffi/_system_information.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,6 @@
1111
MAX_PATH = 260
1212
MAX_PATH_BUF = f'wchar_t[{MAX_PATH}]'
1313

14-
ffi.cdef("""
15-
16-
BOOL WINAPI Beep(DWORD dwFreq, DWORD dwDuration);
17-
UINT WINAPI GetWindowsDirectoryW(LPTSTR lpBuffer, UINT uSize);
18-
UINT WINAPI GetSystemDirectoryW(LPTSTR lpBuffer, UINT uSize);
19-
DWORD WINAPI GetTickCount(void);
20-
21-
""")
22-
2314

2415
def _GetWindowsDirectory():
2516
buffer = ffi.new(MAX_PATH_BUF)

win32ctypes/core/cffi/_winbase.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,6 @@
88
import enum
99
from ._util import ffi
1010

11-
ffi.cdef("""
12-
13-
typedef struct _FILETIME {
14-
DWORD dwLowDateTime;
15-
DWORD dwHighDateTime;
16-
} FILETIME, *PFILETIME, *LPFILETIME;
17-
18-
""")
19-
2011

2112
class _FILETIME(object):
2213

0 commit comments

Comments
 (0)