Skip to content

Commit

Permalink
Consolidate C definitions
Browse files Browse the repository at this point in the history
Conoslidate the C definitions of the cffi backend into a single
module to avoid redefinitions
  • Loading branch information
itziakos committed Sep 14, 2024
1 parent 9377d30 commit 11588db
Show file tree
Hide file tree
Showing 8 changed files with 114 additions and 119 deletions.
2 changes: 2 additions & 0 deletions win32ctypes/core/cffi/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
# LICENSE.txt
#
import logging
# Initialize the ffi cdef
from . import _cdefinitions # noqa

logger = logging.getLogger(__name__)
logger.debug('Loaded cffi backend')
61 changes: 2 additions & 59 deletions win32ctypes/core/cffi/_authentication.py
Original file line number Diff line number Diff line change
@@ -1,54 +1,16 @@
#
# (C) Copyright 2015 Enthought, Inc., Austin, TX
# (C) Copyright 2015-2024 Enthought, Inc., Austin, TX
# All right reserved.
#
# This file is open source software distributed according to the terms in
# LICENSE.txt
#
from win32ctypes.core.compat import is_text
from ._util import ffi, check_false, dlls
from ._winbase import FILETIME
from ._nl_support import _GetACP
from ._common import _PyBytes_FromStringAndSize

ffi.cdef("""
typedef struct _FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME, *PFILETIME;
typedef struct _CREDENTIAL_ATTRIBUTE {
LPWSTR Keyword;
DWORD Flags;
DWORD ValueSize;
LPBYTE Value;
} CREDENTIAL_ATTRIBUTE, *PCREDENTIAL_ATTRIBUTE;
typedef struct _CREDENTIAL {
DWORD Flags;
DWORD Type;
LPWSTR TargetName;
LPWSTR Comment;
FILETIME LastWritten;
DWORD CredentialBlobSize;
LPBYTE CredentialBlob;
DWORD Persist;
DWORD AttributeCount;
PCREDENTIAL_ATTRIBUTE Attributes;
LPWSTR TargetAlias;
LPWSTR UserName;
} CREDENTIAL, *PCREDENTIAL;
BOOL WINAPI CredReadW(
LPCWSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIAL *Credential);
BOOL WINAPI CredWriteW(PCREDENTIAL Credential, DWORD);
VOID WINAPI CredFree(PVOID Buffer);
BOOL WINAPI CredDeleteW(LPCWSTR TargetName, DWORD Type, DWORD Flags);
BOOL WINAPI CredEnumerateW(
LPCWSTR Filter, DWORD Flags, DWORD *Count, PCREDENTIAL **Credential);
""")


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


class _FILETIME(object):

def __call__(self):
return ffi.new("PFILETIME")[0]

@classmethod
def fromdict(cls, filetime):
factory = cls()
c_filetime = factory()
c_filetime.dwLowDateTime = filetime['dwLowDateTime']
c_filetime.dwHighDateTime = filetime['dwHighDateTime']
return c_filetime


class _CREDENTIAL(object):

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

CREDENTIAL = _CREDENTIAL()
CREDENTIAL_ATTRIBUTE = _CREDENTIAL_ATTRIBUTE()
FILETIME = _FILETIME()


def PFILETIME(value=None):
return ffi.new("PFILETIME", ffi.NULL if value is None else value)


def PCREDENTIAL(value=None):
Expand Down
110 changes: 110 additions & 0 deletions win32ctypes/core/cffi/_cdefinitions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
#
# (C) Copyright 2024 Enthought, Inc., Austin, TX
# All right reserved.
#
# This file is open source software distributed according to the terms in
# LICENSE.txt
#
" C definitions for the ffi modules "

from ._util import ffi

# _dll module cdefs
ffi.cdef("""
HMODULE WINAPI LoadLibraryExW(LPCTSTR lpFileName, HANDLE hFile, DWORD dwFlags);
BOOL WINAPI FreeLibrary(HMODULE hModule);
""")

# _winbase module cdefs
ffi.cdef("""
typedef struct _FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME, *PFILETIME, *LPFILETIME;
""")

# _authentication module cdefs
ffi.cdef("""
typedef struct _CREDENTIAL_ATTRIBUTE {
LPWSTR Keyword;
DWORD Flags;
DWORD ValueSize;
LPBYTE Value;
} CREDENTIAL_ATTRIBUTE, *PCREDENTIAL_ATTRIBUTE;
typedef struct _CREDENTIAL {
DWORD Flags;
DWORD Type;
LPWSTR TargetName;
LPWSTR Comment;
FILETIME LastWritten;
DWORD CredentialBlobSize;
LPBYTE CredentialBlob;
DWORD Persist;
DWORD AttributeCount;
PCREDENTIAL_ATTRIBUTE Attributes;
LPWSTR TargetAlias;
LPWSTR UserName;
} CREDENTIAL, *PCREDENTIAL;
BOOL WINAPI CredReadW(
LPCWSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIAL *Credential);
BOOL WINAPI CredWriteW(PCREDENTIAL Credential, DWORD);
VOID WINAPI CredFree(PVOID Buffer);
BOOL WINAPI CredDeleteW(LPCWSTR TargetName, DWORD Type, DWORD Flags);
BOOL WINAPI CredEnumerateW(
LPCWSTR Filter, DWORD Flags, DWORD *Count, PCREDENTIAL **Credential);
""")


# _nt_support module cdefs
ffi.cdef("""
UINT WINAPI GetACP(void);
""")


# _resource module cdefs
ffi.cdef("""
typedef int WINBOOL;
typedef WINBOOL (__stdcall *ENUMRESTYPEPROC) (HANDLE, LPTSTR, LONG_PTR);
typedef WINBOOL (__stdcall *ENUMRESNAMEPROC) (HANDLE, LPCTSTR, LPTSTR, LONG_PTR);
typedef WINBOOL (__stdcall *ENUMRESLANGPROC) (HANDLE, LPCTSTR, LPCTSTR, WORD, LONG_PTR);
BOOL WINAPI EnumResourceTypesW(
HMODULE hModule, ENUMRESTYPEPROC lpEnumFunc, LONG_PTR lParam);
BOOL WINAPI EnumResourceNamesW(
HMODULE hModule, LPCTSTR lpszType,
ENUMRESNAMEPROC lpEnumFunc, LONG_PTR lParam);
BOOL WINAPI EnumResourceLanguagesW(
HMODULE hModule, LPCTSTR lpType,
LPCTSTR lpName, ENUMRESLANGPROC lpEnumFunc, LONG_PTR lParam);
HRSRC WINAPI FindResourceExW(
HMODULE hModule, LPCTSTR lpType, LPCTSTR lpName, WORD wLanguage);
DWORD WINAPI SizeofResource(HMODULE hModule, HRSRC hResInfo);
HGLOBAL WINAPI LoadResource(HMODULE hModule, HRSRC hResInfo);
LPVOID WINAPI LockResource(HGLOBAL hResData);
HANDLE WINAPI BeginUpdateResourceW(LPCTSTR pFileName, BOOL bDeleteExistingResources);
BOOL WINAPI EndUpdateResourceW(HANDLE hUpdate, BOOL fDiscard);
BOOL WINAPI UpdateResourceW(HANDLE hUpdate, LPCTSTR lpType, LPCTSTR lpName, WORD wLanguage, LPVOID lpData, DWORD cbData);
""") # noqa


# _system_information module cdefs
ffi.cdef("""
BOOL WINAPI Beep(DWORD dwFreq, DWORD dwDuration);
UINT WINAPI GetWindowsDirectoryW(LPTSTR lpBuffer, UINT uSize);
UINT WINAPI GetSystemDirectoryW(LPTSTR lpBuffer, UINT uSize);
DWORD WINAPI GetTickCount(void);
""")
8 changes: 0 additions & 8 deletions win32ctypes/core/cffi/_dll.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,6 @@
from ._util import ffi, check_null, check_false, dlls, HMODULE, PVOID


