os-win/os_win/utils/winapi/libs/kernel32.py

239 lines
6.8 KiB
Python

# Copyright 2017 Cloudbase Solutions Srl
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import ctypes
from os_win.utils.winapi import wintypes
lib_handle = None
class IO_COUNTERS(ctypes.Structure):
_fields_ = [
('ReadOperationCount', wintypes.ULONGLONG),
('WriteOperationCount', wintypes.ULONGLONG),
('OtherOperationCount', wintypes.ULONGLONG),
('ReadTransferCount', wintypes.ULONGLONG),
('WriteTransferCount', wintypes.ULONGLONG),
('OtherTransferCount', wintypes.ULONGLONG)
]
class JOBOBJECT_BASIC_LIMIT_INFORMATION(ctypes.Structure):
_fields_ = [
('PerProcessUserTimeLimit', wintypes.LARGE_INTEGER),
('PerJobUserTimeLimit', wintypes.LARGE_INTEGER),
('LimitFlags', wintypes.DWORD),
('MinimumWorkingSetSize', ctypes.c_size_t),
('MaximumWorkingSetSize', ctypes.c_size_t),
('ActiveProcessLimit', wintypes.DWORD),
('Affinity', wintypes.PULONG),
('PriorityClass', wintypes.DWORD),
('SchedulingClass', wintypes.DWORD)
]
class JOBOBJECT_EXTENDED_LIMIT_INFORMATION(ctypes.Structure):
_fields_ = [
('BasicLimitInformation', JOBOBJECT_BASIC_LIMIT_INFORMATION),
('IoInfo', IO_COUNTERS),
('ProcessMemoryLimit', ctypes.c_size_t),
('JobMemoryLimit', ctypes.c_size_t),
('PeakProcessMemoryUsed', ctypes.c_size_t),
('PeakJobMemoryUsed', ctypes.c_size_t)
]
def register():
global lib_handle
lib_handle = ctypes.windll.kernel32
lib_handle.CancelIoEx.argtypes = [
wintypes.HANDLE,
wintypes.LPOVERLAPPED
]
lib_handle.CancelIoEx.restype = wintypes.BOOL
lib_handle.CloseHandle.argtypes = [wintypes.HANDLE]
lib_handle.CloseHandle.restype = wintypes.BOOL
lib_handle.CopyFileW.argtypes = [
wintypes.LPCWSTR,
wintypes.LPCWSTR,
wintypes.BOOL
]
lib_handle.CopyFileW.restype = wintypes.BOOL
lib_handle.CreateEventW.argtypes = [
wintypes.PVOID, # unused
wintypes.BOOL,
wintypes.BOOL,
wintypes.LPCWSTR
]
lib_handle.CreateEventW.restype = wintypes.HANDLE
lib_handle.CreateFileW.argtypes = [
wintypes.LPCWSTR,
wintypes.DWORD,
wintypes.DWORD,
wintypes.PVOID, # unused
wintypes.DWORD,
wintypes.DWORD,
wintypes.HANDLE
]
lib_handle.CreateFileW.restype = wintypes.HANDLE
lib_handle.CreatePipe.argtypes = [
wintypes.PHANDLE,
wintypes.PHANDLE,
wintypes.PVOID,
wintypes.DWORD
]
lib_handle.CreatePipe.restype = wintypes.BOOL
lib_handle.CreateSymbolicLinkW.argtypes = [
wintypes.LPCWSTR,
wintypes.LPCWSTR,
wintypes.DWORD
]
lib_handle.CreateSymbolicLinkW.restype = wintypes.BOOL
lib_handle.FormatMessageA.argtypes = [
wintypes.DWORD,
wintypes.LPCVOID,
wintypes.DWORD,
wintypes.DWORD,
wintypes.PVOID,
wintypes.DWORD,
wintypes.PVOID
]
lib_handle.FormatMessageA.restype = wintypes.DWORD
lib_handle.GetDiskFreeSpaceExW.argtypes = [
wintypes.LPCWSTR,
wintypes.PULARGE_INTEGER,
wintypes.PULARGE_INTEGER,
wintypes.PULARGE_INTEGER
]
lib_handle.GetDiskFreeSpaceExW.restype = wintypes.BOOL
lib_handle.GetFileAttributesW.argtypes = [wintypes.LPCWSTR]
lib_handle.GetFileAttributesW.restype = wintypes.DWORD
lib_handle.GetLastError.argtypes = []
lib_handle.GetLastError.restype = wintypes.DWORD
lib_handle.GetTickCount64.argtypes = []
lib_handle.GetTickCount64.restype = wintypes.ULONGLONG
lib_handle.IsProcessorFeaturePresent.argtypes = [wintypes.DWORD]
lib_handle.IsProcessorFeaturePresent.restype = wintypes.BOOL
lib_handle.LocalFree.argtypes = [wintypes.HANDLE]
lib_handle.LocalFree.restype = wintypes.HANDLE
lib_handle.ReadFile.argtypes = [
wintypes.HANDLE,
wintypes.LPVOID,
wintypes.DWORD,
wintypes.LPDWORD,
wintypes.LPOVERLAPPED
]
lib_handle.ReadFile.restype = wintypes.BOOL
lib_handle.ReadFileEx.argtypes = [
wintypes.HANDLE,
wintypes.LPVOID,
wintypes.DWORD,
wintypes.LPOVERLAPPED,
wintypes.LPOVERLAPPED_COMPLETION_ROUTINE
]
lib_handle.ReadFileEx.restype = wintypes.BOOL
lib_handle.ResetEvent.argtypes = [wintypes.HANDLE]
lib_handle.ResetEvent.restype = wintypes.BOOL
lib_handle.SetEvent.argtypes = [wintypes.HANDLE]
lib_handle.SetEvent.restype = wintypes.BOOL
lib_handle.SetLastError.argtypes = [wintypes.DWORD]
lib_handle.SetLastError.restype = None
lib_handle.WaitForSingleObjectEx.argtypes = [
wintypes.HANDLE,
wintypes.DWORD,
wintypes.BOOL
]
lib_handle.WaitForSingleObjectEx.restype = wintypes.DWORD
lib_handle.WaitNamedPipeW.argtypes = [
wintypes.LPCWSTR,
wintypes.DWORD
]
lib_handle.WaitNamedPipeW.restype = wintypes.BOOL
lib_handle.WriteFile.argtypes = [
wintypes.HANDLE,
wintypes.LPCVOID,
wintypes.DWORD,
wintypes.LPDWORD,
wintypes.LPOVERLAPPED,
]
lib_handle.WriteFile.restype = wintypes.BOOL
lib_handle.WriteFileEx.argtypes = [
wintypes.HANDLE,
wintypes.LPCVOID,
wintypes.DWORD,
wintypes.LPOVERLAPPED,
wintypes.LPOVERLAPPED_COMPLETION_ROUTINE
]
lib_handle.WriteFileEx.restype = wintypes.BOOL
lib_handle.CreateJobObjectW.argtypes = [
wintypes.LPCVOID,
wintypes.LPCWSTR
]
lib_handle.CreateJobObjectW.restype = wintypes.HANDLE
lib_handle.SetInformationJobObject.argtypes = [
wintypes.HANDLE,
wintypes.INT,
wintypes.LPVOID,
wintypes.DWORD
]
lib_handle.SetInformationJobObject.restype = wintypes.BOOL
lib_handle.AssignProcessToJobObject.argtypes = [
wintypes.HANDLE,
wintypes.HANDLE
]
lib_handle.AssignProcessToJobObject.restype = wintypes.BOOL
lib_handle.OpenProcess.argtypes = [
wintypes.DWORD,
wintypes.BOOL,
wintypes.DWORD
]
lib_handle.OpenProcess.restype = wintypes.HANDLE
lib_handle.WaitForMultipleObjects.argtypes = [
wintypes.DWORD,
wintypes.LPHANDLE,
wintypes.BOOL,
wintypes.DWORD
]
lib_handle.WaitForMultipleObjects.restype = wintypes.DWORD