[C++] 反编译器
阅读原文时间:2023年07月14日阅读:3

各种开源的decompiler都不太好用,眼下最好的反编译器是IDA pro。

尽管是收费的,只是破解版非常好找。

我试过5.5版本号的,还不错。

我把windows notepad进行了反编译,多少算有点可读性:

/* This file has been generated by the Hex-Rays decompiler.
Copyright (c) 2009 Hex-Rays info@hex-rays.com

Detected compiler: Visual C++
*/

#include
#include

#include

//-------------------------------------------------------------------------
// Data declarations

// extern void *acmdln; weak
extern const WCHAR szOtherStuff; // idb
extern wchar_t aW[3]; // weak
extern wchar_t aA[3]; // weak
extern const WCHAR TableName[]; // idb
extern const WCHAR aCommdlg_help[]; // idb
extern const WCHAR String[]; // idb
extern wchar_t a_setup[8]; // weak
extern wchar_t aP[3]; // weak
extern wchar_t aPt[4]; // weak
extern wchar_t aSC_txtCSC_C[]; // idb
extern wchar_t aSecuritySppGen[32]; // weak
extern int dword_1002B48[2]; // weak
extern const WCHAR aIpointsize[]; // idb
extern const WCHAR aLffacename[]; // idb
extern const WCHAR aLfpitchandfami[]; // idb
extern const WCHAR aLfquality[]; // idb
extern const WCHAR aLfclipprecisio[]; // idb
extern const WCHAR aLfoutprecision[]; // idb
extern const WCHAR aLfcharset[]; // idb
extern const WCHAR aLfstrikeout[]; // idb
extern const WCHAR aLfunderline[]; // idb
extern const WCHAR aLfitalic[]; // idb
extern const WCHAR aLfweight[]; // idb
extern const WCHAR aLforientation[]; // idb
extern const WCHAR ValueName[]; // idb
extern const WCHAR SubKey[]; // idb
extern const WCHAR aIwindowposdy[]; // idb
extern const WCHAR aIwindowposdx[]; // idb
extern const WCHAR aIwindowposy[]; // idb
extern const WCHAR aIwindowposx[]; // idb
extern const WCHAR aImarginright[]; // idb
extern const WCHAR aImarginleft[]; // idb
extern const WCHAR aImarginbottom[]; // idb
extern const WCHAR aImargintop[]; // idb
extern const WCHAR aSztrailer[]; // idb
extern const WCHAR aSzheader[]; // idb
extern const WCHAR aStatusbar[]; // idb
extern const WCHAR aFwrap[]; // idb
extern const WCHAR aEdit[]; // idb
extern const WCHAR aFmle_is_broken[]; // idb
extern const WCHAR aFsavewindowpos[]; // idb
extern const WCHAR aSoftwareMicr_0[]; // idb
extern wchar_t aLucidaConsole[15]; // weak
extern const WCHAR ClassName[]; // idb
extern int dword_1003AF0[2]; // weak
extern wchar_t aTxt[4]; // weak
extern int dword_1003C74[5]; // weak
extern wchar_t a_[4]; // weak
extern const WCHAR pszPath[]; // idb
extern IID riid; // idb
extern IID rclsid; // idb
extern IID stru_100400C; // idb
extern IID stru_100401C; // idb
extern IID stru_10043D0; // idb
extern IID stru_10043E0; // idb
extern wchar_t aNull[7]; // weak
extern OLECHAR psz[]; // idb
extern wchar_t aHelp_entry_id_[27]; // weak
extern int dword_1004748[4]; // weak
extern int dword_10049F4[4]; // weak
extern int dword_1004A04[2]; // weak
extern int dword_1004AF0[4]; // weak
extern const WCHAR aSlipupacc[]; // idb
extern wchar_t aStringfileinfo[]; // idb
extern const WCHAR SubBlock[]; // idb
extern wchar_t aSppsvc_exe[12]; // weak
extern wchar_t aSlui_exe[10]; // weak
extern wchar_t aSppuinotify_dl[17]; // weak
extern const WCHAR aSppsvc[]; // idb
extern const WCHAR ServiceName[]; // idb
extern int dword_1006D38[6]; // weak
extern wchar_t aD[]; // idb
extern wchar_t a_txt_0[5]; // weak
extern int dword_10098B8; // weak
extern wchar_t asc_10098BC[3]; // weak
extern int dword_1009EE0[2]; // weak
extern struct _EXCEPTION_POINTERS ExceptionInfo; // idb
extern __int16 word_100C000; // weak
extern BYTE Data; // idb
extern int dword_100C008; // weak
extern int dword_100C00C; // weak
extern int dword_100C010; // weak
extern int dword_100C014; // weak
extern int dword_100C018; // weak
extern int dword_100C01C; // weak
extern HWND hWnd; // idb
extern HWND dword_100C024; // idb
extern HWND dword_100C028; // idb
extern BYTE dword_100C02C; // idb
extern int dword_100C030; // weak
extern WPARAM wParam; // idb
extern int dword_100C038; // weak
extern int dword_100C03C; // weak
extern int dword_100C040; // weak
extern WPARAM dword_100C044; // idb
extern LPARAM lParam; // idb
extern int nHeight; // idb
extern int nWidth; // idb
extern int X; // idb
extern int Y; // idb
extern int dword_100C05C; // weak
extern int dword_100C060; // weak
extern int dword_100C064; // weak
extern int dword_100C070; // weak
extern HANDLE hFile; // idb
extern int dword_100C078; // weak
extern int dword_100C07C; // weak
extern HACCEL hAccTable; // idb
extern int dword_100C084; // weak
extern HGDIOBJ ho; // idb
extern HINSTANCE hInstance; // idb
extern HCURSOR hCursor; // idb
extern HCURSOR dword_100C094; // idb
extern HLOCAL hMem; // idb
extern int dword_100C0A4; // weak
extern struct tagFINDREPLACEW stru_100C0C0; // idb
extern WINDOWPLACEMENT wndpl; // idb
extern struct tagPSDW stru_100C140; // idb
extern struct tagOFNW stru_100C1A0; // idb
extern LOGFONTW lf; // idb
extern volatile LONG Destination; // idb
extern int (__stdcall *off_100C26C)(int, int, int); // weak
extern int (__stdcall *off_100C288)(int, int, int); // weak
extern LPCWSTR dword_100C2B0; // idb
extern LPCWSTR dword_100C2B4; // idb
extern LPCWSTR lpString2; // idb
extern LPCVOID lpSource; // idb
extern LPCWSTR dword_100C2C4; // idb
extern LPCWSTR lpText; // idb
extern LPCWSTR szApp; // idb
extern LPCWSTR dword_100C2DC; // idb
extern int dword_100C2E0; // weak
extern LPCWSTR dword_100C2EC; // idb
extern int dword_100C2F0; // weak
extern LPCWSTR lpszHelp; // idb
extern int dword_100C2F8; // weak
extern int dword_100C2FC; // weak
extern int dword_100C300; // weak
extern char Args[]; // idb
extern int dword_100C308; // weak
extern int dword_100C30C; // weak
extern int dword_100C310; // weak
extern LPCWSTR dword_100C314; // idb
extern LPCWSTR dword_100C318; // idb
extern LPCWSTR dword_100C31C; // idb
extern LPCWSTR dword_100C320; // idb
extern LPCWSTR dword_100C324; // idb
extern wchar_t *dword_100C328; // idb
extern LPCWSTR lpCaption; // idb
extern LPCWSTR dword_100C330; // idb
extern LPARAM dword_100C334; // idb
extern LPARAM dword_100C338; // idb
extern LPARAM dword_100C33C; // idb
extern LPARAM dword_100C340; // idb
extern wchar_t *dword_100C344; // idb
extern wchar_t *Format; // idb
extern int dword_100C368; // weak
extern int dword_100C370; // weak
extern int dword_100C374; // weak
extern int dword_100C37C; // weak
extern int dword_100C3C0; // weak
extern __int16 word_100C44C; // weak
extern __int16 word_100C450; // weak
extern __int16 word_100C454; // weak
extern __int16 word_100C458; // weak
extern int dword_100C45C; // weak
extern int dword_100C460; // weak
extern int dword_100C464; // weak
extern int dword_100C468; // weak
extern int dword_100C46C; // weak
extern int dword_100C470; // weak
extern int dword_100C474; // weak
extern int dword_100C478; // weak
extern __int16 word_100C47C; // weak
extern int dword_100C480; // weak
extern int dword_100C484; // weak
extern __int16 word_100C488; // weak
extern WCHAR word_100C6A0; // idb
extern _UNKNOWN unk_100C6F0; // weak
extern const WCHAR word_100C740; // idb
extern BYTE Dst; // idb
extern wchar_t word_100C7E0; // idb
extern wchar_t Dest; // idb
extern int off_100C920[2]; // weak
extern _UNKNOWN unk_100C9DC; // weak
extern const WCHAR word_100C9E0; // idb
extern const WCHAR FileName; // idb
extern HWND dword_100CCE8; // idb
extern int dword_100CCEC; // weak
extern int dword_100CCF0; // weak
extern int dword_100CCF4; // weak
extern int (__thiscall *dword_100CD0C)(_DWORD); // weak
extern int dword_100CD10; // weak
extern int *off_100CD14; // weak
extern _UNKNOWN unk_100CD50; // weak
extern _UNKNOWN unk_100CD54; // weak
extern _UNKNOWN unk_100CD58; // weak
extern const WCHAR word_100CD60; // idb
extern const WCHAR word_100CF68; // idb
extern const WCHAR String2; // idb
extern const WCHAR word_100D378; // idb
extern int dword_100D580; // weak
extern const WCHAR word_100D588; // idb
extern LPARAM dword_100D790; // idb
extern WPARAM dword_100D794; // idb
extern int dword_100D798; // weak
extern int dword_100D79C; // weak
extern HMENU dword_100D7A0; // idb
extern volatile LONG Target; // idb
extern int dword_100D7A8; // weak
extern char dword_100D7AC[]; // idb
extern int dword_100D7B0; // weak
extern int x; // idb
extern int dword_100D7B8; // weak
extern int dword_100D7BC; // weak
extern int dword_100D7C0; // weak
extern int dword_100D7C4; // weak
extern int y; // idb
extern int dword_100D7CC; // idb
extern int dword_100D7D0; // weak
extern int dword_100D7D4; // weak
extern int dword_100D7D8; // weak
extern struct _SYSTEMTIME SystemTime; // idb
extern const WCHAR word_100D800; // idb
extern const WCHAR word_100DA08; // idb
extern const WCHAR word_100DC10; // idb
extern struct tagPOINT pt; // idb
extern int dword_100DE28; // weak
extern int dword_100DE2C; // weak
extern int dword_100DE30; // weak
extern int dword_100DE34; // weak
extern HWND hDlg; // idb
extern int dword_100DE3C; // weak
extern WCHAR pPrinterName; // idb
extern int dword_100E040; // weak
extern HMENU hMenu; // idb
extern _UNKNOWN unk_100E060; // weak
extern int dword_100E160; // weak

//-------------------------------------------------------------------------
// Function declarations

#define __thiscall __cdecl // Test compile in C mode

// LSTATUS __stdcall RegSetValueExW(HKEY hKey, LPCWSTR lpValueName, DWORD Reserved, DWORD dwType, const BYTE *lpData, DWORD cbData);
// LSTATUS __stdcall RegQueryValueExW(HKEY hKey, LPCWSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData);
// LSTATUS __stdcall RegCloseKey(HKEY hKey);
// LSTATUS __stdcall RegCreateKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult);
// LSTATUS __stdcall RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult);
// BOOL __stdcall IsTextUnicode(const void *lpv, int iSize, LPINT lpiResult);
// BOOL __stdcall CloseServiceHandle(SC_HANDLE hSCObject);
// BOOL __stdcall QueryServiceConfigW(SC_HANDLE hService, LPQUERY_SERVICE_CONFIGW lpServiceConfig, DWORD cbBufSize, LPDWORD pcbBytesNeeded);
// SC_HANDLE __stdcall OpenServiceW(SC_HANDLE hSCManager, LPCWSTR lpServiceName, DWORD dwDesiredAccess);
// SC_HANDLE __stdcall OpenSCManagerW(LPCWSTR lpMachineName, LPCWSTR lpDatabaseName, DWORD dwDesiredAccess);
// int __stdcall FindNLSString(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// HGLOBAL __stdcall GlobalAlloc(UINT uFlags, SIZE_T dwBytes);
// BOOL __stdcall GlobalUnlock(HGLOBAL hMem);
// LPVOID __stdcall GlobalLock(HGLOBAL hMem);
// int __stdcall GetTimeFormatW(LCID Locale, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpTimeStr, int cchTime);
// int __stdcall GetDateFormatW(LCID Locale, DWORD dwFlags, const SYSTEMTIME *lpDate, LPCWSTR lpFormat, LPWSTR lpDateStr, int cchDate);
// void __stdcall GetLocalTime(LPSYSTEMTIME lpSystemTime);
// LANGID __stdcall GetUserDefaultUILanguage();
// BOOL __stdcall HeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem);
// LPVOID __stdcall HeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes);
// HANDLE __stdcall GetProcessHeap();
// BOOL __stdcall GetFileInformationByHandle(HANDLE hFile, LPBY_HANDLE_FILE_INFORMATION lpFileInformation);
// LONG __stdcall InterlockedExchange(volatile LONG *Target, LONG Value);
// void __stdcall FreeLibraryAndExitThread(HMODULE hLibModule, DWORD dwExitCode);
// DWORD __stdcall GetFileAttributesW(LPCWSTR lpFileName);
// BOOL __stdcall Wow64RevertWow64FsRedirection(PVOID OlValue);
// BOOL __stdcall Wow64DisableWow64FsRedirection(PVOID *OldValue);
// BOOL __stdcall IsWow64Process(HANDLE hProcess, PBOOL Wow64Process);
// HANDLE __stdcall GetCurrentProcess();
// HANDLE __stdcall CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId);
// HMODULE __stdcall LoadLibraryW(LPCWSTR lpLibFileName);
// DWORD __stdcall GetModuleFileNameW(HMODULE hModule, LPWCH lpFilename, DWORD nSize);
// HANDLE __stdcall CreateFileMappingW(HANDLE hFile, LPSECURITY_ATTRIBUTES lpFileMappingAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCWSTR lpName);
// DWORD __stdcall FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, va_list *Arguments);
// LPVOID __stdcall MapViewOfFile(HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, SIZE_T dwNumberOfBytesToMap);
// BOOL __stdcall UnmapViewOfFile(LPCVOID lpBaseAddress);
// HLOCAL __stdcall LocalReAlloc(HLOCAL hMem, SIZE_T uBytes, UINT uFlags);
// UINT __stdcall GetACP();
// BOOL __stdcall DeleteFileW(LPCWSTR lpFileName);
// BOOL __stdcall SetEndOfFile(HANDLE hFile);
// int __stdcall WideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar, LPSTR lpMultiByteStr, int cbMultiByte, LPCSTR lpDefaultChar, LPBOOL lpUsedDefaultChar);
// void __stdcall SetLastError(DWORD dwErrCode);
// BOOL __stdcall WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped);
// DWORD __stdcall GetLastError();
// SIZE_T __stdcall LocalSize(HLOCAL hMem);
// DWORD __stdcall GetFullPathNameW(LPCWSTR lpFileName, DWORD nBufferLength, LPWSTR lpBuffer, LPWSTR *lpFilePart);
// int __stdcall MulDiv(int nNumber, int nNumerator, int nDenominator);
// LPWSTR __stdcall GetCommandLineW();
// DWORD __stdcall GetCurrentProcessId();
// int __stdcall FoldStringW(DWORD dwMapFlags, LPCWSTR lpSrcStr, int cchSrc, LPWSTR lpDestStr, int cchDest);
// int __stdcall lstrcmpW(LPCWSTR lpString1, LPCWSTR lpString2);
// HANDLE __stdcall FindFirstFileW(LPCWSTR lpFileName, LPWIN32_FIND_DATAW lpFindFileData);
// BOOL __stdcall FindClose(HANDLE hFindFile);
// BOOL __stdcall HeapSetInformation(HANDLE HeapHandle, HEAP_INFORMATION_CLASS HeapInformationClass, PVOID HeapInformation, SIZE_T HeapInformationLength);
// BOOL __stdcall TerminateProcess(HANDLE hProcess, UINT uExitCode);
// void __stdcall GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime);
// DWORD __stdcall GetCurrentThreadId();
// DWORD __stdcall GetTickCount();
// BOOL __stdcall QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount);
// HMODULE __stdcall GetModuleHandleA(LPCSTR lpModuleName);
// LPTOP_LEVEL_EXCEPTION_FILTER __stdcall SetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter);
// void __stdcall GetStartupInfoA(LPSTARTUPINFOA lpStartupInfo);
// LONG __stdcall InterlockedCompareExchange(volatile LONG *Destination, LONG Exchange, LONG Comperand);
// void __stdcall Sleep(DWORD dwMilliseconds);
// LPVOID __stdcall LocalLock(HLOCAL hMem);
// BOOL __stdcall LocalUnlock(HLOCAL hMem);
// int __stdcall lstrlenW(LPCWSTR lpString);
// int __stdcall GetLocaleInfoW(LCID Locale, LCTYPE LCType, LPWSTR lpLCData, int cchData);
// HGLOBAL __stdcall GlobalFree(HGLOBAL hMem);
// int __stdcall lstrcmpiW(LPCWSTR lpString1, LPCWSTR lpString2);
// UINT __stdcall SetErrorMode(UINT uMode);
// HANDLE __stdcall CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
// BOOL __stdcall ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped);
// BOOL __stdcall CloseHandle(HANDLE hObject);
// HLOCAL __stdcall LocalAlloc(UINT uFlags, SIZE_T uBytes);
// LONG __stdcall InterlockedDecrement(volatile LONG *lpAddend);
// HLOCAL __stdcall LocalFree(HLOCAL hMem);
// LONG __stdcall InterlockedIncrement(volatile LONG *lpAddend);
// BOOL __stdcall GetVersionExW(LPOSVERSIONINFOW lpVersionInformation);
// LONG __stdcall UnhandledExceptionFilter(struct _EXCEPTION_POINTERS *ExceptionInfo);
// HFONT __stdcall CreateFontIndirectW(const LOGFONTW *lplf);
// int __stdcall SetMapMode(HDC hdc, int iMode);
// BOOL __stdcall SetViewportExtEx(HDC hdc, int x, int y, LPSIZE lpsz);
// BOOL __stdcall SetWindowExtEx(HDC hdc, int x, int y, LPSIZE lpsz);
// BOOL __stdcall LPtoDP(HDC hdc, LPPOINT lppt, int c);
// int __stdcall SetBkMode(HDC hdc, int mode);
// BOOL __stdcall GetTextMetricsW(HDC hdc, LPTEXTMETRICW lptm);
// int __stdcall SetAbortProc(HDC hdc, ABORTPROC proc);
// int __stdcall StartDocW(HDC hdc, const DOCINFOW *lpdi);
// int __stdcall StartPage(HDC hdc);
// int __stdcall EndPage(HDC hdc);
// int __stdcall AbortDoc(HDC hdc);
// int __stdcall EndDoc(HDC hdc);
// BOOL __stdcall DeleteDC(HDC hdc);
// BOOL __stdcall TextOutW(HDC hdc, int x, int y, LPCWSTR lpString, int c);
// BOOL __stdcall GetTextExtentPoint32W(HDC hdc, LPCWSTR lpString, int c, LPSIZE psizl);
// HDC __stdcall CreateDCW(LPCWSTR pwszDriver, LPCWSTR pwszDevice, LPCWSTR pszPort, const DEVMODEW *pdm);
// HGDIOBJ __stdcall SelectObject(HDC hdc, HGDIOBJ h);
// int __stdcall GetTextFaceW(HDC hdc, int c, LPWSTR lpName);
// int __stdcall EnumFontsW(HDC hdc, LPCWSTR lpLogfont, FONTENUMPROCW lpProc, LPARAM lParam);
// int __stdcall GetDeviceCaps(HDC hdc, int index);
// BOOL __stdcall DeleteObject(HGDIOBJ ho);
// HWND __stdcall SetActiveWindow(HWND hWnd);
// HKL __stdcall GetKeyboardLayout(DWORD idThread);
// void __stdcall PostQuitMessage(int nExitCode);
// LRESULT __stdcall DefWindowProcW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
// HWND __stdcall GetForegroundWindow();
// BOOL __stdcall IsIconic(HWND hWnd);
// BOOL __stdcall DestroyWindow(HWND hWnd);
// BOOL __stdcall MessageBeep(UINT uType);
// BOOL __stdcall GetWindowPlacement(HWND hWnd, WINDOWPLACEMENT *lpwndpl);
// LPWSTR __stdcall CharUpperW(LPWSTR lpsz);
// ATOM __stdcall RegisterClassExW(const WNDCLASSEXW *);
// HANDLE __stdcall LoadImageW(HINSTANCE hInst, LPCWSTR name, UINT type, int cx, int cy, UINT fuLoad);
// HCURSOR __stdcall LoadCursorW(HINSTANCE hInstance, LPCWSTR lpCursorName);
// LONG __stdcall SetWindowLongW(HWND hWnd, int nIndex, LONG dwNewLong);
// HACCEL __stdcall LoadAcceleratorsW(HINSTANCE hInstance, LPCWSTR lpTableName);
// HMENU __stdcall GetSystemMenu(HWND hWnd, BOOL bRevert);
// BOOL __stdcall SetWindowPlacement(HWND hWnd, const WINDOWPLACEMENT *lpwndpl);
// HWND __stdcall CreateWindowExW(DWORD dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName, DWORD dwStyle, int X, int Y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);
// UINT __stdcall RegisterWindowMessageW(LPCWSTR lpString);
// BOOL __stdcall UpdateWindow(HWND hWnd);
// BOOL __stdcall InvalidateRect(HWND hWnd, const RECT *lpRect, BOOL bErase);
// int __stdcall SetScrollPos(HWND hWnd, int nBar, int nPos, BOOL bRedraw);
// int __stdcall GetWindowTextLengthW(HWND hWnd);
// LONG __stdcall GetWindowLongW(HWND hWnd, int nIndex);
// BOOL __stdcall PeekMessageW(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg);
// BOOL __stdcall EnableWindow(HWND hWnd, BOOL bEnable);
// INT_PTR __stdcall DialogBoxParamW(HINSTANCE hInstance, LPCWSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam);
// HWND __stdcall CreateDialogParamW(HINSTANCE hInstance, LPCWSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam);
// int __stdcall GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount);
// BOOL __stdcall SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags);
// HCURSOR __stdcall SetCursor(HCURSOR hCursor);
// BOOL __stdcall SetForegroundWindow(HWND hWnd);
// HWND __stdcall FindWindowW(LPCWSTR lpClassName, LPCWSTR lpWindowName);
// int __stdcall GetSystemMetrics(int nIndex);
// BOOL __stdcall MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint);
// LRESULT __stdcall SendMessageW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
// LPWSTR __stdcall CharNextW(LPCWSTR lpsz);
// DWORD __stdcall CheckMenuItem(HMENU hMenu, UINT uIDCheckItem, UINT uCheck);
// BOOL __stdcall CloseClipboard();
// BOOL __stdcall IsClipboardFormatAvailable(UINT format);
// BOOL __stdcall OpenClipboard(HWND hWndNewOwner);
// UINT __stdcall GetMenuState(HMENU hMenu, UINT uId, UINT uFlags);
// BOOL __stdcall EnableMenuItem(HMENU hMenu, UINT uIDEnableItem, UINT uEnable);
// HMENU __stdcall GetSubMenu(HMENU hMenu, int nPos);
// BOOL __stdcall GetClientRect(HWND hWnd, LPRECT lpRect);
// BOOL __stdcall UnhookWinEvent(HWINEVENTHOOK hWinEventHook);
// HMENU __stdcall GetMenu(HWND hWnd);
// int __stdcall MessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType);
// BOOL __stdcall WinHelpW(HWND hWndMain, LPCWSTR lpszHelp, UINT uCommand, ULONG_PTR dwData);
// int __stdcall GetDlgCtrlID(HWND hWnd);
// HWND __stdcall ChildWindowFromPoint(HWND hWndParent, POINT Point);
// HDC __stdcall GetDC(HWND hWnd);
// BOOL __stdcall ShowWindow(HWND hWnd, int nCmdShow);
// int __stdcall DrawTextExW(HDC hdc, LPWSTR lpchText, int cchText, LPRECT lprc, UINT format, LPDRAWTEXTPARAMS lpdtp);
// int __stdcall ReleaseDC(HWND hWnd, HDC hDC);
// HICON __stdcall LoadIconW(HINSTANCE hInstance, LPCWSTR lpIconName);
// HWINEVENTHOOK __stdcall SetWinEventHook(DWORD eventMin, DWORD eventMax, HMODULE hmodWinEventProc, WINEVENTPROC pfnWinEventProc, DWORD idProcess, DWORD idThread, DWORD dwFlags);
// BOOL __stdcall GetMessageW(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax);
// BOOL __stdcall PostMessageW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
// BOOL __stdcall IsDialogMessageW(HWND hDlg, LPMSG lpMsg);
// int __stdcall TranslateAcceleratorW(HWND hWnd, HACCEL hAccTable, LPMSG lpMsg);
// BOOL __stdcall EndDialog(HWND hDlg, INT_PTR nResult);
// UINT __stdcall GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int cchMax);
// BOOL __stdcall SetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPCWSTR lpString);
// HWND __stdcall SetFocus(HWND hWnd);
// BOOL __stdcall SetWindowTextW(HWND hWnd, LPCWSTR lpString);
// HWND __stdcall GetParent(HWND hWnd);
// int __stdcall LoadStringW(HINSTANCE hInstance, UINT uID, LPWSTR lpBuffer, int cchBufferMax);
// LRESULT __stdcall SendDlgItemMessageW(HWND hDlg, int nIDDlgItem, UINT Msg, WPARAM wParam, LPARAM lParam);
// BOOL __stdcall GetCursorPos(LPPOINT lpPoint);
// BOOL __stdcall ScreenToClient(HWND hWnd, LPPOINT lpPoint);
// BOOL __stdcall TranslateMessage(const MSG *lpMsg);
// HWND __stdcall GetAncestor(HWND hwnd, UINT gaFlags);
// LRESULT __stdcall DispatchMessageW(const MSG *lpMsg);
// unsigned int __cdecl controlfp(unsigned int NewValue, unsigned int Mask);
// int __cdecl vsnwprintf(wchar_t *Dest, size_t Count, const wchar_t *Format, va_list Args);
// __int32 __cdecl wtol(const wchar_t *Str);
// int __cdecl iswctype(wint_t C, wctype_t Type);
// int __cdecl wcsncmp(const wchar_t *Str1, const wchar_t *Str2, size_t MaxCount);
// wchar_t *__cdecl wcsrchr(const wchar_t *Str, wchar_t Ch);
// void __cdecl exit(int Code);
// int __cdecl ismbblead(_DWORD); weak
// int cexit(void); weak
// void __cdecl exit(int Code);
// void __cdecl terminate(); weak
// HWND __stdcall ReplaceTextW(LPFINDREPLACEW);
// BOOL __stdcall PageSetupDlgW(LPPAGESETUPDLGW);
// HRESULT __stdcall PrintDlgExW(LPPRINTDLGEXW);
// HWND __stdcall FindTextW(LPFINDREPLACEW);
// BOOL __stdcall ChooseFontW(LPCHOOSEFONTW);
// BOOL __stdcall GetSaveFileNameW(LPOPENFILENAMEW);
// DWORD __stdcall CommDlgExtendedError();
// BOOL __stdcall GetOpenFileNameW(LPOPENFILENAMEW);
// __int16 __stdcall GetFileTitleW(LPCWSTR, LPWSTR Buf, WORD cchSize);
// void __stdcall DragAcceptFiles(HWND hWnd, BOOL fAccept);
// void __stdcall SHAddToRecentDocs(UINT uFlags, LPCVOID pv);
// HRESULT __stdcall SHGetFolderPathW(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath);
// int __stdcall SHCreateItemFromParsingName(_DWORD, _DWORD, _DWORD, _DWORD); weak
// BOOL __stdcall ShellExecuteExW(LPSHELLEXECUTEINFOW lpExecInfo);
// UINT __stdcall DragQueryFileW(HDROP hDrop, UINT iFile, LPWSTR lpszFile, UINT cch);
// void __stdcall DragFinish(HDROP hDrop);
// HRESULT __stdcall CoInitializeEx(LPVOID pvReserved, DWORD dwCoInit);
// void __stdcall CoUninitialize();
// LPVOID __stdcall CoTaskMemAlloc(SIZE_T cb);
// HRESULT __stdcall CoCreateInstance(const IID *const rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, const IID *const riid, LPVOID *ppv);
// void __stdcall CoTaskMemFree(LPVOID pv);
// HRESULT __stdcall CoInitialize(LPVOID pvReserved);
// BOOL __stdcall PathIsFileSpecW(LPCWSTR pszPath);
// int __stdcall SHStrDupW(_DWORD, _DWORD); weak
// HPROPSHEETPAGE __stdcall CreatePropertySheetPageW(LPCPROPSHEETPAGEW constPropSheetPagePointer);
// INT_PTR __stdcall PropertySheetW(LPCPROPSHEETHEADERW);
// HWND __stdcall CreateStatusWindowW(LONG style, LPCWSTR lpszText, HWND hwndParent, UINT wID);
// int __stdcall COMCTL32_345(_DWORD, _DWORD, _DWORD, _DWORD); weak
// void __stdcall SysFreeString(BSTR bstrString);
// BSTR __stdcall SysAllocString(const OLECHAR *psz);
// int __stdcall RtlInitUnicodeString(_DWORD, _DWORD); weak
// int __stdcall NtQueryLicenseValue(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
WPARAM __cdecl sub_1001405(HINSTANCE hInstance);
// signed int __userpurge sub_10014DE(void *a1, int a2, HWND hWnd, signed int Msg, WPARAM hDrop, unsigned int lParam);
void __thiscall sub_1001564(void *this);
// void *__cdecl memset(void *Dst, int Val, size_t Size);
signed int sub_10015C3(wchar_t *Dest, unsigned int a2, const wchar_t *Format, …);
// void __userpurge sub_1001620(int a1, void (__stdcall *a2)(_DWORD, _DWORD, _DWORD, _DWORD), int a3);
signed int __stdcall sub_1001664(int a1);
int __stdcall loc_100169F(int); // weak
LRESULT __stdcall sub_100170A(unsigned int a1);
int __stdcall loc_1001799(int); // weak
LRESULT __stdcall pfnWinEventProc(int a1, int a2, int a3, int a4, int a5, int a6, int a7);
// signed int __userpurge sub_1001809(void *a1, int a2, HWND a3, unsigned __int16 a4, int a5);
__int32 __cdecl sub_1001963();
HGLOBAL __cdecl sub_1001A1C();
// void __userpurge sub_1001A4D(const WCHAR *a1, int a2, int (__stdcall *a3)(_DWORD, _DWORD, _DWORD, _DWORD), int a4);
// int __usercall sub_1001A72(int a1);
DWORD __stdcall sub_1001AA5(HWND hWndNewOwner);
int __stdcall loc_1001C23(HWND hWndNewOwner); // weak
int __stdcall loc_1001C66(HWND hWndNewOwner); // weak
int __stdcall sub_1001E66(HINSTANCE hInstance, int, int nCmdShow); // idb
// _DWORD __usercall sub_10023D0(_DWORD ebp0); weak
int __stdcall sub_1002409(int nWidth, int); // idb
// void *__cdecl memcpy(void *Dst, const void *Src, size_t Size);
int __stdcall sub_1002456(LPCWSTR lpString1); // idb
signed int __stdcall sub_1002558(int a1, unsigned int a2, int a3);
int __stdcall sub_10025CB(int a1);
signed int __stdcall sub_10025EF(WCHAR **a1);
int __stdcall sub_1002631(WCHAR **a1, int nCmdShow);
int __stdcall loc_100266D(int, int nCmdShow); // weak
// signed int __userpurge sub_1002689(unsigned __int16 *a1, WCHAR **a2);
signed int __stdcall sub_10026D5(wchar_t *Dest, unsigned int a2);
int __thiscall sub_1002733(int this);
int loc_10027A2(); // weak
// int __usercall sub_10027F0(unsigned int a1, int a2);
// int __userpurge sub_1002820(int a1, int a2, int a3);
int __stdcall loc_1002B3F(int, int); // weak
char *__cdecl sub_1002B64(int a1, int a2);
LPCWSTR __stdcall sub_1002C0D(LPWSTR lpBuffer, LPCWSTR lpFileName, DWORD nBufferLength);
LONG __thiscall sub_1002F8B(void *this);
// int __cdecl initterm(_DWORD, _DWORD); weak
int __cdecl sub_100304B();
DWORD __cdecl sub_1003053();
LSTATUS __cdecl sub_10030E2();
int __stdcall sub_100355B(HKEY hKey, LPCWSTR lpValueName, int); // idb
__int32 __stdcall sub_10035B0(HKEY Type, LPCWSTR lpValueName, const void *Src, void *Dst, DWORD cbData);
const WCHAR *__cdecl sub_100360C(LPCWSTR lpsz);
int __cdecl sub_1003660(unsigned int a1, unsigned int a2);
// int __usercall start(int a1);
int dword_1003784(); // weak
int dword_100378C(); // weak
int dword_1003790(); // weak
int dword_100379C(); // weak
int dword_10037A0(); // weak
// ATOM __usercall sub_10037EF(HINSTANCE a1);
HLOCAL __stdcall sub_1003881(HINSTANCE hInstance);
int __stdcall sub_100392D(HINSTANCE hInstance); // idb
unsigned int __cdecl sub_1003A48();
signed int __cdecl sub_1003A60(signed int a1);
// int __userpurge sub_1003A98(int a1, int a2);
char *__cdecl sub_1003B0C(int a1, int a2);
int __stdcall sub_1003BCD(int a1, int a2, int a3, int a4);
int __stdcall sub_1003C46(int a1);
signed int __stdcall sub_1003C61(int a1, int a2);
// int __userpurge sub_1003C89(int a1, int a2);
int __stdcall sub_1003D1B(int a1);
int __stdcall sub_1003D6D(int, LPCWSTR pszPath, int, int); // idb
int __stdcall sub_1003E75(int, LPCWSTR pszPath); // idb
LONG __stdcall sub_1003EA6(int a1);
// int __userpurge sub_1003F21(int a1, int a2, int a3);
// double __userpurge sub_1004038(int a1, int a2, int a3, double result, int a5, int a6, int a7);
signed int __stdcall sub_100405A(int a1, int a2);
signed int __stdcall sub_1004073(int a1, int a2);
signed int __stdcall sub_10040C4(int a1, int a2, int a3);
LONG __stdcall sub_10040FB(int a1);
int __stdcall sub_1004116(int a1);
signed int __stdcall sub_100414E(int a1);
int __cdecl sub_1004194();
int __stdcall sub_1004240(HWND hDlg, int, int, int); // idb
int __stdcall loc_1004280(HWND hDlg, int, int, int); // weak
DWORD __cdecl sub_100432B();
int __stdcall sub_10043F5(int a1, int a2);
HRESULT __thiscall sub_100449D(void *this);
int __stdcall sub_10045A7(int a1);
// int __stdcall WinSqmAddToStream(_DWORD, _DWORD, _DWORD, _DWORD); weak
int __stdcall sub_1004628(LPCWSTR lpString); // idb
LSTATUS __stdcall sub_100478B(HKEY hKey, LPCWSTR lpValueName, LPCWSTR lpData);
signed int __stdcall sub_10047BA(int a1, int a2, int a3, int a4);
LSTATUS __stdcall sub_100498E(HKEY hKey, LPCWSTR lpValueName, BYTE Data);
// void __usercall sub_10056E3(struct _SECURITY_ATTRIBUTES *a1, int a2, int a3);
void __stdcall sub_10058A7(int a1, int a2);
int __stdcall loc_10058B2(int, int); // weak
int __stdcall loc_10058BD(int, int); // weak
int __stdcall loc_10058D7(int, int); // weak
int __stdcall loc_10058EB(int, int); // weak
int __stdcall loc_100590F(int, int); // weak
int __stdcall loc_1005951(int, int); // weak
int __stdcall loc_1005976(int, int); // weak
int __stdcall loc_1005A43(int, int); // weak
int __stdcall loc_1005AC7(int, int); // weak
int __stdcall loc_1005AEB(int, int); // weak
int __stdcall loc_1005B5A(int, int); // weak
int __stdcall loc_1005B65(int, int); // weak
int __stdcall loc_1005B9C(int, int); // weak
int __stdcall loc_1005BE2(int, int); // weak
int __stdcall loc_1005C0C(int, int); // weak
// void __usercall sub_1005D2A(int a1, HWND a2);
// int __usercall sub_1006C68(int a1);
// void __usercall sub_1006C7C(int a1);
int loc_1006C97(); // weak
signed int __cdecl sub_1006CB4();
LONG __stdcall sub_1006DC0(int a1);
LONG __stdcall sub_1006DDA(int a1);
int __stdcall sub_1006DF4(int a1, int a2, int a3, int a4);
signed int __stdcall sub_1006E12(int a1, int a2, int a3);
int __stdcall sub_1006E32(int, LPCWSTR lpFileName); // idb
int __stdcall sub_1006F5C(int a1, const WCHAR *lpFileName);
LRESULT __stdcall sub_1006FB9(int a1);
const WCHAR *__stdcall sub_1007008(LPCWSTR lpsz);
int __stdcall sub_1007051(HWND hWnd, LPCWSTR lpCaption, LPCWSTR lpText, LPCWSTR lpString, UINT uType); // idb
__int32 __stdcall sub_10070D3(int a1);
int __stdcall sub_10071C2(const void *lpv, int iSize);
int __stdcall sub_100722E(HWND hWndParent, int, HWND hWnd, int); // idb
signed int __stdcall sub_100739B(DWORD hDlg, int a2, HWND hWnd, int a4);
signed int __stdcall DialogFunc(HWND hWnd, int a2, unsigned __int16 a3, int a4);
signed int __stdcall sub_10077F3(int a1);
signed int __stdcall sub_1007823(int a1, int *a2);
signed int __stdcall sub_10078D3(int a1, int a2, LPWSTR *a3);
// signed int __usercall sub_1007985(int a1);
void __stdcall sub_10079E3(HDROP hDrop, HWND hWnd);
int __stdcall Proc(int a1, int a2, int a3, int a4);
// int __userpurge sub_1007A58(int result, int a2, int a3, int a4);
int __stdcall sub_1007A90(HANDLE hFile, UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar); // idb
LRESULT __cdecl sub_1007B40();
LRESULT __cdecl sub_1007BA2();
int __stdcall sub_1007BF6(LPCWSTR lpString); // idb
// signed int __userpurge sub_1007C80(int a1, int a2, int a3, int a4, int a5);
int __stdcall sub_1007CD7(HWND hWnd, LPCWSTR lpString1, LPCWSTR lpBuffer); // idb
signed int __stdcall sub_1007F99(int a1, unsigned int a2, int a3);
signed int __stdcall sub_100800F(int a1);
int __stdcall sub_10080E4(int lpString, unsigned int a2);
int __stdcall sub_1008143(int a1, int a2, int a3, int a4, int a5);
int __stdcall sub_100818F(int a1, int a2, int a3, int a4, int a5);
signed int __stdcall sub_10081DB(int a1);
int __stdcall sub_1008383(DWORD hWnd); // idb
int __stdcall sub_10085E5(int a1, int a2, int a3, int a4);
size_t __cdecl sub_1008639();
bool __stdcall proc(int a1, int a2);
int __stdcall sub_100882E(HDC hdc); // idb
BOOL __cdecl sub_100888F();
signed int __cdecl sub_10088B6();
signed int __cdecl sub_1008987();
signed int __stdcall sub_1008A63(HWND hWnd, int a2, int a3, int a4);
signed int __stdcall sub_1008AEF(int a1, int a2, int a3, int a4);
int *__stdcall sub_1008B3E(int a1);
int __stdcall sub_1008EF2(HDC hdc, int y); // idb
signed int __stdcall sub_100900D(HDC a1);
bool __stdcall sub_10096AE(LCID Locale);
bool __stdcall sub_10096F8(int a1);
bool __stdcall sub_100973A(bool a1);
LRESULT __stdcall sub_100978A(int a1);
signed int __stdcall sub_10098C7(int a1, int a2);
BOOL __stdcall sub_100991D(const void *lpv, int iSize);
// signed int __usercall sub_1009952(int a1, int a2, int a3);
int __stdcall sub_1009989(HWND hwnd, int, __int16, int); // idb
void __stdcall StartAddress(int a1);
signed int __stdcall sub_1009CDF(int a1, int a2, int a3);
signed int __stdcall sub_1009D19(int a1, int a2, int a3);
int __cdecl sub_1009D73(int a1, int a2, int a3, int a4);
int __stdcall sub_1009D9D(int a1);
// int __cdecl XcptFilter(_DWORD, _DWORD); weak
bool __cdecl sub_1009DF0(int a1);
int __cdecl sub_1009E2A(int a1, unsigned int a2);
// int __usercall sub_1009E73(int a1);
// int __cdecl amsg_exit(_DWORD); weak
// BOOL __usercall sub_1009F07(char _CF, char _ZF, char _SF, char _OF, int a5, int a6, int a7, int a8, int a9, int a10, char a11);
// int __cdecl except_handler4_common(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// BOOL __stdcall ClosePrinter(HANDLE hPrinter);
// BOOL __stdcall GetPrinterDriverW(HANDLE hPrinter, LPWSTR pEnvironment, DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded);
// BOOL __stdcall OpenPrinterW(LPWSTR pPrinterName, LPHANDLE phPrinter, LPPRINTER_DEFAULTSW pDefault);
// int __stdcall WinSqmIncrementDWORD(_DWORD, _DWORD, _DWORD); weak
// BOOL __stdcall VerQueryValueW(LPCVOID pBlock, LPCWSTR lpSubBlock, LPVOID *lplpBuffer, PUINT puLen);
// BOOL __stdcall GetFileVersionInfoExW(DWORD dwFlags, LPCWSTR lpwstrFilename, DWORD dwHandle, DWORD dwLen, LPVOID lpData);
// DWORD __stdcall GetFileVersionInfoSizeExW(DWORD dwFlags, LPCWSTR lpwstrFilename, LPDWORD lpdwHandle);

