各种开源的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"\r\n");
sub_1007F99((int)lParam, 0x14Au, (int)&TimeStr);
sub_1007F99((int)lParam, 0x14Au, (int)&dword_10098B8);
sub_1007F99((int)lParam, 0x14Au, (int)&DateStr);
if ( a1 )
sub_1007F99((int)lParam, 0x14Au, (int)L"\r\n");
return SendMessageW(dword_100C028, 0xC2u, 1u, (LPARAM)lParam);
}
// 10098B8: using guessed type int dword_10098B8;
// 10098BC: using guessed type wchar_t asc_10098BC[3];
// 100C010: using guessed type int dword_100C010; //----- (010098C7) --------------------------------------------------------
signed int __stdcall sub_10098C7(int a1, int a2)
{
int v2; // edx@1
int v3; // ecx@1
signed int v4; // esi@1
unsigned __int8 v5; // al@2
signed int result; // eax@8 v3 = 0;
v4 = 1;
v2 = 0;
if ( a2 <= 0 )
goto LABEL_8;
do
{
v5 = *(_BYTE *)(v3 + a1);
if ( (char)v5 < 0 )
v4 = 0;
if ( v2 )
{
if ( (v5 & 0xC0) != -128 )
goto LABEL_8;
--v2;
}
else
{
if ( v5 >= 0x80u )
{
do
{
v5 *= 2;
++v2;
}
while ( (char)v5 < 0 );
--v2;
if ( !v2 )
goto LABEL_8;
}
}
++v3;
}
while ( v3 < a2 );
if ( v2 || v4 )
LABEL_8:
result = 0;
else
result = 1;
return result;
} //----- (0100991D) --------------------------------------------------------
BOOL __stdcall sub_100991D(const void *lpv, int iSize)
{
BOOL result; // eax@1
int iResult; // [sp+0h] [bp-4h]@1 iResult = -1;
result = IsTextUnicode(lpv, iSize, &iResult);
if ( result )
{
if ( iResult == 2 )
{
if ( iSize < 100 )
result = 0;
}
}
return result;
} //----- (01009952) --------------------------------------------------------
signed int __usercall sub_1009952<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)"

[C++] 反编译器的更多相关文章

  1. 【转】推荐一款Java反编译器,比较好用

    转自:http://www.blogjava.net/xmatthew/archive/2008/10/28/237203.html 推荐一款Java反编译器,也使用了挺久的了,感觉还是很好用,就拿出 ...

  2. Java反编译器安装及各版本介绍

    JAVA语言是1995年5月由SUN公司发布的,由于其安全性高.代码优化.跨平台等特性,迅速取代了很多传统高级语言,占据了企业级网络应用开发等诸多领域的霸主地位.         不过,JAVA最突出 ...

  3. class 文件反编译器的 java 实现

    最近由于公司项目需要,了解了很多关于类加载方面的知识,给项目带来了一些热部署方面的突破. 由于最近手头工作不太忙,同时驱于对更底层知识的好奇与渴求,因此决定学习了一下 class 文件结构,并通过一周 ...

  4. .NET dnSpy 程序集编辑器,反编译器和调试器

    https://github.com/0xd4d/dnSpy https://github.com/0xd4d/dnSpy/releases/ dnSpy是反向工程.NET程序集的工具.它包括一个反编 ...

  5. 推荐一款Java反编译器,比较好用

    转自:http://www.blogjava.net/xmatthew/archive/2008/10/28/237203.html 推荐一款Java反编译器,也使用了挺久的了,感觉还是很好用,就拿出 ...

  6. Eclipse 反编译器

    Help-->Install New SoftWare 贴上反编译地址:http://opensource.cpupk.com/decompiler/update/ 选择add,一路向北,起飞.

  7. c++ de-mangle 反编译器命名工具:c++filt

    nm *.so | c++filt c++filt  symblo

  8. JetBrains发布了一款免费的.NET反编译器dotPeek

    Free .NET decompiler :: JetBrains dotPeek 主要的功能: Decompiling .NET 1.0-4.5 assemblies to C# Exporting ...

  9. 打造一个简单的Java字节码反编译器

    简介 本文示范了一种反编译Java字节码的方法,首先通过解析class文件,然后将解析的结果转成java代码.但是本文并没有覆盖所有的class文件的特性和指令,只针对部分规范进行解析. 所有的代码代 ...

随机推荐

  1. 使用jquery.qrcode生成二维码实现微信分享功能

    前言: 最近有个这样的需求,在pc端的商品详情页增加分享功能. 微博分享.QQ好友分享.QQ空间分享这些都很常见.但是微信分享我还没有手动写过(以前改过). 最终效果如下图: 解决方案:使用jquer ...

  2. UVA 10603 - Fill BFS~

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&c ...

  3. div宽度设置width:100%后再设置padding或margin超出父元素的解决办法

    div宽度设置width:100%后再设置padding或margin超出父元素的解决办法 一.总结 一句话总结:直接加上box-sizing:border-box;即可解决上述问题. 1.box-s ...

  4. webuploader 小demo

    页面写法 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  5. IntelliJ IDEA设置鼠标悬浮提示

    测试代码; public interface MyInterface { /** * 我是接口方法的注释 * @param num1 我是接口方法入参的注释 * @return 我是接口方法返回值的注 ...

  6. java痛苦学习之路[十二]JSON+ajax+Servlet JSON数据转换和传递

    1.首先client须要引入 jquery-1.11.1.js 2.其次javawebproject里面须要引入jar包  [commons-beanutils-1.8.0.jar.commons-c ...

  7. POST提交数据时四种常见的数据格式

    最近项目部署到新环境tomcat+mysql,想看看项目部署成功没有,就用soupui调对应接口开测试,soupui使用比较简单,给上接口地址,入参xml报文,把入参的media Type设置为app ...

  8. [TypeScript] Find the repeated item in an array using TypeScript

    Say you have an array that has at least one item repeated. How would you find the repeated item. Thi ...

  9. freemarker自己定义标签报错(七)

    1.错误描写叙述 六月 09, 2014 11:11:09 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Template pr ...

  10. hibernate框架配置文件

    配置文件:和自己封装的工具类放在同一个包中 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ...