| # SPDX-FileCopyrightText: Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. |
| # SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE |
|
|
| from libc.stddef cimport wchar_t |
| from libc.stdint cimport uintptr_t |
| from cpython cimport PyUnicode_AsWideCharString, PyMem_Free |
|
|
| cdef extern from "windows.h" nogil: |
| ctypedef void* HMODULE |
| ctypedef void* HANDLE |
| ctypedef void* FARPROC |
| ctypedef unsigned long DWORD |
| ctypedef const wchar_t *LPCWSTR |
| ctypedef const char *LPCSTR |
| ctypedef int BOOL |
|
|
| cdef DWORD LOAD_LIBRARY_SEARCH_SYSTEM32 = 0x00000800 |
|
|
| HMODULE _LoadLibraryExW "LoadLibraryExW"( |
| LPCWSTR lpLibFileName, |
| HANDLE hFile, |
| DWORD dwFlags |
| ) |
|
|
| FARPROC _GetProcAddress "GetProcAddress"(HMODULE hModule, LPCSTR lpProcName) |
|
|
| BOOL _FreeLibrary "FreeLibrary"(HMODULE hLibModule) |
|
|
| cdef inline uintptr_t LoadLibraryExW(str path, HANDLE hFile, DWORD dwFlags): |
| cdef uintptr_t result |
| cdef wchar_t* wpath = PyUnicode_AsWideCharString(path, NULL) |
| with nogil: |
| result = <uintptr_t>_LoadLibraryExW( |
| wpath, |
| hFile, |
| dwFlags |
| ) |
| PyMem_Free(wpath) |
| return result |
|
|
| cdef inline FARPROC GetProcAddress(uintptr_t hModule, const char* lpProcName) nogil: |
| return _GetProcAddress(<HMODULE>hModule, lpProcName) |
|
|
| cdef inline BOOL FreeLibrary(uintptr_t hLibModule) nogil: |
| return _FreeLibrary(<HMODULE>hLibModule) |
|
|