static BOOL (WINAPI *pFlsFree)(DWORD);
static PVOID (WINAPI *pFlsGetValue)(DWORD);
static BOOL (WINAPI *pFlsSetValue)(DWORD,PVOID);
+static BOOL (WINAPI *pRtlIsCriticalSectionLockedByThread)(RTL_CRITICAL_SECTION *);
#define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
ok(lpFlsData == g_FlsData3, "Expected g_FlsData3(%p), got %p\n", g_FlsData3, lpFlsData);
if (g_WinVersion <= WINVER_2003)
- ok(RtlIsCriticalSectionLockedByThread(NtCurrentPeb()->FastPebLock), "Expected lock on PEB\n");
+ ok(pRtlIsCriticalSectionLockedByThread(NtCurrentPeb()->FastPebLock), "Expected lock on PEB\n");
InterlockedIncrement(&g_FlsCalled3);
if (g_FlsExcept3)
{
static VOID init_funcs(void)
{
HMODULE hKernel32 = GetModuleHandleA("kernel32.dll");
+ HMODULE hNTDLL = GetModuleHandleA("ntdll.dll");
#define X(f) p##f = (void*)GetProcAddress(hKernel32, #f);
X(FlsAlloc);
X(FlsGetValue);
X(FlsSetValue);
#undef X
+ pRtlIsCriticalSectionLockedByThread = (void*)GetProcAddress(hNTDLL, "RtlIsCriticalSectionLockedByThread");
}
skip("Fls functions not available\n");
return;
}
+ if (!pRtlIsCriticalSectionLockedByThread)
+ {
+ skip("RtlIsCriticalSectionLockedByThread function not available\n");
+ return;
+ }
RtlGetVersion(&rtlinfo);
g_WinVersion = (rtlinfo.dwMajorVersion << 8) | rtlinfo.dwMinorVersion;
dwErr = 0xdeaddead;
}
_SEH2_END;
- ok(RtlIsCriticalSectionLockedByThread(NtCurrentPeb()->FastPebLock) == FALSE, "Expected no lock on PEB\n");
+ ok(pRtlIsCriticalSectionLockedByThread(NtCurrentPeb()->FastPebLock) == FALSE, "Expected no lock on PEB\n");
ok(bRet == 12345, "FlsFree(%lu) should have failed, got %u\n", dwIndex3, bRet);
ok(dwErr == 0xdeaddead, "Expected GetLastError() to be 0xdeaddead, was %lx\n", dwErr);