123 lines
2.7 KiB
C
123 lines
2.7 KiB
C
////////////////////////////////////////////////////////////
|
|
//~ Win32 libs
|
|
|
|
//- Windows headers
|
|
|
|
#define COBJMACROS
|
|
#define WIN32_LEAN_AND_MEAN
|
|
#define UNICODE
|
|
// #pragma warning(push, 0)
|
|
#include <Windows.h>
|
|
#include <combaseapi.h>
|
|
#include <dcommon.h>
|
|
#include <initguid.h>
|
|
#include <unknwn.h>
|
|
#include <objbase.h>
|
|
#include <uuids.h>
|
|
#include <Knownfolders.h>
|
|
#include <WinSock2.h>
|
|
#include <Mswsock.h>
|
|
#include <TlHelp32.h>
|
|
#include <WS2tcpip.h>
|
|
#include <windowsx.h>
|
|
#include <ShlObj_core.h>
|
|
#include <fileapi.h>
|
|
#include <dwmapi.h>
|
|
#include <avrt.h>
|
|
#include <shellapi.h>
|
|
#include <compressapi.h>
|
|
// #pragma warning(pop)
|
|
|
|
#ifndef BCRYPT_RNG_ALG_HANDLE
|
|
#define BCRYPT_RNG_ALG_HANDLE ((void *)0x00000081)
|
|
u32 BCryptGenRandom(void *algorithm, u8 *buffer, u32 buffer_size, u32 flags);
|
|
#endif
|
|
|
|
//- Windows libs
|
|
|
|
#pragma comment(lib, "kernel32")
|
|
#pragma comment(lib, "user32")
|
|
#pragma comment(lib, "bcrypt")
|
|
#pragma comment(lib, "gdi32")
|
|
#pragma comment(lib, "cabinet")
|
|
#pragma comment(lib, "shell32")
|
|
#pragma comment(lib, "ole32")
|
|
#pragma comment(lib, "winmm")
|
|
#pragma comment(lib, "dwmapi")
|
|
#pragma comment(lib, "synchronization")
|
|
#pragma comment(lib, "avrt")
|
|
#pragma comment(lib, "ws2_32.lib")
|
|
#pragma comment(lib, "advapi32.lib")
|
|
|
|
////////////////////////////////////////////////////////////
|
|
//~ Embedded data iter types
|
|
|
|
Struct(W32_FindEmbeddedDataCtx)
|
|
{
|
|
u64 embedded_strings_count;
|
|
String embedded_strings[64];
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////
|
|
//~ State types
|
|
|
|
Struct(W32_Ctx)
|
|
{
|
|
SYSTEM_INFO info;
|
|
u32 main_thread_id;
|
|
String wine_version;
|
|
Atomic32 shutdown;
|
|
Atomic32 exit_code;
|
|
|
|
i64 timer_start_qpc;
|
|
i64 ns_per_qpc;
|
|
|
|
StringList raw_command_line;
|
|
String appdir_path;
|
|
|
|
//- Application control flow
|
|
|
|
Atomic32 panicking;
|
|
wchar_t panic_wstr[4096];
|
|
HANDLE panic_event;
|
|
HANDLE exit_event;
|
|
|
|
//- Exit funcs
|
|
|
|
Atomic32 num_exit_funcs;
|
|
ExitFunc *exit_funcs[4096];
|
|
|
|
//- Logs
|
|
|
|
HANDLE logfile;
|
|
Atomic32 logs_initialized;
|
|
|
|
TicketMutex logs_tm;
|
|
Arena *log_msgs_arena;
|
|
Arena *logs_arena;
|
|
|
|
u64 logs_count;
|
|
u64 log_level_counts[LogLevel_COUNT];
|
|
LogEvent *readable_log_events;
|
|
Atomic64 readable_logs_count;
|
|
};
|
|
|
|
extern W32_Ctx W32;
|
|
|
|
////////////////////////////////////////////////////////////
|
|
//~ Embedded data initialization
|
|
|
|
#define W32_EmbeddedDataPrefix EMBEDDED_RESOURCE_DATA__
|
|
BOOL W32_FindEmbeddedRcData(HMODULE module, LPCWSTR type, LPWSTR wstr_entry_name, LONG_PTR udata);
|
|
|
|
////////////////////////////////////////////////////////////
|
|
//~ Log
|
|
|
|
void W32_BootstrapLogs(void);
|
|
void W32_Log(i32 level, String msg);
|
|
|
|
////////////////////////////////////////////////////////////
|
|
//~ Main
|
|
|
|
i32 W32_Main(void);
|