//----- (01001405) --------------------------------------------------------
WPARAM __cdecl sub_1001405(HINSTANCE hInstance)
{
const WCHAR *v1; // edi@1
int v2; // eax@2
int v3; // ST18_4@2
HWINEVENTHOOK v4; // ebx@3
DWORD v5; // eax@3
struct tagMSG Msg; // [sp+8h] [bp-1Ch]@1

Msg.hwnd = 0;
memset(&Msg.message, 0, 0x18u);
v1 = GetCommandLineW();
HeapSetInformation(0, HeapEnableTerminationOnCorruption, 0, 0);
if ( CoInitializeEx(0, 2u) >= 0 )
{
v2 = (int)sub_100360C(v1);
if ( sub_1001E66(hInstance, v2, v3) )
{
v5 = GetCurrentProcessId();
v4 = SetWinEventHook(0x800Bu, 0x800Bu, 0, (WINEVENTPROC)pfnWinEventProc, v5, 0, 0);
while ( GetMessageW(&Msg, 0, 0, 0) )
{
if ( Msg.message == 80 )
PostMessageW(hWnd, 0x8001u, 0, 0);
if ( !dword_100CCE8 || !IsDialogMessageW(dword_100CCE8, &Msg) )
{
if ( !TranslateAcceleratorW(hWnd, hAccTable, &Msg) )
{
TranslateMessage(&Msg);
DispatchMessageW(&Msg);
}
}
}
sub_1001A1C();
if ( v4 )
UnhookWinEvent(v4);
}
else
{
Msg.wParam = 0;
}
CoUninitialize();
}
return Msg.wParam;
}
// 1001405: could not find valid save-restore pair for ebx

//----- (010014DE) --------------------------------------------------------
signed int __userpurge sub_10014DE(void *a1, int a2, HWND hWnd, signed int Msg, WPARAM hDrop, unsigned int lParam)
{
WPARAM v7; // eax@25
LPARAM v8; // ecx@25
WPARAM v9; // eax@29
LRESULT (__stdcall *v10)(HWND, UINT, WPARAM, LPARAM); // edi@56
unsigned int v11; // eax@66
int v12; // ecx@66
int v13; // edx@66
HCURSOR (__stdcall *v14)(HCURSOR); // esi@67
signed int v15; // esi@79
unsigned int v16; // eax@87
UINT v17; // [sp-Ch] [bp-14h]@11
UINT v18; // [sp-Ch] [bp-14h]@33
const WCHAR *v19; // [sp-Ch] [bp-14h]@59
WPARAM v20; // [sp-8h] [bp-10h]@11
WPARAM v21; // [sp-8h] [bp-10h]@33
const WCHAR *v22; // [sp-8h] [bp-10h]@59
LPARAM v23; // [sp-4h] [bp-Ch]@10
LPARAM v24; // [sp-4h] [bp-Ch]@33
HWND v25; // [sp-4h] [bp-Ch]@36
UINT v26; // [sp-4h] [bp-Ch]@59

if ( (unsigned int)Msg > 0x1C )
{
if ( Msg != 273 )
{
if ( Msg == 274 )
{
if ( !dword_100CCEC || (v16 = hDrop & 0xFFF0, v16 != 61472) && v16 != 61504 && v16 != 61520 )
DefWindowProcW(hWnd, 0x112u, hDrop, lParam);
return 0;
}
if ( Msg == 278 )
{
sub_1001AA5(hWnd);
return 0;
}
if ( Msg == 279 )
{
if ( dword_100CCEC )
{
if ( lParam >> 16 )
EnableMenuItem(hMenu, 0xF020u, 3u);
}
return 0;
}
if ( Msg == 563 )
{
sub_10079E3((HDROP)hDrop, hWnd);
return 0;
}
if ( Msg != 793 )
{
if ( Msg != 32769 )
{
LABEL_9:
if ( Msg != dword_100C07C )
{
v23 = lParam;
LABEL_11:
v20 = hDrop;
v17 = Msg;
return DefWindowProcW(hWnd, v17, v20, v23);
}
v12 = *(_DWORD *)(lParam + 12);
v11 = ~(unsigned __int8)*(_DWORD *)(lParam + 12) & 1;
v13 = (*(_DWORD *)(lParam + 12) >> 2) & 1;
dword_100D79C = ~(unsigned __int8)*(_DWORD *)(lParam + 12) & 1;
dword_100D798 = v13;
if ( v12 & 8 )
{
v14 = SetCursor;
SetCursor(hCursor);
}
else
{
if ( !(v12 & 0x10) )
{
if ( v12 & 0x20 )
{
if ( v11 )
dword_100D79C = 0;
SetCursor(hCursor);
SendMessageW(dword_100C028, 177u, 0, 0);
if ( !sub_1008639() )
{
do
sub_10070D3(0);
while ( sub_10081DB((int)&word_100C9E0) );
}
SetCursor(dword_100C094);
SendMessageW(dword_100C028, 0xB1u, 0, 0);
SendMessageW(dword_100C028, 0xB7u, 0, 0);
sub_100170A(1u);
}
else
{
if ( v12 & 0x40 )
dword_100CCE8 = 0;
}
return 0;
}
v14 = SetCursor;
SetCursor(hCursor);
sub_10070D3(1);
}
sub_10081DB((int)&word_100C9E0);
v14(dword_100C094);
return 0;
}
v15 = 0;
if ( ((unsigned int)GetKeyboardLayout(0) & 0x3FF) == 17 )
v15 = 1;
v24 = v15;
v21 = 1;
v18 = 216;
LABEL_34:
SendMessageW(dword_100C028, v18, v21, v24);
return 0;
}
if ( ((lParam >> 16) & 0xFFF) == 5 )
{
sub_1001809(a1, a2, hWnd, 0x15u, 0);
return 0;
}
}
if ( (HWND)lParam != dword_100C028
|| (v9 = hDrop >> 16, (unsigned __int16)(hDrop >> 16) != 1280) && (a1 = (void *)1281, (_WORD)v9 != 1281) )
{
if ( !sub_1001809(a1, a2, hWnd, hDrop, lParam) )
{
v23 = lParam;
goto LABEL_11;
}
return 0;
}
if ( dword_100C030 == 1 )
{
dword_100C030 = 2;
return 0;
}
v26 = 4112;
v22 = szApp;
v19 = lpText;
LABEL_60:
MessageBoxW(::hWnd, v19, v22, v26);
return 0;
}
if ( Msg == 28 )
{
if ( hDrop )
{
v7 = dword_100C044;
v8 = ::lParam;
if ( !dword_100C044 && !::lParam )
return 0;
v10 = SendMessageW;
}
else
{
v10 = SendMessageW;
SendMessageW(dword_100C028, 176u, (WPARAM)&dword_100C044, (LPARAM)&::lParam);
v7 = dword_100C044;
v8 = ::lParam;
if ( dword_100C044 == ::lParam )
{
dword_100C044 = 0;
::lParam = 0;
return 0;
}
}
v10(dword_100C028, 177u, v7, v8);
v10(dword_100C028, 183u, 0, 0);
return 0;
}
if ( Msg == 2 )
{
PostQuitMessage(0);
return 0;
}
if ( Msg == 5 )
{
if ( !hDrop )
goto LABEL_96;
if ( hDrop == 1 )
{
v23 = lParam;
v20 = 1;
v17 = 5;
return DefWindowProcW(hWnd, v17, v20, v23);
}
if ( hDrop == 2 )
LABEL_96:
sub_1002409((signed __int16)lParam, SHIWORD(lParam));
return 0;
}
if ( Msg == 6 )
{
if ( (_WORD)hDrop != 1 && (_WORD)hDrop != 2 || IsIconic(::hWnd) || GetForegroundWindow() != ::hWnd )
return 0;
v25 = GetForegroundWindow();
goto LABEL_37;
}
if ( Msg == 7 )
{
if ( IsIconic(::hWnd) )
return 0;
v25 = dword_100C028;
LABEL_37:
SetFocus(v25);
return 0;
}
if ( Msg == 8 )
{
v24 = lParam;
v21 = hDrop;
v18 = 8;
goto LABEL_34;
}
if ( Msg == 16 )
{
sub_1001963();
if ( sub_1001664(0) )
{
DestroyWindow(dword_100C024);
DestroyWindow(::hWnd);
DeleteObject(ho);
}
return 0;
}
if ( Msg != 17 )
goto LABEL_9;
if ( dword_100C038 )
{
MessageBeep(0);
MessageBeep(0);
v26 = 4096;
v22 = szApp;
v19 = dword_100C314;
goto LABEL_60;
}
return sub_1001664(1);
}
// 100C030: using guessed type int dword_100C030;
// 100C038: using guessed type int dword_100C038;
// 100C07C: using guessed type int dword_100C07C;
// 100CCEC: using guessed type int dword_100CCEC;
// 100D798: using guessed type int dword_100D798;
// 100D79C: using guessed type int dword_100D79C;

//----- (01001564) --------------------------------------------------------
void __thiscall sub_1001564(void *this)
{
JUMPOUT((unsigned int)this, dword_100C010, *(unsigned int *)sub_1009F07);
}
// 100C010: using guessed type int dword_100C010;

//----- (010015C3) --------------------------------------------------------
signed int sub_10015C3(wchar_t *Dest, unsigned int a2, const wchar_t *Format, …)
{
signed int result; // eax@1
int v4; // eax@4
signed int v5; // ebx@4
int v6; // esi@4
va_list va; // [sp+14h] [bp+14h]@1

va_start(va, Format);
result = 0;
if ( !a2 || a2 > 0x7FFFFFFF )
result = -2147024809;
if ( result >= 0 )
{
v6 = a2 - 1;
v5 = 0;
v4 = vsnwprintf(Dest, a2 - 1, Format, va);
if ( v4 < 0 || v4 > (unsigned int)v6 )
{
v5 = -2147024774;
}
else
{
if ( v4 != v6 )
return v5;
}
Dest[v6] = 0;
return v5;
}
return result;
}

//----- (01001620) --------------------------------------------------------
void __userpurge sub_1001620(int a1, void (__stdcall *a2)(_DWORD, _DWORD, _DWORD, _DWORD), int a3)
{
sub_10015C3((wchar_t *)(a1 - 260), 0x80u, Format);
JUMPOUT((unsigned int)dword_100C024, 0, *(unsigned int *)loc_1001799);
a2(dword_100C024, 1035, 1, a1 - 260);
JUMPOUT(*(unsigned int *)loc_1001799);
}
// 1001799: using guessed type int __stdcall loc_1001799(int);

//----- (01001664) --------------------------------------------------------
signed int __stdcall sub_1001664(int a1)
{
JUMPOUT(dword_100C008, 0, *(unsigned int *)sub_1001A4D);
JUMPOUT(SendMessageW(dword_100C028, 0xEu, 0, 0), 0, *(unsigned int *)sub_1001A4D);
return 1;
}
// 100C008: using guessed type int dword_100C008;

//----- (0100170A) --------------------------------------------------------
LRESULT __stdcall sub_100170A(unsigned int a1)
{
LRESULT result; // eax@1
WPARAM v2; // eax@1
unsigned int v3; // edi@1
LPARAM lParam; // [sp+Ch] [bp-10Ch]@1
WPARAM wParam; // [sp+10h] [bp-108h]@1
unsigned int v6; // [sp+114h] [bp-4h]@1
int v7; // [sp+118h] [bp+0h]@1

v6 = (unsigned int)&v7 ^ dword_100C010;
SendMessageW(dword_100C028, 176u, (WPARAM)&wParam, (LPARAM)&lParam);
v2 = SendMessageW(dword_100C028, 0xC9u, wParam, 0);
v3 = v2 + 1;
result = SendMessageW(dword_100C028, 0xBBu, v2, 0);
JUMPOUT(a1, 0, *(unsigned int *)sub_1001620);
JUMPOUT(wParam - result + 1, dword_100C01C, *(unsigned int *)sub_1001620);
JUMPOUT(v3, dword_100C018, *(unsigned int *)sub_1001620);
dword_100C018 = v3;
dword_100C01C = wParam - result + 1;
return result;
}
// 100C010: using guessed type int dword_100C010;
// 100C018: using guessed type int dword_100C018;
// 100C01C: using guessed type int dword_100C01C;

//----- (010017BB) --------------------------------------------------------
LRESULT __stdcall pfnWinEventProc(int a1, int a2, int a3, int a4, int a5, int a6, int a7)
{
return sub_100170A(0);
}

//----- (01001809) --------------------------------------------------------
signed int __userpurge sub_1001809(void *a1, int a2, HWND a3, unsigned __int16 a4, int a5)
{
int ebp0; // ebp@0
HMENU v7; // eax@15
HMENU v8; // ebx@15
LPARAM v9; // eax@15
HDC v10; // ebx@20
int v11; // eax@21
HFONT v12; // esi@22
const WCHAR *v13; // eax@30
int v14; // esi@30
signed int v15; // eax@31
int v16; // eax@37
signed int v17; // esi@37
DWORD v18; // eax@42
HANDLE v19; // ebx@68
HWND v20; // eax@78
HWND v21; // eax@80
int v22; // eax@86
HMENU v23; // eax@92
HMENU v24; // ebx@92
HMENU v25; // eax@92
HMENU v26; // eax@93
HMENU v27; // eax@93
signed int v28; // esi@96
HWND v29; // [sp-10h] [bp-78h]@74
UINT v30; // [sp-Ch] [bp-74h]@74
UINT v31; // [sp-8h] [bp-70h]@15
WPARAM v32; // [sp-8h] [bp-70h]@74
UINT v33; // [sp-4h] [bp-6Ch]@15
int v34; // [sp-4h] [bp-6Ch]@34
LPARAM v35; // [sp-4h] [bp-6Ch]@74
CHOOSEFONTW v36; // [sp+Ch] [bp-5Ch]@20
struct tagRECT Rect; // [sp+48h] [bp-20h]@95
int v38; // [sp+58h] [bp-10h]@30
HWND hWnd; // [sp+5Ch] [bp-Ch]@1
LPVOID lpFileName; // [sp+60h] [bp-8h]@30
unsigned int v41; // [sp+64h] [bp-4h]@1
int v42; // [sp+68h] [bp+0h]@1

v41 = (unsigned int)&v42 ^ dword_100C010;
hWnd = a3;
JUMPOUT(a4, 0x40u, *(unsigned int *)loc_1001C23);
if ( a4 == 64 )
{
sub_100449D(a1);
return 1;
}
if ( (signed int)a4 > 21 )
{
if ( (signed int)a4 > 26 )
{
if ( a4 == 27 )
{
GetClientRect(::hWnd, &Rect);
if ( *(_DWORD *)&dword_100C02C )
{
*(_DWORD *)&dword_100C02C = 0;
ShowWindow(dword_100C024, 0);
sub_1002409(Rect.right - Rect.left, Rect.bottom - Rect.top);
v28 = 1;
}
else
{
v28 = 1;
*(_DWORD *)&dword_100C02C = 1;
sub_1002409(Rect.right - Rect.left, Rect.bottom - Rect.top);
sub_100170A(1u);
ShowWindow(dword_100C024, 5);
}
dword_100CCF0 = v28;
return 1;
}
if ( a4 != 32 )
{
if ( a4 == 33 )
{
v36.lStructSize = 0;
memset(&v36.hwndOwner, 0, 0x38u);
v10 = GetDC(0);
if ( v10 )
{
v36.lStructSize = 60;
v36.hwndOwner = hWnd;
v36.lpLogFont = &lf;
v11 = GetDeviceCaps(v10, 90);
lf.lfHeight = -MulDiv(*(int *)&Data, v11, 720);
v36.Flags = 16777281;
v36.nFontType = 8192;
ReleaseDC(0, v10);
if ( ChooseFontW(&v36) )
{
SetCursor(hCursor);
v12 = CreateFontIndirectW(&lf);
if ( v12 )
{
DeleteObject(ho);
ho = v12;
SendMessageW(dword_100C028, 0x30u, (WPARAM)v12, 1);
*(_DWORD *)&Data = v36.iPointSize;
}
SetCursor(dword_100C094);
dword_100C03C = 1;
}
}
return 1;
}
return 0;
}
v22 = -(wParam != 0);
if ( sub_1008383((v22 & 0x100000) + 1344274692) )
{
dword_100CCF0 = 1;
wParam = wParam == 0;
}
else
{
MessageBoxW(::hWnd, dword_100C2EC, szApp, 0x30u);
}
if ( !wParam )
{
v26 = GetMenu(::hWnd);
v27 = GetSubMenu(v26, 3);
EnableMenuItem(v27, 0x1Bu, 0);
if ( !dword_100D580 )
return 1;
v35 = 0;
v32 = 27;
v30 = 273;
v29 = hWnd;
goto LABEL_75;
}
dword_100D580 = *(_DWORD *)&dword_100C02C;
if ( *(_DWORD *)&dword_100C02C )
SendMessageW(hWnd, 0x111u, 0x1Bu, 0);
v23 = GetMenu(::hWnd);
v24 = v23;
v25 = GetSubMenu(v23, 3);
CheckMenuItem(v25, 0x1Bu, 0);
v33 = 1;
v31 = 27;
v7 = GetSubMenu(v24, 3);
}
else
{
if ( a4 == 26 )
{
sub_100978A(0);
return 1;
}
if ( a4 == 22 )
{
if ( word_100C9E0 )
{
sub_10081DB((int)&word_100C9E0);
return 1;
}
LABEL_84:
v20 = dword_100CCE8;
if ( !dword_100CCE8 )
{
stru_100C0C0.wReplaceWithLen = 0;
stru_100C0C0.Flags = 65537;
stru_100C0C0.lpstrReplaceWith = 0;
stru_100C0C0.lpstrFindWhat = (LPWSTR)&word_100C9E0;
stru_100C0C0.wFindWhatLen = 128;
v21 = FindTextW(&stru_100C0C0);
goto LABEL_81;
}
goto LABEL_79;
}
if ( a4 == 23 )
{
v20 = dword_100CCE8;
if ( !dword_100CCE8 )
{
stru_100C0C0.Flags = 65552;
stru_100C0C0.lpstrReplaceWith = (LPWSTR)&unk_100E060;
stru_100C0C0.wReplaceWithLen = 128;
stru_100C0C0.lpstrFindWhat = (LPWSTR)&word_100C9E0;
stru_100C0C0.wFindWhatLen = 128;
v21 = ReplaceTextW(&stru_100C0C0);
LABEL_81:
dword_100CCE8 = v21;
return 1;
}
LABEL_79:
SetFocus(v20);
return 1;
}
if ( a4 == 24 )
{
if ( !DialogBoxParamW(hInstance, (LPCWSTR)0xE, ::hWnd, (DLGPROC)DialogFunc, 0) )
sub_1006FB9(dword_100E160);
return 1;
}
if ( a4 != 25 )
return 0;
v8 = GetMenu(::hWnd);
v9 = SendMessageW(dword_100C028, 14u, 0, 0);
SendMessageW(dword_100C028, 0xB1u, 0, v9);
SendMessageW(dword_100C028, 0xB7u, 0, 0);
v33 = 1;
v31 = 25;
v7 = GetSubMenu(v8, 1);
}
EnableMenuItem(v7, v31, v33);
return 1;
}
if ( a4 == 21 )
goto LABEL_84;
if ( (signed int)a4 <= 5 ) { if ( a4 == 5 ) { if ( PageSetupDlgW(&stru_100C140) ) { LABEL_72: sub_1002558((int)&word_100C740, 0x28u, (int)&word_100C6A0); sub_1002558((int)&Dst, 0x28u, (int)&unk_100C6F0); dword_100CCF4 = 1; } else { while ( 1 ) { v18 = CommDlgExtendedError(); if ( v18 != 4107 ) { if ( v18 != 4105 && v18 != 4108 ) break; } sub_1001A1C(); stru_100C140.hDevNames = 0; stru_100C140.hDevMode = 0; if ( PageSetupDlgW(&stru_100C140) ) goto LABEL_72; } sub_100432B(); } return 1; } if ( a4 == 1 ) { sub_100800F(1); } else { if ( a4 == 2 ) { if ( !sub_1001664(0) ) return 1; v38 = dword_100C00C; v16 = sub_1003F21(a2, (int)hWnd, (int)&lpFileName); v17 = v16; if ( v16 >= 0 )
goto LABEL_101;
if ( v16 != -2147023673 )
v17 = sub_1007823((int)hWnd, (int *)&lpFileName);
if ( v17 >= 0 )
{
LABEL_101:
v19 = hFile;
hFile = CreateFileW((LPCWSTR)lpFileName, 0x80000000u, 3u, 0, 3u, 0x80u, 0);
if ( !sub_1002820(ebp0, (int)lpFileName, dword_100C00C) )
{
hFile = v19;
v17 = -2147467259;
}
CoTaskMemFree(lpFileName);
if ( v17 >= 0 )
return 1;
}
dword_100C00C = v38;
v34 = v17;
}
else
{
if ( a4 == 3 )
{
dword_100E040 = dword_100C00C;
if ( !dword_100C008 && sub_1007CD7(::hWnd, &FileName, 0) )
return 1;
}
else
{
if ( a4 != 4 )
return 0;
}
v14 = (int)L"*.txt";
v38 = 0;
lpFileName = 0;
v13 = L"*.txt";
if ( !dword_100C008 )
v13 = &FileName;
v15 = sub_1003D6D((int)hWnd, v13, (int)&lpFileName, (int)&v38);
if ( v15 >= 0 )
goto LABEL_102;
if ( v15 != -2147023673 )
{
if ( !dword_100C008 )
v14 = (int)&FileName;
v15 = sub_10078D3((int)hWnd, v14, (LPWSTR *)&lpFileName);
}
if ( v15 >= 0 )
{
LABEL_102:
if ( sub_1007CD7(hWnd, (LPCWSTR)lpFileName, (LPCWSTR)1) )
sub_1002558((int)&FileName, 0x104u, (int)lpFileName);
if ( v38 )
(*(void (__stdcall **)(int))(*(_DWORD *)v38 + 8))(v38);
CoTaskMemFree(lpFileName);
return 1;
}
v34 = v15;
}
sub_1003C46(v34);
}
return 1;
}
JUMPOUT(a4 - 6, 0, *(unsigned int *)loc_1004280);
if ( a4 == 7 )
JUMPOUT(*(unsigned int *)loc_1001C66);
if ( a4 == 15 )
return 1;
if ( a4 == 16 )
{
v35 = 0;
v32 = 0;
v30 = 199;
v29 = dword_100C028;
LABEL_75:
SendMessageW(v29, v30, v32, v35);
return 1;
}
return 0;
}
// 1001C23: using guessed type int __stdcall loc_1001C23(HWND hWndNewOwner);
// 1001C66: using guessed type int __stdcall loc_1001C66(HWND hWndNewOwner);
// 1004280: using guessed type int __stdcall loc_1004280(HWND hDlg, int, int, int);
// 100C008: using guessed type int dword_100C008;
// 100C00C: using guessed type int dword_100C00C;
// 100C010: using guessed type int dword_100C010;
// 100C03C: using guessed type int dword_100C03C;
// 100CCF0: using guessed type int dword_100CCF0;
// 100CCF4: using guessed type int dword_100CCF4;
// 100D580: using guessed type int dword_100D580;
// 100E040: using guessed type int dword_100E040;
// 100E160: using guessed type int dword_100E160;

