INT WINAPI WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ INT nCmdShow ) { PH_STRINGREF commandLine; BeInstanceHandle = hInstance; CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); PhInitializePhLibEx(PHLIB_INIT_MODULE_FILE_STREAM, 512 * 1024, 16 * 1024); PhApplicationName = L"Backup Explorer"; PhUnicodeStringToStringRef(&NtCurrentPeb()->ProcessParameters->CommandLine, &commandLine); PhParseCommandLine( &commandLine, NULL, 0, PH_COMMAND_LINE_IGNORE_FIRST_PART, BeCommandLineCallback, NULL ); PhGuiSupportInitialization(); PhTreeNewInitialization(); BeWindowHandle = CreateDialog( hInstance, MAKEINTRESOURCE(IDD_EXPLORER), NULL, BeExplorerDlgProc ); BeRegisterDialog(BeWindowHandle); ShowWindow(BeWindowHandle, SW_SHOW); return BeMessageLoop(); }
INT WINAPI wWinMain( _In_ HINSTANCE Instance, _In_opt_ HINSTANCE PrevInstance, _In_ PWSTR CmdLine, _In_ INT CmdShow ) { CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); if (!NT_SUCCESS(PhInitializePhLibEx(ULONG_MAX, Instance, 0, 0))) return 1; PhApplicationName = L"Process Hacker - Setup"; PhGuiSupportInitialization(); SetupInitializeDpi(); SetupInitializeMutant(); SetupParseCommandLine(); switch (SetupMode) { case SETUP_COMMAND_INSTALL: default: SetupShowInstallDialog(); break; case SETUP_COMMAND_UNINSTALL: SetupShowUninstallDialog(); break; case SETUP_COMMAND_UPDATE: case SETUP_COMMAND_SILENTINSTALL: SetupShowUpdateDialog(SetupMode); break; case SETUP_COMMAND_REPAIR: break; } return ERROR_SUCCESS; }
INT WINAPI wWinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ PWSTR lpCmdLine, _In_ INT nCmdShow ) { LONG result; #ifdef DEBUG PHP_BASE_THREAD_DBG dbg; #endif CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); #ifndef DEBUG SetErrorMode(SEM_NOOPENFILEERRORBOX | SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX); #endif PhInstanceHandle = (HINSTANCE)NtCurrentPeb()->ImageBaseAddress; if (!NT_SUCCESS(PhInitializePhLib())) return 1; if (!PhInitializeAppSystem()) return 1; PhInitializeCommonControls(); if (PhCurrentTokenQueryHandle) { PTOKEN_USER tokenUser; if (NT_SUCCESS(PhGetTokenUser(PhCurrentTokenQueryHandle, &tokenUser))) { PhCurrentUserName = PhGetSidFullName(tokenUser->User.Sid, TRUE, NULL); PhFree(tokenUser); } } PhLocalSystemName = PhGetSidFullName(&PhSeLocalSystemSid, TRUE, NULL); // There has been a report of the above call failing. if (!PhLocalSystemName) PhLocalSystemName = PhCreateString(L"NT AUTHORITY\\SYSTEM"); PhApplicationFileName = PhGetApplicationFileName(); PhApplicationDirectory = PhGetApplicationDirectory(); // Just in case if (!PhApplicationFileName) PhApplicationFileName = PhCreateString(L"ProcessHacker.exe"); if (!PhApplicationDirectory) PhApplicationDirectory = PhReferenceEmptyString(); PhpProcessStartupParameters(); PhSettingsInitialization(); PhpEnablePrivileges(); if (PhStartupParameters.RunAsServiceMode) { RtlExitUserProcess(PhRunAsServiceStart(PhStartupParameters.RunAsServiceMode)); } PhpInitializeSettings(); // Activate a previous instance if required. if (PhGetIntegerSetting(L"AllowOnlyOneInstance") && !PhStartupParameters.NewInstance && !PhStartupParameters.ShowOptions && !PhStartupParameters.CommandMode && !PhStartupParameters.PhSvc) { PhActivatePreviousInstance(); } if (PhGetIntegerSetting(L"EnableKph") && !PhStartupParameters.NoKph && !PhIsExecutingInWow64()) PhInitializeKph(); if (PhStartupParameters.CommandMode && PhStartupParameters.CommandType && PhStartupParameters.CommandAction) { NTSTATUS status; status = PhCommandModeStart(); if (!NT_SUCCESS(status) && !PhStartupParameters.Silent) { PhShowStatus(NULL, L"Unable to execute the command", status, 0); } RtlExitUserProcess(status); } #ifdef DEBUG dbg.ClientId = NtCurrentTeb()->ClientId; dbg.StartAddress = wWinMain; dbg.Parameter = NULL; InsertTailList(&PhDbgThreadListHead, &dbg.ListEntry); TlsSetValue(PhDbgThreadDbgTlsIndex, &dbg); #endif PhInitializeAutoPool(&BaseAutoPool); PhEmInitialization(); PhGuiSupportInitialization(); PhTreeNewInitialization(); PhGraphControlInitialization(); PhHexEditInitialization(); PhColorBoxInitialization(); PhSmallIconSize.X = GetSystemMetrics(SM_CXSMICON); PhSmallIconSize.Y = GetSystemMetrics(SM_CYSMICON); PhLargeIconSize.X = GetSystemMetrics(SM_CXICON); PhLargeIconSize.Y = GetSystemMetrics(SM_CYICON); if (PhStartupParameters.ShowOptions) { // Elevated options dialog for changing the value of Replace Task Manager with Process Hacker. PhShowOptionsDialog(PhStartupParameters.WindowHandle); RtlExitUserProcess(STATUS_SUCCESS); } #ifndef DEBUG if (PhIsExecutingInWow64() && !PhStartupParameters.PhSvc) { PhShowWarning( NULL, L"You are attempting to run the 32-bit version of Process Hacker on 64-bit Windows. " L"Most features will not work correctly.\n\n" L"Please run the 64-bit version of Process Hacker instead." ); } #endif PhPluginsEnabled = PhGetIntegerSetting(L"EnablePlugins") && !PhStartupParameters.NoPlugins; if (PhPluginsEnabled) { PhPluginsInitialization(); PhLoadPlugins(); } if (PhStartupParameters.PhSvc) { MSG message; // Turn the feedback cursor off. PostMessage(NULL, WM_NULL, 0, 0); GetMessage(&message, NULL, 0, 0); RtlExitUserProcess(PhSvcMain(NULL, NULL, NULL)); } // Create a mutant for the installer. { HANDLE mutantHandle; OBJECT_ATTRIBUTES oa; UNICODE_STRING mutantName; RtlInitUnicodeString(&mutantName, L"\\BaseNamedObjects\\ProcessHacker2Mutant"); InitializeObjectAttributes( &oa, &mutantName, 0, NULL, NULL ); NtCreateMutant(&mutantHandle, MUTANT_ALL_ACCESS, &oa, FALSE); } // Set priority. { PROCESS_PRIORITY_CLASS priorityClass; priorityClass.Foreground = FALSE; priorityClass.PriorityClass = PROCESS_PRIORITY_CLASS_HIGH; if (PhStartupParameters.PriorityClass != 0) priorityClass.PriorityClass = (UCHAR)PhStartupParameters.PriorityClass; NtSetInformationProcess(NtCurrentProcess(), ProcessPriorityClass, &priorityClass, sizeof(PROCESS_PRIORITY_CLASS)); } if (!PhMainWndInitialization(nCmdShow)) { PhShowError(NULL, L"Unable to initialize the main window."); return 1; } PhDrainAutoPool(&BaseAutoPool); result = PhMainMessageLoop(); RtlExitUserProcess(result); }
INT WINAPI wWinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ PWSTR lpCmdLine, _In_ INT nCmdShow ) { PROPSHEETPAGE propSheetPage = { sizeof(PROPSHEETPAGE) }; PROPSHEETHEADER propSheetHeader = { sizeof(PROPSHEETHEADER) }; HPROPSHEETPAGE pages[5]; if (!NT_SUCCESS(PhInitializePhLibEx(0, 0, 0))) return 1; CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); PhApplicationName = L"Process Hacker - Setup"; PhGuiSupportInitialization(); PvpInitializeDpi(); propSheetHeader.dwFlags = PSH_NOAPPLYNOW | PSH_NOCONTEXTHELP | PSH_USECALLBACK | PSH_WIZARD_LITE; propSheetHeader.hInstance = PhLibImageBase; propSheetHeader.pszIcon = MAKEINTRESOURCE(IDI_ICON1); propSheetHeader.pfnCallback = MainPropSheet_Callback; propSheetHeader.phpage = pages; // page memset(&propSheetPage, 0, sizeof(PROPSHEETPAGE)); propSheetPage.dwSize = sizeof(PROPSHEETPAGE); propSheetPage.dwFlags = PSP_USETITLE; propSheetPage.pszTitle = PhApplicationName; propSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_DIALOG1); propSheetPage.pfnDlgProc = PropSheetPage1_WndProc; pages[propSheetHeader.nPages++] = CreatePropertySheetPage(&propSheetPage); // page memset(&propSheetPage, 0, sizeof(PROPSHEETPAGE)); propSheetPage.dwSize = sizeof(PROPSHEETPAGE); propSheetPage.dwFlags = PSP_USETITLE; propSheetPage.pszTitle = PhApplicationName; propSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_DIALOG2); propSheetPage.pfnDlgProc = PropSheetPage2_WndProc; pages[propSheetHeader.nPages++] = CreatePropertySheetPage(&propSheetPage); // page memset(&propSheetPage, 0, sizeof(PROPSHEETPAGE)); propSheetPage.dwSize = sizeof(PROPSHEETPAGE); propSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_DIALOG3); propSheetPage.pfnDlgProc = PropSheetPage3_WndProc; pages[propSheetHeader.nPages++] = CreatePropertySheetPage(&propSheetPage); // page memset(&propSheetPage, 0, sizeof(PROPSHEETPAGE)); propSheetPage.dwSize = sizeof(PROPSHEETPAGE); propSheetPage.dwFlags = PSP_USETITLE; propSheetPage.pszTitle = PhApplicationName; propSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_DIALOG4); propSheetPage.pfnDlgProc = PropSheetPage4_WndProc; pages[propSheetHeader.nPages++] = CreatePropertySheetPage(&propSheetPage); // page memset(&propSheetPage, 0, sizeof(PROPSHEETPAGE)); propSheetPage.dwSize = sizeof(PROPSHEETPAGE); propSheetPage.dwFlags = PSP_USETITLE; propSheetPage.pszTitle = PhApplicationName; propSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_DIALOG5); propSheetPage.pfnDlgProc = PropSheetPage5_WndProc; pages[propSheetHeader.nPages++] = CreatePropertySheetPage(&propSheetPage); PhModalPropertySheet(&propSheetHeader); return EXIT_SUCCESS; }