20 #define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock) 21 #define WINVER_2003 0x0502 77 if (FlsData ==
NULL || FlsCallback ==
NULL)
86 "Expected NtCurrentPeb()->FlsCallback[%lu] to be %p, was %p\n",
93 winetest_ok(FlsCallback[dwIndex].lpCallback == lpCallback,
94 "Expected FlsCallback[%lu].lpCallback to be %p, was %p\n",
97 FlsCallback[dwIndex].lpCallback);
101 "Expected FlsCallback[%lu].Unknown to be %p, was %p\n",
108 "Expected FlsData[%lu + 2] to be %p, was %p\n",
111 FlsData[dwIndex + 2]);
113 gotValue = pFlsGetValue(dwIndex);
117 #define ok_fls (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : ok_fls_ 124 #define X(f) p##f = (void*)GetProcAddress(hKernel32, #f); 130 pRtlIsCriticalSectionLockedByThread = (
void*)
GetProcAddress(hNTDLL,
"RtlIsCriticalSectionLockedByThread");
142 if (!pFlsAlloc || !pFlsFree || !pFlsGetValue || !pFlsSetValue)
144 skip(
"Fls functions not available\n");
147 if (!pRtlIsCriticalSectionLockedByThread)
149 skip(
"RtlIsCriticalSectionLockedByThread function not available\n");
160 ok(dwIndex1 != dwIndex2,
"Expected different indexes, got %lu\n", dwIndex1);
164 ok(dwIndex1 != dwIndex3,
"Expected different indexes, got %lu\n", dwIndex1);
168 skip(
"Unable to continue test\n");
210 ok(pFlsFree(dwIndex1) ==
TRUE,
"FlsFree(%lu) failed\n", dwIndex1);
224 bRet = pFlsFree(dwIndex3);
235 ok(bRet == 12345,
"FlsFree(%lu) should have failed, got %u\n", dwIndex3, bRet);
236 ok(
dwErr == 0xdeaddead,
"Expected GetLastError() to be 0xdeaddead, was %lx\n",
dwErr);
#define ERROR_INVALID_PARAMETER
struct _FLS_CALLBACK_INFO * PFLS_CALLBACK_INFO
NTSTATUS NTAPI RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation)
#define FLS_OUT_OF_INDEXES
struct _FLS_CALLBACK_INFO FLS_CALLBACK_INFO
VOID(WINAPI * PFLS_CALLBACK_FUNCTION)(PVOID)
BOOL WINAPI FlsSetValue(DWORD dwFlsIndex, PVOID lpFlsData)
#define EXCEPTION_NONCONTINUABLE
DWORD WINAPI GetLastError(VOID)
DWORD WINAPI FlsAlloc(PFLS_CALLBACK_FUNCTION lpCallback)
#define EXCEPTION_EXECUTE_HANDLER
PVOID WINAPI FlsGetValue(DWORD dwFlsIndex)
#define ok_int(expression, result)
static DWORD g_WinVersion
static BOOL(WINAPI *pFlsFree)(DWORD)
PFLS_CALLBACK_FUNCTION lpCallback
void __winetest_cdecl winetest_ok(int condition, const char *msg,...)
VOID WINAPI FlsCallback3(PVOID lpFlsData)
void ok_fls_(DWORD dwIndex, PVOID pValue, PFLS_CALLBACK_FUNCTION lpCallback)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
#define InterlockedIncrement
FORCEINLINE struct _TEB * NtCurrentTeb(VOID)
VOID WINAPI RaiseException(IN DWORD dwExceptionCode, IN DWORD dwExceptionFlags, IN DWORD nNumberOfArguments, IN CONST ULONG_PTR *lpArguments OPTIONAL)
RTL_CRITICAL_SECTION FastPebLock
static VOID init_funcs(void)
void __winetest_cdecl winetest_skip(const char *msg,...)
#define GetProcAddress(x, y)
#define _SEH2_EXCEPT(...)
VOID WINAPI FlsCallback2(PVOID lpFlsData)
BOOL WINAPI FlsFree(DWORD dwFlsIndex)
static DWORD(WINAPI *pFlsAlloc)(PFLS_CALLBACK_FUNCTION)
VOID WINAPI FlsCallback1(PVOID lpFlsData)