| # 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) | |