# Copyright 2020 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Win32 functions and constants.""" import ctypes import ctypes.wintypes GENERIC_WRITE = 0x40000000 CREATE_ALWAYS = 0x00000002 FILE_ATTRIBUTE_NORMAL = 0x00000080 LOCKFILE_EXCLUSIVE_LOCK = 0x00000002 LOCKFILE_FAIL_IMMEDIATELY = 0x00000001 class Overlapped(ctypes.Structure): """Overlapped is required and used in LockFileEx and UnlockFileEx.""" _fields_ = [('Internal', ctypes.wintypes.LPVOID), ('InternalHigh', ctypes.wintypes.LPVOID), ('Offset', ctypes.wintypes.DWORD), ('OffsetHigh', ctypes.wintypes.DWORD), ('Pointer', ctypes.wintypes.LPVOID), ('hEvent', ctypes.wintypes.HANDLE)] # https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilew CreateFileW = ctypes.windll.kernel32.CreateFileW CreateFileW.argtypes = [ ctypes.wintypes.LPCWSTR, # lpFileName ctypes.wintypes.DWORD, # dwDesiredAccess ctypes.wintypes.DWORD, # dwShareMode ctypes.wintypes.LPVOID, # lpSecurityAttributes ctypes.wintypes.DWORD, # dwCreationDisposition ctypes.wintypes.DWORD, # dwFlagsAndAttributes ctypes.wintypes.LPVOID, # hTemplateFile ] CreateFileW.restype = ctypes.wintypes.HANDLE # https://docs.microsoft.com/en-us/windows/win32/api/handleapi/nf-handleapi-closehandle CloseHandle = ctypes.windll.kernel32.CloseHandle CloseHandle.argtypes = [ ctypes.wintypes.HANDLE, # hFile ] CloseHandle.restype = ctypes.wintypes.BOOL # https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-lockfileex LockFileEx = ctypes.windll.kernel32.LockFileEx LockFileEx.argtypes = [ ctypes.wintypes.HANDLE, # hFile ctypes.wintypes.DWORD, # dwFlags ctypes.wintypes.DWORD, # dwReserved ctypes.wintypes.DWORD, # nNumberOfBytesToLockLow ctypes.wintypes.DWORD, # nNumberOfBytesToLockHigh ctypes.POINTER(Overlapped), # lpOverlapped ] LockFileEx.restype = ctypes.wintypes.BOOL # Commonly used functions are listed here so callers don't need to import # ctypes. GetLastError = ctypes.GetLastError Handle = ctypes.wintypes.HANDLE