Minor cleanups

This commit is contained in:
2025-11-11 22:56:02 -07:00
parent 31bc1cd013
commit 5cc8d239dc
6 changed files with 28 additions and 24 deletions

View File

@@ -18,6 +18,7 @@ BOOL WINAPI DuplicateHandle(HANDLE hSourceProcessHandle, HANDLE hSourceHandle, H
(void)dwDesiredAccess; (void)dwDesiredAccess;
(void)dwOptions; (void)dwOptions;
if (!lpTargetHandle) { if (!lpTargetHandle) {
DEBUG_LOG("-> ERROR_INVALID_PARAMETER\n");
setLastError(ERROR_INVALID_PARAMETER); setLastError(ERROR_INVALID_PARAMETER);
return FALSE; return FALSE;
} }
@@ -53,9 +54,11 @@ BOOL WINAPI DuplicateHandle(HANDLE hSourceProcessHandle, HANDLE hSourceHandle, H
} }
if (!handles.duplicateTo(hSourceHandle, handles, *lpTargetHandle, dwDesiredAccess, bInheritHandle, dwOptions)) { if (!handles.duplicateTo(hSourceHandle, handles, *lpTargetHandle, dwDesiredAccess, bInheritHandle, dwOptions)) {
DEBUG_LOG("-> ERROR_INVALID_HANDLE\n");
setLastError(ERROR_INVALID_HANDLE); setLastError(ERROR_INVALID_HANDLE);
return FALSE; return FALSE;
} }
DEBUG_LOG("-> %p\n", *lpTargetHandle);
return TRUE; return TRUE;
} }

View File

@@ -74,8 +74,9 @@ GUEST_PTR WINAPI GetCommandLineW() {
HANDLE WINAPI GetStdHandle(DWORD nStdHandle) { HANDLE WINAPI GetStdHandle(DWORD nStdHandle) {
HOST_CONTEXT_GUARD(); HOST_CONTEXT_GUARD();
DEBUG_LOG("GetStdHandle(%d)\n", nStdHandle); HANDLE handle = files::getStdHandle(nStdHandle);
return files::getStdHandle(nStdHandle); DEBUG_LOG("GetStdHandle(%d) -> %p\n", nStdHandle, handle);
return handle;
} }
BOOL WINAPI SetStdHandle(DWORD nStdHandle, HANDLE hHandle) { BOOL WINAPI SetStdHandle(DWORD nStdHandle, HANDLE hHandle) {
@@ -163,7 +164,7 @@ BOOL WINAPI FreeEnvironmentStringsA(LPCH penv) {
setLastError(ERROR_INVALID_PARAMETER); setLastError(ERROR_INVALID_PARAMETER);
return FALSE; return FALSE;
} }
free(penv); wibo::heap::guestFree(penv);
return TRUE; return TRUE;
} }
@@ -174,7 +175,7 @@ BOOL WINAPI FreeEnvironmentStringsW(LPWCH penv) {
setLastError(ERROR_INVALID_PARAMETER); setLastError(ERROR_INVALID_PARAMETER);
return FALSE; return FALSE;
} }
free(penv); wibo::heap::guestFree(penv);
return TRUE; return TRUE;
} }

View File