//----- (01001963) --------------------------------------------------------
__int32 __cdecl sub_1001963()
{
__int32 result; // eax@1
char v1; // zf@2
signed int v2; // ecx@2
char *v3; // edi@2
char *v4; // esi@2
WINDOWPLACEMENT wndpl; // [sp+4h] [bp-34h]@1
int v6; // [sp+30h] [bp-8h]@1
HKEY hKey; // [sp+34h] [bp-4h]@11

v6 = 0;
wndpl.length = 44;
result = GetWindowPlacement(hWnd, &wndpl);
if ( result )
{
v2 = 4;
v3 = (char *)&wndpl.rcNormalPosition;
v4 = (char *)&::wndpl.rcNormalPosition;
result = 0;
v1 = 1;
do
{
if ( !v2 )
break;
v1 = *(_DWORD *)v4 == *(_DWORD *)v3;
v4 += 4;
v3 += 4;
--v2;
}
while ( v1 );
if ( !v1 )
{
v6 = 1;
LABEL_11:
result = RegCreateKeyW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Notepad", &hKey);
if ( !result )
{
if ( dword_100C03C )
{
sub_100498E(hKey, L"lfEscapement", LOBYTE(lf.lfEscapement));
sub_100498E(hKey, L"lfOrientation", LOBYTE(lf.lfOrientation));
sub_100498E(hKey, L"lfWeight", LOBYTE(lf.lfWeight));
sub_100498E(hKey, L"lfItalic", lf.lfItalic);
sub_100498E(hKey, L"lfUnderline", lf.lfUnderline);
sub_100498E(hKey, L"lfStrikeOut", lf.lfStrikeOut);
sub_100498E(hKey, L"lfCharSet", lf.lfCharSet);
sub_100498E(hKey, L"lfOutPrecision", lf.lfOutPrecision);
sub_100498E(hKey, L"lfClipPrecision", lf.lfClipPrecision);
sub_100498E(hKey, L"lfQuality", lf.lfQuality);
sub_100498E(hKey, L"lfPitchAndFamily", lf.lfPitchAndFamily);
sub_100478B(hKey, L"lfFaceName", lf.lfFaceName);
sub_100498E(hKey, L"iPointSize", Data);
}
if ( dword_100CCF0 )
{
sub_100498E(hKey, L"fWrap", wParam);
sub_100498E(hKey, L"StatusBar", dword_100C02C);
}
if ( dword_100CCF4 )
{
sub_100478B(hKey, L"szHeader", &word_100C740);
sub_100478B(hKey, L"szTrailer", (LPCWSTR)&Dst);
sub_100498E(hKey, L"iMarginTop", LOBYTE(stru_100C140.rtMargin.top));
sub_100498E(hKey, L"iMarginBottom", LOBYTE(stru_100C140.rtMargin.bottom));
sub_100498E(hKey, L"iMarginLeft", LOBYTE(stru_100C140.rtMargin.left));
sub_100498E(hKey, L"iMarginRight", LOBYTE(stru_100C140.rtMargin.right));
}
if ( v6 )
{
sub_100498E(hKey, L"iWindowPosX", LOBYTE(wndpl.rcNormalPosition.left));
sub_100498E(hKey, L"iWindowPosY", LOBYTE(wndpl.rcNormalPosition.top));
sub_100498E(hKey, L"iWindowPosDX", LOBYTE(wndpl.rcNormalPosition.right) - LOBYTE(wndpl.rcNormalPosition.left));
sub_100498E(hKey, L"iWindowPosDY", LOBYTE(wndpl.rcNormalPosition.bottom) - LOBYTE(wndpl.rcNormalPosition.top));
}
result = RegCloseKey(hKey);
}
return result;
}
}
if ( dword_100CCF4 || dword_100CCF0 || dword_100C03C )
goto LABEL_11;
return result;
}
// 100C03C: using guessed type int dword_100C03C;
// 100CCF0: using guessed type int dword_100CCF0;
// 100CCF4: using guessed type int dword_100CCF4;

//----- (01001A1C) --------------------------------------------------------
HGLOBAL __cdecl sub_1001A1C()
{
HGLOBAL result; // eax@2

if ( stru_100C140.hDevMode )
GlobalFree(stru_100C140.hDevMode);
result = stru_100C140.hDevNames;
if ( stru_100C140.hDevNames )
result = GlobalFree(stru_100C140.hDevNames);
stru_100C140.hDevMode = 0;
stru_100C140.hDevNames = 0;
return result;
}

//----- (01001A4D) --------------------------------------------------------
void __userpurge sub_1001A4D(const WCHAR *a1, int a2, int (__stdcall *a3)(_DWORD, _DWORD, _DWORD, _DWORD), int a4)
{
int v4; // ST10_4@1
const WCHAR *v5; // eax@3
const WCHAR *v6; // edi@3
bool v7; // esi@4
int v8; // eax@4
int v9; // eax@8
signed int v10; // edi@11
int v11; // eax@13
const WCHAR *v12; // ST08_4@13
const WCHAR *v13; // eax@20

if ( a3(dword_100C028, 184, a1, v4) )
{
v5 = lpString2;
v6 = &FileName;
if ( (const WCHAR *)dword_100C008 == a1 )
v5 = &FileName;
v7 = 1;
dword_100C038 = 1;
v8 = sub_1004628(v5);
*(_DWORD *)(a2 - 12) = v8;
dword_100C038 = (int)a1;
if ( v8 == 6 )
{
if ( (const WCHAR *)dword_100C008 != a1 )
goto LABEL_28;
dword_100E040 = dword_100C00C;
v9 = sub_1007CD7(hWnd, &FileName, a1);
v7 = v9 == 0;
if ( !(v9 == 0) )
goto LABEL_2;
if ( (const WCHAR *)dword_100C008 != a1 )
LABEL_28:
v6 = L"*.txt";
v10 = SHStrDupW(v6, a2 - 8);
if ( v10 < (signed int)a1 )
goto LABEL_24;
while ( (const WCHAR *)v7 != a1 )
{
v12 = *(const WCHAR **)(a2 - 8);
*(_DWORD *)(a2 - 16) = a1;
v11 = sub_1003D6D((int)hWnd, v12, a2 - 4, a2 - 16);
v10 = v11;
if ( v11 < (signed int)a1 )
{
if ( v11 != -2147023673 )
v10 = sub_10078D3((int)hWnd, *(_DWORD *)(a2 - 8), (LPWSTR *)(a2 - 4));
}
CoTaskMemFree(*(LPVOID *)(a2 - 8));
if ( v10 < (signed int)a1 )
goto LABEL_24;
if ( sub_1007CD7(hWnd, *(LPCWSTR *)(a2 - 4), (LPCWSTR)1) )
{
sub_1002558((int)&FileName, 0x104u, *(_DWORD *)(a2 - 4));
dword_100C00C = dword_100E040;
v7 = 0;
}
else
{
v10 = SHStrDupW(*(_DWORD *)(a2 - 4), a2 - 8);
}
v13 = *(const WCHAR **)(a2 - 16);
if ( v13 != a1 )
(*(void (__cdecl **)(_DWORD))(*(_DWORD *)v13 + 8))(*(_DWORD *)(a2 - 16));
CoTaskMemFree(*(LPVOID *)(a2 - 4));
if ( v10 < (signed int)a1 )
break;
}
if ( v10 < (signed int)a1 )
{
LABEL_24:
*(_DWORD *)(a2 - 12) = 2;
if ( v10 == -2147024882 )
MessageBoxW(hWnd, lpText, szApp, 0x1010u);
}
}
}
LABEL_2:
JUMPOUT(*(unsigned int *)loc_100169F);
}
// 10013B4: using guessed type int __stdcall SHStrDupW(_DWORD, _DWORD);
// 100169F: using guessed type int __stdcall loc_100169F(int);
// 100C008: using guessed type int dword_100C008;
// 100C00C: using guessed type int dword_100C00C;
// 100C038: using guessed type int dword_100C038;
// 100E040: using guessed type int dword_100E040;

//----- (01001A72) --------------------------------------------------------
int __usercall sub_1001A72(int a1)
{
sub_1001564((void *)(a1 ^ *(_DWORD *)(a1 - 28)));
return sub_10023D0(a1);
}
// 10023D0: using guessed type _DWORD __usercall sub_10023D0(_DWORD ebp0);

//----- (01001AA5) --------------------------------------------------------
DWORD __stdcall sub_1001AA5(HWND hWndNewOwner)
{
int v1; // eax@1
HMENU v2; // ebx@1
bool v3; // ST0C_4@1
HMENU v4; // eax@1
UINT v5; // ST0C_4@1
HMENU v6; // eax@1
UINT v7; // ST0C_4@1
HMENU v8; // eax@1
HMENU v9; // eax@1
bool v10; // ST0C_4@4
HMENU v11; // eax@4
UINT v13; // ST0C_4@6
HMENU v14; // eax@6
UINT v15; // ST0C_4@6
HMENU v16; // eax@6
bool v17; // ST0C_4@6
HMENU v18; // eax@6
bool v19; // ST0C_4@6
HMENU v20; // eax@6
UINT v21; // ST0C_4@6
HMENU v22; // eax@6
UINT v23; // ST0C_4@6
HMENU v24; // eax@6
HMENU v25; // eax@8
LPARAM lParam; // [sp+Ch] [bp-10h]@1
WPARAM wParam; // [sp+10h] [bp-Ch]@1
int v28; // [sp+14h] [bp-8h]@1
UINT uEnable; // [sp+18h] [bp-4h]@1

v28 = 0;
v2 = GetMenu(hWnd);
SendMessageW(dword_100C028, 0xB0u, (WPARAM)&wParam, (LPARAM)&lParam);
v3 = wParam == lParam;
uEnable = wParam == lParam;
v4 = GetSubMenu(v2, 1);
EnableMenuItem(v4, 768u, v3);
v5 = uEnable;
v6 = GetSubMenu(v2, 1);
EnableMenuItem(v6, 0x301u, v5);
v7 = uEnable;
v8 = GetSubMenu(v2, 1);
EnableMenuItem(v8, 0x303u, v7);
v9 = GetSubMenu(v2, 1);
v1 = GetMenuState(v9, 0x19u, 0);
if ( v1 == 1 )
{
if ( uEnable == 1 )
{
v25 = GetSubMenu(v2, v1);
EnableMenuItem(v25, 0x19u, 0);
}
}
if ( OpenClipboard(hWndNewOwner) )
{
v28 = IsClipboardFormatAvailable(1u);
CloseClipboard();
}
v10 = v28 == 0;
v11 = GetSubMenu(v2, 1);
EnableMenuItem(v11, 0x302u, v10);
uEnable = 1;
if ( SendMessageW(dword_100C028, 0xEu, 0, 0) )
uEnable = 0;
v13 = uEnable;
v14 = GetSubMenu(v2, 1);
EnableMenuItem(v14, 0x15u, v13);
v15 = uEnable;
v16 = GetSubMenu(v2, 1);
EnableMenuItem(v16, 0x16u, v15);
v17 = ::wParam != 0;
v18 = GetSubMenu(v2, 1);
EnableMenuItem(v18, 0x18u, v17);
v19 = SendMessageW(dword_100C028, 0xC6u, 0, 0) == 0;
v20 = GetSubMenu(v2, 1);
EnableMenuItem(v20, 0x10u, v19);
v21 = ::wParam != 0 ? 8 : 0;
v22 = GetSubMenu(v2, 2);
CheckMenuItem(v22, 32u, v21);
v23 = *(_DWORD *)&dword_100C02C != 0 ? 8 : 0;
v24 = GetSubMenu(v2, 3);
return CheckMenuItem(v24, 0x1Bu, v23);
}

//----- (01001E66) --------------------------------------------------------
signed int __stdcall sub_1001E66(HINSTANCE hInstance, int a2, int nCmdShow)
{
int ebp0; // ebp@0
HACCEL v4; // eax@5
HWND v5; // esi@7
void *v6; // ecx@7
int v7; // eax@16
int v8; // edi@17
int v9; // eax@17
signed int v10; // eax@20
int v11; // ecx@23
HMENU v13; // eax@32
HMENU v14; // eax@32
int v15; // eax@41
int Dst; // [sp+Ch] [bp-A8h]@10
int v17; // [sp+28h] [bp-8Ch]@11
int v18; // [sp+2Ch] [bp-88h]@11
int v19; // [sp+30h] [bp-84h]@11
int v20; // [sp+34h] [bp-80h]@11
struct tagRECT Rect; // [sp+38h] [bp-7Ch]@13
int v22; // [sp+48h] [bp-6Ch]@15
int v23; // [sp+4Ch] [bp-68h]@15
int v24; // [sp+50h] [bp-64h]@15
int v25; // [sp+54h] [bp-60h]@15
LPARAM lParam; // [sp+58h] [bp-5Ch]@15
int v27; // [sp+5Ch] [bp-58h]@15
HINSTANCE v28; // [sp+60h] [bp-54h]@1
__int32 v29; // [sp+64h] [bp-50h]@1
HGDIOBJ wParam; // [sp+68h] [bp-4Ch]@16
HDC hdc; // [sp+6Ch] [bp-48h]@3
WCHAR String1; // [sp+70h] [bp-44h]@16
unsigned int v33; // [sp+B0h] [bp-4h]@1
int v34; // [sp+B4h] [bp+0h]@1

v33 = (unsigned int)&v34 ^ dword_100C010;
v28 = hInstance;
v29 = a2;
dword_100C07C = RegisterWindowMessageW(L"commdlg_FindReplace");
if ( !dword_100C07C )
return 0;
dword_100C078 = RegisterWindowMessageW(L"commdlg_help");
if ( !dword_100C078 )
return 0;
hdc = GetDC(0);
if ( !hdc )
return 0;
if ( !sub_1003881(hInstance) )
return 0;
dword_100C094 = LoadCursorW(0, (LPCWSTR)32513);
hCursor = LoadCursorW(0, (LPCWSTR)0x7F02);
v4 = LoadAcceleratorsW(hInstance, L"MainAcc");
hAccTable = v4;
if ( !hCursor )
return 0;
if ( !v4 )
return 0;
sub_10037EF(hInstance);
::hInstance = hInstance;
stru_100C140.lStructSize = 84;
stru_100C140.hDevMode = 0;
stru_100C140.hDevNames = 0;
stru_100C140.hInstance = hInstance;
sub_1002F8B(v6);
sub_10030E2();
v5 = CreateWindowExW(0, L"Notepad", &szOtherStuff, 0xCF0000u, X, Y, nWidth, nHeight, 0, 0, hInstance, 0);
hWnd = v5;
stru_100C140.hwndOwner = v5;
if ( !v5 )
return 0;
if ( Y != -2147483648 )
{
if ( X != -2147483648 )
{
memset(&Dst, 0, 0x2Cu);
Dst = 44;
if ( GetWindowPlacement(v5, (WINDOWPLACEMENT *)&Dst) )
{
memset(&wndpl, 0, 0x2Cu);
wndpl.rcNormalPosition.left = X;
wndpl.length = 44;
wndpl.rcNormalPosition.right = v19 + X - v17;
wndpl.rcNormalPosition.top = Y;
wndpl.rcNormalPosition.bottom = v20 + Y - v18;
}
SetWindowPlacement(hWnd, &wndpl);
v5 = hWnd;
}
}
DragAcceptFiles(v5, 1);
GetClientRect(hWnd, &Rect);
dword_100C028 = CreateWindowExW(
0x200u,
L"Edit",
&szOtherStuff,
::wParam != 0 ? 1344274692 : 1345323268,
0,
0,
Rect.right,
Rect.bottom - 100,
hWnd,
(HMENU)0xF,
v28,
0);
if ( !dword_100C028
|| (dword_100C024 = CreateStatusWindowW(
(*(_DWORD *)&dword_100C02C != 0 ? 0x10000000 : 0) | 0x44800000,
&szOtherStuff,
hWnd,
0x401u),
!dword_100C024) )
return 0;
sub_100170A(1u);
GetClientRect(dword_100C024, (LPRECT)&v22);
dword_100C084 = v25 - v23;
v27 = -1;
lParam = 3 * (v24 - v22) / 4;
SendMessageW(dword_100C024, 1028u, 2u, (LPARAM)&lParam);
SendMessageW(dword_100C028, 0xC8u, ::wParam, 0);
if ( ::wParam )
{
v13 = GetMenu(hWnd);
v14 = GetSubMenu(v13, 3);
EnableMenuItem(v14, 0x1Bu, 1u);
}
v7 = GetDeviceCaps(hdc, 90);
lf.lfHeight = -MulDiv(*(int *)&Data, v7, 720);
ho = CreateFontIndirectW(&lf);
wParam = SelectObject(hdc, ho);
GetTextFaceW(hdc, 32, &String1);
SelectObject(hdc, wParam);
if ( lstrcmpiW(&String1, lf.lfFaceName) )
{
EnumFontsW(hdc, lf.lfFaceName, (FONTENUMPROCW)Proc, (LPARAM)&lf);
DeleteObject(ho);
ho = CreateFontIndirectW(&lf);
}
SendMessageW(dword_100C028, 0x30u, (WPARAM)ho, 0);
ReleaseDC(0, hdc);
word_100C9E0 = 0;
hMem = (HLOCAL)SendMessageW(dword_100C028, 0xBDu, 0, 0);
SendMessageW(dword_100C028, 0xC5u, 0, 0);
sub_1002456(lpString2);
ShowWindow(hWnd, nCmdShow);
SetCursor(dword_100C094);
v9 = sub_10025CB(v29);
dword_100C05C = -1;
v8 = v9;
if ( !sub_1002689(L"/A", (WCHAR **)v9) )
{
dword_100C05C = 0;
LABEL_36:
v8 = sub_10025CB(v8 + 4);
goto LABEL_20;
}
if ( !sub_1002689(L"/W", (WCHAR **)v8) )
dword_100C05C = 1;
if ( dword_100C05C != -1 )
goto LABEL_36;
LABEL_20:
v10 = sub_10025EF((WCHAR **)v8);
if ( v10 )
{
if ( v10 != 2 )
goto LABEL_23;
}
else
{
if ( sub_1002631((WCHAR **)v8, nCmdShow) )
{
PostMessageW(hWnd, 0x10u, 0, 0);
return 1;
}
if ( !*(_WORD *)v8 )
{
LABEL_23:
sub_10026D5(&Dest, 0x50u);
sub_10026D5(&word_100C7E0, 0x50u);
memset(&stru_100C1A0, 0, 0x58u);
stru_100C1A0.hInstance = v28;
stru_100C1A0.lStructSize = 88;
memset(&stru_100C0C0, 0, sizeof(stru_100C0C0));
stru_100C1A0.hwndOwner = hWnd;
stru_100C1A0.nMaxFile = 260;
stru_100C0C0.lStructSize = 40;
stru_100C0C0.hwndOwner = stru_100C1A0.hwndOwner;
SendMessageW(dword_100C028, 0xB0u, (WPARAM)&wParam, (LPARAM)&v29);
SendMessageW(dword_100C028, 0xB1u, (WPARAM)wParam, v29);
SendMessageW(dword_100C028, 0xB7u, 0, 0);
if ( ((unsigned int)GetKeyboardLayout(0) & 0x3FF) == 17 )
SendMessageW(dword_100C028, 0xD8u, 1u, 1);
sub_1002733(v11);
return 1;
}
sub_1002C0D((LPWSTR)&FileName, (LPCWSTR)v8, 0x104u);
hFile = CreateFileW(&FileName, 0x80000000u, 3u, 0, 3u, 0x80u, 0);
if ( hFile != (HANDLE)-1 )
{
LABEL_28:
sub_1002820(ebp0, (int)&FileName, dword_100C05C);
goto LABEL_23;
}
if ( GetLastError() != 2 )
{
sub_1007BF6(&FileName);
sub_1002456(lpString2);
sub_1002558((int)&FileName, 0x104u, (int)lpString2);
goto LABEL_30;
}
v15 = sub_1007051(hWnd, szApp, dword_100C2B4, &FileName, 0x33u);
if ( v15 != 2 )
{
if ( v15 == 6 )
hFile = CreateFileW(&FileName, 0xC0000000u, 3u, 0, 4u, 0x80u, 0);
LABEL_30:
if ( hFile == (HANDLE)-1 )
goto LABEL_23;
goto LABEL_28;
}
}
return 0;
}
// 100236C: using guessed type wchar_t aW[3];
// 1002374: using guessed type wchar_t aA[3];
// 100C010: using guessed type int dword_100C010;
// 100C05C: using guessed type int dword_100C05C;
// 100C078: using guessed type int dword_100C078;
// 100C07C: using guessed type int dword_100C07C;
// 100C084: using guessed type int dword_100C084;

//----- (010023D0) --------------------------------------------------------
#error "10023DB: positive sp value has been found (funcsize=3)"

//----- (01002409) --------------------------------------------------------
BOOL __stdcall sub_1002409(int nWidth, int a2)
{
int v2; // eax@1
LPARAM lParam; // [sp+0h] [bp-8h]@3
int v5; // [sp+4h] [bp-4h]@3

v2 = *(_DWORD *)&dword_100C02C;
if ( *(_DWORD *)&dword_100C02C )
{
v5 = -1;
lParam = 3 * nWidth / 4;
SendMessageW(dword_100C024, 1028u, 2u, (LPARAM)&lParam);
SendMessageW(dword_100C024, 5u, 0, 0);
v2 = *(_DWORD *)&dword_100C02C;
}
return MoveWindow(dword_100C028, 0, 0, nWidth, a2 - (v2 != 0 ? dword_100C084 : 0), 1);
}
// 100C084: using guessed type int dword_100C084;

//----- (01002456) --------------------------------------------------------
BOOL __stdcall sub_1002456(LPCWSTR lpString1)
{
WCHAR *v1; // eax@5
char v2; // zf@5
HANDLE v4; // edi@7
va_list Arguments; // [sp+4h] [bp-7CCh]@5
struct _WIN32_FIND_DATAW FindFileData; // [sp+8h] [bp-7C8h]@7
WCHAR String; // [sp+258h] [bp-578h]@5
WCHAR Buf; // [sp+4C4h] [bp-30Ch]@2
wchar_t Dest[128]; // [sp+6CCh] [bp-104h]@1
unsigned int v10; // [sp+7CCh] [bp-4h]@1
int v11; // [sp+7D0h] [bp+0h]@1

v10 = (unsigned int)&v11 ^ dword_100C010;
Dest[0] = 0;
memset(&Dest[1], 0, 0xFEu);
if ( lstrcmpW(lpString1, lpString2) )
{
v4 = FindFirstFileW(lpString1, &FindFileData);
if ( v4 == (HANDLE)-1 )
{
GetFileTitleW(lpString1, &Buf, 0x104u);
}
else
{
GetFileTitleW(FindFileData.cFileName, &Buf, 0x104u);
FindClose(v4);
}
}
else
{
sub_1002558((int)&Buf, 0x104u, (int)lpString2);
}
sub_10015C3(Dest, 0x80u, Format, 1, 1);
if ( dword_100C024 )
SendMessageW(dword_100C024, 0x40Bu, 1u, (LPARAM)Dest);
Arguments = (va_list)&Buf;
v2 = FormatMessageW(0x2400u, lpSource, 0, 0, &String, 0x136u, &Arguments) == 0;
v1 = &String;
if ( v2 )
v1 = &Buf;
return SetWindowTextW(hWnd, v1);
}
// 100C010: using guessed type int dword_100C010;

//----- (01002558) --------------------------------------------------------
signed int __stdcall sub_1002558(int a1, unsigned int a2, int a3)
{
signed int result; // eax@1
int v4; // eax@4
signed int v5; // ebx@4
unsigned int v6; // esi@4
__int16 v7; // cx@6

result = 0;
if ( !a2 || a2 > 0x7FFFFFFF )
result = -2147024809;
if ( result >= 0 )
{
v4 = a1;
v5 = 0;
v6 = a2;
if ( !a2 )
goto LABEL_15;
do
{
if ( !(2147483646 - a2 + v6) )
break;
v7 = *(_WORD *)(a3 - a1 + v4);
if ( !v7 )
break;
*(_WORD *)v4 = v7;
v4 += 2;
--v6;
}
while ( v6 );
if ( !v6 )
{
LABEL_15:
v4 -= 2;
v5 = -2147024774;
}
*(_WORD *)v4 = 0;
result = v5;
}
return result;
}

//----- (010025CB) --------------------------------------------------------
int __stdcall sub_10025CB(int a1)
{
int result; // eax@1

for ( result = a1; *(_WORD *)result == 32 || *(_WORD *)result == 9; result += 2 )
;
return result;
}

//----- (010025EF) --------------------------------------------------------
signed int __stdcall sub_10025EF(WCHAR **a1)
{
int ebp0; // ebp@0
signed int result; // eax@2
const WCHAR *v3; // eax@4
DWORD v4; // eax@6
int v5; // eax@7
const WCHAR *v6; // [sp-Ch] [bp-1Ch]@9
int v7; // [sp+Ch] [bp-4h]@1

v7 = 0;
if ( sub_1002689(L"/.SETUP", a1) )
return 0;
dword_100CCEC = 1;
hMenu = GetSystemMenu(hWnd, 0);
hAccTable = LoadAcceleratorsW(hInstance, L"SlipUpAcc");
SetWindowLongW(hWnd, -16, 16580608);
v3 = (const WCHAR *)sub_10025CB((int)((char *)a1 + 14));
if ( !*v3 )
goto LABEL_20;
sub_1002C0D((LPWSTR)&FileName, v3, 0x104u);
hFile = CreateFileW(&FileName, -2147483648u, 3u, 0, 3u, 128u, 0);
if ( hFile == (HANDLE)-1 )
{
v4 = GetLastError() - 2;
if ( v4 )
{
v5 = v4 - 3;
if ( v5 )
v6 = (const WCHAR *)(v5 == 118 ? dword_100C2E0 : dword_100C2B0);
else
v6 = dword_100C31C;
v7 = sub_1007051(hWnd, szApp, v6, &FileName, 0x31u);
}
else
{
v7 = sub_1007051(hWnd, szApp, dword_100C2B4, &FileName, 0x33u);
if ( v7 == 6 )
hFile = CreateFileW(&FileName, 0xC0000000u, 3u, 0, 4u, 0x80u, 0);
}
if ( hFile == (HANDLE)-1 )
return 0;
}
sub_1002820(ebp0, (int)&FileName, dword_100C05C);
result = 2;
if ( v7 != 2 )
LABEL_20:
result = 6;
return result;
}
// 100261C: using guessed type wchar_t a_setup[8];
// 100C05C: using guessed type int dword_100C05C;
// 100C2E0: using guessed type int dword_100C2E0;
// 100CCEC: using guessed type int dword_100CCEC;

//----- (01002631) --------------------------------------------------------
int __stdcall sub_1002631(WCHAR **a1, int nCmdShow)
{
int v3; // eax@4
const WCHAR *v4; // esi@6
int v5; // eax@7
int v6; // eax@8
int v7; // eax@9
unsigned int v8; // edx@9
WCHAR v9; // cx@13
unsigned int v10; // [sp+8h] [bp-4h]@1

v10 = 1;
if ( sub_1002689(L"/PT", a1) )
{
if ( sub_1002689(L"/P", a1) )
return 0;
v3 = sub_10025CB((int)(a1 + 1));
}
else
{
v3 = sub_10025CB((int)((char *)a1 + 6));
v10 = 0;
}
v4 = (const WCHAR *)v3;
if ( *(_WORD *)v3 )
{
ShowWindow(hWnd, nCmdShow);
v5 = (int)(sub_1002C0D((LPWSTR)&FileName, v4, 0x104u) + 1);
JUMPOUT(v10, 0, *(unsigned int *)sub_10056E3);
if ( *(_WORD *)v5 )
{
v6 = sub_10025CB(v5);
if ( *(_WORD *)v6 == 34 )
{
v7 = v6 + 2;
v8 = 0;
while ( 1 )
{
v9 = *(_WORD *)v7;
if ( !*(_WORD *)v7 )
break;
if ( v9 == 34 || v8 >= 0xFF )
break;
*(&pPrinterName + v8++) = v9;
v7 += 2;
}
*(&pPrinterName + v8) = 0;
JUMPOUT(*(int *)sub_10056E3);
}
}
}
return 0;
}
// 1002674: using guessed type wchar_t aP[3];
// 100267C: using guessed type wchar_t aPt[4];

//----- (01002689) --------------------------------------------------------
signed int __userpurge sub_1002689(unsigned __int16 *a1, WCHAR **a2)
{
unsigned __int16 v2; // ax@1
unsigned __int16 *v3; // ebx@1
__int16 v4; // di@2
WCHAR *v5; // eax@2
signed int result; // eax@3

v3 = a1;
v2 = *a1;
if ( v2 )
{
while ( 1 )
{
v4 = (unsigned int)CharUpperW((LPWSTR)v2);
v5 = (WCHAR *)*(_WORD *)a2;
a2 = (WCHAR **)((char *)a2 + 2);
++v3;
if ( v4 != (unsigned __int16)CharUpperW(v5) )
break;
v2 = *v3;
if ( !*v3 )
goto LABEL_5;
}
result = 1;
}
else
{
LABEL_5:
result = 0;
}
return result;
}

//----- (010026D5) --------------------------------------------------------
signed int __stdcall sub_10026D5(wchar_t *Dest, unsigned int a2)
{
return sub_10015C3(Dest, a2, L"%s%c*.txt%c%s%c*.*%c", *(_DWORD *)Args, 0, 0, dword_100C308, 0, 0);
}
// 100C308: using guessed type int dword_100C308;

//----- (01002733) --------------------------------------------------------
int __thiscall sub_1002733(int this)
{
int result; // eax@1
char v2; // [sp+0h] [bp-1304h]@1
char v3; // [sp+60h] [bp-12A4h]@1
unsigned int v4; // [sp+6Ch] [bp-1298h]@1
unsigned int v5; // [sp+70h] [bp-1294h]@1

sub_10027F0(0x1320u, this);
RtlInitUnicodeString(&v2, L"Security-SPP-GenuineLocalStatus");
result = NtQueryLicenseValue(&v2, &v5, &v4, 4, &v3);
if ( result >= 0 )
{
JUMPOUT(v5, 4u, *(unsigned int *)sub_1005D2A);
JUMPOUT(v4, 0, *(unsigned int *)sub_1005D2A);
}
return result;
}
// 10013E0: using guessed type int __stdcall RtlInitUnicodeString(_DWORD, _DWORD);
// 10013E4: using guessed type int __stdcall NtQueryLicenseValue(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
// 10027B0: using guessed type wchar_t aSecuritySppGen[32];

//----- (010027F0) --------------------------------------------------------
int __usercall sub_10027F0(unsigned int a1, int a2)
{
unsigned int i; // eax@1
int v3; // ecx@1
int v5; // [sp-4h] [bp-4h]@1
void *v6; // [sp+0h] [bp+0h]@1
int v7; // [sp+0h] [bp+0h]@4

v5 = a2;
v3 = (unsigned int)&v6 >= a1 ? (int)((char *)&v6 - a1) : 0;
for ( i = (unsigned int)&v5 & 0xFFFFF000; v3 < i; i -= 4096 )
;
return v7;
}

