annotate foosdk/sdk/pfc/pp-winapi.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #if !defined(PP_WINAPI_H_INCLUDED) && defined(_WIN32)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 #define PP_WINAPI_H_INCLUDED
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 #ifdef WINAPI_FAMILY_PARTITION
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 #if ! WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 #ifndef CreateEvent // SPECIAL HACK: disable this stuff if somehow these functions are already defined
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 inline HANDLE CreateEventW(LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCTSTR lpName) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 DWORD flags = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 if (bManualReset) flags |= CREATE_EVENT_MANUAL_RESET;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 if (bInitialState) flags |= CREATE_EVENT_INITIAL_SET;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 DWORD rights = SYNCHRONIZE | EVENT_MODIFY_STATE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 return CreateEventEx(lpEventAttributes, lpName, flags, rights);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 #define CreateEvent CreateEventW
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 inline DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 return WaitForSingleObjectEx(hHandle, dwMilliseconds, FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 inline DWORD WaitForMultipleObjects(DWORD nCount, const HANDLE *lpHandles, BOOL bWaitAll, DWORD dwMilliseconds) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 return WaitForMultipleObjectsEx(nCount, lpHandles, bWaitAll, dwMilliseconds, FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 inline void InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 InitializeCriticalSectionEx(lpCriticalSection, 0, 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 #endif // #ifndef CreateEvent
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 #ifndef CreateMutex
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 inline HANDLE CreateMutexW(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCTSTR lpName) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 DWORD rights = MUTEX_MODIFY_STATE | SYNCHRONIZE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 DWORD flags = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 if (bInitialOwner) flags |= CREATE_MUTEX_INITIAL_OWNER;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 return CreateMutexExW(lpMutexAttributes, lpName, flags, rights);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 #define CreateMutex CreateMutexW
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 #endif // CreateMutex
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 #ifndef FindFirstFile
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 inline HANDLE FindFirstFileW(LPCTSTR lpFileName, LPWIN32_FIND_DATA lpFindFileData) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 return FindFirstFileEx(lpFileName, FindExInfoStandard, lpFindFileData, FindExSearchNameMatch, NULL, 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 #define FindFirstFile FindFirstFileW
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 #endif // #ifndef FindFirstFile
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 // No reliable way to detect if GetFileSizeEx is present?? Give ours another name
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 inline BOOL GetFileSizeEx_Fallback(HANDLE hFile, PLARGE_INTEGER lpFileSize) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 FILE_STANDARD_INFO info;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 if (!GetFileInformationByHandleEx(hFile, FileStandardInfo, &info, sizeof(info))) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 *lpFileSize = info.EndOfFile;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 #define PP_GetFileSizeEx_Fallback_Present
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 #ifndef CreateFile
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 inline HANDLE CreateFileW(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 CREATEFILE2_EXTENDED_PARAMETERS arg = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 arg.dwSize = sizeof(arg);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 arg.hTemplateFile = hTemplateFile;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 arg.lpSecurityAttributes = lpSecurityAttributes;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 arg.dwFileAttributes = dwFlagsAndAttributes & 0x0000FFFF;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 arg.dwFileFlags = dwFlagsAndAttributes & 0xFFFF0000;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 return CreateFile2(lpFileName, dwDesiredAccess, dwShareMode, dwCreationDisposition, &arg);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 #define CreateFile CreateFileW
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 #endif // #ifndef CreateFile
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 #ifndef GetFileAttributes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 inline DWORD GetFileAttributesW(const wchar_t * path) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 WIN32_FILE_ATTRIBUTE_DATA data = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 if (!GetFileAttributesEx(path, GetFileExInfoStandard, &data)) return 0xFFFFFFFF;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 return data.dwFileAttributes;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 #define GetFileAttributes GetFileAttributesW
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 #endif // #ifndef GetFileAttributes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 #endif // #if ! WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 #endif // #ifdef WINAPI_FAMILY_PARTITION
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 #ifndef PP_GetFileSizeEx_Fallback_Present
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 #define GetFileSizeEx_Fallback GetFileSizeEx
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 #endif // !defined(PP_WINAPI_H_INCLUDED) && defined(_WIN32)