ffi.cdef("""
HMODULE WINAPI LoadLibraryExW(LPCTSTR lpFileName, HANDLE hFile, DWORD dwFlags);
BOOL WINAPI FreeLibrary(HMODULE hModule);
""")


def _LoadLibraryEx(lpFilename, hFile, dwFlags):
result = check_null(
dlls.kernel32.LoadLibraryExW(
Expand Down
6 changes: 0 additions & 6 deletions win32ctypes/core/cffi/_nl_support.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,6 @@
#
from ._util import ffi, dlls

ffi.cdef("""
UINT WINAPI GetACP(void);
""")


def _GetACP():
return dlls.kernel32.GetACP()
28 changes: 0 additions & 28 deletions win32ctypes/core/cffi/_resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,34 +10,6 @@
PVOID, RESOURCE, resource, dlls)


ffi.cdef("""
typedef int WINBOOL;
typedef WINBOOL (__stdcall *ENUMRESTYPEPROC) (HANDLE, LPTSTR, LONG_PTR);
typedef WINBOOL (__stdcall *ENUMRESNAMEPROC) (HANDLE, LPCTSTR, LPTSTR, LONG_PTR);
typedef WINBOOL (__stdcall *ENUMRESLANGPROC) (HANDLE, LPCTSTR, LPCTSTR, WORD, LONG_PTR);
BOOL WINAPI EnumResourceTypesW(
HMODULE hModule, ENUMRESTYPEPROC lpEnumFunc, LONG_PTR lParam);
BOOL WINAPI EnumResourceNamesW(
HMODULE hModule, LPCTSTR lpszType,
ENUMRESNAMEPROC lpEnumFunc, LONG_PTR lParam);
BOOL WINAPI EnumResourceLanguagesW(
HMODULE hModule, LPCTSTR lpType,
LPCTSTR lpName, ENUMRESLANGPROC lpEnumFunc, LONG_PTR lParam);
HRSRC WINAPI FindResourceExW(
HMODULE hModule, LPCTSTR lpType, LPCTSTR lpName, WORD wLanguage);
DWORD WINAPI SizeofResource(HMODULE hModule, HRSRC hResInfo);
HGLOBAL WINAPI LoadResource(HMODULE hModule, HRSRC hResInfo);
LPVOID WINAPI LockResource(HGLOBAL hResData);
HANDLE WINAPI BeginUpdateResourceW(LPCTSTR pFileName, BOOL bDeleteExistingResources);
BOOL WINAPI EndUpdateResourceW(HANDLE hUpdate, BOOL fDiscard);
BOOL WINAPI UpdateResourceW(HANDLE hUpdate, LPCTSTR lpType, LPCTSTR lpName, WORD wLanguage, LPVOID lpData, DWORD cbData);
""") # noqa


def ENUMRESTYPEPROC(callback):
def wrapped(hModule, lpszType, lParam):
return callback(hModule, resource(lpszType), lParam)
Expand Down
9 changes: 0 additions & 9 deletions win32ctypes/core/cffi/_system_information.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,6 @@
MAX_PATH = 260
MAX_PATH_BUF = f'wchar_t[{MAX_PATH}]'

ffi.cdef("""
BOOL WINAPI Beep(DWORD dwFreq, DWORD dwDuration);
UINT WINAPI GetWindowsDirectoryW(LPTSTR lpBuffer, UINT uSize);
UINT WINAPI GetSystemDirectoryW(LPTSTR lpBuffer, UINT uSize);
DWORD WINAPI GetTickCount(void);
""")


def _GetWindowsDirectory():
buffer = ffi.new(MAX_PATH_BUF)
Expand Down
9 changes: 0 additions & 9 deletions win32ctypes/core/cffi/_winbase.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,6 @@
import enum
from ._util import ffi

ffi.cdef("""
typedef struct _FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME, *PFILETIME, *LPFILETIME;
""")


class _FILETIME(object):

Expand Down

0 comments on commit 11588db

Please sign in to comment.