//----- (01002820) --------------------------------------------------------
int __userpurge sub_1002820(int a1, int a2, int a3)
{
HANDLE v3; // eax@1
unsigned int v4; // ebx@1
unsigned int v5; // edi@1
unsigned int v6; // eax@1
int v7; // esi@3
unsigned int v8; // eax@3
HLOCAL v9; // eax@3
void *v10; // eax@3
unsigned __int16 *v11; // eax@5
unsigned __int16 *v12; // ecx@6
int v13; // edx@7
void *v15; // ebx@10
int v16; // eax@10

sub_1002B64((int)dword_1002B48, 636);
*(_DWORD *)(a1 - 568) = *(_DWORD *)(a1 + 8);
*(_DWORD *)(a1 - 596) = 0;
*(_DWORD *)(a1 - 580) = 0;
*(_DWORD *)(a1 - 564) = 0;
*(_DWORD *)(a1 - 592) = 0;
*(_DWORD *)(a1 - 560) = 0;
JUMPOUT((unsigned int)hFile, 0xFFFFFFFFu, *(unsigned int *)sub_10058A7);
v6 = GetFileInformationByHandle(hFile, (LPBY_HANDLE_FILE_INFORMATION)(a1 - 652));
v5 = *(_DWORD *)(a1 - 616);
*(_DWORD *)(a1 - 584) = v5;
JUMPOUT(v6, 0, *(unsigned int *)loc_10058B2);
JUMPOUT(v5, 0x40000000u, *(unsigned int *)loc_1005C0C);
JUMPOUT(*(_DWORD *)(a1 - 620), 0, *(unsigned int *)loc_1005C0C);
SetCursor(hCursor);
JUMPOUT(v5, 0, *(unsigned int *)loc_10058BD);
v4 = 0;
*(_DWORD *)(a1 - 576) = 0;
v3 = CreateFileMappingW(hFile, 0, 2u, 0, v5, 0);
*(_DWORD *)(a1 - 600) = v3;
if ( v3 )
{
v4 = (unsigned int)MapViewOfFile(v3, 4u, 0, 0, v5);
*(_DWORD *)(a1 - 576) = v4;
CloseHandle(*(HANDLE *)(a1 - 600));
}
CloseHandle(hFile);
hFile = (HANDLE)-1;
JUMPOUT(v4, 0, *(unsigned int *)loc_10058D7);
*(_DWORD *)(a1 - 4) = 0;
*(_DWORD *)(a1 - 572) = v4;
JUMPOUT(*(_DWORD *)(a1 + 12), 0xFFFFFFFFu, *(unsigned int *)loc_1005A43);
v8 = *(_WORD *)v4;
JUMPOUT(v8, 0xBBEFu, *(unsigned int *)loc_100590F);
JUMPOUT(v8, 0xFEFFu, *(unsigned int *)loc_10058EB);
*(_DWORD *)(a1 - 564) = 1;
*(_DWORD *)(a1 - 556) = 1;
v7 = (v5 >> 1) - 1;
*(_DWORD *)(a1 - 552) = v7;
JUMPOUT(*(_DWORD *)(a1 - 564), 0, *(unsigned int *)loc_1005951);
SendMessageW(dword_100C028, 11u, 0, 0);
SendMessageW(dword_100C028, 0xB1u, 0, 0);
SendMessageW(dword_100C028, 0xB7u, 0, 0);
v9 = LocalReAlloc(hMem, 2 * v7 + 2, 2u);
*(_DWORD *)(a1 - 592) = v9;
JUMPOUT((unsigned int)v9, 0, *(unsigned int *)loc_1005976);
v10 = LocalLock(v9);
*(_DWORD *)(a1 - 596) = v10;
JUMPOUT(*(_DWORD *)(a1 - 564), 0, *(unsigned int *)loc_1005AEB);
JUMPOUT(*(_WORD *)v4, 0xFEFFu, *(unsigned int *)loc_1005AC7);
memcpy(v10, (const void *)(v4 + 2), 2 * v7);
dword_100C00C = *(_DWORD *)(a1 - 556);
*(_DWORD *)(a1 - 4) = -2;
if ( v4 != a1 - 588 )
UnmapViewOfFile((LPCVOID)v4);
v11 = *(unsigned __int16 **)(a1 - 596);
if ( v11 )
{
v12 = *(unsigned __int16 **)(a1 - 596);
if ( v5 >> 1 != 1 )
{
v13 = (v5 >> 1) - 1;
do
{
JUMPOUT(*v12, 0, *(unsigned int *)loc_1005B5A);
++v12;
--v13;
}
while ( v13 );
}
v11[v7] = 0;
JUMPOUT(*v11, 0x2Eu, *(unsigned int *)loc_1005B65);
*(_DWORD *)(a1 - 580) = 0;
}
v15 = *(void **)(a1 - 592);
LocalUnlock(*(HLOCAL *)(a1 - 592));
hMem = v15;
sub_1002558((int)&FileName, 0x104u, *(_DWORD *)(a1 - 568));
sub_1002456(*(LPCWSTR *)(a1 - 568));
dword_100C008 = 0;
dword_100C030 = 1;
SendMessageW(dword_100C028, 0xBCu, (WPARAM)hMem, 0);
JUMPOUT(dword_100C030, 2u, *(unsigned int *)loc_1005B9C);
dword_100C030 = 0;
PostMessageW(dword_100C028, 0xC5u, 0, 0);
JUMPOUT(*(_DWORD *)(a1 - 580), 0, *(unsigned int *)loc_1005BE2);
v16 = SendMessageW(dword_100C028, 0x115u, 0xBEu, 0);
SetScrollPos(hWnd, 1, v16, 1);
SendMessageW(dword_100C028, 0xBu, 1u, 0);
InvalidateRect(dword_100C028, 0, 1);
UpdateWindow(dword_100C028);
SetCursor(dword_100C094);
return sub_1001A72(a1);
}
// 1002B48: using guessed type int dword_1002B48[2];
// 10058B2: using guessed type int __stdcall loc_10058B2(int, int);
// 10058BD: using guessed type int __stdcall loc_10058BD(int, int);
// 10058D7: using guessed type int __stdcall loc_10058D7(int, int);
// 10058EB: using guessed type int __stdcall loc_10058EB(int, int);
// 100590F: using guessed type int __stdcall loc_100590F(int, int);
// 1005951: using guessed type int __stdcall loc_1005951(int, int);
// 1005976: using guessed type int __stdcall loc_1005976(int, int);
// 1005A43: using guessed type int __stdcall loc_1005A43(int, int);
// 1005AC7: using guessed type int __stdcall loc_1005AC7(int, int);
// 1005AEB: using guessed type int __stdcall loc_1005AEB(int, int);
// 1005B5A: using guessed type int __stdcall loc_1005B5A(int, int);
// 1005B65: using guessed type int __stdcall loc_1005B65(int, int);
// 1005B9C: using guessed type int __stdcall loc_1005B9C(int, int);
// 1005BE2: using guessed type int __stdcall loc_1005BE2(int, int);
// 1005C0C: using guessed type int __stdcall loc_1005C0C(int, int);
// 100C008: using guessed type int dword_100C008;
// 100C00C: using guessed type int dword_100C00C;
// 100C030: using guessed type int dword_100C030;

//----- (01002B64) --------------------------------------------------------
char *__cdecl sub_1002B64(int a1, int a2)
{
void *v3; // esp@1
char v4; // [sp-8h] [bp-8h]@1

v3 = alloca(a2);
return &v4;
}

//----- (01002C0D) --------------------------------------------------------
LPCWSTR __stdcall sub_1002C0D(LPWSTR lpBuffer, LPCWSTR lpFileName, DWORD nBufferLength)
{
LPCWSTR v3; // ebx@1
LPCWSTR v4; // esi@1
HANDLE v5; // eax@5
const WCHAR v7; // dx@10
unsigned int i; // ecx@10
__int16 v9; // ax@14
struct _WIN32_FIND_DATAW FindFileData; // [sp+Ch] [bp-45Ch]@5
__int16 v11[260]; // [sp+25Ch] [bp-20Ch]@13
unsigned int v12; // [sp+464h] [bp-4h]@1
int v13; // [sp+468h] [bp+0h]@1

v12 = (unsigned int)&v13 ^ dword_100C010;
v4 = lpFileName;
v3 = lpFileName;
if ( *lpFileName == 34 || *lpFileName == 39 )
{
v7 = *lpFileName;
for ( i = 0; ; ++i )
{
++v4;
v9 = *v4;
if ( !*v4 )
break;
if ( v9 == v7 || i >= 0x103 )
break;
v11[i] = v9;
}
v3 = v4;
v11[i] = 0;
v4 = (LPCWSTR)v11;
}
if ( PathIsFileSpecW(v4) )
sub_1002558((int)lpBuffer, nBufferLength, (int)v4);
else
GetFullPathNameW(v4, nBufferLength, lpBuffer, 0);
v5 = FindFirstFileW(lpBuffer, &FindFileData);
if ( v5 != (HANDLE)-1
|| (sub_10080E4((int)lpBuffer, nBufferLength), v5 = FindFirstFileW(lpBuffer, &FindFileData), v5 != (HANDLE)-1) )
FindClose(v5);
return v3;
}
// 100C010: using guessed type int dword_100C010;
// 1002C0D: using guessed type __int16 var_20C[260];

//----- (01002F8B) --------------------------------------------------------
LONG __thiscall sub_1002F8B(void *this)
{
LONG result; // eax@2
int LCData; // [sp+0h] [bp-4h]@1

LCData = (int)this;
stru_100C140.lpfnPageSetupHook = (LPPAGESETUPHOOK)sub_1004240;
stru_100C140.lpPageSetupTemplateName = (LPCWSTR)12;
GetLocaleInfoW(0x400u, 0xDu, (LPWSTR)&LCData, 2);
if ( (_WORD)LCData == 49 )
{
stru_100C140.rtMargin.top = 1000;
stru_100C140.rtMargin.bottom = 1000;
stru_100C140.Flags = 40966;
result = 750;
}
else
{
stru_100C140.rtMargin.top = 2500;
stru_100C140.rtMargin.bottom = 2500;
stru_100C140.Flags = 40970;
result = 2000;
}
stru_100C140.rtMargin.right = result;
stru_100C140.rtMargin.left = result;
return result;
}

//----- (0100304B) --------------------------------------------------------
int __cdecl sub_100304B()
{
return 0;
}

//----- (01003053) --------------------------------------------------------
DWORD __cdecl sub_1003053()
{
DWORD result; // eax@2
DWORD v1; // esi@2
DWORD v2; // esi@2
DWORD v3; // esi@2
DWORD v4; // esi@2
LARGE_INTEGER PerformanceCount; // [sp+8h] [bp-10h]@2
struct _FILETIME SystemTimeAsFileTime; // [sp+10h] [bp-8h]@1

SystemTimeAsFileTime.dwLowDateTime = 0;
SystemTimeAsFileTime.dwHighDateTime = 0;
if ( dword_100C010 != -1153374642 && dword_100C010 & 0xFFFF0000 )
{
result = ~dword_100C010;
dword_100C014 = ~dword_100C010;
}
else
{
GetSystemTimeAsFileTime(&SystemTimeAsFileTime);
v2 = GetCurrentProcessId() ^ SystemTimeAsFileTime.dwLowDateTime ^ SystemTimeAsFileTime.dwHighDateTime;
v3 = GetCurrentThreadId() ^ v2;
v4 = GetTickCount() ^ v3;
QueryPerformanceCounter(&PerformanceCount);
result = PerformanceCount.LowPart ^ PerformanceCount.HighPart;
v1 = PerformanceCount.LowPart ^ PerformanceCount.HighPart ^ v4;
if ( v1 == -1153374642 || !(dword_100C010 & 0xFFFF0000) )
v1 = -1153374641;
dword_100C010 = v1;
dword_100C014 = ~v1;
}
return result;
}
// 100C010: using guessed type int dword_100C010;
// 100C014: using guessed type int dword_100C014;

//----- (010030E2) --------------------------------------------------------
LSTATUS __cdecl sub_10030E2()
{
LSTATUS result; // eax@4
int v1; // [sp+Ch] [bp-B0h]@1
HKEY Type; // [sp+10h] [bp-ACh]@2
HKEY hKey; // [sp+14h] [bp-A8h]@1
char Dst; // [sp+1Ch] [bp-A0h]@1
int v5; // [sp+20h] [bp-9Ch]@2
int v6; // [sp+24h] [bp-98h]@2
int v7; // [sp+28h] [bp-94h]@2
unsigned __int8 v8; // [sp+2Ch] [bp-90h]@2
unsigned __int8 v9; // [sp+2Dh] [bp-8Fh]@2
unsigned __int8 v10; // [sp+2Eh] [bp-8Eh]@2
unsigned __int8 v11; // [sp+2Fh] [bp-8Dh]@2
unsigned __int8 v12; // [sp+30h] [bp-8Ch]@2
unsigned __int8 v13; // [sp+31h] [bp-8Bh]@2
unsigned __int8 v14; // [sp+32h] [bp-8Ah]@2
unsigned __int8 v15; // [sp+33h] [bp-89h]@2
char Src; // [sp+74h] [bp-48h]@1
wchar_t v17; // [sp+90h] [bp-2Ch]@1
char v18; // [sp+92h] [bp-2Ah]@1
unsigned int v19; // [sp+B8h] [bp-4h]@1
int v20; // [sp+BCh] [bp+0h]@1

v19 = (unsigned int)&v20 ^ dword_100C010;
memset(&Dst, 0, 0x58u);
memcpy(&Src, L"Lucida Console", 0x1Cu);
v17 = aLucidaConsole[14];
memset(&v18, 0, 0x24u);
v1 = 100;
if ( RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Notepad", 0, 0x20019u, &hKey) )
hKey = 0;
lf.lfWidth = 0;
lf.lfEscapement = sub_100355B(hKey, L"lfEscapement", v5);
lf.lfOrientation = sub_100355B(hKey, L"lfOrientation", v6);
lf.lfWeight = sub_100355B(hKey, L"lfWeight", v7);
lf.lfItalic = sub_100355B(hKey, L"lfItalic", v8);
lf.lfUnderline = sub_100355B(hKey, L"lfUnderline", v9);
lf.lfStrikeOut = sub_100355B(hKey, L"lfStrikeOut", v10);
lf.lfCharSet = sub_100355B(hKey, L"lfCharSet", v11);
lf.lfOutPrecision = sub_100355B(hKey, L"lfOutPrecision", v12);
lf.lfClipPrecision = sub_100355B(hKey, L"lfClipPrecision", v13);
lf.lfQuality = sub_100355B(hKey, L"lfQuality", v14);
lf.lfPitchAndFamily = sub_100355B(hKey, L"lfPitchAndFamily", v15);
if ( !RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Notepad\\DefaultFonts", 0, 0x20019u, &Type) )
{
sub_10035B0(Type, L"lfFaceName", L"Lucida Console", &Src, 0x20u);
v1 = sub_100355B(Type, L"iPointSize", 100);
RegCloseKey(Type);
}
sub_10035B0(hKey, L"lfFaceName", &Src, lf.lfFaceName, 0x20u);
*(_DWORD *)&Data = sub_100355B(hKey, L"iPointSize", v1);
wParam = sub_100355B(hKey, L"fWrap", 0);
*(_DWORD *)&dword_100C02C = sub_100355B(hKey, L"StatusBar", 0);
dword_100C060 = sub_100355B(hKey, L"fSaveWindowPositions", 0);
sub_10035B0(hKey, L"szHeader", &word_100C740, (void *)&word_100C740, 0x28u);
sub_10035B0(hKey, L"szTrailer", &::Dst, &::Dst, 0x28u);
stru_100C140.rtMargin.top = sub_100355B(hKey, L"iMarginTop", stru_100C140.rtMargin.top);
stru_100C140.rtMargin.bottom = sub_100355B(hKey, L"iMarginBottom", stru_100C140.rtMargin.bottom);
stru_100C140.rtMargin.left = sub_100355B(hKey, L"iMarginLeft", stru_100C140.rtMargin.left);
stru_100C140.rtMargin.right = sub_100355B(hKey, L"iMarginRight", stru_100C140.rtMargin.right);
Y = sub_100355B(hKey, L"iWindowPosY", -2147483648);
X = sub_100355B(hKey, L"iWindowPosX", -2147483648);
nWidth = sub_100355B(hKey, L"iWindowPosDX", -2147483648);
nHeight = sub_100355B(hKey, L"iWindowPosDY", -2147483648);
result = sub_100355B(hKey, L"fMLE_is_broken", 0);
dword_100C040 = result;
if ( hKey )
result = RegCloseKey(hKey);
return result;
}
// 1003538: using guessed type wchar_t aLucidaConsole[15];
// 100C010: using guessed type int dword_100C010;
// 100C040: using guessed type int dword_100C040;
// 100C060: using guessed type int dword_100C060;

//----- (0100355B) --------------------------------------------------------
int __stdcall sub_100355B(HKEY hKey, LPCWSTR lpValueName, int a3)
{
int result; // eax@4
DWORD cbData; // [sp+0h] [bp-Ch]@1
BYTE Data[4]; // [sp+4h] [bp-8h]@1
DWORD Type; // [sp+8h] [bp-4h]@1

Type = 0;
*(_DWORD *)Data = 1;
cbData = 4;
if ( !hKey || RegQueryValueExW(hKey, lpValueName, 0, &Type, Data, &cbData) || Type != 4 )
result = a3;
else
result = *(_DWORD *)Data;
return result;
}

//----- (010035B0) --------------------------------------------------------
__int32 __stdcall sub_10035B0(HKEY Type, LPCWSTR lpValueName, const void *Src, void *Dst, DWORD cbData)
{
size_t v5; // esi@1
__int32 result; // eax@2

v5 = 2 * cbData;
cbData *= 2;
if ( !Type
|| (result = RegQueryValueExW(Type, lpValueName, 0, (LPDWORD)&Type, (LPBYTE)Dst, &cbData)) != 0
|| Type != (HKEY)1 )
result = (__int32)memcpy(Dst, Src, v5);
return result;
}

//----- (0100360C) --------------------------------------------------------
const WCHAR *__cdecl sub_100360C(LPCWSTR lpsz)
{
const WCHAR *result; // eax@1
const WCHAR v2; // cx@1
bool i; // esi@1

result = lpsz;
v2 = *lpsz;
for ( i = 0; *result; v2 = *result )
{
if ( (v2 == 32 || v2 == 9) && !i )
break;
if ( v2 == 34 )
i = i == 0;
result = CharNextW(result);
}
while ( *result == 32 || *result == 9 )
++result;
return result;
}

//----- (01003660) --------------------------------------------------------
int __cdecl sub_1003660(unsigned int a1, unsigned int a2)
{
int result; // eax@1
unsigned int v3; // esi@1

v3 = a1;
result = 0;
while ( v3 < a2 && !result )
{
if ( *(_DWORD *)v3 )
result = (*(int (**)(void))v3)();
v3 += 4;
}
return result;
}

//----- (01003689) --------------------------------------------------------
int __usercall start(int a1)
{
int v1; // eax@23
signed int v2; // ebx@1
LONG v3; // esi@1
LONG v4; // eax@2
signed int v5; // esi@3
void *i; // esi@12
unsigned __int8 v7; // al@13

sub_1003053();
sub_1003B0C((int)dword_10037A0, 88);
v2 = 0;
*(_DWORD *)(a1 - 28) = 0;
*(_DWORD *)(a1 - 4) = 0;
GetStartupInfoA((LPSTARTUPINFOA)(a1 - 104));
*(_DWORD *)(a1 - 4) = -2;
*(_DWORD *)(a1 - 4) = 1;
v3 = *(_DWORD *)(*MK_FP(__FS__, 24) + 4);
while ( 1 )
{
v4 = InterlockedCompareExchange(&Destination, v3, 0);
if ( !v4 )
{
v5 = 1;
goto LABEL_4;
}
if ( v4 == v3 )
break;
Sleep(0x3E8u);
}
v5 = 1;
v2 = 1;
LABEL_4:
if ( dword_100C0A4 == v5 )
{
amsg_exit(31);
}
else
{
if ( dword_100C0A4 )
{
dword_100D7A8 = v5;
}
else
{
dword_100C0A4 = v5;
if ( sub_1003660((unsigned int)dword_1003790, (unsigned int)dword_100379C) )
{
*(_DWORD *)(a1 - 4) = -2;
return sub_10023D0(a1);
}
}
}
if ( dword_100C0A4 == v5 )
{
initterm(dword_1003784, dword_100378C);
dword_100C0A4 = 2;
}
if ( !v2 )
InterlockedExchange(&Destination, 0);
if ( dword_100CD0C )
{
if ( sub_1009E73(a1) )
dword_100CD0C(&dword_100CD0C);
}
for ( i = acmdln; ; i = (char *)i + 1 )
{
*(_DWORD *)(a1 - 32) = i;
v7 = *(_BYTE *)i;
if ( *(_BYTE *)i <= 0x20u ) { if ( !v7 || !*(_DWORD *)(a1 - 28) ) break; } if ( v7 == 34 ) *(_DWORD *)(a1 - 28) = *(_DWORD *)(a1 - 28) == 0; if ( ismbblead(v7) ) { i = (char *)i + 1; *(_DWORD *)(a1 - 32) = i; } } while ( *(_BYTE *)i && *(_BYTE *)i <= 0x20u ) { i = (char *)i + 1; *(_DWORD *)(a1 - 32) = i; } *(_BYTE *)(a1 - 60) & 1; v1 = sub_1001405((HINSTANCE)0x1000000); dword_100C070 = v1; if ( !dword_100C064 ) exit(v1); if ( !dword_100D7A8 ) cexit(); *(_DWORD *)(a1 - 4) = -2; return sub_10023D0(a1); } // 1001310: using guessed type void *acmdln; // 1001318: using guessed type int __cdecl ismbblead(_DWORD); // 1001324: using guessed type int cexit(void); // 10023D0: using guessed type _DWORD __usercall sub_10023D0(_DWORD ebp0);
// 1003040: using guessed type int __cdecl initterm(_DWORD, _DWORD);
// 1003784: using guessed type int dword_1003784();
// 100378C: using guessed type int dword_100378C();
// 1003790: using guessed type int dword_1003790();
// 100379C: using guessed type int dword_100379C();
// 10037A0: using guessed type int dword_10037A0();
// 1009F01: using guessed type int __cdecl amsg_exit(_DWORD);
// 100C064: using guessed type int dword_100C064;
// 100C070: using guessed type int dword_100C070;
// 100C0A4: using guessed type int dword_100C0A4;
// 100CD0C: using guessed type int (__thiscall *dword_100CD0C)(_DWORD);
// 100D7A8: using guessed type int dword_100D7A8;

//----- (010037EF) --------------------------------------------------------
ATOM __usercall sub_10037EF(HINSTANCE a1)
{
WNDCLASSEXW v2; // [sp+0h] [bp-30h]@1

memset(&v2.style, 0, 0x2Cu);
v2.cbSize = 48;
v2.hCursor = LoadCursorW(0, (LPCWSTR)0x7F01);
v2.hIcon = LoadIconW(a1, (LPCWSTR)2);
v2.hIconSm = LoadImageW(a1, (LPCWSTR)2, 1u, 16, 16, 0);
v2.lpszMenuName = (LPCWSTR)1;
v2.hInstance = a1;
v2.lpszClassName = L"Notepad";
v2.lpfnWndProc = (WNDPROC)sub_10014DE;
v2.hbrBackground = (HBRUSH)6;
return RegisterClassExW(&v2);
}

//----- (01003881) --------------------------------------------------------
HLOCAL __stdcall sub_1003881(HINSTANCE hInstance)
{
HLOCAL result; // eax@1
WCHAR *v2; // esi@2
int v3; // ebx@3
UINT **v4; // edi@4
int v5; // eax@5

result = (HLOCAL)sub_100392D(hInstance);
if ( result )
{
result = LocalAlloc(0x40u, 2 * (_DWORD)result);
v2 = (WCHAR *)result;
if ( result )
{
v3 = LocalSize(result) >> 1;
if ( v3 )
{
v4 = (UINT **)off_100C920;
while ( 1 )
{
v5 = LoadStringW(hInstance, **v4, v2, v3) + 1;
**v4 = (UINT)v2;
v2 += v5;
if ( v5 > v3 )
break;
++v4;
v3 -= v5;
if ( (signed int)v4 >= (signed int)&unk_100C9DC )
{
sub_1002558((int)&word_100C740, 0x28u, dword_100C2F8);
sub_1002558((int)&Dst, 0x28u, dword_100C2FC);
word_100C000 = *(_WORD *)dword_100C2F0;
return (HLOCAL)1;
}
}
result = 0;
}
else
{
result = 0;
}
}
}
return result;
}
// 100C000: using guessed type __int16 word_100C000;
// 100C2F0: using guessed type int dword_100C2F0;
// 100C2F8: using guessed type int dword_100C2F8;
// 100C2FC: using guessed type int dword_100C2FC;
// 100C920: using guessed type int off_100C920[2];

//----- (0100392D) --------------------------------------------------------
int __stdcall sub_100392D(HINSTANCE hInstance)
{
int v1; // esi@1
int v2; // ebx@3
signed int v3; // edi@3
int v4; // eax@4
SIZE_T i; // [sp-4h] [bp-14h]@1
WCHAR *v7; // [sp+Ch] [bp-4h]@2

v1 = 280;
for ( i = 560; ; i = 2 * v1 )
{
v7 = (WCHAR *)LocalAlloc(0x40u, i);
if ( !v7 )
break;
v3 = 0;
v2 = 0;
do
{
v4 = LoadStringW(hInstance, *(_DWORD *)off_100C920[v3], v7, v1);
if ( v4 >= v1 - 1 )
break;
++v3;
v2 += v4 + 1;
}
while ( v3 < 47 ); LocalFree(v7); if ( v3 >= 47 )
return v2;
v1 *= 2;
}
return 0;
}
// 100C920: using guessed type int off_100C920[2];

//----- (01003A48) --------------------------------------------------------
unsigned int __cdecl sub_1003A48()
{
return controlfp(0x10000u, 0x30000u);
}

//----- (01003A60) --------------------------------------------------------
signed int __cdecl sub_1003A60(signed int a1)
{
int v1; // eax@1
int ebp0; // ebp@0
int v3; // eax@2
__int16 v4; // ax@3
signed int result; // eax@4

v1 = (int)GetModuleHandleA(0);
if ( !v1 || (v3 = sub_1003A98(ebp0, v1), !v3) )
goto LABEL_10;
v4 = *(_WORD *)(v3 + 92);
if ( v4 == 2 )
return 2;
if ( v4 == 3 )
result = 1;
else
LABEL_10:
result = a1;
return result;
}

//----- (01003A98) --------------------------------------------------------
int __userpurge sub_1003A98(int a1, int a2)
{
int v2; // ecx@1
unsigned int v3; // edx@4

sub_1003B0C((int)dword_1003AF0, 12);
v2 = *(_DWORD *)(a1 + 8);
if ( v2 )
{
if ( v2 != -1 )
{
*(_DWORD *)(a1 - 4) = 0;
if ( *(_WORD *)v2 == 23117 )
{
v3 = *(_DWORD *)(v2 + 60);
if ( (signed int)v3 >= 0 )
{
if ( v3 < 0x10000000 ) { *(_DWORD *)(a1 - 28) = v3 + v2; if ( *(_DWORD *)(v3 + v2) != 17744 ) *(_DWORD *)(a1 - 28) = 0; } } } *(_DWORD *)(a1 - 4) = -2; } } return sub_10023D0(a1); } // 10023D0: using guessed type _DWORD __usercall sub_10023D0(_DWORD ebp0);
// 1003AF0: using guessed type int dword_1003AF0[2];

//----- (01003B0C) --------------------------------------------------------
char *__cdecl sub_1003B0C(int a1, int a2)
{
void *v3; // esp@1
char v4; // [sp-8h] [bp-8h]@1

v3 = alloca(a2);
return &v4;
}

//----- (01003BCD) --------------------------------------------------------
int __stdcall sub_1003BCD(int a1, int a2, int a3, int a4)
{
int v4; // edi@1
int v5; // esi@1

v5 = a2;
v4 = (*(int (__stdcall **)(int, int))(*(_DWORD *)a2 + 68))(a2, a3);
if ( v4 >= 0 )
{
v4 = (*(int (__stdcall **)(int, _DWORD))(*(_DWORD *)v5 + 88))(v5, L"txt");
if ( v4 >= 0 )
{
v4 = sub_1003D1B(v5);
if ( v4 >= 0 )
{
v4 = (*(int (__stdcall **)(int, int *))(*(_DWORD *)v5 + 40))(v5, &a3);
if ( v4 >= 0 )
{
v4 = (*(int (__stdcall **)(int, int))(*(_DWORD *)v5 + 36))(v5, a3 | 0x40);
if ( v4 >= 0 )
{
v4 = (*(int (__stdcall **)(int, int))(*(_DWORD *)v5 + 12))(v5, a1);
if ( v4 >= 0 )
{
v4 = (*(int (__stdcall **)(int, int *))(*(_DWORD *)v5 + 80))(v5, &a2);
if ( v4 >= 0 )
{
v4 = (*(int (__stdcall **)(int, signed int, int))(*(_DWORD *)a2 + 20))(a2, -2147123200, a4);
(*(void (__stdcall **)(int))(*(_DWORD *)a2 + 8))(a2);
}
}
}
}
}
}
}
return v4;
}
// 1003C6C: using guessed type wchar_t aTxt[4];

//----- (01003C46) --------------------------------------------------------
int __stdcall sub_1003C46(int a1)
{
int result; // eax@3

if ( a1 == -2147024882 )
result = MessageBoxW(hWnd, lpText, szApp, 0x1010u);
return result;
}

//----- (01003C61) --------------------------------------------------------
signed int __stdcall sub_1003C61(int a1, int a2)
{
return -2147467263;
}

//----- (01003C89) --------------------------------------------------------
int __userpurge sub_1003C89(int a1, int a2)
{
int v2; // edi@1

v2 = (*(int (__stdcall **)(int, signed int, int))(*(_DWORD *)a2 + 104))(a2, 2, dword_100C368);
if ( v2 >= 0 )
{
v2 = (*(int (__stdcall **)(int, signed int, int))(*(_DWORD *)a2 + 24))(a2, 1, a1);
if ( v2 >= 0 )
{
v2 = (*(int (__stdcall **)(int, signed int, _DWORD, LPARAM))(*(_DWORD *)a2 + 76))(a2, 1, 0, dword_100C334);
if ( v2 >= 0 )
{
v2 = (*(int (__stdcall **)(int, signed int, signed int, LPARAM))(*(_DWORD *)a2 + 76))(a2, 1, 1, dword_100C338);
if ( v2 >= 0 )
{
v2 = (*(int (__stdcall **)(_DWORD, _DWORD, signed int, LPARAM))(*(_DWORD *)a2 + 76))(a2, 1, 2, dword_100C33C);
if ( v2 >= 0 )
v2 = (*(int (__stdcall **)(_DWORD, _DWORD, signed int, LPARAM))(*(_DWORD *)a2 + 76))(
a2,
1,
3,
dword_100C340);
}
}
}
(*(void (__cdecl **)(int))(*(_DWORD *)a2 + 108))(a2);
}
return v2;
}
// 1003C89: could not find valid save-restore pair for ebx
// 100C368: using guessed type int dword_100C368;

//----- (01003D1B) --------------------------------------------------------
int __stdcall sub_1003D1B(int a1)
{
int v2; // ecx@1
int v3; // [sp+0h] [bp-10h]@1
int v4; // [sp+4h] [bp-Ch]@1
int v5; // [sp+8h] [bp-8h]@1
int v6; // [sp+Ch] [bp-4h]@1

v3 = *(_DWORD *)Args;
v5 = dword_100C308;
v2 = *(_DWORD *)a1;
v4 = (int)L"*.txt";
v6 = (int)L"*.*";
return (*(int (__stdcall **)(int, signed int, int *))(v2 + 16))(a1, 2, &v3);
}
// 1003D54: using guessed type wchar_t a_[4];
// 100C308: using guessed type int dword_100C308;

//----- (01003D6D) --------------------------------------------------------
int __stdcall sub_1003D6D(int a1, LPCWSTR pszPath, int a3, int a4)
{
int v4; // esi@1
LPVOID v6; // eax@12
int v7; // [sp+Ch] [bp-8h]@2
LPVOID ppv; // [sp+10h] [bp-4h]@1

ppv = 0;
v4 = CoCreateInstance(&rclsid, 0, 1u, &riid, &ppv);
if ( v4 >= 0 )
{
*(_DWORD *)a3 = 0;
v7 = 0;
dword_100C038 = 1;
(*(void (__stdcall **)(LPVOID, _DWORD, _DWORD))(*(_DWORD *)ppv + 116))(ppv, 0, 0);
v4 = (**(int (__stdcall ***)(LPVOID, _DWORD, int *))ppv)(ppv, dword_1003C74, &v7);
if ( v4 >= 0 )
{
v4 = sub_1003C89(1, v7);
if ( v4 >= 0 )
{
v4 = (*(int (__stdcall **)(int, signed int, int))(*(_DWORD *)v7 + 100))(
v7,
1,
dword_100C00C != -1 ? dword_100C00C : 0);
if ( v4 >= 0 )
{
sub_1003E75((int)ppv, pszPath);
v4 = sub_1003BCD(a1, (int)ppv, dword_100C310, a3);
if ( v4 >= 0 )
{
v4 = (*(int (__stdcall **)(int, signed int, int *))(*(_DWORD *)v7 + 96))(v7, 1, &a3);
if ( v4 >= 0 )
dword_100E040 = a3;
}
}
}
(*(void (__stdcall **)(int))(*(_DWORD *)v7 + 8))(v7);
if ( v4 >= 0 )
{
if ( a4 )
{
v6 = ppv;
*(_DWORD *)a4 = ppv;
(*(void (__stdcall **)(LPVOID))(*(_DWORD *)v6 + 4))(v6);
}
}
}
(*(void (__stdcall **)(LPVOID))(*(_DWORD *)ppv + 8))(ppv);
dword_100C038 = 0;
}
return v4;
}
// 1003C74: using guessed type int dword_1003C74[5];
// 100C00C: using guessed type int dword_100C00C;
// 100C038: using guessed type int dword_100C038;
// 100C310: using guessed type int dword_100C310;
// 100E040: using guessed type int dword_100E040;

//----- (01003E75) --------------------------------------------------------
int __stdcall sub_1003E75(int a1, LPCWSTR pszPath)
{
int v2; // esi@2

if ( PathIsFileSpecW(pszPath) )
{
v2 = (*(int (__stdcall **)(int, LPCWSTR))(*(_DWORD *)a1 + 60))(a1, pszPath);
}
else
{
v2 = SHCreateItemFromParsingName(pszPath, 0, dword_1004AF0, &pszPath);
if ( v2 >= 0 )
{
v2 = (*(int (__stdcall **)(int, LPCWSTR))(*(_DWORD *)a1 + 108))(a1, pszPath);
(*(void (__stdcall **)(LPCWSTR))(*(_DWORD *)pszPath + 8))(pszPath);
}
}
return v2;
}
// 100136C: using guessed type int __stdcall SHCreateItemFromParsingName(_DWORD, _DWORD, _DWORD, _DWORD);
// 1004AF0: using guessed type int dword_1004AF0[4];

//----- (01003EA6) --------------------------------------------------------
LONG __stdcall sub_1003EA6(int a1)
{
LONG v1; // edi@1

v1 = InterlockedDecrement((volatile LONG *)(a1 + 8));
if ( !v1 )
LocalFree((HLOCAL)a1);
return v1;
}

//----- (01003F21) --------------------------------------------------------
int __userpurge sub_1003F21(int a1, int a2, int a3)
{
int v3; // esi@1
int v5; // [sp+4h] [bp-10h]@6
int v6; // [sp+8h] [bp-Ch]@5
int v7; // [sp+Ch] [bp-8h]@2
LPVOID ppv; // [sp+10h] [bp-4h]@1

ppv = 0;
v3 = CoCreateInstance(&stru_100401C, 0, 1u, &stru_100400C, &ppv);
if ( v3 >= 0 )
{
v7 = 0;
v3 = (**(int (__stdcall ***)(LPVOID, _DWORD, int *))ppv)(ppv, dword_1003C74, &v7);
if ( v3 >= 0 )
{
v3 = sub_1003C89(a1, v7);
if ( v3 >= 0 )
{
v3 = (*(int (__stdcall **)(int, signed int, int))(*(_DWORD *)v7 + 100))(
v7,
1,
dword_100C00C != -1 ? dword_100C00C : 0);
if ( v3 >= 0 )
{
v3 = sub_100405A((int)sub_1004038, (int)&v6);
if ( v3 >= 0 )
{
v3 = (*(int (__stdcall **)(LPVOID, int, int *))(*(_DWORD *)ppv + 28))(ppv, v6, &v5);
if ( v3 >= 0 )
{
v3 = sub_1003BCD(a2, (int)ppv, dword_100C30C, a3);
(*(void (__stdcall **)(LPVOID, int))(*(_DWORD *)ppv + 32))(ppv, v5);
}
(*(void (__stdcall **)(int))(*(_DWORD *)v6 + 8))(v6);
}
}
}
(*(void (__stdcall **)(int))(*(_DWORD *)v7 + 8))(v7);
}
(*(void (__stdcall **)(LPVOID))(*(_DWORD *)ppv + 8))(ppv);
}
return v3;
}
// 1003C74: using guessed type int dword_1003C74[5];
// 100C00C: using guessed type int dword_100C00C;
// 100C30C: using guessed type int dword_100C30C;

//----- (01004038) --------------------------------------------------------
double __userpurge sub_1004038(int a1, int a2, int a3, double result, int a5, int a6, int a7)
{
*(_DWORD *)a1 = (signed int)result;
*(_DWORD *)(a2 + 117) = a3;
return result;
}

//----- (0100405A) --------------------------------------------------------
signed int __stdcall sub_100405A(int a1, int a2)
{
return sub_1004073(a2, a1);
}

//----- (01004073) --------------------------------------------------------
signed int __stdcall sub_1004073(int a1, int a2)
{
int v2; // eax@1
signed int v3; // edi@1
int v4; // esi@1

v3 = -2147024882;
v2 = (int)LocalAlloc(0x40u, 0xCu);
v4 = v2;
if ( v2 )
{
*(_DWORD *)v2 = &off_100C288;
*(_DWORD *)(v2 + 4) = &off_100C26C;
*(_DWORD *)(v2 + 8) = 1;
v3 = sub_10040C4(v2, a2, a1);
sub_1003EA6(v4);
}
return v3;
}
// 100C26C: using guessed type int (__stdcall *off_100C26C)(int, int, int);
// 100C288: using guessed type int (__stdcall *off_100C288)(int, int, int);

//----- (010040C4) --------------------------------------------------------
signed int __stdcall sub_10040C4(int a1, int a2, int a3)
{
char v3; // zf@1
signed int v4; // ecx@1
double (__userpurge *v5)(int, int, int, double, int, int, int); // edi@1
int v6; // esi@1
int v7; // eax@6
char v9; // zf@9
signed int v10; // ecx@9
int v11; // edi@9
int v12; // esi@9
char v13; // zf@14
signed int v14; // ecx@14
int v15; // edi@14
int v16; // esi@14

v6 = a2;
v4 = 4;
v5 = sub_1004038;
v3 = 1;
do
{
if ( !v4 )
break;
v3 = *(_DWORD *)v6 == *(_DWORD *)v5;
v6 += 4;
v5 = (double (__userpurge *)(int, int, int, double, int, int, int))((char *)v5 + 4);
--v4;
}
while ( v3 );
if ( v3 )
goto LABEL_23;
v12 = a2;
v10 = 4;
v11 = (int)dword_1004A04;
v9 = 1;
do
{
if ( !v10 )
break;
v9 = *(_DWORD *)v12 == *(_DWORD *)v11;
v12 += 4;
v11 += 4;
--v10;
}
while ( v9 );
if ( v9 )
{
LABEL_23:
v7 = a1;
*(_DWORD *)a3 = a1;
LABEL_7:
sub_10040FB(v7);
return 0;
}
v16 = a2;
v14 = 4;
v15 = (int)dword_10049F4;
v13 = 1;
do
{
if ( !v14 )
break;
v13 = *(_DWORD *)v16 == *(_DWORD *)v15;
v16 += 4;
v15 += 4;
--v14;
}
while ( v13 );
if ( v13 )
{
v7 = a1;
*(_DWORD *)a3 = a1 + 4;
goto LABEL_7;
}
*(_DWORD *)a3 = 0;
return -2147467262;
}
// 10049F4: using guessed type int dword_10049F4[4];
// 1004A04: using guessed type int dword_1004A04[2];

//----- (010040FB) --------------------------------------------------------
LONG __stdcall sub_10040FB(int a1)
{
return InterlockedIncrement((volatile LONG *)(a1 + 8));
}

//----- (01004116) --------------------------------------------------------
int __stdcall sub_1004116(int a1)
{
int result; // eax@1
WCHAR *v2; // ecx@12
DWORD v3; // eax@12
const WCHAR *v4; // eax@14
WCHAR Buffer; // [sp+0h] [bp-324h]@12
unsigned int v6; // [sp+320h] [bp-4h]@1
int v7; // [sp+324h] [bp+0h]@1

v6 = (unsigned int)&v7 ^ dword_100C010;
result = sub_100414E(a1);
if ( result )
{
if ( result != -2 )
{
if ( result != -3 )
{
if ( result == -4 )
result = 112;
if ( result == -5 )
result = 14;
if ( result == -1 )
result = GetLastError();
if ( result )
{
v3 = FormatMessageW(0x1200u, 0, result, 0, &Buffer, 0x190u, 0);
v2 = (WCHAR *)dword_100C2DC;
if ( v3 )
v2 = &Buffer;
v4 = lpString2;
if ( !dword_100C008 )
v4 = &FileName;
result = sub_1007051(hWnd, szApp, v2, v4, 0x30u);
}
}
}
}
return result;
}
// 100C008: using guessed type int dword_100C008;
// 100C010: using guessed type int dword_100C010;

//----- (0100414E) --------------------------------------------------------
signed int __stdcall sub_100414E(int a1)
{
signed int v1; // eax@2
signed int result; // eax@4

SetCursor(hCursor);
if ( a1 )
{
if ( a1 == 2 )
v1 = sub_1008987();
else
v1 = sub_10088B6();
}
else
{
v1 = sub_1004194();
}
if ( v1 == -1 )
{
SetCursor(dword_100C094);
result = 0;
}
else
{
result = sub_100900D((HDC)v1);
}
return result;
}

//----- (01004194) --------------------------------------------------------
int __cdecl sub_1004194()
{
int Dst; // [sp+Ch] [bp-58h]@3
HWND v2; // [sp+10h] [bp-54h]@3
HGLOBAL v3; // [sp+14h] [bp-50h]@4
HGLOBAL v4; // [sp+18h] [bp-4Ch]@6
int v5; // [sp+1Ch] [bp-48h]@11
int v6; // [sp+20h] [bp-44h]@3
int v7; // [sp+58h] [bp-Ch]@3
int v8; // [sp+5Ch] [bp-8h]@8
int v9; // [sp+60h] [bp-4h]@7

if ( !stru_100C140.hDevNames )
{
stru_100C140.Flags |= 0x480u;
PageSetupDlgW(&stru_100C140);
stru_100C140.Flags &= 0xFFFFFB7Fu;
}
memset(&Dst, 0, 0x54u);
v7 = -1;
v2 = hWnd;
Dst = 84;
v6 = 8651020;
if ( stru_100C140.hDevMode )
v3 = stru_100C140.hDevMode;
if ( stru_100C140.hDevNames )
v4 = stru_100C140.hDevNames;
v9 = -1;
if ( !PrintDlgExW((LPPRINTDLGEXW)&Dst) )
{
if ( v8 == 1 )
{
v9 = v5;
}
else
{
if ( v8 != 2 )
return v9;
}
if ( !stru_100C140.hDevMode )
{
stru_100C140.Flags |= 0x480u;
PageSetupDlgW(&stru_100C140);
stru_100C140.Flags &= 0xFFFFFB7Fu;
}
stru_100C140.hDevMode = v3;
stru_100C140.hDevNames = v4;
}
return v9;
}

//----- (01004240) --------------------------------------------------------
signed int __stdcall sub_1004240(HWND hDlg, int a2, int a3, int a4)
{
int v5; // edi@5
WCHAR *v6; // esi@5
const WCHAR *v7; // ebx@8
int v8; // edi@8

if ( a2 == 2 )
{
v5 = 30;
v6 = &word_100C6A0;
do
{
GetDlgItemTextW(hDlg, v5, v6, 40);
v6 += 40;
++v5;
}
while ( (signed int)v6 <= (signed int)&unk_100C6F0 );
return 0;
}
if ( a2 != 272 )
return 0;
v8 = 30;
v7 = &word_100C740;
do
{
SendDlgItemMessageW(hDlg, v8, 0xC5u, 0x27u, 0);
SetDlgItemTextW(hDlg, v8, v7);
v7 += 40;
++v8;
}
while ( (signed int)v7 <= (signed int)&Dst );
SendDlgItemMessageW(hDlg, 30, 0xB1u, 0, 2555904);
return 1;
}

//----- (0100432B) --------------------------------------------------------
DWORD __cdecl sub_100432B()
{
DWORD result; // eax@1
unsigned int v1; // edx@3
wchar_t *v2; // ecx@3
wchar_t Dest; // [sp+0h] [bp-194h]@8
unsigned int v4; // [sp+190h] [bp-4h]@1
int v5; // [sp+194h] [bp+0h]@1

v4 = (unsigned int)&v5 ^ dword_100C010;
result = CommDlgExtendedError();
if ( result )
{
v2 = 0;
v1 = 0;
do
{
if ( result == *(int *)((char *)&dword_100CD10 + v1) )
v2 = (wchar_t *)**(int **)((char *)&off_100CD14 + v1);
v1 += 8;
}
while ( v1 < 0x40 );
if ( !v2 )
{
sub_10015C3(&Dest, 0xC8u, dword_100C328, result);
v2 = &Dest;
}
if ( *v2 )
MessageBoxW(hWnd, v2, szApp, 0x1010u);
result = 1;
}
return result;
}
// 100C010: using guessed type int dword_100C010;
// 100CD10: using guessed type int dword_100CD10;
// 100CD14: using guessed type int *off_100CD14;

//----- (010043F5) --------------------------------------------------------
int __stdcall sub_10043F5(int a1, int a2)
{
int v2; // ecx@2
int result; // eax@3

if ( !a2 || (v2 = a2, !*(_WORD *)a2) )
v2 = (int)L"(null)";
result = a1;
*(_DWORD *)(a1 + 4) = v2;
*(_DWORD *)a1 = 2;
return result;
}
// 1004420: using guessed type wchar_t aNull[7];

//----- (0100449D) --------------------------------------------------------
HRESULT __thiscall sub_100449D(void *this)
{
HRESULT result; // eax@1
OLECHAR *v2; // esi@2
LPVOID ppv; // [sp+0h] [bp-4h]@1

ppv = this;
result = CoCreateInstance(&stru_10043E0, 0, 0x17u, &stru_10043D0, &ppv);
if ( result >= 0 )
{
sub_10045A7((int)L"HELP_ENTRY_ID_NOTEPAD_HELP");
v2 = SysAllocString(L"mshelp://windows/?id=5d18d5fb-e737-4a73-b6cc-dccc63720231");
if ( v2 )
{
(*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)ppv + 12))(ppv, v2);
SysFreeString(v2);
}
result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)ppv + 8))(ppv);
}
return result;
}
// 100456C: using guessed type wchar_t aHelp_entry_id_[27];