@@ -812,7 +812,7 @@ HGLOBAL WINAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes) {
} }
bool zero = (uFlags & GMEM_ZEROINIT) != 0; bool zero = (uFlags & GMEM_ZEROINIT) != 0;
void *ret = doAlloc(static_cast<UINT>(dwBytes), zero); void *ret = doAlloc(static_cast<UINT>(dwBytes), zero);
DEBUG_LOG("-> %p\n", ret); VERBOSE_LOG("-> %p\n", ret);
return toGuestPtr(ret); return toGuestPtr(ret);
} }
@@ -820,10 +820,10 @@ HGLOBAL WINAPI GlobalFree(HGLOBAL hMem) {
HOST_CONTEXT_GUARD(); HOST_CONTEXT_GUARD();
VERBOSE_LOG("GlobalFree(%p)\n", hMem); VERBOSE_LOG("GlobalFree(%p)\n", hMem);
if (doFree(reinterpret_cast<void *>(hMem))) { if (doFree(reinterpret_cast<void *>(hMem))) {
DEBUG_LOG("-> success\n"); VERBOSE_LOG("-> success\n");
return NO_HANDLE; return NO_HANDLE;
} else { } else {
DEBUG_LOG("-> failure\n"); VERBOSE_LOG("-> failure\n");
return hMem; return hMem;
} }
} }
@@ -837,7 +837,7 @@ HGLOBAL WINAPI GlobalReAlloc(HGLOBAL hMem, SIZE_T dwBytes, UINT uFlags) {
} }
bool zero = (uFlags & GMEM_ZEROINIT) != 0; bool zero = (uFlags & GMEM_ZEROINIT) != 0;
void *ret = doRealloc(reinterpret_cast<void *>(hMem), static_cast<UINT>(dwBytes), zero); void *ret = doRealloc(reinterpret_cast<void *>(hMem), static_cast<UINT>(dwBytes), zero);
DEBUG_LOG("-> %p\n", ret); VERBOSE_LOG("-> %p\n", ret);
return toGuestPtr(ret); return toGuestPtr(ret);
} }
@@ -853,7 +853,7 @@ HLOCAL WINAPI LocalAlloc(UINT uFlags, SIZE_T uBytes) {
VERBOSE_LOG("LocalAlloc(%x, %zu)\n", uFlags, static_cast<size_t>(uBytes)); VERBOSE_LOG("LocalAlloc(%x, %zu)\n", uFlags, static_cast<size_t>(uBytes));
bool zero = (uFlags & LMEM_ZEROINIT) != 0; bool zero = (uFlags & LMEM_ZEROINIT) != 0;
if ((uFlags & LMEM_MOVEABLE) != 0) { if ((uFlags & LMEM_MOVEABLE) != 0) {
DEBUG_LOG(" ignoring LMEM_MOVEABLE\n"); VERBOSE_LOG(" ignoring LMEM_MOVEABLE\n");
} }
void *result = doAlloc(static_cast<UINT>(uBytes), zero); void *result = doAlloc(static_cast<UINT>(uBytes), zero);
if (!result) { if (!result) {
@@ -862,7 +862,7 @@ HLOCAL WINAPI LocalAlloc(UINT uFlags, SIZE_T uBytes) {
} }
// Legacy Windows applications (pre-NX and DEP) may expect executable memory from LocalAlloc. // Legacy Windows applications (pre-NX and DEP) may expect executable memory from LocalAlloc.
tryMarkExecutable(result); tryMarkExecutable(result);
DEBUG_LOG(" -> %p\n", result); VERBOSE_LOG(" -> %p\n", result);
return toGuestPtr(result); return toGuestPtr(result);
} }
@@ -870,10 +870,10 @@ HLOCAL WINAPI LocalFree(HLOCAL hMem) {
HOST_CONTEXT_GUARD(); HOST_CONTEXT_GUARD();
VERBOSE_LOG("LocalFree(%p)\n", hMem); VERBOSE_LOG("LocalFree(%p)\n", hMem);
if (doFree(reinterpret_cast<void *>(hMem))) { if (doFree(reinterpret_cast<void *>(hMem))) {
DEBUG_LOG("-> success\n"); VERBOSE_LOG("-> success\n");
return NO_HANDLE; return NO_HANDLE;
} else { } else {
DEBUG_LOG("-> failure\n"); VERBOSE_LOG("-> failure\n");
return hMem; return hMem;
} }
} }
@@ -883,7 +883,7 @@ HLOCAL WINAPI LocalReAlloc(HLOCAL hMem, SIZE_T uBytes, UINT uFlags) {
VERBOSE_LOG("LocalReAlloc(%p, %zu, %x)\n", hMem, static_cast<size_t>(uBytes), uFlags); VERBOSE_LOG("LocalReAlloc(%p, %zu, %x)\n", hMem, static_cast<size_t>(uBytes), uFlags);
bool zero = (uFlags & LMEM_ZEROINIT) != 0; bool zero = (uFlags & LMEM_ZEROINIT) != 0;
if ((uFlags & LMEM_MOVEABLE) != 0) { if ((uFlags & LMEM_MOVEABLE) != 0) {
DEBUG_LOG(" ignoring LMEM_MOVEABLE\n"); VERBOSE_LOG(" ignoring LMEM_MOVEABLE\n");
} }
void *result = doRealloc(reinterpret_cast<void *>(hMem), static_cast<UINT>(uBytes), zero); void *result = doRealloc(reinterpret_cast<void *>(hMem), static_cast<UINT>(uBytes), zero);
if (!result && uBytes != 0) { if (!result && uBytes != 0) {
@@ -892,7 +892,7 @@ HLOCAL WINAPI LocalReAlloc(HLOCAL hMem, SIZE_T uBytes, UINT uFlags) {
} }
// Legacy Windows applications (pre-NX and DEP) may expect executable memory from LocalReAlloc. // Legacy Windows applications (pre-NX and DEP) may expect executable memory from LocalReAlloc.
tryMarkExecutable(result); tryMarkExecutable(result);
DEBUG_LOG(" -> %p\n", result); VERBOSE_LOG(" -> %p\n", result);
return toGuestPtr(result); return toGuestPtr(result);
} }
@@ -904,7 +904,7 @@ HLOCAL WINAPI LocalHandle(LPCVOID pMem) {
LPVOID WINAPI LocalLock(HLOCAL hMem) { LPVOID WINAPI LocalLock(HLOCAL hMem) {
HOST_CONTEXT_GUARD(); HOST_CONTEXT_GUARD();
VERBOSE_LOG("LocalLock(%p)\n", hMem); VERBOSE_LOG("STUB: LocalLock(%p)\n", hMem);
return reinterpret_cast<void *>(hMem); return reinterpret_cast<void *>(hMem);
} }
@@ -923,7 +923,7 @@ SIZE_T WINAPI LocalSize(HLOCAL hMem) {
UINT WINAPI LocalFlags(HLOCAL hMem) { UINT WINAPI LocalFlags(HLOCAL hMem) {
HOST_CONTEXT_GUARD(); HOST_CONTEXT_GUARD();
VERBOSE_LOG("LocalFlags(%p)\n", hMem); VERBOSE_LOG("STUB: LocalFlags(%p)\n", hMem);
(void)hMem; (void)hMem;
return 0; return 0;
} }

View File

@@ -222,7 +222,7 @@ RPC_STATUS WINAPI RpcStringFreeW(GUEST_PTR *string) {
if (it != g_stringBindings.end()) { if (it != g_stringBindings.end()) {
g_stringBindings.erase(it); g_stringBindings.erase(it);
} }
std::free(reinterpret_cast<void *>(value)); wibo::heap::guestFree(reinterpret_cast<void *>(value));
*string = GUEST_NULL; *string = GUEST_NULL;
return RPC_S_OK; return RPC_S_OK;
} }

View File

@@ -65,7 +65,7 @@ void wibo::destroyTib(TEB *tibPtr) {
return; return;
} }
tls::cleanupTib(tibPtr); tls::cleanupTib(tibPtr);
std::free(tibPtr); wibo::heap::guestFree(tibPtr);
} }
void wibo::initializeTibStackInfo(TEB *tibPtr) { void wibo::initializeTibStackInfo(TEB *tibPtr) {

View File

@@ -117,7 +117,7 @@ bool ensureGlobalExpansionCapacityLocked(size_t required) {
auto *newArr = allocateTlsArray(target); auto *newArr = allocateTlsArray(target);
if (!newArr) { if (!newArr) {
for (auto &entry : pending) { for (auto &entry : pending) {
std::free(entry.newArr); wibo::heap::guestFree(entry.newArr);
} }
return false; return false;
} }
@@ -131,7 +131,7 @@ bool ensureGlobalExpansionCapacityLocked(size_t required) {
} }
for (auto &entry : pending) { for (auto &entry : pending) {
if (entry.oldArr) { if (entry.oldArr) {
std::free(entry.oldArr); wibo::heap::guestFree(entry.oldArr);
} }
} }
g_expansionCapacity = target; g_expansionCapacity = target;
@@ -193,7 +193,7 @@ bool ensureModuleArrayCapacityLocked(size_t required) {
auto *newArray = allocateTlsArray(target); auto *newArray = allocateTlsArray(target);
if (!newArray) { if (!newArray) {
for (auto &entry : pending) { for (auto &entry : pending) {
std::free(entry.newArray); wibo::heap::guestFree(entry.newArray);
} }
return false; return false;
} }
@@ -261,16 +261,16 @@ void cleanupTib(TEB *tib) {
} }
std::lock_guard lock(g_tlsMutex); std::lock_guard lock(g_tlsMutex);
if (auto *arr = getExpansionArray(tib)) { if (auto *arr = getExpansionArray(tib)) {
std::free(arr); wibo::heap::guestFree(arr);
setExpansionArray(tib, nullptr); setExpansionArray(tib, nullptr);
} }
if (auto *arr = getModuleArray(tib)) { if (auto *arr = getModuleArray(tib)) {
g_moduleArrays.erase(tib); g_moduleArrays.erase(tib);
std::free(arr); wibo::heap::guestFree(arr);
} }
if (auto garbageIt = g_moduleGarbage.find(tib); garbageIt != g_moduleGarbage.end()) { if (auto garbageIt = g_moduleGarbage.find(tib); garbageIt != g_moduleGarbage.end()) {
for (auto *oldArray : garbageIt->second) { for (auto *oldArray : garbageIt->second) {
std::free(oldArray); wibo::heap::guestFree(oldArray);
} }
g_moduleGarbage.erase(garbageIt); g_moduleGarbage.erase(garbageIt);
} }