mirror of
https://github.com/decompals/wibo.git
synced 2025-12-12 14:46:09 +00:00
Split kernel32 into separate files (part 2)
This commit is contained in:
@@ -1,20 +1,24 @@
|
||||
#include "fibersapi.h"
|
||||
#include "common.h"
|
||||
#include "errors.h"
|
||||
#include "kernel32.h"
|
||||
|
||||
namespace {
|
||||
|
||||
constexpr DWORD kMaxFlsValues = 0x100;
|
||||
bool g_flsValuesUsed[kMaxFlsValues] = {false};
|
||||
LPVOID g_flsValues[kMaxFlsValues] = {nullptr};
|
||||
|
||||
} // namespace
|
||||
|
||||
namespace kernel32 {
|
||||
|
||||
constexpr size_t MAX_FLS_VALUES = 0x100;
|
||||
static bool flsValuesUsed[MAX_FLS_VALUES] = {false};
|
||||
static void *flsValues[MAX_FLS_VALUES];
|
||||
|
||||
DWORD WIN_FUNC FlsAlloc(PFLS_CALLBACK_FUNCTION lpCallback) {
|
||||
DEBUG_LOG("FlsAlloc(%p)", lpCallback);
|
||||
// If the function succeeds, the return value is an FLS index initialized to zero.
|
||||
for (size_t i = 0; i < MAX_FLS_VALUES; i++) {
|
||||
if (flsValuesUsed[i] == false) {
|
||||
flsValuesUsed[i] = true;
|
||||
flsValues[i] = nullptr;
|
||||
for (DWORD i = 0; i < kMaxFlsValues; i++) {
|
||||
if (g_flsValuesUsed[i] == false) {
|
||||
g_flsValuesUsed[i] = true;
|
||||
g_flsValues[i] = nullptr;
|
||||
DEBUG_LOG(" -> %d\n", i);
|
||||
return i;
|
||||
}
|
||||
@@ -26,8 +30,8 @@ DWORD WIN_FUNC FlsAlloc(PFLS_CALLBACK_FUNCTION lpCallback) {
|
||||
|
||||
BOOL WIN_FUNC FlsFree(DWORD dwFlsIndex) {
|
||||
DEBUG_LOG("FlsFree(%u)\n", dwFlsIndex);
|
||||
if (dwFlsIndex >= 0 && dwFlsIndex < MAX_FLS_VALUES && flsValuesUsed[dwFlsIndex]) {
|
||||
flsValuesUsed[dwFlsIndex] = false;
|
||||
if (dwFlsIndex >= 0 && dwFlsIndex < kMaxFlsValues && g_flsValuesUsed[dwFlsIndex]) {
|
||||
g_flsValuesUsed[dwFlsIndex] = false;
|
||||
return TRUE;
|
||||
} else {
|
||||
wibo::lastError = 1;
|
||||
@@ -38,8 +42,8 @@ BOOL WIN_FUNC FlsFree(DWORD dwFlsIndex) {
|
||||
PVOID WIN_FUNC FlsGetValue(DWORD dwFlsIndex) {
|
||||
VERBOSE_LOG("FlsGetValue(%u)\n", dwFlsIndex);
|
||||
PVOID result = nullptr;
|
||||
if (dwFlsIndex >= 0 && dwFlsIndex < MAX_FLS_VALUES && flsValuesUsed[dwFlsIndex]) {
|
||||
result = flsValues[dwFlsIndex];
|
||||
if (dwFlsIndex >= 0 && dwFlsIndex < kMaxFlsValues && g_flsValuesUsed[dwFlsIndex]) {
|
||||
result = g_flsValues[dwFlsIndex];
|
||||
// See https://learn.microsoft.com/en-us/windows/win32/api/fibersapi/nf-fibersapi-flsgetvalue
|
||||
wibo::lastError = ERROR_SUCCESS;
|
||||
} else {
|
||||
@@ -51,8 +55,8 @@ PVOID WIN_FUNC FlsGetValue(DWORD dwFlsIndex) {
|
||||
|
||||
BOOL WIN_FUNC FlsSetValue(DWORD dwFlsIndex, PVOID lpFlsData) {
|
||||
VERBOSE_LOG("FlsSetValue(%u, %p)\n", dwFlsIndex, lpFlsData);
|
||||
if (dwFlsIndex >= 0 && dwFlsIndex < MAX_FLS_VALUES && flsValuesUsed[dwFlsIndex]) {
|
||||
flsValues[dwFlsIndex] = lpFlsData;
|
||||
if (dwFlsIndex >= 0 && dwFlsIndex < kMaxFlsValues && g_flsValuesUsed[dwFlsIndex]) {
|
||||
g_flsValues[dwFlsIndex] = lpFlsData;
|
||||
return TRUE;
|
||||
} else {
|
||||
wibo::lastError = 1;
|
||||
|
||||
Reference in New Issue
Block a user