//----- (010045A7) --------------------------------------------------------
int __stdcall sub_10045A7(int a1)
{
int v2; // [sp+4h] [bp-8h]@1
int v3; // [sp+8h] [bp-4h]@1

v2 = 0;
v3 = 0;
sub_10043F5((int)&v2, a1);
return WinSqmAddToStream(0, 911, 1, &v2);
}
// 10045E1: using guessed type int __stdcall WinSqmAddToStream(_DWORD, _DWORD, _DWORD, _DWORD);

//----- (01004628) --------------------------------------------------------
int __stdcall sub_1004628(LPCWSTR lpString)
{
int v1; // edi@1
int v2; // eax@4
void *v3; // edi@4
int v4; // esi@4
int v6; // [sp+Ch] [bp-868h]@1
HWND Dst; // [sp+10h] [bp-864h]@1
HINSTANCE v8; // [sp+14h] [bp-860h]@1
int v9; // [sp+1Ch] [bp-858h]@1
int v10; // [sp+20h] [bp-854h]@1
void *v11; // [sp+28h] [bp-84Ch]@5
int v12; // [sp+30h] [bp-844h]@1
int v13; // [sp+34h] [bp-840h]@1
int v14; // [sp+6Ch] [bp-808h]@5
WCHAR String; // [sp+70h] [bp-804h]@1
unsigned int v16; // [sp+870h] [bp-4h]@1
int v17; // [sp+874h] [bp+0h]@1

v16 = (unsigned int)&v17 ^ dword_100C010;
v1 = 0;
memset(&Dst, 0, 0x5Cu);
Dst = hWnd;
v6 = 96;
v8 = hInstance;
v9 = 8;
v10 = 3000;
v12 = 2;
v13 = (int)dword_1004748;
if ( !LoadStringW(hInstance, 0xBB9u, &String, 1024) )
goto LABEL_12;
if ( lpString )
v1 = lstrlenW(lpString);
v4 = lstrlenW(&String) + v1 + 1;
v2 = (int)LocalAlloc(0x40u, 2 * v4);
v3 = (void *)v2;
if ( v2 )
{
sub_10047BA((int)&String, (int)lpString, v2, v4);
v11 = v3;
if ( COMCTL32_345(&v6, &v14, 0, 0) < 0 )
v14 = 6;
LocalFree(v3);
}
else
{
LABEL_12:
v14 = 6;
}
return v14;
}
// 10013C8: using guessed type int __stdcall COMCTL32_345(_DWORD, _DWORD, _DWORD, _DWORD);
// 1004748: using guessed type int dword_1004748[4];
// 100C010: using guessed type int dword_100C010;

//----- (0100478B) --------------------------------------------------------
LSTATUS __stdcall sub_100478B(HKEY hKey, LPCWSTR lpValueName, LPCWSTR lpData)
{
int v4; // eax@1

v4 = lstrlenW(lpData);
return RegSetValueExW(hKey, lpValueName, 0, 1u, (const BYTE *)lpData, 2 * v4 + 2);
}

//----- (010047BA) --------------------------------------------------------
signed int __stdcall sub_10047BA(int a1, int a2, int a3, int a4)
{
int v4; // eax@1
int v5; // ecx@1
int v6; // ebx@1
unsigned int v7; // edi@1
__int16 v8; // dx@4
int v10; // esi@6
int v11; // ecx@7

v5 = a1;
v4 = a3;
v7 = 0;
v6 = a4 - 1;
while ( *(_WORD *)v5 != word_100C000 && v7 < v6 )
{
*(_WORD *)v4 = *(_WORD *)v5;
v8 = *(_WORD *)v5;
v4 += 2;
++v7;
v5 += 2;
if ( !v8 )
return 0;
}
v10 = a2;
if ( a2 )
{
while ( *(_WORD *)v10 && v7 < v6 )
{
*(_WORD *)v4 = *(_WORD *)v10;
v4 += 2;
v10 += 2;
++v7;
}
}
v11 = v5 + 4;
while ( *(_WORD *)v11 && v7 < v6 )
{
*(_WORD *)v4 = *(_WORD *)v11;
v4 += 2;
v11 += 2;
++v7;
}
*(_WORD *)v4 = 0;
return 1;
}
// 100C000: using guessed type __int16 word_100C000;

//----- (0100498E) --------------------------------------------------------
LSTATUS __stdcall sub_100498E(HKEY hKey, LPCWSTR lpValueName, BYTE Data)
{
return RegSetValueExW(hKey, lpValueName, 0, 4u, &Data, 4u);
}

//----- (010056E3) --------------------------------------------------------
void __usercall sub_10056E3(struct _SECURITY_ATTRIBUTES *a1, int a2, int a3)
{
HANDLE v3; // ST18_4@1
DWORD v4; // eax@2
int v5; // eax@3
int v6; // eax@4
const WCHAR *v7; // eax@6
int v8; // [sp+0h] [bp-4h]@13

hFile = CreateFileW((LPCWSTR)a3, 0x80000000u, 3u, a1, 3u, 0x80u, v3);
if ( hFile == (HANDLE)-1 )
{
v4 = GetLastError() - 2;
if ( v4 )
{
v5 = v4 - 3;
if ( v5 && (v6 = v5 - 60) != 0 )
{
if ( v6 == 58 )
v7 = (const WCHAR *)dword_100C2E0;
else
v7 = dword_100C2B0;
}
else
{
v7 = dword_100C31C;
}
}
else
{
v7 = dword_100C2B4;
}
sub_1007051(hWnd, szApp, v7, (LPCWSTR)a3, 0x30u);
}
else
{
sub_1002820(a2, a3, dword_100C05C);
if ( *(struct _SECURITY_ATTRIBUTES **)(a2 - 4) == a1 )
v8 = 2;
else
v8 = 1;
sub_1004116(v8);
}
JUMPOUT(*(unsigned int *)loc_100266D);
}
// 100266D: using guessed type int __stdcall loc_100266D(int, int nCmdShow);
// 100C05C: using guessed type int dword_100C05C;
// 100C2E0: using guessed type int dword_100C2E0;

//----- (010058A7) --------------------------------------------------------
void __stdcall sub_10058A7(int a1, int a2)
{
LPCWSTR v2; // ST14_4@1

sub_1007BF6(v2);
JUMPOUT(*(unsigned int *)loc_1002B3F);
}
// 1002B3F: using guessed type int __stdcall loc_1002B3F(int, int);

