各种开源的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 <windows.h> #include <defs.h> #include <stdarg.h> //------------------------------------------------------------------------- // 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<eax>(void *a1<ecx>, int a2<ebx>, 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<ebp>, void (__stdcall *a2)(_DWORD, _DWORD, _DWORD, _DWORD)<esi>, 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<eax>(void *a1<ecx>, int a2<ebx>, HWND a3, unsigned __int16 a4, int a5); __int32 __cdecl sub_1001963(); HGLOBAL __cdecl sub_1001A1C(); // void __userpurge sub_1001A4D(const WCHAR *a1<ebx>, int a2<ebp>, int (__stdcall *a3)(_DWORD, _DWORD, _DWORD, _DWORD)<esi>, int a4); // int __usercall sub_1001A72<eax>(int a1<ebp>); 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<eax>(_DWORD ebp0<ebp>); 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<eax>(unsigned __int16 *a1<eax>, 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<eax>(unsigned int a1<eax>, int a2<ecx>); // int __userpurge sub_1002820<eax>(int a1<ebp>, 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<eax>(int a1<ebp>); int dword_1003784(); // weak int dword_100378C(); // weak int dword_1003790(); // weak int dword_100379C(); // weak int dword_10037A0(); // weak // ATOM __usercall sub_10037EF<ax>(HINSTANCE a1<esi>); 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<eax>(int a1<ebp>, 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<eax>(int a1<ebx>, 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<eax>(int a1<ebx>, int a2, int a3); // double __userpurge sub_1004038<st0>(int a1<eax>, int a2<ebp>, int a3<esi>, double result<st0>, 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<ebx>, int a2<ebp>, int a3<esi>); 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<ebp>, HWND a2<edi>); // int __usercall sub_1006C68<eax>(int a1<ebp>); // void __usercall sub_1006C7C(int a1<ebp>); 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<eax>(int a1<ebp>); void __stdcall sub_10079E3(HDROP hDrop, HWND hWnd); int __stdcall Proc(int a1, int a2, int a3, int a4); // int __userpurge sub_1007A58<eax>(int result<eax>, 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<eax>(int a1<eax>, int a2<edx>, int a3<ecx>, 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<eax>(int a1<eax>, int a2<edx>, int a3<edi>); 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<eax>(int a1<ebp>); // int __cdecl amsg_exit(_DWORD); weak // BOOL __usercall sub_1009F07<eax>(char _CF<cf>, char _ZF<zf>, char _SF<sf>, char _OF<of>, int a5<eax>, int a6<edx>, int a7<ecx>, int a8<ebx>, int a9<edi>, int a10<esi>, 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<eax>(void *a1<ecx>, int a2<ebx>, 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<ebp>, void (__stdcall *a2)(_DWORD, _DWORD, _DWORD, _DWORD)<esi>, 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<eax>(void *a1<ecx>, int a2<ebx>, 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<ebx>, int a2<ebp>, int (__stdcall *a3)(_DWORD, _DWORD, _DWORD, _DWORD)<esi>, 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<eax>(int a1<ebp>) { sub_1001564((void *)(a1 ^ *(_DWORD *)(a1 - 28))); return sub_10023D0(a1); } // 10023D0: using guessed type _DWORD __usercall sub_10023D0<eax>(_DWORD ebp0<ebp>); //----- (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<eax>(unsigned __int16 *a1<eax>, 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<eax>(unsigned int a1<eax>, int a2<ecx>) { 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<eax>(int a1<ebp>, 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<eax>(int a1<ebp>) { 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<eax>(_DWORD ebp0<ebp>); // 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<ax>(HINSTANCE a1<esi>) { 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<eax>(int a1<ebp>, 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<eax>(_DWORD ebp0<ebp>); // 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<eax>(int a1<ebx>, 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<eax>(int a1<ebx>, 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<st0>(int a1<eax>, int a2<ebp>, int a3<esi>, double result<st0>, 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)<st0>(int<eax>, int<ebp>, int<esi>, double<st0>, 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 *)<st0>(int<eax>, int<ebp>, int<esi>, double<st0>, 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<ebx>, int a2<ebp>, int a3<esi>) { 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<ebp>, HWND a2<edi>) { 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<eax>(int a1<ebp>) { 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<ebp>) { 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<eax>(int a1<ebp>) { 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<eax>(int result<eax>, 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<eax>(int a1<eax>, int a2<edx>, int a3<ecx>, 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" "); 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" "); 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<eax>(int a1<eax>, int a2<edx>, int a3<edi>) { 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<eax>(int a1<ebp>) { 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<eax>(_DWORD ebp0<ebp>); // 1009EE0: using guessed type int dword_1009EE0[2]; //----- (01009F07) -------------------------------------------------------- BOOL __usercall sub_1009F07<eax>(char _CF<cf>, char _ZF<zf>, char _SF<sf>, char _OF<of>, int a5<eax>, int a6<edx>, int a7<ecx>, int a8<ebx>, int a9<edi>, int a10<esi>, 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)"