! Copyright (C) 2005, 2006 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
+! See https://factorcode.org/license.txt for BSD license.
USING: alien alien.c-types alien.syntax kernel windows.types
math multiline classes.struct alien.data arrays literals ;
QUALIFIED-WITH: alien.c-types c
CONSTANT: FILE_ACTION_REMOVED_STREAM 7
CONSTANT: FILE_ACTION_MODIFIED_STREAM 8
+CONSTANT: FILE_CASE_SENSITIVE_SEARCH 0x00000001
+CONSTANT: FILE_CASE_PRESERVED_NAMES 0x00000002
+CONSTANT: FILE_UNICODE_ON_DISK 0x00000004
+CONSTANT: FILE_PERSISTENT_ACLS 0x00000008
+CONSTANT: FILE_FILE_COMPRESSION 0x00000010
+CONSTANT: FILE_VOLUME_QUOTAS 0x00000020
+CONSTANT: FILE_SUPPORTS_SPARSE_FILES 0x00000040
+CONSTANT: FILE_SUPPORTS_REPARSE_POINTS 0x00000080
+CONSTANT: FILE_VOLUME_IS_COMPRESSED 0x00008000
+CONSTANT: FILE_SUPPORTS_OBJECT_IDS 0x00010000
+CONSTANT: FILE_SUPPORTS_ENCRYPTION 0x00020000
+CONSTANT: FILE_NAMED_STREAMS 0x00040000
+CONSTANT: FILE_READ_ONLY_VOLUME 0x00080000
+CONSTANT: FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
+CONSTANT: FILE_SUPPORTS_TRANSACTIONS 0x00200000
+CONSTANT: FILE_SUPPORTS_HARD_LINKS 0x00400000
+CONSTANT: FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
+CONSTANT: FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
+CONSTANT: FILE_SUPPORTS_USN_JOURNAL 0x02000000
+CONSTANT: FILE_DAX_VOLUME 0x20000000
+
+CONSTANT: MOVEFILE_COPY_ALLOWED 0x2
+CONSTANT: MOVEFILE_CREATE_HARDLINK 0x10
+CONSTANT: MOVEFILE_DELAY_UNTIL_REBOOT 0x4
+CONSTANT: MOVEFILE_FAIL_IF_NOT_TRACKABLE 0x20
+CONSTANT: MOVEFILE_REPLACE_EXISTING 0x1
+CONSTANT: MOVEFILE_WRITE_THROUGH 0x8
+
CONSTANT: DONT_RESOLVE_DLL_REFERENCES 1
STRUCT: FILE_NOTIFY_INFORMATION
CONSTANT: PROCESS_SET_QUOTA 0x100
CONSTANT: PROCESS_SET_INFORMATION 0x200
CONSTANT: PROCESS_QUERY_INFORMATION 0x400
+CONSTANT: PROCESS_ALL_ACCESS 0x001F0FFF
CONSTANT: MEM_COMMIT 0x1000
CONSTANT: MEM_RELEASE 0x8000
{ DaylightDate SYSTEMTIME }
{ DaylightBias LONG } ;
+STRUCT: DYNAMIC_TIME_ZONE_INFORMATION
+ { Bias LONG }
+ { StandardName WCHAR[32] }
+ { StandardDate SYSTEMTIME }
+ { StandardBias LONG }
+ { DaylightName WCHAR[32] }
+ { DaylightDate SYSTEMTIME }
+ { DaylightBias LONG }
+ { TimeZoneKeyName WCHAR[128] }
+ { DynamicDaylightTimeDisabled BOOLEAN } ;
+
+TYPEDEF: DYNAMIC_TIME_ZONE_INFORMATION* PDYNAMIC_TIME_ZONE_INFORMATION
+
+
STRUCT: FILETIME
{ dwLowDateTime DWORD }
{ dwHighDateTime DWORD } ;
{ Data3 WORD }
{ Data4 UCHAR[8] } ;
-/*
+![[
fBinary :1;
fParity :1;
fOutxCtsFlow :1;
fRtsControl :2;
fAbortOnError :1;
fDummy2 :17;
-*/
+]]
CONSTANT: SP_SERIALCOMM 0x1
CONSTANT: BAUD_075 0x1
{ srWindow SMALL_RECT }
{ dwMaximumWindowSize COORD } ;
+CONSTANT: HEAP_CREATE_ENABLE_EXECUTE 0x00040000
+CONSTANT: HEAP_GENERATE_EXCEPTIONS 0x00000004
+CONSTANT: HEAP_NO_SERIALIZE 0x00000001
+
+STRUCT: HEAPLIST32
+ { dwSize SIZE_T }
+ { th32ProcessID DWORD }
+ { th32HeapID ULONG_PTR }
+ { dwFlags DWORD } ;
+TYPEDEF: HEAPLIST32* PHEAPLIST32
+TYPEDEF: HEAPLIST32* LPHEAPLIST32
+
+STRUCT: HEAPENTRY32
+ { dwSize SIZE_T }
+ { hHandle HANDLE }
+ { dwAddress ULONG_PTR }
+ { dwBlockSize SIZE_T }
+ { dwFlags DWORD }
+ { dwLockCount DWORD }
+ { dwResvd DWORD }
+ { th32ProcessID DWORD }
+ { th32HeapID ULONG_PTR } ;
+TYPEDEF: HEAPENTRY32* PHEAPENTRY32
+TYPEDEF: HEAPENTRY32* LPHEAPENTRY32
+
STRUCT: PROCESSENTRY32
{ dwSize DWORD }
{ cntUsage DWORD }
{ pcPriClassBase LONG }
{ dwFlags DWORD }
{ szExeFile TCHAR[MAX_PATH] } ;
-
TYPEDEF: PROCESSENTRY32* PPROCESSENTRY32
TYPEDEF: PROCESSENTRY32* LPPROCESSENTRY32
+CONSTANT: MAX_MODULE_NAME32 255
+CONSTANT: MAX_MODULE_NAME32_SIZE 256
+! STRUCT: MODULEENTRY32
+! { dwSize DWORD }
+! { th32ModuleID DWORD }
+! { th32ProcessID DWORD }
+! { GlblcntUsage DWORD }
+! { ProccntUsage DWORD }
+! { modBaseAddr BYTE* }
+! { modBaseSize DWORD }
+! { hModule HMODULE }
+! { szModule char[MAX_MODULE_NAME32_SIZE] }
+! { szExePath char[MAX_PATH] } ;
+! TYPEDEF: MODULEENTRY32* PMODULEENTRY32
+! TYPEDEF: MODULEENTRY32* LPMODULEENTRY32
+
+STRUCT: MODULEENTRY32W
+ { dwSize DWORD }
+ { th32ModuleID DWORD }
+ { th32ProcessID DWORD }
+ { GlblcntUsage DWORD }
+ { ProccntUsage DWORD }
+ { modBaseAddr BYTE* }
+ { modBaseSize DWORD }
+ { hModule HMODULE }
+ { szModule WCHAR[MAX_MODULE_NAME32_SIZE] }
+ { szExePath WCHAR[MAX_PATH] } ;
+TYPEDEF: MODULEENTRY32W* PMODULEENTRY32W
+TYPEDEF: MODULEENTRY32W* LPMODULEENTRY32W
+
+STRUCT: THREADENTRY32
+ { dwSize DWORD }
+ { cntUsage DWORD }
+ { th32ThreadID DWORD }
+ { th32OwnerProcessID DWORD }
+ { tpBasePri LONG }
+ { tpDeltaPri LONG }
+ { dwFlags DWORD } ;
+TYPEDEF: THREADENTRY32* PTHREADENTRY32
+TYPEDEF: THREADENTRY32* LPTHREADENTRY32
+
! Resource IDs
: MAKEINTRESOURCE ( int -- resource ) 0xffff bitand <alien> ; inline
! FUNCTION: GetDriveTypeA
FUNCTION: UINT GetDriveTypeW ( LPCTSTR lpRootPathName )
ALIAS: GetDriveType GetDriveTypeW
+
+FUNCTION: DWORD GetDynamicTimeZoneInformation ( PDYNAMIC_TIME_ZONE_INFORMATION pTimeZoneInformation )
+
FUNCTION: void* GetEnvironmentStringsW ( )
! FUNCTION: GetEnvironmentStringsA
ALIAS: GetEnvironmentStrings GetEnvironmentStringsW
! FUNCTION: GetLocaleInfoW
! FUNCTION: GetLocalTime
FUNCTION: DWORD GetLogicalDrives ( )
-! FUNCTION: GetLogicalDriveStringsA
-! FUNCTION: GetLogicalDriveStringsW
+FUNCTION: DWORD GetLogicalDriveStringsA ( DWORD dwBufferLength, LPWSTR lpBuffer )
+FUNCTION: DWORD GetLogicalDriveStringsW ( DWORD dwBufferLength, LPSTR lpBuffer )
+ALIAS: GetLogicalDriveStrings GetLogicalDriveStringsW
! FUNCTION: GetLongPathNameA
! FUNCTION: GetLongPathNameW
! FUNCTION: GetMailslotInfo
FUNCTION: BOOL GlobalUnlock ( HGLOBAL hMem )
! FUNCTION: GlobalUnWire
! FUNCTION: GlobalWire
-! FUNCTION: Heap32First
-! FUNCTION: Heap32ListFirst
-! FUNCTION: Heap32ListNext
-! FUNCTION: Heap32Next
+FUNCTION: BOOL Heap32First ( LPHEAPENTRY32 lphe, DWORD th32ProcessID, ULONG_PTR th32HeapID )
+FUNCTION: BOOL Heap32ListFirst ( HANDLE hSnapshot, LPHEAPLIST32 lphl )
+FUNCTION: BOOL Heap32ListNext ( HANDLE hSnapshot, LPHEAPLIST32 lphl )
+FUNCTION: BOOL Heap32Next ( LPHEAPENTRY32 lphe )
FUNCTION: LPVOID HeapAlloc ( HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes )
! FUNCTION: HeapCompact
-! FUNCTION: HeapCreate
+
+FUNCTION: HANDLE HeapCreate ( DWORD flOptions, SIZE_T dwInitialSize, SIZE_T dwMaximumSize )
! FUNCTION: HeapCreateTagsW
! FUNCTION: HeapDestroy
! FUNCTION: HeapExtend
SIZE_T dwNumberOfBytesToMap,
LPVOID lpBaseAddress )
-! FUNCTION: Module32First
-! FUNCTION: Module32FirstW
-! FUNCTION: Module32Next
-! FUNCTION: Module32NextW
+! FUNCTION: BOOL Module32First ( HANDLE hSnapshot, LPMODULEENTRY32 lpme )
+FUNCTION: BOOL Module32FirstW ( HANDLE hSnapshot, LPMODULEENTRY32W lpme )
+! FUNCTION: BOOL Module32Next ( HANDLE hSnapshot, LPMODULEENTRY32 lpme )
+FUNCTION: BOOL Module32NextW ( HANDLE hSnapshot, LPMODULEENTRY32W lpme )
! FUNCTION: MoveFileA
! FUNCTION: MoveFileExA
FUNCTION: BOOL MoveFileExW ( LPCSTR lpExistingFile, LPCSTR lpNewFileName, DWORD dwFlags )
! FUNCTION: QueryDepthSList
! FUNCTION: QueryDosDeviceA
! FUNCTION: QueryDosDeviceW
+CONSTANT: PROCESS_NAME_NATIVE 1
+FUNCTION: BOOL QueryFullProcessImageNameA ( HANDLE hProcess, DWORD dwFlags, LPSTR lpExeName, PDWORD lpdwSize )
! FUNCTION: QueryInformationJobObject
! FUNCTION: QueryMemoryResourceNotification
FUNCTION: BOOL QueryPerformanceCounter ( LARGE_INTEGER* lpPerformanceCount )
! FUNCTION: SetFileShortNameA
! FUNCTION: SetFileShortNameW
FUNCTION: BOOL SetFileTime ( HANDLE hFile, FILETIME* lpCreationTime, FILETIME* lpLastAccessTime, FILETIME* lpLastWriteTime )
-! FUNCTION: SetFileValidData
+FUNCTION: BOOL SetFileValidData ( HANDLE hFile, LONGLONG ValidDataLength )
! FUNCTION: SetFirmwareEnvironmentVariableA
! FUNCTION: SetFirmwareEnvironmentVariableW
! FUNCTION: SetHandleContext
FUNCTION: BOOL TerminateProcess ( HANDLE hProcess, DWORD uExit )
! FUNCTION: TerminateThread
! FUNCTION: TermsrvAppInstallMode
-! FUNCTION: Thread32First
-! FUNCTION: Thread32Next
+FUNCTION: BOOL Thread32First ( HANDLE hSnapshot, LPTHREADENTRY32 lpte )
+FUNCTION: BOOL Thread32Next ( HANDLE hSnapshot, LPTHREADENTRY32 lpte )
! FUNCTION: TlsAlloc
! FUNCTION: TlsFree
! FUNCTION: TlsGetValue
! FUNCTION: TlsSetValue
-! FUNCTION: Toolhelp32ReadProcessMemory
+FUNCTION: BOOL Toolhelp32ReadProcessMemory ( DWORD th32ProcessID, LPCVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T cbRead, SIZE_T *lpNumberOfBytesRead )
! FUNCTION: TransactNamedPipe
! FUNCTION: TransmitCommChar
! FUNCTION: TrimVirtualBuffer