1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | import sys import mmap import time from ctypes import * from ctypes.wintypes import BOOL, DWORD, HANDLE, LPCWSTR, LPCVOID, LPVOID if __name__ == "__main__": print("Python {:s} on {:s}".format(sys.version, sys.platform)) FILE_MAP_ALL_ACCESS = 0x000F001F INVALID_HANDLE_VALUE = -1 SHMEMSIZE = 0x100 PAGE_READWRITE = 0x04 kernel32_dll = windll.kernel32 msvcrt_dll = cdll.msvcrt create_file_mapping_func = kernel32_dll.CreateFileMappingW create_file_mapping_func.argtypes = (HANDLE, LPVOID, DWORD, DWORD, DWORD, LPCWSTR) create_file_mapping_func.restype = HANDLE map_view_of_file_func = kernel32_dll.MapViewOfFile map_view_of_file_func.argtypes = (HANDLE, DWORD, DWORD, DWORD, c_ulonglong) map_view_of_file_func.restype = LPVOID memcpy_func = msvcrt_dll.memcpy memcpy_func.argtypes = (c_void_p, c_void_p, c_size_t) memcpy_func.restype = LPVOID rtl_copy_memory_func = kernel32_dll.RtlCopyMemory rtl_copy_memory_func.argtypes = (LPVOID, LPCVOID, c_ulonglong) unmap_view_of_file_func = kernel32_dll.UnmapViewOfFile unmap_view_of_file_func.argtypes = (LPCVOID,) unmap_view_of_file_func.restype = BOOL memcpy_func = msvcrt_dll.memcpy memcpy_func.argtypes = (c_void_p, c_void_p, c_size_t) memcpy_func.restype = LPVOID rtl_copy_memory_func = kernel32_dll.RtlCopyMemory rtl_copy_memory_func.argtypes = (LPVOID, LPCVOID, c_ulonglong) unmap_view_of_file_func = kernel32_dll.UnmapViewOfFile unmap_view_of_file_func.argtypes = (LPCVOID,) unmap_view_of_file_func.restype = BOOL close_handle_func = kernel32_dll.CloseHandle close_handle_func.argtypes = (HANDLE,) close_handle_func.restype = BOOL get_last_error_func = kernel32_dll.GetLastError getch_func = msvcrt_dll._getch file_mapping_name_ptr = c_wchar_p("MyFileMappingObject") msg = "Message from Python(ctypes) process" msg_ptr = c_wchar_p(msg) mapping_handle = create_file_mapping_func(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, SHMEMSIZE, file_mapping_name_ptr) print("Mapping object handle: 0x{:016X}".format(mapping_handle)) if not mapping_handle: print("Could not open file mapping object: {:d}".format(get_last_error_func())) raise WinError() mapped_view_ptr = map_view_of_file_func(mapping_handle, FILE_MAP_ALL_ACCESS, 0, 0, SHMEMSIZE) print("Mapped view addr: 0x{:016X}".format(mapped_view_ptr)) if not mapped_view_ptr: print("Could not map view of file: {:d}".format(get_last_error_func())) close_handle_func(mapping_handle) raise WinError() byte_len = len(msg) * sizeof(c_wchar) print("Message length: {:d} chars ({:d} bytes)".format(len(msg), byte_len)) memcpy_func(mapped_view_ptr, msg_ptr, byte_len) rtl_copy_memory_func(mapped_view_ptr, msg_ptr, byte_len) unmap_view_of_file_func(mapped_view_ptr) close_handle_func(mapping_handle) shmem = mmap.mmap(0, 256, "MyFileMappingObject_ctypes", mmap.ACCESS_WRITE) shmem.write(b"Message Python process") shmem.close() print("Hit a key to exit...") getch_func() | cs |
출처: https://stackoverflow.com/questions/48788549/python-ctypes-oserror-exception-access-violation-writing-0xfffffffffa1c001
'IPC(Pipe, Shared Mem)' 카테고리의 다른 글
파이썬 MMF read 예제 (0) | 2019.02.01 |
---|---|
파이썬 MMF write 예제 (0) | 2019.02.01 |
c/python ipc 구현 블로그 (0) | 2019.01.31 |
python 헤더 정의 (0) | 2019.01.31 |
python windows pipe server and client 예제 (0) | 2019.01.31 |