22#define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
23#define WINVER_2003 0x0502
79 if (FlsData ==
NULL || FlsCallback ==
NULL)
88 "Expected NtCurrentPeb()->FlsCallback[%lu] to be %p, was %p\n",
95 winetest_ok(FlsCallback[dwIndex].lpCallback == lpCallback,
96 "Expected FlsCallback[%lu].lpCallback to be %p, was %p\n",
99 FlsCallback[dwIndex].lpCallback);
103 "Expected FlsCallback[%lu].Unknown to be %p, was %p\n",
110 "Expected FlsData[%lu + 2] to be %p, was %p\n",
113 FlsData[dwIndex + 2]);
115 gotValue = pFlsGetValue(dwIndex);
119#define ok_fls (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : ok_fls_
126#define X(f) p##f = (void*)GetProcAddress(hKernel32, #f);
132 pRtlIsCriticalSectionLockedByThread = (
void*)
GetProcAddress(hNTDLL,
"RtlIsCriticalSectionLockedByThread");
144 if (!pFlsAlloc || !pFlsFree || !pFlsGetValue || !pFlsSetValue)
146 skip(
"Fls functions not available\n");
149 if (!pRtlIsCriticalSectionLockedByThread)
151 skip(
"RtlIsCriticalSectionLockedByThread function not available\n");
162 ok(dwIndex1 != dwIndex2,
"Expected different indexes, got %lu\n", dwIndex1);
166 ok(dwIndex1 != dwIndex3,
"Expected different indexes, got %lu\n", dwIndex1);
170 skip(
"Unable to continue test\n");
212 ok(pFlsFree(dwIndex1) ==
TRUE,
"FlsFree(%lu) failed\n", dwIndex1);
226 bRet = pFlsFree(dwIndex3);
237 ok(bRet == 12345,
"FlsFree(%lu) should have failed, got %u\n", dwIndex3, bRet);
238 ok(
dwErr == 0xdeaddead,
"Expected GetLastError() to be 0xdeaddead, was %lx\n",
dwErr);
VOID WINAPI FlsCallback3(PVOID lpFlsData)
VOID WINAPI FlsCallback1(PVOID lpFlsData)
struct _FLS_CALLBACK_INFO * PFLS_CALLBACK_INFO
void ok_fls_(DWORD dwIndex, PVOID pValue, PFLS_CALLBACK_FUNCTION lpCallback)
VOID WINAPI FlsCallback2(PVOID lpFlsData)
struct _FLS_CALLBACK_INFO FLS_CALLBACK_INFO
static DWORD g_WinVersion
static VOID init_funcs(void)
#define InterlockedIncrement
#define ok_int(expression, result)
NTSTATUS NTAPI RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation)
#define ERROR_INVALID_PARAMETER
#define GetProcAddress(x, y)
VOID WINAPI RaiseException(_In_ DWORD dwExceptionCode, _In_ DWORD dwExceptionFlags, _In_ DWORD nNumberOfArguments, _In_opt_ const ULONG_PTR *lpArguments)
PVOID WINAPI FlsGetValue(DWORD dwFlsIndex)
BOOL WINAPI FlsSetValue(DWORD dwFlsIndex, PVOID lpFlsData)
BOOL WINAPI FlsFree(DWORD dwFlsIndex)
DWORD WINAPI FlsAlloc(PFLS_CALLBACK_FUNCTION lpCallback)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
#define EXCEPTION_EXECUTE_HANDLER
RTL_CRITICAL_SECTION FastPebLock
#define _SEH2_EXCEPT(...)
void __winetest_cdecl winetest_skip(const char *msg,...)
void __winetest_cdecl winetest_ok(int condition, const char *msg,...)
PFLS_CALLBACK_FUNCTION lpCallback
#define EXCEPTION_NONCONTINUABLE
DWORD WINAPI GetLastError(void)
#define FLS_OUT_OF_INDEXES
VOID(WINAPI * PFLS_CALLBACK_FUNCTION)(PVOID)