mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-09-24 02:00:05 +00:00
os -> wm; *_w32_ -> w32_*_, *_lnx_ -> lnx_*_
This commit is contained in:
+94
-94
@@ -14,7 +14,7 @@ global RIO_EXTENSION_FUNCTION_TABLE w32_rio_functions = {0};
|
||||
//~ rjf: File Info Conversion Helpers
|
||||
|
||||
internal FilePropertyFlags
|
||||
os_w32_file_property_flags_from_dwFileAttributes(DWORD dwFileAttributes)
|
||||
w32_file_property_flags_from_dwFileAttributes(DWORD dwFileAttributes)
|
||||
{
|
||||
FilePropertyFlags flags = 0;
|
||||
if(dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
||||
@@ -25,19 +25,19 @@ os_w32_file_property_flags_from_dwFileAttributes(DWORD dwFileAttributes)
|
||||
}
|
||||
|
||||
internal void
|
||||
os_w32_file_properties_from_attribute_data(FileProperties *properties, WIN32_FILE_ATTRIBUTE_DATA *attributes)
|
||||
w32_file_properties_from_attribute_data(FileProperties *properties, WIN32_FILE_ATTRIBUTE_DATA *attributes)
|
||||
{
|
||||
properties->size = Compose64Bit(attributes->nFileSizeHigh, attributes->nFileSizeLow);
|
||||
os_w32_dense_time_from_file_time(&properties->created, &attributes->ftCreationTime);
|
||||
os_w32_dense_time_from_file_time(&properties->modified, &attributes->ftLastWriteTime);
|
||||
properties->flags = os_w32_file_property_flags_from_dwFileAttributes(attributes->dwFileAttributes);
|
||||
w32_dense_time_from_file_time(&properties->created, &attributes->ftCreationTime);
|
||||
w32_dense_time_from_file_time(&properties->modified, &attributes->ftLastWriteTime);
|
||||
properties->flags = w32_file_property_flags_from_dwFileAttributes(attributes->dwFileAttributes);
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Time Conversion Helpers
|
||||
|
||||
internal void
|
||||
os_w32_date_time_from_system_time(DateTime *out, SYSTEMTIME *in)
|
||||
w32_date_time_from_system_time(DateTime *out, SYSTEMTIME *in)
|
||||
{
|
||||
out->year = in->wYear;
|
||||
out->mon = in->wMonth - 1;
|
||||
@@ -50,7 +50,7 @@ os_w32_date_time_from_system_time(DateTime *out, SYSTEMTIME *in)
|
||||
}
|
||||
|
||||
internal void
|
||||
os_w32_system_time_from_date_time(SYSTEMTIME *out, DateTime *in)
|
||||
w32_system_time_from_date_time(SYSTEMTIME *out, DateTime *in)
|
||||
{
|
||||
out->wYear = (WORD)(in->year);
|
||||
out->wMonth = in->mon + 1;
|
||||
@@ -62,17 +62,17 @@ os_w32_system_time_from_date_time(SYSTEMTIME *out, DateTime *in)
|
||||
}
|
||||
|
||||
internal void
|
||||
os_w32_dense_time_from_file_time(DenseTime *out, FILETIME *in)
|
||||
w32_dense_time_from_file_time(DenseTime *out, FILETIME *in)
|
||||
{
|
||||
SYSTEMTIME systime = {0};
|
||||
FileTimeToSystemTime(in, &systime);
|
||||
DateTime date_time = {0};
|
||||
os_w32_date_time_from_system_time(&date_time, &systime);
|
||||
w32_date_time_from_system_time(&date_time, &systime);
|
||||
*out = dense_time_from_date_time(date_time);
|
||||
}
|
||||
|
||||
internal U32
|
||||
os_w32_sleep_ms_from_endt_us(U64 endt_us)
|
||||
w32_sleep_ms_from_endt_us(U64 endt_us)
|
||||
{
|
||||
U32 sleep_ms = 0;
|
||||
if(endt_us == max_U64)
|
||||
@@ -92,7 +92,7 @@ os_w32_sleep_ms_from_endt_us(U64 endt_us)
|
||||
}
|
||||
|
||||
internal U32
|
||||
os_w32_unix_time_from_file_time(FILETIME file_time)
|
||||
w32_unix_time_from_file_time(FILETIME file_time)
|
||||
{
|
||||
U64 win32_time = ((U64)file_time.dwHighDateTime << 32) | file_time.dwLowDateTime;
|
||||
U64 unix_time64 = ((win32_time - 0x19DB1DED53E8000ULL) / 10000000);
|
||||
@@ -106,44 +106,44 @@ os_w32_unix_time_from_file_time(FILETIME file_time)
|
||||
////////////////////////////////
|
||||
//~ rjf: Entity Functions
|
||||
|
||||
internal OS_W32_Entity *
|
||||
os_w32_entity_alloc(OS_W32_EntityKind kind)
|
||||
internal W32_Entity *
|
||||
w32_entity_alloc(W32_EntityKind kind)
|
||||
{
|
||||
OS_W32_Entity *result = 0;
|
||||
EnterCriticalSection(&os_w32_state.entity_mutex);
|
||||
W32_Entity *result = 0;
|
||||
EnterCriticalSection(&w32_state.entity_mutex);
|
||||
{
|
||||
result = os_w32_state.entity_free;
|
||||
result = w32_state.entity_free;
|
||||
if(result)
|
||||
{
|
||||
SLLStackPop(os_w32_state.entity_free);
|
||||
SLLStackPop(w32_state.entity_free);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = push_array_no_zero(os_w32_state.entity_arena, OS_W32_Entity, 1);
|
||||
result = push_array_no_zero(w32_state.entity_arena, W32_Entity, 1);
|
||||
}
|
||||
MemoryZeroStruct(result);
|
||||
}
|
||||
LeaveCriticalSection(&os_w32_state.entity_mutex);
|
||||
LeaveCriticalSection(&w32_state.entity_mutex);
|
||||
result->kind = kind;
|
||||
return result;
|
||||
}
|
||||
|
||||
internal void
|
||||
os_w32_entity_release(OS_W32_Entity *entity)
|
||||
w32_entity_release(W32_Entity *entity)
|
||||
{
|
||||
entity->kind = OS_W32_EntityKind_Null;
|
||||
EnterCriticalSection(&os_w32_state.entity_mutex);
|
||||
SLLStackPush(os_w32_state.entity_free, entity);
|
||||
LeaveCriticalSection(&os_w32_state.entity_mutex);
|
||||
entity->kind = W32_EntityKind_Null;
|
||||
EnterCriticalSection(&w32_state.entity_mutex);
|
||||
SLLStackPush(w32_state.entity_free, entity);
|
||||
LeaveCriticalSection(&w32_state.entity_mutex);
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Thread Entry Point
|
||||
|
||||
internal DWORD
|
||||
os_w32_thread_entry_point(void *ptr)
|
||||
w32_thread_entry_point(void *ptr)
|
||||
{
|
||||
OS_W32_Entity *entity = (OS_W32_Entity *)ptr;
|
||||
W32_Entity *entity = (W32_Entity *)ptr;
|
||||
ThreadEntryPointFunctionType *func = entity->thread.func;
|
||||
void *thread_ptr = entity->thread.ptr;
|
||||
supplement_thread_base_entry_point(func, thread_ptr);
|
||||
@@ -160,7 +160,7 @@ now_time_us(void)
|
||||
LARGE_INTEGER large_int_counter;
|
||||
if(QueryPerformanceCounter(&large_int_counter))
|
||||
{
|
||||
result = (large_int_counter.QuadPart*Million(1))/os_w32_state.microsecond_resolution;
|
||||
result = (large_int_counter.QuadPart*Million(1))/w32_state.microsecond_resolution;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -170,7 +170,7 @@ now_time_unix(void)
|
||||
{
|
||||
FILETIME file_time;
|
||||
GetSystemTimeAsFileTime(&file_time);
|
||||
U32 unix_time = os_w32_unix_time_from_file_time(file_time);
|
||||
U32 unix_time = w32_unix_time_from_file_time(file_time);
|
||||
return unix_time;
|
||||
}
|
||||
|
||||
@@ -180,7 +180,7 @@ now_time_universal(void)
|
||||
SYSTEMTIME systime = {0};
|
||||
GetSystemTime(&systime);
|
||||
DateTime result = {0};
|
||||
os_w32_date_time_from_system_time(&result, &systime);
|
||||
w32_date_time_from_system_time(&result, &systime);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -188,14 +188,14 @@ internal DateTime
|
||||
universal_from_local_time(DateTime *date_time)
|
||||
{
|
||||
SYSTEMTIME systime = {0};
|
||||
os_w32_system_time_from_date_time(&systime, date_time);
|
||||
w32_system_time_from_date_time(&systime, date_time);
|
||||
FILETIME ftime = {0};
|
||||
SystemTimeToFileTime(&systime, &ftime);
|
||||
FILETIME ftime_local = {0};
|
||||
LocalFileTimeToFileTime(&ftime, &ftime_local);
|
||||
FileTimeToSystemTime(&ftime_local, &systime);
|
||||
DateTime result = {0};
|
||||
os_w32_date_time_from_system_time(&result, &systime);
|
||||
w32_date_time_from_system_time(&result, &systime);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -203,14 +203,14 @@ internal DateTime
|
||||
local_from_universal_time(DateTime *date_time)
|
||||
{
|
||||
SYSTEMTIME systime = {0};
|
||||
os_w32_system_time_from_date_time(&systime, date_time);
|
||||
w32_system_time_from_date_time(&systime, date_time);
|
||||
FILETIME ftime = {0};
|
||||
SystemTimeToFileTime(&systime, &ftime);
|
||||
FILETIME ftime_local = {0};
|
||||
FileTimeToLocalFileTime(&ftime, &ftime_local);
|
||||
FileTimeToSystemTime(&ftime_local, &systime);
|
||||
DateTime result = {0};
|
||||
os_w32_date_time_from_system_time(&result, &systime);
|
||||
w32_date_time_from_system_time(&result, &systime);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -361,7 +361,7 @@ shared_memory_view_close(SharedMemory handle, void *ptr, Rng1U64 range)
|
||||
internal SystemInfo *
|
||||
get_system_info(void)
|
||||
{
|
||||
return &os_w32_state.system_info;
|
||||
return &w32_state.system_info;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
@@ -425,10 +425,10 @@ set_platform_thread_name(String8 name)
|
||||
internal Thread
|
||||
thread_launch(ThreadEntryPointFunctionType *f, void *p)
|
||||
{
|
||||
OS_W32_Entity *entity = os_w32_entity_alloc(OS_W32_EntityKind_Thread);
|
||||
W32_Entity *entity = w32_entity_alloc(W32_EntityKind_Thread);
|
||||
entity->thread.func = f;
|
||||
entity->thread.ptr = p;
|
||||
entity->thread.handle = CreateThread(0, 0, os_w32_thread_entry_point, entity, 0, &entity->thread.tid);
|
||||
entity->thread.handle = CreateThread(0, 0, w32_thread_entry_point, entity, 0, &entity->thread.tid);
|
||||
Thread result = {IntFromPtr(entity)};
|
||||
return result;
|
||||
}
|
||||
@@ -436,14 +436,14 @@ thread_launch(ThreadEntryPointFunctionType *f, void *p)
|
||||
internal B32
|
||||
thread_join(Thread thread, U64 endt_us)
|
||||
{
|
||||
DWORD sleep_ms = os_w32_sleep_ms_from_endt_us(endt_us);
|
||||
OS_W32_Entity *entity = (OS_W32_Entity *)PtrFromInt(thread.u64[0]);
|
||||
DWORD sleep_ms = w32_sleep_ms_from_endt_us(endt_us);
|
||||
W32_Entity *entity = (W32_Entity *)PtrFromInt(thread.u64[0]);
|
||||
DWORD wait_result = WAIT_OBJECT_0;
|
||||
if(entity != 0)
|
||||
{
|
||||
wait_result = WaitForSingleObject(entity->thread.handle, sleep_ms);
|
||||
CloseHandle(entity->thread.handle);
|
||||
os_w32_entity_release(entity);
|
||||
w32_entity_release(entity);
|
||||
}
|
||||
return (wait_result == WAIT_OBJECT_0);
|
||||
}
|
||||
@@ -451,11 +451,11 @@ thread_join(Thread thread, U64 endt_us)
|
||||
internal void
|
||||
thread_detach(Thread thread)
|
||||
{
|
||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(thread.u64[0]);
|
||||
W32_Entity *entity = (W32_Entity*)PtrFromInt(thread.u64[0]);
|
||||
if(entity != 0)
|
||||
{
|
||||
CloseHandle(entity->thread.handle);
|
||||
os_w32_entity_release(entity);
|
||||
w32_entity_release(entity);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -486,7 +486,7 @@ safe_call(ThreadEntryPointFunctionType *func, ThreadEntryPointFunctionType *fail
|
||||
internal Mutex
|
||||
mutex_alloc(void)
|
||||
{
|
||||
OS_W32_Entity *entity = os_w32_entity_alloc(OS_W32_EntityKind_Mutex);
|
||||
W32_Entity *entity = w32_entity_alloc(W32_EntityKind_Mutex);
|
||||
InitializeCriticalSection(&entity->mutex);
|
||||
Mutex result = {IntFromPtr(entity)};
|
||||
return result;
|
||||
@@ -495,22 +495,22 @@ mutex_alloc(void)
|
||||
internal void
|
||||
mutex_release(Mutex mutex)
|
||||
{
|
||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(mutex.u64[0]);
|
||||
W32_Entity *entity = (W32_Entity*)PtrFromInt(mutex.u64[0]);
|
||||
DeleteCriticalSection(&entity->mutex);
|
||||
os_w32_entity_release(entity);
|
||||
w32_entity_release(entity);
|
||||
}
|
||||
|
||||
internal void
|
||||
mutex_take(Mutex mutex)
|
||||
{
|
||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(mutex.u64[0]);
|
||||
W32_Entity *entity = (W32_Entity*)PtrFromInt(mutex.u64[0]);
|
||||
EnterCriticalSection(&entity->mutex);
|
||||
}
|
||||
|
||||
internal void
|
||||
mutex_drop(Mutex mutex)
|
||||
{
|
||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(mutex.u64[0]);
|
||||
W32_Entity *entity = (W32_Entity*)PtrFromInt(mutex.u64[0]);
|
||||
LeaveCriticalSection(&entity->mutex);
|
||||
}
|
||||
|
||||
@@ -519,7 +519,7 @@ mutex_drop(Mutex mutex)
|
||||
internal RWMutex
|
||||
rw_mutex_alloc(void)
|
||||
{
|
||||
OS_W32_Entity *entity = os_w32_entity_alloc(OS_W32_EntityKind_RWMutex);
|
||||
W32_Entity *entity = w32_entity_alloc(W32_EntityKind_RWMutex);
|
||||
InitializeSRWLock(&entity->rw_mutex);
|
||||
RWMutex result = {IntFromPtr(entity)};
|
||||
return result;
|
||||
@@ -528,14 +528,14 @@ rw_mutex_alloc(void)
|
||||
internal void
|
||||
rw_mutex_release(RWMutex rw_mutex)
|
||||
{
|
||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(rw_mutex.u64[0]);
|
||||
os_w32_entity_release(entity);
|
||||
W32_Entity *entity = (W32_Entity*)PtrFromInt(rw_mutex.u64[0]);
|
||||
w32_entity_release(entity);
|
||||
}
|
||||
|
||||
internal void
|
||||
rw_mutex_take(RWMutex rw_mutex, B32 write_mode)
|
||||
{
|
||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(rw_mutex.u64[0]);
|
||||
W32_Entity *entity = (W32_Entity*)PtrFromInt(rw_mutex.u64[0]);
|
||||
if(write_mode)
|
||||
{
|
||||
AcquireSRWLockExclusive(&entity->rw_mutex);
|
||||
@@ -549,7 +549,7 @@ rw_mutex_take(RWMutex rw_mutex, B32 write_mode)
|
||||
internal void
|
||||
rw_mutex_drop(RWMutex rw_mutex, B32 write_mode)
|
||||
{
|
||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(rw_mutex.u64[0]);
|
||||
W32_Entity *entity = (W32_Entity*)PtrFromInt(rw_mutex.u64[0]);
|
||||
if(write_mode)
|
||||
{
|
||||
ReleaseSRWLockExclusive(&entity->rw_mutex);
|
||||
@@ -565,7 +565,7 @@ rw_mutex_drop(RWMutex rw_mutex, B32 write_mode)
|
||||
internal CondVar
|
||||
cond_var_alloc(void)
|
||||
{
|
||||
OS_W32_Entity *entity = os_w32_entity_alloc(OS_W32_EntityKind_ConditionVariable);
|
||||
W32_Entity *entity = w32_entity_alloc(W32_EntityKind_ConditionVariable);
|
||||
InitializeConditionVariable(&entity->cv);
|
||||
CondVar result = {IntFromPtr(entity)};
|
||||
return result;
|
||||
@@ -574,19 +574,19 @@ cond_var_alloc(void)
|
||||
internal void
|
||||
cond_var_release(CondVar cv)
|
||||
{
|
||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(cv.u64[0]);
|
||||
os_w32_entity_release(entity);
|
||||
W32_Entity *entity = (W32_Entity*)PtrFromInt(cv.u64[0]);
|
||||
w32_entity_release(entity);
|
||||
}
|
||||
|
||||
internal B32
|
||||
cond_var_wait(CondVar cv, Mutex mutex, U64 endt_us)
|
||||
{
|
||||
U32 sleep_ms = os_w32_sleep_ms_from_endt_us(endt_us);
|
||||
U32 sleep_ms = w32_sleep_ms_from_endt_us(endt_us);
|
||||
BOOL result = 0;
|
||||
if(sleep_ms > 0)
|
||||
{
|
||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(cv.u64[0]);
|
||||
OS_W32_Entity *mutex_entity = (OS_W32_Entity*)PtrFromInt(mutex.u64[0]);
|
||||
W32_Entity *entity = (W32_Entity*)PtrFromInt(cv.u64[0]);
|
||||
W32_Entity *mutex_entity = (W32_Entity*)PtrFromInt(mutex.u64[0]);
|
||||
result = SleepConditionVariableCS(&entity->cv, &mutex_entity->mutex, sleep_ms);
|
||||
}
|
||||
return result;
|
||||
@@ -595,12 +595,12 @@ cond_var_wait(CondVar cv, Mutex mutex, U64 endt_us)
|
||||
internal B32
|
||||
cond_var_wait_rw(CondVar cv, RWMutex mutex_rw, B32 write_mode, U64 endt_us)
|
||||
{
|
||||
U32 sleep_ms = os_w32_sleep_ms_from_endt_us(endt_us);
|
||||
U32 sleep_ms = w32_sleep_ms_from_endt_us(endt_us);
|
||||
BOOL result = 0;
|
||||
if(sleep_ms > 0)
|
||||
{
|
||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(cv.u64[0]);
|
||||
OS_W32_Entity *mutex_entity = (OS_W32_Entity*)PtrFromInt(mutex_rw.u64[0]);
|
||||
W32_Entity *entity = (W32_Entity*)PtrFromInt(cv.u64[0]);
|
||||
W32_Entity *mutex_entity = (W32_Entity*)PtrFromInt(mutex_rw.u64[0]);
|
||||
result = SleepConditionVariableSRW(&entity->cv, &mutex_entity->rw_mutex, sleep_ms,
|
||||
write_mode ? 0 : CONDITION_VARIABLE_LOCKMODE_SHARED);
|
||||
}
|
||||
@@ -610,14 +610,14 @@ cond_var_wait_rw(CondVar cv, RWMutex mutex_rw, B32 write_mode, U64 endt_us)
|
||||
internal void
|
||||
cond_var_signal(CondVar cv)
|
||||
{
|
||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(cv.u64[0]);
|
||||
W32_Entity *entity = (W32_Entity*)PtrFromInt(cv.u64[0]);
|
||||
WakeConditionVariable(&entity->cv);
|
||||
}
|
||||
|
||||
internal void
|
||||
cond_var_broadcast(CondVar cv)
|
||||
{
|
||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(cv.u64[0]);
|
||||
W32_Entity *entity = (W32_Entity*)PtrFromInt(cv.u64[0]);
|
||||
WakeAllConditionVariable(&entity->cv);
|
||||
}
|
||||
|
||||
@@ -662,7 +662,7 @@ semaphore_close(Semaphore semaphore)
|
||||
internal B32
|
||||
semaphore_take(Semaphore semaphore, U64 endt_us)
|
||||
{
|
||||
U32 sleep_ms = os_w32_sleep_ms_from_endt_us(endt_us);
|
||||
U32 sleep_ms = w32_sleep_ms_from_endt_us(endt_us);
|
||||
HANDLE handle = (HANDLE)semaphore.u64[0];
|
||||
DWORD wait_result = WaitForSingleObject(handle, sleep_ms);
|
||||
B32 result = (wait_result == WAIT_OBJECT_0);
|
||||
@@ -681,7 +681,7 @@ semaphore_drop(Semaphore semaphore)
|
||||
internal Barrier
|
||||
barrier_alloc(U64 count)
|
||||
{
|
||||
OS_W32_Entity *entity = os_w32_entity_alloc(OS_W32_EntityKind_Barrier);
|
||||
W32_Entity *entity = w32_entity_alloc(W32_EntityKind_Barrier);
|
||||
if(entity != 0)
|
||||
{
|
||||
BOOL init_good = InitializeSynchronizationBarrier(&entity->sb, count, -1);
|
||||
@@ -694,18 +694,18 @@ barrier_alloc(U64 count)
|
||||
internal void
|
||||
barrier_release(Barrier barrier)
|
||||
{
|
||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(barrier.u64[0]);
|
||||
W32_Entity *entity = (W32_Entity*)PtrFromInt(barrier.u64[0]);
|
||||
if(entity != 0)
|
||||
{
|
||||
DeleteSynchronizationBarrier(&entity->sb);
|
||||
os_w32_entity_release(entity);
|
||||
w32_entity_release(entity);
|
||||
}
|
||||
}
|
||||
|
||||
internal void
|
||||
barrier_wait(Barrier barrier)
|
||||
{
|
||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(barrier.u64[0]);
|
||||
W32_Entity *entity = (W32_Entity*)PtrFromInt(barrier.u64[0]);
|
||||
if(entity != 0)
|
||||
{
|
||||
EnterSynchronizationBarrier(&entity->sb, 0);
|
||||
@@ -826,7 +826,7 @@ file_set_time(File file, DateTime time)
|
||||
B32 result = 0;
|
||||
HANDLE handle = (HANDLE)file.u64[0];
|
||||
SYSTEMTIME system_time = {0};
|
||||
os_w32_system_time_from_date_time(&system_time, &time);
|
||||
w32_system_time_from_date_time(&system_time, &time);
|
||||
FILETIME file_time = {0};
|
||||
result = (SystemTimeToFileTime(&system_time, &file_time) &&
|
||||
SetFileTime(handle, &file_time, &file_time, &file_time));
|
||||
@@ -846,9 +846,9 @@ properties_from_file(File file)
|
||||
U32 size_lo = info.nFileSizeLow;
|
||||
U32 size_hi = info.nFileSizeHigh;
|
||||
props.size = (U64)size_lo | (((U64)size_hi)<<32);
|
||||
os_w32_dense_time_from_file_time(&props.modified, &info.ftLastWriteTime);
|
||||
os_w32_dense_time_from_file_time(&props.created, &info.ftCreationTime);
|
||||
props.flags = os_w32_file_property_flags_from_dwFileAttributes(info.dwFileAttributes);
|
||||
w32_dense_time_from_file_time(&props.modified, &info.ftLastWriteTime);
|
||||
w32_dense_time_from_file_time(&props.created, &info.ftCreationTime);
|
||||
props.flags = w32_file_property_flags_from_dwFileAttributes(info.dwFileAttributes);
|
||||
}
|
||||
return props;
|
||||
}
|
||||
@@ -968,9 +968,9 @@ properties_from_file_path(String8 path)
|
||||
if(handle != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
props.size = Compose64Bit(find_data.nFileSizeHigh, find_data.nFileSizeLow);
|
||||
os_w32_dense_time_from_file_time(&props.created, &find_data.ftCreationTime);
|
||||
os_w32_dense_time_from_file_time(&props.modified, &find_data.ftLastWriteTime);
|
||||
props.flags = os_w32_file_property_flags_from_dwFileAttributes(find_data.dwFileAttributes);
|
||||
w32_dense_time_from_file_time(&props.created, &find_data.ftCreationTime);
|
||||
w32_dense_time_from_file_time(&props.modified, &find_data.ftLastWriteTime);
|
||||
props.flags = w32_file_property_flags_from_dwFileAttributes(find_data.dwFileAttributes);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1093,7 +1093,7 @@ file_iter_begin(Arena *arena, String8 path, FileIterFlags flags)
|
||||
String16 path16 = str16_from_8(scratch.arena, path_with_wildcard);
|
||||
FileIter *iter = push_array(arena, FileIter, 1);
|
||||
iter->flags = flags;
|
||||
OS_W32_FileIter *w32_iter = (OS_W32_FileIter*)iter->memory;
|
||||
W32_FileIter *w32_iter = (W32_FileIter*)iter->memory;
|
||||
if(path.size == 0)
|
||||
{
|
||||
w32_iter->is_volume_iter = 1;
|
||||
@@ -1124,7 +1124,7 @@ file_iter_next(Arena *arena, FileIter *iter, FileInfo *info_out)
|
||||
{
|
||||
B32 result = 0;
|
||||
FileIterFlags flags = iter->flags;
|
||||
OS_W32_FileIter *w32_iter = (OS_W32_FileIter*)iter->memory;
|
||||
W32_FileIter *w32_iter = (W32_FileIter*)iter->memory;
|
||||
switch(w32_iter->is_volume_iter)
|
||||
{
|
||||
//- rjf: file iteration
|
||||
@@ -1166,9 +1166,9 @@ file_iter_next(Arena *arena, FileIter *iter, FileInfo *info_out)
|
||||
if (usable_file){
|
||||
info_out->name = str8_from_16(arena, str16_cstring((U16*)file_name));
|
||||
info_out->props.size = (U64)w32_iter->find_data.nFileSizeLow | (((U64)w32_iter->find_data.nFileSizeHigh)<<32);
|
||||
os_w32_dense_time_from_file_time(&info_out->props.created, &w32_iter->find_data.ftCreationTime);
|
||||
os_w32_dense_time_from_file_time(&info_out->props.modified, &w32_iter->find_data.ftLastWriteTime);
|
||||
info_out->props.flags = os_w32_file_property_flags_from_dwFileAttributes(attributes);
|
||||
w32_dense_time_from_file_time(&info_out->props.created, &w32_iter->find_data.ftCreationTime);
|
||||
w32_dense_time_from_file_time(&info_out->props.modified, &w32_iter->find_data.ftLastWriteTime);
|
||||
info_out->props.flags = w32_file_property_flags_from_dwFileAttributes(attributes);
|
||||
result = 1;
|
||||
if (!FindNextFileW(w32_iter->handle, &w32_iter->find_data)){
|
||||
iter->flags |= FileIterFlag_Done;
|
||||
@@ -1202,7 +1202,7 @@ file_iter_next(Arena *arena, FileIter *iter, FileInfo *info_out)
|
||||
internal void
|
||||
file_iter_end(FileIter *iter)
|
||||
{
|
||||
OS_W32_FileIter *w32_iter = (OS_W32_FileIter*)iter->memory;
|
||||
W32_FileIter *w32_iter = (W32_FileIter*)iter->memory;
|
||||
HANDLE zero_handle;
|
||||
MemoryZeroStruct(&zero_handle);
|
||||
if(!MemoryMatchStruct(&zero_handle, &w32_iter->handle))
|
||||
@@ -1248,7 +1248,7 @@ abort_self(S32 exit_code)
|
||||
internal ProcessInfo *
|
||||
get_process_info(void)
|
||||
{
|
||||
return &os_w32_state.process_info;
|
||||
return &w32_state.process_info;
|
||||
}
|
||||
|
||||
internal String8
|
||||
@@ -1274,7 +1274,7 @@ get_process_start_time_unix(void)
|
||||
FILETIME user_time;
|
||||
if(GetProcessTimes(handle, &start_time, &exit_time, &kernel_time, &user_time))
|
||||
{
|
||||
result = os_w32_unix_time_from_file_time(start_time);
|
||||
result = w32_unix_time_from_file_time(start_time);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -1315,7 +1315,7 @@ process_launch(ProcessLaunchParams *params)
|
||||
{
|
||||
str8_list_push(scratch.arena, &all_opts, n->string);
|
||||
}
|
||||
for(String8Node *n = os_w32_state.process_info.environment.first; n != 0; n = n->next)
|
||||
for(String8Node *n = w32_state.process_info.environment.first; n != 0; n = n->next)
|
||||
{
|
||||
str8_list_push(scratch.arena, &all_opts, n->string);
|
||||
}
|
||||
@@ -1386,7 +1386,7 @@ internal B32
|
||||
process_join(Process process, U64 endt_us, U64 *exit_code_out)
|
||||
{
|
||||
HANDLE process_handle = (HANDLE)(process.u64[0]);
|
||||
DWORD sleep_ms = os_w32_sleep_ms_from_endt_us(endt_us);
|
||||
DWORD sleep_ms = w32_sleep_ms_from_endt_us(endt_us);
|
||||
DWORD result = WaitForSingleObject(process_handle, sleep_ms);
|
||||
B32 process_joined = (result == WAIT_OBJECT_0);
|
||||
if(process_joined && exit_code_out)
|
||||
@@ -1784,22 +1784,22 @@ w32_entry_point_caller(int argc, WCHAR **wargv)
|
||||
// (we need to set up some basics before this layer can supply
|
||||
// memory allocation primitives)
|
||||
{
|
||||
os_w32_state.microsecond_resolution = 1;
|
||||
w32_state.microsecond_resolution = 1;
|
||||
LARGE_INTEGER large_int_resolution;
|
||||
if(QueryPerformanceFrequency(&large_int_resolution))
|
||||
{
|
||||
os_w32_state.microsecond_resolution = large_int_resolution.QuadPart;
|
||||
w32_state.microsecond_resolution = large_int_resolution.QuadPart;
|
||||
}
|
||||
}
|
||||
{
|
||||
SystemInfo *info = &os_w32_state.system_info;
|
||||
SystemInfo *info = &w32_state.system_info;
|
||||
info->logical_processor_count = (U64)sysinfo.dwNumberOfProcessors;
|
||||
info->page_size = sysinfo.dwPageSize;
|
||||
info->large_page_size = GetLargePageMinimum();
|
||||
info->allocation_granularity = sysinfo.dwAllocationGranularity;
|
||||
}
|
||||
{
|
||||
ProcessInfo *info = &os_w32_state.process_info;
|
||||
ProcessInfo *info = &w32_state.process_info;
|
||||
info->large_pages_allowed = large_pages_allowed;
|
||||
info->pid = GetCurrentProcessId();
|
||||
}
|
||||
@@ -1820,7 +1820,7 @@ w32_entry_point_caller(int argc, WCHAR **wargv)
|
||||
str8_match(arg8, str8_lit("-large_pages"), StringMatchFlag_CaseInsensitive))
|
||||
{
|
||||
arena_default_flags = ArenaFlag_LargePages;
|
||||
arena_default_reserve_size = Max(MB(64), os_w32_state.system_info.large_page_size);
|
||||
arena_default_reserve_size = Max(MB(64), w32_state.system_info.large_page_size);
|
||||
arena_default_commit_size = arena_default_reserve_size;
|
||||
}
|
||||
if(str8_match(arg8, str8_lit("--gen_crash_dump"), StringMatchFlag_CaseInsensitive) ||
|
||||
@@ -1838,9 +1838,9 @@ w32_entry_point_caller(int argc, WCHAR **wargv)
|
||||
//- rjf: set up dynamically-alloc'd state
|
||||
Arena *arena = arena_alloc();
|
||||
{
|
||||
os_w32_state.arena = arena;
|
||||
w32_state.arena = arena;
|
||||
{
|
||||
SystemInfo *info = &os_w32_state.system_info;
|
||||
SystemInfo *info = &w32_state.system_info;
|
||||
U8 buffer[MAX_COMPUTERNAME_LENGTH + 1] = {0};
|
||||
DWORD size = MAX_COMPUTERNAME_LENGTH + 1;
|
||||
if(GetComputerNameA((char*)buffer, &size))
|
||||
@@ -1850,7 +1850,7 @@ w32_entry_point_caller(int argc, WCHAR **wargv)
|
||||
}
|
||||
}
|
||||
{
|
||||
ProcessInfo *info = &os_w32_state.process_info;
|
||||
ProcessInfo *info = &w32_state.process_info;
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
DWORD size = KB(32);
|
||||
@@ -1896,8 +1896,8 @@ w32_entry_point_caller(int argc, WCHAR **wargv)
|
||||
}
|
||||
|
||||
//- rjf: set up entity storage
|
||||
InitializeCriticalSection(&os_w32_state.entity_mutex);
|
||||
os_w32_state.entity_arena = arena_alloc();
|
||||
InitializeCriticalSection(&w32_state.entity_mutex);
|
||||
w32_state.entity_arena = arena_alloc();
|
||||
|
||||
//- rjf: call into "real" entry point
|
||||
main_thread_base_entry_point(argc, argv);
|
||||
|
||||
+28
-28
@@ -28,8 +28,8 @@
|
||||
////////////////////////////////
|
||||
//~ rjf: File Iterator Types
|
||||
|
||||
typedef struct OS_W32_FileIter OS_W32_FileIter;
|
||||
struct OS_W32_FileIter
|
||||
typedef struct W32_FileIter W32_FileIter;
|
||||
struct W32_FileIter
|
||||
{
|
||||
HANDLE handle;
|
||||
WIN32_FIND_DATAW find_data;
|
||||
@@ -37,27 +37,27 @@ struct OS_W32_FileIter
|
||||
String8Array drive_strings;
|
||||
U64 drive_strings_iter_idx;
|
||||
};
|
||||
StaticAssert(sizeof(Member(FileIter, memory)) >= sizeof(OS_W32_FileIter), file_iter_memory_size);
|
||||
StaticAssert(sizeof(Member(FileIter, memory)) >= sizeof(W32_FileIter), file_iter_memory_size);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Entity Types
|
||||
|
||||
typedef enum OS_W32_EntityKind
|
||||
typedef enum W32_EntityKind
|
||||
{
|
||||
OS_W32_EntityKind_Null,
|
||||
OS_W32_EntityKind_Thread,
|
||||
OS_W32_EntityKind_Mutex,
|
||||
OS_W32_EntityKind_RWMutex,
|
||||
OS_W32_EntityKind_ConditionVariable,
|
||||
OS_W32_EntityKind_Barrier,
|
||||
W32_EntityKind_Null,
|
||||
W32_EntityKind_Thread,
|
||||
W32_EntityKind_Mutex,
|
||||
W32_EntityKind_RWMutex,
|
||||
W32_EntityKind_ConditionVariable,
|
||||
W32_EntityKind_Barrier,
|
||||
}
|
||||
OS_W32_EntityKind;
|
||||
W32_EntityKind;
|
||||
|
||||
typedef struct OS_W32_Entity OS_W32_Entity;
|
||||
struct OS_W32_Entity
|
||||
typedef struct W32_Entity W32_Entity;
|
||||
struct W32_Entity
|
||||
{
|
||||
OS_W32_Entity *next;
|
||||
OS_W32_EntityKind kind;
|
||||
W32_Entity *next;
|
||||
W32_EntityKind kind;
|
||||
union
|
||||
{
|
||||
struct
|
||||
@@ -77,8 +77,8 @@ struct OS_W32_Entity
|
||||
////////////////////////////////
|
||||
//~ rjf: State
|
||||
|
||||
typedef struct OS_W32_State OS_W32_State;
|
||||
struct OS_W32_State
|
||||
typedef struct W32_State W32_State;
|
||||
struct W32_State
|
||||
{
|
||||
Arena *arena;
|
||||
|
||||
@@ -90,37 +90,37 @@ struct OS_W32_State
|
||||
// rjf: entity storage
|
||||
CRITICAL_SECTION entity_mutex;
|
||||
Arena *entity_arena;
|
||||
OS_W32_Entity *entity_free;
|
||||
W32_Entity *entity_free;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Globals
|
||||
|
||||
global OS_W32_State os_w32_state = {0};
|
||||
global W32_State w32_state = {0};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: File Info Conversion Helpers
|
||||
|
||||
internal FilePropertyFlags os_w32_file_property_flags_from_dwFileAttributes(DWORD dwFileAttributes);
|
||||
internal void os_w32_file_properties_from_attribute_data(FileProperties *properties, WIN32_FILE_ATTRIBUTE_DATA *attributes);
|
||||
internal FilePropertyFlags w32_file_property_flags_from_dwFileAttributes(DWORD dwFileAttributes);
|
||||
internal void w32_file_properties_from_attribute_data(FileProperties *properties, WIN32_FILE_ATTRIBUTE_DATA *attributes);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Time Conversion Helpers
|
||||
|
||||
internal void os_w32_date_time_from_system_time(DateTime *out, SYSTEMTIME *in);
|
||||
internal void os_w32_system_time_from_date_time(SYSTEMTIME *out, DateTime *in);
|
||||
internal void os_w32_dense_time_from_file_time(DenseTime *out, FILETIME *in);
|
||||
internal U32 os_w32_sleep_ms_from_endt_us(U64 endt_us);
|
||||
internal void w32_date_time_from_system_time(DateTime *out, SYSTEMTIME *in);
|
||||
internal void w32_system_time_from_date_time(SYSTEMTIME *out, DateTime *in);
|
||||
internal void w32_dense_time_from_file_time(DenseTime *out, FILETIME *in);
|
||||
internal U32 w32_sleep_ms_from_endt_us(U64 endt_us);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Entity Functions
|
||||
|
||||
internal OS_W32_Entity *os_w32_entity_alloc(OS_W32_EntityKind kind);
|
||||
internal void os_w32_entity_release(OS_W32_Entity *entity);
|
||||
internal W32_Entity *w32_entity_alloc(W32_EntityKind kind);
|
||||
internal void w32_entity_release(W32_Entity *entity);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Thread Entry Point
|
||||
|
||||
internal DWORD os_w32_thread_entry_point(void *ptr);
|
||||
internal DWORD w32_thread_entry_point(void *ptr);
|
||||
|
||||
#endif // WIN32_BASE_H
|
||||
|
||||
+327
-347
File diff suppressed because it is too large
Load Diff
+192
-198
@@ -1,8 +1,8 @@
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DEMON_CORE_WIN32_H
|
||||
#define DEMON_CORE_WIN32_H
|
||||
#ifndef WIN32_DEMON_H
|
||||
#define WIN32_DEMON_H
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Windows Includes
|
||||
@@ -15,173 +15,173 @@
|
||||
////////////////////////////////
|
||||
//~ rjf: Win32 Exception Codes
|
||||
|
||||
#define DMN_W32_EXCEPTION_BREAKPOINT 0x80000003u
|
||||
#define DMN_W32_EXCEPTION_SINGLE_STEP 0x80000004u
|
||||
#define DMN_W32_EXCEPTION_LONG_JUMP 0x80000026u
|
||||
#define DMN_W32_EXCEPTION_ACCESS_VIOLATION 0xC0000005u
|
||||
#define DMN_W32_EXCEPTION_ARRAY_BOUNDS_EXCEEDED 0xC000008Cu
|
||||
#define DMN_W32_EXCEPTION_DATA_TYPE_MISALIGNMENT 0x80000002u
|
||||
#define DMN_W32_EXCEPTION_GUARD_PAGE_VIOLATION 0x80000001u
|
||||
#define DMN_W32_EXCEPTION_FLT_DENORMAL_OPERAND 0xC000008Du
|
||||
#define DMN_W32_EXCEPTION_FLT_DEVIDE_BY_ZERO 0xC000008Eu
|
||||
#define DMN_W32_EXCEPTION_FLT_INEXACT_RESULT 0xC000008Fu
|
||||
#define DMN_W32_EXCEPTION_FLT_INVALID_OPERATION 0xC0000090u
|
||||
#define DMN_W32_EXCEPTION_FLT_OVERFLOW 0xC0000091u
|
||||
#define DMN_W32_EXCEPTION_FLT_STACK_CHECK 0xC0000092u
|
||||
#define DMN_W32_EXCEPTION_FLT_UNDERFLOW 0xC0000093u
|
||||
#define DMN_W32_EXCEPTION_INT_DIVIDE_BY_ZERO 0xC0000094u
|
||||
#define DMN_W32_EXCEPTION_INT_OVERFLOW 0xC0000095u
|
||||
#define DMN_W32_EXCEPTION_PRIVILEGED_INSTRUCTION 0xC0000096u
|
||||
#define DMN_W32_EXCEPTION_ILLEGAL_INSTRUCTION 0xC000001Du
|
||||
#define DMN_W32_EXCEPTION_IN_PAGE_ERROR 0xC0000006u
|
||||
#define DMN_W32_EXCEPTION_INVALID_DISPOSITION 0xC0000026u
|
||||
#define DMN_W32_EXCEPTION_NONCONTINUABLE 0xC0000025u
|
||||
#define DMN_W32_EXCEPTION_STACK_OVERFLOW 0xC00000FDu
|
||||
#define DMN_W32_EXCEPTION_INVALID_HANDLE 0xC0000008u
|
||||
#define DMN_W32_EXCEPTION_UNWIND_CONSOLIDATE 0x80000029u
|
||||
#define DMN_W32_EXCEPTION_DLL_NOT_FOUND 0xC0000135u
|
||||
#define DMN_W32_EXCEPTION_ORDINAL_NOT_FOUND 0xC0000138u
|
||||
#define DMN_W32_EXCEPTION_ENTRY_POINT_NOT_FOUND 0xC0000139u
|
||||
#define DMN_W32_EXCEPTION_DLL_INIT_FAILED 0xC0000142u
|
||||
#define DMN_W32_EXCEPTION_CONTROL_C_EXIT 0xC000013Au
|
||||
#define DMN_W32_EXCEPTION_FLT_MULTIPLE_FAULTS 0xC00002B4u
|
||||
#define DMN_W32_EXCEPTION_FLT_MULTIPLE_TRAPS 0xC00002B5u
|
||||
#define DMN_W32_EXCEPTION_NAT_CONSUMPTION 0xC00002C9u
|
||||
#define DMN_W32_EXCEPTION_HEAP_CORRUPTION 0xC0000374u
|
||||
#define DMN_W32_EXCEPTION_STACK_BUFFER_OVERRUN 0xC0000409u
|
||||
#define DMN_W32_EXCEPTION_INVALID_CRUNTIME_PARAM 0xC0000417u
|
||||
#define DMN_W32_EXCEPTION_ASSERT_FAILURE 0xC0000420u
|
||||
#define DMN_W32_EXCEPTION_NO_MEMORY 0xC0000017u
|
||||
#define DMN_W32_EXCEPTION_THROW 0xE06D7363u
|
||||
#define DMN_W32_EXCEPTION_SET_THREAD_NAME 0x406d1388u
|
||||
#define W32_DMN_EXCEPTION_BREAKPOINT 0x80000003u
|
||||
#define W32_DMN_EXCEPTION_SINGLE_STEP 0x80000004u
|
||||
#define W32_DMN_EXCEPTION_LONG_JUMP 0x80000026u
|
||||
#define W32_DMN_EXCEPTION_ACCESS_VIOLATION 0xC0000005u
|
||||
#define W32_DMN_EXCEPTION_ARRAY_BOUNDS_EXCEEDED 0xC000008Cu
|
||||
#define W32_DMN_EXCEPTION_DATA_TYPE_MISALIGNMENT 0x80000002u
|
||||
#define W32_DMN_EXCEPTION_GUARD_PAGE_VIOLATION 0x80000001u
|
||||
#define W32_DMN_EXCEPTION_FLT_DENORMAL_OPERAND 0xC000008Du
|
||||
#define W32_DMN_EXCEPTION_FLT_DEVIDE_BY_ZERO 0xC000008Eu
|
||||
#define W32_DMN_EXCEPTION_FLT_INEXACT_RESULT 0xC000008Fu
|
||||
#define W32_DMN_EXCEPTION_FLT_INVALID_OPERATION 0xC0000090u
|
||||
#define W32_DMN_EXCEPTION_FLT_OVERFLOW 0xC0000091u
|
||||
#define W32_DMN_EXCEPTION_FLT_STACK_CHECK 0xC0000092u
|
||||
#define W32_DMN_EXCEPTION_FLT_UNDERFLOW 0xC0000093u
|
||||
#define W32_DMN_EXCEPTION_INT_DIVIDE_BY_ZERO 0xC0000094u
|
||||
#define W32_DMN_EXCEPTION_INT_OVERFLOW 0xC0000095u
|
||||
#define W32_DMN_EXCEPTION_PRIVILEGED_INSTRUCTION 0xC0000096u
|
||||
#define W32_DMN_EXCEPTION_ILLEGAL_INSTRUCTION 0xC000001Du
|
||||
#define W32_DMN_EXCEPTION_IN_PAGE_ERROR 0xC0000006u
|
||||
#define W32_DMN_EXCEPTION_INVALID_DISPOSITION 0xC0000026u
|
||||
#define W32_DMN_EXCEPTION_NONCONTINUABLE 0xC0000025u
|
||||
#define W32_DMN_EXCEPTION_STACK_OVERFLOW 0xC00000FDu
|
||||
#define W32_DMN_EXCEPTION_INVALID_HANDLE 0xC0000008u
|
||||
#define W32_DMN_EXCEPTION_UNWIND_CONSOLIDATE 0x80000029u
|
||||
#define W32_DMN_EXCEPTION_DLL_NOT_FOUND 0xC0000135u
|
||||
#define W32_DMN_EXCEPTION_ORDINAL_NOT_FOUND 0xC0000138u
|
||||
#define W32_DMN_EXCEPTION_ENTRY_POINT_NOT_FOUND 0xC0000139u
|
||||
#define W32_DMN_EXCEPTION_DLL_INIT_FAILED 0xC0000142u
|
||||
#define W32_DMN_EXCEPTION_CONTROL_C_EXIT 0xC000013Au
|
||||
#define W32_DMN_EXCEPTION_FLT_MULTIPLE_FAULTS 0xC00002B4u
|
||||
#define W32_DMN_EXCEPTION_FLT_MULTIPLE_TRAPS 0xC00002B5u
|
||||
#define W32_DMN_EXCEPTION_NAT_CONSUMPTION 0xC00002C9u
|
||||
#define W32_DMN_EXCEPTION_HEAP_CORRUPTION 0xC0000374u
|
||||
#define W32_DMN_EXCEPTION_STACK_BUFFER_OVERRUN 0xC0000409u
|
||||
#define W32_DMN_EXCEPTION_INVALID_CRUNTIME_PARAM 0xC0000417u
|
||||
#define W32_DMN_EXCEPTION_ASSERT_FAILURE 0xC0000420u
|
||||
#define W32_DMN_EXCEPTION_NO_MEMORY 0xC0000017u
|
||||
#define W32_DMN_EXCEPTION_THROW 0xE06D7363u
|
||||
#define W32_DMN_EXCEPTION_SET_THREAD_NAME 0x406d1388u
|
||||
#define DMN_w32_EXCEPTION_CLRDBG_NOTIFICATION 0x04242420u
|
||||
#define DMN_w32_EXCEPTION_CLR 0xE0434352u
|
||||
#define DMN_W32_EXCEPTION_RADDBG_SET_THREAD_COLOR 0x00524144u
|
||||
#define DMN_W32_EXCEPTION_RADDBG_SET_BREAKPOINT 0x00524145u
|
||||
#define DMN_W32_EXCEPTION_RADDBG_SET_VADDR_RANGE_NOTE 0x00524156u
|
||||
#define W32_DMN_EXCEPTION_RADDBG_SET_THREAD_COLOR 0x00524144u
|
||||
#define W32_DMN_EXCEPTION_RADDBG_SET_BREAKPOINT 0x00524145u
|
||||
#define W32_DMN_EXCEPTION_RADDBG_SET_VADDR_RANGE_NOTE 0x00524156u
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Win32 Exception ExceptionInformation Codes
|
||||
//
|
||||
// used as a subcode, apparently in all cases, for DMN_W32_EXCEPTION_STACK_BUFFER_OVERRUN.
|
||||
// used as a subcode, apparently in all cases, for W32_DMN_EXCEPTION_STACK_BUFFER_OVERRUN.
|
||||
// need to somehow pipe this through & interpret it correctly in outer layers... @fastfail
|
||||
|
||||
#define DMN_W32_FAST_FAIL_LEGACY_GS_VIOLATION 0
|
||||
#define DMN_W32_FAST_FAIL_VTGUARD_CHECK_FAILURE 1
|
||||
#define DMN_W32_FAST_FAIL_STACK_COOKIE_CHECK_FAILURE 2
|
||||
#define DMN_W32_FAST_FAIL_CORRUPT_LIST_ENTRY 3
|
||||
#define DMN_W32_FAST_FAIL_INCORRECT_STACK 4
|
||||
#define DMN_W32_FAST_FAIL_INVALID_ARG 5
|
||||
#define DMN_W32_FAST_FAIL_GS_COOKIE_INIT 6
|
||||
#define DMN_W32_FAST_FAIL_FATAL_APP_EXIT 7
|
||||
#define DMN_W32_FAST_FAIL_RANGE_CHECK_FAILURE 8
|
||||
#define DMN_W32_FAST_FAIL_UNSAFE_REGISTRY_ACCESS 9
|
||||
#define DMN_W32_FAST_FAIL_GUARD_ICALL_CHECK_FAILURE 10
|
||||
#define DMN_W32_FAST_FAIL_GUARD_WRITE_CHECK_FAILURE 11
|
||||
#define DMN_W32_FAST_FAIL_INVALID_FIBER_SWITCH 12
|
||||
#define DMN_W32_FAST_FAIL_INVALID_SET_OF_CONTEXT 13
|
||||
#define DMN_W32_FAST_FAIL_INVALID_REFERENCE_COUNT 14
|
||||
#define DMN_W32_FAST_FAIL_INVALID_JUMP_BUFFER 18
|
||||
#define DMN_W32_FAST_FAIL_MRDATA_MODIFIED 19
|
||||
#define DMN_W32_FAST_FAIL_CERTIFICATION_FAILURE 20
|
||||
#define DMN_W32_FAST_FAIL_INVALID_EXCEPTION_CHAIN 21
|
||||
#define DMN_W32_FAST_FAIL_CRYPTO_LIBRARY 22
|
||||
#define DMN_W32_FAST_FAIL_INVALID_CALL_IN_DLL_CALLOUT 23
|
||||
#define DMN_W32_FAST_FAIL_INVALID_IMAGE_BASE 24
|
||||
#define DMN_W32_FAST_FAIL_DLOAD_PROTECTION_FAILURE 25
|
||||
#define DMN_W32_FAST_FAIL_UNSAFE_EXTENSION_CALL 26
|
||||
#define DMN_W32_FAST_FAIL_DEPRECATED_SERVICE_INVOKED 27
|
||||
#define DMN_W32_FAST_FAIL_INVALID_BUFFER_ACCESS 28
|
||||
#define DMN_W32_FAST_FAIL_INVALID_BALANCED_TREE 29
|
||||
#define DMN_W32_FAST_FAIL_INVALID_NEXT_THREAD 30
|
||||
#define DMN_W32_FAST_FAIL_GUARD_ICALL_CHECK_SUPPRESSED 31 // Telemetry, nonfatal
|
||||
#define DMN_W32_FAST_FAIL_APCS_DISABLED 32
|
||||
#define DMN_W32_FAST_FAIL_INVALID_IDLE_STATE 33
|
||||
#define DMN_W32_FAST_FAIL_MRDATA_PROTECTION_FAILURE 34
|
||||
#define DMN_W32_FAST_FAIL_UNEXPECTED_HEAP_EXCEPTION 35
|
||||
#define DMN_W32_FAST_FAIL_INVALID_LOCK_STATE 36
|
||||
#define DMN_W32_FAST_FAIL_GUARD_JUMPTABLE 37 // Known to compiler, must retain value 37
|
||||
#define DMN_W32_FAST_FAIL_INVALID_LONGJUMP_TARGET 38
|
||||
#define DMN_W32_FAST_FAIL_INVALID_DISPATCH_CONTEXT 39
|
||||
#define DMN_W32_FAST_FAIL_INVALID_THREAD 40
|
||||
#define DMN_W32_FAST_FAIL_INVALID_SYSCALL_NUMBER 41 // Telemetry, nonfatal
|
||||
#define DMN_W32_FAST_FAIL_INVALID_FILE_OPERATION 42 // Telemetry, nonfatal
|
||||
#define DMN_W32_FAST_FAIL_LPAC_ACCESS_DENIED 43 // Telemetry, nonfatal
|
||||
#define DMN_W32_FAST_FAIL_GUARD_SS_FAILURE 44
|
||||
#define DMN_W32_FAST_FAIL_LOADER_CONTINUITY_FAILURE 45 // Telemetry, nonfatal
|
||||
#define DMN_W32_FAST_FAIL_GUARD_EXPORT_SUPPRESSION_FAILURE 46
|
||||
#define DMN_W32_FAST_FAIL_INVALID_CONTROL_STACK 47
|
||||
#define DMN_W32_FAST_FAIL_SET_CONTEXT_DENIED 48
|
||||
#define DMN_W32_FAST_FAIL_INVALID_IAT 49
|
||||
#define DMN_W32_FAST_FAIL_HEAP_METADATA_CORRUPTION 50
|
||||
#define DMN_W32_FAST_FAIL_PAYLOAD_RESTRICTION_VIOLATION 51
|
||||
#define DMN_W32_FAST_FAIL_LOW_LABEL_ACCESS_DENIED 52 // Telemetry, nonfatal
|
||||
#define DMN_W32_FAST_FAIL_ENCLAVE_CALL_FAILURE 53
|
||||
#define DMN_W32_FAST_FAIL_UNHANDLED_LSS_EXCEPTON 54
|
||||
#define DMN_W32_FAST_FAIL_ADMINLESS_ACCESS_DENIED 55 // Telemetry, nonfatal
|
||||
#define DMN_W32_FAST_FAIL_UNEXPECTED_CALL 56
|
||||
#define DMN_W32_FAST_FAIL_CONTROL_INVALID_RETURN_ADDRESS 57
|
||||
#define DMN_W32_FAST_FAIL_UNEXPECTED_HOST_BEHAVIOR 58
|
||||
#define DMN_W32_FAST_FAIL_FLAGS_CORRUPTION 59
|
||||
#define DMN_W32_FAST_FAIL_VEH_CORRUPTION 60
|
||||
#define DMN_W32_FAST_FAIL_ETW_CORRUPTION 61
|
||||
#define DMN_W32_FAST_FAIL_RIO_ABORT 62
|
||||
#define DMN_W32_FAST_FAIL_INVALID_PFN 63
|
||||
#define DMN_W32_FAST_FAIL_GUARD_ICALL_CHECK_FAILURE_XFG 64
|
||||
#define DMN_W32_FAST_FAIL_CAST_GUARD 65 // Known to compiler, must retain value 65
|
||||
#define DMN_W32_FAST_FAIL_HOST_VISIBILITY_CHANGE 66
|
||||
#define DMN_W32_FAST_FAIL_KERNEL_CET_SHADOW_STACK_ASSIST 67
|
||||
#define DMN_W32_FAST_FAIL_PATCH_CALLBACK_FAILED 68
|
||||
#define DMN_W32_FAST_FAIL_NTDLL_PATCH_FAILED 69
|
||||
#define DMN_W32_FAST_FAIL_INVALID_FLS_DATA 70
|
||||
#define DMN_W32_FAST_FAIL_INVALID_FAST_FAIL_CODE 0xFFFFFFFF
|
||||
#define W32_DMN_FAST_FAIL_LEGACY_GS_VIOLATION 0
|
||||
#define W32_DMN_FAST_FAIL_VTGUARD_CHECK_FAILURE 1
|
||||
#define W32_DMN_FAST_FAIL_STACK_COOKIE_CHECK_FAILURE 2
|
||||
#define W32_DMN_FAST_FAIL_CORRUPT_LIST_ENTRY 3
|
||||
#define W32_DMN_FAST_FAIL_INCORRECT_STACK 4
|
||||
#define W32_DMN_FAST_FAIL_INVALID_ARG 5
|
||||
#define W32_DMN_FAST_FAIL_GS_COOKIE_INIT 6
|
||||
#define W32_DMN_FAST_FAIL_FATAL_APP_EXIT 7
|
||||
#define W32_DMN_FAST_FAIL_RANGE_CHECK_FAILURE 8
|
||||
#define W32_DMN_FAST_FAIL_UNSAFE_REGISTRY_ACCESS 9
|
||||
#define W32_DMN_FAST_FAIL_GUARD_ICALL_CHECK_FAILURE 10
|
||||
#define W32_DMN_FAST_FAIL_GUARD_WRITE_CHECK_FAILURE 11
|
||||
#define W32_DMN_FAST_FAIL_INVALID_FIBER_SWITCH 12
|
||||
#define W32_DMN_FAST_FAIL_INVALID_SET_OF_CONTEXT 13
|
||||
#define W32_DMN_FAST_FAIL_INVALID_REFERENCE_COUNT 14
|
||||
#define W32_DMN_FAST_FAIL_INVALID_JUMP_BUFFER 18
|
||||
#define W32_DMN_FAST_FAIL_MRDATA_MODIFIED 19
|
||||
#define W32_DMN_FAST_FAIL_CERTIFICATION_FAILURE 20
|
||||
#define W32_DMN_FAST_FAIL_INVALID_EXCEPTION_CHAIN 21
|
||||
#define W32_DMN_FAST_FAIL_CRYPTO_LIBRARY 22
|
||||
#define W32_DMN_FAST_FAIL_INVALID_CALL_IN_DLL_CALLOUT 23
|
||||
#define W32_DMN_FAST_FAIL_INVALID_IMAGE_BASE 24
|
||||
#define W32_DMN_FAST_FAIL_DLOAD_PROTECTION_FAILURE 25
|
||||
#define W32_DMN_FAST_FAIL_UNSAFE_EXTENSION_CALL 26
|
||||
#define W32_DMN_FAST_FAIL_DEPRECATED_SERVICE_INVOKED 27
|
||||
#define W32_DMN_FAST_FAIL_INVALID_BUFFER_ACCESS 28
|
||||
#define W32_DMN_FAST_FAIL_INVALID_BALANCED_TREE 29
|
||||
#define W32_DMN_FAST_FAIL_INVALID_NEXT_THREAD 30
|
||||
#define W32_DMN_FAST_FAIL_GUARD_ICALL_CHECK_SUPPRESSED 31 // Telemetry, nonfatal
|
||||
#define W32_DMN_FAST_FAIL_APCS_DISABLED 32
|
||||
#define W32_DMN_FAST_FAIL_INVALID_IDLE_STATE 33
|
||||
#define W32_DMN_FAST_FAIL_MRDATA_PROTECTION_FAILURE 34
|
||||
#define W32_DMN_FAST_FAIL_UNEXPECTED_HEAP_EXCEPTION 35
|
||||
#define W32_DMN_FAST_FAIL_INVALID_LOCK_STATE 36
|
||||
#define W32_DMN_FAST_FAIL_GUARD_JUMPTABLE 37 // Known to compiler, must retain value 37
|
||||
#define W32_DMN_FAST_FAIL_INVALID_LONGJUMP_TARGET 38
|
||||
#define W32_DMN_FAST_FAIL_INVALID_DISPATCH_CONTEXT 39
|
||||
#define W32_DMN_FAST_FAIL_INVALID_THREAD 40
|
||||
#define W32_DMN_FAST_FAIL_INVALID_SYSCALL_NUMBER 41 // Telemetry, nonfatal
|
||||
#define W32_DMN_FAST_FAIL_INVALID_FILE_OPERATION 42 // Telemetry, nonfatal
|
||||
#define W32_DMN_FAST_FAIL_LPAC_ACCESS_DENIED 43 // Telemetry, nonfatal
|
||||
#define W32_DMN_FAST_FAIL_GUARD_SS_FAILURE 44
|
||||
#define W32_DMN_FAST_FAIL_LOADER_CONTINUITY_FAILURE 45 // Telemetry, nonfatal
|
||||
#define W32_DMN_FAST_FAIL_GUARD_EXPORT_SUPPRESSION_FAILURE 46
|
||||
#define W32_DMN_FAST_FAIL_INVALID_CONTROL_STACK 47
|
||||
#define W32_DMN_FAST_FAIL_SET_CONTEXT_DENIED 48
|
||||
#define W32_DMN_FAST_FAIL_INVALID_IAT 49
|
||||
#define W32_DMN_FAST_FAIL_HEAP_METADATA_CORRUPTION 50
|
||||
#define W32_DMN_FAST_FAIL_PAYLOAD_RESTRICTION_VIOLATION 51
|
||||
#define W32_DMN_FAST_FAIL_LOW_LABEL_ACCESS_DENIED 52 // Telemetry, nonfatal
|
||||
#define W32_DMN_FAST_FAIL_ENCLAVE_CALL_FAILURE 53
|
||||
#define W32_DMN_FAST_FAIL_UNHANDLED_LSS_EXCEPTON 54
|
||||
#define W32_DMN_FAST_FAIL_ADMINLESS_ACCESS_DENIED 55 // Telemetry, nonfatal
|
||||
#define W32_DMN_FAST_FAIL_UNEXPECTED_CALL 56
|
||||
#define W32_DMN_FAST_FAIL_CONTROL_INVALID_RETURN_ADDRESS 57
|
||||
#define W32_DMN_FAST_FAIL_UNEXPECTED_HOST_BEHAVIOR 58
|
||||
#define W32_DMN_FAST_FAIL_FLAGS_CORRUPTION 59
|
||||
#define W32_DMN_FAST_FAIL_VEH_CORRUPTION 60
|
||||
#define W32_DMN_FAST_FAIL_ETW_CORRUPTION 61
|
||||
#define W32_DMN_FAST_FAIL_RIO_ABORT 62
|
||||
#define W32_DMN_FAST_FAIL_INVALID_PFN 63
|
||||
#define W32_DMN_FAST_FAIL_GUARD_ICALL_CHECK_FAILURE_XFG 64
|
||||
#define W32_DMN_FAST_FAIL_CAST_GUARD 65 // Known to compiler, must retain value 65
|
||||
#define W32_DMN_FAST_FAIL_HOST_VISIBILITY_CHANGE 66
|
||||
#define W32_DMN_FAST_FAIL_KERNEL_CET_SHADOW_STACK_ASSIST 67
|
||||
#define W32_DMN_FAST_FAIL_PATCH_CALLBACK_FAILED 68
|
||||
#define W32_DMN_FAST_FAIL_NTDLL_PATCH_FAILED 69
|
||||
#define W32_DMN_FAST_FAIL_INVALID_FLS_DATA 70
|
||||
#define W32_DMN_FAST_FAIL_INVALID_FAST_FAIL_CODE 0xFFFFFFFF
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Win32 Register Codes
|
||||
|
||||
#define DMN_W32_CTX_X86 0x00010000
|
||||
#define DMN_W32_CTX_X64 0x00100000
|
||||
#define W32_DMN_CTX_X86 0x00010000
|
||||
#define W32_DMN_CTX_X64 0x00100000
|
||||
|
||||
#define DMN_W32_CTX_INTEL_CONTROL 0x0001 // segss, rsp, segcs, rip, and rflags
|
||||
#define DMN_W32_CTX_INTEL_INTEGER 0x0002 // rax, rcx, rdx, rbx, rbp, rsi, rdi, and r8-r15
|
||||
#define DMN_W32_CTX_INTEL_SEGMENTS 0x0004 // segds, seges, segfs, and seggs
|
||||
#define DMN_W32_CTX_INTEL_FLOATS 0x0008 // xmm0-xmm15
|
||||
#define DMN_W32_CTX_INTEL_DEBUG 0x0010 // dr0-dr3 and dr6-dr7
|
||||
#define DMN_W32_CTX_INTEL_EXTENDED 0x0020
|
||||
#define DMN_W32_CTX_INTEL_XSTATE 0x0040
|
||||
#define W32_DMN_CTX_INTEL_CONTROL 0x0001 // segss, rsp, segcs, rip, and rflags
|
||||
#define W32_DMN_CTX_INTEL_INTEGER 0x0002 // rax, rcx, rdx, rbx, rbp, rsi, rdi, and r8-r15
|
||||
#define W32_DMN_CTX_INTEL_SEGMENTS 0x0004 // segds, seges, segfs, and seggs
|
||||
#define W32_DMN_CTX_INTEL_FLOATS 0x0008 // xmm0-xmm15
|
||||
#define W32_DMN_CTX_INTEL_DEBUG 0x0010 // dr0-dr3 and dr6-dr7
|
||||
#define W32_DMN_CTX_INTEL_EXTENDED 0x0020
|
||||
#define W32_DMN_CTX_INTEL_XSTATE 0x0040
|
||||
|
||||
#define DMN_W32_CTX_X86_ALL (DMN_W32_CTX_X86 | \
|
||||
DMN_W32_CTX_INTEL_CONTROL | DMN_W32_CTX_INTEL_INTEGER | \
|
||||
DMN_W32_CTX_INTEL_SEGMENTS | DMN_W32_CTX_INTEL_DEBUG | \
|
||||
DMN_W32_CTX_INTEL_EXTENDED)
|
||||
#define DMN_W32_CTX_X64_ALL (DMN_W32_CTX_X64 | \
|
||||
DMN_W32_CTX_INTEL_CONTROL | DMN_W32_CTX_INTEL_INTEGER | \
|
||||
DMN_W32_CTX_INTEL_SEGMENTS | DMN_W32_CTX_INTEL_FLOATS | \
|
||||
DMN_W32_CTX_INTEL_DEBUG)
|
||||
#define W32_DMN_CTX_X86_ALL (W32_DMN_CTX_X86 | \
|
||||
W32_DMN_CTX_INTEL_CONTROL | W32_DMN_CTX_INTEL_INTEGER | \
|
||||
W32_DMN_CTX_INTEL_SEGMENTS | W32_DMN_CTX_INTEL_DEBUG | \
|
||||
W32_DMN_CTX_INTEL_EXTENDED)
|
||||
#define W32_DMN_CTX_X64_ALL (W32_DMN_CTX_X64 | \
|
||||
W32_DMN_CTX_INTEL_CONTROL | W32_DMN_CTX_INTEL_INTEGER | \
|
||||
W32_DMN_CTX_INTEL_SEGMENTS | W32_DMN_CTX_INTEL_FLOATS | \
|
||||
W32_DMN_CTX_INTEL_DEBUG)
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Per-Entity State
|
||||
|
||||
typedef enum DMN_W32_EntityKind
|
||||
typedef enum W32_DMN_EntityKind
|
||||
{
|
||||
DMN_W32_EntityKind_Null,
|
||||
DMN_W32_EntityKind_Root,
|
||||
DMN_W32_EntityKind_Process,
|
||||
DMN_W32_EntityKind_Thread,
|
||||
DMN_W32_EntityKind_Module,
|
||||
DMN_W32_EntityKind_COUNT
|
||||
W32_DMN_EntityKind_Null,
|
||||
W32_DMN_EntityKind_Root,
|
||||
W32_DMN_EntityKind_Process,
|
||||
W32_DMN_EntityKind_Thread,
|
||||
W32_DMN_EntityKind_Module,
|
||||
W32_DMN_EntityKind_COUNT
|
||||
}
|
||||
DMN_W32_EntityKind;
|
||||
W32_DMN_EntityKind;
|
||||
|
||||
typedef struct DMN_W32_Entity DMN_W32_Entity;
|
||||
struct DMN_W32_Entity
|
||||
typedef struct W32_DMN_Entity W32_DMN_Entity;
|
||||
struct W32_DMN_Entity
|
||||
{
|
||||
DMN_W32_Entity *first;
|
||||
DMN_W32_Entity *last;
|
||||
DMN_W32_Entity *next;
|
||||
DMN_W32_Entity *prev;
|
||||
DMN_W32_Entity *parent;
|
||||
DMN_W32_EntityKind kind;
|
||||
W32_DMN_Entity *first;
|
||||
W32_DMN_Entity *last;
|
||||
W32_DMN_Entity *next;
|
||||
W32_DMN_Entity *prev;
|
||||
W32_DMN_Entity *parent;
|
||||
W32_DMN_EntityKind kind;
|
||||
U32 gen;
|
||||
U64 id;
|
||||
HANDLE handle;
|
||||
@@ -212,46 +212,46 @@ struct DMN_W32_Entity
|
||||
};
|
||||
};
|
||||
|
||||
typedef struct DMN_W32_EntityNode DMN_W32_EntityNode;
|
||||
struct DMN_W32_EntityNode
|
||||
typedef struct W32_DMN_EntityNode W32_DMN_EntityNode;
|
||||
struct W32_DMN_EntityNode
|
||||
{
|
||||
DMN_W32_EntityNode *next;
|
||||
DMN_W32_Entity *v;
|
||||
W32_DMN_EntityNode *next;
|
||||
W32_DMN_Entity *v;
|
||||
};
|
||||
|
||||
typedef struct DMN_W32_EntityIDHashNode DMN_W32_EntityIDHashNode;
|
||||
struct DMN_W32_EntityIDHashNode
|
||||
typedef struct W32_DMN_EntityIDHashNode W32_DMN_EntityIDHashNode;
|
||||
struct W32_DMN_EntityIDHashNode
|
||||
{
|
||||
DMN_W32_EntityIDHashNode *next;
|
||||
DMN_W32_EntityIDHashNode *prev;
|
||||
W32_DMN_EntityIDHashNode *next;
|
||||
W32_DMN_EntityIDHashNode *prev;
|
||||
U64 id;
|
||||
DMN_W32_Entity *entity;
|
||||
W32_DMN_Entity *entity;
|
||||
};
|
||||
|
||||
typedef struct DMN_W32_EntityIDHashSlot DMN_W32_EntityIDHashSlot;
|
||||
struct DMN_W32_EntityIDHashSlot
|
||||
typedef struct W32_DMN_EntityIDHashSlot W32_DMN_EntityIDHashSlot;
|
||||
struct W32_DMN_EntityIDHashSlot
|
||||
{
|
||||
DMN_W32_EntityIDHashNode *first;
|
||||
DMN_W32_EntityIDHashNode *last;
|
||||
W32_DMN_EntityIDHashNode *first;
|
||||
W32_DMN_EntityIDHashNode *last;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Injection Types
|
||||
|
||||
typedef struct DMN_W32_InjectedBreak DMN_W32_InjectedBreak;
|
||||
struct DMN_W32_InjectedBreak
|
||||
typedef struct W32_DMN_InjectedBreak W32_DMN_InjectedBreak;
|
||||
struct W32_DMN_InjectedBreak
|
||||
{
|
||||
U64 code;
|
||||
U64 user_data;
|
||||
};
|
||||
|
||||
#define DMN_W32_INJECTED_CODE_SIZE 32
|
||||
#define W32_DMN_INJECTED_CODE_SIZE 32
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Image Info Types
|
||||
|
||||
typedef struct DMN_W32_ImageInfo DMN_W32_ImageInfo;
|
||||
struct DMN_W32_ImageInfo
|
||||
typedef struct W32_DMN_ImageInfo W32_DMN_ImageInfo;
|
||||
struct W32_DMN_ImageInfo
|
||||
{
|
||||
Arch arch;
|
||||
U32 size;
|
||||
@@ -261,13 +261,13 @@ struct DMN_W32_ImageInfo
|
||||
////////////////////////////////
|
||||
//~ rjf: Dynamically-Loaded Win32 Function Types
|
||||
|
||||
typedef HRESULT DMN_W32_GetThreadDescriptionFunctionType(HANDLE hThread, WCHAR **ppszThreadDescription);
|
||||
typedef HRESULT W32_DMN_GetThreadDescriptionFunctionType(HANDLE hThread, WCHAR **ppszThreadDescription);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Shared State Bundle
|
||||
|
||||
typedef struct DMN_W32_Shared DMN_W32_Shared;
|
||||
struct DMN_W32_Shared
|
||||
typedef struct W32_DMN_Shared W32_DMN_Shared;
|
||||
struct W32_DMN_Shared
|
||||
{
|
||||
// rjf: top-level info
|
||||
Arena *arena;
|
||||
@@ -283,12 +283,12 @@ struct DMN_W32_Shared
|
||||
|
||||
// rjf: entity state
|
||||
Arena *entities_arena;
|
||||
DMN_W32_Entity *entities_base;
|
||||
DMN_W32_Entity *entities_first_free;
|
||||
W32_DMN_Entity *entities_base;
|
||||
W32_DMN_Entity *entities_first_free;
|
||||
U64 entities_count;
|
||||
DMN_W32_EntityIDHashSlot *entities_id_hash_slots;
|
||||
W32_DMN_EntityIDHashSlot *entities_id_hash_slots;
|
||||
U64 entities_id_hash_slots_count;
|
||||
DMN_W32_EntityIDHashNode *entities_id_hash_node_free;
|
||||
W32_DMN_EntityIDHashNode *entities_id_hash_node_free;
|
||||
|
||||
// rjf: launch state
|
||||
B32 new_process_pending;
|
||||
@@ -307,53 +307,47 @@ struct DMN_W32_Shared
|
||||
////////////////////////////////
|
||||
//~ rjf: Globals
|
||||
|
||||
global DMN_W32_Shared *dmn_w32_shared = 0;
|
||||
global DMN_W32_Entity dmn_w32_entity_nil = {&dmn_w32_entity_nil, &dmn_w32_entity_nil, &dmn_w32_entity_nil, &dmn_w32_entity_nil, &dmn_w32_entity_nil};
|
||||
global DMN_W32_GetThreadDescriptionFunctionType *dmn_w32_GetThreadDescription = 0;
|
||||
thread_static B32 dmn_w32_ctrl_thread = 0;
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Basic Helpers
|
||||
|
||||
internal U64 dmn_w32_hash_from_string(String8 string);
|
||||
internal U64 dmn_w32_hash_from_id(U64 id);
|
||||
global W32_DMN_Shared *w32_dmn_shared = 0;
|
||||
global W32_DMN_Entity w32_dmn_entity_nil = {&w32_dmn_entity_nil, &w32_dmn_entity_nil, &w32_dmn_entity_nil, &w32_dmn_entity_nil, &w32_dmn_entity_nil};
|
||||
global W32_DMN_GetThreadDescriptionFunctionType *w32_dmn_GetThreadDescription = 0;
|
||||
thread_static B32 w32_dmn_ctrl_thread = 0;
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Entity Helpers
|
||||
|
||||
//- rjf: entity <-> handle
|
||||
internal DMN_Handle dmn_w32_handle_from_entity(DMN_W32_Entity *entity);
|
||||
internal DMN_W32_Entity *dmn_w32_entity_from_handle(DMN_Handle handle);
|
||||
internal DMN_Handle w32_dmn_handle_from_entity(W32_DMN_Entity *entity);
|
||||
internal W32_DMN_Entity *w32_dmn_entity_from_handle(DMN_Handle handle);
|
||||
|
||||
//- rjf: entity allocation/deallocation
|
||||
internal DMN_W32_Entity *dmn_w32_entity_alloc(DMN_W32_Entity *parent, DMN_W32_EntityKind kind, U64 id);
|
||||
internal void dmn_w32_entity_release(DMN_W32_Entity *entity);
|
||||
internal W32_DMN_Entity *w32_dmn_entity_alloc(W32_DMN_Entity *parent, W32_DMN_EntityKind kind, U64 id);
|
||||
internal void w32_dmn_entity_release(W32_DMN_Entity *entity);
|
||||
|
||||
//- rjf: kind*id -> entity
|
||||
internal DMN_W32_Entity *dmn_w32_entity_from_kind_id(DMN_W32_EntityKind kind, U64 id);
|
||||
internal W32_DMN_Entity *w32_dmn_entity_from_kind_id(W32_DMN_EntityKind kind, U64 id);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Module Info Extraction
|
||||
|
||||
internal String8 dmn_w32_full_path_from_module(Arena *arena, DMN_W32_Entity *module);
|
||||
internal String8 w32_dmn_full_path_from_module(Arena *arena, W32_DMN_Entity *module);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Win32-Level Process/Thread Reads/Writes
|
||||
|
||||
//- rjf: processes
|
||||
internal U64 dmn_w32_process_read(HANDLE process, Rng1U64 range, void *dst);
|
||||
internal B32 dmn_w32_process_write(HANDLE process, Rng1U64 range, void *src);
|
||||
internal String8 dmn_w32_read_memory_str(Arena *arena, HANDLE process_handle, U64 address);
|
||||
internal String16 dmn_w32_read_memory_str16(Arena *arena, HANDLE process_handle, U64 address);
|
||||
#define dmn_w32_process_read_struct(process, vaddr, ptr) dmn_w32_process_read((process), r1u64((vaddr), (vaddr)+(sizeof(*ptr))), ptr)
|
||||
#define dmn_w32_process_write_struct(process, vaddr, ptr) dmn_w32_process_write((process), r1u64((vaddr), (vaddr)+(sizeof(*ptr))), ptr)
|
||||
internal DMN_W32_ImageInfo dmn_w32_image_info_from_process_base_vaddr(HANDLE process, U64 base_vaddr);
|
||||
internal U64 w32_dmn_process_read(HANDLE process, Rng1U64 range, void *dst);
|
||||
internal B32 w32_dmn_process_write(HANDLE process, Rng1U64 range, void *src);
|
||||
internal String8 w32_dmn_read_memory_str(Arena *arena, HANDLE process_handle, U64 address);
|
||||
internal String16 w32_dmn_read_memory_str16(Arena *arena, HANDLE process_handle, U64 address);
|
||||
#define w32_dmn_process_read_struct(process, vaddr, ptr) w32_dmn_process_read((process), r1u64((vaddr), (vaddr)+(sizeof(*ptr))), ptr)
|
||||
#define w32_dmn_process_write_struct(process, vaddr, ptr) w32_dmn_process_write((process), r1u64((vaddr), (vaddr)+(sizeof(*ptr))), ptr)
|
||||
internal W32_DMN_ImageInfo w32_dmn_image_info_from_process_base_vaddr(HANDLE process, U64 base_vaddr);
|
||||
|
||||
//- rjf: threads
|
||||
internal B32 dmn_w32_thread_read_reg_block(Arch arch, HANDLE thread, void *reg_block);
|
||||
internal B32 dmn_w32_thread_write_reg_block(Arch arch, HANDLE thread, void *reg_block);
|
||||
internal B32 w32_dmn_thread_read_reg_block(Arch arch, HANDLE thread, void *reg_block);
|
||||
internal B32 w32_dmn_thread_write_reg_block(Arch arch, HANDLE thread, void *reg_block);
|
||||
|
||||
//- rjf: remote thread injection
|
||||
internal DWORD dmn_w32_inject_thread(HANDLE process, U64 start_address);
|
||||
internal DWORD w32_dmn_inject_thread(HANDLE process, U64 start_address);
|
||||
|
||||
#endif // DEMON_CORE_WIN32_H
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -24,18 +24,18 @@
|
||||
////////////////////////////////
|
||||
//~ rjf: Windows
|
||||
|
||||
typedef struct OS_W32_TitleBarClientArea OS_W32_TitleBarClientArea;
|
||||
struct OS_W32_TitleBarClientArea
|
||||
typedef struct W32_WM_TitleBarClientArea W32_WM_TitleBarClientArea;
|
||||
struct W32_WM_TitleBarClientArea
|
||||
{
|
||||
OS_W32_TitleBarClientArea *next;
|
||||
W32_WM_TitleBarClientArea *next;
|
||||
Rng2F32 rect;
|
||||
};
|
||||
|
||||
typedef struct OS_W32_Window OS_W32_Window;
|
||||
struct OS_W32_Window
|
||||
typedef struct W32_WM_Window W32_WM_Window;
|
||||
struct W32_WM_Window
|
||||
{
|
||||
OS_W32_Window *next;
|
||||
OS_W32_Window *prev;
|
||||
W32_WM_Window *next;
|
||||
W32_WM_Window *prev;
|
||||
HWND hwnd;
|
||||
HDC hdc;
|
||||
WINDOWPLACEMENT last_window_placement;
|
||||
@@ -47,77 +47,77 @@ struct OS_W32_Window
|
||||
F32 custom_border_edge_thickness;
|
||||
B32 custom_border_composition_enabled;
|
||||
Arena *paint_arena;
|
||||
OS_W32_TitleBarClientArea *first_title_bar_client_area;
|
||||
OS_W32_TitleBarClientArea *last_title_bar_client_area;
|
||||
W32_WM_TitleBarClientArea *first_title_bar_client_area;
|
||||
W32_WM_TitleBarClientArea *last_title_bar_client_area;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Monitor Gathering Bundle
|
||||
|
||||
typedef struct OS_W32_MonitorGatherNode OS_W32_MonitorGatherNode;
|
||||
struct OS_W32_MonitorGatherNode
|
||||
typedef struct W32_WM_MonitorGatherNode W32_WM_MonitorGatherNode;
|
||||
struct W32_WM_MonitorGatherNode
|
||||
{
|
||||
OS_W32_MonitorGatherNode *next;
|
||||
OS_Monitor v;
|
||||
W32_WM_MonitorGatherNode *next;
|
||||
WM_Monitor v;
|
||||
};
|
||||
|
||||
typedef struct OS_W32_MonitorGatherBundle OS_W32_MonitorGatherBundle;
|
||||
struct OS_W32_MonitorGatherBundle
|
||||
typedef struct W32_WM_MonitorGatherBundle W32_WM_MonitorGatherBundle;
|
||||
struct W32_WM_MonitorGatherBundle
|
||||
{
|
||||
Arena *arena;
|
||||
OS_W32_MonitorGatherNode *first_monitor;
|
||||
OS_W32_MonitorGatherNode *last_monitor;
|
||||
W32_WM_MonitorGatherNode *first_monitor;
|
||||
W32_WM_MonitorGatherNode *last_monitor;
|
||||
U64 monitor_count;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Global State
|
||||
|
||||
typedef struct OS_W32_GfxState OS_W32_GfxState;
|
||||
struct OS_W32_GfxState
|
||||
typedef struct W32_WM_State W32_WM_State;
|
||||
struct W32_WM_State
|
||||
{
|
||||
Arena *arena;
|
||||
U32 gfx_thread_tid;
|
||||
HINSTANCE hInstance;
|
||||
HCURSOR hCursor;
|
||||
OS_GfxInfo gfx_info;
|
||||
OS_W32_Window *first_window;
|
||||
OS_W32_Window *last_window;
|
||||
OS_W32_Window *free_window;
|
||||
OS_Key key_from_vkey_table[256];
|
||||
WM_SystemInfo gfx_info;
|
||||
W32_WM_Window *first_window;
|
||||
W32_WM_Window *last_window;
|
||||
W32_WM_Window *free_window;
|
||||
WM_Key key_from_vkey_table[256];
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Globals
|
||||
|
||||
global OS_W32_GfxState *os_w32_gfx_state = 0;
|
||||
global OS_EventList os_w32_event_list = {0};
|
||||
global Arena *os_w32_event_arena = 0;
|
||||
global B32 os_w32_resizing = 0;
|
||||
global B32 os_w32_new_window_custom_border = 0;
|
||||
global W32_WM_State *w32_wm_state = 0;
|
||||
global WM_EventList w32_wm_event_list = {0};
|
||||
global Arena *w32_wm_event_arena = 0;
|
||||
global B32 w32_wm_resizing = 0;
|
||||
global B32 w32_wm_new_window_custom_border = 0;
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Basic Helpers
|
||||
|
||||
internal Rng2F32 os_w32_rng2f32_from_rect(RECT rect);
|
||||
internal Rng2F32 w32_wm_rng2f32_from_rect(RECT rect);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Windows
|
||||
|
||||
internal OS_Window os_w32_handle_from_window(OS_W32_Window *window);
|
||||
internal OS_W32_Window * os_w32_window_from_handle(OS_Window window);
|
||||
internal OS_W32_Window * os_w32_window_from_hwnd(HWND hwnd);
|
||||
internal HWND os_w32_hwnd_from_window(OS_W32_Window *window);
|
||||
internal OS_W32_Window * os_w32_window_alloc(void);
|
||||
internal void os_w32_window_release(OS_W32_Window *window);
|
||||
internal OS_Event * os_w32_push_event(OS_EventKind kind, OS_W32_Window *window);
|
||||
internal OS_Key os_w32_os_key_from_vkey(WPARAM vkey);
|
||||
internal WPARAM os_w32_vkey_from_os_key(OS_Key key);
|
||||
internal LRESULT os_w32_wnd_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
internal WM_Window w32_wm_handle_from_window(W32_WM_Window *window);
|
||||
internal W32_WM_Window * w32_wm_window_from_handle(WM_Window window);
|
||||
internal W32_WM_Window * w32_wm_window_from_hwnd(HWND hwnd);
|
||||
internal HWND w32_wm_hwnd_from_window(W32_WM_Window *window);
|
||||
internal W32_WM_Window * w32_wm_window_alloc(void);
|
||||
internal void w32_wm_window_release(W32_WM_Window *window);
|
||||
internal WM_Event * w32_wm_push_event(WM_EventKind kind, W32_WM_Window *window);
|
||||
internal WM_Key w32_wm_os_key_from_vkey(WPARAM vkey);
|
||||
internal WPARAM w32_wm_vkey_from_os_key(WM_Key key);
|
||||
internal LRESULT w32_wm_wnd_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Monitors
|
||||
|
||||
internal BOOL os_w32_monitor_gather_enum_proc(HMONITOR monitor, HDC hdc, LPRECT rect, LPARAM bundle_ptr);
|
||||
internal BOOL w32_wm_monitor_gather_enum_proc(HMONITOR monitor, HDC hdc, LPRECT rect, LPARAM bundle_ptr);
|
||||
|
||||
#endif // WIN32_WINDOW_MANAGER_H
|
||||
|
||||
Reference in New Issue
Block a user