From ed25f7319fcc2b48559122e8688ecaffe184c10f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikk=20Margus=20M=C3=B6ll?= Date: Thu, 25 Jun 2026 09:38:07 +0300 Subject: [PATCH] implement FlsGetValue2 --- qiling/os/windows/dlls/kernel32/fibersapi.py | 9 +++++++++ qiling/os/windows/fiber.py | 7 +++++++ 2 files changed, 16 insertions(+) diff --git a/qiling/os/windows/dlls/kernel32/fibersapi.py b/qiling/os/windows/dlls/kernel32/fibersapi.py index 1623fb115..f6df3d134 100644 --- a/qiling/os/windows/dlls/kernel32/fibersapi.py +++ b/qiling/os/windows/dlls/kernel32/fibersapi.py @@ -25,6 +25,15 @@ def hook_FlsFree(ql: Qiling, address: int, params): def hook_FlsGetValue(ql: Qiling, address: int, params): return ql.os.fiber_manager.get(params['dwFlsIndex']) +# LPVOID FlsGetValue2( +# DWORD dwFlsIndex +# ); +@winsdkapi(cc=STDCALL, params={ + 'dwFlsIndex' : DWORD +}) +def hook_FlsGetValue2(ql: Qiling, address: int, params): + return ql.os.fiber_manager.get_noerr(params['dwFlsIndex']) + # BOOL FlsSetValue( # DWORD dwFlsIndex # PVOID lpFlsData diff --git a/qiling/os/windows/fiber.py b/qiling/os/windows/fiber.py index 098620763..674153bd5 100644 --- a/qiling/os/windows/fiber.py +++ b/qiling/os/windows/fiber.py @@ -112,3 +112,10 @@ def get(self, idx: int) -> int: return 0 return self.fibers[idx].data + + # equivalent to get, but does not set errors; used for FlsGetValue2 + def get_noerr(self, idx: int) -> int: + if idx not in self.fibers: + return 0 + + return self.fibers[idx].data