//----- (01005D2A) --------------------------------------------------------
void __usercall sub_1005D2A(int a1, HWND a2)
{
signed int v2; // ebx@1
HANDLE v3; // eax@1
SC_HANDLE v4; // eax@4
SC_HANDLE v5; // eax@5
SIZE_T v6; // ST14_4@8
HANDLE v7; // eax@8
LPVOID v8; // eax@8
void *v9; // ST14_4@13
HANDLE v10; // eax@13
SC_HANDLE v11; // eax@16
SC_HANDLE v12; // eax@17
struct _QUERY_SERVICE_CONFIGW *v13; // eax@20
SIZE_T v14; // ST14_4@20
HANDLE v15; // eax@20
void *v16; // ST14_4@25
HANDLE v17; // eax@25
DWORD v18; // eax@32
void *v19; // eax@33
const void *v20; // ebx@33
SIZE_T v21; // ST14_4@33
HANDLE v22; // eax@33
size_t v23; // ST14_4@39
const wchar_t *v24; // ST10_4@39
wchar_t *v25; // eax@39
HANDLE v26; // eax@41
DWORD v27; // eax@45
DWORD v28; // ebx@45
void *v29; // eax@46
SIZE_T v30; // ST14_4@46
HANDLE v31; // eax@46
size_t v32; // ST14_4@52
const wchar_t *v33; // ST10_4@52
wchar_t *v34; // eax@52
void *v35; // ST14_4@54
HANDLE v36; // eax@54
DWORD v37; // eax@58
DWORD v38; // ebx@58
void *v39; // eax@59
SIZE_T v40; // ST14_4@59
HANDLE v41; // eax@59
size_t v42; // ST14_4@65
const wchar_t *v43; // ST10_4@65
wchar_t *v44; // eax@65
void *v45; // ST14_4@67
HANDLE v46; // eax@67
signed int v47; // esi@68
SC_HANDLE v48; // eax@71
SC_HANDLE v49; // eax@72
SIZE_T v50; // ST14_4@75
HANDLE v51; // eax@75
LPVOID v52; // eax@75
void *v53; // ST14_4@80
HANDLE v54; // eax@80
SC_HANDLE v55; // eax@83
SC_HANDLE v56; // eax@84
struct _QUERY_SERVICE_CONFIGW *v57; // eax@87
SIZE_T v58; // ST14_4@87
HANDLE v59; // eax@87
void *v60; // ST14_4@92
HANDLE v61; // eax@92
DWORD v62; // eax@99
void *v63; // eax@100
const void *v64; // ebx@100
SIZE_T v65; // ST14_4@100
HANDLE v66; // eax@100
size_t v67; // ST14_4@106
const wchar_t *v68; // ST10_4@106
wchar_t *v69; // eax@106
HANDLE v70; // eax@108
DWORD v71; // eax@112
DWORD v72; // ebx@112
void *v73; // eax@113
SIZE_T v74; // ST14_4@113
HANDLE v75; // eax@113
size_t v76; // ST14_4@119
const wchar_t *v77; // ST10_4@119
wchar_t *v78; // eax@119
void *v79; // ST14_4@121
HANDLE v80; // eax@121
DWORD v81; // eax@125
DWORD v82; // ebx@125
void *v83; // eax@126
SIZE_T v84; // ST14_4@126
HANDLE v85; // eax@126
size_t v86; // ST14_4@132
const wchar_t *v87; // ST10_4@132
wchar_t *v88; // eax@132
void *v89; // ST14_4@134
HANDLE v90; // eax@134
LONG v91; // eax@139
HWND v92; // eax@141
DWORD v93; // eax@143
HANDLE v94; // eax@147
WCHAR *v95; // [sp-8h] [bp-10h]@139

v3 = GetCurrentProcess();
v2 = 260;
if ( IsWow64Process(v3, (PBOOL)(a1 - 4792)) )
{
if ( *(HWND *)(a1 - 4792) == a2 )
{
*(_DWORD *)(a1 - 4748) = a2;
v48 = OpenSCManagerW((LPCWSTR)a2, (LPCWSTR)a2, 1u);
*(_DWORD *)(a1 - 4760) = v48;
if ( v48 != a2 )
{
v49 = OpenServiceW(v48, L"sppuinotify", 1u);
*(_DWORD *)(a1 - 4752) = v49;
if ( v49 != a2 )
{
if ( !QueryServiceConfigW(
*(SC_HANDLE *)(a1 - 4752),
(LPQUERY_SERVICE_CONFIGW)a2,
(DWORD)a2,
(LPDWORD)(a1 - 4764)) )
{
if ( GetLastError() == 122 )
{
v50 = *(_DWORD *)(a1 - 4764);
v51 = GetProcessHeap();
v52 = HeapAlloc(v51, (DWORD)a2, v50);
*(_DWORD *)(a1 - 4744) = v52;
if ( v52 == a2 )
{
*(_DWORD *)(a1 - 4748) = 1;
}
else
{
if ( QueryServiceConfigW(
*(SC_HANDLE *)(a1 - 4752),
*(LPQUERY_SERVICE_CONFIGW *)(a1 - 4744),
*(_DWORD *)(a1 - 4764),
(LPDWORD)(a1 - 4764)) )
{
if ( *(_DWORD *)(*(_DWORD *)(a1 - 4744) + 4) != 4 )
*(_DWORD *)(a1 - 4748) = 1;
}
v53 = *(void **)(a1 - 4744);
v54 = GetProcessHeap();
HeapFree(v54, (DWORD)a2, v53);
}
}
}
CloseServiceHandle(*(SC_HANDLE *)(a1 - 4752));
}
CloseServiceHandle(*(SC_HANDLE *)(a1 - 4760));
if ( *(HWND *)(a1 - 4748) != a2 )
{
*(_DWORD *)(a1 - 4752) = a2;
v55 = OpenSCManagerW((LPCWSTR)a2, (LPCWSTR)a2, 1u);
*(_DWORD *)(a1 - 4756) = v55;
if ( v55 != a2 )
{
v56 = OpenServiceW(v55, L"sppsvc", 1u);
*(_DWORD *)(a1 - 4744) = v56;
if ( v56 != a2 )
{
if ( !QueryServiceConfigW(v56, (LPQUERY_SERVICE_CONFIGW)a2, (DWORD)a2, (LPDWORD)(a1 - 4748)) )
{
if ( GetLastError() == 122 )
{
v58 = *(_DWORD *)(a1 - 4748);
v59 = GetProcessHeap();
v57 = (struct _QUERY_SERVICE_CONFIGW *)HeapAlloc(v59, (DWORD)a2, v58);
*(_DWORD *)(a1 - 4760) = v57;
if ( v57 == a2 )
{
*(_DWORD *)(a1 - 4752) = 1;
}
else
{
if ( QueryServiceConfigW(
*(SC_HANDLE *)(a1 - 4744),
v57,
*(_DWORD *)(a1 - 4748),
(LPDWORD)(a1 - 4748)) )
{
if ( *(_DWORD *)(*(_DWORD *)(a1 - 4760) + 4) != 4 )
*(_DWORD *)(a1 - 4752) = 1;
}
v60 = *(void **)(a1 - 4760);
v61 = GetProcessHeap();
HeapFree(v61, (DWORD)a2, v60);
}
}
}
CloseServiceHandle(*(SC_HANDLE *)(a1 - 4744));
}
CloseServiceHandle(*(SC_HANDLE *)(a1 - 4756));
if ( *(HWND *)(a1 - 4752) != a2 )
{
if ( SHGetFolderPathW(a2, 37, a2, (DWORD)a2, (LPWSTR)(a1 - 1100)) >= 0 )
{
if ( sub_1009CDF(a1 - 3700, 260, a1 - 1100) >= 0 )
{
if ( sub_1009D19(a1 - 3700, 260, (int)L"\\sppuinotify.dll") >= 0 )
{
if ( GetFileAttributesW((LPCWSTR)(a1 - 3700)) != -1 )
{
*(_DWORD *)(a1 - 4760) = a2;
v62 = GetFileVersionInfoSizeExW((DWORD)a2, (LPCWSTR)(a1 - 3700), (LPDWORD)(a1 - 4752));
*(_DWORD *)(a1 - 4756) = v62;
if ( v62 > (unsigned int)a2 )
{
v65 = v62;
v66 = GetProcessHeap();
v63 = HeapAlloc(v66, (DWORD)a2, v65);
v64 = v63;
if ( v63 == a2 )
goto LABEL_153;
if ( GetFileVersionInfoExW(
(DWORD)a2,
(LPCWSTR)(a1 - 3700),
*(_DWORD *)(a1 - 4752),
*(_DWORD *)(a1 - 4756),
v63) )
{
if ( VerQueryValueW(
v64,
L"\\VarFileInfo\\Translation",
(LPVOID *)(a1 - 4884),
(PUINT)(a1 - 4780)) )
{
if ( *(_DWORD *)(a1 - 4780) >= 4u )
{
if ( sub_10015C3(
(wchar_t *)(a1 - 388),
0x30u,
L"\\StringFileInfo\\%04x%04x\\OriginalFilename",
**(_WORD **)(a1 - 4884),
*(_WORD *)(*(_DWORD *)(a1 - 4884) + 2)) >= 0 )
{
if ( VerQueryValueW(v64, (LPCWSTR)(a1 - 388), (LPVOID *)(a1 - 4848), (PUINT)(a1 - 4800)) )
{
v67 = *(_DWORD *)(a1 - 4800);
v68 = *(const wchar_t **)(a1 - 4848);
v69 = wcsrchr((const wchar_t *)(a1 - 3700), 0x5Cu);
if ( !wcsncmp(v69 + 1, v68, v67) )
*(_DWORD *)(a1 - 4760) = 1;
}
}
}
}
}
v70 = GetProcessHeap();
HeapFree(v70, (DWORD)a2, (LPVOID)v64);
if ( *(HWND *)(a1 - 4760) != a2 )
{
LABEL_153:
if ( sub_1009CDF(a1 - 4220, 260, a1 - 1100) >= 0 )
{
if ( sub_1009D19(a1 - 4220, 260, (int)L"\\slui.exe") >= 0 )
{
if ( GetFileAttributesW((LPCWSTR)(a1 - 4220)) != -1 )
{
*(_DWORD *)(a1 - 4756) = a2;
v71 = GetFileVersionInfoSizeExW((DWORD)a2, (LPCWSTR)(a1 - 4220), (LPDWORD)(a1 - 4760));
v72 = v71;
if ( v71 > (unsigned int)a2 )
{
v74 = v71;
v75 = GetProcessHeap();
v73 = HeapAlloc(v75, (DWORD)a2, v74);
*(_DWORD *)(a1 - 4744) = v73;
if ( v73 == a2 )
goto LABEL_154;
if ( GetFileVersionInfoExW(
(DWORD)a2,
(LPCWSTR)(a1 - 4220),
*(_DWORD *)(a1 - 4760),
v72,
v73) )
{
if ( VerQueryValueW(
*(LPCVOID *)(a1 - 4744),
L"\\VarFileInfo\\Translation",
(LPVOID *)(a1 - 4876),
(PUINT)(a1 - 4808)) )
{
if ( *(_DWORD *)(a1 - 4808) >= 4u )
{
if ( sub_10015C3(
(wchar_t *)(a1 - 580),
0x30u,
L"\\StringFileInfo\\%04x%04x\\OriginalFilename",
**(_WORD **)(a1 - 4876),
*(_WORD *)(*(_DWORD *)(a1 - 4876) + 2)) >= 0 )
{
if ( VerQueryValueW(
*(LPCVOID *)(a1 - 4744),
(LPCWSTR)(a1 - 580),
(LPVOID *)(a1 - 4856),
(PUINT)(a1 - 4816)) )
{
v76 = *(_DWORD *)(a1 - 4816);
v77 = *(const wchar_t **)(a1 - 4856);
v78 = wcsrchr((const wchar_t *)(a1 - 4220), 0x5Cu);
if ( !wcsncmp(v78 + 1, v77, v76) )
*(_DWORD *)(a1 - 4756) = 1;
}
}
}
}
}
v79 = *(void **)(a1 - 4744);
v80 = GetProcessHeap();
HeapFree(v80, (DWORD)a2, v79);
if ( *(HWND *)(a1 - 4756) != a2 )
{
LABEL_154:
if ( sub_1009CDF(a1 - 3180, 260, a1 - 1100) >= 0 )
{
if ( sub_1009D19(a1 - 3180, 260, (int)L"\\sppsvc.exe") >= 0 )
{
if ( GetFileAttributesW((LPCWSTR)(a1 - 3180)) != -1 )
{
*(_DWORD *)(a1 - 4756) = a2;
v81 = GetFileVersionInfoSizeExW(
(DWORD)a2,
(LPCWSTR)(a1 - 3180),
(LPDWORD)(a1 - 4824));
v82 = v81;
if ( v81 > (unsigned int)a2 )
{
v84 = v81;
v85 = GetProcessHeap();
v83 = HeapAlloc(v85, (DWORD)a2, v84);
*(_DWORD *)(a1 - 4744) = v83;
if ( v83 == a2 )
goto LABEL_150;
if ( GetFileVersionInfoExW(
(DWORD)a2,
(LPCWSTR)(a1 - 3180),
*(_DWORD *)(a1 - 4824),
v82,
v83) )
{
if ( VerQueryValueW(
*(LPCVOID *)(a1 - 4744),
L"\\VarFileInfo\\Translation",
(LPVOID *)(a1 - 4832),
(PUINT)(a1 - 4892)) )
{
if ( *(_DWORD *)(a1 - 4892) >= 4u )
{
if ( sub_10015C3(
(wchar_t *)(a1 - 292),
0x30u,
L"\\StringFileInfo\\%04x%04x\\OriginalFilename",
**(_WORD **)(a1 - 4832),
*(_WORD *)(*(_DWORD *)(a1 - 4832) + 2)) >= 0 )
{
if ( VerQueryValueW(
*(LPCVOID *)(a1 - 4744),
(LPCWSTR)(a1 - 292),
(LPVOID *)(a1 - 4772),
(PUINT)(a1 - 4864)) )
{
v86 = *(_DWORD *)(a1 - 4864);
v87 = *(const wchar_t **)(a1 - 4772);
v88 = wcsrchr((const wchar_t *)(a1 - 3180), 0x5Cu);
if ( !wcsncmp(v88 + 1, v87, v86) )
*(_DWORD *)(a1 - 4756) = 1;
}
}
}
}
}
v89 = *(void **)(a1 - 4744);
v90 = GetProcessHeap();
HeapFree(v90, (DWORD)a2, v89);
if ( *(HWND *)(a1 - 4756) != a2 )
LABEL_150:
JUMPOUT(*(unsigned int *)loc_10027A2);
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
v47 = 0;
goto LABEL_136;
}
if ( Wow64DisableWow64FsRedirection((PVOID *)(a1 - 4840)) )
{
*(_DWORD *)(a1 - 4768) = a2;
v4 = OpenSCManagerW((LPCWSTR)a2, (LPCWSTR)a2, 1u);
*(_DWORD *)(a1 - 4748) = v4;
if ( v4 == a2 )
goto LABEL_155;
v5 = OpenServiceW(v4, L"sppuinotify", 1u);
*(_DWORD *)(a1 - 4764) = v5;
if ( v5 != a2 )
{
if ( !QueryServiceConfigW(
*(SC_HANDLE *)(a1 - 4764),
(LPQUERY_SERVICE_CONFIGW)a2,
(DWORD)a2,
(LPDWORD)(a1 - 4776)) )
{
if ( GetLastError() == 122 )
{
v6 = *(_DWORD *)(a1 - 4776);
v7 = GetProcessHeap();
v8 = HeapAlloc(v7, (DWORD)a2, v6);
*(_DWORD *)(a1 - 4744) = v8;
if ( v8 == a2 )
{
*(_DWORD *)(a1 - 4768) = 1;
}
else
{
if ( QueryServiceConfigW(
*(SC_HANDLE *)(a1 - 4764),
*(LPQUERY_SERVICE_CONFIGW *)(a1 - 4744),
*(_DWORD *)(a1 - 4776),
(LPDWORD)(a1 - 4776)) )
{
if ( *(_DWORD *)(*(_DWORD *)(a1 - 4744) + 4) != 4 )
*(_DWORD *)(a1 - 4768) = 1;
}
v9 = *(void **)(a1 - 4744);
v10 = GetProcessHeap();
HeapFree(v10, (DWORD)a2, v9);
}
}
}
CloseServiceHandle(*(SC_HANDLE *)(a1 - 4764));
}
CloseServiceHandle(*(SC_HANDLE *)(a1 - 4748));
if ( *(HWND *)(a1 - 4768) == a2 )
goto LABEL_155;
*(_DWORD *)(a1 - 4764) = a2;
v11 = OpenSCManagerW((LPCWSTR)a2, (LPCWSTR)a2, 1u);
*(_DWORD *)(a1 - 4744) = v11;
if ( v11 == a2 )
goto LABEL_155;
v12 = OpenServiceW(v11, L"sppsvc", 1u);
*(_DWORD *)(a1 - 4752) = v12;
if ( v12 != a2 )
{
if ( !QueryServiceConfigW(v12, (LPQUERY_SERVICE_CONFIGW)a2, (DWORD)a2, (LPDWORD)(a1 - 4768)) )
{
if ( GetLastError() == 122 )
{
v14 = *(_DWORD *)(a1 - 4768);
v15 = GetProcessHeap();
v13 = (struct _QUERY_SERVICE_CONFIGW *)HeapAlloc(v15, (DWORD)a2, v14);
*(_DWORD *)(a1 - 4748) = v13;
if ( v13 == a2 )
{
*(_DWORD *)(a1 - 4764) = 1;
}
else
{
if ( QueryServiceConfigW(*(SC_HANDLE *)(a1 - 4752), v13, *(_DWORD *)(a1 - 4768), (LPDWORD)(a1 - 4768)) )
{
if ( *(_DWORD *)(*(_DWORD *)(a1 - 4748) + 4) != 4 )
*(_DWORD *)(a1 - 4764) = 1;
}
v16 = *(void **)(a1 - 4748);
v17 = GetProcessHeap();
HeapFree(v17, (DWORD)a2, v16);
}
}
}
CloseServiceHandle(*(SC_HANDLE *)(a1 - 4752));
}
CloseServiceHandle(*(SC_HANDLE *)(a1 - 4744));
if ( *(HWND *)(a1 - 4764) == a2 )
goto LABEL_155;
if ( SHGetFolderPathW(a2, 37, a2, (DWORD)a2, (LPWSTR)(a1 - 4740)) < 0 ) goto LABEL_155; if ( sub_1009CDF(a1 - 2660, 260, a1 - 4740) < 0 ) goto LABEL_155; if ( sub_1009D19(a1 - 2660, 260, (int)L"\\sppuinotify.dll") < 0 ) goto LABEL_155; if ( GetFileAttributesW((LPCWSTR)(a1 - 2660)) == -1 ) goto LABEL_155; *(_DWORD *)(a1 - 4752) = a2; v18 = GetFileVersionInfoSizeExW((DWORD)a2, (LPCWSTR)(a1 - 2660), (LPDWORD)(a1 - 4784)); *(_DWORD *)(a1 - 4748) = v18; if ( v18 <= (unsigned int)a2 ) goto LABEL_155; v21 = v18; v22 = GetProcessHeap(); v19 = HeapAlloc(v22, (DWORD)a2, v21); v20 = v19; if ( v19 != a2 ) { if ( GetFileVersionInfoExW((DWORD)a2, (LPCWSTR)(a1 - 2660), *(_DWORD *)(a1 - 4784), *(_DWORD *)(a1 - 4748), v19) ) { if ( VerQueryValueW(v20, L"\\VarFileInfo\\Translation", (LPVOID *)(a1 - 4796), (PUINT)(a1 - 4788)) ) { if ( *(_DWORD *)(a1 - 4788) >= 4u )
{
if ( sub_10015C3(
(wchar_t *)(a1 - 484),
0x30u,
L"\\StringFileInfo\\%04x%04x\\OriginalFilename",
**(_WORD **)(a1 - 4796),
*(_WORD *)(*(_DWORD *)(a1 - 4796) + 2)) >= 0 )
{
if ( VerQueryValueW(v20, (LPCWSTR)(a1 - 484), (LPVOID *)(a1 - 4812), (PUINT)(a1 - 4804)) )
{
v23 = *(_DWORD *)(a1 - 4804);
v24 = *(const wchar_t **)(a1 - 4812);
v25 = wcsrchr((const wchar_t *)(a1 - 2660), 0x5Cu);
if ( !wcsncmp(v25 + 1, v24, v23) )
*(_DWORD *)(a1 - 4752) = 1;
}
}
}
}
}
v26 = GetProcessHeap();
HeapFree(v26, (DWORD)a2, (LPVOID)v20);
if ( *(HWND *)(a1 - 4752) == a2 )
goto LABEL_155;
}
if ( sub_1009CDF(a1 - 1620, 260, a1 - 4740) < 0 ) goto LABEL_155; if ( sub_1009D19(a1 - 1620, 260, (int)L"\\slui.exe") < 0 ) goto LABEL_155; if ( GetFileAttributesW((LPCWSTR)(a1 - 1620)) == -1 ) goto LABEL_155; *(_DWORD *)(a1 - 4748) = a2; v27 = GetFileVersionInfoSizeExW((DWORD)a2, (LPCWSTR)(a1 - 1620), (LPDWORD)(a1 - 4820)); v28 = v27; if ( v27 <= (unsigned int)a2 ) goto LABEL_155; v30 = v27; v31 = GetProcessHeap(); v29 = HeapAlloc(v31, (DWORD)a2, v30); *(_DWORD *)(a1 - 4744) = v29; if ( v29 != a2 ) { if ( GetFileVersionInfoExW((DWORD)a2, (LPCWSTR)(a1 - 1620), *(_DWORD *)(a1 - 4820), v28, v29) ) { if ( VerQueryValueW( *(LPCVOID *)(a1 - 4744), L"\\VarFileInfo\\Translation", (LPVOID *)(a1 - 4836), (PUINT)(a1 - 4828)) ) { if ( *(_DWORD *)(a1 - 4828) >= 4u )
{
if ( sub_10015C3(
(wchar_t *)(a1 - 100),
0x30u,
L"\\StringFileInfo\\%04x%04x\\OriginalFilename",
**(_WORD **)(a1 - 4836),
*(_WORD *)(*(_DWORD *)(a1 - 4836) + 2)) >= 0 )
{
if ( VerQueryValueW(
*(LPCVOID *)(a1 - 4744),
(LPCWSTR)(a1 - 100),
(LPVOID *)(a1 - 4852),
(PUINT)(a1 - 4844)) )
{
v32 = *(_DWORD *)(a1 - 4844);
v33 = *(const wchar_t **)(a1 - 4852);
v34 = wcsrchr((const wchar_t *)(a1 - 1620), 0x5Cu);
if ( !wcsncmp(v34 + 1, v33, v32) )
*(_DWORD *)(a1 - 4748) = 1;
}
}
}
}
}
v35 = *(void **)(a1 - 4744);
v36 = GetProcessHeap();
HeapFree(v36, (DWORD)a2, v35);
if ( *(HWND *)(a1 - 4748) == a2 )
goto LABEL_155;
}
if ( sub_1009CDF(a1 - 2140, 260, a1 - 4740) < 0 ) goto LABEL_155; if ( sub_1009D19(a1 - 2140, 260, (int)L"\\sppsvc.exe") < 0 ) goto LABEL_155; if ( GetFileAttributesW((LPCWSTR)(a1 - 2140)) == -1 ) goto LABEL_155; *(_DWORD *)(a1 - 4748) = a2; v37 = GetFileVersionInfoSizeExW((DWORD)a2, (LPCWSTR)(a1 - 2140), (LPDWORD)(a1 - 4860)); v38 = v37; if ( v37 <= (unsigned int)a2 ) goto LABEL_155; v40 = v37; v41 = GetProcessHeap(); v39 = HeapAlloc(v41, (DWORD)a2, v40); *(_DWORD *)(a1 - 4744) = v39; if ( v39 == a2 ) goto LABEL_156; if ( GetFileVersionInfoExW((DWORD)a2, (LPCWSTR)(a1 - 2140), *(_DWORD *)(a1 - 4860), v38, v39) ) { if ( VerQueryValueW( *(LPCVOID *)(a1 - 4744), L"\\VarFileInfo\\Translation", (LPVOID *)(a1 - 4880), (PUINT)(a1 - 4872)) ) { if ( *(_DWORD *)(a1 - 4872) >= 4u )
{
if ( sub_10015C3(
(wchar_t *)(a1 - 196),
0x30u,
L"\\StringFileInfo\\%04x%04x\\OriginalFilename",
**(_WORD **)(a1 - 4880),
*(_WORD *)(*(_DWORD *)(a1 - 4880) + 2)) >= 0 )
{
if ( VerQueryValueW(
*(LPCVOID *)(a1 - 4744),
(LPCWSTR)(a1 - 196),
(LPVOID *)(a1 - 4896),
(PUINT)(a1 - 4888)) )
{
v42 = *(_DWORD *)(a1 - 4888);
v43 = *(const wchar_t **)(a1 - 4896);
v44 = wcsrchr((const wchar_t *)(a1 - 2140), 0x5Cu);
if ( !wcsncmp(v44 + 1, v43, v42) )
*(_DWORD *)(a1 - 4748) = 1;
}
}
}
}
}
v45 = *(void **)(a1 - 4744);
v46 = GetProcessHeap();
HeapFree(v46, (DWORD)a2, v45);
if ( *(HWND *)(a1 - 4748) == a2 )
LABEL_155:
v47 = 0;
else
LABEL_156:
v47 = 1;
Wow64RevertWow64FsRedirection(*(PVOID *)(a1 - 4840));
LABEL_136:
if ( (HWND)v47 != a2 )
goto LABEL_150;
v2 = 260;
goto LABEL_138;
}
}
LABEL_138:
if ( !GetSystemMetrics(67) )
{
WinSqmIncrementDWORD(a2, 6859, 1);
v91 = InterlockedExchange(&Target, 1);
v95 = (WCHAR *)(a1 - 1100);
if ( v91 )
{
if ( LoadStringW((HINSTANCE)0x1000000, 0xC804u, v95, v2) )
{
v92 = FindWindowW((LPCWSTR)a2, (LPCWSTR)(a1 - 1100));
if ( v92 != a2 )
SetForegroundWindow(v92);
}
}
else
{
v93 = GetModuleFileNameW((HMODULE)0x1000000, v95, v2);
if ( (HWND)v93 != a2 )
{
if ( v93 != v2 || GetLastError() != 122 )
{
if ( LoadLibraryW((LPCWSTR)(a1 - 1100)) )
{
v94 = CreateThread(
(LPSECURITY_ATTRIBUTES)a2,
(SIZE_T)a2,
(LPTHREAD_START_ROUTINE)StartAddress,
a2,
(DWORD)a2,
(LPDWORD)(a1 - 4772));
if ( v94 == a2 )
InterlockedExchange(&Target, (LONG)a2);
else
CloseHandle(v94);
}
}
}
}
}
goto LABEL_150;
}
// 10027A2: using guessed type int loc_10027A2();
// 1006B98: using guessed type wchar_t aSppsvc_exe[12];
// 1006BB0: using guessed type wchar_t aSlui_exe[10];
// 1006BC4: using guessed type wchar_t aSppuinotify_dl[17];
// 100A020: using guessed type int __stdcall WinSqmIncrementDWORD(_DWORD, _DWORD, _DWORD);

//----- (01006C68) --------------------------------------------------------
int __usercall sub_1006C68(int a1)
{
int v1; // eax@1
int v3; // ecx@1

v1 = *(_DWORD *)(a1 - 20);
v3 = **(_DWORD **)v1;
*(_DWORD *)(a1 - 36) = v3;
return XcptFilter(v3, v1);
}
// 1009DE5: using guessed type int __cdecl XcptFilter(_DWORD, _DWORD);

//----- (01006C7C) --------------------------------------------------------
void __usercall sub_1006C7C(int a1)
{
int v1; // eax@1

v1 = *(_DWORD *)(a1 - 36);
dword_100C070 = *(_DWORD *)(a1 - 36);
JUMPOUT(dword_100C064, 0, *(unsigned int *)loc_1006C97);
exit(v1);
}
// 1006C97: using guessed type int loc_1006C97();
// 100C064: using guessed type int dword_100C064;
// 100C070: using guessed type int dword_100C070;

//----- (01006CB4) --------------------------------------------------------
signed int __cdecl sub_1006CB4()
{
return 1;
}

//----- (01006DC0) --------------------------------------------------------
LONG __stdcall sub_1006DC0(int a1)
{
return sub_10040FB(a1 - 4);
}

//----- (01006DDA) --------------------------------------------------------
LONG __stdcall sub_1006DDA(int a1)
{
return sub_1003EA6(a1 - 4);
}

//----- (01006DF4) --------------------------------------------------------
int __stdcall sub_1006DF4(int a1, int a2, int a3, int a4)
{
if ( a3 == 1 )
dword_100C00C = a4;
return 0;
}
// 100C00C: using guessed type int dword_100C00C;

//----- (01006E12) --------------------------------------------------------
signed int __stdcall sub_1006E12(int a1, int a2, int a3)
{
return sub_10040C4(a1 - 4, a2, a3);
}

//----- (01006E32) --------------------------------------------------------
int __stdcall sub_1006E32(int a1, LPCWSTR lpFileName)
{
HANDLE v2; // eax@2
UINT v4; // [sp+4h] [bp-414h]@2
void *v5; // [sp+8h] [bp-410h]@2
DWORD iSize; // [sp+Ch] [bp-40Ch]@3
int v7; // [sp+10h] [bp-408h]@1
char Buffer; // [sp+14h] [bp-404h]@3
unsigned int v9; // [sp+414h] [bp-4h]@1
int v10; // [sp+418h] [bp+0h]@1

v9 = (unsigned int)&v10 ^ dword_100C010;
v7 = a1;
if ( lstrcmpiW(lpFileName, &String2) )
{
v4 = SetErrorMode(1u);
v2 = CreateFileW(lpFileName, 0x80000000u, 1u, 0, 3u, 0x80u, 0);
v5 = v2;
if ( v2 != (HANDLE)-1 )
{
if ( ReadFile(v2, &Buffer, 0x400u, &iSize, 0) > 0 )
{
if ( iSize )
{
dword_100C00C = sub_10071C2(&Buffer, iSize);
if ( dword_100C00C != -1 )
{
if ( (**(int (__stdcall ***)(int, _DWORD, int *))v7)(v7, dword_1003C74, &v7) >= 0 )
{
(*(void (__stdcall **)(int, signed int, int))(*(_DWORD *)v7 + 100))(v7, 1, dword_100C00C);
(*(void (__stdcall **)(int))(*(_DWORD *)v7 + 8))(v7);
}
}
sub_1002558((int)&String2, 0x104u, (int)lpFileName);
}
}
CloseHandle(v5);
}
SetErrorMode(v4);
}
return 0;
}
// 1003C74: using guessed type int dword_1003C74[5];
// 100C00C: using guessed type int dword_100C00C;
// 100C010: using guessed type int dword_100C010;

//----- (01006F5C) --------------------------------------------------------
int __stdcall sub_1006F5C(int a1, const WCHAR *lpFileName)
{
int v2; // edi@1
int v3; // esi@1
int v5; // [sp+8h] [bp-4h]@1

v2 = (int)lpFileName;
v3 = (*(int (__stdcall **)(const WCHAR *, int *))(*(_DWORD *)lpFileName + 56))(lpFileName, &v5);
if ( v3 >= 0 )
{
v3 = (*(int (__stdcall **)(int, signed int, const WCHAR **))(*(_DWORD *)v5 + 20))(v5, -2147123200, &lpFileName);
if ( v3 >= 0 )
{
v3 = sub_1006E32(v2, lpFileName);
CoTaskMemFree((LPVOID)lpFileName);
}
(*(void (__stdcall **)(int))(*(_DWORD *)v5 + 8))(v5);
}
return v3;
}

//----- (01006FB9) --------------------------------------------------------
LRESULT __stdcall sub_1006FB9(int a1)
{
LRESULT result; // eax@1

result = SendMessageW(dword_100C028, 187u, a1 - 1, 0);
if ( result != -1 )
{
SendMessageW(dword_100C028, 0xB1u, result, result);
result = SendMessageW(dword_100C028, 0xB7u, 0, 0);
}
return result;
}

//----- (01007008) --------------------------------------------------------
const WCHAR *__stdcall sub_1007008(LPCWSTR lpsz)
{
const WCHAR *v1; // eax@1
const WCHAR v2; // cx@1
const WCHAR *v3; // edi@1

v2 = *lpsz;
v3 = lpsz;
v1 = lpsz;
if ( *lpsz )
{
do
{
if ( v2 == 58 || v2 == 92 )
v3 = v1;
v1 = CharNextW(v1);
v2 = *v1;
}
while ( *v1 );
if ( v3 != lpsz )
++v3;
}
return v3;
}

//----- (01007051) --------------------------------------------------------
int __stdcall sub_1007051(HWND hWnd, LPCWSTR lpCaption, LPCWSTR lpText, LPCWSTR lpString, UINT uType)
{
int v5; // edi@2
int v6; // eax@4
const WCHAR *v7; // edi@4
int v8; // esi@4
int v9; // esi@5

if ( lpString )
v5 = lstrlenW(lpString);
else
v5 = 0;
v8 = lstrlenW(lpText) + v5 + 1;
v6 = (int)LocalAlloc(0x40u, 2 * v8);
v7 = (const WCHAR *)v6;
if ( v6 )
{
sub_10047BA((int)lpText, (int)lpString, v6, v8);
v9 = MessageBoxW(hWnd, v7, lpCaption, uType);
LocalFree((HLOCAL)v7);
}
else
{
v9 = MessageBoxW(hWnd, lpText, lpCaption, uType);
}
return v9;
}

//----- (010070D3) --------------------------------------------------------
__int32 __stdcall sub_10070D3(int a1)
{
__int32 result; // eax@1
__int32 v2; // edi@2
int v3; // eax@3
void *v4; // [sp+8h] [bp-14h]@1
int v5; // [sp+Ch] [bp-10h]@1
int v6; // [sp+10h] [bp-Ch]@3
LPARAM lParam; // [sp+14h] [bp-8h]@1
WPARAM wParam; // [sp+18h] [bp-4h]@1

wParam = 0;
lParam = 0;
v5 = lstrlenW(stru_100C0C0.lpstrReplaceWith);
SendMessageW(dword_100C028, 176u, (WPARAM)&wParam, (LPARAM)&lParam);
result = SendMessageW(dword_100C028, 0xBDu, 0, 0);
v4 = (void *)result;
if ( result )
{
result = (__int32)LocalLock((HLOCAL)result);
v2 = result;
if ( result )
{
v3 = sub_100818F(result + 2 * wParam, lParam - wParam, (int)stru_100C0C0.lpstrFindWhat, dword_100D798, (int)&v6);
if ( v3 == v2 + 2 * wParam )
{
if ( v6 == lParam - wParam )
{
SendMessageW(dword_100C028, 0xC2u, 1u, (LPARAM)stru_100C0C0.lpstrReplaceWith);
SendMessageW(dword_100C028, 0xB1u, wParam, wParam + v5);
if ( a1 )
SendMessageW(dword_100C028, 0xB7u, 0, 0);
}
}
result = LocalUnlock(v4);
}
}
return result;
}
// 100D798: using guessed type int dword_100D798;

//----- (010071C2) --------------------------------------------------------
int __stdcall sub_10071C2(const void *lpv, int iSize)
{
int result; // eax@1
int v3; // ecx@2

result = 0;
if ( (unsigned int)iSize > 1 )
{
v3 = *(_WORD *)lpv;
if ( v3 != 48111 )
{
if ( v3 == 65279 )
return 1;
if ( v3 != 65534 )
{
if ( !sub_100991D(lpv, iSize) )
return sub_10098C7((int)lpv, iSize) != 0 ? 3 : 0;
return 1;
}
return 2;
}
if ( (unsigned int)iSize > 2 && *((_BYTE *)lpv + 2) == -65 )
return 3;
}
return result;
}

//----- (0100722E) --------------------------------------------------------
signed int __stdcall sub_100722E(HWND hWndParent, int a2, HWND hWnd, int a4)
{
LPARAM v4; // ecx@6
HWND v5; // esi@13
int v6; // eax@15
int v7; // eax@18
HWND v9; // [sp-10h] [bp-1Ch]@17
const WCHAR *v10; // [sp-Ch] [bp-18h]@17
UINT v11; // [sp-8h] [bp-14h]@17
ULONG_PTR v12; // [sp-4h] [bp-10h]@17
struct tagPOINT Point; // [sp+4h] [bp-8h]@14

if ( a2 == 83 )
{
v7 = GetDlgCtrlID(*(HWND *)(a4 + 12));
if ( v7 != 257 && v7 != 259 )
return 0;
v12 = (ULONG_PTR)dword_1006D38;
v11 = 12;
v10 = lpszHelp;
v9 = *(HWND *)(a4 + 12);
}
else
{
if ( a2 != 123 )
{
if ( a2 == 272 )
{
SendDlgItemMessageW(hWndParent, 257, 323u, 0, dword_100C334);
SendDlgItemMessageW(hWndParent, 257, 0x143u, 0, dword_100C338);
SendDlgItemMessageW(hWndParent, 257, 0x143u, 0, dword_100C33C);
SendDlgItemMessageW(hWndParent, 257, 0x143u, 0, dword_100C340);
v4 = dword_100C334;
dword_100E040 = dword_100C00C;
switch ( dword_100C00C )
{
case 1:
v4 = dword_100C338;
break;
case 2:
v4 = dword_100C33C;
break;
case 3:
v4 = dword_100C340;
break;
}
SendDlgItemMessageW(hWndParent, 257, 0x14Du, 0xFFFFFFFFu, v4);
}
else
{
if ( a2 == 273 )
dword_100E040 = SendDlgItemMessageW(hWndParent, 257, 0x147u, 0, 0);
}
return 0;
}
v5 = hWnd;
if ( hWndParent == hWnd )
{
GetCursorPos(&Point);
ScreenToClient(hWndParent, &Point);
v5 = ChildWindowFromPoint(hWndParent, Point);
}
v6 = GetDlgCtrlID(v5);
if ( v6 != 257 && v6 != 259 )
return 0;
v12 = (ULONG_PTR)dword_1006D38;
v11 = 10;
v10 = lpszHelp;
v9 = v5;
}
WinHelpW(v9, v10, v11, v12);
return 1;
}
// 1006D38: using guessed type int dword_1006D38[6];
// 100C00C: using guessed type int dword_100C00C;
// 100E040: using guessed type int dword_100E040;

//----- (0100739B) --------------------------------------------------------
signed int __stdcall sub_100739B(DWORD hDlg, int a2, HWND hWnd, int a4)
{
HWND v4; // ebx@1
LPARAM v5; // ecx@7
int v6; // eax@16
int v7; // eax@19
HWND v9; // eax@24
HANDLE v10; // eax@26
int v11; // eax@29
LPARAM v12; // ecx@29
int v13; // eax@29
int v14; // eax@30
HWND v15; // [sp-10h] [bp-638h]@18
const WCHAR *v16; // [sp-Ch] [bp-634h]@18
UINT v17; // [sp-8h] [bp-630h]@18
ULONG_PTR v18; // [sp-4h] [bp-62Ch]@18
struct tagPOINT Point; // [sp+Ch] [bp-61Ch]@15
HANDLE hObject; // [sp+14h] [bp-614h]@26
DWORD iSize; // [sp+18h] [bp-610h]@1
char Buffer; // [sp+1Ch] [bp-60Ch]@27
LPARAM String1; // [sp+41Ch] [bp-20Ch]@24
unsigned int v24; // [sp+624h] [bp-4h]@1
int v25; // [sp+628h] [bp+0h]@1

v24 = (unsigned int)&v25 ^ dword_100C010;
v4 = hWnd;
iSize = hDlg;
if ( a2 == 78 )
{
if ( *(_DWORD *)(a4 + 8) == -602 )
{
v9 = GetParent((HWND)hDlg);
if ( SendMessageW(v9, 0x465u, 0x104u, (LPARAM)&String1) > 0 )
{
if ( lstrcmpiW((LPCWSTR)&String1, &word_100D588) )
{
v10 = CreateFileW((LPCWSTR)&String1, 0x80000000u, 1u, 0, 3u, 0x80u, 0);
hObject = v10;
if ( v10 != (HANDLE)-1 )
{
if ( ReadFile(v10, &Buffer, 0x400u, &iSize, 0) > 0 )
{
if ( iSize )
{
v13 = sub_10071C2(&Buffer, iSize);
v12 = dword_100C334;
dword_100C00C = v13;
v11 = v13 - 1;
if ( v11 )
{
v14 = v11 - 1;
if ( v14 )
{
if ( v14 == 1 )
v12 = dword_100C340;
}
else
{
v12 = dword_100C33C;
}
}
else
{
v12 = dword_100C338;
}
SendDlgItemMessageW((HWND)hDlg, 257, 0x14Du, 0xFFFFFFFFu, v12);
sub_1002558((int)&word_100D588, 0x104u, (int)&String1);
}
}
CloseHandle(hObject);
}
}
}
}
return 0;
}
if ( a2 == 83 )
{
v7 = GetDlgCtrlID(*(HWND *)(a4 + 12));
if ( v7 != 257 && v7 != 259 )
return 0;
v18 = (ULONG_PTR)dword_1006D38;
v17 = 12;
v16 = lpszHelp;
v15 = *(HWND *)(a4 + 12);
goto LABEL_22;
}
if ( a2 == 123 )
{
if ( (HWND)hDlg == hWnd )
{
GetCursorPos(&Point);
ScreenToClient((HWND)hDlg, &Point);
v4 = ChildWindowFromPoint((HWND)hDlg, Point);
}
v6 = GetDlgCtrlID(v4);
if ( v6 != 257 && v6 != 259 )
return 0;
v18 = (ULONG_PTR)dword_1006D38;
v17 = 10;
v16 = lpszHelp;
v15 = v4;
LABEL_22:
WinHelpW(v15, v16, v17, v18);
return 1;
}
if ( a2 == 272 )
{
SendDlgItemMessageW((HWND)hDlg, 257, 323u, 0, dword_100C334);
SendDlgItemMessageW((HWND)iSize, 257, 0x143u, 0, dword_100C338);
SendDlgItemMessageW((HWND)iSize, 257, 0x143u, 0, dword_100C33C);
SendDlgItemMessageW((HWND)iSize, 257, 0x143u, 0, dword_100C340);
v5 = dword_100C334;
switch ( dword_100C00C )
{
case 1:
v5 = dword_100C338;
break;
case 2:
v5 = dword_100C33C;
break;
case 3:
v5 = dword_100C340;
break;
}
SendDlgItemMessageW((HWND)iSize, 257, 0x14Du, 0xFFFFFFFFu, v5);
}
else
{
if ( a2 == 273 )
dword_100C00C = SendDlgItemMessageW((HWND)hDlg, 257, 0x147u, 0, 0);
}
return 0;
}
// 1006D38: using guessed type int dword_1006D38[6];
// 100C00C: using guessed type int dword_100C00C;
// 100C010: using guessed type int dword_100C010;

//----- (0100765B) --------------------------------------------------------
signed int __stdcall DialogFunc(HWND hWnd, int a2, unsigned __int16 a3, int a4)
{
int v4; // eax@9
int v5; // ST10_4@9
LRESULT v6; // eax@12
LRESULT v8; // eax@14
INT_PTR v9; // [sp-4h] [bp-E4h]@7
LPARAM lParam; // [sp+Ch] [bp-D4h]@14
WPARAM wParam; // [sp+10h] [bp-D0h]@14
WCHAR SrcStr; // [sp+14h] [bp-CCh]@9
unsigned int v13; // [sp+DCh] [bp-4h]@1
int v14; // [sp+E0h] [bp+0h]@1

v13 = (unsigned int)&v14 ^ dword_100C010;
if ( a2 == 272 )
{
SendMessageW(dword_100C028, 176u, (WPARAM)&wParam, (LPARAM)&lParam);
v8 = SendMessageW(dword_100C028, 0xC9u, wParam, 0);
sub_10015C3(&SrcStr, 0x64u, L"%d", v8 + 1);
SetDlgItemTextW(hWnd, 258, &SrcStr);
SetFocus(hWnd);
return 1;
}
if ( a2 != 273 )
return 0;
if ( a3 == 1 )
{
GetDlgItemTextW(hWnd, 258, &SrcStr, 100);
FoldStringW(0x80u, &SrcStr, -1, &SrcStr, 100);
dword_100E160 = wtol(&SrcStr);
v4 = ((int (__thiscall *)(int, HWND, signed int, int, _DWORD))SendMessageW)(
v5,
dword_100C028,
187,
dword_100E160 - 1,
0);
if ( dword_100E160 && v4 != -1 )
{
v9 = 0;
goto LABEL_8;
}
MessageBoxW(hWnd, dword_100C330, lpCaption, 0);
v6 = SendMessageW(dword_100C028, 0xBAu, 0, 0);
sub_10015C3(&SrcStr, 0x64u, L"%d", v6);
SetDlgItemTextW(hWnd, 258, &SrcStr);
SetFocus(hWnd);
return 0;
}
if ( a3 == 2 )
{
v9 = 1;
LABEL_8:
EndDialog(hWnd, v9);
return 1;
}
if ( a3 != 258 )
return 0;
return 1;
}
// 100C010: using guessed type int dword_100C010;
// 100E160: using guessed type int dword_100E160;

//----- (010077F3) --------------------------------------------------------
signed int __stdcall sub_10077F3(int a1)
{
signed int result; // eax@1

result = 0;
if ( !a1 )
{
if ( CommDlgExtendedError() )
{
sub_100432B();
result = -2147467259;
}
else
{
result = -2147023673;
}
}
return result;
}

//----- (01007823) --------------------------------------------------------
signed int __stdcall sub_1007823(int a1, int *a2)
{
signed int v2; // edi@1
WCHAR *v3; // eax@2
int v4; // eax@3

v2 = -2147467259;
if ( a2 )
{
v3 = (WCHAR *)CoTaskMemAlloc(0x208u);
*a2 = (int)v3;
if ( v3 )
{
stru_100C1A0.lpstrFile = v3;
sub_1002558(*a2, 0x104u, (int)L"*.txt");
stru_100C1A0.lpstrTitle = (LPCWSTR)dword_100C30C;
stru_100C1A0.lpstrFilter = &Dest;
stru_100C1A0.lpstrDefExt = L"txt";
stru_100C1A0.Flags = 8917092;
stru_100C1A0.nFilterIndex = 1;
stru_100C1A0.lpTemplateName = (LPCWSTR)15;
stru_100C1A0.lpfnHook = (LPOFNHOOKPROC)sub_100739B;
v4 = GetOpenFileNameW(&stru_100C1A0);
v2 = sub_10077F3(v4);
if ( v2 < 0 )
CoTaskMemFree((LPVOID)*a2);
}
}
return v2;
}
// 1003C6C: using guessed type wchar_t aTxt[4];
// 100C30C: using guessed type int dword_100C30C;

//----- (010078D3) --------------------------------------------------------
signed int __stdcall sub_10078D3(int a1, int a2, LPWSTR *a3)
{
signed int v3; // edi@1
int v4; // eax@2
int v5; // eax@3

v3 = -2147467259;
if ( a3 )
{
v4 = (int)CoTaskMemAlloc(0x208u);
*a3 = (LPWSTR)v4;
if ( v4 )
{
sub_1002558(v4, 0x104u, a2);
stru_100C1A0.lpstrFile = *a3;
stru_100C1A0.lpstrTitle = (LPCWSTR)dword_100C310;
stru_100C1A0.Flags = 8947814;
stru_100C1A0.lpTemplateName = (LPCWSTR)15;
stru_100C1A0.lpfnHook = (LPOFNHOOKPROC)sub_100722E;
stru_100C1A0.lpstrFilter = &word_100C7E0;
stru_100C1A0.lpstrDefExt = L"txt";
dword_100C038 = 1;
stru_100C1A0.nFilterIndex = 1;
v5 = GetSaveFileNameW(&stru_100C1A0);
v3 = sub_10077F3(v5);
if ( v3 < 0 )
CoTaskMemFree(*a3);
}
}
return v3;
}
// 1003C6C: using guessed type wchar_t aTxt[4];
// 100C038: using guessed type int dword_100C038;
// 100C310: using guessed type int dword_100C310;

//----- (01007985) --------------------------------------------------------
signed int __usercall sub_1007985(int a1)
{
signed int result; // eax@1
HANDLE v2; // edi@1

v2 = hFile;
result = sub_1001664(0);
if ( result )
{
hFile = CreateFileW(&word_100D378, 0x80000000u, 3u, 0, 3u, 0x80u, 0);
if ( hFile == (HANDLE)-1 )
{
result = sub_1007BF6(&word_100D378);
}
else
{
result = sub_1002820(a1, (int)&word_100D378, -1);
if ( result )
return result;
}
hFile = v2;
}
return result;
}

//----- (010079E3) --------------------------------------------------------
void __stdcall sub_10079E3(HDROP hDrop, HWND hWnd)
{
int ebp0; // ebp@0

if ( DragQueryFileW(hDrop, -1u, 0, 0) )
{
DragQueryFileW(hDrop, 0, (LPWSTR)&word_100D378, 0x104u);
SetActiveWindow(hWnd);
sub_1007985(ebp0);
SHAddToRecentDocs(3u, &word_100D378);
}
DragFinish(hDrop);
}

//----- (01007A3C) --------------------------------------------------------
int __stdcall Proc(int a1, int a2, int a3, int a4)
{
*(_BYTE *)(a4 + 23) = *(_BYTE *)(a1 + 23);
return 0;
}

//----- (01007A58) --------------------------------------------------------
int __userpurge sub_1007A58(int result, int a2, int a3, int a4)
{
int v4; // edx@1
int v5; // ecx@2

v4 = a4;
if ( a4 )
{
result = a3;
v5 = a2;
do
{
*(_WORD *)v5 = (*(_WORD *)result << 8) ^ *(_BYTE *)(result + 1);
v5 += 2;
result += 2;
--v4;
}
while ( v4 );
}
return result;
}

//----- (01007A90) --------------------------------------------------------
signed int __stdcall sub_1007A90(HANDLE hFile, UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar)
{
int v6; // edi@5
HLOCAL v7; // eax@6
int v8; // esi@9
DWORD NumberOfBytesWritten; // [sp+4h] [bp-10h]@10
char v10; // [sp+8h] [bp-Ch]@4
LPCVOID hMem; // [sp+Ch] [bp-8h]@6
LPBOOL lpUsedDefaultChar; // [sp+10h] [bp-4h]@3

if ( !cchWideChar )
return 1;
lpUsedDefaultChar = 0;
if ( CodePage != 65001 )
lpUsedDefaultChar = (LPBOOL)&v10;
v6 = WideCharToMultiByte(CodePage, dwFlags, lpWideCharStr, cchWideChar, 0, 0, 0, lpUsedDefaultChar);
if ( !v6 )
return 0;
v7 = LocalAlloc(0x40u, v6 + 1);
hMem = v7;
if ( !v7 )
{
SetLastError(8u);
return 0;
}
v8 = WideCharToMultiByte(CodePage, dwFlags, lpWideCharStr, cchWideChar, (LPSTR)v7, v6, 0, lpUsedDefaultChar);
if ( v8 )
v8 = WriteFile(hFile, hMem, v6, &NumberOfBytesWritten, 0);
LocalFree((HLOCAL)hMem);
return v8;
}

//----- (01007B40) --------------------------------------------------------
LRESULT __cdecl sub_1007B40()
{
LRESULT result; // eax@5

if ( wParam )
{
if ( dword_100C040 )
{
sub_1006FB9(1);
}
else
{
SendMessageW(dword_100C028, 0xB0u, (WPARAM)&dword_100D794, (LPARAM)&dword_100D790);
SendMessageW(dword_100C028, 0xB1u, 0, 0);
}
result = SendMessageW(dword_100C028, 0xC8u, 0, 0);
}
return result;
}
// 100C040: using guessed type int dword_100C040;

//----- (01007BA2) --------------------------------------------------------
LRESULT __cdecl sub_1007BA2()
{
LRESULT result; // eax@1

result = 0;
if ( wParam )
{
if ( dword_100C040 )
{
result = sub_1008383(0x50200104u);
}
else
{
SendMessageW(dword_100C028, 200u, 1u, 0);
result = SendMessageW(dword_100C028, 0xB1u, dword_100D794, dword_100D790);
}
}
return result;
}
// 100C040: using guessed type int dword_100C040;

//----- (01007BF6) --------------------------------------------------------
int __stdcall sub_1007BF6(LPCWSTR lpString)
{
DWORD v1; // eax@1
int result; // eax@2
WCHAR Text; // [sp+4h] [bp-204h]@1
unsigned int v4; // [sp+204h] [bp-4h]@1
int v5; // [sp+208h] [bp+0h]@1

v4 = (unsigned int)&v5 ^ dword_100C010;
v1 = GetLastError();
if ( FormatMessageW(0x1200u, 0, v1, 0, &Text, 0x100u, 0) )
result = MessageBoxW(hWnd, &Text, szApp, 0x30u);
else
result = sub_1007051(hWnd, szApp, dword_100C2B0, lpString, 0x30u);
return result;
}
// 100C010: using guessed type int dword_100C010;

//----- (01007C80) --------------------------------------------------------
signed int __userpurge sub_1007C80(int a1, int a2, int a3, int a4, int a5)
{
signed int result; // eax@1
int v6; // ebx@1
int v7; // edi@1
int v8; // esi@1

v6 = a1;
v8 = a2;
result = 0;
v7 = 0;
if ( !a2 )
goto LABEL_11;
do
{
if ( !a5 )
break;
if ( !*(_WORD *)v6 )
break;
*(_WORD *)a3 = *(_WORD *)v6;
a3 += 2;
v6 += 2;
--v8;
--a5;
++v7;
}
while ( v8 );
if ( !v8 )
{
LABEL_11:
a3 -= 2;
--v7;
result = -2147024774;
}
*(_WORD *)a3 = 0;
if ( a4 )
*(_DWORD *)a4 = v7;
return result;
}

//----- (01007CD7) --------------------------------------------------------
signed int __stdcall sub_1007CD7(HWND hWnd, LPCWSTR lpString1, LPCWSTR lpBuffer)
{
DWORD v3; // eax@1
DWORD v5; // eax@8
bool v6; // ecx@8
LRESULT v7; // eax@10
int v8; // ebx@10
BOOL *v9; // eax@17
DWORD v10; // edi@17
int v11; // eax@19
BOOL v12; // eax@24
int v13; // edi@25
int v14; // eax@25
bool v15; // [sp+4h] [bp-14h]@8
BOOL UsedDefaultChar; // [sp+8h] [bp-10h]@1
HLOCAL hMem; // [sp+Ch] [bp-Ch]@10
UINT CodePage; // [sp+10h] [bp-8h]@17
DWORD NumberOfBytesWritten; // [sp+14h] [bp-4h]@15
const void *v20; // [sp+28h] [bp+10h]@11

v3 = 1;
UsedDefaultChar = 0;
if ( lpBuffer )
v3 = 3;
hFile = CreateFileW(lpString1, 0xC0000000u, v3, 0, 4u, 0x80u, 0);
if ( hFile == (HANDLE)-1 )
{
if ( lpBuffer || GetLastError() != 5 )
sub_1007BF6(lpString1);
return 0;
}
v5 = GetLastError();
v6 = v5 != 183;
v15 = v5 != 183;
if ( wParam )
sub_1007B40();
v8 = ((int (__thiscall *)(bool, HWND, signed int, _DWORD, _DWORD))SendMessageW)(v6, dword_100C028, 14, 0, 0);
v7 = SendMessageW(dword_100C028, 0xBDu, 0, 0);
hMem = (HLOCAL)v7;
if ( !v7 || (v20 = LocalLock((HLOCAL)v7), !v20) )
goto LABEL_30;
if ( dword_100E040 == 1 )
{
WriteFile(hFile, &unk_100CD54, 2u, &NumberOfBytesWritten, 0);
v12 = WriteFile(hFile, v20, 2 * v8, &NumberOfBytesWritten, 0);
}
else
{
if ( dword_100E040 == 2 )
{
v14 = WriteFile(hFile, &unk_100CD58, 2u, &NumberOfBytesWritten, 0);
sub_1007A58(v14, (int)v20, (int)v20, v8);
v13 = WriteFile(hFile, v20, 2 * v8, &NumberOfBytesWritten, 0);
sub_1007A58(v13, (int)v20, (int)v20, v8);
goto LABEL_28;
}
if ( dword_100E040 == 3 )
WriteFile(hFile, &unk_100CD50, 3u, &NumberOfBytesWritten, 0);
if ( dword_100E040 == 3 )
{
v9 = 0;
CodePage = 65001;
v10 = 0;
}
else
{
CodePage = GetACP();
v9 = &UsedDefaultChar;
v10 = 1024;
}
v11 = WideCharToMultiByte(CodePage, v10, (LPCWSTR)v20, v8, 0, 0, 0, v9);
if ( UsedDefaultChar || v8 && !v11 )
{
if ( sub_1007051(hWnd, szApp, dword_100C320, lpString1, 0x31u) == 2 )
{
LABEL_31:
SetCursor(dword_100C094);
CloseHandle(hFile);
hFile = (HANDLE)-1;
if ( hMem )
LocalUnlock(hMem);
if ( v15 )
DeleteFileW(lpString1);
if ( wParam )
sub_1007BA2();
return 0;
}
v10 = 0;
}
v12 = sub_1007A90(hFile, CodePage, v10, (LPCWSTR)v20, v8);
}
v13 = v12;
LABEL_28:
if ( !v13 )
{
SetCursor(dword_100C094);
LABEL_30:
sub_1007BF6(lpString1);
goto LABEL_31;
}
SetEndOfFile(hFile);
dword_100C00C = dword_100E040;
SendMessageW(dword_100C028, 0xB9u, 0, 0);
sub_1002456(lpString1);
dword_100C008 = 0;
CloseHandle(hFile);
hFile = (HANDLE)-1;
LocalUnlock(hMem);
if ( wParam )
sub_1007BA2();
SetCursor(dword_100C094);
return 1;
}
// 100C008: using guessed type int dword_100C008;
// 100C00C: using guessed type int dword_100C00C;
// 100E040: using guessed type int dword_100E040;

//----- (01007F99) --------------------------------------------------------
signed int __stdcall sub_1007F99(int a1, unsigned int a2, int a3)
{
signed int result; // eax@1
unsigned int v4; // edx@1
int v5; // eax@5
int v6; // ecx@5
unsigned int v7; // esi@5
signed int v8; // [sp+14h] [bp+Ch]@5

v4 = a2;
result = 0;
if ( !a2 || a2 > 0x7FFFFFFF )
result = -2147024809;
if ( result < 0 ) { v6 = 0; } else { v8 = 0; v6 = 0; v7 = v4; v5 = a1; if ( !v4 ) goto LABEL_17; do { if ( !*(_WORD *)v5 ) break; v5 += 2; --v7; } while ( v7 ); if ( v7 ) v6 = v4 - v7; else LABEL_17: v8 = -2147024809; result = v8; } if ( result >= 0 )
result = sub_1007C80(a3, v4 - v6, a1 + 2 * v6, 0, 2147483647);
return result;
}

//----- (0100800F) --------------------------------------------------------
signed int __stdcall sub_100800F(int a1)
{
signed int result; // eax@2
HLOCAL v2; // eax@3

if ( !a1 || (result = sub_1001664(0)) != 0 )
{
SendMessageW(dword_100C028, 12u, 0, (LPARAM)&szOtherStuff);
dword_100C008 = 1;
sub_1002558((int)&FileName, 0x104u, (int)lpString2);
sub_1002456(&FileName);
SendMessageW(dword_100C028, 0xB1u, 0, 0);
SendMessageW(dword_100C028, 0xB7u, 0, 0);
v2 = LocalReAlloc(hMem, 2u, 2u);
if ( v2 )
hMem = v2;
*(_WORD *)LocalLock(hMem) = 0;
LocalUnlock(hMem);
SendMessageW(dword_100C028, 0xBCu, (WPARAM)hMem, 0);
result = 0;
word_100C9E0 = 0;
}
return result;
}
// 100C008: using guessed type int dword_100C008;

//----- (010080E4) --------------------------------------------------------
int __stdcall sub_10080E4(int lpString, unsigned int a2)
{
int result; // eax@1
unsigned int i; // ecx@1
int v4; // edx@6

result = lstrlenW((LPCWSTR)lpString);
for ( i = lpString + 2 * result; ; i -= 2 )
{
v4 = *(_WORD *)i;
if ( v4 == 46 )
break;
if ( v4 == 92 || v4 == 58 || i <= lpString )
break;
}
if ( *(_WORD *)i != 46 )
{
result += 5;
if ( (unsigned int)result <= 0x104 )
result = sub_1007F99(lpString, a2, (int)L".txt");
}
return result;
}
// 1008134: using guessed type wchar_t a_txt_0[5];

//----- (01008143) --------------------------------------------------------
int __stdcall sub_1008143(int a1, int a2, int a3, int a4, int a5)
{
int v5; // eax@1
int result; // eax@3

v5 = FindNLSString(1024, a4 == 0 | 0x800000, a1, a2, a3, -1, a5);
if ( v5 == -1 || *(_DWORD *)a5 < 1 )
result = 0;
else
result = a1 + 2 * v5;
return result;
}
// 100102C: using guessed type int __stdcall FindNLSString(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD);

//----- (0100818F) --------------------------------------------------------
int __stdcall sub_100818F(int a1, int a2, int a3, int a4, int a5)
{
int v5; // eax@1
int result; // eax@3

v5 = FindNLSString(1024, a4 == 0 | 0x400000, a1, a2, a3, -1, a5);
if ( v5 == -1 || *(_DWORD *)a5 < 1 )
result = 0;
else
result = a1 + 2 * v5;
return result;
}
// 100102C: using guessed type int __stdcall FindNLSString(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD);

//----- (010081DB) --------------------------------------------------------
signed int __stdcall sub_10081DB(int a1)
{
signed int result; // eax@2
HMENU v2; // eax@3
HMENU v3; // eax@3
LRESULT v4; // eax@5
int v5; // ebx@6
int v6; // eax@9
int v7; // eax@11
int v8; // eax@12
int v9; // esi@13
HWND v10; // eax@15
HCURSOR v11; // edi@15
HMENU v12; // eax@19
HMENU v13; // [sp+4h] [bp-1Ch]@3
void *v14; // [sp+8h] [bp-18h]@5
signed int v15; // [sp+Ch] [bp-14h]@1
signed int v16; // [sp+10h] [bp-10h]@1
int v17; // [sp+14h] [bp-Ch]@11
WPARAM wParam; // [sp+18h] [bp-8h]@3
LPARAM lParam; // [sp+1Ch] [bp-4h]@3

v15 = 0;
v16 = 0;
if ( *(_WORD *)a1 )
{
SendMessageW(dword_100C028, 176u, (WPARAM)&wParam, (LPARAM)&lParam);
v2 = GetMenu(hWnd);
v13 = v2;
v3 = GetSubMenu(v2, 1);
if ( GetMenuState(v3, 0x19u, 0) == 1 )
{
v16 = 1;
lParam = 0;
}
v4 = SendMessageW(dword_100C028, 0xBDu, 0, 0);
v14 = (void *)v4;
if ( v4 && (v5 = (int)LocalLock((HLOCAL)v4)) != 0 )
{
if ( dword_100D79C )
{
v6 = lParam;
if ( wParam != lParam )
v6 = lParam - 1;
v7 = sub_1008143(v5, v6, a1, dword_100D798, (int)&v17);
}
else
{
v8 = GetWindowTextLengthW(dword_100C028);
v7 = sub_100818F(v5 + 2 * lParam, v8 - lParam, a1, dword_100D798, (int)&v17);
}
v9 = v7;
LocalUnlock(v14);
if ( v9 )
{
wParam = (v9 - v5) >> 1;
SendMessageW(dword_100C028, 0xB1u, wParam, wParam + v17);
if ( v16 )
{
v12 = GetSubMenu(v13, 1);
EnableMenuItem(v12, 0x19u, 0);
}
if ( !(stru_100C0C0.Flags & 0x20) )
{
SendMessageW(dword_100C028, 0xB7u, 0, 0);
sub_100170A(1u);
}
v15 = 1;
}
else
{
if ( !(stru_100C0C0.Flags & 0x20) )
{
v11 = SetCursor(dword_100C094);
v10 = dword_100CCE8;
if ( !dword_100CCE8 )
v10 = hWnd;
sub_1007051(v10, szApp, dword_100C2C4, &word_100C9E0, 0x40u);
SetCursor(v11);
}
}
result = v15;
}
else
{
result = 0;
}
}
else
{
result = 0;
}
return result;
}
// 100D798: using guessed type int dword_100D798;
// 100D79C: using guessed type int dword_100D79C;

//----- (01008383) --------------------------------------------------------
signed int __stdcall sub_1008383(DWORD hWnd)
{
LONG v2; // eax@12
struct tagRECT Rect; // [sp+Ch] [bp-38h]@8
int v4; // [sp+1Ch] [bp-28h]@17
int v5; // [sp+20h] [bp-24h]@17
int v6; // [sp+24h] [bp-20h]@17
int v7; // [sp+28h] [bp-1Ch]@17
WPARAM wParam; // [sp+2Ch] [bp-18h]@3
LPARAM lParam; // [sp+30h] [bp-14h]@8
LRESULT v10; // [sp+34h] [bp-10h]@3
DWORD v11; // [sp+38h] [bp-Ch]@1
HCURSOR hCursor; // [sp+3Ch] [bp-8h]@1
HLOCAL hMem; // [sp+40h] [bp-4h]@3
HWND v14; // [sp+4Ch] [bp+8h]@8

v11 = (hWnd >> 20) & 1;
hCursor = SetCursor(::hCursor);
if ( (hWnd >> 20) & 1 )
{
sub_1006FB9(1);
SendMessageW(dword_100C028, 0xC8u, 0, 0);
}
wParam = SendMessageW(dword_100C028, 0xB8u, 0, 0) != 0;
v10 = SendMessageW(dword_100C028, 0xEu, 0, 0);
hMem = LocalAlloc(2u, 2 * v10 + 2);
if ( !hMem )
{
if ( v11 )
SendMessageW(dword_100C028, 0xC8u, 1u, 0);
SetCursor(hCursor);
return 0;
}
GetClientRect(::hWnd, &Rect);
lParam = (LPARAM)LocalLock(hMem);
SendMessageW(dword_100C028, 0xDu, v10 + 1, lParam);
v14 = CreateWindowExW(
0x200u,
L"Edit",
&szOtherStuff,
hWnd,
0,
0,
Rect.right,
Rect.bottom,
::hWnd,
(HMENU)0xF,
hInstance,
0);
if ( !v14 )
{
SetCursor(hCursor);
if ( v11 )
SendMessageW(dword_100C028, 0xC8u, 1u, 0);
LABEL_11:
LocalUnlock(hMem);
LocalFree(hMem);
return 0;
}
v2 = GetWindowLongW(dword_100C028, -20);
SetWindowLongW(v14, -20, v2 | 0x200);
SendMessageW(v14, 0x30u, (WPARAM)ho, 1);
if ( !SendMessageW(v14, 0xCu, 0, lParam) )
{
SetCursor(hCursor);
if ( v11 )
SendMessageW(dword_100C028, 0xC8u, 1u, 0);
DestroyWindow(v14);
goto LABEL_11;
}
LocalUnlock(hMem);
LocalFree(hMem);
DestroyWindow(dword_100C028);
dword_100C028 = v14;
::hMem = (HLOCAL)SendMessageW(v14, 0xBDu, 0, 0);
PostMessageW(dword_100C028, 0xC5u, 0, 0);
ShowWindow(::hWnd, 5);
SendMessageW(dword_100C028, 0xB9u, wParam, 0);
SetFocus(dword_100C028);
SetCursor(hCursor);
if ( *(_DWORD *)&dword_100C02C )
{
GetClientRect(::hWnd, (LPRECT)&v4);
sub_1002409(v6 - v4, v7 - v5);
sub_100170A(1u);
ShowWindow(dword_100C024, 5);
}
return 1;
}

//----- (010085E5) --------------------------------------------------------
int __stdcall sub_10085E5(int a1, int a2, int a3, int a4)
{
int v4; // eax@1
int v5; // ebx@1
int v6; // eax@2
int v7; // ecx@3
int v9; // [sp+Ch] [bp-4h]@1

v4 = a1;
v5 = 0;
v9 = 0;
*(_DWORD *)a4 = 0;
while ( 1 )
{
v6 = sub_100818F(v4, a2 - ((v4 - a1) >> 1), a3, dword_100D798, (int)&v9);
if ( !v6 )
break;
v7 = v9;
++v5;
*(_DWORD *)a4 += v9;
v4 = v6 + 2 * v7;
}
return v5;
}
// 100D798: using guessed type int dword_100D798;

//----- (01008639) --------------------------------------------------------
size_t __cdecl sub_1008639()
{
LRESULT v0; // eax@1
size_t result; // eax@2
int v2; // eax@4
int v3; // ebx@4
int v4; // edi@4
int v5; // eax@4
int v6; // eax@7
int v7; // esi@7
int v8; // eax@7
HGLOBAL v9; // edi@8
int v10; // eax@11
int v11; // ebx@11
int v12; // eax@11
int v13; // ST2C_4@11
void *v14; // edi@11
char v15; // zf@11
void *v16; // [sp+4h] [bp-24h]@1
LPARAM v17; // [sp+8h] [bp-20h]@4
int v18; // [sp+10h] [bp-18h]@4
int v19; // [sp+14h] [bp-14h]@7
size_t Size; // [sp+18h] [bp-10h]@1
HGLOBAL hMem; // [sp+1Ch] [bp-Ch]@8
int v22; // [sp+20h] [bp-8h]@7
void *Src; // [sp+24h] [bp-4h]@3

Size = 0;
v0 = SendMessageW(dword_100C028, 0xBDu, 0, 0);
v16 = (void *)v0;
if ( v0 && (Src = LocalLock((HLOCAL)v0)) != 0 )
{
v5 = GetWindowTextLengthW(dword_100C028);
v4 = v5;
v17 = v5;
v2 = sub_10085E5((int)Src, v5, (int)&word_100C9E0, (int)&v18);
v3 = v2;
if ( v2 )
{
if ( v2 > 1 )
{
v8 = lstrlenW(stru_100C0C0.lpstrReplaceWith);
v19 = v8;
v22 = v4;
v6 = v4 + v3 * v8 - v18;
v7 = 2 * v6 + 2;
if ( v7 > 0 )
{
v9 = GlobalAlloc(0, 2 * v6 + 2);
hMem = v9;
if ( v9 )
{
if ( v3 > 0 )
{
Size = 2 * v19;
v18 = v3;
do
{
v10 = sub_100818F((int)Src, v22, (int)&word_100C9E0, dword_100D798, (int)&v19);
v11 = v10;
v12 = (v10 - (_DWORD)Src) >> 1;
v22 -= v12 + v19;
v13 = 2 * v12;
memcpy(v9, Src, 2 * v12);
v14 = (char *)v9 + v13;
memcpy(v14, stru_100C0C0.lpstrReplaceWith, Size);
v9 = (char *)v14 + Size;
v15 = v18-- == 1;
Src = (void *)(v11 + 2 * v19);
}
while ( !v15 );
}
memcpy(v9, Src, v7 - 2 * ((signed int)(v9 - hMem) >> 1));
SendMessageW(dword_100C028, 177u, 0, v17);
SendMessageW(dword_100C028, 0xC2u, 1u, (LPARAM)hMem);
GlobalFree(hMem);
Size = 1;
}
}
}
}
else
{
Size = 1;
}
LocalUnlock(v16);
result = Size;
}
else
{
result = 0;
}
return result;
}
// 100D798: using guessed type int dword_100D798;

//----- (010087C5) --------------------------------------------------------
bool __stdcall proc(int a1, int a2)
{
struct tagMSG Msg; // [sp+4h] [bp-1Ch]@2

while ( !dword_100DE34 && PeekMessageW(&Msg, 0, 0, 0, 1u) )
{
if ( !hDlg || !IsDialogMessageW(hDlg, &Msg) )
{
TranslateMessage(&Msg);
DispatchMessageW(&Msg);
}
}
return dword_100DE34 == 0;
}
// 100DE34: using guessed type int dword_100DE34;

//----- (0100882E) --------------------------------------------------------
int __stdcall sub_100882E(HDC hdc)
{
int result; // eax@1

dword_100D7D8 = GetDeviceCaps(hdc, 8);
dword_100D7D4 = GetDeviceCaps(hdc, 10);
dword_100D7D0 = GetDeviceCaps(hdc, 90);
dword_100D7CC = GetDeviceCaps(hdc, 110);
y = GetDeviceCaps(hdc, 111);
dword_100D7C4 = GetDeviceCaps(hdc, 112);
result = GetDeviceCaps(hdc, 113);
dword_100D7C0 = result;
return result;
}
// 100D7C0: using guessed type int dword_100D7C0;
// 100D7C4: using guessed type int dword_100D7C4;
// 100D7D0: using guessed type int dword_100D7D0;
// 100D7D4: using guessed type int dword_100D7D4;
// 100D7D8: using guessed type int dword_100D7D8;

//----- (0100888F) --------------------------------------------------------
BOOL __cdecl sub_100888F()
{
BOOL result; // eax@1

EnableWindow(hWnd, 1);
result = DestroyWindow(hDlg);
hDlg = 0;
return result;
}

//----- (010088B6) --------------------------------------------------------
signed int __cdecl sub_10088B6()
{
signed int result; // eax@3
const DEVMODEW *v1; // eax@4
LPVOID v2; // esi@4
HDC v3; // edi@6

if ( stru_100C140.hDevNames
|| (stru_100C140.Flags |= 0x400u,
PageSetupDlgW(&stru_100C140),
stru_100C140.Flags &= 0xFFFFFBFFu,
stru_100C140.hDevNames) )
{
v2 = GlobalLock(stru_100C140.hDevNames);
v1 = 0;
if ( stru_100C140.hDevMode )
v1 = (const DEVMODEW *)GlobalLock(stru_100C140.hDevMode);
v3 = CreateDCW((LPCWSTR)v2 + *(_WORD *)v2, (LPCWSTR)v2 + *((_WORD *)v2 + 1), 0, v1);
GlobalUnlock(stru_100C140.hDevNames);
if ( stru_100C140.hDevMode )
GlobalUnlock(stru_100C140.hDevMode);
if ( v3 )
{
result = (signed int)v3;
}
else
{
MessageBoxW(hWnd, dword_100C318, szApp, 0x30u);
result = -1;
}
}
else
{
MessageBoxW(hWnd, dword_100C318, szApp, 0x30u);
result = -1;
}
return result;
}

//----- (01008987) --------------------------------------------------------
signed int __cdecl sub_1008987()
{
HLOCAL v1; // esi@3
HDC v2; // edi@7
DWORD pcbNeeded; // [sp+8h] [bp-8h]@3
HANDLE hPrinter; // [sp+Ch] [bp-4h]@1

if ( !OpenPrinterW(&pPrinterName, &hPrinter, 0) )
return -1;
GetPrinterDriverW(hPrinter, 0, 1u, 0, 0, &pcbNeeded);
v1 = LocalAlloc(0x40u, pcbNeeded);
if ( !v1 )
goto LABEL_6;
if ( !GetPrinterDriverW(hPrinter, 0, 1u, (LPBYTE)v1, pcbNeeded, &pcbNeeded) )
{
LocalFree(v1);
LABEL_6:
ClosePrinter(hPrinter);
return -1;
}
stru_100C140.Flags |= 0x400u;
PageSetupDlgW(&stru_100C140);
stru_100C140.Flags &= 0xFFFFFBFFu;
v2 = CreateDCW(*(LPCWSTR *)v1, &pPrinterName, 0, 0);
LocalFree(v1);
ClosePrinter(hPrinter);
if ( !v2 )
{
MessageBoxW(hWnd, dword_100C318, szApp, 0x30u);
return -1;
}
return (signed int)v2;
}

//----- (01008A63) --------------------------------------------------------
signed int __stdcall sub_1008A63(HWND hWnd, int a2, int a3, int a4)
{
LPCWSTR v5; // eax@8

if ( a2 == 272 )
{
dword_100D7A0 = GetSystemMenu(hWnd, 0);
if ( dword_100C008 )
v5 = lpString2;
else
v5 = sub_1007008(&FileName);
SetDlgItemTextW(hWnd, 20, v5);
SetFocus(hWnd);
}
else
{
if ( a2 == 273 )
{
dword_100DE34 = 1;
sub_100888F();
}
else
{
if ( a2 != 278 )
return 0;
EnableMenuItem(dword_100D7A0, 0xF060u, 1u);
}
}
return 1;
}
// 100C008: using guessed type int dword_100C008;
// 100DE34: using guessed type int dword_100DE34;

//----- (01008AEF) --------------------------------------------------------
signed int __stdcall sub_1008AEF(int a1, int a2, int a3, int a4)
{
signed int result; // eax@1

result = 0;
if ( !a2 || (unsigned int)a2 > 0x7FFFFFFF )
result = -2147024809;
if ( result >= 0 )
{
if ( (unsigned int)a4 <= 0x7FFFFFFE )
{
result = sub_1007C80(a3, a2, a1, 0, a4);
}
else
{
result = -2147024809;
*(_WORD *)a1 = 0;
}
}
return result;
}

//----- (01008B3E) --------------------------------------------------------
int *__stdcall sub_1008B3E(int a1)
{
const WCHAR v1; // cx@1
int *result; // eax@2
int *v3; // edx@4
int v4; // edi@4
int *v5; // ebx@6
int v6; // edi@6
int v7; // edx@8
int v8; // edx@9
__int16 v9; // cx@9
int v10; // eax@29
int v11; // eax@31
int v12; // eax@32
int v13; // edx@34
char v14; // zf@34
wint_t v15; // ax@35
int v16; // edx@35
int v17; // edx@36
signed int v18; // ecx@50
int v19; // edx@51
const WCHAR *v20; // [sp-8h] [bp-238h]@30
int v21; // [sp-4h] [bp-234h]@30
int v22; // [sp+Ch] [bp-224h]@1
int v23; // [sp+10h] [bp-220h]@1
int v24; // [sp+14h] [bp-21Ch]@1
int v25; // [sp+18h] [bp-218h]@29
int v26; // [sp+1Ch] [bp-214h]@1
int v27; // [sp+20h] [bp-210h]@1
const WCHAR Buf; // [sp+24h] [bp-20Ch]@38
unsigned int v29; // [sp+22Ch] [bp-4h]@1
int v30; // [sp+230h] [bp+0h]@1

v29 = (unsigned int)&v30 ^ dword_100C010;
v1 = *(_WORD *)a1;
v27 = a1;
v26 = 1;
v22 = 0;
v23 = 0;
v24 = 0;
if ( v1 )
{
result = (int *)dword_100C300;
LABEL_5:
if ( v1 )
goto LABEL_3;
while ( 1 )
{
v5 = &v22 + v26;
v6 = *v5;
if ( (unsigned int)*v5 >= 0x104 || v6 < 0 ) return result; v7 = v27; if ( *(_WORD *)v27 == 38 ) break; LABEL_49: v1 = *(_WORD *)v7; if ( !*(_WORD *)v7 ) goto LABEL_50; LABEL_3: if ( v1 != 38 ) { v27 += 2; v3 = &v22 + v26; v4 = *v3; *(&word_100D800 + *v3 + 260 * v26) = v1; v1 = *(_WORD *)v27; *v3 = v4 + 1; goto LABEL_5; } } v8 = v27 + 2; v9 = *(_WORD *)(v27 + 2); v27 += 2; if ( v9 == *(_WORD *)result || v9 == *((_WORD *)result + 1) ) { if ( dword_100C008 ) sub_1002558((int)&Buf, 0x104u, (int)lpString2); else GetFileTitleW(&FileName, (LPWSTR)&Buf, 0x104u); if ( v6 + lstrlenW(&Buf) >= 260 )
goto LABEL_47;
sub_1002558((int)(&word_100D800 + v6 + 260 * v26), 260 - v6, (int)&Buf);
v11 = v6 + lstrlenW(&Buf);
goto LABEL_46;
}
if ( v9 == *((_WORD *)result + 2) || v9 == *((_WORD *)result + 3) )
{
v25 = 0;
v13 = v8 + 2;
v14 = *(_WORD *)v13 == 43;
v27 = v13;
if ( v14 )
{
v16 = v13 + 2;
v15 = *(_WORD *)v16;
v27 = v16;
while ( iswctype(v15, 4u) )
{
v17 = *(_WORD *)v27;
v27 += 2;
v15 = *(_WORD *)v27;
v25 = 10 * v25 + v17 - 48;
}
}
sub_10015C3((wchar_t *)&Buf, 0x104u, L"%d", v25 + *(_DWORD *)dword_100D7AC);
if ( v6 + lstrlenW(&Buf) < 260 )
{
sub_1002558((int)(&word_100D800 + v6 + 260 * v26), 260 - v6, (int)&Buf);
*v5 = v6 + lstrlenW(&Buf);
}
v27 -= 2;
goto LABEL_47;
}
if ( v9 == *((_WORD *)result + 4) || v9 == *((_WORD *)result + 5) )
{
v12 = lstrlenW(&word_100CF68);
v25 = v6 + v12;
if ( v6 + v12 < 260 )
{
v21 = v12;
v20 = &word_100CF68;
goto LABEL_31;
}
}
else
{
if ( v9 != *((_WORD *)result + 6) && v9 != *((_WORD *)result + 7) )
{
if ( v9 == 38 )
{
if ( v6 + 1 < 260 )
{
*(&word_100D800 + v6 + 260 * v26) = 38;
*v5 = v6 + 1;
}
}
else
{
if ( v9 == *((_WORD *)result + 8) || v9 == *((_WORD *)result + 9) )
{
v26 = 1;
}
else
{
if ( v9 == *((_WORD *)result + 10) || v9 == *((_WORD *)result + 11) )
{
v26 = 2;
}
else
{
if ( v9 == *((_WORD *)result + 12) || v9 == *((_WORD *)result + 13) )
v26 = 0;
}
}
}
goto LABEL_48;
}
v10 = lstrlenW(&word_100CD60);
v25 = v6 + v10;
if ( v6 + v10 < 260 )
{
v21 = v10;
v20 = &word_100CD60;
LABEL_31:
sub_1008AEF((int)(&word_100D800 + v6 + 260 * v26), 260 - v6, (int)v20, v21);
v11 = v25;
LABEL_46:
*v5 = v11;
goto LABEL_47;
}
}
LABEL_47:
result = (int *)dword_100C300;
LABEL_48:
v7 = v27 + 2;
v27 += 2;
goto LABEL_49;
}
LABEL_50:
v18 = 0;
result = &v22;
do
{
v19 = v18 + *result;
v18 += 260;
++result;
*(&word_100D800 + v19) = 0;
}
while ( v18 <= 520 );
return result;
}
// 100C008: using guessed type int dword_100C008;
// 100C010: using guessed type int dword_100C010;
// 100C300: using guessed type int dword_100C300;

//----- (01008EF2) --------------------------------------------------------
signed int __stdcall sub_1008EF2(HDC hdc, int y)
{
__int16 v2; // bx@1
signed int result; // eax@2
int v4; // eax@4
int v5; // eax@7
int v6; // eax@9
int v7; // edi@9
int v8; // eax@9
int v9; // eax@11
int v10; // edi@11
int v11; // eax@11
struct tagSIZE psizl; // [sp+4h] [bp-8h]@9
int v13; // [sp+18h] [bp+Ch]@6

v2 = 0;
if ( *(&word_100C740 + 40 * y) )
{
sub_1008B3E((int)(&word_100C740 + 40 * y));
if ( y )
v4 = dword_100D7D4 - dword_100DE30 - dword_100D7B8;
else
v4 = dword_100D7BC;
v13 = v4;
if ( word_100D800 )
{
v5 = lstrlenW(&word_100D800);
TextOutW(hdc, x, v13, &word_100D800, v5);
}
if ( word_100DA08 )
{
v6 = lstrlenW(&word_100DA08);
GetTextExtentPoint32W(hdc, &word_100DA08, v6, &psizl);
v7 = (x + dword_100D7D8 - dword_100D7B0) / 2 - psizl.cx / 2;
v8 = lstrlenW(&word_100DA08);
TextOutW(hdc, v7, v13, &word_100DA08, v8);
v2 = 0;
}
if ( word_100DC10 != v2 )
{
v9 = lstrlenW(&word_100DC10);
GetTextExtentPoint32W(hdc, &word_100DC10, v9, &psizl);
v10 = dword_100D7D8 - dword_100D7B0 - psizl.cx;
v11 = lstrlenW(&word_100DC10);
TextOutW(hdc, v10, v13, &word_100DC10, v11);
}
result = 1;
}
else
{
result = 0;
}
return result;
}
// 100D7B0: using guessed type int dword_100D7B0;
// 100D7B8: using guessed type int dword_100D7B8;
// 100D7BC: using guessed type int dword_100D7BC;
// 100D7D4: using guessed type int dword_100D7D4;
// 100D7D8: using guessed type int dword_100D7D8;
// 100DE30: using guessed type int dword_100DE30;

//----- (0100900D) --------------------------------------------------------
signed int __stdcall sub_100900D(HDC a1)
{
HFONT v1; // eax@1
DWORD v2; // esi@1
HDC v3; // ST0C_4@1
HFONT v4; // eax@5
HGDIOBJ v5; // eax@5
__int32 v6; // eax@16
DWORD v7; // edi@21
LRESULT v8; // eax@22
int v9; // ebx@31
signed int result; // eax@59
struct tagTEXTMETRICW tm; // [sp+Ch] [bp-3C8h]@3
struct tagDRAWTEXTPARAMS dtp; // [sp+48h] [bp-38Ch]@34
int v13; // [sp+5Ch] [bp-378h]@25
WCHAR *v14; // [sp+60h] [bp-374h]@25
int v15; // [sp+64h] [bp-370h]@25
int v16; // [sp+68h] [bp-36Ch]@25
int v17; // [sp+6Ch] [bp-368h]@25
struct tagRECT rc; // [sp+70h] [bp-364h]@27
int v19; // [sp+80h] [bp-354h]@27
HLOCAL hMem; // [sp+84h] [bp-350h]@1
int v21; // [sp+88h] [bp-34Ch]@1
HGDIOBJ ho; // [sp+8Ch] [bp-348h]@1
int v23; // [sp+90h] [bp-344h]@1
HGDIOBJ h; // [sp+94h] [bp-340h]@1
LPCWSTR lpchText; // [sp+98h] [bp-33Ch]@1
HDC hdc; // [sp+9Ch] [bp-338h]@1
LOGFONTW lf; // [sp+A0h] [bp-334h]@1
WCHAR String; // [sp+FCh] [bp-2D8h]@24
wchar_t Dest; // [sp+304h] [bp-D0h]@34
unsigned int v30; // [sp+3D0h] [bp-4h]@1
int v31; // [sp+3D4h] [bp+0h]@1

v30 = (unsigned int)&v31 ^ dword_100C010;
hdc = a1;
hMem = 0;
h = 0;
v23 = 0;
v21 = 0;
lpchText = 0;
dword_100DE34 = 0;
hDlg = 0;
SetCursor(hCursor);
sub_100882E(a1);
GetLocalTime(&SystemTime);
GetDateFormatW(0x400u, 2u, &SystemTime, 0, (LPWSTR)&word_100CD60, 260);
GetTimeFormatW(0x400u, 0, &SystemTime, 0, (LPWSTR)&word_100CF68, 260);
memcpy(&lf, &::lf, sizeof(lf));
lf.lfWidth = 0;
lf.lfHeight = *(_DWORD *)&Data * dword_100D7D0 / -720;
((void (__fastcall *)(signed int, int, HDC, signed int))SetMapMode)(
-720,
*(_DWORD *)&Data * dword_100D7D0 % -720,
a1,
8);
SetViewportExtEx(a1, dword_100D7CC, y, 0);
SetWindowExtEx(a1, stru_100C140.ptPaperSize.x, stru_100C140.ptPaperSize.y, 0);
pt.x = stru_100C140.rtMargin.left;
pt.y = stru_100C140.rtMargin.top;
*((_DWORD *)&pt + 2) = stru_100C140.rtMargin.right;
v3 = hdc;
*((_DWORD *)&pt + 3) = stru_100C140.rtMargin.bottom;
LPtoDP(v3, &pt, 2);
SetMapMode(hdc, 1);
v1 = CreateFontIndirectW(&lf);
ho = v1;
v2 = 0;
if ( !v1
|| (h = SelectObject(hdc, v1), !h)
|| (SetBkMode(hdc, 1), !GetTextMetricsW(hdc, &tm))
|| !(tm.tmPitchAndFamily & 6)
&& ((v5 = SelectObject(hdc, h),
DeleteObject(v5),
memset(lf.lfFaceName, 0, 0x40u),
v4 = CreateFontIndirectW(&lf),
ho = v4,
!v4)
|| (h = SelectObject(hdc, v4), !h)
|| !GetTextMetricsW(hdc, &tm)) )
goto LABEL_54;
dword_100DE3C = 8 * tm.tmAveCharWidth;
dword_100DE30 = tm.tmHeight + tm.tmExternalLeading;
x = pt.x - dword_100D7C4;
if ( pt.x - dword_100D7C4 <= 0 ) x = 0; dword_100D7B0 = dword_100DE28 + dword_100D7D8 - dword_100D7CC + dword_100D7C4; if ( dword_100DE28 + dword_100D7D8 - dword_100D7CC + dword_100D7C4 <= 0 ) dword_100D7B0 = 0; dword_100D7BC = pt.y - dword_100D7C0; if ( pt.y - dword_100D7C0 <= 0 ) dword_100D7BC = 0; dword_100D7B8 = dword_100DE2C + dword_100D7D4 - y + dword_100D7C0; if ( dword_100DE2C + dword_100D7D4 - y + dword_100D7C0 <= 0 ) dword_100D7B8 = 0; v6 = (dword_100D7D4 - dword_100D7B8 - dword_100D7BC) / (tm.tmHeight + tm.tmExternalLeading); if ( word_100C740 ) --v6; if ( *(_WORD *)&Dst ) --v6; if ( v6 <= 0 ) { LABEL_53: MessageBoxW(hWnd, dword_100C324, szApp, 0x30u); SetLastError(v2); LABEL_54: v7 = GetLastError(); goto LABEL_41; } v7 = SetAbortProc(hdc, (ABORTPROC)proc); if ( (signed int)v7 < 0 ) goto LABEL_41; v8 = SendMessageW(dword_100C028, 0xBDu, 0, 0); hMem = (HLOCAL)v8; if ( !v8 || (lpchText = (LPCWSTR)LocalLock((HLOCAL)v8), !lpchText) || (GetWindowTextW(hWnd, &String, 260), EnableWindow(hWnd, 0), hDlg = CreateDialogParamW(hInstance, (LPCWSTR)0xB, hWnd, (DLGPROC)sub_1008A63, 0), !hDlg) ) goto LABEL_54; v13 = 20; v14 = &String; v15 = 0; v16 = 0; v17 = 0; SetLastError(0); if ( StartDocW(hdc, (const DOCINFOW *)&v13) > 0 )
{
v21 = 1;
*(_DWORD *)dword_100D7AC = 1;
rc.left = x;
v19 = 0;
rc.right = dword_100D7D8 - dword_100D7B0;
rc.top = dword_100D7BC;
v23 = 0;
rc.bottom = dword_100D7D4 - dword_100D7B8;
if ( word_100C740 )
rc.top += dword_100DE30;
if ( *(_WORD *)&Dst )
rc.bottom = dword_100D7D4 - dword_100D7B8 - dword_100DE30;
v9 = lstrlenW(lpchText);
if ( GetWindowLongW(dword_100C028, -20) & 0x2000 )
v19 = 131074;
while ( 1 )
{
if ( dword_100DE34 || v9 <= 0 )
{
v7 = 0;
goto LABEL_40;
}
sub_10015C3(&Dest, 0x65u, dword_100C344, *(_DWORD *)dword_100D7AC);
SetDlgItemTextW(hDlg, 21, &Dest);
sub_1008EF2(hdc, 0);
dtp.iLeftMargin = 0;
dtp.iRightMargin = 0;
dtp.uiLengthDrawn = 0;
dtp.cbSize = 20;
dtp.iTabLength = dword_100DE3C;
if ( StartPage(hdc) <= 0
|| (v23 = 1,
DrawTextExW(hdc, (LPWSTR)lpchText, v9, &rc, v19 | 0x2850, &dtp),
sub_1008EF2(hdc, 1),
EndPage(hdc) <= 0) )
goto LABEL_26;
v23 = 0;
++*(_DWORD *)dword_100D7AC;
if ( !dtp.uiLengthDrawn )
break;
lpchText += dtp.uiLengthDrawn;
v9 -= dtp.uiLengthDrawn;
}
v2 = 0;
goto LABEL_53;
}
LABEL_26:
v7 = GetLastError();
LABEL_40:
v2 = 0;
LABEL_41:
if ( h != (HGDIOBJ)v2 )
{
SelectObject(hdc, h);
DeleteObject(ho);
}
if ( lpchText != (LPCWSTR)v2 )
LocalUnlock(hMem);
if ( v23 != v2 )
{
if ( EndPage(hdc) <= 0 )
{
if ( v7 == v2 )
v7 = GetLastError();
}
}
if ( v21 != v2 )
{
if ( dword_100DE34 == v2 )
{
if ( EndDoc(hdc) <= 0 )
{
if ( v7 == v2 )
v7 = GetLastError();
}
}
else
{
AbortDoc(hdc);
}
}
DeleteDC(hdc);
sub_100888F();
SetCursor(dword_100C094);
if ( dword_100DE34 == v2 )
result = v7;
else
result = -3;
return result;
}
// 100C010: using guessed type int dword_100C010;
// 100D7B0: using guessed type int dword_100D7B0;
// 100D7B8: using guessed type int dword_100D7B8;
// 100D7BC: using guessed type int dword_100D7BC;
// 100D7C0: using guessed type int dword_100D7C0;
// 100D7C4: using guessed type int dword_100D7C4;
// 100D7D0: using guessed type int dword_100D7D0;
// 100D7D4: using guessed type int dword_100D7D4;
// 100D7D8: using guessed type int dword_100D7D8;
// 100DE28: using guessed type int dword_100DE28;
// 100DE2C: using guessed type int dword_100DE2C;
// 100DE30: using guessed type int dword_100DE30;
// 100DE34: using guessed type int dword_100DE34;
// 100DE3C: using guessed type int dword_100DE3C;

//----- (010096AE) --------------------------------------------------------
bool __stdcall sub_10096AE(LCID Locale)
{
WCHAR LCData; // [sp+0h] [bp-24h]@1
int v3; // [sp+Eh] [bp-16h]@2
unsigned int v4; // [sp+20h] [bp-4h]@1
int v5; // [sp+24h] [bp+0h]@1

v4 = (unsigned int)&v5 ^ dword_100C010;
return GetLocaleInfoW(Locale, 0x58u, &LCData, 16) && v3 & 0x800;
}
// 100C010: using guessed type int dword_100C010;

//----- (010096F8) --------------------------------------------------------
bool __stdcall sub_10096F8(int a1)
{
LANGID v1; // ax@2
bool result; // eax@2

if ( a1 == 1 )
{
v1 = GetUserDefaultUILanguage();
result = sub_10096AE(v1);
}
else
{
result = a1 == 6 || a1 == 23 || a1 == 10 || a1 == 8;
}
return result;
}

//----- (0100973A) --------------------------------------------------------
bool __stdcall sub_100973A(bool a1)
{
bool result; // eax@1
char v2; // zf@2
WCHAR LCData[2]; // [sp+4h] [bp-4h]@1

*(_DWORD *)LCData = 1;
result = sub_10096AE(0x400u);
if ( result )
{
GetLocaleInfoW(0x400u, 0x20001009u, LCData, 2);
v2 = sub_10096F8(*(int *)LCData) == 0;
result = a1;
if ( v2 )
*(_DWORD *)a1 |= 0x10u;
else
*(_DWORD *)a1 |= 0x20u;
}
return result;
}

//----- (0100978A) --------------------------------------------------------
LRESULT __stdcall sub_100978A(int a1)
{
struct _SYSTEMTIME SystemTime; // [sp+8h] [bp-3ECh]@1
DWORD dwFlags; // [sp+18h] [bp-3DCh]@1
WCHAR DateStr; // [sp+1Ch] [bp-3D8h]@1
_WORD lParam[330]; // [sp+BCh] [bp-338h]@1
WCHAR TimeStr; // [sp+350h] [bp-A4h]@1
unsigned int v7; // [sp+3F0h] [bp-4h]@1
int v8; // [sp+3F4h] [bp+0h]@1

v7 = (unsigned int)&v8 ^ dword_100C010;
lParam[0] = 0;
memset(&lParam[1], 0, 0x292u);
dwFlags = 1;
GetLocalTime(&SystemTime);
sub_100973A((bool)&dwFlags);
GetDateFormatW(0x400u, dwFlags, &SystemTime, 0, &DateStr, 80);
GetTimeFormatW(0x400u, 2u, &SystemTime, 0, &TimeStr, 80);
if ( a1 )
sub_1007F99((int)lParam, 0x14Au, (int)L"\r\n");
sub_1007F99((int)lParam, 0x14Au, (int)&TimeStr);
sub_1007F99((int)lParam, 0x14Au, (int)&dword_10098B8);
sub_1007F99((int)lParam, 0x14Au, (int)&DateStr);
if ( a1 )
sub_1007F99((int)lParam, 0x14Au, (int)L"\r\n");
return SendMessageW(dword_100C028, 0xC2u, 1u, (LPARAM)lParam);
}
// 10098B8: using guessed type int dword_10098B8;
// 10098BC: using guessed type wchar_t asc_10098BC[3];
// 100C010: using guessed type int dword_100C010;

//----- (010098C7) --------------------------------------------------------
signed int __stdcall sub_10098C7(int a1, int a2)
{
int v2; // edx@1
int v3; // ecx@1
signed int v4; // esi@1
unsigned __int8 v5; // al@2
signed int result; // eax@8

v3 = 0;
v4 = 1;
v2 = 0;
if ( a2 <= 0 ) goto LABEL_8; do { v5 = *(_BYTE *)(v3 + a1); if ( (char)v5 < 0 ) v4 = 0; if ( v2 ) { if ( (v5 & 0xC0) != -128 ) goto LABEL_8; --v2; } else { if ( v5 >= 0x80u )
{
do
{
v5 *= 2;
++v2;
}
while ( (char)v5 < 0 );
--v2;
if ( !v2 )
goto LABEL_8;
}
}
++v3;
}
while ( v3 < a2 );
if ( v2 || v4 )
LABEL_8:
result = 0;
else
result = 1;
return result;
}

//----- (0100991D) --------------------------------------------------------
BOOL __stdcall sub_100991D(const void *lpv, int iSize)
{
BOOL result; // eax@1
int iResult; // [sp+0h] [bp-4h]@1

iResult = -1;
result = IsTextUnicode(lpv, iSize, &iResult);
if ( result )
{
if ( iResult == 2 )
{
if ( iSize < 100 )
result = 0;
}
}
return result;
}

//----- (01009952) --------------------------------------------------------
signed int __usercall sub_1009952(int a1, int a2, int a3)
{
signed int result; // eax@1
int v4; // ecx@1
int v5; // esi@1

v5 = a1;
result = 0;
v4 = a2;
if ( !a2 )
goto LABEL_12;
do
{
if ( !*(_WORD *)v5 )
break;
v5 += 2;
--a2;
}
while ( a2 );
if ( !a2 )
LABEL_12:
result = -2147024809;
if ( a3 )
{
if ( result < 0 )
*(_DWORD *)a3 = 0;
else
*(_DWORD *)a3 = v4 - a2;
}
return result;
}

//----- (01009989) --------------------------------------------------------
signed int __stdcall sub_1009989(HWND hwnd, int a2, __int16 a3, int a4)
{
BOOL v4; // eax@6
signed int v5; // edi@6
HWND v7; // eax@14
HWND v8; // eax@14
OLECHAR *v9; // edi@18
int v10; // eax@22
struct _SHELLEXECUTEINFOW ExecInfo; // [sp+Ch] [bp-368h]@12
HWND ppv; // [sp+48h] [bp-32Ch]@1
struct _OSVERSIONINFOW VersionInformation; // [sp+4Ch] [bp-328h]@6
char v14; // [sp+166h] [bp-20Eh]@7
WCHAR Buffer; // [sp+168h] [bp-20Ch]@11
unsigned int v16; // [sp+370h] [bp-4h]@1
int v17; // [sp+374h] [bp+0h]@1

v16 = (unsigned int)&v17 ^ dword_100C010;
ppv = GetAncestor(hwnd, 2u);
if ( a2 == 78 )
{
v10 = *(_DWORD *)(a4 + 8);
if ( (v10 == -4 || v10 == -2) && *(_DWORD *)(a4 + 4) == 51202 )
{
v5 = 1;
if ( LoadStringW((HINSTANCE)0x1000000, 0xC808u, &Buffer, 260) )
{
memset(&ExecInfo.fMask, 0, 0x38u);
ExecInfo.lpFile = &Buffer;
ExecInfo.cbSize = 60;
ExecInfo.nShow = 1;
ExecInfo.fMask = 256;
ShellExecuteExW(&ExecInfo);
}
return v5;
}
return 0;
}
if ( a2 == 83 )
{
ppv = 0;
if ( CoInitialize(0) >= 0 )
{
if ( CoCreateInstance(&stru_10043E0, 0, 0x17u, &stru_10043D0, (LPVOID *)&ppv) >= 0 )
{
if ( LoadStringW((HINSTANCE)0x1000000, 0xC805u, &Buffer, 260) )
{
v9 = SysAllocString(&Buffer);
if ( v9 )
{
(*(void (__stdcall **)(HWND, OLECHAR *))(*(_DWORD *)ppv + 16))(ppv, v9);
SysFreeString(v9);
}
}
(*(void (__stdcall **)(HWND))(*(_DWORD *)ppv + 8))(ppv);
}
CoUninitialize();
}
return 0;
}
if ( a2 == 272 )
{
v7 = GetParent(hwnd);
PostMessageW(v7, 1162u, 16u, 20);
v8 = GetParent(hwnd);
PostMessageW(v8, 0x48Bu, 0x10u, 17);
SetWindowPos(ppv, HWND_MESSAGE|0x2, 0, 0, 0, 0, 3u);
return 1;
}
if ( a2 != 273 || a3 != -14335 )
return 0;
SetWindowPos(ppv, (HWND)0xFFFFFFFE, 0, 0, 0, 0, 3u);
VersionInformation.dwOSVersionInfoSize = 284;
v4 = GetVersionExW(&VersionInformation);
v5 = 1;
if ( v4 )
v4 = v14 == 3 || v14 == 2;
if ( LoadStringW((HINSTANCE)0x1000000, 51207 - (v4 != 0), &Buffer, 260) )
{
memset(&ExecInfo.fMask, 0, 0x38u);
ExecInfo.lpFile = &Buffer;
ExecInfo.cbSize = 60;
ExecInfo.nShow = 1;
ExecInfo.fMask = 256;
ShellExecuteExW(&ExecInfo);
}
PostMessageW(ppv, 0x10u, 0, 0);
return v5;
}
// 100C010: using guessed type int dword_100C010;

//----- (01009C2A) --------------------------------------------------------
void __stdcall StartAddress(int a1)
{
const PROPSHEETPAGEW_V3 constPropSheetPagePointer; // [sp+8h] [bp-70h]@1
const PROPSHEETHEADERW_V2 v2; // [sp+40h] [bp-38h]@2
HPROPSHEETPAGE v3; // [sp+74h] [bp-4h]@1

memset(&constPropSheetPagePointer.dwFlags, 0, 0x34u);
constPropSheetPagePointer.dwSize = 56;
constPropSheetPagePointer.dwFlags = 4096;
constPropSheetPagePointer.hInstance = (HINSTANCE)16777216;
constPropSheetPagePointer.pszTemplate = (LPCWSTR)51200;
constPropSheetPagePointer.pfnDlgProc = (DLGPROC)sub_1009989;
constPropSheetPagePointer.pszHeaderTitle = (LPCWSTR)51203;
constPropSheetPagePointer.lParam = 0;
v3 = CreatePropertySheetPageW(&constPropSheetPagePointer);
if ( v3 )
{
memset(&v2.dwFlags, 0, 0x30u);
v2.ppsp = (LPCPROPSHEETPAGEW)&v3;
v2.dwSize = 52;
v2.dwFlags = 16416;
v2.hwndParent = 0;
v2.hInstance = (HINSTANCE)16777216;
v2.pszCaption = (LPCWSTR)51204;
v2.nPages = 1;
PropertySheetW(&v2);
}
InterlockedExchange(&Target, 0);
FreeLibraryAndExitThread((HMODULE)0x1000000, 0);
}

//----- (01009CDF) --------------------------------------------------------
signed int __stdcall sub_1009CDF(int a1, int a2, int a3)
{
signed int result; // eax@1

result = 0;
if ( !a2 || (unsigned int)a2 > 0x7FFFFFFF )
result = -2147024809;
if ( result >= 0 )
result = sub_1007C80(a3, a2, a1, 0, 2147483646);
return result;
}

//----- (01009D19) --------------------------------------------------------
signed int __stdcall sub_1009D19(int a1, int a2, int a3)
{
signed int result; // eax@1
int v4; // ebx@4
int v5; // ecx@5

result = 0;
if ( !a2 || (unsigned int)a2 > 0x7FFFFFFF )
result = -2147024809;
v4 = a1;
if ( result < 0 ) { v5 = 0; } else { result = sub_1009952(a1, a2, (int)&a1); v5 = a1; } if ( result >= 0 )
result = sub_1007C80(a3, a2 - v5, v4 + 2 * v5, 0, 2147483647);
return result;
}

//----- (01009D73) --------------------------------------------------------
int __cdecl sub_1009D73(int a1, int a2, int a3, int a4)
{
return except_handler4_common(&dword_100C010, sub_1001564, a1, a2, a3, a4);
}
// 1009FF1: using guessed type int __cdecl except_handler4_common(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
// 100C010: using guessed type int dword_100C010;

//----- (01009D9D) --------------------------------------------------------
int __stdcall sub_1009D9D(int a1)
{
_DWORD *v1; // eax@1
int v2; // eax@3

v1 = *(_DWORD **)a1;
if ( **(_DWORD **)a1 == -529697949 )
{
if ( v1[4] == 3 )
{
v2 = v1[5];
if ( v2 == 429065504 || v2 == 429065505 || v2 == 429065506 || v2 == 26820608 )
terminate();
}
}
return 0;
}
// 100132C: using guessed type void __cdecl terminate();

//----- (01009DF0) --------------------------------------------------------
bool __cdecl sub_1009DF0(int a1)
{
bool result; // eax@2
int v2; // eax@3

if ( *(_WORD *)a1 != 23117 || (v2 = a1 + *(_DWORD *)(a1 + 60), *(_DWORD *)v2 != 17744) )
result = 0;
else
result = *(_WORD *)(v2 + 24) == 267;
return result;
}

//----- (01009E2A) --------------------------------------------------------
int __cdecl sub_1009E2A(int a1, unsigned int a2)
{
int result; // eax@1
unsigned int v3; // edx@1
unsigned int v4; // esi@1
int v5; // ecx@1
unsigned int v6; // ecx@2

v5 = a1 + *(_DWORD *)(a1 + 60);
v4 = *(_WORD *)(v5 + 6);
v3 = 0;
result = *(_WORD *)(v5 + 20) + v5 + 24;
if ( *(_WORD *)(v5 + 6) )
{
while ( 1 )
{
v6 = *(_DWORD *)(result + 12);
if ( a2 >= v6 )
{
if ( a2 < v6 + *(_DWORD *)(result + 8) ) break; } ++v3; result += 40; if ( v3 >= v4 )
goto LABEL_5;
}
}
else
{
LABEL_5:
result = 0;
}
return result;
}

//----- (01009E73) --------------------------------------------------------
int __usercall sub_1009E73(int a1)
{
sub_1003B0C((int)dword_1009EE0, 8);
*(_DWORD *)(a1 - 4) = 0;
if ( sub_1009DF0(16777216) && sub_1009E2A(16777216, *(_DWORD *)(a1 + 8) - 16777216) )
*(_DWORD *)(a1 - 4) = -2;
else
*(_DWORD *)(a1 - 4) = -2;
return sub_10023D0(a1);
}
// 10023D0: using guessed type _DWORD __usercall sub_10023D0(_DWORD ebp0);
// 1009EE0: using guessed type int dword_1009EE0[2];

//----- (01009F07) --------------------------------------------------------
BOOL __usercall sub_1009F07(char _CF, char _ZF, char _SF, char _OF, int a5, int a6, int a7, int a8, int a9, int a10, char a11)
{
int v12; // ST04_4@1
int v13; // ST330_4@1
HANDLE v14; // eax@1
int v15; // [sp+32Ch] [bp+4h]@1

dword_100C470 = a5;
dword_100C46C = a7;
dword_100C468 = a6;
dword_100C464 = a8;
dword_100C460 = a10;
dword_100C45C = a9;
word_100C488 = __SS__;
word_100C47C = __CS__;
word_100C458 = __DS__;
word_100C454 = __ES__;
word_100C450 = __FS__;
word_100C44C = __GS__;
__asm { pushf }
dword_100C480 = v12;
dword_100C474 = v13;
dword_100C478 = v15;
dword_100C484 = (int)&a11;
dword_100C3C0 = 65537;
dword_100C37C = dword_100C478;
dword_100C370 = -1073740791;
dword_100C374 = 1;
SetUnhandledExceptionFilter(0);
UnhandledExceptionFilter(&ExceptionInfo);
v14 = GetCurrentProcess();
return TerminateProcess(v14, 0xC0000409u);
}
// 100C370: using guessed type int dword_100C370;
// 100C374: using guessed type int dword_100C374;
// 100C37C: using guessed type int dword_100C37C;
// 100C3C0: using guessed type int dword_100C3C0;
// 100C44C: using guessed type __int16 word_100C44C;
// 100C450: using guessed type __int16 word_100C450;
// 100C454: using guessed type __int16 word_100C454;
// 100C458: using guessed type __int16 word_100C458;
// 100C45C: using guessed type int dword_100C45C;
// 100C460: using guessed type int dword_100C460;
// 100C464: using guessed type int dword_100C464;
// 100C468: using guessed type int dword_100C468;
// 100C46C: using guessed type int dword_100C46C;
// 100C470: using guessed type int dword_100C470;
// 100C474: using guessed type int dword_100C474;
// 100C478: using guessed type int dword_100C478;
// 100C47C: using guessed type __int16 word_100C47C;
// 100C480: using guessed type int dword_100C480;
// 100C484: using guessed type int dword_100C484;
// 100C488: using guessed type __int16 word_100C488;

#error "There were 1 decompilation failure(s) on 140 function(s)"